From 879d10e60a251dfb5ef4c8cc0f7aa25d456d7d15 Mon Sep 17 00:00:00 2001 From: Ziyang Zhou Date: Sun, 20 Nov 2022 10:02:51 +0800 Subject: [PATCH] remove unsed headers --- prebuilts/aarch64/include/gbm.h | 461 -- .../aarch64/include/libavcodec/ac3_parser.h | 36 - .../aarch64/include/libavcodec/adts_parser.h | 37 - .../aarch64/include/libavcodec/avcodec.h | 4184 ------------- prebuilts/aarch64/include/libavcodec/avdct.h | 88 - prebuilts/aarch64/include/libavcodec/avfft.h | 118 - prebuilts/aarch64/include/libavcodec/bsf.h | 325 - prebuilts/aarch64/include/libavcodec/codec.h | 480 -- .../aarch64/include/libavcodec/codec_desc.h | 128 - .../aarch64/include/libavcodec/codec_id.h | 592 -- .../aarch64/include/libavcodec/codec_par.h | 229 - .../aarch64/include/libavcodec/d3d11va.h | 112 - prebuilts/aarch64/include/libavcodec/dirac.h | 131 - .../aarch64/include/libavcodec/dv_profile.h | 83 - prebuilts/aarch64/include/libavcodec/dxva2.h | 93 - prebuilts/aarch64/include/libavcodec/jni.h | 46 - .../aarch64/include/libavcodec/mediacodec.h | 101 - prebuilts/aarch64/include/libavcodec/packet.h | 774 --- prebuilts/aarch64/include/libavcodec/qsv.h | 107 - prebuilts/aarch64/include/libavcodec/vaapi.h | 86 - prebuilts/aarch64/include/libavcodec/vdpau.h | 176 - .../aarch64/include/libavcodec/version.h | 172 - .../aarch64/include/libavcodec/videotoolbox.h | 127 - .../include/libavcodec/vorbis_parser.h | 74 - prebuilts/aarch64/include/libavcodec/xvmc.h | 170 - .../aarch64/include/libavdevice/avdevice.h | 519 -- .../aarch64/include/libavdevice/version.h | 53 - .../aarch64/include/libavfilter/avfilter.h | 1178 ---- .../aarch64/include/libavfilter/buffersink.h | 205 - .../aarch64/include/libavfilter/buffersrc.h | 209 - .../aarch64/include/libavfilter/version.h | 75 - .../aarch64/include/libavformat/avformat.h | 3012 ---------- prebuilts/aarch64/include/libavformat/avio.h | 888 --- .../aarch64/include/libavformat/version.h | 123 - prebuilts/aarch64/include/libavutil/adler32.h | 72 - prebuilts/aarch64/include/libavutil/aes.h | 65 - prebuilts/aarch64/include/libavutil/aes_ctr.h | 88 - .../aarch64/include/libavutil/attributes.h | 173 - .../aarch64/include/libavutil/audio_fifo.h | 187 - .../aarch64/include/libavutil/avassert.h | 75 - .../aarch64/include/libavutil/avconfig.h | 6 - .../aarch64/include/libavutil/avstring.h | 437 -- prebuilts/aarch64/include/libavutil/avutil.h | 365 -- prebuilts/aarch64/include/libavutil/base64.h | 72 - .../aarch64/include/libavutil/blowfish.h | 82 - prebuilts/aarch64/include/libavutil/bprint.h | 219 - prebuilts/aarch64/include/libavutil/bswap.h | 109 - prebuilts/aarch64/include/libavutil/buffer.h | 353 -- .../aarch64/include/libavutil/camellia.h | 70 - prebuilts/aarch64/include/libavutil/cast5.h | 80 - .../include/libavutil/channel_layout.h | 238 - prebuilts/aarch64/include/libavutil/common.h | 608 -- prebuilts/aarch64/include/libavutil/cpu.h | 133 - prebuilts/aarch64/include/libavutil/crc.h | 100 - prebuilts/aarch64/include/libavutil/des.h | 77 - prebuilts/aarch64/include/libavutil/dict.h | 200 - prebuilts/aarch64/include/libavutil/display.h | 114 - .../aarch64/include/libavutil/dovi_meta.h | 70 - .../aarch64/include/libavutil/downmix_info.h | 115 - .../include/libavutil/encryption_info.h | 205 - prebuilts/aarch64/include/libavutil/error.h | 126 - prebuilts/aarch64/include/libavutil/eval.h | 137 - .../aarch64/include/libavutil/ffversion.h | 5 - prebuilts/aarch64/include/libavutil/fifo.h | 179 - prebuilts/aarch64/include/libavutil/file.h | 71 - .../include/libavutil/film_grain_params.h | 168 - prebuilts/aarch64/include/libavutil/frame.h | 997 ---- prebuilts/aarch64/include/libavutil/hash.h | 270 - .../include/libavutil/hdr_dynamic_metadata.h | 343 -- prebuilts/aarch64/include/libavutil/hmac.h | 100 - .../aarch64/include/libavutil/hwcontext.h | 605 -- .../include/libavutil/hwcontext_cuda.h | 69 - .../include/libavutil/hwcontext_d3d11va.h | 169 - .../aarch64/include/libavutil/hwcontext_drm.h | 169 - .../include/libavutil/hwcontext_dxva2.h | 75 - .../include/libavutil/hwcontext_mediacodec.h | 36 - .../include/libavutil/hwcontext_opencl.h | 100 - .../aarch64/include/libavutil/hwcontext_qsv.h | 53 - .../include/libavutil/hwcontext_vaapi.h | 117 - .../include/libavutil/hwcontext_vdpau.h | 44 - .../libavutil/hwcontext_videotoolbox.h | 60 - .../include/libavutil/hwcontext_vulkan.h | 204 - .../aarch64/include/libavutil/imgutils.h | 291 - .../aarch64/include/libavutil/intfloat.h | 77 - .../aarch64/include/libavutil/intreadwrite.h | 644 -- prebuilts/aarch64/include/libavutil/lfg.h | 80 - prebuilts/aarch64/include/libavutil/log.h | 401 -- prebuilts/aarch64/include/libavutil/lzo.h | 66 - prebuilts/aarch64/include/libavutil/macros.h | 50 - .../libavutil/mastering_display_metadata.h | 128 - .../aarch64/include/libavutil/mathematics.h | 243 - prebuilts/aarch64/include/libavutil/md5.h | 98 - prebuilts/aarch64/include/libavutil/mem.h | 706 --- .../aarch64/include/libavutil/motion_vector.h | 57 - prebuilts/aarch64/include/libavutil/murmur3.h | 121 - prebuilts/aarch64/include/libavutil/opt.h | 886 --- .../aarch64/include/libavutil/parseutils.h | 193 - prebuilts/aarch64/include/libavutil/pixdesc.h | 442 -- .../aarch64/include/libavutil/pixelutils.h | 52 - prebuilts/aarch64/include/libavutil/pixfmt.h | 616 -- .../aarch64/include/libavutil/random_seed.h | 43 - .../aarch64/include/libavutil/rational.h | 220 - prebuilts/aarch64/include/libavutil/rc4.h | 66 - .../aarch64/include/libavutil/replaygain.h | 50 - prebuilts/aarch64/include/libavutil/ripemd.h | 88 - .../aarch64/include/libavutil/samplefmt.h | 272 - prebuilts/aarch64/include/libavutil/sha.h | 95 - prebuilts/aarch64/include/libavutil/sha512.h | 97 - .../aarch64/include/libavutil/spherical.h | 232 - .../aarch64/include/libavutil/stereo3d.h | 233 - prebuilts/aarch64/include/libavutil/tea.h | 71 - .../aarch64/include/libavutil/threadmessage.h | 115 - prebuilts/aarch64/include/libavutil/time.h | 56 - .../aarch64/include/libavutil/timecode.h | 199 - .../aarch64/include/libavutil/timestamp.h | 78 - prebuilts/aarch64/include/libavutil/tree.h | 138 - prebuilts/aarch64/include/libavutil/twofish.h | 70 - prebuilts/aarch64/include/libavutil/tx.h | 135 - prebuilts/aarch64/include/libavutil/version.h | 150 - .../include/libavutil/video_enc_params.h | 171 - prebuilts/aarch64/include/libavutil/xtea.h | 94 - prebuilts/aarch64/include/libdrm/amdgpu.h | 1876 ------ prebuilts/aarch64/include/libdrm/amdgpu_drm.h | 1157 ---- .../include/libdrm/android/gralloc_handle.h | 111 - prebuilts/aarch64/include/libdrm/drm.h | 1183 ---- prebuilts/aarch64/include/libdrm/drm_fourcc.h | 1365 ----- prebuilts/aarch64/include/libdrm/drm_mode.h | 1129 ---- prebuilts/aarch64/include/libdrm/drm_sarea.h | 92 - prebuilts/aarch64/include/libdrm/i915_drm.h | 1915 ------ prebuilts/aarch64/include/libdrm/mach64_drm.h | 256 - prebuilts/aarch64/include/libdrm/mga_drm.h | 427 -- prebuilts/aarch64/include/libdrm/msm_drm.h | 308 - .../aarch64/include/libdrm/nouveau/nouveau.h | 280 - .../include/libdrm/nouveau/nvif/cl0080.h | 45 - .../include/libdrm/nouveau/nvif/cl9097.h | 44 - .../include/libdrm/nouveau/nvif/class.h | 141 - .../include/libdrm/nouveau/nvif/if0002.h | 38 - .../include/libdrm/nouveau/nvif/if0003.h | 33 - .../include/libdrm/nouveau/nvif/ioctl.h | 132 - .../include/libdrm/nouveau/nvif/unpack.h | 28 - .../aarch64/include/libdrm/nouveau_drm.h | 256 - prebuilts/aarch64/include/libdrm/qxl_drm.h | 158 - prebuilts/aarch64/include/libdrm/r128_drm.h | 336 -- .../aarch64/include/libdrm/r600_pci_ids.h | 487 -- prebuilts/aarch64/include/libdrm/radeon_bo.h | 73 - .../aarch64/include/libdrm/radeon_bo_gem.h | 48 - .../aarch64/include/libdrm/radeon_bo_int.h | 45 - prebuilts/aarch64/include/libdrm/radeon_cs.h | 141 - .../aarch64/include/libdrm/radeon_cs_gem.h | 41 - .../aarch64/include/libdrm/radeon_cs_int.h | 67 - prebuilts/aarch64/include/libdrm/radeon_drm.h | 1079 ---- .../aarch64/include/libdrm/radeon_surface.h | 149 - prebuilts/aarch64/include/libdrm/savage_drm.h | 220 - prebuilts/aarch64/include/libdrm/sis_drm.h | 77 - prebuilts/aarch64/include/libdrm/tegra_drm.h | 1060 ---- prebuilts/aarch64/include/libdrm/vc4_drm.h | 442 -- prebuilts/aarch64/include/libdrm/vc4_packet.h | 397 -- .../aarch64/include/libdrm/vc4_qpu_defines.h | 274 - prebuilts/aarch64/include/libdrm/via_drm.h | 283 - .../aarch64/include/libdrm/virtgpu_drm.h | 182 - prebuilts/aarch64/include/libdrm/vmwgfx_drm.h | 1128 ---- .../aarch64/include/libpostproc/postprocess.h | 107 - .../aarch64/include/libpostproc/version.h | 45 - .../include/libswresample/swresample.h | 579 -- .../aarch64/include/libswresample/version.h | 45 - .../aarch64/include/libswscale/swscale.h | 336 -- .../aarch64/include/libswscale/version.h | 53 - prebuilts/aarch64/include/va/va.h | 5269 ----------------- prebuilts/aarch64/include/va/va_android.h | 49 - prebuilts/aarch64/include/va/va_backend.h | 695 --- .../aarch64/include/va/va_backend_prot.h | 81 - prebuilts/aarch64/include/va/va_backend_vpp.h | 74 - prebuilts/aarch64/include/va/va_compat.h | 116 - prebuilts/aarch64/include/va/va_dec_av1.h | 695 --- prebuilts/aarch64/include/va/va_dec_hevc.h | 616 -- prebuilts/aarch64/include/va/va_dec_jpeg.h | 155 - prebuilts/aarch64/include/va/va_dec_vp8.h | 249 - prebuilts/aarch64/include/va/va_dec_vp9.h | 312 - prebuilts/aarch64/include/va/va_drm.h | 61 - prebuilts/aarch64/include/va/va_drmcommon.h | 179 - prebuilts/aarch64/include/va/va_egl.h | 29 - prebuilts/aarch64/include/va/va_enc_av1.h | 995 ---- prebuilts/aarch64/include/va/va_enc_h264.h | 659 --- prebuilts/aarch64/include/va/va_enc_hevc.h | 958 --- prebuilts/aarch64/include/va/va_enc_jpeg.h | 162 - prebuilts/aarch64/include/va/va_enc_mpeg2.h | 308 - prebuilts/aarch64/include/va/va_enc_vp8.h | 350 -- prebuilts/aarch64/include/va/va_enc_vp9.h | 603 -- prebuilts/aarch64/include/va/va_fei.h | 168 - prebuilts/aarch64/include/va/va_fei_h264.h | 504 -- prebuilts/aarch64/include/va/va_fei_hevc.h | 251 - prebuilts/aarch64/include/va/va_prot.h | 515 -- prebuilts/aarch64/include/va/va_str.h | 49 - prebuilts/aarch64/include/va/va_tpi.h | 29 - prebuilts/aarch64/include/va/va_version.h | 87 - prebuilts/aarch64/include/va/va_vpp.h | 1590 ----- prebuilts/aarch64/include/x264.h | 1019 ---- prebuilts/aarch64/include/x264_config.h | 8 - prebuilts/aarch64/include/xf86drm.h | 966 --- prebuilts/aarch64/include/xf86drmMode.h | 504 -- prebuilts/arm/include/gbm.h | 461 -- prebuilts/arm/include/libavcodec/ac3_parser.h | 36 - .../arm/include/libavcodec/adts_parser.h | 37 - prebuilts/arm/include/libavcodec/avcodec.h | 4184 ------------- prebuilts/arm/include/libavcodec/avdct.h | 88 - prebuilts/arm/include/libavcodec/avfft.h | 118 - prebuilts/arm/include/libavcodec/bsf.h | 325 - prebuilts/arm/include/libavcodec/codec.h | 480 -- prebuilts/arm/include/libavcodec/codec_desc.h | 128 - prebuilts/arm/include/libavcodec/codec_id.h | 592 -- prebuilts/arm/include/libavcodec/codec_par.h | 229 - prebuilts/arm/include/libavcodec/d3d11va.h | 112 - prebuilts/arm/include/libavcodec/dirac.h | 131 - prebuilts/arm/include/libavcodec/dv_profile.h | 83 - prebuilts/arm/include/libavcodec/dxva2.h | 93 - prebuilts/arm/include/libavcodec/jni.h | 46 - prebuilts/arm/include/libavcodec/mediacodec.h | 101 - prebuilts/arm/include/libavcodec/packet.h | 774 --- prebuilts/arm/include/libavcodec/qsv.h | 107 - prebuilts/arm/include/libavcodec/vaapi.h | 86 - prebuilts/arm/include/libavcodec/vdpau.h | 176 - prebuilts/arm/include/libavcodec/version.h | 172 - .../arm/include/libavcodec/videotoolbox.h | 127 - .../arm/include/libavcodec/vorbis_parser.h | 74 - prebuilts/arm/include/libavcodec/xvmc.h | 170 - prebuilts/arm/include/libavdevice/avdevice.h | 519 -- prebuilts/arm/include/libavdevice/version.h | 53 - prebuilts/arm/include/libavfilter/avfilter.h | 1178 ---- .../arm/include/libavfilter/buffersink.h | 205 - prebuilts/arm/include/libavfilter/buffersrc.h | 209 - prebuilts/arm/include/libavfilter/version.h | 75 - prebuilts/arm/include/libavformat/avformat.h | 3012 ---------- prebuilts/arm/include/libavformat/avio.h | 888 --- prebuilts/arm/include/libavformat/version.h | 123 - prebuilts/arm/include/libavutil/adler32.h | 72 - prebuilts/arm/include/libavutil/aes.h | 65 - prebuilts/arm/include/libavutil/aes_ctr.h | 88 - prebuilts/arm/include/libavutil/attributes.h | 173 - prebuilts/arm/include/libavutil/audio_fifo.h | 187 - prebuilts/arm/include/libavutil/avassert.h | 75 - prebuilts/arm/include/libavutil/avconfig.h | 6 - prebuilts/arm/include/libavutil/avstring.h | 437 -- prebuilts/arm/include/libavutil/avutil.h | 365 -- prebuilts/arm/include/libavutil/base64.h | 72 - prebuilts/arm/include/libavutil/blowfish.h | 82 - prebuilts/arm/include/libavutil/bprint.h | 219 - prebuilts/arm/include/libavutil/bswap.h | 109 - prebuilts/arm/include/libavutil/buffer.h | 353 -- prebuilts/arm/include/libavutil/camellia.h | 70 - prebuilts/arm/include/libavutil/cast5.h | 80 - .../arm/include/libavutil/channel_layout.h | 238 - prebuilts/arm/include/libavutil/common.h | 608 -- prebuilts/arm/include/libavutil/cpu.h | 133 - prebuilts/arm/include/libavutil/crc.h | 100 - prebuilts/arm/include/libavutil/des.h | 77 - prebuilts/arm/include/libavutil/dict.h | 200 - prebuilts/arm/include/libavutil/display.h | 114 - prebuilts/arm/include/libavutil/dovi_meta.h | 70 - .../arm/include/libavutil/downmix_info.h | 115 - .../arm/include/libavutil/encryption_info.h | 205 - prebuilts/arm/include/libavutil/error.h | 126 - prebuilts/arm/include/libavutil/eval.h | 137 - prebuilts/arm/include/libavutil/ffversion.h | 5 - prebuilts/arm/include/libavutil/fifo.h | 179 - prebuilts/arm/include/libavutil/file.h | 71 - .../arm/include/libavutil/film_grain_params.h | 168 - prebuilts/arm/include/libavutil/frame.h | 997 ---- prebuilts/arm/include/libavutil/hash.h | 270 - .../include/libavutil/hdr_dynamic_metadata.h | 343 -- prebuilts/arm/include/libavutil/hmac.h | 100 - prebuilts/arm/include/libavutil/hwcontext.h | 605 -- .../arm/include/libavutil/hwcontext_cuda.h | 69 - .../arm/include/libavutil/hwcontext_d3d11va.h | 169 - .../arm/include/libavutil/hwcontext_drm.h | 169 - .../arm/include/libavutil/hwcontext_dxva2.h | 75 - .../include/libavutil/hwcontext_mediacodec.h | 36 - .../arm/include/libavutil/hwcontext_opencl.h | 100 - .../arm/include/libavutil/hwcontext_qsv.h | 53 - .../arm/include/libavutil/hwcontext_vaapi.h | 117 - .../arm/include/libavutil/hwcontext_vdpau.h | 44 - .../libavutil/hwcontext_videotoolbox.h | 60 - .../arm/include/libavutil/hwcontext_vulkan.h | 204 - prebuilts/arm/include/libavutil/imgutils.h | 291 - prebuilts/arm/include/libavutil/intfloat.h | 77 - .../arm/include/libavutil/intreadwrite.h | 644 -- prebuilts/arm/include/libavutil/lfg.h | 80 - prebuilts/arm/include/libavutil/log.h | 401 -- prebuilts/arm/include/libavutil/lzo.h | 66 - prebuilts/arm/include/libavutil/macros.h | 50 - .../libavutil/mastering_display_metadata.h | 128 - prebuilts/arm/include/libavutil/mathematics.h | 243 - prebuilts/arm/include/libavutil/md5.h | 98 - prebuilts/arm/include/libavutil/mem.h | 706 --- .../arm/include/libavutil/motion_vector.h | 57 - prebuilts/arm/include/libavutil/murmur3.h | 121 - prebuilts/arm/include/libavutil/opt.h | 886 --- prebuilts/arm/include/libavutil/parseutils.h | 193 - prebuilts/arm/include/libavutil/pixdesc.h | 442 -- prebuilts/arm/include/libavutil/pixelutils.h | 52 - prebuilts/arm/include/libavutil/pixfmt.h | 616 -- prebuilts/arm/include/libavutil/random_seed.h | 43 - prebuilts/arm/include/libavutil/rational.h | 220 - prebuilts/arm/include/libavutil/rc4.h | 66 - prebuilts/arm/include/libavutil/replaygain.h | 50 - prebuilts/arm/include/libavutil/ripemd.h | 88 - prebuilts/arm/include/libavutil/samplefmt.h | 272 - prebuilts/arm/include/libavutil/sha.h | 95 - prebuilts/arm/include/libavutil/sha512.h | 97 - prebuilts/arm/include/libavutil/spherical.h | 232 - prebuilts/arm/include/libavutil/stereo3d.h | 233 - prebuilts/arm/include/libavutil/tea.h | 71 - .../arm/include/libavutil/threadmessage.h | 115 - prebuilts/arm/include/libavutil/time.h | 56 - prebuilts/arm/include/libavutil/timecode.h | 199 - prebuilts/arm/include/libavutil/timestamp.h | 78 - prebuilts/arm/include/libavutil/tree.h | 138 - prebuilts/arm/include/libavutil/twofish.h | 70 - prebuilts/arm/include/libavutil/tx.h | 135 - prebuilts/arm/include/libavutil/version.h | 150 - .../arm/include/libavutil/video_enc_params.h | 171 - prebuilts/arm/include/libavutil/xtea.h | 94 - prebuilts/arm/include/libdrm/amdgpu.h | 1876 ------ prebuilts/arm/include/libdrm/amdgpu_drm.h | 1157 ---- .../include/libdrm/android/gralloc_handle.h | 111 - prebuilts/arm/include/libdrm/drm.h | 1183 ---- prebuilts/arm/include/libdrm/drm_fourcc.h | 1365 ----- prebuilts/arm/include/libdrm/drm_mode.h | 1129 ---- prebuilts/arm/include/libdrm/drm_sarea.h | 92 - prebuilts/arm/include/libdrm/i915_drm.h | 1915 ------ prebuilts/arm/include/libdrm/mach64_drm.h | 256 - prebuilts/arm/include/libdrm/mga_drm.h | 427 -- prebuilts/arm/include/libdrm/msm_drm.h | 308 - .../arm/include/libdrm/nouveau/nouveau.h | 280 - .../arm/include/libdrm/nouveau/nvif/cl0080.h | 45 - .../arm/include/libdrm/nouveau/nvif/cl9097.h | 44 - .../arm/include/libdrm/nouveau/nvif/class.h | 141 - .../arm/include/libdrm/nouveau/nvif/if0002.h | 38 - .../arm/include/libdrm/nouveau/nvif/if0003.h | 33 - .../arm/include/libdrm/nouveau/nvif/ioctl.h | 132 - .../arm/include/libdrm/nouveau/nvif/unpack.h | 28 - prebuilts/arm/include/libdrm/nouveau_drm.h | 256 - prebuilts/arm/include/libdrm/qxl_drm.h | 158 - prebuilts/arm/include/libdrm/r128_drm.h | 336 -- prebuilts/arm/include/libdrm/r600_pci_ids.h | 487 -- prebuilts/arm/include/libdrm/radeon_bo.h | 73 - prebuilts/arm/include/libdrm/radeon_bo_gem.h | 48 - prebuilts/arm/include/libdrm/radeon_bo_int.h | 45 - prebuilts/arm/include/libdrm/radeon_cs.h | 141 - prebuilts/arm/include/libdrm/radeon_cs_gem.h | 41 - prebuilts/arm/include/libdrm/radeon_cs_int.h | 67 - prebuilts/arm/include/libdrm/radeon_drm.h | 1079 ---- prebuilts/arm/include/libdrm/radeon_surface.h | 149 - prebuilts/arm/include/libdrm/savage_drm.h | 220 - prebuilts/arm/include/libdrm/sis_drm.h | 77 - prebuilts/arm/include/libdrm/tegra_drm.h | 1060 ---- prebuilts/arm/include/libdrm/vc4_drm.h | 442 -- prebuilts/arm/include/libdrm/vc4_packet.h | 397 -- .../arm/include/libdrm/vc4_qpu_defines.h | 274 - prebuilts/arm/include/libdrm/via_drm.h | 283 - prebuilts/arm/include/libdrm/virtgpu_drm.h | 182 - prebuilts/arm/include/libdrm/vmwgfx_drm.h | 1128 ---- .../arm/include/libpostproc/postprocess.h | 107 - prebuilts/arm/include/libpostproc/version.h | 45 - .../arm/include/libswresample/swresample.h | 579 -- prebuilts/arm/include/libswresample/version.h | 45 - prebuilts/arm/include/libswscale/swscale.h | 336 -- prebuilts/arm/include/libswscale/version.h | 53 - prebuilts/arm/include/va/va.h | 5269 ----------------- prebuilts/arm/include/va/va_android.h | 49 - prebuilts/arm/include/va/va_backend.h | 695 --- prebuilts/arm/include/va/va_backend_prot.h | 81 - prebuilts/arm/include/va/va_backend_vpp.h | 74 - prebuilts/arm/include/va/va_compat.h | 116 - prebuilts/arm/include/va/va_dec_av1.h | 695 --- prebuilts/arm/include/va/va_dec_hevc.h | 616 -- prebuilts/arm/include/va/va_dec_jpeg.h | 155 - prebuilts/arm/include/va/va_dec_vp8.h | 249 - prebuilts/arm/include/va/va_dec_vp9.h | 312 - prebuilts/arm/include/va/va_drm.h | 61 - prebuilts/arm/include/va/va_drmcommon.h | 179 - prebuilts/arm/include/va/va_egl.h | 29 - prebuilts/arm/include/va/va_enc_av1.h | 995 ---- prebuilts/arm/include/va/va_enc_h264.h | 659 --- prebuilts/arm/include/va/va_enc_hevc.h | 958 --- prebuilts/arm/include/va/va_enc_jpeg.h | 162 - prebuilts/arm/include/va/va_enc_mpeg2.h | 308 - prebuilts/arm/include/va/va_enc_vp8.h | 350 -- prebuilts/arm/include/va/va_enc_vp9.h | 603 -- prebuilts/arm/include/va/va_fei.h | 168 - prebuilts/arm/include/va/va_fei_h264.h | 504 -- prebuilts/arm/include/va/va_fei_hevc.h | 251 - prebuilts/arm/include/va/va_prot.h | 515 -- prebuilts/arm/include/va/va_str.h | 49 - prebuilts/arm/include/va/va_tpi.h | 29 - prebuilts/arm/include/va/va_version.h | 87 - prebuilts/arm/include/va/va_vpp.h | 1590 ----- prebuilts/arm/include/x264.h | 1019 ---- prebuilts/arm/include/x264_config.h | 8 - prebuilts/arm/include/xf86drm.h | 966 --- prebuilts/arm/include/xf86drmMode.h | 504 -- prebuilts/x86/include/gbm.h | 461 -- prebuilts/x86/include/libavcodec/ac3_parser.h | 36 - .../x86/include/libavcodec/adts_parser.h | 37 - prebuilts/x86/include/libavcodec/avcodec.h | 4184 ------------- prebuilts/x86/include/libavcodec/avdct.h | 88 - prebuilts/x86/include/libavcodec/avfft.h | 118 - prebuilts/x86/include/libavcodec/bsf.h | 325 - prebuilts/x86/include/libavcodec/codec.h | 480 -- prebuilts/x86/include/libavcodec/codec_desc.h | 128 - prebuilts/x86/include/libavcodec/codec_id.h | 592 -- prebuilts/x86/include/libavcodec/codec_par.h | 229 - prebuilts/x86/include/libavcodec/d3d11va.h | 112 - prebuilts/x86/include/libavcodec/dirac.h | 131 - prebuilts/x86/include/libavcodec/dv_profile.h | 83 - prebuilts/x86/include/libavcodec/dxva2.h | 93 - prebuilts/x86/include/libavcodec/jni.h | 46 - prebuilts/x86/include/libavcodec/mediacodec.h | 101 - prebuilts/x86/include/libavcodec/packet.h | 774 --- prebuilts/x86/include/libavcodec/qsv.h | 107 - prebuilts/x86/include/libavcodec/vaapi.h | 86 - prebuilts/x86/include/libavcodec/vdpau.h | 176 - prebuilts/x86/include/libavcodec/version.h | 172 - .../x86/include/libavcodec/videotoolbox.h | 127 - .../x86/include/libavcodec/vorbis_parser.h | 74 - prebuilts/x86/include/libavcodec/xvmc.h | 170 - prebuilts/x86/include/libavdevice/avdevice.h | 519 -- prebuilts/x86/include/libavdevice/version.h | 53 - prebuilts/x86/include/libavfilter/avfilter.h | 1178 ---- .../x86/include/libavfilter/buffersink.h | 205 - prebuilts/x86/include/libavfilter/buffersrc.h | 209 - prebuilts/x86/include/libavfilter/version.h | 75 - prebuilts/x86/include/libavformat/avformat.h | 3012 ---------- prebuilts/x86/include/libavformat/avio.h | 888 --- prebuilts/x86/include/libavformat/version.h | 123 - prebuilts/x86/include/libavutil/adler32.h | 72 - prebuilts/x86/include/libavutil/aes.h | 65 - prebuilts/x86/include/libavutil/aes_ctr.h | 88 - prebuilts/x86/include/libavutil/attributes.h | 173 - prebuilts/x86/include/libavutil/audio_fifo.h | 187 - prebuilts/x86/include/libavutil/avassert.h | 75 - prebuilts/x86/include/libavutil/avconfig.h | 6 - prebuilts/x86/include/libavutil/avstring.h | 437 -- prebuilts/x86/include/libavutil/avutil.h | 365 -- prebuilts/x86/include/libavutil/base64.h | 72 - prebuilts/x86/include/libavutil/blowfish.h | 82 - prebuilts/x86/include/libavutil/bprint.h | 219 - prebuilts/x86/include/libavutil/bswap.h | 109 - prebuilts/x86/include/libavutil/buffer.h | 353 -- prebuilts/x86/include/libavutil/camellia.h | 70 - prebuilts/x86/include/libavutil/cast5.h | 80 - .../x86/include/libavutil/channel_layout.h | 238 - prebuilts/x86/include/libavutil/common.h | 608 -- prebuilts/x86/include/libavutil/cpu.h | 133 - prebuilts/x86/include/libavutil/crc.h | 100 - prebuilts/x86/include/libavutil/des.h | 77 - prebuilts/x86/include/libavutil/dict.h | 200 - prebuilts/x86/include/libavutil/display.h | 114 - prebuilts/x86/include/libavutil/dovi_meta.h | 70 - .../x86/include/libavutil/downmix_info.h | 115 - .../x86/include/libavutil/encryption_info.h | 205 - prebuilts/x86/include/libavutil/error.h | 126 - prebuilts/x86/include/libavutil/eval.h | 137 - prebuilts/x86/include/libavutil/ffversion.h | 5 - prebuilts/x86/include/libavutil/fifo.h | 179 - prebuilts/x86/include/libavutil/file.h | 71 - .../x86/include/libavutil/film_grain_params.h | 168 - prebuilts/x86/include/libavutil/frame.h | 997 ---- prebuilts/x86/include/libavutil/hash.h | 270 - .../include/libavutil/hdr_dynamic_metadata.h | 343 -- prebuilts/x86/include/libavutil/hmac.h | 100 - prebuilts/x86/include/libavutil/hwcontext.h | 605 -- .../x86/include/libavutil/hwcontext_cuda.h | 69 - .../x86/include/libavutil/hwcontext_d3d11va.h | 169 - .../x86/include/libavutil/hwcontext_drm.h | 169 - .../x86/include/libavutil/hwcontext_dxva2.h | 75 - .../include/libavutil/hwcontext_mediacodec.h | 36 - .../x86/include/libavutil/hwcontext_opencl.h | 100 - .../x86/include/libavutil/hwcontext_qsv.h | 53 - .../x86/include/libavutil/hwcontext_vaapi.h | 117 - .../x86/include/libavutil/hwcontext_vdpau.h | 44 - .../libavutil/hwcontext_videotoolbox.h | 60 - .../x86/include/libavutil/hwcontext_vulkan.h | 204 - prebuilts/x86/include/libavutil/imgutils.h | 291 - prebuilts/x86/include/libavutil/intfloat.h | 77 - .../x86/include/libavutil/intreadwrite.h | 644 -- prebuilts/x86/include/libavutil/lfg.h | 80 - prebuilts/x86/include/libavutil/log.h | 401 -- prebuilts/x86/include/libavutil/lzo.h | 66 - prebuilts/x86/include/libavutil/macros.h | 50 - .../libavutil/mastering_display_metadata.h | 128 - prebuilts/x86/include/libavutil/mathematics.h | 243 - prebuilts/x86/include/libavutil/md5.h | 98 - prebuilts/x86/include/libavutil/mem.h | 706 --- .../x86/include/libavutil/motion_vector.h | 57 - prebuilts/x86/include/libavutil/murmur3.h | 121 - prebuilts/x86/include/libavutil/opt.h | 886 --- prebuilts/x86/include/libavutil/parseutils.h | 193 - prebuilts/x86/include/libavutil/pixdesc.h | 442 -- prebuilts/x86/include/libavutil/pixelutils.h | 52 - prebuilts/x86/include/libavutil/pixfmt.h | 616 -- prebuilts/x86/include/libavutil/random_seed.h | 43 - prebuilts/x86/include/libavutil/rational.h | 220 - prebuilts/x86/include/libavutil/rc4.h | 66 - prebuilts/x86/include/libavutil/replaygain.h | 50 - prebuilts/x86/include/libavutil/ripemd.h | 88 - prebuilts/x86/include/libavutil/samplefmt.h | 272 - prebuilts/x86/include/libavutil/sha.h | 95 - prebuilts/x86/include/libavutil/sha512.h | 97 - prebuilts/x86/include/libavutil/spherical.h | 232 - prebuilts/x86/include/libavutil/stereo3d.h | 233 - prebuilts/x86/include/libavutil/tea.h | 71 - .../x86/include/libavutil/threadmessage.h | 115 - prebuilts/x86/include/libavutil/time.h | 56 - prebuilts/x86/include/libavutil/timecode.h | 199 - prebuilts/x86/include/libavutil/timestamp.h | 78 - prebuilts/x86/include/libavutil/tree.h | 138 - prebuilts/x86/include/libavutil/twofish.h | 70 - prebuilts/x86/include/libavutil/tx.h | 135 - prebuilts/x86/include/libavutil/version.h | 150 - .../x86/include/libavutil/video_enc_params.h | 171 - prebuilts/x86/include/libavutil/xtea.h | 94 - prebuilts/x86/include/libdrm/amdgpu.h | 1876 ------ prebuilts/x86/include/libdrm/amdgpu_drm.h | 1157 ---- .../include/libdrm/android/gralloc_handle.h | 111 - prebuilts/x86/include/libdrm/drm.h | 1183 ---- prebuilts/x86/include/libdrm/drm_fourcc.h | 1365 ----- prebuilts/x86/include/libdrm/drm_mode.h | 1129 ---- prebuilts/x86/include/libdrm/drm_sarea.h | 92 - prebuilts/x86/include/libdrm/i915_drm.h | 1915 ------ prebuilts/x86/include/libdrm/intel_aub.h | 153 - prebuilts/x86/include/libdrm/intel_bufmgr.h | 341 -- prebuilts/x86/include/libdrm/intel_debug.h | 44 - prebuilts/x86/include/libdrm/mach64_drm.h | 256 - prebuilts/x86/include/libdrm/mga_drm.h | 427 -- prebuilts/x86/include/libdrm/msm_drm.h | 308 - .../x86/include/libdrm/nouveau/nouveau.h | 280 - .../x86/include/libdrm/nouveau/nvif/cl0080.h | 45 - .../x86/include/libdrm/nouveau/nvif/cl9097.h | 44 - .../x86/include/libdrm/nouveau/nvif/class.h | 141 - .../x86/include/libdrm/nouveau/nvif/if0002.h | 38 - .../x86/include/libdrm/nouveau/nvif/if0003.h | 33 - .../x86/include/libdrm/nouveau/nvif/ioctl.h | 132 - .../x86/include/libdrm/nouveau/nvif/unpack.h | 28 - prebuilts/x86/include/libdrm/nouveau_drm.h | 256 - prebuilts/x86/include/libdrm/qxl_drm.h | 158 - prebuilts/x86/include/libdrm/r128_drm.h | 336 -- prebuilts/x86/include/libdrm/r600_pci_ids.h | 487 -- prebuilts/x86/include/libdrm/radeon_bo.h | 73 - prebuilts/x86/include/libdrm/radeon_bo_gem.h | 48 - prebuilts/x86/include/libdrm/radeon_bo_int.h | 45 - prebuilts/x86/include/libdrm/radeon_cs.h | 141 - prebuilts/x86/include/libdrm/radeon_cs_gem.h | 41 - prebuilts/x86/include/libdrm/radeon_cs_int.h | 67 - prebuilts/x86/include/libdrm/radeon_drm.h | 1079 ---- prebuilts/x86/include/libdrm/radeon_surface.h | 149 - prebuilts/x86/include/libdrm/savage_drm.h | 220 - prebuilts/x86/include/libdrm/sis_drm.h | 77 - prebuilts/x86/include/libdrm/tegra_drm.h | 1060 ---- prebuilts/x86/include/libdrm/vc4_drm.h | 442 -- prebuilts/x86/include/libdrm/via_drm.h | 283 - prebuilts/x86/include/libdrm/virtgpu_drm.h | 182 - prebuilts/x86/include/libdrm/vmwgfx_drm.h | 1128 ---- .../x86/include/libpostproc/postprocess.h | 107 - prebuilts/x86/include/libpostproc/version.h | 45 - .../x86/include/libswresample/swresample.h | 579 -- prebuilts/x86/include/libswresample/version.h | 45 - prebuilts/x86/include/libswscale/swscale.h | 336 -- prebuilts/x86/include/libswscale/version.h | 53 - prebuilts/x86/include/va/va.h | 5269 ----------------- prebuilts/x86/include/va/va_android.h | 49 - prebuilts/x86/include/va/va_backend.h | 695 --- prebuilts/x86/include/va/va_backend_prot.h | 81 - prebuilts/x86/include/va/va_backend_vpp.h | 74 - prebuilts/x86/include/va/va_compat.h | 116 - prebuilts/x86/include/va/va_dec_av1.h | 695 --- prebuilts/x86/include/va/va_dec_hevc.h | 616 -- prebuilts/x86/include/va/va_dec_jpeg.h | 155 - prebuilts/x86/include/va/va_dec_vp8.h | 249 - prebuilts/x86/include/va/va_dec_vp9.h | 312 - prebuilts/x86/include/va/va_drm.h | 61 - prebuilts/x86/include/va/va_drmcommon.h | 179 - prebuilts/x86/include/va/va_egl.h | 29 - prebuilts/x86/include/va/va_enc_av1.h | 995 ---- prebuilts/x86/include/va/va_enc_h264.h | 659 --- prebuilts/x86/include/va/va_enc_hevc.h | 958 --- prebuilts/x86/include/va/va_enc_jpeg.h | 162 - prebuilts/x86/include/va/va_enc_mpeg2.h | 308 - prebuilts/x86/include/va/va_enc_vp8.h | 350 -- prebuilts/x86/include/va/va_enc_vp9.h | 603 -- prebuilts/x86/include/va/va_fei.h | 168 - prebuilts/x86/include/va/va_fei_h264.h | 504 -- prebuilts/x86/include/va/va_fei_hevc.h | 251 - prebuilts/x86/include/va/va_prot.h | 515 -- prebuilts/x86/include/va/va_str.h | 49 - prebuilts/x86/include/va/va_tpi.h | 29 - prebuilts/x86/include/va/va_version.h | 87 - prebuilts/x86/include/va/va_vpp.h | 1590 ----- prebuilts/x86/include/x264.h | 1019 ---- prebuilts/x86/include/x264_config.h | 8 - prebuilts/x86/include/xf86drm.h | 966 --- prebuilts/x86/include/xf86drmMode.h | 504 -- prebuilts/x86_64/include/gbm.h | 461 -- .../x86_64/include/libavcodec/ac3_parser.h | 36 - .../x86_64/include/libavcodec/adts_parser.h | 37 - prebuilts/x86_64/include/libavcodec/avcodec.h | 4184 ------------- prebuilts/x86_64/include/libavcodec/avdct.h | 88 - prebuilts/x86_64/include/libavcodec/avfft.h | 118 - prebuilts/x86_64/include/libavcodec/bsf.h | 325 - prebuilts/x86_64/include/libavcodec/codec.h | 480 -- .../x86_64/include/libavcodec/codec_desc.h | 128 - .../x86_64/include/libavcodec/codec_id.h | 592 -- .../x86_64/include/libavcodec/codec_par.h | 229 - prebuilts/x86_64/include/libavcodec/d3d11va.h | 112 - prebuilts/x86_64/include/libavcodec/dirac.h | 131 - .../x86_64/include/libavcodec/dv_profile.h | 83 - prebuilts/x86_64/include/libavcodec/dxva2.h | 93 - prebuilts/x86_64/include/libavcodec/jni.h | 46 - .../x86_64/include/libavcodec/mediacodec.h | 101 - prebuilts/x86_64/include/libavcodec/packet.h | 774 --- prebuilts/x86_64/include/libavcodec/qsv.h | 107 - prebuilts/x86_64/include/libavcodec/vaapi.h | 86 - prebuilts/x86_64/include/libavcodec/vdpau.h | 176 - prebuilts/x86_64/include/libavcodec/version.h | 172 - .../x86_64/include/libavcodec/videotoolbox.h | 127 - .../x86_64/include/libavcodec/vorbis_parser.h | 74 - prebuilts/x86_64/include/libavcodec/xvmc.h | 170 - .../x86_64/include/libavdevice/avdevice.h | 519 -- .../x86_64/include/libavdevice/version.h | 53 - .../x86_64/include/libavfilter/avfilter.h | 1178 ---- .../x86_64/include/libavfilter/buffersink.h | 205 - .../x86_64/include/libavfilter/buffersrc.h | 209 - .../x86_64/include/libavfilter/version.h | 75 - .../x86_64/include/libavformat/avformat.h | 3012 ---------- prebuilts/x86_64/include/libavformat/avio.h | 888 --- .../x86_64/include/libavformat/version.h | 123 - prebuilts/x86_64/include/libavutil/adler32.h | 72 - prebuilts/x86_64/include/libavutil/aes.h | 65 - prebuilts/x86_64/include/libavutil/aes_ctr.h | 88 - .../x86_64/include/libavutil/attributes.h | 173 - .../x86_64/include/libavutil/audio_fifo.h | 187 - prebuilts/x86_64/include/libavutil/avassert.h | 75 - prebuilts/x86_64/include/libavutil/avconfig.h | 6 - prebuilts/x86_64/include/libavutil/avstring.h | 437 -- prebuilts/x86_64/include/libavutil/avutil.h | 365 -- prebuilts/x86_64/include/libavutil/base64.h | 72 - prebuilts/x86_64/include/libavutil/blowfish.h | 82 - prebuilts/x86_64/include/libavutil/bprint.h | 219 - prebuilts/x86_64/include/libavutil/bswap.h | 109 - prebuilts/x86_64/include/libavutil/buffer.h | 353 -- prebuilts/x86_64/include/libavutil/camellia.h | 70 - prebuilts/x86_64/include/libavutil/cast5.h | 80 - .../x86_64/include/libavutil/channel_layout.h | 238 - prebuilts/x86_64/include/libavutil/common.h | 608 -- prebuilts/x86_64/include/libavutil/cpu.h | 133 - prebuilts/x86_64/include/libavutil/crc.h | 100 - prebuilts/x86_64/include/libavutil/des.h | 77 - prebuilts/x86_64/include/libavutil/dict.h | 200 - prebuilts/x86_64/include/libavutil/display.h | 114 - .../x86_64/include/libavutil/dovi_meta.h | 70 - .../x86_64/include/libavutil/downmix_info.h | 115 - .../include/libavutil/encryption_info.h | 205 - prebuilts/x86_64/include/libavutil/error.h | 126 - prebuilts/x86_64/include/libavutil/eval.h | 137 - .../x86_64/include/libavutil/ffversion.h | 5 - prebuilts/x86_64/include/libavutil/fifo.h | 179 - prebuilts/x86_64/include/libavutil/file.h | 71 - .../include/libavutil/film_grain_params.h | 168 - prebuilts/x86_64/include/libavutil/frame.h | 997 ---- prebuilts/x86_64/include/libavutil/hash.h | 270 - .../include/libavutil/hdr_dynamic_metadata.h | 343 -- prebuilts/x86_64/include/libavutil/hmac.h | 100 - .../x86_64/include/libavutil/hwcontext.h | 605 -- .../x86_64/include/libavutil/hwcontext_cuda.h | 69 - .../include/libavutil/hwcontext_d3d11va.h | 169 - .../x86_64/include/libavutil/hwcontext_drm.h | 169 - .../include/libavutil/hwcontext_dxva2.h | 75 - .../include/libavutil/hwcontext_mediacodec.h | 36 - .../include/libavutil/hwcontext_opencl.h | 100 - .../x86_64/include/libavutil/hwcontext_qsv.h | 53 - .../include/libavutil/hwcontext_vaapi.h | 117 - .../include/libavutil/hwcontext_vdpau.h | 44 - .../libavutil/hwcontext_videotoolbox.h | 60 - .../include/libavutil/hwcontext_vulkan.h | 204 - prebuilts/x86_64/include/libavutil/imgutils.h | 291 - prebuilts/x86_64/include/libavutil/intfloat.h | 77 - .../x86_64/include/libavutil/intreadwrite.h | 644 -- prebuilts/x86_64/include/libavutil/lfg.h | 80 - prebuilts/x86_64/include/libavutil/log.h | 401 -- prebuilts/x86_64/include/libavutil/lzo.h | 66 - prebuilts/x86_64/include/libavutil/macros.h | 50 - .../libavutil/mastering_display_metadata.h | 128 - .../x86_64/include/libavutil/mathematics.h | 243 - prebuilts/x86_64/include/libavutil/md5.h | 98 - prebuilts/x86_64/include/libavutil/mem.h | 706 --- .../x86_64/include/libavutil/motion_vector.h | 57 - prebuilts/x86_64/include/libavutil/murmur3.h | 121 - prebuilts/x86_64/include/libavutil/opt.h | 886 --- .../x86_64/include/libavutil/parseutils.h | 193 - prebuilts/x86_64/include/libavutil/pixdesc.h | 442 -- .../x86_64/include/libavutil/pixelutils.h | 52 - prebuilts/x86_64/include/libavutil/pixfmt.h | 616 -- .../x86_64/include/libavutil/random_seed.h | 43 - prebuilts/x86_64/include/libavutil/rational.h | 220 - prebuilts/x86_64/include/libavutil/rc4.h | 66 - .../x86_64/include/libavutil/replaygain.h | 50 - prebuilts/x86_64/include/libavutil/ripemd.h | 88 - .../x86_64/include/libavutil/samplefmt.h | 272 - prebuilts/x86_64/include/libavutil/sha.h | 95 - prebuilts/x86_64/include/libavutil/sha512.h | 97 - .../x86_64/include/libavutil/spherical.h | 232 - prebuilts/x86_64/include/libavutil/stereo3d.h | 233 - prebuilts/x86_64/include/libavutil/tea.h | 71 - .../x86_64/include/libavutil/threadmessage.h | 115 - prebuilts/x86_64/include/libavutil/time.h | 56 - prebuilts/x86_64/include/libavutil/timecode.h | 199 - .../x86_64/include/libavutil/timestamp.h | 78 - prebuilts/x86_64/include/libavutil/tree.h | 138 - prebuilts/x86_64/include/libavutil/twofish.h | 70 - prebuilts/x86_64/include/libavutil/tx.h | 135 - prebuilts/x86_64/include/libavutil/version.h | 150 - .../include/libavutil/video_enc_params.h | 171 - prebuilts/x86_64/include/libavutil/xtea.h | 94 - prebuilts/x86_64/include/libdrm/amdgpu.h | 1876 ------ prebuilts/x86_64/include/libdrm/amdgpu_drm.h | 1157 ---- .../include/libdrm/android/gralloc_handle.h | 111 - prebuilts/x86_64/include/libdrm/drm.h | 1183 ---- prebuilts/x86_64/include/libdrm/drm_fourcc.h | 1365 ----- prebuilts/x86_64/include/libdrm/drm_mode.h | 1129 ---- prebuilts/x86_64/include/libdrm/drm_sarea.h | 92 - prebuilts/x86_64/include/libdrm/i915_drm.h | 1915 ------ prebuilts/x86_64/include/libdrm/intel_aub.h | 153 - .../x86_64/include/libdrm/intel_bufmgr.h | 341 -- prebuilts/x86_64/include/libdrm/intel_debug.h | 44 - prebuilts/x86_64/include/libdrm/mach64_drm.h | 256 - prebuilts/x86_64/include/libdrm/mga_drm.h | 427 -- prebuilts/x86_64/include/libdrm/msm_drm.h | 308 - .../x86_64/include/libdrm/nouveau/nouveau.h | 280 - .../include/libdrm/nouveau/nvif/cl0080.h | 45 - .../include/libdrm/nouveau/nvif/cl9097.h | 44 - .../include/libdrm/nouveau/nvif/class.h | 141 - .../include/libdrm/nouveau/nvif/if0002.h | 38 - .../include/libdrm/nouveau/nvif/if0003.h | 33 - .../include/libdrm/nouveau/nvif/ioctl.h | 132 - .../include/libdrm/nouveau/nvif/unpack.h | 28 - prebuilts/x86_64/include/libdrm/nouveau_drm.h | 256 - prebuilts/x86_64/include/libdrm/qxl_drm.h | 158 - prebuilts/x86_64/include/libdrm/r128_drm.h | 336 -- .../x86_64/include/libdrm/r600_pci_ids.h | 487 -- prebuilts/x86_64/include/libdrm/radeon_bo.h | 73 - .../x86_64/include/libdrm/radeon_bo_gem.h | 48 - .../x86_64/include/libdrm/radeon_bo_int.h | 45 - prebuilts/x86_64/include/libdrm/radeon_cs.h | 141 - .../x86_64/include/libdrm/radeon_cs_gem.h | 41 - .../x86_64/include/libdrm/radeon_cs_int.h | 67 - prebuilts/x86_64/include/libdrm/radeon_drm.h | 1079 ---- .../x86_64/include/libdrm/radeon_surface.h | 149 - prebuilts/x86_64/include/libdrm/savage_drm.h | 220 - prebuilts/x86_64/include/libdrm/sis_drm.h | 77 - prebuilts/x86_64/include/libdrm/tegra_drm.h | 1060 ---- prebuilts/x86_64/include/libdrm/vc4_drm.h | 442 -- prebuilts/x86_64/include/libdrm/via_drm.h | 283 - prebuilts/x86_64/include/libdrm/virtgpu_drm.h | 182 - prebuilts/x86_64/include/libdrm/vmwgfx_drm.h | 1128 ---- .../x86_64/include/libpostproc/postprocess.h | 107 - .../x86_64/include/libpostproc/version.h | 45 - .../x86_64/include/libswresample/swresample.h | 579 -- .../x86_64/include/libswresample/version.h | 45 - prebuilts/x86_64/include/libswscale/swscale.h | 336 -- prebuilts/x86_64/include/libswscale/version.h | 53 - prebuilts/x86_64/include/va/va.h | 5269 ----------------- prebuilts/x86_64/include/va/va_android.h | 49 - prebuilts/x86_64/include/va/va_backend.h | 695 --- prebuilts/x86_64/include/va/va_backend_prot.h | 81 - prebuilts/x86_64/include/va/va_backend_vpp.h | 74 - prebuilts/x86_64/include/va/va_compat.h | 116 - prebuilts/x86_64/include/va/va_dec_av1.h | 695 --- prebuilts/x86_64/include/va/va_dec_hevc.h | 616 -- prebuilts/x86_64/include/va/va_dec_jpeg.h | 155 - prebuilts/x86_64/include/va/va_dec_vp8.h | 249 - prebuilts/x86_64/include/va/va_dec_vp9.h | 312 - prebuilts/x86_64/include/va/va_drm.h | 61 - prebuilts/x86_64/include/va/va_drmcommon.h | 179 - prebuilts/x86_64/include/va/va_egl.h | 29 - prebuilts/x86_64/include/va/va_enc_av1.h | 995 ---- prebuilts/x86_64/include/va/va_enc_h264.h | 659 --- prebuilts/x86_64/include/va/va_enc_hevc.h | 958 --- prebuilts/x86_64/include/va/va_enc_jpeg.h | 162 - prebuilts/x86_64/include/va/va_enc_mpeg2.h | 308 - prebuilts/x86_64/include/va/va_enc_vp8.h | 350 -- prebuilts/x86_64/include/va/va_enc_vp9.h | 603 -- prebuilts/x86_64/include/va/va_fei.h | 168 - prebuilts/x86_64/include/va/va_fei_h264.h | 504 -- prebuilts/x86_64/include/va/va_fei_hevc.h | 251 - prebuilts/x86_64/include/va/va_prot.h | 515 -- prebuilts/x86_64/include/va/va_str.h | 49 - prebuilts/x86_64/include/va/va_tpi.h | 29 - prebuilts/x86_64/include/va/va_version.h | 87 - prebuilts/x86_64/include/va/va_vpp.h | 1590 ----- prebuilts/x86_64/include/x264.h | 1019 ---- prebuilts/x86_64/include/x264_config.h | 8 - prebuilts/x86_64/include/xf86drm.h | 966 --- prebuilts/x86_64/include/xf86drmMode.h | 504 -- 802 files changed, 273330 deletions(-) delete mode 100644 prebuilts/aarch64/include/gbm.h delete mode 100644 prebuilts/aarch64/include/libavcodec/ac3_parser.h delete mode 100644 prebuilts/aarch64/include/libavcodec/adts_parser.h delete mode 100644 prebuilts/aarch64/include/libavcodec/avcodec.h delete mode 100644 prebuilts/aarch64/include/libavcodec/avdct.h delete mode 100644 prebuilts/aarch64/include/libavcodec/avfft.h delete mode 100644 prebuilts/aarch64/include/libavcodec/bsf.h delete mode 100644 prebuilts/aarch64/include/libavcodec/codec.h delete mode 100644 prebuilts/aarch64/include/libavcodec/codec_desc.h delete mode 100644 prebuilts/aarch64/include/libavcodec/codec_id.h delete mode 100644 prebuilts/aarch64/include/libavcodec/codec_par.h delete mode 100644 prebuilts/aarch64/include/libavcodec/d3d11va.h delete mode 100644 prebuilts/aarch64/include/libavcodec/dirac.h delete mode 100644 prebuilts/aarch64/include/libavcodec/dv_profile.h delete mode 100644 prebuilts/aarch64/include/libavcodec/dxva2.h delete mode 100644 prebuilts/aarch64/include/libavcodec/jni.h delete mode 100644 prebuilts/aarch64/include/libavcodec/mediacodec.h delete mode 100644 prebuilts/aarch64/include/libavcodec/packet.h delete mode 100644 prebuilts/aarch64/include/libavcodec/qsv.h delete mode 100644 prebuilts/aarch64/include/libavcodec/vaapi.h delete mode 100644 prebuilts/aarch64/include/libavcodec/vdpau.h delete mode 100644 prebuilts/aarch64/include/libavcodec/version.h delete mode 100644 prebuilts/aarch64/include/libavcodec/videotoolbox.h delete mode 100644 prebuilts/aarch64/include/libavcodec/vorbis_parser.h delete mode 100644 prebuilts/aarch64/include/libavcodec/xvmc.h delete mode 100644 prebuilts/aarch64/include/libavdevice/avdevice.h delete mode 100644 prebuilts/aarch64/include/libavdevice/version.h delete mode 100644 prebuilts/aarch64/include/libavfilter/avfilter.h delete mode 100644 prebuilts/aarch64/include/libavfilter/buffersink.h delete mode 100644 prebuilts/aarch64/include/libavfilter/buffersrc.h delete mode 100644 prebuilts/aarch64/include/libavfilter/version.h delete mode 100644 prebuilts/aarch64/include/libavformat/avformat.h delete mode 100644 prebuilts/aarch64/include/libavformat/avio.h delete mode 100644 prebuilts/aarch64/include/libavformat/version.h delete mode 100644 prebuilts/aarch64/include/libavutil/adler32.h delete mode 100644 prebuilts/aarch64/include/libavutil/aes.h delete mode 100644 prebuilts/aarch64/include/libavutil/aes_ctr.h delete mode 100644 prebuilts/aarch64/include/libavutil/attributes.h delete mode 100644 prebuilts/aarch64/include/libavutil/audio_fifo.h delete mode 100644 prebuilts/aarch64/include/libavutil/avassert.h delete mode 100644 prebuilts/aarch64/include/libavutil/avconfig.h delete mode 100644 prebuilts/aarch64/include/libavutil/avstring.h delete mode 100644 prebuilts/aarch64/include/libavutil/avutil.h delete mode 100644 prebuilts/aarch64/include/libavutil/base64.h delete mode 100644 prebuilts/aarch64/include/libavutil/blowfish.h delete mode 100644 prebuilts/aarch64/include/libavutil/bprint.h delete mode 100644 prebuilts/aarch64/include/libavutil/bswap.h delete mode 100644 prebuilts/aarch64/include/libavutil/buffer.h delete mode 100644 prebuilts/aarch64/include/libavutil/camellia.h delete mode 100644 prebuilts/aarch64/include/libavutil/cast5.h delete mode 100644 prebuilts/aarch64/include/libavutil/channel_layout.h delete mode 100644 prebuilts/aarch64/include/libavutil/common.h delete mode 100644 prebuilts/aarch64/include/libavutil/cpu.h delete mode 100644 prebuilts/aarch64/include/libavutil/crc.h delete mode 100644 prebuilts/aarch64/include/libavutil/des.h delete mode 100644 prebuilts/aarch64/include/libavutil/dict.h delete mode 100644 prebuilts/aarch64/include/libavutil/display.h delete mode 100644 prebuilts/aarch64/include/libavutil/dovi_meta.h delete mode 100644 prebuilts/aarch64/include/libavutil/downmix_info.h delete mode 100644 prebuilts/aarch64/include/libavutil/encryption_info.h delete mode 100644 prebuilts/aarch64/include/libavutil/error.h delete mode 100644 prebuilts/aarch64/include/libavutil/eval.h delete mode 100644 prebuilts/aarch64/include/libavutil/ffversion.h delete mode 100644 prebuilts/aarch64/include/libavutil/fifo.h delete mode 100644 prebuilts/aarch64/include/libavutil/file.h delete mode 100644 prebuilts/aarch64/include/libavutil/film_grain_params.h delete mode 100644 prebuilts/aarch64/include/libavutil/frame.h delete mode 100644 prebuilts/aarch64/include/libavutil/hash.h delete mode 100644 prebuilts/aarch64/include/libavutil/hdr_dynamic_metadata.h delete mode 100644 prebuilts/aarch64/include/libavutil/hmac.h delete mode 100644 prebuilts/aarch64/include/libavutil/hwcontext.h delete mode 100644 prebuilts/aarch64/include/libavutil/hwcontext_cuda.h delete mode 100644 prebuilts/aarch64/include/libavutil/hwcontext_d3d11va.h delete mode 100644 prebuilts/aarch64/include/libavutil/hwcontext_drm.h delete mode 100644 prebuilts/aarch64/include/libavutil/hwcontext_dxva2.h delete mode 100644 prebuilts/aarch64/include/libavutil/hwcontext_mediacodec.h delete mode 100644 prebuilts/aarch64/include/libavutil/hwcontext_opencl.h delete mode 100644 prebuilts/aarch64/include/libavutil/hwcontext_qsv.h delete mode 100644 prebuilts/aarch64/include/libavutil/hwcontext_vaapi.h delete mode 100644 prebuilts/aarch64/include/libavutil/hwcontext_vdpau.h delete mode 100644 prebuilts/aarch64/include/libavutil/hwcontext_videotoolbox.h delete mode 100644 prebuilts/aarch64/include/libavutil/hwcontext_vulkan.h delete mode 100644 prebuilts/aarch64/include/libavutil/imgutils.h delete mode 100644 prebuilts/aarch64/include/libavutil/intfloat.h delete mode 100644 prebuilts/aarch64/include/libavutil/intreadwrite.h delete mode 100644 prebuilts/aarch64/include/libavutil/lfg.h delete mode 100644 prebuilts/aarch64/include/libavutil/log.h delete mode 100644 prebuilts/aarch64/include/libavutil/lzo.h delete mode 100644 prebuilts/aarch64/include/libavutil/macros.h delete mode 100644 prebuilts/aarch64/include/libavutil/mastering_display_metadata.h delete mode 100644 prebuilts/aarch64/include/libavutil/mathematics.h delete mode 100644 prebuilts/aarch64/include/libavutil/md5.h delete mode 100644 prebuilts/aarch64/include/libavutil/mem.h delete mode 100644 prebuilts/aarch64/include/libavutil/motion_vector.h delete mode 100644 prebuilts/aarch64/include/libavutil/murmur3.h delete mode 100644 prebuilts/aarch64/include/libavutil/opt.h delete mode 100644 prebuilts/aarch64/include/libavutil/parseutils.h delete mode 100644 prebuilts/aarch64/include/libavutil/pixdesc.h delete mode 100644 prebuilts/aarch64/include/libavutil/pixelutils.h delete mode 100644 prebuilts/aarch64/include/libavutil/pixfmt.h delete mode 100644 prebuilts/aarch64/include/libavutil/random_seed.h delete mode 100644 prebuilts/aarch64/include/libavutil/rational.h delete mode 100644 prebuilts/aarch64/include/libavutil/rc4.h delete mode 100644 prebuilts/aarch64/include/libavutil/replaygain.h delete mode 100644 prebuilts/aarch64/include/libavutil/ripemd.h delete mode 100644 prebuilts/aarch64/include/libavutil/samplefmt.h delete mode 100644 prebuilts/aarch64/include/libavutil/sha.h delete mode 100644 prebuilts/aarch64/include/libavutil/sha512.h delete mode 100644 prebuilts/aarch64/include/libavutil/spherical.h delete mode 100644 prebuilts/aarch64/include/libavutil/stereo3d.h delete mode 100644 prebuilts/aarch64/include/libavutil/tea.h delete mode 100644 prebuilts/aarch64/include/libavutil/threadmessage.h delete mode 100644 prebuilts/aarch64/include/libavutil/time.h delete mode 100644 prebuilts/aarch64/include/libavutil/timecode.h delete mode 100644 prebuilts/aarch64/include/libavutil/timestamp.h delete mode 100644 prebuilts/aarch64/include/libavutil/tree.h delete mode 100644 prebuilts/aarch64/include/libavutil/twofish.h delete mode 100644 prebuilts/aarch64/include/libavutil/tx.h delete mode 100644 prebuilts/aarch64/include/libavutil/version.h delete mode 100644 prebuilts/aarch64/include/libavutil/video_enc_params.h delete mode 100644 prebuilts/aarch64/include/libavutil/xtea.h delete mode 100644 prebuilts/aarch64/include/libdrm/amdgpu.h delete mode 100644 prebuilts/aarch64/include/libdrm/amdgpu_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/android/gralloc_handle.h delete mode 100644 prebuilts/aarch64/include/libdrm/drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/drm_fourcc.h delete mode 100644 prebuilts/aarch64/include/libdrm/drm_mode.h delete mode 100644 prebuilts/aarch64/include/libdrm/drm_sarea.h delete mode 100644 prebuilts/aarch64/include/libdrm/i915_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/mach64_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/mga_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/msm_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/nouveau/nouveau.h delete mode 100644 prebuilts/aarch64/include/libdrm/nouveau/nvif/cl0080.h delete mode 100644 prebuilts/aarch64/include/libdrm/nouveau/nvif/cl9097.h delete mode 100644 prebuilts/aarch64/include/libdrm/nouveau/nvif/class.h delete mode 100644 prebuilts/aarch64/include/libdrm/nouveau/nvif/if0002.h delete mode 100644 prebuilts/aarch64/include/libdrm/nouveau/nvif/if0003.h delete mode 100644 prebuilts/aarch64/include/libdrm/nouveau/nvif/ioctl.h delete mode 100644 prebuilts/aarch64/include/libdrm/nouveau/nvif/unpack.h delete mode 100644 prebuilts/aarch64/include/libdrm/nouveau_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/qxl_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/r128_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/r600_pci_ids.h delete mode 100644 prebuilts/aarch64/include/libdrm/radeon_bo.h delete mode 100644 prebuilts/aarch64/include/libdrm/radeon_bo_gem.h delete mode 100644 prebuilts/aarch64/include/libdrm/radeon_bo_int.h delete mode 100644 prebuilts/aarch64/include/libdrm/radeon_cs.h delete mode 100644 prebuilts/aarch64/include/libdrm/radeon_cs_gem.h delete mode 100644 prebuilts/aarch64/include/libdrm/radeon_cs_int.h delete mode 100644 prebuilts/aarch64/include/libdrm/radeon_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/radeon_surface.h delete mode 100644 prebuilts/aarch64/include/libdrm/savage_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/sis_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/tegra_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/vc4_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/vc4_packet.h delete mode 100644 prebuilts/aarch64/include/libdrm/vc4_qpu_defines.h delete mode 100644 prebuilts/aarch64/include/libdrm/via_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/virtgpu_drm.h delete mode 100644 prebuilts/aarch64/include/libdrm/vmwgfx_drm.h delete mode 100644 prebuilts/aarch64/include/libpostproc/postprocess.h delete mode 100644 prebuilts/aarch64/include/libpostproc/version.h delete mode 100644 prebuilts/aarch64/include/libswresample/swresample.h delete mode 100644 prebuilts/aarch64/include/libswresample/version.h delete mode 100644 prebuilts/aarch64/include/libswscale/swscale.h delete mode 100644 prebuilts/aarch64/include/libswscale/version.h delete mode 100644 prebuilts/aarch64/include/va/va.h delete mode 100644 prebuilts/aarch64/include/va/va_android.h delete mode 100644 prebuilts/aarch64/include/va/va_backend.h delete mode 100644 prebuilts/aarch64/include/va/va_backend_prot.h delete mode 100644 prebuilts/aarch64/include/va/va_backend_vpp.h delete mode 100644 prebuilts/aarch64/include/va/va_compat.h delete mode 100644 prebuilts/aarch64/include/va/va_dec_av1.h delete mode 100644 prebuilts/aarch64/include/va/va_dec_hevc.h delete mode 100644 prebuilts/aarch64/include/va/va_dec_jpeg.h delete mode 100644 prebuilts/aarch64/include/va/va_dec_vp8.h delete mode 100644 prebuilts/aarch64/include/va/va_dec_vp9.h delete mode 100644 prebuilts/aarch64/include/va/va_drm.h delete mode 100644 prebuilts/aarch64/include/va/va_drmcommon.h delete mode 100644 prebuilts/aarch64/include/va/va_egl.h delete mode 100644 prebuilts/aarch64/include/va/va_enc_av1.h delete mode 100644 prebuilts/aarch64/include/va/va_enc_h264.h delete mode 100644 prebuilts/aarch64/include/va/va_enc_hevc.h delete mode 100644 prebuilts/aarch64/include/va/va_enc_jpeg.h delete mode 100644 prebuilts/aarch64/include/va/va_enc_mpeg2.h delete mode 100644 prebuilts/aarch64/include/va/va_enc_vp8.h delete mode 100644 prebuilts/aarch64/include/va/va_enc_vp9.h delete mode 100644 prebuilts/aarch64/include/va/va_fei.h delete mode 100644 prebuilts/aarch64/include/va/va_fei_h264.h delete mode 100644 prebuilts/aarch64/include/va/va_fei_hevc.h delete mode 100644 prebuilts/aarch64/include/va/va_prot.h delete mode 100644 prebuilts/aarch64/include/va/va_str.h delete mode 100644 prebuilts/aarch64/include/va/va_tpi.h delete mode 100644 prebuilts/aarch64/include/va/va_version.h delete mode 100644 prebuilts/aarch64/include/va/va_vpp.h delete mode 100644 prebuilts/aarch64/include/x264.h delete mode 100644 prebuilts/aarch64/include/x264_config.h delete mode 100644 prebuilts/aarch64/include/xf86drm.h delete mode 100644 prebuilts/aarch64/include/xf86drmMode.h delete mode 100644 prebuilts/arm/include/gbm.h delete mode 100644 prebuilts/arm/include/libavcodec/ac3_parser.h delete mode 100644 prebuilts/arm/include/libavcodec/adts_parser.h delete mode 100644 prebuilts/arm/include/libavcodec/avcodec.h delete mode 100644 prebuilts/arm/include/libavcodec/avdct.h delete mode 100644 prebuilts/arm/include/libavcodec/avfft.h delete mode 100644 prebuilts/arm/include/libavcodec/bsf.h delete mode 100644 prebuilts/arm/include/libavcodec/codec.h delete mode 100644 prebuilts/arm/include/libavcodec/codec_desc.h delete mode 100644 prebuilts/arm/include/libavcodec/codec_id.h delete mode 100644 prebuilts/arm/include/libavcodec/codec_par.h delete mode 100644 prebuilts/arm/include/libavcodec/d3d11va.h delete mode 100644 prebuilts/arm/include/libavcodec/dirac.h delete mode 100644 prebuilts/arm/include/libavcodec/dv_profile.h delete mode 100644 prebuilts/arm/include/libavcodec/dxva2.h delete mode 100644 prebuilts/arm/include/libavcodec/jni.h delete mode 100644 prebuilts/arm/include/libavcodec/mediacodec.h delete mode 100644 prebuilts/arm/include/libavcodec/packet.h delete mode 100644 prebuilts/arm/include/libavcodec/qsv.h delete mode 100644 prebuilts/arm/include/libavcodec/vaapi.h delete mode 100644 prebuilts/arm/include/libavcodec/vdpau.h delete mode 100644 prebuilts/arm/include/libavcodec/version.h delete mode 100644 prebuilts/arm/include/libavcodec/videotoolbox.h delete mode 100644 prebuilts/arm/include/libavcodec/vorbis_parser.h delete mode 100644 prebuilts/arm/include/libavcodec/xvmc.h delete mode 100644 prebuilts/arm/include/libavdevice/avdevice.h delete mode 100644 prebuilts/arm/include/libavdevice/version.h delete mode 100644 prebuilts/arm/include/libavfilter/avfilter.h delete mode 100644 prebuilts/arm/include/libavfilter/buffersink.h delete mode 100644 prebuilts/arm/include/libavfilter/buffersrc.h delete mode 100644 prebuilts/arm/include/libavfilter/version.h delete mode 100644 prebuilts/arm/include/libavformat/avformat.h delete mode 100644 prebuilts/arm/include/libavformat/avio.h delete mode 100644 prebuilts/arm/include/libavformat/version.h delete mode 100644 prebuilts/arm/include/libavutil/adler32.h delete mode 100644 prebuilts/arm/include/libavutil/aes.h delete mode 100644 prebuilts/arm/include/libavutil/aes_ctr.h delete mode 100644 prebuilts/arm/include/libavutil/attributes.h delete mode 100644 prebuilts/arm/include/libavutil/audio_fifo.h delete mode 100644 prebuilts/arm/include/libavutil/avassert.h delete mode 100644 prebuilts/arm/include/libavutil/avconfig.h delete mode 100644 prebuilts/arm/include/libavutil/avstring.h delete mode 100644 prebuilts/arm/include/libavutil/avutil.h delete mode 100644 prebuilts/arm/include/libavutil/base64.h delete mode 100644 prebuilts/arm/include/libavutil/blowfish.h delete mode 100644 prebuilts/arm/include/libavutil/bprint.h delete mode 100644 prebuilts/arm/include/libavutil/bswap.h delete mode 100644 prebuilts/arm/include/libavutil/buffer.h delete mode 100644 prebuilts/arm/include/libavutil/camellia.h delete mode 100644 prebuilts/arm/include/libavutil/cast5.h delete mode 100644 prebuilts/arm/include/libavutil/channel_layout.h delete mode 100644 prebuilts/arm/include/libavutil/common.h delete mode 100644 prebuilts/arm/include/libavutil/cpu.h delete mode 100644 prebuilts/arm/include/libavutil/crc.h delete mode 100644 prebuilts/arm/include/libavutil/des.h delete mode 100644 prebuilts/arm/include/libavutil/dict.h delete mode 100644 prebuilts/arm/include/libavutil/display.h delete mode 100644 prebuilts/arm/include/libavutil/dovi_meta.h delete mode 100644 prebuilts/arm/include/libavutil/downmix_info.h delete mode 100644 prebuilts/arm/include/libavutil/encryption_info.h delete mode 100644 prebuilts/arm/include/libavutil/error.h delete mode 100644 prebuilts/arm/include/libavutil/eval.h delete mode 100644 prebuilts/arm/include/libavutil/ffversion.h delete mode 100644 prebuilts/arm/include/libavutil/fifo.h delete mode 100644 prebuilts/arm/include/libavutil/file.h delete mode 100644 prebuilts/arm/include/libavutil/film_grain_params.h delete mode 100644 prebuilts/arm/include/libavutil/frame.h delete mode 100644 prebuilts/arm/include/libavutil/hash.h delete mode 100644 prebuilts/arm/include/libavutil/hdr_dynamic_metadata.h delete mode 100644 prebuilts/arm/include/libavutil/hmac.h delete mode 100644 prebuilts/arm/include/libavutil/hwcontext.h delete mode 100644 prebuilts/arm/include/libavutil/hwcontext_cuda.h delete mode 100644 prebuilts/arm/include/libavutil/hwcontext_d3d11va.h delete mode 100644 prebuilts/arm/include/libavutil/hwcontext_drm.h delete mode 100644 prebuilts/arm/include/libavutil/hwcontext_dxva2.h delete mode 100644 prebuilts/arm/include/libavutil/hwcontext_mediacodec.h delete mode 100644 prebuilts/arm/include/libavutil/hwcontext_opencl.h delete mode 100644 prebuilts/arm/include/libavutil/hwcontext_qsv.h delete mode 100644 prebuilts/arm/include/libavutil/hwcontext_vaapi.h delete mode 100644 prebuilts/arm/include/libavutil/hwcontext_vdpau.h delete mode 100644 prebuilts/arm/include/libavutil/hwcontext_videotoolbox.h delete mode 100644 prebuilts/arm/include/libavutil/hwcontext_vulkan.h delete mode 100644 prebuilts/arm/include/libavutil/imgutils.h delete mode 100644 prebuilts/arm/include/libavutil/intfloat.h delete mode 100644 prebuilts/arm/include/libavutil/intreadwrite.h delete mode 100644 prebuilts/arm/include/libavutil/lfg.h delete mode 100644 prebuilts/arm/include/libavutil/log.h delete mode 100644 prebuilts/arm/include/libavutil/lzo.h delete mode 100644 prebuilts/arm/include/libavutil/macros.h delete mode 100644 prebuilts/arm/include/libavutil/mastering_display_metadata.h delete mode 100644 prebuilts/arm/include/libavutil/mathematics.h delete mode 100644 prebuilts/arm/include/libavutil/md5.h delete mode 100644 prebuilts/arm/include/libavutil/mem.h delete mode 100644 prebuilts/arm/include/libavutil/motion_vector.h delete mode 100644 prebuilts/arm/include/libavutil/murmur3.h delete mode 100644 prebuilts/arm/include/libavutil/opt.h delete mode 100644 prebuilts/arm/include/libavutil/parseutils.h delete mode 100644 prebuilts/arm/include/libavutil/pixdesc.h delete mode 100644 prebuilts/arm/include/libavutil/pixelutils.h delete mode 100644 prebuilts/arm/include/libavutil/pixfmt.h delete mode 100644 prebuilts/arm/include/libavutil/random_seed.h delete mode 100644 prebuilts/arm/include/libavutil/rational.h delete mode 100644 prebuilts/arm/include/libavutil/rc4.h delete mode 100644 prebuilts/arm/include/libavutil/replaygain.h delete mode 100644 prebuilts/arm/include/libavutil/ripemd.h delete mode 100644 prebuilts/arm/include/libavutil/samplefmt.h delete mode 100644 prebuilts/arm/include/libavutil/sha.h delete mode 100644 prebuilts/arm/include/libavutil/sha512.h delete mode 100644 prebuilts/arm/include/libavutil/spherical.h delete mode 100644 prebuilts/arm/include/libavutil/stereo3d.h delete mode 100644 prebuilts/arm/include/libavutil/tea.h delete mode 100644 prebuilts/arm/include/libavutil/threadmessage.h delete mode 100644 prebuilts/arm/include/libavutil/time.h delete mode 100644 prebuilts/arm/include/libavutil/timecode.h delete mode 100644 prebuilts/arm/include/libavutil/timestamp.h delete mode 100644 prebuilts/arm/include/libavutil/tree.h delete mode 100644 prebuilts/arm/include/libavutil/twofish.h delete mode 100644 prebuilts/arm/include/libavutil/tx.h delete mode 100644 prebuilts/arm/include/libavutil/version.h delete mode 100644 prebuilts/arm/include/libavutil/video_enc_params.h delete mode 100644 prebuilts/arm/include/libavutil/xtea.h delete mode 100644 prebuilts/arm/include/libdrm/amdgpu.h delete mode 100644 prebuilts/arm/include/libdrm/amdgpu_drm.h delete mode 100644 prebuilts/arm/include/libdrm/android/gralloc_handle.h delete mode 100644 prebuilts/arm/include/libdrm/drm.h delete mode 100644 prebuilts/arm/include/libdrm/drm_fourcc.h delete mode 100644 prebuilts/arm/include/libdrm/drm_mode.h delete mode 100644 prebuilts/arm/include/libdrm/drm_sarea.h delete mode 100644 prebuilts/arm/include/libdrm/i915_drm.h delete mode 100644 prebuilts/arm/include/libdrm/mach64_drm.h delete mode 100644 prebuilts/arm/include/libdrm/mga_drm.h delete mode 100644 prebuilts/arm/include/libdrm/msm_drm.h delete mode 100644 prebuilts/arm/include/libdrm/nouveau/nouveau.h delete mode 100644 prebuilts/arm/include/libdrm/nouveau/nvif/cl0080.h delete mode 100644 prebuilts/arm/include/libdrm/nouveau/nvif/cl9097.h delete mode 100644 prebuilts/arm/include/libdrm/nouveau/nvif/class.h delete mode 100644 prebuilts/arm/include/libdrm/nouveau/nvif/if0002.h delete mode 100644 prebuilts/arm/include/libdrm/nouveau/nvif/if0003.h delete mode 100644 prebuilts/arm/include/libdrm/nouveau/nvif/ioctl.h delete mode 100644 prebuilts/arm/include/libdrm/nouveau/nvif/unpack.h delete mode 100644 prebuilts/arm/include/libdrm/nouveau_drm.h delete mode 100644 prebuilts/arm/include/libdrm/qxl_drm.h delete mode 100644 prebuilts/arm/include/libdrm/r128_drm.h delete mode 100644 prebuilts/arm/include/libdrm/r600_pci_ids.h delete mode 100644 prebuilts/arm/include/libdrm/radeon_bo.h delete mode 100644 prebuilts/arm/include/libdrm/radeon_bo_gem.h delete mode 100644 prebuilts/arm/include/libdrm/radeon_bo_int.h delete mode 100644 prebuilts/arm/include/libdrm/radeon_cs.h delete mode 100644 prebuilts/arm/include/libdrm/radeon_cs_gem.h delete mode 100644 prebuilts/arm/include/libdrm/radeon_cs_int.h delete mode 100644 prebuilts/arm/include/libdrm/radeon_drm.h delete mode 100644 prebuilts/arm/include/libdrm/radeon_surface.h delete mode 100644 prebuilts/arm/include/libdrm/savage_drm.h delete mode 100644 prebuilts/arm/include/libdrm/sis_drm.h delete mode 100644 prebuilts/arm/include/libdrm/tegra_drm.h delete mode 100644 prebuilts/arm/include/libdrm/vc4_drm.h delete mode 100644 prebuilts/arm/include/libdrm/vc4_packet.h delete mode 100644 prebuilts/arm/include/libdrm/vc4_qpu_defines.h delete mode 100644 prebuilts/arm/include/libdrm/via_drm.h delete mode 100644 prebuilts/arm/include/libdrm/virtgpu_drm.h delete mode 100644 prebuilts/arm/include/libdrm/vmwgfx_drm.h delete mode 100644 prebuilts/arm/include/libpostproc/postprocess.h delete mode 100644 prebuilts/arm/include/libpostproc/version.h delete mode 100644 prebuilts/arm/include/libswresample/swresample.h delete mode 100644 prebuilts/arm/include/libswresample/version.h delete mode 100644 prebuilts/arm/include/libswscale/swscale.h delete mode 100644 prebuilts/arm/include/libswscale/version.h delete mode 100644 prebuilts/arm/include/va/va.h delete mode 100644 prebuilts/arm/include/va/va_android.h delete mode 100644 prebuilts/arm/include/va/va_backend.h delete mode 100644 prebuilts/arm/include/va/va_backend_prot.h delete mode 100644 prebuilts/arm/include/va/va_backend_vpp.h delete mode 100644 prebuilts/arm/include/va/va_compat.h delete mode 100644 prebuilts/arm/include/va/va_dec_av1.h delete mode 100644 prebuilts/arm/include/va/va_dec_hevc.h delete mode 100644 prebuilts/arm/include/va/va_dec_jpeg.h delete mode 100644 prebuilts/arm/include/va/va_dec_vp8.h delete mode 100644 prebuilts/arm/include/va/va_dec_vp9.h delete mode 100644 prebuilts/arm/include/va/va_drm.h delete mode 100644 prebuilts/arm/include/va/va_drmcommon.h delete mode 100644 prebuilts/arm/include/va/va_egl.h delete mode 100644 prebuilts/arm/include/va/va_enc_av1.h delete mode 100644 prebuilts/arm/include/va/va_enc_h264.h delete mode 100644 prebuilts/arm/include/va/va_enc_hevc.h delete mode 100644 prebuilts/arm/include/va/va_enc_jpeg.h delete mode 100644 prebuilts/arm/include/va/va_enc_mpeg2.h delete mode 100644 prebuilts/arm/include/va/va_enc_vp8.h delete mode 100644 prebuilts/arm/include/va/va_enc_vp9.h delete mode 100644 prebuilts/arm/include/va/va_fei.h delete mode 100644 prebuilts/arm/include/va/va_fei_h264.h delete mode 100644 prebuilts/arm/include/va/va_fei_hevc.h delete mode 100644 prebuilts/arm/include/va/va_prot.h delete mode 100644 prebuilts/arm/include/va/va_str.h delete mode 100644 prebuilts/arm/include/va/va_tpi.h delete mode 100644 prebuilts/arm/include/va/va_version.h delete mode 100644 prebuilts/arm/include/va/va_vpp.h delete mode 100644 prebuilts/arm/include/x264.h delete mode 100644 prebuilts/arm/include/x264_config.h delete mode 100644 prebuilts/arm/include/xf86drm.h delete mode 100644 prebuilts/arm/include/xf86drmMode.h delete mode 100644 prebuilts/x86/include/gbm.h delete mode 100644 prebuilts/x86/include/libavcodec/ac3_parser.h delete mode 100644 prebuilts/x86/include/libavcodec/adts_parser.h delete mode 100644 prebuilts/x86/include/libavcodec/avcodec.h delete mode 100644 prebuilts/x86/include/libavcodec/avdct.h delete mode 100644 prebuilts/x86/include/libavcodec/avfft.h delete mode 100644 prebuilts/x86/include/libavcodec/bsf.h delete mode 100644 prebuilts/x86/include/libavcodec/codec.h delete mode 100644 prebuilts/x86/include/libavcodec/codec_desc.h delete mode 100644 prebuilts/x86/include/libavcodec/codec_id.h delete mode 100644 prebuilts/x86/include/libavcodec/codec_par.h delete mode 100644 prebuilts/x86/include/libavcodec/d3d11va.h delete mode 100644 prebuilts/x86/include/libavcodec/dirac.h delete mode 100644 prebuilts/x86/include/libavcodec/dv_profile.h delete mode 100644 prebuilts/x86/include/libavcodec/dxva2.h delete mode 100644 prebuilts/x86/include/libavcodec/jni.h delete mode 100644 prebuilts/x86/include/libavcodec/mediacodec.h delete mode 100644 prebuilts/x86/include/libavcodec/packet.h delete mode 100644 prebuilts/x86/include/libavcodec/qsv.h delete mode 100644 prebuilts/x86/include/libavcodec/vaapi.h delete mode 100644 prebuilts/x86/include/libavcodec/vdpau.h delete mode 100644 prebuilts/x86/include/libavcodec/version.h delete mode 100644 prebuilts/x86/include/libavcodec/videotoolbox.h delete mode 100644 prebuilts/x86/include/libavcodec/vorbis_parser.h delete mode 100644 prebuilts/x86/include/libavcodec/xvmc.h delete mode 100644 prebuilts/x86/include/libavdevice/avdevice.h delete mode 100644 prebuilts/x86/include/libavdevice/version.h delete mode 100644 prebuilts/x86/include/libavfilter/avfilter.h delete mode 100644 prebuilts/x86/include/libavfilter/buffersink.h delete mode 100644 prebuilts/x86/include/libavfilter/buffersrc.h delete mode 100644 prebuilts/x86/include/libavfilter/version.h delete mode 100644 prebuilts/x86/include/libavformat/avformat.h delete mode 100644 prebuilts/x86/include/libavformat/avio.h delete mode 100644 prebuilts/x86/include/libavformat/version.h delete mode 100644 prebuilts/x86/include/libavutil/adler32.h delete mode 100644 prebuilts/x86/include/libavutil/aes.h delete mode 100644 prebuilts/x86/include/libavutil/aes_ctr.h delete mode 100644 prebuilts/x86/include/libavutil/attributes.h delete mode 100644 prebuilts/x86/include/libavutil/audio_fifo.h delete mode 100644 prebuilts/x86/include/libavutil/avassert.h delete mode 100644 prebuilts/x86/include/libavutil/avconfig.h delete mode 100644 prebuilts/x86/include/libavutil/avstring.h delete mode 100644 prebuilts/x86/include/libavutil/avutil.h delete mode 100644 prebuilts/x86/include/libavutil/base64.h delete mode 100644 prebuilts/x86/include/libavutil/blowfish.h delete mode 100644 prebuilts/x86/include/libavutil/bprint.h delete mode 100644 prebuilts/x86/include/libavutil/bswap.h delete mode 100644 prebuilts/x86/include/libavutil/buffer.h delete mode 100644 prebuilts/x86/include/libavutil/camellia.h delete mode 100644 prebuilts/x86/include/libavutil/cast5.h delete mode 100644 prebuilts/x86/include/libavutil/channel_layout.h delete mode 100644 prebuilts/x86/include/libavutil/common.h delete mode 100644 prebuilts/x86/include/libavutil/cpu.h delete mode 100644 prebuilts/x86/include/libavutil/crc.h delete mode 100644 prebuilts/x86/include/libavutil/des.h delete mode 100644 prebuilts/x86/include/libavutil/dict.h delete mode 100644 prebuilts/x86/include/libavutil/display.h delete mode 100644 prebuilts/x86/include/libavutil/dovi_meta.h delete mode 100644 prebuilts/x86/include/libavutil/downmix_info.h delete mode 100644 prebuilts/x86/include/libavutil/encryption_info.h delete mode 100644 prebuilts/x86/include/libavutil/error.h delete mode 100644 prebuilts/x86/include/libavutil/eval.h delete mode 100644 prebuilts/x86/include/libavutil/ffversion.h delete mode 100644 prebuilts/x86/include/libavutil/fifo.h delete mode 100644 prebuilts/x86/include/libavutil/file.h delete mode 100644 prebuilts/x86/include/libavutil/film_grain_params.h delete mode 100644 prebuilts/x86/include/libavutil/frame.h delete mode 100644 prebuilts/x86/include/libavutil/hash.h delete mode 100644 prebuilts/x86/include/libavutil/hdr_dynamic_metadata.h delete mode 100644 prebuilts/x86/include/libavutil/hmac.h delete mode 100644 prebuilts/x86/include/libavutil/hwcontext.h delete mode 100644 prebuilts/x86/include/libavutil/hwcontext_cuda.h delete mode 100644 prebuilts/x86/include/libavutil/hwcontext_d3d11va.h delete mode 100644 prebuilts/x86/include/libavutil/hwcontext_drm.h delete mode 100644 prebuilts/x86/include/libavutil/hwcontext_dxva2.h delete mode 100644 prebuilts/x86/include/libavutil/hwcontext_mediacodec.h delete mode 100644 prebuilts/x86/include/libavutil/hwcontext_opencl.h delete mode 100644 prebuilts/x86/include/libavutil/hwcontext_qsv.h delete mode 100644 prebuilts/x86/include/libavutil/hwcontext_vaapi.h delete mode 100644 prebuilts/x86/include/libavutil/hwcontext_vdpau.h delete mode 100644 prebuilts/x86/include/libavutil/hwcontext_videotoolbox.h delete mode 100644 prebuilts/x86/include/libavutil/hwcontext_vulkan.h delete mode 100644 prebuilts/x86/include/libavutil/imgutils.h delete mode 100644 prebuilts/x86/include/libavutil/intfloat.h delete mode 100644 prebuilts/x86/include/libavutil/intreadwrite.h delete mode 100644 prebuilts/x86/include/libavutil/lfg.h delete mode 100644 prebuilts/x86/include/libavutil/log.h delete mode 100644 prebuilts/x86/include/libavutil/lzo.h delete mode 100644 prebuilts/x86/include/libavutil/macros.h delete mode 100644 prebuilts/x86/include/libavutil/mastering_display_metadata.h delete mode 100644 prebuilts/x86/include/libavutil/mathematics.h delete mode 100644 prebuilts/x86/include/libavutil/md5.h delete mode 100644 prebuilts/x86/include/libavutil/mem.h delete mode 100644 prebuilts/x86/include/libavutil/motion_vector.h delete mode 100644 prebuilts/x86/include/libavutil/murmur3.h delete mode 100644 prebuilts/x86/include/libavutil/opt.h delete mode 100644 prebuilts/x86/include/libavutil/parseutils.h delete mode 100644 prebuilts/x86/include/libavutil/pixdesc.h delete mode 100644 prebuilts/x86/include/libavutil/pixelutils.h delete mode 100644 prebuilts/x86/include/libavutil/pixfmt.h delete mode 100644 prebuilts/x86/include/libavutil/random_seed.h delete mode 100644 prebuilts/x86/include/libavutil/rational.h delete mode 100644 prebuilts/x86/include/libavutil/rc4.h delete mode 100644 prebuilts/x86/include/libavutil/replaygain.h delete mode 100644 prebuilts/x86/include/libavutil/ripemd.h delete mode 100644 prebuilts/x86/include/libavutil/samplefmt.h delete mode 100644 prebuilts/x86/include/libavutil/sha.h delete mode 100644 prebuilts/x86/include/libavutil/sha512.h delete mode 100644 prebuilts/x86/include/libavutil/spherical.h delete mode 100644 prebuilts/x86/include/libavutil/stereo3d.h delete mode 100644 prebuilts/x86/include/libavutil/tea.h delete mode 100644 prebuilts/x86/include/libavutil/threadmessage.h delete mode 100644 prebuilts/x86/include/libavutil/time.h delete mode 100644 prebuilts/x86/include/libavutil/timecode.h delete mode 100644 prebuilts/x86/include/libavutil/timestamp.h delete mode 100644 prebuilts/x86/include/libavutil/tree.h delete mode 100644 prebuilts/x86/include/libavutil/twofish.h delete mode 100644 prebuilts/x86/include/libavutil/tx.h delete mode 100644 prebuilts/x86/include/libavutil/version.h delete mode 100644 prebuilts/x86/include/libavutil/video_enc_params.h delete mode 100644 prebuilts/x86/include/libavutil/xtea.h delete mode 100644 prebuilts/x86/include/libdrm/amdgpu.h delete mode 100644 prebuilts/x86/include/libdrm/amdgpu_drm.h delete mode 100644 prebuilts/x86/include/libdrm/android/gralloc_handle.h delete mode 100644 prebuilts/x86/include/libdrm/drm.h delete mode 100644 prebuilts/x86/include/libdrm/drm_fourcc.h delete mode 100644 prebuilts/x86/include/libdrm/drm_mode.h delete mode 100644 prebuilts/x86/include/libdrm/drm_sarea.h delete mode 100644 prebuilts/x86/include/libdrm/i915_drm.h delete mode 100644 prebuilts/x86/include/libdrm/intel_aub.h delete mode 100644 prebuilts/x86/include/libdrm/intel_bufmgr.h delete mode 100644 prebuilts/x86/include/libdrm/intel_debug.h delete mode 100644 prebuilts/x86/include/libdrm/mach64_drm.h delete mode 100644 prebuilts/x86/include/libdrm/mga_drm.h delete mode 100644 prebuilts/x86/include/libdrm/msm_drm.h delete mode 100644 prebuilts/x86/include/libdrm/nouveau/nouveau.h delete mode 100644 prebuilts/x86/include/libdrm/nouveau/nvif/cl0080.h delete mode 100644 prebuilts/x86/include/libdrm/nouveau/nvif/cl9097.h delete mode 100644 prebuilts/x86/include/libdrm/nouveau/nvif/class.h delete mode 100644 prebuilts/x86/include/libdrm/nouveau/nvif/if0002.h delete mode 100644 prebuilts/x86/include/libdrm/nouveau/nvif/if0003.h delete mode 100644 prebuilts/x86/include/libdrm/nouveau/nvif/ioctl.h delete mode 100644 prebuilts/x86/include/libdrm/nouveau/nvif/unpack.h delete mode 100644 prebuilts/x86/include/libdrm/nouveau_drm.h delete mode 100644 prebuilts/x86/include/libdrm/qxl_drm.h delete mode 100644 prebuilts/x86/include/libdrm/r128_drm.h delete mode 100644 prebuilts/x86/include/libdrm/r600_pci_ids.h delete mode 100644 prebuilts/x86/include/libdrm/radeon_bo.h delete mode 100644 prebuilts/x86/include/libdrm/radeon_bo_gem.h delete mode 100644 prebuilts/x86/include/libdrm/radeon_bo_int.h delete mode 100644 prebuilts/x86/include/libdrm/radeon_cs.h delete mode 100644 prebuilts/x86/include/libdrm/radeon_cs_gem.h delete mode 100644 prebuilts/x86/include/libdrm/radeon_cs_int.h delete mode 100644 prebuilts/x86/include/libdrm/radeon_drm.h delete mode 100644 prebuilts/x86/include/libdrm/radeon_surface.h delete mode 100644 prebuilts/x86/include/libdrm/savage_drm.h delete mode 100644 prebuilts/x86/include/libdrm/sis_drm.h delete mode 100644 prebuilts/x86/include/libdrm/tegra_drm.h delete mode 100644 prebuilts/x86/include/libdrm/vc4_drm.h delete mode 100644 prebuilts/x86/include/libdrm/via_drm.h delete mode 100644 prebuilts/x86/include/libdrm/virtgpu_drm.h delete mode 100644 prebuilts/x86/include/libdrm/vmwgfx_drm.h delete mode 100644 prebuilts/x86/include/libpostproc/postprocess.h delete mode 100644 prebuilts/x86/include/libpostproc/version.h delete mode 100644 prebuilts/x86/include/libswresample/swresample.h delete mode 100644 prebuilts/x86/include/libswresample/version.h delete mode 100644 prebuilts/x86/include/libswscale/swscale.h delete mode 100644 prebuilts/x86/include/libswscale/version.h delete mode 100644 prebuilts/x86/include/va/va.h delete mode 100644 prebuilts/x86/include/va/va_android.h delete mode 100644 prebuilts/x86/include/va/va_backend.h delete mode 100644 prebuilts/x86/include/va/va_backend_prot.h delete mode 100644 prebuilts/x86/include/va/va_backend_vpp.h delete mode 100644 prebuilts/x86/include/va/va_compat.h delete mode 100644 prebuilts/x86/include/va/va_dec_av1.h delete mode 100644 prebuilts/x86/include/va/va_dec_hevc.h delete mode 100644 prebuilts/x86/include/va/va_dec_jpeg.h delete mode 100644 prebuilts/x86/include/va/va_dec_vp8.h delete mode 100644 prebuilts/x86/include/va/va_dec_vp9.h delete mode 100644 prebuilts/x86/include/va/va_drm.h delete mode 100644 prebuilts/x86/include/va/va_drmcommon.h delete mode 100644 prebuilts/x86/include/va/va_egl.h delete mode 100644 prebuilts/x86/include/va/va_enc_av1.h delete mode 100644 prebuilts/x86/include/va/va_enc_h264.h delete mode 100644 prebuilts/x86/include/va/va_enc_hevc.h delete mode 100644 prebuilts/x86/include/va/va_enc_jpeg.h delete mode 100644 prebuilts/x86/include/va/va_enc_mpeg2.h delete mode 100644 prebuilts/x86/include/va/va_enc_vp8.h delete mode 100644 prebuilts/x86/include/va/va_enc_vp9.h delete mode 100644 prebuilts/x86/include/va/va_fei.h delete mode 100644 prebuilts/x86/include/va/va_fei_h264.h delete mode 100644 prebuilts/x86/include/va/va_fei_hevc.h delete mode 100644 prebuilts/x86/include/va/va_prot.h delete mode 100644 prebuilts/x86/include/va/va_str.h delete mode 100644 prebuilts/x86/include/va/va_tpi.h delete mode 100644 prebuilts/x86/include/va/va_version.h delete mode 100644 prebuilts/x86/include/va/va_vpp.h delete mode 100644 prebuilts/x86/include/x264.h delete mode 100644 prebuilts/x86/include/x264_config.h delete mode 100644 prebuilts/x86/include/xf86drm.h delete mode 100644 prebuilts/x86/include/xf86drmMode.h delete mode 100644 prebuilts/x86_64/include/gbm.h delete mode 100644 prebuilts/x86_64/include/libavcodec/ac3_parser.h delete mode 100644 prebuilts/x86_64/include/libavcodec/adts_parser.h delete mode 100644 prebuilts/x86_64/include/libavcodec/avcodec.h delete mode 100644 prebuilts/x86_64/include/libavcodec/avdct.h delete mode 100644 prebuilts/x86_64/include/libavcodec/avfft.h delete mode 100644 prebuilts/x86_64/include/libavcodec/bsf.h delete mode 100644 prebuilts/x86_64/include/libavcodec/codec.h delete mode 100644 prebuilts/x86_64/include/libavcodec/codec_desc.h delete mode 100644 prebuilts/x86_64/include/libavcodec/codec_id.h delete mode 100644 prebuilts/x86_64/include/libavcodec/codec_par.h delete mode 100644 prebuilts/x86_64/include/libavcodec/d3d11va.h delete mode 100644 prebuilts/x86_64/include/libavcodec/dirac.h delete mode 100644 prebuilts/x86_64/include/libavcodec/dv_profile.h delete mode 100644 prebuilts/x86_64/include/libavcodec/dxva2.h delete mode 100644 prebuilts/x86_64/include/libavcodec/jni.h delete mode 100644 prebuilts/x86_64/include/libavcodec/mediacodec.h delete mode 100644 prebuilts/x86_64/include/libavcodec/packet.h delete mode 100644 prebuilts/x86_64/include/libavcodec/qsv.h delete mode 100644 prebuilts/x86_64/include/libavcodec/vaapi.h delete mode 100644 prebuilts/x86_64/include/libavcodec/vdpau.h delete mode 100644 prebuilts/x86_64/include/libavcodec/version.h delete mode 100644 prebuilts/x86_64/include/libavcodec/videotoolbox.h delete mode 100644 prebuilts/x86_64/include/libavcodec/vorbis_parser.h delete mode 100644 prebuilts/x86_64/include/libavcodec/xvmc.h delete mode 100644 prebuilts/x86_64/include/libavdevice/avdevice.h delete mode 100644 prebuilts/x86_64/include/libavdevice/version.h delete mode 100644 prebuilts/x86_64/include/libavfilter/avfilter.h delete mode 100644 prebuilts/x86_64/include/libavfilter/buffersink.h delete mode 100644 prebuilts/x86_64/include/libavfilter/buffersrc.h delete mode 100644 prebuilts/x86_64/include/libavfilter/version.h delete mode 100644 prebuilts/x86_64/include/libavformat/avformat.h delete mode 100644 prebuilts/x86_64/include/libavformat/avio.h delete mode 100644 prebuilts/x86_64/include/libavformat/version.h delete mode 100644 prebuilts/x86_64/include/libavutil/adler32.h delete mode 100644 prebuilts/x86_64/include/libavutil/aes.h delete mode 100644 prebuilts/x86_64/include/libavutil/aes_ctr.h delete mode 100644 prebuilts/x86_64/include/libavutil/attributes.h delete mode 100644 prebuilts/x86_64/include/libavutil/audio_fifo.h delete mode 100644 prebuilts/x86_64/include/libavutil/avassert.h delete mode 100644 prebuilts/x86_64/include/libavutil/avconfig.h delete mode 100644 prebuilts/x86_64/include/libavutil/avstring.h delete mode 100644 prebuilts/x86_64/include/libavutil/avutil.h delete mode 100644 prebuilts/x86_64/include/libavutil/base64.h delete mode 100644 prebuilts/x86_64/include/libavutil/blowfish.h delete mode 100644 prebuilts/x86_64/include/libavutil/bprint.h delete mode 100644 prebuilts/x86_64/include/libavutil/bswap.h delete mode 100644 prebuilts/x86_64/include/libavutil/buffer.h delete mode 100644 prebuilts/x86_64/include/libavutil/camellia.h delete mode 100644 prebuilts/x86_64/include/libavutil/cast5.h delete mode 100644 prebuilts/x86_64/include/libavutil/channel_layout.h delete mode 100644 prebuilts/x86_64/include/libavutil/common.h delete mode 100644 prebuilts/x86_64/include/libavutil/cpu.h delete mode 100644 prebuilts/x86_64/include/libavutil/crc.h delete mode 100644 prebuilts/x86_64/include/libavutil/des.h delete mode 100644 prebuilts/x86_64/include/libavutil/dict.h delete mode 100644 prebuilts/x86_64/include/libavutil/display.h delete mode 100644 prebuilts/x86_64/include/libavutil/dovi_meta.h delete mode 100644 prebuilts/x86_64/include/libavutil/downmix_info.h delete mode 100644 prebuilts/x86_64/include/libavutil/encryption_info.h delete mode 100644 prebuilts/x86_64/include/libavutil/error.h delete mode 100644 prebuilts/x86_64/include/libavutil/eval.h delete mode 100644 prebuilts/x86_64/include/libavutil/ffversion.h delete mode 100644 prebuilts/x86_64/include/libavutil/fifo.h delete mode 100644 prebuilts/x86_64/include/libavutil/file.h delete mode 100644 prebuilts/x86_64/include/libavutil/film_grain_params.h delete mode 100644 prebuilts/x86_64/include/libavutil/frame.h delete mode 100644 prebuilts/x86_64/include/libavutil/hash.h delete mode 100644 prebuilts/x86_64/include/libavutil/hdr_dynamic_metadata.h delete mode 100644 prebuilts/x86_64/include/libavutil/hmac.h delete mode 100644 prebuilts/x86_64/include/libavutil/hwcontext.h delete mode 100644 prebuilts/x86_64/include/libavutil/hwcontext_cuda.h delete mode 100644 prebuilts/x86_64/include/libavutil/hwcontext_d3d11va.h delete mode 100644 prebuilts/x86_64/include/libavutil/hwcontext_drm.h delete mode 100644 prebuilts/x86_64/include/libavutil/hwcontext_dxva2.h delete mode 100644 prebuilts/x86_64/include/libavutil/hwcontext_mediacodec.h delete mode 100644 prebuilts/x86_64/include/libavutil/hwcontext_opencl.h delete mode 100644 prebuilts/x86_64/include/libavutil/hwcontext_qsv.h delete mode 100644 prebuilts/x86_64/include/libavutil/hwcontext_vaapi.h delete mode 100644 prebuilts/x86_64/include/libavutil/hwcontext_vdpau.h delete mode 100644 prebuilts/x86_64/include/libavutil/hwcontext_videotoolbox.h delete mode 100644 prebuilts/x86_64/include/libavutil/hwcontext_vulkan.h delete mode 100644 prebuilts/x86_64/include/libavutil/imgutils.h delete mode 100644 prebuilts/x86_64/include/libavutil/intfloat.h delete mode 100644 prebuilts/x86_64/include/libavutil/intreadwrite.h delete mode 100644 prebuilts/x86_64/include/libavutil/lfg.h delete mode 100644 prebuilts/x86_64/include/libavutil/log.h delete mode 100644 prebuilts/x86_64/include/libavutil/lzo.h delete mode 100644 prebuilts/x86_64/include/libavutil/macros.h delete mode 100644 prebuilts/x86_64/include/libavutil/mastering_display_metadata.h delete mode 100644 prebuilts/x86_64/include/libavutil/mathematics.h delete mode 100644 prebuilts/x86_64/include/libavutil/md5.h delete mode 100644 prebuilts/x86_64/include/libavutil/mem.h delete mode 100644 prebuilts/x86_64/include/libavutil/motion_vector.h delete mode 100644 prebuilts/x86_64/include/libavutil/murmur3.h delete mode 100644 prebuilts/x86_64/include/libavutil/opt.h delete mode 100644 prebuilts/x86_64/include/libavutil/parseutils.h delete mode 100644 prebuilts/x86_64/include/libavutil/pixdesc.h delete mode 100644 prebuilts/x86_64/include/libavutil/pixelutils.h delete mode 100644 prebuilts/x86_64/include/libavutil/pixfmt.h delete mode 100644 prebuilts/x86_64/include/libavutil/random_seed.h delete mode 100644 prebuilts/x86_64/include/libavutil/rational.h delete mode 100644 prebuilts/x86_64/include/libavutil/rc4.h delete mode 100644 prebuilts/x86_64/include/libavutil/replaygain.h delete mode 100644 prebuilts/x86_64/include/libavutil/ripemd.h delete mode 100644 prebuilts/x86_64/include/libavutil/samplefmt.h delete mode 100644 prebuilts/x86_64/include/libavutil/sha.h delete mode 100644 prebuilts/x86_64/include/libavutil/sha512.h delete mode 100644 prebuilts/x86_64/include/libavutil/spherical.h delete mode 100644 prebuilts/x86_64/include/libavutil/stereo3d.h delete mode 100644 prebuilts/x86_64/include/libavutil/tea.h delete mode 100644 prebuilts/x86_64/include/libavutil/threadmessage.h delete mode 100644 prebuilts/x86_64/include/libavutil/time.h delete mode 100644 prebuilts/x86_64/include/libavutil/timecode.h delete mode 100644 prebuilts/x86_64/include/libavutil/timestamp.h delete mode 100644 prebuilts/x86_64/include/libavutil/tree.h delete mode 100644 prebuilts/x86_64/include/libavutil/twofish.h delete mode 100644 prebuilts/x86_64/include/libavutil/tx.h delete mode 100644 prebuilts/x86_64/include/libavutil/version.h delete mode 100644 prebuilts/x86_64/include/libavutil/video_enc_params.h delete mode 100644 prebuilts/x86_64/include/libavutil/xtea.h delete mode 100644 prebuilts/x86_64/include/libdrm/amdgpu.h delete mode 100644 prebuilts/x86_64/include/libdrm/amdgpu_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/android/gralloc_handle.h delete mode 100644 prebuilts/x86_64/include/libdrm/drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/drm_fourcc.h delete mode 100644 prebuilts/x86_64/include/libdrm/drm_mode.h delete mode 100644 prebuilts/x86_64/include/libdrm/drm_sarea.h delete mode 100644 prebuilts/x86_64/include/libdrm/i915_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/intel_aub.h delete mode 100644 prebuilts/x86_64/include/libdrm/intel_bufmgr.h delete mode 100644 prebuilts/x86_64/include/libdrm/intel_debug.h delete mode 100644 prebuilts/x86_64/include/libdrm/mach64_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/mga_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/msm_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/nouveau/nouveau.h delete mode 100644 prebuilts/x86_64/include/libdrm/nouveau/nvif/cl0080.h delete mode 100644 prebuilts/x86_64/include/libdrm/nouveau/nvif/cl9097.h delete mode 100644 prebuilts/x86_64/include/libdrm/nouveau/nvif/class.h delete mode 100644 prebuilts/x86_64/include/libdrm/nouveau/nvif/if0002.h delete mode 100644 prebuilts/x86_64/include/libdrm/nouveau/nvif/if0003.h delete mode 100644 prebuilts/x86_64/include/libdrm/nouveau/nvif/ioctl.h delete mode 100644 prebuilts/x86_64/include/libdrm/nouveau/nvif/unpack.h delete mode 100644 prebuilts/x86_64/include/libdrm/nouveau_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/qxl_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/r128_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/r600_pci_ids.h delete mode 100644 prebuilts/x86_64/include/libdrm/radeon_bo.h delete mode 100644 prebuilts/x86_64/include/libdrm/radeon_bo_gem.h delete mode 100644 prebuilts/x86_64/include/libdrm/radeon_bo_int.h delete mode 100644 prebuilts/x86_64/include/libdrm/radeon_cs.h delete mode 100644 prebuilts/x86_64/include/libdrm/radeon_cs_gem.h delete mode 100644 prebuilts/x86_64/include/libdrm/radeon_cs_int.h delete mode 100644 prebuilts/x86_64/include/libdrm/radeon_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/radeon_surface.h delete mode 100644 prebuilts/x86_64/include/libdrm/savage_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/sis_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/tegra_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/vc4_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/via_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/virtgpu_drm.h delete mode 100644 prebuilts/x86_64/include/libdrm/vmwgfx_drm.h delete mode 100644 prebuilts/x86_64/include/libpostproc/postprocess.h delete mode 100644 prebuilts/x86_64/include/libpostproc/version.h delete mode 100644 prebuilts/x86_64/include/libswresample/swresample.h delete mode 100644 prebuilts/x86_64/include/libswresample/version.h delete mode 100644 prebuilts/x86_64/include/libswscale/swscale.h delete mode 100644 prebuilts/x86_64/include/libswscale/version.h delete mode 100644 prebuilts/x86_64/include/va/va.h delete mode 100644 prebuilts/x86_64/include/va/va_android.h delete mode 100644 prebuilts/x86_64/include/va/va_backend.h delete mode 100644 prebuilts/x86_64/include/va/va_backend_prot.h delete mode 100644 prebuilts/x86_64/include/va/va_backend_vpp.h delete mode 100644 prebuilts/x86_64/include/va/va_compat.h delete mode 100644 prebuilts/x86_64/include/va/va_dec_av1.h delete mode 100644 prebuilts/x86_64/include/va/va_dec_hevc.h delete mode 100644 prebuilts/x86_64/include/va/va_dec_jpeg.h delete mode 100644 prebuilts/x86_64/include/va/va_dec_vp8.h delete mode 100644 prebuilts/x86_64/include/va/va_dec_vp9.h delete mode 100644 prebuilts/x86_64/include/va/va_drm.h delete mode 100644 prebuilts/x86_64/include/va/va_drmcommon.h delete mode 100644 prebuilts/x86_64/include/va/va_egl.h delete mode 100644 prebuilts/x86_64/include/va/va_enc_av1.h delete mode 100644 prebuilts/x86_64/include/va/va_enc_h264.h delete mode 100644 prebuilts/x86_64/include/va/va_enc_hevc.h delete mode 100644 prebuilts/x86_64/include/va/va_enc_jpeg.h delete mode 100644 prebuilts/x86_64/include/va/va_enc_mpeg2.h delete mode 100644 prebuilts/x86_64/include/va/va_enc_vp8.h delete mode 100644 prebuilts/x86_64/include/va/va_enc_vp9.h delete mode 100644 prebuilts/x86_64/include/va/va_fei.h delete mode 100644 prebuilts/x86_64/include/va/va_fei_h264.h delete mode 100644 prebuilts/x86_64/include/va/va_fei_hevc.h delete mode 100644 prebuilts/x86_64/include/va/va_prot.h delete mode 100644 prebuilts/x86_64/include/va/va_str.h delete mode 100644 prebuilts/x86_64/include/va/va_tpi.h delete mode 100644 prebuilts/x86_64/include/va/va_version.h delete mode 100644 prebuilts/x86_64/include/va/va_vpp.h delete mode 100644 prebuilts/x86_64/include/x264.h delete mode 100644 prebuilts/x86_64/include/x264_config.h delete mode 100644 prebuilts/x86_64/include/xf86drm.h delete mode 100644 prebuilts/x86_64/include/xf86drmMode.h diff --git a/prebuilts/aarch64/include/gbm.h b/prebuilts/aarch64/include/gbm.h deleted file mode 100644 index 829c4cb..0000000 --- a/prebuilts/aarch64/include/gbm.h +++ /dev/null @@ -1,461 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Benjamin Franzke - */ - -#ifndef _GBM_H_ -#define _GBM_H_ - -#define __GBM__ 1 - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * \file gbm.h - * \brief Generic Buffer Manager - */ - -struct gbm_device; -struct gbm_bo; -struct gbm_surface; - -/** - * \mainpage The Generic Buffer Manager - * - * This module provides an abstraction that the caller can use to request a - * buffer from the underlying memory management system for the platform. - * - * This allows the creation of portable code whilst still allowing access to - * the underlying memory manager. - */ - -/** - * Abstraction representing the handle to a buffer allocated by the - * manager - */ -union gbm_bo_handle { - void *ptr; - int32_t s32; - uint32_t u32; - int64_t s64; - uint64_t u64; -}; - -/** Format of the allocated buffer */ -enum gbm_bo_format { - /** RGB with 8 bits per channel in a 32 bit value */ - GBM_BO_FORMAT_XRGB8888, - /** ARGB with 8 bits per channel in a 32 bit value */ - GBM_BO_FORMAT_ARGB8888 -}; - - -/** - * The FourCC format codes are taken from the drm_fourcc.h definition, and - * re-namespaced. New GBM formats must not be added, unless they are - * identical ports from drm_fourcc. - */ -#define __gbm_fourcc_code(a,b,c,d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | \ - ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24)) - -#define GBM_FORMAT_BIG_ENDIAN (1<<31) /* format is big endian instead of little endian */ - -/* color index */ -#define GBM_FORMAT_C8 __gbm_fourcc_code('C', '8', ' ', ' ') /* [7:0] C */ - -/* 8 bpp Red */ -#define GBM_FORMAT_R8 __gbm_fourcc_code('R', '8', ' ', ' ') /* [7:0] R */ - -/* 16 bpp Red */ -#define GBM_FORMAT_R16 __gbm_fourcc_code('R', '1', '6', ' ') /* [15:0] R little endian */ - -/* 16 bpp RG */ -#define GBM_FORMAT_GR88 __gbm_fourcc_code('G', 'R', '8', '8') /* [15:0] G:R 8:8 little endian */ - -/* 32 bpp RG */ -#define GBM_FORMAT_RG1616 __gbm_fourcc_code('R', 'G', '3', '2') /* [31:0] R:G 16:16 little endian */ -#define GBM_FORMAT_GR1616 __gbm_fourcc_code('G', 'R', '3', '2') /* [31:0] G:R 16:16 little endian */ - -/* 8 bpp RGB */ -#define GBM_FORMAT_RGB332 __gbm_fourcc_code('R', 'G', 'B', '8') /* [7:0] R:G:B 3:3:2 */ -#define GBM_FORMAT_BGR233 __gbm_fourcc_code('B', 'G', 'R', '8') /* [7:0] B:G:R 2:3:3 */ - -/* 16 bpp RGB */ -#define GBM_FORMAT_XRGB4444 __gbm_fourcc_code('X', 'R', '1', '2') /* [15:0] x:R:G:B 4:4:4:4 little endian */ -#define GBM_FORMAT_XBGR4444 __gbm_fourcc_code('X', 'B', '1', '2') /* [15:0] x:B:G:R 4:4:4:4 little endian */ -#define GBM_FORMAT_RGBX4444 __gbm_fourcc_code('R', 'X', '1', '2') /* [15:0] R:G:B:x 4:4:4:4 little endian */ -#define GBM_FORMAT_BGRX4444 __gbm_fourcc_code('B', 'X', '1', '2') /* [15:0] B:G:R:x 4:4:4:4 little endian */ - -#define GBM_FORMAT_ARGB4444 __gbm_fourcc_code('A', 'R', '1', '2') /* [15:0] A:R:G:B 4:4:4:4 little endian */ -#define GBM_FORMAT_ABGR4444 __gbm_fourcc_code('A', 'B', '1', '2') /* [15:0] A:B:G:R 4:4:4:4 little endian */ -#define GBM_FORMAT_RGBA4444 __gbm_fourcc_code('R', 'A', '1', '2') /* [15:0] R:G:B:A 4:4:4:4 little endian */ -#define GBM_FORMAT_BGRA4444 __gbm_fourcc_code('B', 'A', '1', '2') /* [15:0] B:G:R:A 4:4:4:4 little endian */ - -#define GBM_FORMAT_XRGB1555 __gbm_fourcc_code('X', 'R', '1', '5') /* [15:0] x:R:G:B 1:5:5:5 little endian */ -#define GBM_FORMAT_XBGR1555 __gbm_fourcc_code('X', 'B', '1', '5') /* [15:0] x:B:G:R 1:5:5:5 little endian */ -#define GBM_FORMAT_RGBX5551 __gbm_fourcc_code('R', 'X', '1', '5') /* [15:0] R:G:B:x 5:5:5:1 little endian */ -#define GBM_FORMAT_BGRX5551 __gbm_fourcc_code('B', 'X', '1', '5') /* [15:0] B:G:R:x 5:5:5:1 little endian */ - -#define GBM_FORMAT_ARGB1555 __gbm_fourcc_code('A', 'R', '1', '5') /* [15:0] A:R:G:B 1:5:5:5 little endian */ -#define GBM_FORMAT_ABGR1555 __gbm_fourcc_code('A', 'B', '1', '5') /* [15:0] A:B:G:R 1:5:5:5 little endian */ -#define GBM_FORMAT_RGBA5551 __gbm_fourcc_code('R', 'A', '1', '5') /* [15:0] R:G:B:A 5:5:5:1 little endian */ -#define GBM_FORMAT_BGRA5551 __gbm_fourcc_code('B', 'A', '1', '5') /* [15:0] B:G:R:A 5:5:5:1 little endian */ - -#define GBM_FORMAT_RGB565 __gbm_fourcc_code('R', 'G', '1', '6') /* [15:0] R:G:B 5:6:5 little endian */ -#define GBM_FORMAT_BGR565 __gbm_fourcc_code('B', 'G', '1', '6') /* [15:0] B:G:R 5:6:5 little endian */ - -/* 24 bpp RGB */ -#define GBM_FORMAT_RGB888 __gbm_fourcc_code('R', 'G', '2', '4') /* [23:0] R:G:B little endian */ -#define GBM_FORMAT_BGR888 __gbm_fourcc_code('B', 'G', '2', '4') /* [23:0] B:G:R little endian */ - -/* 32 bpp RGB */ -#define GBM_FORMAT_XRGB8888 __gbm_fourcc_code('X', 'R', '2', '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */ -#define GBM_FORMAT_XBGR8888 __gbm_fourcc_code('X', 'B', '2', '4') /* [31:0] x:B:G:R 8:8:8:8 little endian */ -#define GBM_FORMAT_RGBX8888 __gbm_fourcc_code('R', 'X', '2', '4') /* [31:0] R:G:B:x 8:8:8:8 little endian */ -#define GBM_FORMAT_BGRX8888 __gbm_fourcc_code('B', 'X', '2', '4') /* [31:0] B:G:R:x 8:8:8:8 little endian */ - -#define GBM_FORMAT_ARGB8888 __gbm_fourcc_code('A', 'R', '2', '4') /* [31:0] A:R:G:B 8:8:8:8 little endian */ -#define GBM_FORMAT_ABGR8888 __gbm_fourcc_code('A', 'B', '2', '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */ -#define GBM_FORMAT_RGBA8888 __gbm_fourcc_code('R', 'A', '2', '4') /* [31:0] R:G:B:A 8:8:8:8 little endian */ -#define GBM_FORMAT_BGRA8888 __gbm_fourcc_code('B', 'A', '2', '4') /* [31:0] B:G:R:A 8:8:8:8 little endian */ - -#define GBM_FORMAT_XRGB2101010 __gbm_fourcc_code('X', 'R', '3', '0') /* [31:0] x:R:G:B 2:10:10:10 little endian */ -#define GBM_FORMAT_XBGR2101010 __gbm_fourcc_code('X', 'B', '3', '0') /* [31:0] x:B:G:R 2:10:10:10 little endian */ -#define GBM_FORMAT_RGBX1010102 __gbm_fourcc_code('R', 'X', '3', '0') /* [31:0] R:G:B:x 10:10:10:2 little endian */ -#define GBM_FORMAT_BGRX1010102 __gbm_fourcc_code('B', 'X', '3', '0') /* [31:0] B:G:R:x 10:10:10:2 little endian */ - -#define GBM_FORMAT_ARGB2101010 __gbm_fourcc_code('A', 'R', '3', '0') /* [31:0] A:R:G:B 2:10:10:10 little endian */ -#define GBM_FORMAT_ABGR2101010 __gbm_fourcc_code('A', 'B', '3', '0') /* [31:0] A:B:G:R 2:10:10:10 little endian */ -#define GBM_FORMAT_RGBA1010102 __gbm_fourcc_code('R', 'A', '3', '0') /* [31:0] R:G:B:A 10:10:10:2 little endian */ -#define GBM_FORMAT_BGRA1010102 __gbm_fourcc_code('B', 'A', '3', '0') /* [31:0] B:G:R:A 10:10:10:2 little endian */ - -/* 64 bpp RGB */ -#define GBM_FORMAT_XBGR16161616 __gbm_fourcc_code('X', 'B', '4', '8') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define GBM_FORMAT_ABGR16161616 __gbm_fourcc_code('A', 'B', '4', '8') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* - * Floating point 64bpp RGB - * IEEE 754-2008 binary16 half-precision float - * [15:0] sign:exponent:mantissa 1:5:10 - */ -#define GBM_FORMAT_XBGR16161616F __gbm_fourcc_code('X', 'B', '4', 'H') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define GBM_FORMAT_ABGR16161616F __gbm_fourcc_code('A', 'B', '4', 'H') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* packed YCbCr */ -#define GBM_FORMAT_YUYV __gbm_fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */ -#define GBM_FORMAT_YVYU __gbm_fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */ -#define GBM_FORMAT_UYVY __gbm_fourcc_code('U', 'Y', 'V', 'Y') /* [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian */ -#define GBM_FORMAT_VYUY __gbm_fourcc_code('V', 'Y', 'U', 'Y') /* [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian */ - -#define GBM_FORMAT_AYUV __gbm_fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */ - -/* - * 2 plane YCbCr - * index 0 = Y plane, [7:0] Y - * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian - * or - * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian - */ -#define GBM_FORMAT_NV12 __gbm_fourcc_code('N', 'V', '1', '2') /* 2x2 subsampled Cr:Cb plane */ -#define GBM_FORMAT_NV21 __gbm_fourcc_code('N', 'V', '2', '1') /* 2x2 subsampled Cb:Cr plane */ -#define GBM_FORMAT_NV16 __gbm_fourcc_code('N', 'V', '1', '6') /* 2x1 subsampled Cr:Cb plane */ -#define GBM_FORMAT_NV61 __gbm_fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */ - -/* - * 3 plane YCbCr - * index 0: Y plane, [7:0] Y - * index 1: Cb plane, [7:0] Cb - * index 2: Cr plane, [7:0] Cr - * or - * index 1: Cr plane, [7:0] Cr - * index 2: Cb plane, [7:0] Cb - */ -#define GBM_FORMAT_YUV410 __gbm_fourcc_code('Y', 'U', 'V', '9') /* 4x4 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU410 __gbm_fourcc_code('Y', 'V', 'U', '9') /* 4x4 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV411 __gbm_fourcc_code('Y', 'U', '1', '1') /* 4x1 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU411 __gbm_fourcc_code('Y', 'V', '1', '1') /* 4x1 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV420 __gbm_fourcc_code('Y', 'U', '1', '2') /* 2x2 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU420 __gbm_fourcc_code('Y', 'V', '1', '2') /* 2x2 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV422 __gbm_fourcc_code('Y', 'U', '1', '6') /* 2x1 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU422 __gbm_fourcc_code('Y', 'V', '1', '6') /* 2x1 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV444 __gbm_fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU444 __gbm_fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */ - -struct gbm_format_name_desc { - char name[5]; -}; - -/** - * Flags to indicate the intended use for the buffer - these are passed into - * gbm_bo_create(). The caller must set the union of all the flags that are - * appropriate - * - * \sa Use gbm_device_is_format_supported() to check if the combination of format - * and use flags are supported - */ -enum gbm_bo_flags { - /** - * Buffer is going to be presented to the screen using an API such as KMS - */ - GBM_BO_USE_SCANOUT = (1 << 0), - /** - * Buffer is going to be used as cursor - */ - GBM_BO_USE_CURSOR = (1 << 1), - /** - * Deprecated - */ - GBM_BO_USE_CURSOR_64X64 = GBM_BO_USE_CURSOR, - /** - * Buffer is to be used for rendering - for example it is going to be used - * as the storage for a color buffer - */ - GBM_BO_USE_RENDERING = (1 << 2), - /** - * Buffer can be used for gbm_bo_write. This is guaranteed to work - * with GBM_BO_USE_CURSOR, but may not work for other combinations. - */ - GBM_BO_USE_WRITE = (1 << 3), - /** - * Buffer is linear, i.e. not tiled. - */ - GBM_BO_USE_LINEAR = (1 << 4), - /** - * Buffer is protected, i.e. encrypted and not readable by CPU or any - * other non-secure / non-trusted components nor by non-trusted OpenGL, - * OpenCL, and Vulkan applications. - */ - GBM_BO_USE_PROTECTED = (1 << 5), -}; - -int -gbm_device_get_fd(struct gbm_device *gbm); - -const char * -gbm_device_get_backend_name(struct gbm_device *gbm); - -int -gbm_device_is_format_supported(struct gbm_device *gbm, - uint32_t format, uint32_t flags); - -int -gbm_device_get_format_modifier_plane_count(struct gbm_device *gbm, - uint32_t format, - uint64_t modifier); - -void -gbm_device_destroy(struct gbm_device *gbm); - -struct gbm_device * -gbm_create_device(int fd); - -struct gbm_bo * -gbm_bo_create(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); - -struct gbm_bo * -gbm_bo_create_with_modifiers(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count); - -struct gbm_bo * -gbm_bo_create_with_modifiers2(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count, - uint32_t flags); - -#define GBM_BO_IMPORT_WL_BUFFER 0x5501 -#define GBM_BO_IMPORT_EGL_IMAGE 0x5502 -#define GBM_BO_IMPORT_FD 0x5503 -#define GBM_BO_IMPORT_FD_MODIFIER 0x5504 - -struct gbm_import_fd_data { - int fd; - uint32_t width; - uint32_t height; - uint32_t stride; - uint32_t format; -}; - -#define GBM_MAX_PLANES 4 - -struct gbm_import_fd_modifier_data { - uint32_t width; - uint32_t height; - uint32_t format; - uint32_t num_fds; - int fds[GBM_MAX_PLANES]; - int strides[GBM_MAX_PLANES]; - int offsets[GBM_MAX_PLANES]; - uint64_t modifier; -}; - -struct gbm_bo * -gbm_bo_import(struct gbm_device *gbm, uint32_t type, - void *buffer, uint32_t flags); - -/** - * Flags to indicate the type of mapping for the buffer - these are - * passed into gbm_bo_map(). The caller must set the union of all the - * flags that are appropriate. - * - * These flags are independent of the GBM_BO_USE_* creation flags. However, - * mapping the buffer may require copying to/from a staging buffer. - * - * See also: pipe_map_flags - */ -enum gbm_bo_transfer_flags { - /** - * Buffer contents read back (or accessed directly) at transfer - * create time. - */ - GBM_BO_TRANSFER_READ = (1 << 0), - /** - * Buffer contents will be written back at unmap time - * (or modified as a result of being accessed directly). - */ - GBM_BO_TRANSFER_WRITE = (1 << 1), - /** - * Read/modify/write - */ - GBM_BO_TRANSFER_READ_WRITE = (GBM_BO_TRANSFER_READ | GBM_BO_TRANSFER_WRITE), -}; - -void * -gbm_bo_map(struct gbm_bo *bo, - uint32_t x, uint32_t y, uint32_t width, uint32_t height, - uint32_t flags, uint32_t *stride, void **map_data); - -void -gbm_bo_unmap(struct gbm_bo *bo, void *map_data); - -uint32_t -gbm_bo_get_width(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_height(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_stride(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_stride_for_plane(struct gbm_bo *bo, int plane); - -uint32_t -gbm_bo_get_format(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_bpp(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_offset(struct gbm_bo *bo, int plane); - -struct gbm_device * -gbm_bo_get_device(struct gbm_bo *bo); - -union gbm_bo_handle -gbm_bo_get_handle(struct gbm_bo *bo); - -int -gbm_bo_get_fd(struct gbm_bo *bo); - -uint64_t -gbm_bo_get_modifier(struct gbm_bo *bo); - -int -gbm_bo_get_plane_count(struct gbm_bo *bo); - -union gbm_bo_handle -gbm_bo_get_handle_for_plane(struct gbm_bo *bo, int plane); - -int -gbm_bo_get_fd_for_plane(struct gbm_bo *bo, int plane); - -int -gbm_bo_write(struct gbm_bo *bo, const void *buf, size_t count); - -void -gbm_bo_set_user_data(struct gbm_bo *bo, void *data, - void (*destroy_user_data)(struct gbm_bo *, void *)); - -void * -gbm_bo_get_user_data(struct gbm_bo *bo); - -void -gbm_bo_destroy(struct gbm_bo *bo); - -struct gbm_surface * -gbm_surface_create(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); - -struct gbm_surface * -gbm_surface_create_with_modifiers(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count); - -struct gbm_surface * -gbm_surface_create_with_modifiers2(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count, - uint32_t flags); - -struct gbm_bo * -gbm_surface_lock_front_buffer(struct gbm_surface *surface); - -void -gbm_surface_release_buffer(struct gbm_surface *surface, struct gbm_bo *bo); - -int -gbm_surface_has_free_buffers(struct gbm_surface *surface); - -void -gbm_surface_destroy(struct gbm_surface *surface); - -char * -gbm_format_get_name(uint32_t gbm_format, struct gbm_format_name_desc *desc); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/libavcodec/ac3_parser.h b/prebuilts/aarch64/include/libavcodec/ac3_parser.h deleted file mode 100644 index ff8cc4c..0000000 --- a/prebuilts/aarch64/include/libavcodec/ac3_parser.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * AC-3 parser prototypes - * Copyright (c) 2003 Fabrice Bellard - * Copyright (c) 2003 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AC3_PARSER_H -#define AVCODEC_AC3_PARSER_H - -#include -#include - -/** - * Extract the bitstream ID and the frame size from AC-3 data. - */ -int av_ac3_parse_header(const uint8_t *buf, size_t size, - uint8_t *bitstream_id, uint16_t *frame_size); - - -#endif /* AVCODEC_AC3_PARSER_H */ diff --git a/prebuilts/aarch64/include/libavcodec/adts_parser.h b/prebuilts/aarch64/include/libavcodec/adts_parser.h deleted file mode 100644 index f85becd..0000000 --- a/prebuilts/aarch64/include/libavcodec/adts_parser.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_ADTS_PARSER_H -#define AVCODEC_ADTS_PARSER_H - -#include -#include - -#define AV_AAC_ADTS_HEADER_SIZE 7 - -/** - * Extract the number of samples and frames from AAC data. - * @param[in] buf pointer to AAC data buffer - * @param[out] samples Pointer to where number of samples is written - * @param[out] frames Pointer to where number of frames is written - * @return Returns 0 on success, error code on failure. - */ -int av_adts_header_parse(const uint8_t *buf, uint32_t *samples, - uint8_t *frames); - -#endif /* AVCODEC_ADTS_PARSER_H */ diff --git a/prebuilts/aarch64/include/libavcodec/avcodec.h b/prebuilts/aarch64/include/libavcodec/avcodec.h deleted file mode 100644 index 8a71c04..0000000 --- a/prebuilts/aarch64/include/libavcodec/avcodec.h +++ /dev/null @@ -1,4184 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVCODEC_H -#define AVCODEC_AVCODEC_H - -/** - * @file - * @ingroup libavc - * Libavcodec external API header - */ - -#include -#include "libavutil/samplefmt.h" -#include "libavutil/attributes.h" -#include "libavutil/avutil.h" -#include "libavutil/buffer.h" -#include "libavutil/cpu.h" -#include "libavutil/channel_layout.h" -#include "libavutil/dict.h" -#include "libavutil/frame.h" -#include "libavutil/hwcontext.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" - -#include "bsf.h" -#include "codec.h" -#include "codec_desc.h" -#include "codec_par.h" -#include "codec_id.h" -#include "packet.h" -#include "version.h" - -/** - * @defgroup libavc libavcodec - * Encoding/Decoding Library - * - * @{ - * - * @defgroup lavc_decoding Decoding - * @{ - * @} - * - * @defgroup lavc_encoding Encoding - * @{ - * @} - * - * @defgroup lavc_codec Codecs - * @{ - * @defgroup lavc_codec_native Native Codecs - * @{ - * @} - * @defgroup lavc_codec_wrappers External library wrappers - * @{ - * @} - * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge - * @{ - * @} - * @} - * @defgroup lavc_internal Internal - * @{ - * @} - * @} - */ - -/** - * @ingroup libavc - * @defgroup lavc_encdec send/receive encoding and decoding API overview - * @{ - * - * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/ - * avcodec_receive_packet() functions provide an encode/decode API, which - * decouples input and output. - * - * The API is very similar for encoding/decoding and audio/video, and works as - * follows: - * - Set up and open the AVCodecContext as usual. - * - Send valid input: - * - For decoding, call avcodec_send_packet() to give the decoder raw - * compressed data in an AVPacket. - * - For encoding, call avcodec_send_frame() to give the encoder an AVFrame - * containing uncompressed audio or video. - * - * In both cases, it is recommended that AVPackets and AVFrames are - * refcounted, or libavcodec might have to copy the input data. (libavformat - * always returns refcounted AVPackets, and av_frame_get_buffer() allocates - * refcounted AVFrames.) - * - Receive output in a loop. Periodically call one of the avcodec_receive_*() - * functions and process their output: - * - For decoding, call avcodec_receive_frame(). On success, it will return - * an AVFrame containing uncompressed audio or video data. - * - For encoding, call avcodec_receive_packet(). On success, it will return - * an AVPacket with a compressed frame. - * - * Repeat this call until it returns AVERROR(EAGAIN) or an error. The - * AVERROR(EAGAIN) return value means that new input data is required to - * return new output. In this case, continue with sending input. For each - * input frame/packet, the codec will typically return 1 output frame/packet, - * but it can also be 0 or more than 1. - * - * At the beginning of decoding or encoding, the codec might accept multiple - * input frames/packets without returning a frame, until its internal buffers - * are filled. This situation is handled transparently if you follow the steps - * outlined above. - * - * In theory, sending input can result in EAGAIN - this should happen only if - * not all output was received. You can use this to structure alternative decode - * or encode loops other than the one suggested above. For example, you could - * try sending new input on each iteration, and try to receive output if that - * returns EAGAIN. - * - * End of stream situations. These require "flushing" (aka draining) the codec, - * as the codec might buffer multiple frames or packets internally for - * performance or out of necessity (consider B-frames). - * This is handled as follows: - * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding) - * or avcodec_send_frame() (encoding) functions. This will enter draining - * mode. - * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet() - * (encoding) in a loop until AVERROR_EOF is returned. The functions will - * not return AVERROR(EAGAIN), unless you forgot to enter draining mode. - * - Before decoding can be resumed again, the codec has to be reset with - * avcodec_flush_buffers(). - * - * Using the API as outlined above is highly recommended. But it is also - * possible to call functions outside of this rigid schema. For example, you can - * call avcodec_send_packet() repeatedly without calling - * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed - * until the codec's internal buffer has been filled up (which is typically of - * size 1 per output frame, after initial input), and then reject input with - * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to - * read at least some output. - * - * Not all codecs will follow a rigid and predictable dataflow; the only - * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on - * one end implies that a receive/send call on the other end will succeed, or - * at least will not fail with AVERROR(EAGAIN). In general, no codec will - * permit unlimited buffering of input or output. - * - * This API replaces the following legacy functions: - * - avcodec_decode_video2() and avcodec_decode_audio4(): - * Use avcodec_send_packet() to feed input to the decoder, then use - * avcodec_receive_frame() to receive decoded frames after each packet. - * Unlike with the old video decoding API, multiple frames might result from - * a packet. For audio, splitting the input packet into frames by partially - * decoding packets becomes transparent to the API user. You never need to - * feed an AVPacket to the API twice (unless it is rejected with AVERROR(EAGAIN) - then - * no data was read from the packet). - * Additionally, sending a flush/draining packet is required only once. - * - avcodec_encode_video2()/avcodec_encode_audio2(): - * Use avcodec_send_frame() to feed input to the encoder, then use - * avcodec_receive_packet() to receive encoded packets. - * Providing user-allocated buffers for avcodec_receive_packet() is not - * possible. - * - The new API does not handle subtitles yet. - * - * Mixing new and old function calls on the same AVCodecContext is not allowed, - * and will result in undefined behavior. - * - * Some codecs might require using the new API; using the old API will return - * an error when calling it. All codecs support the new API. - * - * A codec is not allowed to return AVERROR(EAGAIN) for both sending and receiving. This - * would be an invalid state, which could put the codec user into an endless - * loop. The API has no concept of time either: it cannot happen that trying to - * do avcodec_send_packet() results in AVERROR(EAGAIN), but a repeated call 1 second - * later accepts the packet (with no other receive/flush API calls involved). - * The API is a strict state machine, and the passage of time is not supposed - * to influence it. Some timing-dependent behavior might still be deemed - * acceptable in certain cases. But it must never result in both send/receive - * returning EAGAIN at the same time at any point. It must also absolutely be - * avoided that the current state is "unstable" and can "flip-flop" between - * the send/receive APIs allowing progress. For example, it's not allowed that - * the codec randomly decides that it actually wants to consume a packet now - * instead of returning a frame, after it just returned AVERROR(EAGAIN) on an - * avcodec_send_packet() call. - * @} - */ - -/** - * @defgroup lavc_core Core functions/structures. - * @ingroup libavc - * - * Basic definitions, functions for querying libavcodec capabilities, - * allocating core structures, etc. - * @{ - */ - -/** - * @ingroup lavc_decoding - * Required number of additionally allocated bytes at the end of the input bitstream for decoding. - * This is mainly needed because some optimized bitstream readers read - * 32 or 64 bit at once and could read over the end.
- * Note: If the first 23 bits of the additional bytes are not 0, then damaged - * MPEG bitstreams could cause overread and segfault. - */ -#define AV_INPUT_BUFFER_PADDING_SIZE 64 - -/** - * @ingroup lavc_encoding - * minimum encoding buffer size - * Used to avoid some checks during header writing. - */ -#define AV_INPUT_BUFFER_MIN_SIZE 16384 - -/** - * @ingroup lavc_decoding - */ -enum AVDiscard{ - /* We leave some space between them for extensions (drop some - * keyframes for intra-only or drop just some bidir frames). */ - AVDISCARD_NONE =-16, ///< discard nothing - AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi - AVDISCARD_NONREF = 8, ///< discard all non reference - AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames - AVDISCARD_NONINTRA= 24, ///< discard all non intra frames - AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes - AVDISCARD_ALL = 48, ///< discard all -}; - -enum AVAudioServiceType { - AV_AUDIO_SERVICE_TYPE_MAIN = 0, - AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, - AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, - AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, - AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, - AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, - AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, - AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, - AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, - AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI -}; - -/** - * @ingroup lavc_encoding - */ -typedef struct RcOverride{ - int start_frame; - int end_frame; - int qscale; // If this is 0 then quality_factor will be used instead. - float quality_factor; -} RcOverride; - -/* encoding support - These flags can be passed in AVCodecContext.flags before initialization. - Note: Not everything is supported yet. -*/ - -/** - * Allow decoders to produce frames with data planes that are not aligned - * to CPU requirements (e.g. due to cropping). - */ -#define AV_CODEC_FLAG_UNALIGNED (1 << 0) -/** - * Use fixed qscale. - */ -#define AV_CODEC_FLAG_QSCALE (1 << 1) -/** - * 4 MV per MB allowed / advanced prediction for H.263. - */ -#define AV_CODEC_FLAG_4MV (1 << 2) -/** - * Output even those frames that might be corrupted. - */ -#define AV_CODEC_FLAG_OUTPUT_CORRUPT (1 << 3) -/** - * Use qpel MC. - */ -#define AV_CODEC_FLAG_QPEL (1 << 4) -/** - * Don't output frames whose parameters differ from first - * decoded frame in stream. - */ -#define AV_CODEC_FLAG_DROPCHANGED (1 << 5) -/** - * Use internal 2pass ratecontrol in first pass mode. - */ -#define AV_CODEC_FLAG_PASS1 (1 << 9) -/** - * Use internal 2pass ratecontrol in second pass mode. - */ -#define AV_CODEC_FLAG_PASS2 (1 << 10) -/** - * loop filter. - */ -#define AV_CODEC_FLAG_LOOP_FILTER (1 << 11) -/** - * Only decode/encode grayscale. - */ -#define AV_CODEC_FLAG_GRAY (1 << 13) -/** - * error[?] variables will be set during encoding. - */ -#define AV_CODEC_FLAG_PSNR (1 << 15) -/** - * Input bitstream might be truncated at a random location - * instead of only at frame boundaries. - */ -#define AV_CODEC_FLAG_TRUNCATED (1 << 16) -/** - * Use interlaced DCT. - */ -#define AV_CODEC_FLAG_INTERLACED_DCT (1 << 18) -/** - * Force low delay. - */ -#define AV_CODEC_FLAG_LOW_DELAY (1 << 19) -/** - * Place global headers in extradata instead of every keyframe. - */ -#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22) -/** - * Use only bitexact stuff (except (I)DCT). - */ -#define AV_CODEC_FLAG_BITEXACT (1 << 23) -/* Fx : Flag for H.263+ extra options */ -/** - * H.263 advanced intra coding / MPEG-4 AC prediction - */ -#define AV_CODEC_FLAG_AC_PRED (1 << 24) -/** - * interlaced motion estimation - */ -#define AV_CODEC_FLAG_INTERLACED_ME (1 << 29) -#define AV_CODEC_FLAG_CLOSED_GOP (1U << 31) - -/** - * Allow non spec compliant speedup tricks. - */ -#define AV_CODEC_FLAG2_FAST (1 << 0) -/** - * Skip bitstream encoding. - */ -#define AV_CODEC_FLAG2_NO_OUTPUT (1 << 2) -/** - * Place global headers at every keyframe instead of in extradata. - */ -#define AV_CODEC_FLAG2_LOCAL_HEADER (1 << 3) - -/** - * timecode is in drop frame format. DEPRECATED!!!! - */ -#define AV_CODEC_FLAG2_DROP_FRAME_TIMECODE (1 << 13) - -/** - * Input bitstream might be truncated at a packet boundaries - * instead of only at frame boundaries. - */ -#define AV_CODEC_FLAG2_CHUNKS (1 << 15) -/** - * Discard cropping information from SPS. - */ -#define AV_CODEC_FLAG2_IGNORE_CROP (1 << 16) - -/** - * Show all frames before the first keyframe - */ -#define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) -/** - * Export motion vectors through frame side data - */ -#define AV_CODEC_FLAG2_EXPORT_MVS (1 << 28) -/** - * Do not skip samples and export skip information as frame side data - */ -#define AV_CODEC_FLAG2_SKIP_MANUAL (1 << 29) -/** - * Do not reset ASS ReadOrder field on flush (subtitles decoding) - */ -#define AV_CODEC_FLAG2_RO_FLUSH_NOOP (1 << 30) - -/* Unsupported options : - * Syntax Arithmetic coding (SAC) - * Reference Picture Selection - * Independent Segment Decoding */ -/* /Fx */ -/* codec capabilities */ - -/* Exported side data. - These flags can be passed in AVCodecContext.export_side_data before initialization. -*/ -/** - * Export motion vectors through frame side data - */ -#define AV_CODEC_EXPORT_DATA_MVS (1 << 0) -/** - * Export encoder Producer Reference Time through packet side data - */ -#define AV_CODEC_EXPORT_DATA_PRFT (1 << 1) -/** - * Decoding only. - * Export the AVVideoEncParams structure through frame side data. - */ -#define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS (1 << 2) -/** - * Decoding only. - * Do not apply film grain, export it instead. - */ -#define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) - -/** - * Pan Scan area. - * This specifies the area which should be displayed. - * Note there may be multiple such areas for one frame. - */ -typedef struct AVPanScan { - /** - * id - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int id; - - /** - * width and height in 1/16 pel - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int width; - int height; - - /** - * position of the top left corner in 1/16 pel for up to 3 fields/frames - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int16_t position[3][2]; -} AVPanScan; - -/** - * This structure describes the bitrate properties of an encoded bitstream. It - * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD - * parameters for H.264/HEVC. - */ -typedef struct AVCPBProperties { - /** - * Maximum bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ -#if FF_API_UNSANITIZED_BITRATES - int max_bitrate; -#else - int64_t max_bitrate; -#endif - /** - * Minimum bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ -#if FF_API_UNSANITIZED_BITRATES - int min_bitrate; -#else - int64_t min_bitrate; -#endif - /** - * Average bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ -#if FF_API_UNSANITIZED_BITRATES - int avg_bitrate; -#else - int64_t avg_bitrate; -#endif - - /** - * The size of the buffer to which the ratecontrol is applied, in bits. - * Zero if unknown or unspecified. - */ - int buffer_size; - - /** - * The delay between the time the packet this structure is associated with - * is received and the time when it should be decoded, in periods of a 27MHz - * clock. - * - * UINT64_MAX when unknown or unspecified. - */ - uint64_t vbv_delay; -} AVCPBProperties; - -/** - * This structure supplies correlation between a packet timestamp and a wall clock - * production time. The definition follows the Producer Reference Time ('prft') - * as defined in ISO/IEC 14496-12 - */ -typedef struct AVProducerReferenceTime { - /** - * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()). - */ - int64_t wallclock; - int flags; -} AVProducerReferenceTime; - -/** - * The decoder will keep a reference to the frame and may reuse it later. - */ -#define AV_GET_BUFFER_FLAG_REF (1 << 0) - -/** - * The encoder will keep a reference to the packet and may reuse it later. - */ -#define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0) - -struct AVCodecInternal; - -/** - * main external API structure. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from user - * applications. - * The name string for AVOptions options matches the associated command line - * parameter name and can be found in libavcodec/options_table.h - * The AVOption/command line parameter names differ in some cases from the C - * structure field names for historic reasons or brevity. - * sizeof(AVCodecContext) must not be used outside libav*. - */ -typedef struct AVCodecContext { - /** - * information on struct for av_log - * - set by avcodec_alloc_context3 - */ - const AVClass *av_class; - int log_level_offset; - - enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ - const struct AVCodec *codec; - enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ - - /** - * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). - * This is used to work around some encoder bugs. - * A demuxer should set this to what is stored in the field used to identify the codec. - * If there are multiple such fields in a container then the demuxer should choose the one - * which maximizes the information about the used codec. - * If the codec tag field in a container is larger than 32 bits then the demuxer should - * remap the longer ID to 32 bits with a table or other structure. Alternatively a new - * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated - * first. - * - encoding: Set by user, if not then the default based on codec_id will be used. - * - decoding: Set by user, will be converted to uppercase by libavcodec during init. - */ - unsigned int codec_tag; - - void *priv_data; - - /** - * Private context used for internal data. - * - * Unlike priv_data, this is not codec-specific. It is used in general - * libavcodec functions. - */ - struct AVCodecInternal *internal; - - /** - * Private data of the user, can be used to carry app specific stuff. - * - encoding: Set by user. - * - decoding: Set by user. - */ - void *opaque; - - /** - * the average bitrate - * - encoding: Set by user; unused for constant quantizer encoding. - * - decoding: Set by user, may be overwritten by libavcodec - * if this info is available in the stream - */ - int64_t bit_rate; - - /** - * number of bits the bitstream is allowed to diverge from the reference. - * the reference can be CBR (for CBR pass1) or VBR (for pass2) - * - encoding: Set by user; unused for constant quantizer encoding. - * - decoding: unused - */ - int bit_rate_tolerance; - - /** - * Global quality for codecs which cannot change it per frame. - * This should be proportional to MPEG-1/2/4 qscale. - * - encoding: Set by user. - * - decoding: unused - */ - int global_quality; - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int compression_level; -#define FF_COMPRESSION_DEFAULT -1 - - /** - * AV_CODEC_FLAG_*. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int flags; - - /** - * AV_CODEC_FLAG2_* - * - encoding: Set by user. - * - decoding: Set by user. - */ - int flags2; - - /** - * some codecs need / can use extradata like Huffman tables. - * MJPEG: Huffman tables - * rv10: additional flags - * MPEG-4: global headers (they can be in the bitstream or here) - * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger - * than extradata_size to avoid problems if it is read with the bitstream reader. - * The bytewise contents of extradata must not depend on the architecture or CPU endianness. - * Must be allocated with the av_malloc() family of functions. - * - encoding: Set/allocated/freed by libavcodec. - * - decoding: Set/allocated/freed by user. - */ - uint8_t *extradata; - int extradata_size; - - /** - * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. For fixed-fps content, - * timebase should be 1/framerate and timestamp increments should be - * identically 1. - * This often, but not always is the inverse of the frame rate or field rate - * for video. 1/time_base is not the average frame rate if the frame rate is not - * constant. - * - * Like containers, elementary streams also can store timestamps, 1/time_base - * is the unit in which these timestamps are specified. - * As example of such codec time base see ISO/IEC 14496-2:2001(E) - * vop_time_increment_resolution and fixed_vop_rate - * (fixed_vop_rate == 0 implies that it is different from the framerate) - * - * - encoding: MUST be set by user. - * - decoding: the use of this field for decoding is deprecated. - * Use framerate instead. - */ - AVRational time_base; - - /** - * For some codecs, the time base is closer to the field rate than the frame rate. - * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration - * if no telecine is used ... - * - * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. - */ - int ticks_per_frame; - - /** - * Codec delay. - * - * Encoding: Number of frames delay there will be from the encoder input to - * the decoder output. (we assume the decoder matches the spec) - * Decoding: Number of frames delay in addition to what a standard decoder - * as specified in the spec would produce. - * - * Video: - * Number of frames the decoded output will be delayed relative to the - * encoded input. - * - * Audio: - * For encoding, this field is unused (see initial_padding). - * - * For decoding, this is the number of samples the decoder needs to - * output before the decoder's output is valid. When seeking, you should - * start decoding this many samples prior to your desired seek point. - * - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int delay; - - - /* video only */ - /** - * picture width / height. - * - * @note Those fields may not match the values of the last - * AVFrame output by avcodec_decode_video2 due frame - * reordering. - * - * - encoding: MUST be set by user. - * - decoding: May be set by the user before opening the decoder if known e.g. - * from the container. Some decoders will require the dimensions - * to be set by the caller. During decoding, the decoder may - * overwrite those values as required while parsing the data. - */ - int width, height; - - /** - * Bitstream width / height, may be different from width/height e.g. when - * the decoded frame is cropped before being output or lowres is enabled. - * - * @note Those field may not match the value of the last - * AVFrame output by avcodec_receive_frame() due frame - * reordering. - * - * - encoding: unused - * - decoding: May be set by the user before opening the decoder if known - * e.g. from the container. During decoding, the decoder may - * overwrite those values as required while parsing the data. - */ - int coded_width, coded_height; - - /** - * the number of pictures in a group of pictures, or 0 for intra_only - * - encoding: Set by user. - * - decoding: unused - */ - int gop_size; - - /** - * Pixel format, see AV_PIX_FMT_xxx. - * May be set by the demuxer if known from headers. - * May be overridden by the decoder if it knows better. - * - * @note This field may not match the value of the last - * AVFrame output by avcodec_receive_frame() due frame - * reordering. - * - * - encoding: Set by user. - * - decoding: Set by user if known, overridden by libavcodec while - * parsing the data. - */ - enum AVPixelFormat pix_fmt; - - /** - * If non NULL, 'draw_horiz_band' is called by the libavcodec - * decoder to draw a horizontal band. It improves cache usage. Not - * all codecs can do that. You must check the codec capabilities - * beforehand. - * When multithreading is used, it may be called from multiple threads - * at the same time; threads might draw different parts of the same AVFrame, - * or multiple AVFrames, and there is no guarantee that slices will be drawn - * in order. - * The function is also used by hardware acceleration APIs. - * It is called at least once during frame decoding to pass - * the data needed for hardware render. - * In that mode instead of pixel data, AVFrame points to - * a structure specific to the acceleration API. The application - * reads the structure and can change some fields to indicate progress - * or mark state. - * - encoding: unused - * - decoding: Set by user. - * @param height the height of the slice - * @param y the y position of the slice - * @param type 1->top field, 2->bottom field, 3->frame - * @param offset offset into the AVFrame.data from which the slice should be read - */ - void (*draw_horiz_band)(struct AVCodecContext *s, - const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], - int y, int type, int height); - - /** - * callback to negotiate the pixelFormat - * @param fmt is the list of formats which are supported by the codec, - * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. - * The first is always the native one. - * @note The callback may be called again immediately if initialization for - * the selected (hardware-accelerated) pixel format failed. - * @warning Behavior is undefined if the callback returns a value not - * in the fmt list of formats. - * @return the chosen format - * - encoding: unused - * - decoding: Set by user, if not set the native format will be chosen. - */ - enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - - /** - * maximum number of B-frames between non-B-frames - * Note: The output will be delayed by max_b_frames+1 relative to the input. - * - encoding: Set by user. - * - decoding: unused - */ - int max_b_frames; - - /** - * qscale factor between IP and B-frames - * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). - * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). - * - encoding: Set by user. - * - decoding: unused - */ - float b_quant_factor; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int b_frame_strategy; -#endif - - /** - * qscale offset between IP and B-frames - * - encoding: Set by user. - * - decoding: unused - */ - float b_quant_offset; - - /** - * Size of the frame reordering buffer in the decoder. - * For MPEG-2 it is 1 IPB or 0 low delay IP. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int has_b_frames; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int mpeg_quant; -#endif - - /** - * qscale factor between P- and I-frames - * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + offset). - * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). - * - encoding: Set by user. - * - decoding: unused - */ - float i_quant_factor; - - /** - * qscale offset between P and I-frames - * - encoding: Set by user. - * - decoding: unused - */ - float i_quant_offset; - - /** - * luminance masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float lumi_masking; - - /** - * temporary complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float temporal_cplx_masking; - - /** - * spatial complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float spatial_cplx_masking; - - /** - * p block masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float p_masking; - - /** - * darkness masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float dark_masking; - - /** - * slice count - * - encoding: Set by libavcodec. - * - decoding: Set by user (or 0). - */ - int slice_count; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int prediction_method; -#define FF_PRED_LEFT 0 -#define FF_PRED_PLANE 1 -#define FF_PRED_MEDIAN 2 -#endif - - /** - * slice offsets in the frame in bytes - * - encoding: Set/allocated by libavcodec. - * - decoding: Set/allocated by user (or NULL). - */ - int *slice_offset; - - /** - * sample aspect ratio (0 if unknown) - * That is the width of a pixel divided by the height of the pixel. - * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - AVRational sample_aspect_ratio; - - /** - * motion estimation comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_cmp; - /** - * subpixel motion estimation comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_sub_cmp; - /** - * macroblock comparison function (not supported yet) - * - encoding: Set by user. - * - decoding: unused - */ - int mb_cmp; - /** - * interlaced DCT comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int ildct_cmp; -#define FF_CMP_SAD 0 -#define FF_CMP_SSE 1 -#define FF_CMP_SATD 2 -#define FF_CMP_DCT 3 -#define FF_CMP_PSNR 4 -#define FF_CMP_BIT 5 -#define FF_CMP_RD 6 -#define FF_CMP_ZERO 7 -#define FF_CMP_VSAD 8 -#define FF_CMP_VSSE 9 -#define FF_CMP_NSSE 10 -#define FF_CMP_W53 11 -#define FF_CMP_W97 12 -#define FF_CMP_DCTMAX 13 -#define FF_CMP_DCT264 14 -#define FF_CMP_MEDIAN_SAD 15 -#define FF_CMP_CHROMA 256 - - /** - * ME diamond size & shape - * - encoding: Set by user. - * - decoding: unused - */ - int dia_size; - - /** - * amount of previous MV predictors (2a+1 x 2a+1 square) - * - encoding: Set by user. - * - decoding: unused - */ - int last_predictor_count; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int pre_me; -#endif - - /** - * motion estimation prepass comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_pre_cmp; - - /** - * ME prepass diamond size & shape - * - encoding: Set by user. - * - decoding: unused - */ - int pre_dia_size; - - /** - * subpel ME quality - * - encoding: Set by user. - * - decoding: unused - */ - int me_subpel_quality; - - /** - * maximum motion estimation search range in subpel units - * If 0 then no limit. - * - * - encoding: Set by user. - * - decoding: unused - */ - int me_range; - - /** - * slice flags - * - encoding: unused - * - decoding: Set by user. - */ - int slice_flags; -#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display -#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG-2 field pics) -#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1) - - /** - * macroblock decision mode - * - encoding: Set by user. - * - decoding: unused - */ - int mb_decision; -#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp -#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits -#define FF_MB_DECISION_RD 2 ///< rate distortion - - /** - * custom intra quantization matrix - * Must be allocated with the av_malloc() family of functions, and will be freed in - * avcodec_free_context(). - * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. - * - decoding: Set/allocated/freed by libavcodec. - */ - uint16_t *intra_matrix; - - /** - * custom inter quantization matrix - * Must be allocated with the av_malloc() family of functions, and will be freed in - * avcodec_free_context(). - * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. - * - decoding: Set/allocated/freed by libavcodec. - */ - uint16_t *inter_matrix; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int scenechange_threshold; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int noise_reduction; -#endif - - /** - * precision of the intra DC coefficient - 8 - * - encoding: Set by user. - * - decoding: Set by libavcodec - */ - int intra_dc_precision; - - /** - * Number of macroblock rows at the top which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_top; - - /** - * Number of macroblock rows at the bottom which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_bottom; - - /** - * minimum MB Lagrange multiplier - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmin; - - /** - * maximum MB Lagrange multiplier - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmax; - -#if FF_API_PRIVATE_OPT - /** - * @deprecated use encoder private options instead - */ - attribute_deprecated - int me_penalty_compensation; -#endif - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int bidir_refine; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int brd_scale; -#endif - - /** - * minimum GOP size - * - encoding: Set by user. - * - decoding: unused - */ - int keyint_min; - - /** - * number of reference frames - * - encoding: Set by user. - * - decoding: Set by lavc. - */ - int refs; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int chromaoffset; -#endif - - /** - * Note: Value depends upon the compare function used for fullpel ME. - * - encoding: Set by user. - * - decoding: unused - */ - int mv0_threshold; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int b_sensitivity; -#endif - - /** - * Chromaticity coordinates of the source primaries. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorPrimaries color_primaries; - - /** - * Color Transfer Characteristic. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorTransferCharacteristic color_trc; - - /** - * YUV colorspace type. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorSpace colorspace; - - /** - * MPEG vs JPEG YUV range. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorRange color_range; - - /** - * This defines the location of chroma samples. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVChromaLocation chroma_sample_location; - - /** - * Number of slices. - * Indicates number of picture subdivisions. Used for parallelized - * decoding. - * - encoding: Set by user - * - decoding: unused - */ - int slices; - - /** Field order - * - encoding: set by libavcodec - * - decoding: Set by user. - */ - enum AVFieldOrder field_order; - - /* audio only */ - int sample_rate; ///< samples per second - int channels; ///< number of audio channels - - /** - * audio sample format - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - enum AVSampleFormat sample_fmt; ///< sample format - - /* The following data should not be initialized. */ - /** - * Number of samples per channel in an audio frame. - * - * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame - * except the last must contain exactly frame_size samples per channel. - * May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the - * frame size is not restricted. - * - decoding: may be set by some decoders to indicate constant frame size - */ - int frame_size; - - /** - * Frame counter, set by libavcodec. - * - * - decoding: total number of frames returned from the decoder so far. - * - encoding: total number of frames passed to the encoder so far. - * - * @note the counter is not incremented if encoding/decoding resulted in - * an error. - */ - int frame_number; - - /** - * number of bytes per packet if constant and known or 0 - * Used by some WAV based audio codecs. - */ - int block_align; - - /** - * Audio cutoff bandwidth (0 means "automatic") - * - encoding: Set by user. - * - decoding: unused - */ - int cutoff; - - /** - * Audio channel layout. - * - encoding: set by user. - * - decoding: set by user, may be overwritten by libavcodec. - */ - uint64_t channel_layout; - - /** - * Request decoder to use this channel layout if it can (0 for default) - * - encoding: unused - * - decoding: Set by user. - */ - uint64_t request_channel_layout; - - /** - * Type of service that the audio stream conveys. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - enum AVAudioServiceType audio_service_type; - - /** - * desired sample format - * - encoding: Not used. - * - decoding: Set by user. - * Decoder will decode to this format if it can. - */ - enum AVSampleFormat request_sample_fmt; - - /** - * This callback is called at the beginning of each frame to get data - * buffer(s) for it. There may be one contiguous buffer for all the data or - * there may be a buffer per each data plane or anything in between. What - * this means is, you may set however many entries in buf[] you feel necessary. - * Each buffer must be reference-counted using the AVBuffer API (see description - * of buf[] below). - * - * The following fields will be set in the frame before this callback is - * called: - * - format - * - width, height (video only) - * - sample_rate, channel_layout, nb_samples (audio only) - * Their values may differ from the corresponding values in - * AVCodecContext. This callback must use the frame values, not the codec - * context values, to calculate the required buffer size. - * - * This callback must fill the following fields in the frame: - * - data[] - * - linesize[] - * - extended_data: - * * if the data is planar audio with more than 8 channels, then this - * callback must allocate and fill extended_data to contain all pointers - * to all data planes. data[] must hold as many pointers as it can. - * extended_data must be allocated with av_malloc() and will be freed in - * av_frame_unref(). - * * otherwise extended_data must point to data - * - buf[] must contain one or more pointers to AVBufferRef structures. Each of - * the frame's data and extended_data pointers must be contained in these. That - * is, one AVBufferRef for each allocated chunk of memory, not necessarily one - * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(), - * and av_buffer_ref(). - * - extended_buf and nb_extended_buf must be allocated with av_malloc() by - * this callback and filled with the extra buffers if there are more - * buffers than buf[] can hold. extended_buf will be freed in - * av_frame_unref(). - * - * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call - * avcodec_default_get_buffer2() instead of providing buffers allocated by - * some other means. - * - * Each data plane must be aligned to the maximum required by the target - * CPU. - * - * @see avcodec_default_get_buffer2() - * - * Video: - * - * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused - * (read and/or written to if it is writable) later by libavcodec. - * - * avcodec_align_dimensions2() should be used to find the required width and - * height, as they normally need to be rounded up to the next multiple of 16. - * - * Some decoders do not support linesizes changing between frames. - * - * If frame multithreading is used, this callback may be called from a - * different thread, but not from more than one at once. Does not need to be - * reentrant. - * - * @see avcodec_align_dimensions2() - * - * Audio: - * - * Decoders request a buffer of a particular size by setting - * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, - * however, utilize only part of the buffer by setting AVFrame.nb_samples - * to a smaller value in the output frame. - * - * As a convenience, av_samples_get_buffer_size() and - * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() - * functions to find the required data size and to fill data pointers and - * linesize. In AVFrame.linesize, only linesize[0] may be set for audio - * since all planes must be the same size. - * - * @see av_samples_get_buffer_size(), av_samples_fill_arrays() - * - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - */ - int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags); - -#if FF_API_OLD_ENCDEC - /** - * If non-zero, the decoded audio and video frames returned from - * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted - * and are valid indefinitely. The caller must free them with - * av_frame_unref() when they are not needed anymore. - * Otherwise, the decoded frames must not be freed by the caller and are - * only valid until the next decode call. - * - * This is always automatically enabled if avcodec_receive_frame() is used. - * - * - encoding: unused - * - decoding: set by the caller before avcodec_open2(). - */ - attribute_deprecated - int refcounted_frames; -#endif - - /* - encoding parameters */ - float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) - float qblur; ///< amount of qscale smoothing over time (0.0-1.0) - - /** - * minimum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmin; - - /** - * maximum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmax; - - /** - * maximum quantizer difference between frames - * - encoding: Set by user. - * - decoding: unused - */ - int max_qdiff; - - /** - * decoder bitstream buffer size - * - encoding: Set by user. - * - decoding: unused - */ - int rc_buffer_size; - - /** - * ratecontrol override, see RcOverride - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - int rc_override_count; - RcOverride *rc_override; - - /** - * maximum bitrate - * - encoding: Set by user. - * - decoding: Set by user, may be overwritten by libavcodec. - */ - int64_t rc_max_rate; - - /** - * minimum bitrate - * - encoding: Set by user. - * - decoding: unused - */ - int64_t rc_min_rate; - - /** - * Ratecontrol attempt to use, at maximum, of what can be used without an underflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_max_available_vbv_use; - - /** - * Ratecontrol attempt to use, at least, times the amount needed to prevent a vbv overflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_min_vbv_overflow_use; - - /** - * Number of bits which should be loaded into the rc buffer before decoding starts. - * - encoding: Set by user. - * - decoding: unused - */ - int rc_initial_buffer_occupancy; - -#if FF_API_CODER_TYPE -#define FF_CODER_TYPE_VLC 0 -#define FF_CODER_TYPE_AC 1 -#define FF_CODER_TYPE_RAW 2 -#define FF_CODER_TYPE_RLE 3 - /** - * @deprecated use encoder private options instead - */ - attribute_deprecated - int coder_type; -#endif /* FF_API_CODER_TYPE */ - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int context_model; -#endif - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_threshold; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_factor; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_exp; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_cmp; -#endif /* FF_API_PRIVATE_OPT */ - - /** - * trellis RD quantization - * - encoding: Set by user. - * - decoding: unused - */ - int trellis; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int min_prediction_order; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int max_prediction_order; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int64_t timecode_frame_start; -#endif - -#if FF_API_RTP_CALLBACK - /** - * @deprecated unused - */ - /* The RTP callback: This function is called */ - /* every time the encoder has a packet to send. */ - /* It depends on the encoder if the data starts */ - /* with a Start Code (it should). H.263 does. */ - /* mb_nb contains the number of macroblocks */ - /* encoded in the RTP payload. */ - attribute_deprecated - void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb); -#endif - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int rtp_payload_size; /* The size of the RTP payload: the coder will */ - /* do its best to deliver a chunk with size */ - /* below rtp_payload_size, the chunk will start */ - /* with a start code on some codecs like H.263. */ - /* This doesn't take account of any particular */ - /* headers inside the transmitted RTP payload. */ -#endif - -#if FF_API_STAT_BITS - /* statistics, used for 2-pass encoding */ - attribute_deprecated - int mv_bits; - attribute_deprecated - int header_bits; - attribute_deprecated - int i_tex_bits; - attribute_deprecated - int p_tex_bits; - attribute_deprecated - int i_count; - attribute_deprecated - int p_count; - attribute_deprecated - int skip_count; - attribute_deprecated - int misc_bits; - - /** @deprecated this field is unused */ - attribute_deprecated - int frame_bits; -#endif - - /** - * pass1 encoding statistics output buffer - * - encoding: Set by libavcodec. - * - decoding: unused - */ - char *stats_out; - - /** - * pass2 encoding statistics input buffer - * Concatenated stuff from stats_out of pass1 should be placed here. - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - char *stats_in; - - /** - * Work around bugs in encoders which sometimes cannot be detected automatically. - * - encoding: Set by user - * - decoding: Set by user - */ - int workaround_bugs; -#define FF_BUG_AUTODETECT 1 ///< autodetection -#define FF_BUG_XVID_ILACE 4 -#define FF_BUG_UMP4 8 -#define FF_BUG_NO_PADDING 16 -#define FF_BUG_AMV 32 -#define FF_BUG_QPEL_CHROMA 64 -#define FF_BUG_STD_QPEL 128 -#define FF_BUG_QPEL_CHROMA2 256 -#define FF_BUG_DIRECT_BLOCKSIZE 512 -#define FF_BUG_EDGE 1024 -#define FF_BUG_HPEL_CHROMA 2048 -#define FF_BUG_DC_CLIP 4096 -#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders. -#define FF_BUG_TRUNCATED 16384 -#define FF_BUG_IEDGE 32768 - - /** - * strictly follow the standard (MPEG-4, ...). - * - encoding: Set by user. - * - decoding: Set by user. - * Setting this to STRICT or higher means the encoder and decoder will - * generally do stupid things, whereas setting it to unofficial or lower - * will mean the encoder might produce output that is not supported by all - * spec-compliant decoders. Decoders don't differentiate between normal, - * unofficial and experimental (that is, they always try to decode things - * when they can) unless they are explicitly asked to behave stupidly - * (=strictly conform to the specs) - */ - int strict_std_compliance; -#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. -#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. -#define FF_COMPLIANCE_NORMAL 0 -#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions -#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. - - /** - * error concealment flags - * - encoding: unused - * - decoding: Set by user. - */ - int error_concealment; -#define FF_EC_GUESS_MVS 1 -#define FF_EC_DEBLOCK 2 -#define FF_EC_FAVOR_INTER 256 - - /** - * debug - * - encoding: Set by user. - * - decoding: Set by user. - */ - int debug; -#define FF_DEBUG_PICT_INFO 1 -#define FF_DEBUG_RC 2 -#define FF_DEBUG_BITSTREAM 4 -#define FF_DEBUG_MB_TYPE 8 -#define FF_DEBUG_QP 16 -#define FF_DEBUG_DCT_COEFF 0x00000040 -#define FF_DEBUG_SKIP 0x00000080 -#define FF_DEBUG_STARTCODE 0x00000100 -#define FF_DEBUG_ER 0x00000400 -#define FF_DEBUG_MMCO 0x00000800 -#define FF_DEBUG_BUGS 0x00001000 -#define FF_DEBUG_BUFFERS 0x00008000 -#define FF_DEBUG_THREADS 0x00010000 -#define FF_DEBUG_GREEN_MD 0x00800000 -#define FF_DEBUG_NOMC 0x01000000 - - /** - * Error recognition; may misdetect some more or less valid parts as errors. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int err_recognition; - -/** - * Verify checksums embedded in the bitstream (could be of either encoded or - * decoded data, depending on the codec) and print an error message on mismatch. - * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the - * decoder returning an error. - */ -#define AV_EF_CRCCHECK (1<<0) -#define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations -#define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length -#define AV_EF_EXPLODE (1<<3) ///< abort decoding on minor error detection - -#define AV_EF_IGNORE_ERR (1<<15) ///< ignore errors and continue -#define AV_EF_CAREFUL (1<<16) ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors -#define AV_EF_COMPLIANT (1<<17) ///< consider all spec non compliances as errors -#define AV_EF_AGGRESSIVE (1<<18) ///< consider things that a sane encoder should not do as an error - - - /** - * opaque 64-bit number (generally a PTS) that will be reordered and - * output in AVFrame.reordered_opaque - * - encoding: Set by libavcodec to the reordered_opaque of the input - * frame corresponding to the last returned packet. Only - * supported by encoders with the - * AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability. - * - decoding: Set by user. - */ - int64_t reordered_opaque; - - /** - * Hardware accelerator in use - * - encoding: unused. - * - decoding: Set by libavcodec - */ - const struct AVHWAccel *hwaccel; - - /** - * Hardware accelerator context. - * For some hardware accelerators, a global context needs to be - * provided by the user. In that case, this holds display-dependent - * data FFmpeg cannot instantiate itself. Please refer to the - * FFmpeg HW accelerator documentation to know how to fill this - * is. e.g. for VA API, this is a struct vaapi_context. - * - encoding: unused - * - decoding: Set by user - */ - void *hwaccel_context; - - /** - * error - * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR. - * - decoding: unused - */ - uint64_t error[AV_NUM_DATA_POINTERS]; - - /** - * DCT algorithm, see FF_DCT_* below - * - encoding: Set by user. - * - decoding: unused - */ - int dct_algo; -#define FF_DCT_AUTO 0 -#define FF_DCT_FASTINT 1 -#define FF_DCT_INT 2 -#define FF_DCT_MMX 3 -#define FF_DCT_ALTIVEC 5 -#define FF_DCT_FAAN 6 - - /** - * IDCT algorithm, see FF_IDCT_* below. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int idct_algo; -#define FF_IDCT_AUTO 0 -#define FF_IDCT_INT 1 -#define FF_IDCT_SIMPLE 2 -#define FF_IDCT_SIMPLEMMX 3 -#define FF_IDCT_ARM 7 -#define FF_IDCT_ALTIVEC 8 -#define FF_IDCT_SIMPLEARM 10 -#define FF_IDCT_XVID 14 -#define FF_IDCT_SIMPLEARMV5TE 16 -#define FF_IDCT_SIMPLEARMV6 17 -#define FF_IDCT_FAAN 20 -#define FF_IDCT_SIMPLENEON 22 -#define FF_IDCT_NONE 24 /* Used by XvMC to extract IDCT coefficients with FF_IDCT_PERM_NONE */ -#define FF_IDCT_SIMPLEAUTO 128 - - /** - * bits per sample/pixel from the demuxer (needed for huffyuv). - * - encoding: Set by libavcodec. - * - decoding: Set by user. - */ - int bits_per_coded_sample; - - /** - * Bits per sample/pixel of internal libavcodec pixel/sample format. - * - encoding: set by user. - * - decoding: set by libavcodec. - */ - int bits_per_raw_sample; - - /** - * low resolution decoding, 1-> 1/2 size, 2->1/4 size - * - encoding: unused - * - decoding: Set by user. - */ - int lowres; - -#if FF_API_CODED_FRAME - /** - * the picture in the bitstream - * - encoding: Set by libavcodec. - * - decoding: unused - * - * @deprecated use the quality factor packet side data instead - */ - attribute_deprecated AVFrame *coded_frame; -#endif - - /** - * thread count - * is used to decide how many independent tasks should be passed to execute() - * - encoding: Set by user. - * - decoding: Set by user. - */ - int thread_count; - - /** - * Which multithreading methods to use. - * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, - * so clients which cannot provide future frames should not use it. - * - * - encoding: Set by user, otherwise the default is used. - * - decoding: Set by user, otherwise the default is used. - */ - int thread_type; -#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once -#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once - - /** - * Which multithreading methods are in use by the codec. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int active_thread_type; - -#if FF_API_THREAD_SAFE_CALLBACKS - /** - * Set by the client if its custom get_buffer() callback can be called - * synchronously from another thread, which allows faster multithreaded decoding. - * draw_horiz_band() will be called from other threads regardless of this setting. - * Ignored if the default get_buffer() is used. - * - encoding: Set by user. - * - decoding: Set by user. - * - * @deprecated the custom get_buffer2() callback should always be - * thread-safe. Thread-unsafe get_buffer2() implementations will be - * invalid starting with LIBAVCODEC_VERSION_MAJOR=60; in other words, - * libavcodec will behave as if this field was always set to 1. - * Callers that want to be forward compatible with future libavcodec - * versions should wrap access to this field in - * #if LIBAVCODEC_VERSION_MAJOR < 60 - */ - attribute_deprecated - int thread_safe_callbacks; -#endif - - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. - * @param count the number of things to execute - * - encoding: Set by libavcodec, user can override. - * - decoding: Set by libavcodec, user can override. - */ - int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size); - - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. - * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. - * @param c context passed also to func - * @param count the number of things to execute - * @param arg2 argument passed unchanged to func - * @param ret return values of executed functions, must have space for "count" values. May be NULL. - * @param func function that will be called count times, with jobnr from 0 to count-1. - * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no - * two instances of func executing at the same time will have the same threadnr. - * @return always 0 currently, but code should handle a future improvement where when any call to func - * returns < 0 no further calls to func may be done and < 0 is returned. - * - encoding: Set by libavcodec, user can override. - * - decoding: Set by libavcodec, user can override. - */ - int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count); - - /** - * noise vs. sse weight for the nsse comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int nsse_weight; - - /** - * profile - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int profile; -#define FF_PROFILE_UNKNOWN -99 -#define FF_PROFILE_RESERVED -100 - -#define FF_PROFILE_AAC_MAIN 0 -#define FF_PROFILE_AAC_LOW 1 -#define FF_PROFILE_AAC_SSR 2 -#define FF_PROFILE_AAC_LTP 3 -#define FF_PROFILE_AAC_HE 4 -#define FF_PROFILE_AAC_HE_V2 28 -#define FF_PROFILE_AAC_LD 22 -#define FF_PROFILE_AAC_ELD 38 -#define FF_PROFILE_MPEG2_AAC_LOW 128 -#define FF_PROFILE_MPEG2_AAC_HE 131 - -#define FF_PROFILE_DNXHD 0 -#define FF_PROFILE_DNXHR_LB 1 -#define FF_PROFILE_DNXHR_SQ 2 -#define FF_PROFILE_DNXHR_HQ 3 -#define FF_PROFILE_DNXHR_HQX 4 -#define FF_PROFILE_DNXHR_444 5 - -#define FF_PROFILE_DTS 20 -#define FF_PROFILE_DTS_ES 30 -#define FF_PROFILE_DTS_96_24 40 -#define FF_PROFILE_DTS_HD_HRA 50 -#define FF_PROFILE_DTS_HD_MA 60 -#define FF_PROFILE_DTS_EXPRESS 70 - -#define FF_PROFILE_MPEG2_422 0 -#define FF_PROFILE_MPEG2_HIGH 1 -#define FF_PROFILE_MPEG2_SS 2 -#define FF_PROFILE_MPEG2_SNR_SCALABLE 3 -#define FF_PROFILE_MPEG2_MAIN 4 -#define FF_PROFILE_MPEG2_SIMPLE 5 - -#define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag -#define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag - -#define FF_PROFILE_H264_BASELINE 66 -#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED) -#define FF_PROFILE_H264_MAIN 77 -#define FF_PROFILE_H264_EXTENDED 88 -#define FF_PROFILE_H264_HIGH 100 -#define FF_PROFILE_H264_HIGH_10 110 -#define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_MULTIVIEW_HIGH 118 -#define FF_PROFILE_H264_HIGH_422 122 -#define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_STEREO_HIGH 128 -#define FF_PROFILE_H264_HIGH_444 144 -#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244 -#define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_CAVLC_444 44 - -#define FF_PROFILE_VC1_SIMPLE 0 -#define FF_PROFILE_VC1_MAIN 1 -#define FF_PROFILE_VC1_COMPLEX 2 -#define FF_PROFILE_VC1_ADVANCED 3 - -#define FF_PROFILE_MPEG4_SIMPLE 0 -#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1 -#define FF_PROFILE_MPEG4_CORE 2 -#define FF_PROFILE_MPEG4_MAIN 3 -#define FF_PROFILE_MPEG4_N_BIT 4 -#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5 -#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6 -#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7 -#define FF_PROFILE_MPEG4_HYBRID 8 -#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9 -#define FF_PROFILE_MPEG4_CORE_SCALABLE 10 -#define FF_PROFILE_MPEG4_ADVANCED_CODING 11 -#define FF_PROFILE_MPEG4_ADVANCED_CORE 12 -#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13 -#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14 -#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15 - -#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 1 -#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 2 -#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 32768 -#define FF_PROFILE_JPEG2000_DCINEMA_2K 3 -#define FF_PROFILE_JPEG2000_DCINEMA_4K 4 - -#define FF_PROFILE_VP9_0 0 -#define FF_PROFILE_VP9_1 1 -#define FF_PROFILE_VP9_2 2 -#define FF_PROFILE_VP9_3 3 - -#define FF_PROFILE_HEVC_MAIN 1 -#define FF_PROFILE_HEVC_MAIN_10 2 -#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 -#define FF_PROFILE_HEVC_REXT 4 - -#define FF_PROFILE_VVC_MAIN_10 1 -#define FF_PROFILE_VVC_MAIN_10_444 33 - -#define FF_PROFILE_AV1_MAIN 0 -#define FF_PROFILE_AV1_HIGH 1 -#define FF_PROFILE_AV1_PROFESSIONAL 2 - -#define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT 0xc0 -#define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1 -#define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT 0xc2 -#define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS 0xc3 -#define FF_PROFILE_MJPEG_JPEG_LS 0xf7 - -#define FF_PROFILE_SBC_MSBC 1 - -#define FF_PROFILE_PRORES_PROXY 0 -#define FF_PROFILE_PRORES_LT 1 -#define FF_PROFILE_PRORES_STANDARD 2 -#define FF_PROFILE_PRORES_HQ 3 -#define FF_PROFILE_PRORES_4444 4 -#define FF_PROFILE_PRORES_XQ 5 - -#define FF_PROFILE_ARIB_PROFILE_A 0 -#define FF_PROFILE_ARIB_PROFILE_C 1 - -#define FF_PROFILE_KLVA_SYNC 0 -#define FF_PROFILE_KLVA_ASYNC 1 - - /** - * level - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int level; -#define FF_LEVEL_UNKNOWN -99 - - /** - * Skip loop filtering for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_loop_filter; - - /** - * Skip IDCT/dequantization for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_idct; - - /** - * Skip decoding for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_frame; - - /** - * Header containing style information for text subtitles. - * For SUBTITLE_ASS subtitle type, it should contain the whole ASS - * [Script Info] and [V4+ Styles] section, plus the [Events] line and - * the Format line following. It shouldn't include any Dialogue line. - * - encoding: Set/allocated/freed by user (before avcodec_open2()) - * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2()) - */ - uint8_t *subtitle_header; - int subtitle_header_size; - -#if FF_API_VBV_DELAY - /** - * VBV delay coded in the last frame (in periods of a 27 MHz clock). - * Used for compliant TS muxing. - * - encoding: Set by libavcodec. - * - decoding: unused. - * @deprecated this value is now exported as a part of - * AV_PKT_DATA_CPB_PROPERTIES packet side data - */ - attribute_deprecated - uint64_t vbv_delay; -#endif - -#if FF_API_SIDEDATA_ONLY_PKT - /** - * Encoding only and set by default. Allow encoders to output packets - * that do not contain any encoded data, only side data. - * - * Some encoders need to output such packets, e.g. to update some stream - * parameters at the end of encoding. - * - * @deprecated this field disables the default behaviour and - * it is kept only for compatibility. - */ - attribute_deprecated - int side_data_only_packets; -#endif - - /** - * Audio only. The number of "priming" samples (padding) inserted by the - * encoder at the beginning of the audio. I.e. this number of leading - * decoded samples must be discarded by the caller to get the original audio - * without leading padding. - * - * - decoding: unused - * - encoding: Set by libavcodec. The timestamps on the output packets are - * adjusted by the encoder so that they always refer to the - * first sample of the data actually contained in the packet, - * including any added padding. E.g. if the timebase is - * 1/samplerate and the timestamp of the first input sample is - * 0, the timestamp of the first output packet will be - * -initial_padding. - */ - int initial_padding; - - /** - * - decoding: For codecs that store a framerate value in the compressed - * bitstream, the decoder may export it here. { 0, 1} when - * unknown. - * - encoding: May be used to signal the framerate of CFR content to an - * encoder. - */ - AVRational framerate; - - /** - * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx. - * - encoding: unused. - * - decoding: Set by libavcodec before calling get_format() - */ - enum AVPixelFormat sw_pix_fmt; - - /** - * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. - * - encoding unused. - * - decoding set by user. - */ - AVRational pkt_timebase; - - /** - * AVCodecDescriptor - * - encoding: unused. - * - decoding: set by libavcodec. - */ - const AVCodecDescriptor *codec_descriptor; - - /** - * Current statistics for PTS correction. - * - decoding: maintained and used by libavcodec, not intended to be used by user apps - * - encoding: unused - */ - int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far - int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far - int64_t pts_correction_last_pts; /// PTS of the last frame - int64_t pts_correction_last_dts; /// DTS of the last frame - - /** - * Character encoding of the input subtitles file. - * - decoding: set by user - * - encoding: unused - */ - char *sub_charenc; - - /** - * Subtitles character encoding mode. Formats or codecs might be adjusting - * this setting (if they are doing the conversion themselves for instance). - * - decoding: set by libavcodec - * - encoding: unused - */ - int sub_charenc_mode; -#define FF_SUB_CHARENC_MODE_DO_NOTHING -1 ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance) -#define FF_SUB_CHARENC_MODE_AUTOMATIC 0 ///< libavcodec will select the mode itself -#define FF_SUB_CHARENC_MODE_PRE_DECODER 1 ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv -#define FF_SUB_CHARENC_MODE_IGNORE 2 ///< neither convert the subtitles, nor check them for valid UTF-8 - - /** - * Skip processing alpha if supported by codec. - * Note that if the format uses pre-multiplied alpha (common with VP6, - * and recommended due to better video quality/compression) - * the image will look as if alpha-blended onto a black background. - * However for formats that do not use pre-multiplied alpha - * there might be serious artefacts (though e.g. libswscale currently - * assumes pre-multiplied alpha anyway). - * - * - decoding: set by user - * - encoding: unused - */ - int skip_alpha; - - /** - * Number of samples to skip after a discontinuity - * - decoding: unused - * - encoding: set by libavcodec - */ - int seek_preroll; - -#if FF_API_DEBUG_MV - /** - * @deprecated unused - */ - attribute_deprecated - int debug_mv; -#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames -#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames -#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames -#endif - - /** - * custom intra quantization matrix - * - encoding: Set by user, can be NULL. - * - decoding: unused. - */ - uint16_t *chroma_intra_matrix; - - /** - * dump format separator. - * can be ", " or "\n " or anything else - * - encoding: Set by user. - * - decoding: Set by user. - */ - uint8_t *dump_separator; - - /** - * ',' separated list of allowed decoders. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *codec_whitelist; - - /** - * Properties of the stream that gets decoded - * - encoding: unused - * - decoding: set by libavcodec - */ - unsigned properties; -#define FF_CODEC_PROPERTY_LOSSLESS 0x00000001 -#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002 - - /** - * Additional data associated with the entire coded stream. - * - * - decoding: unused - * - encoding: may be set by libavcodec after avcodec_open2(). - */ - AVPacketSideData *coded_side_data; - int nb_coded_side_data; - - /** - * A reference to the AVHWFramesContext describing the input (for encoding) - * or output (decoding) frames. The reference is set by the caller and - * afterwards owned (and freed) by libavcodec - it should never be read by - * the caller after being set. - * - * - decoding: This field should be set by the caller from the get_format() - * callback. The previous reference (if any) will always be - * unreffed by libavcodec before the get_format() call. - * - * If the default get_buffer2() is used with a hwaccel pixel - * format, then this AVHWFramesContext will be used for - * allocating the frame buffers. - * - * - encoding: For hardware encoders configured to use a hwaccel pixel - * format, this field should be set by the caller to a reference - * to the AVHWFramesContext describing input frames. - * AVHWFramesContext.format must be equal to - * AVCodecContext.pix_fmt. - * - * This field should be set before avcodec_open2() is called. - */ - AVBufferRef *hw_frames_ctx; - - /** - * Control the form of AVSubtitle.rects[N]->ass - * - decoding: set by user - * - encoding: unused - */ - int sub_text_format; -#define FF_SUB_TEXT_FMT_ASS 0 -#if FF_API_ASS_TIMING -#define FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS 1 -#endif - - /** - * Audio only. The amount of padding (in samples) appended by the encoder to - * the end of the audio. I.e. this number of decoded samples must be - * discarded by the caller from the end of the stream to get the original - * audio without any trailing padding. - * - * - decoding: unused - * - encoding: unused - */ - int trailing_padding; - - /** - * The number of pixels per image to maximally accept. - * - * - decoding: set by user - * - encoding: set by user - */ - int64_t max_pixels; - - /** - * A reference to the AVHWDeviceContext describing the device which will - * be used by a hardware encoder/decoder. The reference is set by the - * caller and afterwards owned (and freed) by libavcodec. - * - * This should be used if either the codec device does not require - * hardware frames or any that are used are to be allocated internally by - * libavcodec. If the user wishes to supply any of the frames used as - * encoder input or decoder output then hw_frames_ctx should be used - * instead. When hw_frames_ctx is set in get_format() for a decoder, this - * field will be ignored while decoding the associated stream segment, but - * may again be used on a following one after another get_format() call. - * - * For both encoders and decoders this field should be set before - * avcodec_open2() is called and must not be written to thereafter. - * - * Note that some decoders may require this field to be set initially in - * order to support hw_frames_ctx at all - in that case, all frames - * contexts used must be created on the same device. - */ - AVBufferRef *hw_device_ctx; - - /** - * Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated - * decoding (if active). - * - encoding: unused - * - decoding: Set by user (either before avcodec_open2(), or in the - * AVCodecContext.get_format callback) - */ - int hwaccel_flags; - - /** - * Video decoding only. Certain video codecs support cropping, meaning that - * only a sub-rectangle of the decoded frame is intended for display. This - * option controls how cropping is handled by libavcodec. - * - * When set to 1 (the default), libavcodec will apply cropping internally. - * I.e. it will modify the output frame width/height fields and offset the - * data pointers (only by as much as possible while preserving alignment, or - * by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that - * the frames output by the decoder refer only to the cropped area. The - * crop_* fields of the output frames will be zero. - * - * When set to 0, the width/height fields of the output frames will be set - * to the coded dimensions and the crop_* fields will describe the cropping - * rectangle. Applying the cropping is left to the caller. - * - * @warning When hardware acceleration with opaque output frames is used, - * libavcodec is unable to apply cropping from the top/left border. - * - * @note when this option is set to zero, the width/height fields of the - * AVCodecContext and output AVFrames have different meanings. The codec - * context fields store display dimensions (with the coded dimensions in - * coded_width/height), while the frame fields store the coded dimensions - * (with the display dimensions being determined by the crop_* fields). - */ - int apply_cropping; - - /* - * Video decoding only. Sets the number of extra hardware frames which - * the decoder will allocate for use by the caller. This must be set - * before avcodec_open2() is called. - * - * Some hardware decoders require all frames that they will use for - * output to be defined in advance before decoding starts. For such - * decoders, the hardware frame pool must therefore be of a fixed size. - * The extra frames set here are on top of any number that the decoder - * needs internally in order to operate normally (for example, frames - * used as reference pictures). - */ - int extra_hw_frames; - - /** - * The percentage of damaged samples to discard a frame. - * - * - decoding: set by user - * - encoding: unused - */ - int discard_damaged_percentage; - - /** - * The number of samples per frame to maximally accept. - * - * - decoding: set by user - * - encoding: set by user - */ - int64_t max_samples; - - /** - * Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of - * metadata exported in frame, packet, or coded stream side data by - * decoders and encoders. - * - * - decoding: set by user - * - encoding: set by user - */ - int export_side_data; - - /** - * This callback is called at the beginning of each packet to get a data - * buffer for it. - * - * The following field will be set in the packet before this callback is - * called: - * - size - * This callback must use the above value to calculate the required buffer size, - * which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes. - * - * This callback must fill the following fields in the packet: - * - data: alignment requirements for AVPacket apply, if any. Some architectures and - * encoders may benefit from having aligned data. - * - buf: must contain a pointer to an AVBufferRef structure. The packet's - * data pointer must be contained in it. See: av_buffer_create(), av_buffer_alloc(), - * and av_buffer_ref(). - * - * If AV_CODEC_CAP_DR1 is not set then get_encode_buffer() must call - * avcodec_default_get_encode_buffer() instead of providing a buffer allocated by - * some other means. - * - * The flags field may contain a combination of AV_GET_ENCODE_BUFFER_FLAG_ flags. - * They may be used for example to hint what use the buffer may get after being - * created. - * Implementations of this callback may ignore flags they don't understand. - * If AV_GET_ENCODE_BUFFER_FLAG_REF is set in flags then the packet may be reused - * (read and/or written to if it is writable) later by libavcodec. - * - * This callback must be thread-safe, as when frame threading is used, it may - * be called from multiple threads simultaneously. - * - * @see avcodec_default_get_encode_buffer() - * - * - encoding: Set by libavcodec, user can override. - * - decoding: unused - */ - int (*get_encode_buffer)(struct AVCodecContext *s, AVPacket *pkt, int flags); -} AVCodecContext; - -#if FF_API_CODEC_GET_SET -/** - * Accessors for some AVCodecContext fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_pkt_timebase (AVCodecContext *avctx, AVRational val); - -attribute_deprecated -const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc); - -attribute_deprecated -unsigned av_codec_get_codec_properties(const AVCodecContext *avctx); - -attribute_deprecated -int av_codec_get_lowres(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_lowres(AVCodecContext *avctx, int val); - -attribute_deprecated -int av_codec_get_seek_preroll(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_seek_preroll(AVCodecContext *avctx, int val); - -attribute_deprecated -uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val); -#endif - -struct AVSubtitle; - -#if FF_API_CODEC_GET_SET -attribute_deprecated -int av_codec_get_max_lowres(const AVCodec *codec); -#endif - -struct MpegEncContext; - -/** - * @defgroup lavc_hwaccel AVHWAccel - * - * @note Nothing in this structure should be accessed by the user. At some - * point in future it will not be externally visible at all. - * - * @{ - */ -typedef struct AVHWAccel { - /** - * Name of the hardware accelerated codec. - * The name is globally unique among encoders and among decoders (but an - * encoder and a decoder can share the same name). - */ - const char *name; - - /** - * Type of codec implemented by the hardware accelerator. - * - * See AVMEDIA_TYPE_xxx - */ - enum AVMediaType type; - - /** - * Codec implemented by the hardware accelerator. - * - * See AV_CODEC_ID_xxx - */ - enum AVCodecID id; - - /** - * Supported pixel format. - * - * Only hardware accelerated formats are supported here. - */ - enum AVPixelFormat pix_fmt; - - /** - * Hardware accelerated codec capabilities. - * see AV_HWACCEL_CODEC_CAP_* - */ - int capabilities; - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavcodec and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * Allocate a custom buffer - */ - int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame); - - /** - * Called at the beginning of each frame or field picture. - * - * Meaningful frame information (codec specific) is guaranteed to - * be parsed at this point. This function is mandatory. - * - * Note that buf can be NULL along with buf_size set to 0. - * Otherwise, this means the whole frame is available at this point. - * - * @param avctx the codec context - * @param buf the frame data buffer base - * @param buf_size the size of the frame in bytes - * @return zero if successful, a negative value otherwise - */ - int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); - - /** - * Callback for parameter data (SPS/PPS/VPS etc). - * - * Useful for hardware decoders which keep persistent state about the - * video parameters, and need to receive any changes to update that state. - * - * @param avctx the codec context - * @param type the nal unit type - * @param buf the nal unit data buffer - * @param buf_size the size of the nal unit in bytes - * @return zero if successful, a negative value otherwise - */ - int (*decode_params)(AVCodecContext *avctx, int type, const uint8_t *buf, uint32_t buf_size); - - /** - * Callback for each slice. - * - * Meaningful slice information (codec specific) is guaranteed to - * be parsed at this point. This function is mandatory. - * The only exception is XvMC, that works on MB level. - * - * @param avctx the codec context - * @param buf the slice data buffer base - * @param buf_size the size of the slice in bytes - * @return zero if successful, a negative value otherwise - */ - int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); - - /** - * Called at the end of each frame or field picture. - * - * The whole picture is parsed at this point and can now be sent - * to the hardware accelerator. This function is mandatory. - * - * @param avctx the codec context - * @return zero if successful, a negative value otherwise - */ - int (*end_frame)(AVCodecContext *avctx); - - /** - * Size of per-frame hardware accelerator private data. - * - * Private data is allocated with av_mallocz() before - * AVCodecContext.get_buffer() and deallocated after - * AVCodecContext.release_buffer(). - */ - int frame_priv_data_size; - - /** - * Called for every Macroblock in a slice. - * - * XvMC uses it to replace the ff_mpv_reconstruct_mb(). - * Instead of decoding to raw picture, MB parameters are - * stored in an array provided by the video driver. - * - * @param s the mpeg context - */ - void (*decode_mb)(struct MpegEncContext *s); - - /** - * Initialize the hwaccel private data. - * - * This will be called from ff_get_format(), after hwaccel and - * hwaccel_context are set and the hwaccel private data in AVCodecInternal - * is allocated. - */ - int (*init)(AVCodecContext *avctx); - - /** - * Uninitialize the hwaccel private data. - * - * This will be called from get_format() or avcodec_close(), after hwaccel - * and hwaccel_context are already uninitialized. - */ - int (*uninit)(AVCodecContext *avctx); - - /** - * Size of the private data to allocate in - * AVCodecInternal.hwaccel_priv_data. - */ - int priv_data_size; - - /** - * Internal hwaccel capabilities. - */ - int caps_internal; - - /** - * Fill the given hw_frames context with current codec parameters. Called - * from get_format. Refer to avcodec_get_hw_frames_parameters() for - * details. - * - * This CAN be called before AVHWAccel.init is called, and you must assume - * that avctx->hwaccel_priv_data is invalid. - */ - int (*frame_params)(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx); -} AVHWAccel; - -/** - * HWAccel is experimental and is thus avoided in favor of non experimental - * codecs - */ -#define AV_HWACCEL_CODEC_CAP_EXPERIMENTAL 0x0200 - -/** - * Hardware acceleration should be used for decoding even if the codec level - * used is unknown or higher than the maximum supported level reported by the - * hardware driver. - * - * It's generally a good idea to pass this flag unless you have a specific - * reason not to, as hardware tends to under-report supported levels. - */ -#define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0) - -/** - * Hardware acceleration can output YUV pixel formats with a different chroma - * sampling than 4:2:0 and/or other than 8 bits per component. - */ -#define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1) - -/** - * Hardware acceleration should still be attempted for decoding when the - * codec profile does not match the reported capabilities of the hardware. - * - * For example, this can be used to try to decode baseline profile H.264 - * streams in hardware - it will often succeed, because many streams marked - * as baseline profile actually conform to constrained baseline profile. - * - * @warning If the stream is actually not supported then the behaviour is - * undefined, and may include returning entirely incorrect output - * while indicating success. - */ -#define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) - -/** - * @} - */ - -#if FF_API_AVPICTURE -/** - * @defgroup lavc_picture AVPicture - * - * Functions for working with AVPicture - * @{ - */ - -/** - * Picture data structure. - * - * Up to four components can be stored into it, the last component is - * alpha. - * @deprecated use AVFrame or imgutils functions instead - */ -typedef struct AVPicture { - attribute_deprecated - uint8_t *data[AV_NUM_DATA_POINTERS]; ///< pointers to the image data planes - attribute_deprecated - int linesize[AV_NUM_DATA_POINTERS]; ///< number of bytes per line -} AVPicture; - -/** - * @} - */ -#endif - -enum AVSubtitleType { - SUBTITLE_NONE, - - SUBTITLE_BITMAP, ///< A bitmap, pict will be set - - /** - * Plain text, the text field must be set by the decoder and is - * authoritative. ass and pict fields may contain approximations. - */ - SUBTITLE_TEXT, - - /** - * Formatted text, the ass field must be set by the decoder and is - * authoritative. pict and text fields may contain approximations. - */ - SUBTITLE_ASS, -}; - -#define AV_SUBTITLE_FLAG_FORCED 0x00000001 - -typedef struct AVSubtitleRect { - int x; ///< top left corner of pict, undefined when pict is not set - int y; ///< top left corner of pict, undefined when pict is not set - int w; ///< width of pict, undefined when pict is not set - int h; ///< height of pict, undefined when pict is not set - int nb_colors; ///< number of colors in pict, undefined when pict is not set - -#if FF_API_AVPICTURE - /** - * @deprecated unused - */ - attribute_deprecated - AVPicture pict; -#endif - /** - * data+linesize for the bitmap of this subtitle. - * Can be set for text/ass as well once they are rendered. - */ - uint8_t *data[4]; - int linesize[4]; - - enum AVSubtitleType type; - - char *text; ///< 0 terminated plain UTF-8 text - - /** - * 0 terminated ASS/SSA compatible event line. - * The presentation of this is unaffected by the other values in this - * struct. - */ - char *ass; - - int flags; -} AVSubtitleRect; - -typedef struct AVSubtitle { - uint16_t format; /* 0 = graphics */ - uint32_t start_display_time; /* relative to packet pts, in ms */ - uint32_t end_display_time; /* relative to packet pts, in ms */ - unsigned num_rects; - AVSubtitleRect **rects; - int64_t pts; ///< Same as packet pts, in AV_TIME_BASE -} AVSubtitle; - -#if FF_API_NEXT -/** - * If c is NULL, returns the first registered codec, - * if c is non-NULL, returns the next registered codec after c, - * or NULL if c is the last one. - */ -attribute_deprecated -AVCodec *av_codec_next(const AVCodec *c); -#endif - -/** - * Return the LIBAVCODEC_VERSION_INT constant. - */ -unsigned avcodec_version(void); - -/** - * Return the libavcodec build-time configuration. - */ -const char *avcodec_configuration(void); - -/** - * Return the libavcodec license. - */ -const char *avcodec_license(void); - -#if FF_API_NEXT -/** - * @deprecated Calling this function is unnecessary. - */ -attribute_deprecated -void avcodec_register(AVCodec *codec); - -/** - * @deprecated Calling this function is unnecessary. - */ -attribute_deprecated -void avcodec_register_all(void); -#endif - -/** - * Allocate an AVCodecContext and set its fields to default values. The - * resulting struct should be freed with avcodec_free_context(). - * - * @param codec if non-NULL, allocate private data and initialize defaults - * for the given codec. It is illegal to then call avcodec_open2() - * with a different codec. - * If NULL, then the codec-specific defaults won't be initialized, - * which may result in suboptimal default settings (this is - * important mainly for encoders, e.g. libx264). - * - * @return An AVCodecContext filled with default values or NULL on failure. - */ -AVCodecContext *avcodec_alloc_context3(const AVCodec *codec); - -/** - * Free the codec context and everything associated with it and write NULL to - * the provided pointer. - */ -void avcodec_free_context(AVCodecContext **avctx); - -#if FF_API_GET_CONTEXT_DEFAULTS -/** - * @deprecated This function should not be used, as closing and opening a codec - * context multiple time is not supported. A new codec context should be - * allocated for each new use. - */ -int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec); -#endif - -/** - * Get the AVClass for AVCodecContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avcodec_get_class(void); - -#if FF_API_GET_FRAME_CLASS -/** - * @deprecated This function should not be used. - */ -attribute_deprecated -const AVClass *avcodec_get_frame_class(void); -#endif - -/** - * Get the AVClass for AVSubtitleRect. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avcodec_get_subtitle_rect_class(void); - -#if FF_API_COPY_CONTEXT -/** - * Copy the settings of the source AVCodecContext into the destination - * AVCodecContext. The resulting destination codec context will be - * unopened, i.e. you are required to call avcodec_open2() before you - * can use this AVCodecContext to decode/encode video/audio data. - * - * @param dest target codec context, should be initialized with - * avcodec_alloc_context3(NULL), but otherwise uninitialized - * @param src source codec context - * @return AVERROR() on error (e.g. memory allocation error), 0 on success - * - * @deprecated The semantics of this function are ill-defined and it should not - * be used. If you need to transfer the stream parameters from one codec context - * to another, use an intermediate AVCodecParameters instance and the - * avcodec_parameters_from_context() / avcodec_parameters_to_context() - * functions. - */ -attribute_deprecated -int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src); -#endif - -/** - * Fill the parameters struct based on the values from the supplied codec - * context. Any allocated fields in par are freed and replaced with duplicates - * of the corresponding fields in codec. - * - * @return >= 0 on success, a negative AVERROR code on failure - */ -int avcodec_parameters_from_context(AVCodecParameters *par, - const AVCodecContext *codec); - -/** - * Fill the codec context based on the values from the supplied codec - * parameters. Any allocated fields in codec that have a corresponding field in - * par are freed and replaced with duplicates of the corresponding field in par. - * Fields in codec that do not have a counterpart in par are not touched. - * - * @return >= 0 on success, a negative AVERROR code on failure. - */ -int avcodec_parameters_to_context(AVCodecContext *codec, - const AVCodecParameters *par); - -/** - * Initialize the AVCodecContext to use the given AVCodec. Prior to using this - * function the context has to be allocated with avcodec_alloc_context3(). - * - * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), - * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for - * retrieving a codec. - * - * @warning This function is not thread safe! - * - * @note Always call this function before using decoding routines (such as - * @ref avcodec_receive_frame()). - * - * @code - * av_dict_set(&opts, "b", "2.5M", 0); - * codec = avcodec_find_decoder(AV_CODEC_ID_H264); - * if (!codec) - * exit(1); - * - * context = avcodec_alloc_context3(codec); - * - * if (avcodec_open2(context, codec, opts) < 0) - * exit(1); - * @endcode - * - * @param avctx The context to initialize. - * @param codec The codec to open this context for. If a non-NULL codec has been - * previously passed to avcodec_alloc_context3() or - * for this context, then this parameter MUST be either NULL or - * equal to the previously passed codec. - * @param options A dictionary filled with AVCodecContext and codec-private options. - * On return this object will be filled with options that were not found. - * - * @return zero on success, a negative value on error - * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), - * av_dict_set(), av_opt_find(). - */ -int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options); - -/** - * Close a given AVCodecContext and free all the data associated with it - * (but not the AVCodecContext itself). - * - * Calling this function on an AVCodecContext that hasn't been opened will free - * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL - * codec. Subsequent calls will do nothing. - * - * @note Do not use this function. Use avcodec_free_context() to destroy a - * codec context (either open or closed). Opening and closing a codec context - * multiple times is not supported anymore -- use multiple codec contexts - * instead. - */ -int avcodec_close(AVCodecContext *avctx); - -/** - * Free all allocated data in the given subtitle struct. - * - * @param sub AVSubtitle to free. - */ -void avsubtitle_free(AVSubtitle *sub); - -/** - * @} - */ - -/** - * @addtogroup lavc_decoding - * @{ - */ - -/** - * The default callback for AVCodecContext.get_buffer2(). It is made public so - * it can be called by custom get_buffer2() implementations for decoders without - * AV_CODEC_CAP_DR1 set. - */ -int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags); - -/** - * The default callback for AVCodecContext.get_encode_buffer(). It is made public so - * it can be called by custom get_encode_buffer() implementations for encoders without - * AV_CODEC_CAP_DR1 set. - */ -int avcodec_default_get_encode_buffer(AVCodecContext *s, AVPacket *pkt, int flags); - -/** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you do not use any horizontal - * padding. - * - * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. - */ -void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height); - -/** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you also ensure that all - * line sizes are a multiple of the respective linesize_align[i]. - * - * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. - */ -void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, - int linesize_align[AV_NUM_DATA_POINTERS]); - -/** - * Converts AVChromaLocation to swscale x/y chroma position. - * - * The positions represent the chroma (0,0) position in a coordinates system - * with luma (0,0) representing the origin and luma(1,1) representing 256,256 - * - * @param xpos horizontal chroma sample position - * @param ypos vertical chroma sample position - */ -int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos); - -/** - * Converts swscale x/y chroma position to AVChromaLocation. - * - * The positions represent the chroma (0,0) position in a coordinates system - * with luma (0,0) representing the origin and luma(1,1) representing 256,256 - * - * @param xpos horizontal chroma sample position - * @param ypos vertical chroma sample position - */ -enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos); - -#if FF_API_OLD_ENCDEC -/** - * Decode the audio frame of size avpkt->size from avpkt->data into frame. - * - * Some decoders may support multiple frames in a single AVPacket. Such - * decoders would then just decode the first frame and the return value would be - * less than the packet size. In this case, avcodec_decode_audio4 has to be - * called again with an AVPacket containing the remaining data in order to - * decode the second frame, etc... Even if no frames are returned, the packet - * needs to be fed to the decoder with remaining data until it is completely - * consumed or an error occurs. - * - * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input - * and output. This means that for some packets they will not immediately - * produce decoded output and need to be flushed at the end of decoding to get - * all the decoded data. Flushing is done by calling this function with packets - * with avpkt->data set to NULL and avpkt->size set to 0 until it stops - * returning samples. It is safe to flush even those decoders that are not - * marked with AV_CODEC_CAP_DELAY, then no samples will be returned. - * - * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE - * larger than the actual read bytes because some optimized bitstream - * readers read 32 or 64 bits at once and could read over the end. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx the codec context - * @param[out] frame The AVFrame in which to store decoded audio samples. - * The decoder will allocate a buffer for the decoded frame by - * calling the AVCodecContext.get_buffer2() callback. - * When AVCodecContext.refcounted_frames is set to 1, the frame is - * reference counted and the returned reference belongs to the - * caller. The caller must release the frame using av_frame_unref() - * when the frame is no longer needed. The caller may safely write - * to the frame if av_frame_is_writable() returns 1. - * When AVCodecContext.refcounted_frames is set to 0, the returned - * reference belongs to the decoder and is valid only until the - * next call to this function or until closing or flushing the - * decoder. The caller may not write to it. - * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is - * non-zero. Note that this field being set to zero - * does not mean that an error has occurred. For - * decoders with AV_CODEC_CAP_DELAY set, no given decode - * call is guaranteed to produce a frame. - * @param[in] avpkt The input AVPacket containing the input buffer. - * At least avpkt->data and avpkt->size should be set. Some - * decoders might also require additional fields to be set. - * @return A negative error code is returned if an error occurred during - * decoding, otherwise the number of bytes consumed from the input - * AVPacket is returned. - * -* @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). - */ -attribute_deprecated -int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, - int *got_frame_ptr, const AVPacket *avpkt); - -/** - * Decode the video frame of size avpkt->size from avpkt->data into picture. - * Some decoders may support multiple frames in a single AVPacket, such - * decoders would then just decode the first frame. - * - * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than - * the actual read bytes because some optimized bitstream readers read 32 or 64 - * bits at once and could read over the end. - * - * @warning The end of the input buffer buf should be set to 0 to ensure that - * no overreading happens for damaged MPEG streams. - * - * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay - * between input and output, these need to be fed with avpkt->data=NULL, - * avpkt->size=0 at the end to return the remaining frames. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx the codec context - * @param[out] picture The AVFrame in which the decoded video frame will be stored. - * Use av_frame_alloc() to get an AVFrame. The codec will - * allocate memory for the actual bitmap by calling the - * AVCodecContext.get_buffer2() callback. - * When AVCodecContext.refcounted_frames is set to 1, the frame is - * reference counted and the returned reference belongs to the - * caller. The caller must release the frame using av_frame_unref() - * when the frame is no longer needed. The caller may safely write - * to the frame if av_frame_is_writable() returns 1. - * When AVCodecContext.refcounted_frames is set to 0, the returned - * reference belongs to the decoder and is valid only until the - * next call to this function or until closing or flushing the - * decoder. The caller may not write to it. - * - * @param[in] avpkt The input AVPacket containing the input buffer. - * You can create such packet with av_init_packet() and by then setting - * data and size, some decoders might in addition need other fields like - * flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least - * fields possible. - * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. - * @return On error a negative value is returned, otherwise the number of bytes - * used or zero if no frame could be decompressed. - * - * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). - */ -attribute_deprecated -int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, - int *got_picture_ptr, - const AVPacket *avpkt); -#endif - -/** - * Decode a subtitle message. - * Return a negative value on error, otherwise return the number of bytes used. - * If no subtitle could be decompressed, got_sub_ptr is zero. - * Otherwise, the subtitle is stored in *sub. - * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for - * simplicity, because the performance difference is expected to be negligible - * and reusing a get_buffer written for video codecs would probably perform badly - * due to a potentially very different allocation pattern. - * - * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input - * and output. This means that for some packets they will not immediately - * produce decoded output and need to be flushed at the end of decoding to get - * all the decoded data. Flushing is done by calling this function with packets - * with avpkt->data set to NULL and avpkt->size set to 0 until it stops - * returning subtitles. It is safe to flush even those decoders that are not - * marked with AV_CODEC_CAP_DELAY, then no subtitles will be returned. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx the codec context - * @param[out] sub The preallocated AVSubtitle in which the decoded subtitle will be stored, - * must be freed with avsubtitle_free if *got_sub_ptr is set. - * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. - * @param[in] avpkt The input AVPacket containing the input buffer. - */ -int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, - int *got_sub_ptr, - AVPacket *avpkt); - -/** - * Supply raw packet data as input to a decoder. - * - * Internally, this call will copy relevant AVCodecContext fields, which can - * influence decoding per-packet, and apply them when the packet is actually - * decoded. (For example AVCodecContext.skip_frame, which might direct the - * decoder to drop the frame contained by the packet sent with this function.) - * - * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE - * larger than the actual read bytes because some optimized bitstream - * readers read 32 or 64 bits at once and could read over the end. - * - * @warning Do not mix this API with the legacy API (like avcodec_decode_video2()) - * on the same AVCodecContext. It will return unexpected results now - * or in future libavcodec versions. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx codec context - * @param[in] avpkt The input AVPacket. Usually, this will be a single video - * frame, or several complete audio frames. - * Ownership of the packet remains with the caller, and the - * decoder will not write to the packet. The decoder may create - * a reference to the packet data (or copy it if the packet is - * not reference-counted). - * Unlike with older APIs, the packet is always fully consumed, - * and if it contains multiple frames (e.g. some audio codecs), - * will require you to call avcodec_receive_frame() multiple - * times afterwards before you can send a new packet. - * It can be NULL (or an AVPacket with data set to NULL and - * size set to 0); in this case, it is considered a flush - * packet, which signals the end of the stream. Sending the - * first flush packet will return success. Subsequent ones are - * unnecessary and will return AVERROR_EOF. If the decoder - * still has frames buffered, it will return them after sending - * a flush packet. - * - * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): input is not accepted in the current state - user - * must read output with avcodec_receive_frame() (once - * all output is read, the packet should be resent, and - * the call will not fail with EAGAIN). - * AVERROR_EOF: the decoder has been flushed, and no new packets can - * be sent to it (also returned if more than 1 flush - * packet is sent) - * AVERROR(EINVAL): codec not opened, it is an encoder, or requires flush - * AVERROR(ENOMEM): failed to add packet to internal queue, or similar - * other errors: legitimate decoding errors - */ -int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); - -/** - * Return decoded output data from a decoder. - * - * @param avctx codec context - * @param frame This will be set to a reference-counted video or audio - * frame (depending on the decoder type) allocated by the - * decoder. Note that the function will always call - * av_frame_unref(frame) before doing anything else. - * - * @return - * 0: success, a frame was returned - * AVERROR(EAGAIN): output is not available in this state - user must try - * to send new input - * AVERROR_EOF: the decoder has been fully flushed, and there will be - * no more output frames - * AVERROR(EINVAL): codec not opened, or it is an encoder - * AVERROR_INPUT_CHANGED: current decoded frame has changed parameters - * with respect to first decoded frame. Applicable - * when flag AV_CODEC_FLAG_DROPCHANGED is set. - * other negative values: legitimate decoding errors - */ -int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); - -/** - * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet() - * to retrieve buffered output packets. - * - * @param avctx codec context - * @param[in] frame AVFrame containing the raw audio or video frame to be encoded. - * Ownership of the frame remains with the caller, and the - * encoder will not write to the frame. The encoder may create - * a reference to the frame data (or copy it if the frame is - * not reference-counted). - * It can be NULL, in which case it is considered a flush - * packet. This signals the end of the stream. If the encoder - * still has packets buffered, it will return them after this - * call. Once flushing mode has been entered, additional flush - * packets are ignored, and sending frames will return - * AVERROR_EOF. - * - * For audio: - * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame - * can have any number of samples. - * If it is not set, frame->nb_samples must be equal to - * avctx->frame_size for all frames except the last. - * The final frame may be smaller than avctx->frame_size. - * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): input is not accepted in the current state - user - * must read output with avcodec_receive_packet() (once - * all output is read, the packet should be resent, and - * the call will not fail with EAGAIN). - * AVERROR_EOF: the encoder has been flushed, and no new frames can - * be sent to it - * AVERROR(EINVAL): codec not opened, refcounted_frames not set, it is a - * decoder, or requires flush - * AVERROR(ENOMEM): failed to add packet to internal queue, or similar - * other errors: legitimate encoding errors - */ -int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame); - -/** - * Read encoded data from the encoder. - * - * @param avctx codec context - * @param avpkt This will be set to a reference-counted packet allocated by the - * encoder. Note that the function will always call - * av_packet_unref(avpkt) before doing anything else. - * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): output is not available in the current state - user - * must try to send input - * AVERROR_EOF: the encoder has been fully flushed, and there will be - * no more output packets - * AVERROR(EINVAL): codec not opened, or it is a decoder - * other errors: legitimate encoding errors - */ -int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt); - -/** - * Create and return a AVHWFramesContext with values adequate for hardware - * decoding. This is meant to get called from the get_format callback, and is - * a helper for preparing a AVHWFramesContext for AVCodecContext.hw_frames_ctx. - * This API is for decoding with certain hardware acceleration modes/APIs only. - * - * The returned AVHWFramesContext is not initialized. The caller must do this - * with av_hwframe_ctx_init(). - * - * Calling this function is not a requirement, but makes it simpler to avoid - * codec or hardware API specific details when manually allocating frames. - * - * Alternatively to this, an API user can set AVCodecContext.hw_device_ctx, - * which sets up AVCodecContext.hw_frames_ctx fully automatically, and makes - * it unnecessary to call this function or having to care about - * AVHWFramesContext initialization at all. - * - * There are a number of requirements for calling this function: - * - * - It must be called from get_format with the same avctx parameter that was - * passed to get_format. Calling it outside of get_format is not allowed, and - * can trigger undefined behavior. - * - The function is not always supported (see description of return values). - * Even if this function returns successfully, hwaccel initialization could - * fail later. (The degree to which implementations check whether the stream - * is actually supported varies. Some do this check only after the user's - * get_format callback returns.) - * - The hw_pix_fmt must be one of the choices suggested by get_format. If the - * user decides to use a AVHWFramesContext prepared with this API function, - * the user must return the same hw_pix_fmt from get_format. - * - The device_ref passed to this function must support the given hw_pix_fmt. - * - After calling this API function, it is the user's responsibility to - * initialize the AVHWFramesContext (returned by the out_frames_ref parameter), - * and to set AVCodecContext.hw_frames_ctx to it. If done, this must be done - * before returning from get_format (this is implied by the normal - * AVCodecContext.hw_frames_ctx API rules). - * - The AVHWFramesContext parameters may change every time time get_format is - * called. Also, AVCodecContext.hw_frames_ctx is reset before get_format. So - * you are inherently required to go through this process again on every - * get_format call. - * - It is perfectly possible to call this function without actually using - * the resulting AVHWFramesContext. One use-case might be trying to reuse a - * previously initialized AVHWFramesContext, and calling this API function - * only to test whether the required frame parameters have changed. - * - Fields that use dynamically allocated values of any kind must not be set - * by the user unless setting them is explicitly allowed by the documentation. - * If the user sets AVHWFramesContext.free and AVHWFramesContext.user_opaque, - * the new free callback must call the potentially set previous free callback. - * This API call may set any dynamically allocated fields, including the free - * callback. - * - * The function will set at least the following fields on AVHWFramesContext - * (potentially more, depending on hwaccel API): - * - * - All fields set by av_hwframe_ctx_alloc(). - * - Set the format field to hw_pix_fmt. - * - Set the sw_format field to the most suited and most versatile format. (An - * implication is that this will prefer generic formats over opaque formats - * with arbitrary restrictions, if possible.) - * - Set the width/height fields to the coded frame size, rounded up to the - * API-specific minimum alignment. - * - Only _if_ the hwaccel requires a pre-allocated pool: set the initial_pool_size - * field to the number of maximum reference surfaces possible with the codec, - * plus 1 surface for the user to work (meaning the user can safely reference - * at most 1 decoded surface at a time), plus additional buffering introduced - * by frame threading. If the hwaccel does not require pre-allocation, the - * field is left to 0, and the decoder will allocate new surfaces on demand - * during decoding. - * - Possibly AVHWFramesContext.hwctx fields, depending on the underlying - * hardware API. - * - * Essentially, out_frames_ref returns the same as av_hwframe_ctx_alloc(), but - * with basic frame parameters set. - * - * The function is stateless, and does not change the AVCodecContext or the - * device_ref AVHWDeviceContext. - * - * @param avctx The context which is currently calling get_format, and which - * implicitly contains all state needed for filling the returned - * AVHWFramesContext properly. - * @param device_ref A reference to the AVHWDeviceContext describing the device - * which will be used by the hardware decoder. - * @param hw_pix_fmt The hwaccel format you are going to return from get_format. - * @param out_frames_ref On success, set to a reference to an _uninitialized_ - * AVHWFramesContext, created from the given device_ref. - * Fields will be set to values required for decoding. - * Not changed if an error is returned. - * @return zero on success, a negative value on error. The following error codes - * have special semantics: - * AVERROR(ENOENT): the decoder does not support this functionality. Setup - * is always manual, or it is a decoder which does not - * support setting AVCodecContext.hw_frames_ctx at all, - * or it is a software format. - * AVERROR(EINVAL): it is known that hardware decoding is not supported for - * this configuration, or the device_ref is not supported - * for the hwaccel referenced by hw_pix_fmt. - */ -int avcodec_get_hw_frames_parameters(AVCodecContext *avctx, - AVBufferRef *device_ref, - enum AVPixelFormat hw_pix_fmt, - AVBufferRef **out_frames_ref); - - - -/** - * @defgroup lavc_parsing Frame parsing - * @{ - */ - -enum AVPictureStructure { - AV_PICTURE_STRUCTURE_UNKNOWN, //< unknown - AV_PICTURE_STRUCTURE_TOP_FIELD, //< coded as top field - AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field - AV_PICTURE_STRUCTURE_FRAME, //< coded as frame -}; - -typedef struct AVCodecParserContext { - void *priv_data; - struct AVCodecParser *parser; - int64_t frame_offset; /* offset of the current frame */ - int64_t cur_offset; /* current offset - (incremented by each av_parser_parse()) */ - int64_t next_frame_offset; /* offset of the next frame */ - /* video info */ - int pict_type; /* XXX: Put it back in AVCodecContext. */ - /** - * This field is used for proper frame duration computation in lavf. - * It signals, how much longer the frame duration of the current frame - * is compared to normal frame duration. - * - * frame_duration = (1 + repeat_pict) * time_base - * - * It is used by codecs like H.264 to display telecined material. - */ - int repeat_pict; /* XXX: Put it back in AVCodecContext. */ - int64_t pts; /* pts of the current frame */ - int64_t dts; /* dts of the current frame */ - - /* private data */ - int64_t last_pts; - int64_t last_dts; - int fetch_timestamp; - -#define AV_PARSER_PTS_NB 4 - int cur_frame_start_index; - int64_t cur_frame_offset[AV_PARSER_PTS_NB]; - int64_t cur_frame_pts[AV_PARSER_PTS_NB]; - int64_t cur_frame_dts[AV_PARSER_PTS_NB]; - - int flags; -#define PARSER_FLAG_COMPLETE_FRAMES 0x0001 -#define PARSER_FLAG_ONCE 0x0002 -/// Set if the parser has a valid file offset -#define PARSER_FLAG_FETCHED_OFFSET 0x0004 -#define PARSER_FLAG_USE_CODEC_TS 0x1000 - - int64_t offset; ///< byte offset from starting packet start - int64_t cur_frame_end[AV_PARSER_PTS_NB]; - - /** - * Set by parser to 1 for key frames and 0 for non-key frames. - * It is initialized to -1, so if the parser doesn't set this flag, - * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames - * will be used. - */ - int key_frame; - -#if FF_API_CONVERGENCE_DURATION - /** - * @deprecated unused - */ - attribute_deprecated - int64_t convergence_duration; -#endif - - // Timestamp generation support: - /** - * Synchronization point for start of timestamp generation. - * - * Set to >0 for sync point, 0 for no sync point and <0 for undefined - * (default). - * - * For example, this corresponds to presence of H.264 buffering period - * SEI message. - */ - int dts_sync_point; - - /** - * Offset of the current timestamp against last timestamp sync point in - * units of AVCodecContext.time_base. - * - * Set to INT_MIN when dts_sync_point unused. Otherwise, it must - * contain a valid timestamp offset. - * - * Note that the timestamp of sync point has usually a nonzero - * dts_ref_dts_delta, which refers to the previous sync point. Offset of - * the next frame after timestamp sync point will be usually 1. - * - * For example, this corresponds to H.264 cpb_removal_delay. - */ - int dts_ref_dts_delta; - - /** - * Presentation delay of current frame in units of AVCodecContext.time_base. - * - * Set to INT_MIN when dts_sync_point unused. Otherwise, it must - * contain valid non-negative timestamp delta (presentation time of a frame - * must not lie in the past). - * - * This delay represents the difference between decoding and presentation - * time of the frame. - * - * For example, this corresponds to H.264 dpb_output_delay. - */ - int pts_dts_delta; - - /** - * Position of the packet in file. - * - * Analogous to cur_frame_pts/dts - */ - int64_t cur_frame_pos[AV_PARSER_PTS_NB]; - - /** - * Byte position of currently parsed frame in stream. - */ - int64_t pos; - - /** - * Previous frame byte position. - */ - int64_t last_pos; - - /** - * Duration of the current frame. - * For audio, this is in units of 1 / AVCodecContext.sample_rate. - * For all other types, this is in units of AVCodecContext.time_base. - */ - int duration; - - enum AVFieldOrder field_order; - - /** - * Indicate whether a picture is coded as a frame, top field or bottom field. - * - * For example, H.264 field_pic_flag equal to 0 corresponds to - * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag - * equal to 1 and bottom_field_flag equal to 0 corresponds to - * AV_PICTURE_STRUCTURE_TOP_FIELD. - */ - enum AVPictureStructure picture_structure; - - /** - * Picture number incremented in presentation or output order. - * This field may be reinitialized at the first picture of a new sequence. - * - * For example, this corresponds to H.264 PicOrderCnt. - */ - int output_picture_number; - - /** - * Dimensions of the decoded video intended for presentation. - */ - int width; - int height; - - /** - * Dimensions of the coded video. - */ - int coded_width; - int coded_height; - - /** - * The format of the coded data, corresponds to enum AVPixelFormat for video - * and for enum AVSampleFormat for audio. - * - * Note that a decoder can have considerable freedom in how exactly it - * decodes the data, so the format reported here might be different from the - * one returned by a decoder. - */ - int format; -} AVCodecParserContext; - -typedef struct AVCodecParser { - int codec_ids[5]; /* several codec IDs are permitted */ - int priv_data_size; - int (*parser_init)(AVCodecParserContext *s); - /* This callback never returns an error, a negative value means that - * the frame start was in a previous packet. */ - int (*parser_parse)(AVCodecParserContext *s, - AVCodecContext *avctx, - const uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size); - void (*parser_close)(AVCodecParserContext *s); - int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size); -#if FF_API_NEXT - attribute_deprecated - struct AVCodecParser *next; -#endif -} AVCodecParser; - -/** - * Iterate over all registered codec parsers. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered codec parser or NULL when the iteration is - * finished - */ -const AVCodecParser *av_parser_iterate(void **opaque); - -#if FF_API_NEXT -attribute_deprecated -AVCodecParser *av_parser_next(const AVCodecParser *c); - -attribute_deprecated -void av_register_codec_parser(AVCodecParser *parser); -#endif -AVCodecParserContext *av_parser_init(int codec_id); - -/** - * Parse a packet. - * - * @param s parser context. - * @param avctx codec context. - * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. - * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. - * @param buf input buffer. - * @param buf_size buffer size in bytes without the padding. I.e. the full buffer - size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE. - To signal EOF, this should be 0 (so that the last frame - can be output). - * @param pts input presentation timestamp. - * @param dts input decoding timestamp. - * @param pos input byte position in stream. - * @return the number of bytes of the input bitstream used. - * - * Example: - * @code - * while(in_len){ - * len = av_parser_parse2(myparser, AVCodecContext, &data, &size, - * in_data, in_len, - * pts, dts, pos); - * in_data += len; - * in_len -= len; - * - * if(size) - * decode_frame(data, size); - * } - * @endcode - */ -int av_parser_parse2(AVCodecParserContext *s, - AVCodecContext *avctx, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, - int64_t pts, int64_t dts, - int64_t pos); - -#if FF_API_PARSER_CHANGE -/** - * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed - * @deprecated Use dump_extradata, remove_extra or extract_extradata - * bitstream filters instead. - */ -attribute_deprecated -int av_parser_change(AVCodecParserContext *s, - AVCodecContext *avctx, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, int keyframe); -#endif -void av_parser_close(AVCodecParserContext *s); - -/** - * @} - * @} - */ - -/** - * @addtogroup lavc_encoding - * @{ - */ - -#if FF_API_OLD_ENCDEC -/** - * Encode a frame of audio. - * - * Takes input samples from frame and writes the next output packet, if - * available, to avpkt. The output packet does not necessarily contain data for - * the most recent frame, as encoders can delay, split, and combine input frames - * internally as needed. - * - * @param avctx codec context - * @param avpkt output AVPacket. - * The user can supply an output buffer by setting - * avpkt->data and avpkt->size prior to calling the - * function, but if the size of the user-provided data is not - * large enough, encoding will fail. If avpkt->data and - * avpkt->size are set, avpkt->destruct must also be set. All - * other AVPacket fields will be reset by the encoder using - * av_init_packet(). If avpkt->data is NULL, the encoder will - * allocate it. The encoder will set avpkt->size to the size - * of the output packet. - * - * If this function fails or produces no output, avpkt will be - * freed using av_packet_unref(). - * @param[in] frame AVFrame containing the raw audio data to be encoded. - * May be NULL when flushing an encoder that has the - * AV_CODEC_CAP_DELAY capability set. - * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame - * can have any number of samples. - * If it is not set, frame->nb_samples must be equal to - * avctx->frame_size for all frames except the last. - * The final frame may be smaller than avctx->frame_size. - * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the - * output packet is non-empty, and to 0 if it is - * empty. If the function returns an error, the - * packet can be assumed to be invalid, and the - * value of got_packet_ptr is undefined and should - * not be used. - * @return 0 on success, negative error code on failure - * - * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. - * If allowed and required, set AVCodecContext.get_encode_buffer to - * a custom function to pass user supplied output buffers. - */ -attribute_deprecated -int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, - const AVFrame *frame, int *got_packet_ptr); - -/** - * Encode a frame of video. - * - * Takes input raw video data from frame and writes the next output packet, if - * available, to avpkt. The output packet does not necessarily contain data for - * the most recent frame, as encoders can delay and reorder input frames - * internally as needed. - * - * @param avctx codec context - * @param avpkt output AVPacket. - * The user can supply an output buffer by setting - * avpkt->data and avpkt->size prior to calling the - * function, but if the size of the user-provided data is not - * large enough, encoding will fail. All other AVPacket fields - * will be reset by the encoder using av_init_packet(). If - * avpkt->data is NULL, the encoder will allocate it. - * The encoder will set avpkt->size to the size of the - * output packet. The returned data (if any) belongs to the - * caller, he is responsible for freeing it. - * - * If this function fails or produces no output, avpkt will be - * freed using av_packet_unref(). - * @param[in] frame AVFrame containing the raw video data to be encoded. - * May be NULL when flushing an encoder that has the - * AV_CODEC_CAP_DELAY capability set. - * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the - * output packet is non-empty, and to 0 if it is - * empty. If the function returns an error, the - * packet can be assumed to be invalid, and the - * value of got_packet_ptr is undefined and should - * not be used. - * @return 0 on success, negative error code on failure - * - * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. - * If allowed and required, set AVCodecContext.get_encode_buffer to - * a custom function to pass user supplied output buffers. - */ -attribute_deprecated -int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, - const AVFrame *frame, int *got_packet_ptr); -#endif - -int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, - const AVSubtitle *sub); - - -/** - * @} - */ - -#if FF_API_AVPICTURE -/** - * @addtogroup lavc_picture - * @{ - */ - -/** - * @deprecated unused - */ -attribute_deprecated -int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated unused - */ -attribute_deprecated -void avpicture_free(AVPicture *picture); - -/** - * @deprecated use av_image_fill_arrays() instead. - */ -attribute_deprecated -int avpicture_fill(AVPicture *picture, const uint8_t *ptr, - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated use av_image_copy_to_buffer() instead. - */ -attribute_deprecated -int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt, - int width, int height, - unsigned char *dest, int dest_size); - -/** - * @deprecated use av_image_get_buffer_size() instead. - */ -attribute_deprecated -int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated av_image_copy() instead. - */ -attribute_deprecated -void av_picture_copy(AVPicture *dst, const AVPicture *src, - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated unused - */ -attribute_deprecated -int av_picture_crop(AVPicture *dst, const AVPicture *src, - enum AVPixelFormat pix_fmt, int top_band, int left_band); - -/** - * @deprecated unused - */ -attribute_deprecated -int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt, - int padtop, int padbottom, int padleft, int padright, int *color); - -/** - * @} - */ -#endif - -/** - * @defgroup lavc_misc Utility functions - * @ingroup libavc - * - * Miscellaneous utility functions related to both encoding and decoding - * (or neither). - * @{ - */ - -/** - * @defgroup lavc_misc_pixfmt Pixel formats - * - * Functions for working with pixel formats. - * @{ - */ - -#if FF_API_GETCHROMA -/** - * @deprecated Use av_pix_fmt_get_chroma_sub_sample - */ - -attribute_deprecated -void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift); -#endif - -/** - * Return a value representing the fourCC code associated to the - * pixel format pix_fmt, or 0 if no associated fourCC code can be - * found. - */ -unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt); - -/** - * Find the best pixel format to convert to given a certain source pixel - * format. When converting from one pixel format to another, information loss - * may occur. For example, when converting from RGB24 to GRAY, the color - * information will be lost. Similarly, other losses occur when converting from - * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of - * the given pixel formats should be used to suffer the least amount of loss. - * The pixel formats from which it chooses one, are determined by the - * pix_fmt_list parameter. - * - * - * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. - * @return The best pixel format to convert to or -1 if none was found. - */ -enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list, - enum AVPixelFormat src_pix_fmt, - int has_alpha, int *loss_ptr); - -#if FF_API_AVCODEC_PIX_FMT -/** - * @deprecated see av_get_pix_fmt_loss() - */ -attribute_deprecated -int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, - int has_alpha); -/** - * @deprecated see av_find_best_pix_fmt_of_2() - */ -attribute_deprecated -enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); - -attribute_deprecated -enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); -#endif - -enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - -/** - * @} - */ - -#if FF_API_TAG_STRING -/** - * Put a string representing the codec tag codec_tag in buf. - * - * @param buf buffer to place codec tag in - * @param buf_size size in bytes of buf - * @param codec_tag codec tag to assign - * @return the length of the string that would have been generated if - * enough space had been available, excluding the trailing null - * - * @deprecated see av_fourcc_make_string() and av_fourcc2str(). - */ -attribute_deprecated -size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag); -#endif - -void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); - -/** - * Return a name for the specified profile, if available. - * - * @param codec the codec that is searched for the given profile - * @param profile the profile value for which a name is requested - * @return A name for the profile if found, NULL otherwise. - */ -const char *av_get_profile_name(const AVCodec *codec, int profile); - -/** - * Return a name for the specified profile, if available. - * - * @param codec_id the ID of the codec to which the requested profile belongs - * @param profile the profile value for which a name is requested - * @return A name for the profile if found, NULL otherwise. - * - * @note unlike av_get_profile_name(), which searches a list of profiles - * supported by a specific decoder or encoder implementation, this - * function searches the list of profiles from the AVCodecDescriptor - */ -const char *avcodec_profile_name(enum AVCodecID codec_id, int profile); - -int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); -int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); -//FIXME func typedef - -/** - * Fill AVFrame audio data and linesize pointers. - * - * The buffer buf must be a preallocated buffer with a size big enough - * to contain the specified samples amount. The filled AVFrame data - * pointers will point to this buffer. - * - * AVFrame extended_data channel pointers are allocated if necessary for - * planar audio. - * - * @param frame the AVFrame - * frame->nb_samples must be set prior to calling the - * function. This function fills in frame->data, - * frame->extended_data, frame->linesize[0]. - * @param nb_channels channel count - * @param sample_fmt sample format - * @param buf buffer to use for frame data - * @param buf_size size of buffer - * @param align plane size sample alignment (0 = default) - * @return >=0 on success, negative error code on failure - * @todo return the size in bytes required to store the samples in - * case of success, at the next libavutil bump - */ -int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, - enum AVSampleFormat sample_fmt, const uint8_t *buf, - int buf_size, int align); - -/** - * Reset the internal codec state / flush internal buffers. Should be called - * e.g. when seeking or when switching to a different stream. - * - * @note for decoders, when refcounted frames are not used - * (i.e. avctx->refcounted_frames is 0), this invalidates the frames previously - * returned from the decoder. When refcounted frames are used, the decoder just - * releases any references it might keep internally, but the caller's reference - * remains valid. - * - * @note for encoders, this function will only do something if the encoder - * declares support for AV_CODEC_CAP_ENCODER_FLUSH. When called, the encoder - * will drain any remaining packets, and can then be re-used for a different - * stream (as opposed to sending a null frame which will leave the encoder - * in a permanent EOF state after draining). This can be desirable if the - * cost of tearing down and replacing the encoder instance is high. - */ -void avcodec_flush_buffers(AVCodecContext *avctx); - -/** - * Return codec bits per sample. - * - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ -int av_get_bits_per_sample(enum AVCodecID codec_id); - -/** - * Return the PCM codec associated with a sample format. - * @param be endianness, 0 for little, 1 for big, - * -1 (or anything else) for native - * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE - */ -enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be); - -/** - * Return codec bits per sample. - * Only return non-zero if the bits per sample is exactly correct, not an - * approximation. - * - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ -int av_get_exact_bits_per_sample(enum AVCodecID codec_id); - -/** - * Return audio frame duration. - * - * @param avctx codec context - * @param frame_bytes size of the frame, or 0 if unknown - * @return frame duration, in samples, if known. 0 if not able to - * determine. - */ -int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); - -/** - * This function is the same as av_get_audio_frame_duration(), except it works - * with AVCodecParameters instead of an AVCodecContext. - */ -int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes); - -#if FF_API_OLD_BSF -typedef struct AVBitStreamFilterContext { - void *priv_data; - const struct AVBitStreamFilter *filter; - AVCodecParserContext *parser; - struct AVBitStreamFilterContext *next; - /** - * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter(). - * Not for access by library users. - */ - char *args; -} AVBitStreamFilterContext; - -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use the new bitstream filtering API (using AVBSFContext). - */ -attribute_deprecated -void av_register_bitstream_filter(AVBitStreamFilter *bsf); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_get_by_name(), av_bsf_alloc(), and av_bsf_init() - * from the new bitstream filtering API (using AVBSFContext). - */ -attribute_deprecated -AVBitStreamFilterContext *av_bitstream_filter_init(const char *name); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_send_packet() and av_bsf_receive_packet() from the - * new bitstream filtering API (using AVBSFContext). - */ -attribute_deprecated -int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, - AVCodecContext *avctx, const char *args, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, int keyframe); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_free() from the new bitstream filtering API (using - * AVBSFContext). - */ -attribute_deprecated -void av_bitstream_filter_close(AVBitStreamFilterContext *bsf); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_iterate() from the new bitstream filtering API (using - * AVBSFContext). - */ -attribute_deprecated -const AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f); -#endif - -#if FF_API_NEXT -attribute_deprecated -const AVBitStreamFilter *av_bsf_next(void **opaque); -#endif - -/* memory */ - -/** - * Same behaviour av_fast_malloc but the buffer has additional - * AV_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0. - * - * In addition the whole buffer will initially and after resizes - * be 0-initialized so that no uninitialized data will ever appear. - */ -void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Same behaviour av_fast_padded_malloc except that buffer will always - * be 0-initialized after call. - */ -void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); - -/** - * Encode extradata length to a buffer. Used by xiph codecs. - * - * @param s buffer to write to; must be at least (v/255+1) bytes long - * @param v size of extradata in bytes - * @return number of bytes written to the buffer. - */ -unsigned int av_xiphlacing(unsigned char *s, unsigned int v); - -#if FF_API_USER_VISIBLE_AVHWACCEL -/** - * Register the hardware accelerator hwaccel. - * - * @deprecated This function doesn't do anything. - */ -attribute_deprecated -void av_register_hwaccel(AVHWAccel *hwaccel); - -/** - * If hwaccel is NULL, returns the first registered hardware accelerator, - * if hwaccel is non-NULL, returns the next registered hardware accelerator - * after hwaccel, or NULL if hwaccel is the last one. - * - * @deprecated AVHWaccel structures contain no user-serviceable parts, so - * this function should not be used. - */ -attribute_deprecated -AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel); -#endif - -#if FF_API_LOCKMGR -/** - * Lock operation used by lockmgr - * - * @deprecated Deprecated together with av_lockmgr_register(). - */ -enum AVLockOp { - AV_LOCK_CREATE, ///< Create a mutex - AV_LOCK_OBTAIN, ///< Lock the mutex - AV_LOCK_RELEASE, ///< Unlock the mutex - AV_LOCK_DESTROY, ///< Free mutex resources -}; - -/** - * Register a user provided lock manager supporting the operations - * specified by AVLockOp. The "mutex" argument to the function points - * to a (void *) where the lockmgr should store/get a pointer to a user - * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the - * value left by the last call for all other ops. If the lock manager is - * unable to perform the op then it should leave the mutex in the same - * state as when it was called and return a non-zero value. However, - * when called with AV_LOCK_DESTROY the mutex will always be assumed to - * have been successfully destroyed. If av_lockmgr_register succeeds - * it will return a non-negative value, if it fails it will return a - * negative value and destroy all mutex and unregister all callbacks. - * av_lockmgr_register is not thread-safe, it must be called from a - * single thread before any calls which make use of locking are used. - * - * @param cb User defined callback. av_lockmgr_register invokes calls - * to this callback and the previously registered callback. - * The callback will be used to create more than one mutex - * each of which must be backed by its own underlying locking - * mechanism (i.e. do not use a single static object to - * implement your lock manager). If cb is set to NULL the - * lockmgr will be unregistered. - * - * @deprecated This function does nothing, and always returns 0. Be sure to - * build with thread support to get basic thread safety. - */ -attribute_deprecated -int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)); -#endif - -/** - * @return a positive value if s is open (i.e. avcodec_open2() was called on it - * with no corresponding avcodec_close()), 0 otherwise. - */ -int avcodec_is_open(AVCodecContext *s); - -/** - * Allocate a CPB properties structure and initialize its fields to default - * values. - * - * @param size if non-NULL, the size of the allocated struct will be written - * here. This is useful for embedding it in side data. - * - * @return the newly allocated struct or NULL on failure - */ -AVCPBProperties *av_cpb_properties_alloc(size_t *size); - -/** - * @} - */ - -#endif /* AVCODEC_AVCODEC_H */ diff --git a/prebuilts/aarch64/include/libavcodec/avdct.h b/prebuilts/aarch64/include/libavcodec/avdct.h deleted file mode 100644 index 6411fab..0000000 --- a/prebuilts/aarch64/include/libavcodec/avdct.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVDCT_H -#define AVCODEC_AVDCT_H - -#include "libavutil/opt.h" - -/** - * AVDCT context. - * @note function pointers can be NULL if the specific features have been - * disabled at build time. - */ -typedef struct AVDCT { - const AVClass *av_class; - - void (*idct)(int16_t *block /* align 16 */); - - /** - * IDCT input permutation. - * Several optimized IDCTs need a permutated input (relative to the - * normal order of the reference IDCT). - * This permutation must be performed before the idct_put/add. - * Note, normally this can be merged with the zigzag/alternate scan
- * An example to avoid confusion: - * - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...) - * - (x -> reference DCT -> reference IDCT -> x) - * - (x -> reference DCT -> simple_mmx_perm = idct_permutation - * -> simple_idct_mmx -> x) - * - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant - * -> simple_idct_mmx -> ...) - */ - uint8_t idct_permutation[64]; - - void (*fdct)(int16_t *block /* align 16 */); - - - /** - * DCT algorithm. - * must use AVOptions to set this field. - */ - int dct_algo; - - /** - * IDCT algorithm. - * must use AVOptions to set this field. - */ - int idct_algo; - - void (*get_pixels)(int16_t *block /* align 16 */, - const uint8_t *pixels /* align 8 */, - ptrdiff_t line_size); - - int bits_per_sample; - - void (*get_pixels_unaligned)(int16_t *block /* align 16 */, - const uint8_t *pixels, - ptrdiff_t line_size); -} AVDCT; - -/** - * Allocates a AVDCT context. - * This needs to be initialized with avcodec_dct_init() after optionally - * configuring it with AVOptions. - * - * To free it use av_free() - */ -AVDCT *avcodec_dct_alloc(void); -int avcodec_dct_init(AVDCT *); - -const AVClass *avcodec_dct_get_class(void); - -#endif /* AVCODEC_AVDCT_H */ diff --git a/prebuilts/aarch64/include/libavcodec/avfft.h b/prebuilts/aarch64/include/libavcodec/avfft.h deleted file mode 100644 index 0c0f9b8..0000000 --- a/prebuilts/aarch64/include/libavcodec/avfft.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVFFT_H -#define AVCODEC_AVFFT_H - -/** - * @file - * @ingroup lavc_fft - * FFT functions - */ - -/** - * @defgroup lavc_fft FFT functions - * @ingroup lavc_misc - * - * @{ - */ - -typedef float FFTSample; - -typedef struct FFTComplex { - FFTSample re, im; -} FFTComplex; - -typedef struct FFTContext FFTContext; - -/** - * Set up a complex FFT. - * @param nbits log2 of the length of the input array - * @param inverse if 0 perform the forward transform, if 1 perform the inverse - */ -FFTContext *av_fft_init(int nbits, int inverse); - -/** - * Do the permutation needed BEFORE calling ff_fft_calc(). - */ -void av_fft_permute(FFTContext *s, FFTComplex *z); - -/** - * Do a complex FFT with the parameters defined in av_fft_init(). The - * input data must be permuted before. No 1.0/sqrt(n) normalization is done. - */ -void av_fft_calc(FFTContext *s, FFTComplex *z); - -void av_fft_end(FFTContext *s); - -FFTContext *av_mdct_init(int nbits, int inverse, double scale); -void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_mdct_end(FFTContext *s); - -/* Real Discrete Fourier Transform */ - -enum RDFTransformType { - DFT_R2C, - IDFT_C2R, - IDFT_R2C, - DFT_C2R, -}; - -typedef struct RDFTContext RDFTContext; - -/** - * Set up a real FFT. - * @param nbits log2 of the length of the input array - * @param trans the type of transform - */ -RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans); -void av_rdft_calc(RDFTContext *s, FFTSample *data); -void av_rdft_end(RDFTContext *s); - -/* Discrete Cosine Transform */ - -typedef struct DCTContext DCTContext; - -enum DCTTransformType { - DCT_II = 0, - DCT_III, - DCT_I, - DST_I, -}; - -/** - * Set up DCT. - * - * @param nbits size of the input array: - * (1 << nbits) for DCT-II, DCT-III and DST-I - * (1 << nbits) + 1 for DCT-I - * @param type the type of transform - * - * @note the first element of the input of DST-I is ignored - */ -DCTContext *av_dct_init(int nbits, enum DCTTransformType type); -void av_dct_calc(DCTContext *s, FFTSample *data); -void av_dct_end (DCTContext *s); - -/** - * @} - */ - -#endif /* AVCODEC_AVFFT_H */ diff --git a/prebuilts/aarch64/include/libavcodec/bsf.h b/prebuilts/aarch64/include/libavcodec/bsf.h deleted file mode 100644 index 3b5faa8..0000000 --- a/prebuilts/aarch64/include/libavcodec/bsf.h +++ /dev/null @@ -1,325 +0,0 @@ -/* - * Bitstream filters public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_BSF_H -#define AVCODEC_BSF_H - -#include "libavutil/dict.h" -#include "libavutil/log.h" -#include "libavutil/rational.h" - -#include "codec_id.h" -#include "codec_par.h" -#include "packet.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -typedef struct AVBSFInternal AVBSFInternal; - -/** - * The bitstream filter state. - * - * This struct must be allocated with av_bsf_alloc() and freed with - * av_bsf_free(). - * - * The fields in the struct will only be changed (by the caller or by the - * filter) as described in their documentation, and are to be considered - * immutable otherwise. - */ -typedef struct AVBSFContext { - /** - * A class for logging and AVOptions - */ - const AVClass *av_class; - - /** - * The bitstream filter this context is an instance of. - */ - const struct AVBitStreamFilter *filter; - - /** - * Opaque libavcodec internal data. Must not be touched by the caller in any - * way. - */ - AVBSFInternal *internal; - - /** - * Opaque filter-specific private data. If filter->priv_class is non-NULL, - * this is an AVOptions-enabled struct. - */ - void *priv_data; - - /** - * Parameters of the input stream. This field is allocated in - * av_bsf_alloc(), it needs to be filled by the caller before - * av_bsf_init(). - */ - AVCodecParameters *par_in; - - /** - * Parameters of the output stream. This field is allocated in - * av_bsf_alloc(), it is set by the filter in av_bsf_init(). - */ - AVCodecParameters *par_out; - - /** - * The timebase used for the timestamps of the input packets. Set by the - * caller before av_bsf_init(). - */ - AVRational time_base_in; - - /** - * The timebase used for the timestamps of the output packets. Set by the - * filter in av_bsf_init(). - */ - AVRational time_base_out; -} AVBSFContext; - -typedef struct AVBitStreamFilter { - const char *name; - - /** - * A list of codec ids supported by the filter, terminated by - * AV_CODEC_ID_NONE. - * May be NULL, in that case the bitstream filter works with any codec id. - */ - const enum AVCodecID *codec_ids; - - /** - * A class for the private data, used to declare bitstream filter private - * AVOptions. This field is NULL for bitstream filters that do not declare - * any options. - * - * If this field is non-NULL, the first member of the filter private data - * must be a pointer to AVClass, which will be set by libavcodec generic - * code to this class. - */ - const AVClass *priv_class; - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavcodec and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - int priv_data_size; - int (*init)(AVBSFContext *ctx); - int (*filter)(AVBSFContext *ctx, AVPacket *pkt); - void (*close)(AVBSFContext *ctx); - void (*flush)(AVBSFContext *ctx); -} AVBitStreamFilter; - -/** - * @return a bitstream filter with the specified name or NULL if no such - * bitstream filter exists. - */ -const AVBitStreamFilter *av_bsf_get_by_name(const char *name); - -/** - * Iterate over all registered bitstream filters. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered bitstream filter or NULL when the iteration is - * finished - */ -const AVBitStreamFilter *av_bsf_iterate(void **opaque); - -/** - * Allocate a context for a given bitstream filter. The caller must fill in the - * context parameters as described in the documentation and then call - * av_bsf_init() before sending any data to the filter. - * - * @param filter the filter for which to allocate an instance. - * @param ctx a pointer into which the pointer to the newly-allocated context - * will be written. It must be freed with av_bsf_free() after the - * filtering is done. - * - * @return 0 on success, a negative AVERROR code on failure - */ -int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx); - -/** - * Prepare the filter for use, after all the parameters and options have been - * set. - */ -int av_bsf_init(AVBSFContext *ctx); - -/** - * Submit a packet for filtering. - * - * After sending each packet, the filter must be completely drained by calling - * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or - * AVERROR_EOF. - * - * @param pkt the packet to filter. The bitstream filter will take ownership of - * the packet and reset the contents of pkt. pkt is not touched if an error occurs. - * If pkt is empty (i.e. NULL, or pkt->data is NULL and pkt->side_data_elems zero), - * it signals the end of the stream (i.e. no more non-empty packets will be sent; - * sending more empty packets does nothing) and will cause the filter to output - * any packets it may have buffered internally. - * - * @return 0 on success. AVERROR(EAGAIN) if packets need to be retrieved from the - * filter (using av_bsf_receive_packet()) before new input can be consumed. Another - * negative AVERROR value if an error occurs. - */ -int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt); - -/** - * Retrieve a filtered packet. - * - * @param[out] pkt this struct will be filled with the contents of the filtered - * packet. It is owned by the caller and must be freed using - * av_packet_unref() when it is no longer needed. - * This parameter should be "clean" (i.e. freshly allocated - * with av_packet_alloc() or unreffed with av_packet_unref()) - * when this function is called. If this function returns - * successfully, the contents of pkt will be completely - * overwritten by the returned data. On failure, pkt is not - * touched. - * - * @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the - * filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there - * will be no further output from the filter. Another negative AVERROR value if - * an error occurs. - * - * @note one input packet may result in several output packets, so after sending - * a packet with av_bsf_send_packet(), this function needs to be called - * repeatedly until it stops returning 0. It is also possible for a filter to - * output fewer packets than were sent to it, so this function may return - * AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call. - */ -int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt); - -/** - * Reset the internal bitstream filter state. Should be called e.g. when seeking. - */ -void av_bsf_flush(AVBSFContext *ctx); - -/** - * Free a bitstream filter context and everything associated with it; write NULL - * into the supplied pointer. - */ -void av_bsf_free(AVBSFContext **ctx); - -/** - * Get the AVClass for AVBSFContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *av_bsf_get_class(void); - -/** - * Structure for chain/list of bitstream filters. - * Empty list can be allocated by av_bsf_list_alloc(). - */ -typedef struct AVBSFList AVBSFList; - -/** - * Allocate empty list of bitstream filters. - * The list must be later freed by av_bsf_list_free() - * or finalized by av_bsf_list_finalize(). - * - * @return Pointer to @ref AVBSFList on success, NULL in case of failure - */ -AVBSFList *av_bsf_list_alloc(void); - -/** - * Free list of bitstream filters. - * - * @param lst Pointer to pointer returned by av_bsf_list_alloc() - */ -void av_bsf_list_free(AVBSFList **lst); - -/** - * Append bitstream filter to the list of bitstream filters. - * - * @param lst List to append to - * @param bsf Filter context to be appended - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_append(AVBSFList *lst, AVBSFContext *bsf); - -/** - * Construct new bitstream filter context given it's name and options - * and append it to the list of bitstream filters. - * - * @param lst List to append to - * @param bsf_name Name of the bitstream filter - * @param options Options for the bitstream filter, can be set to NULL - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_append2(AVBSFList *lst, const char * bsf_name, AVDictionary **options); -/** - * Finalize list of bitstream filters. - * - * This function will transform @ref AVBSFList to single @ref AVBSFContext, - * so the whole chain of bitstream filters can be treated as single filter - * freshly allocated by av_bsf_alloc(). - * If the call is successful, @ref AVBSFList structure is freed and lst - * will be set to NULL. In case of failure, caller is responsible for - * freeing the structure by av_bsf_list_free() - * - * @param lst Filter list structure to be transformed - * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure - * representing the chain of bitstream filters - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf); - -/** - * Parse string describing list of bitstream filters and create single - * @ref AVBSFContext describing the whole chain of bitstream filters. - * Resulting @ref AVBSFContext can be treated as any other @ref AVBSFContext freshly - * allocated by av_bsf_alloc(). - * - * @param str String describing chain of bitstream filters in format - * `bsf1[=opt1=val1:opt2=val2][,bsf2]` - * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure - * representing the chain of bitstream filters - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf); - -/** - * Get null/pass-through bitstream filter. - * - * @param[out] bsf Pointer to be set to new instance of pass-through bitstream filter - * - * @return - */ -int av_bsf_get_null_filter(AVBSFContext **bsf); - -/** - * @} - */ - -#endif // AVCODEC_BSF_H diff --git a/prebuilts/aarch64/include/libavcodec/codec.h b/prebuilts/aarch64/include/libavcodec/codec.h deleted file mode 100644 index 50a22f6..0000000 --- a/prebuilts/aarch64/include/libavcodec/codec.h +++ /dev/null @@ -1,480 +0,0 @@ -/* - * AVCodec public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_H -#define AVCODEC_CODEC_H - -#include - -#include "libavutil/avutil.h" -#include "libavutil/hwcontext.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" -#include "libavutil/samplefmt.h" - -#include "libavcodec/codec_id.h" -#include "libavcodec/version.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * Decoder can use draw_horiz_band callback. - */ -#define AV_CODEC_CAP_DRAW_HORIZ_BAND (1 << 0) -/** - * Codec uses get_buffer() or get_encode_buffer() for allocating buffers and - * supports custom allocators. - * If not set, it might not use get_buffer() or get_encode_buffer() at all, or - * use operations that assume the buffer was allocated by - * avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer. - */ -#define AV_CODEC_CAP_DR1 (1 << 1) -#define AV_CODEC_CAP_TRUNCATED (1 << 3) -/** - * Encoder or decoder requires flushing with NULL input at the end in order to - * give the complete and correct output. - * - * NOTE: If this flag is not set, the codec is guaranteed to never be fed with - * with NULL data. The user can still send NULL data to the public encode - * or decode function, but libavcodec will not pass it along to the codec - * unless this flag is set. - * - * Decoders: - * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, - * avpkt->size=0 at the end to get the delayed data until the decoder no longer - * returns frames. - * - * Encoders: - * The encoder needs to be fed with NULL data at the end of encoding until the - * encoder no longer returns data. - * - * NOTE: For encoders implementing the AVCodec.encode2() function, setting this - * flag also means that the encoder must set the pts and duration for - * each output packet. If this flag is not set, the pts and duration will - * be determined by libavcodec from the input frame. - */ -#define AV_CODEC_CAP_DELAY (1 << 5) -/** - * Codec can be fed a final frame with a smaller size. - * This can be used to prevent truncation of the last audio samples. - */ -#define AV_CODEC_CAP_SMALL_LAST_FRAME (1 << 6) - -/** - * Codec can output multiple frames per AVPacket - * Normally demuxers return one frame at a time, demuxers which do not do - * are connected to a parser to split what they return into proper frames. - * This flag is reserved to the very rare category of codecs which have a - * bitstream that cannot be split into frames without timeconsuming - * operations like full decoding. Demuxers carrying such bitstreams thus - * may return multiple frames in a packet. This has many disadvantages like - * prohibiting stream copy in many cases thus it should only be considered - * as a last resort. - */ -#define AV_CODEC_CAP_SUBFRAMES (1 << 8) -/** - * Codec is experimental and is thus avoided in favor of non experimental - * encoders - */ -#define AV_CODEC_CAP_EXPERIMENTAL (1 << 9) -/** - * Codec should fill in channel configuration and samplerate instead of container - */ -#define AV_CODEC_CAP_CHANNEL_CONF (1 << 10) -/** - * Codec supports frame-level multithreading. - */ -#define AV_CODEC_CAP_FRAME_THREADS (1 << 12) -/** - * Codec supports slice-based (or partition-based) multithreading. - */ -#define AV_CODEC_CAP_SLICE_THREADS (1 << 13) -/** - * Codec supports changed parameters at any point. - */ -#define AV_CODEC_CAP_PARAM_CHANGE (1 << 14) -/** - * Codec supports multithreading through a method other than slice- or - * frame-level multithreading. Typically this marks wrappers around - * multithreading-capable external libraries. - */ -#define AV_CODEC_CAP_OTHER_THREADS (1 << 15) -#if FF_API_AUTO_THREADS -#define AV_CODEC_CAP_AUTO_THREADS AV_CODEC_CAP_OTHER_THREADS -#endif -/** - * Audio encoder supports receiving a different number of samples in each call. - */ -#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16) -/** - * Decoder is not a preferred choice for probing. - * This indicates that the decoder is not a good choice for probing. - * It could for example be an expensive to spin up hardware decoder, - * or it could simply not provide a lot of useful information about - * the stream. - * A decoder marked with this flag should only be used as last resort - * choice for probing. - */ -#define AV_CODEC_CAP_AVOID_PROBING (1 << 17) - -#if FF_API_UNUSED_CODEC_CAPS -/** - * Deprecated and unused. Use AVCodecDescriptor.props instead - */ -#define AV_CODEC_CAP_INTRA_ONLY 0x40000000 -/** - * Deprecated and unused. Use AVCodecDescriptor.props instead - */ -#define AV_CODEC_CAP_LOSSLESS 0x80000000 -#endif - -/** - * Codec is backed by a hardware implementation. Typically used to - * identify a non-hwaccel hardware decoder. For information about hwaccels, use - * avcodec_get_hw_config() instead. - */ -#define AV_CODEC_CAP_HARDWARE (1 << 18) - -/** - * Codec is potentially backed by a hardware implementation, but not - * necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the - * implementation provides some sort of internal fallback. - */ -#define AV_CODEC_CAP_HYBRID (1 << 19) - -/** - * This codec takes the reordered_opaque field from input AVFrames - * and returns it in the corresponding field in AVCodecContext after - * encoding. - */ -#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20) - -/** - * This encoder can be flushed using avcodec_flush_buffers(). If this flag is - * not set, the encoder must be closed and reopened to ensure that no frames - * remain pending. - */ -#define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21) - -/** - * AVProfile. - */ -typedef struct AVProfile { - int profile; - const char *name; ///< short name for the profile -} AVProfile; - -typedef struct AVCodecDefault AVCodecDefault; - -struct AVCodecContext; -struct AVSubtitle; -struct AVPacket; - -/** - * AVCodec. - */ -typedef struct AVCodec { - /** - * Name of the codec implementation. - * The name is globally unique among encoders and among decoders (but an - * encoder and a decoder can share the same name). - * This is the primary way to find a codec from the user perspective. - */ - const char *name; - /** - * Descriptive name for the codec, meant to be more human readable than name. - * You should use the NULL_IF_CONFIG_SMALL() macro to define it. - */ - const char *long_name; - enum AVMediaType type; - enum AVCodecID id; - /** - * Codec capabilities. - * see AV_CODEC_CAP_* - */ - int capabilities; - const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} - const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 - const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 - const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 - const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 - uint8_t max_lowres; ///< maximum value for lowres supported by the decoder - const AVClass *priv_class; ///< AVClass for the private context - const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} - - /** - * Group name of the codec implementation. - * This is a short symbolic name of the wrapper backing this codec. A - * wrapper uses some kind of external implementation for the codec, such - * as an external library, or a codec implementation provided by the OS or - * the hardware. - * If this field is NULL, this is a builtin, libavcodec native codec. - * If non-NULL, this will be the suffix in AVCodec.name in most cases - * (usually AVCodec.name will be of the form "_"). - */ - const char *wrapper_name; - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavcodec and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - int priv_data_size; -#if FF_API_NEXT - struct AVCodec *next; -#endif - /** - * @name Frame-level threading support functions - * @{ - */ - /** - * Copy necessary context variables from a previous thread context to the current one. - * If not defined, the next thread will start automatically; otherwise, the codec - * must call ff_thread_finish_setup(). - * - * dst and src will (rarely) point to the same context, in which case memcpy should be skipped. - */ - int (*update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src); - /** @} */ - - /** - * Private codec-specific defaults. - */ - const AVCodecDefault *defaults; - - /** - * Initialize codec static data, called from av_codec_iterate(). - * - * This is not intended for time consuming operations as it is - * run for every codec regardless of that codec being used. - */ - void (*init_static_data)(struct AVCodec *codec); - - int (*init)(struct AVCodecContext *); - int (*encode_sub)(struct AVCodecContext *, uint8_t *buf, int buf_size, - const struct AVSubtitle *sub); - /** - * Encode data to an AVPacket. - * - * @param avctx codec context - * @param avpkt output AVPacket - * @param[in] frame AVFrame containing the raw data to be encoded - * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a - * non-empty packet was returned in avpkt. - * @return 0 on success, negative error code on failure - */ - int (*encode2)(struct AVCodecContext *avctx, struct AVPacket *avpkt, - const struct AVFrame *frame, int *got_packet_ptr); - /** - * Decode picture or subtitle data. - * - * @param avctx codec context - * @param outdata codec type dependent output struct - * @param[out] got_frame_ptr decoder sets to 0 or 1 to indicate that a - * non-empty frame or subtitle was returned in - * outdata. - * @param[in] avpkt AVPacket containing the data to be decoded - * @return amount of bytes read from the packet on success, negative error - * code on failure - */ - int (*decode)(struct AVCodecContext *avctx, void *outdata, - int *got_frame_ptr, struct AVPacket *avpkt); - int (*close)(struct AVCodecContext *); - /** - * Encode API with decoupled frame/packet dataflow. This function is called - * to get one output packet. It should call ff_encode_get_frame() to obtain - * input data. - */ - int (*receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt); - - /** - * Decode API with decoupled packet/frame dataflow. This function is called - * to get one output frame. It should call ff_decode_get_packet() to obtain - * input data. - */ - int (*receive_frame)(struct AVCodecContext *avctx, struct AVFrame *frame); - /** - * Flush buffers. - * Will be called when seeking - */ - void (*flush)(struct AVCodecContext *); - /** - * Internal codec capabilities. - * See FF_CODEC_CAP_* in internal.h - */ - int caps_internal; - - /** - * Decoding only, a comma-separated list of bitstream filters to apply to - * packets before decoding. - */ - const char *bsfs; - - /** - * Array of pointers to hardware configurations supported by the codec, - * or NULL if no hardware supported. The array is terminated by a NULL - * pointer. - * - * The user can only access this field via avcodec_get_hw_config(). - */ - const struct AVCodecHWConfigInternal *const *hw_configs; - - /** - * List of supported codec_tags, terminated by FF_CODEC_TAGS_END. - */ - const uint32_t *codec_tags; -} AVCodec; - -/** - * Iterate over all registered codecs. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered codec or NULL when the iteration is - * finished - */ -const AVCodec *av_codec_iterate(void **opaque); - -/** - * Find a registered decoder with a matching codec ID. - * - * @param id AVCodecID of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_decoder(enum AVCodecID id); - -/** - * Find a registered decoder with the specified name. - * - * @param name name of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_decoder_by_name(const char *name); - -/** - * Find a registered encoder with a matching codec ID. - * - * @param id AVCodecID of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_encoder(enum AVCodecID id); - -/** - * Find a registered encoder with the specified name. - * - * @param name name of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_encoder_by_name(const char *name); -/** - * @return a non-zero number if codec is an encoder, zero otherwise - */ -int av_codec_is_encoder(const AVCodec *codec); - -/** - * @return a non-zero number if codec is a decoder, zero otherwise - */ -int av_codec_is_decoder(const AVCodec *codec); - -enum { - /** - * The codec supports this format via the hw_device_ctx interface. - * - * When selecting this format, AVCodecContext.hw_device_ctx should - * have been set to a device of the specified type before calling - * avcodec_open2(). - */ - AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX = 0x01, - /** - * The codec supports this format via the hw_frames_ctx interface. - * - * When selecting this format for a decoder, - * AVCodecContext.hw_frames_ctx should be set to a suitable frames - * context inside the get_format() callback. The frames context - * must have been created on a device of the specified type. - * - * When selecting this format for an encoder, - * AVCodecContext.hw_frames_ctx should be set to the context which - * will be used for the input frames before calling avcodec_open2(). - */ - AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = 0x02, - /** - * The codec supports this format by some internal method. - * - * This format can be selected without any additional configuration - - * no device or frames context is required. - */ - AV_CODEC_HW_CONFIG_METHOD_INTERNAL = 0x04, - /** - * The codec supports this format by some ad-hoc method. - * - * Additional settings and/or function calls are required. See the - * codec-specific documentation for details. (Methods requiring - * this sort of configuration are deprecated and others should be - * used in preference.) - */ - AV_CODEC_HW_CONFIG_METHOD_AD_HOC = 0x08, -}; - -typedef struct AVCodecHWConfig { - /** - * For decoders, a hardware pixel format which that decoder may be - * able to decode to if suitable hardware is available. - * - * For encoders, a pixel format which the encoder may be able to - * accept. If set to AV_PIX_FMT_NONE, this applies to all pixel - * formats supported by the codec. - */ - enum AVPixelFormat pix_fmt; - /** - * Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible - * setup methods which can be used with this configuration. - */ - int methods; - /** - * The device type associated with the configuration. - * - * Must be set for AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX and - * AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, otherwise unused. - */ - enum AVHWDeviceType device_type; -} AVCodecHWConfig; - -/** - * Retrieve supported hardware configurations for a codec. - * - * Values of index from zero to some maximum return the indexed configuration - * descriptor; all other values return NULL. If the codec does not support - * any hardware configurations then it will always return NULL. - */ -const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *codec, int index); - -/** - * @} - */ - -#endif /* AVCODEC_CODEC_H */ diff --git a/prebuilts/aarch64/include/libavcodec/codec_desc.h b/prebuilts/aarch64/include/libavcodec/codec_desc.h deleted file mode 100644 index 126b52d..0000000 --- a/prebuilts/aarch64/include/libavcodec/codec_desc.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Codec descriptors public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_DESC_H -#define AVCODEC_CODEC_DESC_H - -#include "libavutil/avutil.h" - -#include "codec_id.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * This struct describes the properties of a single codec described by an - * AVCodecID. - * @see avcodec_descriptor_get() - */ -typedef struct AVCodecDescriptor { - enum AVCodecID id; - enum AVMediaType type; - /** - * Name of the codec described by this descriptor. It is non-empty and - * unique for each codec descriptor. It should contain alphanumeric - * characters and '_' only. - */ - const char *name; - /** - * A more descriptive name for this codec. May be NULL. - */ - const char *long_name; - /** - * Codec properties, a combination of AV_CODEC_PROP_* flags. - */ - int props; - /** - * MIME type(s) associated with the codec. - * May be NULL; if not, a NULL-terminated array of MIME types. - * The first item is always non-NULL and is the preferred MIME type. - */ - const char *const *mime_types; - /** - * If non-NULL, an array of profiles recognized for this codec. - * Terminated with FF_PROFILE_UNKNOWN. - */ - const struct AVProfile *profiles; -} AVCodecDescriptor; - -/** - * Codec uses only intra compression. - * Video and audio codecs only. - */ -#define AV_CODEC_PROP_INTRA_ONLY (1 << 0) -/** - * Codec supports lossy compression. Audio and video codecs only. - * @note a codec may support both lossy and lossless - * compression modes - */ -#define AV_CODEC_PROP_LOSSY (1 << 1) -/** - * Codec supports lossless compression. Audio and video codecs only. - */ -#define AV_CODEC_PROP_LOSSLESS (1 << 2) -/** - * Codec supports frame reordering. That is, the coded order (the order in which - * the encoded packets are output by the encoders / stored / input to the - * decoders) may be different from the presentation order of the corresponding - * frames. - * - * For codecs that do not have this property set, PTS and DTS should always be - * equal. - */ -#define AV_CODEC_PROP_REORDER (1 << 3) -/** - * Subtitle codec is bitmap based - * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. - */ -#define AV_CODEC_PROP_BITMAP_SUB (1 << 16) -/** - * Subtitle codec is text based. - * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. - */ -#define AV_CODEC_PROP_TEXT_SUB (1 << 17) - -/** - * @return descriptor for given codec ID or NULL if no descriptor exists. - */ -const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id); - -/** - * Iterate over all codec descriptors known to libavcodec. - * - * @param prev previous descriptor. NULL to get the first descriptor. - * - * @return next descriptor or NULL after the last descriptor - */ -const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev); - -/** - * @return codec descriptor with the given name or NULL if no such descriptor - * exists. - */ -const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name); - -/** - * @} - */ - -#endif // AVCODEC_CODEC_DESC_H diff --git a/prebuilts/aarch64/include/libavcodec/codec_id.h b/prebuilts/aarch64/include/libavcodec/codec_id.h deleted file mode 100644 index ab7bc68..0000000 --- a/prebuilts/aarch64/include/libavcodec/codec_id.h +++ /dev/null @@ -1,592 +0,0 @@ -/* - * Codec IDs - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_ID_H -#define AVCODEC_CODEC_ID_H - -#include "libavutil/avutil.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * Identify the syntax and semantics of the bitstream. - * The principle is roughly: - * Two decoders with the same ID can decode the same streams. - * Two encoders with the same ID can encode compatible streams. - * There may be slight deviations from the principle due to implementation - * details. - * - * If you add a codec ID to this list, add it so that - * 1. no value of an existing codec ID changes (that would break ABI), - * 2. it is as close as possible to similar codecs - * - * After adding new codec IDs, do not forget to add an entry to the codec - * descriptor list and bump libavcodec minor version. - */ -enum AVCodecID { - AV_CODEC_ID_NONE, - - /* video codecs */ - AV_CODEC_ID_MPEG1VIDEO, - AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding - AV_CODEC_ID_H261, - AV_CODEC_ID_H263, - AV_CODEC_ID_RV10, - AV_CODEC_ID_RV20, - AV_CODEC_ID_MJPEG, - AV_CODEC_ID_MJPEGB, - AV_CODEC_ID_LJPEG, - AV_CODEC_ID_SP5X, - AV_CODEC_ID_JPEGLS, - AV_CODEC_ID_MPEG4, - AV_CODEC_ID_RAWVIDEO, - AV_CODEC_ID_MSMPEG4V1, - AV_CODEC_ID_MSMPEG4V2, - AV_CODEC_ID_MSMPEG4V3, - AV_CODEC_ID_WMV1, - AV_CODEC_ID_WMV2, - AV_CODEC_ID_H263P, - AV_CODEC_ID_H263I, - AV_CODEC_ID_FLV1, - AV_CODEC_ID_SVQ1, - AV_CODEC_ID_SVQ3, - AV_CODEC_ID_DVVIDEO, - AV_CODEC_ID_HUFFYUV, - AV_CODEC_ID_CYUV, - AV_CODEC_ID_H264, - AV_CODEC_ID_INDEO3, - AV_CODEC_ID_VP3, - AV_CODEC_ID_THEORA, - AV_CODEC_ID_ASV1, - AV_CODEC_ID_ASV2, - AV_CODEC_ID_FFV1, - AV_CODEC_ID_4XM, - AV_CODEC_ID_VCR1, - AV_CODEC_ID_CLJR, - AV_CODEC_ID_MDEC, - AV_CODEC_ID_ROQ, - AV_CODEC_ID_INTERPLAY_VIDEO, - AV_CODEC_ID_XAN_WC3, - AV_CODEC_ID_XAN_WC4, - AV_CODEC_ID_RPZA, - AV_CODEC_ID_CINEPAK, - AV_CODEC_ID_WS_VQA, - AV_CODEC_ID_MSRLE, - AV_CODEC_ID_MSVIDEO1, - AV_CODEC_ID_IDCIN, - AV_CODEC_ID_8BPS, - AV_CODEC_ID_SMC, - AV_CODEC_ID_FLIC, - AV_CODEC_ID_TRUEMOTION1, - AV_CODEC_ID_VMDVIDEO, - AV_CODEC_ID_MSZH, - AV_CODEC_ID_ZLIB, - AV_CODEC_ID_QTRLE, - AV_CODEC_ID_TSCC, - AV_CODEC_ID_ULTI, - AV_CODEC_ID_QDRAW, - AV_CODEC_ID_VIXL, - AV_CODEC_ID_QPEG, - AV_CODEC_ID_PNG, - AV_CODEC_ID_PPM, - AV_CODEC_ID_PBM, - AV_CODEC_ID_PGM, - AV_CODEC_ID_PGMYUV, - AV_CODEC_ID_PAM, - AV_CODEC_ID_FFVHUFF, - AV_CODEC_ID_RV30, - AV_CODEC_ID_RV40, - AV_CODEC_ID_VC1, - AV_CODEC_ID_WMV3, - AV_CODEC_ID_LOCO, - AV_CODEC_ID_WNV1, - AV_CODEC_ID_AASC, - AV_CODEC_ID_INDEO2, - AV_CODEC_ID_FRAPS, - AV_CODEC_ID_TRUEMOTION2, - AV_CODEC_ID_BMP, - AV_CODEC_ID_CSCD, - AV_CODEC_ID_MMVIDEO, - AV_CODEC_ID_ZMBV, - AV_CODEC_ID_AVS, - AV_CODEC_ID_SMACKVIDEO, - AV_CODEC_ID_NUV, - AV_CODEC_ID_KMVC, - AV_CODEC_ID_FLASHSV, - AV_CODEC_ID_CAVS, - AV_CODEC_ID_JPEG2000, - AV_CODEC_ID_VMNC, - AV_CODEC_ID_VP5, - AV_CODEC_ID_VP6, - AV_CODEC_ID_VP6F, - AV_CODEC_ID_TARGA, - AV_CODEC_ID_DSICINVIDEO, - AV_CODEC_ID_TIERTEXSEQVIDEO, - AV_CODEC_ID_TIFF, - AV_CODEC_ID_GIF, - AV_CODEC_ID_DXA, - AV_CODEC_ID_DNXHD, - AV_CODEC_ID_THP, - AV_CODEC_ID_SGI, - AV_CODEC_ID_C93, - AV_CODEC_ID_BETHSOFTVID, - AV_CODEC_ID_PTX, - AV_CODEC_ID_TXD, - AV_CODEC_ID_VP6A, - AV_CODEC_ID_AMV, - AV_CODEC_ID_VB, - AV_CODEC_ID_PCX, - AV_CODEC_ID_SUNRAST, - AV_CODEC_ID_INDEO4, - AV_CODEC_ID_INDEO5, - AV_CODEC_ID_MIMIC, - AV_CODEC_ID_RL2, - AV_CODEC_ID_ESCAPE124, - AV_CODEC_ID_DIRAC, - AV_CODEC_ID_BFI, - AV_CODEC_ID_CMV, - AV_CODEC_ID_MOTIONPIXELS, - AV_CODEC_ID_TGV, - AV_CODEC_ID_TGQ, - AV_CODEC_ID_TQI, - AV_CODEC_ID_AURA, - AV_CODEC_ID_AURA2, - AV_CODEC_ID_V210X, - AV_CODEC_ID_TMV, - AV_CODEC_ID_V210, - AV_CODEC_ID_DPX, - AV_CODEC_ID_MAD, - AV_CODEC_ID_FRWU, - AV_CODEC_ID_FLASHSV2, - AV_CODEC_ID_CDGRAPHICS, - AV_CODEC_ID_R210, - AV_CODEC_ID_ANM, - AV_CODEC_ID_BINKVIDEO, - AV_CODEC_ID_IFF_ILBM, -#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM - AV_CODEC_ID_KGV1, - AV_CODEC_ID_YOP, - AV_CODEC_ID_VP8, - AV_CODEC_ID_PICTOR, - AV_CODEC_ID_ANSI, - AV_CODEC_ID_A64_MULTI, - AV_CODEC_ID_A64_MULTI5, - AV_CODEC_ID_R10K, - AV_CODEC_ID_MXPEG, - AV_CODEC_ID_LAGARITH, - AV_CODEC_ID_PRORES, - AV_CODEC_ID_JV, - AV_CODEC_ID_DFA, - AV_CODEC_ID_WMV3IMAGE, - AV_CODEC_ID_VC1IMAGE, - AV_CODEC_ID_UTVIDEO, - AV_CODEC_ID_BMV_VIDEO, - AV_CODEC_ID_VBLE, - AV_CODEC_ID_DXTORY, - AV_CODEC_ID_V410, - AV_CODEC_ID_XWD, - AV_CODEC_ID_CDXL, - AV_CODEC_ID_XBM, - AV_CODEC_ID_ZEROCODEC, - AV_CODEC_ID_MSS1, - AV_CODEC_ID_MSA1, - AV_CODEC_ID_TSCC2, - AV_CODEC_ID_MTS2, - AV_CODEC_ID_CLLC, - AV_CODEC_ID_MSS2, - AV_CODEC_ID_VP9, - AV_CODEC_ID_AIC, - AV_CODEC_ID_ESCAPE130, - AV_CODEC_ID_G2M, - AV_CODEC_ID_WEBP, - AV_CODEC_ID_HNM4_VIDEO, - AV_CODEC_ID_HEVC, -#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC - AV_CODEC_ID_FIC, - AV_CODEC_ID_ALIAS_PIX, - AV_CODEC_ID_BRENDER_PIX, - AV_CODEC_ID_PAF_VIDEO, - AV_CODEC_ID_EXR, - AV_CODEC_ID_VP7, - AV_CODEC_ID_SANM, - AV_CODEC_ID_SGIRLE, - AV_CODEC_ID_MVC1, - AV_CODEC_ID_MVC2, - AV_CODEC_ID_HQX, - AV_CODEC_ID_TDSC, - AV_CODEC_ID_HQ_HQA, - AV_CODEC_ID_HAP, - AV_CODEC_ID_DDS, - AV_CODEC_ID_DXV, - AV_CODEC_ID_SCREENPRESSO, - AV_CODEC_ID_RSCC, - AV_CODEC_ID_AVS2, - AV_CODEC_ID_PGX, - AV_CODEC_ID_AVS3, - AV_CODEC_ID_MSP2, - AV_CODEC_ID_VVC, -#define AV_CODEC_ID_H266 AV_CODEC_ID_VVC - - AV_CODEC_ID_Y41P = 0x8000, - AV_CODEC_ID_AVRP, - AV_CODEC_ID_012V, - AV_CODEC_ID_AVUI, - AV_CODEC_ID_AYUV, - AV_CODEC_ID_TARGA_Y216, - AV_CODEC_ID_V308, - AV_CODEC_ID_V408, - AV_CODEC_ID_YUV4, - AV_CODEC_ID_AVRN, - AV_CODEC_ID_CPIA, - AV_CODEC_ID_XFACE, - AV_CODEC_ID_SNOW, - AV_CODEC_ID_SMVJPEG, - AV_CODEC_ID_APNG, - AV_CODEC_ID_DAALA, - AV_CODEC_ID_CFHD, - AV_CODEC_ID_TRUEMOTION2RT, - AV_CODEC_ID_M101, - AV_CODEC_ID_MAGICYUV, - AV_CODEC_ID_SHEERVIDEO, - AV_CODEC_ID_YLC, - AV_CODEC_ID_PSD, - AV_CODEC_ID_PIXLET, - AV_CODEC_ID_SPEEDHQ, - AV_CODEC_ID_FMVC, - AV_CODEC_ID_SCPR, - AV_CODEC_ID_CLEARVIDEO, - AV_CODEC_ID_XPM, - AV_CODEC_ID_AV1, - AV_CODEC_ID_BITPACKED, - AV_CODEC_ID_MSCC, - AV_CODEC_ID_SRGC, - AV_CODEC_ID_SVG, - AV_CODEC_ID_GDV, - AV_CODEC_ID_FITS, - AV_CODEC_ID_IMM4, - AV_CODEC_ID_PROSUMER, - AV_CODEC_ID_MWSC, - AV_CODEC_ID_WCMV, - AV_CODEC_ID_RASC, - AV_CODEC_ID_HYMT, - AV_CODEC_ID_ARBC, - AV_CODEC_ID_AGM, - AV_CODEC_ID_LSCR, - AV_CODEC_ID_VP4, - AV_CODEC_ID_IMM5, - AV_CODEC_ID_MVDV, - AV_CODEC_ID_MVHA, - AV_CODEC_ID_CDTOONS, - AV_CODEC_ID_MV30, - AV_CODEC_ID_NOTCHLC, - AV_CODEC_ID_PFM, - AV_CODEC_ID_MOBICLIP, - AV_CODEC_ID_PHOTOCD, - AV_CODEC_ID_IPU, - AV_CODEC_ID_ARGO, - AV_CODEC_ID_CRI, - AV_CODEC_ID_SIMBIOSIS_IMX, - AV_CODEC_ID_SGA_VIDEO, - - /* various PCM "codecs" */ - AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs - AV_CODEC_ID_PCM_S16LE = 0x10000, - AV_CODEC_ID_PCM_S16BE, - AV_CODEC_ID_PCM_U16LE, - AV_CODEC_ID_PCM_U16BE, - AV_CODEC_ID_PCM_S8, - AV_CODEC_ID_PCM_U8, - AV_CODEC_ID_PCM_MULAW, - AV_CODEC_ID_PCM_ALAW, - AV_CODEC_ID_PCM_S32LE, - AV_CODEC_ID_PCM_S32BE, - AV_CODEC_ID_PCM_U32LE, - AV_CODEC_ID_PCM_U32BE, - AV_CODEC_ID_PCM_S24LE, - AV_CODEC_ID_PCM_S24BE, - AV_CODEC_ID_PCM_U24LE, - AV_CODEC_ID_PCM_U24BE, - AV_CODEC_ID_PCM_S24DAUD, - AV_CODEC_ID_PCM_ZORK, - AV_CODEC_ID_PCM_S16LE_PLANAR, - AV_CODEC_ID_PCM_DVD, - AV_CODEC_ID_PCM_F32BE, - AV_CODEC_ID_PCM_F32LE, - AV_CODEC_ID_PCM_F64BE, - AV_CODEC_ID_PCM_F64LE, - AV_CODEC_ID_PCM_BLURAY, - AV_CODEC_ID_PCM_LXF, - AV_CODEC_ID_S302M, - AV_CODEC_ID_PCM_S8_PLANAR, - AV_CODEC_ID_PCM_S24LE_PLANAR, - AV_CODEC_ID_PCM_S32LE_PLANAR, - AV_CODEC_ID_PCM_S16BE_PLANAR, - - AV_CODEC_ID_PCM_S64LE = 0x10800, - AV_CODEC_ID_PCM_S64BE, - AV_CODEC_ID_PCM_F16LE, - AV_CODEC_ID_PCM_F24LE, - AV_CODEC_ID_PCM_VIDC, - AV_CODEC_ID_PCM_SGA, - - /* various ADPCM codecs */ - AV_CODEC_ID_ADPCM_IMA_QT = 0x11000, - AV_CODEC_ID_ADPCM_IMA_WAV, - AV_CODEC_ID_ADPCM_IMA_DK3, - AV_CODEC_ID_ADPCM_IMA_DK4, - AV_CODEC_ID_ADPCM_IMA_WS, - AV_CODEC_ID_ADPCM_IMA_SMJPEG, - AV_CODEC_ID_ADPCM_MS, - AV_CODEC_ID_ADPCM_4XM, - AV_CODEC_ID_ADPCM_XA, - AV_CODEC_ID_ADPCM_ADX, - AV_CODEC_ID_ADPCM_EA, - AV_CODEC_ID_ADPCM_G726, - AV_CODEC_ID_ADPCM_CT, - AV_CODEC_ID_ADPCM_SWF, - AV_CODEC_ID_ADPCM_YAMAHA, - AV_CODEC_ID_ADPCM_SBPRO_4, - AV_CODEC_ID_ADPCM_SBPRO_3, - AV_CODEC_ID_ADPCM_SBPRO_2, - AV_CODEC_ID_ADPCM_THP, - AV_CODEC_ID_ADPCM_IMA_AMV, - AV_CODEC_ID_ADPCM_EA_R1, - AV_CODEC_ID_ADPCM_EA_R3, - AV_CODEC_ID_ADPCM_EA_R2, - AV_CODEC_ID_ADPCM_IMA_EA_SEAD, - AV_CODEC_ID_ADPCM_IMA_EA_EACS, - AV_CODEC_ID_ADPCM_EA_XAS, - AV_CODEC_ID_ADPCM_EA_MAXIS_XA, - AV_CODEC_ID_ADPCM_IMA_ISS, - AV_CODEC_ID_ADPCM_G722, - AV_CODEC_ID_ADPCM_IMA_APC, - AV_CODEC_ID_ADPCM_VIMA, - - AV_CODEC_ID_ADPCM_AFC = 0x11800, - AV_CODEC_ID_ADPCM_IMA_OKI, - AV_CODEC_ID_ADPCM_DTK, - AV_CODEC_ID_ADPCM_IMA_RAD, - AV_CODEC_ID_ADPCM_G726LE, - AV_CODEC_ID_ADPCM_THP_LE, - AV_CODEC_ID_ADPCM_PSX, - AV_CODEC_ID_ADPCM_AICA, - AV_CODEC_ID_ADPCM_IMA_DAT4, - AV_CODEC_ID_ADPCM_MTAF, - AV_CODEC_ID_ADPCM_AGM, - AV_CODEC_ID_ADPCM_ARGO, - AV_CODEC_ID_ADPCM_IMA_SSI, - AV_CODEC_ID_ADPCM_ZORK, - AV_CODEC_ID_ADPCM_IMA_APM, - AV_CODEC_ID_ADPCM_IMA_ALP, - AV_CODEC_ID_ADPCM_IMA_MTF, - AV_CODEC_ID_ADPCM_IMA_CUNNING, - AV_CODEC_ID_ADPCM_IMA_MOFLEX, - - /* AMR */ - AV_CODEC_ID_AMR_NB = 0x12000, - AV_CODEC_ID_AMR_WB, - - /* RealAudio codecs*/ - AV_CODEC_ID_RA_144 = 0x13000, - AV_CODEC_ID_RA_288, - - /* various DPCM codecs */ - AV_CODEC_ID_ROQ_DPCM = 0x14000, - AV_CODEC_ID_INTERPLAY_DPCM, - AV_CODEC_ID_XAN_DPCM, - AV_CODEC_ID_SOL_DPCM, - - AV_CODEC_ID_SDX2_DPCM = 0x14800, - AV_CODEC_ID_GREMLIN_DPCM, - AV_CODEC_ID_DERF_DPCM, - - /* audio codecs */ - AV_CODEC_ID_MP2 = 0x15000, - AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 - AV_CODEC_ID_AAC, - AV_CODEC_ID_AC3, - AV_CODEC_ID_DTS, - AV_CODEC_ID_VORBIS, - AV_CODEC_ID_DVAUDIO, - AV_CODEC_ID_WMAV1, - AV_CODEC_ID_WMAV2, - AV_CODEC_ID_MACE3, - AV_CODEC_ID_MACE6, - AV_CODEC_ID_VMDAUDIO, - AV_CODEC_ID_FLAC, - AV_CODEC_ID_MP3ADU, - AV_CODEC_ID_MP3ON4, - AV_CODEC_ID_SHORTEN, - AV_CODEC_ID_ALAC, - AV_CODEC_ID_WESTWOOD_SND1, - AV_CODEC_ID_GSM, ///< as in Berlin toast format - AV_CODEC_ID_QDM2, - AV_CODEC_ID_COOK, - AV_CODEC_ID_TRUESPEECH, - AV_CODEC_ID_TTA, - AV_CODEC_ID_SMACKAUDIO, - AV_CODEC_ID_QCELP, - AV_CODEC_ID_WAVPACK, - AV_CODEC_ID_DSICINAUDIO, - AV_CODEC_ID_IMC, - AV_CODEC_ID_MUSEPACK7, - AV_CODEC_ID_MLP, - AV_CODEC_ID_GSM_MS, /* as found in WAV */ - AV_CODEC_ID_ATRAC3, - AV_CODEC_ID_APE, - AV_CODEC_ID_NELLYMOSER, - AV_CODEC_ID_MUSEPACK8, - AV_CODEC_ID_SPEEX, - AV_CODEC_ID_WMAVOICE, - AV_CODEC_ID_WMAPRO, - AV_CODEC_ID_WMALOSSLESS, - AV_CODEC_ID_ATRAC3P, - AV_CODEC_ID_EAC3, - AV_CODEC_ID_SIPR, - AV_CODEC_ID_MP1, - AV_CODEC_ID_TWINVQ, - AV_CODEC_ID_TRUEHD, - AV_CODEC_ID_MP4ALS, - AV_CODEC_ID_ATRAC1, - AV_CODEC_ID_BINKAUDIO_RDFT, - AV_CODEC_ID_BINKAUDIO_DCT, - AV_CODEC_ID_AAC_LATM, - AV_CODEC_ID_QDMC, - AV_CODEC_ID_CELT, - AV_CODEC_ID_G723_1, - AV_CODEC_ID_G729, - AV_CODEC_ID_8SVX_EXP, - AV_CODEC_ID_8SVX_FIB, - AV_CODEC_ID_BMV_AUDIO, - AV_CODEC_ID_RALF, - AV_CODEC_ID_IAC, - AV_CODEC_ID_ILBC, - AV_CODEC_ID_OPUS, - AV_CODEC_ID_COMFORT_NOISE, - AV_CODEC_ID_TAK, - AV_CODEC_ID_METASOUND, - AV_CODEC_ID_PAF_AUDIO, - AV_CODEC_ID_ON2AVC, - AV_CODEC_ID_DSS_SP, - AV_CODEC_ID_CODEC2, - - AV_CODEC_ID_FFWAVESYNTH = 0x15800, - AV_CODEC_ID_SONIC, - AV_CODEC_ID_SONIC_LS, - AV_CODEC_ID_EVRC, - AV_CODEC_ID_SMV, - AV_CODEC_ID_DSD_LSBF, - AV_CODEC_ID_DSD_MSBF, - AV_CODEC_ID_DSD_LSBF_PLANAR, - AV_CODEC_ID_DSD_MSBF_PLANAR, - AV_CODEC_ID_4GV, - AV_CODEC_ID_INTERPLAY_ACM, - AV_CODEC_ID_XMA1, - AV_CODEC_ID_XMA2, - AV_CODEC_ID_DST, - AV_CODEC_ID_ATRAC3AL, - AV_CODEC_ID_ATRAC3PAL, - AV_CODEC_ID_DOLBY_E, - AV_CODEC_ID_APTX, - AV_CODEC_ID_APTX_HD, - AV_CODEC_ID_SBC, - AV_CODEC_ID_ATRAC9, - AV_CODEC_ID_HCOM, - AV_CODEC_ID_ACELP_KELVIN, - AV_CODEC_ID_MPEGH_3D_AUDIO, - AV_CODEC_ID_SIREN, - AV_CODEC_ID_HCA, - AV_CODEC_ID_FASTAUDIO, - - /* subtitle codecs */ - AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. - AV_CODEC_ID_DVD_SUBTITLE = 0x17000, - AV_CODEC_ID_DVB_SUBTITLE, - AV_CODEC_ID_TEXT, ///< raw UTF-8 text - AV_CODEC_ID_XSUB, - AV_CODEC_ID_SSA, - AV_CODEC_ID_MOV_TEXT, - AV_CODEC_ID_HDMV_PGS_SUBTITLE, - AV_CODEC_ID_DVB_TELETEXT, - AV_CODEC_ID_SRT, - - AV_CODEC_ID_MICRODVD = 0x17800, - AV_CODEC_ID_EIA_608, - AV_CODEC_ID_JACOSUB, - AV_CODEC_ID_SAMI, - AV_CODEC_ID_REALTEXT, - AV_CODEC_ID_STL, - AV_CODEC_ID_SUBVIEWER1, - AV_CODEC_ID_SUBVIEWER, - AV_CODEC_ID_SUBRIP, - AV_CODEC_ID_WEBVTT, - AV_CODEC_ID_MPL2, - AV_CODEC_ID_VPLAYER, - AV_CODEC_ID_PJS, - AV_CODEC_ID_ASS, - AV_CODEC_ID_HDMV_TEXT_SUBTITLE, - AV_CODEC_ID_TTML, - AV_CODEC_ID_ARIB_CAPTION, - - /* other specific kind of codecs (generally used for attachments) */ - AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs. - AV_CODEC_ID_TTF = 0x18000, - - AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program stream. - AV_CODEC_ID_EPG, - AV_CODEC_ID_BINTEXT = 0x18800, - AV_CODEC_ID_XBIN, - AV_CODEC_ID_IDF, - AV_CODEC_ID_OTF, - AV_CODEC_ID_SMPTE_KLV, - AV_CODEC_ID_DVD_NAV, - AV_CODEC_ID_TIMED_ID3, - AV_CODEC_ID_BIN_DATA, - - - AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it - - AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS - * stream (only used by libavformat) */ - AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems - * stream (only used by libavformat) */ - AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. - AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket -}; - -/** - * Get the type of the given codec. - */ -enum AVMediaType avcodec_get_type(enum AVCodecID codec_id); - -/** - * Get the name of a codec. - * @return a static string identifying the codec; never NULL - */ -const char *avcodec_get_name(enum AVCodecID id); - -/** - * @} - */ - -#endif // AVCODEC_CODEC_ID_H diff --git a/prebuilts/aarch64/include/libavcodec/codec_par.h b/prebuilts/aarch64/include/libavcodec/codec_par.h deleted file mode 100644 index 948758e..0000000 --- a/prebuilts/aarch64/include/libavcodec/codec_par.h +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Codec parameters public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_PAR_H -#define AVCODEC_CODEC_PAR_H - -#include - -#include "libavutil/avutil.h" -#include "libavutil/rational.h" -#include "libavutil/pixfmt.h" - -#include "codec_id.h" - -/** - * @addtogroup lavc_core - */ - -enum AVFieldOrder { - AV_FIELD_UNKNOWN, - AV_FIELD_PROGRESSIVE, - AV_FIELD_TT, //< Top coded_first, top displayed first - AV_FIELD_BB, //< Bottom coded first, bottom displayed first - AV_FIELD_TB, //< Top coded first, bottom displayed first - AV_FIELD_BT, //< Bottom coded first, top displayed first -}; - -/** - * This struct describes the properties of an encoded stream. - * - * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must - * be allocated with avcodec_parameters_alloc() and freed with - * avcodec_parameters_free(). - */ -typedef struct AVCodecParameters { - /** - * General type of the encoded data. - */ - enum AVMediaType codec_type; - /** - * Specific type of the encoded data (the codec used). - */ - enum AVCodecID codec_id; - /** - * Additional information about the codec (corresponds to the AVI FOURCC). - */ - uint32_t codec_tag; - - /** - * Extra binary data needed for initializing the decoder, codec-dependent. - * - * Must be allocated with av_malloc() and will be freed by - * avcodec_parameters_free(). The allocated size of extradata must be at - * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding - * bytes zeroed. - */ - uint8_t *extradata; - /** - * Size of the extradata content in bytes. - */ - int extradata_size; - - /** - * - video: the pixel format, the value corresponds to enum AVPixelFormat. - * - audio: the sample format, the value corresponds to enum AVSampleFormat. - */ - int format; - - /** - * The average bitrate of the encoded data (in bits per second). - */ - int64_t bit_rate; - - /** - * The number of bits per sample in the codedwords. - * - * This is basically the bitrate per sample. It is mandatory for a bunch of - * formats to actually decode them. It's the number of bits for one sample in - * the actual coded bitstream. - * - * This could be for example 4 for ADPCM - * For PCM formats this matches bits_per_raw_sample - * Can be 0 - */ - int bits_per_coded_sample; - - /** - * This is the number of valid bits in each output sample. If the - * sample format has more bits, the least significant bits are additional - * padding bits, which are always 0. Use right shifts to reduce the sample - * to its actual size. For example, audio formats with 24 bit samples will - * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32. - * To get the original sample use "(int32_t)sample >> 8"." - * - * For ADPCM this might be 12 or 16 or similar - * Can be 0 - */ - int bits_per_raw_sample; - - /** - * Codec-specific bitstream restrictions that the stream conforms to. - */ - int profile; - int level; - - /** - * Video only. The dimensions of the video frame in pixels. - */ - int width; - int height; - - /** - * Video only. The aspect ratio (width / height) which a single pixel - * should have when displayed. - * - * When the aspect ratio is unknown / undefined, the numerator should be - * set to 0 (the denominator may have any value). - */ - AVRational sample_aspect_ratio; - - /** - * Video only. The order of the fields in interlaced video. - */ - enum AVFieldOrder field_order; - - /** - * Video only. Additional colorspace characteristics. - */ - enum AVColorRange color_range; - enum AVColorPrimaries color_primaries; - enum AVColorTransferCharacteristic color_trc; - enum AVColorSpace color_space; - enum AVChromaLocation chroma_location; - - /** - * Video only. Number of delayed frames. - */ - int video_delay; - - /** - * Audio only. The channel layout bitmask. May be 0 if the channel layout is - * unknown or unspecified, otherwise the number of bits set must be equal to - * the channels field. - */ - uint64_t channel_layout; - /** - * Audio only. The number of audio channels. - */ - int channels; - /** - * Audio only. The number of audio samples per second. - */ - int sample_rate; - /** - * Audio only. The number of bytes per coded audio frame, required by some - * formats. - * - * Corresponds to nBlockAlign in WAVEFORMATEX. - */ - int block_align; - /** - * Audio only. Audio frame size, if known. Required by some formats to be static. - */ - int frame_size; - - /** - * Audio only. The amount of padding (in samples) inserted by the encoder at - * the beginning of the audio. I.e. this number of leading decoded samples - * must be discarded by the caller to get the original audio without leading - * padding. - */ - int initial_padding; - /** - * Audio only. The amount of padding (in samples) appended by the encoder to - * the end of the audio. I.e. this number of decoded samples must be - * discarded by the caller from the end of the stream to get the original - * audio without any trailing padding. - */ - int trailing_padding; - /** - * Audio only. Number of samples to skip after a discontinuity. - */ - int seek_preroll; -} AVCodecParameters; - -/** - * Allocate a new AVCodecParameters and set its fields to default values - * (unknown/invalid/0). The returned struct must be freed with - * avcodec_parameters_free(). - */ -AVCodecParameters *avcodec_parameters_alloc(void); - -/** - * Free an AVCodecParameters instance and everything associated with it and - * write NULL to the supplied pointer. - */ -void avcodec_parameters_free(AVCodecParameters **par); - -/** - * Copy the contents of src to dst. Any allocated fields in dst are freed and - * replaced with newly allocated duplicates of the corresponding fields in src. - * - * @return >= 0 on success, a negative AVERROR code on failure. - */ -int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src); - - -/** - * @} - */ - -#endif // AVCODEC_CODEC_PAR_H diff --git a/prebuilts/aarch64/include/libavcodec/d3d11va.h b/prebuilts/aarch64/include/libavcodec/d3d11va.h deleted file mode 100644 index 6816b6c..0000000 --- a/prebuilts/aarch64/include/libavcodec/d3d11va.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Direct3D11 HW acceleration - * - * copyright (c) 2009 Laurent Aimar - * copyright (c) 2015 Steve Lhomme - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_D3D11VA_H -#define AVCODEC_D3D11VA_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_d3d11va - * Public libavcodec D3D11VA header. - */ - -#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0602 -#endif - -#include -#include - -/** - * @defgroup lavc_codec_hwaccel_d3d11va Direct3D11 - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for Direct3D11 and old UVD/UVD+ ATI video cards -#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for Direct3D11 and old Intel GPUs with ClearVideo interface - -/** - * This structure is used to provides the necessary configurations and data - * to the Direct3D11 FFmpeg HWAccel implementation. - * - * The application must make it available as AVCodecContext.hwaccel_context. - * - * Use av_d3d11va_alloc_context() exclusively to allocate an AVD3D11VAContext. - */ -typedef struct AVD3D11VAContext { - /** - * D3D11 decoder object - */ - ID3D11VideoDecoder *decoder; - - /** - * D3D11 VideoContext - */ - ID3D11VideoContext *video_context; - - /** - * D3D11 configuration used to create the decoder - */ - D3D11_VIDEO_DECODER_CONFIG *cfg; - - /** - * The number of surface in the surface array - */ - unsigned surface_count; - - /** - * The array of Direct3D surfaces used to create the decoder - */ - ID3D11VideoDecoderOutputView **surface; - - /** - * A bit field configuring the workarounds needed for using the decoder - */ - uint64_t workaround; - - /** - * Private to the FFmpeg AVHWAccel implementation - */ - unsigned report_id; - - /** - * Mutex to access video_context - */ - HANDLE context_mutex; -} AVD3D11VAContext; - -/** - * Allocate an AVD3D11VAContext. - * - * @return Newly-allocated AVD3D11VAContext or NULL on failure. - */ -AVD3D11VAContext *av_d3d11va_alloc_context(void); - -/** - * @} - */ - -#endif /* AVCODEC_D3D11VA_H */ diff --git a/prebuilts/aarch64/include/libavcodec/dirac.h b/prebuilts/aarch64/include/libavcodec/dirac.h deleted file mode 100644 index e6d9d34..0000000 --- a/prebuilts/aarch64/include/libavcodec/dirac.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2007 Marco Gerards - * Copyright (C) 2009 David Conrad - * Copyright (C) 2011 Jordi Ortiz - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DIRAC_H -#define AVCODEC_DIRAC_H - -/** - * @file - * Interface to Dirac Decoder/Encoder - * @author Marco Gerards - * @author David Conrad - * @author Jordi Ortiz - */ - -#include "avcodec.h" - -/** - * The spec limits the number of wavelet decompositions to 4 for both - * level 1 (VC-2) and 128 (long-gop default). - * 5 decompositions is the maximum before >16-bit buffers are needed. - * Schroedinger allows this for DD 9,7 and 13,7 wavelets only, limiting - * the others to 4 decompositions (or 3 for the fidelity filter). - * - * We use this instead of MAX_DECOMPOSITIONS to save some memory. - */ -#define MAX_DWT_LEVELS 5 - -/** - * Parse code values: - * - * Dirac Specification -> - * 9.6.1 Table 9.1 - * - * VC-2 Specification -> - * 10.4.1 Table 10.1 - */ - -enum DiracParseCodes { - DIRAC_PCODE_SEQ_HEADER = 0x00, - DIRAC_PCODE_END_SEQ = 0x10, - DIRAC_PCODE_AUX = 0x20, - DIRAC_PCODE_PAD = 0x30, - DIRAC_PCODE_PICTURE_CODED = 0x08, - DIRAC_PCODE_PICTURE_RAW = 0x48, - DIRAC_PCODE_PICTURE_LOW_DEL = 0xC8, - DIRAC_PCODE_PICTURE_HQ = 0xE8, - DIRAC_PCODE_INTER_NOREF_CO1 = 0x0A, - DIRAC_PCODE_INTER_NOREF_CO2 = 0x09, - DIRAC_PCODE_INTER_REF_CO1 = 0x0D, - DIRAC_PCODE_INTER_REF_CO2 = 0x0E, - DIRAC_PCODE_INTRA_REF_CO = 0x0C, - DIRAC_PCODE_INTRA_REF_RAW = 0x4C, - DIRAC_PCODE_INTRA_REF_PICT = 0xCC, - DIRAC_PCODE_MAGIC = 0x42424344, -}; - -typedef struct DiracVersionInfo { - int major; - int minor; -} DiracVersionInfo; - -typedef struct AVDiracSeqHeader { - unsigned width; - unsigned height; - uint8_t chroma_format; ///< 0: 444 1: 422 2: 420 - - uint8_t interlaced; - uint8_t top_field_first; - - uint8_t frame_rate_index; ///< index into dirac_frame_rate[] - uint8_t aspect_ratio_index; ///< index into dirac_aspect_ratio[] - - uint16_t clean_width; - uint16_t clean_height; - uint16_t clean_left_offset; - uint16_t clean_right_offset; - - uint8_t pixel_range_index; ///< index into dirac_pixel_range_presets[] - uint8_t color_spec_index; ///< index into dirac_color_spec_presets[] - - int profile; - int level; - - AVRational framerate; - AVRational sample_aspect_ratio; - - enum AVPixelFormat pix_fmt; - enum AVColorRange color_range; - enum AVColorPrimaries color_primaries; - enum AVColorTransferCharacteristic color_trc; - enum AVColorSpace colorspace; - - DiracVersionInfo version; - int bit_depth; -} AVDiracSeqHeader; - -/** - * Parse a Dirac sequence header. - * - * @param dsh this function will allocate and fill an AVDiracSeqHeader struct - * and write it into this pointer. The caller must free it with - * av_free(). - * @param buf the data buffer - * @param buf_size the size of the data buffer in bytes - * @param log_ctx if non-NULL, this function will log errors here - * @return 0 on success, a negative AVERROR code on failure - */ -int av_dirac_parse_sequence_header(AVDiracSeqHeader **dsh, - const uint8_t *buf, size_t buf_size, - void *log_ctx); - -#endif /* AVCODEC_DIRAC_H */ diff --git a/prebuilts/aarch64/include/libavcodec/dv_profile.h b/prebuilts/aarch64/include/libavcodec/dv_profile.h deleted file mode 100644 index 9380a66..0000000 --- a/prebuilts/aarch64/include/libavcodec/dv_profile.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DV_PROFILE_H -#define AVCODEC_DV_PROFILE_H - -#include - -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" -#include "avcodec.h" - -/* minimum number of bytes to read from a DV stream in order to - * determine the profile */ -#define DV_PROFILE_BYTES (6 * 80) /* 6 DIF blocks */ - - -/* - * AVDVProfile is used to express the differences between various - * DV flavors. For now it's primarily used for differentiating - * 525/60 and 625/50, but the plans are to use it for various - * DV specs as well (e.g. SMPTE314M vs. IEC 61834). - */ -typedef struct AVDVProfile { - int dsf; /* value of the dsf in the DV header */ - int video_stype; /* stype for VAUX source pack */ - int frame_size; /* total size of one frame in bytes */ - int difseg_size; /* number of DIF segments per DIF channel */ - int n_difchan; /* number of DIF channels per frame */ - AVRational time_base; /* 1/framerate */ - int ltc_divisor; /* FPS from the LTS standpoint */ - int height; /* picture height in pixels */ - int width; /* picture width in pixels */ - AVRational sar[2]; /* sample aspect ratios for 4:3 and 16:9 */ - enum AVPixelFormat pix_fmt; /* picture pixel format */ - int bpm; /* blocks per macroblock */ - const uint8_t *block_sizes; /* AC block sizes, in bits */ - int audio_stride; /* size of audio_shuffle table */ - int audio_min_samples[3]; /* min amount of audio samples */ - /* for 48kHz, 44.1kHz and 32kHz */ - int audio_samples_dist[5]; /* how many samples are supposed to be */ - /* in each frame in a 5 frames window */ - const uint8_t (*audio_shuffle)[9]; /* PCM shuffling table */ -} AVDVProfile; - -/** - * Get a DV profile for the provided compressed frame. - * - * @param sys the profile used for the previous frame, may be NULL - * @param frame the compressed data buffer - * @param buf_size size of the buffer in bytes - * @return the DV profile for the supplied data or NULL on failure - */ -const AVDVProfile *av_dv_frame_profile(const AVDVProfile *sys, - const uint8_t *frame, unsigned buf_size); - -/** - * Get a DV profile for the provided stream parameters. - */ -const AVDVProfile *av_dv_codec_profile(int width, int height, enum AVPixelFormat pix_fmt); - -/** - * Get a DV profile for the provided stream parameters. - * The frame rate is used as a best-effort parameter. - */ -const AVDVProfile *av_dv_codec_profile2(int width, int height, enum AVPixelFormat pix_fmt, AVRational frame_rate); - -#endif /* AVCODEC_DV_PROFILE_H */ diff --git a/prebuilts/aarch64/include/libavcodec/dxva2.h b/prebuilts/aarch64/include/libavcodec/dxva2.h deleted file mode 100644 index 22c9399..0000000 --- a/prebuilts/aarch64/include/libavcodec/dxva2.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * DXVA2 HW acceleration - * - * copyright (c) 2009 Laurent Aimar - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DXVA2_H -#define AVCODEC_DXVA2_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_dxva2 - * Public libavcodec DXVA2 header. - */ - -#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0602 -#endif - -#include -#include -#include - -/** - * @defgroup lavc_codec_hwaccel_dxva2 DXVA2 - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards -#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for DXVA2 and old Intel GPUs with ClearVideo interface - -/** - * This structure is used to provides the necessary configurations and data - * to the DXVA2 FFmpeg HWAccel implementation. - * - * The application must make it available as AVCodecContext.hwaccel_context. - */ -struct dxva_context { - /** - * DXVA2 decoder object - */ - IDirectXVideoDecoder *decoder; - - /** - * DXVA2 configuration used to create the decoder - */ - const DXVA2_ConfigPictureDecode *cfg; - - /** - * The number of surface in the surface array - */ - unsigned surface_count; - - /** - * The array of Direct3D surfaces used to create the decoder - */ - LPDIRECT3DSURFACE9 *surface; - - /** - * A bit field configuring the workarounds needed for using the decoder - */ - uint64_t workaround; - - /** - * Private to the FFmpeg AVHWAccel implementation - */ - unsigned report_id; -}; - -/** - * @} - */ - -#endif /* AVCODEC_DXVA2_H */ diff --git a/prebuilts/aarch64/include/libavcodec/jni.h b/prebuilts/aarch64/include/libavcodec/jni.h deleted file mode 100644 index dd99e92..0000000 --- a/prebuilts/aarch64/include/libavcodec/jni.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * JNI public API functions - * - * Copyright (c) 2015-2016 Matthieu Bouron - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_JNI_H -#define AVCODEC_JNI_H - -/* - * Manually set a Java virtual machine which will be used to retrieve the JNI - * environment. Once a Java VM is set it cannot be changed afterwards, meaning - * you can call multiple times av_jni_set_java_vm with the same Java VM pointer - * however it will error out if you try to set a different Java VM. - * - * @param vm Java virtual machine - * @param log_ctx context used for logging, can be NULL - * @return 0 on success, < 0 otherwise - */ -int av_jni_set_java_vm(void *vm, void *log_ctx); - -/* - * Get the Java virtual machine which has been set with av_jni_set_java_vm. - * - * @param vm Java virtual machine - * @return a pointer to the Java virtual machine - */ -void *av_jni_get_java_vm(void *log_ctx); - -#endif /* AVCODEC_JNI_H */ diff --git a/prebuilts/aarch64/include/libavcodec/mediacodec.h b/prebuilts/aarch64/include/libavcodec/mediacodec.h deleted file mode 100644 index 4c8545d..0000000 --- a/prebuilts/aarch64/include/libavcodec/mediacodec.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Android MediaCodec public API - * - * Copyright (c) 2016 Matthieu Bouron - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_MEDIACODEC_H -#define AVCODEC_MEDIACODEC_H - -#include "libavcodec/avcodec.h" - -/** - * This structure holds a reference to a android/view/Surface object that will - * be used as output by the decoder. - * - */ -typedef struct AVMediaCodecContext { - - /** - * android/view/Surface object reference. - */ - void *surface; - -} AVMediaCodecContext; - -/** - * Allocate and initialize a MediaCodec context. - * - * When decoding with MediaCodec is finished, the caller must free the - * MediaCodec context with av_mediacodec_default_free. - * - * @return a pointer to a newly allocated AVMediaCodecContext on success, NULL otherwise - */ -AVMediaCodecContext *av_mediacodec_alloc_context(void); - -/** - * Convenience function that sets up the MediaCodec context. - * - * @param avctx codec context - * @param ctx MediaCodec context to initialize - * @param surface reference to an android/view/Surface - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_default_init(AVCodecContext *avctx, AVMediaCodecContext *ctx, void *surface); - -/** - * This function must be called to free the MediaCodec context initialized with - * av_mediacodec_default_init(). - * - * @param avctx codec context - */ -void av_mediacodec_default_free(AVCodecContext *avctx); - -/** - * Opaque structure representing a MediaCodec buffer to render. - */ -typedef struct MediaCodecBuffer AVMediaCodecBuffer; - -/** - * Release a MediaCodec buffer and render it to the surface that is associated - * with the decoder. This function should only be called once on a given - * buffer, once released the underlying buffer returns to the codec, thus - * subsequent calls to this function will have no effect. - * - * @param buffer the buffer to render - * @param render 1 to release and render the buffer to the surface or 0 to - * discard the buffer - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_release_buffer(AVMediaCodecBuffer *buffer, int render); - -/** - * Release a MediaCodec buffer and render it at the given time to the surface - * that is associated with the decoder. The timestamp must be within one second - * of the current java/lang/System#nanoTime() (which is implemented using - * CLOCK_MONOTONIC on Android). See the Android MediaCodec documentation - * of android/media/MediaCodec#releaseOutputBuffer(int,long) for more details. - * - * @param buffer the buffer to render - * @param time timestamp in nanoseconds of when to render the buffer - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_render_buffer_at_time(AVMediaCodecBuffer *buffer, int64_t time); - -#endif /* AVCODEC_MEDIACODEC_H */ diff --git a/prebuilts/aarch64/include/libavcodec/packet.h b/prebuilts/aarch64/include/libavcodec/packet.h deleted file mode 100644 index ca18ae6..0000000 --- a/prebuilts/aarch64/include/libavcodec/packet.h +++ /dev/null @@ -1,774 +0,0 @@ -/* - * AVPacket public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_PACKET_H -#define AVCODEC_PACKET_H - -#include -#include - -#include "libavutil/attributes.h" -#include "libavutil/buffer.h" -#include "libavutil/dict.h" -#include "libavutil/rational.h" - -#include "libavcodec/version.h" - -/** - * @defgroup lavc_packet AVPacket - * - * Types and functions for working with AVPacket. - * @{ - */ -enum AVPacketSideDataType { - /** - * An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE - * bytes worth of palette. This side data signals that a new palette is - * present. - */ - AV_PKT_DATA_PALETTE, - - /** - * The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format - * that the extradata buffer was changed and the receiving side should - * act upon it appropriately. The new extradata is embedded in the side - * data buffer and should be immediately used for processing the current - * frame or packet. - */ - AV_PKT_DATA_NEW_EXTRADATA, - - /** - * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: - * @code - * u32le param_flags - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) - * s32le channel_count - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) - * u64le channel_layout - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) - * s32le sample_rate - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) - * s32le width - * s32le height - * @endcode - */ - AV_PKT_DATA_PARAM_CHANGE, - - /** - * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of - * structures with info about macroblocks relevant to splitting the - * packet into smaller packets on macroblock edges (e.g. as for RFC 2190). - * That is, it does not necessarily contain info about all macroblocks, - * as long as the distance between macroblocks in the info is smaller - * than the target payload size. - * Each MB info structure is 12 bytes, and is laid out as follows: - * @code - * u32le bit offset from the start of the packet - * u8 current quantizer at the start of the macroblock - * u8 GOB number - * u16le macroblock address within the GOB - * u8 horizontal MV predictor - * u8 vertical MV predictor - * u8 horizontal MV predictor for block number 3 - * u8 vertical MV predictor for block number 3 - * @endcode - */ - AV_PKT_DATA_H263_MB_INFO, - - /** - * This side data should be associated with an audio stream and contains - * ReplayGain information in form of the AVReplayGain struct. - */ - AV_PKT_DATA_REPLAYGAIN, - - /** - * This side data contains a 3x3 transformation matrix describing an affine - * transformation that needs to be applied to the decoded video frames for - * correct presentation. - * - * See libavutil/display.h for a detailed description of the data. - */ - AV_PKT_DATA_DISPLAYMATRIX, - - /** - * This side data should be associated with a video stream and contains - * Stereoscopic 3D information in form of the AVStereo3D struct. - */ - AV_PKT_DATA_STEREO3D, - - /** - * This side data should be associated with an audio stream and corresponds - * to enum AVAudioServiceType. - */ - AV_PKT_DATA_AUDIO_SERVICE_TYPE, - - /** - * This side data contains quality related information from the encoder. - * @code - * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad). - * u8 picture type - * u8 error count - * u16 reserved - * u64le[error count] sum of squared differences between encoder in and output - * @endcode - */ - AV_PKT_DATA_QUALITY_STATS, - - /** - * This side data contains an integer value representing the stream index - * of a "fallback" track. A fallback track indicates an alternate - * track to use when the current track can not be decoded for some reason. - * e.g. no decoder available for codec. - */ - AV_PKT_DATA_FALLBACK_TRACK, - - /** - * This side data corresponds to the AVCPBProperties struct. - */ - AV_PKT_DATA_CPB_PROPERTIES, - - /** - * Recommmends skipping the specified number of samples - * @code - * u32le number of samples to skip from start of this packet - * u32le number of samples to skip from end of this packet - * u8 reason for start skip - * u8 reason for end skip (0=padding silence, 1=convergence) - * @endcode - */ - AV_PKT_DATA_SKIP_SAMPLES, - - /** - * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that - * the packet may contain "dual mono" audio specific to Japanese DTV - * and if it is true, recommends only the selected channel to be used. - * @code - * u8 selected channels (0=mail/left, 1=sub/right, 2=both) - * @endcode - */ - AV_PKT_DATA_JP_DUALMONO, - - /** - * A list of zero terminated key/value strings. There is no end marker for - * the list, so it is required to rely on the side data size to stop. - */ - AV_PKT_DATA_STRINGS_METADATA, - - /** - * Subtitle event position - * @code - * u32le x1 - * u32le y1 - * u32le x2 - * u32le y2 - * @endcode - */ - AV_PKT_DATA_SUBTITLE_POSITION, - - /** - * Data found in BlockAdditional element of matroska container. There is - * no end marker for the data, so it is required to rely on the side data - * size to recognize the end. 8 byte id (as found in BlockAddId) followed - * by data. - */ - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, - - /** - * The optional first identifier line of a WebVTT cue. - */ - AV_PKT_DATA_WEBVTT_IDENTIFIER, - - /** - * The optional settings (rendering instructions) that immediately - * follow the timestamp specifier of a WebVTT cue. - */ - AV_PKT_DATA_WEBVTT_SETTINGS, - - /** - * A list of zero terminated key/value strings. There is no end marker for - * the list, so it is required to rely on the side data size to stop. This - * side data includes updated metadata which appeared in the stream. - */ - AV_PKT_DATA_METADATA_UPDATE, - - /** - * MPEGTS stream ID as uint8_t, this is required to pass the stream ID - * information from the demuxer to the corresponding muxer. - */ - AV_PKT_DATA_MPEGTS_STREAM_ID, - - /** - * Mastering display metadata (based on SMPTE-2086:2014). This metadata - * should be associated with a video stream and contains data in the form - * of the AVMasteringDisplayMetadata struct. - */ - AV_PKT_DATA_MASTERING_DISPLAY_METADATA, - - /** - * This side data should be associated with a video stream and corresponds - * to the AVSphericalMapping structure. - */ - AV_PKT_DATA_SPHERICAL, - - /** - * Content light level (based on CTA-861.3). This metadata should be - * associated with a video stream and contains data in the form of the - * AVContentLightMetadata struct. - */ - AV_PKT_DATA_CONTENT_LIGHT_LEVEL, - - /** - * ATSC A53 Part 4 Closed Captions. This metadata should be associated with - * a video stream. A53 CC bitstream is stored as uint8_t in AVPacketSideData.data. - * The number of bytes of CC data is AVPacketSideData.size. - */ - AV_PKT_DATA_A53_CC, - - /** - * This side data is encryption initialization data. - * The format is not part of ABI, use av_encryption_init_info_* methods to - * access. - */ - AV_PKT_DATA_ENCRYPTION_INIT_INFO, - - /** - * This side data contains encryption info for how to decrypt the packet. - * The format is not part of ABI, use av_encryption_info_* methods to access. - */ - AV_PKT_DATA_ENCRYPTION_INFO, - - /** - * Active Format Description data consisting of a single byte as specified - * in ETSI TS 101 154 using AVActiveFormatDescription enum. - */ - AV_PKT_DATA_AFD, - - /** - * Producer Reference Time data corresponding to the AVProducerReferenceTime struct, - * usually exported by some encoders (on demand through the prft flag set in the - * AVCodecContext export_side_data field). - */ - AV_PKT_DATA_PRFT, - - /** - * ICC profile data consisting of an opaque octet buffer following the - * format described by ISO 15076-1. - */ - AV_PKT_DATA_ICC_PROFILE, - - /** - * DOVI configuration - * ref: - * dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2, section 2.2 - * dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2, section 3.3 - * Tags are stored in struct AVDOVIDecoderConfigurationRecord. - */ - AV_PKT_DATA_DOVI_CONF, - - /** - * Timecode which conforms to SMPTE ST 12-1:2014. The data is an array of 4 uint32_t - * where the first uint32_t describes how many (1-3) of the other timecodes are used. - * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() - * function in libavutil/timecode.h. - */ - AV_PKT_DATA_S12M_TIMECODE, - - /** - * The number of side data types. - * This is not part of the public API/ABI in the sense that it may - * change when new side data types are added. - * This must stay the last enum value. - * If its value becomes huge, some code using it - * needs to be updated as it assumes it to be smaller than other limits. - */ - AV_PKT_DATA_NB -}; - -#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED - -typedef struct AVPacketSideData { - uint8_t *data; -#if FF_API_BUFFER_SIZE_T - int size; -#else - size_t size; -#endif - enum AVPacketSideDataType type; -} AVPacketSideData; - -/** - * This structure stores compressed data. It is typically exported by demuxers - * and then passed as input to decoders, or received as output from encoders and - * then passed to muxers. - * - * For video, it should typically contain one compressed frame. For audio it may - * contain several compressed frames. Encoders are allowed to output empty - * packets, with no compressed data, containing only side data - * (e.g. to update some stream parameters at the end of encoding). - * - * The semantics of data ownership depends on the buf field. - * If it is set, the packet data is dynamically allocated and is - * valid indefinitely until a call to av_packet_unref() reduces the - * reference count to 0. - * - * If the buf field is not set av_packet_ref() would make a copy instead - * of increasing the reference count. - * - * The side data is always allocated with av_malloc(), copied by - * av_packet_ref() and freed by av_packet_unref(). - * - * sizeof(AVPacket) being a part of the public ABI is deprecated. once - * av_init_packet() is removed, new packets will only be able to be allocated - * with av_packet_alloc(), and new fields may be added to the end of the struct - * with a minor bump. - * - * @see av_packet_alloc - * @see av_packet_ref - * @see av_packet_unref - */ -typedef struct AVPacket { - /** - * A reference to the reference-counted buffer where the packet data is - * stored. - * May be NULL, then the packet data is not reference-counted. - */ - AVBufferRef *buf; - /** - * Presentation timestamp in AVStream->time_base units; the time at which - * the decompressed packet will be presented to the user. - * Can be AV_NOPTS_VALUE if it is not stored in the file. - * pts MUST be larger or equal to dts as presentation cannot happen before - * decompression, unless one wants to view hex dumps. Some formats misuse - * the terms dts and pts/cts to mean something different. Such timestamps - * must be converted to true pts/dts before they are stored in AVPacket. - */ - int64_t pts; - /** - * Decompression timestamp in AVStream->time_base units; the time at which - * the packet is decompressed. - * Can be AV_NOPTS_VALUE if it is not stored in the file. - */ - int64_t dts; - uint8_t *data; - int size; - int stream_index; - /** - * A combination of AV_PKT_FLAG values - */ - int flags; - /** - * Additional packet data that can be provided by the container. - * Packet can contain several types of side information. - */ - AVPacketSideData *side_data; - int side_data_elems; - - /** - * Duration of this packet in AVStream->time_base units, 0 if unknown. - * Equals next_pts - this_pts in presentation order. - */ - int64_t duration; - - int64_t pos; ///< byte position in stream, -1 if unknown - -#if FF_API_CONVERGENCE_DURATION - /** - * @deprecated Same as the duration field, but as int64_t. This was required - * for Matroska subtitles, whose duration values could overflow when the - * duration field was still an int. - */ - attribute_deprecated - int64_t convergence_duration; -#endif -} AVPacket; - -#if FF_API_INIT_PACKET -attribute_deprecated -typedef struct AVPacketList { - AVPacket pkt; - struct AVPacketList *next; -} AVPacketList; -#endif - -#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe -#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted -/** - * Flag is used to discard packets which are required to maintain valid - * decoder state but are not required for output and should be dropped - * after decoding. - **/ -#define AV_PKT_FLAG_DISCARD 0x0004 -/** - * The packet comes from a trusted source. - * - * Otherwise-unsafe constructs such as arbitrary pointers to data - * outside the packet may be followed. - */ -#define AV_PKT_FLAG_TRUSTED 0x0008 -/** - * Flag is used to indicate packets that contain frames that can - * be discarded by the decoder. I.e. Non-reference frames. - */ -#define AV_PKT_FLAG_DISPOSABLE 0x0010 - -enum AVSideDataParamChangeFlags { - AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001, - AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002, - AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004, - AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008, -}; - -/** - * Allocate an AVPacket and set its fields to default values. The resulting - * struct must be freed using av_packet_free(). - * - * @return An AVPacket filled with default values or NULL on failure. - * - * @note this only allocates the AVPacket itself, not the data buffers. Those - * must be allocated through other means such as av_new_packet. - * - * @see av_new_packet - */ -AVPacket *av_packet_alloc(void); - -/** - * Create a new packet that references the same data as src. - * - * This is a shortcut for av_packet_alloc()+av_packet_ref(). - * - * @return newly created AVPacket on success, NULL on error. - * - * @see av_packet_alloc - * @see av_packet_ref - */ -AVPacket *av_packet_clone(const AVPacket *src); - -/** - * Free the packet, if the packet is reference counted, it will be - * unreferenced first. - * - * @param pkt packet to be freed. The pointer will be set to NULL. - * @note passing NULL is a no-op. - */ -void av_packet_free(AVPacket **pkt); - -#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 - -/** - * Allocate the payload of a packet and initialize its fields with - * default values. - * - * @param pkt packet - * @param size wanted payload size - * @return 0 if OK, AVERROR_xxx otherwise - */ -int av_new_packet(AVPacket *pkt, int size); - -/** - * Reduce packet size, correctly zeroing padding - * - * @param pkt packet - * @param size new size - */ -void av_shrink_packet(AVPacket *pkt, int size); - -/** - * Increase packet size, correctly zeroing padding - * - * @param pkt packet - * @param grow_by number of bytes by which to increase the size of the packet - */ -int av_grow_packet(AVPacket *pkt, int grow_by); - -/** - * Initialize a reference-counted packet from av_malloc()ed data. - * - * @param pkt packet to be initialized. This function will set the data, size, - * and buf fields, all others are left untouched. - * @param data Data allocated by av_malloc() to be used as packet data. If this - * function returns successfully, the data is owned by the underlying AVBuffer. - * The caller may not access the data through other means. - * @param size size of data in bytes, without the padding. I.e. the full buffer - * size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE. - * - * @return 0 on success, a negative AVERROR on error - */ -int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size); - -#if FF_API_AVPACKET_OLD_API -/** - * @warning This is a hack - the packet memory allocation stuff is broken. The - * packet is allocated if it was not really allocated. - * - * @deprecated Use av_packet_ref or av_packet_make_refcounted - */ -attribute_deprecated -int av_dup_packet(AVPacket *pkt); -/** - * Copy packet, including contents - * - * @return 0 on success, negative AVERROR on fail - * - * @deprecated Use av_packet_ref - */ -attribute_deprecated -int av_copy_packet(AVPacket *dst, const AVPacket *src); - -/** - * Copy packet side data - * - * @return 0 on success, negative AVERROR on fail - * - * @deprecated Use av_packet_copy_props - */ -attribute_deprecated -int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src); - -/** - * Free a packet. - * - * @deprecated Use av_packet_unref - * - * @param pkt packet to free - */ -attribute_deprecated -void av_free_packet(AVPacket *pkt); -#endif -/** - * Allocate new information of a packet. - * - * @param pkt packet - * @param type side information type - * @param size side information size - * @return pointer to fresh allocated data or NULL otherwise - */ -uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, -#if FF_API_BUFFER_SIZE_T - int size); -#else - size_t size); -#endif - -/** - * Wrap an existing array as a packet side data. - * - * @param pkt packet - * @param type side information type - * @param data the side data array. It must be allocated with the av_malloc() - * family of functions. The ownership of the data is transferred to - * pkt. - * @param size side information size - * @return a non-negative number on success, a negative AVERROR code on - * failure. On failure, the packet is unchanged and the data remains - * owned by the caller. - */ -int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - uint8_t *data, size_t size); - -/** - * Shrink the already allocated side data buffer - * - * @param pkt packet - * @param type side information type - * @param size new side information size - * @return 0 on success, < 0 on failure - */ -int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, -#if FF_API_BUFFER_SIZE_T - int size); -#else - size_t size); -#endif - -/** - * Get side information from packet. - * - * @param pkt packet - * @param type desired side information type - * @param size If supplied, *size will be set to the size of the side data - * or to zero if the desired side data is not present. - * @return pointer to data if present or NULL otherwise - */ -uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, -#if FF_API_BUFFER_SIZE_T - int *size); -#else - size_t *size); -#endif - -#if FF_API_MERGE_SD_API -attribute_deprecated -int av_packet_merge_side_data(AVPacket *pkt); - -attribute_deprecated -int av_packet_split_side_data(AVPacket *pkt); -#endif - -const char *av_packet_side_data_name(enum AVPacketSideDataType type); - -/** - * Pack a dictionary for use in side_data. - * - * @param dict The dictionary to pack. - * @param size pointer to store the size of the returned data - * @return pointer to data if successful, NULL otherwise - */ -#if FF_API_BUFFER_SIZE_T -uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size); -#else -uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size); -#endif -/** - * Unpack a dictionary from side_data. - * - * @param data data from side_data - * @param size size of the data - * @param dict the metadata storage dictionary - * @return 0 on success, < 0 on failure - */ -#if FF_API_BUFFER_SIZE_T -int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict); -#else -int av_packet_unpack_dictionary(const uint8_t *data, size_t size, - AVDictionary **dict); -#endif - -/** - * Convenience function to free all the side data stored. - * All the other fields stay untouched. - * - * @param pkt packet - */ -void av_packet_free_side_data(AVPacket *pkt); - -/** - * Setup a new reference to the data described by a given packet - * - * If src is reference-counted, setup dst as a new reference to the - * buffer in src. Otherwise allocate a new buffer in dst and copy the - * data from src into it. - * - * All the other fields are copied from src. - * - * @see av_packet_unref - * - * @param dst Destination packet. Will be completely overwritten. - * @param src Source packet - * - * @return 0 on success, a negative AVERROR on error. On error, dst - * will be blank (as if returned by av_packet_alloc()). - */ -int av_packet_ref(AVPacket *dst, const AVPacket *src); - -/** - * Wipe the packet. - * - * Unreference the buffer referenced by the packet and reset the - * remaining packet fields to their default values. - * - * @param pkt The packet to be unreferenced. - */ -void av_packet_unref(AVPacket *pkt); - -/** - * Move every field in src to dst and reset src. - * - * @see av_packet_unref - * - * @param src Source packet, will be reset - * @param dst Destination packet - */ -void av_packet_move_ref(AVPacket *dst, AVPacket *src); - -/** - * Copy only "properties" fields from src to dst. - * - * Properties for the purpose of this function are all the fields - * beside those related to the packet data (buf, data, size) - * - * @param dst Destination packet - * @param src Source packet - * - * @return 0 on success AVERROR on failure. - */ -int av_packet_copy_props(AVPacket *dst, const AVPacket *src); - -/** - * Ensure the data described by a given packet is reference counted. - * - * @note This function does not ensure that the reference will be writable. - * Use av_packet_make_writable instead for that purpose. - * - * @see av_packet_ref - * @see av_packet_make_writable - * - * @param pkt packet whose data should be made reference counted. - * - * @return 0 on success, a negative AVERROR on error. On failure, the - * packet is unchanged. - */ -int av_packet_make_refcounted(AVPacket *pkt); - -/** - * Create a writable reference for the data described by a given packet, - * avoiding data copy if possible. - * - * @param pkt Packet whose data should be made writable. - * - * @return 0 on success, a negative AVERROR on failure. On failure, the - * packet is unchanged. - */ -int av_packet_make_writable(AVPacket *pkt); - -/** - * Convert valid timing fields (timestamps / durations) in a packet from one - * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be - * ignored. - * - * @param pkt packet on which the conversion will be performed - * @param tb_src source timebase, in which the timing fields in pkt are - * expressed - * @param tb_dst destination timebase, to which the timing fields will be - * converted - */ -void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst); - -/** - * @} - */ - -#endif // AVCODEC_PACKET_H diff --git a/prebuilts/aarch64/include/libavcodec/qsv.h b/prebuilts/aarch64/include/libavcodec/qsv.h deleted file mode 100644 index b77158e..0000000 --- a/prebuilts/aarch64/include/libavcodec/qsv.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Intel MediaSDK QSV public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_QSV_H -#define AVCODEC_QSV_H - -#include - -#include "libavutil/buffer.h" - -/** - * This struct is used for communicating QSV parameters between libavcodec and - * the caller. It is managed by the caller and must be assigned to - * AVCodecContext.hwaccel_context. - * - decoding: hwaccel_context must be set on return from the get_format() - * callback - * - encoding: hwaccel_context must be set before avcodec_open2() - */ -typedef struct AVQSVContext { - /** - * If non-NULL, the session to use for encoding or decoding. - * Otherwise, libavcodec will try to create an internal session. - */ - mfxSession session; - - /** - * The IO pattern to use. - */ - int iopattern; - - /** - * Extra buffers to pass to encoder or decoder initialization. - */ - mfxExtBuffer **ext_buffers; - int nb_ext_buffers; - - /** - * Encoding only. If this field is set to non-zero by the caller, libavcodec - * will create an mfxExtOpaqueSurfaceAlloc extended buffer and pass it to - * the encoder initialization. This only makes sense if iopattern is also - * set to MFX_IOPATTERN_IN_OPAQUE_MEMORY. - * - * The number of allocated opaque surfaces will be the sum of the number - * required by the encoder and the user-provided value nb_opaque_surfaces. - * The array of the opaque surfaces will be exported to the caller through - * the opaque_surfaces field. - */ - int opaque_alloc; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. Before - * calling avcodec_open2(), the caller should set this field to the number - * of extra opaque surfaces to allocate beyond what is required by the - * encoder. - * - * On return from avcodec_open2(), this field will be set by libavcodec to - * the total number of allocated opaque surfaces. - */ - int nb_opaque_surfaces; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. On return - * from avcodec_open2(), this field will be used by libavcodec to export the - * array of the allocated opaque surfaces to the caller, so they can be - * passed to other parts of the pipeline. - * - * The buffer reference exported here is owned and managed by libavcodec, - * the callers should make their own reference with av_buffer_ref() and free - * it with av_buffer_unref() when it is no longer needed. - * - * The buffer data is an nb_opaque_surfaces-sized array of mfxFrameSurface1. - */ - AVBufferRef *opaque_surfaces; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. On return - * from avcodec_open2(), this field will be set to the surface type used in - * the opaque allocation request. - */ - int opaque_alloc_type; -} AVQSVContext; - -/** - * Allocate a new context. - * - * It must be freed by the caller with av_free(). - */ -AVQSVContext *av_qsv_alloc_context(void); - -#endif /* AVCODEC_QSV_H */ diff --git a/prebuilts/aarch64/include/libavcodec/vaapi.h b/prebuilts/aarch64/include/libavcodec/vaapi.h deleted file mode 100644 index 2cf7da5..0000000 --- a/prebuilts/aarch64/include/libavcodec/vaapi.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Video Acceleration API (shared data between FFmpeg and the video player) - * HW decode acceleration for MPEG-2, MPEG-4, H.264 and VC-1 - * - * Copyright (C) 2008-2009 Splitted-Desktop Systems - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VAAPI_H -#define AVCODEC_VAAPI_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_vaapi - * Public libavcodec VA API header. - */ - -#include -#include "libavutil/attributes.h" -#include "version.h" - -#if FF_API_STRUCT_VAAPI_CONTEXT - -/** - * @defgroup lavc_codec_hwaccel_vaapi VA API Decoding - * @ingroup lavc_codec_hwaccel - * @{ - */ - -/** - * This structure is used to share data between the FFmpeg library and - * the client video application. - * This shall be zero-allocated and available as - * AVCodecContext.hwaccel_context. All user members can be set once - * during initialization or through each AVCodecContext.get_buffer() - * function call. In any case, they must be valid prior to calling - * decoding functions. - * - * Deprecated: use AVCodecContext.hw_frames_ctx instead. - */ -struct attribute_deprecated vaapi_context { - /** - * Window system dependent data - * - * - encoding: unused - * - decoding: Set by user - */ - void *display; - - /** - * Configuration ID - * - * - encoding: unused - * - decoding: Set by user - */ - uint32_t config_id; - - /** - * Context ID (video decode pipeline) - * - * - encoding: unused - * - decoding: Set by user - */ - uint32_t context_id; -}; - -/* @} */ - -#endif /* FF_API_STRUCT_VAAPI_CONTEXT */ - -#endif /* AVCODEC_VAAPI_H */ diff --git a/prebuilts/aarch64/include/libavcodec/vdpau.h b/prebuilts/aarch64/include/libavcodec/vdpau.h deleted file mode 100644 index 4d99943..0000000 --- a/prebuilts/aarch64/include/libavcodec/vdpau.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * The Video Decode and Presentation API for UNIX (VDPAU) is used for - * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1. - * - * Copyright (C) 2008 NVIDIA - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VDPAU_H -#define AVCODEC_VDPAU_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_vdpau - * Public libavcodec VDPAU header. - */ - - -/** - * @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer - * @ingroup lavc_codec_hwaccel - * - * VDPAU hardware acceleration has two modules - * - VDPAU decoding - * - VDPAU presentation - * - * The VDPAU decoding module parses all headers using FFmpeg - * parsing mechanisms and uses VDPAU for the actual decoding. - * - * As per the current implementation, the actual decoding - * and rendering (API calls) are done as part of the VDPAU - * presentation (vo_vdpau.c) module. - * - * @{ - */ - -#include - -#include "libavutil/avconfig.h" -#include "libavutil/attributes.h" - -#include "avcodec.h" -#include "version.h" - -struct AVCodecContext; -struct AVFrame; - -typedef int (*AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *, - const VdpPictureInfo *, uint32_t, - const VdpBitstreamBuffer *); - -/** - * This structure is used to share data between the libavcodec library and - * the client video application. - * The user shall allocate the structure via the av_alloc_vdpau_hwaccel - * function and make it available as - * AVCodecContext.hwaccel_context. Members can be set by the user once - * during initialization or through each AVCodecContext.get_buffer() - * function call. In any case, they must be valid prior to calling - * decoding functions. - * - * The size of this structure is not a part of the public ABI and must not - * be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an - * AVVDPAUContext. - */ -typedef struct AVVDPAUContext { - /** - * VDPAU decoder handle - * - * Set by user. - */ - VdpDecoder decoder; - - /** - * VDPAU decoder render callback - * - * Set by the user. - */ - VdpDecoderRender *render; - - AVVDPAU_Render2 render2; -} AVVDPAUContext; - -/** - * @brief allocation function for AVVDPAUContext - * - * Allows extending the struct without breaking API/ABI - */ -AVVDPAUContext *av_alloc_vdpaucontext(void); - -AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *); -void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2); - -/** - * Associate a VDPAU device with a codec context for hardware acceleration. - * This function is meant to be called from the get_format() codec callback, - * or earlier. It can also be called after avcodec_flush_buffers() to change - * the underlying VDPAU device mid-stream (e.g. to recover from non-transparent - * display preemption). - * - * @note get_format() must return AV_PIX_FMT_VDPAU if this function completes - * successfully. - * - * @param avctx decoding context whose get_format() callback is invoked - * @param device VDPAU device handle to use for hardware acceleration - * @param get_proc_address VDPAU device driver - * @param flags zero of more OR'd AV_HWACCEL_FLAG_* flags - * - * @return 0 on success, an AVERROR code on failure. - */ -int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device, - VdpGetProcAddress *get_proc_address, unsigned flags); - -/** - * Gets the parameters to create an adequate VDPAU video surface for the codec - * context using VDPAU hardware decoding acceleration. - * - * @note Behavior is undefined if the context was not successfully bound to a - * VDPAU device using av_vdpau_bind_context(). - * - * @param avctx the codec context being used for decoding the stream - * @param type storage space for the VDPAU video surface chroma type - * (or NULL to ignore) - * @param width storage space for the VDPAU video surface pixel width - * (or NULL to ignore) - * @param height storage space for the VDPAU video surface pixel height - * (or NULL to ignore) - * - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type, - uint32_t *width, uint32_t *height); - -/** - * Allocate an AVVDPAUContext. - * - * @return Newly-allocated AVVDPAUContext or NULL on failure. - */ -AVVDPAUContext *av_vdpau_alloc_context(void); - -#if FF_API_VDPAU_PROFILE -/** - * Get a decoder profile that should be used for initializing a VDPAU decoder. - * Should be called from the AVCodecContext.get_format() callback. - * - * @deprecated Use av_vdpau_bind_context() instead. - * - * @param avctx the codec context being used for decoding the stream - * @param profile a pointer into which the result will be written on success. - * The contents of profile are undefined if this function returns - * an error. - * - * @return 0 on success (non-negative), a negative AVERROR on failure. - */ -attribute_deprecated -int av_vdpau_get_profile(AVCodecContext *avctx, VdpDecoderProfile *profile); -#endif - -/* @}*/ - -#endif /* AVCODEC_VDPAU_H */ diff --git a/prebuilts/aarch64/include/libavcodec/version.h b/prebuilts/aarch64/include/libavcodec/version.h deleted file mode 100644 index cfdde46..0000000 --- a/prebuilts/aarch64/include/libavcodec/version.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VERSION_H -#define AVCODEC_VERSION_H - -/** - * @file - * @ingroup libavc - * Libavcodec version macros. - */ - -#include "libavutil/version.h" - -#define LIBAVCODEC_VERSION_MAJOR 58 -#define LIBAVCODEC_VERSION_MINOR 134 -#define LIBAVCODEC_VERSION_MICRO 100 - -#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ - LIBAVCODEC_VERSION_MINOR, \ - LIBAVCODEC_VERSION_MICRO) -#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \ - LIBAVCODEC_VERSION_MINOR, \ - LIBAVCODEC_VERSION_MICRO) -#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT - -#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - */ - -#ifndef FF_API_AVCTX_TIMEBASE -#define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CODED_FRAME -#define FF_API_CODED_FRAME (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_SIDEDATA_ONLY_PKT -#define FF_API_SIDEDATA_ONLY_PKT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_VDPAU_PROFILE -#define FF_API_VDPAU_PROFILE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CONVERGENCE_DURATION -#define FF_API_CONVERGENCE_DURATION (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVPICTURE -#define FF_API_AVPICTURE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVPACKET_OLD_API -#define FF_API_AVPACKET_OLD_API (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_RTP_CALLBACK -#define FF_API_RTP_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_VBV_DELAY -#define FF_API_VBV_DELAY (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CODER_TYPE -#define FF_API_CODER_TYPE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_STAT_BITS -#define FF_API_STAT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_PRIVATE_OPT -#define FF_API_PRIVATE_OPT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_ASS_TIMING -#define FF_API_ASS_TIMING (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_BSF -#define FF_API_OLD_BSF (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_COPY_CONTEXT -#define FF_API_COPY_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_GET_CONTEXT_DEFAULTS -#define FF_API_GET_CONTEXT_DEFAULTS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_NVENC_OLD_NAME -#define FF_API_NVENC_OLD_NAME (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_STRUCT_VAAPI_CONTEXT -#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_MERGE_SD_API -#define FF_API_MERGE_SD_API (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_TAG_STRING -#define FF_API_TAG_STRING (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_GETCHROMA -#define FF_API_GETCHROMA (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CODEC_GET_SET -#define FF_API_CODEC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_USER_VISIBLE_AVHWACCEL -#define FF_API_USER_VISIBLE_AVHWACCEL (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LOCKMGR -#define FF_API_LOCKMGR (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_NEXT -#define FF_API_NEXT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_UNSANITIZED_BITRATES -#define FF_API_UNSANITIZED_BITRATES (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OPENH264_SLICE_MODE -#define FF_API_OPENH264_SLICE_MODE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OPENH264_CABAC -#define FF_API_OPENH264_CABAC (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_UNUSED_CODEC_CAPS -#define FF_API_UNUSED_CODEC_CAPS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVPRIV_PUT_BITS -#define FF_API_AVPRIV_PUT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_ENCDEC -#define FF_API_OLD_ENCDEC (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVCODEC_PIX_FMT -#define FF_API_AVCODEC_PIX_FMT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_MPV_RC_STRATEGY -#define FF_API_MPV_RC_STRATEGY (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_PARSER_CHANGE -#define FF_API_PARSER_CHANGE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_THREAD_SAFE_CALLBACKS -#define FF_API_THREAD_SAFE_CALLBACKS (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_DEBUG_MV -#define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_GET_FRAME_CLASS -#define FF_API_GET_FRAME_CLASS (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_AUTO_THREADS -#define FF_API_AUTO_THREADS (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_INIT_PACKET -#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 60) -#endif - -#endif /* AVCODEC_VERSION_H */ diff --git a/prebuilts/aarch64/include/libavcodec/videotoolbox.h b/prebuilts/aarch64/include/libavcodec/videotoolbox.h deleted file mode 100644 index af2db0d..0000000 --- a/prebuilts/aarch64/include/libavcodec/videotoolbox.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Videotoolbox hardware acceleration - * - * copyright (c) 2012 Sebastien Zwickert - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VIDEOTOOLBOX_H -#define AVCODEC_VIDEOTOOLBOX_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_videotoolbox - * Public libavcodec Videotoolbox header. - */ - -#include - -#define Picture QuickdrawPicture -#include -#undef Picture - -#include "libavcodec/avcodec.h" - -/** - * This struct holds all the information that needs to be passed - * between the caller and libavcodec for initializing Videotoolbox decoding. - * Its size is not a part of the public ABI, it must be allocated with - * av_videotoolbox_alloc_context() and freed with av_free(). - */ -typedef struct AVVideotoolboxContext { - /** - * Videotoolbox decompression session object. - * Created and freed the caller. - */ - VTDecompressionSessionRef session; - - /** - * The output callback that must be passed to the session. - * Set by av_videottoolbox_default_init() - */ - VTDecompressionOutputCallback output_callback; - - /** - * CVPixelBuffer Format Type that Videotoolbox will use for decoded frames. - * set by the caller. If this is set to 0, then no specific format is - * requested from the decoder, and its native format is output. - */ - OSType cv_pix_fmt_type; - - /** - * CoreMedia Format Description that Videotoolbox will use to create the decompression session. - * Set by the caller. - */ - CMVideoFormatDescriptionRef cm_fmt_desc; - - /** - * CoreMedia codec type that Videotoolbox will use to create the decompression session. - * Set by the caller. - */ - int cm_codec_type; -} AVVideotoolboxContext; - -/** - * Allocate and initialize a Videotoolbox context. - * - * This function should be called from the get_format() callback when the caller - * selects the AV_PIX_FMT_VIDETOOLBOX format. The caller must then create - * the decoder object (using the output callback provided by libavcodec) that - * will be used for Videotoolbox-accelerated decoding. - * - * When decoding with Videotoolbox is finished, the caller must destroy the decoder - * object and free the Videotoolbox context using av_free(). - * - * @return the newly allocated context or NULL on failure - */ -AVVideotoolboxContext *av_videotoolbox_alloc_context(void); - -/** - * This is a convenience function that creates and sets up the Videotoolbox context using - * an internal implementation. - * - * @param avctx the corresponding codec context - * - * @return >= 0 on success, a negative AVERROR code on failure - */ -int av_videotoolbox_default_init(AVCodecContext *avctx); - -/** - * This is a convenience function that creates and sets up the Videotoolbox context using - * an internal implementation. - * - * @param avctx the corresponding codec context - * @param vtctx the Videotoolbox context to use - * - * @return >= 0 on success, a negative AVERROR code on failure - */ -int av_videotoolbox_default_init2(AVCodecContext *avctx, AVVideotoolboxContext *vtctx); - -/** - * This function must be called to free the Videotoolbox context initialized with - * av_videotoolbox_default_init(). - * - * @param avctx the corresponding codec context - */ -void av_videotoolbox_default_free(AVCodecContext *avctx); - -/** - * @} - */ - -#endif /* AVCODEC_VIDEOTOOLBOX_H */ diff --git a/prebuilts/aarch64/include/libavcodec/vorbis_parser.h b/prebuilts/aarch64/include/libavcodec/vorbis_parser.h deleted file mode 100644 index 789932a..0000000 --- a/prebuilts/aarch64/include/libavcodec/vorbis_parser.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * A public API for Vorbis parsing - * - * Determines the duration for each packet. - */ - -#ifndef AVCODEC_VORBIS_PARSER_H -#define AVCODEC_VORBIS_PARSER_H - -#include - -typedef struct AVVorbisParseContext AVVorbisParseContext; - -/** - * Allocate and initialize the Vorbis parser using headers in the extradata. - */ -AVVorbisParseContext *av_vorbis_parse_init(const uint8_t *extradata, - int extradata_size); - -/** - * Free the parser and everything associated with it. - */ -void av_vorbis_parse_free(AVVorbisParseContext **s); - -#define VORBIS_FLAG_HEADER 0x00000001 -#define VORBIS_FLAG_COMMENT 0x00000002 -#define VORBIS_FLAG_SETUP 0x00000004 - -/** - * Get the duration for a Vorbis packet. - * - * If @p flags is @c NULL, - * special frames are considered invalid. - * - * @param s Vorbis parser context - * @param buf buffer containing a Vorbis frame - * @param buf_size size of the buffer - * @param flags flags for special frames - */ -int av_vorbis_parse_frame_flags(AVVorbisParseContext *s, const uint8_t *buf, - int buf_size, int *flags); - -/** - * Get the duration for a Vorbis packet. - * - * @param s Vorbis parser context - * @param buf buffer containing a Vorbis frame - * @param buf_size size of the buffer - */ -int av_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf, - int buf_size); - -void av_vorbis_parse_reset(AVVorbisParseContext *s); - -#endif /* AVCODEC_VORBIS_PARSER_H */ diff --git a/prebuilts/aarch64/include/libavcodec/xvmc.h b/prebuilts/aarch64/include/libavcodec/xvmc.h deleted file mode 100644 index 465ee78..0000000 --- a/prebuilts/aarch64/include/libavcodec/xvmc.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (C) 2003 Ivan Kalvachev - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_XVMC_H -#define AVCODEC_XVMC_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_xvmc - * Public libavcodec XvMC header. - */ - -#include - -#include "libavutil/attributes.h" -#include "version.h" -#include "avcodec.h" - -/** - * @defgroup lavc_codec_hwaccel_xvmc XvMC - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct - the number is 1337 speak for the letters IDCT MCo (motion compensation) */ - -struct attribute_deprecated xvmc_pix_fmt { - /** The field contains the special constant value AV_XVMC_ID. - It is used as a test that the application correctly uses the API, - and that there is no corruption caused by pixel routines. - - application - set during initialization - - libavcodec - unchanged - */ - int xvmc_id; - - /** Pointer to the block array allocated by XvMCCreateBlocks(). - The array has to be freed by XvMCDestroyBlocks(). - Each group of 64 values represents one data block of differential - pixel information (in MoCo mode) or coefficients for IDCT. - - application - set the pointer during initialization - - libavcodec - fills coefficients/pixel data into the array - */ - short* data_blocks; - - /** Pointer to the macroblock description array allocated by - XvMCCreateMacroBlocks() and freed by XvMCDestroyMacroBlocks(). - - application - set the pointer during initialization - - libavcodec - fills description data into the array - */ - XvMCMacroBlock* mv_blocks; - - /** Number of macroblock descriptions that can be stored in the mv_blocks - array. - - application - set during initialization - - libavcodec - unchanged - */ - int allocated_mv_blocks; - - /** Number of blocks that can be stored at once in the data_blocks array. - - application - set during initialization - - libavcodec - unchanged - */ - int allocated_data_blocks; - - /** Indicate that the hardware would interpret data_blocks as IDCT - coefficients and perform IDCT on them. - - application - set during initialization - - libavcodec - unchanged - */ - int idct; - - /** In MoCo mode it indicates that intra macroblocks are assumed to be in - unsigned format; same as the XVMC_INTRA_UNSIGNED flag. - - application - set during initialization - - libavcodec - unchanged - */ - int unsigned_intra; - - /** Pointer to the surface allocated by XvMCCreateSurface(). - It has to be freed by XvMCDestroySurface() on application exit. - It identifies the frame and its state on the video hardware. - - application - set during initialization - - libavcodec - unchanged - */ - XvMCSurface* p_surface; - -/** Set by the decoder before calling ff_draw_horiz_band(), - needed by the XvMCRenderSurface function. */ -//@{ - /** Pointer to the surface used as past reference - - application - unchanged - - libavcodec - set - */ - XvMCSurface* p_past_surface; - - /** Pointer to the surface used as future reference - - application - unchanged - - libavcodec - set - */ - XvMCSurface* p_future_surface; - - /** top/bottom field or frame - - application - unchanged - - libavcodec - set - */ - unsigned int picture_structure; - - /** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence - - application - unchanged - - libavcodec - set - */ - unsigned int flags; -//}@ - - /** Number of macroblock descriptions in the mv_blocks array - that have already been passed to the hardware. - - application - zeroes it on get_buffer(). - A successful ff_draw_horiz_band() may increment it - with filled_mb_block_num or zero both. - - libavcodec - unchanged - */ - int start_mv_blocks_num; - - /** Number of new macroblock descriptions in the mv_blocks array (after - start_mv_blocks_num) that are filled by libavcodec and have to be - passed to the hardware. - - application - zeroes it on get_buffer() or after successful - ff_draw_horiz_band(). - - libavcodec - increment with one of each stored MB - */ - int filled_mv_blocks_num; - - /** Number of the next free data block; one data block consists of - 64 short values in the data_blocks array. - All blocks before this one have already been claimed by placing their - position into the corresponding block description structure field, - that are part of the mv_blocks array. - - application - zeroes it on get_buffer(). - A successful ff_draw_horiz_band() may zero it together - with start_mb_blocks_num. - - libavcodec - each decoded macroblock increases it by the number - of coded blocks it contains. - */ - int next_free_data_block_num; -}; - -/** - * @} - */ - -#endif /* AVCODEC_XVMC_H */ diff --git a/prebuilts/aarch64/include/libavdevice/avdevice.h b/prebuilts/aarch64/include/libavdevice/avdevice.h deleted file mode 100644 index 85a4dcc..0000000 --- a/prebuilts/aarch64/include/libavdevice/avdevice.h +++ /dev/null @@ -1,519 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVDEVICE_AVDEVICE_H -#define AVDEVICE_AVDEVICE_H - -#include "version.h" - -/** - * @file - * @ingroup lavd - * Main libavdevice API header - */ - -/** - * @defgroup lavd libavdevice - * Special devices muxing/demuxing library. - * - * Libavdevice is a complementary library to @ref libavf "libavformat". It - * provides various "special" platform-specific muxers and demuxers, e.g. for - * grabbing devices, audio capture and playback etc. As a consequence, the - * (de)muxers in libavdevice are of the AVFMT_NOFILE type (they use their own - * I/O functions). The filename passed to avformat_open_input() often does not - * refer to an actually existing file, but has some special device-specific - * meaning - e.g. for xcbgrab it is the display name. - * - * To use libavdevice, simply call avdevice_register_all() to register all - * compiled muxers and demuxers. They all use standard libavformat API. - * - * @{ - */ - -#include "libavutil/log.h" -#include "libavutil/opt.h" -#include "libavutil/dict.h" -#include "libavformat/avformat.h" - -/** - * Return the LIBAVDEVICE_VERSION_INT constant. - */ -unsigned avdevice_version(void); - -/** - * Return the libavdevice build-time configuration. - */ -const char *avdevice_configuration(void); - -/** - * Return the libavdevice license. - */ -const char *avdevice_license(void); - -/** - * Initialize libavdevice and register all the input and output devices. - */ -void avdevice_register_all(void); - -/** - * Audio input devices iterator. - * - * If d is NULL, returns the first registered input audio/video device, - * if d is non-NULL, returns the next registered input audio/video device after d - * or NULL if d is the last one. - */ -AVInputFormat *av_input_audio_device_next(AVInputFormat *d); - -/** - * Video input devices iterator. - * - * If d is NULL, returns the first registered input audio/video device, - * if d is non-NULL, returns the next registered input audio/video device after d - * or NULL if d is the last one. - */ -AVInputFormat *av_input_video_device_next(AVInputFormat *d); - -/** - * Audio output devices iterator. - * - * If d is NULL, returns the first registered output audio/video device, - * if d is non-NULL, returns the next registered output audio/video device after d - * or NULL if d is the last one. - */ -AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d); - -/** - * Video output devices iterator. - * - * If d is NULL, returns the first registered output audio/video device, - * if d is non-NULL, returns the next registered output audio/video device after d - * or NULL if d is the last one. - */ -AVOutputFormat *av_output_video_device_next(AVOutputFormat *d); - -typedef struct AVDeviceRect { - int x; /**< x coordinate of top left corner */ - int y; /**< y coordinate of top left corner */ - int width; /**< width */ - int height; /**< height */ -} AVDeviceRect; - -/** - * Message types used by avdevice_app_to_dev_control_message(). - */ -enum AVAppToDevMessageType { - /** - * Dummy message. - */ - AV_APP_TO_DEV_NONE = MKBETAG('N','O','N','E'), - - /** - * Window size change message. - * - * Message is sent to the device every time the application changes the size - * of the window device renders to. - * Message should also be sent right after window is created. - * - * data: AVDeviceRect: new window size. - */ - AV_APP_TO_DEV_WINDOW_SIZE = MKBETAG('G','E','O','M'), - - /** - * Repaint request message. - * - * Message is sent to the device when window has to be repainted. - * - * data: AVDeviceRect: area required to be repainted. - * NULL: whole area is required to be repainted. - */ - AV_APP_TO_DEV_WINDOW_REPAINT = MKBETAG('R','E','P','A'), - - /** - * Request pause/play. - * - * Application requests pause/unpause playback. - * Mostly usable with devices that have internal buffer. - * By default devices are not paused. - * - * data: NULL - */ - AV_APP_TO_DEV_PAUSE = MKBETAG('P', 'A', 'U', ' '), - AV_APP_TO_DEV_PLAY = MKBETAG('P', 'L', 'A', 'Y'), - AV_APP_TO_DEV_TOGGLE_PAUSE = MKBETAG('P', 'A', 'U', 'T'), - - /** - * Volume control message. - * - * Set volume level. It may be device-dependent if volume - * is changed per stream or system wide. Per stream volume - * change is expected when possible. - * - * data: double: new volume with range of 0.0 - 1.0. - */ - AV_APP_TO_DEV_SET_VOLUME = MKBETAG('S', 'V', 'O', 'L'), - - /** - * Mute control messages. - * - * Change mute state. It may be device-dependent if mute status - * is changed per stream or system wide. Per stream mute status - * change is expected when possible. - * - * data: NULL. - */ - AV_APP_TO_DEV_MUTE = MKBETAG(' ', 'M', 'U', 'T'), - AV_APP_TO_DEV_UNMUTE = MKBETAG('U', 'M', 'U', 'T'), - AV_APP_TO_DEV_TOGGLE_MUTE = MKBETAG('T', 'M', 'U', 'T'), - - /** - * Get volume/mute messages. - * - * Force the device to send AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED or - * AV_DEV_TO_APP_MUTE_STATE_CHANGED command respectively. - * - * data: NULL. - */ - AV_APP_TO_DEV_GET_VOLUME = MKBETAG('G', 'V', 'O', 'L'), - AV_APP_TO_DEV_GET_MUTE = MKBETAG('G', 'M', 'U', 'T'), -}; - -/** - * Message types used by avdevice_dev_to_app_control_message(). - */ -enum AVDevToAppMessageType { - /** - * Dummy message. - */ - AV_DEV_TO_APP_NONE = MKBETAG('N','O','N','E'), - - /** - * Create window buffer message. - * - * Device requests to create a window buffer. Exact meaning is device- - * and application-dependent. Message is sent before rendering first - * frame and all one-shot initializations should be done here. - * Application is allowed to ignore preferred window buffer size. - * - * @note: Application is obligated to inform about window buffer size - * with AV_APP_TO_DEV_WINDOW_SIZE message. - * - * data: AVDeviceRect: preferred size of the window buffer. - * NULL: no preferred size of the window buffer. - */ - AV_DEV_TO_APP_CREATE_WINDOW_BUFFER = MKBETAG('B','C','R','E'), - - /** - * Prepare window buffer message. - * - * Device requests to prepare a window buffer for rendering. - * Exact meaning is device- and application-dependent. - * Message is sent before rendering of each frame. - * - * data: NULL. - */ - AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER = MKBETAG('B','P','R','E'), - - /** - * Display window buffer message. - * - * Device requests to display a window buffer. - * Message is sent when new frame is ready to be displayed. - * Usually buffers need to be swapped in handler of this message. - * - * data: NULL. - */ - AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER = MKBETAG('B','D','I','S'), - - /** - * Destroy window buffer message. - * - * Device requests to destroy a window buffer. - * Message is sent when device is about to be destroyed and window - * buffer is not required anymore. - * - * data: NULL. - */ - AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER = MKBETAG('B','D','E','S'), - - /** - * Buffer fullness status messages. - * - * Device signals buffer overflow/underflow. - * - * data: NULL. - */ - AV_DEV_TO_APP_BUFFER_OVERFLOW = MKBETAG('B','O','F','L'), - AV_DEV_TO_APP_BUFFER_UNDERFLOW = MKBETAG('B','U','F','L'), - - /** - * Buffer readable/writable. - * - * Device informs that buffer is readable/writable. - * When possible, device informs how many bytes can be read/write. - * - * @warning Device may not inform when number of bytes than can be read/write changes. - * - * data: int64_t: amount of bytes available to read/write. - * NULL: amount of bytes available to read/write is not known. - */ - AV_DEV_TO_APP_BUFFER_READABLE = MKBETAG('B','R','D',' '), - AV_DEV_TO_APP_BUFFER_WRITABLE = MKBETAG('B','W','R',' '), - - /** - * Mute state change message. - * - * Device informs that mute state has changed. - * - * data: int: 0 for not muted state, non-zero for muted state. - */ - AV_DEV_TO_APP_MUTE_STATE_CHANGED = MKBETAG('C','M','U','T'), - - /** - * Volume level change message. - * - * Device informs that volume level has changed. - * - * data: double: new volume with range of 0.0 - 1.0. - */ - AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED = MKBETAG('C','V','O','L'), -}; - -/** - * Send control message from application to device. - * - * @param s device context. - * @param type message type. - * @param data message data. Exact type depends on message type. - * @param data_size size of message data. - * @return >= 0 on success, negative on error. - * AVERROR(ENOSYS) when device doesn't implement handler of the message. - */ -int avdevice_app_to_dev_control_message(struct AVFormatContext *s, - enum AVAppToDevMessageType type, - void *data, size_t data_size); - -/** - * Send control message from device to application. - * - * @param s device context. - * @param type message type. - * @param data message data. Can be NULL. - * @param data_size size of message data. - * @return >= 0 on success, negative on error. - * AVERROR(ENOSYS) when application doesn't implement handler of the message. - */ -int avdevice_dev_to_app_control_message(struct AVFormatContext *s, - enum AVDevToAppMessageType type, - void *data, size_t data_size); - -#if FF_API_DEVICE_CAPABILITIES -/** - * Following API allows user to probe device capabilities (supported codecs, - * pixel formats, sample formats, resolutions, channel counts, etc). - * It is build on top op AVOption API. - * Queried capabilities make it possible to set up converters of video or audio - * parameters that fit to the device. - * - * List of capabilities that can be queried: - * - Capabilities valid for both audio and video devices: - * - codec: supported audio/video codecs. - * type: AV_OPT_TYPE_INT (AVCodecID value) - * - Capabilities valid for audio devices: - * - sample_format: supported sample formats. - * type: AV_OPT_TYPE_INT (AVSampleFormat value) - * - sample_rate: supported sample rates. - * type: AV_OPT_TYPE_INT - * - channels: supported number of channels. - * type: AV_OPT_TYPE_INT - * - channel_layout: supported channel layouts. - * type: AV_OPT_TYPE_INT64 - * - Capabilities valid for video devices: - * - pixel_format: supported pixel formats. - * type: AV_OPT_TYPE_INT (AVPixelFormat value) - * - window_size: supported window sizes (describes size of the window size presented to the user). - * type: AV_OPT_TYPE_IMAGE_SIZE - * - frame_size: supported frame sizes (describes size of provided video frames). - * type: AV_OPT_TYPE_IMAGE_SIZE - * - fps: supported fps values - * type: AV_OPT_TYPE_RATIONAL - * - * Value of the capability may be set by user using av_opt_set() function - * and AVDeviceCapabilitiesQuery object. Following queries will - * limit results to the values matching already set capabilities. - * For example, setting a codec may impact number of formats or fps values - * returned during next query. Setting invalid value may limit results to zero. - * - * Example of the usage basing on opengl output device: - * - * @code - * AVFormatContext *oc = NULL; - * AVDeviceCapabilitiesQuery *caps = NULL; - * AVOptionRanges *ranges; - * int ret; - * - * if ((ret = avformat_alloc_output_context2(&oc, NULL, "opengl", NULL)) < 0) - * goto fail; - * if (avdevice_capabilities_create(&caps, oc, NULL) < 0) - * goto fail; - * - * //query codecs - * if (av_opt_query_ranges(&ranges, caps, "codec", AV_OPT_MULTI_COMPONENT_RANGE)) < 0) - * goto fail; - * //pick codec here and set it - * av_opt_set(caps, "codec", AV_CODEC_ID_RAWVIDEO, 0); - * - * //query format - * if (av_opt_query_ranges(&ranges, caps, "pixel_format", AV_OPT_MULTI_COMPONENT_RANGE)) < 0) - * goto fail; - * //pick format here and set it - * av_opt_set(caps, "pixel_format", AV_PIX_FMT_YUV420P, 0); - * - * //query and set more capabilities - * - * fail: - * //clean up code - * avdevice_capabilities_free(&query, oc); - * avformat_free_context(oc); - * @endcode - */ - -/** - * Structure describes device capabilities. - * - * It is used by devices in conjunction with av_device_capabilities AVOption table - * to implement capabilities probing API based on AVOption API. Should not be used directly. - */ -typedef struct AVDeviceCapabilitiesQuery { - const AVClass *av_class; - AVFormatContext *device_context; - enum AVCodecID codec; - enum AVSampleFormat sample_format; - enum AVPixelFormat pixel_format; - int sample_rate; - int channels; - int64_t channel_layout; - int window_width; - int window_height; - int frame_width; - int frame_height; - AVRational fps; -} AVDeviceCapabilitiesQuery; - -/** - * AVOption table used by devices to implement device capabilities API. Should not be used by a user. - */ -attribute_deprecated -extern const AVOption av_device_capabilities[]; - -/** - * Initialize capabilities probing API based on AVOption API. - * - * avdevice_capabilities_free() must be called when query capabilities API is - * not used anymore. - * - * @param[out] caps Device capabilities data. Pointer to a NULL pointer must be passed. - * @param s Context of the device. - * @param device_options An AVDictionary filled with device-private options. - * On return this parameter will be destroyed and replaced with a dict - * containing options that were not found. May be NULL. - * The same options must be passed later to avformat_write_header() for output - * devices or avformat_open_input() for input devices, or at any other place - * that affects device-private options. - * - * @return >= 0 on success, negative otherwise. - */ -attribute_deprecated -int avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s, - AVDictionary **device_options); - -/** - * Free resources created by avdevice_capabilities_create() - * - * @param caps Device capabilities data to be freed. - * @param s Context of the device. - */ -attribute_deprecated -void avdevice_capabilities_free(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s); -#endif - -/** - * Structure describes basic parameters of the device. - */ -typedef struct AVDeviceInfo { - char *device_name; /**< device name, format depends on device */ - char *device_description; /**< human friendly name */ -} AVDeviceInfo; - -/** - * List of devices. - */ -typedef struct AVDeviceInfoList { - AVDeviceInfo **devices; /**< list of autodetected devices */ - int nb_devices; /**< number of autodetected devices */ - int default_device; /**< index of default device or -1 if no default */ -} AVDeviceInfoList; - -/** - * List devices. - * - * Returns available device names and their parameters. - * - * @note: Some devices may accept system-dependent device names that cannot be - * autodetected. The list returned by this function cannot be assumed to - * be always completed. - * - * @param s device context. - * @param[out] device_list list of autodetected devices. - * @return count of autodetected devices, negative on error. - */ -int avdevice_list_devices(struct AVFormatContext *s, AVDeviceInfoList **device_list); - -/** - * Convenient function to free result of avdevice_list_devices(). - * - * @param devices device list to be freed. - */ -void avdevice_free_list_devices(AVDeviceInfoList **device_list); - -/** - * List devices. - * - * Returns available device names and their parameters. - * These are convinient wrappers for avdevice_list_devices(). - * Device context is allocated and deallocated internally. - * - * @param device device format. May be NULL if device name is set. - * @param device_name device name. May be NULL if device format is set. - * @param device_options An AVDictionary filled with device-private options. May be NULL. - * The same options must be passed later to avformat_write_header() for output - * devices or avformat_open_input() for input devices, or at any other place - * that affects device-private options. - * @param[out] device_list list of autodetected devices - * @return count of autodetected devices, negative on error. - * @note device argument takes precedence over device_name when both are set. - */ -int avdevice_list_input_sources(struct AVInputFormat *device, const char *device_name, - AVDictionary *device_options, AVDeviceInfoList **device_list); -int avdevice_list_output_sinks(struct AVOutputFormat *device, const char *device_name, - AVDictionary *device_options, AVDeviceInfoList **device_list); - -/** - * @} - */ - -#endif /* AVDEVICE_AVDEVICE_H */ diff --git a/prebuilts/aarch64/include/libavdevice/version.h b/prebuilts/aarch64/include/libavdevice/version.h deleted file mode 100644 index c310c5e..0000000 --- a/prebuilts/aarch64/include/libavdevice/version.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVDEVICE_VERSION_H -#define AVDEVICE_VERSION_H - -/** - * @file - * @ingroup lavd - * Libavdevice version macros - */ - -#include "libavutil/version.h" - -#define LIBAVDEVICE_VERSION_MAJOR 58 -#define LIBAVDEVICE_VERSION_MINOR 13 -#define LIBAVDEVICE_VERSION_MICRO 100 - -#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \ - LIBAVDEVICE_VERSION_MINOR, \ - LIBAVDEVICE_VERSION_MICRO) -#define LIBAVDEVICE_VERSION AV_VERSION(LIBAVDEVICE_VERSION_MAJOR, \ - LIBAVDEVICE_VERSION_MINOR, \ - LIBAVDEVICE_VERSION_MICRO) -#define LIBAVDEVICE_BUILD LIBAVDEVICE_VERSION_INT - -#define LIBAVDEVICE_IDENT "Lavd" AV_STRINGIFY(LIBAVDEVICE_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ -#ifndef FF_API_DEVICE_CAPABILITIES -#define FF_API_DEVICE_CAPABILITIES (LIBAVDEVICE_VERSION_MAJOR < 60) -#endif - -#endif /* AVDEVICE_VERSION_H */ diff --git a/prebuilts/aarch64/include/libavfilter/avfilter.h b/prebuilts/aarch64/include/libavfilter/avfilter.h deleted file mode 100644 index be12424..0000000 --- a/prebuilts/aarch64/include/libavfilter/avfilter.h +++ /dev/null @@ -1,1178 +0,0 @@ -/* - * filter layer - * Copyright (c) 2007 Bobby Bingham - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_AVFILTER_H -#define AVFILTER_AVFILTER_H - -/** - * @file - * @ingroup lavfi - * Main libavfilter public API header - */ - -/** - * @defgroup lavfi libavfilter - * Graph-based frame editing library. - * - * @{ - */ - -#include - -#include "libavutil/attributes.h" -#include "libavutil/avutil.h" -#include "libavutil/buffer.h" -#include "libavutil/dict.h" -#include "libavutil/frame.h" -#include "libavutil/log.h" -#include "libavutil/samplefmt.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" - -#include "libavfilter/version.h" - -/** - * Return the LIBAVFILTER_VERSION_INT constant. - */ -unsigned avfilter_version(void); - -/** - * Return the libavfilter build-time configuration. - */ -const char *avfilter_configuration(void); - -/** - * Return the libavfilter license. - */ -const char *avfilter_license(void); - -typedef struct AVFilterContext AVFilterContext; -typedef struct AVFilterLink AVFilterLink; -typedef struct AVFilterPad AVFilterPad; -typedef struct AVFilterFormats AVFilterFormats; -typedef struct AVFilterChannelLayouts AVFilterChannelLayouts; - -/** - * Get the number of elements in a NULL-terminated array of AVFilterPads (e.g. - * AVFilter.inputs/outputs). - */ -int avfilter_pad_count(const AVFilterPad *pads); - -/** - * Get the name of an AVFilterPad. - * - * @param pads an array of AVFilterPads - * @param pad_idx index of the pad in the array; it is the caller's - * responsibility to ensure the index is valid - * - * @return name of the pad_idx'th pad in pads - */ -const char *avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx); - -/** - * Get the type of an AVFilterPad. - * - * @param pads an array of AVFilterPads - * @param pad_idx index of the pad in the array; it is the caller's - * responsibility to ensure the index is valid - * - * @return type of the pad_idx'th pad in pads - */ -enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx); - -/** - * The number of the filter inputs is not determined just by AVFilter.inputs. - * The filter might add additional inputs during initialization depending on the - * options supplied to it. - */ -#define AVFILTER_FLAG_DYNAMIC_INPUTS (1 << 0) -/** - * The number of the filter outputs is not determined just by AVFilter.outputs. - * The filter might add additional outputs during initialization depending on - * the options supplied to it. - */ -#define AVFILTER_FLAG_DYNAMIC_OUTPUTS (1 << 1) -/** - * The filter supports multithreading by splitting frames into multiple parts - * and processing them concurrently. - */ -#define AVFILTER_FLAG_SLICE_THREADS (1 << 2) -/** - * Some filters support a generic "enable" expression option that can be used - * to enable or disable a filter in the timeline. Filters supporting this - * option have this flag set. When the enable expression is false, the default - * no-op filter_frame() function is called in place of the filter_frame() - * callback defined on each input pad, thus the frame is passed unchanged to - * the next filters. - */ -#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC (1 << 16) -/** - * Same as AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC, except that the filter will - * have its filter_frame() callback(s) called as usual even when the enable - * expression is false. The filter will disable filtering within the - * filter_frame() callback(s) itself, for example executing code depending on - * the AVFilterContext->is_disabled value. - */ -#define AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL (1 << 17) -/** - * Handy mask to test whether the filter supports or no the timeline feature - * (internally or generically). - */ -#define AVFILTER_FLAG_SUPPORT_TIMELINE (AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL) - -/** - * Filter definition. This defines the pads a filter contains, and all the - * callback functions used to interact with the filter. - */ -typedef struct AVFilter { - /** - * Filter name. Must be non-NULL and unique among filters. - */ - const char *name; - - /** - * A description of the filter. May be NULL. - * - * You should use the NULL_IF_CONFIG_SMALL() macro to define it. - */ - const char *description; - - /** - * List of inputs, terminated by a zeroed element. - * - * NULL if there are no (static) inputs. Instances of filters with - * AVFILTER_FLAG_DYNAMIC_INPUTS set may have more inputs than present in - * this list. - */ - const AVFilterPad *inputs; - /** - * List of outputs, terminated by a zeroed element. - * - * NULL if there are no (static) outputs. Instances of filters with - * AVFILTER_FLAG_DYNAMIC_OUTPUTS set may have more outputs than present in - * this list. - */ - const AVFilterPad *outputs; - - /** - * A class for the private data, used to declare filter private AVOptions. - * This field is NULL for filters that do not declare any options. - * - * If this field is non-NULL, the first member of the filter private data - * must be a pointer to AVClass, which will be set by libavfilter generic - * code to this class. - */ - const AVClass *priv_class; - - /** - * A combination of AVFILTER_FLAG_* - */ - int flags; - - /***************************************************************** - * All fields below this line are not part of the public API. They - * may not be used outside of libavfilter and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * Filter pre-initialization function - * - * This callback will be called immediately after the filter context is - * allocated, to allow allocating and initing sub-objects. - * - * If this callback is not NULL, the uninit callback will be called on - * allocation failure. - * - * @return 0 on success, - * AVERROR code on failure (but the code will be - * dropped and treated as ENOMEM by the calling code) - */ - int (*preinit)(AVFilterContext *ctx); - - /** - * Filter initialization function. - * - * This callback will be called only once during the filter lifetime, after - * all the options have been set, but before links between filters are - * established and format negotiation is done. - * - * Basic filter initialization should be done here. Filters with dynamic - * inputs and/or outputs should create those inputs/outputs here based on - * provided options. No more changes to this filter's inputs/outputs can be - * done after this callback. - * - * This callback must not assume that the filter links exist or frame - * parameters are known. - * - * @ref AVFilter.uninit "uninit" is guaranteed to be called even if - * initialization fails, so this callback does not have to clean up on - * failure. - * - * @return 0 on success, a negative AVERROR on failure - */ - int (*init)(AVFilterContext *ctx); - - /** - * Should be set instead of @ref AVFilter.init "init" by the filters that - * want to pass a dictionary of AVOptions to nested contexts that are - * allocated during init. - * - * On return, the options dict should be freed and replaced with one that - * contains all the options which could not be processed by this filter (or - * with NULL if all the options were processed). - * - * Otherwise the semantics is the same as for @ref AVFilter.init "init". - */ - int (*init_dict)(AVFilterContext *ctx, AVDictionary **options); - - /** - * Filter uninitialization function. - * - * Called only once right before the filter is freed. Should deallocate any - * memory held by the filter, release any buffer references, etc. It does - * not need to deallocate the AVFilterContext.priv memory itself. - * - * This callback may be called even if @ref AVFilter.init "init" was not - * called or failed, so it must be prepared to handle such a situation. - */ - void (*uninit)(AVFilterContext *ctx); - - /** - * Query formats supported by the filter on its inputs and outputs. - * - * This callback is called after the filter is initialized (so the inputs - * and outputs are fixed), shortly before the format negotiation. This - * callback may be called more than once. - * - * This callback must set AVFilterLink.outcfg.formats on every input link and - * AVFilterLink.incfg.formats on every output link to a list of pixel/sample - * formats that the filter supports on that link. For audio links, this - * filter must also set @ref AVFilterLink.incfg.samplerates "in_samplerates" / - * @ref AVFilterLink.outcfg.samplerates "out_samplerates" and - * @ref AVFilterLink.incfg.channel_layouts "in_channel_layouts" / - * @ref AVFilterLink.outcfg.channel_layouts "out_channel_layouts" analogously. - * - * This callback may be NULL for filters with one input, in which case - * libavfilter assumes that it supports all input formats and preserves - * them on output. - * - * @return zero on success, a negative value corresponding to an - * AVERROR code otherwise - */ - int (*query_formats)(AVFilterContext *); - - int priv_size; ///< size of private data to allocate for the filter - - int flags_internal; ///< Additional flags for avfilter internal use only. - -#if FF_API_NEXT - /** - * Used by the filter registration system. Must not be touched by any other - * code. - */ - struct AVFilter *next; -#endif - - /** - * Make the filter instance process a command. - * - * @param cmd the command to process, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param res a buffer with size res_size where the filter(s) can return a response. This must not change when the command is not supported. - * @param flags if AVFILTER_CMD_FLAG_FAST is set and the command would be - * time consuming then a filter should treat it like an unsupported command - * - * @returns >=0 on success otherwise an error code. - * AVERROR(ENOSYS) on unsupported commands - */ - int (*process_command)(AVFilterContext *, const char *cmd, const char *arg, char *res, int res_len, int flags); - - /** - * Filter initialization function, alternative to the init() - * callback. Args contains the user-supplied parameters, opaque is - * used for providing binary data. - */ - int (*init_opaque)(AVFilterContext *ctx, void *opaque); - - /** - * Filter activation function. - * - * Called when any processing is needed from the filter, instead of any - * filter_frame and request_frame on pads. - * - * The function must examine inlinks and outlinks and perform a single - * step of processing. If there is nothing to do, the function must do - * nothing and not return an error. If more steps are or may be - * possible, it must use ff_filter_set_ready() to schedule another - * activation. - */ - int (*activate)(AVFilterContext *ctx); -} AVFilter; - -/** - * Process multiple parts of the frame concurrently. - */ -#define AVFILTER_THREAD_SLICE (1 << 0) - -typedef struct AVFilterInternal AVFilterInternal; - -/** An instance of a filter */ -struct AVFilterContext { - const AVClass *av_class; ///< needed for av_log() and filters common options - - const AVFilter *filter; ///< the AVFilter of which this is an instance - - char *name; ///< name of this filter instance - - AVFilterPad *input_pads; ///< array of input pads - AVFilterLink **inputs; ///< array of pointers to input links - unsigned nb_inputs; ///< number of input pads - - AVFilterPad *output_pads; ///< array of output pads - AVFilterLink **outputs; ///< array of pointers to output links - unsigned nb_outputs; ///< number of output pads - - void *priv; ///< private data for use by the filter - - struct AVFilterGraph *graph; ///< filtergraph this filter belongs to - - /** - * Type of multithreading being allowed/used. A combination of - * AVFILTER_THREAD_* flags. - * - * May be set by the caller before initializing the filter to forbid some - * or all kinds of multithreading for this filter. The default is allowing - * everything. - * - * When the filter is initialized, this field is combined using bit AND with - * AVFilterGraph.thread_type to get the final mask used for determining - * allowed threading types. I.e. a threading type needs to be set in both - * to be allowed. - * - * After the filter is initialized, libavfilter sets this field to the - * threading type that is actually used (0 for no multithreading). - */ - int thread_type; - - /** - * An opaque struct for libavfilter internal use. - */ - AVFilterInternal *internal; - - struct AVFilterCommand *command_queue; - - char *enable_str; ///< enable expression string - void *enable; ///< parsed expression (AVExpr*) - double *var_values; ///< variable values for the enable expression - int is_disabled; ///< the enabled state from the last expression evaluation - - /** - * For filters which will create hardware frames, sets the device the - * filter should create them in. All other filters will ignore this field: - * in particular, a filter which consumes or processes hardware frames will - * instead use the hw_frames_ctx field in AVFilterLink to carry the - * hardware context information. - */ - AVBufferRef *hw_device_ctx; - - /** - * Max number of threads allowed in this filter instance. - * If <= 0, its value is ignored. - * Overrides global number of threads set per filter graph. - */ - int nb_threads; - - /** - * Ready status of the filter. - * A non-0 value means that the filter needs activating; - * a higher value suggests a more urgent activation. - */ - unsigned ready; - - /** - * Sets the number of extra hardware frames which the filter will - * allocate on its output links for use in following filters or by - * the caller. - * - * Some hardware filters require all frames that they will use for - * output to be defined in advance before filtering starts. For such - * filters, any hardware frame pools used for output must therefore be - * of fixed size. The extra frames set here are on top of any number - * that the filter needs internally in order to operate normally. - * - * This field must be set before the graph containing this filter is - * configured. - */ - int extra_hw_frames; -}; - -/** - * Lists of formats / etc. supported by an end of a link. - * - * This structure is directly part of AVFilterLink, in two copies: - * one for the source filter, one for the destination filter. - - * These lists are used for negotiating the format to actually be used, - * which will be loaded into the format and channel_layout members of - * AVFilterLink, when chosen. - */ -typedef struct AVFilterFormatsConfig { - - /** - * List of supported formats (pixel or sample). - */ - AVFilterFormats *formats; - - /** - * Lists of supported sample rates, only for audio. - */ - AVFilterFormats *samplerates; - - /** - * Lists of supported channel layouts, only for audio. - */ - AVFilterChannelLayouts *channel_layouts; - -} AVFilterFormatsConfig; - -/** - * A link between two filters. This contains pointers to the source and - * destination filters between which this link exists, and the indexes of - * the pads involved. In addition, this link also contains the parameters - * which have been negotiated and agreed upon between the filter, such as - * image dimensions, format, etc. - * - * Applications must not normally access the link structure directly. - * Use the buffersrc and buffersink API instead. - * In the future, access to the header may be reserved for filters - * implementation. - */ -struct AVFilterLink { - AVFilterContext *src; ///< source filter - AVFilterPad *srcpad; ///< output pad on the source filter - - AVFilterContext *dst; ///< dest filter - AVFilterPad *dstpad; ///< input pad on the dest filter - - enum AVMediaType type; ///< filter media type - - /* These parameters apply only to video */ - int w; ///< agreed upon image width - int h; ///< agreed upon image height - AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio - /* These parameters apply only to audio */ - uint64_t channel_layout; ///< channel layout of current buffer (see libavutil/channel_layout.h) - int sample_rate; ///< samples per second - - int format; ///< agreed upon media format - - /** - * Define the time base used by the PTS of the frames/samples - * which will pass through this link. - * During the configuration stage, each filter is supposed to - * change only the output timebase, while the timebase of the - * input link is assumed to be an unchangeable property. - */ - AVRational time_base; - - /***************************************************************** - * All fields below this line are not part of the public API. They - * may not be used outside of libavfilter and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * Lists of supported formats / etc. supported by the input filter. - */ - AVFilterFormatsConfig incfg; - - /** - * Lists of supported formats / etc. supported by the output filter. - */ - AVFilterFormatsConfig outcfg; - - /** stage of the initialization of the link properties (dimensions, etc) */ - enum { - AVLINK_UNINIT = 0, ///< not started - AVLINK_STARTINIT, ///< started, but incomplete - AVLINK_INIT ///< complete - } init_state; - - /** - * Graph the filter belongs to. - */ - struct AVFilterGraph *graph; - - /** - * Current timestamp of the link, as defined by the most recent - * frame(s), in link time_base units. - */ - int64_t current_pts; - - /** - * Current timestamp of the link, as defined by the most recent - * frame(s), in AV_TIME_BASE units. - */ - int64_t current_pts_us; - - /** - * Index in the age array. - */ - int age_index; - - /** - * Frame rate of the stream on the link, or 1/0 if unknown or variable; - * if left to 0/0, will be automatically copied from the first input - * of the source filter if it exists. - * - * Sources should set it to the best estimation of the real frame rate. - * If the source frame rate is unknown or variable, set this to 1/0. - * Filters should update it if necessary depending on their function. - * Sinks can use it to set a default output frame rate. - * It is similar to the r_frame_rate field in AVStream. - */ - AVRational frame_rate; - - /** - * Buffer partially filled with samples to achieve a fixed/minimum size. - */ - AVFrame *partial_buf; - - /** - * Size of the partial buffer to allocate. - * Must be between min_samples and max_samples. - */ - int partial_buf_size; - - /** - * Minimum number of samples to filter at once. If filter_frame() is - * called with fewer samples, it will accumulate them in partial_buf. - * This field and the related ones must not be changed after filtering - * has started. - * If 0, all related fields are ignored. - */ - int min_samples; - - /** - * Maximum number of samples to filter at once. If filter_frame() is - * called with more samples, it will split them. - */ - int max_samples; - - /** - * Number of channels. - */ - int channels; - - /** - * Number of past frames sent through the link. - */ - int64_t frame_count_in, frame_count_out; - - /** - * A pointer to a FFFramePool struct. - */ - void *frame_pool; - - /** - * True if a frame is currently wanted on the output of this filter. - * Set when ff_request_frame() is called by the output, - * cleared when a frame is filtered. - */ - int frame_wanted_out; - - /** - * For hwaccel pixel formats, this should be a reference to the - * AVHWFramesContext describing the frames. - */ - AVBufferRef *hw_frames_ctx; - -#ifndef FF_INTERNAL_FIELDS - - /** - * Internal structure members. - * The fields below this limit are internal for libavfilter's use - * and must in no way be accessed by applications. - */ - char reserved[0xF000]; - -#else /* FF_INTERNAL_FIELDS */ - - /** - * Queue of frames waiting to be filtered. - */ - FFFrameQueue fifo; - - /** - * If set, the source filter can not generate a frame as is. - * The goal is to avoid repeatedly calling the request_frame() method on - * the same link. - */ - int frame_blocked_in; - - /** - * Link input status. - * If not zero, all attempts of filter_frame will fail with the - * corresponding code. - */ - int status_in; - - /** - * Timestamp of the input status change. - */ - int64_t status_in_pts; - - /** - * Link output status. - * If not zero, all attempts of request_frame will fail with the - * corresponding code. - */ - int status_out; - -#endif /* FF_INTERNAL_FIELDS */ - -}; - -/** - * Link two filters together. - * - * @param src the source filter - * @param srcpad index of the output pad on the source filter - * @param dst the destination filter - * @param dstpad index of the input pad on the destination filter - * @return zero on success - */ -int avfilter_link(AVFilterContext *src, unsigned srcpad, - AVFilterContext *dst, unsigned dstpad); - -/** - * Free the link in *link, and set its pointer to NULL. - */ -void avfilter_link_free(AVFilterLink **link); - -#if FF_API_FILTER_GET_SET -/** - * Get the number of channels of a link. - * @deprecated Use av_buffersink_get_channels() - */ -attribute_deprecated -int avfilter_link_get_channels(AVFilterLink *link); -#endif -#if FF_API_FILTER_LINK_SET_CLOSED -/** - * Set the closed field of a link. - * @deprecated applications are not supposed to mess with links, they should - * close the sinks. - */ -attribute_deprecated -void avfilter_link_set_closed(AVFilterLink *link, int closed); -#endif -/** - * Negotiate the media format, dimensions, etc of all inputs to a filter. - * - * @param filter the filter to negotiate the properties for its inputs - * @return zero on successful negotiation - */ -int avfilter_config_links(AVFilterContext *filter); - -#define AVFILTER_CMD_FLAG_ONE 1 ///< Stop once a filter understood the command (for target=all for example), fast filters are favored automatically -#define AVFILTER_CMD_FLAG_FAST 2 ///< Only execute command when its fast (like a video out that supports contrast adjustment in hw) - -/** - * Make the filter instance process a command. - * It is recommended to use avfilter_graph_send_command(). - */ -int avfilter_process_command(AVFilterContext *filter, const char *cmd, const char *arg, char *res, int res_len, int flags); - -/** - * Iterate over all registered filters. - * - * @param opaque a pointer where libavfilter will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered filter or NULL when the iteration is - * finished - */ -const AVFilter *av_filter_iterate(void **opaque); - -#if FF_API_NEXT -/** Initialize the filter system. Register all builtin filters. */ -attribute_deprecated -void avfilter_register_all(void); - -/** - * Register a filter. This is only needed if you plan to use - * avfilter_get_by_name later to lookup the AVFilter structure by name. A - * filter can still by instantiated with avfilter_graph_alloc_filter even if it - * is not registered. - * - * @param filter the filter to register - * @return 0 if the registration was successful, a negative value - * otherwise - */ -attribute_deprecated -int avfilter_register(AVFilter *filter); - -/** - * Iterate over all registered filters. - * @return If prev is non-NULL, next registered filter after prev or NULL if - * prev is the last filter. If prev is NULL, return the first registered filter. - */ -attribute_deprecated -const AVFilter *avfilter_next(const AVFilter *prev); -#endif - -/** - * Get a filter definition matching the given name. - * - * @param name the filter name to find - * @return the filter definition, if any matching one is registered. - * NULL if none found. - */ -const AVFilter *avfilter_get_by_name(const char *name); - - -/** - * Initialize a filter with the supplied parameters. - * - * @param ctx uninitialized filter context to initialize - * @param args Options to initialize the filter with. This must be a - * ':'-separated list of options in the 'key=value' form. - * May be NULL if the options have been set directly using the - * AVOptions API or there are no options that need to be set. - * @return 0 on success, a negative AVERROR on failure - */ -int avfilter_init_str(AVFilterContext *ctx, const char *args); - -/** - * Initialize a filter with the supplied dictionary of options. - * - * @param ctx uninitialized filter context to initialize - * @param options An AVDictionary filled with options for this filter. On - * return this parameter will be destroyed and replaced with - * a dict containing options that were not found. This dictionary - * must be freed by the caller. - * May be NULL, then this function is equivalent to - * avfilter_init_str() with the second parameter set to NULL. - * @return 0 on success, a negative AVERROR on failure - * - * @note This function and avfilter_init_str() do essentially the same thing, - * the difference is in manner in which the options are passed. It is up to the - * calling code to choose whichever is more preferable. The two functions also - * behave differently when some of the provided options are not declared as - * supported by the filter. In such a case, avfilter_init_str() will fail, but - * this function will leave those extra options in the options AVDictionary and - * continue as usual. - */ -int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options); - -/** - * Free a filter context. This will also remove the filter from its - * filtergraph's list of filters. - * - * @param filter the filter to free - */ -void avfilter_free(AVFilterContext *filter); - -/** - * Insert a filter in the middle of an existing link. - * - * @param link the link into which the filter should be inserted - * @param filt the filter to be inserted - * @param filt_srcpad_idx the input pad on the filter to connect - * @param filt_dstpad_idx the output pad on the filter to connect - * @return zero on success - */ -int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, - unsigned filt_srcpad_idx, unsigned filt_dstpad_idx); - -/** - * @return AVClass for AVFilterContext. - * - * @see av_opt_find(). - */ -const AVClass *avfilter_get_class(void); - -typedef struct AVFilterGraphInternal AVFilterGraphInternal; - -/** - * A function pointer passed to the @ref AVFilterGraph.execute callback to be - * executed multiple times, possibly in parallel. - * - * @param ctx the filter context the job belongs to - * @param arg an opaque parameter passed through from @ref - * AVFilterGraph.execute - * @param jobnr the index of the job being executed - * @param nb_jobs the total number of jobs - * - * @return 0 on success, a negative AVERROR on error - */ -typedef int (avfilter_action_func)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs); - -/** - * A function executing multiple jobs, possibly in parallel. - * - * @param ctx the filter context to which the jobs belong - * @param func the function to be called multiple times - * @param arg the argument to be passed to func - * @param ret a nb_jobs-sized array to be filled with return values from each - * invocation of func - * @param nb_jobs the number of jobs to execute - * - * @return 0 on success, a negative AVERROR on error - */ -typedef int (avfilter_execute_func)(AVFilterContext *ctx, avfilter_action_func *func, - void *arg, int *ret, int nb_jobs); - -typedef struct AVFilterGraph { - const AVClass *av_class; - AVFilterContext **filters; - unsigned nb_filters; - - char *scale_sws_opts; ///< sws options to use for the auto-inserted scale filters -#if FF_API_LAVR_OPTS - attribute_deprecated char *resample_lavr_opts; ///< libavresample options to use for the auto-inserted resample filters -#endif - - /** - * Type of multithreading allowed for filters in this graph. A combination - * of AVFILTER_THREAD_* flags. - * - * May be set by the caller at any point, the setting will apply to all - * filters initialized after that. The default is allowing everything. - * - * When a filter in this graph is initialized, this field is combined using - * bit AND with AVFilterContext.thread_type to get the final mask used for - * determining allowed threading types. I.e. a threading type needs to be - * set in both to be allowed. - */ - int thread_type; - - /** - * Maximum number of threads used by filters in this graph. May be set by - * the caller before adding any filters to the filtergraph. Zero (the - * default) means that the number of threads is determined automatically. - */ - int nb_threads; - - /** - * Opaque object for libavfilter internal use. - */ - AVFilterGraphInternal *internal; - - /** - * Opaque user data. May be set by the caller to an arbitrary value, e.g. to - * be used from callbacks like @ref AVFilterGraph.execute. - * Libavfilter will not touch this field in any way. - */ - void *opaque; - - /** - * This callback may be set by the caller immediately after allocating the - * graph and before adding any filters to it, to provide a custom - * multithreading implementation. - * - * If set, filters with slice threading capability will call this callback - * to execute multiple jobs in parallel. - * - * If this field is left unset, libavfilter will use its internal - * implementation, which may or may not be multithreaded depending on the - * platform and build options. - */ - avfilter_execute_func *execute; - - char *aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions - - /** - * Private fields - * - * The following fields are for internal use only. - * Their type, offset, number and semantic can change without notice. - */ - - AVFilterLink **sink_links; - int sink_links_count; - - unsigned disable_auto_convert; -} AVFilterGraph; - -/** - * Allocate a filter graph. - * - * @return the allocated filter graph on success or NULL. - */ -AVFilterGraph *avfilter_graph_alloc(void); - -/** - * Create a new filter instance in a filter graph. - * - * @param graph graph in which the new filter will be used - * @param filter the filter to create an instance of - * @param name Name to give to the new instance (will be copied to - * AVFilterContext.name). This may be used by the caller to identify - * different filters, libavfilter itself assigns no semantics to - * this parameter. May be NULL. - * - * @return the context of the newly created filter instance (note that it is - * also retrievable directly through AVFilterGraph.filters or with - * avfilter_graph_get_filter()) on success or NULL on failure. - */ -AVFilterContext *avfilter_graph_alloc_filter(AVFilterGraph *graph, - const AVFilter *filter, - const char *name); - -/** - * Get a filter instance identified by instance name from graph. - * - * @param graph filter graph to search through. - * @param name filter instance name (should be unique in the graph). - * @return the pointer to the found filter instance or NULL if it - * cannot be found. - */ -AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, const char *name); - -/** - * Create and add a filter instance into an existing graph. - * The filter instance is created from the filter filt and inited - * with the parameter args. opaque is currently ignored. - * - * In case of success put in *filt_ctx the pointer to the created - * filter instance, otherwise set *filt_ctx to NULL. - * - * @param name the instance name to give to the created filter instance - * @param graph_ctx the filter graph - * @return a negative AVERROR error code in case of failure, a non - * negative value otherwise - */ -int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt, - const char *name, const char *args, void *opaque, - AVFilterGraph *graph_ctx); - -/** - * Enable or disable automatic format conversion inside the graph. - * - * Note that format conversion can still happen inside explicitly inserted - * scale and aresample filters. - * - * @param flags any of the AVFILTER_AUTO_CONVERT_* constants - */ -void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags); - -enum { - AVFILTER_AUTO_CONVERT_ALL = 0, /**< all automatic conversions enabled */ - AVFILTER_AUTO_CONVERT_NONE = -1, /**< all automatic conversions disabled */ -}; - -/** - * Check validity and configure all the links and formats in the graph. - * - * @param graphctx the filter graph - * @param log_ctx context used for logging - * @return >= 0 in case of success, a negative AVERROR code otherwise - */ -int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx); - -/** - * Free a graph, destroy its links, and set *graph to NULL. - * If *graph is NULL, do nothing. - */ -void avfilter_graph_free(AVFilterGraph **graph); - -/** - * A linked-list of the inputs/outputs of the filter chain. - * - * This is mainly useful for avfilter_graph_parse() / avfilter_graph_parse2(), - * where it is used to communicate open (unlinked) inputs and outputs from and - * to the caller. - * This struct specifies, per each not connected pad contained in the graph, the - * filter context and the pad index required for establishing a link. - */ -typedef struct AVFilterInOut { - /** unique name for this input/output in the list */ - char *name; - - /** filter context associated to this input/output */ - AVFilterContext *filter_ctx; - - /** index of the filt_ctx pad to use for linking */ - int pad_idx; - - /** next input/input in the list, NULL if this is the last */ - struct AVFilterInOut *next; -} AVFilterInOut; - -/** - * Allocate a single AVFilterInOut entry. - * Must be freed with avfilter_inout_free(). - * @return allocated AVFilterInOut on success, NULL on failure. - */ -AVFilterInOut *avfilter_inout_alloc(void); - -/** - * Free the supplied list of AVFilterInOut and set *inout to NULL. - * If *inout is NULL, do nothing. - */ -void avfilter_inout_free(AVFilterInOut **inout); - -/** - * Add a graph described by a string to a graph. - * - * @note The caller must provide the lists of inputs and outputs, - * which therefore must be known before calling the function. - * - * @note The inputs parameter describes inputs of the already existing - * part of the graph; i.e. from the point of view of the newly created - * part, they are outputs. Similarly the outputs parameter describes - * outputs of the already existing filters, which are provided as - * inputs to the parsed filters. - * - * @param graph the filter graph where to link the parsed graph context - * @param filters string to be parsed - * @param inputs linked list to the inputs of the graph - * @param outputs linked list to the outputs of the graph - * @return zero on success, a negative AVERROR code on error - */ -int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, - AVFilterInOut *inputs, AVFilterInOut *outputs, - void *log_ctx); - -/** - * Add a graph described by a string to a graph. - * - * In the graph filters description, if the input label of the first - * filter is not specified, "in" is assumed; if the output label of - * the last filter is not specified, "out" is assumed. - * - * @param graph the filter graph where to link the parsed graph context - * @param filters string to be parsed - * @param inputs pointer to a linked list to the inputs of the graph, may be NULL. - * If non-NULL, *inputs is updated to contain the list of open inputs - * after the parsing, should be freed with avfilter_inout_free(). - * @param outputs pointer to a linked list to the outputs of the graph, may be NULL. - * If non-NULL, *outputs is updated to contain the list of open outputs - * after the parsing, should be freed with avfilter_inout_free(). - * @return non negative on success, a negative AVERROR code on error - */ -int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters, - AVFilterInOut **inputs, AVFilterInOut **outputs, - void *log_ctx); - -/** - * Add a graph described by a string to a graph. - * - * @param[in] graph the filter graph where to link the parsed graph context - * @param[in] filters string to be parsed - * @param[out] inputs a linked list of all free (unlinked) inputs of the - * parsed graph will be returned here. It is to be freed - * by the caller using avfilter_inout_free(). - * @param[out] outputs a linked list of all free (unlinked) outputs of the - * parsed graph will be returned here. It is to be freed by the - * caller using avfilter_inout_free(). - * @return zero on success, a negative AVERROR code on error - * - * @note This function returns the inputs and outputs that are left - * unlinked after parsing the graph and the caller then deals with - * them. - * @note This function makes no reference whatsoever to already - * existing parts of the graph and the inputs parameter will on return - * contain inputs of the newly parsed part of the graph. Analogously - * the outputs parameter will contain outputs of the newly created - * filters. - */ -int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters, - AVFilterInOut **inputs, - AVFilterInOut **outputs); - -/** - * Send a command to one or more filter instances. - * - * @param graph the filter graph - * @param target the filter(s) to which the command should be sent - * "all" sends to all filters - * otherwise it can be a filter or filter instance name - * which will send the command to all matching filters. - * @param cmd the command to send, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param res a buffer with size res_size where the filter(s) can return a response. - * - * @returns >=0 on success otherwise an error code. - * AVERROR(ENOSYS) on unsupported commands - */ -int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags); - -/** - * Queue a command for one or more filter instances. - * - * @param graph the filter graph - * @param target the filter(s) to which the command should be sent - * "all" sends to all filters - * otherwise it can be a filter or filter instance name - * which will send the command to all matching filters. - * @param cmd the command to sent, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param ts time at which the command should be sent to the filter - * - * @note As this executes commands after this function returns, no return code - * from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported. - */ -int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts); - - -/** - * Dump a graph into a human-readable string representation. - * - * @param graph the graph to dump - * @param options formatting options; currently ignored - * @return a string, or NULL in case of memory allocation failure; - * the string must be freed using av_free - */ -char *avfilter_graph_dump(AVFilterGraph *graph, const char *options); - -/** - * Request a frame on the oldest sink link. - * - * If the request returns AVERROR_EOF, try the next. - * - * Note that this function is not meant to be the sole scheduling mechanism - * of a filtergraph, only a convenience function to help drain a filtergraph - * in a balanced way under normal circumstances. - * - * Also note that AVERROR_EOF does not mean that frames did not arrive on - * some of the sinks during the process. - * When there are multiple sink links, in case the requested link - * returns an EOF, this may cause a filter to flush pending frames - * which are sent to another sink link, although unrequested. - * - * @return the return value of ff_request_frame(), - * or AVERROR_EOF if all links returned AVERROR_EOF - */ -int avfilter_graph_request_oldest(AVFilterGraph *graph); - -/** - * @} - */ - -#endif /* AVFILTER_AVFILTER_H */ diff --git a/prebuilts/aarch64/include/libavfilter/buffersink.h b/prebuilts/aarch64/include/libavfilter/buffersink.h deleted file mode 100644 index 69ed0f2..0000000 --- a/prebuilts/aarch64/include/libavfilter/buffersink.h +++ /dev/null @@ -1,205 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_BUFFERSINK_H -#define AVFILTER_BUFFERSINK_H - -/** - * @file - * @ingroup lavfi_buffersink - * memory buffer sink API for audio and video - */ - -#include "avfilter.h" - -/** - * @defgroup lavfi_buffersink Buffer sink API - * @ingroup lavfi - * @{ - * - * The buffersink and abuffersink filters are there to connect filter graphs - * to applications. They have a single input, connected to the graph, and no - * output. Frames must be extracted using av_buffersink_get_frame() or - * av_buffersink_get_samples(). - * - * The format negotiated by the graph during configuration can be obtained - * using the accessor functions: - * - av_buffersink_get_time_base(), - * - av_buffersink_get_format(), - * - av_buffersink_get_frame_rate(), - * - av_buffersink_get_w(), - * - av_buffersink_get_h(), - * - av_buffersink_get_sample_aspect_ratio(), - * - av_buffersink_get_channels(), - * - av_buffersink_get_channel_layout(), - * - av_buffersink_get_sample_rate(). - * - * The format can be constrained by setting options, using av_opt_set() and - * related functions with the AV_OPT_SEARCH_CHILDREN flag. - * - pix_fmts (int list), - * - sample_fmts (int list), - * - sample_rates (int list), - * - channel_layouts (int64_t), - * - channel_counts (int list), - * - all_channel_counts (bool). - * Most of these options are of type binary, and should be set using - * av_opt_set_int_list() or av_opt_set_bin(). If they are not set, all - * corresponding formats are accepted. - * - * As a special case, if neither channel_layouts nor channel_counts is set, - * all valid channel layouts are accepted, but channel counts without a - * layout are not, unless all_channel_counts is set. - * Also, channel_layouts must not contain a channel layout already accepted - * by a value in channel_counts; for example, if channel_counts contains 2, - * then channel_layouts must not contain stereo. - */ - -/** - * Get a frame with filtered data from sink and put it in frame. - * - * @param ctx pointer to a buffersink or abuffersink filter context. - * @param frame pointer to an allocated frame that will be filled with data. - * The data must be freed using av_frame_unref() / av_frame_free() - * @param flags a combination of AV_BUFFERSINK_FLAG_* flags - * - * @return >= 0 in for success, a negative AVERROR code for failure. - */ -int av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags); - -/** - * Tell av_buffersink_get_buffer_ref() to read video/samples buffer - * reference, but not remove it from the buffer. This is useful if you - * need only to read a video/samples buffer, without to fetch it. - */ -#define AV_BUFFERSINK_FLAG_PEEK 1 - -/** - * Tell av_buffersink_get_buffer_ref() not to request a frame from its input. - * If a frame is already buffered, it is read (and removed from the buffer), - * but if no frame is present, return AVERROR(EAGAIN). - */ -#define AV_BUFFERSINK_FLAG_NO_REQUEST 2 - -#if FF_API_BUFFERSINK_ALLOC -/** - * Deprecated and unused struct to use for initializing a buffersink context. - */ -typedef struct AVBufferSinkParams { - const enum AVPixelFormat *pixel_fmts; ///< list of allowed pixel formats, terminated by AV_PIX_FMT_NONE -} AVBufferSinkParams; - -/** - * Create an AVBufferSinkParams structure. - * - * Must be freed with av_free(). - */ -attribute_deprecated -AVBufferSinkParams *av_buffersink_params_alloc(void); - -/** - * Deprecated and unused struct to use for initializing an abuffersink context. - */ -typedef struct AVABufferSinkParams { - const enum AVSampleFormat *sample_fmts; ///< list of allowed sample formats, terminated by AV_SAMPLE_FMT_NONE - const int64_t *channel_layouts; ///< list of allowed channel layouts, terminated by -1 - const int *channel_counts; ///< list of allowed channel counts, terminated by -1 - int all_channel_counts; ///< if not 0, accept any channel count or layout - int *sample_rates; ///< list of allowed sample rates, terminated by -1 -} AVABufferSinkParams; - -/** - * Create an AVABufferSinkParams structure. - * - * Must be freed with av_free(). - */ -attribute_deprecated -AVABufferSinkParams *av_abuffersink_params_alloc(void); -#endif - -/** - * Set the frame size for an audio buffer sink. - * - * All calls to av_buffersink_get_buffer_ref will return a buffer with - * exactly the specified number of samples, or AVERROR(EAGAIN) if there is - * not enough. The last buffer at EOF will be padded with 0. - */ -void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size); - -/** - * @defgroup lavfi_buffersink_accessors Buffer sink accessors - * Get the properties of the stream - * @{ - */ - -enum AVMediaType av_buffersink_get_type (const AVFilterContext *ctx); -AVRational av_buffersink_get_time_base (const AVFilterContext *ctx); -int av_buffersink_get_format (const AVFilterContext *ctx); - -AVRational av_buffersink_get_frame_rate (const AVFilterContext *ctx); -int av_buffersink_get_w (const AVFilterContext *ctx); -int av_buffersink_get_h (const AVFilterContext *ctx); -AVRational av_buffersink_get_sample_aspect_ratio (const AVFilterContext *ctx); - -int av_buffersink_get_channels (const AVFilterContext *ctx); -uint64_t av_buffersink_get_channel_layout (const AVFilterContext *ctx); -int av_buffersink_get_sample_rate (const AVFilterContext *ctx); - -AVBufferRef * av_buffersink_get_hw_frames_ctx (const AVFilterContext *ctx); - -/** @} */ - -/** - * Get a frame with filtered data from sink and put it in frame. - * - * @param ctx pointer to a context of a buffersink or abuffersink AVFilter. - * @param frame pointer to an allocated frame that will be filled with data. - * The data must be freed using av_frame_unref() / av_frame_free() - * - * @return - * - >= 0 if a frame was successfully returned. - * - AVERROR(EAGAIN) if no frames are available at this point; more - * input frames must be added to the filtergraph to get more output. - * - AVERROR_EOF if there will be no more output frames on this sink. - * - A different negative AVERROR code in other failure cases. - */ -int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame); - -/** - * Same as av_buffersink_get_frame(), but with the ability to specify the number - * of samples read. This function is less efficient than - * av_buffersink_get_frame(), because it copies the data around. - * - * @param ctx pointer to a context of the abuffersink AVFilter. - * @param frame pointer to an allocated frame that will be filled with data. - * The data must be freed using av_frame_unref() / av_frame_free() - * frame will contain exactly nb_samples audio samples, except at - * the end of stream, when it can contain less than nb_samples. - * - * @return The return codes have the same meaning as for - * av_buffersink_get_frame(). - * - * @warning do not mix this function with av_buffersink_get_frame(). Use only one or - * the other with a single sink, not both. - */ -int av_buffersink_get_samples(AVFilterContext *ctx, AVFrame *frame, int nb_samples); - -/** - * @} - */ - -#endif /* AVFILTER_BUFFERSINK_H */ diff --git a/prebuilts/aarch64/include/libavfilter/buffersrc.h b/prebuilts/aarch64/include/libavfilter/buffersrc.h deleted file mode 100644 index 08fbd18..0000000 --- a/prebuilts/aarch64/include/libavfilter/buffersrc.h +++ /dev/null @@ -1,209 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_BUFFERSRC_H -#define AVFILTER_BUFFERSRC_H - -/** - * @file - * @ingroup lavfi_buffersrc - * Memory buffer source API. - */ - -#include "avfilter.h" - -/** - * @defgroup lavfi_buffersrc Buffer source API - * @ingroup lavfi - * @{ - */ - -enum { - - /** - * Do not check for format changes. - */ - AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT = 1, - - /** - * Immediately push the frame to the output. - */ - AV_BUFFERSRC_FLAG_PUSH = 4, - - /** - * Keep a reference to the frame. - * If the frame if reference-counted, create a new reference; otherwise - * copy the frame data. - */ - AV_BUFFERSRC_FLAG_KEEP_REF = 8, - -}; - -/** - * Get the number of failed requests. - * - * A failed request is when the request_frame method is called while no - * frame is present in the buffer. - * The number is reset when a frame is added. - */ -unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src); - -/** - * This structure contains the parameters describing the frames that will be - * passed to this filter. - * - * It should be allocated with av_buffersrc_parameters_alloc() and freed with - * av_free(). All the allocated fields in it remain owned by the caller. - */ -typedef struct AVBufferSrcParameters { - /** - * video: the pixel format, value corresponds to enum AVPixelFormat - * audio: the sample format, value corresponds to enum AVSampleFormat - */ - int format; - /** - * The timebase to be used for the timestamps on the input frames. - */ - AVRational time_base; - - /** - * Video only, the display dimensions of the input frames. - */ - int width, height; - - /** - * Video only, the sample (pixel) aspect ratio. - */ - AVRational sample_aspect_ratio; - - /** - * Video only, the frame rate of the input video. This field must only be - * set to a non-zero value if input stream has a known constant framerate - * and should be left at its initial value if the framerate is variable or - * unknown. - */ - AVRational frame_rate; - - /** - * Video with a hwaccel pixel format only. This should be a reference to an - * AVHWFramesContext instance describing the input frames. - */ - AVBufferRef *hw_frames_ctx; - - /** - * Audio only, the audio sampling rate in samples per second. - */ - int sample_rate; - - /** - * Audio only, the audio channel layout - */ - uint64_t channel_layout; -} AVBufferSrcParameters; - -/** - * Allocate a new AVBufferSrcParameters instance. It should be freed by the - * caller with av_free(). - */ -AVBufferSrcParameters *av_buffersrc_parameters_alloc(void); - -/** - * Initialize the buffersrc or abuffersrc filter with the provided parameters. - * This function may be called multiple times, the later calls override the - * previous ones. Some of the parameters may also be set through AVOptions, then - * whatever method is used last takes precedence. - * - * @param ctx an instance of the buffersrc or abuffersrc filter - * @param param the stream parameters. The frames later passed to this filter - * must conform to those parameters. All the allocated fields in - * param remain owned by the caller, libavfilter will make internal - * copies or references when necessary. - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *param); - -/** - * Add a frame to the buffer source. - * - * @param ctx an instance of the buffersrc filter - * @param frame frame to be added. If the frame is reference counted, this - * function will make a new reference to it. Otherwise the frame data will be - * copied. - * - * @return 0 on success, a negative AVERROR on error - * - * This function is equivalent to av_buffersrc_add_frame_flags() with the - * AV_BUFFERSRC_FLAG_KEEP_REF flag. - */ -av_warn_unused_result -int av_buffersrc_write_frame(AVFilterContext *ctx, const AVFrame *frame); - -/** - * Add a frame to the buffer source. - * - * @param ctx an instance of the buffersrc filter - * @param frame frame to be added. If the frame is reference counted, this - * function will take ownership of the reference(s) and reset the frame. - * Otherwise the frame data will be copied. If this function returns an error, - * the input frame is not touched. - * - * @return 0 on success, a negative AVERROR on error. - * - * @note the difference between this function and av_buffersrc_write_frame() is - * that av_buffersrc_write_frame() creates a new reference to the input frame, - * while this function takes ownership of the reference passed to it. - * - * This function is equivalent to av_buffersrc_add_frame_flags() without the - * AV_BUFFERSRC_FLAG_KEEP_REF flag. - */ -av_warn_unused_result -int av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame); - -/** - * Add a frame to the buffer source. - * - * By default, if the frame is reference-counted, this function will take - * ownership of the reference(s) and reset the frame. This can be controlled - * using the flags. - * - * If this function returns an error, the input frame is not touched. - * - * @param buffer_src pointer to a buffer source context - * @param frame a frame, or NULL to mark EOF - * @param flags a combination of AV_BUFFERSRC_FLAG_* - * @return >= 0 in case of success, a negative AVERROR code - * in case of failure - */ -av_warn_unused_result -int av_buffersrc_add_frame_flags(AVFilterContext *buffer_src, - AVFrame *frame, int flags); - -/** - * Close the buffer source after EOF. - * - * This is similar to passing NULL to av_buffersrc_add_frame_flags() - * except it takes the timestamp of the EOF, i.e. the timestamp of the end - * of the last frame. - */ -int av_buffersrc_close(AVFilterContext *ctx, int64_t pts, unsigned flags); - -/** - * @} - */ - -#endif /* AVFILTER_BUFFERSRC_H */ diff --git a/prebuilts/aarch64/include/libavfilter/version.h b/prebuilts/aarch64/include/libavfilter/version.h deleted file mode 100644 index 33bb98e..0000000 --- a/prebuilts/aarch64/include/libavfilter/version.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_VERSION_H -#define AVFILTER_VERSION_H - -/** - * @file - * @ingroup lavfi - * Libavfilter version macros - */ - -#include "libavutil/version.h" - -#define LIBAVFILTER_VERSION_MAJOR 7 -#define LIBAVFILTER_VERSION_MINOR 110 -#define LIBAVFILTER_VERSION_MICRO 100 - - -#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ - LIBAVFILTER_VERSION_MINOR, \ - LIBAVFILTER_VERSION_MICRO) -#define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \ - LIBAVFILTER_VERSION_MINOR, \ - LIBAVFILTER_VERSION_MICRO) -#define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT - -#define LIBAVFILTER_IDENT "Lavfi" AV_STRINGIFY(LIBAVFILTER_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ - -#ifndef FF_API_OLD_FILTER_OPTS_ERROR -#define FF_API_OLD_FILTER_OPTS_ERROR (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_LAVR_OPTS -#define FF_API_LAVR_OPTS (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_FILTER_GET_SET -#define FF_API_FILTER_GET_SET (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_SWS_PARAM_OPTION -#define FF_API_SWS_PARAM_OPTION (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_NEXT -#define FF_API_NEXT (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_FILTER_LINK_SET_CLOSED -#define FF_API_FILTER_LINK_SET_CLOSED (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_BUFFERSINK_ALLOC -#define FF_API_BUFFERSINK_ALLOC (LIBAVFILTER_VERSION_MAJOR < 9) -#endif - -#endif /* AVFILTER_VERSION_H */ diff --git a/prebuilts/aarch64/include/libavformat/avformat.h b/prebuilts/aarch64/include/libavformat/avformat.h deleted file mode 100644 index 56708c0..0000000 --- a/prebuilts/aarch64/include/libavformat/avformat.h +++ /dev/null @@ -1,3012 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFORMAT_AVFORMAT_H -#define AVFORMAT_AVFORMAT_H - -/** - * @file - * @ingroup libavf - * Main libavformat public API header - */ - -/** - * @defgroup libavf libavformat - * I/O and Muxing/Demuxing Library - * - * Libavformat (lavf) is a library for dealing with various media container - * formats. Its main two purposes are demuxing - i.e. splitting a media file - * into component streams, and the reverse process of muxing - writing supplied - * data in a specified container format. It also has an @ref lavf_io - * "I/O module" which supports a number of protocols for accessing the data (e.g. - * file, tcp, http and others). - * Unless you are absolutely sure you won't use libavformat's network - * capabilities, you should also call avformat_network_init(). - * - * A supported input format is described by an AVInputFormat struct, conversely - * an output format is described by AVOutputFormat. You can iterate over all - * input/output formats using the av_demuxer_iterate / av_muxer_iterate() functions. - * The protocols layer is not part of the public API, so you can only get the names - * of supported protocols with the avio_enum_protocols() function. - * - * Main lavf structure used for both muxing and demuxing is AVFormatContext, - * which exports all information about the file being read or written. As with - * most Libavformat structures, its size is not part of public ABI, so it cannot be - * allocated on stack or directly with av_malloc(). To create an - * AVFormatContext, use avformat_alloc_context() (some functions, like - * avformat_open_input() might do that for you). - * - * Most importantly an AVFormatContext contains: - * @li the @ref AVFormatContext.iformat "input" or @ref AVFormatContext.oformat - * "output" format. It is either autodetected or set by user for input; - * always set by user for output. - * @li an @ref AVFormatContext.streams "array" of AVStreams, which describe all - * elementary streams stored in the file. AVStreams are typically referred to - * using their index in this array. - * @li an @ref AVFormatContext.pb "I/O context". It is either opened by lavf or - * set by user for input, always set by user for output (unless you are dealing - * with an AVFMT_NOFILE format). - * - * @section lavf_options Passing options to (de)muxers - * It is possible to configure lavf muxers and demuxers using the @ref avoptions - * mechanism. Generic (format-independent) libavformat options are provided by - * AVFormatContext, they can be examined from a user program by calling - * av_opt_next() / av_opt_find() on an allocated AVFormatContext (or its AVClass - * from avformat_get_class()). Private (format-specific) options are provided by - * AVFormatContext.priv_data if and only if AVInputFormat.priv_class / - * AVOutputFormat.priv_class of the corresponding format struct is non-NULL. - * Further options may be provided by the @ref AVFormatContext.pb "I/O context", - * if its AVClass is non-NULL, and the protocols layer. See the discussion on - * nesting in @ref avoptions documentation to learn how to access those. - * - * @section urls - * URL strings in libavformat are made of a scheme/protocol, a ':', and a - * scheme specific string. URLs without a scheme and ':' used for local files - * are supported but deprecated. "file:" should be used for local files. - * - * It is important that the scheme string is not taken from untrusted - * sources without checks. - * - * Note that some schemes/protocols are quite powerful, allowing access to - * both local and remote files, parts of them, concatenations of them, local - * audio and video devices and so on. - * - * @{ - * - * @defgroup lavf_decoding Demuxing - * @{ - * Demuxers read a media file and split it into chunks of data (@em packets). A - * @ref AVPacket "packet" contains one or more encoded frames which belongs to a - * single elementary stream. In the lavf API this process is represented by the - * avformat_open_input() function for opening a file, av_read_frame() for - * reading a single packet and finally avformat_close_input(), which does the - * cleanup. - * - * @section lavf_decoding_open Opening a media file - * The minimum information required to open a file is its URL, which - * is passed to avformat_open_input(), as in the following code: - * @code - * const char *url = "file:in.mp3"; - * AVFormatContext *s = NULL; - * int ret = avformat_open_input(&s, url, NULL, NULL); - * if (ret < 0) - * abort(); - * @endcode - * The above code attempts to allocate an AVFormatContext, open the - * specified file (autodetecting the format) and read the header, exporting the - * information stored there into s. Some formats do not have a header or do not - * store enough information there, so it is recommended that you call the - * avformat_find_stream_info() function which tries to read and decode a few - * frames to find missing information. - * - * In some cases you might want to preallocate an AVFormatContext yourself with - * avformat_alloc_context() and do some tweaking on it before passing it to - * avformat_open_input(). One such case is when you want to use custom functions - * for reading input data instead of lavf internal I/O layer. - * To do that, create your own AVIOContext with avio_alloc_context(), passing - * your reading callbacks to it. Then set the @em pb field of your - * AVFormatContext to newly created AVIOContext. - * - * Since the format of the opened file is in general not known until after - * avformat_open_input() has returned, it is not possible to set demuxer private - * options on a preallocated context. Instead, the options should be passed to - * avformat_open_input() wrapped in an AVDictionary: - * @code - * AVDictionary *options = NULL; - * av_dict_set(&options, "video_size", "640x480", 0); - * av_dict_set(&options, "pixel_format", "rgb24", 0); - * - * if (avformat_open_input(&s, url, NULL, &options) < 0) - * abort(); - * av_dict_free(&options); - * @endcode - * This code passes the private options 'video_size' and 'pixel_format' to the - * demuxer. They would be necessary for e.g. the rawvideo demuxer, since it - * cannot know how to interpret raw video data otherwise. If the format turns - * out to be something different than raw video, those options will not be - * recognized by the demuxer and therefore will not be applied. Such unrecognized - * options are then returned in the options dictionary (recognized options are - * consumed). The calling program can handle such unrecognized options as it - * wishes, e.g. - * @code - * AVDictionaryEntry *e; - * if (e = av_dict_get(options, "", NULL, AV_DICT_IGNORE_SUFFIX)) { - * fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key); - * abort(); - * } - * @endcode - * - * After you have finished reading the file, you must close it with - * avformat_close_input(). It will free everything associated with the file. - * - * @section lavf_decoding_read Reading from an opened file - * Reading data from an opened AVFormatContext is done by repeatedly calling - * av_read_frame() on it. Each call, if successful, will return an AVPacket - * containing encoded data for one AVStream, identified by - * AVPacket.stream_index. This packet may be passed straight into the libavcodec - * decoding functions avcodec_send_packet() or avcodec_decode_subtitle2() if the - * caller wishes to decode the data. - * - * AVPacket.pts, AVPacket.dts and AVPacket.duration timing information will be - * set if known. They may also be unset (i.e. AV_NOPTS_VALUE for - * pts/dts, 0 for duration) if the stream does not provide them. The timing - * information will be in AVStream.time_base units, i.e. it has to be - * multiplied by the timebase to convert them to seconds. - * - * A packet returned by av_read_frame() is always reference-counted, - * i.e. AVPacket.buf is set and the user may keep it indefinitely. - * The packet must be freed with av_packet_unref() when it is no - * longer needed. - * - * @section lavf_decoding_seek Seeking - * @} - * - * @defgroup lavf_encoding Muxing - * @{ - * Muxers take encoded data in the form of @ref AVPacket "AVPackets" and write - * it into files or other output bytestreams in the specified container format. - * - * The main API functions for muxing are avformat_write_header() for writing the - * file header, av_write_frame() / av_interleaved_write_frame() for writing the - * packets and av_write_trailer() for finalizing the file. - * - * At the beginning of the muxing process, the caller must first call - * avformat_alloc_context() to create a muxing context. The caller then sets up - * the muxer by filling the various fields in this context: - * - * - The @ref AVFormatContext.oformat "oformat" field must be set to select the - * muxer that will be used. - * - Unless the format is of the AVFMT_NOFILE type, the @ref AVFormatContext.pb - * "pb" field must be set to an opened IO context, either returned from - * avio_open2() or a custom one. - * - Unless the format is of the AVFMT_NOSTREAMS type, at least one stream must - * be created with the avformat_new_stream() function. The caller should fill - * the @ref AVStream.codecpar "stream codec parameters" information, such as the - * codec @ref AVCodecParameters.codec_type "type", @ref AVCodecParameters.codec_id - * "id" and other parameters (e.g. width / height, the pixel or sample format, - * etc.) as known. The @ref AVStream.time_base "stream timebase" should - * be set to the timebase that the caller desires to use for this stream (note - * that the timebase actually used by the muxer can be different, as will be - * described later). - * - It is advised to manually initialize only the relevant fields in - * AVCodecParameters, rather than using @ref avcodec_parameters_copy() during - * remuxing: there is no guarantee that the codec context values remain valid - * for both input and output format contexts. - * - The caller may fill in additional information, such as @ref - * AVFormatContext.metadata "global" or @ref AVStream.metadata "per-stream" - * metadata, @ref AVFormatContext.chapters "chapters", @ref - * AVFormatContext.programs "programs", etc. as described in the - * AVFormatContext documentation. Whether such information will actually be - * stored in the output depends on what the container format and the muxer - * support. - * - * When the muxing context is fully set up, the caller must call - * avformat_write_header() to initialize the muxer internals and write the file - * header. Whether anything actually is written to the IO context at this step - * depends on the muxer, but this function must always be called. Any muxer - * private options must be passed in the options parameter to this function. - * - * The data is then sent to the muxer by repeatedly calling av_write_frame() or - * av_interleaved_write_frame() (consult those functions' documentation for - * discussion on the difference between them; only one of them may be used with - * a single muxing context, they should not be mixed). Do note that the timing - * information on the packets sent to the muxer must be in the corresponding - * AVStream's timebase. That timebase is set by the muxer (in the - * avformat_write_header() step) and may be different from the timebase - * requested by the caller. - * - * Once all the data has been written, the caller must call av_write_trailer() - * to flush any buffered packets and finalize the output file, then close the IO - * context (if any) and finally free the muxing context with - * avformat_free_context(). - * @} - * - * @defgroup lavf_io I/O Read/Write - * @{ - * @section lavf_io_dirlist Directory listing - * The directory listing API makes it possible to list files on remote servers. - * - * Some of possible use cases: - * - an "open file" dialog to choose files from a remote location, - * - a recursive media finder providing a player with an ability to play all - * files from a given directory. - * - * @subsection lavf_io_dirlist_open Opening a directory - * At first, a directory needs to be opened by calling avio_open_dir() - * supplied with a URL and, optionally, ::AVDictionary containing - * protocol-specific parameters. The function returns zero or positive - * integer and allocates AVIODirContext on success. - * - * @code - * AVIODirContext *ctx = NULL; - * if (avio_open_dir(&ctx, "smb://example.com/some_dir", NULL) < 0) { - * fprintf(stderr, "Cannot open directory.\n"); - * abort(); - * } - * @endcode - * - * This code tries to open a sample directory using smb protocol without - * any additional parameters. - * - * @subsection lavf_io_dirlist_read Reading entries - * Each directory's entry (i.e. file, another directory, anything else - * within ::AVIODirEntryType) is represented by AVIODirEntry. - * Reading consecutive entries from an opened AVIODirContext is done by - * repeatedly calling avio_read_dir() on it. Each call returns zero or - * positive integer if successful. Reading can be stopped right after the - * NULL entry has been read -- it means there are no entries left to be - * read. The following code reads all entries from a directory associated - * with ctx and prints their names to standard output. - * @code - * AVIODirEntry *entry = NULL; - * for (;;) { - * if (avio_read_dir(ctx, &entry) < 0) { - * fprintf(stderr, "Cannot list directory.\n"); - * abort(); - * } - * if (!entry) - * break; - * printf("%s\n", entry->name); - * avio_free_directory_entry(&entry); - * } - * @endcode - * @} - * - * @defgroup lavf_codec Demuxers - * @{ - * @defgroup lavf_codec_native Native Demuxers - * @{ - * @} - * @defgroup lavf_codec_wrappers External library wrappers - * @{ - * @} - * @} - * @defgroup lavf_protos I/O Protocols - * @{ - * @} - * @defgroup lavf_internal Internal - * @{ - * @} - * @} - */ - -#include -#include /* FILE */ -#include "libavcodec/avcodec.h" -#include "libavutil/dict.h" -#include "libavutil/log.h" - -#include "avio.h" -#include "libavformat/version.h" - -struct AVFormatContext; - -struct AVDeviceInfoList; -struct AVDeviceCapabilitiesQuery; - -/** - * @defgroup metadata_api Public Metadata API - * @{ - * @ingroup libavf - * The metadata API allows libavformat to export metadata tags to a client - * application when demuxing. Conversely it allows a client application to - * set metadata when muxing. - * - * Metadata is exported or set as pairs of key/value strings in the 'metadata' - * fields of the AVFormatContext, AVStream, AVChapter and AVProgram structs - * using the @ref lavu_dict "AVDictionary" API. Like all strings in FFmpeg, - * metadata is assumed to be UTF-8 encoded Unicode. Note that metadata - * exported by demuxers isn't checked to be valid UTF-8 in most cases. - * - * Important concepts to keep in mind: - * - Keys are unique; there can never be 2 tags with the same key. This is - * also meant semantically, i.e., a demuxer should not knowingly produce - * several keys that are literally different but semantically identical. - * E.g., key=Author5, key=Author6. In this example, all authors must be - * placed in the same tag. - * - Metadata is flat, not hierarchical; there are no subtags. If you - * want to store, e.g., the email address of the child of producer Alice - * and actor Bob, that could have key=alice_and_bobs_childs_email_address. - * - Several modifiers can be applied to the tag name. This is done by - * appending a dash character ('-') and the modifier name in the order - * they appear in the list below -- e.g. foo-eng-sort, not foo-sort-eng. - * - language -- a tag whose value is localized for a particular language - * is appended with the ISO 639-2/B 3-letter language code. - * For example: Author-ger=Michael, Author-eng=Mike - * The original/default language is in the unqualified "Author" tag. - * A demuxer should set a default if it sets any translated tag. - * - sorting -- a modified version of a tag that should be used for - * sorting will have '-sort' appended. E.g. artist="The Beatles", - * artist-sort="Beatles, The". - * - Some protocols and demuxers support metadata updates. After a successful - * call to av_read_frame(), AVFormatContext.event_flags or AVStream.event_flags - * will be updated to indicate if metadata changed. In order to detect metadata - * changes on a stream, you need to loop through all streams in the AVFormatContext - * and check their individual event_flags. - * - * - Demuxers attempt to export metadata in a generic format, however tags - * with no generic equivalents are left as they are stored in the container. - * Follows a list of generic tag names: - * - @verbatim - album -- name of the set this work belongs to - album_artist -- main creator of the set/album, if different from artist. - e.g. "Various Artists" for compilation albums. - artist -- main creator of the work - comment -- any additional description of the file. - composer -- who composed the work, if different from artist. - copyright -- name of copyright holder. - creation_time-- date when the file was created, preferably in ISO 8601. - date -- date when the work was created, preferably in ISO 8601. - disc -- number of a subset, e.g. disc in a multi-disc collection. - encoder -- name/settings of the software/hardware that produced the file. - encoded_by -- person/group who created the file. - filename -- original name of the file. - genre -- . - language -- main language in which the work is performed, preferably - in ISO 639-2 format. Multiple languages can be specified by - separating them with commas. - performer -- artist who performed the work, if different from artist. - E.g for "Also sprach Zarathustra", artist would be "Richard - Strauss" and performer "London Philharmonic Orchestra". - publisher -- name of the label/publisher. - service_name -- name of the service in broadcasting (channel name). - service_provider -- name of the service provider in broadcasting. - title -- name of the work. - track -- number of this work in the set, can be in form current/total. - variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of - @endverbatim - * - * Look in the examples section for an application example how to use the Metadata API. - * - * @} - */ - -/* packet functions */ - - -/** - * Allocate and read the payload of a packet and initialize its - * fields with default values. - * - * @param s associated IO context - * @param pkt packet - * @param size desired payload size - * @return >0 (read size) if OK, AVERROR_xxx otherwise - */ -int av_get_packet(AVIOContext *s, AVPacket *pkt, int size); - - -/** - * Read data and append it to the current content of the AVPacket. - * If pkt->size is 0 this is identical to av_get_packet. - * Note that this uses av_grow_packet and thus involves a realloc - * which is inefficient. Thus this function should only be used - * when there is no reasonable way to know (an upper bound of) - * the final size. - * - * @param s associated IO context - * @param pkt packet - * @param size amount of data to read - * @return >0 (read size) if OK, AVERROR_xxx otherwise, previous data - * will not be lost even if an error occurs. - */ -int av_append_packet(AVIOContext *s, AVPacket *pkt, int size); - -/*************************************************/ -/* input/output formats */ - -struct AVCodecTag; - -/** - * This structure contains the data a format has to probe a file. - */ -typedef struct AVProbeData { - const char *filename; - unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */ - int buf_size; /**< Size of buf except extra allocated bytes */ - const char *mime_type; /**< mime_type, when known. */ -} AVProbeData; - -#define AVPROBE_SCORE_RETRY (AVPROBE_SCORE_MAX/4) -#define AVPROBE_SCORE_STREAM_RETRY (AVPROBE_SCORE_MAX/4-1) - -#define AVPROBE_SCORE_EXTENSION 50 ///< score for file extension -#define AVPROBE_SCORE_MIME 75 ///< score for file mime type -#define AVPROBE_SCORE_MAX 100 ///< maximum score - -#define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer - -/// Demuxer will use avio_open, no opened file should be provided by the caller. -#define AVFMT_NOFILE 0x0001 -#define AVFMT_NEEDNUMBER 0x0002 /**< Needs '%d' in filename. */ -#define AVFMT_SHOW_IDS 0x0008 /**< Show format stream IDs numbers. */ -#define AVFMT_GLOBALHEADER 0x0040 /**< Format wants global header. */ -#define AVFMT_NOTIMESTAMPS 0x0080 /**< Format does not need / have any timestamps. */ -#define AVFMT_GENERIC_INDEX 0x0100 /**< Use generic index building code. */ -#define AVFMT_TS_DISCONT 0x0200 /**< Format allows timestamp discontinuities. Note, muxers always require valid (monotone) timestamps */ -#define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */ -#define AVFMT_NODIMENSIONS 0x0800 /**< Format does not need width/height */ -#define AVFMT_NOSTREAMS 0x1000 /**< Format does not require any streams */ -#define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fall back on binary search via read_timestamp */ -#define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fall back on generic search */ -#define AVFMT_NO_BYTE_SEEK 0x8000 /**< Format does not allow seeking by bytes */ -#define AVFMT_ALLOW_FLUSH 0x10000 /**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. */ -#define AVFMT_TS_NONSTRICT 0x20000 /**< Format does not require strictly - increasing timestamps, but they must - still be monotonic */ -#define AVFMT_TS_NEGATIVE 0x40000 /**< Format allows muxing negative - timestamps. If not set the timestamp - will be shifted in av_write_frame and - av_interleaved_write_frame so they - start from 0. - The user or muxer can override this through - AVFormatContext.avoid_negative_ts - */ - -#define AVFMT_SEEK_TO_PTS 0x4000000 /**< Seeking is based on PTS */ - -/** - * @addtogroup lavf_encoding - * @{ - */ -typedef struct AVOutputFormat { - const char *name; - /** - * Descriptive name for the format, meant to be more human-readable - * than name. You should use the NULL_IF_CONFIG_SMALL() macro - * to define it. - */ - const char *long_name; - const char *mime_type; - const char *extensions; /**< comma-separated filename extensions */ - /* output support */ - enum AVCodecID audio_codec; /**< default audio codec */ - enum AVCodecID video_codec; /**< default video codec */ - enum AVCodecID subtitle_codec; /**< default subtitle codec */ - /** - * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, - * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, - * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, - * AVFMT_TS_NONSTRICT, AVFMT_TS_NEGATIVE - */ - int flags; - - /** - * List of supported codec_id-codec_tag pairs, ordered by "better - * choice first". The arrays are all terminated by AV_CODEC_ID_NONE. - */ - const struct AVCodecTag * const *codec_tag; - - - const AVClass *priv_class; ///< AVClass for the private context - - /***************************************************************** - * No fields below this line are 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. - ***************************************************************** - */ - /** - * The ff_const59 define is not part of the public API and will - * be removed without further warning. - */ -#if FF_API_AVIOFORMAT -#define ff_const59 -#else -#define ff_const59 const -#endif -#if FF_API_NEXT - ff_const59 struct AVOutputFormat *next; -#endif - /** - * size of private data so that it can be allocated in the wrapper - */ - int priv_data_size; - - int (*write_header)(struct AVFormatContext *); - /** - * Write a packet. If AVFMT_ALLOW_FLUSH is set in flags, - * pkt can be NULL in order to flush data buffered in the muxer. - * When flushing, return 0 if there still is more data to flush, - * or 1 if everything was flushed and there is no more buffered - * data. - */ - int (*write_packet)(struct AVFormatContext *, AVPacket *pkt); - int (*write_trailer)(struct AVFormatContext *); - /** - * A format-specific function for interleavement. - * If unset, packets will be interleaved by dts. - */ - int (*interleave_packet)(struct AVFormatContext *, AVPacket *out, - AVPacket *in, int flush); - /** - * Test if the given codec can be stored in this container. - * - * @return 1 if the codec is supported, 0 if it is not. - * A negative number if unknown. - * MKTAG('A', 'P', 'I', 'C') if the codec is only supported as AV_DISPOSITION_ATTACHED_PIC - */ - int (*query_codec)(enum AVCodecID id, int std_compliance); - - void (*get_output_timestamp)(struct AVFormatContext *s, int stream, - int64_t *dts, int64_t *wall); - /** - * Allows sending messages from application to device. - */ - int (*control_message)(struct AVFormatContext *s, int type, - void *data, size_t data_size); - - /** - * Write an uncoded AVFrame. - * - * See av_write_uncoded_frame() for details. - * - * The library will free *frame afterwards, but the muxer can prevent it - * by setting the pointer to NULL. - */ - int (*write_uncoded_frame)(struct AVFormatContext *, int stream_index, - AVFrame **frame, unsigned flags); - /** - * Returns device list with it properties. - * @see avdevice_list_devices() for more details. - */ - int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); -#if LIBAVFORMAT_VERSION_MAJOR < 59 - /** - * Initialize device capabilities submodule. - * @see avdevice_capabilities_create() for more details. - */ - int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); - /** - * Free device capabilities submodule. - * @see avdevice_capabilities_free() for more details. - */ - int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); -#endif - enum AVCodecID data_codec; /**< default data codec */ - /** - * Initialize format. May allocate data here, and set any AVFormatContext or - * AVStream parameters that need to be set before packets are sent. - * This method must not write output. - * - * Return 0 if streams were fully configured, 1 if not, negative AVERROR on failure - * - * Any allocations made here must be freed in deinit(). - */ - int (*init)(struct AVFormatContext *); - /** - * Deinitialize format. If present, this is called whenever the muxer is being - * destroyed, regardless of whether or not the header has been written. - * - * If a trailer is being written, this is called after write_trailer(). - * - * This is called if init() fails as well. - */ - void (*deinit)(struct AVFormatContext *); - /** - * Set up any necessary bitstream filtering and extract any extra data needed - * for the global header. - * Return 0 if more packets from this stream must be checked; 1 if not. - */ - int (*check_bitstream)(struct AVFormatContext *, const AVPacket *pkt); -} AVOutputFormat; -/** - * @} - */ - -/** - * @addtogroup lavf_decoding - * @{ - */ -typedef struct AVInputFormat { - /** - * A comma separated list of short names for the format. New names - * may be appended with a minor bump. - */ - const char *name; - - /** - * Descriptive name for the format, meant to be more human-readable - * than name. You should use the NULL_IF_CONFIG_SMALL() macro - * to define it. - */ - const char *long_name; - - /** - * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, - * AVFMT_NOTIMESTAMPS, AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, - * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS. - */ - int flags; - - /** - * If extensions are defined, then no probe is done. You should - * usually not use extension format guessing because it is not - * reliable enough - */ - const char *extensions; - - const struct AVCodecTag * const *codec_tag; - - const AVClass *priv_class; ///< AVClass for the private context - - /** - * Comma-separated list of mime types. - * It is used check for matching mime types while probing. - * @see av_probe_input_format2 - */ - const char *mime_type; - - /***************************************************************** - * No fields below this line are 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. - ***************************************************************** - */ -#if FF_API_NEXT - ff_const59 struct AVInputFormat *next; -#endif - - /** - * Raw demuxers store their codec ID here. - */ - int raw_codec_id; - - /** - * Size of private data so that it can be allocated in the wrapper. - */ - int priv_data_size; - - /** - * Tell if a given file has a chance of being parsed as this format. - * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes - * big so you do not have to check for that unless you need more. - */ - int (*read_probe)(const AVProbeData *); - - /** - * Read the format header and initialize the AVFormatContext - * structure. Return 0 if OK. 'avformat_new_stream' should be - * called to create new streams. - */ - int (*read_header)(struct AVFormatContext *); - - /** - * Read one packet and put it in 'pkt'. pts and flags are also - * set. 'avformat_new_stream' can be called only if the flag - * AVFMTCTX_NOHEADER is used and only in the calling thread (not in a - * background thread). - * @return 0 on success, < 0 on error. - * Upon returning an error, pkt must be unreferenced by the caller. - */ - int (*read_packet)(struct AVFormatContext *, AVPacket *pkt); - - /** - * Close the stream. The AVFormatContext and AVStreams are not - * freed by this function - */ - int (*read_close)(struct AVFormatContext *); - - /** - * Seek to a given timestamp relative to the frames in - * stream component stream_index. - * @param stream_index Must not be -1. - * @param flags Selects which direction should be preferred if no exact - * match is available. - * @return >= 0 on success (but not necessarily the new offset) - */ - int (*read_seek)(struct AVFormatContext *, - int stream_index, int64_t timestamp, int flags); - - /** - * Get the next timestamp in stream[stream_index].time_base units. - * @return the timestamp or AV_NOPTS_VALUE if an error occurred - */ - int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index, - int64_t *pos, int64_t pos_limit); - - /** - * Start/resume playing - only meaningful if using a network-based format - * (RTSP). - */ - int (*read_play)(struct AVFormatContext *); - - /** - * Pause playing - only meaningful if using a network-based format - * (RTSP). - */ - int (*read_pause)(struct AVFormatContext *); - - /** - * Seek to timestamp ts. - * Seeking will be done so that the point from which all active streams - * can be presented successfully will be closest to ts and within min/max_ts. - * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. - */ - int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); - - /** - * Returns device list with it properties. - * @see avdevice_list_devices() for more details. - */ - int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - /** - * Initialize device capabilities submodule. - * @see avdevice_capabilities_create() for more details. - */ - int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); - - /** - * Free device capabilities submodule. - * @see avdevice_capabilities_free() for more details. - */ - int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); -#endif -} AVInputFormat; -/** - * @} - */ - -enum AVStreamParseType { - AVSTREAM_PARSE_NONE, - AVSTREAM_PARSE_FULL, /**< full parsing and repack */ - AVSTREAM_PARSE_HEADERS, /**< Only parse headers, do not repack. */ - AVSTREAM_PARSE_TIMESTAMPS, /**< full parsing and interpolation of timestamps for frames not starting on a packet boundary */ - AVSTREAM_PARSE_FULL_ONCE, /**< full parsing and repack of the first frame only, only implemented for H.264 currently */ - AVSTREAM_PARSE_FULL_RAW, /**< full parsing and repack with timestamp and position generation by parser for raw - this assumes that each packet in the file contains no demuxer level headers and - just codec level data, otherwise position generation would fail */ -}; - -typedef struct AVIndexEntry { - int64_t pos; - int64_t timestamp; /**< - * Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are available - * when seeking to this entry. That means preferable PTS on keyframe based formats. - * But demuxers can choose to store a different timestamp, if it is more convenient for the implementation or nothing better - * is known - */ -#define AVINDEX_KEYFRAME 0x0001 -#define AVINDEX_DISCARD_FRAME 0x0002 /** - * Flag is used to indicate which frame should be discarded after decoding. - */ - int flags:2; - int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment). - int min_distance; /**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. */ -} AVIndexEntry; - -#define AV_DISPOSITION_DEFAULT 0x0001 -#define AV_DISPOSITION_DUB 0x0002 -#define AV_DISPOSITION_ORIGINAL 0x0004 -#define AV_DISPOSITION_COMMENT 0x0008 -#define AV_DISPOSITION_LYRICS 0x0010 -#define AV_DISPOSITION_KARAOKE 0x0020 - -/** - * Track should be used during playback by default. - * Useful for subtitle track that should be displayed - * even when user did not explicitly ask for subtitles. - */ -#define AV_DISPOSITION_FORCED 0x0040 -#define AV_DISPOSITION_HEARING_IMPAIRED 0x0080 /**< stream for hearing impaired audiences */ -#define AV_DISPOSITION_VISUAL_IMPAIRED 0x0100 /**< stream for visual impaired audiences */ -#define AV_DISPOSITION_CLEAN_EFFECTS 0x0200 /**< stream without voice */ -/** - * The stream is stored in the file as an attached picture/"cover art" (e.g. - * APIC frame in ID3v2). The first (usually only) packet associated with it - * will be returned among the first few packets read from the file unless - * seeking takes place. It can also be accessed at any time in - * AVStream.attached_pic. - */ -#define AV_DISPOSITION_ATTACHED_PIC 0x0400 -/** - * The stream is sparse, and contains thumbnail images, often corresponding - * to chapter markers. Only ever used with AV_DISPOSITION_ATTACHED_PIC. - */ -#define AV_DISPOSITION_TIMED_THUMBNAILS 0x0800 - -typedef struct AVStreamInternal AVStreamInternal; - -/** - * To specify text track kind (different from subtitles default). - */ -#define AV_DISPOSITION_CAPTIONS 0x10000 -#define AV_DISPOSITION_DESCRIPTIONS 0x20000 -#define AV_DISPOSITION_METADATA 0x40000 -#define AV_DISPOSITION_DEPENDENT 0x80000 ///< dependent audio stream (mix_type=0 in mpegts) -#define AV_DISPOSITION_STILL_IMAGE 0x100000 ///< still images in video stream (still_picture_flag=1 in mpegts) - -/** - * Options for behavior on timestamp wrap detection. - */ -#define AV_PTS_WRAP_IGNORE 0 ///< ignore the wrap -#define AV_PTS_WRAP_ADD_OFFSET 1 ///< add the format specific offset on wrap detection -#define AV_PTS_WRAP_SUB_OFFSET -1 ///< subtract the format specific offset on wrap detection - -/** - * Stream structure. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVStream) must not be used outside libav*. - */ -typedef struct AVStream { - int index; /**< stream index in AVFormatContext */ - /** - * Format-specific stream ID. - * decoding: set by libavformat - * encoding: set by the user, replaced by libavformat if left unset - */ - int id; -#if FF_API_LAVF_AVCTX - /** - * @deprecated use the codecpar struct instead - */ - attribute_deprecated - AVCodecContext *codec; -#endif - void *priv_data; - - /** - * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. - * - * decoding: set by libavformat - * encoding: May be set by the caller before avformat_write_header() to - * provide a hint to the muxer about the desired timebase. In - * avformat_write_header(), the muxer will overwrite this field - * with the timebase that will actually be used for the timestamps - * written into the file (which may or may not be related to the - * user-provided one, depending on the format). - */ - AVRational time_base; - - /** - * Decoding: pts of the first frame of the stream in presentation order, in stream time base. - * Only set this if you are absolutely 100% sure that the value you set - * it to really is the pts of the first frame. - * This may be undefined (AV_NOPTS_VALUE). - * @note The ASF header does NOT contain a correct start_time the ASF - * demuxer must NOT set this. - */ - int64_t start_time; - - /** - * Decoding: duration of the stream, in stream time base. - * If a source file does not specify a duration, but does specify - * a bitrate, this value will be estimated from bitrate and file size. - * - * Encoding: May be set by the caller before avformat_write_header() to - * provide a hint to the muxer about the estimated duration. - */ - int64_t duration; - - int64_t nb_frames; ///< number of frames in this stream if known or 0 - - int disposition; /**< AV_DISPOSITION_* bit field */ - - enum AVDiscard discard; ///< Selects which packets can be discarded at will and do not need to be demuxed. - - /** - * sample aspect ratio (0 if unknown) - * - encoding: Set by user. - * - decoding: Set by libavformat. - */ - AVRational sample_aspect_ratio; - - AVDictionary *metadata; - - /** - * Average framerate - * - * - demuxing: May be set by libavformat when creating the stream or in - * avformat_find_stream_info(). - * - muxing: May be set by the caller before avformat_write_header(). - */ - AVRational avg_frame_rate; - - /** - * For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet - * will contain the attached picture. - * - * decoding: set by libavformat, must not be modified by the caller. - * encoding: unused - */ - AVPacket attached_pic; - - /** - * An array of side data that applies to the whole stream (i.e. the - * container does not allow it to change between packets). - * - * There may be no overlap between the side data in this array and side data - * in the packets. I.e. a given side data is either exported by the muxer - * (demuxing) / set by the caller (muxing) in this array, then it never - * appears in the packets, or the side data is exported / sent through - * the packets (always in the first packet where the value becomes known or - * changes), then it does not appear in this array. - * - * - demuxing: Set by libavformat when the stream is created. - * - muxing: May be set by the caller before avformat_write_header(). - * - * Freed by libavformat in avformat_free_context(). - * - * @see av_format_inject_global_side_data() - */ - AVPacketSideData *side_data; - /** - * The number of elements in the AVStream.side_data array. - */ - int nb_side_data; - - /** - * Flags indicating events happening on the stream, a combination of - * AVSTREAM_EVENT_FLAG_*. - * - * - demuxing: may be set by the demuxer in avformat_open_input(), - * avformat_find_stream_info() and av_read_frame(). Flags must be cleared - * by the user once the event has been handled. - * - muxing: may be set by the user after avformat_write_header(). to - * indicate a user-triggered event. The muxer will clear the flags for - * events it has handled in av_[interleaved]_write_frame(). - */ - int event_flags; -/** - * - demuxing: the demuxer read new metadata from the file and updated - * AVStream.metadata accordingly - * - muxing: the user updated AVStream.metadata and wishes the muxer to write - * it into the file - */ -#define AVSTREAM_EVENT_FLAG_METADATA_UPDATED 0x0001 -/** - * - demuxing: new packets for this stream were read from the file. This - * event is informational only and does not guarantee that new packets - * for this stream will necessarily be returned from av_read_frame(). - */ -#define AVSTREAM_EVENT_FLAG_NEW_PACKETS (1 << 1) - - /** - * Real base framerate of the stream. - * This is the lowest framerate with which all timestamps can be - * represented accurately (it is the least common multiple of all - * framerates in the stream). Note, this value is just a guess! - * For example, if the time base is 1/90000 and all frames have either - * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. - */ - AVRational r_frame_rate; - -#if FF_API_LAVF_FFSERVER - /** - * String containing pairs of key and values describing recommended encoder configuration. - * Pairs are separated by ','. - * Keys are separated from values by '='. - * - * @deprecated unused - */ - attribute_deprecated - char *recommended_encoder_configuration; -#endif - - /** - * Codec parameters associated with this stream. Allocated and freed by - * libavformat in avformat_new_stream() and avformat_free_context() - * respectively. - * - * - demuxing: filled by libavformat on stream creation or in - * avformat_find_stream_info() - * - muxing: filled by the caller before avformat_write_header() - */ - AVCodecParameters *codecpar; - - /***************************************************************** - * 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. - * Internal note: be aware that physically removing these fields - * will break ABI. Replace removed fields with dummy fields, and - * add new fields to AVStreamInternal. - ***************************************************************** - */ - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - // kept for ABI compatibility only, do not access in any way - void *unused; -#endif - - int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */ - - // Timestamp generation support: - /** - * Timestamp corresponding to the last dts sync point. - * - * Initialized when AVCodecParserContext.dts_sync_point >= 0 and - * a DTS is received from the underlying container. Otherwise set to - * AV_NOPTS_VALUE by default. - */ - int64_t first_dts; - int64_t cur_dts; - int64_t last_IP_pts; - int last_IP_duration; - - /** - * Number of packets to buffer for codec probing - */ - int probe_packets; - - /** - * Number of frames that have been demuxed during avformat_find_stream_info() - */ - int codec_info_nb_frames; - - /* av_read_frame() support */ - enum AVStreamParseType need_parsing; - struct AVCodecParserContext *parser; - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - // kept for ABI compatibility only, do not access in any way - void *unused7; - AVProbeData unused6; - int64_t unused5[16+1]; -#endif - AVIndexEntry *index_entries; /**< Only used if the format does not - support seeking natively. */ - int nb_index_entries; - unsigned int index_entries_allocated_size; - - /** - * Stream Identifier - * This is the MPEG-TS stream identifier +1 - * 0 means unknown - */ - int stream_identifier; - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - // kept for ABI compatibility only, do not access in any way - int unused8; - int unused9; - int unused10; -#endif - - /** - * An opaque field for libavformat internal usage. - * Must not be accessed in any way by callers. - */ - AVStreamInternal *internal; -} AVStream; - -#if FF_API_FORMAT_GET_SET -/** - * Accessors for some AVStream fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -AVRational av_stream_get_r_frame_rate(const AVStream *s); -attribute_deprecated -void av_stream_set_r_frame_rate(AVStream *s, AVRational r); -#if FF_API_LAVF_FFSERVER -attribute_deprecated -char* av_stream_get_recommended_encoder_configuration(const AVStream *s); -attribute_deprecated -void av_stream_set_recommended_encoder_configuration(AVStream *s, char *configuration); -#endif -#endif - -struct AVCodecParserContext *av_stream_get_parser(const AVStream *s); - -/** - * Returns the pts of the last muxed packet + its duration - * - * the retuned value is undefined when used with a demuxer. - */ -int64_t av_stream_get_end_pts(const AVStream *st); - -#define AV_PROGRAM_RUNNING 1 - -/** - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVProgram) must not be used outside libav*. - */ -typedef struct AVProgram { - int id; - int flags; - enum AVDiscard discard; ///< selects which program to discard and which to feed to the caller - unsigned int *stream_index; - unsigned int nb_stream_indexes; - AVDictionary *metadata; - - int program_num; - int pmt_pid; - int pcr_pid; - int pmt_version; - - /***************************************************************** - * 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. - ***************************************************************** - */ - int64_t start_time; - int64_t end_time; - - int64_t pts_wrap_reference; ///< reference dts for wrap detection - int pts_wrap_behavior; ///< behavior on wrap detection -} AVProgram; - -#define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present - (streams are added dynamically) */ -#define AVFMTCTX_UNSEEKABLE 0x0002 /**< signal that the stream is definitely - not seekable, and attempts to call the - seek function will fail. For some - network protocols (e.g. HLS), this can - change dynamically at runtime. */ - -typedef struct AVChapter { -#if FF_API_CHAPTER_ID_INT - int id; ///< unique ID to identify the chapter -#else - int64_t id; ///< unique ID to identify the chapter -#endif - AVRational time_base; ///< time base in which the start/end timestamps are specified - int64_t start, end; ///< chapter start/end time in time_base units - AVDictionary *metadata; -} AVChapter; - - -/** - * Callback used by devices to communicate with application. - */ -typedef int (*av_format_control_message)(struct AVFormatContext *s, int type, - void *data, size_t data_size); - -typedef int (*AVOpenCallback)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, - const AVIOInterruptCB *int_cb, AVDictionary **options); - -/** - * The duration of a video can be estimated through various ways, and this enum can be used - * to know how the duration was estimated. - */ -enum AVDurationEstimationMethod { - AVFMT_DURATION_FROM_PTS, ///< Duration accurately estimated from PTSes - AVFMT_DURATION_FROM_STREAM, ///< Duration estimated from a stream with a known duration - AVFMT_DURATION_FROM_BITRATE ///< Duration estimated from bitrate (less accurate) -}; - -typedef struct AVFormatInternal AVFormatInternal; - -/** - * Format I/O context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVFormatContext) must not be used outside libav*, use - * avformat_alloc_context() to create an AVFormatContext. - * - * Fields can be accessed through AVOptions (av_opt*), - * the name string used matches the associated command line parameter name and - * can be found in libavformat/options_table.h. - * The AVOption/command line parameter names differ in some cases from the C - * structure field names for historic reasons or brevity. - */ -typedef struct AVFormatContext { - /** - * A class for logging and @ref avoptions. Set by avformat_alloc_context(). - * Exports (de)muxer private options if they exist. - */ - const AVClass *av_class; - - /** - * The input container format. - * - * Demuxing only, set by avformat_open_input(). - */ - ff_const59 struct AVInputFormat *iformat; - - /** - * The output container format. - * - * Muxing only, must be set by the caller before avformat_write_header(). - */ - ff_const59 struct AVOutputFormat *oformat; - - /** - * Format private data. This is an AVOptions-enabled struct - * if and only if iformat/oformat.priv_class is not NULL. - * - * - muxing: set by avformat_write_header() - * - demuxing: set by avformat_open_input() - */ - void *priv_data; - - /** - * I/O context. - * - * - demuxing: either set by the user before avformat_open_input() (then - * the user must close it manually) or set by avformat_open_input(). - * - muxing: set by the user before avformat_write_header(). The caller must - * take care of closing / freeing the IO context. - * - * Do NOT set this field if AVFMT_NOFILE flag is set in - * iformat/oformat.flags. In such a case, the (de)muxer will handle - * I/O in some other way and this field will be NULL. - */ - AVIOContext *pb; - - /* stream info */ - /** - * Flags signalling stream properties. A combination of AVFMTCTX_*. - * Set by libavformat. - */ - int ctx_flags; - - /** - * Number of elements in AVFormatContext.streams. - * - * Set by avformat_new_stream(), must not be modified by any other code. - */ - unsigned int nb_streams; - /** - * A list of all streams in the file. New streams are created with - * avformat_new_stream(). - * - * - demuxing: streams are created by libavformat in avformat_open_input(). - * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also - * appear in av_read_frame(). - * - muxing: streams are created by the user before avformat_write_header(). - * - * Freed by libavformat in avformat_free_context(). - */ - AVStream **streams; - -#if FF_API_FORMAT_FILENAME - /** - * input or output filename - * - * - demuxing: set by avformat_open_input() - * - muxing: may be set by the caller before avformat_write_header() - * - * @deprecated Use url instead. - */ - attribute_deprecated - char filename[1024]; -#endif - - /** - * input or output URL. Unlike the old filename field, this field has no - * length restriction. - * - * - demuxing: set by avformat_open_input(), initialized to an empty - * string if url parameter was NULL in avformat_open_input(). - * - muxing: may be set by the caller before calling avformat_write_header() - * (or avformat_init_output() if that is called first) to a string - * which is freeable by av_free(). Set to an empty string if it - * was NULL in avformat_init_output(). - * - * Freed by libavformat in avformat_free_context(). - */ - char *url; - - /** - * Position of the first frame of the component, in - * AV_TIME_BASE fractional seconds. NEVER set this value directly: - * It is deduced from the AVStream values. - * - * Demuxing only, set by libavformat. - */ - int64_t start_time; - - /** - * Duration of the stream, in AV_TIME_BASE fractional - * seconds. Only set this value if you know none of the individual stream - * durations and also do not set any of them. This is deduced from the - * AVStream values if not set. - * - * Demuxing only, set by libavformat. - */ - int64_t duration; - - /** - * Total stream bitrate in bit/s, 0 if not - * available. Never set it directly if the file_size and the - * duration are known as FFmpeg can compute it automatically. - */ - int64_t bit_rate; - - unsigned int packet_size; - int max_delay; - - /** - * Flags modifying the (de)muxer behaviour. A combination of AVFMT_FLAG_*. - * Set by the user before avformat_open_input() / avformat_write_header(). - */ - int flags; -#define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames. -#define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index. -#define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input. -#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS -#define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container -#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled -#define AVFMT_FLAG_NOBUFFER 0x0040 ///< Do not buffer frames when possible -#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it. -#define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted -#define AVFMT_FLAG_FLUSH_PACKETS 0x0200 ///< Flush the AVIOContext every packet. -/** - * When muxing, try to avoid writing any random/volatile data to the output. - * This includes any random IDs, real-time timestamps/dates, muxer version, etc. - * - * This flag is mainly intended for testing. - */ -#define AVFMT_FLAG_BITEXACT 0x0400 -#if FF_API_LAVF_MP4A_LATM -#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Deprecated, does nothing. -#endif -#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down) -#if FF_API_LAVF_PRIV_OPT -#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (deprecated, will do nothing once av_demuxer_open() is removed) -#endif -#if FF_API_LAVF_KEEPSIDE_FLAG -#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Deprecated, does nothing. -#endif -#define AVFMT_FLAG_FAST_SEEK 0x80000 ///< Enable fast, but inaccurate seeks for some formats -#define AVFMT_FLAG_SHORTEST 0x100000 ///< Stop muxing when the shortest stream stops. -#define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Add bitstream filters as requested by the muxer - - /** - * Maximum size of the data read from input for determining - * the input container format. - * Demuxing only, set by the caller before avformat_open_input(). - */ - int64_t probesize; - - /** - * Maximum duration (in AV_TIME_BASE units) of the data read - * from input in avformat_find_stream_info(). - * Demuxing only, set by the caller before avformat_find_stream_info(). - * Can be set to 0 to let avformat choose using a heuristic. - */ - int64_t max_analyze_duration; - - const uint8_t *key; - int keylen; - - unsigned int nb_programs; - AVProgram **programs; - - /** - * Forced video codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID video_codec_id; - - /** - * Forced audio codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID audio_codec_id; - - /** - * Forced subtitle codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID subtitle_codec_id; - - /** - * Maximum amount of memory in bytes to use for the index of each stream. - * If the index exceeds this size, entries will be discarded as - * needed to maintain a smaller size. This can lead to slower or less - * accurate seeking (depends on demuxer). - * Demuxers for which a full in-memory index is mandatory will ignore - * this. - * - muxing: unused - * - demuxing: set by user - */ - unsigned int max_index_size; - - /** - * Maximum amount of memory in bytes to use for buffering frames - * obtained from realtime capture devices. - */ - unsigned int max_picture_buffer; - - /** - * Number of chapters in AVChapter array. - * When muxing, chapters are normally written in the file header, - * so nb_chapters should normally be initialized before write_header - * is called. Some muxers (e.g. mov and mkv) can also write chapters - * in the trailer. To write chapters in the trailer, nb_chapters - * must be zero when write_header is called and non-zero when - * write_trailer is called. - * - muxing: set by user - * - demuxing: set by libavformat - */ - unsigned int nb_chapters; - AVChapter **chapters; - - /** - * Metadata that applies to the whole file. - * - * - demuxing: set by libavformat in avformat_open_input() - * - muxing: may be set by the caller before avformat_write_header() - * - * Freed by libavformat in avformat_free_context(). - */ - AVDictionary *metadata; - - /** - * Start time of the stream in real world time, in microseconds - * since the Unix epoch (00:00 1st January 1970). That is, pts=0 in the - * stream was captured at this real world time. - * - muxing: Set by the caller before avformat_write_header(). If set to - * either 0 or AV_NOPTS_VALUE, then the current wall-time will - * be used. - * - demuxing: Set by libavformat. AV_NOPTS_VALUE if unknown. Note that - * the value may become known after some number of frames - * have been received. - */ - int64_t start_time_realtime; - - /** - * The number of frames used for determining the framerate in - * avformat_find_stream_info(). - * Demuxing only, set by the caller before avformat_find_stream_info(). - */ - int fps_probe_size; - - /** - * Error recognition; higher values will detect more errors but may - * misdetect some more or less valid parts as errors. - * Demuxing only, set by the caller before avformat_open_input(). - */ - int error_recognition; - - /** - * Custom interrupt callbacks for the I/O layer. - * - * demuxing: set by the user before avformat_open_input(). - * muxing: set by the user before avformat_write_header() - * (mainly useful for AVFMT_NOFILE formats). The callback - * should also be passed to avio_open2() if it's used to - * open the file. - */ - AVIOInterruptCB interrupt_callback; - - /** - * Flags to enable debugging. - */ - int debug; -#define FF_FDEBUG_TS 0x0001 - - /** - * Maximum buffering duration for interleaving. - * - * To ensure all the streams are interleaved correctly, - * av_interleaved_write_frame() will wait until it has at least one packet - * for each stream before actually writing any packets to the output file. - * When some streams are "sparse" (i.e. there are large gaps between - * successive packets), this can result in excessive buffering. - * - * This field specifies the maximum difference between the timestamps of the - * first and the last packet in the muxing queue, above which libavformat - * will output a packet regardless of whether it has queued a packet for all - * the streams. - * - * Muxing only, set by the caller before avformat_write_header(). - */ - int64_t max_interleave_delta; - - /** - * Allow non-standard and experimental extension - * @see AVCodecContext.strict_std_compliance - */ - int strict_std_compliance; - - /** - * Flags indicating events happening on the file, a combination of - * AVFMT_EVENT_FLAG_*. - * - * - demuxing: may be set by the demuxer in avformat_open_input(), - * avformat_find_stream_info() and av_read_frame(). Flags must be cleared - * by the user once the event has been handled. - * - muxing: may be set by the user after avformat_write_header() to - * indicate a user-triggered event. The muxer will clear the flags for - * events it has handled in av_[interleaved]_write_frame(). - */ - int event_flags; -/** - * - demuxing: the demuxer read new metadata from the file and updated - * AVFormatContext.metadata accordingly - * - muxing: the user updated AVFormatContext.metadata and wishes the muxer to - * write it into the file - */ -#define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001 - - /** - * Maximum number of packets to read while waiting for the first timestamp. - * Decoding only. - */ - int max_ts_probe; - - /** - * Avoid negative timestamps during muxing. - * Any value of the AVFMT_AVOID_NEG_TS_* constants. - * Note, this only works when using av_interleaved_write_frame. (interleave_packet_per_dts is in use) - * - muxing: Set by user - * - demuxing: unused - */ - int avoid_negative_ts; -#define AVFMT_AVOID_NEG_TS_AUTO -1 ///< Enabled when required by target format -#define AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE 1 ///< Shift timestamps so they are non negative -#define AVFMT_AVOID_NEG_TS_MAKE_ZERO 2 ///< Shift timestamps so that they start at 0 - - /** - * Transport stream id. - * This will be moved into demuxer private options. Thus no API/ABI compatibility - */ - int ts_id; - - /** - * Audio preload in microseconds. - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int audio_preload; - - /** - * Max chunk time in microseconds. - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int max_chunk_duration; - - /** - * Max chunk size in bytes - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int max_chunk_size; - - /** - * forces the use of wallclock timestamps as pts/dts of packets - * This has undefined results in the presence of B frames. - * - encoding: unused - * - decoding: Set by user - */ - int use_wallclock_as_timestamps; - - /** - * avio flags, used to force AVIO_FLAG_DIRECT. - * - encoding: unused - * - decoding: Set by user - */ - int avio_flags; - - /** - * The duration field can be estimated through various ways, and this field can be used - * to know how the duration was estimated. - * - encoding: unused - * - decoding: Read by user - */ - enum AVDurationEstimationMethod duration_estimation_method; - - /** - * Skip initial bytes when opening stream - * - encoding: unused - * - decoding: Set by user - */ - int64_t skip_initial_bytes; - - /** - * Correct single timestamp overflows - * - encoding: unused - * - decoding: Set by user - */ - unsigned int correct_ts_overflow; - - /** - * Force seeking to any (also non key) frames. - * - encoding: unused - * - decoding: Set by user - */ - int seek2any; - - /** - * Flush the I/O context after each packet. - * - encoding: Set by user - * - decoding: unused - */ - int flush_packets; - - /** - * format probing score. - * The maximal score is AVPROBE_SCORE_MAX, its set when the demuxer probes - * the format. - * - encoding: unused - * - decoding: set by avformat, read by user - */ - int probe_score; - - /** - * number of bytes to read maximally to identify format. - * - encoding: unused - * - decoding: set by user - */ - int format_probesize; - - /** - * ',' separated list of allowed decoders. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *codec_whitelist; - - /** - * ',' separated list of allowed demuxers. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *format_whitelist; - - /** - * An opaque field for libavformat internal usage. - * Must not be accessed in any way by callers. - */ - AVFormatInternal *internal; - - /** - * IO repositioned flag. - * This is set by avformat when the underlaying IO context read pointer - * is repositioned, for example when doing byte based seeking. - * Demuxers can use the flag to detect such changes. - */ - int io_repositioned; - - /** - * Forced video codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *video_codec; - - /** - * Forced audio codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *audio_codec; - - /** - * Forced subtitle codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *subtitle_codec; - - /** - * Forced data codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *data_codec; - - /** - * Number of bytes to be written as padding in a metadata header. - * Demuxing: Unused. - * Muxing: Set by user via av_format_set_metadata_header_padding. - */ - int metadata_header_padding; - - /** - * User data. - * This is a place for some private data of the user. - */ - void *opaque; - - /** - * Callback used by devices to communicate with application. - */ - av_format_control_message control_message_cb; - - /** - * Output timestamp offset, in microseconds. - * Muxing: set by user - */ - int64_t output_ts_offset; - - /** - * dump format separator. - * can be ", " or "\n " or anything else - * - muxing: Set by user. - * - demuxing: Set by user. - */ - uint8_t *dump_separator; - - /** - * Forced Data codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID data_codec_id; - -#if FF_API_OLD_OPEN_CALLBACKS - /** - * Called to open further IO contexts when needed for demuxing. - * - * This can be set by the user application to perform security checks on - * the URLs before opening them. - * The function should behave like avio_open2(), AVFormatContext is provided - * as contextual information and to reach AVFormatContext.opaque. - * - * If NULL then some simple checks are used together with avio_open2(). - * - * Must not be accessed directly from outside avformat. - * @See av_format_set_open_cb() - * - * Demuxing: Set by user. - * - * @deprecated Use io_open and io_close. - */ - attribute_deprecated - int (*open_cb)(struct AVFormatContext *s, AVIOContext **p, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options); -#endif - - /** - * ',' separated list of allowed protocols. - * - encoding: unused - * - decoding: set by user - */ - char *protocol_whitelist; - - /** - * A callback for opening new IO streams. - * - * Whenever a muxer or a demuxer needs to open an IO stream (typically from - * avformat_open_input() for demuxers, but for certain formats can happen at - * other times as well), it will call this callback to obtain an IO context. - * - * @param s the format context - * @param pb on success, the newly opened IO context should be returned here - * @param url the url to open - * @param flags a combination of AVIO_FLAG_* - * @param options a dictionary of additional options, with the same - * semantics as in avio_open2() - * @return 0 on success, a negative AVERROR code on failure - * - * @note Certain muxers and demuxers do nesting, i.e. they open one or more - * additional internal format contexts. Thus the AVFormatContext pointer - * passed to this callback may be different from the one facing the caller. - * It will, however, have the same 'opaque' field. - */ - int (*io_open)(struct AVFormatContext *s, AVIOContext **pb, const char *url, - int flags, AVDictionary **options); - - /** - * A callback for closing the streams opened with AVFormatContext.io_open(). - */ - void (*io_close)(struct AVFormatContext *s, AVIOContext *pb); - - /** - * ',' separated list of disallowed protocols. - * - encoding: unused - * - decoding: set by user - */ - char *protocol_blacklist; - - /** - * The maximum number of streams. - * - encoding: unused - * - decoding: set by user - */ - int max_streams; - - /** - * Skip duration calcuation in estimate_timings_from_pts. - * - encoding: unused - * - decoding: set by user - */ - int skip_estimate_duration_from_pts; - - /** - * Maximum number of packets that can be probed - * - encoding: unused - * - decoding: set by user - */ - int max_probe_packets; -} AVFormatContext; - -#if FF_API_FORMAT_GET_SET -/** - * Accessors for some AVFormatContext fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -int av_format_get_probe_score(const AVFormatContext *s); -attribute_deprecated -AVCodec * av_format_get_video_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_video_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -AVCodec * av_format_get_audio_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_audio_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -AVCodec * av_format_get_subtitle_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_subtitle_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -AVCodec * av_format_get_data_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_data_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -int av_format_get_metadata_header_padding(const AVFormatContext *s); -attribute_deprecated -void av_format_set_metadata_header_padding(AVFormatContext *s, int c); -attribute_deprecated -void * av_format_get_opaque(const AVFormatContext *s); -attribute_deprecated -void av_format_set_opaque(AVFormatContext *s, void *opaque); -attribute_deprecated -av_format_control_message av_format_get_control_message_cb(const AVFormatContext *s); -attribute_deprecated -void av_format_set_control_message_cb(AVFormatContext *s, av_format_control_message callback); -#if FF_API_OLD_OPEN_CALLBACKS -attribute_deprecated AVOpenCallback av_format_get_open_cb(const AVFormatContext *s); -attribute_deprecated void av_format_set_open_cb(AVFormatContext *s, AVOpenCallback callback); -#endif -#endif - -/** - * This function will cause global side data to be injected in the next packet - * of each stream as well as after any subsequent seek. - */ -void av_format_inject_global_side_data(AVFormatContext *s); - -/** - * Returns the method used to set ctx->duration. - * - * @return AVFMT_DURATION_FROM_PTS, AVFMT_DURATION_FROM_STREAM, or AVFMT_DURATION_FROM_BITRATE. - */ -enum AVDurationEstimationMethod av_fmt_ctx_get_duration_estimation_method(const AVFormatContext* ctx); - -/** - * @defgroup lavf_core Core functions - * @ingroup libavf - * - * Functions for querying libavformat capabilities, allocating core structures, - * etc. - * @{ - */ - -/** - * Return the LIBAVFORMAT_VERSION_INT constant. - */ -unsigned avformat_version(void); - -/** - * Return the libavformat build-time configuration. - */ -const char *avformat_configuration(void); - -/** - * Return the libavformat license. - */ -const char *avformat_license(void); - -#if FF_API_NEXT -/** - * Initialize libavformat and register all the muxers, demuxers and - * protocols. If you do not call this function, then you can select - * exactly which formats you want to support. - * - * @see av_register_input_format() - * @see av_register_output_format() - */ -attribute_deprecated -void av_register_all(void); - -attribute_deprecated -void av_register_input_format(AVInputFormat *format); -attribute_deprecated -void av_register_output_format(AVOutputFormat *format); -#endif - -/** - * Do global initialization of network libraries. This is optional, - * and not recommended anymore. - * - * This functions only exists to work around thread-safety issues - * with older GnuTLS or OpenSSL libraries. If libavformat is linked - * to newer versions of those libraries, or if you do not use them, - * calling this function is unnecessary. Otherwise, you need to call - * this function before any other threads using them are started. - * - * This function will be deprecated once support for older GnuTLS and - * OpenSSL libraries is removed, and this function has no purpose - * anymore. - */ -int avformat_network_init(void); - -/** - * Undo the initialization done by avformat_network_init. Call it only - * once for each time you called avformat_network_init. - */ -int avformat_network_deinit(void); - -#if FF_API_NEXT -/** - * If f is NULL, returns the first registered input format, - * if f is non-NULL, returns the next registered input format after f - * or NULL if f is the last one. - */ -attribute_deprecated -AVInputFormat *av_iformat_next(const AVInputFormat *f); - -/** - * If f is NULL, returns the first registered output format, - * if f is non-NULL, returns the next registered output format after f - * or NULL if f is the last one. - */ -attribute_deprecated -AVOutputFormat *av_oformat_next(const AVOutputFormat *f); -#endif - -/** - * Iterate over all registered muxers. - * - * @param opaque a pointer where libavformat will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered muxer or NULL when the iteration is - * finished - */ -const AVOutputFormat *av_muxer_iterate(void **opaque); - -/** - * Iterate over all registered demuxers. - * - * @param opaque a pointer where libavformat will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered demuxer or NULL when the iteration is - * finished - */ -const AVInputFormat *av_demuxer_iterate(void **opaque); - -/** - * Allocate an AVFormatContext. - * avformat_free_context() can be used to free the context and everything - * allocated by the framework within it. - */ -AVFormatContext *avformat_alloc_context(void); - -/** - * Free an AVFormatContext and all its streams. - * @param s context to free - */ -void avformat_free_context(AVFormatContext *s); - -/** - * Get the AVClass for AVFormatContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avformat_get_class(void); - -/** - * Add a new stream to a media file. - * - * When demuxing, it is called by the demuxer in read_header(). If the - * flag AVFMTCTX_NOHEADER is set in s.ctx_flags, then it may also - * be called in read_packet(). - * - * When muxing, should be called by the user before avformat_write_header(). - * - * User is required to call avcodec_close() and avformat_free_context() to - * clean up the allocation by avformat_new_stream(). - * - * @param s media file handle - * @param c If non-NULL, the AVCodecContext corresponding to the new stream - * will be initialized to use this codec. This is needed for e.g. codec-specific - * defaults to be set, so codec should be provided if it is known. - * - * @return newly created stream or NULL on error. - */ -AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c); - -/** - * Wrap an existing array as stream side data. - * - * @param st stream - * @param type side information type - * @param data the side data array. It must be allocated with the av_malloc() - * family of functions. The ownership of the data is transferred to - * st. - * @param size side information size - * @return zero on success, a negative AVERROR code on failure. On failure, - * the stream is unchanged and the data remains owned by the caller. - */ -int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type, - uint8_t *data, size_t size); - -/** - * Allocate new information from stream. - * - * @param stream stream - * @param type desired side information type - * @param size side information size - * @return pointer to fresh allocated data or NULL otherwise - */ -uint8_t *av_stream_new_side_data(AVStream *stream, -#if FF_API_BUFFER_SIZE_T - enum AVPacketSideDataType type, int size); -#else - enum AVPacketSideDataType type, size_t size); -#endif -/** - * Get side information from stream. - * - * @param stream stream - * @param type desired side information type - * @param size If supplied, *size will be set to the size of the side data - * or to zero if the desired side data is not present. - * @return pointer to data if present or NULL otherwise - */ -uint8_t *av_stream_get_side_data(const AVStream *stream, -#if FF_API_BUFFER_SIZE_T - enum AVPacketSideDataType type, int *size); -#else - enum AVPacketSideDataType type, size_t *size); -#endif - -AVProgram *av_new_program(AVFormatContext *s, int id); - -/** - * @} - */ - - -/** - * Allocate an AVFormatContext for an output format. - * avformat_free_context() can be used to free the context and - * everything allocated by the framework within it. - * - * @param *ctx is set to the created format context, or to NULL in - * case of failure - * @param oformat format to use for allocating the context, if NULL - * format_name and filename are used instead - * @param format_name the name of output format to use for allocating the - * context, if NULL filename is used instead - * @param filename the name of the filename to use for allocating the - * context, may be NULL - * @return >= 0 in case of success, a negative AVERROR code in case of - * failure - */ -int avformat_alloc_output_context2(AVFormatContext **ctx, ff_const59 AVOutputFormat *oformat, - const char *format_name, const char *filename); - -/** - * @addtogroup lavf_decoding - * @{ - */ - -/** - * Find AVInputFormat based on the short name of the input format. - */ -ff_const59 AVInputFormat *av_find_input_format(const char *short_name); - -/** - * Guess the file format. - * - * @param pd data to be probed - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - */ -ff_const59 AVInputFormat *av_probe_input_format(ff_const59 AVProbeData *pd, int is_opened); - -/** - * Guess the file format. - * - * @param pd data to be probed - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - * @param score_max A probe score larger that this is required to accept a - * detection, the variable is set to the actual detection - * score afterwards. - * If the score is <= AVPROBE_SCORE_MAX / 4 it is recommended - * to retry with a larger probe buffer. - */ -ff_const59 AVInputFormat *av_probe_input_format2(ff_const59 AVProbeData *pd, int is_opened, int *score_max); - -/** - * Guess the file format. - * - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - * @param score_ret The score of the best detection. - */ -ff_const59 AVInputFormat *av_probe_input_format3(ff_const59 AVProbeData *pd, int is_opened, int *score_ret); - -/** - * Probe a bytestream to determine the input format. Each time a probe returns - * with a score that is too low, the probe buffer size is increased and another - * attempt is made. When the maximum probe size is reached, the input format - * with the highest score is returned. - * - * @param pb the bytestream to probe - * @param fmt the input format is put here - * @param url the url of the stream - * @param logctx the log context - * @param offset the offset within the bytestream to probe from - * @param max_probe_size the maximum probe buffer size (zero for default) - * @return the score in case of success, a negative value corresponding to an - * the maximal score is AVPROBE_SCORE_MAX - * AVERROR code otherwise - */ -int av_probe_input_buffer2(AVIOContext *pb, ff_const59 AVInputFormat **fmt, - const char *url, void *logctx, - unsigned int offset, unsigned int max_probe_size); - -/** - * Like av_probe_input_buffer2() but returns 0 on success - */ -int av_probe_input_buffer(AVIOContext *pb, ff_const59 AVInputFormat **fmt, - const char *url, void *logctx, - unsigned int offset, unsigned int max_probe_size); - -/** - * Open an input stream and read the header. The codecs are not opened. - * The stream must be closed with avformat_close_input(). - * - * @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context). - * May be a pointer to NULL, in which case an AVFormatContext is allocated by this - * function and written into ps. - * Note that a user-supplied AVFormatContext will be freed on failure. - * @param url URL of the stream to open. - * @param fmt If non-NULL, this parameter forces a specific input format. - * Otherwise the format is autodetected. - * @param options A dictionary filled with AVFormatContext and demuxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return 0 on success, a negative AVERROR on failure. - * - * @note If you want to use custom IO, preallocate the format context and set its pb field. - */ -int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options); - -#if FF_API_DEMUXER_OPEN -/** - * @deprecated Use an AVDictionary to pass options to a demuxer. - */ -attribute_deprecated -int av_demuxer_open(AVFormatContext *ic); -#endif - -/** - * Read packets of a media file to get stream information. This - * is useful for file formats with no headers such as MPEG. This - * function also computes the real framerate in case of MPEG-2 repeat - * frame mode. - * The logical file position is not changed by this function; - * examined packets may be buffered for later processing. - * - * @param ic media file handle - * @param options If non-NULL, an ic.nb_streams long array of pointers to - * dictionaries, where i-th member contains options for - * codec corresponding to i-th stream. - * On return each dictionary will be filled with options that were not found. - * @return >=0 if OK, AVERROR_xxx on error - * - * @note this function isn't guaranteed to open all the codecs, so - * options being non-empty at return is a perfectly normal behavior. - * - * @todo Let the user decide somehow what information is needed so that - * we do not waste time getting stuff the user does not need. - */ -int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options); - -/** - * Find the programs which belong to a given stream. - * - * @param ic media file handle - * @param last the last found program, the search will start after this - * program, or from the beginning if it is NULL - * @param s stream index - * @return the next program which belongs to s, NULL if no program is found or - * the last program is not among the programs of ic. - */ -AVProgram *av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s); - -void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int idx); - -/** - * Find the "best" stream in the file. - * The best stream is determined according to various heuristics as the most - * likely to be what the user expects. - * If the decoder parameter is non-NULL, av_find_best_stream will find the - * default decoder for the stream's codec; streams for which no decoder can - * be found are ignored. - * - * @param ic media file handle - * @param type stream type: video, audio, subtitles, etc. - * @param wanted_stream_nb user-requested stream number, - * or -1 for automatic selection - * @param related_stream try to find a stream related (eg. in the same - * program) to this one, or -1 if none - * @param decoder_ret if non-NULL, returns the decoder for the - * selected stream - * @param flags flags; none are currently defined - * @return the non-negative stream number in case of success, - * AVERROR_STREAM_NOT_FOUND if no stream with the requested type - * could be found, - * AVERROR_DECODER_NOT_FOUND if streams were found but no decoder - * @note If av_find_best_stream returns successfully and decoder_ret is not - * NULL, then *decoder_ret is guaranteed to be set to a valid AVCodec. - */ -int av_find_best_stream(AVFormatContext *ic, - enum AVMediaType type, - int wanted_stream_nb, - int related_stream, - AVCodec **decoder_ret, - int flags); - -/** - * Return the next frame of a stream. - * This function returns what is stored in the file, and does not validate - * that what is there are valid frames for the decoder. It will split what is - * stored in the file into frames and return one for each call. It will not - * omit invalid data between valid frames so as to give the decoder the maximum - * information possible for decoding. - * - * On success, the returned packet is reference-counted (pkt->buf is set) and - * valid indefinitely. The packet must be freed with av_packet_unref() when - * it is no longer needed. For video, the packet contains exactly one frame. - * For audio, it contains an integer number of frames if each frame has - * a known fixed size (e.g. PCM or ADPCM data). If the audio frames have - * a variable size (e.g. MPEG audio), then it contains one frame. - * - * pkt->pts, pkt->dts and pkt->duration are always set to correct - * values in AVStream.time_base units (and guessed if the format cannot - * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format - * has B-frames, so it is better to rely on pkt->dts if you do not - * decompress the payload. - * - * @return 0 if OK, < 0 on error or end of file. On error, pkt will be blank - * (as if it came from av_packet_alloc()). - * - * @note pkt will be initialized, so it may be uninitialized, but it must not - * contain data that needs to be freed. - */ -int av_read_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Seek to the keyframe at timestamp. - * 'timestamp' in 'stream_index'. - * - * @param s media file handle - * @param stream_index If stream_index is (-1), a default - * stream is selected, and timestamp is automatically converted - * from AV_TIME_BASE units to the stream specific time_base. - * @param timestamp Timestamp in AVStream.time_base units - * or, if no stream is specified, in AV_TIME_BASE units. - * @param flags flags which select direction and seeking mode - * @return >= 0 on success - */ -int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, - int flags); - -/** - * Seek to timestamp ts. - * Seeking will be done so that the point from which all active streams - * can be presented successfully will be closest to ts and within min/max_ts. - * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. - * - * If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in bytes and - * are the file position (this may not be supported by all demuxers). - * If flags contain AVSEEK_FLAG_FRAME, then all timestamps are in frames - * in the stream with stream_index (this may not be supported by all demuxers). - * Otherwise all timestamps are in units of the stream selected by stream_index - * or if stream_index is -1, in AV_TIME_BASE units. - * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as - * keyframes (this may not be supported by all demuxers). - * If flags contain AVSEEK_FLAG_BACKWARD, it is ignored. - * - * @param s media file handle - * @param stream_index index of the stream which is used as time base reference - * @param min_ts smallest acceptable timestamp - * @param ts target timestamp - * @param max_ts largest acceptable timestamp - * @param flags flags - * @return >=0 on success, error code otherwise - * - * @note This is part of the new seek API which is still under construction. - */ -int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); - -/** - * Discard all internally buffered data. This can be useful when dealing with - * discontinuities in the byte stream. Generally works only with formats that - * can resync. This includes headerless formats like MPEG-TS/TS but should also - * work with NUT, Ogg and in a limited way AVI for example. - * - * The set of streams, the detected duration, stream parameters and codecs do - * not change when calling this function. If you want a complete reset, it's - * better to open a new AVFormatContext. - * - * This does not flush the AVIOContext (s->pb). If necessary, call - * avio_flush(s->pb) before calling this function. - * - * @param s media file handle - * @return >=0 on success, error code otherwise - */ -int avformat_flush(AVFormatContext *s); - -/** - * Start playing a network-based stream (e.g. RTSP stream) at the - * current position. - */ -int av_read_play(AVFormatContext *s); - -/** - * Pause a network-based stream (e.g. RTSP stream). - * - * Use av_read_play() to resume it. - */ -int av_read_pause(AVFormatContext *s); - -/** - * Close an opened input AVFormatContext. Free it and all its contents - * and set *s to NULL. - */ -void avformat_close_input(AVFormatContext **s); -/** - * @} - */ - -#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward -#define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes -#define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes -#define AVSEEK_FLAG_FRAME 8 ///< seeking based on frame number - -/** - * @addtogroup lavf_encoding - * @{ - */ - -#define AVSTREAM_INIT_IN_WRITE_HEADER 0 ///< stream parameters initialized in avformat_write_header -#define AVSTREAM_INIT_IN_INIT_OUTPUT 1 ///< stream parameters initialized in avformat_init_output - -/** - * Allocate the stream private data and write the stream header to - * an output media file. - * - * @param s Media file handle, must be allocated with avformat_alloc_context(). - * Its oformat field must be set to the desired output format; - * Its pb field must be set to an already opened AVIOContext. - * @param options An AVDictionary filled with AVFormatContext and muxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return AVSTREAM_INIT_IN_WRITE_HEADER on success if the codec had not already been fully initialized in avformat_init, - * AVSTREAM_INIT_IN_INIT_OUTPUT on success if the codec had already been fully initialized in avformat_init, - * negative AVERROR on failure. - * - * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_init_output. - */ -av_warn_unused_result -int avformat_write_header(AVFormatContext *s, AVDictionary **options); - -/** - * Allocate the stream private data and initialize the codec, but do not write the header. - * May optionally be used before avformat_write_header to initialize stream parameters - * before actually writing the header. - * If using this function, do not pass the same options to avformat_write_header. - * - * @param s Media file handle, must be allocated with avformat_alloc_context(). - * Its oformat field must be set to the desired output format; - * Its pb field must be set to an already opened AVIOContext. - * @param options An AVDictionary filled with AVFormatContext and muxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return AVSTREAM_INIT_IN_WRITE_HEADER on success if the codec requires avformat_write_header to fully initialize, - * AVSTREAM_INIT_IN_INIT_OUTPUT on success if the codec has been fully initialized, - * negative AVERROR on failure. - * - * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_write_header. - */ -av_warn_unused_result -int avformat_init_output(AVFormatContext *s, AVDictionary **options); - -/** - * Write a packet to an output media file. - * - * This function passes the packet directly to the muxer, without any buffering - * or reordering. The caller is responsible for correctly interleaving the - * packets if the format requires it. Callers that want libavformat to handle - * the interleaving should call av_interleaved_write_frame() instead of this - * function. - * - * @param s media file handle - * @param pkt The packet containing the data to be written. Note that unlike - * av_interleaved_write_frame(), this function does not take - * ownership of the packet passed to it (though some muxers may make - * an internal reference to the input packet). - *
- * This parameter can be NULL (at any time, not just at the end), in - * order to immediately flush data buffered within the muxer, for - * muxers that buffer up data internally before writing it to the - * output. - *
- * Packet's @ref AVPacket.stream_index "stream_index" field must be - * set to the index of the corresponding stream in @ref - * AVFormatContext.streams "s->streams". - *
- * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") - * must be set to correct values in the stream's timebase (unless the - * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then - * they can be set to AV_NOPTS_VALUE). - * The dts for subsequent packets passed to this function must be strictly - * increasing when compared in their respective timebases (unless the - * output format is flagged with the AVFMT_TS_NONSTRICT, then they - * merely have to be nondecreasing). @ref AVPacket.duration - * "duration") should also be set if known. - * @return < 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush - * - * @see av_interleaved_write_frame() - */ -int av_write_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Write a packet to an output media file ensuring correct interleaving. - * - * This function will buffer the packets internally as needed to make sure the - * packets in the output file are properly interleaved in the order of - * increasing dts. Callers doing their own interleaving should call - * av_write_frame() instead of this function. - * - * Using this function instead of av_write_frame() can give muxers advance - * knowledge of future packets, improving e.g. the behaviour of the mp4 - * muxer for VFR content in fragmenting mode. - * - * @param s media file handle - * @param pkt The packet containing the data to be written. - *
- * If the packet is reference-counted, this function will take - * ownership of this reference and unreference it later when it sees - * fit. - * The caller must not access the data through this reference after - * this function returns. If the packet is not reference-counted, - * libavformat will make a copy. - *
- * This parameter can be NULL (at any time, not just at the end), to - * flush the interleaving queues. - *
- * Packet's @ref AVPacket.stream_index "stream_index" field must be - * set to the index of the corresponding stream in @ref - * AVFormatContext.streams "s->streams". - *
- * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") - * must be set to correct values in the stream's timebase (unless the - * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then - * they can be set to AV_NOPTS_VALUE). - * The dts for subsequent packets in one stream must be strictly - * increasing (unless the output format is flagged with the - * AVFMT_TS_NONSTRICT, then they merely have to be nondecreasing). - * @ref AVPacket.duration "duration") should also be set if known. - * - * @return 0 on success, a negative AVERROR on error. Libavformat will always - * take care of freeing the packet, even if this function fails. - * - * @see av_write_frame(), AVFormatContext.max_interleave_delta - */ -int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Write an uncoded frame to an output media file. - * - * The frame must be correctly interleaved according to the container - * specification; if not, av_interleaved_write_uncoded_frame() must be used. - * - * See av_interleaved_write_uncoded_frame() for details. - */ -int av_write_uncoded_frame(AVFormatContext *s, int stream_index, - AVFrame *frame); - -/** - * Write an uncoded frame to an output media file. - * - * If the muxer supports it, this function makes it possible to write an AVFrame - * structure directly, without encoding it into a packet. - * It is mostly useful for devices and similar special muxers that use raw - * video or PCM data and will not serialize it into a byte stream. - * - * To test whether it is possible to use it with a given muxer and stream, - * use av_write_uncoded_frame_query(). - * - * The caller gives up ownership of the frame and must not access it - * afterwards. - * - * @return >=0 for success, a negative code on error - */ -int av_interleaved_write_uncoded_frame(AVFormatContext *s, int stream_index, - AVFrame *frame); - -/** - * Test whether a muxer supports uncoded frame. - * - * @return >=0 if an uncoded frame can be written to that muxer and stream, - * <0 if not - */ -int av_write_uncoded_frame_query(AVFormatContext *s, int stream_index); - -/** - * Write the stream trailer to an output media file and free the - * file private data. - * - * May only be called after a successful call to avformat_write_header. - * - * @param s media file handle - * @return 0 if OK, AVERROR_xxx on error - */ -int av_write_trailer(AVFormatContext *s); - -/** - * Return the output format in the list of registered output formats - * which best matches the provided parameters, or return NULL if - * there is no match. - * - * @param short_name if non-NULL checks if short_name matches with the - * names of the registered formats - * @param filename if non-NULL checks if filename terminates with the - * extensions of the registered formats - * @param mime_type if non-NULL checks if mime_type matches with the - * MIME type of the registered formats - */ -ff_const59 AVOutputFormat *av_guess_format(const char *short_name, - const char *filename, - const char *mime_type); - -/** - * Guess the codec ID based upon muxer and filename. - */ -enum AVCodecID av_guess_codec(ff_const59 AVOutputFormat *fmt, const char *short_name, - const char *filename, const char *mime_type, - enum AVMediaType type); - -/** - * Get timing information for the data currently output. - * The exact meaning of "currently output" depends on the format. - * It is mostly relevant for devices that have an internal buffer and/or - * work in real time. - * @param s media file handle - * @param stream stream in the media file - * @param[out] dts DTS of the last packet output for the stream, in stream - * time_base units - * @param[out] wall absolute time when that packet whas output, - * in microsecond - * @return 0 if OK, AVERROR(ENOSYS) if the format does not support it - * Note: some formats or devices may not allow to measure dts and wall - * atomically. - */ -int av_get_output_timestamp(struct AVFormatContext *s, int stream, - int64_t *dts, int64_t *wall); - - -/** - * @} - */ - - -/** - * @defgroup lavf_misc Utility functions - * @ingroup libavf - * @{ - * - * Miscellaneous utility functions related to both muxing and demuxing - * (or neither). - */ - -/** - * Send a nice hexadecimal dump of a buffer to the specified file stream. - * - * @param f The file stream pointer where the dump should be sent to. - * @param buf buffer - * @param size buffer size - * - * @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2 - */ -void av_hex_dump(FILE *f, const uint8_t *buf, int size); - -/** - * Send a nice hexadecimal dump of a buffer to the log. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message, lower values signifying - * higher importance. - * @param buf buffer - * @param size buffer size - * - * @see av_hex_dump, av_pkt_dump2, av_pkt_dump_log2 - */ -void av_hex_dump_log(void *avcl, int level, const uint8_t *buf, int size); - -/** - * Send a nice dump of a packet to the specified file stream. - * - * @param f The file stream pointer where the dump should be sent to. - * @param pkt packet to dump - * @param dump_payload True if the payload must be displayed, too. - * @param st AVStream that the packet belongs to - */ -void av_pkt_dump2(FILE *f, const AVPacket *pkt, int dump_payload, const AVStream *st); - - -/** - * Send a nice dump of a packet to the log. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message, lower values signifying - * higher importance. - * @param pkt packet to dump - * @param dump_payload True if the payload must be displayed, too. - * @param st AVStream that the packet belongs to - */ -void av_pkt_dump_log2(void *avcl, int level, const AVPacket *pkt, int dump_payload, - const AVStream *st); - -/** - * Get the AVCodecID for the given codec tag tag. - * If no codec id is found returns AV_CODEC_ID_NONE. - * - * @param tags list of supported codec_id-codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param tag codec tag to match to a codec ID - */ -enum AVCodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag); - -/** - * Get the codec tag for the given codec id id. - * If no codec tag is found returns 0. - * - * @param tags list of supported codec_id-codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param id codec ID to match to a codec tag - */ -unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum AVCodecID id); - -/** - * Get the codec tag for the given codec id. - * - * @param tags list of supported codec_id - codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param id codec id that should be searched for in the list - * @param tag A pointer to the found tag - * @return 0 if id was not found in tags, > 0 if it was found - */ -int av_codec_get_tag2(const struct AVCodecTag * const *tags, enum AVCodecID id, - unsigned int *tag); - -int av_find_default_stream_index(AVFormatContext *s); - -/** - * Get the index for a specific timestamp. - * - * @param st stream that the timestamp belongs to - * @param timestamp timestamp to retrieve the index for - * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond - * to the timestamp which is <= the requested one, if backward - * is 0, then it will be >= - * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise - * @return < 0 if no such timestamp could be found - */ -int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags); - -/** - * Add an index entry into a sorted list. Update the entry if the list - * already contains it. - * - * @param timestamp timestamp in the time base of the given stream - */ -int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, - int size, int distance, int flags); - - -/** - * Split a URL string into components. - * - * The pointers to buffers for storing individual components may be null, - * in order to ignore that component. Buffers for components not found are - * set to empty strings. If the port is not found, it is set to a negative - * value. - * - * @param proto the buffer for the protocol - * @param proto_size the size of the proto buffer - * @param authorization the buffer for the authorization - * @param authorization_size the size of the authorization buffer - * @param hostname the buffer for the host name - * @param hostname_size the size of the hostname buffer - * @param port_ptr a pointer to store the port number in - * @param path the buffer for the path - * @param path_size the size of the path buffer - * @param url the URL to split - */ -void av_url_split(char *proto, int proto_size, - char *authorization, int authorization_size, - char *hostname, int hostname_size, - int *port_ptr, - char *path, int path_size, - const char *url); - - -/** - * Print detailed information about the input or output format, such as - * duration, bitrate, streams, container, programs, metadata, side data, - * codec and time base. - * - * @param ic the context to analyze - * @param index index of the stream to dump information about - * @param url the URL to print, such as source or destination file - * @param is_output Select whether the specified context is an input(0) or output(1) - */ -void av_dump_format(AVFormatContext *ic, - int index, - const char *url, - int is_output); - - -#define AV_FRAME_FILENAME_FLAGS_MULTIPLE 1 ///< Allow multiple %d - -/** - * Return in 'buf' the path with '%d' replaced by a number. - * - * Also handles the '%0nd' format where 'n' is the total number - * of digits and '%%'. - * - * @param buf destination buffer - * @param buf_size destination buffer size - * @param path numbered sequence string - * @param number frame number - * @param flags AV_FRAME_FILENAME_FLAGS_* - * @return 0 if OK, -1 on format error - */ -int av_get_frame_filename2(char *buf, int buf_size, - const char *path, int number, int flags); - -int av_get_frame_filename(char *buf, int buf_size, - const char *path, int number); - -/** - * Check whether filename actually is a numbered sequence generator. - * - * @param filename possible numbered sequence string - * @return 1 if a valid numbered sequence string, 0 otherwise - */ -int av_filename_number_test(const char *filename); - -/** - * Generate an SDP for an RTP session. - * - * Note, this overwrites the id values of AVStreams in the muxer contexts - * for getting unique dynamic payload types. - * - * @param ac array of AVFormatContexts describing the RTP streams. If the - * array is composed by only one context, such context can contain - * multiple AVStreams (one AVStream per RTP stream). Otherwise, - * all the contexts in the array (an AVCodecContext per RTP stream) - * must contain only one AVStream. - * @param n_files number of AVCodecContexts contained in ac - * @param buf buffer where the SDP will be stored (must be allocated by - * the caller) - * @param size the size of the buffer - * @return 0 if OK, AVERROR_xxx on error - */ -int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size); - -/** - * Return a positive value if the given filename has one of the given - * extensions, 0 otherwise. - * - * @param filename file name to check against the given extensions - * @param extensions a comma-separated list of filename extensions - */ -int av_match_ext(const char *filename, const char *extensions); - -/** - * Test if the given container can store a codec. - * - * @param ofmt container to check for compatibility - * @param codec_id codec to potentially store in container - * @param std_compliance standards compliance level, one of FF_COMPLIANCE_* - * - * @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot. - * A negative number if this information is not available. - */ -int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id, - int std_compliance); - -/** - * @defgroup riff_fourcc RIFF FourCCs - * @{ - * Get the tables mapping RIFF FourCCs to libavcodec AVCodecIDs. 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 - */ -/** - * @return the table mapping RIFF FourCCs for video to libavcodec AVCodecID. - */ -const struct AVCodecTag *avformat_get_riff_video_tags(void); -/** - * @return the table mapping RIFF FourCCs for audio to AVCodecID. - */ -const struct AVCodecTag *avformat_get_riff_audio_tags(void); -/** - * @return the table mapping MOV FourCCs for video to libavcodec AVCodecID. - */ -const struct AVCodecTag *avformat_get_mov_video_tags(void); -/** - * @return the table mapping MOV FourCCs for audio to AVCodecID. - */ -const struct AVCodecTag *avformat_get_mov_audio_tags(void); - -/** - * @} - */ - -/** - * Guess the sample aspect ratio of a frame, based on both the stream and the - * frame aspect ratio. - * - * Since the frame aspect ratio is set by the codec but the stream aspect ratio - * is set by the demuxer, these two may not be equal. This function tries to - * return the value that you should use if you would like to display the frame. - * - * Basic logic is to use the stream aspect ratio if it is set to something sane - * otherwise use the frame aspect ratio. This way a container setting, which is - * usually easy to modify can override the coded value in the frames. - * - * @param format the format context which the stream is part of - * @param stream the stream which the frame is part of - * @param frame the frame with the aspect ratio to be determined - * @return the guessed (valid) sample_aspect_ratio, 0/1 if no idea - */ -AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame); - -/** - * Guess the frame rate, based on both the container and codec information. - * - * @param ctx the format context which the stream is part of - * @param stream the stream which the frame is part of - * @param frame the frame for which the frame rate should be determined, may be NULL - * @return the guessed (valid) frame rate, 0/1 if no idea - */ -AVRational av_guess_frame_rate(AVFormatContext *ctx, AVStream *stream, AVFrame *frame); - -/** - * Check if the stream st contained in s is matched by the stream specifier - * spec. - * - * See the "stream specifiers" chapter in the documentation for the syntax - * of spec. - * - * @return >0 if st is matched by spec; - * 0 if st is not matched by spec; - * AVERROR code if spec is invalid - * - * @note A stream specifier can match several streams in the format. - */ -int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, - const char *spec); - -int avformat_queue_attached_pictures(AVFormatContext *s); - -#if FF_API_OLD_BSF -/** - * Apply a list of bitstream filters to a packet. - * - * @param codec AVCodecContext, usually from an AVStream - * @param pkt the packet to apply filters to. If, on success, the returned - * packet has size == 0 and side_data_elems == 0, it indicates that - * the packet should be dropped - * @param bsfc a NULL-terminated list of filters to apply - * @return >=0 on success; - * AVERROR code on failure - */ -attribute_deprecated -int av_apply_bitstream_filters(AVCodecContext *codec, AVPacket *pkt, - AVBitStreamFilterContext *bsfc); -#endif - -enum AVTimebaseSource { - AVFMT_TBCF_AUTO = -1, - AVFMT_TBCF_DECODER, - AVFMT_TBCF_DEMUXER, -#if FF_API_R_FRAME_RATE - AVFMT_TBCF_R_FRAMERATE, -#endif -}; - -/** - * Transfer internal timing information from one stream to another. - * - * This function is useful when doing stream copy. - * - * @param ofmt target output format for ost - * @param ost output stream which needs timings copy and adjustments - * @param ist reference input stream to copy timings from - * @param copy_tb define from where the stream codec timebase needs to be imported - */ -int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt, - AVStream *ost, const AVStream *ist, - enum AVTimebaseSource copy_tb); - -/** - * Get the internal codec timebase from a stream. - * - * @param st input stream to extract the timebase from - */ -AVRational av_stream_get_codec_timebase(const AVStream *st); - -/** - * @} - */ - -#endif /* AVFORMAT_AVFORMAT_H */ diff --git a/prebuilts/aarch64/include/libavformat/avio.h b/prebuilts/aarch64/include/libavformat/avio.h deleted file mode 100644 index d022820..0000000 --- a/prebuilts/aarch64/include/libavformat/avio.h +++ /dev/null @@ -1,888 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -#ifndef AVFORMAT_AVIO_H -#define AVFORMAT_AVIO_H - -/** - * @file - * @ingroup lavf_io - * Buffered I/O operations - */ - -#include - -#include "libavutil/common.h" -#include "libavutil/dict.h" -#include "libavutil/log.h" - -#include "libavformat/version.h" - -/** - * Seeking works like for a local file. - */ -#define AVIO_SEEKABLE_NORMAL (1 << 0) - -/** - * Seeking by timestamp with avio_seek_time() is possible. - */ -#define AVIO_SEEKABLE_TIME (1 << 1) - -/** - * Callback for checking whether to abort blocking functions. - * AVERROR_EXIT is returned in this case by the interrupted - * function. During blocking operations, callback is called with - * opaque as parameter. If the callback returns 1, the - * blocking operation will be aborted. - * - * No members can be added to this struct without a major bump, if - * new elements have been added after this struct in AVFormatContext - * or AVIOContext. - */ -typedef struct AVIOInterruptCB { - int (*callback)(void*); - void *opaque; -} AVIOInterruptCB; - -/** - * Directory entry types. - */ -enum AVIODirEntryType { - AVIO_ENTRY_UNKNOWN, - AVIO_ENTRY_BLOCK_DEVICE, - AVIO_ENTRY_CHARACTER_DEVICE, - AVIO_ENTRY_DIRECTORY, - AVIO_ENTRY_NAMED_PIPE, - AVIO_ENTRY_SYMBOLIC_LINK, - AVIO_ENTRY_SOCKET, - AVIO_ENTRY_FILE, - AVIO_ENTRY_SERVER, - AVIO_ENTRY_SHARE, - AVIO_ENTRY_WORKGROUP, -}; - -/** - * Describes single entry of the directory. - * - * Only name and type fields are guaranteed be set. - * Rest of fields are protocol or/and platform dependent and might be unknown. - */ -typedef struct AVIODirEntry { - char *name; /**< Filename */ - int type; /**< Type of the entry */ - int utf8; /**< Set to 1 when name is encoded with UTF-8, 0 otherwise. - Name can be encoded with UTF-8 even though 0 is set. */ - int64_t size; /**< File size in bytes, -1 if unknown. */ - int64_t modification_timestamp; /**< Time of last modification in microseconds since unix - epoch, -1 if unknown. */ - int64_t access_timestamp; /**< Time of last access in microseconds since unix epoch, - -1 if unknown. */ - int64_t status_change_timestamp; /**< Time of last status change in microseconds since unix - epoch, -1 if unknown. */ - int64_t user_id; /**< User ID of owner, -1 if unknown. */ - int64_t group_id; /**< Group ID of owner, -1 if unknown. */ - int64_t filemode; /**< Unix file mode, -1 if unknown. */ -} AVIODirEntry; - -typedef struct AVIODirContext { - struct URLContext *url_context; -} AVIODirContext; - -/** - * Different data types that can be returned via the AVIO - * write_data_type callback. - */ -enum AVIODataMarkerType { - /** - * Header data; this needs to be present for the stream to be decodeable. - */ - AVIO_DATA_MARKER_HEADER, - /** - * A point in the output bytestream where a decoder can start decoding - * (i.e. a keyframe). A demuxer/decoder given the data flagged with - * AVIO_DATA_MARKER_HEADER, followed by any AVIO_DATA_MARKER_SYNC_POINT, - * should give decodeable results. - */ - AVIO_DATA_MARKER_SYNC_POINT, - /** - * A point in the output bytestream where a demuxer can start parsing - * (for non self synchronizing bytestream formats). That is, any - * non-keyframe packet start point. - */ - AVIO_DATA_MARKER_BOUNDARY_POINT, - /** - * This is any, unlabelled data. It can either be a muxer not marking - * any positions at all, it can be an actual boundary/sync point - * that the muxer chooses not to mark, or a later part of a packet/fragment - * that is cut into multiple write callbacks due to limited IO buffer size. - */ - AVIO_DATA_MARKER_UNKNOWN, - /** - * Trailer data, which doesn't contain actual content, but only for - * finalizing the output file. - */ - AVIO_DATA_MARKER_TRAILER, - /** - * A point in the output bytestream where the underlying AVIOContext might - * flush the buffer depending on latency or buffering requirements. Typically - * means the end of a packet. - */ - AVIO_DATA_MARKER_FLUSH_POINT, -}; - -/** - * Bytestream IO Context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVIOContext) must not be used outside libav*. - * - * @note None of the function pointers in AVIOContext should be called - * directly, they should only be set by the client application - * when implementing custom I/O. Normally these are set to the - * function pointers specified in avio_alloc_context() - */ -typedef struct AVIOContext { - /** - * A class for private options. - * - * If this AVIOContext is created by avio_open2(), av_class is set and - * passes the options down to protocols. - * - * If this AVIOContext is manually allocated, then av_class may be set by - * the caller. - * - * warning -- this field can be NULL, be sure to not pass this AVIOContext - * to any av_opt_* functions in that case. - */ - const AVClass *av_class; - - /* - * The following shows the relationship between buffer, buf_ptr, - * buf_ptr_max, buf_end, buf_size, and pos, when reading and when writing - * (since AVIOContext is used for both): - * - ********************************************************************************** - * READING - ********************************************************************************** - * - * | buffer_size | - * |---------------------------------------| - * | | - * - * buffer buf_ptr buf_end - * +---------------+-----------------------+ - * |/ / / / / / / /|/ / / / / / /| | - * read buffer: |/ / consumed / | to be read /| | - * |/ / / / / / / /|/ / / / / / /| | - * +---------------+-----------------------+ - * - * pos - * +-------------------------------------------+-----------------+ - * input file: | | | - * +-------------------------------------------+-----------------+ - * - * - ********************************************************************************** - * WRITING - ********************************************************************************** - * - * | buffer_size | - * |--------------------------------------| - * | | - * - * buf_ptr_max - * buffer (buf_ptr) buf_end - * +-----------------------+--------------+ - * |/ / / / / / / / / / / /| | - * write buffer: | / / to be flushed / / | | - * |/ / / / / / / / / / / /| | - * +-----------------------+--------------+ - * buf_ptr can be in this - * due to a backward seek - * - * pos - * +-------------+----------------------------------------------+ - * output file: | | | - * +-------------+----------------------------------------------+ - * - */ - unsigned char *buffer; /**< Start of the buffer. */ - int buffer_size; /**< Maximum buffer size */ - unsigned char *buf_ptr; /**< Current position in the buffer */ - unsigned char *buf_end; /**< End of the data, may be less than - buffer+buffer_size if the read function returned - less data than requested, e.g. for streams where - no more data has been received yet. */ - void *opaque; /**< A private pointer, passed to the read/write/seek/... - functions. */ - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size); - int (*write_packet)(void *opaque, uint8_t *buf, int buf_size); - int64_t (*seek)(void *opaque, int64_t offset, int whence); - int64_t pos; /**< position in the file of the current buffer */ - int eof_reached; /**< true if was unable to read due to error or eof */ - int write_flag; /**< true if open for writing */ - int max_packet_size; - unsigned long checksum; - unsigned char *checksum_ptr; - unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size); - int error; /**< contains the error code or 0 if no error happened */ - /** - * Pause or resume playback for network streaming protocols - e.g. MMS. - */ - int (*read_pause)(void *opaque, int pause); - /** - * Seek to a given timestamp in stream with the specified stream_index. - * Needed for some network streaming protocols which don't support seeking - * to byte position. - */ - int64_t (*read_seek)(void *opaque, int stream_index, - int64_t timestamp, int flags); - /** - * A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. - */ - int seekable; - - /** - * max filesize, used to limit allocations - * This field is internal to libavformat and access from outside is not allowed. - */ - int64_t maxsize; - - /** - * avio_read and avio_write should if possible be satisfied directly - * instead of going through a buffer, and avio_seek will always - * call the underlying seek function directly. - */ - int direct; - - /** - * Bytes read statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int64_t bytes_read; - - /** - * seek statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int seek_count; - - /** - * writeout statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int writeout_count; - - /** - * Original buffer size - * used internally after probing and ensure seekback to reset the buffer size - * This field is internal to libavformat and access from outside is not allowed. - */ - int orig_buffer_size; - - /** - * Threshold to favor readahead over seek. - * This is current internal only, do not use from outside. - */ - int short_seek_threshold; - - /** - * ',' separated list of allowed protocols. - */ - const char *protocol_whitelist; - - /** - * ',' separated list of disallowed protocols. - */ - const char *protocol_blacklist; - - /** - * A callback that is used instead of write_packet. - */ - int (*write_data_type)(void *opaque, uint8_t *buf, int buf_size, - enum AVIODataMarkerType type, int64_t time); - /** - * If set, don't call write_data_type separately for AVIO_DATA_MARKER_BOUNDARY_POINT, - * but ignore them and treat them as AVIO_DATA_MARKER_UNKNOWN (to avoid needlessly - * small chunks of data returned from the callback). - */ - int ignore_boundary_point; - - /** - * Internal, not meant to be used from outside of AVIOContext. - */ - enum AVIODataMarkerType current_type; - int64_t last_time; - - /** - * A callback that is used instead of short_seek_threshold. - * This is current internal only, do not use from outside. - */ - int (*short_seek_get)(void *opaque); - - int64_t written; - - /** - * Maximum reached position before a backward seek in the write buffer, - * used keeping track of already written data for a later flush. - */ - unsigned char *buf_ptr_max; - - /** - * Try to buffer at least this amount of data before flushing it - */ - int min_packet_size; -} AVIOContext; - -/** - * Return the name of the protocol that will handle the passed URL. - * - * NULL is returned if no protocol could be found for the given URL. - * - * @return Name of the protocol or NULL. - */ -const char *avio_find_protocol_name(const char *url); - -/** - * Return AVIO_FLAG_* access flags corresponding to the access permissions - * of the resource in url, or a negative value corresponding to an - * AVERROR code in case of failure. The returned access flags are - * masked by the value in flags. - * - * @note This function is intrinsically unsafe, in the sense that the - * checked resource may change its existence or permission status from - * one call to another. Thus you should not trust the returned value, - * unless you are sure that no other processes are accessing the - * checked resource. - */ -int avio_check(const char *url, int flags); - -/** - * Move or rename a resource. - * - * @note url_src and url_dst should share the same protocol and authority. - * - * @param url_src url to resource to be moved - * @param url_dst new url to resource if the operation succeeded - * @return >=0 on success or negative on error. - */ -int avpriv_io_move(const char *url_src, const char *url_dst); - -/** - * Delete a resource. - * - * @param url resource to be deleted. - * @return >=0 on success or negative on error. - */ -int avpriv_io_delete(const char *url); - -/** - * Open directory for reading. - * - * @param s directory read context. Pointer to a NULL pointer must be passed. - * @param url directory to be listed. - * @param options A dictionary filled with protocol-private options. On return - * this parameter will be destroyed and replaced with a dictionary - * containing options that were not found. May be NULL. - * @return >=0 on success or negative on error. - */ -int avio_open_dir(AVIODirContext **s, const char *url, AVDictionary **options); - -/** - * Get next directory entry. - * - * Returned entry must be freed with avio_free_directory_entry(). In particular - * it may outlive AVIODirContext. - * - * @param s directory read context. - * @param[out] next next entry or NULL when no more entries. - * @return >=0 on success or negative on error. End of list is not considered an - * error. - */ -int avio_read_dir(AVIODirContext *s, AVIODirEntry **next); - -/** - * Close directory. - * - * @note Entries created using avio_read_dir() are not deleted and must be - * freeded with avio_free_directory_entry(). - * - * @param s directory read context. - * @return >=0 on success or negative on error. - */ -int avio_close_dir(AVIODirContext **s); - -/** - * Free entry allocated by avio_read_dir(). - * - * @param entry entry to be freed. - */ -void avio_free_directory_entry(AVIODirEntry **entry); - -/** - * Allocate and initialize an AVIOContext for buffered I/O. It must be later - * freed with avio_context_free(). - * - * @param buffer Memory block for input/output operations via AVIOContext. - * The buffer must be allocated with av_malloc() and friends. - * It may be freed and replaced with a new buffer by libavformat. - * AVIOContext.buffer holds the buffer currently in use, - * which must be later freed with av_free(). - * @param buffer_size The buffer size is very important for performance. - * For protocols with fixed blocksize it should be set to this blocksize. - * For others a typical size is a cache page, e.g. 4kb. - * @param write_flag Set to 1 if the buffer should be writable, 0 otherwise. - * @param opaque An opaque pointer to user-specific data. - * @param read_packet A function for refilling the buffer, may be NULL. - * For stream protocols, must never return 0 but rather - * a proper AVERROR code. - * @param write_packet A function for writing the buffer contents, may be NULL. - * The function may not change the input buffers content. - * @param seek A function for seeking to specified byte position, may be NULL. - * - * @return Allocated AVIOContext or NULL on failure. - */ -AVIOContext *avio_alloc_context( - unsigned char *buffer, - int buffer_size, - int write_flag, - void *opaque, - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), - int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), - int64_t (*seek)(void *opaque, int64_t offset, int whence)); - -/** - * Free the supplied IO context and everything associated with it. - * - * @param s Double pointer to the IO context. This function will write NULL - * into s. - */ -void avio_context_free(AVIOContext **s); - -void avio_w8(AVIOContext *s, int b); -void avio_write(AVIOContext *s, const unsigned char *buf, int size); -void avio_wl64(AVIOContext *s, uint64_t val); -void avio_wb64(AVIOContext *s, uint64_t val); -void avio_wl32(AVIOContext *s, unsigned int val); -void avio_wb32(AVIOContext *s, unsigned int val); -void avio_wl24(AVIOContext *s, unsigned int val); -void avio_wb24(AVIOContext *s, unsigned int val); -void avio_wl16(AVIOContext *s, unsigned int val); -void avio_wb16(AVIOContext *s, unsigned int val); - -/** - * Write a NULL-terminated string. - * @return number of bytes written. - */ -int avio_put_str(AVIOContext *s, const char *str); - -/** - * Convert an UTF-8 string to UTF-16LE and write it. - * @param s the AVIOContext - * @param str NULL-terminated UTF-8 string - * - * @return number of bytes written. - */ -int avio_put_str16le(AVIOContext *s, const char *str); - -/** - * Convert an UTF-8 string to UTF-16BE and write it. - * @param s the AVIOContext - * @param str NULL-terminated UTF-8 string - * - * @return number of bytes written. - */ -int avio_put_str16be(AVIOContext *s, const char *str); - -/** - * Mark the written bytestream as a specific type. - * - * Zero-length ranges are omitted from the output. - * - * @param time the stream time the current bytestream pos corresponds to - * (in AV_TIME_BASE units), or AV_NOPTS_VALUE if unknown or not - * applicable - * @param type the kind of data written starting at the current pos - */ -void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type); - -/** - * ORing this as the "whence" parameter to a seek function causes it to - * return the filesize without seeking anywhere. Supporting this is optional. - * If it is not supported then the seek function will return <0. - */ -#define AVSEEK_SIZE 0x10000 - -/** - * Passing this flag as the "whence" parameter to a seek function causes it to - * seek by any means (like reopening and linear reading) or other normally unreasonable - * means that can be extremely slow. - * This may be ignored by the seek code. - */ -#define AVSEEK_FORCE 0x20000 - -/** - * fseek() equivalent for AVIOContext. - * @return new position or AVERROR. - */ -int64_t avio_seek(AVIOContext *s, int64_t offset, int whence); - -/** - * Skip given number of bytes forward - * @return new position or AVERROR. - */ -int64_t avio_skip(AVIOContext *s, int64_t offset); - -/** - * ftell() equivalent for AVIOContext. - * @return position or AVERROR. - */ -static av_always_inline int64_t avio_tell(AVIOContext *s) -{ - return avio_seek(s, 0, SEEK_CUR); -} - -/** - * Get the filesize. - * @return filesize or AVERROR - */ -int64_t avio_size(AVIOContext *s); - -/** - * Similar to feof() but also returns nonzero on read errors. - * @return non zero if and only if at end of file or a read error happened when reading. - */ -int avio_feof(AVIOContext *s); - -/** - * Writes a formatted string to the context. - * @return number of bytes written, < 0 on error. - */ -int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3); - -/** - * Write a NULL terminated array of strings to the context. - * Usually you don't need to use this function directly but its macro wrapper, - * avio_print. - */ -void avio_print_string_array(AVIOContext *s, const char *strings[]); - -/** - * Write strings (const char *) to the context. - * This is a convenience macro around avio_print_string_array and it - * automatically creates the string array from the variable argument list. - * For simple string concatenations this function is more performant than using - * avio_printf since it does not need a temporary buffer. - */ -#define avio_print(s, ...) \ - avio_print_string_array(s, (const char*[]){__VA_ARGS__, NULL}) - -/** - * Force flushing of buffered data. - * - * For write streams, force the buffered data to be immediately written to the output, - * without to wait to fill the internal buffer. - * - * For read streams, discard all currently buffered data, and advance the - * reported file position to that of the underlying stream. This does not - * read new data, and does not perform any seeks. - */ -void avio_flush(AVIOContext *s); - -/** - * Read size bytes from AVIOContext into buf. - * @return number of bytes read or AVERROR - */ -int avio_read(AVIOContext *s, unsigned char *buf, int size); - -/** - * Read size bytes from AVIOContext into buf. Unlike avio_read(), this is allowed - * to read fewer bytes than requested. The missing bytes can be read in the next - * call. This always tries to read at least 1 byte. - * Useful to reduce latency in certain cases. - * @return number of bytes read or AVERROR - */ -int avio_read_partial(AVIOContext *s, unsigned char *buf, int size); - -/** - * @name Functions for reading from AVIOContext - * @{ - * - * @note return 0 if EOF, so you cannot use it if EOF handling is - * necessary - */ -int avio_r8 (AVIOContext *s); -unsigned int avio_rl16(AVIOContext *s); -unsigned int avio_rl24(AVIOContext *s); -unsigned int avio_rl32(AVIOContext *s); -uint64_t avio_rl64(AVIOContext *s); -unsigned int avio_rb16(AVIOContext *s); -unsigned int avio_rb24(AVIOContext *s); -unsigned int avio_rb32(AVIOContext *s); -uint64_t avio_rb64(AVIOContext *s); -/** - * @} - */ - -/** - * Read a string from pb into buf. The reading will terminate when either - * a NULL character was encountered, maxlen bytes have been read, or nothing - * more can be read from pb. The result is guaranteed to be NULL-terminated, it - * will be truncated if buf is too small. - * Note that the string is not interpreted or validated in any way, it - * might get truncated in the middle of a sequence for multi-byte encodings. - * - * @return number of bytes read (is always <= maxlen). - * If reading ends on EOF or error, the return value will be one more than - * bytes actually read. - */ -int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen); - -/** - * Read a UTF-16 string from pb and convert it to UTF-8. - * The reading will terminate when either a null or invalid character was - * encountered or maxlen bytes have been read. - * @return number of bytes read (is always <= maxlen) - */ -int avio_get_str16le(AVIOContext *pb, int maxlen, char *buf, int buflen); -int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen); - - -/** - * @name URL open modes - * The flags argument to avio_open must be one of the following - * constants, optionally ORed with other flags. - * @{ - */ -#define AVIO_FLAG_READ 1 /**< read-only */ -#define AVIO_FLAG_WRITE 2 /**< write-only */ -#define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) /**< read-write pseudo flag */ -/** - * @} - */ - -/** - * Use non-blocking mode. - * If this flag is set, operations on the context will return - * AVERROR(EAGAIN) if they can not be performed immediately. - * If this flag is not set, operations on the context will never return - * AVERROR(EAGAIN). - * Note that this flag does not affect the opening/connecting of the - * context. Connecting a protocol will always block if necessary (e.g. on - * network protocols) but never hang (e.g. on busy devices). - * Warning: non-blocking protocols is work-in-progress; this flag may be - * silently ignored. - */ -#define AVIO_FLAG_NONBLOCK 8 - -/** - * Use direct mode. - * avio_read and avio_write should if possible be satisfied directly - * instead of going through a buffer, and avio_seek will always - * call the underlying seek function directly. - */ -#define AVIO_FLAG_DIRECT 0x8000 - -/** - * Create and initialize a AVIOContext for accessing the - * resource indicated by url. - * @note When the resource indicated by url has been opened in - * read+write mode, the AVIOContext can be used only for writing. - * - * @param s Used to return the pointer to the created AVIOContext. - * In case of failure the pointed to value is set to NULL. - * @param url resource to access - * @param flags flags which control how the resource indicated by url - * is to be opened - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code in case of failure - */ -int avio_open(AVIOContext **s, const char *url, int flags); - -/** - * Create and initialize a AVIOContext for accessing the - * resource indicated by url. - * @note When the resource indicated by url has been opened in - * read+write mode, the AVIOContext can be used only for writing. - * - * @param s Used to return the pointer to the created AVIOContext. - * In case of failure the pointed to value is set to NULL. - * @param url resource to access - * @param flags flags which control how the resource indicated by url - * is to be opened - * @param int_cb an interrupt callback to be used at the protocols level - * @param options A dictionary filled with protocol-private options. On return - * this parameter will be destroyed and replaced with a dict containing options - * that were not found. May be NULL. - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code in case of failure - */ -int avio_open2(AVIOContext **s, const char *url, int flags, - const AVIOInterruptCB *int_cb, AVDictionary **options); - -/** - * Close the resource accessed by the AVIOContext s and free it. - * This function can only be used if s was opened by avio_open(). - * - * The internal buffer is automatically flushed before closing the - * resource. - * - * @return 0 on success, an AVERROR < 0 on error. - * @see avio_closep - */ -int avio_close(AVIOContext *s); - -/** - * Close the resource accessed by the AVIOContext *s, free it - * and set the pointer pointing to it to NULL. - * This function can only be used if s was opened by avio_open(). - * - * The internal buffer is automatically flushed before closing the - * resource. - * - * @return 0 on success, an AVERROR < 0 on error. - * @see avio_close - */ -int avio_closep(AVIOContext **s); - - -/** - * Open a write only memory stream. - * - * @param s new IO context - * @return zero if no error. - */ -int avio_open_dyn_buf(AVIOContext **s); - -/** - * Return the written size and a pointer to the buffer. - * The AVIOContext stream is left intact. - * The buffer must NOT be freed. - * No padding is added to the buffer. - * - * @param s IO context - * @param pbuffer pointer to a byte buffer - * @return the length of the byte buffer - */ -int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer); - -/** - * Return the written size and a pointer to the buffer. The buffer - * must be freed with av_free(). - * Padding of AV_INPUT_BUFFER_PADDING_SIZE is added to the buffer. - * - * @param s IO context - * @param pbuffer pointer to a byte buffer - * @return the length of the byte buffer - */ -int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer); - -/** - * Iterate through names of available protocols. - * - * @param opaque A private pointer representing current protocol. - * It must be a pointer to NULL on first iteration and will - * be updated by successive calls to avio_enum_protocols. - * @param output If set to 1, iterate over output protocols, - * otherwise over input protocols. - * - * @return A static string containing the name of current protocol or NULL - */ -const char *avio_enum_protocols(void **opaque, int output); - -/** - * Get AVClass by names of available protocols. - * - * @return A AVClass of input protocol name or NULL - */ -const AVClass *avio_protocol_get_class(const char *name); - -/** - * Pause and resume playing - only meaningful if using a network streaming - * protocol (e.g. MMS). - * - * @param h IO context from which to call the read_pause function pointer - * @param pause 1 for pause, 0 for resume - */ -int avio_pause(AVIOContext *h, int pause); - -/** - * Seek to a given timestamp relative to some component stream. - * Only meaningful if using a network streaming protocol (e.g. MMS.). - * - * @param h IO context from which to call the seek function pointers - * @param stream_index The stream index that the timestamp is relative to. - * If stream_index is (-1) the timestamp should be in AV_TIME_BASE - * units from the beginning of the presentation. - * If a stream_index >= 0 is used and the protocol does not support - * seeking based on component streams, the call will fail. - * @param timestamp timestamp in AVStream.time_base units - * or if there is no stream specified then in AV_TIME_BASE units. - * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE - * and AVSEEK_FLAG_ANY. The protocol may silently ignore - * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will - * fail if used and not supported. - * @return >= 0 on success - * @see AVInputFormat::read_seek - */ -int64_t avio_seek_time(AVIOContext *h, int stream_index, - int64_t timestamp, int flags); - -/* Avoid a warning. The header can not be included because it breaks c++. */ -struct AVBPrint; - -/** - * Read contents of h into print buffer, up to max_size bytes, or up to EOF. - * - * @return 0 for success (max_size bytes read or EOF reached), negative error - * code otherwise - */ -int avio_read_to_bprint(AVIOContext *h, struct AVBPrint *pb, size_t max_size); - -/** - * Accept and allocate a client context on a server context. - * @param s the server context - * @param c the client context, must be unallocated - * @return >= 0 on success or a negative value corresponding - * to an AVERROR on failure - */ -int avio_accept(AVIOContext *s, AVIOContext **c); - -/** - * Perform one step of the protocol handshake to accept a new client. - * This function must be called on a client returned by avio_accept() before - * using it as a read/write context. - * It is separate from avio_accept() because it may block. - * A step of the handshake is defined by places where the application may - * decide to change the proceedings. - * For example, on a protocol with a request header and a reply header, each - * one can constitute a step because the application may use the parameters - * from the request to change parameters in the reply; or each individual - * chunk of the request can constitute a step. - * If the handshake is already finished, avio_handshake() does nothing and - * returns 0 immediately. - * - * @param c the client context to perform the handshake on - * @return 0 on a complete and successful handshake - * > 0 if the handshake progressed, but is not complete - * < 0 for an AVERROR code - */ -int avio_handshake(AVIOContext *c); -#endif /* AVFORMAT_AVIO_H */ diff --git a/prebuilts/aarch64/include/libavformat/version.h b/prebuilts/aarch64/include/libavformat/version.h deleted file mode 100644 index 46dc51a..0000000 --- a/prebuilts/aarch64/include/libavformat/version.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFORMAT_VERSION_H -#define AVFORMAT_VERSION_H - -/** - * @file - * @ingroup libavf - * Libavformat version macros - */ - -#include "libavutil/version.h" - -// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) -// Also please add any ticket numbers that you believe might be affected here -#define LIBAVFORMAT_VERSION_MAJOR 58 -#define LIBAVFORMAT_VERSION_MINOR 76 -#define LIBAVFORMAT_VERSION_MICRO 100 - -#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ - LIBAVFORMAT_VERSION_MINOR, \ - LIBAVFORMAT_VERSION_MICRO) -#define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_MAJOR, \ - LIBAVFORMAT_VERSION_MINOR, \ - LIBAVFORMAT_VERSION_MICRO) -#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT - -#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - * - */ -#ifndef FF_API_COMPUTE_PKT_FIELDS2 -#define FF_API_COMPUTE_PKT_FIELDS2 (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_OPEN_CALLBACKS -#define FF_API_OLD_OPEN_CALLBACKS (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_AVCTX -#define FF_API_LAVF_AVCTX (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_HTTP_USER_AGENT -#define FF_API_HTTP_USER_AGENT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_HLS_WRAP -#define FF_API_HLS_WRAP (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_HLS_USE_LOCALTIME -#define FF_API_HLS_USE_LOCALTIME (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_KEEPSIDE_FLAG -#define FF_API_LAVF_KEEPSIDE_FLAG (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_ROTATE_API -#define FF_API_OLD_ROTATE_API (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_FORMAT_GET_SET -#define FF_API_FORMAT_GET_SET (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_AVIO_EOF_0 -#define FF_API_OLD_AVIO_EOF_0 (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_FFSERVER -#define FF_API_LAVF_FFSERVER (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_FORMAT_FILENAME -#define FF_API_FORMAT_FILENAME (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_RTSP_OPTIONS -#define FF_API_OLD_RTSP_OPTIONS (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_NEXT -#define FF_API_NEXT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_DASH_MIN_SEG_DURATION -#define FF_API_DASH_MIN_SEG_DURATION (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_MP4A_LATM -#define FF_API_LAVF_MP4A_LATM (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVIOFORMAT -#define FF_API_AVIOFORMAT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_DEMUXER_OPEN -#define FF_API_DEMUXER_OPEN (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CHAPTER_ID_INT -#define FF_API_CHAPTER_ID_INT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_PRIV_OPT -#define FF_API_LAVF_PRIV_OPT (LIBAVFORMAT_VERSION_MAJOR < 60) -#endif - - -#ifndef FF_API_R_FRAME_RATE -#define FF_API_R_FRAME_RATE 1 -#endif -#endif /* AVFORMAT_VERSION_H */ diff --git a/prebuilts/aarch64/include/libavutil/adler32.h b/prebuilts/aarch64/include/libavutil/adler32.h deleted file mode 100644 index e7a8f83..0000000 --- a/prebuilts/aarch64/include/libavutil/adler32.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * copyright (c) 2006 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_adler32 - * Public header for Adler-32 hash function implementation. - */ - -#ifndef AVUTIL_ADLER32_H -#define AVUTIL_ADLER32_H - -#include -#include -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_adler32 Adler-32 - * @ingroup lavu_hash - * Adler-32 hash function implementation. - * - * @{ - */ - -#if FF_API_CRYPTO_SIZE_T -typedef unsigned long AVAdler; -#else -typedef uint32_t AVAdler; -#endif - -/** - * Calculate the Adler32 checksum of a buffer. - * - * Passing the return value to a subsequent av_adler32_update() call - * allows the checksum of multiple buffers to be calculated as though - * they were concatenated. - * - * @param adler initial checksum value - * @param buf pointer to input buffer - * @param len size of input buffer - * @return updated checksum - */ -AVAdler av_adler32_update(AVAdler adler, const uint8_t *buf, -#if FF_API_CRYPTO_SIZE_T - unsigned int len) av_pure; -#else - size_t len) av_pure; -#endif - -/** - * @} - */ - -#endif /* AVUTIL_ADLER32_H */ diff --git a/prebuilts/aarch64/include/libavutil/aes.h b/prebuilts/aarch64/include/libavutil/aes.h deleted file mode 100644 index 09efbda..0000000 --- a/prebuilts/aarch64/include/libavutil/aes.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * copyright (c) 2007 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AES_H -#define AVUTIL_AES_H - -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_aes AES - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_aes_size; - -struct AVAES; - -/** - * Allocate an AVAES context. - */ -struct AVAES *av_aes_alloc(void); - -/** - * Initialize an AVAES context. - * @param key_bits 128, 192 or 256 - * @param decrypt 0 for encryption, 1 for decryption - */ -int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * @param count number of 16 byte blocks - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_aes_crypt(struct AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_AES_H */ diff --git a/prebuilts/aarch64/include/libavutil/aes_ctr.h b/prebuilts/aarch64/include/libavutil/aes_ctr.h deleted file mode 100644 index e4aae12..0000000 --- a/prebuilts/aarch64/include/libavutil/aes_ctr.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * AES-CTR cipher - * Copyright (c) 2015 Eran Kornblau - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AES_CTR_H -#define AVUTIL_AES_CTR_H - -#include - -#include "attributes.h" -#include "version.h" - -#define AES_CTR_KEY_SIZE (16) -#define AES_CTR_IV_SIZE (8) - -struct AVAESCTR; - -/** - * Allocate an AVAESCTR context. - */ -struct AVAESCTR *av_aes_ctr_alloc(void); - -/** - * Initialize an AVAESCTR context. - * @param key encryption key, must have a length of AES_CTR_KEY_SIZE - */ -int av_aes_ctr_init(struct AVAESCTR *a, const uint8_t *key); - -/** - * Release an AVAESCTR context. - */ -void av_aes_ctr_free(struct AVAESCTR *a); - -/** - * Process a buffer using a previously initialized context. - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param size the size of src and dst - */ -void av_aes_ctr_crypt(struct AVAESCTR *a, uint8_t *dst, const uint8_t *src, int size); - -/** - * Get the current iv - */ -const uint8_t* av_aes_ctr_get_iv(struct AVAESCTR *a); - -/** - * Generate a random iv - */ -void av_aes_ctr_set_random_iv(struct AVAESCTR *a); - -/** - * Forcefully change the 8-byte iv - */ -void av_aes_ctr_set_iv(struct AVAESCTR *a, const uint8_t* iv); - -/** - * Forcefully change the "full" 16-byte iv, including the counter - */ -void av_aes_ctr_set_full_iv(struct AVAESCTR *a, const uint8_t* iv); - -/** - * Increment the top 64 bit of the iv (performed after each frame) - */ -void av_aes_ctr_increment_iv(struct AVAESCTR *a); - -/** - * @} - */ - -#endif /* AVUTIL_AES_CTR_H */ diff --git a/prebuilts/aarch64/include/libavutil/attributes.h b/prebuilts/aarch64/include/libavutil/attributes.h deleted file mode 100644 index 5cb9fe3..0000000 --- a/prebuilts/aarch64/include/libavutil/attributes.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Macro definitions for various function/variable attributes - */ - -#ifndef AVUTIL_ATTRIBUTES_H -#define AVUTIL_ATTRIBUTES_H - -#ifdef __GNUC__ -# define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y)) -# define AV_GCC_VERSION_AT_MOST(x,y) (__GNUC__ < (x) || __GNUC__ == (x) && __GNUC_MINOR__ <= (y)) -#else -# define AV_GCC_VERSION_AT_LEAST(x,y) 0 -# define AV_GCC_VERSION_AT_MOST(x,y) 0 -#endif - -#ifdef __has_builtin -# define AV_HAS_BUILTIN(x) __has_builtin(x) -#else -# define AV_HAS_BUILTIN(x) 0 -#endif - -#ifndef av_always_inline -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_always_inline __attribute__((always_inline)) inline -#elif defined(_MSC_VER) -# define av_always_inline __forceinline -#else -# define av_always_inline inline -#endif -#endif - -#ifndef av_extern_inline -#if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__) -# define av_extern_inline extern inline -#else -# define av_extern_inline inline -#endif -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,4) -# define av_warn_unused_result __attribute__((warn_unused_result)) -#else -# define av_warn_unused_result -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_noinline __attribute__((noinline)) -#elif defined(_MSC_VER) -# define av_noinline __declspec(noinline) -#else -# define av_noinline -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) -# define av_pure __attribute__((pure)) -#else -# define av_pure -#endif - -#if AV_GCC_VERSION_AT_LEAST(2,6) || defined(__clang__) -# define av_const __attribute__((const)) -#else -# define av_const -#endif - -#if AV_GCC_VERSION_AT_LEAST(4,3) || defined(__clang__) -# define av_cold __attribute__((cold)) -#else -# define av_cold -#endif - -#if AV_GCC_VERSION_AT_LEAST(4,1) && !defined(__llvm__) -# define av_flatten __attribute__((flatten)) -#else -# define av_flatten -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define attribute_deprecated __attribute__((deprecated)) -#elif defined(_MSC_VER) -# define attribute_deprecated __declspec(deprecated) -#else -# define attribute_deprecated -#endif - -/** - * Disable warnings about deprecated features - * This is useful for sections of code kept for backward compatibility and - * scheduled for removal. - */ -#ifndef AV_NOWARN_DEPRECATED -#if AV_GCC_VERSION_AT_LEAST(4,6) -# define AV_NOWARN_DEPRECATED(code) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ - code \ - _Pragma("GCC diagnostic pop") -#elif defined(_MSC_VER) -# define AV_NOWARN_DEPRECATED(code) \ - __pragma(warning(push)) \ - __pragma(warning(disable : 4996)) \ - code; \ - __pragma(warning(pop)) -#else -# define AV_NOWARN_DEPRECATED(code) code -#endif -#endif - -#if defined(__GNUC__) || defined(__clang__) -# define av_unused __attribute__((unused)) -#else -# define av_unused -#endif - -/** - * Mark a variable as used and prevent the compiler from optimizing it - * away. This is useful for variables accessed only from inline - * assembler without the compiler being aware. - */ -#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) -# define av_used __attribute__((used)) -#else -# define av_used -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,3) || defined(__clang__) -# define av_alias __attribute__((may_alias)) -#else -# define av_alias -#endif - -#if (defined(__GNUC__) || defined(__clang__)) && !defined(__INTEL_COMPILER) -# define av_uninit(x) x=x -#else -# define av_uninit(x) x -#endif - -#if defined(__GNUC__) || defined(__clang__) -# define av_builtin_constant_p __builtin_constant_p -# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos))) -#else -# define av_builtin_constant_p(x) 0 -# define av_printf_format(fmtpos, attrpos) -#endif - -#if AV_GCC_VERSION_AT_LEAST(2,5) || defined(__clang__) -# define av_noreturn __attribute__((noreturn)) -#else -# define av_noreturn -#endif - -#endif /* AVUTIL_ATTRIBUTES_H */ diff --git a/prebuilts/aarch64/include/libavutil/audio_fifo.h b/prebuilts/aarch64/include/libavutil/audio_fifo.h deleted file mode 100644 index d8a9194..0000000 --- a/prebuilts/aarch64/include/libavutil/audio_fifo.h +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Audio FIFO - * Copyright (c) 2012 Justin Ruggles - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Audio FIFO Buffer - */ - -#ifndef AVUTIL_AUDIO_FIFO_H -#define AVUTIL_AUDIO_FIFO_H - -#include "avutil.h" -#include "fifo.h" -#include "samplefmt.h" - -/** - * @addtogroup lavu_audio - * @{ - * - * @defgroup lavu_audiofifo Audio FIFO Buffer - * @{ - */ - -/** - * Context for an Audio FIFO Buffer. - * - * - Operates at the sample level rather than the byte level. - * - Supports multiple channels with either planar or packed sample format. - * - Automatic reallocation when writing to a full buffer. - */ -typedef struct AVAudioFifo AVAudioFifo; - -/** - * Free an AVAudioFifo. - * - * @param af AVAudioFifo to free - */ -void av_audio_fifo_free(AVAudioFifo *af); - -/** - * Allocate an AVAudioFifo. - * - * @param sample_fmt sample format - * @param channels number of channels - * @param nb_samples initial allocation size, in samples - * @return newly allocated AVAudioFifo, or NULL on error - */ -AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels, - int nb_samples); - -/** - * Reallocate an AVAudioFifo. - * - * @param af AVAudioFifo to reallocate - * @param nb_samples new allocation size, in samples - * @return 0 if OK, or negative AVERROR code on failure - */ -av_warn_unused_result -int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples); - -/** - * Write data to an AVAudioFifo. - * - * The AVAudioFifo will be reallocated automatically if the available space - * is less than nb_samples. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to write to - * @param data audio data plane pointers - * @param nb_samples number of samples to write - * @return number of samples actually written, or negative AVERROR - * code on failure. If successful, the number of samples - * actually written will always be nb_samples. - */ -int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Peek data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to peek - * @return number of samples actually peek, or negative AVERROR code - * on failure. The number of samples actually peek will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Peek data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to peek - * @param offset offset from current read position - * @return number of samples actually peek, or negative AVERROR code - * on failure. The number of samples actually peek will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offset); - -/** - * Read data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to read - * @return number of samples actually read, or negative AVERROR code - * on failure. The number of samples actually read will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Drain data from an AVAudioFifo. - * - * Removes the data without reading it. - * - * @param af AVAudioFifo to drain - * @param nb_samples number of samples to drain - * @return 0 if OK, or negative AVERROR code on failure - */ -int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples); - -/** - * Reset the AVAudioFifo buffer. - * - * This empties all data in the buffer. - * - * @param af AVAudioFifo to reset - */ -void av_audio_fifo_reset(AVAudioFifo *af); - -/** - * Get the current number of samples in the AVAudioFifo available for reading. - * - * @param af the AVAudioFifo to query - * @return number of samples available for reading - */ -int av_audio_fifo_size(AVAudioFifo *af); - -/** - * Get the current number of samples in the AVAudioFifo available for writing. - * - * @param af the AVAudioFifo to query - * @return number of samples available for writing - */ -int av_audio_fifo_space(AVAudioFifo *af); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_AUDIO_FIFO_H */ diff --git a/prebuilts/aarch64/include/libavutil/avassert.h b/prebuilts/aarch64/include/libavutil/avassert.h deleted file mode 100644 index 9abeade..0000000 --- a/prebuilts/aarch64/include/libavutil/avassert.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * copyright (c) 2010 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * simple assert() macros that are a bit more flexible than ISO C assert(). - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_AVASSERT_H -#define AVUTIL_AVASSERT_H - -#include -#include "avutil.h" -#include "log.h" - -/** - * assert() equivalent, that is always enabled. - */ -#define av_assert0(cond) do { \ - if (!(cond)) { \ - av_log(NULL, AV_LOG_PANIC, "Assertion %s failed at %s:%d\n", \ - AV_STRINGIFY(cond), __FILE__, __LINE__); \ - abort(); \ - } \ -} while (0) - - -/** - * assert() equivalent, that does not lie in speed critical code. - * These asserts() thus can be enabled without fearing speed loss. - */ -#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0 -#define av_assert1(cond) av_assert0(cond) -#else -#define av_assert1(cond) ((void)0) -#endif - - -/** - * assert() equivalent, that does lie in speed critical code. - */ -#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 -#define av_assert2(cond) av_assert0(cond) -#define av_assert2_fpu() av_assert0_fpu() -#else -#define av_assert2(cond) ((void)0) -#define av_assert2_fpu() ((void)0) -#endif - -/** - * Assert that floating point operations can be executed. - * - * This will av_assert0() that the cpu is not in MMX state on X86 - */ -void av_assert0_fpu(void); - -#endif /* AVUTIL_AVASSERT_H */ diff --git a/prebuilts/aarch64/include/libavutil/avconfig.h b/prebuilts/aarch64/include/libavutil/avconfig.h deleted file mode 100644 index c289fbb..0000000 --- a/prebuilts/aarch64/include/libavutil/avconfig.h +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated by ffmpeg configure */ -#ifndef AVUTIL_AVCONFIG_H -#define AVUTIL_AVCONFIG_H -#define AV_HAVE_BIGENDIAN 0 -#define AV_HAVE_FAST_UNALIGNED 1 -#endif /* AVUTIL_AVCONFIG_H */ diff --git a/prebuilts/aarch64/include/libavutil/avstring.h b/prebuilts/aarch64/include/libavutil/avstring.h deleted file mode 100644 index fae446c..0000000 --- a/prebuilts/aarch64/include/libavutil/avstring.h +++ /dev/null @@ -1,437 +0,0 @@ -/* - * Copyright (c) 2007 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AVSTRING_H -#define AVUTIL_AVSTRING_H - -#include -#include -#include "attributes.h" -#include "version.h" - -/** - * @addtogroup lavu_string - * @{ - */ - -/** - * Return non-zero if pfx is a prefix of str. If it is, *ptr is set to - * the address of the first character in str after the prefix. - * - * @param str input string - * @param pfx prefix to test - * @param ptr updated if the prefix is matched inside str - * @return non-zero if the prefix matches, zero otherwise - */ -int av_strstart(const char *str, const char *pfx, const char **ptr); - -/** - * Return non-zero if pfx is a prefix of str independent of case. If - * it is, *ptr is set to the address of the first character in str - * after the prefix. - * - * @param str input string - * @param pfx prefix to test - * @param ptr updated if the prefix is matched inside str - * @return non-zero if the prefix matches, zero otherwise - */ -int av_stristart(const char *str, const char *pfx, const char **ptr); - -/** - * Locate the first case-independent occurrence in the string haystack - * of the string needle. A zero-length string needle is considered to - * match at the start of haystack. - * - * This function is a case-insensitive version of the standard strstr(). - * - * @param haystack string to search in - * @param needle string to search for - * @return pointer to the located match within haystack - * or a null pointer if no match - */ -char *av_stristr(const char *haystack, const char *needle); - -/** - * Locate the first occurrence of the string needle in the string haystack - * where not more than hay_length characters are searched. A zero-length - * string needle is considered to match at the start of haystack. - * - * This function is a length-limited version of the standard strstr(). - * - * @param haystack string to search in - * @param needle string to search for - * @param hay_length length of string to search in - * @return pointer to the located match within haystack - * or a null pointer if no match - */ -char *av_strnstr(const char *haystack, const char *needle, size_t hay_length); - -/** - * Copy the string src to dst, but no more than size - 1 bytes, and - * null-terminate dst. - * - * This function is the same as BSD strlcpy(). - * - * @param dst destination buffer - * @param src source string - * @param size size of destination buffer - * @return the length of src - * - * @warning since the return value is the length of src, src absolutely - * _must_ be a properly 0-terminated string, otherwise this will read beyond - * the end of the buffer and possibly crash. - */ -size_t av_strlcpy(char *dst, const char *src, size_t size); - -/** - * Append the string src to the string dst, but to a total length of - * no more than size - 1 bytes, and null-terminate dst. - * - * This function is similar to BSD strlcat(), but differs when - * size <= strlen(dst). - * - * @param dst destination buffer - * @param src source string - * @param size size of destination buffer - * @return the total length of src and dst - * - * @warning since the return value use the length of src and dst, these - * absolutely _must_ be a properly 0-terminated strings, otherwise this - * will read beyond the end of the buffer and possibly crash. - */ -size_t av_strlcat(char *dst, const char *src, size_t size); - -/** - * Append output to a string, according to a format. Never write out of - * the destination buffer, and always put a terminating 0 within - * the buffer. - * @param dst destination buffer (string to which the output is - * appended) - * @param size total size of the destination buffer - * @param fmt printf-compatible format string, specifying how the - * following parameters are used - * @return the length of the string that would have been generated - * if enough space had been available - */ -size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4); - -/** - * Get the count of continuous non zero chars starting from the beginning. - * - * @param len maximum number of characters to check in the string, that - * is the maximum value which is returned by the function - */ -static inline size_t av_strnlen(const char *s, size_t len) -{ - size_t i; - for (i = 0; i < len && s[i]; i++) - ; - return i; -} - -/** - * Print arguments following specified format into a large enough auto - * allocated buffer. It is similar to GNU asprintf(). - * @param fmt printf-compatible format string, specifying how the - * following parameters are used. - * @return the allocated string - * @note You have to free the string yourself with av_free(). - */ -char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2); - -#if FF_API_D2STR -/** - * Convert a number to an av_malloced string. - * @deprecated use av_asprintf() with "%f" or a more specific format - */ -attribute_deprecated -char *av_d2str(double d); -#endif - -/** - * Unescape the given string until a non escaped terminating char, - * and return the token corresponding to the unescaped string. - * - * The normal \ and ' escaping is supported. Leading and trailing - * whitespaces are removed, unless they are escaped with '\' or are - * enclosed between ''. - * - * @param buf the buffer to parse, buf will be updated to point to the - * terminating char - * @param term a 0-terminated list of terminating chars - * @return the malloced unescaped string, which must be av_freed by - * the user, NULL in case of allocation failure - */ -char *av_get_token(const char **buf, const char *term); - -/** - * Split the string into several tokens which can be accessed by - * successive calls to av_strtok(). - * - * A token is defined as a sequence of characters not belonging to the - * set specified in delim. - * - * On the first call to av_strtok(), s should point to the string to - * parse, and the value of saveptr is ignored. In subsequent calls, s - * should be NULL, and saveptr should be unchanged since the previous - * call. - * - * This function is similar to strtok_r() defined in POSIX.1. - * - * @param s the string to parse, may be NULL - * @param delim 0-terminated list of token delimiters, must be non-NULL - * @param saveptr user-provided pointer which points to stored - * information necessary for av_strtok() to continue scanning the same - * string. saveptr is updated to point to the next character after the - * first delimiter found, or to NULL if the string was terminated - * @return the found token, or NULL when no token is found - */ -char *av_strtok(char *s, const char *delim, char **saveptr); - -/** - * Locale-independent conversion of ASCII isdigit. - */ -static inline av_const int av_isdigit(int c) -{ - return c >= '0' && c <= '9'; -} - -/** - * Locale-independent conversion of ASCII isgraph. - */ -static inline av_const int av_isgraph(int c) -{ - return c > 32 && c < 127; -} - -/** - * Locale-independent conversion of ASCII isspace. - */ -static inline av_const int av_isspace(int c) -{ - return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || - c == '\v'; -} - -/** - * Locale-independent conversion of ASCII characters to uppercase. - */ -static inline av_const int av_toupper(int c) -{ - if (c >= 'a' && c <= 'z') - c ^= 0x20; - return c; -} - -/** - * Locale-independent conversion of ASCII characters to lowercase. - */ -static inline av_const int av_tolower(int c) -{ - if (c >= 'A' && c <= 'Z') - c ^= 0x20; - return c; -} - -/** - * Locale-independent conversion of ASCII isxdigit. - */ -static inline av_const int av_isxdigit(int c) -{ - c = av_tolower(c); - return av_isdigit(c) || (c >= 'a' && c <= 'f'); -} - -/** - * Locale-independent case-insensitive compare. - * @note This means only ASCII-range characters are case-insensitive - */ -int av_strcasecmp(const char *a, const char *b); - -/** - * Locale-independent case-insensitive compare. - * @note This means only ASCII-range characters are case-insensitive - */ -int av_strncasecmp(const char *a, const char *b, size_t n); - -/** - * Locale-independent strings replace. - * @note This means only ASCII-range characters are replace - */ -char *av_strireplace(const char *str, const char *from, const char *to); - -/** - * Thread safe basename. - * @param path the string to parse, on DOS both \ and / are considered separators. - * @return pointer to the basename substring. - * If path does not contain a slash, the function returns a copy of path. - * If path is a NULL pointer or points to an empty string, a pointer - * to a string "." is returned. - */ -const char *av_basename(const char *path); - -/** - * Thread safe dirname. - * @param path the string to parse, on DOS both \ and / are considered separators. - * @return A pointer to a string that's the parent directory of path. - * If path is a NULL pointer or points to an empty string, a pointer - * to a string "." is returned. - * @note the function may modify the contents of the path, so copies should be passed. - */ -const char *av_dirname(char *path); - -/** - * Match instances of a name in a comma-separated list of names. - * List entries are checked from the start to the end of the names list, - * the first match ends further processing. If an entry prefixed with '-' - * matches, then 0 is returned. The "ALL" list entry is considered to - * match all names. - * - * @param name Name to look for. - * @param names List of names. - * @return 1 on match, 0 otherwise. - */ -int av_match_name(const char *name, const char *names); - -/** - * Append path component to the existing path. - * Path separator '/' is placed between when needed. - * Resulting string have to be freed with av_free(). - * @param path base path - * @param component component to be appended - * @return new path or NULL on error. - */ -char *av_append_path_component(const char *path, const char *component); - -enum AVEscapeMode { - AV_ESCAPE_MODE_AUTO, ///< Use auto-selected escaping mode. - AV_ESCAPE_MODE_BACKSLASH, ///< Use backslash escaping. - AV_ESCAPE_MODE_QUOTE, ///< Use single-quote escaping. - AV_ESCAPE_MODE_XML, ///< Use XML non-markup character data escaping. -}; - -/** - * Consider spaces special and escape them even in the middle of the - * string. - * - * This is equivalent to adding the whitespace characters to the special - * characters lists, except it is guaranteed to use the exact same list - * of whitespace characters as the rest of libavutil. - */ -#define AV_ESCAPE_FLAG_WHITESPACE (1 << 0) - -/** - * Escape only specified special characters. - * Without this flag, escape also any characters that may be considered - * special by av_get_token(), such as the single quote. - */ -#define AV_ESCAPE_FLAG_STRICT (1 << 1) - -/** - * Within AV_ESCAPE_MODE_XML, additionally escape single quotes for single - * quoted attributes. - */ -#define AV_ESCAPE_FLAG_XML_SINGLE_QUOTES (1 << 2) - -/** - * Within AV_ESCAPE_MODE_XML, additionally escape double quotes for double - * quoted attributes. - */ -#define AV_ESCAPE_FLAG_XML_DOUBLE_QUOTES (1 << 3) - - -/** - * Escape string in src, and put the escaped string in an allocated - * string in *dst, which must be freed with av_free(). - * - * @param dst pointer where an allocated string is put - * @param src string to escape, must be non-NULL - * @param special_chars string containing the special characters which - * need to be escaped, can be NULL - * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. - * Any unknown value for mode will be considered equivalent to - * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without - * notice. - * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_ macros - * @return the length of the allocated string, or a negative error code in case of error - * @see av_bprint_escape() - */ -av_warn_unused_result -int av_escape(char **dst, const char *src, const char *special_chars, - enum AVEscapeMode mode, int flags); - -#define AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES 1 ///< accept codepoints over 0x10FFFF -#define AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS 2 ///< accept non-characters - 0xFFFE and 0xFFFF -#define AV_UTF8_FLAG_ACCEPT_SURROGATES 4 ///< accept UTF-16 surrogates codes -#define AV_UTF8_FLAG_EXCLUDE_XML_INVALID_CONTROL_CODES 8 ///< exclude control codes not accepted by XML - -#define AV_UTF8_FLAG_ACCEPT_ALL \ - AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES|AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS|AV_UTF8_FLAG_ACCEPT_SURROGATES - -/** - * Read and decode a single UTF-8 code point (character) from the - * buffer in *buf, and update *buf to point to the next byte to - * decode. - * - * In case of an invalid byte sequence, the pointer will be updated to - * the next byte after the invalid sequence and the function will - * return an error code. - * - * Depending on the specified flags, the function will also fail in - * case the decoded code point does not belong to a valid range. - * - * @note For speed-relevant code a carefully implemented use of - * GET_UTF8() may be preferred. - * - * @param codep pointer used to return the parsed code in case of success. - * The value in *codep is set even in case the range check fails. - * @param bufp pointer to the address the first byte of the sequence - * to decode, updated by the function to point to the - * byte next after the decoded sequence - * @param buf_end pointer to the end of the buffer, points to the next - * byte past the last in the buffer. This is used to - * avoid buffer overreads (in case of an unfinished - * UTF-8 sequence towards the end of the buffer). - * @param flags a collection of AV_UTF8_FLAG_* flags - * @return >= 0 in case a sequence was successfully read, a negative - * value in case of invalid sequence - */ -av_warn_unused_result -int av_utf8_decode(int32_t *codep, const uint8_t **bufp, const uint8_t *buf_end, - unsigned int flags); - -/** - * Check if a name is in a list. - * @returns 0 if not found, or the 1 based index where it has been found in the - * list. - */ -int av_match_list(const char *name, const char *list, char separator); - -/** - * See libc sscanf manual for more information. - * Locale-independent sscanf implementation. - */ -int av_sscanf(const char *string, const char *format, ...); - -/** - * @} - */ - -#endif /* AVUTIL_AVSTRING_H */ diff --git a/prebuilts/aarch64/include/libavutil/avutil.h b/prebuilts/aarch64/include/libavutil/avutil.h deleted file mode 100644 index 4d63315..0000000 --- a/prebuilts/aarch64/include/libavutil/avutil.h +++ /dev/null @@ -1,365 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AVUTIL_H -#define AVUTIL_AVUTIL_H - -/** - * @file - * @ingroup lavu - * Convenience header that includes @ref lavu "libavutil"'s core. - */ - -/** - * @mainpage - * - * @section ffmpeg_intro Introduction - * - * This document describes the usage of the different libraries - * provided by FFmpeg. - * - * @li @ref libavc "libavcodec" encoding/decoding library - * @li @ref lavfi "libavfilter" graph-based frame editing library - * @li @ref libavf "libavformat" I/O and muxing/demuxing library - * @li @ref lavd "libavdevice" special devices muxing/demuxing library - * @li @ref lavu "libavutil" common utility library - * @li @ref lswr "libswresample" audio resampling, format conversion and mixing - * @li @ref lpp "libpostproc" post processing library - * @li @ref libsws "libswscale" color conversion and scaling library - * - * @section ffmpeg_versioning Versioning and compatibility - * - * Each of the FFmpeg libraries contains a version.h header, which defines a - * major, minor and micro version number with the - * LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO} macros. The major version - * number is incremented with backward incompatible changes - e.g. removing - * parts of the public API, reordering public struct members, etc. The minor - * version number is incremented for backward compatible API changes or major - * new features - e.g. adding a new public function or a new decoder. The micro - * version number is incremented for smaller changes that a calling program - * might still want to check for - e.g. changing behavior in a previously - * unspecified situation. - * - * FFmpeg guarantees backward API and ABI compatibility for each library as long - * as its major version number is unchanged. This means that no public symbols - * will be removed or renamed. Types and names of the public struct members and - * values of public macros and enums will remain the same (unless they were - * explicitly declared as not part of the public API). Documented behavior will - * not change. - * - * In other words, any correct program that works with a given FFmpeg snapshot - * should work just as well without any changes with any later snapshot with the - * same major versions. This applies to both rebuilding the program against new - * FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program - * links against. - * - * However, new public symbols may be added and new members may be appended to - * public structs whose size is not part of public ABI (most public structs in - * FFmpeg). New macros and enum values may be added. Behavior in undocumented - * situations may change slightly (and be documented). All those are accompanied - * by an entry in doc/APIchanges and incrementing either the minor or micro - * version number. - */ - -/** - * @defgroup lavu libavutil - * Common code shared across all FFmpeg libraries. - * - * @note - * libavutil is designed to be modular. In most cases, in order to use the - * functions provided by one component of libavutil you must explicitly include - * the specific header containing that feature. If you are only using - * media-related components, you could simply include libavutil/avutil.h, which - * brings in most of the "core" components. - * - * @{ - * - * @defgroup lavu_crypto Crypto and Hashing - * - * @{ - * @} - * - * @defgroup lavu_math Mathematics - * @{ - * - * @} - * - * @defgroup lavu_string String Manipulation - * - * @{ - * - * @} - * - * @defgroup lavu_mem Memory Management - * - * @{ - * - * @} - * - * @defgroup lavu_data Data Structures - * @{ - * - * @} - * - * @defgroup lavu_video Video related - * - * @{ - * - * @} - * - * @defgroup lavu_audio Audio related - * - * @{ - * - * @} - * - * @defgroup lavu_error Error Codes - * - * @{ - * - * @} - * - * @defgroup lavu_log Logging Facility - * - * @{ - * - * @} - * - * @defgroup lavu_misc Other - * - * @{ - * - * @defgroup preproc_misc Preprocessor String Macros - * - * @{ - * - * @} - * - * @defgroup version_utils Library Version Macros - * - * @{ - * - * @} - */ - - -/** - * @addtogroup lavu_ver - * @{ - */ - -/** - * Return the LIBAVUTIL_VERSION_INT constant. - */ -unsigned avutil_version(void); - -/** - * Return an informative version string. This usually is the actual release - * version number or a git commit description. This string has no fixed format - * and can change any time. It should never be parsed by code. - */ -const char *av_version_info(void); - -/** - * Return the libavutil build-time configuration. - */ -const char *avutil_configuration(void); - -/** - * Return the libavutil license. - */ -const char *avutil_license(void); - -/** - * @} - */ - -/** - * @addtogroup lavu_media Media Type - * @brief Media Type - */ - -enum AVMediaType { - AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA - AVMEDIA_TYPE_VIDEO, - AVMEDIA_TYPE_AUDIO, - AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous - AVMEDIA_TYPE_SUBTITLE, - AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse - AVMEDIA_TYPE_NB -}; - -/** - * Return a string describing the media_type enum, NULL if media_type - * is unknown. - */ -const char *av_get_media_type_string(enum AVMediaType media_type); - -/** - * @defgroup lavu_const Constants - * @{ - * - * @defgroup lavu_enc Encoding specific - * - * @note those definition should move to avcodec - * @{ - */ - -#define FF_LAMBDA_SHIFT 7 -#define FF_LAMBDA_SCALE (1< - -/** - * @defgroup lavu_base64 Base64 - * @ingroup lavu_crypto - * @{ - */ - -/** - * Decode a base64-encoded string. - * - * @param out buffer for decoded data - * @param in null-terminated input string - * @param out_size size in bytes of the out buffer, must be at - * least 3/4 of the length of in, that is AV_BASE64_DECODE_SIZE(strlen(in)) - * @return number of bytes written, or a negative value in case of - * invalid input - */ -int av_base64_decode(uint8_t *out, const char *in, int out_size); - -/** - * Calculate the output size in bytes needed to decode a base64 string - * with length x to a data buffer. - */ -#define AV_BASE64_DECODE_SIZE(x) ((x) * 3LL / 4) - -/** - * Encode data to base64 and null-terminate. - * - * @param out buffer for encoded data - * @param out_size size in bytes of the out buffer (including the - * null terminator), must be at least AV_BASE64_SIZE(in_size) - * @param in input buffer containing the data to encode - * @param in_size size in bytes of the in buffer - * @return out or NULL in case of error - */ -char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size); - -/** - * Calculate the output size needed to base64-encode x bytes to a - * null-terminated string. - */ -#define AV_BASE64_SIZE(x) (((x)+2) / 3 * 4 + 1) - - /** - * @} - */ - -#endif /* AVUTIL_BASE64_H */ diff --git a/prebuilts/aarch64/include/libavutil/blowfish.h b/prebuilts/aarch64/include/libavutil/blowfish.h deleted file mode 100644 index 9e289a4..0000000 --- a/prebuilts/aarch64/include/libavutil/blowfish.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Blowfish algorithm - * Copyright (c) 2012 Samuel Pitoiset - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_BLOWFISH_H -#define AVUTIL_BLOWFISH_H - -#include - -/** - * @defgroup lavu_blowfish Blowfish - * @ingroup lavu_crypto - * @{ - */ - -#define AV_BF_ROUNDS 16 - -typedef struct AVBlowfish { - uint32_t p[AV_BF_ROUNDS + 2]; - uint32_t s[4][256]; -} AVBlowfish; - -/** - * Allocate an AVBlowfish context. - */ -AVBlowfish *av_blowfish_alloc(void); - -/** - * Initialize an AVBlowfish context. - * - * @param ctx an AVBlowfish context - * @param key a key - * @param key_len length of the key - */ -void av_blowfish_init(struct AVBlowfish *ctx, const uint8_t *key, int key_len); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVBlowfish context - * @param xl left four bytes halves of input to be encrypted - * @param xr right four bytes halves of input to be encrypted - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_blowfish_crypt_ecb(struct AVBlowfish *ctx, uint32_t *xl, uint32_t *xr, - int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVBlowfish context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_blowfish_crypt(struct AVBlowfish *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_BLOWFISH_H */ diff --git a/prebuilts/aarch64/include/libavutil/bprint.h b/prebuilts/aarch64/include/libavutil/bprint.h deleted file mode 100644 index c09b1ac..0000000 --- a/prebuilts/aarch64/include/libavutil/bprint.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (c) 2012 Nicolas George - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_BPRINT_H -#define AVUTIL_BPRINT_H - -#include - -#include "attributes.h" -#include "avstring.h" - -/** - * Define a structure with extra padding to a fixed size - * This helps ensuring binary compatibility with future versions. - */ - -#define FF_PAD_STRUCTURE(name, size, ...) \ -struct ff_pad_helper_##name { __VA_ARGS__ }; \ -typedef struct name { \ - __VA_ARGS__ \ - char reserved_padding[size - sizeof(struct ff_pad_helper_##name)]; \ -} name; - -/** - * Buffer to print data progressively - * - * The string buffer grows as necessary and is always 0-terminated. - * The content of the string is never accessed, and thus is - * encoding-agnostic and can even hold binary data. - * - * Small buffers are kept in the structure itself, and thus require no - * memory allocation at all (unless the contents of the buffer is needed - * after the structure goes out of scope). This is almost as lightweight as - * declaring a local "char buf[512]". - * - * The length of the string can go beyond the allocated size: the buffer is - * then truncated, but the functions still keep account of the actual total - * length. - * - * In other words, buf->len can be greater than buf->size and records the - * total length of what would have been to the buffer if there had been - * enough memory. - * - * Append operations do not need to be tested for failure: if a memory - * allocation fails, data stop being appended to the buffer, but the length - * is still updated. This situation can be tested with - * av_bprint_is_complete(). - * - * The size_max field determines several possible behaviours: - * - * size_max = -1 (= UINT_MAX) or any large value will let the buffer be - * reallocated as necessary, with an amortized linear cost. - * - * size_max = 0 prevents writing anything to the buffer: only the total - * length is computed. The write operations can then possibly be repeated in - * a buffer with exactly the necessary size - * (using size_init = size_max = len + 1). - * - * size_max = 1 is automatically replaced by the exact size available in the - * structure itself, thus ensuring no dynamic memory allocation. The - * internal buffer is large enough to hold a reasonable paragraph of text, - * such as the current paragraph. - */ - -FF_PAD_STRUCTURE(AVBPrint, 1024, - char *str; /**< string so far */ - unsigned len; /**< length so far */ - unsigned size; /**< allocated memory */ - unsigned size_max; /**< maximum allocated memory */ - char reserved_internal_buffer[1]; -) - -/** - * Convenience macros for special values for av_bprint_init() size_max - * parameter. - */ -#define AV_BPRINT_SIZE_UNLIMITED ((unsigned)-1) -#define AV_BPRINT_SIZE_AUTOMATIC 1 -#define AV_BPRINT_SIZE_COUNT_ONLY 0 - -/** - * Init a print buffer. - * - * @param buf buffer to init - * @param size_init initial size (including the final 0) - * @param size_max maximum size; - * 0 means do not write anything, just count the length; - * 1 is replaced by the maximum value for automatic storage; - * any large value means that the internal buffer will be - * reallocated as needed up to that limit; -1 is converted to - * UINT_MAX, the largest limit possible. - * Check also AV_BPRINT_SIZE_* macros. - */ -void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max); - -/** - * Init a print buffer using a pre-existing buffer. - * - * The buffer will not be reallocated. - * - * @param buf buffer structure to init - * @param buffer byte buffer to use for the string data - * @param size size of buffer - */ -void av_bprint_init_for_buffer(AVBPrint *buf, char *buffer, unsigned size); - -/** - * Append a formatted string to a print buffer. - */ -void av_bprintf(AVBPrint *buf, const char *fmt, ...) av_printf_format(2, 3); - -/** - * Append a formatted string to a print buffer. - */ -void av_vbprintf(AVBPrint *buf, const char *fmt, va_list vl_arg); - -/** - * Append char c n times to a print buffer. - */ -void av_bprint_chars(AVBPrint *buf, char c, unsigned n); - -/** - * Append data to a print buffer. - * - * param buf bprint buffer to use - * param data pointer to data - * param size size of data - */ -void av_bprint_append_data(AVBPrint *buf, const char *data, unsigned size); - -struct tm; -/** - * Append a formatted date and time to a print buffer. - * - * param buf bprint buffer to use - * param fmt date and time format string, see strftime() - * param tm broken-down time structure to translate - * - * @note due to poor design of the standard strftime function, it may - * produce poor results if the format string expands to a very long text and - * the bprint buffer is near the limit stated by the size_max option. - */ -void av_bprint_strftime(AVBPrint *buf, const char *fmt, const struct tm *tm); - -/** - * Allocate bytes in the buffer for external use. - * - * @param[in] buf buffer structure - * @param[in] size required size - * @param[out] mem pointer to the memory area - * @param[out] actual_size size of the memory area after allocation; - * can be larger or smaller than size - */ -void av_bprint_get_buffer(AVBPrint *buf, unsigned size, - unsigned char **mem, unsigned *actual_size); - -/** - * Reset the string to "" but keep internal allocated data. - */ -void av_bprint_clear(AVBPrint *buf); - -/** - * Test if the print buffer is complete (not truncated). - * - * It may have been truncated due to a memory allocation failure - * or the size_max limit (compare size and size_max if necessary). - */ -static inline int av_bprint_is_complete(const AVBPrint *buf) -{ - return buf->len < buf->size; -} - -/** - * Finalize a print buffer. - * - * The print buffer can no longer be used afterwards, - * but the len and size fields are still valid. - * - * @arg[out] ret_str if not NULL, used to return a permanent copy of the - * buffer contents, or NULL if memory allocation fails; - * if NULL, the buffer is discarded and freed - * @return 0 for success or error code (probably AVERROR(ENOMEM)) - */ -int av_bprint_finalize(AVBPrint *buf, char **ret_str); - -/** - * Escape the content in src and append it to dstbuf. - * - * @param dstbuf already inited destination bprint buffer - * @param src string containing the text to escape - * @param special_chars string containing the special characters which - * need to be escaped, can be NULL - * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. - * Any unknown value for mode will be considered equivalent to - * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without - * notice. - * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_* macros - */ -void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_chars, - enum AVEscapeMode mode, int flags); - -#endif /* AVUTIL_BPRINT_H */ diff --git a/prebuilts/aarch64/include/libavutil/bswap.h b/prebuilts/aarch64/include/libavutil/bswap.h deleted file mode 100644 index 91cb795..0000000 --- a/prebuilts/aarch64/include/libavutil/bswap.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * byte swapping routines - */ - -#ifndef AVUTIL_BSWAP_H -#define AVUTIL_BSWAP_H - -#include -#include "libavutil/avconfig.h" -#include "attributes.h" - -#ifdef HAVE_AV_CONFIG_H - -#include "config.h" - -#if ARCH_AARCH64 -# include "aarch64/bswap.h" -#elif ARCH_ARM -# include "arm/bswap.h" -#elif ARCH_AVR32 -# include "avr32/bswap.h" -#elif ARCH_SH4 -# include "sh4/bswap.h" -#elif ARCH_X86 -# include "x86/bswap.h" -#endif - -#endif /* HAVE_AV_CONFIG_H */ - -#define AV_BSWAP16C(x) (((x) << 8 & 0xff00) | ((x) >> 8 & 0x00ff)) -#define AV_BSWAP32C(x) (AV_BSWAP16C(x) << 16 | AV_BSWAP16C((x) >> 16)) -#define AV_BSWAP64C(x) (AV_BSWAP32C(x) << 32 | AV_BSWAP32C((x) >> 32)) - -#define AV_BSWAPC(s, x) AV_BSWAP##s##C(x) - -#ifndef av_bswap16 -static av_always_inline av_const uint16_t av_bswap16(uint16_t x) -{ - x= (x>>8) | (x<<8); - return x; -} -#endif - -#ifndef av_bswap32 -static av_always_inline av_const uint32_t av_bswap32(uint32_t x) -{ - return AV_BSWAP32C(x); -} -#endif - -#ifndef av_bswap64 -static inline uint64_t av_const av_bswap64(uint64_t x) -{ - return (uint64_t)av_bswap32(x) << 32 | av_bswap32(x >> 32); -} -#endif - -// be2ne ... big-endian to native-endian -// le2ne ... little-endian to native-endian - -#if AV_HAVE_BIGENDIAN -#define av_be2ne16(x) (x) -#define av_be2ne32(x) (x) -#define av_be2ne64(x) (x) -#define av_le2ne16(x) av_bswap16(x) -#define av_le2ne32(x) av_bswap32(x) -#define av_le2ne64(x) av_bswap64(x) -#define AV_BE2NEC(s, x) (x) -#define AV_LE2NEC(s, x) AV_BSWAPC(s, x) -#else -#define av_be2ne16(x) av_bswap16(x) -#define av_be2ne32(x) av_bswap32(x) -#define av_be2ne64(x) av_bswap64(x) -#define av_le2ne16(x) (x) -#define av_le2ne32(x) (x) -#define av_le2ne64(x) (x) -#define AV_BE2NEC(s, x) AV_BSWAPC(s, x) -#define AV_LE2NEC(s, x) (x) -#endif - -#define AV_BE2NE16C(x) AV_BE2NEC(16, x) -#define AV_BE2NE32C(x) AV_BE2NEC(32, x) -#define AV_BE2NE64C(x) AV_BE2NEC(64, x) -#define AV_LE2NE16C(x) AV_LE2NEC(16, x) -#define AV_LE2NE32C(x) AV_LE2NEC(32, x) -#define AV_LE2NE64C(x) AV_LE2NEC(64, x) - -#endif /* AVUTIL_BSWAP_H */ diff --git a/prebuilts/aarch64/include/libavutil/buffer.h b/prebuilts/aarch64/include/libavutil/buffer.h deleted file mode 100644 index 241a80e..0000000 --- a/prebuilts/aarch64/include/libavutil/buffer.h +++ /dev/null @@ -1,353 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_buffer - * refcounted data buffer API - */ - -#ifndef AVUTIL_BUFFER_H -#define AVUTIL_BUFFER_H - -#include -#include - -#include "version.h" - -/** - * @defgroup lavu_buffer AVBuffer - * @ingroup lavu_data - * - * @{ - * AVBuffer is an API for reference-counted data buffers. - * - * There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer - * represents the data buffer itself; it is opaque and not meant to be accessed - * by the caller directly, but only through AVBufferRef. However, the caller may - * e.g. compare two AVBuffer pointers to check whether two different references - * are describing the same data buffer. AVBufferRef represents a single - * reference to an AVBuffer and it is the object that may be manipulated by the - * caller directly. - * - * There are two functions provided for creating a new AVBuffer with a single - * reference -- av_buffer_alloc() to just allocate a new buffer, and - * av_buffer_create() to wrap an existing array in an AVBuffer. From an existing - * reference, additional references may be created with av_buffer_ref(). - * Use av_buffer_unref() to free a reference (this will automatically free the - * data once all the references are freed). - * - * The convention throughout this API and the rest of FFmpeg is such that the - * buffer is considered writable if there exists only one reference to it (and - * it has not been marked as read-only). The av_buffer_is_writable() function is - * provided to check whether this is true and av_buffer_make_writable() will - * automatically create a new writable buffer when necessary. - * Of course nothing prevents the calling code from violating this convention, - * however that is safe only when all the existing references are under its - * control. - * - * @note Referencing and unreferencing the buffers is thread-safe and thus - * may be done from multiple threads simultaneously without any need for - * additional locking. - * - * @note Two different references to the same buffer can point to different - * parts of the buffer (i.e. their AVBufferRef.data will not be equal). - */ - -/** - * A reference counted buffer type. It is opaque and is meant to be used through - * references (AVBufferRef). - */ -typedef struct AVBuffer AVBuffer; - -/** - * A reference to a data buffer. - * - * The size of this struct is not a part of the public ABI and it is not meant - * to be allocated directly. - */ -typedef struct AVBufferRef { - AVBuffer *buffer; - - /** - * The data buffer. It is considered writable if and only if - * this is the only reference to the buffer, in which case - * av_buffer_is_writable() returns 1. - */ - uint8_t *data; - /** - * Size of data in bytes. - */ -#if FF_API_BUFFER_SIZE_T - int size; -#else - size_t size; -#endif -} AVBufferRef; - -/** - * Allocate an AVBuffer of the given size using av_malloc(). - * - * @return an AVBufferRef of given size or NULL when out of memory - */ -#if FF_API_BUFFER_SIZE_T -AVBufferRef *av_buffer_alloc(int size); -#else -AVBufferRef *av_buffer_alloc(size_t size); -#endif - -/** - * Same as av_buffer_alloc(), except the returned buffer will be initialized - * to zero. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferRef *av_buffer_allocz(int size); -#else -AVBufferRef *av_buffer_allocz(size_t size); -#endif - -/** - * Always treat the buffer as read-only, even when it has only one - * reference. - */ -#define AV_BUFFER_FLAG_READONLY (1 << 0) - -/** - * Create an AVBuffer from an existing array. - * - * If this function is successful, data is owned by the AVBuffer. The caller may - * only access data through the returned AVBufferRef and references derived from - * it. - * If this function fails, data is left untouched. - * @param data data array - * @param size size of data in bytes - * @param free a callback for freeing this buffer's data - * @param opaque parameter to be got for processing or passed to free - * @param flags a combination of AV_BUFFER_FLAG_* - * - * @return an AVBufferRef referring to data on success, NULL on failure. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferRef *av_buffer_create(uint8_t *data, int size, -#else -AVBufferRef *av_buffer_create(uint8_t *data, size_t size, -#endif - void (*free)(void *opaque, uint8_t *data), - void *opaque, int flags); - -/** - * Default free callback, which calls av_free() on the buffer data. - * This function is meant to be passed to av_buffer_create(), not called - * directly. - */ -void av_buffer_default_free(void *opaque, uint8_t *data); - -/** - * Create a new reference to an AVBuffer. - * - * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on - * failure. - */ -AVBufferRef *av_buffer_ref(AVBufferRef *buf); - -/** - * Free a given reference and automatically free the buffer if there are no more - * references to it. - * - * @param buf the reference to be freed. The pointer is set to NULL on return. - */ -void av_buffer_unref(AVBufferRef **buf); - -/** - * @return 1 if the caller may write to the data referred to by buf (which is - * true if and only if buf is the only reference to the underlying AVBuffer). - * Return 0 otherwise. - * A positive answer is valid until av_buffer_ref() is called on buf. - */ -int av_buffer_is_writable(const AVBufferRef *buf); - -/** - * @return the opaque parameter set by av_buffer_create. - */ -void *av_buffer_get_opaque(const AVBufferRef *buf); - -int av_buffer_get_ref_count(const AVBufferRef *buf); - -/** - * Create a writable reference from a given buffer reference, avoiding data copy - * if possible. - * - * @param buf buffer reference to make writable. On success, buf is either left - * untouched, or it is unreferenced and a new writable AVBufferRef is - * written in its place. On failure, buf is left untouched. - * @return 0 on success, a negative AVERROR on failure. - */ -int av_buffer_make_writable(AVBufferRef **buf); - -/** - * Reallocate a given buffer. - * - * @param buf a buffer reference to reallocate. On success, buf will be - * unreferenced and a new reference with the required size will be - * written in its place. On failure buf will be left untouched. *buf - * may be NULL, then a new buffer is allocated. - * @param size required new buffer size. - * @return 0 on success, a negative AVERROR on failure. - * - * @note the buffer is actually reallocated with av_realloc() only if it was - * initially allocated through av_buffer_realloc(NULL) and there is only one - * reference to it (i.e. the one passed to this function). In all other cases - * a new buffer is allocated and the data is copied. - */ -#if FF_API_BUFFER_SIZE_T -int av_buffer_realloc(AVBufferRef **buf, int size); -#else -int av_buffer_realloc(AVBufferRef **buf, size_t size); -#endif - -/** - * Ensure dst refers to the same data as src. - * - * When *dst is already equivalent to src, do nothing. Otherwise unreference dst - * and replace it with a new reference to src. - * - * @param dst Pointer to either a valid buffer reference or NULL. On success, - * this will point to a buffer reference equivalent to src. On - * failure, dst will be left untouched. - * @param src A buffer reference to replace dst with. May be NULL, then this - * function is equivalent to av_buffer_unref(dst). - * @return 0 on success - * AVERROR(ENOMEM) on memory allocation failure. - */ -int av_buffer_replace(AVBufferRef **dst, AVBufferRef *src); - -/** - * @} - */ - -/** - * @defgroup lavu_bufferpool AVBufferPool - * @ingroup lavu_data - * - * @{ - * AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers. - * - * Frequently allocating and freeing large buffers may be slow. AVBufferPool is - * meant to solve this in cases when the caller needs a set of buffers of the - * same size (the most obvious use case being buffers for raw video or audio - * frames). - * - * At the beginning, the user must call av_buffer_pool_init() to create the - * buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to - * get a reference to a new buffer, similar to av_buffer_alloc(). This new - * reference works in all aspects the same way as the one created by - * av_buffer_alloc(). However, when the last reference to this buffer is - * unreferenced, it is returned to the pool instead of being freed and will be - * reused for subsequent av_buffer_pool_get() calls. - * - * When the caller is done with the pool and no longer needs to allocate any new - * buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable. - * Once all the buffers are released, it will automatically be freed. - * - * Allocating and releasing buffers with this API is thread-safe as long as - * either the default alloc callback is used, or the user-supplied one is - * thread-safe. - */ - -/** - * The buffer pool. This structure is opaque and not meant to be accessed - * directly. It is allocated with av_buffer_pool_init() and freed with - * av_buffer_pool_uninit(). - */ -typedef struct AVBufferPool AVBufferPool; - -/** - * Allocate and initialize a buffer pool. - * - * @param size size of each buffer in this pool - * @param alloc a function that will be used to allocate new buffers when the - * pool is empty. May be NULL, then the default allocator will be used - * (av_buffer_alloc()). - * @return newly created buffer pool on success, NULL on error. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)); -#else -AVBufferPool *av_buffer_pool_init(size_t size, AVBufferRef* (*alloc)(size_t size)); -#endif - -/** - * Allocate and initialize a buffer pool with a more complex allocator. - * - * @param size size of each buffer in this pool - * @param opaque arbitrary user data used by the allocator - * @param alloc a function that will be used to allocate new buffers when the - * pool is empty. May be NULL, then the default allocator will be - * used (av_buffer_alloc()). - * @param pool_free a function that will be called immediately before the pool - * is freed. I.e. after av_buffer_pool_uninit() is called - * by the caller and all the frames are returned to the pool - * and freed. It is intended to uninitialize the user opaque - * data. May be NULL. - * @return newly created buffer pool on success, NULL on error. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferPool *av_buffer_pool_init2(int size, void *opaque, - AVBufferRef* (*alloc)(void *opaque, int size), -#else -AVBufferPool *av_buffer_pool_init2(size_t size, void *opaque, - AVBufferRef* (*alloc)(void *opaque, size_t size), -#endif - void (*pool_free)(void *opaque)); - -/** - * Mark the pool as being available for freeing. It will actually be freed only - * once all the allocated buffers associated with the pool are released. Thus it - * is safe to call this function while some of the allocated buffers are still - * in use. - * - * @param pool pointer to the pool to be freed. It will be set to NULL. - */ -void av_buffer_pool_uninit(AVBufferPool **pool); - -/** - * Allocate a new AVBuffer, reusing an old buffer from the pool when available. - * This function may be called simultaneously from multiple threads. - * - * @return a reference to the new buffer on success, NULL on error. - */ -AVBufferRef *av_buffer_pool_get(AVBufferPool *pool); - -/** - * Query the original opaque parameter of an allocated buffer in the pool. - * - * @param ref a buffer reference to a buffer returned by av_buffer_pool_get. - * @return the opaque parameter set by the buffer allocator function of the - * buffer pool. - * - * @note the opaque parameter of ref is used by the buffer pool implementation, - * therefore you have to use this function to access the original opaque - * parameter of an allocated buffer. - */ -void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref); - -/** - * @} - */ - -#endif /* AVUTIL_BUFFER_H */ diff --git a/prebuilts/aarch64/include/libavutil/camellia.h b/prebuilts/aarch64/include/libavutil/camellia.h deleted file mode 100644 index e674c9b..0000000 --- a/prebuilts/aarch64/include/libavutil/camellia.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * An implementation of the CAMELLIA algorithm as mentioned in RFC3713 - * Copyright (c) 2014 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CAMELLIA_H -#define AVUTIL_CAMELLIA_H - -#include - - -/** - * @file - * @brief Public header for libavutil CAMELLIA algorithm - * @defgroup lavu_camellia CAMELLIA - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_camellia_size; - -struct AVCAMELLIA; - -/** - * Allocate an AVCAMELLIA context - * To free the struct: av_free(ptr) - */ -struct AVCAMELLIA *av_camellia_alloc(void); - -/** - * Initialize an AVCAMELLIA context. - * - * @param ctx an AVCAMELLIA context - * @param key a key of 16, 24, 32 bytes used for encryption/decryption - * @param key_bits number of keybits: possible are 128, 192, 256 - */ -int av_camellia_init(struct AVCAMELLIA *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVCAMELLIA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 16 byte blocks - * @paran iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_camellia_crypt(struct AVCAMELLIA *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt); - -/** - * @} - */ -#endif /* AVUTIL_CAMELLIA_H */ diff --git a/prebuilts/aarch64/include/libavutil/cast5.h b/prebuilts/aarch64/include/libavutil/cast5.h deleted file mode 100644 index ad5b347..0000000 --- a/prebuilts/aarch64/include/libavutil/cast5.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * An implementation of the CAST128 algorithm as mentioned in RFC2144 - * Copyright (c) 2014 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CAST5_H -#define AVUTIL_CAST5_H - -#include - - -/** - * @file - * @brief Public header for libavutil CAST5 algorithm - * @defgroup lavu_cast5 CAST5 - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_cast5_size; - -struct AVCAST5; - -/** - * Allocate an AVCAST5 context - * To free the struct: av_free(ptr) - */ -struct AVCAST5 *av_cast5_alloc(void); -/** - * Initialize an AVCAST5 context. - * - * @param ctx an AVCAST5 context - * @param key a key of 5,6,...16 bytes used for encryption/decryption - * @param key_bits number of keybits: possible are 40,48,...,128 - * @return 0 on success, less than 0 on failure - */ -int av_cast5_init(struct AVCAST5 *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, ECB mode only - * - * @param ctx an AVCAST5 context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_cast5_crypt(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVCAST5 context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_cast5_crypt2(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); -/** - * @} - */ -#endif /* AVUTIL_CAST5_H */ diff --git a/prebuilts/aarch64/include/libavutil/channel_layout.h b/prebuilts/aarch64/include/libavutil/channel_layout.h deleted file mode 100644 index d39ae11..0000000 --- a/prebuilts/aarch64/include/libavutil/channel_layout.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright (c) 2006 Michael Niedermayer - * Copyright (c) 2008 Peter Ross - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CHANNEL_LAYOUT_H -#define AVUTIL_CHANNEL_LAYOUT_H - -#include - -/** - * @file - * audio channel layout utility functions - */ - -/** - * @addtogroup lavu_audio - * @{ - */ - -/** - * @defgroup channel_masks Audio channel masks - * - * 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. - * - * @{ - */ -#define AV_CH_FRONT_LEFT 0x00000001 -#define AV_CH_FRONT_RIGHT 0x00000002 -#define AV_CH_FRONT_CENTER 0x00000004 -#define AV_CH_LOW_FREQUENCY 0x00000008 -#define AV_CH_BACK_LEFT 0x00000010 -#define AV_CH_BACK_RIGHT 0x00000020 -#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040 -#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080 -#define AV_CH_BACK_CENTER 0x00000100 -#define AV_CH_SIDE_LEFT 0x00000200 -#define AV_CH_SIDE_RIGHT 0x00000400 -#define AV_CH_TOP_CENTER 0x00000800 -#define AV_CH_TOP_FRONT_LEFT 0x00001000 -#define AV_CH_TOP_FRONT_CENTER 0x00002000 -#define AV_CH_TOP_FRONT_RIGHT 0x00004000 -#define AV_CH_TOP_BACK_LEFT 0x00008000 -#define AV_CH_TOP_BACK_CENTER 0x00010000 -#define AV_CH_TOP_BACK_RIGHT 0x00020000 -#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix. -#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT. -#define AV_CH_WIDE_LEFT 0x0000000080000000ULL -#define AV_CH_WIDE_RIGHT 0x0000000100000000ULL -#define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL -#define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL -#define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL -#define AV_CH_TOP_SIDE_LEFT 0x0000001000000000ULL -#define AV_CH_TOP_SIDE_RIGHT 0x0000002000000000ULL -#define AV_CH_BOTTOM_FRONT_CENTER 0x0000004000000000ULL -#define AV_CH_BOTTOM_FRONT_LEFT 0x0000008000000000ULL -#define AV_CH_BOTTOM_FRONT_RIGHT 0x0000010000000000ULL - -/** Channel mask value used for AVCodecContext.request_channel_layout - to indicate that the user requests the channel order of the decoder output - to be the native codec channel order. */ -#define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL - -/** - * @} - * @defgroup channel_mask_c Audio channel layouts - * @{ - * */ -#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT) -#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT0_FRONT (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT0_FRONT (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) -#define 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) -#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT) -#define AV_CH_LAYOUT_22POINT2 (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_BACK_CENTER|AV_CH_LOW_FREQUENCY_2|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_CENTER|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_BOTTOM_FRONT_CENTER|AV_CH_BOTTOM_FRONT_LEFT|AV_CH_BOTTOM_FRONT_RIGHT) - -enum AVMatrixEncoding { - AV_MATRIX_ENCODING_NONE, - AV_MATRIX_ENCODING_DOLBY, - AV_MATRIX_ENCODING_DPLII, - AV_MATRIX_ENCODING_DPLIIX, - AV_MATRIX_ENCODING_DPLIIZ, - AV_MATRIX_ENCODING_DOLBYEX, - AV_MATRIX_ENCODING_DOLBYHEADPHONE, - AV_MATRIX_ENCODING_NB -}; - -/** - * Return a channel layout id that matches name, or 0 if no match is found. - * - * name can be one or several of the following notations, - * separated by '+' or '|': - * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, - * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); - * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, - * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); - * - a number of channels, in decimal, followed by 'c', yielding - * the default channel layout for that number of channels (@see - * av_get_default_channel_layout); - * - a channel layout mask, in hexadecimal starting with "0x" (see the - * AV_CH_* macros). - * - * Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7" - */ -uint64_t av_get_channel_layout(const char *name); - -/** - * Return a channel layout and the number of channels based on the specified name. - * - * This function is similar to (@see av_get_channel_layout), but can also parse - * unknown channel layout specifications. - * - * @param[in] name channel layout specification string - * @param[out] channel_layout parsed channel layout (0 if unknown) - * @param[out] nb_channels number of channels - * - * @return 0 on success, AVERROR(EINVAL) if the parsing fails. - */ -int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, int* nb_channels); - -/** - * Return a description of a channel layout. - * If nb_channels is <= 0, it is guessed from the channel_layout. - * - * @param buf put here the string containing the channel layout - * @param buf_size size in bytes of the buffer - */ -void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout); - -struct AVBPrint; -/** - * Append a description of a channel layout to a bprint buffer. - */ -void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout); - -/** - * Return the number of channels in the channel layout. - */ -int av_get_channel_layout_nb_channels(uint64_t channel_layout); - -/** - * Return default channel layout for a given number of channels. - */ -int64_t av_get_default_channel_layout(int nb_channels); - -/** - * Get the index of a channel in channel_layout. - * - * @param channel a channel layout describing exactly one channel which must be - * present in channel_layout. - * - * @return index of channel in channel_layout on success, a negative AVERROR - * on error. - */ -int av_get_channel_layout_channel_index(uint64_t channel_layout, - uint64_t channel); - -/** - * Get the channel with the given index in channel_layout. - */ -uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index); - -/** - * Get the name of a given channel. - * - * @return channel name on success, NULL on error. - */ -const char *av_get_channel_name(uint64_t channel); - -/** - * Get the description of a given channel. - * - * @param channel a channel layout with a single channel - * @return channel description on success, NULL on error - */ -const char *av_get_channel_description(uint64_t channel); - -/** - * Get the value and name of a standard channel layout. - * - * @param[in] index index in an internal list, starting at 0 - * @param[out] layout channel layout mask - * @param[out] name name of the layout - * @return 0 if the layout exists, - * <0 if index is beyond the limits - */ -int av_get_standard_channel_layout(unsigned index, uint64_t *layout, - const char **name); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_CHANNEL_LAYOUT_H */ diff --git a/prebuilts/aarch64/include/libavutil/common.h b/prebuilts/aarch64/include/libavutil/common.h deleted file mode 100644 index aee353d..0000000 --- a/prebuilts/aarch64/include/libavutil/common.h +++ /dev/null @@ -1,608 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * common internal and external API header - */ - -#ifndef AVUTIL_COMMON_H -#define AVUTIL_COMMON_H - -#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && !defined(UINT64_C) -#error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "attributes.h" -#include "macros.h" -#include "version.h" -#include "libavutil/avconfig.h" - -#if AV_HAVE_BIGENDIAN -# define AV_NE(be, le) (be) -#else -# define AV_NE(be, le) (le) -#endif - -//rounded division & shift -#define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) -/* assume b>0 */ -#define ROUNDED_DIV(a,b) (((a)>=0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) -/* Fast a/(1<=0 and b>=0 */ -#define AV_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \ - : ((a) + (1<<(b)) - 1) >> (b)) -/* Backwards compat. */ -#define FF_CEIL_RSHIFT AV_CEIL_RSHIFT - -#define FFUDIV(a,b) (((a)>0 ?(a):(a)-(b)+1) / (b)) -#define FFUMOD(a,b) ((a)-(b)*FFUDIV(a,b)) - -/** - * Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they - * are not representable as absolute values of their type. This is the same - * as with *abs() - * @see FFNABS() - */ -#define FFABS(a) ((a) >= 0 ? (a) : (-(a))) -#define FFSIGN(a) ((a) > 0 ? 1 : -1) - -/** - * Negative Absolute value. - * this works for all integers of all types. - * As with many macros, this evaluates its argument twice, it thus must not have - * a sideeffect, that is FFNABS(x++) has undefined behavior. - */ -#define FFNABS(a) ((a) <= 0 ? (a) : (-(a))) - -/** - * Unsigned Absolute value. - * This takes the absolute value of a signed int and returns it as a unsigned. - * This also works with INT_MIN which would otherwise not be representable - * As with many macros, this evaluates its argument twice. - */ -#define FFABSU(a) ((a) <= 0 ? -(unsigned)(a) : (unsigned)(a)) -#define FFABS64U(a) ((a) <= 0 ? -(uint64_t)(a) : (uint64_t)(a)) - -/** - * Comparator. - * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 - * if x == y. This is useful for instance in a qsort comparator callback. - * Furthermore, compilers are able to optimize this to branchless code, and - * there is no risk of overflow with signed types. - * As with many macros, this evaluates its argument multiple times, it thus - * must not have a side-effect. - */ -#define FFDIFFSIGN(x,y) (((x)>(y)) - ((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])) - -/* misc math functions */ - -#ifdef HAVE_AV_CONFIG_H -# include "config.h" -# include "intmath.h" -#endif - -#ifndef av_ceil_log2 -# define av_ceil_log2 av_ceil_log2_c -#endif -#ifndef av_clip -# define av_clip av_clip_c -#endif -#ifndef av_clip64 -# define av_clip64 av_clip64_c -#endif -#ifndef av_clip_uint8 -# define av_clip_uint8 av_clip_uint8_c -#endif -#ifndef av_clip_int8 -# define av_clip_int8 av_clip_int8_c -#endif -#ifndef av_clip_uint16 -# define av_clip_uint16 av_clip_uint16_c -#endif -#ifndef av_clip_int16 -# define av_clip_int16 av_clip_int16_c -#endif -#ifndef av_clipl_int32 -# define av_clipl_int32 av_clipl_int32_c -#endif -#ifndef av_clip_intp2 -# define av_clip_intp2 av_clip_intp2_c -#endif -#ifndef av_clip_uintp2 -# define av_clip_uintp2 av_clip_uintp2_c -#endif -#ifndef av_mod_uintp2 -# define av_mod_uintp2 av_mod_uintp2_c -#endif -#ifndef av_sat_add32 -# define av_sat_add32 av_sat_add32_c -#endif -#ifndef av_sat_dadd32 -# define av_sat_dadd32 av_sat_dadd32_c -#endif -#ifndef av_sat_sub32 -# define av_sat_sub32 av_sat_sub32_c -#endif -#ifndef av_sat_dsub32 -# define av_sat_dsub32 av_sat_dsub32_c -#endif -#ifndef av_sat_add64 -# define av_sat_add64 av_sat_add64_c -#endif -#ifndef av_sat_sub64 -# define av_sat_sub64 av_sat_sub64_c -#endif -#ifndef av_clipf -# define av_clipf av_clipf_c -#endif -#ifndef av_clipd -# define av_clipd av_clipd_c -#endif -#ifndef av_popcount -# define av_popcount av_popcount_c -#endif -#ifndef av_popcount64 -# define av_popcount64 av_popcount64_c -#endif -#ifndef av_parity -# define av_parity av_parity_c -#endif - -#ifndef av_log2 -av_const int av_log2(unsigned v); -#endif - -#ifndef av_log2_16bit -av_const int av_log2_16bit(unsigned v); -#endif - -/** - * Clip a signed integer value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const int av_clip_c(int a, int amin, int amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a signed 64bit integer value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a signed integer value into the 0-255 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const uint8_t av_clip_uint8_c(int a) -{ - if (a&(~0xFF)) return (~a)>>31; - else return a; -} - -/** - * Clip a signed integer value into the -128,127 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int8_t av_clip_int8_c(int a) -{ - if ((a+0x80U) & ~0xFF) return (a>>31) ^ 0x7F; - else return a; -} - -/** - * Clip a signed integer value into the 0-65535 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const uint16_t av_clip_uint16_c(int a) -{ - if (a&(~0xFFFF)) return (~a)>>31; - else return a; -} - -/** - * Clip a signed integer value into the -32768,32767 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int16_t av_clip_int16_c(int a) -{ - if ((a+0x8000U) & ~0xFFFF) return (a>>31) ^ 0x7FFF; - else return a; -} - -/** - * Clip a signed 64-bit integer value into the -2147483648,2147483647 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a) -{ - if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF); - else return (int32_t)a; -} - -/** - * Clip a signed integer into the -(2^p),(2^p-1) range. - * @param a value to clip - * @param p bit position to clip at - * @return clipped value - */ -static av_always_inline av_const int av_clip_intp2_c(int a, int p) -{ - if (((unsigned)a + (1 << p)) & ~((2 << p) - 1)) - return (a >> 31) ^ ((1 << p) - 1); - else - return a; -} - -/** - * Clip a signed integer to an unsigned power of two range. - * @param a value to clip - * @param p bit position to clip at - * @return clipped value - */ -static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p) -{ - if (a & ~((1<> 31 & ((1<= 0) - return INT64_MAX ^ (b >> 63); - return s; -#endif -} - -/** - * Subtract two signed 64-bit values with saturation. - * - * @param a one value - * @param b another value - * @return difference with signed saturation - */ -static av_always_inline int64_t av_sat_sub64_c(int64_t a, int64_t b) { -#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_sub_overflow) - int64_t tmp; - return !__builtin_sub_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN); -#else - if (b <= 0 && a >= INT64_MAX + b) - return INT64_MAX; - if (b >= 0 && a <= INT64_MIN + b) - return INT64_MIN; - return a - b; -#endif -} - -/** - * Clip a float value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const float av_clipf_c(float a, float amin, float amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a double value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const double av_clipd_c(double a, double amin, double amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** Compute ceil(log2(x)). - * @param x value used to compute ceil(log2(x)) - * @return computed ceiling of log2(x) - */ -static av_always_inline av_const int av_ceil_log2_c(int x) -{ - return av_log2((x - 1U) << 1); -} - -/** - * Count number of bits set to one in x - * @param x value to count bits of - * @return the number of bits set to one in x - */ -static av_always_inline av_const int av_popcount_c(uint32_t x) -{ - x -= (x >> 1) & 0x55555555; - x = (x & 0x33333333) + ((x >> 2) & 0x33333333); - x = (x + (x >> 4)) & 0x0F0F0F0F; - x += x >> 8; - return (x + (x >> 16)) & 0x3F; -} - -/** - * Count number of bits set to one in x - * @param x value to count bits of - * @return the number of bits set to one in x - */ -static av_always_inline av_const int av_popcount64_c(uint64_t x) -{ - return av_popcount((uint32_t)x) + av_popcount((uint32_t)(x >> 32)); -} - -static av_always_inline av_const int av_parity_c(uint32_t v) -{ - return av_popcount(v) & 1; -} - -#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) -#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) - -/** - * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form. - * - * @param val Output value, must be an lvalue of type uint32_t. - * @param GET_BYTE Expression reading one byte from the input. - * Evaluated up to 7 times (4 for the currently - * assigned Unicode range). With a memory buffer - * input, this could be *ptr++, or if you want to make sure - * that *ptr stops at the end of a NULL terminated string then - * *ptr ? *ptr++ : 0 - * @param ERROR Expression to be evaluated on invalid input, - * typically a goto statement. - * - * @warning ERROR should not contain a loop control statement which - * could interact with the internal while loop, and should force an - * exit from the macro code (e.g. through a goto or a return) in order - * to prevent undefined results. - */ -#define GET_UTF8(val, GET_BYTE, ERROR)\ - val= (GET_BYTE);\ - {\ - uint32_t top = (val & 128) >> 1;\ - if ((val & 0xc0) == 0x80 || val >= 0xFE)\ - {ERROR}\ - while (val & top) {\ - unsigned int tmp = (GET_BYTE) - 128;\ - if(tmp>>6)\ - {ERROR}\ - val= (val<<6) + tmp;\ - top <<= 5;\ - }\ - val &= (top << 1) - 1;\ - } - -/** - * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form. - * - * @param val Output value, must be an lvalue of type uint32_t. - * @param GET_16BIT Expression returning two bytes of UTF-16 data converted - * to native byte order. Evaluated one or two times. - * @param ERROR Expression to be evaluated on invalid input, - * typically a goto statement. - */ -#define GET_UTF16(val, GET_16BIT, ERROR)\ - val = (GET_16BIT);\ - {\ - unsigned int hi = val - 0xD800;\ - if (hi < 0x800) {\ - val = (GET_16BIT) - 0xDC00;\ - if (val > 0x3FFU || hi > 0x3FFU)\ - {ERROR}\ - val += (hi<<10) + 0x10000;\ - }\ - }\ - -/** - * @def PUT_UTF8(val, tmp, PUT_BYTE) - * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long). - * @param val is an input-only argument and should be of type uint32_t. It holds - * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If - * val is given as a function it is executed only once. - * @param tmp is a temporary variable and should be of type uint8_t. It - * represents an intermediate value during conversion that is to be - * output by PUT_BYTE. - * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination. - * It could be a function or a statement, and uses tmp as the input byte. - * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be - * executed up to 4 times for values in the valid UTF-8 range and up to - * 7 times in the general case, depending on the length of the converted - * Unicode character. - */ -#define PUT_UTF8(val, tmp, PUT_BYTE)\ - {\ - int bytes, shift;\ - uint32_t in = val;\ - if (in < 0x80) {\ - tmp = in;\ - PUT_BYTE\ - } else {\ - bytes = (av_log2(in) + 4) / 5;\ - shift = (bytes - 1) * 6;\ - tmp = (256 - (256 >> bytes)) | (in >> shift);\ - PUT_BYTE\ - while (shift >= 6) {\ - shift -= 6;\ - tmp = 0x80 | ((in >> shift) & 0x3f);\ - PUT_BYTE\ - }\ - }\ - } - -/** - * @def PUT_UTF16(val, tmp, PUT_16BIT) - * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes). - * @param val is an input-only argument and should be of type uint32_t. It holds - * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If - * val is given as a function it is executed only once. - * @param tmp is a temporary variable and should be of type uint16_t. It - * represents an intermediate value during conversion that is to be - * output by PUT_16BIT. - * @param PUT_16BIT writes the converted UTF-16 data to any proper destination - * in desired endianness. It could be a function or a statement, and uses tmp - * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;" - * PUT_BYTE will be executed 1 or 2 times depending on input character. - */ -#define PUT_UTF16(val, tmp, PUT_16BIT)\ - {\ - uint32_t in = val;\ - if (in < 0x10000) {\ - tmp = in;\ - PUT_16BIT\ - } else {\ - tmp = 0xD800 | ((in - 0x10000) >> 10);\ - PUT_16BIT\ - tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\ - PUT_16BIT\ - }\ - }\ - - - -#include "mem.h" - -#ifdef HAVE_AV_CONFIG_H -# include "internal.h" -#endif /* HAVE_AV_CONFIG_H */ - -#endif /* AVUTIL_COMMON_H */ diff --git a/prebuilts/aarch64/include/libavutil/cpu.h b/prebuilts/aarch64/include/libavutil/cpu.h deleted file mode 100644 index 83099dd..0000000 --- a/prebuilts/aarch64/include/libavutil/cpu.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 2000, 2001, 2002 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CPU_H -#define AVUTIL_CPU_H - -#include - -#include "attributes.h" - -#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ - - /* lower 16 bits - CPU features */ -#define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX -#define AV_CPU_FLAG_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext -#define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext -#define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW -#define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions -#define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions -#define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster - ///< than regular MMX/SSE (e.g. Core1) -#define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt -#define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions -#define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster - ///< than regular MMX/SSE (e.g. Core1) -#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions -#define AV_CPU_FLAG_SSSE3SLOW 0x4000000 ///< SSSE3 supported, but usually not faster -#define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower -#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions -#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions -#define AV_CPU_FLAG_AESNI 0x80000 ///< Advanced Encryption Standard functions -#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used -#define AV_CPU_FLAG_AVXSLOW 0x8000000 ///< AVX supported, but slow when using YMM registers (e.g. Bulldozer) -#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions -#define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions -#define AV_CPU_FLAG_CMOV 0x1000 ///< supports cmov instruction -#define AV_CPU_FLAG_AVX2 0x8000 ///< AVX2 functions: requires OS support even if YMM registers aren't used -#define AV_CPU_FLAG_FMA3 0x10000 ///< Haswell FMA3 functions -#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1 -#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2 -#define AV_CPU_FLAG_AVX512 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used - -#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard -#define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06 -#define AV_CPU_FLAG_POWER8 0x0004 ///< ISA 2.07 - -#define AV_CPU_FLAG_ARMV5TE (1 << 0) -#define AV_CPU_FLAG_ARMV6 (1 << 1) -#define AV_CPU_FLAG_ARMV6T2 (1 << 2) -#define AV_CPU_FLAG_VFP (1 << 3) -#define AV_CPU_FLAG_VFPV3 (1 << 4) -#define AV_CPU_FLAG_NEON (1 << 5) -#define AV_CPU_FLAG_ARMV8 (1 << 6) -#define AV_CPU_FLAG_VFP_VM (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations -#define AV_CPU_FLAG_SETEND (1 <<16) - -#define AV_CPU_FLAG_MMI (1 << 0) -#define AV_CPU_FLAG_MSA (1 << 1) - -/** - * Return the flags which specify extensions supported by the CPU. - * The returned value is affected by av_force_cpu_flags() if that was used - * before. So av_get_cpu_flags() can easily be used in an application to - * detect the enabled cpu flags. - */ -int av_get_cpu_flags(void); - -/** - * Disables cpu detection and forces the specified flags. - * -1 is a special case that disables forcing of specific flags. - */ -void av_force_cpu_flags(int flags); - -/** - * Set a mask on flags returned by av_get_cpu_flags(). - * This function is mainly useful for testing. - * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible - */ -attribute_deprecated void av_set_cpu_flags_mask(int mask); - -/** - * Parse CPU flags from a string. - * - * The returned flags contain the specified flags as well as related unspecified flags. - * - * This function exists only for compatibility with libav. - * Please use av_parse_cpu_caps() when possible. - * @return a combination of AV_CPU_* flags, negative on error. - */ -attribute_deprecated -int av_parse_cpu_flags(const char *s); - -/** - * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. - * - * @return negative on error. - */ -int av_parse_cpu_caps(unsigned *flags, const char *s); - -/** - * @return the number of logical CPU cores present. - */ -int av_cpu_count(void); - -/** - * Get the maximum data alignment that may be required by FFmpeg. - * - * Note that this is affected by the build configuration and the CPU flags mask, - * so e.g. if the CPU supports AVX, but libavutil has been built with - * --disable-avx or the AV_CPU_FLAG_AVX flag has been disabled through - * av_set_cpu_flags_mask(), then this function will behave as if AVX is not - * present. - */ -size_t av_cpu_max_align(void); - -#endif /* AVUTIL_CPU_H */ diff --git a/prebuilts/aarch64/include/libavutil/crc.h b/prebuilts/aarch64/include/libavutil/crc.h deleted file mode 100644 index 47e22b4..0000000 --- a/prebuilts/aarch64/include/libavutil/crc.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_crc32 - * Public header for CRC hash function implementation. - */ - -#ifndef AVUTIL_CRC_H -#define AVUTIL_CRC_H - -#include -#include -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_crc32 CRC - * @ingroup lavu_hash - * CRC (Cyclic Redundancy Check) hash function implementation. - * - * This module supports numerous CRC polynomials, in addition to the most - * widely used CRC-32-IEEE. See @ref AVCRCId for a list of available - * polynomials. - * - * @{ - */ - -typedef uint32_t AVCRC; - -typedef enum { - AV_CRC_8_ATM, - AV_CRC_16_ANSI, - AV_CRC_16_CCITT, - AV_CRC_32_IEEE, - AV_CRC_32_IEEE_LE, /*< reversed bitorder version of AV_CRC_32_IEEE */ - AV_CRC_16_ANSI_LE, /*< reversed bitorder version of AV_CRC_16_ANSI */ - AV_CRC_24_IEEE, - AV_CRC_8_EBU, - AV_CRC_MAX, /*< Not part of public API! Do not use outside libavutil. */ -}AVCRCId; - -/** - * Initialize a CRC table. - * @param ctx must be an array of size sizeof(AVCRC)*257 or sizeof(AVCRC)*1024 - * @param le If 1, the lowest bit represents the coefficient for the highest - * exponent of the corresponding polynomial (both for poly and - * actual CRC). - * If 0, you must swap the CRC parameter and the result of av_crc - * if you need the standard representation (can be simplified in - * most cases to e.g. bswap16): - * av_bswap32(crc << (32-bits)) - * @param bits number of bits for the CRC - * @param poly generator polynomial without the x**bits coefficient, in the - * representation as specified by le - * @param ctx_size size of ctx in bytes - * @return <0 on failure - */ -int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size); - -/** - * Get an initialized standard CRC table. - * @param crc_id ID of a standard CRC - * @return a pointer to the CRC table or NULL on failure - */ -const AVCRC *av_crc_get_table(AVCRCId crc_id); - -/** - * Calculate the CRC of a block. - * @param crc CRC of previous blocks if any or initial value for CRC - * @return CRC updated with the data from the given block - * - * @see av_crc_init() "le" parameter - */ -uint32_t av_crc(const AVCRC *ctx, uint32_t crc, - const uint8_t *buffer, size_t length) av_pure; - -/** - * @} - */ - -#endif /* AVUTIL_CRC_H */ diff --git a/prebuilts/aarch64/include/libavutil/des.h b/prebuilts/aarch64/include/libavutil/des.h deleted file mode 100644 index 4cf11f5..0000000 --- a/prebuilts/aarch64/include/libavutil/des.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * DES encryption/decryption - * Copyright (c) 2007 Reimar Doeffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_DES_H -#define AVUTIL_DES_H - -#include - -/** - * @defgroup lavu_des DES - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVDES { - uint64_t round_keys[3][16]; - int triple_des; -} AVDES; - -/** - * Allocate an AVDES context. - */ -AVDES *av_des_alloc(void); - -/** - * @brief Initializes an AVDES context. - * - * @param key_bits must be 64 or 192 - * @param decrypt 0 for encryption/CBC-MAC, 1 for decryption - * @return zero on success, negative value otherwise - */ -int av_des_init(struct AVDES *d, const uint8_t *key, int key_bits, int decrypt); - -/** - * @brief Encrypts / decrypts using the DES algorithm. - * - * @param count number of 8 byte blocks - * @param dst destination array, can be equal to src, must be 8-byte aligned - * @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL - * @param iv initialization vector for CBC mode, if NULL then ECB will be used, - * must be 8-byte aligned - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_des_crypt(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @brief Calculates CBC-MAC using the DES algorithm. - * - * @param count number of 8 byte blocks - * @param dst destination array, can be equal to src, must be 8-byte aligned - * @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL - */ -void av_des_mac(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count); - -/** - * @} - */ - -#endif /* AVUTIL_DES_H */ diff --git a/prebuilts/aarch64/include/libavutil/dict.h b/prebuilts/aarch64/include/libavutil/dict.h deleted file mode 100644 index 118f1f0..0000000 --- a/prebuilts/aarch64/include/libavutil/dict.h +++ /dev/null @@ -1,200 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Public dictionary API. - * @deprecated - * AVDictionary is provided for compatibility with libav. It is both in - * implementation as well as API inefficient. It does not scale and is - * extremely slow with large dictionaries. - * It is recommended that new code uses our tree container from tree.c/h - * where applicable, which uses AVL trees to achieve O(log n) performance. - */ - -#ifndef AVUTIL_DICT_H -#define AVUTIL_DICT_H - -#include - -#include "version.h" - -/** - * @addtogroup lavu_dict AVDictionary - * @ingroup lavu_data - * - * @brief Simple key:value store - * - * @{ - * Dictionaries are used for storing key:value pairs. To create - * an AVDictionary, simply pass an address of a NULL pointer to - * av_dict_set(). NULL can be used as an empty dictionary wherever - * a pointer to an AVDictionary is required. - * Use av_dict_get() to retrieve an entry or iterate over all - * entries and finally av_dict_free() to free the dictionary - * and all its contents. - * - @code - AVDictionary *d = NULL; // "create" an empty dictionary - AVDictionaryEntry *t = NULL; - - av_dict_set(&d, "foo", "bar", 0); // add an entry - - char *k = av_strdup("key"); // if your strings are already allocated, - char *v = av_strdup("value"); // you can avoid copying them like this - av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); - - while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) { - <....> // iterate over all entries in d - } - av_dict_free(&d); - @endcode - */ - -#define AV_DICT_MATCH_CASE 1 /**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */ -#define AV_DICT_IGNORE_SUFFIX 2 /**< Return first entry in a dictionary whose first part corresponds to the search key, - ignoring the suffix of the found key string. Only relevant in av_dict_get(). */ -#define AV_DICT_DONT_STRDUP_KEY 4 /**< Take ownership of a key that's been - allocated with av_malloc() or another memory allocation function. */ -#define AV_DICT_DONT_STRDUP_VAL 8 /**< Take ownership of a value that's been - allocated with av_malloc() or another memory allocation function. */ -#define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries. -#define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no - delimiter is added, the strings are simply concatenated. */ -#define AV_DICT_MULTIKEY 64 /**< Allow to store several equal keys in the dictionary */ - -typedef struct AVDictionaryEntry { - char *key; - char *value; -} AVDictionaryEntry; - -typedef struct AVDictionary AVDictionary; - -/** - * Get a dictionary entry with matching key. - * - * The returned entry key or value must not be changed, or it will - * cause undefined behavior. - * - * To iterate through all the dictionary entries, you can set the matching key - * to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag. - * - * @param prev Set to the previous matching element to find the next. - * If set to NULL the first matching element is returned. - * @param key matching key - * @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved - * @return found entry or NULL in case no matching entry was found in the dictionary - */ -AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, - const AVDictionaryEntry *prev, int flags); - -/** - * Get number of entries in dictionary. - * - * @param m dictionary - * @return number of entries in dictionary - */ -int av_dict_count(const AVDictionary *m); - -/** - * Set the given entry in *pm, overwriting an existing entry. - * - * Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set, - * these arguments will be freed on error. - * - * Warning: Adding a new entry to a dictionary invalidates all existing entries - * previously returned with av_dict_get. - * - * @param pm pointer to a pointer to a dictionary struct. If *pm is NULL - * a dictionary struct is allocated and put in *pm. - * @param key entry key to add to *pm (will either be av_strduped or added as a new key depending on flags) - * @param value entry value to add to *pm (will be av_strduped or added as a new key depending on flags). - * Passing a NULL value will cause an existing entry to be deleted. - * @return >= 0 on success otherwise an error code <0 - */ -int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags); - -/** - * Convenience wrapper for av_dict_set that converts the value to a string - * and stores it. - * - * Note: If AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. - */ -int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags); - -/** - * Parse the key/value pairs list and add the parsed entries to a dictionary. - * - * In case of failure, all the successfully set entries are stored in - * *pm. You may need to manually free the created dictionary. - * - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other - * @param flags flags to use when adding to dictionary. - * AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL - * are ignored since the key/value tokens will always - * be duplicated. - * @return 0 on success, negative AVERROR code on failure - */ -int av_dict_parse_string(AVDictionary **pm, const char *str, - const char *key_val_sep, const char *pairs_sep, - int flags); - -/** - * Copy entries from one AVDictionary struct into another. - * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, - * this function will allocate a struct for you and put it in *dst - * @param src pointer to source AVDictionary struct - * @param flags flags to use when setting entries in *dst - * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag - * @return 0 on success, negative AVERROR code on failure. If dst was allocated - * by this function, callers should free the associated memory. - */ -int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags); - -/** - * Free all the memory allocated for an AVDictionary struct - * and all keys and values. - */ -void av_dict_free(AVDictionary **m); - -/** - * Get dictionary entries as a string. - * - * Create a string containing dictionary's entries. - * Such string may be passed back to av_dict_parse_string(). - * @note String is escaped with backslashes ('\'). - * - * @param[in] m dictionary - * @param[out] buffer Pointer to buffer that will be allocated with string containg entries. - * Buffer must be freed by the caller when is no longer needed. - * @param[in] key_val_sep character used to separate key from value - * @param[in] pairs_sep character used to separate two pairs from each other - * @return >= 0 on success, negative on error - * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. - */ -int av_dict_get_string(const AVDictionary *m, char **buffer, - const char key_val_sep, const char pairs_sep); - -/** - * @} - */ - -#endif /* AVUTIL_DICT_H */ diff --git a/prebuilts/aarch64/include/libavutil/display.h b/prebuilts/aarch64/include/libavutil/display.h deleted file mode 100644 index 515adad..0000000 --- a/prebuilts/aarch64/include/libavutil/display.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2014 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Display matrix - */ - -#ifndef AVUTIL_DISPLAY_H -#define AVUTIL_DISPLAY_H - -#include -#include "common.h" - -/** - * @addtogroup lavu_video - * @{ - * - * @defgroup lavu_video_display Display transformation matrix functions - * @{ - */ - -/** - * @addtogroup lavu_video_display - * The display transformation matrix specifies an affine transformation that - * should be applied to video frames for correct presentation. It is compatible - * with the matrices stored in the ISO/IEC 14496-12 container format. - * - * The data is a 3x3 matrix represented as a 9-element array: - * - * @code{.unparsed} - * | a b u | - * (a, b, u, c, d, v, x, y, w) -> | c d v | - * | x y w | - * @endcode - * - * All numbers are stored in native endianness, as 16.16 fixed-point values, - * except for u, v and w, which are stored as 2.30 fixed-point values. - * - * The transformation maps a point (p, q) in the source (pre-transformation) - * frame to the point (p', q') in the destination (post-transformation) frame as - * follows: - * - * @code{.unparsed} - * | a b u | - * (p, q, 1) . | c d v | = z * (p', q', 1) - * | x y w | - * @endcode - * - * The transformation can also be more explicitly written in components as - * follows: - * - * @code{.unparsed} - * p' = (a * p + c * q + x) / z; - * q' = (b * p + d * q + y) / z; - * z = u * p + v * q + w - * @endcode - */ - -/** - * Extract the rotation component of the transformation matrix. - * - * @param matrix the transformation matrix - * @return the angle (in degrees) by which the transformation rotates the frame - * counterclockwise. The angle will be in range [-180.0, 180.0], - * or NaN if the matrix is singular. - * - * @note floating point numbers are inherently inexact, so callers are - * recommended to round the return value to nearest integer before use. - */ -double av_display_rotation_get(const int32_t matrix[9]); - -/** - * Initialize a transformation matrix describing a pure counterclockwise - * rotation by the specified angle (in degrees). - * - * @param matrix an allocated transformation matrix (will be fully overwritten - * by this function) - * @param angle rotation angle in degrees. - */ -void av_display_rotation_set(int32_t matrix[9], double angle); - -/** - * Flip the input matrix horizontally and/or vertically. - * - * @param matrix an allocated transformation matrix - * @param hflip whether the matrix should be flipped horizontally - * @param vflip whether the matrix should be flipped vertically - */ -void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_DISPLAY_H */ diff --git a/prebuilts/aarch64/include/libavutil/dovi_meta.h b/prebuilts/aarch64/include/libavutil/dovi_meta.h deleted file mode 100644 index 299911d..0000000 --- a/prebuilts/aarch64/include/libavutil/dovi_meta.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2020 Vacing Fang - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * DOVI configuration - */ - - -#ifndef AVUTIL_DOVI_META_H -#define AVUTIL_DOVI_META_H - -#include -#include - -/* - * DOVI configuration - * ref: dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2 - dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2 - * @code - * uint8_t dv_version_major, the major version number that the stream complies with - * uint8_t dv_version_minor, the minor version number that the stream complies with - * uint8_t dv_profile, the Dolby Vision profile - * uint8_t dv_level, the Dolby Vision level - * uint8_t rpu_present_flag - * uint8_t el_present_flag - * uint8_t bl_present_flag - * uint8_t dv_bl_signal_compatibility_id - * @endcode - * - * @note The struct must be allocated with av_dovi_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVDOVIDecoderConfigurationRecord { - uint8_t dv_version_major; - uint8_t dv_version_minor; - uint8_t dv_profile; - uint8_t dv_level; - uint8_t rpu_present_flag; - uint8_t el_present_flag; - uint8_t bl_present_flag; - uint8_t dv_bl_signal_compatibility_id; -} AVDOVIDecoderConfigurationRecord; - -/** - * Allocate a AVDOVIDecoderConfigurationRecord structure and initialize its - * fields to default values. - * - * @return the newly allocated struct or NULL on failure - */ -AVDOVIDecoderConfigurationRecord *av_dovi_alloc(size_t *size); - -#endif /* AVUTIL_DOVI_META_H */ diff --git a/prebuilts/aarch64/include/libavutil/downmix_info.h b/prebuilts/aarch64/include/libavutil/downmix_info.h deleted file mode 100644 index 221cf5b..0000000 --- a/prebuilts/aarch64/include/libavutil/downmix_info.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2014 Tim Walker - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_DOWNMIX_INFO_H -#define AVUTIL_DOWNMIX_INFO_H - -#include "frame.h" - -/** - * @file - * audio downmix medatata - */ - -/** - * @addtogroup lavu_audio - * @{ - */ - -/** - * @defgroup downmix_info Audio downmix metadata - * @{ - */ - -/** - * Possible downmix types. - */ -enum AVDownmixType { - AV_DOWNMIX_TYPE_UNKNOWN, /**< Not indicated. */ - AV_DOWNMIX_TYPE_LORO, /**< Lo/Ro 2-channel downmix (Stereo). */ - AV_DOWNMIX_TYPE_LTRT, /**< Lt/Rt 2-channel downmix, Dolby Surround compatible. */ - AV_DOWNMIX_TYPE_DPLII, /**< Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible. */ - AV_DOWNMIX_TYPE_NB /**< Number of downmix types. Not part of ABI. */ -}; - -/** - * This structure describes optional metadata relevant to a downmix procedure. - * - * All fields are set by the decoder to the value indicated in the audio - * bitstream (if present), or to a "sane" default otherwise. - */ -typedef struct AVDownmixInfo { - /** - * Type of downmix preferred by the mastering engineer. - */ - enum AVDownmixType preferred_downmix_type; - - /** - * Absolute scale factor representing the nominal level of the center - * channel during a regular downmix. - */ - double center_mix_level; - - /** - * Absolute scale factor representing the nominal level of the center - * channel during an Lt/Rt compatible downmix. - */ - double center_mix_level_ltrt; - - /** - * Absolute scale factor representing the nominal level of the surround - * channels during a regular downmix. - */ - double surround_mix_level; - - /** - * Absolute scale factor representing the nominal level of the surround - * channels during an Lt/Rt compatible downmix. - */ - double surround_mix_level_ltrt; - - /** - * Absolute scale factor representing the level at which the LFE data is - * mixed into L/R channels during downmixing. - */ - double lfe_mix_level; -} AVDownmixInfo; - -/** - * Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing. - * - * If the side data is absent, it is created and added to the frame. - * - * @param frame the frame for which the side data is to be obtained or created - * - * @return the AVDownmixInfo structure to be edited by the caller, or NULL if - * the structure cannot be allocated. - */ -AVDownmixInfo *av_downmix_info_update_side_data(AVFrame *frame); - -/** - * @} - */ - -/** - * @} - */ - -#endif /* AVUTIL_DOWNMIX_INFO_H */ diff --git a/prebuilts/aarch64/include/libavutil/encryption_info.h b/prebuilts/aarch64/include/libavutil/encryption_info.h deleted file mode 100644 index 8fe7ebf..0000000 --- a/prebuilts/aarch64/include/libavutil/encryption_info.h +++ /dev/null @@ -1,205 +0,0 @@ -/** - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_ENCRYPTION_INFO_H -#define AVUTIL_ENCRYPTION_INFO_H - -#include -#include - -typedef struct AVSubsampleEncryptionInfo { - /** The number of bytes that are clear. */ - unsigned int bytes_of_clear_data; - - /** - * The number of bytes that are protected. If using pattern encryption, - * the pattern applies to only the protected bytes; if not using pattern - * encryption, all these bytes are encrypted. - */ - unsigned int bytes_of_protected_data; -} AVSubsampleEncryptionInfo; - -/** - * This describes encryption info for a packet. This contains frame-specific - * info for how to decrypt the packet before passing it to the decoder. - * - * The size of this struct is not part of the public ABI. - */ -typedef struct AVEncryptionInfo { - /** The fourcc encryption scheme, in big-endian byte order. */ - uint32_t scheme; - - /** - * Only used for pattern encryption. This is the number of 16-byte blocks - * that are encrypted. - */ - uint32_t crypt_byte_block; - - /** - * Only used for pattern encryption. This is the number of 16-byte blocks - * that are clear. - */ - uint32_t skip_byte_block; - - /** - * The ID of the key used to encrypt the packet. This should always be - * 16 bytes long, but may be changed in the future. - */ - uint8_t *key_id; - uint32_t key_id_size; - - /** - * The initialization vector. This may have been zero-filled to be the - * correct block size. This should always be 16 bytes long, but may be - * changed in the future. - */ - uint8_t *iv; - uint32_t iv_size; - - /** - * An array of subsample encryption info specifying how parts of the sample - * are encrypted. If there are no subsamples, then the whole sample is - * encrypted. - */ - AVSubsampleEncryptionInfo *subsamples; - uint32_t subsample_count; -} AVEncryptionInfo; - -/** - * This describes info used to initialize an encryption key system. - * - * The size of this struct is not part of the public ABI. - */ -typedef struct AVEncryptionInitInfo { - /** - * A unique identifier for the key system this is for, can be NULL if it - * is not known. This should always be 16 bytes, but may change in the - * future. - */ - uint8_t* system_id; - uint32_t system_id_size; - - /** - * An array of key IDs this initialization data is for. All IDs are the - * same length. Can be NULL if there are no known key IDs. - */ - uint8_t** key_ids; - /** The number of key IDs. */ - uint32_t num_key_ids; - /** - * The number of bytes in each key ID. This should always be 16, but may - * change in the future. - */ - uint32_t key_id_size; - - /** - * Key-system specific initialization data. This data is copied directly - * from the file and the format depends on the specific key system. This - * can be NULL if there is no initialization data; in that case, there - * will be at least one key ID. - */ - uint8_t* data; - uint32_t data_size; - - /** - * An optional pointer to the next initialization info in the list. - */ - struct AVEncryptionInitInfo *next; -} AVEncryptionInitInfo; - -/** - * Allocates an AVEncryptionInfo structure and sub-pointers to hold the given - * number of subsamples. This will allocate pointers for the key ID, IV, - * and subsample entries, set the size members, and zero-initialize the rest. - * - * @param subsample_count The number of subsamples. - * @param key_id_size The number of bytes in the key ID, should be 16. - * @param iv_size The number of bytes in the IV, should be 16. - * - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_alloc(uint32_t subsample_count, uint32_t key_id_size, uint32_t iv_size); - -/** - * Allocates an AVEncryptionInfo structure with a copy of the given data. - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_clone(const AVEncryptionInfo *info); - -/** - * Frees the given encryption info object. This MUST NOT be used to free the - * side-data data pointer, that should use normal side-data methods. - */ -void av_encryption_info_free(AVEncryptionInfo *info); - -/** - * Creates a copy of the AVEncryptionInfo that is contained in the given side - * data. The resulting object should be passed to av_encryption_info_free() - * when done. - * - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_get_side_data(const uint8_t *side_data, size_t side_data_size); - -/** - * Allocates and initializes side data that holds a copy of the given encryption - * info. The resulting pointer should be either freed using av_free or given - * to av_packet_add_side_data(). - * - * @return The new side-data pointer, or NULL. - */ -uint8_t *av_encryption_info_add_side_data( - const AVEncryptionInfo *info, size_t *side_data_size); - - -/** - * Allocates an AVEncryptionInitInfo structure and sub-pointers to hold the - * given sizes. This will allocate pointers and set all the fields. - * - * @return The new AVEncryptionInitInfo structure, or NULL on error. - */ -AVEncryptionInitInfo *av_encryption_init_info_alloc( - uint32_t system_id_size, uint32_t num_key_ids, uint32_t key_id_size, uint32_t data_size); - -/** - * Frees the given encryption init info object. This MUST NOT be used to free - * the side-data data pointer, that should use normal side-data methods. - */ -void av_encryption_init_info_free(AVEncryptionInitInfo* info); - -/** - * Creates a copy of the AVEncryptionInitInfo that is contained in the given - * side data. The resulting object should be passed to - * av_encryption_init_info_free() when done. - * - * @return The new AVEncryptionInitInfo structure, or NULL on error. - */ -AVEncryptionInitInfo *av_encryption_init_info_get_side_data( - const uint8_t* side_data, size_t side_data_size); - -/** - * Allocates and initializes side data that holds a copy of the given encryption - * init info. The resulting pointer should be either freed using av_free or - * given to av_packet_add_side_data(). - * - * @return The new side-data pointer, or NULL. - */ -uint8_t *av_encryption_init_info_add_side_data( - const AVEncryptionInitInfo *info, size_t *side_data_size); - -#endif /* AVUTIL_ENCRYPTION_INFO_H */ diff --git a/prebuilts/aarch64/include/libavutil/error.h b/prebuilts/aarch64/include/libavutil/error.h deleted file mode 100644 index 71df4da..0000000 --- a/prebuilts/aarch64/include/libavutil/error.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * error code definitions - */ - -#ifndef AVUTIL_ERROR_H -#define AVUTIL_ERROR_H - -#include -#include - -/** - * @addtogroup lavu_error - * - * @{ - */ - - -/* error handling */ -#if EDOM > 0 -#define AVERROR(e) (-(e)) ///< Returns a negative error code from a POSIX error code, to return from library functions. -#define AVUNERROR(e) (-(e)) ///< Returns a POSIX error code from a library function error return value. -#else -/* Some platforms have E* and errno already negated. */ -#define AVERROR(e) (e) -#define AVUNERROR(e) (e) -#endif - -#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d)) - -#define AVERROR_BSF_NOT_FOUND FFERRTAG(0xF8,'B','S','F') ///< Bitstream filter not found -#define AVERROR_BUG FFERRTAG( 'B','U','G','!') ///< Internal bug, also see AVERROR_BUG2 -#define AVERROR_BUFFER_TOO_SMALL FFERRTAG( 'B','U','F','S') ///< Buffer too small -#define AVERROR_DECODER_NOT_FOUND FFERRTAG(0xF8,'D','E','C') ///< Decoder not found -#define AVERROR_DEMUXER_NOT_FOUND FFERRTAG(0xF8,'D','E','M') ///< Demuxer not found -#define AVERROR_ENCODER_NOT_FOUND FFERRTAG(0xF8,'E','N','C') ///< Encoder not found -#define AVERROR_EOF FFERRTAG( 'E','O','F',' ') ///< End of file -#define AVERROR_EXIT FFERRTAG( 'E','X','I','T') ///< Immediate exit was requested; the called function should not be restarted -#define AVERROR_EXTERNAL FFERRTAG( 'E','X','T',' ') ///< Generic error in an external library -#define AVERROR_FILTER_NOT_FOUND FFERRTAG(0xF8,'F','I','L') ///< Filter not found -#define AVERROR_INVALIDDATA FFERRTAG( 'I','N','D','A') ///< Invalid data found when processing input -#define AVERROR_MUXER_NOT_FOUND FFERRTAG(0xF8,'M','U','X') ///< Muxer not found -#define AVERROR_OPTION_NOT_FOUND FFERRTAG(0xF8,'O','P','T') ///< Option not found -#define AVERROR_PATCHWELCOME FFERRTAG( 'P','A','W','E') ///< Not yet implemented in FFmpeg, patches welcome -#define AVERROR_PROTOCOL_NOT_FOUND FFERRTAG(0xF8,'P','R','O') ///< Protocol not found - -#define AVERROR_STREAM_NOT_FOUND FFERRTAG(0xF8,'S','T','R') ///< Stream not found -/** - * This is semantically identical to AVERROR_BUG - * it has been introduced in Libav after our AVERROR_BUG and with a modified value. - */ -#define AVERROR_BUG2 FFERRTAG( 'B','U','G',' ') -#define AVERROR_UNKNOWN FFERRTAG( 'U','N','K','N') ///< Unknown error, typically from an external library -#define AVERROR_EXPERIMENTAL (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it. -#define AVERROR_INPUT_CHANGED (-0x636e6701) ///< Input changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_OUTPUT_CHANGED) -#define AVERROR_OUTPUT_CHANGED (-0x636e6702) ///< Output changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_INPUT_CHANGED) -/* HTTP & RTSP errors */ -#define AVERROR_HTTP_BAD_REQUEST FFERRTAG(0xF8,'4','0','0') -#define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8,'4','0','1') -#define AVERROR_HTTP_FORBIDDEN FFERRTAG(0xF8,'4','0','3') -#define AVERROR_HTTP_NOT_FOUND FFERRTAG(0xF8,'4','0','4') -#define AVERROR_HTTP_OTHER_4XX FFERRTAG(0xF8,'4','X','X') -#define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8,'5','X','X') - -#define AV_ERROR_MAX_STRING_SIZE 64 - -/** - * Put a description of the AVERROR code errnum in errbuf. - * In case of failure the global variable errno is set to indicate the - * error. Even in case of failure av_strerror() will print a generic - * error message indicating the errnum provided to errbuf. - * - * @param errnum error code to describe - * @param errbuf buffer to which description is written - * @param errbuf_size the size in bytes of errbuf - * @return 0 on success, a negative value if a description for errnum - * cannot be found - */ -int av_strerror(int errnum, char *errbuf, size_t errbuf_size); - -/** - * Fill the provided buffer with a string containing an error string - * corresponding to the AVERROR code errnum. - * - * @param errbuf a buffer - * @param errbuf_size size in bytes of errbuf - * @param errnum error code to describe - * @return the buffer in input, filled with the error description - * @see av_strerror() - */ -static inline char *av_make_error_string(char *errbuf, size_t errbuf_size, int errnum) -{ - av_strerror(errnum, errbuf, errbuf_size); - return errbuf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_err2str(errnum) \ - av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum) - -/** - * @} - */ - -#endif /* AVUTIL_ERROR_H */ diff --git a/prebuilts/aarch64/include/libavutil/eval.h b/prebuilts/aarch64/include/libavutil/eval.h deleted file mode 100644 index 068c62c..0000000 --- a/prebuilts/aarch64/include/libavutil/eval.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2002 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * simple arithmetic expression evaluator - */ - -#ifndef AVUTIL_EVAL_H -#define AVUTIL_EVAL_H - -#include "avutil.h" - -typedef struct AVExpr AVExpr; - -/** - * Parse and evaluate an expression. - * Note, this is significantly slower than av_expr_eval(). - * - * @param res a pointer to a double where is put the result value of - * the expression, or NAN in case of error - * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" - * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} - * @param const_values a zero terminated array of values for the identifiers from const_names - * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers - * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 - * @param log_ctx parent logging context - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_expr_parse_and_eval(double *res, const char *s, - const char * const *const_names, const double *const_values, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - void *opaque, int log_offset, void *log_ctx); - -/** - * Parse an expression. - * - * @param expr a pointer where is put an AVExpr containing the parsed - * value in case of successful parsing, or NULL otherwise. - * The pointed to AVExpr must be freed with av_expr_free() by the user - * when it is not needed anymore. - * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" - * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} - * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers - * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments - * @param log_ctx parent logging context - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_expr_parse(AVExpr **expr, const char *s, - const char * const *const_names, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - int log_offset, void *log_ctx); - -/** - * Evaluate a previously parsed expression. - * - * @param const_values a zero terminated array of values for the identifiers from av_expr_parse() const_names - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 - * @return the value of the expression - */ -double av_expr_eval(AVExpr *e, const double *const_values, void *opaque); - -/** - * Track the presence of variables and their number of occurrences in a parsed expression - * - * @param counter a zero-initialized array where the count of each variable will be stored - * @param size size of array - * @return 0 on success, a negative value indicates that no expression or array was passed - * or size was zero - */ -int av_expr_count_vars(AVExpr *e, unsigned *counter, int size); - -/** - * Track the presence of user provided functions and their number of occurrences - * in a parsed expression. - * - * @param counter a zero-initialized array where the count of each function will be stored - * if you passed 5 functions with 2 arguments to av_expr_parse() - * then for arg=2 this will use upto 5 entries. - * @param size size of array - * @param arg number of arguments the counted functions have - * @return 0 on success, a negative value indicates that no expression or array was passed - * or size was zero - */ -int av_expr_count_func(AVExpr *e, unsigned *counter, int size, int arg); - -/** - * Free a parsed expression previously created with av_expr_parse(). - */ -void av_expr_free(AVExpr *e); - -/** - * Parse the string in numstr and return its value as a double. If - * the string is empty, contains only whitespaces, or does not contain - * an initial substring that has the expected syntax for a - * floating-point number, no conversion is performed. In this case, - * returns a value of zero and the value returned in tail is the value - * of numstr. - * - * @param numstr a string representing a number, may contain one of - * the International System number postfixes, for example 'K', 'M', - * 'G'. If 'i' is appended after the postfix, powers of 2 are used - * instead of powers of 10. The 'B' postfix multiplies the value by - * 8, and can be appended after another postfix or used alone. This - * allows using for example 'KB', 'MiB', 'G' and 'B' as postfix. - * @param tail if non-NULL puts here the pointer to the char next - * after the last parsed character - */ -double av_strtod(const char *numstr, char **tail); - -#endif /* AVUTIL_EVAL_H */ diff --git a/prebuilts/aarch64/include/libavutil/ffversion.h b/prebuilts/aarch64/include/libavutil/ffversion.h deleted file mode 100644 index 7c7cb88..0000000 --- a/prebuilts/aarch64/include/libavutil/ffversion.h +++ /dev/null @@ -1,5 +0,0 @@ -/* Automatically generated by version.sh, do not manually edit! */ -#ifndef AVUTIL_FFVERSION_H -#define AVUTIL_FFVERSION_H -#define FFMPEG_VERSION "n4.4.2" -#endif /* AVUTIL_FFVERSION_H */ diff --git a/prebuilts/aarch64/include/libavutil/fifo.h b/prebuilts/aarch64/include/libavutil/fifo.h deleted file mode 100644 index dc7bc6f..0000000 --- a/prebuilts/aarch64/include/libavutil/fifo.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * a very simple circular buffer FIFO implementation - */ - -#ifndef AVUTIL_FIFO_H -#define AVUTIL_FIFO_H - -#include -#include "avutil.h" -#include "attributes.h" - -typedef struct AVFifoBuffer { - uint8_t *buffer; - uint8_t *rptr, *wptr, *end; - uint32_t rndx, wndx; -} AVFifoBuffer; - -/** - * Initialize an AVFifoBuffer. - * @param size of FIFO - * @return AVFifoBuffer or NULL in case of memory allocation failure - */ -AVFifoBuffer *av_fifo_alloc(unsigned int size); - -/** - * Initialize an AVFifoBuffer. - * @param nmemb number of elements - * @param size size of the single element - * @return AVFifoBuffer or NULL in case of memory allocation failure - */ -AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size); - -/** - * Free an AVFifoBuffer. - * @param f AVFifoBuffer to free - */ -void av_fifo_free(AVFifoBuffer *f); - -/** - * Free an AVFifoBuffer and reset pointer to NULL. - * @param f AVFifoBuffer to free - */ -void av_fifo_freep(AVFifoBuffer **f); - -/** - * Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied. - * @param f AVFifoBuffer to reset - */ -void av_fifo_reset(AVFifoBuffer *f); - -/** - * Return the amount of data in bytes in the AVFifoBuffer, that is the - * amount of data you can read from it. - * @param f AVFifoBuffer to read from - * @return size - */ -int av_fifo_size(const AVFifoBuffer *f); - -/** - * Return the amount of space in bytes in the AVFifoBuffer, that is the - * amount of data you can write into it. - * @param f AVFifoBuffer to write into - * @return size - */ -int av_fifo_space(const AVFifoBuffer *f); - -/** - * Feed data at specific position from an AVFifoBuffer to a user-supplied callback. - * Similar as av_fifo_gereric_read but without discarding data. - * @param f AVFifoBuffer to read from - * @param offset offset from current read position - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination - */ -int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_size, void (*func)(void*, void*, int)); - -/** - * Feed data from an AVFifoBuffer to a user-supplied callback. - * Similar as av_fifo_gereric_read but without discarding data. - * @param f AVFifoBuffer to read from - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination - */ -int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); - -/** - * Feed data from an AVFifoBuffer to a user-supplied callback. - * @param f AVFifoBuffer to read from - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination - */ -int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); - -/** - * Feed data from a user-supplied callback to an AVFifoBuffer. - * @param f AVFifoBuffer to write to - * @param src data source; non-const since it may be used as a - * modifiable context by the function defined in func - * @param size number of bytes to write - * @param func generic write function; the first parameter is src, - * the second is dest_buf, the third is dest_buf_size. - * func must return the number of bytes written to dest_buf, or <= 0 to - * indicate no more data available to write. - * If func is NULL, src is interpreted as a simple byte array for source data. - * @return the number of bytes written to the FIFO - */ -int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int)); - -/** - * Resize an AVFifoBuffer. - * In case of reallocation failure, the old FIFO is kept unchanged. - * - * @param f AVFifoBuffer to resize - * @param size new AVFifoBuffer size in bytes - * @return <0 for failure, >=0 otherwise - */ -int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); - -/** - * Enlarge an AVFifoBuffer. - * In case of reallocation failure, the old FIFO is kept unchanged. - * The new fifo size may be larger than the requested size. - * - * @param f AVFifoBuffer to resize - * @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size() - * @return <0 for failure, >=0 otherwise - */ -int av_fifo_grow(AVFifoBuffer *f, unsigned int additional_space); - -/** - * Read and discard the specified amount of data from an AVFifoBuffer. - * @param f AVFifoBuffer to read from - * @param size amount of data to read in bytes - */ -void av_fifo_drain(AVFifoBuffer *f, int size); - -/** - * Return a pointer to the data stored in a FIFO buffer at a certain offset. - * The FIFO buffer is not modified. - * - * @param f AVFifoBuffer to peek at, f must be non-NULL - * @param offs an offset in bytes, its absolute value must be less - * than the used buffer size or the returned pointer will - * point outside to the buffer data. - * The used buffer size can be checked with av_fifo_size(). - */ -static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs) -{ - uint8_t *ptr = f->rptr + offs; - if (ptr >= f->end) - ptr = f->buffer + (ptr - f->end); - else if (ptr < f->buffer) - ptr = f->end - (f->buffer - ptr); - return ptr; -} - -#endif /* AVUTIL_FIFO_H */ diff --git a/prebuilts/aarch64/include/libavutil/file.h b/prebuilts/aarch64/include/libavutil/file.h deleted file mode 100644 index 3ef4a60..0000000 --- a/prebuilts/aarch64/include/libavutil/file.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_FILE_H -#define AVUTIL_FILE_H - -#include - -#include "avutil.h" - -/** - * @file - * Misc file utilities. - */ - -/** - * Read the file with name filename, and put its content in a newly - * allocated buffer or map it with mmap() when available. - * In case of success set *bufptr to the read or mmapped buffer, and - * *size to the size in bytes of the buffer in *bufptr. - * Unlike mmap this function succeeds with zero sized files, in this - * case *bufptr will be set to NULL and *size will be set to 0. - * The returned buffer must be released with av_file_unmap(). - * - * @param log_offset loglevel offset used for logging - * @param log_ctx context used for logging - * @return a non negative number in case of success, a negative value - * corresponding to an AVERROR error code in case of failure - */ -av_warn_unused_result -int av_file_map(const char *filename, uint8_t **bufptr, size_t *size, - int log_offset, void *log_ctx); - -/** - * Unmap or free the buffer bufptr created by av_file_map(). - * - * @param size size in bytes of bufptr, must be the same as returned - * by av_file_map() - */ -void av_file_unmap(uint8_t *bufptr, size_t size); - -/** - * Wrapper to work around the lack of mkstemp() on mingw. - * Also, tries to create file in /tmp first, if possible. - * *prefix can be a character constant; *filename will be allocated internally. - * @return file descriptor of opened file (or negative value corresponding to an - * AVERROR code on error) - * and opened file name in **filename. - * @note On very old libcs it is necessary to set a secure umask before - * calling this, av_tempfile() can't call umask itself as it is used in - * libraries and could interfere with the calling application. - * @deprecated as fd numbers cannot be passed saftely between libs on some platforms - */ -int av_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx); - -#endif /* AVUTIL_FILE_H */ diff --git a/prebuilts/aarch64/include/libavutil/film_grain_params.h b/prebuilts/aarch64/include/libavutil/film_grain_params.h deleted file mode 100644 index 7629e3a..0000000 --- a/prebuilts/aarch64/include/libavutil/film_grain_params.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_FILM_GRAIN_PARAMS_H -#define AVUTIL_FILM_GRAIN_PARAMS_H - -#include "frame.h" - -enum AVFilmGrainParamsType { - AV_FILM_GRAIN_PARAMS_NONE = 0, - - /** - * The union is valid when interpreted as AVFilmGrainAOMParams (codec.aom) - */ - AV_FILM_GRAIN_PARAMS_AV1, -}; - -/** - * This structure describes how to handle film grain synthesis for AOM codecs. - * - * @note The struct must be allocated as part of AVFilmGrainParams using - * av_film_grain_params_alloc(). Its size is not a part of the public ABI. - */ -typedef struct AVFilmGrainAOMParams { - /** - * Number of points, and the scale and value for each point of the - * piecewise linear scaling function for the uma plane. - */ - int num_y_points; - uint8_t y_points[14][2 /* value, scaling */]; - - /** - * Signals whether to derive the chroma scaling function from the luma. - * Not equivalent to copying the luma values and scales. - */ - int chroma_scaling_from_luma; - - /** - * If chroma_scaling_from_luma is set to 0, signals the chroma scaling - * function parameters. - */ - int num_uv_points[2 /* cb, cr */]; - uint8_t uv_points[2 /* cb, cr */][10][2 /* value, scaling */]; - - /** - * Specifies the shift applied to the chroma components. For AV1, its within - * [8; 11] and determines the range and quantization of the film grain. - */ - int scaling_shift; - - /** - * Specifies the auto-regression lag. - */ - int ar_coeff_lag; - - /** - * Luma auto-regression coefficients. The number of coefficients is given by - * 2 * ar_coeff_lag * (ar_coeff_lag + 1). - */ - int8_t ar_coeffs_y[24]; - - /** - * Chroma auto-regression coefficients. The number of coefficients is given by - * 2 * ar_coeff_lag * (ar_coeff_lag + 1) + !!num_y_points. - */ - int8_t ar_coeffs_uv[2 /* cb, cr */][25]; - - /** - * Specifies the range of the auto-regressive coefficients. Values of 6, - * 7, 8 and so on represent a range of [-2, 2), [-1, 1), [-0.5, 0.5) and - * so on. For AV1 must be between 6 and 9. - */ - int ar_coeff_shift; - - /** - * Signals the down shift applied to the generated gaussian numbers during - * synthesis. - */ - int grain_scale_shift; - - /** - * Specifies the luma/chroma multipliers for the index to the component - * scaling function. - */ - int uv_mult[2 /* cb, cr */]; - int uv_mult_luma[2 /* cb, cr */]; - - /** - * Offset used for component scaling function. For AV1 its a 9-bit value - * with a range [-256, 255] - */ - int uv_offset[2 /* cb, cr */]; - - /** - * Signals whether to overlap film grain blocks. - */ - int overlap_flag; - - /** - * Signals to clip to limited color levels after film grain application. - */ - int limit_output_range; -} AVFilmGrainAOMParams; - -/** - * This structure describes how to handle film grain synthesis in video - * for specific codecs. Must be present on every frame where film grain is - * meant to be synthesised for correct presentation. - * - * @note The struct must be allocated with av_film_grain_params_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVFilmGrainParams { - /** - * Specifies the codec for which this structure is valid. - */ - enum AVFilmGrainParamsType type; - - /** - * Seed to use for the synthesis process, if the codec allows for it. - */ - uint64_t seed; - - /** - * Additional fields may be added both here and in any structure included. - * If a codec's film grain structure differs slightly over another - * codec's, fields within may change meaning depending on the type. - */ - union { - AVFilmGrainAOMParams aom; - } codec; -} AVFilmGrainParams; - -/** - * Allocate an AVFilmGrainParams structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * If size is not NULL it will be set to the number of bytes allocated. - * - * @return An AVFilmGrainParams filled with default values or NULL - * on failure. - */ -AVFilmGrainParams *av_film_grain_params_alloc(size_t *size); - -/** - * Allocate a complete AVFilmGrainParams and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVFilmGrainParams structure to be filled by caller. - */ -AVFilmGrainParams *av_film_grain_params_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_FILM_GRAIN_PARAMS_H */ diff --git a/prebuilts/aarch64/include/libavutil/frame.h b/prebuilts/aarch64/include/libavutil/frame.h deleted file mode 100644 index 7d1f8e2..0000000 --- a/prebuilts/aarch64/include/libavutil/frame.h +++ /dev/null @@ -1,997 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_frame - * reference-counted frame API - */ - -#ifndef AVUTIL_FRAME_H -#define AVUTIL_FRAME_H - -#include -#include - -#include "avutil.h" -#include "buffer.h" -#include "dict.h" -#include "rational.h" -#include "samplefmt.h" -#include "pixfmt.h" -#include "version.h" - - -/** - * @defgroup lavu_frame AVFrame - * @ingroup lavu_data - * - * @{ - * AVFrame is an abstraction for reference-counted raw multimedia data. - */ - -enum AVFrameSideDataType { - /** - * The data is the AVPanScan struct defined in libavcodec. - */ - AV_FRAME_DATA_PANSCAN, - /** - * ATSC A53 Part 4 Closed Captions. - * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data. - * The number of bytes of CC data is AVFrameSideData.size. - */ - AV_FRAME_DATA_A53_CC, - /** - * Stereoscopic 3d metadata. - * The data is the AVStereo3D struct defined in libavutil/stereo3d.h. - */ - AV_FRAME_DATA_STEREO3D, - /** - * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h. - */ - AV_FRAME_DATA_MATRIXENCODING, - /** - * Metadata relevant to a downmix procedure. - * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h. - */ - AV_FRAME_DATA_DOWNMIX_INFO, - /** - * ReplayGain information in the form of the AVReplayGain struct. - */ - AV_FRAME_DATA_REPLAYGAIN, - /** - * This side data contains a 3x3 transformation matrix describing an affine - * transformation that needs to be applied to the frame for correct - * presentation. - * - * See libavutil/display.h for a detailed description of the data. - */ - AV_FRAME_DATA_DISPLAYMATRIX, - /** - * Active Format Description data consisting of a single byte as specified - * in ETSI TS 101 154 using AVActiveFormatDescription enum. - */ - AV_FRAME_DATA_AFD, - /** - * Motion vectors exported by some codecs (on demand through the export_mvs - * flag set in the libavcodec AVCodecContext flags2 option). - * The data is the AVMotionVector struct defined in - * libavutil/motion_vector.h. - */ - AV_FRAME_DATA_MOTION_VECTORS, - /** - * Recommmends skipping the specified number of samples. This is exported - * only if the "skip_manual" AVOption is set in libavcodec. - * This has the same format as AV_PKT_DATA_SKIP_SAMPLES. - * @code - * u32le number of samples to skip from start of this packet - * u32le number of samples to skip from end of this packet - * u8 reason for start skip - * u8 reason for end skip (0=padding silence, 1=convergence) - * @endcode - */ - AV_FRAME_DATA_SKIP_SAMPLES, - /** - * This side data must be associated with an audio frame and corresponds to - * enum AVAudioServiceType defined in avcodec.h. - */ - AV_FRAME_DATA_AUDIO_SERVICE_TYPE, - /** - * Mastering display metadata associated with a video frame. The payload is - * an AVMasteringDisplayMetadata type and contains information about the - * mastering display color volume. - */ - AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, - /** - * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. - * This is set on the first frame of a GOP that has a temporal reference of 0. - */ - AV_FRAME_DATA_GOP_TIMECODE, - - /** - * The data represents the AVSphericalMapping structure defined in - * libavutil/spherical.h. - */ - AV_FRAME_DATA_SPHERICAL, - - /** - * Content light level (based on CTA-861.3). This payload contains data in - * the form of the AVContentLightMetadata struct. - */ - AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, - - /** - * The data contains an ICC profile as an opaque octet buffer following the - * format described by ISO 15076-1 with an optional name defined in the - * metadata key entry "name". - */ - AV_FRAME_DATA_ICC_PROFILE, - -#if FF_API_FRAME_QP - /** - * Implementation-specific description of the format of AV_FRAME_QP_TABLE_DATA. - * The contents of this side data are undocumented and internal; use - * av_frame_set_qp_table() and av_frame_get_qp_table() to access this in a - * meaningful way instead. - */ - AV_FRAME_DATA_QP_TABLE_PROPERTIES, - - /** - * Raw QP table data. Its format is described by - * AV_FRAME_DATA_QP_TABLE_PROPERTIES. Use av_frame_set_qp_table() and - * av_frame_get_qp_table() to access this instead. - */ - AV_FRAME_DATA_QP_TABLE_DATA, -#endif - - /** - * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t - * where the first uint32_t describes how many (1-3) of the other timecodes are used. - * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() - * function in libavutil/timecode.h. - */ - AV_FRAME_DATA_S12M_TIMECODE, - - /** - * HDR dynamic metadata associated with a video frame. The payload is - * an AVDynamicHDRPlus type and contains information for color - * volume transform - application 4 of SMPTE 2094-40:2016 standard. - */ - AV_FRAME_DATA_DYNAMIC_HDR_PLUS, - - /** - * Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of - * array element is implied by AVFrameSideData.size / AVRegionOfInterest.self_size. - */ - AV_FRAME_DATA_REGIONS_OF_INTEREST, - - /** - * Encoding parameters for a video frame, as described by AVVideoEncParams. - */ - AV_FRAME_DATA_VIDEO_ENC_PARAMS, - - /** - * User data unregistered metadata associated with a video frame. - * This is the H.26[45] UDU SEI message, and shouldn't be used for any other purpose - * The data is stored as uint8_t in AVFrameSideData.data which is 16 bytes of - * uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of user_data_payload_byte. - */ - AV_FRAME_DATA_SEI_UNREGISTERED, - - /** - * Film grain parameters for a frame, described by AVFilmGrainParams. - * Must be present for every frame which should have film grain applied. - */ - AV_FRAME_DATA_FILM_GRAIN_PARAMS, -}; - -enum AVActiveFormatDescription { - AV_AFD_SAME = 8, - AV_AFD_4_3 = 9, - AV_AFD_16_9 = 10, - AV_AFD_14_9 = 11, - AV_AFD_4_3_SP_14_9 = 13, - AV_AFD_16_9_SP_14_9 = 14, - AV_AFD_SP_4_3 = 15, -}; - - -/** - * Structure to hold side data for an AVFrame. - * - * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added - * to the end with a minor bump. - */ -typedef struct AVFrameSideData { - enum AVFrameSideDataType type; - uint8_t *data; -#if FF_API_BUFFER_SIZE_T - int size; -#else - size_t size; -#endif - AVDictionary *metadata; - AVBufferRef *buf; -} AVFrameSideData; - -/** - * Structure describing a single Region Of Interest. - * - * When multiple regions are defined in a single side-data block, they - * should be ordered from most to least important - some encoders are only - * capable of supporting a limited number of distinct regions, so will have - * to truncate the list. - * - * When overlapping regions are defined, the first region containing a given - * area of the frame applies. - */ -typedef struct AVRegionOfInterest { - /** - * Must be set to the size of this data structure (that is, - * sizeof(AVRegionOfInterest)). - */ - uint32_t self_size; - /** - * Distance in pixels from the top edge of the frame to the top and - * bottom edges and from the left edge of the frame to the left and - * right edges of the rectangle defining this region of interest. - * - * The constraints on a region are encoder dependent, so the region - * actually affected may be slightly larger for alignment or other - * reasons. - */ - int top; - int bottom; - int left; - int right; - /** - * Quantisation offset. - * - * Must be in the range -1 to +1. A value of zero indicates no quality - * change. A negative value asks for better quality (less quantisation), - * while a positive value asks for worse quality (greater quantisation). - * - * The range is calibrated so that the extreme values indicate the - * largest possible offset - if the rest of the frame is encoded with the - * worst possible quality, an offset of -1 indicates that this region - * should be encoded with the best possible quality anyway. Intermediate - * values are then interpolated in some codec-dependent way. - * - * For example, in 10-bit H.264 the quantisation parameter varies between - * -12 and 51. A typical qoffset value of -1/10 therefore indicates that - * this region should be encoded with a QP around one-tenth of the full - * range better than the rest of the frame. So, if most of the frame - * were to be encoded with a QP of around 30, this region would get a QP - * of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3). - * An extreme value of -1 would indicate that this region should be - * encoded with the best possible quality regardless of the treatment of - * the rest of the frame - that is, should be encoded at a QP of -12. - */ - AVRational qoffset; -} AVRegionOfInterest; - -/** - * This structure describes decoded (raw) audio or video data. - * - * AVFrame must be allocated using av_frame_alloc(). Note that this only - * allocates the AVFrame itself, the buffers for the data must be managed - * through other means (see below). - * AVFrame must be freed with av_frame_free(). - * - * AVFrame is typically allocated once and then reused multiple times to hold - * different data (e.g. a single AVFrame to hold frames received from a - * decoder). In such a case, av_frame_unref() will free any references held by - * the frame and reset it to its original clean state before it - * is reused again. - * - * The data described by an AVFrame is usually reference counted through the - * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / - * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at - * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, - * every single data plane must be contained in one of the buffers in - * AVFrame.buf or AVFrame.extended_buf. - * There may be a single buffer for all the data, or one separate buffer for - * each plane, or anything in between. - * - * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added - * to the end with a minor bump. - * - * Fields can be accessed through AVOptions, the name string used, matches the - * C structure field name for fields accessible through AVOptions. The AVClass - * for AVFrame can be obtained from avcodec_get_frame_class() - */ -typedef struct AVFrame { -#define AV_NUM_DATA_POINTERS 8 - /** - * pointer to the picture/channel planes. - * This might be different from the first allocated byte - * - * Some decoders access areas outside 0,0 - width,height, please - * see avcodec_align_dimensions2(). Some filters and swscale can read - * up to 16 bytes beyond the planes, if these filters are to be used, - * then 16 extra bytes must be allocated. - * - * NOTE: Except for hwaccel formats, pointers not needed by the format - * MUST be set to NULL. - */ - uint8_t *data[AV_NUM_DATA_POINTERS]; - - /** - * For video, size in bytes of each picture line. - * For audio, size in bytes of each plane. - * - * For audio, only linesize[0] may be set. For planar audio, each channel - * plane must be the same size. - * - * For video the linesizes should be multiples of the CPUs alignment - * preference, this is 16 or 32 for modern desktop CPUs. - * Some code requires such alignment other code can be slower without - * correct alignment, for yet other it makes no difference. - * - * @note The linesize may be larger than the size of usable data -- there - * may be extra padding present for performance reasons. - */ - int linesize[AV_NUM_DATA_POINTERS]; - - /** - * pointers to the data planes/channels. - * - * For video, this should simply point to data[]. - * - * For planar audio, each channel has a separate data pointer, and - * linesize[0] contains the size of each channel buffer. - * For packed audio, there is just one data pointer, and linesize[0] - * contains the total size of the buffer for all channels. - * - * Note: Both data and extended_data should always be set in a valid frame, - * but for planar audio with more channels that can fit in data, - * extended_data must be used in order to access all channels. - */ - uint8_t **extended_data; - - /** - * @name Video dimensions - * Video frames only. The coded dimensions (in pixels) of the video frame, - * i.e. the size of the rectangle that contains some well-defined values. - * - * @note The part of the frame intended for display/presentation is further - * restricted by the @ref cropping "Cropping rectangle". - * @{ - */ - int width, height; - /** - * @} - */ - - /** - * number of audio samples (per channel) described by this frame - */ - int nb_samples; - - /** - * format of the frame, -1 if unknown or unset - * Values correspond to enum AVPixelFormat for video frames, - * enum AVSampleFormat for audio) - */ - int format; - - /** - * 1 -> keyframe, 0-> not - */ - int key_frame; - - /** - * Picture type of the frame. - */ - enum AVPictureType pict_type; - - /** - * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified. - */ - AVRational sample_aspect_ratio; - - /** - * Presentation timestamp in time_base units (time when frame should be shown to user). - */ - int64_t pts; - -#if FF_API_PKT_PTS - /** - * PTS copied from the AVPacket that was decoded to produce this frame. - * @deprecated use the pts field instead - */ - attribute_deprecated - int64_t pkt_pts; -#endif - - /** - * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used) - * This is also the Presentation time of this AVFrame calculated from - * only AVPacket.dts values without pts values. - */ - int64_t pkt_dts; - - /** - * picture number in bitstream order - */ - int coded_picture_number; - /** - * picture number in display order - */ - int display_picture_number; - - /** - * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) - */ - int quality; - - /** - * for some private data of the user - */ - void *opaque; - -#if FF_API_ERROR_FRAME - /** - * @deprecated unused - */ - attribute_deprecated - uint64_t error[AV_NUM_DATA_POINTERS]; -#endif - - /** - * When decoding, this signals how much the picture must be delayed. - * extra_delay = repeat_pict / (2*fps) - */ - int repeat_pict; - - /** - * The content of the picture is interlaced. - */ - int interlaced_frame; - - /** - * If the content is interlaced, is top field displayed first. - */ - int top_field_first; - - /** - * Tell user application that palette has changed from previous frame. - */ - int palette_has_changed; - - /** - * reordered opaque 64 bits (generally an integer or a double precision float - * PTS but can be anything). - * The user sets AVCodecContext.reordered_opaque to represent the input at - * that time, - * the decoder reorders values as needed and sets AVFrame.reordered_opaque - * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque - */ - int64_t reordered_opaque; - - /** - * Sample rate of the audio data. - */ - int sample_rate; - - /** - * Channel layout of the audio data. - */ - uint64_t channel_layout; - - /** - * AVBuffer references backing the data for this frame. If all elements of - * this array are NULL, then this frame is not reference counted. This array - * must be filled contiguously -- if buf[i] is non-NULL then buf[j] must - * also be non-NULL for all j < i. - * - * There may be at most one AVBuffer per data plane, so for video this array - * always contains all the references. For planar audio with more than - * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in - * this array. Then the extra AVBufferRef pointers are stored in the - * extended_buf array. - */ - AVBufferRef *buf[AV_NUM_DATA_POINTERS]; - - /** - * For planar audio which requires more than AV_NUM_DATA_POINTERS - * AVBufferRef pointers, this array will hold all the references which - * cannot fit into AVFrame.buf. - * - * Note that this is different from AVFrame.extended_data, which always - * contains all the pointers. This array only contains the extra pointers, - * which cannot fit into AVFrame.buf. - * - * This array is always allocated using av_malloc() by whoever constructs - * the frame. It is freed in av_frame_unref(). - */ - AVBufferRef **extended_buf; - /** - * Number of elements in extended_buf. - */ - int nb_extended_buf; - - AVFrameSideData **side_data; - int nb_side_data; - -/** - * @defgroup lavu_frame_flags AV_FRAME_FLAGS - * @ingroup lavu_frame - * Flags describing additional frame properties. - * - * @{ - */ - -/** - * The frame data may be corrupted, e.g. due to decoding errors. - */ -#define AV_FRAME_FLAG_CORRUPT (1 << 0) -/** - * A flag to mark the frames which need to be decoded, but shouldn't be output. - */ -#define AV_FRAME_FLAG_DISCARD (1 << 2) -/** - * @} - */ - - /** - * Frame flags, a combination of @ref lavu_frame_flags - */ - int flags; - - /** - * MPEG vs JPEG YUV range. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorRange color_range; - - enum AVColorPrimaries color_primaries; - - enum AVColorTransferCharacteristic color_trc; - - /** - * YUV colorspace type. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorSpace colorspace; - - enum AVChromaLocation chroma_location; - - /** - * frame timestamp estimated using various heuristics, in stream time base - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int64_t best_effort_timestamp; - - /** - * reordered pos from the last AVPacket that has been input into the decoder - * - encoding: unused - * - decoding: Read by user. - */ - int64_t pkt_pos; - - /** - * duration of the corresponding packet, expressed in - * AVStream->time_base units, 0 if unknown. - * - encoding: unused - * - decoding: Read by user. - */ - int64_t pkt_duration; - - /** - * metadata. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - AVDictionary *metadata; - - /** - * decode error flags of the frame, set to a combination of - * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there - * were errors during the decoding. - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int decode_error_flags; -#define FF_DECODE_ERROR_INVALID_BITSTREAM 1 -#define FF_DECODE_ERROR_MISSING_REFERENCE 2 -#define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4 -#define FF_DECODE_ERROR_DECODE_SLICES 8 - - /** - * number of audio channels, only used for audio. - * - encoding: unused - * - decoding: Read by user. - */ - int channels; - - /** - * size of the corresponding packet containing the compressed - * frame. - * It is set to a negative value if unknown. - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int pkt_size; - -#if FF_API_FRAME_QP - /** - * QP table - */ - attribute_deprecated - int8_t *qscale_table; - /** - * QP store stride - */ - attribute_deprecated - int qstride; - - attribute_deprecated - int qscale_type; - - attribute_deprecated - AVBufferRef *qp_table_buf; -#endif - /** - * For hwaccel-format frames, this should be a reference to the - * AVHWFramesContext describing the frame. - */ - AVBufferRef *hw_frames_ctx; - - /** - * AVBufferRef for free use by the API user. FFmpeg will never check the - * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when - * the frame is unreferenced. av_frame_copy_props() calls create a new - * reference with av_buffer_ref() for the target frame's opaque_ref field. - * - * This is unrelated to the opaque field, although it serves a similar - * purpose. - */ - AVBufferRef *opaque_ref; - - /** - * @anchor cropping - * @name Cropping - * Video frames only. The number of pixels to discard from the the - * top/bottom/left/right border of the frame to obtain the sub-rectangle of - * the frame intended for presentation. - * @{ - */ - size_t crop_top; - size_t crop_bottom; - size_t crop_left; - size_t crop_right; - /** - * @} - */ - - /** - * AVBufferRef for internal use by a single libav* library. - * Must not be used to transfer data between libraries. - * Has to be NULL when ownership of the frame leaves the respective library. - * - * Code outside the FFmpeg libs should never check or change the contents of the buffer ref. - * - * FFmpeg calls av_buffer_unref() on it when the frame is unreferenced. - * av_frame_copy_props() calls create a new reference with av_buffer_ref() - * for the target frame's private_ref field. - */ - AVBufferRef *private_ref; -} AVFrame; - -#if FF_API_FRAME_GET_SET -/** - * Accessors for some AVFrame fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame); -attribute_deprecated -void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val); -attribute_deprecated -int64_t av_frame_get_pkt_duration (const AVFrame *frame); -attribute_deprecated -void av_frame_set_pkt_duration (AVFrame *frame, int64_t val); -attribute_deprecated -int64_t av_frame_get_pkt_pos (const AVFrame *frame); -attribute_deprecated -void av_frame_set_pkt_pos (AVFrame *frame, int64_t val); -attribute_deprecated -int64_t av_frame_get_channel_layout (const AVFrame *frame); -attribute_deprecated -void av_frame_set_channel_layout (AVFrame *frame, int64_t val); -attribute_deprecated -int av_frame_get_channels (const AVFrame *frame); -attribute_deprecated -void av_frame_set_channels (AVFrame *frame, int val); -attribute_deprecated -int av_frame_get_sample_rate (const AVFrame *frame); -attribute_deprecated -void av_frame_set_sample_rate (AVFrame *frame, int val); -attribute_deprecated -AVDictionary *av_frame_get_metadata (const AVFrame *frame); -attribute_deprecated -void av_frame_set_metadata (AVFrame *frame, AVDictionary *val); -attribute_deprecated -int av_frame_get_decode_error_flags (const AVFrame *frame); -attribute_deprecated -void av_frame_set_decode_error_flags (AVFrame *frame, int val); -attribute_deprecated -int av_frame_get_pkt_size(const AVFrame *frame); -attribute_deprecated -void av_frame_set_pkt_size(AVFrame *frame, int val); -#if FF_API_FRAME_QP -attribute_deprecated -int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type); -attribute_deprecated -int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type); -#endif -attribute_deprecated -enum AVColorSpace av_frame_get_colorspace(const AVFrame *frame); -attribute_deprecated -void av_frame_set_colorspace(AVFrame *frame, enum AVColorSpace val); -attribute_deprecated -enum AVColorRange av_frame_get_color_range(const AVFrame *frame); -attribute_deprecated -void av_frame_set_color_range(AVFrame *frame, enum AVColorRange val); -#endif - -/** - * Get the name of a colorspace. - * @return a static string identifying the colorspace; can be NULL. - */ -const char *av_get_colorspace_name(enum AVColorSpace val); - -/** - * Allocate an AVFrame and set its fields to default values. The resulting - * struct must be freed using av_frame_free(). - * - * @return An AVFrame filled with default values or NULL on failure. - * - * @note this only allocates the AVFrame itself, not the data buffers. Those - * must be allocated through other means, e.g. with av_frame_get_buffer() or - * manually. - */ -AVFrame *av_frame_alloc(void); - -/** - * Free the frame and any dynamically allocated objects in it, - * e.g. extended_data. If the frame is reference counted, it will be - * unreferenced first. - * - * @param frame frame to be freed. The pointer will be set to NULL. - */ -void av_frame_free(AVFrame **frame); - -/** - * Set up a new reference to the data described by the source frame. - * - * Copy frame properties from src to dst and create a new reference for each - * AVBufferRef from src. - * - * If src is not reference counted, new buffers are allocated and the data is - * copied. - * - * @warning: dst MUST have been either unreferenced with av_frame_unref(dst), - * or newly allocated with av_frame_alloc() before calling this - * function, or undefined behavior will occur. - * - * @return 0 on success, a negative AVERROR on error - */ -int av_frame_ref(AVFrame *dst, const AVFrame *src); - -/** - * Create a new frame that references the same data as src. - * - * This is a shortcut for av_frame_alloc()+av_frame_ref(). - * - * @return newly created AVFrame on success, NULL on error. - */ -AVFrame *av_frame_clone(const AVFrame *src); - -/** - * Unreference all the buffers referenced by frame and reset the frame fields. - */ -void av_frame_unref(AVFrame *frame); - -/** - * Move everything contained in src to dst and reset src. - * - * @warning: dst is not unreferenced, but directly overwritten without reading - * or deallocating its contents. Call av_frame_unref(dst) manually - * before calling this function to ensure that no memory is leaked. - */ -void av_frame_move_ref(AVFrame *dst, AVFrame *src); - -/** - * Allocate new buffer(s) for audio or video data. - * - * The following fields must be set on frame before calling this function: - * - format (pixel format for video, sample format for audio) - * - width and height for video - * - nb_samples and channel_layout for audio - * - * This function will fill AVFrame.data and AVFrame.buf arrays and, if - * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. - * For planar formats, one buffer will be allocated for each plane. - * - * @warning: if frame already has been allocated, calling this function will - * leak memory. In addition, undefined behavior can occur in certain - * cases. - * - * @param frame frame in which to store the new buffers. - * @param align Required buffer size alignment. If equal to 0, alignment will be - * chosen automatically for the current CPU. It is highly - * recommended to pass 0 here unless you know what you are doing. - * - * @return 0 on success, a negative AVERROR on error. - */ -int av_frame_get_buffer(AVFrame *frame, int align); - -/** - * Check if the frame data is writable. - * - * @return A positive value if the frame data is writable (which is true if and - * only if each of the underlying buffers has only one reference, namely the one - * stored in this frame). Return 0 otherwise. - * - * If 1 is returned the answer is valid until av_buffer_ref() is called on any - * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). - * - * @see av_frame_make_writable(), av_buffer_is_writable() - */ -int av_frame_is_writable(AVFrame *frame); - -/** - * Ensure that the frame data is writable, avoiding data copy if possible. - * - * Do nothing if the frame is writable, allocate new buffers and copy the data - * if it is not. - * - * @return 0 on success, a negative AVERROR on error. - * - * @see av_frame_is_writable(), av_buffer_is_writable(), - * av_buffer_make_writable() - */ -int av_frame_make_writable(AVFrame *frame); - -/** - * Copy the frame data from src to dst. - * - * This function does not allocate anything, dst must be already initialized and - * allocated with the same parameters as src. - * - * This function only copies the frame data (i.e. the contents of the data / - * extended data arrays), not any other properties. - * - * @return >= 0 on success, a negative AVERROR on error. - */ -int av_frame_copy(AVFrame *dst, const AVFrame *src); - -/** - * Copy only "metadata" fields from src to dst. - * - * Metadata for the purpose of this function are those fields that do not affect - * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample - * aspect ratio (for video), but not width/height or channel layout. - * Side data is also copied. - */ -int av_frame_copy_props(AVFrame *dst, const AVFrame *src); - -/** - * Get the buffer reference a given data plane is stored in. - * - * @param plane index of the data plane of interest in frame->extended_data. - * - * @return the buffer reference that contains the plane or NULL if the input - * frame is not valid. - */ -AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane); - -/** - * Add a new side data to a frame. - * - * @param frame a frame to which the side data should be added - * @param type type of the added side data - * @param size size of the side data - * - * @return newly added side data on success, NULL on error - */ -AVFrameSideData *av_frame_new_side_data(AVFrame *frame, - enum AVFrameSideDataType type, -#if FF_API_BUFFER_SIZE_T - int size); -#else - size_t size); -#endif - -/** - * Add a new side data to a frame from an existing AVBufferRef - * - * @param frame a frame to which the side data should be added - * @param type the type of the added side data - * @param buf an AVBufferRef to add as side data. The ownership of - * the reference is transferred to the frame. - * - * @return newly added side data on success, NULL on error. On failure - * the frame is unchanged and the AVBufferRef remains owned by - * the caller. - */ -AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame, - enum AVFrameSideDataType type, - AVBufferRef *buf); - -/** - * @return a pointer to the side data of a given type on success, NULL if there - * is no side data with such type in this frame. - */ -AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, - enum AVFrameSideDataType type); - -/** - * Remove and free all side data instances of the given type. - */ -void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type); - - -/** - * Flags for frame cropping. - */ -enum { - /** - * Apply the maximum possible cropping, even if it requires setting the - * AVFrame.data[] entries to unaligned pointers. Passing unaligned data - * to FFmpeg API is generally not allowed, and causes undefined behavior - * (such as crashes). You can pass unaligned data only to FFmpeg APIs that - * are explicitly documented to accept it. Use this flag only if you - * absolutely know what you are doing. - */ - AV_FRAME_CROP_UNALIGNED = 1 << 0, -}; - -/** - * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/ - * crop_bottom fields. If cropping is successful, the function will adjust the - * data pointers and the width/height fields, and set the crop fields to 0. - * - * In all cases, the cropping boundaries will be rounded to the inherent - * alignment of the pixel format. In some cases, such as for opaque hwaccel - * formats, the left/top cropping is ignored. The crop fields are set to 0 even - * if the cropping was rounded or ignored. - * - * @param frame the frame which should be cropped - * @param flags Some combination of AV_FRAME_CROP_* flags, or 0. - * - * @return >= 0 on success, a negative AVERROR on error. If the cropping fields - * were invalid, AVERROR(ERANGE) is returned, and nothing is changed. - */ -int av_frame_apply_cropping(AVFrame *frame, int flags); - -/** - * @return a string identifying the side data type - */ -const char *av_frame_side_data_name(enum AVFrameSideDataType type); - -/** - * @} - */ - -#endif /* AVUTIL_FRAME_H */ diff --git a/prebuilts/aarch64/include/libavutil/hash.h b/prebuilts/aarch64/include/libavutil/hash.h deleted file mode 100644 index af4719e..0000000 --- a/prebuilts/aarch64/include/libavutil/hash.h +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright (C) 2013 Reimar Döffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_hash_generic - * Generic hashing API - */ - -#ifndef AVUTIL_HASH_H -#define AVUTIL_HASH_H - -#include -#include - -#include "version.h" - -/** - * @defgroup lavu_hash Hash Functions - * @ingroup lavu_crypto - * Hash functions useful in multimedia. - * - * Hash functions are widely used in multimedia, from error checking and - * concealment to internal regression testing. libavutil has efficient - * implementations of a variety of hash functions that may be useful for - * FFmpeg and other multimedia applications. - * - * @{ - * - * @defgroup lavu_hash_generic Generic Hashing API - * An abstraction layer for all hash functions supported by libavutil. - * - * If your application needs to support a wide range of different hash - * functions, then the Generic Hashing API is for you. It provides a generic, - * reusable API for @ref lavu_hash "all hash functions" implemented in libavutil. - * If you just need to use one particular hash function, use the @ref lavu_hash - * "individual hash" directly. - * - * @section Sample Code - * - * A basic template for using the Generic Hashing API follows: - * - * @code - * struct AVHashContext *ctx = NULL; - * const char *hash_name = NULL; - * uint8_t *output_buf = NULL; - * - * // Select from a string returned by av_hash_names() - * hash_name = ...; - * - * // Allocate a hash context - * ret = av_hash_alloc(&ctx, hash_name); - * if (ret < 0) - * return ret; - * - * // Initialize the hash context - * av_hash_init(ctx); - * - * // Update the hash context with data - * while (data_left) { - * av_hash_update(ctx, data, size); - * } - * - * // Now we have no more data, so it is time to finalize the hash and get the - * // output. But we need to first allocate an output buffer. Note that you can - * // use any memory allocation function, including malloc(), not just - * // av_malloc(). - * output_buf = av_malloc(av_hash_get_size(ctx)); - * if (!output_buf) - * return AVERROR(ENOMEM); - * - * // Finalize the hash context. - * // You can use any of the av_hash_final*() functions provided, for other - * // output formats. If you do so, be sure to adjust the memory allocation - * // above. See the function documentation below for the exact amount of extra - * // memory needed. - * av_hash_final(ctx, output_buffer); - * - * // Free the context - * av_hash_freep(&ctx); - * @endcode - * - * @section Hash Function-Specific Information - * If the CRC32 hash is selected, the #AV_CRC_32_IEEE polynomial will be - * used. - * - * If the Murmur3 hash is selected, the default seed will be used. See @ref - * lavu_murmur3_seedinfo "Murmur3" for more information. - * - * @{ - */ - -/** - * @example ffhash.c - * This example is a simple command line application that takes one or more - * arguments. It demonstrates a typical use of the hashing API with allocation, - * initialization, updating, and finalizing. - */ - -struct AVHashContext; - -/** - * Allocate a hash context for the algorithm specified by name. - * - * @return >= 0 for success, a negative error code for failure - * - * @note The context is not initialized after a call to this function; you must - * call av_hash_init() to do so. - */ -int av_hash_alloc(struct AVHashContext **ctx, const char *name); - -/** - * Get the names of available hash algorithms. - * - * This function can be used to enumerate the algorithms. - * - * @param[in] i Index of the hash algorithm, starting from 0 - * @return Pointer to a static string or `NULL` if `i` is out of range - */ -const char *av_hash_names(int i); - -/** - * Get the name of the algorithm corresponding to the given hash context. - */ -const char *av_hash_get_name(const struct AVHashContext *ctx); - -/** - * Maximum value that av_hash_get_size() will currently return. - * - * You can use this if you absolutely want or need to use static allocation for - * the output buffer and are fine with not supporting hashes newly added to - * libavutil without recompilation. - * - * @warning - * Adding new hashes with larger sizes, and increasing the macro while doing - * so, will not be considered an ABI change. To prevent your code from - * overflowing a buffer, either dynamically allocate the output buffer with - * av_hash_get_size(), or limit your use of the Hashing API to hashes that are - * already in FFmpeg during the time of compilation. - */ -#define AV_HASH_MAX_SIZE 64 - -/** - * Get the size of the resulting hash value in bytes. - * - * The maximum value this function will currently return is available as macro - * #AV_HASH_MAX_SIZE. - * - * @param[in] ctx Hash context - * @return Size of the hash value in bytes - */ -int av_hash_get_size(const struct AVHashContext *ctx); - -/** - * Initialize or reset a hash context. - * - * @param[in,out] ctx Hash context - */ -void av_hash_init(struct AVHashContext *ctx); - -/** - * Update a hash context with additional data. - * - * @param[in,out] ctx Hash context - * @param[in] src Data to be added to the hash context - * @param[in] len Size of the additional data - */ -#if FF_API_CRYPTO_SIZE_T -void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, int len); -#else -void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, size_t len); -#endif - -/** - * Finalize a hash context and compute the actual hash value. - * - * The minimum size of `dst` buffer is given by av_hash_get_size() or - * #AV_HASH_MAX_SIZE. The use of the latter macro is discouraged. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * - * @see av_hash_final_bin() provides an alternative API - */ -void av_hash_final(struct AVHashContext *ctx, uint8_t *dst); - -/** - * Finalize a hash context and store the actual hash value in a buffer. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * If `size` is smaller than the hash size (given by av_hash_get_size()), the - * hash is truncated; if size is larger, the buffer is padded with 0. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * @param[in] size Number of bytes to write to `dst` - */ -void av_hash_final_bin(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Finalize a hash context and store the hexadecimal representation of the - * actual hash value as a string. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * The string is always 0-terminated. - * - * If `size` is smaller than `2 * hash_size + 1`, where `hash_size` is the - * value returned by av_hash_get_size(), the string will be truncated. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the string will be stored - * @param[in] size Maximum number of bytes to write to `dst` - */ -void av_hash_final_hex(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Finalize a hash context and store the Base64 representation of the - * actual hash value as a string. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * The string is always 0-terminated. - * - * If `size` is smaller than AV_BASE64_SIZE(hash_size), where `hash_size` is - * the value returned by av_hash_get_size(), the string will be truncated. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * @param[in] size Maximum number of bytes to write to `dst` - */ -void av_hash_final_b64(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Free hash context and set hash context pointer to `NULL`. - * - * @param[in,out] ctx Pointer to hash context - */ -void av_hash_freep(struct AVHashContext **ctx); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_HASH_H */ diff --git a/prebuilts/aarch64/include/libavutil/hdr_dynamic_metadata.h b/prebuilts/aarch64/include/libavutil/hdr_dynamic_metadata.h deleted file mode 100644 index 2d72de5..0000000 --- a/prebuilts/aarch64/include/libavutil/hdr_dynamic_metadata.h +++ /dev/null @@ -1,343 +0,0 @@ -/* - * Copyright (c) 2018 Mohammad Izadi - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HDR_DYNAMIC_METADATA_H -#define AVUTIL_HDR_DYNAMIC_METADATA_H - -#include "frame.h" -#include "rational.h" - -/** - * Option for overlapping elliptical pixel selectors in an image. - */ -enum AVHDRPlusOverlapProcessOption { - AV_HDR_PLUS_OVERLAP_PROCESS_WEIGHTED_AVERAGING = 0, - AV_HDR_PLUS_OVERLAP_PROCESS_LAYERING = 1, -}; - -/** - * Represents the percentile at a specific percentage in - * a distribution. - */ -typedef struct AVHDRPlusPercentile { - /** - * The percentage value corresponding to a specific percentile linearized - * RGB value in the processing window in the scene. The value shall be in - * the range of 0 to100, inclusive. - */ - uint8_t percentage; - - /** - * The linearized maxRGB value at a specific percentile in the processing - * window in the scene. The value shall be in the range of 0 to 1, inclusive - * and in multiples of 0.00001. - */ - AVRational percentile; -} AVHDRPlusPercentile; - -/** - * Color transform parameters at a processing window in a dynamic metadata for - * SMPTE 2094-40. - */ -typedef struct AVHDRPlusColorTransformParams { - /** - * The relative x coordinate of the top left pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(width of Picture - 1). The value 1 corresponds - * to the absolute coordinate of width of Picture - 1. The value for - * first processing window shall be 0. - */ - AVRational window_upper_left_corner_x; - - /** - * The relative y coordinate of the top left pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(height of Picture - 1). The value 1 corresponds - * to the absolute coordinate of height of Picture - 1. The value for - * first processing window shall be 0. - */ - AVRational window_upper_left_corner_y; - - /** - * The relative x coordinate of the bottom right pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(width of Picture - 1). The value 1 corresponds - * to the absolute coordinate of width of Picture - 1. The value for - * first processing window shall be 1. - */ - AVRational window_lower_right_corner_x; - - /** - * The relative y coordinate of the bottom right pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(height of Picture - 1). The value 1 corresponds - * to the absolute coordinate of height of Picture - 1. The value for - * first processing window shall be 1. - */ - AVRational window_lower_right_corner_y; - - /** - * The x coordinate of the center position of the concentric internal and - * external ellipses of the elliptical pixel selector in the processing - * window. The value shall be in the range of 0 to (width of Picture - 1), - * inclusive and in multiples of 1 pixel. - */ - uint16_t center_of_ellipse_x; - - /** - * The y coordinate of the center position of the concentric internal and - * external ellipses of the elliptical pixel selector in the processing - * window. The value shall be in the range of 0 to (height of Picture - 1), - * inclusive and in multiples of 1 pixel. - */ - uint16_t center_of_ellipse_y; - - /** - * The clockwise rotation angle in degree of arc with respect to the - * positive direction of the x-axis of the concentric internal and external - * ellipses of the elliptical pixel selector in the processing window. The - * value shall be in the range of 0 to 180, inclusive and in multiples of 1. - */ - uint8_t rotation_angle; - - /** - * The semi-major axis value of the internal ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value shall be - * in the range of 1 to 65535, inclusive and in multiples of 1 pixel. - */ - uint16_t semimajor_axis_internal_ellipse; - - /** - * The semi-major axis value of the external ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value - * shall not be less than semimajor_axis_internal_ellipse of the current - * processing window. The value shall be in the range of 1 to 65535, - * inclusive and in multiples of 1 pixel. - */ - uint16_t semimajor_axis_external_ellipse; - - /** - * The semi-minor axis value of the external ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value shall be - * in the range of 1 to 65535, inclusive and in multiples of 1 pixel. - */ - uint16_t semiminor_axis_external_ellipse; - - /** - * Overlap process option indicates one of the two methods of combining - * rendered pixels in the processing window in an image with at least one - * elliptical pixel selector. For overlapping elliptical pixel selectors - * in an image, overlap_process_option shall have the same value. - */ - enum AVHDRPlusOverlapProcessOption overlap_process_option; - - /** - * The maximum of the color components of linearized RGB values in the - * processing window in the scene. The values should be in the range of 0 to - * 1, inclusive and in multiples of 0.00001. maxscl[ 0 ], maxscl[ 1 ], and - * maxscl[ 2 ] are corresponding to R, G, B color components respectively. - */ - AVRational maxscl[3]; - - /** - * The average of linearized maxRGB values in the processing window in the - * scene. The value should be in the range of 0 to 1, inclusive and in - * multiples of 0.00001. - */ - AVRational average_maxrgb; - - /** - * The number of linearized maxRGB values at given percentiles in the - * processing window in the scene. The maximum value shall be 15. - */ - uint8_t num_distribution_maxrgb_percentiles; - - /** - * The linearized maxRGB values at given percentiles in the - * processing window in the scene. - */ - AVHDRPlusPercentile distribution_maxrgb[15]; - - /** - * The fraction of selected pixels in the image that contains the brightest - * pixel in the scene. The value shall be in the range of 0 to 1, inclusive - * and in multiples of 0.001. - */ - AVRational fraction_bright_pixels; - - /** - * This flag indicates that the metadata for the tone mapping function in - * the processing window is present (for value of 1). - */ - uint8_t tone_mapping_flag; - - /** - * The x coordinate of the separation point between the linear part and the - * curved part of the tone mapping function. The value shall be in the range - * of 0 to 1, excluding 0 and in multiples of 1/4095. - */ - AVRational knee_point_x; - - /** - * The y coordinate of the separation point between the linear part and the - * curved part of the tone mapping function. The value shall be in the range - * of 0 to 1, excluding 0 and in multiples of 1/4095. - */ - AVRational knee_point_y; - - /** - * The number of the intermediate anchor parameters of the tone mapping - * function in the processing window. The maximum value shall be 15. - */ - uint8_t num_bezier_curve_anchors; - - /** - * The intermediate anchor parameters of the tone mapping function in the - * processing window in the scene. The values should be in the range of 0 - * to 1, inclusive and in multiples of 1/1023. - */ - AVRational bezier_curve_anchors[15]; - - /** - * This flag shall be equal to 0 in bitstreams conforming to this version of - * this Specification. Other values are reserved for future use. - */ - uint8_t color_saturation_mapping_flag; - - /** - * The color saturation gain in the processing window in the scene. The - * value shall be in the range of 0 to 63/8, inclusive and in multiples of - * 1/8. The default value shall be 1. - */ - AVRational color_saturation_weight; -} AVHDRPlusColorTransformParams; - -/** - * This struct represents dynamic metadata for color volume transform - - * application 4 of SMPTE 2094-40:2016 standard. - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with - * av_dynamic_hdr_plus_alloc() and its size is not a part of - * the public ABI. - */ -typedef struct AVDynamicHDRPlus { - /** - * Country code by Rec. ITU-T T.35 Annex A. The value shall be 0xB5. - */ - uint8_t itu_t_t35_country_code; - - /** - * Application version in the application defining document in ST-2094 - * suite. The value shall be set to 0. - */ - uint8_t application_version; - - /** - * The number of processing windows. The value shall be in the range - * of 1 to 3, inclusive. - */ - uint8_t num_windows; - - /** - * The color transform parameters for every processing window. - */ - AVHDRPlusColorTransformParams params[3]; - - /** - * The nominal maximum display luminance of the targeted system display, - * in units of 0.0001 candelas per square metre. The value shall be in - * the range of 0 to 10000, inclusive. - */ - AVRational targeted_system_display_maximum_luminance; - - /** - * This flag shall be equal to 0 in bit streams conforming to this version - * of this Specification. The value 1 is reserved for future use. - */ - uint8_t targeted_system_display_actual_peak_luminance_flag; - - /** - * The number of rows in the targeted system_display_actual_peak_luminance - * array. The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_rows_targeted_system_display_actual_peak_luminance; - - /** - * The number of columns in the - * targeted_system_display_actual_peak_luminance array. The value shall be - * in the range of 2 to 25, inclusive. - */ - uint8_t num_cols_targeted_system_display_actual_peak_luminance; - - /** - * The normalized actual peak luminance of the targeted system display. The - * values should be in the range of 0 to 1, inclusive and in multiples of - * 1/15. - */ - AVRational targeted_system_display_actual_peak_luminance[25][25]; - - /** - * This flag shall be equal to 0 in bitstreams conforming to this version of - * this Specification. The value 1 is reserved for future use. - */ - uint8_t mastering_display_actual_peak_luminance_flag; - - /** - * The number of rows in the mastering_display_actual_peak_luminance array. - * The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_rows_mastering_display_actual_peak_luminance; - - /** - * The number of columns in the mastering_display_actual_peak_luminance - * array. The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_cols_mastering_display_actual_peak_luminance; - - /** - * The normalized actual peak luminance of the mastering display used for - * mastering the image essence. The values should be in the range of 0 to 1, - * inclusive and in multiples of 1/15. - */ - AVRational mastering_display_actual_peak_luminance[25][25]; -} AVDynamicHDRPlus; - -/** - * Allocate an AVDynamicHDRPlus structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVDynamicHDRPlus filled with default values or NULL - * on failure. - */ -AVDynamicHDRPlus *av_dynamic_hdr_plus_alloc(size_t *size); - -/** - * Allocate a complete AVDynamicHDRPlus and add it to the frame. - * @param frame The frame which side data is added to. - * - * @return The AVDynamicHDRPlus structure to be filled by caller or NULL - * on failure. - */ -AVDynamicHDRPlus *av_dynamic_hdr_plus_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_HDR_DYNAMIC_METADATA_H */ diff --git a/prebuilts/aarch64/include/libavutil/hmac.h b/prebuilts/aarch64/include/libavutil/hmac.h deleted file mode 100644 index 412e950..0000000 --- a/prebuilts/aarch64/include/libavutil/hmac.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2012 Martin Storsjo - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HMAC_H -#define AVUTIL_HMAC_H - -#include - -#include "version.h" -/** - * @defgroup lavu_hmac HMAC - * @ingroup lavu_crypto - * @{ - */ - -enum AVHMACType { - AV_HMAC_MD5, - AV_HMAC_SHA1, - AV_HMAC_SHA224, - AV_HMAC_SHA256, - AV_HMAC_SHA384, - AV_HMAC_SHA512, -}; - -typedef struct AVHMAC AVHMAC; - -/** - * Allocate an AVHMAC context. - * @param type The hash function used for the HMAC. - */ -AVHMAC *av_hmac_alloc(enum AVHMACType type); - -/** - * Free an AVHMAC context. - * @param ctx The context to free, may be NULL - */ -void av_hmac_free(AVHMAC *ctx); - -/** - * Initialize an AVHMAC context with an authentication key. - * @param ctx The HMAC context - * @param key The authentication key - * @param keylen The length of the key, in bytes - */ -void av_hmac_init(AVHMAC *ctx, const uint8_t *key, unsigned int keylen); - -/** - * Hash data with the HMAC. - * @param ctx The HMAC context - * @param data The data to hash - * @param len The length of the data, in bytes - */ -void av_hmac_update(AVHMAC *ctx, const uint8_t *data, unsigned int len); - -/** - * Finish hashing and output the HMAC digest. - * @param ctx The HMAC context - * @param out The output buffer to write the digest into - * @param outlen The length of the out buffer, in bytes - * @return The number of bytes written to out, or a negative error code. - */ -int av_hmac_final(AVHMAC *ctx, uint8_t *out, unsigned int outlen); - -/** - * Hash an array of data with a key. - * @param ctx The HMAC context - * @param data The data to hash - * @param len The length of the data, in bytes - * @param key The authentication key - * @param keylen The length of the key, in bytes - * @param out The output buffer to write the digest into - * @param outlen The length of the out buffer, in bytes - * @return The number of bytes written to out, or a negative error code. - */ -int av_hmac_calc(AVHMAC *ctx, const uint8_t *data, unsigned int len, - const uint8_t *key, unsigned int keylen, - uint8_t *out, unsigned int outlen); - -/** - * @} - */ - -#endif /* AVUTIL_HMAC_H */ diff --git a/prebuilts/aarch64/include/libavutil/hwcontext.h b/prebuilts/aarch64/include/libavutil/hwcontext.h deleted file mode 100644 index 04d19d8..0000000 --- a/prebuilts/aarch64/include/libavutil/hwcontext.h +++ /dev/null @@ -1,605 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_H -#define AVUTIL_HWCONTEXT_H - -#include "buffer.h" -#include "frame.h" -#include "log.h" -#include "pixfmt.h" - -enum AVHWDeviceType { - AV_HWDEVICE_TYPE_NONE, - AV_HWDEVICE_TYPE_VDPAU, - AV_HWDEVICE_TYPE_CUDA, - AV_HWDEVICE_TYPE_VAAPI, - AV_HWDEVICE_TYPE_DXVA2, - AV_HWDEVICE_TYPE_QSV, - AV_HWDEVICE_TYPE_VIDEOTOOLBOX, - AV_HWDEVICE_TYPE_D3D11VA, - AV_HWDEVICE_TYPE_DRM, - AV_HWDEVICE_TYPE_OPENCL, - AV_HWDEVICE_TYPE_MEDIACODEC, - AV_HWDEVICE_TYPE_VULKAN, -}; - -typedef struct AVHWDeviceInternal AVHWDeviceInternal; - -/** - * This struct aggregates all the (hardware/vendor-specific) "high-level" state, - * i.e. state that is not tied to a concrete processing configuration. - * E.g., in an API that supports hardware-accelerated encoding and decoding, - * this struct will (if possible) wrap the state that is common to both encoding - * and decoding and from which specific instances of encoders or decoders can be - * derived. - * - * This struct is reference-counted with the AVBuffer mechanism. The - * av_hwdevice_ctx_alloc() constructor yields a reference, whose data field - * points to the actual AVHWDeviceContext. Further objects derived from - * AVHWDeviceContext (such as AVHWFramesContext, describing a frame pool with - * specific properties) will hold an internal reference to it. After all the - * references are released, the AVHWDeviceContext itself will be freed, - * optionally invoking a user-specified callback for uninitializing the hardware - * state. - */ -typedef struct AVHWDeviceContext { - /** - * A class for logging. Set by av_hwdevice_ctx_alloc(). - */ - const AVClass *av_class; - - /** - * Private data used internally by libavutil. Must not be accessed in any - * way by the caller. - */ - AVHWDeviceInternal *internal; - - /** - * This field identifies the underlying API used for hardware access. - * - * This field is set when this struct is allocated and never changed - * afterwards. - */ - enum AVHWDeviceType type; - - /** - * The format-specific data, allocated and freed by libavutil along with - * this context. - * - * Should be cast by the user to the format-specific context defined in the - * corresponding header (hwcontext_*.h) and filled as described in the - * documentation before calling av_hwdevice_ctx_init(). - * - * After calling av_hwdevice_ctx_init() this struct should not be modified - * by the caller. - */ - void *hwctx; - - /** - * This field may be set by the caller before calling av_hwdevice_ctx_init(). - * - * If non-NULL, this callback will be called when the last reference to - * this context is unreferenced, immediately before it is freed. - * - * @note when other objects (e.g an AVHWFramesContext) are derived from this - * struct, this callback will be invoked after all such child objects - * are fully uninitialized and their respective destructors invoked. - */ - void (*free)(struct AVHWDeviceContext *ctx); - - /** - * Arbitrary user data, to be used e.g. by the free() callback. - */ - void *user_opaque; -} AVHWDeviceContext; - -typedef struct AVHWFramesInternal AVHWFramesInternal; - -/** - * This struct describes a set or pool of "hardware" frames (i.e. those with - * data not located in normal system memory). All the frames in the pool are - * assumed to be allocated in the same way and interchangeable. - * - * This struct is reference-counted with the AVBuffer mechanism and tied to a - * given AVHWDeviceContext instance. The av_hwframe_ctx_alloc() constructor - * yields a reference, whose data field points to the actual AVHWFramesContext - * struct. - */ -typedef struct AVHWFramesContext { - /** - * A class for logging. - */ - const AVClass *av_class; - - /** - * Private data used internally by libavutil. Must not be accessed in any - * way by the caller. - */ - AVHWFramesInternal *internal; - - /** - * A reference to the parent AVHWDeviceContext. This reference is owned and - * managed by the enclosing AVHWFramesContext, but the caller may derive - * additional references from it. - */ - AVBufferRef *device_ref; - - /** - * The parent AVHWDeviceContext. This is simply a pointer to - * device_ref->data provided for convenience. - * - * Set by libavutil in av_hwframe_ctx_init(). - */ - AVHWDeviceContext *device_ctx; - - /** - * The format-specific data, allocated and freed automatically along with - * this context. - * - * Should be cast by the user to the format-specific context defined in the - * corresponding header (hwframe_*.h) and filled as described in the - * documentation before calling av_hwframe_ctx_init(). - * - * After any frames using this context are created, the contents of this - * struct should not be modified by the caller. - */ - void *hwctx; - - /** - * This field may be set by the caller before calling av_hwframe_ctx_init(). - * - * If non-NULL, this callback will be called when the last reference to - * this context is unreferenced, immediately before it is freed. - */ - void (*free)(struct AVHWFramesContext *ctx); - - /** - * Arbitrary user data, to be used e.g. by the free() callback. - */ - void *user_opaque; - - /** - * A pool from which the frames are allocated by av_hwframe_get_buffer(). - * This field may be set by the caller before calling av_hwframe_ctx_init(). - * The buffers returned by calling av_buffer_pool_get() on this pool must - * have the properties described in the documentation in the corresponding hw - * type's header (hwcontext_*.h). The pool will be freed strictly before - * this struct's free() callback is invoked. - * - * This field may be NULL, then libavutil will attempt to allocate a pool - * internally. Note that certain device types enforce pools allocated at - * fixed size (frame count), which cannot be extended dynamically. In such a - * case, initial_pool_size must be set appropriately. - */ - AVBufferPool *pool; - - /** - * Initial size of the frame pool. If a device type does not support - * dynamically resizing the pool, then this is also the maximum pool size. - * - * May be set by the caller before calling av_hwframe_ctx_init(). Must be - * set if pool is NULL and the device type does not support dynamic pools. - */ - int initial_pool_size; - - /** - * The pixel format identifying the underlying HW surface type. - * - * Must be a hwaccel format, i.e. the corresponding descriptor must have the - * AV_PIX_FMT_FLAG_HWACCEL flag set. - * - * Must be set by the user before calling av_hwframe_ctx_init(). - */ - enum AVPixelFormat format; - - /** - * The pixel format identifying the actual data layout of the hardware - * frames. - * - * Must be set by the caller before calling av_hwframe_ctx_init(). - * - * @note when the underlying API does not provide the exact data layout, but - * only the colorspace/bit depth, this field should be set to the fully - * planar version of that format (e.g. for 8-bit 420 YUV it should be - * AV_PIX_FMT_YUV420P, not AV_PIX_FMT_NV12 or anything else). - */ - enum AVPixelFormat sw_format; - - /** - * The allocated dimensions of the frames in this pool. - * - * Must be set by the user before calling av_hwframe_ctx_init(). - */ - int width, height; -} AVHWFramesContext; - -/** - * Look up an AVHWDeviceType by name. - * - * @param name String name of the device type (case-insensitive). - * @return The type from enum AVHWDeviceType, or AV_HWDEVICE_TYPE_NONE if - * not found. - */ -enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name); - -/** Get the string name of an AVHWDeviceType. - * - * @param type Type from enum AVHWDeviceType. - * @return Pointer to a static string containing the name, or NULL if the type - * is not valid. - */ -const char *av_hwdevice_get_type_name(enum AVHWDeviceType type); - -/** - * Iterate over supported device types. - * - * @param type AV_HWDEVICE_TYPE_NONE initially, then the previous type - * returned by this function in subsequent iterations. - * @return The next usable device type from enum AVHWDeviceType, or - * AV_HWDEVICE_TYPE_NONE if there are no more. - */ -enum AVHWDeviceType av_hwdevice_iterate_types(enum AVHWDeviceType prev); - -/** - * Allocate an AVHWDeviceContext for a given hardware type. - * - * @param type the type of the hardware device to allocate. - * @return a reference to the newly created AVHWDeviceContext on success or NULL - * on failure. - */ -AVBufferRef *av_hwdevice_ctx_alloc(enum AVHWDeviceType type); - -/** - * Finalize the device context before use. This function must be called after - * the context is filled with all the required information and before it is - * used in any way. - * - * @param ref a reference to the AVHWDeviceContext - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwdevice_ctx_init(AVBufferRef *ref); - -/** - * Open a device of the specified type and create an AVHWDeviceContext for it. - * - * This is a convenience function intended to cover the simple cases. Callers - * who need to fine-tune device creation/management should open the device - * manually and then wrap it in an AVHWDeviceContext using - * av_hwdevice_ctx_alloc()/av_hwdevice_ctx_init(). - * - * The returned context is already initialized and ready for use, the caller - * should not call av_hwdevice_ctx_init() on it. The user_opaque/free fields of - * the created AVHWDeviceContext are set by this function and should not be - * touched by the caller. - * - * @param device_ctx On success, a reference to the newly-created device context - * will be written here. The reference is owned by the caller - * and must be released with av_buffer_unref() when no longer - * needed. On failure, NULL will be written to this pointer. - * @param type The type of the device to create. - * @param device A type-specific string identifying the device to open. - * @param opts A dictionary of additional (type-specific) options to use in - * opening the device. The dictionary remains owned by the caller. - * @param flags currently unused - * - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create(AVBufferRef **device_ctx, enum AVHWDeviceType type, - const char *device, AVDictionary *opts, int flags); - -/** - * Create a new device of the specified type from an existing device. - * - * If the source device is a device of the target type or was originally - * derived from such a device (possibly through one or more intermediate - * devices of other types), then this will return a reference to the - * existing device of the same type as is requested. - * - * Otherwise, it will attempt to derive a new device from the given source - * device. If direct derivation to the new type is not implemented, it will - * attempt the same derivation from each ancestor of the source device in - * turn looking for an implemented derivation method. - * - * @param dst_ctx On success, a reference to the newly-created - * AVHWDeviceContext. - * @param type The type of the new device to create. - * @param src_ctx A reference to an existing AVHWDeviceContext which will be - * used to create the new device. - * @param flags Currently unused; should be set to zero. - * @return Zero on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create_derived(AVBufferRef **dst_ctx, - enum AVHWDeviceType type, - AVBufferRef *src_ctx, int flags); - -/** - * Create a new device of the specified type from an existing device. - * - * This function performs the same action as av_hwdevice_ctx_create_derived, - * however, it is able to set options for the new device to be derived. - * - * @param dst_ctx On success, a reference to the newly-created - * AVHWDeviceContext. - * @param type The type of the new device to create. - * @param src_ctx A reference to an existing AVHWDeviceContext which will be - * used to create the new device. - * @param options Options for the new device to create, same format as in - * av_hwdevice_ctx_create. - * @param flags Currently unused; should be set to zero. - * @return Zero on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create_derived_opts(AVBufferRef **dst_ctx, - enum AVHWDeviceType type, - AVBufferRef *src_ctx, - AVDictionary *options, int flags); - -/** - * Allocate an AVHWFramesContext tied to a given device context. - * - * @param device_ctx a reference to a AVHWDeviceContext. This function will make - * a new reference for internal use, the one passed to the - * function remains owned by the caller. - * @return a reference to the newly created AVHWFramesContext on success or NULL - * on failure. - */ -AVBufferRef *av_hwframe_ctx_alloc(AVBufferRef *device_ctx); - -/** - * Finalize the context before use. This function must be called after the - * context is filled with all the required information and before it is attached - * to any frames. - * - * @param ref a reference to the AVHWFramesContext - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwframe_ctx_init(AVBufferRef *ref); - -/** - * Allocate a new frame attached to the given AVHWFramesContext. - * - * @param hwframe_ctx a reference to an AVHWFramesContext - * @param frame an empty (freshly allocated or unreffed) frame to be filled with - * newly allocated buffers. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwframe_get_buffer(AVBufferRef *hwframe_ctx, AVFrame *frame, int flags); - -/** - * Copy data to or from a hw surface. At least one of dst/src must have an - * AVHWFramesContext attached. - * - * If src has an AVHWFramesContext attached, then the format of dst (if set) - * must use one of the formats returned by av_hwframe_transfer_get_formats(src, - * AV_HWFRAME_TRANSFER_DIRECTION_FROM). - * If dst has an AVHWFramesContext attached, then the format of src must use one - * of the formats returned by av_hwframe_transfer_get_formats(dst, - * AV_HWFRAME_TRANSFER_DIRECTION_TO) - * - * dst may be "clean" (i.e. with data/buf pointers unset), in which case the - * data buffers will be allocated by this function using av_frame_get_buffer(). - * If dst->format is set, then this format will be used, otherwise (when - * dst->format is AV_PIX_FMT_NONE) the first acceptable format will be chosen. - * - * The two frames must have matching allocated dimensions (i.e. equal to - * AVHWFramesContext.width/height), since not all device types support - * transferring a sub-rectangle of the whole surface. The display dimensions - * (i.e. AVFrame.width/height) may be smaller than the allocated dimensions, but - * also have to be equal for both frames. When the display dimensions are - * smaller than the allocated dimensions, the content of the padding in the - * destination frame is unspecified. - * - * @param dst the destination frame. dst is not touched on failure. - * @param src the source frame. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR error code on failure. - */ -int av_hwframe_transfer_data(AVFrame *dst, const AVFrame *src, int flags); - -enum AVHWFrameTransferDirection { - /** - * Transfer the data from the queried hw frame. - */ - AV_HWFRAME_TRANSFER_DIRECTION_FROM, - - /** - * Transfer the data to the queried hw frame. - */ - AV_HWFRAME_TRANSFER_DIRECTION_TO, -}; - -/** - * Get a list of possible source or target formats usable in - * av_hwframe_transfer_data(). - * - * @param hwframe_ctx the frame context to obtain the information for - * @param dir the direction of the transfer - * @param formats the pointer to the output format list will be written here. - * The list is terminated with AV_PIX_FMT_NONE and must be freed - * by the caller when no longer needed using av_free(). - * If this function returns successfully, the format list will - * have at least one item (not counting the terminator). - * On failure, the contents of this pointer are unspecified. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_hwframe_transfer_get_formats(AVBufferRef *hwframe_ctx, - enum AVHWFrameTransferDirection dir, - enum AVPixelFormat **formats, int flags); - - -/** - * This struct describes the constraints on hardware frames attached to - * a given device with a hardware-specific configuration. This is returned - * by av_hwdevice_get_hwframe_constraints() and must be freed by - * av_hwframe_constraints_free() after use. - */ -typedef struct AVHWFramesConstraints { - /** - * A list of possible values for format in the hw_frames_ctx, - * terminated by AV_PIX_FMT_NONE. This member will always be filled. - */ - enum AVPixelFormat *valid_hw_formats; - - /** - * A list of possible values for sw_format in the hw_frames_ctx, - * terminated by AV_PIX_FMT_NONE. Can be NULL if this information is - * not known. - */ - enum AVPixelFormat *valid_sw_formats; - - /** - * The minimum size of frames in this hw_frames_ctx. - * (Zero if not known.) - */ - int min_width; - int min_height; - - /** - * The maximum size of frames in this hw_frames_ctx. - * (INT_MAX if not known / no limit.) - */ - int max_width; - int max_height; -} AVHWFramesConstraints; - -/** - * Allocate a HW-specific configuration structure for a given HW device. - * After use, the user must free all members as required by the specific - * hardware structure being used, then free the structure itself with - * av_free(). - * - * @param device_ctx a reference to the associated AVHWDeviceContext. - * @return The newly created HW-specific configuration structure on - * success or NULL on failure. - */ -void *av_hwdevice_hwconfig_alloc(AVBufferRef *device_ctx); - -/** - * Get the constraints on HW frames given a device and the HW-specific - * configuration to be used with that device. If no HW-specific - * configuration is provided, returns the maximum possible capabilities - * of the device. - * - * @param ref a reference to the associated AVHWDeviceContext. - * @param hwconfig a filled HW-specific configuration structure, or NULL - * to return the maximum possible capabilities of the device. - * @return AVHWFramesConstraints structure describing the constraints - * on the device, or NULL if not available. - */ -AVHWFramesConstraints *av_hwdevice_get_hwframe_constraints(AVBufferRef *ref, - const void *hwconfig); - -/** - * Free an AVHWFrameConstraints structure. - * - * @param constraints The (filled or unfilled) AVHWFrameConstraints structure. - */ -void av_hwframe_constraints_free(AVHWFramesConstraints **constraints); - - -/** - * Flags to apply to frame mappings. - */ -enum { - /** - * The mapping must be readable. - */ - AV_HWFRAME_MAP_READ = 1 << 0, - /** - * The mapping must be writeable. - */ - AV_HWFRAME_MAP_WRITE = 1 << 1, - /** - * The mapped frame will be overwritten completely in subsequent - * operations, so the current frame data need not be loaded. Any values - * which are not overwritten are unspecified. - */ - AV_HWFRAME_MAP_OVERWRITE = 1 << 2, - /** - * The mapping must be direct. That is, there must not be any copying in - * the map or unmap steps. Note that performance of direct mappings may - * be much lower than normal memory. - */ - AV_HWFRAME_MAP_DIRECT = 1 << 3, -}; - -/** - * Map a hardware frame. - * - * This has a number of different possible effects, depending on the format - * and origin of the src and dst frames. On input, src should be a usable - * frame with valid buffers and dst should be blank (typically as just created - * by av_frame_alloc()). src should have an associated hwframe context, and - * dst may optionally have a format and associated hwframe context. - * - * If src was created by mapping a frame from the hwframe context of dst, - * then this function undoes the mapping - dst is replaced by a reference to - * the frame that src was originally mapped from. - * - * If both src and dst have an associated hwframe context, then this function - * attempts to map the src frame from its hardware context to that of dst and - * then fill dst with appropriate data to be usable there. This will only be - * possible if the hwframe contexts and associated devices are compatible - - * given compatible devices, av_hwframe_ctx_create_derived() can be used to - * create a hwframe context for dst in which mapping should be possible. - * - * If src has a hwframe context but dst does not, then the src frame is - * mapped to normal memory and should thereafter be usable as a normal frame. - * If the format is set on dst, then the mapping will attempt to create dst - * with that format and fail if it is not possible. If format is unset (is - * AV_PIX_FMT_NONE) then dst will be mapped with whatever the most appropriate - * format to use is (probably the sw_format of the src hwframe context). - * - * A return value of AVERROR(ENOSYS) indicates that the mapping is not - * possible with the given arguments and hwframe setup, while other return - * values indicate that it failed somehow. - * - * @param dst Destination frame, to contain the mapping. - * @param src Source frame, to be mapped. - * @param flags Some combination of AV_HWFRAME_MAP_* flags. - * @return Zero on success, negative AVERROR code on failure. - */ -int av_hwframe_map(AVFrame *dst, const AVFrame *src, int flags); - - -/** - * Create and initialise an AVHWFramesContext as a mapping of another existing - * AVHWFramesContext on a different device. - * - * av_hwframe_ctx_init() should not be called after this. - * - * @param derived_frame_ctx On success, a reference to the newly created - * AVHWFramesContext. - * @param derived_device_ctx A reference to the device to create the new - * AVHWFramesContext on. - * @param source_frame_ctx A reference to an existing AVHWFramesContext - * which will be mapped to the derived context. - * @param flags Some combination of AV_HWFRAME_MAP_* flags, defining the - * mapping parameters to apply to frames which are allocated - * in the derived device. - * @return Zero on success, negative AVERROR code on failure. - */ -int av_hwframe_ctx_create_derived(AVBufferRef **derived_frame_ctx, - enum AVPixelFormat format, - AVBufferRef *derived_device_ctx, - AVBufferRef *source_frame_ctx, - int flags); - -#endif /* AVUTIL_HWCONTEXT_H */ diff --git a/prebuilts/aarch64/include/libavutil/hwcontext_cuda.h b/prebuilts/aarch64/include/libavutil/hwcontext_cuda.h deleted file mode 100644 index cefbe0c..0000000 --- a/prebuilts/aarch64/include/libavutil/hwcontext_cuda.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#ifndef AVUTIL_HWCONTEXT_CUDA_H -#define AVUTIL_HWCONTEXT_CUDA_H - -#ifndef CUDA_VERSION -#include -#endif - -#include "pixfmt.h" - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_CUDA. - * - * This API supports dynamic frame pools. AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a CUdeviceptr. - */ - -typedef struct AVCUDADeviceContextInternal AVCUDADeviceContextInternal; - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVCUDADeviceContext { - CUcontext cuda_ctx; - CUstream stream; - AVCUDADeviceContextInternal *internal; -} AVCUDADeviceContext; - -/** - * AVHWFramesContext.hwctx is currently not used - */ - -/** - * @defgroup hwcontext_cuda Device context creation flags - * - * Flags for av_hwdevice_ctx_create. - * - * @{ - */ - -/** - * Use primary device context instead of creating a new one. - */ -#define AV_CUDA_USE_PRIMARY_CONTEXT (1 << 0) - -/** - * @} - */ - -#endif /* AVUTIL_HWCONTEXT_CUDA_H */ diff --git a/prebuilts/aarch64/include/libavutil/hwcontext_d3d11va.h b/prebuilts/aarch64/include/libavutil/hwcontext_d3d11va.h deleted file mode 100644 index 9f91e9b..0000000 --- a/prebuilts/aarch64/include/libavutil/hwcontext_d3d11va.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_D3D11VA_H -#define AVUTIL_HWCONTEXT_D3D11VA_H - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_D3D11VA. - * - * The default pool implementation will be fixed-size if initial_pool_size is - * set (and allocate elements from an array texture). Otherwise it will allocate - * individual textures. Be aware that decoding requires a single array texture. - * - * Using sw_format==AV_PIX_FMT_YUV420P has special semantics, and maps to - * DXGI_FORMAT_420_OPAQUE. av_hwframe_transfer_data() is not supported for - * this format. Refer to MSDN for details. - * - * av_hwdevice_ctx_create() for this device type supports a key named "debug" - * for the AVDictionary entry. If this is set to any value, the device creation - * code will try to load various supported D3D debugging layers. - */ - -#include -#include - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVD3D11VADeviceContext { - /** - * Device used for texture creation and access. This can also be used to - * set the libavcodec decoding device. - * - * Must be set by the user. This is the only mandatory field - the other - * device context fields are set from this and are available for convenience. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11Device *device; - - /** - * If unset, this will be set from the device field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11DeviceContext *device_context; - - /** - * If unset, this will be set from the device field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11VideoDevice *video_device; - - /** - * If unset, this will be set from the device_context field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11VideoContext *video_context; - - /** - * Callbacks for locking. They protect accesses to device_context and - * video_context calls. They also protect access to the internal staging - * texture (for av_hwframe_transfer_data() calls). They do NOT protect - * access to hwcontext or decoder state in general. - * - * If unset on init, the hwcontext implementation will set them to use an - * internal mutex. - * - * The underlying lock must be recursive. lock_ctx is for free use by the - * locking implementation. - */ - void (*lock)(void *lock_ctx); - void (*unlock)(void *lock_ctx); - void *lock_ctx; -} AVD3D11VADeviceContext; - -/** - * D3D11 frame descriptor for pool allocation. - * - * In user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer pointing at an object of this type describing the - * planes of the frame. - * - * This has no use outside of custom allocation, and AVFrame AVBufferRef do not - * necessarily point to an instance of this struct. - */ -typedef struct AVD3D11FrameDescriptor { - /** - * The texture in which the frame is located. The reference count is - * managed by the AVBufferRef, and destroying the reference will release - * the interface. - * - * Normally stored in AVFrame.data[0]. - */ - ID3D11Texture2D *texture; - - /** - * The index into the array texture element representing the frame, or 0 - * if the texture is not an array texture. - * - * Normally stored in AVFrame.data[1] (cast from intptr_t). - */ - intptr_t index; -} AVD3D11FrameDescriptor; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVD3D11VAFramesContext { - /** - * The canonical texture used for pool allocation. If this is set to NULL - * on init, the hwframes implementation will allocate and set an array - * texture if initial_pool_size > 0. - * - * The only situation when the API user should set this is: - * - the user wants to do manual pool allocation (setting - * AVHWFramesContext.pool), instead of letting AVHWFramesContext - * allocate the pool - * - of an array texture - * - and wants it to use it for decoding - * - this has to be done before calling av_hwframe_ctx_init() - * - * Deallocating the AVHWFramesContext will always release this interface, - * and it does not matter whether it was user-allocated. - * - * This is in particular used by the libavcodec D3D11VA hwaccel, which - * requires a single array texture. It will create ID3D11VideoDecoderOutputView - * objects for each array texture element on decoder initialization. - */ - ID3D11Texture2D *texture; - - /** - * D3D11_TEXTURE2D_DESC.BindFlags used for texture creation. The user must - * at least set D3D11_BIND_DECODER if the frames context is to be used for - * video decoding. - * This field is ignored/invalid if a user-allocated texture is provided. - */ - UINT BindFlags; - - /** - * D3D11_TEXTURE2D_DESC.MiscFlags used for texture creation. - * This field is ignored/invalid if a user-allocated texture is provided. - */ - UINT MiscFlags; -} AVD3D11VAFramesContext; - -#endif /* AVUTIL_HWCONTEXT_D3D11VA_H */ diff --git a/prebuilts/aarch64/include/libavutil/hwcontext_drm.h b/prebuilts/aarch64/include/libavutil/hwcontext_drm.h deleted file mode 100644 index 42709f2..0000000 --- a/prebuilts/aarch64/include/libavutil/hwcontext_drm.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_DRM_H -#define AVUTIL_HWCONTEXT_DRM_H - -#include -#include - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_DRM. - * - * Internal frame allocation is not currently supported - all frames - * must be allocated by the user. Thus AVHWFramesContext is always - * NULL, though this may change if support for frame allocation is - * added in future. - */ - -enum { - /** - * The maximum number of layers/planes in a DRM frame. - */ - AV_DRM_MAX_PLANES = 4 -}; - -/** - * DRM object descriptor. - * - * Describes a single DRM object, addressing it as a PRIME file - * descriptor. - */ -typedef struct AVDRMObjectDescriptor { - /** - * DRM PRIME fd for the object. - */ - int fd; - /** - * Total size of the object. - * - * (This includes any parts not which do not contain image data.) - */ - size_t size; - /** - * Format modifier applied to the object (DRM_FORMAT_MOD_*). - * - * If the format modifier is unknown then this should be set to - * DRM_FORMAT_MOD_INVALID. - */ - uint64_t format_modifier; -} AVDRMObjectDescriptor; - -/** - * DRM plane descriptor. - * - * Describes a single plane of a layer, which is contained within - * a single object. - */ -typedef struct AVDRMPlaneDescriptor { - /** - * Index of the object containing this plane in the objects - * array of the enclosing frame descriptor. - */ - int object_index; - /** - * Offset within that object of this plane. - */ - ptrdiff_t offset; - /** - * Pitch (linesize) of this plane. - */ - ptrdiff_t pitch; -} AVDRMPlaneDescriptor; - -/** - * DRM layer descriptor. - * - * Describes a single layer within a frame. This has the structure - * defined by its format, and will contain one or more planes. - */ -typedef struct AVDRMLayerDescriptor { - /** - * Format of the layer (DRM_FORMAT_*). - */ - uint32_t format; - /** - * Number of planes in the layer. - * - * This must match the number of planes required by format. - */ - int nb_planes; - /** - * Array of planes in this layer. - */ - AVDRMPlaneDescriptor planes[AV_DRM_MAX_PLANES]; -} AVDRMLayerDescriptor; - -/** - * DRM frame descriptor. - * - * This is used as the data pointer for AV_PIX_FMT_DRM_PRIME frames. - * It is also used by user-allocated frame pools - allocating in - * AVHWFramesContext.pool must return AVBufferRefs which contain - * an object of this type. - * - * The fields of this structure should be set such it can be - * imported directly by EGL using the EGL_EXT_image_dma_buf_import - * and EGL_EXT_image_dma_buf_import_modifiers extensions. - * (Note that the exact layout of a particular format may vary between - * platforms - we only specify that the same platform should be able - * to import it.) - * - * The total number of planes must not exceed AV_DRM_MAX_PLANES, and - * the order of the planes by increasing layer index followed by - * increasing plane index must be the same as the order which would - * be used for the data pointers in the equivalent software format. - */ -typedef struct AVDRMFrameDescriptor { - /** - * Number of DRM objects making up this frame. - */ - int nb_objects; - /** - * Array of objects making up the frame. - */ - AVDRMObjectDescriptor objects[AV_DRM_MAX_PLANES]; - /** - * Number of layers in the frame. - */ - int nb_layers; - /** - * Array of layers in the frame. - */ - AVDRMLayerDescriptor layers[AV_DRM_MAX_PLANES]; -} AVDRMFrameDescriptor; - -/** - * DRM device. - * - * Allocated as AVHWDeviceContext.hwctx. - */ -typedef struct AVDRMDeviceContext { - /** - * File descriptor of DRM device. - * - * This is used as the device to create frames on, and may also be - * used in some derivation and mapping operations. - * - * If no device is required, set to -1. - */ - int fd; -} AVDRMDeviceContext; - -#endif /* AVUTIL_HWCONTEXT_DRM_H */ diff --git a/prebuilts/aarch64/include/libavutil/hwcontext_dxva2.h b/prebuilts/aarch64/include/libavutil/hwcontext_dxva2.h deleted file mode 100644 index e1b79bc..0000000 --- a/prebuilts/aarch64/include/libavutil/hwcontext_dxva2.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#ifndef AVUTIL_HWCONTEXT_DXVA2_H -#define AVUTIL_HWCONTEXT_DXVA2_H - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_DXVA2. - * - * Only fixed-size pools are supported. - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to a pointer to IDirect3DSurface9. - */ - -#include -#include - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVDXVA2DeviceContext { - IDirect3DDeviceManager9 *devmgr; -} AVDXVA2DeviceContext; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVDXVA2FramesContext { - /** - * The surface type (e.g. DXVA2_VideoProcessorRenderTarget or - * DXVA2_VideoDecoderRenderTarget). Must be set by the caller. - */ - DWORD surface_type; - - /** - * The surface pool. When an external pool is not provided by the caller, - * this will be managed (allocated and filled on init, freed on uninit) by - * libavutil. - */ - IDirect3DSurface9 **surfaces; - int nb_surfaces; - - /** - * Certain drivers require the decoder to be destroyed before the surfaces. - * To allow internally managed pools to work properly in such cases, this - * field is provided. - * - * If it is non-NULL, libavutil will call IDirectXVideoDecoder_Release() on - * it just before the internal surface pool is freed. - * - * This is for convenience only. Some code uses other methods to manage the - * decoder reference. - */ - IDirectXVideoDecoder *decoder_to_release; -} AVDXVA2FramesContext; - -#endif /* AVUTIL_HWCONTEXT_DXVA2_H */ diff --git a/prebuilts/aarch64/include/libavutil/hwcontext_mediacodec.h b/prebuilts/aarch64/include/libavutil/hwcontext_mediacodec.h deleted file mode 100644 index 101a980..0000000 --- a/prebuilts/aarch64/include/libavutil/hwcontext_mediacodec.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_MEDIACODEC_H -#define AVUTIL_HWCONTEXT_MEDIACODEC_H - -/** - * MediaCodec details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVMediaCodecDeviceContext { - /** - * android/view/Surface handle, to be filled by the user. - * - * This is the default surface used by decoders on this device. - */ - void *surface; -} AVMediaCodecDeviceContext; - -#endif /* AVUTIL_HWCONTEXT_MEDIACODEC_H */ diff --git a/prebuilts/aarch64/include/libavutil/hwcontext_opencl.h b/prebuilts/aarch64/include/libavutil/hwcontext_opencl.h deleted file mode 100644 index ef54486..0000000 --- a/prebuilts/aarch64/include/libavutil/hwcontext_opencl.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_OPENCL_H -#define AVUTIL_HWCONTEXT_OPENCL_H - -#ifdef __APPLE__ -#include -#else -#include -#endif - -#include "frame.h" - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_OPENCL. - * - * Pools allocated internally are always dynamic, and are primarily intended - * to be used in OpenCL-only cases. If interoperation is required, it is - * typically required to allocate frames in the other API and then map the - * frames context to OpenCL with av_hwframe_ctx_create_derived(). - */ - -/** - * OpenCL frame descriptor for pool allocation. - * - * In user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer pointing at an object of this type describing the - * planes of the frame. - */ -typedef struct AVOpenCLFrameDescriptor { - /** - * Number of planes in the frame. - */ - int nb_planes; - /** - * OpenCL image2d objects for each plane of the frame. - */ - cl_mem planes[AV_NUM_DATA_POINTERS]; -} AVOpenCLFrameDescriptor; - -/** - * OpenCL device details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVOpenCLDeviceContext { - /** - * The primary device ID of the device. If multiple OpenCL devices - * are associated with the context then this is the one which will - * be used for all operations internal to FFmpeg. - */ - cl_device_id device_id; - /** - * The OpenCL context which will contain all operations and frames on - * this device. - */ - cl_context context; - /** - * The default command queue for this device, which will be used by all - * frames contexts which do not have their own command queue. If not - * intialised by the user, a default queue will be created on the - * primary device. - */ - cl_command_queue command_queue; -} AVOpenCLDeviceContext; - -/** - * OpenCL-specific data associated with a frame pool. - * - * Allocated as AVHWFramesContext.hwctx. - */ -typedef struct AVOpenCLFramesContext { - /** - * The command queue used for internal asynchronous operations on this - * device (av_hwframe_transfer_data(), av_hwframe_map()). - * - * If this is not set, the command queue from the associated device is - * used instead. - */ - cl_command_queue command_queue; -} AVOpenCLFramesContext; - -#endif /* AVUTIL_HWCONTEXT_OPENCL_H */ diff --git a/prebuilts/aarch64/include/libavutil/hwcontext_qsv.h b/prebuilts/aarch64/include/libavutil/hwcontext_qsv.h deleted file mode 100644 index b98d611..0000000 --- a/prebuilts/aarch64/include/libavutil/hwcontext_qsv.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_QSV_H -#define AVUTIL_HWCONTEXT_QSV_H - -#include - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_QSV. - * - * This API does not support dynamic frame pools. AVHWFramesContext.pool must - * contain AVBufferRefs whose data pointer points to an mfxFrameSurface1 struct. - */ - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVQSVDeviceContext { - mfxSession session; -} AVQSVDeviceContext; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVQSVFramesContext { - mfxFrameSurface1 *surfaces; - int nb_surfaces; - - /** - * A combination of MFX_MEMTYPE_* describing the frame pool. - */ - int frame_type; -} AVQSVFramesContext; - -#endif /* AVUTIL_HWCONTEXT_QSV_H */ - diff --git a/prebuilts/aarch64/include/libavutil/hwcontext_vaapi.h b/prebuilts/aarch64/include/libavutil/hwcontext_vaapi.h deleted file mode 100644 index 0b2e071..0000000 --- a/prebuilts/aarch64/include/libavutil/hwcontext_vaapi.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VAAPI_H -#define AVUTIL_HWCONTEXT_VAAPI_H - -#include - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_VAAPI. - * - * Dynamic frame pools are supported, but note that any pool used as a render - * target is required to be of fixed size in order to be be usable as an - * argument to vaCreateContext(). - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to a VASurfaceID. - */ - -enum { - /** - * The quirks field has been set by the user and should not be detected - * automatically by av_hwdevice_ctx_init(). - */ - AV_VAAPI_DRIVER_QUIRK_USER_SET = (1 << 0), - /** - * The driver does not destroy parameter buffers when they are used by - * vaRenderPicture(). Additional code will be required to destroy them - * separately afterwards. - */ - AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS = (1 << 1), - - /** - * The driver does not support the VASurfaceAttribMemoryType attribute, - * so the surface allocation code will not try to use it. - */ - AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE = (1 << 2), - - /** - * The driver does not support surface attributes at all. - * The surface allocation code will never pass them to surface allocation, - * and the results of the vaQuerySurfaceAttributes() call will be faked. - */ - AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3), -}; - -/** - * VAAPI connection details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVVAAPIDeviceContext { - /** - * The VADisplay handle, to be filled by the user. - */ - VADisplay display; - /** - * Driver quirks to apply - this is filled by av_hwdevice_ctx_init(), - * with reference to a table of known drivers, unless the - * AV_VAAPI_DRIVER_QUIRK_USER_SET bit is already present. The user - * may need to refer to this field when performing any later - * operations using VAAPI with the same VADisplay. - */ - unsigned int driver_quirks; -} AVVAAPIDeviceContext; - -/** - * VAAPI-specific data associated with a frame pool. - * - * Allocated as AVHWFramesContext.hwctx. - */ -typedef struct AVVAAPIFramesContext { - /** - * Set by the user to apply surface attributes to all surfaces in - * the frame pool. If null, default settings are used. - */ - VASurfaceAttrib *attributes; - int nb_attributes; - /** - * The surfaces IDs of all surfaces in the pool after creation. - * Only valid if AVHWFramesContext.initial_pool_size was positive. - * These are intended to be used as the render_targets arguments to - * vaCreateContext(). - */ - VASurfaceID *surface_ids; - int nb_surfaces; -} AVVAAPIFramesContext; - -/** - * VAAPI hardware pipeline configuration details. - * - * Allocated with av_hwdevice_hwconfig_alloc(). - */ -typedef struct AVVAAPIHWConfig { - /** - * ID of a VAAPI pipeline configuration. - */ - VAConfigID config_id; -} AVVAAPIHWConfig; - -#endif /* AVUTIL_HWCONTEXT_VAAPI_H */ diff --git a/prebuilts/aarch64/include/libavutil/hwcontext_vdpau.h b/prebuilts/aarch64/include/libavutil/hwcontext_vdpau.h deleted file mode 100644 index 1b7ea1e..0000000 --- a/prebuilts/aarch64/include/libavutil/hwcontext_vdpau.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VDPAU_H -#define AVUTIL_HWCONTEXT_VDPAU_H - -#include - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_VDPAU. - * - * This API supports dynamic frame pools. AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a VdpVideoSurface. - */ - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVVDPAUDeviceContext { - VdpDevice device; - VdpGetProcAddress *get_proc_address; -} AVVDPAUDeviceContext; - -/** - * AVHWFramesContext.hwctx is currently not used - */ - -#endif /* AVUTIL_HWCONTEXT_VDPAU_H */ diff --git a/prebuilts/aarch64/include/libavutil/hwcontext_videotoolbox.h b/prebuilts/aarch64/include/libavutil/hwcontext_videotoolbox.h deleted file mode 100644 index 5074d79..0000000 --- a/prebuilts/aarch64/include/libavutil/hwcontext_videotoolbox.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H -#define AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H - -#include - -#include - -#include "pixfmt.h" - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_VIDEOTOOLBOX. - * - * This API currently does not support frame allocation, as the raw VideoToolbox - * API does allocation, and FFmpeg itself never has the need to allocate frames. - * - * If the API user sets a custom pool, AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a CVImageBufferRef or CVPixelBufferRef. - * - * Currently AVHWDeviceContext.hwctx and AVHWFramesContext.hwctx are always - * NULL. - */ - -/** - * Convert a VideoToolbox (actually CoreVideo) format to AVPixelFormat. - * Returns AV_PIX_FMT_NONE if no known equivalent was found. - */ -enum AVPixelFormat av_map_videotoolbox_format_to_pixfmt(uint32_t cv_fmt); - -/** - * Convert an AVPixelFormat to a VideoToolbox (actually CoreVideo) format. - * Returns 0 if no known equivalent was found. - */ -uint32_t av_map_videotoolbox_format_from_pixfmt(enum AVPixelFormat pix_fmt); - -/** - * Same as av_map_videotoolbox_format_from_pixfmt function, but can map and - * return full range pixel formats via a flag. - */ -uint32_t av_map_videotoolbox_format_from_pixfmt2(enum AVPixelFormat pix_fmt, bool full_range); - -#endif /* AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H */ diff --git a/prebuilts/aarch64/include/libavutil/hwcontext_vulkan.h b/prebuilts/aarch64/include/libavutil/hwcontext_vulkan.h deleted file mode 100644 index 5cbeb8e..0000000 --- a/prebuilts/aarch64/include/libavutil/hwcontext_vulkan.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VULKAN_H -#define AVUTIL_HWCONTEXT_VULKAN_H - -#include - -#include "pixfmt.h" -#include "frame.h" - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_VULKAN. - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to an AVVkFrame. - */ - -/** - * Main Vulkan context, allocated as AVHWDeviceContext.hwctx. - * All of these can be set before init to change what the context uses - */ -typedef struct AVVulkanDeviceContext { - /** - * Custom memory allocator, else NULL - */ - const VkAllocationCallbacks *alloc; - /** - * Vulkan instance. Must be at least version 1.1. - */ - VkInstance inst; - /** - * Physical device - */ - VkPhysicalDevice phys_dev; - /** - * Active device - */ - VkDevice act_dev; - /** - * Queue family index for graphics - * @note av_hwdevice_create() will set all 3 queue indices if unset - * If there is no dedicated queue for compute or transfer operations, - * they will be set to the graphics queue index which can handle both. - * nb_graphics_queues indicates how many queues were enabled for the - * graphics queue (must be at least 1) - */ - int queue_family_index; - int nb_graphics_queues; - /** - * Queue family index to use for transfer operations, and the amount of queues - * enabled. In case there is no dedicated transfer queue, nb_tx_queues - * must be 0 and queue_family_tx_index must be the same as either the graphics - * queue or the compute queue, if available. - */ - int queue_family_tx_index; - int nb_tx_queues; - /** - * Queue family index for compute ops, and the amount of queues enabled. - * In case there are no dedicated compute queues, nb_comp_queues must be - * 0 and its queue family index must be set to the graphics queue. - */ - int queue_family_comp_index; - int nb_comp_queues; - /** - * Enabled instance extensions. - * If supplying your own device context, set this to an array of strings, with - * each entry containing the specified Vulkan extension string to enable. - * Duplicates are possible and accepted. - * If no extensions are enabled, set these fields to NULL, and 0 respectively. - */ - const char * const *enabled_inst_extensions; - int nb_enabled_inst_extensions; - /** - * Enabled device extensions. By default, VK_KHR_external_memory_fd, - * VK_EXT_external_memory_dma_buf, VK_EXT_image_drm_format_modifier, - * VK_KHR_external_semaphore_fd and VK_EXT_external_memory_host are enabled if found. - * If supplying your own device context, these fields takes the same format as - * the above fields, with the same conditions that duplicates are possible - * and accepted, and that NULL and 0 respectively means no extensions are enabled. - */ - const char * const *enabled_dev_extensions; - int nb_enabled_dev_extensions; - /** - * This structure should be set to the set of features that present and enabled - * during device creation. When a device is created by FFmpeg, it will default to - * enabling all that are present of the shaderImageGatherExtended, - * fragmentStoresAndAtomics, shaderInt64 and vertexPipelineStoresAndAtomics features. - */ - VkPhysicalDeviceFeatures2 device_features; -} AVVulkanDeviceContext; - -/** - * Allocated as AVHWFramesContext.hwctx, used to set pool-specific options - */ -typedef struct AVVulkanFramesContext { - /** - * Controls the tiling of allocated frames. - */ - VkImageTiling tiling; - /** - * Defines extra usage of output frames. If left as 0, the following bits - * are set: TRANSFER_SRC, TRANSFER_DST. SAMPLED and STORAGE. - */ - VkImageUsageFlagBits usage; - /** - * Extension data for image creation. - */ - void *create_pnext; - /** - * Extension data for memory allocation. Must have as many entries as - * the number of planes of the sw_format. - * This will be chained to VkExportMemoryAllocateInfo, which is used - * to make all pool images exportable to other APIs if the necessary - * extensions are present in enabled_dev_extensions. - */ - void *alloc_pnext[AV_NUM_DATA_POINTERS]; -} AVVulkanFramesContext; - -/* - * Frame structure, the VkFormat of the image will always match - * the pool's sw_format. - * All frames, imported or allocated, will be created with the - * VK_IMAGE_CREATE_ALIAS_BIT flag set, so the memory may be aliased if needed. - * - * If all three queue family indices in the device context are the same, - * images will be created with the EXCLUSIVE sharing mode. Otherwise, all images - * will be created using the CONCURRENT sharing mode. - * - * @note the size of this structure is not part of the ABI, to allocate - * you must use @av_vk_frame_alloc(). - */ -typedef struct AVVkFrame { - /** - * Vulkan images to which the memory is bound to. - */ - VkImage img[AV_NUM_DATA_POINTERS]; - - /** - * The same tiling must be used for all images in the frame. - */ - VkImageTiling tiling; - - /** - * Memory backing the images. Could be less than the amount of images - * if importing from a DRM or VAAPI frame. - */ - VkDeviceMemory mem[AV_NUM_DATA_POINTERS]; - size_t size[AV_NUM_DATA_POINTERS]; - - /** - * OR'd flags for all memory allocated - */ - VkMemoryPropertyFlagBits flags; - - /** - * Updated after every barrier - */ - VkAccessFlagBits access[AV_NUM_DATA_POINTERS]; - VkImageLayout layout[AV_NUM_DATA_POINTERS]; - - /** - * Synchronization semaphores. Must not be freed manually. Must be waited on - * and signalled at every queue submission. - * Could be less than the amount of images: either one per VkDeviceMemory - * or one for the entire frame. All others will be set to VK_NULL_HANDLE. - */ - VkSemaphore sem[AV_NUM_DATA_POINTERS]; - - /** - * Internal data. - */ - struct AVVkFrameInternal *internal; -} AVVkFrame; - -/** - * Allocates a single AVVkFrame and initializes everything as 0. - * @note Must be freed via av_free() - */ -AVVkFrame *av_vk_frame_alloc(void); - -/** - * Returns the format of each image up to the number of planes for a given sw_format. - * Returns NULL on unsupported formats. - */ -const VkFormat *av_vkfmt_from_pixfmt(enum AVPixelFormat p); - -#endif /* AVUTIL_HWCONTEXT_VULKAN_H */ diff --git a/prebuilts/aarch64/include/libavutil/imgutils.h b/prebuilts/aarch64/include/libavutil/imgutils.h deleted file mode 100644 index 5eccbf0..0000000 --- a/prebuilts/aarch64/include/libavutil/imgutils.h +++ /dev/null @@ -1,291 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_IMGUTILS_H -#define AVUTIL_IMGUTILS_H - -/** - * @file - * misc image utilities - * - * @addtogroup lavu_picture - * @{ - */ - -#include "avutil.h" -#include "pixdesc.h" -#include "rational.h" - -/** - * Compute the max pixel step for each plane of an image with a - * format described by pixdesc. - * - * The pixel step is the distance in bytes between the first byte of - * the group of bytes which describe a pixel component and the first - * byte of the successive group in the same plane for the same - * component. - * - * @param max_pixsteps an array which is filled with the max pixel step - * for each plane. Since a plane may contain different pixel - * components, the computed max_pixsteps[plane] is relative to the - * component in the plane with the max pixel step. - * @param max_pixstep_comps an array which is filled with the component - * for each plane which has the max pixel step. May be NULL. - */ -void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4], - const AVPixFmtDescriptor *pixdesc); - -/** - * Compute the size of an image line with format pix_fmt and width - * width for the plane plane. - * - * @return the computed size in bytes - */ -int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane); - -/** - * Fill plane linesizes for an image with pixel format pix_fmt and - * width width. - * - * @param linesizes array to be filled with the linesize for each plane - * @return >= 0 in case of success, a negative error code otherwise - */ -int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width); - -/** - * Fill plane sizes for an image with pixel format pix_fmt and height height. - * - * @param size the array to be filled with the size of each image plane - * @param linesizes the array containing the linesize for each - * plane, should be filled by av_image_fill_linesizes() - * @return >= 0 in case of success, a negative error code otherwise - * - * @note The linesize parameters have the type ptrdiff_t here, while they are - * int for av_image_fill_linesizes(). - */ -int av_image_fill_plane_sizes(size_t size[4], enum AVPixelFormat pix_fmt, - int height, const ptrdiff_t linesizes[4]); - -/** - * Fill plane data pointers for an image with pixel format pix_fmt and - * height height. - * - * @param data pointers array to be filled with the pointer for each image plane - * @param ptr the pointer to a buffer which will contain the image - * @param linesizes the array containing the linesize for each - * plane, should be filled by av_image_fill_linesizes() - * @return the size in bytes required for the image buffer, a negative - * error code in case of failure - */ -int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int height, - uint8_t *ptr, const int linesizes[4]); - -/** - * Allocate an image with size w and h and pixel format pix_fmt, and - * fill pointers and linesizes accordingly. - * The allocated image buffer has to be freed by using - * av_freep(&pointers[0]). - * - * @param align the value to use for buffer size alignment - * @return the size in bytes required for the image buffer, a negative - * error code in case of failure - */ -int av_image_alloc(uint8_t *pointers[4], int linesizes[4], - int w, int h, enum AVPixelFormat pix_fmt, int align); - -/** - * Copy image plane from src to dst. - * That is, copy "height" number of lines of "bytewidth" bytes each. - * The first byte of each successive line is separated by *_linesize - * bytes. - * - * bytewidth must be contained by both absolute values of dst_linesize - * and src_linesize, otherwise the function behavior is undefined. - * - * @param dst_linesize linesize for the image plane in dst - * @param src_linesize linesize for the image plane in src - */ -void av_image_copy_plane(uint8_t *dst, int dst_linesize, - const uint8_t *src, int src_linesize, - int bytewidth, int height); - -/** - * Copy image in src_data to dst_data. - * - * @param dst_linesizes linesizes for the image in dst_data - * @param src_linesizes linesizes for the image in src_data - */ -void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], - const uint8_t *src_data[4], const int src_linesizes[4], - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Copy image data located in uncacheable (e.g. GPU mapped) memory. Where - * available, this function will use special functionality for reading from such - * memory, which may result in greatly improved performance compared to plain - * av_image_copy(). - * - * The data pointers and the linesizes must be aligned to the maximum required - * by the CPU architecture. - * - * @note The linesize parameters have the type ptrdiff_t here, while they are - * int for av_image_copy(). - * @note On x86, the linesizes currently need to be aligned to the cacheline - * size (i.e. 64) to get improved performance. - */ -void av_image_copy_uc_from(uint8_t *dst_data[4], const ptrdiff_t dst_linesizes[4], - const uint8_t *src_data[4], const ptrdiff_t src_linesizes[4], - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Setup the data pointers and linesizes based on the specified image - * parameters and the provided array. - * - * The fields of the given image are filled in by using the src - * address which points to the image data buffer. Depending on the - * specified pixel format, one or multiple image data pointers and - * line sizes will be set. If a planar format is specified, several - * pointers will be set pointing to the different picture planes and - * the line sizes of the different planes will be stored in the - * lines_sizes array. Call with src == NULL to get the required - * size for the src buffer. - * - * To allocate the buffer and fill in the dst_data and dst_linesize in - * one call, use av_image_alloc(). - * - * @param dst_data data pointers to be filled in - * @param dst_linesize linesizes for the image in dst_data to be filled in - * @param src buffer which will contain or contains the actual image data, can be NULL - * @param pix_fmt the pixel format of the image - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @param align the value used in src for linesize alignment - * @return the size in bytes required for src, a negative error code - * in case of failure - */ -int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], - const uint8_t *src, - enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Return the size in bytes of the amount of data required to store an - * image with the given parameters. - * - * @param pix_fmt the pixel format of the image - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @param align the assumed linesize alignment - * @return the buffer size in bytes, a negative error code in case of failure - */ -int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Copy image data from an image into a buffer. - * - * av_image_get_buffer_size() can be used to compute the required size - * for the buffer to fill. - * - * @param dst a buffer into which picture data will be copied - * @param dst_size the size in bytes of dst - * @param src_data pointers containing the source image data - * @param src_linesize linesizes for the image in src_data - * @param pix_fmt the pixel format of the source image - * @param width the width of the source image in pixels - * @param height the height of the source image in pixels - * @param align the assumed linesize alignment for dst - * @return the number of bytes written to dst, or a negative value - * (error code) on error - */ -int av_image_copy_to_buffer(uint8_t *dst, int dst_size, - const uint8_t * const src_data[4], const int src_linesize[4], - enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Check if the given dimension of an image is valid, meaning that all - * bytes of the image can be addressed with a signed int. - * - * @param w the width of the picture - * @param h the height of the picture - * @param log_offset the offset to sum to the log level for logging with log_ctx - * @param log_ctx the parent logging context, it may be NULL - * @return >= 0 if valid, a negative error code otherwise - */ -int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx); - -/** - * Check if the given dimension of an image is valid, meaning that all - * bytes of a plane of an image with the specified pix_fmt can be addressed - * with a signed int. - * - * @param w the width of the picture - * @param h the height of the picture - * @param max_pixels the maximum number of pixels the user wants to accept - * @param pix_fmt the pixel format, can be AV_PIX_FMT_NONE if unknown. - * @param log_offset the offset to sum to the log level for logging with log_ctx - * @param log_ctx the parent logging context, it may be NULL - * @return >= 0 if valid, a negative error code otherwise - */ -int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx); - -/** - * Check if the given sample aspect ratio of an image is valid. - * - * It is considered invalid if the denominator is 0 or if applying the ratio - * to the image size would make the smaller dimension less than 1. If the - * sar numerator is 0, it is considered unknown and will return as valid. - * - * @param w width of the image - * @param h height of the image - * @param sar sample aspect ratio of the image - * @return 0 if valid, a negative AVERROR code otherwise - */ -int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar); - -/** - * Overwrite the image data with black. This is suitable for filling a - * sub-rectangle of an image, meaning the padding between the right most pixel - * and the left most pixel on the next line will not be overwritten. For some - * formats, the image size might be rounded up due to inherent alignment. - * - * If the pixel format has alpha, the alpha is cleared to opaque. - * - * This can return an error if the pixel format is not supported. Normally, all - * non-hwaccel pixel formats should be supported. - * - * Passing NULL for dst_data is allowed. Then the function returns whether the - * operation would have succeeded. (It can return an error if the pix_fmt is - * not supported.) - * - * @param dst_data data pointers to destination image - * @param dst_linesize linesizes for the destination image - * @param pix_fmt the pixel format of the image - * @param range the color range of the image (important for colorspaces such as YUV) - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @return 0 if the image data was cleared, a negative AVERROR code otherwise - */ -int av_image_fill_black(uint8_t *dst_data[4], const ptrdiff_t dst_linesize[4], - enum AVPixelFormat pix_fmt, enum AVColorRange range, - int width, int height); - -/** - * @} - */ - - -#endif /* AVUTIL_IMGUTILS_H */ diff --git a/prebuilts/aarch64/include/libavutil/intfloat.h b/prebuilts/aarch64/include/libavutil/intfloat.h deleted file mode 100644 index fe3d7ec..0000000 --- a/prebuilts/aarch64/include/libavutil/intfloat.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2011 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_INTFLOAT_H -#define AVUTIL_INTFLOAT_H - -#include -#include "attributes.h" - -union av_intfloat32 { - uint32_t i; - float f; -}; - -union av_intfloat64 { - uint64_t i; - double f; -}; - -/** - * Reinterpret a 32-bit integer as a float. - */ -static av_always_inline float av_int2float(uint32_t i) -{ - union av_intfloat32 v; - v.i = i; - return v.f; -} - -/** - * Reinterpret a float as a 32-bit integer. - */ -static av_always_inline uint32_t av_float2int(float f) -{ - union av_intfloat32 v; - v.f = f; - return v.i; -} - -/** - * Reinterpret a 64-bit integer as a double. - */ -static av_always_inline double av_int2double(uint64_t i) -{ - union av_intfloat64 v; - v.i = i; - return v.f; -} - -/** - * Reinterpret a double as a 64-bit integer. - */ -static av_always_inline uint64_t av_double2int(double f) -{ - union av_intfloat64 v; - v.f = f; - return v.i; -} - -#endif /* AVUTIL_INTFLOAT_H */ diff --git a/prebuilts/aarch64/include/libavutil/intreadwrite.h b/prebuilts/aarch64/include/libavutil/intreadwrite.h deleted file mode 100644 index 4c8413a..0000000 --- a/prebuilts/aarch64/include/libavutil/intreadwrite.h +++ /dev/null @@ -1,644 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_INTREADWRITE_H -#define AVUTIL_INTREADWRITE_H - -#include -#include "libavutil/avconfig.h" -#include "attributes.h" -#include "bswap.h" - -typedef union { - uint64_t u64; - uint32_t u32[2]; - uint16_t u16[4]; - uint8_t u8 [8]; - double f64; - float f32[2]; -} av_alias av_alias64; - -typedef union { - uint32_t u32; - uint16_t u16[2]; - uint8_t u8 [4]; - float f32; -} av_alias av_alias32; - -typedef union { - uint16_t u16; - uint8_t u8 [2]; -} av_alias av_alias16; - -/* - * Arch-specific headers can provide any combination of - * AV_[RW][BLN](16|24|32|48|64) and AV_(COPY|SWAP|ZERO)(64|128) macros. - * Preprocessor symbols must be defined, even if these are implemented - * as inline functions. - * - * R/W means read/write, B/L/N means big/little/native endianness. - * The following macros require aligned access, compared to their - * unaligned variants: AV_(COPY|SWAP|ZERO)(64|128), AV_[RW]N[8-64]A. - * Incorrect usage may range from abysmal performance to crash - * depending on the platform. - * - * The unaligned variants are AV_[RW][BLN][8-64] and AV_COPY*U. - */ - -#ifdef HAVE_AV_CONFIG_H - -#include "config.h" - -#if ARCH_ARM -# include "arm/intreadwrite.h" -#elif ARCH_AVR32 -# include "avr32/intreadwrite.h" -#elif ARCH_MIPS -# include "mips/intreadwrite.h" -#elif ARCH_PPC -# include "ppc/intreadwrite.h" -#elif ARCH_TOMI -# include "tomi/intreadwrite.h" -#elif ARCH_X86 -# include "x86/intreadwrite.h" -#endif - -#endif /* HAVE_AV_CONFIG_H */ - -/* - * Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers. - */ - -#if AV_HAVE_BIGENDIAN - -# if defined(AV_RN16) && !defined(AV_RB16) -# define AV_RB16(p) AV_RN16(p) -# elif !defined(AV_RN16) && defined(AV_RB16) -# define AV_RN16(p) AV_RB16(p) -# endif - -# if defined(AV_WN16) && !defined(AV_WB16) -# define AV_WB16(p, v) AV_WN16(p, v) -# elif !defined(AV_WN16) && defined(AV_WB16) -# define AV_WN16(p, v) AV_WB16(p, v) -# endif - -# if defined(AV_RN24) && !defined(AV_RB24) -# define AV_RB24(p) AV_RN24(p) -# elif !defined(AV_RN24) && defined(AV_RB24) -# define AV_RN24(p) AV_RB24(p) -# endif - -# if defined(AV_WN24) && !defined(AV_WB24) -# define AV_WB24(p, v) AV_WN24(p, v) -# elif !defined(AV_WN24) && defined(AV_WB24) -# define AV_WN24(p, v) AV_WB24(p, v) -# endif - -# if defined(AV_RN32) && !defined(AV_RB32) -# define AV_RB32(p) AV_RN32(p) -# elif !defined(AV_RN32) && defined(AV_RB32) -# define AV_RN32(p) AV_RB32(p) -# endif - -# if defined(AV_WN32) && !defined(AV_WB32) -# define AV_WB32(p, v) AV_WN32(p, v) -# elif !defined(AV_WN32) && defined(AV_WB32) -# define AV_WN32(p, v) AV_WB32(p, v) -# endif - -# if defined(AV_RN48) && !defined(AV_RB48) -# define AV_RB48(p) AV_RN48(p) -# elif !defined(AV_RN48) && defined(AV_RB48) -# define AV_RN48(p) AV_RB48(p) -# endif - -# if defined(AV_WN48) && !defined(AV_WB48) -# define AV_WB48(p, v) AV_WN48(p, v) -# elif !defined(AV_WN48) && defined(AV_WB48) -# define AV_WN48(p, v) AV_WB48(p, v) -# endif - -# if defined(AV_RN64) && !defined(AV_RB64) -# define AV_RB64(p) AV_RN64(p) -# elif !defined(AV_RN64) && defined(AV_RB64) -# define AV_RN64(p) AV_RB64(p) -# endif - -# if defined(AV_WN64) && !defined(AV_WB64) -# define AV_WB64(p, v) AV_WN64(p, v) -# elif !defined(AV_WN64) && defined(AV_WB64) -# define AV_WN64(p, v) AV_WB64(p, v) -# endif - -#else /* AV_HAVE_BIGENDIAN */ - -# if defined(AV_RN16) && !defined(AV_RL16) -# define AV_RL16(p) AV_RN16(p) -# elif !defined(AV_RN16) && defined(AV_RL16) -# define AV_RN16(p) AV_RL16(p) -# endif - -# if defined(AV_WN16) && !defined(AV_WL16) -# define AV_WL16(p, v) AV_WN16(p, v) -# elif !defined(AV_WN16) && defined(AV_WL16) -# define AV_WN16(p, v) AV_WL16(p, v) -# endif - -# if defined(AV_RN24) && !defined(AV_RL24) -# define AV_RL24(p) AV_RN24(p) -# elif !defined(AV_RN24) && defined(AV_RL24) -# define AV_RN24(p) AV_RL24(p) -# endif - -# if defined(AV_WN24) && !defined(AV_WL24) -# define AV_WL24(p, v) AV_WN24(p, v) -# elif !defined(AV_WN24) && defined(AV_WL24) -# define AV_WN24(p, v) AV_WL24(p, v) -# endif - -# if defined(AV_RN32) && !defined(AV_RL32) -# define AV_RL32(p) AV_RN32(p) -# elif !defined(AV_RN32) && defined(AV_RL32) -# define AV_RN32(p) AV_RL32(p) -# endif - -# if defined(AV_WN32) && !defined(AV_WL32) -# define AV_WL32(p, v) AV_WN32(p, v) -# elif !defined(AV_WN32) && defined(AV_WL32) -# define AV_WN32(p, v) AV_WL32(p, v) -# endif - -# if defined(AV_RN48) && !defined(AV_RL48) -# define AV_RL48(p) AV_RN48(p) -# elif !defined(AV_RN48) && defined(AV_RL48) -# define AV_RN48(p) AV_RL48(p) -# endif - -# if defined(AV_WN48) && !defined(AV_WL48) -# define AV_WL48(p, v) AV_WN48(p, v) -# elif !defined(AV_WN48) && defined(AV_WL48) -# define AV_WN48(p, v) AV_WL48(p, v) -# endif - -# if defined(AV_RN64) && !defined(AV_RL64) -# define AV_RL64(p) AV_RN64(p) -# elif !defined(AV_RN64) && defined(AV_RL64) -# define AV_RN64(p) AV_RL64(p) -# endif - -# if defined(AV_WN64) && !defined(AV_WL64) -# define AV_WL64(p, v) AV_WN64(p, v) -# elif !defined(AV_WN64) && defined(AV_WL64) -# define AV_WN64(p, v) AV_WL64(p, v) -# endif - -#endif /* !AV_HAVE_BIGENDIAN */ - -/* - * Define AV_[RW]N helper macros to simplify definitions not provided - * by per-arch headers. - */ - -#if defined(__GNUC__) - -union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias; -union unaligned_32 { uint32_t l; } __attribute__((packed)) av_alias; -union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; - -# define AV_RN(s, p) (((const union unaligned_##s *) (p))->l) -# define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v)) - -#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_X64) || defined(_M_ARM64)) && AV_HAVE_FAST_UNALIGNED - -# define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p))) -# define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v)) - -#elif AV_HAVE_FAST_UNALIGNED - -# define AV_RN(s, p) (((const av_alias##s*)(p))->u##s) -# define AV_WN(s, p, v) (((av_alias##s*)(p))->u##s = (v)) - -#else - -#ifndef AV_RB16 -# define AV_RB16(x) \ - ((((const uint8_t*)(x))[0] << 8) | \ - ((const uint8_t*)(x))[1]) -#endif -#ifndef AV_WB16 -# define AV_WB16(p, val) do { \ - uint16_t d = (val); \ - ((uint8_t*)(p))[1] = (d); \ - ((uint8_t*)(p))[0] = (d)>>8; \ - } while(0) -#endif - -#ifndef AV_RL16 -# define AV_RL16(x) \ - ((((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL16 -# define AV_WL16(p, val) do { \ - uint16_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - } while(0) -#endif - -#ifndef AV_RB32 -# define AV_RB32(x) \ - (((uint32_t)((const uint8_t*)(x))[0] << 24) | \ - (((const uint8_t*)(x))[1] << 16) | \ - (((const uint8_t*)(x))[2] << 8) | \ - ((const uint8_t*)(x))[3]) -#endif -#ifndef AV_WB32 -# define AV_WB32(p, val) do { \ - uint32_t d = (val); \ - ((uint8_t*)(p))[3] = (d); \ - ((uint8_t*)(p))[2] = (d)>>8; \ - ((uint8_t*)(p))[1] = (d)>>16; \ - ((uint8_t*)(p))[0] = (d)>>24; \ - } while(0) -#endif - -#ifndef AV_RL32 -# define AV_RL32(x) \ - (((uint32_t)((const uint8_t*)(x))[3] << 24) | \ - (((const uint8_t*)(x))[2] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL32 -# define AV_WL32(p, val) do { \ - uint32_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - } while(0) -#endif - -#ifndef AV_RB64 -# define AV_RB64(x) \ - (((uint64_t)((const uint8_t*)(x))[0] << 56) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 48) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[5] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[6] << 8) | \ - (uint64_t)((const uint8_t*)(x))[7]) -#endif -#ifndef AV_WB64 -# define AV_WB64(p, val) do { \ - uint64_t d = (val); \ - ((uint8_t*)(p))[7] = (d); \ - ((uint8_t*)(p))[6] = (d)>>8; \ - ((uint8_t*)(p))[5] = (d)>>16; \ - ((uint8_t*)(p))[4] = (d)>>24; \ - ((uint8_t*)(p))[3] = (d)>>32; \ - ((uint8_t*)(p))[2] = (d)>>40; \ - ((uint8_t*)(p))[1] = (d)>>48; \ - ((uint8_t*)(p))[0] = (d)>>56; \ - } while(0) -#endif - -#ifndef AV_RL64 -# define AV_RL64(x) \ - (((uint64_t)((const uint8_t*)(x))[7] << 56) | \ - ((uint64_t)((const uint8_t*)(x))[6] << 48) | \ - ((uint64_t)((const uint8_t*)(x))[5] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ - (uint64_t)((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL64 -# define AV_WL64(p, val) do { \ - uint64_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - ((uint8_t*)(p))[4] = (d)>>32; \ - ((uint8_t*)(p))[5] = (d)>>40; \ - ((uint8_t*)(p))[6] = (d)>>48; \ - ((uint8_t*)(p))[7] = (d)>>56; \ - } while(0) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RN(s, p) AV_RB##s(p) -# define AV_WN(s, p, v) AV_WB##s(p, v) -#else -# define AV_RN(s, p) AV_RL##s(p) -# define AV_WN(s, p, v) AV_WL##s(p, v) -#endif - -#endif /* HAVE_FAST_UNALIGNED */ - -#ifndef AV_RN16 -# define AV_RN16(p) AV_RN(16, p) -#endif - -#ifndef AV_RN32 -# define AV_RN32(p) AV_RN(32, p) -#endif - -#ifndef AV_RN64 -# define AV_RN64(p) AV_RN(64, p) -#endif - -#ifndef AV_WN16 -# define AV_WN16(p, v) AV_WN(16, p, v) -#endif - -#ifndef AV_WN32 -# define AV_WN32(p, v) AV_WN(32, p, v) -#endif - -#ifndef AV_WN64 -# define AV_WN64(p, v) AV_WN(64, p, v) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RB(s, p) AV_RN##s(p) -# define AV_WB(s, p, v) AV_WN##s(p, v) -# define AV_RL(s, p) av_bswap##s(AV_RN##s(p)) -# define AV_WL(s, p, v) AV_WN##s(p, av_bswap##s(v)) -#else -# define AV_RB(s, p) av_bswap##s(AV_RN##s(p)) -# define AV_WB(s, p, v) AV_WN##s(p, av_bswap##s(v)) -# define AV_RL(s, p) AV_RN##s(p) -# define AV_WL(s, p, v) AV_WN##s(p, v) -#endif - -#define AV_RB8(x) (((const uint8_t*)(x))[0]) -#define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0) - -#define AV_RL8(x) AV_RB8(x) -#define AV_WL8(p, d) AV_WB8(p, d) - -#ifndef AV_RB16 -# define AV_RB16(p) AV_RB(16, p) -#endif -#ifndef AV_WB16 -# define AV_WB16(p, v) AV_WB(16, p, v) -#endif - -#ifndef AV_RL16 -# define AV_RL16(p) AV_RL(16, p) -#endif -#ifndef AV_WL16 -# define AV_WL16(p, v) AV_WL(16, p, v) -#endif - -#ifndef AV_RB32 -# define AV_RB32(p) AV_RB(32, p) -#endif -#ifndef AV_WB32 -# define AV_WB32(p, v) AV_WB(32, p, v) -#endif - -#ifndef AV_RL32 -# define AV_RL32(p) AV_RL(32, p) -#endif -#ifndef AV_WL32 -# define AV_WL32(p, v) AV_WL(32, p, v) -#endif - -#ifndef AV_RB64 -# define AV_RB64(p) AV_RB(64, p) -#endif -#ifndef AV_WB64 -# define AV_WB64(p, v) AV_WB(64, p, v) -#endif - -#ifndef AV_RL64 -# define AV_RL64(p) AV_RL(64, p) -#endif -#ifndef AV_WL64 -# define AV_WL64(p, v) AV_WL(64, p, v) -#endif - -#ifndef AV_RB24 -# define AV_RB24(x) \ - ((((const uint8_t*)(x))[0] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[2]) -#endif -#ifndef AV_WB24 -# define AV_WB24(p, d) do { \ - ((uint8_t*)(p))[2] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[0] = (d)>>16; \ - } while(0) -#endif - -#ifndef AV_RL24 -# define AV_RL24(x) \ - ((((const uint8_t*)(x))[2] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL24 -# define AV_WL24(p, d) do { \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - } while(0) -#endif - -#ifndef AV_RB48 -# define AV_RB48(x) \ - (((uint64_t)((const uint8_t*)(x))[0] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 8) | \ - (uint64_t)((const uint8_t*)(x))[5]) -#endif -#ifndef AV_WB48 -# define AV_WB48(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[5] = (d); \ - ((uint8_t*)(p))[4] = (d)>>8; \ - ((uint8_t*)(p))[3] = (d)>>16; \ - ((uint8_t*)(p))[2] = (d)>>24; \ - ((uint8_t*)(p))[1] = (d)>>32; \ - ((uint8_t*)(p))[0] = (d)>>40; \ - } while(0) -#endif - -#ifndef AV_RL48 -# define AV_RL48(x) \ - (((uint64_t)((const uint8_t*)(x))[5] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ - (uint64_t)((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL48 -# define AV_WL48(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - ((uint8_t*)(p))[4] = (d)>>32; \ - ((uint8_t*)(p))[5] = (d)>>40; \ - } while(0) -#endif - -/* - * The AV_[RW]NA macros access naturally aligned data - * in a type-safe way. - */ - -#define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s) -#define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v)) - -#ifndef AV_RN16A -# define AV_RN16A(p) AV_RNA(16, p) -#endif - -#ifndef AV_RN32A -# define AV_RN32A(p) AV_RNA(32, p) -#endif - -#ifndef AV_RN64A -# define AV_RN64A(p) AV_RNA(64, p) -#endif - -#ifndef AV_WN16A -# define AV_WN16A(p, v) AV_WNA(16, p, v) -#endif - -#ifndef AV_WN32A -# define AV_WN32A(p, v) AV_WNA(32, p, v) -#endif - -#ifndef AV_WN64A -# define AV_WN64A(p, v) AV_WNA(64, p, v) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RLA(s, p) av_bswap##s(AV_RN##s##A(p)) -# define AV_WLA(s, p, v) AV_WN##s##A(p, av_bswap##s(v)) -#else -# define AV_RLA(s, p) AV_RN##s##A(p) -# define AV_WLA(s, p, v) AV_WN##s##A(p, v) -#endif - -#ifndef AV_RL64A -# define AV_RL64A(p) AV_RLA(64, p) -#endif -#ifndef AV_WL64A -# define AV_WL64A(p, v) AV_WLA(64, p, v) -#endif - -/* - * The AV_COPYxxU macros are suitable for copying data to/from unaligned - * memory locations. - */ - -#define AV_COPYU(n, d, s) AV_WN##n(d, AV_RN##n(s)); - -#ifndef AV_COPY16U -# define AV_COPY16U(d, s) AV_COPYU(16, d, s) -#endif - -#ifndef AV_COPY32U -# define AV_COPY32U(d, s) AV_COPYU(32, d, s) -#endif - -#ifndef AV_COPY64U -# define AV_COPY64U(d, s) AV_COPYU(64, d, s) -#endif - -#ifndef AV_COPY128U -# define AV_COPY128U(d, s) \ - do { \ - AV_COPY64U(d, s); \ - AV_COPY64U((char *)(d) + 8, (const char *)(s) + 8); \ - } while(0) -#endif - -/* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be - * naturally aligned. They may be implemented using MMX, - * so emms_c() must be called before using any float code - * afterwards. - */ - -#define AV_COPY(n, d, s) \ - (((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n) - -#ifndef AV_COPY16 -# define AV_COPY16(d, s) AV_COPY(16, d, s) -#endif - -#ifndef AV_COPY32 -# define AV_COPY32(d, s) AV_COPY(32, d, s) -#endif - -#ifndef AV_COPY64 -# define AV_COPY64(d, s) AV_COPY(64, d, s) -#endif - -#ifndef AV_COPY128 -# define AV_COPY128(d, s) \ - do { \ - AV_COPY64(d, s); \ - AV_COPY64((char*)(d)+8, (char*)(s)+8); \ - } while(0) -#endif - -#define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*)(b)) - -#ifndef AV_SWAP64 -# define AV_SWAP64(a, b) AV_SWAP(64, a, b) -#endif - -#define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0) - -#ifndef AV_ZERO16 -# define AV_ZERO16(d) AV_ZERO(16, d) -#endif - -#ifndef AV_ZERO32 -# define AV_ZERO32(d) AV_ZERO(32, d) -#endif - -#ifndef AV_ZERO64 -# define AV_ZERO64(d) AV_ZERO(64, d) -#endif - -#ifndef AV_ZERO128 -# define AV_ZERO128(d) \ - do { \ - AV_ZERO64(d); \ - AV_ZERO64((char*)(d)+8); \ - } while(0) -#endif - -#endif /* AVUTIL_INTREADWRITE_H */ diff --git a/prebuilts/aarch64/include/libavutil/lfg.h b/prebuilts/aarch64/include/libavutil/lfg.h deleted file mode 100644 index 2b66920..0000000 --- a/prebuilts/aarch64/include/libavutil/lfg.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Lagged Fibonacci PRNG - * Copyright (c) 2008 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LFG_H -#define AVUTIL_LFG_H - -#include - -/** - * Context structure for the Lagged Fibonacci PRNG. - * The exact layout, types and content of this struct may change and should - * not be accessed directly. Only its sizeof() is guranteed to stay the same - * to allow easy instanciation. - */ -typedef struct AVLFG { - unsigned int state[64]; - int index; -} AVLFG; - -void av_lfg_init(AVLFG *c, unsigned int seed); - -/** - * Seed the state of the ALFG using binary data. - * - * Return value: 0 on success, negative value (AVERROR) on failure. - */ -int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length); - -/** - * Get the next random unsigned 32-bit number using an ALFG. - * - * Please also consider a simple LCG like state= state*1664525+1013904223, - * it may be good enough and faster for your specific use case. - */ -static inline unsigned int av_lfg_get(AVLFG *c){ - unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63]; - c->index += 1U; - return a; -} - -/** - * Get the next random unsigned 32-bit number using a MLFG. - * - * Please also consider av_lfg_get() above, it is faster. - */ -static inline unsigned int av_mlfg_get(AVLFG *c){ - unsigned int a= c->state[(c->index-55) & 63]; - unsigned int b= c->state[(c->index-24) & 63]; - a = c->state[c->index & 63] = 2*a*b+a+b; - c->index += 1U; - return a; -} - -/** - * Get the next two numbers generated by a Box-Muller Gaussian - * generator using the random numbers issued by lfg. - * - * @param out array where the two generated numbers are placed - */ -void av_bmg_get(AVLFG *lfg, double out[2]); - -#endif /* AVUTIL_LFG_H */ diff --git a/prebuilts/aarch64/include/libavutil/log.h b/prebuilts/aarch64/include/libavutil/log.h deleted file mode 100644 index 8edd6bb..0000000 --- a/prebuilts/aarch64/include/libavutil/log.h +++ /dev/null @@ -1,401 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LOG_H -#define AVUTIL_LOG_H - -#include -#include "avutil.h" -#include "attributes.h" -#include "version.h" - -typedef enum { - AV_CLASS_CATEGORY_NA = 0, - AV_CLASS_CATEGORY_INPUT, - AV_CLASS_CATEGORY_OUTPUT, - AV_CLASS_CATEGORY_MUXER, - AV_CLASS_CATEGORY_DEMUXER, - AV_CLASS_CATEGORY_ENCODER, - AV_CLASS_CATEGORY_DECODER, - AV_CLASS_CATEGORY_FILTER, - AV_CLASS_CATEGORY_BITSTREAM_FILTER, - AV_CLASS_CATEGORY_SWSCALER, - AV_CLASS_CATEGORY_SWRESAMPLER, - AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT = 40, - AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, - AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, - AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT, - AV_CLASS_CATEGORY_DEVICE_OUTPUT, - AV_CLASS_CATEGORY_DEVICE_INPUT, - AV_CLASS_CATEGORY_NB ///< not part of ABI/API -}AVClassCategory; - -#define AV_IS_INPUT_DEVICE(category) \ - (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_INPUT)) - -#define AV_IS_OUTPUT_DEVICE(category) \ - (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_OUTPUT)) - -struct AVOptionRanges; - -/** - * Describe the class of an AVClass context structure. That is an - * arbitrary struct of which the first field is a pointer to an - * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). - */ -typedef struct AVClass { - /** - * The name of the class; usually it is the same name as the - * context structure type to which the AVClass is associated. - */ - const char* class_name; - - /** - * A pointer to a function which returns the name of a context - * instance ctx associated with the class. - */ - const char* (*item_name)(void* ctx); - - /** - * a pointer to the first option specified in the class if any or NULL - * - * @see av_set_default_options() - */ - const struct AVOption *option; - - /** - * LIBAVUTIL_VERSION with which this structure was created. - * This is used to allow fields to be added without requiring major - * version bumps everywhere. - */ - - int version; - - /** - * Offset in the structure where log_level_offset is stored. - * 0 means there is no such variable - */ - int log_level_offset_offset; - - /** - * Offset in the structure where a pointer to the parent context for - * logging is stored. For example a decoder could pass its AVCodecContext - * to eval as such a parent context, which an av_log() implementation - * could then leverage to display the parent context. - * The offset can be NULL. - */ - int parent_log_context_offset; - - /** - * Return next AVOptions-enabled child or NULL - */ - void* (*child_next)(void *obj, void *prev); - -#if FF_API_CHILD_CLASS_NEXT - /** - * Return an AVClass corresponding to the next potential - * AVOptions-enabled child. - * - * The difference between child_next and this is that - * child_next iterates over _already existing_ objects, while - * child_class_next iterates over _all possible_ children. - */ - attribute_deprecated - const struct AVClass* (*child_class_next)(const struct AVClass *prev); -#endif - - /** - * Category used for visualization (like color) - * This is only set if the category is equal for all objects using this class. - * available since version (51 << 16 | 56 << 8 | 100) - */ - AVClassCategory category; - - /** - * Callback to return the category. - * available since version (51 << 16 | 59 << 8 | 100) - */ - AVClassCategory (*get_category)(void* ctx); - - /** - * Callback to return the supported/allowed ranges. - * available since version (52.12) - */ - int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags); - - /** - * Iterate over the AVClasses corresponding to potential AVOptions-enabled - * children. - * - * @param iter pointer to opaque iteration state. The caller must initialize - * *iter to NULL before the first call. - * @return AVClass for the next AVOptions-enabled child or NULL if there are - * no more such children. - * - * @note The difference between child_next and this is that child_next - * iterates over _already existing_ objects, while child_class_iterate - * iterates over _all possible_ children. - */ - const struct AVClass* (*child_class_iterate)(void **iter); -} AVClass; - -/** - * @addtogroup lavu_log - * - * @{ - * - * @defgroup lavu_log_constants Logging Constants - * - * @{ - */ - -/** - * Print no output. - */ -#define AV_LOG_QUIET -8 - -/** - * Something went really wrong and we will crash now. - */ -#define AV_LOG_PANIC 0 - -/** - * Something went wrong and recovery is not possible. - * For example, no header was found for a format which depends - * on headers or an illegal combination of parameters is used. - */ -#define AV_LOG_FATAL 8 - -/** - * Something went wrong and cannot losslessly be recovered. - * However, not all future data is affected. - */ -#define AV_LOG_ERROR 16 - -/** - * Something somehow does not look correct. This may or may not - * lead to problems. An example would be the use of '-vstrict -2'. - */ -#define AV_LOG_WARNING 24 - -/** - * Standard information. - */ -#define AV_LOG_INFO 32 - -/** - * Detailed information. - */ -#define AV_LOG_VERBOSE 40 - -/** - * Stuff which is only useful for libav* developers. - */ -#define AV_LOG_DEBUG 48 - -/** - * Extremely verbose debugging, useful for libav* development. - */ -#define AV_LOG_TRACE 56 - -#define AV_LOG_MAX_OFFSET (AV_LOG_TRACE - AV_LOG_QUIET) - -/** - * @} - */ - -/** - * Sets additional colors for extended debugging sessions. - * @code - av_log(ctx, AV_LOG_DEBUG|AV_LOG_C(134), "Message in purple\n"); - @endcode - * Requires 256color terminal support. Uses outside debugging is not - * recommended. - */ -#define AV_LOG_C(x) ((x) << 8) - -/** - * Send the specified message to the log if the level is less than or equal - * to the current av_log_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log_set_callback - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct or NULL if general log. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - */ -void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4); - -/** - * Send the specified message to the log once with the initial_level and then with - * the subsequent_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct or NULL if general log. - * @param initial_level importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant" for the first occurance. - * @param subsequent_level importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant" after the first occurance. - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param state a variable to keep trak of if a message has already been printed - * this must be initialized to 0 before the first use. The same state - * must not be accessed by 2 Threads simultaneously. - */ -void av_log_once(void* avcl, int initial_level, int subsequent_level, int *state, const char *fmt, ...) av_printf_format(5, 6); - - -/** - * Send the specified message to the log if the level is less than or equal - * to the current av_log_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log_set_callback - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param vl The arguments referenced by the format string. - */ -void av_vlog(void *avcl, int level, const char *fmt, va_list vl); - -/** - * Get the current log level - * - * @see lavu_log_constants - * - * @return Current log level - */ -int av_log_get_level(void); - -/** - * Set the log level - * - * @see lavu_log_constants - * - * @param level Logging level - */ -void av_log_set_level(int level); - -/** - * Set the logging callback - * - * @note The callback must be thread safe, even if the application does not use - * threads itself as some codecs are multithreaded. - * - * @see av_log_default_callback - * - * @param callback A logging function with a compatible signature. - */ -void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)); - -/** - * Default logging callback - * - * It prints the message to stderr, optionally colorizing it. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param vl The arguments referenced by the format string. - */ -void av_log_default_callback(void *avcl, int level, const char *fmt, - va_list vl); - -/** - * Return the context name - * - * @param ctx The AVClass context - * - * @return The AVClass class_name - */ -const char* av_default_item_name(void* ctx); -AVClassCategory av_default_get_category(void *ptr); - -/** - * Format a line of log the same way as the default callback. - * @param line buffer to receive the formatted line - * @param line_size size of the buffer - * @param print_prefix used to store whether the prefix must be printed; - * must point to a persistent integer initially set to 1 - */ -void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl, - char *line, int line_size, int *print_prefix); - -/** - * Format a line of log the same way as the default callback. - * @param line buffer to receive the formatted line; - * may be NULL if line_size is 0 - * @param line_size size of the buffer; at most line_size-1 characters will - * be written to the buffer, plus one null terminator - * @param print_prefix used to store whether the prefix must be printed; - * must point to a persistent integer initially set to 1 - * @return Returns a negative value if an error occurred, otherwise returns - * the number of characters that would have been written for a - * sufficiently large buffer, not including the terminating null - * character. If the return value is not less than line_size, it means - * that the log message was truncated to fit the buffer. - */ -int av_log_format_line2(void *ptr, int level, const char *fmt, va_list vl, - char *line, int line_size, int *print_prefix); - -/** - * Skip repeated messages, this requires the user app to use av_log() instead of - * (f)printf as the 2 would otherwise interfere and lead to - * "Last message repeated x times" messages below (f)printf messages with some - * bad luck. - * Also to receive the last, "last repeated" line if any, the user app must - * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end - */ -#define AV_LOG_SKIP_REPEATED 1 - -/** - * Include the log severity in messages originating from codecs. - * - * Results in messages such as: - * [rawvideo @ 0xDEADBEEF] [error] encode did not produce valid pts - */ -#define AV_LOG_PRINT_LEVEL 2 - -void av_log_set_flags(int arg); -int av_log_get_flags(void); - -/** - * @} - */ - -#endif /* AVUTIL_LOG_H */ diff --git a/prebuilts/aarch64/include/libavutil/lzo.h b/prebuilts/aarch64/include/libavutil/lzo.h deleted file mode 100644 index c034039..0000000 --- a/prebuilts/aarch64/include/libavutil/lzo.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * LZO 1x decompression - * copyright (c) 2006 Reimar Doeffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LZO_H -#define AVUTIL_LZO_H - -/** - * @defgroup lavu_lzo LZO - * @ingroup lavu_crypto - * - * @{ - */ - -#include - -/** @name Error flags returned by av_lzo1x_decode - * @{ */ -/// end of the input buffer reached before decoding finished -#define AV_LZO_INPUT_DEPLETED 1 -/// decoded data did not fit into output buffer -#define AV_LZO_OUTPUT_FULL 2 -/// a reference to previously decoded data was wrong -#define AV_LZO_INVALID_BACKPTR 4 -/// a non-specific error in the compressed bitstream -#define AV_LZO_ERROR 8 -/** @} */ - -#define AV_LZO_INPUT_PADDING 8 -#define AV_LZO_OUTPUT_PADDING 12 - -/** - * @brief Decodes LZO 1x compressed data. - * @param out output buffer - * @param outlen size of output buffer, number of bytes left are returned here - * @param in input buffer - * @param inlen size of input buffer, number of bytes left are returned here - * @return 0 on success, otherwise a combination of the error flags above - * - * Make sure all buffers are appropriately padded, in must provide - * AV_LZO_INPUT_PADDING, out must provide AV_LZO_OUTPUT_PADDING additional bytes. - */ -int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen); - -/** - * @} - */ - -#endif /* AVUTIL_LZO_H */ diff --git a/prebuilts/aarch64/include/libavutil/macros.h b/prebuilts/aarch64/include/libavutil/macros.h deleted file mode 100644 index 2007ee5..0000000 --- a/prebuilts/aarch64/include/libavutil/macros.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu - * Utility Preprocessor macros - */ - -#ifndef AVUTIL_MACROS_H -#define AVUTIL_MACROS_H - -/** - * @addtogroup preproc_misc Preprocessor String Macros - * - * 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)) - -#endif /* AVUTIL_MACROS_H */ diff --git a/prebuilts/aarch64/include/libavutil/mastering_display_metadata.h b/prebuilts/aarch64/include/libavutil/mastering_display_metadata.h deleted file mode 100644 index c23b07c..0000000 --- a/prebuilts/aarch64/include/libavutil/mastering_display_metadata.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2016 Neil Birkbeck - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MASTERING_DISPLAY_METADATA_H -#define AVUTIL_MASTERING_DISPLAY_METADATA_H - -#include "frame.h" -#include "rational.h" - - -/** - * Mastering display metadata capable of representing the color volume of - * the display used to master the content (SMPTE 2086:2014). - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with av_mastering_display_metadata_alloc() - * and its size is not a part of the public ABI. - */ -typedef struct AVMasteringDisplayMetadata { - /** - * CIE 1931 xy chromaticity coords of color primaries (r, g, b order). - */ - AVRational display_primaries[3][2]; - - /** - * CIE 1931 xy chromaticity coords of white point. - */ - AVRational white_point[2]; - - /** - * Min luminance of mastering display (cd/m^2). - */ - AVRational min_luminance; - - /** - * Max luminance of mastering display (cd/m^2). - */ - AVRational max_luminance; - - /** - * Flag indicating whether the display primaries (and white point) are set. - */ - int has_primaries; - - /** - * Flag indicating whether the luminance (min_ and max_) have been set. - */ - int has_luminance; - -} AVMasteringDisplayMetadata; - -/** - * Allocate an AVMasteringDisplayMetadata structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVMasteringDisplayMetadata filled with default values or NULL - * on failure. - */ -AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void); - -/** - * Allocate a complete AVMasteringDisplayMetadata and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVMasteringDisplayMetadata structure to be filled by caller. - */ -AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFrame *frame); - -/** - * Content light level needed by to transmit HDR over HDMI (CTA-861.3). - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with av_content_light_metadata_alloc() - * and its size is not a part of the public ABI. - */ -typedef struct AVContentLightMetadata { - /** - * Max content light level (cd/m^2). - */ - unsigned MaxCLL; - - /** - * Max average light level per frame (cd/m^2). - */ - unsigned MaxFALL; -} AVContentLightMetadata; - -/** - * Allocate an AVContentLightMetadata structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVContentLightMetadata filled with default values or NULL - * on failure. - */ -AVContentLightMetadata *av_content_light_metadata_alloc(size_t *size); - -/** - * Allocate a complete AVContentLightMetadata and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVContentLightMetadata structure to be filled by caller. - */ -AVContentLightMetadata *av_content_light_metadata_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_MASTERING_DISPLAY_METADATA_H */ diff --git a/prebuilts/aarch64/include/libavutil/mathematics.h b/prebuilts/aarch64/include/libavutil/mathematics.h deleted file mode 100644 index 64d4137..0000000 --- a/prebuilts/aarch64/include/libavutil/mathematics.h +++ /dev/null @@ -1,243 +0,0 @@ -/* - * copyright (c) 2005-2012 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @addtogroup lavu_math - * Mathematical utilities for working with timestamp and time base. - */ - -#ifndef AVUTIL_MATHEMATICS_H -#define AVUTIL_MATHEMATICS_H - -#include -#include -#include "attributes.h" -#include "rational.h" -#include "intfloat.h" - -#ifndef M_E -#define M_E 2.7182818284590452354 /* e */ -#endif -#ifndef M_LN2 -#define M_LN2 0.69314718055994530942 /* log_e 2 */ -#endif -#ifndef M_LN10 -#define M_LN10 2.30258509299404568402 /* log_e 10 */ -#endif -#ifndef M_LOG2_10 -#define M_LOG2_10 3.32192809488736234787 /* log_2 10 */ -#endif -#ifndef M_PHI -#define M_PHI 1.61803398874989484820 /* phi / golden ratio */ -#endif -#ifndef M_PI -#define M_PI 3.14159265358979323846 /* pi */ -#endif -#ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 /* pi/2 */ -#endif -#ifndef M_SQRT1_2 -#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ -#endif -#ifndef M_SQRT2 -#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ -#endif -#ifndef NAN -#define NAN av_int2float(0x7fc00000) -#endif -#ifndef INFINITY -#define INFINITY av_int2float(0x7f800000) -#endif - -/** - * @addtogroup lavu_math - * - * @{ - */ - -/** - * Rounding methods. - */ -enum AVRounding { - AV_ROUND_ZERO = 0, ///< Round toward zero. - AV_ROUND_INF = 1, ///< Round away from zero. - AV_ROUND_DOWN = 2, ///< Round toward -infinity. - AV_ROUND_UP = 3, ///< Round toward +infinity. - AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero. - /** - * Flag telling rescaling functions to pass `INT64_MIN`/`MAX` through - * unchanged, avoiding special cases for #AV_NOPTS_VALUE. - * - * Unlike other values of the enumeration AVRounding, this value is a - * bitmask that must be used in conjunction with another value of the - * enumeration through a bitwise OR, in order to set behavior for normal - * cases. - * - * @code{.c} - * av_rescale_rnd(3, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); - * // Rescaling 3: - * // Calculating 3 * 1 / 2 - * // 3 / 2 is rounded up to 2 - * // => 2 - * - * av_rescale_rnd(AV_NOPTS_VALUE, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); - * // Rescaling AV_NOPTS_VALUE: - * // AV_NOPTS_VALUE == INT64_MIN - * // AV_NOPTS_VALUE is passed through - * // => AV_NOPTS_VALUE - * @endcode - */ - AV_ROUND_PASS_MINMAX = 8192, -}; - -/** - * Compute the greatest common divisor of two integer operands. - * - * @param a,b Operands - * @return GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0; - * if a == 0 and b == 0, returns 0. - */ -int64_t av_const av_gcd(int64_t a, int64_t b); - -/** - * Rescale a 64-bit integer with rounding to nearest. - * - * The operation is mathematically equivalent to `a * b / c`, but writing that - * directly can overflow. - * - * This function is equivalent to av_rescale_rnd() with #AV_ROUND_NEAR_INF. - * - * @see av_rescale_rnd(), av_rescale_q(), av_rescale_q_rnd() - */ -int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const; - -/** - * Rescale a 64-bit integer with specified rounding. - * - * The operation is mathematically equivalent to `a * b / c`, but writing that - * directly can overflow, and does not support different rounding methods. - * If the result is not representable then INT64_MIN is returned. - * - * @see av_rescale(), av_rescale_q(), av_rescale_q_rnd() - */ -int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd) av_const; - -/** - * Rescale a 64-bit integer by 2 rational numbers. - * - * The operation is mathematically equivalent to `a * bq / cq`. - * - * This function is equivalent to av_rescale_q_rnd() with #AV_ROUND_NEAR_INF. - * - * @see av_rescale(), av_rescale_rnd(), av_rescale_q_rnd() - */ -int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; - -/** - * Rescale a 64-bit integer by 2 rational numbers with specified rounding. - * - * The operation is mathematically equivalent to `a * bq / cq`. - * - * @see av_rescale(), av_rescale_rnd(), av_rescale_q() - */ -int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, - enum AVRounding rnd) av_const; - -/** - * Compare two timestamps each in its own time base. - * - * @return One of the following values: - * - -1 if `ts_a` is before `ts_b` - * - 1 if `ts_a` is after `ts_b` - * - 0 if they represent the same position - * - * @warning - * The result of the function is undefined if one of the timestamps is outside - * the `int64_t` range when represented in the other's timebase. - */ -int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b); - -/** - * Compare the remainders of two integer operands divided by a common divisor. - * - * In other words, compare the least significant `log2(mod)` bits of integers - * `a` and `b`. - * - * @code{.c} - * av_compare_mod(0x11, 0x02, 0x10) < 0 // since 0x11 % 0x10 (0x1) < 0x02 % 0x10 (0x2) - * av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) > 0x02 % 0x20 (0x02) - * @endcode - * - * @param a,b Operands - * @param mod Divisor; must be a power of 2 - * @return - * - a negative value if `a % mod < b % mod` - * - a positive value if `a % mod > b % mod` - * - zero if `a % mod == b % mod` - */ -int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod); - -/** - * Rescale a timestamp while preserving known durations. - * - * This function is designed to be called per audio packet to scale the input - * timestamp to a different time base. Compared to a simple av_rescale_q() - * call, this function is robust against possible inconsistent frame durations. - * - * The `last` parameter is a state variable that must be preserved for all - * subsequent calls for the same stream. For the first call, `*last` should be - * initialized to #AV_NOPTS_VALUE. - * - * @param[in] in_tb Input time base - * @param[in] in_ts Input timestamp - * @param[in] fs_tb Duration time base; typically this is finer-grained - * (greater) than `in_tb` and `out_tb` - * @param[in] duration Duration till the next call to this function (i.e. - * duration of the current packet/frame) - * @param[in,out] last Pointer to a timestamp expressed in terms of - * `fs_tb`, acting as a state variable - * @param[in] out_tb Output timebase - * @return Timestamp expressed in terms of `out_tb` - * - * @note In the context of this function, "duration" is in term of samples, not - * seconds. - */ -int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts, AVRational fs_tb, int duration, int64_t *last, AVRational out_tb); - -/** - * Add a value to a timestamp. - * - * This function guarantees that when the same value is repeatly added that - * no accumulation of rounding errors occurs. - * - * @param[in] ts Input timestamp - * @param[in] ts_tb Input timestamp time base - * @param[in] inc Value to be added - * @param[in] inc_tb Time base of `inc` - */ -int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc); - - -/** - * @} - */ - -#endif /* AVUTIL_MATHEMATICS_H */ diff --git a/prebuilts/aarch64/include/libavutil/md5.h b/prebuilts/aarch64/include/libavutil/md5.h deleted file mode 100644 index ca72ccb..0000000 --- a/prebuilts/aarch64/include/libavutil/md5.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_md5 - * Public header for MD5 hash function implementation. - */ - -#ifndef AVUTIL_MD5_H -#define AVUTIL_MD5_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_md5 MD5 - * @ingroup lavu_hash - * MD5 hash function implementation. - * - * @{ - */ - -extern const int av_md5_size; - -struct AVMD5; - -/** - * Allocate an AVMD5 context. - */ -struct AVMD5 *av_md5_alloc(void); - -/** - * Initialize MD5 hashing. - * - * @param ctx pointer to the function context (of size av_md5_size) - */ -void av_md5_init(struct AVMD5 *ctx); - -/** - * Update hash value. - * - * @param ctx hash function context - * @param src input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, int len); -#else -void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param ctx hash function context - * @param dst buffer where output digest value is stored - */ -void av_md5_final(struct AVMD5 *ctx, uint8_t *dst); - -/** - * Hash an array of data. - * - * @param dst The output buffer to write the digest into - * @param src The data to hash - * @param len The length of the data, in bytes - */ -#if FF_API_CRYPTO_SIZE_T -void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len); -#else -void av_md5_sum(uint8_t *dst, const uint8_t *src, size_t len); -#endif - -/** - * @} - */ - -#endif /* AVUTIL_MD5_H */ diff --git a/prebuilts/aarch64/include/libavutil/mem.h b/prebuilts/aarch64/include/libavutil/mem.h deleted file mode 100644 index e21a1fe..0000000 --- a/prebuilts/aarch64/include/libavutil/mem.h +++ /dev/null @@ -1,706 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_mem - * Memory handling functions - */ - -#ifndef AVUTIL_MEM_H -#define AVUTIL_MEM_H - -#include -#include - -#include "attributes.h" -#include "error.h" -#include "avutil.h" -#include "version.h" - -/** - * @addtogroup lavu_mem - * Utilities for manipulating memory. - * - * FFmpeg has several applications of memory that are not required of a typical - * program. For example, the computing-heavy components like video decoding and - * encoding can be sped up significantly through the use of aligned memory. - * - * However, for each of FFmpeg's applications of memory, there might not be a - * recognized or standardized API for that specific use. Memory alignment, for - * instance, varies wildly depending on operating systems, architectures, and - * compilers. Hence, this component of @ref libavutil is created to make - * dealing with memory consistently possible on all platforms. - * - * @{ - */ - -#if FF_API_DECLARE_ALIGNED -/** - * - * @defgroup lavu_mem_macros Alignment Macros - * Helper macros for declaring aligned variables. - * @{ - */ - -/** - * @def DECLARE_ALIGNED(n,t,v) - * Declare a variable that is aligned in memory. - * - * @code{.c} - * DECLARE_ALIGNED(16, uint16_t, aligned_int) = 42; - * DECLARE_ALIGNED(32, uint8_t, aligned_array)[128]; - * - * // The default-alignment equivalent would be - * uint16_t aligned_int = 42; - * uint8_t aligned_array[128]; - * @endcode - * - * @param n Minimum alignment in bytes - * @param t Type of the variable (or array element) - * @param v Name of the variable - */ - -/** - * @def DECLARE_ASM_ALIGNED(n,t,v) - * Declare an aligned variable appropriate for use in inline assembly code. - * - * @code{.c} - * DECLARE_ASM_ALIGNED(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008); - * @endcode - * - * @param n Minimum alignment in bytes - * @param t Type of the variable (or array element) - * @param v Name of the variable - */ - -/** - * @def DECLARE_ASM_CONST(n,t,v) - * Declare a static constant aligned variable appropriate for use in inline - * assembly code. - * - * @code{.c} - * DECLARE_ASM_CONST(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008); - * @endcode - * - * @param n Minimum alignment in bytes - * @param t Type of the variable (or array element) - * @param v Name of the variable - */ - -#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v -#elif defined(__DJGPP__) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (FFMIN(n, 16)))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v - #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v -#elif defined(__GNUC__) || defined(__clang__) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (n))) v - #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v -#elif defined(_MSC_VER) - #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v - #define DECLARE_ASM_ALIGNED(n,t,v) __declspec(align(n)) t v - #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v -#else - #define DECLARE_ALIGNED(n,t,v) t v - #define DECLARE_ASM_ALIGNED(n,t,v) t v - #define DECLARE_ASM_CONST(n,t,v) static const t v -#endif - -/** - * @} - */ -#endif - -/** - * @defgroup lavu_mem_attrs Function Attributes - * Function attributes applicable to memory handling functions. - * - * These function attributes can help compilers emit more useful warnings, or - * generate better code. - * @{ - */ - -/** - * @def av_malloc_attrib - * Function attribute denoting a malloc-like function. - * - * @see Function attribute `malloc` in GCC's documentation - */ - -#if AV_GCC_VERSION_AT_LEAST(3,1) - #define av_malloc_attrib __attribute__((__malloc__)) -#else - #define av_malloc_attrib -#endif - -/** - * @def av_alloc_size(...) - * Function attribute used on a function that allocates memory, whose size is - * given by the specified parameter(s). - * - * @code{.c} - * void *av_malloc(size_t size) av_alloc_size(1); - * void *av_calloc(size_t nmemb, size_t size) av_alloc_size(1, 2); - * @endcode - * - * @param ... One or two parameter indexes, separated by a comma - * - * @see Function attribute `alloc_size` in GCC's documentation - */ - -#if AV_GCC_VERSION_AT_LEAST(4,3) - #define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__))) -#else - #define av_alloc_size(...) -#endif - -/** - * @} - */ - -/** - * @defgroup lavu_mem_funcs Heap Management - * Functions responsible for allocating, freeing, and copying memory. - * - * All memory allocation functions have a built-in upper limit of `INT_MAX` - * bytes. This may be changed with av_max_alloc(), although exercise extreme - * caution when doing so. - * - * @{ - */ - -/** - * Allocate a memory block with alignment suitable for all memory accesses - * (including vectors if available on the CPU). - * - * @param size Size in bytes for the memory block to be allocated - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * @see av_mallocz() - */ -void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1); - -/** - * Allocate a memory block with alignment suitable for all memory accesses - * (including vectors if available on the CPU) and zero all the bytes of the - * block. - * - * @param size Size in bytes for the memory block to be allocated - * @return Pointer to the allocated block, or `NULL` if it cannot be allocated - * @see av_malloc() - */ -void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1); - -/** - * Allocate a memory block for an array with av_malloc(). - * - * The allocated memory will have size `size * nmemb` bytes. - * - * @param nmemb Number of element - * @param size Size of a single element - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * @see av_malloc() - */ -av_alloc_size(1, 2) void *av_malloc_array(size_t nmemb, size_t size); - -/** - * Allocate a memory block for an array with av_mallocz(). - * - * The allocated memory will have size `size * nmemb` bytes. - * - * @param nmemb Number of elements - * @param size Size of the single element - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * - * @see av_mallocz() - * @see av_malloc_array() - */ -av_alloc_size(1, 2) void *av_mallocz_array(size_t nmemb, size_t size); - -/** - * Non-inlined equivalent of av_mallocz_array(). - * - * Created for symmetry with the calloc() C function. - */ -void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib; - -/** - * Allocate, reallocate, or free a block of memory. - * - * If `ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is - * zero, free the memory block pointed to by `ptr`. Otherwise, expand or - * shrink that block of memory according to `size`. - * - * @param ptr Pointer to a memory block already allocated with - * av_realloc() or `NULL` - * @param size Size in bytes of the memory block to be allocated or - * reallocated - * - * @return Pointer to a newly-reallocated block or `NULL` if the block - * cannot be reallocated or the function is used to free the memory block - * - * @warning Unlike av_malloc(), the returned pointer is not guaranteed to be - * correctly aligned. - * @see av_fast_realloc() - * @see av_reallocp() - */ -void *av_realloc(void *ptr, size_t size) av_alloc_size(2); - -/** - * Allocate, reallocate, or free a block of memory through a pointer to a - * pointer. - * - * If `*ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is - * zero, free the memory block pointed to by `*ptr`. Otherwise, expand or - * shrink that block of memory according to `size`. - * - * @param[in,out] ptr Pointer to a pointer to a memory block already allocated - * with av_realloc(), or a pointer to `NULL`. The pointer - * is updated on success, or freed on failure. - * @param[in] size Size in bytes for the memory block to be allocated or - * reallocated - * - * @return Zero on success, an AVERROR error code on failure - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. - */ -av_warn_unused_result -int av_reallocp(void *ptr, size_t size); - -/** - * Allocate, reallocate, or free a block of memory. - * - * This function does the same thing as av_realloc(), except: - * - It takes two size arguments and allocates `nelem * elsize` bytes, - * after checking the result of the multiplication for integer overflow. - * - It frees the input block in case of failure, thus avoiding the memory - * leak with the classic - * @code{.c} - * buf = realloc(buf); - * if (!buf) - * return -1; - * @endcode - * pattern. - */ -void *av_realloc_f(void *ptr, size_t nelem, size_t elsize); - -/** - * Allocate, reallocate, or free an array. - * - * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. If - * `nmemb` is zero, free the memory block pointed to by `ptr`. - * - * @param ptr Pointer to a memory block already allocated with - * av_realloc() or `NULL` - * @param nmemb Number of elements in the array - * @param size Size of the single element of the array - * - * @return Pointer to a newly-reallocated block or NULL if the block - * cannot be reallocated or the function is used to free the memory block - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. - * @see av_reallocp_array() - */ -av_alloc_size(2, 3) void *av_realloc_array(void *ptr, size_t nmemb, size_t size); - -/** - * Allocate, reallocate, or free an array through a pointer to a pointer. - * - * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. If `nmemb` is - * zero, free the memory block pointed to by `*ptr`. - * - * @param[in,out] ptr Pointer to a pointer to a memory block already - * allocated with av_realloc(), or a pointer to `NULL`. - * The pointer is updated on success, or freed on failure. - * @param[in] nmemb Number of elements - * @param[in] size Size of the single element - * - * @return Zero on success, an AVERROR error code on failure - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. - */ -int av_reallocp_array(void *ptr, size_t nmemb, size_t size); - -/** - * Reallocate the given buffer if it is not large enough, otherwise do nothing. - * - * If the given buffer is `NULL`, then a new uninitialized buffer is allocated. - * - * If the given buffer is not large enough, and reallocation fails, `NULL` is - * returned and `*size` is set to 0, but the original buffer is not changed or - * freed. - * - * A typical use pattern follows: - * - * @code{.c} - * uint8_t *buf = ...; - * uint8_t *new_buf = av_fast_realloc(buf, ¤t_size, size_needed); - * if (!new_buf) { - * // Allocation failed; clean up original buffer - * av_freep(&buf); - * return AVERROR(ENOMEM); - * } - * @endcode - * - * @param[in,out] ptr Already allocated buffer, or `NULL` - * @param[in,out] size Pointer to the size of buffer `ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `ptr` - * @return `ptr` if the buffer is large enough, a pointer to newly reallocated - * buffer if the buffer was not large enough, or `NULL` in case of - * error - * @see av_realloc() - * @see av_fast_malloc() - */ -void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Allocate a buffer, reusing the given one if large enough. - * - * Contrary to av_fast_realloc(), the current buffer contents might not be - * preserved and on error the old buffer is freed, thus no special handling to - * avoid memleaks is necessary. - * - * `*ptr` is allowed to be `NULL`, in which case allocation always happens if - * `size_needed` is greater than 0. - * - * @code{.c} - * uint8_t *buf = ...; - * av_fast_malloc(&buf, ¤t_size, size_needed); - * if (!buf) { - * // Allocation failed; buf already freed - * return AVERROR(ENOMEM); - * } - * @endcode - * - * @param[in,out] ptr Pointer to pointer to an already allocated buffer. - * `*ptr` will be overwritten with pointer to new - * buffer on success or `NULL` on failure - * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `*ptr` - * @see av_realloc() - * @see av_fast_mallocz() - */ -void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Allocate and clear a buffer, reusing the given one if large enough. - * - * Like av_fast_malloc(), but all newly allocated space is initially cleared. - * Reused buffer is not cleared. - * - * `*ptr` is allowed to be `NULL`, in which case allocation always happens if - * `size_needed` is greater than 0. - * - * @param[in,out] ptr Pointer to pointer to an already allocated buffer. - * `*ptr` will be overwritten with pointer to new - * buffer on success or `NULL` on failure - * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `*ptr` - * @see av_fast_malloc() - */ -void av_fast_mallocz(void *ptr, unsigned int *size, size_t min_size); - -/** - * Free a memory block which has been allocated with a function of av_malloc() - * or av_realloc() family. - * - * @param ptr Pointer to the memory block which should be freed. - * - * @note `ptr = NULL` is explicitly allowed. - * @note It is recommended that you use av_freep() instead, to prevent leaving - * behind dangling pointers. - * @see av_freep() - */ -void av_free(void *ptr); - -/** - * Free a memory block which has been allocated with a function of av_malloc() - * or av_realloc() family, and set the pointer pointing to it to `NULL`. - * - * @code{.c} - * uint8_t *buf = av_malloc(16); - * av_free(buf); - * // buf now contains a dangling pointer to freed memory, and accidental - * // dereference of buf will result in a use-after-free, which may be a - * // security risk. - * - * uint8_t *buf = av_malloc(16); - * av_freep(&buf); - * // buf is now NULL, and accidental dereference will only result in a - * // NULL-pointer dereference. - * @endcode - * - * @param ptr Pointer to the pointer to the memory block which should be freed - * @note `*ptr = NULL` is safe and leads to no action. - * @see av_free() - */ -void av_freep(void *ptr); - -/** - * Duplicate a string. - * - * @param s String to be duplicated - * @return Pointer to a newly-allocated string containing a - * copy of `s` or `NULL` if the string cannot be allocated - * @see av_strndup() - */ -char *av_strdup(const char *s) av_malloc_attrib; - -/** - * Duplicate a substring of a string. - * - * @param s String to be duplicated - * @param len Maximum length of the resulting string (not counting the - * terminating byte) - * @return Pointer to a newly-allocated string containing a - * substring of `s` or `NULL` if the string cannot be allocated - */ -char *av_strndup(const char *s, size_t len) av_malloc_attrib; - -/** - * Duplicate a buffer with av_malloc(). - * - * @param p Buffer to be duplicated - * @param size Size in bytes of the buffer copied - * @return Pointer to a newly allocated buffer containing a - * copy of `p` or `NULL` if the buffer cannot be allocated - */ -void *av_memdup(const void *p, size_t size); - -/** - * Overlapping memcpy() implementation. - * - * @param dst Destination buffer - * @param back Number of bytes back to start copying (i.e. the initial size of - * the overlapping window); must be > 0 - * @param cnt Number of bytes to copy; must be >= 0 - * - * @note `cnt > back` is valid, this will copy the bytes we just copied, - * thus creating a repeating pattern with a period length of `back`. - */ -void av_memcpy_backptr(uint8_t *dst, int back, int cnt); - -/** - * @} - */ - -/** - * @defgroup lavu_mem_dynarray Dynamic Array - * - * Utilities to make an array grow when needed. - * - * Sometimes, the programmer would want to have an array that can grow when - * needed. The libavutil dynamic array utilities fill that need. - * - * libavutil supports two systems of appending elements onto a dynamically - * allocated array, the first one storing the pointer to the value in the - * array, and the second storing the value directly. In both systems, the - * caller is responsible for maintaining a variable containing the length of - * the array, as well as freeing of the array after use. - * - * The first system stores pointers to values in a block of dynamically - * allocated memory. Since only pointers are stored, the function does not need - * to know the size of the type. Both av_dynarray_add() and - * av_dynarray_add_nofree() implement this system. - * - * @code - * type **array = NULL; //< an array of pointers to values - * int nb = 0; //< a variable to keep track of the length of the array - * - * type to_be_added = ...; - * type to_be_added2 = ...; - * - * av_dynarray_add(&array, &nb, &to_be_added); - * if (nb == 0) - * return AVERROR(ENOMEM); - * - * av_dynarray_add(&array, &nb, &to_be_added2); - * if (nb == 0) - * return AVERROR(ENOMEM); - * - * // Now: - * // nb == 2 - * // &to_be_added == array[0] - * // &to_be_added2 == array[1] - * - * av_freep(&array); - * @endcode - * - * The second system stores the value directly in a block of memory. As a - * result, the function has to know the size of the type. av_dynarray2_add() - * implements this mechanism. - * - * @code - * type *array = NULL; //< an array of values - * int nb = 0; //< a variable to keep track of the length of the array - * - * type to_be_added = ...; - * type to_be_added2 = ...; - * - * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), NULL); - * if (!addr) - * return AVERROR(ENOMEM); - * memcpy(addr, &to_be_added, sizeof(to_be_added)); - * - * // Shortcut of the above. - * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), - * (const void *)&to_be_added2); - * if (!addr) - * return AVERROR(ENOMEM); - * - * // Now: - * // nb == 2 - * // to_be_added == array[0] - * // to_be_added2 == array[1] - * - * av_freep(&array); - * @endcode - * - * @{ - */ - -/** - * Add the pointer to an element to a dynamic array. - * - * The array to grow is supposed to be an array of pointers to - * structures, and the element to add must be a pointer to an already - * allocated structure. - * - * The array is reallocated when its size reaches powers of 2. - * Therefore, the amortized cost of adding an element is constant. - * - * In case of success, the pointer to the array is updated in order to - * point to the new grown array, and the number pointed to by `nb_ptr` - * is incremented. - * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and - * `*nb_ptr` is set to 0. - * - * @param[in,out] tab_ptr Pointer to the array to grow - * @param[in,out] nb_ptr Pointer to the number of elements in the array - * @param[in] elem Element to add - * @see av_dynarray_add_nofree(), av_dynarray2_add() - */ -void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem); - -/** - * Add an element to a dynamic array. - * - * Function has the same functionality as av_dynarray_add(), - * but it doesn't free memory on fails. It returns error code - * instead and leave current buffer untouched. - * - * @return >=0 on success, negative otherwise - * @see av_dynarray_add(), av_dynarray2_add() - */ -av_warn_unused_result -int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem); - -/** - * Add an element of size `elem_size` to a dynamic array. - * - * The array is reallocated when its number of elements reaches powers of 2. - * Therefore, the amortized cost of adding an element is constant. - * - * In case of success, the pointer to the array is updated in order to - * point to the new grown array, and the number pointed to by `nb_ptr` - * is incremented. - * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and - * `*nb_ptr` is set to 0. - * - * @param[in,out] tab_ptr Pointer to the array to grow - * @param[in,out] nb_ptr Pointer to the number of elements in the array - * @param[in] elem_size Size in bytes of an element in the array - * @param[in] elem_data Pointer to the data of the element to add. If - * `NULL`, the space of the newly added element is - * allocated but left uninitialized. - * - * @return Pointer to the data of the element to copy in the newly allocated - * space - * @see av_dynarray_add(), av_dynarray_add_nofree() - */ -void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size, - const uint8_t *elem_data); - -/** - * @} - */ - -/** - * @defgroup lavu_mem_misc Miscellaneous Functions - * - * Other functions related to memory allocation. - * - * @{ - */ - -/** - * Multiply two `size_t` values checking for overflow. - * - * @param[in] a,b Operands of multiplication - * @param[out] r Pointer to the result of the operation - * @return 0 on success, AVERROR(EINVAL) on overflow - */ -static inline int av_size_mult(size_t a, size_t b, size_t *r) -{ - size_t t = a * b; - /* Hack inspired from glibc: don't try the division if nelem and elsize - * are both less than sqrt(SIZE_MAX). */ - if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) - return AVERROR(EINVAL); - *r = t; - return 0; -} - -/** - * Set the maximum size that may be allocated in one block. - * - * The value specified with this function is effective for all libavutil's @ref - * lavu_mem_funcs "heap management functions." - * - * By default, the max value is defined as `INT_MAX`. - * - * @param max Value to be set as the new maximum size - * - * @warning Exercise extreme caution when using this function. Don't touch - * this if you do not understand the full consequence of doing so. - */ -void av_max_alloc(size_t max); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_MEM_H */ diff --git a/prebuilts/aarch64/include/libavutil/motion_vector.h b/prebuilts/aarch64/include/libavutil/motion_vector.h deleted file mode 100644 index ec29556..0000000 --- a/prebuilts/aarch64/include/libavutil/motion_vector.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MOTION_VECTOR_H -#define AVUTIL_MOTION_VECTOR_H - -#include - -typedef struct AVMotionVector { - /** - * Where the current macroblock comes from; negative value when it comes - * from the past, positive value when it comes from the future. - * XXX: set exact relative ref frame reference instead of a +/- 1 "direction". - */ - int32_t source; - /** - * Width and height of the block. - */ - uint8_t w, h; - /** - * Absolute source position. Can be outside the frame area. - */ - int16_t src_x, src_y; - /** - * Absolute destination position. Can be outside the frame area. - */ - int16_t dst_x, dst_y; - /** - * Extra flag information. - * Currently unused. - */ - uint64_t flags; - /** - * Motion vector - * src_x = dst_x + motion_x / motion_scale - * src_y = dst_y + motion_y / motion_scale - */ - int32_t motion_x, motion_y; - uint16_t motion_scale; -} AVMotionVector; - -#endif /* AVUTIL_MOTION_VECTOR_H */ diff --git a/prebuilts/aarch64/include/libavutil/murmur3.h b/prebuilts/aarch64/include/libavutil/murmur3.h deleted file mode 100644 index b3b3a07..0000000 --- a/prebuilts/aarch64/include/libavutil/murmur3.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2013 Reimar Döffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_murmur3 - * Public header for MurmurHash3 hash function implementation. - */ - -#ifndef AVUTIL_MURMUR3_H -#define AVUTIL_MURMUR3_H - -#include -#include - -#include "version.h" - -/** - * @defgroup lavu_murmur3 Murmur3 - * @ingroup lavu_hash - * MurmurHash3 hash function implementation. - * - * MurmurHash3 is a non-cryptographic hash function, of which three - * incompatible versions were created by its inventor Austin Appleby: - * - * - 32-bit output - * - 128-bit output for 32-bit platforms - * - 128-bit output for 64-bit platforms - * - * FFmpeg only implements the last variant: 128-bit output designed for 64-bit - * platforms. Even though the hash function was designed for 64-bit platforms, - * the function in reality works on 32-bit systems too, only with reduced - * performance. - * - * @anchor lavu_murmur3_seedinfo - * By design, MurmurHash3 requires a seed to operate. In response to this, - * libavutil provides two functions for hash initiation, one that requires a - * seed (av_murmur3_init_seeded()) and one that uses a fixed arbitrary integer - * as the seed, and therefore does not (av_murmur3_init()). - * - * To make hashes comparable, you should provide the same seed for all calls to - * this hash function -- if you are supplying one yourself, that is. - * - * @{ - */ - -/** - * Allocate an AVMurMur3 hash context. - * - * @return Uninitialized hash context or `NULL` in case of error - */ -struct AVMurMur3 *av_murmur3_alloc(void); - -/** - * Initialize or reinitialize an AVMurMur3 hash context with a seed. - * - * @param[out] c Hash context - * @param[in] seed Random seed - * - * @see av_murmur3_init() - * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of - * seeds for MurmurHash3. - */ -void av_murmur3_init_seeded(struct AVMurMur3 *c, uint64_t seed); - -/** - * Initialize or reinitialize an AVMurMur3 hash context. - * - * Equivalent to av_murmur3_init_seeded() with a built-in seed. - * - * @param[out] c Hash context - * - * @see av_murmur3_init_seeded() - * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of - * seeds for MurmurHash3. - */ -void av_murmur3_init(struct AVMurMur3 *c); - -/** - * Update hash context with new data. - * - * @param[out] c Hash context - * @param[in] src Input data to update hash with - * @param[in] len Number of bytes to read from `src` - */ -#if FF_API_CRYPTO_SIZE_T -void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, int len); -#else -void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param[in,out] c Hash context - * @param[out] dst Buffer where output digest value is stored - */ -void av_murmur3_final(struct AVMurMur3 *c, uint8_t dst[16]); - -/** - * @} - */ - -#endif /* AVUTIL_MURMUR3_H */ diff --git a/prebuilts/aarch64/include/libavutil/opt.h b/prebuilts/aarch64/include/libavutil/opt.h deleted file mode 100644 index 8dc020a..0000000 --- a/prebuilts/aarch64/include/libavutil/opt.h +++ /dev/null @@ -1,886 +0,0 @@ -/* - * AVOptions - * copyright (c) 2005 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_OPT_H -#define AVUTIL_OPT_H - -/** - * @file - * AVOptions - */ - -#include "rational.h" -#include "avutil.h" -#include "dict.h" -#include "log.h" -#include "pixfmt.h" -#include "samplefmt.h" -#include "version.h" - -/** - * @defgroup avoptions AVOptions - * @ingroup lavu_data - * @{ - * AVOptions provide a generic system to declare options on arbitrary structs - * ("objects"). An option can have a help text, a type and a range of possible - * values. Options may then be enumerated, read and written to. - * - * @section avoptions_implement Implementing AVOptions - * This section describes how to add AVOptions capabilities to a struct. - * - * All AVOptions-related information is stored in an AVClass. Therefore - * the first member of the struct should be a pointer to an AVClass describing it. - * The option field of the AVClass must be set to a NULL-terminated static array - * of AVOptions. Each AVOption must have a non-empty name, a type, a default - * value and for number-type AVOptions also a range of allowed values. It must - * also declare an offset in bytes from the start of the struct, where the field - * associated with this AVOption is located. Other fields in the AVOption struct - * should also be set when applicable, but are not required. - * - * The following example illustrates an AVOptions-enabled struct: - * @code - * typedef struct test_struct { - * const AVClass *class; - * int int_opt; - * char *str_opt; - * uint8_t *bin_opt; - * int bin_len; - * } test_struct; - * - * static const AVOption test_options[] = { - * { "test_int", "This is a test option of int type.", offsetof(test_struct, int_opt), - * AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX }, - * { "test_str", "This is a test option of string type.", offsetof(test_struct, str_opt), - * AV_OPT_TYPE_STRING }, - * { "test_bin", "This is a test option of binary type.", offsetof(test_struct, bin_opt), - * AV_OPT_TYPE_BINARY }, - * { NULL }, - * }; - * - * static const AVClass test_class = { - * .class_name = "test class", - * .item_name = av_default_item_name, - * .option = test_options, - * .version = LIBAVUTIL_VERSION_INT, - * }; - * @endcode - * - * Next, when allocating your struct, you must ensure that the AVClass pointer - * is set to the correct value. Then, av_opt_set_defaults() can be called to - * initialize defaults. After that the struct is ready to be used with the - * AVOptions API. - * - * When cleaning up, you may use the av_opt_free() function to automatically - * free all the allocated string and binary options. - * - * Continuing with the above example: - * - * @code - * test_struct *alloc_test_struct(void) - * { - * test_struct *ret = av_mallocz(sizeof(*ret)); - * ret->class = &test_class; - * av_opt_set_defaults(ret); - * return ret; - * } - * void free_test_struct(test_struct **foo) - * { - * av_opt_free(*foo); - * av_freep(foo); - * } - * @endcode - * - * @subsection avoptions_implement_nesting Nesting - * It may happen that an AVOptions-enabled struct contains another - * AVOptions-enabled struct as a member (e.g. AVCodecContext in - * libavcodec exports generic options, while its priv_data field exports - * codec-specific options). In such a case, it is possible to set up the - * parent struct to export a child's options. To do that, simply - * implement AVClass.child_next() and AVClass.child_class_iterate() in the - * parent struct's AVClass. - * Assuming that the test_struct from above now also contains a - * child_struct field: - * - * @code - * typedef struct child_struct { - * AVClass *class; - * int flags_opt; - * } child_struct; - * static const AVOption child_opts[] = { - * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX }, - * { NULL }, - * }; - * static const AVClass child_class = { - * .class_name = "child class", - * .item_name = av_default_item_name, - * .option = child_opts, - * .version = LIBAVUTIL_VERSION_INT, - * }; - * - * void *child_next(void *obj, void *prev) - * { - * test_struct *t = obj; - * if (!prev && t->child_struct) - * return t->child_struct; - * return NULL - * } - * const AVClass child_class_iterate(void **iter) - * { - * const AVClass *c = *iter ? NULL : &child_class; - * *iter = (void*)(uintptr_t)c; - * return c; - * } - * @endcode - * Putting child_next() and child_class_iterate() as defined above into - * test_class will now make child_struct's options accessible through - * test_struct (again, proper setup as described above needs to be done on - * child_struct right after it is created). - * - * From the above example it might not be clear why both child_next() - * and child_class_iterate() are needed. The distinction is that child_next() - * iterates over actually existing objects, while child_class_iterate() - * iterates over all possible child classes. E.g. if an AVCodecContext - * was initialized to use a codec which has private options, then its - * child_next() will return AVCodecContext.priv_data and finish - * iterating. OTOH child_class_iterate() on AVCodecContext.av_class will - * iterate over all available codecs with private options. - * - * @subsection avoptions_implement_named_constants Named constants - * It is possible to create named constants for options. Simply set the unit - * field of the option the constants should apply to a string and - * create the constants themselves as options of type AV_OPT_TYPE_CONST - * with their unit field set to the same string. - * Their default_val field should contain the value of the named - * constant. - * For example, to add some named constants for the test_flags option - * above, put the following into the child_opts array: - * @code - * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, "test_unit" }, - * { "flag1", "This is a flag with value 16", 0, AV_OPT_TYPE_CONST, { .i64 = 16 }, 0, 0, "test_unit" }, - * @endcode - * - * @section avoptions_use Using AVOptions - * This section deals with accessing options in an AVOptions-enabled struct. - * Such structs in FFmpeg are e.g. AVCodecContext in libavcodec or - * AVFormatContext in libavformat. - * - * @subsection avoptions_use_examine Examining AVOptions - * The basic functions for examining options are av_opt_next(), which iterates - * over all options defined for one object, and av_opt_find(), which searches - * for an option with the given name. - * - * The situation is more complicated with nesting. An AVOptions-enabled struct - * may have AVOptions-enabled children. Passing the AV_OPT_SEARCH_CHILDREN flag - * to av_opt_find() will make the function search children recursively. - * - * For enumerating there are basically two cases. The first is when you want to - * get all options that may potentially exist on the struct and its children - * (e.g. when constructing documentation). In that case you should call - * av_opt_child_class_iterate() recursively on the parent struct's AVClass. The - * second case is when you have an already initialized struct with all its - * children and you want to get all options that can be actually written or read - * from it. In that case you should call av_opt_child_next() recursively (and - * av_opt_next() on each result). - * - * @subsection avoptions_use_get_set Reading and writing AVOptions - * When setting options, you often have a string read directly from the - * user. In such a case, simply passing it to av_opt_set() is enough. For - * non-string type options, av_opt_set() will parse the string according to the - * option type. - * - * Similarly av_opt_get() will read any option type and convert it to a string - * which will be returned. Do not forget that the string is allocated, so you - * have to free it with av_free(). - * - * In some cases it may be more convenient to put all options into an - * AVDictionary and call av_opt_set_dict() on it. A specific case of this - * are the format/codec open functions in lavf/lavc which take a dictionary - * filled with option as a parameter. This makes it possible to set some options - * that cannot be set otherwise, since e.g. the input file format is not known - * before the file is actually opened. - */ - -enum AVOptionType{ - AV_OPT_TYPE_FLAGS, - AV_OPT_TYPE_INT, - AV_OPT_TYPE_INT64, - AV_OPT_TYPE_DOUBLE, - AV_OPT_TYPE_FLOAT, - AV_OPT_TYPE_STRING, - AV_OPT_TYPE_RATIONAL, - AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length - AV_OPT_TYPE_DICT, - AV_OPT_TYPE_UINT64, - AV_OPT_TYPE_CONST, - AV_OPT_TYPE_IMAGE_SIZE, ///< offset must point to two consecutive integers - AV_OPT_TYPE_PIXEL_FMT, - AV_OPT_TYPE_SAMPLE_FMT, - AV_OPT_TYPE_VIDEO_RATE, ///< offset must point to AVRational - AV_OPT_TYPE_DURATION, - AV_OPT_TYPE_COLOR, - AV_OPT_TYPE_CHANNEL_LAYOUT, - AV_OPT_TYPE_BOOL, -}; - -/** - * AVOption - */ -typedef struct AVOption { - const char *name; - - /** - * short English help text - * @todo What about other languages? - */ - const char *help; - - /** - * The offset relative to the context structure where the option - * value is stored. It should be 0 for named constants. - */ - int offset; - enum AVOptionType type; - - /** - * the default value for scalar options - */ - union { - int64_t i64; - double dbl; - const char *str; - /* TODO those are unused now */ - AVRational q; - } default_val; - double min; ///< minimum valid value for the option - double max; ///< maximum valid value for the option - - int flags; -#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding -#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding -#define AV_OPT_FLAG_AUDIO_PARAM 8 -#define AV_OPT_FLAG_VIDEO_PARAM 16 -#define AV_OPT_FLAG_SUBTITLE_PARAM 32 -/** - * The option is intended for exporting values to the caller. - */ -#define AV_OPT_FLAG_EXPORT 64 -/** - * The option may not be set through the AVOptions API, only read. - * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set. - */ -#define AV_OPT_FLAG_READONLY 128 -#define AV_OPT_FLAG_BSF_PARAM (1<<8) ///< a generic parameter which can be set by the user for bit stream filtering -#define AV_OPT_FLAG_RUNTIME_PARAM (1<<15) ///< a generic parameter which can be set by the user at runtime -#define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering -#define AV_OPT_FLAG_DEPRECATED (1<<17) ///< set if option is deprecated, users should refer to AVOption.help text for more information -#define AV_OPT_FLAG_CHILD_CONSTS (1<<18) ///< set if option constants can also reside in child objects -//FIXME think about enc-audio, ... style flags - - /** - * The logical unit to which the option belongs. Non-constant - * options and corresponding named constants share the same - * unit. May be NULL. - */ - const char *unit; -} AVOption; - -/** - * A single allowed range of values, or a single allowed value. - */ -typedef struct AVOptionRange { - const char *str; - /** - * Value range. - * For string ranges this represents the min/max length. - * For dimensions this represents the min/max pixel count or width/height in multi-component case. - */ - double value_min, value_max; - /** - * Value's component range. - * For string this represents the unicode range for chars, 0-127 limits to ASCII. - */ - double component_min, component_max; - /** - * Range flag. - * If set to 1 the struct encodes a range, if set to 0 a single value. - */ - int is_range; -} AVOptionRange; - -/** - * List of AVOptionRange structs. - */ -typedef struct AVOptionRanges { - /** - * Array of option ranges. - * - * Most of option types use just one component. - * Following describes multi-component option types: - * - * AV_OPT_TYPE_IMAGE_SIZE: - * component index 0: range of pixel count (width * height). - * component index 1: range of width. - * component index 2: range of height. - * - * @note To obtain multi-component version of this structure, user must - * provide AV_OPT_MULTI_COMPONENT_RANGE to av_opt_query_ranges or - * av_opt_query_ranges_default function. - * - * Multi-component range can be read as in following example: - * - * @code - * int range_index, component_index; - * AVOptionRanges *ranges; - * AVOptionRange *range[3]; //may require more than 3 in the future. - * av_opt_query_ranges(&ranges, obj, key, AV_OPT_MULTI_COMPONENT_RANGE); - * for (range_index = 0; range_index < ranges->nb_ranges; range_index++) { - * for (component_index = 0; component_index < ranges->nb_components; component_index++) - * range[component_index] = ranges->range[ranges->nb_ranges * component_index + range_index]; - * //do something with range here. - * } - * av_opt_freep_ranges(&ranges); - * @endcode - */ - AVOptionRange **range; - /** - * Number of ranges per component. - */ - int nb_ranges; - /** - * Number of componentes. - */ - int nb_components; -} AVOptionRanges; - -/** - * Show the obj options. - * - * @param req_flags requested flags for the options to show. Show only the - * options for which it is opt->flags & req_flags. - * @param rej_flags rejected flags for the options to show. Show only the - * options for which it is !(opt->flags & req_flags). - * @param av_log_obj log context to use for showing the options - */ -int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags); - -/** - * Set the values of all AVOption fields to their default values. - * - * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) - */ -void av_opt_set_defaults(void *s); - -/** - * Set the values of all AVOption fields to their default values. Only these - * AVOption fields for which (opt->flags & mask) == flags will have their - * default applied to s. - * - * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) - * @param mask combination of AV_OPT_FLAG_* - * @param flags combination of AV_OPT_FLAG_* - */ -void av_opt_set_defaults2(void *s, int mask, int flags); - -/** - * Parse the key/value pairs list in opts. For each key/value pair - * found, stores the value in the field in ctx that is named like the - * key. ctx must be an AVClass context, storing is done using - * AVOptions. - * - * @param opts options string to parse, may be NULL - * @param key_val_sep a 0-terminated list of characters used to - * separate key from value - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other - * @return the number of successfully set key/value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_opt_set() if a key/value pair - * cannot be set - */ -int av_set_options_string(void *ctx, const char *opts, - const char *key_val_sep, const char *pairs_sep); - -/** - * Parse the key-value pairs list in opts. For each key=value pair found, - * set the value of the corresponding option in ctx. - * - * @param ctx the AVClass object to set options on - * @param opts the options string, key-value pairs separated by a - * delimiter - * @param shorthand a NULL-terminated array of options names for shorthand - * notation: if the first field in opts has no key part, - * the key is taken from the first element of shorthand; - * then again for the second, etc., until either opts is - * finished, shorthand is finished or a named option is - * found; after that, all options must be named - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @return the number of successfully set key=value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_set_string3() if a key/value pair - * cannot be set - * - * Options names must use only the following characters: a-z A-Z 0-9 - . / _ - * Separators must use characters distinct from option names and from each - * other. - */ -int av_opt_set_from_string(void *ctx, const char *opts, - const char *const *shorthand, - const char *key_val_sep, const char *pairs_sep); -/** - * Free all allocated objects in obj. - */ -void av_opt_free(void *obj); - -/** - * Check whether a particular flag is set in a flags field. - * - * @param field_name the name of the flag field option - * @param flag_name the name of the flag to check - * @return non-zero if the flag is set, zero if the flag isn't set, - * isn't of the right type, or the flags field doesn't exist. - */ -int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name); - -/** - * Set all the options from a given dictionary on an object. - * - * @param obj a struct whose first element is a pointer to AVClass - * @param options options to process. This dictionary will be freed and replaced - * by a new one containing all options not found in obj. - * Of course this new dictionary needs to be freed by caller - * with av_dict_free(). - * - * @return 0 on success, a negative AVERROR if some option was found in obj, - * but could not be set. - * - * @see av_dict_copy() - */ -int av_opt_set_dict(void *obj, struct AVDictionary **options); - - -/** - * Set all the options from a given dictionary on an object. - * - * @param obj a struct whose first element is a pointer to AVClass - * @param options options to process. This dictionary will be freed and replaced - * by a new one containing all options not found in obj. - * Of course this new dictionary needs to be freed by caller - * with av_dict_free(). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * - * @return 0 on success, a negative AVERROR if some option was found in obj, - * but could not be set. - * - * @see av_dict_copy() - */ -int av_opt_set_dict2(void *obj, struct AVDictionary **options, int search_flags); - -/** - * Extract a key-value pair from the beginning of a string. - * - * @param ropts pointer to the options string, will be updated to - * point to the rest of the string (one of the pairs_sep - * or the final NUL) - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @param flags flags; see the AV_OPT_FLAG_* values below - * @param rkey parsed key; must be freed using av_free() - * @param rval parsed value; must be freed using av_free() - * - * @return >=0 for success, or a negative value corresponding to an - * AVERROR code in case of error; in particular: - * AVERROR(EINVAL) if no key is present - * - */ -int av_opt_get_key_value(const char **ropts, - const char *key_val_sep, const char *pairs_sep, - unsigned flags, - char **rkey, char **rval); - -enum { - - /** - * Accept to parse a value without a key; the key will then be returned - * as NULL. - */ - AV_OPT_FLAG_IMPLICIT_KEY = 1, -}; - -/** - * @defgroup opt_eval_funcs Evaluating option strings - * @{ - * This group of functions can be used to evaluate option strings - * and get numbers out of them. They do the same thing as av_opt_set(), - * except the result is written into the caller-supplied pointer. - * - * @param obj a struct whose first element is a pointer to AVClass. - * @param o an option for which the string is to be evaluated. - * @param val string to be evaluated. - * @param *_out value of the string will be written here. - * - * @return 0 on success, a negative number on failure. - */ -int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out); -int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out); -int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out); -int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out); -int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out); -int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out); -/** - * @} - */ - -#define AV_OPT_SEARCH_CHILDREN (1 << 0) /**< Search in possible children of the - given object first. */ -/** - * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass - * instead of a required pointer to a struct containing AVClass. This is - * useful for searching for options without needing to allocate the corresponding - * object. - */ -#define AV_OPT_SEARCH_FAKE_OBJ (1 << 1) - -/** - * In av_opt_get, return NULL if the option has a pointer type and is set to NULL, - * rather than returning an empty string. - */ -#define AV_OPT_ALLOW_NULL (1 << 2) - -/** - * Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than - * one component for certain option types. - * @see AVOptionRanges for details. - */ -#define AV_OPT_MULTI_COMPONENT_RANGE (1 << 12) - -/** - * Look for an option in an object. Consider only options which - * have all the specified flags set. - * - * @param[in] obj A pointer to a struct whose first element is a - * pointer to an AVClass. - * Alternatively a double pointer to an AVClass, if - * AV_OPT_SEARCH_FAKE_OBJ search flag is set. - * @param[in] name The name of the option to look for. - * @param[in] unit When searching for named constants, name of the unit - * it belongs to. - * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * - * @return A pointer to the option found, or NULL if no option - * was found. - * - * @note Options found with AV_OPT_SEARCH_CHILDREN flag may not be settable - * directly with av_opt_set(). Use special calls which take an options - * AVDictionary (e.g. avformat_open_input()) to set options found with this - * flag. - */ -const AVOption *av_opt_find(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags); - -/** - * Look for an option in an object. Consider only options which - * have all the specified flags set. - * - * @param[in] obj A pointer to a struct whose first element is a - * pointer to an AVClass. - * Alternatively a double pointer to an AVClass, if - * AV_OPT_SEARCH_FAKE_OBJ search flag is set. - * @param[in] name The name of the option to look for. - * @param[in] unit When searching for named constants, name of the unit - * it belongs to. - * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * @param[out] target_obj if non-NULL, an object to which the option belongs will be - * written here. It may be different from obj if AV_OPT_SEARCH_CHILDREN is present - * in search_flags. This parameter is ignored if search_flags contain - * AV_OPT_SEARCH_FAKE_OBJ. - * - * @return A pointer to the option found, or NULL if no option - * was found. - */ -const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags, void **target_obj); - -/** - * Iterate over all AVOptions belonging to obj. - * - * @param obj an AVOptions-enabled struct or a double pointer to an - * AVClass describing it. - * @param prev result of the previous call to av_opt_next() on this object - * or NULL - * @return next AVOption or NULL - */ -const AVOption *av_opt_next(const void *obj, const AVOption *prev); - -/** - * Iterate over AVOptions-enabled children of obj. - * - * @param prev result of a previous call to this function or NULL - * @return next AVOptions-enabled child or NULL - */ -void *av_opt_child_next(void *obj, void *prev); - -#if FF_API_CHILD_CLASS_NEXT -/** - * Iterate over potential AVOptions-enabled children of parent. - * - * @param prev result of a previous call to this function or NULL - * @return AVClass corresponding to next potential child or NULL - * - * @deprecated use av_opt_child_class_iterate - */ -attribute_deprecated -const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev); -#endif - -/** - * Iterate over potential AVOptions-enabled children of parent. - * - * @param iter a pointer where iteration state is stored. - * @return AVClass corresponding to next potential child or NULL - */ -const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter); - -/** - * @defgroup opt_set_funcs Option setting functions - * @{ - * Those functions set the field of obj with the given name to value. - * - * @param[in] obj A struct whose first element is a pointer to an AVClass. - * @param[in] name the name of the field to set - * @param[in] val The value to set. In case of av_opt_set() if the field is not - * of a string type, then the given string is parsed. - * SI postfixes and some named scalars are supported. - * If the field is of a numeric type, it has to be a numeric or named - * scalar. Behavior with more than one scalar and +- infix operators - * is undefined. - * If the field is of a flags type, it has to be a sequence of numeric - * scalars or named flags separated by '+' or '-'. Prefixing a flag - * with '+' causes it to be set without affecting the other flags; - * similarly, '-' unsets a flag. - * If the field is of a dictionary type, it has to be a ':' separated list of - * key=value parameters. Values containing ':' special characters must be - * escaped. - * @param search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN - * is passed here, then the option may be set on a child of obj. - * - * @return 0 if the value has been set, or an AVERROR code in case of - * error: - * AVERROR_OPTION_NOT_FOUND if no matching option exists - * AVERROR(ERANGE) if the value is out of range - * AVERROR(EINVAL) if the value is not valid - */ -int av_opt_set (void *obj, const char *name, const char *val, int search_flags); -int av_opt_set_int (void *obj, const char *name, int64_t val, int search_flags); -int av_opt_set_double (void *obj, const char *name, double val, int search_flags); -int av_opt_set_q (void *obj, const char *name, AVRational val, int search_flags); -int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, int search_flags); -int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags); -int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags); -int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags); -int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags); -int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch_layout, int search_flags); -/** - * @note Any old dictionary present is discarded and replaced with a copy of the new one. The - * caller still owns val is and responsible for freeing it. - */ -int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags); - -/** - * Set a binary option to an integer list. - * - * @param obj AVClass object to set options on - * @param name name of the binary option - * @param val pointer to an integer list (must have the correct type with - * regard to the contents of the list) - * @param term list terminator (usually 0 or -1) - * @param flags search flags - */ -#define av_opt_set_int_list(obj, name, val, term, flags) \ - (av_int_list_length(val, term) > INT_MAX / sizeof(*(val)) ? \ - AVERROR(EINVAL) : \ - av_opt_set_bin(obj, name, (const uint8_t *)(val), \ - av_int_list_length(val, term) * sizeof(*(val)), flags)) - -/** - * @} - */ - -/** - * @defgroup opt_get_funcs Option getting functions - * @{ - * Those functions get a value of the option with the given name from an object. - * - * @param[in] obj a struct whose first element is a pointer to an AVClass. - * @param[in] name name of the option to get. - * @param[in] search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN - * is passed here, then the option may be found in a child of obj. - * @param[out] out_val value of the option will be written here - * @return >=0 on success, a negative error code otherwise - */ -/** - * @note the returned string will be av_malloc()ed and must be av_free()ed by the caller - * - * @note if AV_OPT_ALLOW_NULL is set in search_flags in av_opt_get, and the - * option is of type AV_OPT_TYPE_STRING, AV_OPT_TYPE_BINARY or AV_OPT_TYPE_DICT - * and is set to NULL, *out_val will be set to NULL instead of an allocated - * empty string. - */ -int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val); -int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val); -int av_opt_get_double (void *obj, const char *name, int search_flags, double *out_val); -int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational *out_val); -int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out); -int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt); -int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt); -int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val); -int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *ch_layout); -/** - * @param[out] out_val The returned dictionary is a copy of the actual value and must - * be freed with av_dict_free() by the caller - */ -int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val); -/** - * @} - */ -/** - * Gets a pointer to the requested field in a struct. - * This function allows accessing a struct even when its fields are moved or - * renamed since the application making the access has been compiled, - * - * @returns a pointer to the field, it can be cast to the correct type and read - * or written to. - */ -void *av_opt_ptr(const AVClass *avclass, void *obj, const char *name); - -/** - * Free an AVOptionRanges struct and set it to NULL. - */ -void av_opt_freep_ranges(AVOptionRanges **ranges); - -/** - * Get a list of allowed ranges for the given option. - * - * The returned list may depend on other fields in obj like for example profile. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges - * - * The result must be freed with av_opt_freep_ranges. - * - * @return number of compontents returned on success, a negative errro code otherwise - */ -int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags); - -/** - * Copy options from src object into dest object. - * - * Options that require memory allocation (e.g. string or binary) are malloc'ed in dest object. - * Original memory allocated for such options is freed unless both src and dest options points to the same memory. - * - * @param dest Object to copy from - * @param src Object to copy into - * @return 0 on success, negative on error - */ -int av_opt_copy(void *dest, const void *src); - -/** - * Get a default list of allowed ranges for the given option. - * - * This list is constructed without using the AVClass.query_ranges() callback - * and can be used as fallback from within the callback. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges - * - * The result must be freed with av_opt_free_ranges. - * - * @return number of compontents returned on success, a negative errro code otherwise - */ -int av_opt_query_ranges_default(AVOptionRanges **, void *obj, const char *key, int flags); - -/** - * Check if given option is set to its default value. - * - * Options o must belong to the obj. This function must not be called to check child's options state. - * @see av_opt_is_set_to_default_by_name(). - * - * @param obj AVClass object to check option on - * @param o option to be checked - * @return >0 when option is set to its default, - * 0 when option is not set its default, - * <0 on error - */ -int av_opt_is_set_to_default(void *obj, const AVOption *o); - -/** - * Check if given option is set to its default value. - * - * @param obj AVClass object to check option on - * @param name option name - * @param search_flags combination of AV_OPT_SEARCH_* - * @return >0 when option is set to its default, - * 0 when option is not set its default, - * <0 on error - */ -int av_opt_is_set_to_default_by_name(void *obj, const char *name, int search_flags); - - -#define AV_OPT_SERIALIZE_SKIP_DEFAULTS 0x00000001 ///< Serialize options that are not set to default values only. -#define AV_OPT_SERIALIZE_OPT_FLAGS_EXACT 0x00000002 ///< Serialize options that exactly match opt_flags only. - -/** - * Serialize object's options. - * - * Create a string containing object's serialized options. - * Such string may be passed back to av_opt_set_from_string() in order to restore option values. - * A key/value or pairs separator occurring in the serialized value or - * name string are escaped through the av_escape() function. - * - * @param[in] obj AVClass object to serialize - * @param[in] opt_flags serialize options with all the specified flags set (AV_OPT_FLAG) - * @param[in] flags combination of AV_OPT_SERIALIZE_* flags - * @param[out] buffer Pointer to buffer that will be allocated with string containg serialized options. - * Buffer must be freed by the caller when is no longer needed. - * @param[in] key_val_sep character used to separate key from value - * @param[in] pairs_sep character used to separate two pairs from each other - * @return >= 0 on success, negative on error - * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. - */ -int av_opt_serialize(void *obj, int opt_flags, int flags, char **buffer, - const char key_val_sep, const char pairs_sep); -/** - * @} - */ - -#endif /* AVUTIL_OPT_H */ diff --git a/prebuilts/aarch64/include/libavutil/parseutils.h b/prebuilts/aarch64/include/libavutil/parseutils.h deleted file mode 100644 index e66d24b..0000000 --- a/prebuilts/aarch64/include/libavutil/parseutils.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PARSEUTILS_H -#define AVUTIL_PARSEUTILS_H - -#include - -#include "rational.h" - -/** - * @file - * misc parsing utilities - */ - -/** - * Parse str and store the parsed ratio in q. - * - * Note that a ratio with infinite (1/0) or negative value is - * considered valid, so you should check on the returned value if you - * want to exclude those values. - * - * The undefined value can be expressed using the "0:0" string. - * - * @param[in,out] q pointer to the AVRational which will contain the ratio - * @param[in] str the string to parse: it has to be a string in the format - * num:den, a float number or an expression - * @param[in] max the maximum allowed numerator and denominator - * @param[in] log_offset log level offset which is applied to the log - * level of log_ctx - * @param[in] log_ctx parent logging context - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_ratio(AVRational *q, const char *str, int max, - int log_offset, void *log_ctx); - -#define av_parse_ratio_quiet(rate, str, max) \ - av_parse_ratio(rate, str, max, AV_LOG_MAX_OFFSET, NULL) - -/** - * Parse str and put in width_ptr and height_ptr the detected values. - * - * @param[in,out] width_ptr pointer to the variable which will contain the detected - * width value - * @param[in,out] height_ptr pointer to the variable which will contain the detected - * height value - * @param[in] str the string to parse: it has to be a string in the format - * width x height or a valid video size abbreviation. - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str); - -/** - * Parse str and store the detected values in *rate. - * - * @param[in,out] rate pointer to the AVRational which will contain the detected - * frame rate - * @param[in] str the string to parse: it has to be a string in the format - * rate_num / rate_den, a float number or a valid video rate abbreviation - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_video_rate(AVRational *rate, const char *str); - -/** - * Put the RGBA values that correspond to color_string in rgba_color. - * - * @param color_string a string specifying a color. It can be the name of - * a color (case insensitive match) or a [0x|#]RRGGBB[AA] sequence, - * possibly followed by "@" and a string representing the alpha - * component. - * The alpha component may be a string composed by "0x" followed by an - * hexadecimal number or a decimal number between 0.0 and 1.0, which - * represents the opacity value (0x00/0.0 means completely transparent, - * 0xff/1.0 completely opaque). - * If the alpha component is not specified then 0xff is assumed. - * The string "random" will result in a random color. - * @param slen length of the initial part of color_string containing the - * color. It can be set to -1 if color_string is a null terminated string - * containing nothing else than the color. - * @return >= 0 in case of success, a negative value in case of - * failure (for example if color_string cannot be parsed). - */ -int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen, - void *log_ctx); - -/** - * Get the name of a color from the internal table of hard-coded named - * colors. - * - * This function is meant to enumerate the color names recognized by - * av_parse_color(). - * - * @param color_idx index of the requested color, starting from 0 - * @param rgbp if not NULL, will point to a 3-elements array with the color value in RGB - * @return the color name string or NULL if color_idx is not in the array - */ -const char *av_get_known_color_name(int color_idx, const uint8_t **rgb); - -/** - * Parse timestr and return in *time a corresponding number of - * microseconds. - * - * @param timeval puts here the number of microseconds corresponding - * to the string in timestr. If the string represents a duration, it - * is the number of microseconds contained in the time interval. If - * the string is a date, is the number of microseconds since 1st of - * January, 1970 up to the time of the parsed date. If timestr cannot - * be successfully parsed, set *time to INT64_MIN. - - * @param timestr a string representing a date or a duration. - * - If a date the syntax is: - * @code - * [{YYYY-MM-DD|YYYYMMDD}[T|t| ]]{{HH:MM:SS[.m...]]]}|{HHMMSS[.m...]]]}}[Z] - * now - * @endcode - * If the value is "now" it takes the current time. - * Time is local time unless Z is appended, in which case it is - * interpreted as UTC. - * If the year-month-day part is not specified it takes the current - * year-month-day. - * - If a duration the syntax is: - * @code - * [-][HH:]MM:SS[.m...] - * [-]S+[.m...] - * @endcode - * @param duration flag which tells how to interpret timestr, if not - * zero timestr is interpreted as a duration, otherwise as a date - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_parse_time(int64_t *timeval, const char *timestr, int duration); - -/** - * Attempt to find a specific tag in a URL. - * - * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done. - * Return 1 if found. - */ -int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info); - -/** - * Simplified version of strptime - * - * Parse the input string p according to the format string fmt and - * store its results in the structure dt. - * This implementation supports only a subset of the formats supported - * by the standard strptime(). - * - * The supported input field descriptors are listed below. - * - %H: the hour as a decimal number, using a 24-hour clock, in the - * range '00' through '23' - * - %J: hours as a decimal number, in the range '0' through INT_MAX - * - %M: the minute as a decimal number, using a 24-hour clock, in the - * range '00' through '59' - * - %S: the second as a decimal number, using a 24-hour clock, in the - * range '00' through '59' - * - %Y: the year as a decimal number, using the Gregorian calendar - * - %m: the month as a decimal number, in the range '1' through '12' - * - %d: the day of the month as a decimal number, in the range '1' - * through '31' - * - %T: alias for '%H:%M:%S' - * - %%: a literal '%' - * - * @return a pointer to the first character not processed in this function - * call. In case the input string contains more characters than - * required by the format string the return value points right after - * the last consumed input character. In case the whole input string - * is consumed the return value points to the null byte at the end of - * the string. On failure NULL is returned. - */ -char *av_small_strptime(const char *p, const char *fmt, struct tm *dt); - -/** - * Convert the decomposed UTC time in tm to a time_t value. - */ -time_t av_timegm(struct tm *tm); - -#endif /* AVUTIL_PARSEUTILS_H */ diff --git a/prebuilts/aarch64/include/libavutil/pixdesc.h b/prebuilts/aarch64/include/libavutil/pixdesc.h deleted file mode 100644 index 9b9d386..0000000 --- a/prebuilts/aarch64/include/libavutil/pixdesc.h +++ /dev/null @@ -1,442 +0,0 @@ -/* - * pixel format descriptor - * Copyright (c) 2009 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXDESC_H -#define AVUTIL_PIXDESC_H - -#include - -#include "attributes.h" -#include "pixfmt.h" -#include "version.h" - -typedef struct AVComponentDescriptor { - /** - * Which of the 4 planes contains the component. - */ - int plane; - - /** - * Number of elements between 2 horizontally consecutive pixels. - * Elements are bits for bitstream formats, bytes otherwise. - */ - int step; - - /** - * Number of elements before the component of the first pixel. - * Elements are bits for bitstream formats, bytes otherwise. - */ - int offset; - - /** - * Number of least significant bits that must be shifted away - * to get the value. - */ - int shift; - - /** - * Number of bits in the component. - */ - int depth; - -#if FF_API_PLUS1_MINUS1 - /** deprecated, use step instead */ - attribute_deprecated int step_minus1; - - /** deprecated, use depth instead */ - attribute_deprecated int depth_minus1; - - /** deprecated, use offset instead */ - attribute_deprecated int offset_plus1; -#endif -} AVComponentDescriptor; - -/** - * Descriptor that unambiguously describes how the bits of a pixel are - * stored in the up to 4 data planes of an image. It also stores the - * subsampling factors and number of components. - * - * @note This is separate of the colorspace (RGB, YCbCr, YPbPr, JPEG-style YUV - * and all the YUV variants) AVPixFmtDescriptor just stores how values - * are stored not what these values represent. - */ -typedef struct AVPixFmtDescriptor { - const char *name; - uint8_t nb_components; ///< The number of components each pixel has, (1-4) - - /** - * Amount to shift the luma width right to find the chroma width. - * For YV12 this is 1 for example. - * chroma_width = AV_CEIL_RSHIFT(luma_width, log2_chroma_w) - * The note above is needed to ensure rounding up. - * This value only refers to the chroma components. - */ - uint8_t log2_chroma_w; - - /** - * Amount to shift the luma height right to find the chroma height. - * For YV12 this is 1 for example. - * chroma_height= AV_CEIL_RSHIFT(luma_height, log2_chroma_h) - * The note above is needed to ensure rounding up. - * This value only refers to the chroma components. - */ - uint8_t log2_chroma_h; - - /** - * Combination of AV_PIX_FMT_FLAG_... flags. - */ - uint64_t flags; - - /** - * Parameters that describe how pixels are packed. - * If the format has 1 or 2 components, then luma is 0. - * If the format has 3 or 4 components: - * if the RGB flag is set then 0 is red, 1 is green and 2 is blue; - * otherwise 0 is luma, 1 is chroma-U and 2 is chroma-V. - * - * If present, the Alpha channel is always the last component. - */ - AVComponentDescriptor comp[4]; - - /** - * Alternative comma-separated names. - */ - const char *alias; -} AVPixFmtDescriptor; - -/** - * Pixel format is big-endian. - */ -#define AV_PIX_FMT_FLAG_BE (1 << 0) -/** - * Pixel format has a palette in data[1], values are indexes in this palette. - */ -#define AV_PIX_FMT_FLAG_PAL (1 << 1) -/** - * All values of a component are bit-wise packed end to end. - */ -#define AV_PIX_FMT_FLAG_BITSTREAM (1 << 2) -/** - * Pixel format is an HW accelerated format. - */ -#define AV_PIX_FMT_FLAG_HWACCEL (1 << 3) -/** - * At least one pixel component is not in the first data plane. - */ -#define AV_PIX_FMT_FLAG_PLANAR (1 << 4) -/** - * The pixel format contains RGB-like data (as opposed to YUV/grayscale). - */ -#define AV_PIX_FMT_FLAG_RGB (1 << 5) - -#if FF_API_PSEUDOPAL -/** - * The pixel format is "pseudo-paletted". This means that it contains a - * fixed palette in the 2nd plane but the palette is fixed/constant for each - * PIX_FMT. This allows interpreting the data as if it was PAL8, which can - * in some cases be simpler. Or the data can be interpreted purely based on - * the pixel format without using the palette. - * An example of a pseudo-paletted format is AV_PIX_FMT_GRAY8 - * - * @deprecated This flag is deprecated, and will be removed. When it is removed, - * the extra palette allocation in AVFrame.data[1] is removed as well. Only - * actual paletted formats (as indicated by AV_PIX_FMT_FLAG_PAL) will have a - * palette. Starting with FFmpeg versions which have this flag deprecated, the - * extra "pseudo" palette is already ignored, and API users are not required to - * allocate a palette for AV_PIX_FMT_FLAG_PSEUDOPAL formats (it was required - * before the deprecation, though). - */ -#define AV_PIX_FMT_FLAG_PSEUDOPAL (1 << 6) -#endif - -/** - * The pixel format has an alpha channel. This is set on all formats that - * support alpha in some way, including AV_PIX_FMT_PAL8. The alpha is always - * straight, never pre-multiplied. - * - * If a codec or a filter does not support alpha, it should set all alpha to - * opaque, or use the equivalent pixel formats without alpha component, e.g. - * AV_PIX_FMT_RGB0 (or AV_PIX_FMT_RGB24 etc.) instead of AV_PIX_FMT_RGBA. - */ -#define AV_PIX_FMT_FLAG_ALPHA (1 << 7) - -/** - * The pixel format is following a Bayer pattern - */ -#define AV_PIX_FMT_FLAG_BAYER (1 << 8) - -/** - * The pixel format contains IEEE-754 floating point values. Precision (double, - * single, or half) should be determined by the pixel size (64, 32, or 16 bits). - */ -#define AV_PIX_FMT_FLAG_FLOAT (1 << 9) - -/** - * Return the number of bits per pixel used by the pixel format - * described by pixdesc. Note that this is not the same as the number - * of bits per sample. - * - * The returned number of bits refers to the number of bits actually - * used for storing the pixel information, that is padding bits are - * not counted. - */ -int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); - -/** - * Return the number of bits per pixel for the pixel format - * described by pixdesc, including any padding or unused bits. - */ -int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); - -/** - * @return a pixel format descriptor for provided pixel format or NULL if - * this pixel format is unknown. - */ -const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt); - -/** - * Iterate over all pixel format descriptors known to libavutil. - * - * @param prev previous descriptor. NULL to get the first descriptor. - * - * @return next descriptor or NULL after the last descriptor - */ -const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev); - -/** - * @return an AVPixelFormat id described by desc, or AV_PIX_FMT_NONE if desc - * is not a valid pointer to a pixel format descriptor. - */ -enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc); - -/** - * Utility function to access log2_chroma_w log2_chroma_h from - * the pixel format AVPixFmtDescriptor. - * - * @param[in] pix_fmt the pixel format - * @param[out] h_shift store log2_chroma_w (horizontal/width shift) - * @param[out] v_shift store log2_chroma_h (vertical/height shift) - * - * @return 0 on success, AVERROR(ENOSYS) on invalid or unknown pixel format - */ -int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, - int *h_shift, int *v_shift); - -/** - * @return number of planes in pix_fmt, a negative AVERROR if pix_fmt is not a - * valid pixel format. - */ -int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt); - -/** - * @return the name for provided color range or NULL if unknown. - */ -const char *av_color_range_name(enum AVColorRange range); - -/** - * @return the AVColorRange value for name or an AVError if not found. - */ -int av_color_range_from_name(const char *name); - -/** - * @return the name for provided color primaries or NULL if unknown. - */ -const char *av_color_primaries_name(enum AVColorPrimaries primaries); - -/** - * @return the AVColorPrimaries value for name or an AVError if not found. - */ -int av_color_primaries_from_name(const char *name); - -/** - * @return the name for provided color transfer or NULL if unknown. - */ -const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer); - -/** - * @return the AVColorTransferCharacteristic value for name or an AVError if not found. - */ -int av_color_transfer_from_name(const char *name); - -/** - * @return the name for provided color space or NULL if unknown. - */ -const char *av_color_space_name(enum AVColorSpace space); - -/** - * @return the AVColorSpace value for name or an AVError if not found. - */ -int av_color_space_from_name(const char *name); - -/** - * @return the name for provided chroma location or NULL if unknown. - */ -const char *av_chroma_location_name(enum AVChromaLocation location); - -/** - * @return the AVChromaLocation value for name or an AVError if not found. - */ -int av_chroma_location_from_name(const char *name); - -/** - * Return the pixel format corresponding to name. - * - * If there is no pixel format with name name, then looks for a - * pixel format with the name corresponding to the native endian - * format of name. - * For example in a little-endian system, first looks for "gray16", - * then for "gray16le". - * - * Finally if no pixel format has been found, returns AV_PIX_FMT_NONE. - */ -enum AVPixelFormat av_get_pix_fmt(const char *name); - -/** - * Return the short name for a pixel format, NULL in case pix_fmt is - * unknown. - * - * @see av_get_pix_fmt(), av_get_pix_fmt_string() - */ -const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt); - -/** - * Print in buf the string corresponding to the pixel format with - * number pix_fmt, or a header if pix_fmt is negative. - * - * @param buf the buffer where to write the string - * @param buf_size the size of buf - * @param pix_fmt the number of the pixel format to print the - * corresponding info string, or a negative value to print the - * corresponding header. - */ -char *av_get_pix_fmt_string(char *buf, int buf_size, - enum AVPixelFormat pix_fmt); - -/** - * Read a line from an image, and write the values of the - * pixel format component c to dst. - * - * @param data the array containing the pointers to the planes of the image - * @param linesize the array containing the linesizes of the image - * @param desc the pixel format descriptor for the image - * @param x the horizontal coordinate of the first pixel to read - * @param y the vertical coordinate of the first pixel to read - * @param w the width of the line to read, that is the number of - * values to write to dst - * @param read_pal_component if not zero and the format is a paletted - * format writes the values corresponding to the palette - * component c in data[1] to dst, rather than the palette indexes in - * data[0]. The behavior is undefined if the format is not paletted. - * @param dst_element_size size of elements in dst array (2 or 4 byte) - */ -void av_read_image_line2(void *dst, const uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int read_pal_component, - int dst_element_size); - -void av_read_image_line(uint16_t *dst, const uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int read_pal_component); - -/** - * Write the values from src to the pixel format component c of an - * image line. - * - * @param src array containing the values to write - * @param data the array containing the pointers to the planes of the - * image to write into. It is supposed to be zeroed. - * @param linesize the array containing the linesizes of the image - * @param desc the pixel format descriptor for the image - * @param x the horizontal coordinate of the first pixel to write - * @param y the vertical coordinate of the first pixel to write - * @param w the width of the line to write, that is the number of - * values to write to the image line - * @param src_element_size size of elements in src array (2 or 4 byte) - */ -void av_write_image_line2(const void *src, uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int src_element_size); - -void av_write_image_line(const uint16_t *src, uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w); - -/** - * Utility function to swap the endianness of a pixel format. - * - * @param[in] pix_fmt the pixel format - * - * @return pixel format with swapped endianness if it exists, - * otherwise AV_PIX_FMT_NONE - */ -enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt); - -#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ -#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ -#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ -#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ -#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ -#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ - -/** - * Compute what kind of losses will occur when converting from one specific - * pixel format to another. - * When converting from one pixel format to another, information loss may occur. - * For example, when converting from RGB24 to GRAY, the color information will - * be lost. Similarly, other losses occur when converting from some formats to - * other formats. These losses can involve loss of chroma, but also loss of - * resolution, loss of color depth, loss due to the color space conversion, loss - * of the alpha bits or loss due to color quantization. - * av_get_fix_fmt_loss() informs you about the various types of losses - * which will occur when converting from one pixel format to another. - * - * @param[in] dst_pix_fmt destination pixel format - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @return Combination of flags informing you what kind of losses will occur - * (maximum loss for an invalid dst_pix_fmt). - */ -int av_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, - enum AVPixelFormat src_pix_fmt, - int has_alpha); - -/** - * Compute what kind of losses will occur when converting from one specific - * pixel format to another. - * When converting from one pixel format to another, information loss may occur. - * For example, when converting from RGB24 to GRAY, the color information will - * be lost. Similarly, other losses occur when converting from some formats to - * other formats. These losses can involve loss of chroma, but also loss of - * resolution, loss of color depth, loss due to the color space conversion, loss - * of the alpha bits or loss due to color quantization. - * av_get_fix_fmt_loss() informs you about the various types of losses - * which will occur when converting from one pixel format to another. - * - * @param[in] dst_pix_fmt destination pixel format - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @return Combination of flags informing you what kind of losses will occur - * (maximum loss for an invalid dst_pix_fmt). - */ -enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); - -#endif /* AVUTIL_PIXDESC_H */ diff --git a/prebuilts/aarch64/include/libavutil/pixelutils.h b/prebuilts/aarch64/include/libavutil/pixelutils.h deleted file mode 100644 index a8dbc15..0000000 --- a/prebuilts/aarch64/include/libavutil/pixelutils.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXELUTILS_H -#define AVUTIL_PIXELUTILS_H - -#include -#include -#include "common.h" - -/** - * Sum of abs(src1[x] - src2[x]) - */ -typedef int (*av_pixelutils_sad_fn)(const uint8_t *src1, ptrdiff_t stride1, - const uint8_t *src2, ptrdiff_t stride2); - -/** - * Get a potentially optimized pointer to a Sum-of-absolute-differences - * function (see the av_pixelutils_sad_fn prototype). - * - * @param w_bits 1< - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXFMT_H -#define AVUTIL_PIXFMT_H - -/** - * @file - * pixel format definitions - */ - -#include "libavutil/avconfig.h" -#include "version.h" - -#define AVPALETTE_SIZE 1024 -#define AVPALETTE_COUNT 256 - -/** - * Pixel format. - * - * @note - * AV_PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA - * color is put together as: - * (A << 24) | (R << 16) | (G << 8) | B - * This is stored as BGRA on little-endian CPU architectures and ARGB on - * big-endian CPUs. - * - * @note - * If the resolution is not a multiple of the chroma subsampling factor - * then the chroma plane resolution must be rounded up. - * - * @par - * When the pixel format is palettized RGB32 (AV_PIX_FMT_PAL8), the palettized - * image data is stored in AVFrame.data[0]. The palette is transported in - * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is - * formatted the same as in AV_PIX_FMT_RGB32 described above (i.e., it is - * also endian-specific). Note also that the individual RGB32 palette - * components stored in AVFrame.data[1] should be in the range 0..255. - * This is important as many custom PAL8 video codecs that were designed - * to run on the IBM VGA graphics adapter use 6-bit palette components. - * - * @par - * For all the 8 bits per pixel formats, an RGB32 palette is in data[1] like - * for pal8. This palette is filled in automatically by the function - * allocating the picture. - */ -enum AVPixelFormat { - AV_PIX_FMT_NONE = -1, - AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) - AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr - AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... - AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... - AV_PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - AV_PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) - AV_PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) - AV_PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) - AV_PIX_FMT_GRAY8, ///< Y , 8bpp - AV_PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb - AV_PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb - AV_PIX_FMT_PAL8, ///< 8 bits with AV_PIX_FMT_RGB32 palette - AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range - AV_PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range - AV_PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range - AV_PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 - AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 - AV_PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) - AV_PIX_FMT_BGR4, ///< 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 - AV_PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) - AV_PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) - AV_PIX_FMT_RGB4, ///< 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 - AV_PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) - AV_PIX_FMT_NV12, ///< 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) - AV_PIX_FMT_NV21, ///< as above, but U and V bytes are swapped - - AV_PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... - AV_PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... - AV_PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... - AV_PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... - - AV_PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian - AV_PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian - AV_PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) - AV_PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range - AV_PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) - AV_PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian - AV_PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian - - AV_PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian - AV_PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian - AV_PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined - AV_PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined - - AV_PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian - AV_PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian - AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined - AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined - -#if FF_API_VAAPI - /** @name Deprecated pixel formats */ - /**@{*/ - AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers - AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers - AV_PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a VASurfaceID - /**@}*/ - AV_PIX_FMT_VAAPI = AV_PIX_FMT_VAAPI_VLD, -#else - /** - * Hardware acceleration through VA-API, data[3] contains a - * VASurfaceID. - */ - AV_PIX_FMT_VAAPI, -#endif - - AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer - - AV_PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_YA8, ///< 8 bits gray, 8 bits alpha - - AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 - AV_PIX_FMT_GRAY8A= AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 - - AV_PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian - AV_PIX_FMT_BGR48LE, ///< 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. - */ - AV_PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp - AV_PIX_FMT_GBR24P = AV_PIX_FMT_GBRP, // alias for #AV_PIX_FMT_GBRP - AV_PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big-endian - AV_PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little-endian - AV_PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big-endian - AV_PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little-endian - AV_PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big-endian - AV_PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little-endian - AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) - AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) - AV_PIX_FMT_YUVA420P9BE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian - AV_PIX_FMT_YUVA420P9LE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian - AV_PIX_FMT_YUVA422P9BE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian - AV_PIX_FMT_YUVA422P9LE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian - AV_PIX_FMT_YUVA444P9BE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian - AV_PIX_FMT_YUVA444P9LE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian - AV_PIX_FMT_YUVA420P10BE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - AV_PIX_FMT_YUVA420P10LE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - AV_PIX_FMT_YUVA422P10BE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA422P10LE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA444P10BE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA444P10LE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA420P16BE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - AV_PIX_FMT_YUVA420P16LE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - AV_PIX_FMT_YUVA422P16BE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA422P16LE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - - AV_PIX_FMT_VDPAU, ///< HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface - - AV_PIX_FMT_XYZ12LE, ///< 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 - AV_PIX_FMT_XYZ12BE, ///< 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 - AV_PIX_FMT_NV16, ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - AV_PIX_FMT_NV20LE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_NV20BE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - - AV_PIX_FMT_RGBA64BE, ///< 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 - AV_PIX_FMT_RGBA64LE, ///< 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 - AV_PIX_FMT_BGRA64BE, ///< 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 - AV_PIX_FMT_BGRA64LE, ///< 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 - - AV_PIX_FMT_YVYU422, ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb - - AV_PIX_FMT_YA16BE, ///< 16 bits gray, 16 bits alpha (big-endian) - AV_PIX_FMT_YA16LE, ///< 16 bits gray, 16 bits alpha (little-endian) - - AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp - AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian - AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian - /** - * HW acceleration through QSV, data[3] contains a pointer to the - * mfxFrameSurface1 structure. - */ - AV_PIX_FMT_QSV, - /** - * HW acceleration though MMAL, data[3] contains a pointer to the - * MMAL_BUFFER_HEADER_T structure. - */ - AV_PIX_FMT_MMAL, - - AV_PIX_FMT_D3D11VA_VLD, ///< 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. - */ - AV_PIX_FMT_CUDA, - - AV_PIX_FMT_0RGB, ///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined - AV_PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined - AV_PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined - AV_PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined - - AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big-endian - AV_PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little-endian - AV_PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big-endian - AV_PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little-endian - AV_PIX_FMT_YUVJ411P, ///< 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 - - AV_PIX_FMT_BAYER_BGGR8, ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples - AV_PIX_FMT_BAYER_RGGB8, ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples - AV_PIX_FMT_BAYER_GBRG8, ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples - AV_PIX_FMT_BAYER_GRBG8, ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples - AV_PIX_FMT_BAYER_BGGR16LE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_BGGR16BE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_RGGB16LE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_RGGB16BE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_GBRG16LE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_GBRG16BE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian - - AV_PIX_FMT_XVMC,///< XVideo Motion Acceleration via common packet passing - - AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian - AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian - AV_PIX_FMT_YUV440P12LE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian - AV_PIX_FMT_YUV440P12BE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian - AV_PIX_FMT_AYUV64LE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian - AV_PIX_FMT_AYUV64BE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian - - AV_PIX_FMT_VIDEOTOOLBOX, ///< hardware decoding through Videotoolbox - - AV_PIX_FMT_P010LE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian - AV_PIX_FMT_P010BE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian - - AV_PIX_FMT_GBRAP12BE, ///< planar GBR 4:4:4:4 48bpp, big-endian - AV_PIX_FMT_GBRAP12LE, ///< planar GBR 4:4:4:4 48bpp, little-endian - - AV_PIX_FMT_GBRAP10BE, ///< planar GBR 4:4:4:4 40bpp, big-endian - AV_PIX_FMT_GBRAP10LE, ///< planar GBR 4:4:4:4 40bpp, little-endian - - AV_PIX_FMT_MEDIACODEC, ///< hardware decoding through MediaCodec - - AV_PIX_FMT_GRAY12BE, ///< Y , 12bpp, big-endian - AV_PIX_FMT_GRAY12LE, ///< Y , 12bpp, little-endian - AV_PIX_FMT_GRAY10BE, ///< Y , 10bpp, big-endian - AV_PIX_FMT_GRAY10LE, ///< Y , 10bpp, little-endian - - AV_PIX_FMT_P016LE, ///< like NV12, with 16bpp per component, little-endian - AV_PIX_FMT_P016BE, ///< 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). - */ - AV_PIX_FMT_D3D11, - - AV_PIX_FMT_GRAY9BE, ///< Y , 9bpp, big-endian - AV_PIX_FMT_GRAY9LE, ///< Y , 9bpp, little-endian - - AV_PIX_FMT_GBRPF32BE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, big-endian - AV_PIX_FMT_GBRPF32LE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, little-endian - AV_PIX_FMT_GBRAPF32BE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, big-endian - AV_PIX_FMT_GBRAPF32LE, ///< 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. - */ - AV_PIX_FMT_DRM_PRIME, - /** - * 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. - */ - AV_PIX_FMT_OPENCL, - - AV_PIX_FMT_GRAY14BE, ///< Y , 14bpp, big-endian - AV_PIX_FMT_GRAY14LE, ///< Y , 14bpp, little-endian - - AV_PIX_FMT_GRAYF32BE, ///< IEEE-754 single precision Y, 32bpp, big-endian - AV_PIX_FMT_GRAYF32LE, ///< IEEE-754 single precision Y, 32bpp, little-endian - - AV_PIX_FMT_YUVA422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, big-endian - AV_PIX_FMT_YUVA422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, little-endian - AV_PIX_FMT_YUVA444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, big-endian - AV_PIX_FMT_YUVA444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, little-endian - - AV_PIX_FMT_NV24, ///< 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) - AV_PIX_FMT_NV42, ///< as above, but U and V bytes are swapped - - /** - * Vulkan hardware images. - * - * data[0] points to an AVVkFrame - */ - AV_PIX_FMT_VULKAN, - - AV_PIX_FMT_Y210BE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, big-endian - AV_PIX_FMT_Y210LE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, little-endian - - AV_PIX_FMT_X2RGB10LE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_X2RGB10BE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions -}; - -#if AV_HAVE_BIGENDIAN -# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##be -#else -# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##le -#endif - -#define AV_PIX_FMT_RGB32 AV_PIX_FMT_NE(ARGB, BGRA) -#define AV_PIX_FMT_RGB32_1 AV_PIX_FMT_NE(RGBA, ABGR) -#define AV_PIX_FMT_BGR32 AV_PIX_FMT_NE(ABGR, RGBA) -#define AV_PIX_FMT_BGR32_1 AV_PIX_FMT_NE(BGRA, ARGB) -#define AV_PIX_FMT_0RGB32 AV_PIX_FMT_NE(0RGB, BGR0) -#define AV_PIX_FMT_0BGR32 AV_PIX_FMT_NE(0BGR, RGB0) - -#define AV_PIX_FMT_GRAY9 AV_PIX_FMT_NE(GRAY9BE, GRAY9LE) -#define AV_PIX_FMT_GRAY10 AV_PIX_FMT_NE(GRAY10BE, GRAY10LE) -#define AV_PIX_FMT_GRAY12 AV_PIX_FMT_NE(GRAY12BE, GRAY12LE) -#define AV_PIX_FMT_GRAY14 AV_PIX_FMT_NE(GRAY14BE, GRAY14LE) -#define AV_PIX_FMT_GRAY16 AV_PIX_FMT_NE(GRAY16BE, GRAY16LE) -#define AV_PIX_FMT_YA16 AV_PIX_FMT_NE(YA16BE, YA16LE) -#define AV_PIX_FMT_RGB48 AV_PIX_FMT_NE(RGB48BE, RGB48LE) -#define AV_PIX_FMT_RGB565 AV_PIX_FMT_NE(RGB565BE, RGB565LE) -#define AV_PIX_FMT_RGB555 AV_PIX_FMT_NE(RGB555BE, RGB555LE) -#define AV_PIX_FMT_RGB444 AV_PIX_FMT_NE(RGB444BE, RGB444LE) -#define AV_PIX_FMT_RGBA64 AV_PIX_FMT_NE(RGBA64BE, RGBA64LE) -#define AV_PIX_FMT_BGR48 AV_PIX_FMT_NE(BGR48BE, BGR48LE) -#define AV_PIX_FMT_BGR565 AV_PIX_FMT_NE(BGR565BE, BGR565LE) -#define AV_PIX_FMT_BGR555 AV_PIX_FMT_NE(BGR555BE, BGR555LE) -#define AV_PIX_FMT_BGR444 AV_PIX_FMT_NE(BGR444BE, BGR444LE) -#define AV_PIX_FMT_BGRA64 AV_PIX_FMT_NE(BGRA64BE, BGRA64LE) - -#define AV_PIX_FMT_YUV420P9 AV_PIX_FMT_NE(YUV420P9BE , YUV420P9LE) -#define AV_PIX_FMT_YUV422P9 AV_PIX_FMT_NE(YUV422P9BE , YUV422P9LE) -#define AV_PIX_FMT_YUV444P9 AV_PIX_FMT_NE(YUV444P9BE , YUV444P9LE) -#define AV_PIX_FMT_YUV420P10 AV_PIX_FMT_NE(YUV420P10BE, YUV420P10LE) -#define AV_PIX_FMT_YUV422P10 AV_PIX_FMT_NE(YUV422P10BE, YUV422P10LE) -#define AV_PIX_FMT_YUV440P10 AV_PIX_FMT_NE(YUV440P10BE, YUV440P10LE) -#define AV_PIX_FMT_YUV444P10 AV_PIX_FMT_NE(YUV444P10BE, YUV444P10LE) -#define AV_PIX_FMT_YUV420P12 AV_PIX_FMT_NE(YUV420P12BE, YUV420P12LE) -#define AV_PIX_FMT_YUV422P12 AV_PIX_FMT_NE(YUV422P12BE, YUV422P12LE) -#define AV_PIX_FMT_YUV440P12 AV_PIX_FMT_NE(YUV440P12BE, YUV440P12LE) -#define AV_PIX_FMT_YUV444P12 AV_PIX_FMT_NE(YUV444P12BE, YUV444P12LE) -#define AV_PIX_FMT_YUV420P14 AV_PIX_FMT_NE(YUV420P14BE, YUV420P14LE) -#define AV_PIX_FMT_YUV422P14 AV_PIX_FMT_NE(YUV422P14BE, YUV422P14LE) -#define AV_PIX_FMT_YUV444P14 AV_PIX_FMT_NE(YUV444P14BE, YUV444P14LE) -#define AV_PIX_FMT_YUV420P16 AV_PIX_FMT_NE(YUV420P16BE, YUV420P16LE) -#define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE) -#define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE) - -#define AV_PIX_FMT_GBRP9 AV_PIX_FMT_NE(GBRP9BE , GBRP9LE) -#define AV_PIX_FMT_GBRP10 AV_PIX_FMT_NE(GBRP10BE, GBRP10LE) -#define AV_PIX_FMT_GBRP12 AV_PIX_FMT_NE(GBRP12BE, GBRP12LE) -#define AV_PIX_FMT_GBRP14 AV_PIX_FMT_NE(GBRP14BE, GBRP14LE) -#define AV_PIX_FMT_GBRP16 AV_PIX_FMT_NE(GBRP16BE, GBRP16LE) -#define AV_PIX_FMT_GBRAP10 AV_PIX_FMT_NE(GBRAP10BE, GBRAP10LE) -#define AV_PIX_FMT_GBRAP12 AV_PIX_FMT_NE(GBRAP12BE, GBRAP12LE) -#define AV_PIX_FMT_GBRAP16 AV_PIX_FMT_NE(GBRAP16BE, GBRAP16LE) - -#define AV_PIX_FMT_BAYER_BGGR16 AV_PIX_FMT_NE(BAYER_BGGR16BE, BAYER_BGGR16LE) -#define AV_PIX_FMT_BAYER_RGGB16 AV_PIX_FMT_NE(BAYER_RGGB16BE, BAYER_RGGB16LE) -#define AV_PIX_FMT_BAYER_GBRG16 AV_PIX_FMT_NE(BAYER_GBRG16BE, BAYER_GBRG16LE) -#define AV_PIX_FMT_BAYER_GRBG16 AV_PIX_FMT_NE(BAYER_GRBG16BE, BAYER_GRBG16LE) - -#define AV_PIX_FMT_GBRPF32 AV_PIX_FMT_NE(GBRPF32BE, GBRPF32LE) -#define AV_PIX_FMT_GBRAPF32 AV_PIX_FMT_NE(GBRAPF32BE, GBRAPF32LE) - -#define AV_PIX_FMT_GRAYF32 AV_PIX_FMT_NE(GRAYF32BE, GRAYF32LE) - -#define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE , YUVA420P9LE) -#define AV_PIX_FMT_YUVA422P9 AV_PIX_FMT_NE(YUVA422P9BE , YUVA422P9LE) -#define AV_PIX_FMT_YUVA444P9 AV_PIX_FMT_NE(YUVA444P9BE , YUVA444P9LE) -#define AV_PIX_FMT_YUVA420P10 AV_PIX_FMT_NE(YUVA420P10BE, YUVA420P10LE) -#define AV_PIX_FMT_YUVA422P10 AV_PIX_FMT_NE(YUVA422P10BE, YUVA422P10LE) -#define AV_PIX_FMT_YUVA444P10 AV_PIX_FMT_NE(YUVA444P10BE, YUVA444P10LE) -#define AV_PIX_FMT_YUVA422P12 AV_PIX_FMT_NE(YUVA422P12BE, YUVA422P12LE) -#define AV_PIX_FMT_YUVA444P12 AV_PIX_FMT_NE(YUVA444P12BE, YUVA444P12LE) -#define AV_PIX_FMT_YUVA420P16 AV_PIX_FMT_NE(YUVA420P16BE, YUVA420P16LE) -#define AV_PIX_FMT_YUVA422P16 AV_PIX_FMT_NE(YUVA422P16BE, YUVA422P16LE) -#define AV_PIX_FMT_YUVA444P16 AV_PIX_FMT_NE(YUVA444P16BE, YUVA444P16LE) - -#define AV_PIX_FMT_XYZ12 AV_PIX_FMT_NE(XYZ12BE, XYZ12LE) -#define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE) -#define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE) -#define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE) -#define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE) - -#define AV_PIX_FMT_Y210 AV_PIX_FMT_NE(Y210BE, Y210LE) -#define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE) - -/** - * Chromaticity coordinates of the source primaries. - * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.1. - */ -enum AVColorPrimaries { - AVCOL_PRI_RESERVED0 = 0, - AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B - AVCOL_PRI_UNSPECIFIED = 2, - AVCOL_PRI_RESERVED = 3, - AVCOL_PRI_BT470M = 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - - AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM - AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC - AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above - AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C - AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 - AVCOL_PRI_SMPTE428 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) - AVCOL_PRI_SMPTEST428_1 = AVCOL_PRI_SMPTE428, - AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3 - AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3 - AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E / JEDEC P22 phosphors - AVCOL_PRI_JEDEC_P22 = AVCOL_PRI_EBU3213, - AVCOL_PRI_NB ///< Not part of ABI -}; - -/** - * Color Transfer Characteristic. - * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.2. - */ -enum AVColorTransferCharacteristic { - AVCOL_TRC_RESERVED0 = 0, - AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 - AVCOL_TRC_UNSPECIFIED = 2, - AVCOL_TRC_RESERVED = 3, - AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM - AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG - AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC - AVCOL_TRC_SMPTE240M = 7, - AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics" - AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)" - AVCOL_TRC_LOG_SQRT = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)" - AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 - AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut - AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) - AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10-bit system - AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12-bit system - AVCOL_TRC_SMPTE2084 = 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems - AVCOL_TRC_SMPTEST2084 = AVCOL_TRC_SMPTE2084, - AVCOL_TRC_SMPTE428 = 17, ///< SMPTE ST 428-1 - AVCOL_TRC_SMPTEST428_1 = AVCOL_TRC_SMPTE428, - AVCOL_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" - AVCOL_TRC_NB ///< Not part of ABI -}; - -/** - * YUV colorspace type. - * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.3. - */ -enum AVColorSpace { - AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB) - AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B - AVCOL_SPC_UNSPECIFIED = 2, - AVCOL_SPC_RESERVED = 3, - AVCOL_SPC_FCC = 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 - AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC - AVCOL_SPC_SMPTE240M = 7, ///< functionally identical to above - AVCOL_SPC_YCGCO = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 - AVCOL_SPC_YCOCG = AVCOL_SPC_YCGCO, - AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system - AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system - AVCOL_SPC_SMPTE2085 = 11, ///< SMPTE 2085, Y'D'zD'x - AVCOL_SPC_CHROMA_DERIVED_NCL = 12, ///< Chromaticity-derived non-constant luminance system - AVCOL_SPC_CHROMA_DERIVED_CL = 13, ///< Chromaticity-derived constant luminance system - AVCOL_SPC_ICTCP = 14, ///< ITU-R BT.2100-0, ICtCp - AVCOL_SPC_NB ///< Not part of ABI -}; - -/** - * Visual content value range. - * - * These values are based on definitions that can be found in multiple - * specifications, such as ITU-T BT.709 (3.4 - Quantization of RGB, luminance - * and colour-difference signals), ITU-T BT.2020 (Table 5 - Digital - * Representation) as well as ITU-T BT.2100 (Table 9 - Digital 10- and 12-bit - * integer representation). At the time of writing, the BT.2100 one is - * recommended, as it also defines the full range representation. - * - * Common definitions: - * - For RGB and luminance planes such as Y in YCbCr and I in ICtCp, - * 'E' is the original value in range of 0.0 to 1.0. - * - For chrominance planes such as Cb,Cr and Ct,Cp, 'E' is the original - * value in range of -0.5 to 0.5. - * - 'n' is the output bit depth. - * - For additional definitions such as rounding and clipping to valid n - * bit unsigned integer range, please refer to BT.2100 (Table 9). - */ -enum AVColorRange { - AVCOL_RANGE_UNSPECIFIED = 0, - - /** - * Narrow or limited range content. - * - * - For luminance planes: - * - * (219 * E + 16) * 2^(n-8) - * - * F.ex. the range of 16-235 for 8 bits - * - * - For chrominance planes: - * - * (224 * E + 128) * 2^(n-8) - * - * F.ex. the range of 16-240 for 8 bits - */ - AVCOL_RANGE_MPEG = 1, - - /** - * Full range content. - * - * - For RGB and luminance planes: - * - * (2^n - 1) * E - * - * F.ex. the range of 0-255 for 8 bits - * - * - For chrominance planes: - * - * (2^n - 1) * E + 2^(n - 1) - * - * F.ex. the range of 1-255 for 8 bits - */ - AVCOL_RANGE_JPEG = 2, - AVCOL_RANGE_NB ///< Not part of ABI -}; - -/** - * Location of chroma samples. - * - * Illustration showing the location of the first (top left) chroma sample of the - * image, the left shows only luma, the right - * shows the location of the chroma sample, the 2 could be imagined to overlay - * each other but are drawn separately due to limitations of ASCII - * - * 1st 2nd 1st 2nd horizontal luma sample positions - * v v v v - * ______ ______ - *1st luma line > |X X ... |3 4 X ... X are luma samples, - * | |1 2 1-6 are possible chroma positions - *2nd luma line > |X X ... |5 6 X ... 0 is undefined/unknown position - */ -enum AVChromaLocation { - AVCHROMA_LOC_UNSPECIFIED = 0, - AVCHROMA_LOC_LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0 - AVCHROMA_LOC_CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0 - AVCHROMA_LOC_TOPLEFT = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 - AVCHROMA_LOC_TOP = 4, - AVCHROMA_LOC_BOTTOMLEFT = 5, - AVCHROMA_LOC_BOTTOM = 6, - AVCHROMA_LOC_NB ///< Not part of ABI -}; - -#endif /* AVUTIL_PIXFMT_H */ diff --git a/prebuilts/aarch64/include/libavutil/random_seed.h b/prebuilts/aarch64/include/libavutil/random_seed.h deleted file mode 100644 index 0462a04..0000000 --- a/prebuilts/aarch64/include/libavutil/random_seed.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2009 Baptiste Coudurier - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_RANDOM_SEED_H -#define AVUTIL_RANDOM_SEED_H - -#include -/** - * @addtogroup lavu_crypto - * @{ - */ - -/** - * Get a seed to use in conjunction with random functions. - * This function tries to provide a good seed at a best effort bases. - * Its possible to call this function multiple times if more bits are needed. - * It can be quite slow, which is why it should only be used as seed for a faster - * PRNG. The quality of the seed depends on the platform. - */ -uint32_t av_get_random_seed(void); - -/** - * @} - */ - -#endif /* AVUTIL_RANDOM_SEED_H */ diff --git a/prebuilts/aarch64/include/libavutil/rational.h b/prebuilts/aarch64/include/libavutil/rational.h deleted file mode 100644 index cbb08a0..0000000 --- a/prebuilts/aarch64/include/libavutil/rational.h +++ /dev/null @@ -1,220 +0,0 @@ -/* - * rational numbers - * Copyright (c) 2003 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_math_rational - * Utilties for rational number calculation. - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_RATIONAL_H -#define AVUTIL_RATIONAL_H - -#include -#include -#include "attributes.h" - -/** - * @defgroup lavu_math_rational AVRational - * @ingroup lavu_math - * Rational number calculation. - * - * While rational numbers can be expressed as floating-point numbers, the - * conversion process is a lossy one, so are floating-point operations. On the - * other hand, the nature of FFmpeg demands highly accurate calculation of - * timestamps. This set of rational number utilities serves as a generic - * interface for manipulating rational numbers as pairs of numerators and - * denominators. - * - * Many of the functions that operate on AVRational's have the suffix `_q`, in - * reference to the mathematical symbol "ℚ" (Q) which denotes the set of all - * rational numbers. - * - * @{ - */ - -/** - * Rational number (pair of numerator and denominator). - */ -typedef struct AVRational{ - int num; ///< Numerator - int den; ///< Denominator -} AVRational; - -/** - * Create an AVRational. - * - * Useful for compilers that do not support compound literals. - * - * @note The return value is not reduced. - * @see av_reduce() - */ -static inline AVRational av_make_q(int num, int den) -{ - AVRational r = { num, den }; - return r; -} - -/** - * Compare two rationals. - * - * @param a First rational - * @param b Second rational - * - * @return One of the following values: - * - 0 if `a == b` - * - 1 if `a > b` - * - -1 if `a < b` - * - `INT_MIN` if one of the values is of the form `0 / 0` - */ -static inline int av_cmp_q(AVRational a, AVRational b){ - const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den; - - if(tmp) return (int)((tmp ^ a.den ^ b.den)>>63)|1; - else if(b.den && a.den) return 0; - else if(a.num && b.num) return (a.num>>31) - (b.num>>31); - else return INT_MIN; -} - -/** - * Convert an AVRational to a `double`. - * @param a AVRational to convert - * @return `a` in floating-point form - * @see av_d2q() - */ -static inline double av_q2d(AVRational a){ - return a.num / (double) a.den; -} - -/** - * Reduce a fraction. - * - * This is useful for framerate calculations. - * - * @param[out] dst_num Destination numerator - * @param[out] dst_den Destination denominator - * @param[in] num Source numerator - * @param[in] den Source denominator - * @param[in] max Maximum allowed values for `dst_num` & `dst_den` - * @return 1 if the operation is exact, 0 otherwise - */ -int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max); - -/** - * Multiply two rationals. - * @param b First rational - * @param c Second rational - * @return b*c - */ -AVRational av_mul_q(AVRational b, AVRational c) av_const; - -/** - * Divide one rational by another. - * @param b First rational - * @param c Second rational - * @return b/c - */ -AVRational av_div_q(AVRational b, AVRational c) av_const; - -/** - * Add two rationals. - * @param b First rational - * @param c Second rational - * @return b+c - */ -AVRational av_add_q(AVRational b, AVRational c) av_const; - -/** - * Subtract one rational from another. - * @param b First rational - * @param c Second rational - * @return b-c - */ -AVRational av_sub_q(AVRational b, AVRational c) av_const; - -/** - * Invert a rational. - * @param q value - * @return 1 / q - */ -static av_always_inline AVRational av_inv_q(AVRational q) -{ - AVRational r = { q.den, q.num }; - return r; -} - -/** - * Convert a double precision floating point number to a rational. - * - * In case of infinity, the returned value is expressed as `{1, 0}` or - * `{-1, 0}` depending on the sign. - * - * @param d `double` to convert - * @param max Maximum allowed numerator and denominator - * @return `d` in AVRational form - * @see av_q2d() - */ -AVRational av_d2q(double d, int max) av_const; - -/** - * Find which of the two rationals is closer to another rational. - * - * @param q Rational to be compared against - * @param q1,q2 Rationals to be tested - * @return One of the following values: - * - 1 if `q1` is nearer to `q` than `q2` - * - -1 if `q2` is nearer to `q` than `q1` - * - 0 if they have the same distance - */ -int av_nearer_q(AVRational q, AVRational q1, AVRational q2); - -/** - * Find the value in a list of rationals nearest a given reference rational. - * - * @param q Reference rational - * @param q_list Array of rationals terminated by `{0, 0}` - * @return Index of the nearest value found in the array - */ -int av_find_nearest_q_idx(AVRational q, const AVRational* q_list); - -/** - * Convert an AVRational to a IEEE 32-bit `float` expressed in fixed-point - * format. - * - * @param q Rational to be converted - * @return Equivalent floating-point value, expressed as an unsigned 32-bit - * integer. - * @note The returned value is platform-indepedant. - */ -uint32_t av_q2intfloat(AVRational q); - -/** - * Return the best rational so that a and b are multiple of it. - * If the resulting denominator is larger than max_den, return def. - */ -AVRational av_gcd_q(AVRational a, AVRational b, int max_den, AVRational def); - -/** - * @} - */ - -#endif /* AVUTIL_RATIONAL_H */ diff --git a/prebuilts/aarch64/include/libavutil/rc4.h b/prebuilts/aarch64/include/libavutil/rc4.h deleted file mode 100644 index 029cd2a..0000000 --- a/prebuilts/aarch64/include/libavutil/rc4.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * RC4 encryption/decryption/pseudo-random number generator - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_RC4_H -#define AVUTIL_RC4_H - -#include - -/** - * @defgroup lavu_rc4 RC4 - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVRC4 { - uint8_t state[256]; - int x, y; -} AVRC4; - -/** - * Allocate an AVRC4 context. - */ -AVRC4 *av_rc4_alloc(void); - -/** - * @brief Initializes an AVRC4 context. - * - * @param key_bits must be a multiple of 8 - * @param decrypt 0 for encryption, 1 for decryption, currently has no effect - * @return zero on success, negative value otherwise - */ -int av_rc4_init(struct AVRC4 *d, const uint8_t *key, int key_bits, int decrypt); - -/** - * @brief Encrypts / decrypts using the RC4 algorithm. - * - * @param count number of bytes - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst, may be NULL - * @param iv not (yet) used for RC4, should be NULL - * @param decrypt 0 for encryption, 1 for decryption, not (yet) used - */ -void av_rc4_crypt(struct AVRC4 *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_RC4_H */ diff --git a/prebuilts/aarch64/include/libavutil/replaygain.h b/prebuilts/aarch64/include/libavutil/replaygain.h deleted file mode 100644 index b49bf1a..0000000 --- a/prebuilts/aarch64/include/libavutil/replaygain.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_REPLAYGAIN_H -#define AVUTIL_REPLAYGAIN_H - -#include - -/** - * ReplayGain information (see - * http://wiki.hydrogenaudio.org/index.php?title=ReplayGain_1.0_specification). - * The size of this struct is a part of the public ABI. - */ -typedef struct AVReplayGain { - /** - * Track replay gain in microbels (divide by 100000 to get the value in dB). - * Should be set to INT32_MIN when unknown. - */ - int32_t track_gain; - /** - * Peak track amplitude, with 100000 representing full scale (but values - * may overflow). 0 when unknown. - */ - uint32_t track_peak; - /** - * Same as track_gain, but for the whole album. - */ - int32_t album_gain; - /** - * Same as track_peak, but for the whole album, - */ - uint32_t album_peak; -} AVReplayGain; - -#endif /* AVUTIL_REPLAYGAIN_H */ diff --git a/prebuilts/aarch64/include/libavutil/ripemd.h b/prebuilts/aarch64/include/libavutil/ripemd.h deleted file mode 100644 index 921aa66..0000000 --- a/prebuilts/aarch64/include/libavutil/ripemd.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * Copyright (C) 2013 James Almer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_ripemd - * Public header for RIPEMD hash function implementation. - */ - -#ifndef AVUTIL_RIPEMD_H -#define AVUTIL_RIPEMD_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_ripemd RIPEMD - * @ingroup lavu_hash - * RIPEMD hash function implementation. - * - * @{ - */ - -extern const int av_ripemd_size; - -struct AVRIPEMD; - -/** - * Allocate an AVRIPEMD context. - */ -struct AVRIPEMD *av_ripemd_alloc(void); - -/** - * Initialize RIPEMD hashing. - * - * @param context pointer to the function context (of size av_ripemd_size) - * @param bits number of bits in digest (128, 160, 256 or 320 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_ripemd_init(struct AVRIPEMD* context, int bits); - -/** - * Update hash value. - * - * @param context hash function context - * @param data input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, unsigned int len); -#else -void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_ripemd_final(struct AVRIPEMD* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_RIPEMD_H */ diff --git a/prebuilts/aarch64/include/libavutil/samplefmt.h b/prebuilts/aarch64/include/libavutil/samplefmt.h deleted file mode 100644 index 8cd43ae..0000000 --- a/prebuilts/aarch64/include/libavutil/samplefmt.h +++ /dev/null @@ -1,272 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_SAMPLEFMT_H -#define AVUTIL_SAMPLEFMT_H - -#include - -#include "avutil.h" -#include "attributes.h" - -/** - * @addtogroup lavu_audio - * @{ - * - * @defgroup lavu_sampfmts Audio sample formats - * - * Audio sample format enumeration and related convenience functions. - * @{ - */ - -/** - * Audio sample formats - * - * - The data described by the sample format is always in native-endian order. - * Sample values can be expressed by native C types, hence the lack of a signed - * 24-bit sample format even though it is a common raw audio data format. - * - * - The floating-point formats are based on full volume being in the range - * [-1.0, 1.0]. Any values outside this range are beyond full volume level. - * - * - The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg - * (such as AVFrame in libavcodec) is as follows: - * - * @par - * For planar sample formats, each audio channel is in a separate data plane, - * and linesize is the buffer size, in bytes, for a single plane. All data - * planes must be the same size. For packed sample formats, only the first data - * plane is used, and samples for each channel are interleaved. In this case, - * linesize is the buffer size, in bytes, for the 1 plane. - * - */ -enum AVSampleFormat { - AV_SAMPLE_FMT_NONE = -1, - AV_SAMPLE_FMT_U8, ///< unsigned 8 bits - AV_SAMPLE_FMT_S16, ///< signed 16 bits - AV_SAMPLE_FMT_S32, ///< signed 32 bits - AV_SAMPLE_FMT_FLT, ///< float - AV_SAMPLE_FMT_DBL, ///< double - - AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar - AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar - AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar - AV_SAMPLE_FMT_FLTP, ///< float, planar - AV_SAMPLE_FMT_DBLP, ///< double, planar - AV_SAMPLE_FMT_S64, ///< signed 64 bits - AV_SAMPLE_FMT_S64P, ///< signed 64 bits, planar - - AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking dynamically -}; - -/** - * Return the name of sample_fmt, or NULL if sample_fmt is not - * recognized. - */ -const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt); - -/** - * Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE - * on error. - */ -enum AVSampleFormat av_get_sample_fmt(const char *name); - -/** - * Return the planar<->packed alternative form of the given sample format, or - * AV_SAMPLE_FMT_NONE on error. If the passed sample_fmt is already in the - * requested planar/packed format, the format returned is the same as the - * input. - */ -enum AVSampleFormat av_get_alt_sample_fmt(enum AVSampleFormat sample_fmt, int planar); - -/** - * Get the packed alternative form of the given sample format. - * - * If the passed sample_fmt is already in packed format, the format returned is - * the same as the input. - * - * @return the packed alternative form of the given sample format or - AV_SAMPLE_FMT_NONE on error. - */ -enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt); - -/** - * Get the planar alternative form of the given sample format. - * - * If the passed sample_fmt is already in planar format, the format returned is - * the same as the input. - * - * @return the planar alternative form of the given sample format or - AV_SAMPLE_FMT_NONE on error. - */ -enum AVSampleFormat av_get_planar_sample_fmt(enum AVSampleFormat sample_fmt); - -/** - * Generate a string corresponding to the sample format with - * sample_fmt, or a header if sample_fmt is negative. - * - * @param buf the buffer where to write the string - * @param buf_size the size of buf - * @param sample_fmt the number of the sample format to print the - * corresponding info string, or a negative value to print the - * corresponding header. - * @return the pointer to the filled buffer or NULL if sample_fmt is - * unknown or in case of other errors - */ -char *av_get_sample_fmt_string(char *buf, int buf_size, enum AVSampleFormat sample_fmt); - -/** - * Return number of bytes per sample. - * - * @param sample_fmt the sample format - * @return number of bytes per sample or zero if unknown for the given - * sample format - */ -int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt); - -/** - * Check if the sample format is planar. - * - * @param sample_fmt the sample format to inspect - * @return 1 if the sample format is planar, 0 if it is interleaved - */ -int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt); - -/** - * Get the required buffer size for the given audio parameters. - * - * @param[out] linesize calculated linesize, may be NULL - * @param nb_channels the number of channels - * @param nb_samples the number of samples in a single channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return required buffer size, or negative error code on failure - */ -int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, - enum AVSampleFormat sample_fmt, int align); - -/** - * @} - * - * @defgroup lavu_sampmanip Samples manipulation - * - * Functions that manipulate audio samples - * @{ - */ - -/** - * Fill plane data pointers and linesize for samples with sample - * format sample_fmt. - * - * The audio_data array is filled with the pointers to the samples data planes: - * for planar, set the start point of each channel's data within the buffer, - * for packed, set the start point of the entire buffer only. - * - * The value pointed to by linesize is set to the aligned size of each - * channel's data buffer for planar layout, or to the aligned size of the - * buffer for all channels for packed layout. - * - * The buffer in buf must be big enough to contain all the samples - * (use av_samples_get_buffer_size() to compute its minimum size), - * otherwise the audio_data pointers will point to invalid data. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize calculated linesize, may be NULL - * @param buf the pointer to a buffer containing the samples - * @param nb_channels the number of channels - * @param nb_samples the number of samples in a single channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return >=0 on success or a negative error code on failure - * @todo return minimum size in bytes required for the buffer in case - * of success at the next bump - */ -int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, - const uint8_t *buf, - int nb_channels, int nb_samples, - enum AVSampleFormat sample_fmt, int align); - -/** - * Allocate a samples buffer for nb_samples samples, and fill data pointers and - * linesize accordingly. - * The allocated samples buffer can be freed by using av_freep(&audio_data[0]) - * Allocated data will be initialized to silence. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize aligned size for audio buffer(s), may be NULL - * @param nb_channels number of audio channels - * @param nb_samples number of samples per channel - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return >=0 on success or a negative error code on failure - * @todo return the size of the allocated buffer in case of success at the next bump - * @see av_samples_fill_arrays() - * @see av_samples_alloc_array_and_samples() - */ -int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels, - int nb_samples, enum AVSampleFormat sample_fmt, int align); - -/** - * Allocate a data pointers array, samples buffer for nb_samples - * samples, and fill data pointers and linesize accordingly. - * - * This is the same as av_samples_alloc(), but also allocates the data - * pointers array. - * - * @see av_samples_alloc() - */ -int av_samples_alloc_array_and_samples(uint8_t ***audio_data, int *linesize, int nb_channels, - int nb_samples, enum AVSampleFormat sample_fmt, int align); - -/** - * Copy samples from src to dst. - * - * @param dst destination array of pointers to data planes - * @param src source array of pointers to data planes - * @param dst_offset offset in samples at which the data will be written to dst - * @param src_offset offset in samples at which the data will be read from src - * @param nb_samples number of samples to be copied - * @param nb_channels number of audio channels - * @param sample_fmt audio sample format - */ -int av_samples_copy(uint8_t **dst, uint8_t * const *src, int dst_offset, - int src_offset, int nb_samples, int nb_channels, - enum AVSampleFormat sample_fmt); - -/** - * Fill an audio buffer with silence. - * - * @param audio_data array of pointers to data planes - * @param offset offset in samples at which to start filling - * @param nb_samples number of samples to fill - * @param nb_channels number of audio channels - * @param sample_fmt audio sample format - */ -int av_samples_set_silence(uint8_t **audio_data, int offset, int nb_samples, - int nb_channels, enum AVSampleFormat sample_fmt); - -/** - * @} - * @} - */ -#endif /* AVUTIL_SAMPLEFMT_H */ diff --git a/prebuilts/aarch64/include/libavutil/sha.h b/prebuilts/aarch64/include/libavutil/sha.h deleted file mode 100644 index c0180e5..0000000 --- a/prebuilts/aarch64/include/libavutil/sha.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_sha - * Public header for SHA-1 & SHA-256 hash function implementations. - */ - -#ifndef AVUTIL_SHA_H -#define AVUTIL_SHA_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_sha SHA - * @ingroup lavu_hash - * SHA-1 and SHA-256 (Secure Hash Algorithm) hash function implementations. - * - * This module supports the following SHA hash functions: - * - * - SHA-1: 160 bits - * - SHA-224: 224 bits, as a variant of SHA-2 - * - SHA-256: 256 bits, as a variant of SHA-2 - * - * @see For SHA-384, SHA-512, and variants thereof, see @ref lavu_sha512. - * - * @{ - */ - -extern const int av_sha_size; - -struct AVSHA; - -/** - * Allocate an AVSHA context. - */ -struct AVSHA *av_sha_alloc(void); - -/** - * Initialize SHA-1 or SHA-2 hashing. - * - * @param context pointer to the function context (of size av_sha_size) - * @param bits number of bits in digest (SHA-1 - 160 bits, SHA-2 224 or 256 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_sha_init(struct AVSHA* context, int bits); - -/** - * Update hash value. - * - * @param ctx hash function context - * @param data input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_sha_update(struct AVSHA *ctx, const uint8_t *data, unsigned int len); -#else -void av_sha_update(struct AVSHA *ctx, const uint8_t *data, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_sha_final(struct AVSHA* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_SHA_H */ diff --git a/prebuilts/aarch64/include/libavutil/sha512.h b/prebuilts/aarch64/include/libavutil/sha512.h deleted file mode 100644 index bef714b..0000000 --- a/prebuilts/aarch64/include/libavutil/sha512.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * Copyright (C) 2013 James Almer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_sha512 - * Public header for SHA-512 implementation. - */ - -#ifndef AVUTIL_SHA512_H -#define AVUTIL_SHA512_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_sha512 SHA-512 - * @ingroup lavu_hash - * SHA-512 (Secure Hash Algorithm) hash function implementations. - * - * This module supports the following SHA-2 hash functions: - * - * - SHA-512/224: 224 bits - * - SHA-512/256: 256 bits - * - SHA-384: 384 bits - * - SHA-512: 512 bits - * - * @see For SHA-1, SHA-256, and variants thereof, see @ref lavu_sha. - * - * @{ - */ - -extern const int av_sha512_size; - -struct AVSHA512; - -/** - * Allocate an AVSHA512 context. - */ -struct AVSHA512 *av_sha512_alloc(void); - -/** - * Initialize SHA-2 512 hashing. - * - * @param context pointer to the function context (of size av_sha512_size) - * @param bits number of bits in digest (224, 256, 384 or 512 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_sha512_init(struct AVSHA512* context, int bits); - -/** - * Update hash value. - * - * @param context hash function context - * @param data input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_sha512_update(struct AVSHA512* context, const uint8_t* data, unsigned int len); -#else -void av_sha512_update(struct AVSHA512* context, const uint8_t* data, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_sha512_final(struct AVSHA512* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_SHA512_H */ diff --git a/prebuilts/aarch64/include/libavutil/spherical.h b/prebuilts/aarch64/include/libavutil/spherical.h deleted file mode 100644 index cef759c..0000000 --- a/prebuilts/aarch64/include/libavutil/spherical.h +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (c) 2016 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Spherical video - */ - -#ifndef AVUTIL_SPHERICAL_H -#define AVUTIL_SPHERICAL_H - -#include -#include - -/** - * @addtogroup lavu_video - * @{ - * - * @defgroup lavu_video_spherical Spherical video mapping - * @{ - */ - -/** - * @addtogroup lavu_video_spherical - * A spherical video file contains surfaces that need to be mapped onto a - * sphere. Depending on how the frame was converted, a different distortion - * transformation or surface recomposition function needs to be applied before - * the video should be mapped and displayed. - */ - -/** - * Projection of the video surface(s) on a sphere. - */ -enum AVSphericalProjection { - /** - * Video represents a sphere mapped on a flat surface using - * equirectangular projection. - */ - AV_SPHERICAL_EQUIRECTANGULAR, - - /** - * Video frame is split into 6 faces of a cube, and arranged on a - * 3x2 layout. Faces are oriented upwards for the front, left, right, - * and back faces. The up face is oriented so the top of the face is - * forwards and the down face is oriented so the top of the face is - * to the back. - */ - AV_SPHERICAL_CUBEMAP, - - /** - * Video represents a portion of a sphere mapped on a flat surface - * using equirectangular projection. The @ref bounding fields indicate - * the position of the current video in a larger surface. - */ - AV_SPHERICAL_EQUIRECTANGULAR_TILE, -}; - -/** - * This structure describes how to handle spherical videos, outlining - * information about projection, initial layout, and any other view modifier. - * - * @note The struct must be allocated with av_spherical_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVSphericalMapping { - /** - * Projection type. - */ - enum AVSphericalProjection projection; - - /** - * @name Initial orientation - * @{ - * There fields describe additional rotations applied to the sphere after - * the video frame is mapped onto it. The sphere is rotated around the - * viewer, who remains stationary. The order of transformation is always - * yaw, followed by pitch, and finally by roll. - * - * The coordinate system matches the one defined in OpenGL, where the - * forward vector (z) is coming out of screen, and it is equivalent to - * a rotation matrix of R = r_y(yaw) * r_x(pitch) * r_z(roll). - * - * A positive yaw rotates the portion of the sphere in front of the viewer - * toward their right. A positive pitch rotates the portion of the sphere - * in front of the viewer upwards. A positive roll tilts the portion of - * the sphere in front of the viewer to the viewer's right. - * - * These values are exported as 16.16 fixed point. - * - * See this equirectangular projection as example: - * - * @code{.unparsed} - * Yaw - * -180 0 180 - * 90 +-------------+-------------+ 180 - * | | | up - * P | | | y| forward - * i | ^ | | /z - * t 0 +-------------X-------------+ 0 Roll | / - * c | | | | / - * h | | | 0|/_____right - * | | | x - * -90 +-------------+-------------+ -180 - * - * X - the default camera center - * ^ - the default up vector - * @endcode - */ - int32_t yaw; ///< Rotation around the up vector [-180, 180]. - int32_t pitch; ///< Rotation around the right vector [-90, 90]. - int32_t roll; ///< Rotation around the forward vector [-180, 180]. - /** - * @} - */ - - /** - * @name Bounding rectangle - * @anchor bounding - * @{ - * These fields indicate the location of the current tile, and where - * it should be mapped relative to the original surface. They are - * exported as 0.32 fixed point, and can be converted to classic - * pixel values with av_spherical_bounds(). - * - * @code{.unparsed} - * +----------------+----------+ - * | |bound_top | - * | +--------+ | - * | bound_left |tile | | - * +<---------->| |<--->+bound_right - * | +--------+ | - * | | | - * | bound_bottom| | - * +----------------+----------+ - * @endcode - * - * If needed, the original video surface dimensions can be derived - * by adding the current stream or frame size to the related bounds, - * like in the following example: - * - * @code{c} - * original_width = tile->width + bound_left + bound_right; - * original_height = tile->height + bound_top + bound_bottom; - * @endcode - * - * @note These values are valid only for the tiled equirectangular - * projection type (@ref AV_SPHERICAL_EQUIRECTANGULAR_TILE), - * and should be ignored in all other cases. - */ - uint32_t bound_left; ///< Distance from the left edge - uint32_t bound_top; ///< Distance from the top edge - uint32_t bound_right; ///< Distance from the right edge - uint32_t bound_bottom; ///< Distance from the bottom edge - /** - * @} - */ - - /** - * Number of pixels to pad from the edge of each cube face. - * - * @note This value is valid for only for the cubemap projection type - * (@ref AV_SPHERICAL_CUBEMAP), and should be ignored in all other - * cases. - */ - uint32_t padding; -} AVSphericalMapping; - -/** - * Allocate a AVSphericalVideo structure and initialize its fields to default - * values. - * - * @return the newly allocated struct or NULL on failure - */ -AVSphericalMapping *av_spherical_alloc(size_t *size); - -/** - * Convert the @ref bounding fields from an AVSphericalVideo - * from 0.32 fixed point to pixels. - * - * @param map The AVSphericalVideo map to read bound values from. - * @param width Width of the current frame or stream. - * @param height Height of the current frame or stream. - * @param left Pixels from the left edge. - * @param top Pixels from the top edge. - * @param right Pixels from the right edge. - * @param bottom Pixels from the bottom edge. - */ -void av_spherical_tile_bounds(const AVSphericalMapping *map, - size_t width, size_t height, - size_t *left, size_t *top, - size_t *right, size_t *bottom); - -/** - * Provide a human-readable name of a given AVSphericalProjection. - * - * @param projection The input AVSphericalProjection. - * - * @return The name of the AVSphericalProjection, or "unknown". - */ -const char *av_spherical_projection_name(enum AVSphericalProjection projection); - -/** - * Get the AVSphericalProjection form a human-readable name. - * - * @param name The input string. - * - * @return The AVSphericalProjection value, or -1 if not found. - */ -int av_spherical_from_name(const char *name); -/** - * @} - * @} - */ - -#endif /* AVUTIL_SPHERICAL_H */ diff --git a/prebuilts/aarch64/include/libavutil/stereo3d.h b/prebuilts/aarch64/include/libavutil/stereo3d.h deleted file mode 100644 index d421aac..0000000 --- a/prebuilts/aarch64/include/libavutil/stereo3d.h +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (c) 2013 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Stereoscopic video - */ - -#ifndef AVUTIL_STEREO3D_H -#define AVUTIL_STEREO3D_H - -#include - -#include "frame.h" - -/** - * @addtogroup lavu_video - * @{ - * - * @defgroup lavu_video_stereo3d Stereo3D types and functions - * @{ - */ - -/** - * @addtogroup lavu_video_stereo3d - * A stereoscopic video file consists in multiple views embedded in a single - * frame, usually describing two views of a scene. This file describes all - * possible codec-independent view arrangements. - * */ - -/** - * List of possible 3D Types - */ -enum AVStereo3DType { - /** - * Video is not stereoscopic (and metadata has to be there). - */ - AV_STEREO3D_2D, - - /** - * Views are next to each other. - * - * @code{.unparsed} - * LLLLRRRR - * LLLLRRRR - * LLLLRRRR - * ... - * @endcode - */ - AV_STEREO3D_SIDEBYSIDE, - - /** - * Views are on top of each other. - * - * @code{.unparsed} - * LLLLLLLL - * LLLLLLLL - * RRRRRRRR - * RRRRRRRR - * @endcode - */ - AV_STEREO3D_TOPBOTTOM, - - /** - * Views are alternated temporally. - * - * @code{.unparsed} - * frame0 frame1 frame2 ... - * LLLLLLLL RRRRRRRR LLLLLLLL - * LLLLLLLL RRRRRRRR LLLLLLLL - * LLLLLLLL RRRRRRRR LLLLLLLL - * ... ... ... - * @endcode - */ - AV_STEREO3D_FRAMESEQUENCE, - - /** - * Views are packed in a checkerboard-like structure per pixel. - * - * @code{.unparsed} - * LRLRLRLR - * RLRLRLRL - * LRLRLRLR - * ... - * @endcode - */ - AV_STEREO3D_CHECKERBOARD, - - /** - * Views are next to each other, but when upscaling - * apply a checkerboard pattern. - * - * @code{.unparsed} - * LLLLRRRR L L L L R R R R - * LLLLRRRR => L L L L R R R R - * LLLLRRRR L L L L R R R R - * LLLLRRRR L L L L R R R R - * @endcode - */ - AV_STEREO3D_SIDEBYSIDE_QUINCUNX, - - /** - * Views are packed per line, as if interlaced. - * - * @code{.unparsed} - * LLLLLLLL - * RRRRRRRR - * LLLLLLLL - * ... - * @endcode - */ - AV_STEREO3D_LINES, - - /** - * Views are packed per column. - * - * @code{.unparsed} - * LRLRLRLR - * LRLRLRLR - * LRLRLRLR - * ... - * @endcode - */ - AV_STEREO3D_COLUMNS, -}; - -/** - * List of possible view types. - */ -enum AVStereo3DView { - /** - * Frame contains two packed views. - */ - AV_STEREO3D_VIEW_PACKED, - - /** - * Frame contains only the left view. - */ - AV_STEREO3D_VIEW_LEFT, - - /** - * Frame contains only the right view. - */ - AV_STEREO3D_VIEW_RIGHT, -}; - -/** - * Inverted views, Right/Bottom represents the left view. - */ -#define AV_STEREO3D_FLAG_INVERT (1 << 0) - -/** - * Stereo 3D type: this structure describes how two videos are packed - * within a single video surface, with additional information as needed. - * - * @note The struct must be allocated with av_stereo3d_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVStereo3D { - /** - * How views are packed within the video. - */ - enum AVStereo3DType type; - - /** - * Additional information about the frame packing. - */ - int flags; - - /** - * Determines which views are packed. - */ - enum AVStereo3DView view; -} AVStereo3D; - -/** - * Allocate an AVStereo3D structure and set its fields to default values. - * The resulting struct can be freed using av_freep(). - * - * @return An AVStereo3D filled with default values or NULL on failure. - */ -AVStereo3D *av_stereo3d_alloc(void); - -/** - * Allocate a complete AVFrameSideData and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVStereo3D structure to be filled by caller. - */ -AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame); - -/** - * Provide a human-readable name of a given stereo3d type. - * - * @param type The input stereo3d type value. - * - * @return The name of the stereo3d value, or "unknown". - */ -const char *av_stereo3d_type_name(unsigned int type); - -/** - * Get the AVStereo3DType form a human-readable name. - * - * @param name The input string. - * - * @return The AVStereo3DType value, or -1 if not found. - */ -int av_stereo3d_from_name(const char *name); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_STEREO3D_H */ diff --git a/prebuilts/aarch64/include/libavutil/tea.h b/prebuilts/aarch64/include/libavutil/tea.h deleted file mode 100644 index dd929bd..0000000 --- a/prebuilts/aarch64/include/libavutil/tea.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * A 32-bit implementation of the TEA algorithm - * Copyright (c) 2015 Vesselin Bontchev - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TEA_H -#define AVUTIL_TEA_H - -#include - -/** - * @file - * @brief Public header for libavutil TEA algorithm - * @defgroup lavu_tea TEA - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_tea_size; - -struct AVTEA; - -/** - * Allocate an AVTEA context - * To free the struct: av_free(ptr) - */ -struct AVTEA *av_tea_alloc(void); - -/** - * Initialize an AVTEA context. - * - * @param ctx an AVTEA context - * @param key a key of 16 bytes used for encryption/decryption - * @param rounds the number of rounds in TEA (64 is the "standard") - */ -void av_tea_init(struct AVTEA *ctx, const uint8_t key[16], int rounds); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_tea_crypt(struct AVTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_TEA_H */ diff --git a/prebuilts/aarch64/include/libavutil/threadmessage.h b/prebuilts/aarch64/include/libavutil/threadmessage.h deleted file mode 100644 index 42ce655..0000000 --- a/prebuilts/aarch64/include/libavutil/threadmessage.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with FFmpeg; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_THREADMESSAGE_H -#define AVUTIL_THREADMESSAGE_H - -typedef struct AVThreadMessageQueue AVThreadMessageQueue; - -typedef enum AVThreadMessageFlags { - - /** - * Perform non-blocking operation. - * If this flag is set, send and recv operations are non-blocking and - * return AVERROR(EAGAIN) immediately if they can not proceed. - */ - AV_THREAD_MESSAGE_NONBLOCK = 1, - -} AVThreadMessageFlags; - -/** - * Allocate a new message queue. - * - * @param mq pointer to the message queue - * @param nelem maximum number of elements in the queue - * @param elsize size of each element in the queue - * @return >=0 for success; <0 for error, in particular AVERROR(ENOSYS) if - * lavu was built without thread support - */ -int av_thread_message_queue_alloc(AVThreadMessageQueue **mq, - unsigned nelem, - unsigned elsize); - -/** - * Free a message queue. - * - * The message queue must no longer be in use by another thread. - */ -void av_thread_message_queue_free(AVThreadMessageQueue **mq); - -/** - * Send a message on the queue. - */ -int av_thread_message_queue_send(AVThreadMessageQueue *mq, - void *msg, - unsigned flags); - -/** - * Receive a message from the queue. - */ -int av_thread_message_queue_recv(AVThreadMessageQueue *mq, - void *msg, - unsigned flags); - -/** - * Set the sending error code. - * - * If the error code is set to non-zero, av_thread_message_queue_send() will - * return it immediately. Conventional values, such as AVERROR_EOF or - * AVERROR(EAGAIN), can be used to cause the sending thread to stop or - * suspend its operation. - */ -void av_thread_message_queue_set_err_send(AVThreadMessageQueue *mq, - int err); - -/** - * Set the receiving error code. - * - * If the error code is set to non-zero, av_thread_message_queue_recv() will - * return it immediately when there are no longer available messages. - * Conventional values, such as AVERROR_EOF or AVERROR(EAGAIN), can be used - * to cause the receiving thread to stop or suspend its operation. - */ -void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq, - int err); - -/** - * Set the optional free message callback function which will be called if an - * operation is removing messages from the queue. - */ -void av_thread_message_queue_set_free_func(AVThreadMessageQueue *mq, - void (*free_func)(void *msg)); - -/** - * Return the current number of messages in the queue. - * - * @return the current number of messages or AVERROR(ENOSYS) if lavu was built - * without thread support - */ -int av_thread_message_queue_nb_elems(AVThreadMessageQueue *mq); - -/** - * Flush the message queue - * - * This function is mostly equivalent to reading and free-ing every message - * except that it will be done in a single operation (no lock/unlock between - * reads). - */ -void av_thread_message_flush(AVThreadMessageQueue *mq); - -#endif /* AVUTIL_THREADMESSAGE_H */ diff --git a/prebuilts/aarch64/include/libavutil/time.h b/prebuilts/aarch64/include/libavutil/time.h deleted file mode 100644 index dc169b0..0000000 --- a/prebuilts/aarch64/include/libavutil/time.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2000-2003 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TIME_H -#define AVUTIL_TIME_H - -#include - -/** - * Get the current time in microseconds. - */ -int64_t av_gettime(void); - -/** - * Get the current time in microseconds since some unspecified starting point. - * On platforms that support it, the time comes from a monotonic clock - * This property makes this time source ideal for measuring relative time. - * The returned values may not be monotonic on platforms where a monotonic - * clock is not available. - */ -int64_t av_gettime_relative(void); - -/** - * Indicates with a boolean result if the av_gettime_relative() time source - * is monotonic. - */ -int av_gettime_relative_is_monotonic(void); - -/** - * Sleep for a period of time. Although the duration is expressed in - * microseconds, the actual delay may be rounded to the precision of the - * system timer. - * - * @param usec Number of microseconds to sleep. - * @return zero on success or (negative) error code. - */ -int av_usleep(unsigned usec); - -#endif /* AVUTIL_TIME_H */ diff --git a/prebuilts/aarch64/include/libavutil/timecode.h b/prebuilts/aarch64/include/libavutil/timecode.h deleted file mode 100644 index 060574a..0000000 --- a/prebuilts/aarch64/include/libavutil/timecode.h +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (c) 2006 Smartjog S.A.S, Baptiste Coudurier - * Copyright (c) 2011-2012 Smartjog S.A.S, Clément Bœsch - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Timecode helpers header - */ - -#ifndef AVUTIL_TIMECODE_H -#define AVUTIL_TIMECODE_H - -#include -#include "rational.h" - -#define AV_TIMECODE_STR_SIZE 23 - -enum AVTimecodeFlag { - AV_TIMECODE_FLAG_DROPFRAME = 1<<0, ///< timecode is drop frame - AV_TIMECODE_FLAG_24HOURSMAX = 1<<1, ///< timecode wraps after 24 hours - AV_TIMECODE_FLAG_ALLOWNEGATIVE = 1<<2, ///< negative time values are allowed -}; - -typedef struct { - int start; ///< timecode frame start (first base frame number) - uint32_t flags; ///< flags such as drop frame, +24 hours support, ... - AVRational rate; ///< frame rate in rational form - unsigned fps; ///< frame per second; must be consistent with the rate field -} AVTimecode; - -/** - * Adjust frame number for NTSC drop frame time code. - * - * @param framenum frame number to adjust - * @param fps frame per second, multiples of 30 - * @return adjusted frame number - * @warning adjustment is only valid for multiples of NTSC 29.97 - */ -int av_timecode_adjust_ntsc_framenum2(int framenum, int fps); - -/** - * Convert frame number to SMPTE 12M binary representation. - * - * @param tc timecode data correctly initialized - * @param framenum frame number - * @return the SMPTE binary representation - * - * See SMPTE ST 314M-2005 Sec 4.4.2.2.1 "Time code pack (TC)" - * the format description as follows: - * bits 0-5: hours, in BCD(6bits) - * bits 6: BGF1 - * bits 7: BGF2 (NTSC) or FIELD (PAL) - * bits 8-14: minutes, in BCD(7bits) - * bits 15: BGF0 (NTSC) or BGF2 (PAL) - * bits 16-22: seconds, in BCD(7bits) - * bits 23: FIELD (NTSC) or BGF0 (PAL) - * bits 24-29: frames, in BCD(6bits) - * bits 30: drop frame flag (0: non drop, 1: drop) - * bits 31: color frame flag (0: unsync mode, 1: sync mode) - * @note BCD numbers (6 or 7 bits): 4 or 5 lower bits for units, 2 higher bits for tens. - * @note Frame number adjustment is automatically done in case of drop timecode, - * you do NOT have to call av_timecode_adjust_ntsc_framenum2(). - * @note The frame number is relative to tc->start. - * @note Color frame (CF) and binary group flags (BGF) bits are set to zero. - */ -uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum); - -/** - * Convert sei info to SMPTE 12M binary representation. - * - * @param rate frame rate in rational form - * @param drop drop flag - * @param hh hour - * @param mm minute - * @param ss second - * @param ff frame number - * @return the SMPTE binary representation - */ -uint32_t av_timecode_get_smpte(AVRational rate, int drop, int hh, int mm, int ss, int ff); - -/** - * Load timecode string in buf. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tc timecode data correctly initialized - * @param framenum frame number - * @return the buf parameter - * - * @note Timecode representation can be a negative timecode and have more than - * 24 hours, but will only be honored if the flags are correctly set. - * @note The frame number is relative to tc->start. - */ -char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum); - -/** - * Get the timecode string from the SMPTE timecode format. - * - * In contrast to av_timecode_make_smpte_tc_string this function supports 50/60 - * fps timecodes by using the field bit. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param rate frame rate of the timecode - * @param tcsmpte the 32-bit SMPTE timecode - * @param prevent_df prevent the use of a drop flag when it is known the DF bit - * is arbitrary - * @param skip_field prevent the use of a field flag when it is known the field - * bit is arbitrary (e.g. because it is used as PC flag) - * @return the buf parameter - */ -char *av_timecode_make_smpte_tc_string2(char *buf, AVRational rate, uint32_t tcsmpte, int prevent_df, int skip_field); - -/** - * Get the timecode string from the SMPTE timecode format. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tcsmpte the 32-bit SMPTE timecode - * @param prevent_df prevent the use of a drop flag when it is known the DF bit - * is arbitrary - * @return the buf parameter - */ -char *av_timecode_make_smpte_tc_string(char *buf, uint32_t tcsmpte, int prevent_df); - -/** - * Get the timecode string from the 25-bit timecode format (MPEG GOP format). - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tc25bit the 25-bits timecode - * @return the buf parameter - */ -char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit); - -/** - * Init a timecode struct with the passed parameters. - * - * @param log_ctx a pointer to an arbitrary struct of which the first field - * is a pointer to an AVClass struct (used for av_log) - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param flags miscellaneous flags such as drop frame, +24 hours, ... - * (see AVTimecodeFlag) - * @param frame_start the first frame number - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx); - -/** - * Init a timecode struct from the passed timecode components. - * - * @param log_ctx a pointer to an arbitrary struct of which the first field - * is a pointer to an AVClass struct (used for av_log) - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param flags miscellaneous flags such as drop frame, +24 hours, ... - * (see AVTimecodeFlag) - * @param hh hours - * @param mm minutes - * @param ss seconds - * @param ff frames - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init_from_components(AVTimecode *tc, AVRational rate, int flags, int hh, int mm, int ss, int ff, void *log_ctx); - -/** - * Parse timecode representation (hh:mm:ss[:;.]ff). - * - * @param log_ctx a pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct (used for av_log). - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param str timecode string which will determine the frame start - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx); - -/** - * Check if the timecode feature is available for the given frame rate - * - * @return 0 if supported, <0 otherwise - */ -int av_timecode_check_frame_rate(AVRational rate); - -#endif /* AVUTIL_TIMECODE_H */ diff --git a/prebuilts/aarch64/include/libavutil/timestamp.h b/prebuilts/aarch64/include/libavutil/timestamp.h deleted file mode 100644 index e082f01..0000000 --- a/prebuilts/aarch64/include/libavutil/timestamp.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * timestamp utils, mostly useful for debugging/logging purposes - */ - -#ifndef AVUTIL_TIMESTAMP_H -#define AVUTIL_TIMESTAMP_H - -#include "common.h" - -#if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS) && !defined(PRId64) -#error missing -D__STDC_FORMAT_MACROS / #define __STDC_FORMAT_MACROS -#endif - -#define AV_TS_MAX_STRING_SIZE 32 - -/** - * Fill the provided buffer with a string containing a timestamp - * representation. - * - * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE - * @param ts the timestamp to represent - * @return the buffer in input - */ -static inline char *av_ts_make_string(char *buf, int64_t ts) -{ - if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); - else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%" PRId64, ts); - return buf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_ts2str(ts) av_ts_make_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts) - -/** - * Fill the provided buffer with a string containing a timestamp time - * representation. - * - * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE - * @param ts the timestamp to represent - * @param tb the timebase of the timestamp - * @return the buffer in input - */ -static inline char *av_ts_make_time_string(char *buf, int64_t ts, AVRational *tb) -{ - if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); - else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%.6g", av_q2d(*tb) * ts); - return buf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_ts2timestr(ts, tb) av_ts_make_time_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts, tb) - -#endif /* AVUTIL_TIMESTAMP_H */ diff --git a/prebuilts/aarch64/include/libavutil/tree.h b/prebuilts/aarch64/include/libavutil/tree.h deleted file mode 100644 index d5e0aeb..0000000 --- a/prebuilts/aarch64/include/libavutil/tree.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * A tree container. - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_TREE_H -#define AVUTIL_TREE_H - -#include "attributes.h" -#include "version.h" - -/** - * @addtogroup lavu_tree AVTree - * @ingroup lavu_data - * - * Low-complexity tree container - * - * Insertion, removal, finding equal, largest which is smaller than and - * smallest which is larger than, all have O(log n) worst-case complexity. - * @{ - */ - - -struct AVTreeNode; -extern const int av_tree_node_size; - -/** - * Allocate an AVTreeNode. - */ -struct AVTreeNode *av_tree_node_alloc(void); - -/** - * Find an element. - * @param root a pointer to the root node of the tree - * @param next If next is not NULL, then next[0] will contain the previous - * element and next[1] the next element. If either does not exist, - * then the corresponding entry in next is unchanged. - * @param cmp compare function used to compare elements in the tree, - * API identical to that of Standard C's qsort - * It is guaranteed that the first and only the first argument to cmp() - * will be the key parameter to av_tree_find(), thus it could if the - * user wants, be a different type (like an opaque context). - * @return An element with cmp(key, elem) == 0 or NULL if no such element - * exists in the tree. - */ -void *av_tree_find(const struct AVTreeNode *root, void *key, - int (*cmp)(const void *key, const void *b), void *next[2]); - -/** - * Insert or remove an element. - * - * If *next is NULL, then the supplied element will be removed if it exists. - * If *next is non-NULL, then the supplied element will be inserted, unless - * it already exists in the tree. - * - * @param rootp A pointer to a pointer to the root node of the tree; note that - * the root node can change during insertions, this is required - * to keep the tree balanced. - * @param key pointer to the element key to insert in the tree - * @param next Used to allocate and free AVTreeNodes. For insertion the user - * must set it to an allocated and zeroed object of at least - * av_tree_node_size bytes size. av_tree_insert() will set it to - * NULL if it has been consumed. - * For deleting elements *next is set to NULL by the user and - * av_tree_insert() will set it to the AVTreeNode which was - * used for the removed element. - * This allows the use of flat arrays, which have - * lower overhead compared to many malloced elements. - * You might want to define a function like: - * @code - * void *tree_insert(struct AVTreeNode **rootp, void *key, - * int (*cmp)(void *key, const void *b), - * AVTreeNode **next) - * { - * if (!*next) - * *next = av_mallocz(av_tree_node_size); - * return av_tree_insert(rootp, key, cmp, next); - * } - * void *tree_remove(struct AVTreeNode **rootp, void *key, - * int (*cmp)(void *key, const void *b, AVTreeNode **next)) - * { - * av_freep(next); - * return av_tree_insert(rootp, key, cmp, next); - * } - * @endcode - * @param cmp compare function used to compare elements in the tree, API identical - * to that of Standard C's qsort - * @return If no insertion happened, the found element; if an insertion or - * removal happened, then either key or NULL will be returned. - * Which one it is depends on the tree state and the implementation. You - * should make no assumptions that it's one or the other in the code. - */ -void *av_tree_insert(struct AVTreeNode **rootp, void *key, - int (*cmp)(const void *key, const void *b), - struct AVTreeNode **next); - -void av_tree_destroy(struct AVTreeNode *t); - -/** - * Apply enu(opaque, &elem) to all the elements in the tree in a given range. - * - * @param cmp a comparison function that returns < 0 for an element below the - * range, > 0 for an element above the range and == 0 for an - * element inside the range - * - * @note The cmp function should use the same ordering used to construct the - * tree. - */ -void av_tree_enumerate(struct AVTreeNode *t, void *opaque, - int (*cmp)(void *opaque, void *elem), - int (*enu)(void *opaque, void *elem)); - -/** - * @} - */ - -#endif /* AVUTIL_TREE_H */ diff --git a/prebuilts/aarch64/include/libavutil/twofish.h b/prebuilts/aarch64/include/libavutil/twofish.h deleted file mode 100644 index 813cfec..0000000 --- a/prebuilts/aarch64/include/libavutil/twofish.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * An implementation of the TwoFish algorithm - * Copyright (c) 2015 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TWOFISH_H -#define AVUTIL_TWOFISH_H - -#include - - -/** - * @file - * @brief Public header for libavutil TWOFISH algorithm - * @defgroup lavu_twofish TWOFISH - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_twofish_size; - -struct AVTWOFISH; - -/** - * Allocate an AVTWOFISH context - * To free the struct: av_free(ptr) - */ -struct AVTWOFISH *av_twofish_alloc(void); - -/** - * Initialize an AVTWOFISH context. - * - * @param ctx an AVTWOFISH context - * @param key a key of size ranging from 1 to 32 bytes used for encryption/decryption - * @param key_bits number of keybits: 128, 192, 256 If less than the required, padded with zeroes to nearest valid value; return value is 0 if key_bits is 128/192/256, -1 if less than 0, 1 otherwise - */ -int av_twofish_init(struct AVTWOFISH *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVTWOFISH context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 16 byte blocks - * @paran iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_twofish_crypt(struct AVTWOFISH *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt); - -/** - * @} - */ -#endif /* AVUTIL_TWOFISH_H */ diff --git a/prebuilts/aarch64/include/libavutil/tx.h b/prebuilts/aarch64/include/libavutil/tx.h deleted file mode 100644 index bfc0c7f..0000000 --- a/prebuilts/aarch64/include/libavutil/tx.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TX_H -#define AVUTIL_TX_H - -#include -#include - -typedef struct AVTXContext AVTXContext; - -typedef struct AVComplexFloat { - float re, im; -} AVComplexFloat; - -typedef struct AVComplexDouble { - double re, im; -} AVComplexDouble; - -typedef struct AVComplexInt32 { - int32_t re, im; -} AVComplexInt32; - -enum AVTXType { - /** - * Standard complex to complex FFT with sample data type AVComplexFloat. - * Output is not 1/len normalized. Scaling currently unsupported. - * The stride parameter is ignored. - */ - AV_TX_FLOAT_FFT = 0, - - /** - * Standard MDCT with sample data type of float and a scale type of - * float. Length is the frame size, not the window size (which is 2x frame) - * For forward transforms, the stride specifies the spacing between each - * sample in the output array in bytes. The input must be a flat array. - * For inverse transforms, the stride specifies the spacing between each - * sample in the input array in bytes. The output will be a flat array. - * Stride must be a non-zero multiple of sizeof(float). - * NOTE: the inverse transform is half-length, meaning the output will not - * contain redundant data. This is what most codecs work with. - */ - AV_TX_FLOAT_MDCT = 1, - - /** - * Same as AV_TX_FLOAT_FFT with a data type of AVComplexDouble. - */ - AV_TX_DOUBLE_FFT = 2, - - /** - * Same as AV_TX_FLOAT_MDCT with data and scale type of double. - * Stride must be a non-zero multiple of sizeof(double). - */ - AV_TX_DOUBLE_MDCT = 3, - - /** - * Same as AV_TX_FLOAT_FFT with a data type of AVComplexInt32. - */ - AV_TX_INT32_FFT = 4, - - /** - * Same as AV_TX_FLOAT_MDCT with data type of int32_t and scale type of float. - * Only scale values less than or equal to 1.0 are supported. - * Stride must be a non-zero multiple of sizeof(int32_t). - */ - AV_TX_INT32_MDCT = 5, -}; - -/** - * Function pointer to a function to perform the transform. - * - * @note Using a different context than the one allocated during av_tx_init() - * is not allowed. - * - * @param s the transform context - * @param out the output array - * @param in the input array - * @param stride the input or output stride in bytes - * - * The out and in arrays must be aligned to the maximum required by the CPU - * architecture. - * The stride must follow the constraints the transform type has specified. - */ -typedef void (*av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride); - -/** - * Flags for av_tx_init() - */ -enum AVTXFlags { - /** - * Performs an in-place transformation on the input. The output argument - * of av_tn_fn() MUST match the input. May be unsupported or slower for some - * transform types. - */ - AV_TX_INPLACE = 1ULL << 0, -}; - -/** - * Initialize a transform context with the given configuration - * (i)MDCTs with an odd length are currently not supported. - * - * @param ctx the context to allocate, will be NULL on error - * @param tx pointer to the transform function pointer to set - * @param type type the type of transform - * @param inv whether to do an inverse or a forward transform - * @param len the size of the transform in samples - * @param scale pointer to the value to scale the output if supported by type - * @param flags a bitmask of AVTXFlags or 0 - * - * @return 0 on success, negative error code on failure - */ -int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type, - int inv, int len, const void *scale, uint64_t flags); - -/** - * Frees a context and sets ctx to NULL, does nothing when ctx == NULL - */ -void av_tx_uninit(AVTXContext **ctx); - -#endif /* AVUTIL_TX_H */ diff --git a/prebuilts/aarch64/include/libavutil/version.h b/prebuilts/aarch64/include/libavutil/version.h deleted file mode 100644 index f888dbb..0000000 --- a/prebuilts/aarch64/include/libavutil/version.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * copyright (c) 2003 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu - * Libavutil version macros - */ - -#ifndef AVUTIL_VERSION_H -#define AVUTIL_VERSION_H - -#include "macros.h" - -/** - * @addtogroup version_utils - * - * Useful to check and match library version in order to maintain - * backward compatibility. - * - * The FFmpeg libraries follow a versioning sheme very similar to - * Semantic Versioning (http://semver.org/) - * The difference is that the component called PATCH is called MICRO in FFmpeg - * and its value is reset to 100 instead of 0 to keep it above or equal to 100. - * Also we do not increase MICRO for every bugfix or change in git master. - * - * Prior to FFmpeg 3.2 point releases did not change any lib version number to - * avoid aliassing different git master checkouts. - * Starting with FFmpeg 3.2, the released library versions will occupy - * a separate MAJOR.MINOR that is not used on the master development branch. - * That is if we branch a release of master 55.10.123 we will bump to 55.11.100 - * for the release and master will continue at 55.12.100 after it. Each new - * point release will then bump the MICRO improving the usefulness of the lib - * versions. - * - * @{ - */ - -#define AV_VERSION_INT(a, b, c) ((a)<<16 | (b)<<8 | (c)) -#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c -#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) - -/** - * Extract version components from the full ::AV_VERSION_INT int as returned - * by functions like ::avformat_version() and ::avcodec_version() - */ -#define AV_VERSION_MAJOR(a) ((a) >> 16) -#define AV_VERSION_MINOR(a) (((a) & 0x00FF00) >> 8) -#define AV_VERSION_MICRO(a) ((a) & 0xFF) - -/** - * @} - */ - -/** - * @defgroup lavu_ver Version and Build diagnostics - * - * Macros and function useful to check at compiletime and at runtime - * which version of libavutil is in use. - * - * @{ - */ - -#define LIBAVUTIL_VERSION_MAJOR 56 -#define LIBAVUTIL_VERSION_MINOR 70 -#define LIBAVUTIL_VERSION_MICRO 100 - -#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT - -#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) - -/** - * @defgroup lavu_depr_guards Deprecation Guards - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - * - * @{ - */ - -#ifndef FF_API_VAAPI -#define FF_API_VAAPI (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_FRAME_QP -#define FF_API_FRAME_QP (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_PLUS1_MINUS1 -#define FF_API_PLUS1_MINUS1 (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_ERROR_FRAME -#define FF_API_ERROR_FRAME (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_PKT_PTS -#define FF_API_PKT_PTS (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_CRYPTO_SIZE_T -#define FF_API_CRYPTO_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_FRAME_GET_SET -#define FF_API_FRAME_GET_SET (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_PSEUDOPAL -#define FF_API_PSEUDOPAL (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_CHILD_CLASS_NEXT -#define FF_API_CHILD_CLASS_NEXT (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_BUFFER_SIZE_T -#define FF_API_BUFFER_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_D2STR -#define FF_API_D2STR (LIBAVUTIL_VERSION_MAJOR < 58) -#endif -#ifndef FF_API_DECLARE_ALIGNED -#define FF_API_DECLARE_ALIGNED (LIBAVUTIL_VERSION_MAJOR < 58) -#endif - -/** - * @} - * @} - */ - -#endif /* AVUTIL_VERSION_H */ diff --git a/prebuilts/aarch64/include/libavutil/video_enc_params.h b/prebuilts/aarch64/include/libavutil/video_enc_params.h deleted file mode 100644 index fc0c3bc..0000000 --- a/prebuilts/aarch64/include/libavutil/video_enc_params.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_VIDEO_ENC_PARAMS_H -#define AVUTIL_VIDEO_ENC_PARAMS_H - -#include -#include - -#include "libavutil/avassert.h" -#include "libavutil/frame.h" - -enum AVVideoEncParamsType { - AV_VIDEO_ENC_PARAMS_NONE = -1, - /** - * VP9 stores: - * - per-frame base (luma AC) quantizer index, exported as AVVideoEncParams.qp - * - deltas for luma DC, chroma AC and chroma DC, exported in the - * corresponding entries in AVVideoEncParams.delta_qp - * - per-segment delta, exported as for each block as AVVideoBlockParams.delta_qp - * - * To compute the resulting quantizer index for a block: - * - for luma AC, add the base qp and the per-block delta_qp, saturating to - * unsigned 8-bit. - * - for luma DC and chroma AC/DC, add the corresponding - * AVVideoBlockParams.delta_qp to the luma AC index, again saturating to - * unsigned 8-bit. - */ - AV_VIDEO_ENC_PARAMS_VP9, - - /** - * H.264 stores: - * - in PPS (per-picture): - * * initial QP_Y (luma) value, exported as AVVideoEncParams.qp - * * delta(s) for chroma QP values (same for both, or each separately), - * exported as in the corresponding entries in AVVideoEncParams.delta_qp - * - per-slice QP delta, not exported directly, added to the per-MB value - * - per-MB delta; not exported directly; the final per-MB quantizer - * parameter - QP_Y - minus the value in AVVideoEncParams.qp is exported - * as AVVideoBlockParams.qp_delta. - */ - AV_VIDEO_ENC_PARAMS_H264, - - /* - * MPEG-2-compatible quantizer. - * - * Summing the frame-level qp with the per-block delta_qp gives the - * resulting quantizer for the block. - */ - AV_VIDEO_ENC_PARAMS_MPEG2, -}; - -/** - * Video encoding parameters for a given frame. This struct is allocated along - * with an optional array of per-block AVVideoBlockParams descriptors. - * Must be allocated with av_video_enc_params_alloc(). - */ -typedef struct AVVideoEncParams { - /** - * Number of blocks in the array. - * - * May be 0, in which case no per-block information is present. In this case - * the values of blocks_offset / block_size are unspecified and should not - * be accessed. - */ - unsigned int nb_blocks; - /** - * Offset in bytes from the beginning of this structure at which the array - * of blocks starts. - */ - size_t blocks_offset; - /* - * Size of each block in bytes. May not match sizeof(AVVideoBlockParams). - */ - size_t block_size; - - /** - * Type of the parameters (the codec they are used with). - */ - enum AVVideoEncParamsType type; - - /** - * Base quantisation parameter for the frame. The final quantiser for a - * given block in a given plane is obtained from this value, possibly - * combined with {@code delta_qp} and the per-block delta in a manner - * documented for each type. - */ - int32_t qp; - - /** - * Quantisation parameter offset from the base (per-frame) qp for a given - * plane (first index) and AC/DC coefficients (second index). - */ - int32_t delta_qp[4][2]; -} AVVideoEncParams; - -/** - * Data structure for storing block-level encoding information. - * It is allocated as a part of AVVideoEncParams and should be retrieved with - * av_video_enc_params_block(). - * - * sizeof(AVVideoBlockParams) is not a part of the ABI and new fields may be - * added to it. - */ -typedef struct AVVideoBlockParams { - /** - * Distance in luma pixels from the top-left corner of the visible frame - * to the top-left corner of the block. - * Can be negative if top/right padding is present on the coded frame. - */ - int src_x, src_y; - /** - * Width and height of the block in luma pixels. - */ - int w, h; - - /** - * Difference between this block's final quantization parameter and the - * corresponding per-frame value. - */ - int32_t delta_qp; -} AVVideoBlockParams; - -/* - * Get the block at the specified {@code idx}. Must be between 0 and nb_blocks. - */ -static av_always_inline AVVideoBlockParams* -av_video_enc_params_block(AVVideoEncParams *par, unsigned int idx) -{ - av_assert0(idx < par->nb_blocks); - return (AVVideoBlockParams *)((uint8_t *)par + par->blocks_offset + - idx * par->block_size); -} - -/** - * Allocates memory for AVVideoEncParams of the given type, plus an array of - * {@code nb_blocks} AVVideoBlockParams and initializes the variables. Can be - * freed with a normal av_free() call. - * - * @param out_size if non-NULL, the size in bytes of the resulting data array is - * written here. - */ -AVVideoEncParams *av_video_enc_params_alloc(enum AVVideoEncParamsType type, - unsigned int nb_blocks, size_t *out_size); - -/** - * Allocates memory for AVEncodeInfoFrame plus an array of - * {@code nb_blocks} AVEncodeInfoBlock in the given AVFrame {@code frame} - * as AVFrameSideData of type AV_FRAME_DATA_VIDEO_ENC_PARAMS - * and initializes the variables. - */ -AVVideoEncParams* -av_video_enc_params_create_side_data(AVFrame *frame, enum AVVideoEncParamsType type, - unsigned int nb_blocks); - -#endif /* AVUTIL_VIDEO_ENC_PARAMS_H */ diff --git a/prebuilts/aarch64/include/libavutil/xtea.h b/prebuilts/aarch64/include/libavutil/xtea.h deleted file mode 100644 index 735427c..0000000 --- a/prebuilts/aarch64/include/libavutil/xtea.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * A 32-bit implementation of the XTEA algorithm - * Copyright (c) 2012 Samuel Pitoiset - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_XTEA_H -#define AVUTIL_XTEA_H - -#include - -/** - * @file - * @brief Public header for libavutil XTEA algorithm - * @defgroup lavu_xtea XTEA - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVXTEA { - uint32_t key[16]; -} AVXTEA; - -/** - * Allocate an AVXTEA context. - */ -AVXTEA *av_xtea_alloc(void); - -/** - * Initialize an AVXTEA context. - * - * @param ctx an AVXTEA context - * @param key a key of 16 bytes used for encryption/decryption, - * interpreted as big endian 32 bit numbers - */ -void av_xtea_init(struct AVXTEA *ctx, const uint8_t key[16]); - -/** - * Initialize an AVXTEA context. - * - * @param ctx an AVXTEA context - * @param key a key of 16 bytes used for encryption/decryption, - * interpreted as little endian 32 bit numbers - */ -void av_xtea_le_init(struct AVXTEA *ctx, const uint8_t key[16]); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, - * in big endian format. - * - * @param ctx an AVXTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_xtea_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, - * in little endian format. - * - * @param ctx an AVXTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_xtea_le_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_XTEA_H */ diff --git a/prebuilts/aarch64/include/libdrm/amdgpu.h b/prebuilts/aarch64/include/libdrm/amdgpu.h deleted file mode 100644 index 5ef2524..0000000 --- a/prebuilts/aarch64/include/libdrm/amdgpu.h +++ /dev/null @@ -1,1876 +0,0 @@ -/* - * Copyright 2014 Advanced Micro Devices, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - */ - -/** - * \file amdgpu.h - * - * Declare public libdrm_amdgpu API - * - * This file define API exposed by libdrm_amdgpu library. - * User wanted to use libdrm_amdgpu functionality must include - * this file. - * - */ -#ifndef _AMDGPU_H_ -#define _AMDGPU_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct drm_amdgpu_info_hw_ip; -struct drm_amdgpu_bo_list_entry; - -/*--------------------------------------------------------------------------*/ -/* --------------------------- Defines ------------------------------------ */ -/*--------------------------------------------------------------------------*/ - -/** - * Define max. number of Command Buffers (IB) which could be sent to the single - * hardware IP to accommodate CE/DE requirements - * - * \sa amdgpu_cs_ib_info -*/ -#define AMDGPU_CS_MAX_IBS_PER_SUBMIT 4 - -/** - * Special timeout value meaning that the timeout is infinite. - */ -#define AMDGPU_TIMEOUT_INFINITE 0xffffffffffffffffull - -/** - * Used in amdgpu_cs_query_fence_status(), meaning that the given timeout - * is absolute. - */ -#define AMDGPU_QUERY_FENCE_TIMEOUT_IS_ABSOLUTE (1 << 0) - -/*--------------------------------------------------------------------------*/ -/* ----------------------------- Enums ------------------------------------ */ -/*--------------------------------------------------------------------------*/ - -/** - * Enum describing possible handle types - * - * \sa amdgpu_bo_import, amdgpu_bo_export - * -*/ -enum amdgpu_bo_handle_type { - /** GEM flink name (needs DRM authentication, used by DRI2) */ - amdgpu_bo_handle_type_gem_flink_name = 0, - - /** KMS handle which is used by all driver ioctls */ - amdgpu_bo_handle_type_kms = 1, - - /** DMA-buf fd handle */ - amdgpu_bo_handle_type_dma_buf_fd = 2, - - /** Deprecated in favour of and same behaviour as - * amdgpu_bo_handle_type_kms, use that instead of this - */ - amdgpu_bo_handle_type_kms_noimport = 3, -}; - -/** Define known types of GPU VM VA ranges */ -enum amdgpu_gpu_va_range -{ - /** Allocate from "normal"/general range */ - amdgpu_gpu_va_range_general = 0 -}; - -enum amdgpu_sw_info { - amdgpu_sw_info_address32_hi = 0, -}; - -/*--------------------------------------------------------------------------*/ -/* -------------------------- Datatypes ----------------------------------- */ -/*--------------------------------------------------------------------------*/ - -/** - * Define opaque pointer to context associated with fd. - * This context will be returned as the result of - * "initialize" function and should be pass as the first - * parameter to any API call - */ -typedef struct amdgpu_device *amdgpu_device_handle; - -/** - * Define GPU Context type as pointer to opaque structure - * Example of GPU Context is the "rendering" context associated - * with OpenGL context (glCreateContext) - */ -typedef struct amdgpu_context *amdgpu_context_handle; - -/** - * Define handle for amdgpu resources: buffer, GDS, etc. - */ -typedef struct amdgpu_bo *amdgpu_bo_handle; - -/** - * Define handle for list of BOs - */ -typedef struct amdgpu_bo_list *amdgpu_bo_list_handle; - -/** - * Define handle to be used to work with VA allocated ranges - */ -typedef struct amdgpu_va *amdgpu_va_handle; - -/** - * Define handle for semaphore - */ -typedef struct amdgpu_semaphore *amdgpu_semaphore_handle; - -/*--------------------------------------------------------------------------*/ -/* -------------------------- Structures ---------------------------------- */ -/*--------------------------------------------------------------------------*/ - -/** - * Structure describing memory allocation request - * - * \sa amdgpu_bo_alloc() - * -*/ -struct amdgpu_bo_alloc_request { - /** Allocation request. It must be aligned correctly. */ - uint64_t alloc_size; - - /** - * It may be required to have some specific alignment requirements - * for physical back-up storage (e.g. for displayable surface). - * If 0 there is no special alignment requirement - */ - uint64_t phys_alignment; - - /** - * UMD should specify where to allocate memory and how it - * will be accessed by the CPU. - */ - uint32_t preferred_heap; - - /** Additional flags passed on allocation */ - uint64_t flags; -}; - -/** - * Special UMD specific information associated with buffer. - * - * It may be need to pass some buffer charactersitic as part - * of buffer sharing. Such information are defined UMD and - * opaque for libdrm_amdgpu as well for kernel driver. - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_query_info, - * amdgpu_bo_import(), amdgpu_bo_export - * -*/ -struct amdgpu_bo_metadata { - /** Special flag associated with surface */ - uint64_t flags; - - /** - * ASIC-specific tiling information (also used by DCE). - * The encoding is defined by the AMDGPU_TILING_* definitions. - */ - uint64_t tiling_info; - - /** Size of metadata associated with the buffer, in bytes. */ - uint32_t size_metadata; - - /** UMD specific metadata. Opaque for kernel */ - uint32_t umd_metadata[64]; -}; - -/** - * Structure describing allocated buffer. Client may need - * to query such information as part of 'sharing' buffers mechanism - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_query_info(), - * amdgpu_bo_import(), amdgpu_bo_export() -*/ -struct amdgpu_bo_info { - /** Allocated memory size */ - uint64_t alloc_size; - - /** - * It may be required to have some specific alignment requirements - * for physical back-up storage. - */ - uint64_t phys_alignment; - - /** Heap where to allocate memory. */ - uint32_t preferred_heap; - - /** Additional allocation flags. */ - uint64_t alloc_flags; - - /** Metadata associated with buffer if any. */ - struct amdgpu_bo_metadata metadata; -}; - -/** - * Structure with information about "imported" buffer - * - * \sa amdgpu_bo_import() - * - */ -struct amdgpu_bo_import_result { - /** Handle of memory/buffer to use */ - amdgpu_bo_handle buf_handle; - - /** Buffer size */ - uint64_t alloc_size; -}; - -/** - * - * Structure to describe GDS partitioning information. - * \note OA and GWS resources are asscoiated with GDS partition - * - * \sa amdgpu_gpu_resource_query_gds_info - * -*/ -struct amdgpu_gds_resource_info { - uint32_t gds_gfx_partition_size; - uint32_t compute_partition_size; - uint32_t gds_total_size; - uint32_t gws_per_gfx_partition; - uint32_t gws_per_compute_partition; - uint32_t oa_per_gfx_partition; - uint32_t oa_per_compute_partition; -}; - -/** - * Structure describing CS fence - * - * \sa amdgpu_cs_query_fence_status(), amdgpu_cs_request, amdgpu_cs_submit() - * -*/ -struct amdgpu_cs_fence { - - /** In which context IB was sent to execution */ - amdgpu_context_handle context; - - /** To which HW IP type the fence belongs */ - uint32_t ip_type; - - /** IP instance index if there are several IPs of the same type. */ - uint32_t ip_instance; - - /** Ring index of the HW IP */ - uint32_t ring; - - /** Specify fence for which we need to check submission status.*/ - uint64_t fence; -}; - -/** - * Structure describing IB - * - * \sa amdgpu_cs_request, amdgpu_cs_submit() - * -*/ -struct amdgpu_cs_ib_info { - /** Special flags */ - uint64_t flags; - - /** Virtual MC address of the command buffer */ - uint64_t ib_mc_address; - - /** - * Size of Command Buffer to be submitted. - * - The size is in units of dwords (4 bytes). - * - Could be 0 - */ - uint32_t size; -}; - -/** - * Structure describing fence information - * - * \sa amdgpu_cs_request, amdgpu_cs_query_fence, - * amdgpu_cs_submit(), amdgpu_cs_query_fence_status() -*/ -struct amdgpu_cs_fence_info { - /** buffer object for the fence */ - amdgpu_bo_handle handle; - - /** fence offset in the unit of sizeof(uint64_t) */ - uint64_t offset; -}; - -/** - * Structure describing submission request - * - * \note We could have several IBs as packet. e.g. CE, CE, DE case for gfx - * - * \sa amdgpu_cs_submit() -*/ -struct amdgpu_cs_request { - /** Specify flags with additional information */ - uint64_t flags; - - /** Specify HW IP block type to which to send the IB. */ - unsigned ip_type; - - /** IP instance index if there are several IPs of the same type. */ - unsigned ip_instance; - - /** - * Specify ring index of the IP. We could have several rings - * in the same IP. E.g. 0 for SDMA0 and 1 for SDMA1. - */ - uint32_t ring; - - /** - * List handle with resources used by this request. - */ - amdgpu_bo_list_handle resources; - - /** - * Number of dependencies this Command submission needs to - * wait for before starting execution. - */ - uint32_t number_of_dependencies; - - /** - * Array of dependencies which need to be met before - * execution can start. - */ - struct amdgpu_cs_fence *dependencies; - - /** Number of IBs to submit in the field ibs. */ - uint32_t number_of_ibs; - - /** - * IBs to submit. Those IBs will be submit together as single entity - */ - struct amdgpu_cs_ib_info *ibs; - - /** - * The returned sequence number for the command submission - */ - uint64_t seq_no; - - /** - * The fence information - */ - struct amdgpu_cs_fence_info fence_info; -}; - -/** - * Structure which provide information about GPU VM MC Address space - * alignments requirements - * - * \sa amdgpu_query_buffer_size_alignment - */ -struct amdgpu_buffer_size_alignments { - /** Size alignment requirement for allocation in - * local memory */ - uint64_t size_local; - - /** - * Size alignment requirement for allocation in remote memory - */ - uint64_t size_remote; -}; - -/** - * Structure which provide information about heap - * - * \sa amdgpu_query_heap_info() - * - */ -struct amdgpu_heap_info { - /** Theoretical max. available memory in the given heap */ - uint64_t heap_size; - - /** - * Number of bytes allocated in the heap. This includes all processes - * and private allocations in the kernel. It changes when new buffers - * are allocated, freed, and moved. It cannot be larger than - * heap_size. - */ - uint64_t heap_usage; - - /** - * Theoretical possible max. size of buffer which - * could be allocated in the given heap - */ - uint64_t max_allocation; -}; - -/** - * Describe GPU h/w info needed for UMD correct initialization - * - * \sa amdgpu_query_gpu_info() -*/ -struct amdgpu_gpu_info { - /** Asic id */ - uint32_t asic_id; - /** Chip revision */ - uint32_t chip_rev; - /** Chip external revision */ - uint32_t chip_external_rev; - /** Family ID */ - uint32_t family_id; - /** Special flags */ - uint64_t ids_flags; - /** max engine clock*/ - uint64_t max_engine_clk; - /** max memory clock */ - uint64_t max_memory_clk; - /** number of shader engines */ - uint32_t num_shader_engines; - /** number of shader arrays per engine */ - uint32_t num_shader_arrays_per_engine; - /** Number of available good shader pipes */ - uint32_t avail_quad_shader_pipes; - /** Max. number of shader pipes.(including good and bad pipes */ - uint32_t max_quad_shader_pipes; - /** Number of parameter cache entries per shader quad pipe */ - uint32_t cache_entries_per_quad_pipe; - /** Number of available graphics context */ - uint32_t num_hw_gfx_contexts; - /** Number of render backend pipes */ - uint32_t rb_pipes; - /** Enabled render backend pipe mask */ - uint32_t enabled_rb_pipes_mask; - /** Frequency of GPU Counter */ - uint32_t gpu_counter_freq; - /** CC_RB_BACKEND_DISABLE.BACKEND_DISABLE per SE */ - uint32_t backend_disable[4]; - /** Value of MC_ARB_RAMCFG register*/ - uint32_t mc_arb_ramcfg; - /** Value of GB_ADDR_CONFIG */ - uint32_t gb_addr_cfg; - /** Values of the GB_TILE_MODE0..31 registers */ - uint32_t gb_tile_mode[32]; - /** Values of GB_MACROTILE_MODE0..15 registers */ - uint32_t gb_macro_tile_mode[16]; - /** Value of PA_SC_RASTER_CONFIG register per SE */ - uint32_t pa_sc_raster_cfg[4]; - /** Value of PA_SC_RASTER_CONFIG_1 register per SE */ - uint32_t pa_sc_raster_cfg1[4]; - /* CU info */ - uint32_t cu_active_number; - uint32_t cu_ao_mask; - uint32_t cu_bitmap[4][4]; - /* video memory type info*/ - uint32_t vram_type; - /* video memory bit width*/ - uint32_t vram_bit_width; - /** constant engine ram size*/ - uint32_t ce_ram_size; - /* vce harvesting instance */ - uint32_t vce_harvest_config; - /* PCI revision ID */ - uint32_t pci_rev_id; -}; - - -/*--------------------------------------------------------------------------*/ -/*------------------------- Functions --------------------------------------*/ -/*--------------------------------------------------------------------------*/ - -/* - * Initialization / Cleanup - * -*/ - -/** - * - * \param fd - \c [in] File descriptor for AMD GPU device - * received previously as the result of - * e.g. drmOpen() call. - * For legacy fd type, the DRI2/DRI3 - * authentication should be done before - * calling this function. - * \param major_version - \c [out] Major version of library. It is assumed - * that adding new functionality will cause - * increase in major version - * \param minor_version - \c [out] Minor version of library - * \param device_handle - \c [out] Pointer to opaque context which should - * be passed as the first parameter on each - * API call - * - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * - * \sa amdgpu_device_deinitialize() -*/ -int amdgpu_device_initialize(int fd, - uint32_t *major_version, - uint32_t *minor_version, - amdgpu_device_handle *device_handle); - -/** - * - * When access to such library does not needed any more the special - * function must be call giving opportunity to clean up any - * resources if needed. - * - * \param device_handle - \c [in] Context associated with file - * descriptor for AMD GPU device - * received previously as the - * result e.g. of drmOpen() call. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_device_initialize() - * -*/ -int amdgpu_device_deinitialize(amdgpu_device_handle device_handle); - -/** - * - * /param device_handle - \c [in] Device handle. - * See #amdgpu_device_initialize() - * - * \return Returns the drm fd used for operations on this - * device. This is still owned by the library and hence - * should not be closed. Guaranteed to be valid until - * #amdgpu_device_deinitialize gets called. - * -*/ -int amdgpu_device_get_fd(amdgpu_device_handle device_handle); - -/* - * Memory Management - * -*/ - -/** - * Allocate memory to be used by UMD for GPU related operations - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param alloc_buffer - \c [in] Pointer to the structure describing an - * allocation request - * \param buf_handle - \c [out] Allocated buffer handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_free() -*/ -int amdgpu_bo_alloc(amdgpu_device_handle dev, - struct amdgpu_bo_alloc_request *alloc_buffer, - amdgpu_bo_handle *buf_handle); - -/** - * Associate opaque data with buffer to be queried by another UMD - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle - * \param info - \c [in] Metadata to associated with buffer - * - * \return 0 on success\n - * <0 - Negative POSIX Error code -*/ -int amdgpu_bo_set_metadata(amdgpu_bo_handle buf_handle, - struct amdgpu_bo_metadata *info); - -/** - * Query buffer information including metadata previusly associated with - * buffer. - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle - * \param info - \c [out] Structure describing buffer - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_alloc() -*/ -int amdgpu_bo_query_info(amdgpu_bo_handle buf_handle, - struct amdgpu_bo_info *info); - -/** - * Allow others to get access to buffer - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle - * \param type - \c [in] Type of handle requested - * \param shared_handle - \c [out] Special "shared" handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_import() - * -*/ -int amdgpu_bo_export(amdgpu_bo_handle buf_handle, - enum amdgpu_bo_handle_type type, - uint32_t *shared_handle); - -/** - * Request access to "shared" buffer - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param type - \c [in] Type of handle requested - * \param shared_handle - \c [in] Shared handle received as result "import" - * operation - * \param output - \c [out] Pointer to structure with information - * about imported buffer - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note Buffer must be "imported" only using new "fd" (different from - * one used by "exporter"). - * - * \sa amdgpu_bo_export() - * -*/ -int amdgpu_bo_import(amdgpu_device_handle dev, - enum amdgpu_bo_handle_type type, - uint32_t shared_handle, - struct amdgpu_bo_import_result *output); - -/** - * Request GPU access to user allocated memory e.g. via "malloc" - * - * \param dev - [in] Device handle. See #amdgpu_device_initialize() - * \param cpu - [in] CPU address of user allocated memory which we - * want to map to GPU address space (make GPU accessible) - * (This address must be correctly aligned). - * \param size - [in] Size of allocation (must be correctly aligned) - * \param buf_handle - [out] Buffer handle for the userptr memory - * resource on submission and be used in other operations. - * - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note - * This call doesn't guarantee that such memory will be persistently - * "locked" / make non-pageable. The purpose of this call is to provide - * opportunity for GPU get access to this resource during submission. - * - * The maximum amount of memory which could be mapped in this call depends - * if overcommit is disabled or not. If overcommit is disabled than the max. - * amount of memory to be pinned will be limited by left "free" size in total - * amount of memory which could be locked simultaneously ("GART" size). - * - * Supported (theoretical) max. size of mapping is restricted only by - * "GART" size. - * - * It is responsibility of caller to correctly specify access rights - * on VA assignment. -*/ -int amdgpu_create_bo_from_user_mem(amdgpu_device_handle dev, - void *cpu, uint64_t size, - amdgpu_bo_handle *buf_handle); - -/** - * Validate if the user memory comes from BO - * - * \param dev - [in] Device handle. See #amdgpu_device_initialize() - * \param cpu - [in] CPU address of user allocated memory which we - * want to map to GPU address space (make GPU accessible) - * (This address must be correctly aligned). - * \param size - [in] Size of allocation (must be correctly aligned) - * \param buf_handle - [out] Buffer handle for the userptr memory - * if the user memory is not from BO, the buf_handle will be NULL. - * \param offset_in_bo - [out] offset in this BO for this user memory - * - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_find_bo_by_cpu_mapping(amdgpu_device_handle dev, - void *cpu, - uint64_t size, - amdgpu_bo_handle *buf_handle, - uint64_t *offset_in_bo); - -/** - * Free previously allocated memory - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle to free - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note In the case of memory shared between different applications all - * resources will be “physically” freed only all such applications - * will be terminated - * \note If is UMD responsibility to ‘free’ buffer only when there is no - * more GPU access - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_alloc() - * -*/ -int amdgpu_bo_free(amdgpu_bo_handle buf_handle); - -/** - * Increase the reference count of a buffer object - * - * \param bo - \c [in] Buffer object handle to increase the reference count - * - * \sa amdgpu_bo_alloc(), amdgpu_bo_free() - * -*/ -void amdgpu_bo_inc_ref(amdgpu_bo_handle bo); - -/** - * Request CPU access to GPU accessible memory - * - * \param buf_handle - \c [in] Buffer handle - * \param cpu - \c [out] CPU address to be used for access - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_cpu_unmap() - * -*/ -int amdgpu_bo_cpu_map(amdgpu_bo_handle buf_handle, void **cpu); - -/** - * Release CPU access to GPU memory - * - * \param buf_handle - \c [in] Buffer handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_cpu_map() - * -*/ -int amdgpu_bo_cpu_unmap(amdgpu_bo_handle buf_handle); - -/** - * Wait until a buffer is not used by the device. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle. - * \param timeout_ns - Timeout in nanoseconds. - * \param buffer_busy - 0 if buffer is idle, all GPU access was completed - * and no GPU access is scheduled. - * 1 GPU access is in fly or scheduled - * - * \return 0 - on success - * <0 - Negative POSIX Error code - */ -int amdgpu_bo_wait_for_idle(amdgpu_bo_handle buf_handle, - uint64_t timeout_ns, - bool *buffer_busy); - -/** - * Creates a BO list handle for command submission. - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param number_of_buffers - \c [in] Number of BOs in the list - * \param buffers - \c [in] List of BO handles - * \param result - \c [out] Created BO list handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_destroy_raw(), amdgpu_cs_submit_raw2() -*/ -int amdgpu_bo_list_create_raw(amdgpu_device_handle dev, - uint32_t number_of_buffers, - struct drm_amdgpu_bo_list_entry *buffers, - uint32_t *result); - -/** - * Destroys a BO list handle. - * - * \param bo_list - \c [in] BO list handle. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_create_raw(), amdgpu_cs_submit_raw2() -*/ -int amdgpu_bo_list_destroy_raw(amdgpu_device_handle dev, uint32_t bo_list); - -/** - * Creates a BO list handle for command submission. - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param number_of_resources - \c [in] Number of BOs in the list - * \param resources - \c [in] List of BO handles - * \param resource_prios - \c [in] Optional priority for each handle - * \param result - \c [out] Created BO list handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_destroy() -*/ -int amdgpu_bo_list_create(amdgpu_device_handle dev, - uint32_t number_of_resources, - amdgpu_bo_handle *resources, - uint8_t *resource_prios, - amdgpu_bo_list_handle *result); - -/** - * Destroys a BO list handle. - * - * \param handle - \c [in] BO list handle. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_create() -*/ -int amdgpu_bo_list_destroy(amdgpu_bo_list_handle handle); - -/** - * Update resources for existing BO list - * - * \param handle - \c [in] BO list handle - * \param number_of_resources - \c [in] Number of BOs in the list - * \param resources - \c [in] List of BO handles - * \param resource_prios - \c [in] Optional priority for each handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_update() -*/ -int amdgpu_bo_list_update(amdgpu_bo_list_handle handle, - uint32_t number_of_resources, - amdgpu_bo_handle *resources, - uint8_t *resource_prios); - -/* - * GPU Execution context - * -*/ - -/** - * Create GPU execution Context - * - * For the purpose of GPU Scheduler and GPU Robustness extensions it is - * necessary to have information/identify rendering/compute contexts. - * It also may be needed to associate some specific requirements with such - * contexts. Kernel driver will guarantee that submission from the same - * context will always be executed in order (first come, first serve). - * - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param priority - \c [in] Context creation flags. See AMDGPU_CTX_PRIORITY_* - * \param context - \c [out] GPU Context handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_free() - * -*/ -int amdgpu_cs_ctx_create2(amdgpu_device_handle dev, - uint32_t priority, - amdgpu_context_handle *context); -/** - * Create GPU execution Context - * - * Refer to amdgpu_cs_ctx_create2 for full documentation. This call - * is missing the priority parameter. - * - * \sa amdgpu_cs_ctx_create2() - * -*/ -int amdgpu_cs_ctx_create(amdgpu_device_handle dev, - amdgpu_context_handle *context); - -/** - * - * Destroy GPU execution context when not needed any more - * - * \param context - \c [in] GPU Context handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_create() - * -*/ -int amdgpu_cs_ctx_free(amdgpu_context_handle context); - -/** - * Override the submission priority for the given context using a master fd. - * - * \param dev - \c [in] device handle - * \param context - \c [in] context handle for context id - * \param master_fd - \c [in] The master fd to authorize the override. - * \param priority - \c [in] The priority to assign to the context. - * - * \return 0 on success or a a negative Posix error code on failure. - */ -int amdgpu_cs_ctx_override_priority(amdgpu_device_handle dev, - amdgpu_context_handle context, - int master_fd, - unsigned priority); - -/** - * Set or query the stable power state for GPU profiling. - * - * \param dev - \c [in] device handle - * \param op - \c [in] AMDGPU_CTX_OP_{GET,SET}_STABLE_PSTATE - * \param flags - \c [in] AMDGPU_CTX_STABLE_PSTATE_* - * \param out_flags - \c [out] output current stable pstate - * - * \return 0 on success otherwise POSIX Error code. - */ -int amdgpu_cs_ctx_stable_pstate(amdgpu_context_handle context, - uint32_t op, - uint32_t flags, - uint32_t *out_flags); - -/** - * Query reset state for the specific GPU Context - * - * \param context - \c [in] GPU Context handle - * \param state - \c [out] One of AMDGPU_CTX_*_RESET - * \param hangs - \c [out] Number of hangs caused by the context. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_create() - * -*/ -int amdgpu_cs_query_reset_state(amdgpu_context_handle context, - uint32_t *state, uint32_t *hangs); - -/** - * Query reset state for the specific GPU Context. - * - * \param context - \c [in] GPU Context handle - * \param flags - \c [out] A combination of AMDGPU_CTX_QUERY2_FLAGS_* - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_create() - * -*/ -int amdgpu_cs_query_reset_state2(amdgpu_context_handle context, - uint64_t *flags); - -/* - * Command Buffers Management - * -*/ - -/** - * Send request to submit command buffers to hardware. - * - * Kernel driver could use GPU Scheduler to make decision when physically - * sent this request to the hardware. Accordingly this request could be put - * in queue and sent for execution later. The only guarantee is that request - * from the same GPU context to the same ip:ip_instance:ring will be executed in - * order. - * - * The caller can specify the user fence buffer/location with the fence_info in the - * cs_request.The sequence number is returned via the 'seq_no' parameter - * in ibs_request structure. - * - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param context - \c [in] GPU Context - * \param flags - \c [in] Global submission flags - * \param ibs_request - \c [in/out] Pointer to submission requests. - * We could submit to the several - * engines/rings simulteniously as - * 'atomic' operation - * \param number_of_requests - \c [in] Number of submission requests - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note It is required to pass correct resource list with buffer handles - * which will be accessible by command buffers from submission - * This will allow kernel driver to correctly implement "paging". - * Failure to do so will have unpredictable results. - * - * \sa amdgpu_command_buffer_alloc(), amdgpu_command_buffer_free(), - * amdgpu_cs_query_fence_status() - * -*/ -int amdgpu_cs_submit(amdgpu_context_handle context, - uint64_t flags, - struct amdgpu_cs_request *ibs_request, - uint32_t number_of_requests); - -/** - * Query status of Command Buffer Submission - * - * \param fence - \c [in] Structure describing fence to query - * \param timeout_ns - \c [in] Timeout value to wait - * \param flags - \c [in] Flags for the query - * \param expired - \c [out] If fence expired or not.\n - * 0 – if fence is not expired\n - * !0 - otherwise - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note If UMD wants only to check operation status and returned immediately - * then timeout value as 0 must be passed. In this case success will be - * returned in the case if submission was completed or timeout error - * code. - * - * \sa amdgpu_cs_submit() -*/ -int amdgpu_cs_query_fence_status(struct amdgpu_cs_fence *fence, - uint64_t timeout_ns, - uint64_t flags, - uint32_t *expired); - -/** - * Wait for multiple fences - * - * \param fences - \c [in] The fence array to wait - * \param fence_count - \c [in] The fence count - * \param wait_all - \c [in] If true, wait all fences to be signaled, - * otherwise, wait at least one fence - * \param timeout_ns - \c [in] The timeout to wait, in nanoseconds - * \param status - \c [out] '1' for signaled, '0' for timeout - * \param first - \c [out] the index of the first signaled fence from @fences - * - * \return 0 on success - * <0 - Negative POSIX Error code - * - * \note Currently it supports only one amdgpu_device. All fences come from - * the same amdgpu_device with the same fd. -*/ -int amdgpu_cs_wait_fences(struct amdgpu_cs_fence *fences, - uint32_t fence_count, - bool wait_all, - uint64_t timeout_ns, - uint32_t *status, uint32_t *first); - -/* - * Query / Info API - * -*/ - -/** - * Query allocation size alignments - * - * UMD should query information about GPU VM MC size alignments requirements - * to be able correctly choose required allocation size and implement - * internal optimization if needed. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param info - \c [out] Pointer to structure to get size alignment - * requirements - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_buffer_size_alignment(amdgpu_device_handle dev, - struct amdgpu_buffer_size_alignments - *info); - -/** - * Query firmware versions - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param fw_type - \c [in] AMDGPU_INFO_FW_* - * \param ip_instance - \c [in] Index of the IP block of the same type. - * \param index - \c [in] Index of the engine. (for SDMA and MEC) - * \param version - \c [out] Pointer to to the "version" return value - * \param feature - \c [out] Pointer to to the "feature" return value - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_firmware_version(amdgpu_device_handle dev, unsigned fw_type, - unsigned ip_instance, unsigned index, - uint32_t *version, uint32_t *feature); - -/** - * Query the number of HW IP instances of a certain type. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param count - \c [out] Pointer to structure to get information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code -*/ -int amdgpu_query_hw_ip_count(amdgpu_device_handle dev, unsigned type, - uint32_t *count); - -/** - * Query engine information - * - * This query allows UMD to query information different engines and their - * capabilities. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param ip_instance - \c [in] Index of the IP block of the same type. - * \param info - \c [out] Pointer to structure to get information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code -*/ -int amdgpu_query_hw_ip_info(amdgpu_device_handle dev, unsigned type, - unsigned ip_instance, - struct drm_amdgpu_info_hw_ip *info); - -/** - * Query heap information - * - * This query allows UMD to query potentially available memory resources and - * adjust their logic if necessary. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param heap - \c [in] Heap type - * \param info - \c [in] Pointer to structure to get needed information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_heap_info(amdgpu_device_handle dev, uint32_t heap, - uint32_t flags, struct amdgpu_heap_info *info); - -/** - * Get the CRTC ID from the mode object ID - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param id - \c [in] Mode object ID - * \param result - \c [in] Pointer to the CRTC ID - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_crtc_from_id(amdgpu_device_handle dev, unsigned id, - int32_t *result); - -/** - * Query GPU H/w Info - * - * Query hardware specific information - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param heap - \c [in] Heap type - * \param info - \c [in] Pointer to structure to get needed information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_gpu_info(amdgpu_device_handle dev, - struct amdgpu_gpu_info *info); - -/** - * Query hardware or driver information. - * - * The return size is query-specific and depends on the "info_id" parameter. - * No more than "size" bytes is returned. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param info_id - \c [in] AMDGPU_INFO_* - * \param size - \c [in] Size of the returned value. - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX error code - * -*/ -int amdgpu_query_info(amdgpu_device_handle dev, unsigned info_id, - unsigned size, void *value); - -/** - * Query hardware or driver information. - * - * The return size is query-specific and depends on the "info_id" parameter. - * No more than "size" bytes is returned. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param info - \c [in] amdgpu_sw_info_* - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX error code - * -*/ -int amdgpu_query_sw_info(amdgpu_device_handle dev, enum amdgpu_sw_info info, - void *value); - -/** - * Query information about GDS - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param gds_info - \c [out] Pointer to structure to get GDS information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_gds_info(amdgpu_device_handle dev, - struct amdgpu_gds_resource_info *gds_info); - -/** - * Query information about sensor. - * - * The return size is query-specific and depends on the "sensor_type" - * parameter. No more than "size" bytes is returned. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param sensor_type - \c [in] AMDGPU_INFO_SENSOR_* - * \param size - \c [in] Size of the returned value. - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_sensor_info(amdgpu_device_handle dev, unsigned sensor_type, - unsigned size, void *value); - -/** - * Query information about video capabilities - * - * The return sizeof(struct drm_amdgpu_info_video_caps) - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param caps_type - \c [in] AMDGPU_INFO_VIDEO_CAPS_DECODE(ENCODE) - * \param size - \c [in] Size of the returned value. - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_video_caps_info(amdgpu_device_handle dev, unsigned cap_type, - unsigned size, void *value); - -/** - * Read a set of consecutive memory-mapped registers. - * Not all registers are allowed to be read by userspace. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize( - * \param dword_offset - \c [in] Register offset in dwords - * \param count - \c [in] The number of registers to read starting - * from the offset - * \param instance - \c [in] GRBM_GFX_INDEX selector. It may have other - * uses. Set it to 0xffffffff if unsure. - * \param flags - \c [in] Flags with additional information. - * \param values - \c [out] The pointer to return values. - * - * \return 0 on success\n - * <0 - Negative POSIX error code - * -*/ -int amdgpu_read_mm_registers(amdgpu_device_handle dev, unsigned dword_offset, - unsigned count, uint32_t instance, uint32_t flags, - uint32_t *values); - -/** - * Flag to request VA address range in the 32bit address space -*/ -#define AMDGPU_VA_RANGE_32_BIT 0x1 -#define AMDGPU_VA_RANGE_HIGH 0x2 -#define AMDGPU_VA_RANGE_REPLAYABLE 0x4 - -/** - * Allocate virtual address range - * - * \param dev - [in] Device handle. See #amdgpu_device_initialize() - * \param va_range_type - \c [in] Type of MC va range from which to allocate - * \param size - \c [in] Size of range. Size must be correctly* aligned. - * It is client responsibility to correctly aligned size based on the future - * usage of allocated range. - * \param va_base_alignment - \c [in] Overwrite base address alignment - * requirement for GPU VM MC virtual - * address assignment. Must be multiple of size alignments received as - * 'amdgpu_buffer_size_alignments'. - * If 0 use the default one. - * \param va_base_required - \c [in] Specified required va base address. - * If 0 then library choose available one. - * If !0 value will be passed and those value already "in use" then - * corresponding error status will be returned. - * \param va_base_allocated - \c [out] On return: Allocated VA base to be used - * by client. - * \param va_range_handle - \c [out] On return: Handle assigned to allocation - * \param flags - \c [in] flags for special VA range - * - * \return 0 on success\n - * >0 - AMD specific error code\n - * <0 - Negative POSIX Error code - * - * \notes \n - * It is client responsibility to correctly handle VA assignments and usage. - * Neither kernel driver nor libdrm_amdpgu are able to prevent and - * detect wrong va assignment. - * - * It is client responsibility to correctly handle multi-GPU cases and to pass - * the corresponding arrays of all devices handles where corresponding VA will - * be used. - * -*/ -int amdgpu_va_range_alloc(amdgpu_device_handle dev, - enum amdgpu_gpu_va_range va_range_type, - uint64_t size, - uint64_t va_base_alignment, - uint64_t va_base_required, - uint64_t *va_base_allocated, - amdgpu_va_handle *va_range_handle, - uint64_t flags); - -/** - * Free previously allocated virtual address range - * - * - * \param va_range_handle - \c [in] Handle assigned to VA allocation - * - * \return 0 on success\n - * >0 - AMD specific error code\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_va_range_free(amdgpu_va_handle va_range_handle); - -/** -* Query virtual address range -* -* UMD can query GPU VM range supported by each device -* to initialize its own VAM accordingly. -* -* \param dev - [in] Device handle. See #amdgpu_device_initialize() -* \param type - \c [in] Type of virtual address range -* \param offset - \c [out] Start offset of virtual address range -* \param size - \c [out] Size of virtual address range -* -* \return 0 on success\n -* <0 - Negative POSIX Error code -* -*/ - -int amdgpu_va_range_query(amdgpu_device_handle dev, - enum amdgpu_gpu_va_range type, - uint64_t *start, - uint64_t *end); - -/** - * VA mapping/unmapping for the buffer object - * - * \param bo - \c [in] BO handle - * \param offset - \c [in] Start offset to map - * \param size - \c [in] Size to map - * \param addr - \c [in] Start virtual address. - * \param flags - \c [in] Supported flags for mapping/unmapping - * \param ops - \c [in] AMDGPU_VA_OP_MAP or AMDGPU_VA_OP_UNMAP - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ - -int amdgpu_bo_va_op(amdgpu_bo_handle bo, - uint64_t offset, - uint64_t size, - uint64_t addr, - uint64_t flags, - uint32_t ops); - -/** - * VA mapping/unmapping for a buffer object or PRT region. - * - * This is not a simple drop-in extension for amdgpu_bo_va_op; instead, all - * parameters are treated "raw", i.e. size is not automatically aligned, and - * all flags must be specified explicitly. - * - * \param dev - \c [in] device handle - * \param bo - \c [in] BO handle (may be NULL) - * \param offset - \c [in] Start offset to map - * \param size - \c [in] Size to map - * \param addr - \c [in] Start virtual address. - * \param flags - \c [in] Supported flags for mapping/unmapping - * \param ops - \c [in] AMDGPU_VA_OP_MAP or AMDGPU_VA_OP_UNMAP - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ - -int amdgpu_bo_va_op_raw(amdgpu_device_handle dev, - amdgpu_bo_handle bo, - uint64_t offset, - uint64_t size, - uint64_t addr, - uint64_t flags, - uint32_t ops); - -/** - * create semaphore - * - * \param sem - \c [out] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_create_semaphore(amdgpu_semaphore_handle *sem); - -/** - * signal semaphore - * - * \param context - \c [in] GPU Context - * \param ip_type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param ip_instance - \c [in] Index of the IP block of the same type - * \param ring - \c [in] Specify ring index of the IP - * \param sem - \c [in] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_signal_semaphore(amdgpu_context_handle ctx, - uint32_t ip_type, - uint32_t ip_instance, - uint32_t ring, - amdgpu_semaphore_handle sem); - -/** - * wait semaphore - * - * \param context - \c [in] GPU Context - * \param ip_type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param ip_instance - \c [in] Index of the IP block of the same type - * \param ring - \c [in] Specify ring index of the IP - * \param sem - \c [in] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_wait_semaphore(amdgpu_context_handle ctx, - uint32_t ip_type, - uint32_t ip_instance, - uint32_t ring, - amdgpu_semaphore_handle sem); - -/** - * destroy semaphore - * - * \param sem - \c [in] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_destroy_semaphore(amdgpu_semaphore_handle sem); - -/** - * Get the ASIC marketing name - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * - * \return the constant string of the marketing name - * "NULL" means the ASIC is not found -*/ -const char *amdgpu_get_marketing_name(amdgpu_device_handle dev); - -/** - * Create kernel sync object - * - * \param dev - \c [in] device handle - * \param flags - \c [in] flags that affect creation - * \param syncobj - \c [out] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_create_syncobj2(amdgpu_device_handle dev, - uint32_t flags, - uint32_t *syncobj); - -/** - * Create kernel sync object - * - * \param dev - \c [in] device handle - * \param syncobj - \c [out] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_create_syncobj(amdgpu_device_handle dev, - uint32_t *syncobj); -/** - * Destroy kernel sync object - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_destroy_syncobj(amdgpu_device_handle dev, - uint32_t syncobj); - -/** - * Reset kernel sync objects to unsignalled state. - * - * \param dev - \c [in] device handle - * \param syncobjs - \c [in] array of sync object handles - * \param syncobj_count - \c [in] number of handles in syncobjs - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_syncobj_reset(amdgpu_device_handle dev, - const uint32_t *syncobjs, uint32_t syncobj_count); - -/** - * Signal kernel sync objects. - * - * \param dev - \c [in] device handle - * \param syncobjs - \c [in] array of sync object handles - * \param syncobj_count - \c [in] number of handles in syncobjs - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_syncobj_signal(amdgpu_device_handle dev, - const uint32_t *syncobjs, uint32_t syncobj_count); - -/** - * Signal kernel timeline sync objects. - * - * \param dev - \c [in] device handle - * \param syncobjs - \c [in] array of sync object handles - * \param points - \c [in] array of timeline points - * \param syncobj_count - \c [in] number of handles in syncobjs - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_syncobj_timeline_signal(amdgpu_device_handle dev, - const uint32_t *syncobjs, - uint64_t *points, - uint32_t syncobj_count); - -/** - * Wait for one or all sync objects to signal. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param num_handles - \c [in] self-explanatory - * \param timeout_nsec - \c [in] self-explanatory - * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_WAIT_FLAGS_* - * \param first_signaled - \c [in] self-explanatory - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_wait(amdgpu_device_handle dev, - uint32_t *handles, unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); - -/** - * Wait for one or all sync objects on their points to signal. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param points - \c [in] array of sync points to wait - * \param num_handles - \c [in] self-explanatory - * \param timeout_nsec - \c [in] self-explanatory - * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_WAIT_FLAGS_* - * \param first_signaled - \c [in] self-explanatory - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_timeline_wait(amdgpu_device_handle dev, - uint32_t *handles, uint64_t *points, - unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); -/** - * Query sync objects payloads. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param points - \c [out] array of sync points returned, which presents - * syncobj payload. - * \param num_handles - \c [in] self-explanatory - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_query(amdgpu_device_handle dev, - uint32_t *handles, uint64_t *points, - unsigned num_handles); -/** - * Query sync objects last signaled or submitted point. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param points - \c [out] array of sync points returned, which presents - * syncobj payload. - * \param num_handles - \c [in] self-explanatory - * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_QUERY_FLAGS_* - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_query2(amdgpu_device_handle dev, - uint32_t *handles, uint64_t *points, - unsigned num_handles, uint32_t flags); - -/** - * Export kernel sync object to shareable fd. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param shared_fd - \c [out] shared file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_export_syncobj(amdgpu_device_handle dev, - uint32_t syncobj, - int *shared_fd); -/** - * Import kernel sync object from shareable fd. - * - * \param dev - \c [in] device handle - * \param shared_fd - \c [in] shared file descriptor. - * \param syncobj - \c [out] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_import_syncobj(amdgpu_device_handle dev, - int shared_fd, - uint32_t *syncobj); - -/** - * Export kernel sync object to a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param sync_file_fd - \c [out] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_export_sync_file(amdgpu_device_handle dev, - uint32_t syncobj, - int *sync_file_fd); - -/** - * Import kernel sync object from a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param sync_file_fd - \c [in] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_import_sync_file(amdgpu_device_handle dev, - uint32_t syncobj, - int sync_file_fd); -/** - * Export kernel timeline sync object to a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param point - \c [in] timeline point - * \param flags - \c [in] flags - * \param sync_file_fd - \c [out] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_export_sync_file2(amdgpu_device_handle dev, - uint32_t syncobj, - uint64_t point, - uint32_t flags, - int *sync_file_fd); - -/** - * Import kernel timeline sync object from a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param point - \c [in] timeline point - * \param sync_file_fd - \c [in] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_import_sync_file2(amdgpu_device_handle dev, - uint32_t syncobj, - uint64_t point, - int sync_file_fd); - -/** - * transfer between syncbojs. - * - * \param dev - \c [in] device handle - * \param dst_handle - \c [in] sync object handle - * \param dst_point - \c [in] timeline point, 0 presents dst is binary - * \param src_handle - \c [in] sync object handle - * \param src_point - \c [in] timeline point, 0 presents src is binary - * \param flags - \c [in] flags - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_transfer(amdgpu_device_handle dev, - uint32_t dst_handle, - uint64_t dst_point, - uint32_t src_handle, - uint64_t src_point, - uint32_t flags); - -/** - * Export an amdgpu fence as a handle (syncobj or fd). - * - * \param what AMDGPU_FENCE_TO_HANDLE_GET_{SYNCOBJ, FD} - * \param out_handle returned handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - */ -int amdgpu_cs_fence_to_handle(amdgpu_device_handle dev, - struct amdgpu_cs_fence *fence, - uint32_t what, - uint32_t *out_handle); - -/** - * Submit raw command submission to kernel - * - * \param dev - \c [in] device handle - * \param context - \c [in] context handle for context id - * \param bo_list_handle - \c [in] request bo list handle (0 for none) - * \param num_chunks - \c [in] number of CS chunks to submit - * \param chunks - \c [in] array of CS chunks - * \param seq_no - \c [out] output sequence number for submission. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -struct drm_amdgpu_cs_chunk; -struct drm_amdgpu_cs_chunk_dep; -struct drm_amdgpu_cs_chunk_data; - -int amdgpu_cs_submit_raw(amdgpu_device_handle dev, - amdgpu_context_handle context, - amdgpu_bo_list_handle bo_list_handle, - int num_chunks, - struct drm_amdgpu_cs_chunk *chunks, - uint64_t *seq_no); - -/** - * Submit raw command submission to the kernel with a raw BO list handle. - * - * \param dev - \c [in] device handle - * \param context - \c [in] context handle for context id - * \param bo_list_handle - \c [in] raw bo list handle (0 for none) - * \param num_chunks - \c [in] number of CS chunks to submit - * \param chunks - \c [in] array of CS chunks - * \param seq_no - \c [out] output sequence number for submission. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_create_raw(), amdgpu_bo_list_destroy_raw() - */ -int amdgpu_cs_submit_raw2(amdgpu_device_handle dev, - amdgpu_context_handle context, - uint32_t bo_list_handle, - int num_chunks, - struct drm_amdgpu_cs_chunk *chunks, - uint64_t *seq_no); - -void amdgpu_cs_chunk_fence_to_dep(struct amdgpu_cs_fence *fence, - struct drm_amdgpu_cs_chunk_dep *dep); -void amdgpu_cs_chunk_fence_info_to_data(struct amdgpu_cs_fence_info *fence_info, - struct drm_amdgpu_cs_chunk_data *data); - -/** - * Reserve VMID - * \param context - \c [in] GPU Context - * \param flags - \c [in] TBD - * - * \return 0 on success otherwise POSIX Error code -*/ -int amdgpu_vm_reserve_vmid(amdgpu_device_handle dev, uint32_t flags); - -/** - * Free reserved VMID - * \param context - \c [in] GPU Context - * \param flags - \c [in] TBD - * - * \return 0 on success otherwise POSIX Error code -*/ -int amdgpu_vm_unreserve_vmid(amdgpu_device_handle dev, uint32_t flags); - -#ifdef __cplusplus -} -#endif -#endif /* #ifdef _AMDGPU_H_ */ diff --git a/prebuilts/aarch64/include/libdrm/amdgpu_drm.h b/prebuilts/aarch64/include/libdrm/amdgpu_drm.h deleted file mode 100644 index 7f01f98..0000000 --- a/prebuilts/aarch64/include/libdrm/amdgpu_drm.h +++ /dev/null @@ -1,1157 +0,0 @@ -/* amdgpu_drm.h -- Public header for the amdgpu driver -*- linux-c -*- - * - * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Fremont, California. - * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. - * Copyright 2014 Advanced Micro Devices, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Kevin E. Martin - * Gareth Hughes - * Keith Whitwell - */ - -#ifndef __AMDGPU_DRM_H__ -#define __AMDGPU_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_AMDGPU_GEM_CREATE 0x00 -#define DRM_AMDGPU_GEM_MMAP 0x01 -#define DRM_AMDGPU_CTX 0x02 -#define DRM_AMDGPU_BO_LIST 0x03 -#define DRM_AMDGPU_CS 0x04 -#define DRM_AMDGPU_INFO 0x05 -#define DRM_AMDGPU_GEM_METADATA 0x06 -#define DRM_AMDGPU_GEM_WAIT_IDLE 0x07 -#define DRM_AMDGPU_GEM_VA 0x08 -#define DRM_AMDGPU_WAIT_CS 0x09 -#define DRM_AMDGPU_GEM_OP 0x10 -#define DRM_AMDGPU_GEM_USERPTR 0x11 -#define DRM_AMDGPU_WAIT_FENCES 0x12 -#define DRM_AMDGPU_VM 0x13 -#define DRM_AMDGPU_FENCE_TO_HANDLE 0x14 -#define DRM_AMDGPU_SCHED 0x15 - -#define DRM_IOCTL_AMDGPU_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_CREATE, union drm_amdgpu_gem_create) -#define DRM_IOCTL_AMDGPU_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_MMAP, union drm_amdgpu_gem_mmap) -#define DRM_IOCTL_AMDGPU_CTX DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_CTX, union drm_amdgpu_ctx) -#define DRM_IOCTL_AMDGPU_BO_LIST DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_BO_LIST, union drm_amdgpu_bo_list) -#define DRM_IOCTL_AMDGPU_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_CS, union drm_amdgpu_cs) -#define DRM_IOCTL_AMDGPU_INFO DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_INFO, struct drm_amdgpu_info) -#define DRM_IOCTL_AMDGPU_GEM_METADATA DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_METADATA, struct drm_amdgpu_gem_metadata) -#define DRM_IOCTL_AMDGPU_GEM_WAIT_IDLE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_WAIT_IDLE, union drm_amdgpu_gem_wait_idle) -#define DRM_IOCTL_AMDGPU_GEM_VA DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_VA, struct drm_amdgpu_gem_va) -#define DRM_IOCTL_AMDGPU_WAIT_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_WAIT_CS, union drm_amdgpu_wait_cs) -#define DRM_IOCTL_AMDGPU_GEM_OP DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_OP, struct drm_amdgpu_gem_op) -#define DRM_IOCTL_AMDGPU_GEM_USERPTR DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_USERPTR, struct drm_amdgpu_gem_userptr) -#define DRM_IOCTL_AMDGPU_WAIT_FENCES DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_WAIT_FENCES, union drm_amdgpu_wait_fences) -#define DRM_IOCTL_AMDGPU_VM DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_VM, union drm_amdgpu_vm) -#define DRM_IOCTL_AMDGPU_FENCE_TO_HANDLE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_FENCE_TO_HANDLE, union drm_amdgpu_fence_to_handle) -#define DRM_IOCTL_AMDGPU_SCHED DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_SCHED, union drm_amdgpu_sched) - -/** - * DOC: memory domains - * - * %AMDGPU_GEM_DOMAIN_CPU System memory that is not GPU accessible. - * Memory in this pool could be swapped out to disk if there is pressure. - * - * %AMDGPU_GEM_DOMAIN_GTT GPU accessible system memory, mapped into the - * GPU's virtual address space via gart. Gart memory linearizes non-contiguous - * pages of system memory, allows GPU access system memory in a linearized - * fashion. - * - * %AMDGPU_GEM_DOMAIN_VRAM Local video memory. For APUs, it is memory - * carved out by the BIOS. - * - * %AMDGPU_GEM_DOMAIN_GDS Global on-chip data storage used to share data - * across shader threads. - * - * %AMDGPU_GEM_DOMAIN_GWS Global wave sync, used to synchronize the - * execution of all the waves on a device. - * - * %AMDGPU_GEM_DOMAIN_OA Ordered append, used by 3D or Compute engines - * for appending data. - */ -#define AMDGPU_GEM_DOMAIN_CPU 0x1 -#define AMDGPU_GEM_DOMAIN_GTT 0x2 -#define AMDGPU_GEM_DOMAIN_VRAM 0x4 -#define AMDGPU_GEM_DOMAIN_GDS 0x8 -#define AMDGPU_GEM_DOMAIN_GWS 0x10 -#define AMDGPU_GEM_DOMAIN_OA 0x20 -#define AMDGPU_GEM_DOMAIN_MASK (AMDGPU_GEM_DOMAIN_CPU | \ - AMDGPU_GEM_DOMAIN_GTT | \ - AMDGPU_GEM_DOMAIN_VRAM | \ - AMDGPU_GEM_DOMAIN_GDS | \ - AMDGPU_GEM_DOMAIN_GWS | \ - AMDGPU_GEM_DOMAIN_OA) - -/* Flag that CPU access will be required for the case of VRAM domain */ -#define AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED (1 << 0) -/* Flag that CPU access will not work, this VRAM domain is invisible */ -#define AMDGPU_GEM_CREATE_NO_CPU_ACCESS (1 << 1) -/* Flag that USWC attributes should be used for GTT */ -#define AMDGPU_GEM_CREATE_CPU_GTT_USWC (1 << 2) -/* Flag that the memory should be in VRAM and cleared */ -#define AMDGPU_GEM_CREATE_VRAM_CLEARED (1 << 3) -/* Flag that allocating the BO should use linear VRAM */ -#define AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS (1 << 5) -/* Flag that BO is always valid in this VM */ -#define AMDGPU_GEM_CREATE_VM_ALWAYS_VALID (1 << 6) -/* Flag that BO sharing will be explicitly synchronized */ -#define AMDGPU_GEM_CREATE_EXPLICIT_SYNC (1 << 7) -/* Flag that indicates allocating MQD gart on GFX9, where the mtype - * for the second page onward should be set to NC. It should never - * be used by user space applications. - */ -#define AMDGPU_GEM_CREATE_CP_MQD_GFX9 (1 << 8) -/* Flag that BO may contain sensitive data that must be wiped before - * releasing the memory - */ -#define AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE (1 << 9) -/* Flag that BO will be encrypted and that the TMZ bit should be - * set in the PTEs when mapping this buffer via GPUVM or - * accessing it with various hw blocks - */ -#define AMDGPU_GEM_CREATE_ENCRYPTED (1 << 10) -/* Flag that BO will be used only in preemptible context, which does - * not require GTT memory accounting - */ -#define AMDGPU_GEM_CREATE_PREEMPTIBLE (1 << 11) - -struct drm_amdgpu_gem_create_in { - /** the requested memory size */ - __u64 bo_size; - /** physical start_addr alignment in bytes for some HW requirements */ - __u64 alignment; - /** the requested memory domains */ - __u64 domains; - /** allocation flags */ - __u64 domain_flags; -}; - -struct drm_amdgpu_gem_create_out { - /** returned GEM object handle */ - __u32 handle; - __u32 _pad; -}; - -union drm_amdgpu_gem_create { - struct drm_amdgpu_gem_create_in in; - struct drm_amdgpu_gem_create_out out; -}; - -/** Opcode to create new residency list. */ -#define AMDGPU_BO_LIST_OP_CREATE 0 -/** Opcode to destroy previously created residency list */ -#define AMDGPU_BO_LIST_OP_DESTROY 1 -/** Opcode to update resource information in the list */ -#define AMDGPU_BO_LIST_OP_UPDATE 2 - -struct drm_amdgpu_bo_list_in { - /** Type of operation */ - __u32 operation; - /** Handle of list or 0 if we want to create one */ - __u32 list_handle; - /** Number of BOs in list */ - __u32 bo_number; - /** Size of each element describing BO */ - __u32 bo_info_size; - /** Pointer to array describing BOs */ - __u64 bo_info_ptr; -}; - -struct drm_amdgpu_bo_list_entry { - /** Handle of BO */ - __u32 bo_handle; - /** New (if specified) BO priority to be used during migration */ - __u32 bo_priority; -}; - -struct drm_amdgpu_bo_list_out { - /** Handle of resource list */ - __u32 list_handle; - __u32 _pad; -}; - -union drm_amdgpu_bo_list { - struct drm_amdgpu_bo_list_in in; - struct drm_amdgpu_bo_list_out out; -}; - -/* context related */ -#define AMDGPU_CTX_OP_ALLOC_CTX 1 -#define AMDGPU_CTX_OP_FREE_CTX 2 -#define AMDGPU_CTX_OP_QUERY_STATE 3 -#define AMDGPU_CTX_OP_QUERY_STATE2 4 -#define AMDGPU_CTX_OP_GET_STABLE_PSTATE 5 -#define AMDGPU_CTX_OP_SET_STABLE_PSTATE 6 - -/* GPU reset status */ -#define AMDGPU_CTX_NO_RESET 0 -/* this the context caused it */ -#define AMDGPU_CTX_GUILTY_RESET 1 -/* some other context caused it */ -#define AMDGPU_CTX_INNOCENT_RESET 2 -/* unknown cause */ -#define AMDGPU_CTX_UNKNOWN_RESET 3 - -/* indicate gpu reset occured after ctx created */ -#define AMDGPU_CTX_QUERY2_FLAGS_RESET (1<<0) -/* indicate vram lost occured after ctx created */ -#define AMDGPU_CTX_QUERY2_FLAGS_VRAMLOST (1<<1) -/* indicate some job from this context once cause gpu hang */ -#define AMDGPU_CTX_QUERY2_FLAGS_GUILTY (1<<2) -/* indicate some errors are detected by RAS */ -#define AMDGPU_CTX_QUERY2_FLAGS_RAS_CE (1<<3) -#define AMDGPU_CTX_QUERY2_FLAGS_RAS_UE (1<<4) - -/* Context priority level */ -#define AMDGPU_CTX_PRIORITY_UNSET -2048 -#define AMDGPU_CTX_PRIORITY_VERY_LOW -1023 -#define AMDGPU_CTX_PRIORITY_LOW -512 -#define AMDGPU_CTX_PRIORITY_NORMAL 0 -/* - * When used in struct drm_amdgpu_ctx_in, a priority above NORMAL requires - * CAP_SYS_NICE or DRM_MASTER -*/ -#define AMDGPU_CTX_PRIORITY_HIGH 512 -#define AMDGPU_CTX_PRIORITY_VERY_HIGH 1023 - -/* select a stable profiling pstate for perfmon tools */ -#define AMDGPU_CTX_STABLE_PSTATE_FLAGS_MASK 0xf -#define AMDGPU_CTX_STABLE_PSTATE_NONE 0 -#define AMDGPU_CTX_STABLE_PSTATE_STANDARD 1 -#define AMDGPU_CTX_STABLE_PSTATE_MIN_SCLK 2 -#define AMDGPU_CTX_STABLE_PSTATE_MIN_MCLK 3 -#define AMDGPU_CTX_STABLE_PSTATE_PEAK 4 - -struct drm_amdgpu_ctx_in { - /** AMDGPU_CTX_OP_* */ - __u32 op; - /** Flags */ - __u32 flags; - __u32 ctx_id; - /** AMDGPU_CTX_PRIORITY_* */ - __s32 priority; -}; - -union drm_amdgpu_ctx_out { - struct { - __u32 ctx_id; - __u32 _pad; - } alloc; - - struct { - /** For future use, no flags defined so far */ - __u64 flags; - /** Number of resets caused by this context so far. */ - __u32 hangs; - /** Reset status since the last call of the ioctl. */ - __u32 reset_status; - } state; - - struct { - __u32 flags; - __u32 _pad; - } pstate; -}; - -union drm_amdgpu_ctx { - struct drm_amdgpu_ctx_in in; - union drm_amdgpu_ctx_out out; -}; - -/* vm ioctl */ -#define AMDGPU_VM_OP_RESERVE_VMID 1 -#define AMDGPU_VM_OP_UNRESERVE_VMID 2 - -struct drm_amdgpu_vm_in { - /** AMDGPU_VM_OP_* */ - __u32 op; - __u32 flags; -}; - -struct drm_amdgpu_vm_out { - /** For future use, no flags defined so far */ - __u64 flags; -}; - -union drm_amdgpu_vm { - struct drm_amdgpu_vm_in in; - struct drm_amdgpu_vm_out out; -}; - -/* sched ioctl */ -#define AMDGPU_SCHED_OP_PROCESS_PRIORITY_OVERRIDE 1 -#define AMDGPU_SCHED_OP_CONTEXT_PRIORITY_OVERRIDE 2 - -struct drm_amdgpu_sched_in { - /* AMDGPU_SCHED_OP_* */ - __u32 op; - __u32 fd; - /** AMDGPU_CTX_PRIORITY_* */ - __s32 priority; - __u32 ctx_id; -}; - -union drm_amdgpu_sched { - struct drm_amdgpu_sched_in in; -}; - -/* - * This is not a reliable API and you should expect it to fail for any - * number of reasons and have fallback path that do not use userptr to - * perform any operation. - */ -#define AMDGPU_GEM_USERPTR_READONLY (1 << 0) -#define AMDGPU_GEM_USERPTR_ANONONLY (1 << 1) -#define AMDGPU_GEM_USERPTR_VALIDATE (1 << 2) -#define AMDGPU_GEM_USERPTR_REGISTER (1 << 3) - -struct drm_amdgpu_gem_userptr { - __u64 addr; - __u64 size; - /* AMDGPU_GEM_USERPTR_* */ - __u32 flags; - /* Resulting GEM handle */ - __u32 handle; -}; - -/* SI-CI-VI: */ -/* same meaning as the GB_TILE_MODE and GL_MACRO_TILE_MODE fields */ -#define AMDGPU_TILING_ARRAY_MODE_SHIFT 0 -#define AMDGPU_TILING_ARRAY_MODE_MASK 0xf -#define AMDGPU_TILING_PIPE_CONFIG_SHIFT 4 -#define AMDGPU_TILING_PIPE_CONFIG_MASK 0x1f -#define AMDGPU_TILING_TILE_SPLIT_SHIFT 9 -#define AMDGPU_TILING_TILE_SPLIT_MASK 0x7 -#define AMDGPU_TILING_MICRO_TILE_MODE_SHIFT 12 -#define AMDGPU_TILING_MICRO_TILE_MODE_MASK 0x7 -#define AMDGPU_TILING_BANK_WIDTH_SHIFT 15 -#define AMDGPU_TILING_BANK_WIDTH_MASK 0x3 -#define AMDGPU_TILING_BANK_HEIGHT_SHIFT 17 -#define AMDGPU_TILING_BANK_HEIGHT_MASK 0x3 -#define AMDGPU_TILING_MACRO_TILE_ASPECT_SHIFT 19 -#define AMDGPU_TILING_MACRO_TILE_ASPECT_MASK 0x3 -#define AMDGPU_TILING_NUM_BANKS_SHIFT 21 -#define AMDGPU_TILING_NUM_BANKS_MASK 0x3 - -/* GFX9 and later: */ -#define AMDGPU_TILING_SWIZZLE_MODE_SHIFT 0 -#define AMDGPU_TILING_SWIZZLE_MODE_MASK 0x1f -#define AMDGPU_TILING_DCC_OFFSET_256B_SHIFT 5 -#define AMDGPU_TILING_DCC_OFFSET_256B_MASK 0xFFFFFF -#define AMDGPU_TILING_DCC_PITCH_MAX_SHIFT 29 -#define AMDGPU_TILING_DCC_PITCH_MAX_MASK 0x3FFF -#define AMDGPU_TILING_DCC_INDEPENDENT_64B_SHIFT 43 -#define AMDGPU_TILING_DCC_INDEPENDENT_64B_MASK 0x1 -#define AMDGPU_TILING_DCC_INDEPENDENT_128B_SHIFT 44 -#define AMDGPU_TILING_DCC_INDEPENDENT_128B_MASK 0x1 -#define AMDGPU_TILING_SCANOUT_SHIFT 63 -#define AMDGPU_TILING_SCANOUT_MASK 0x1 - -/* Set/Get helpers for tiling flags. */ -#define AMDGPU_TILING_SET(field, value) \ - (((__u64)(value) & AMDGPU_TILING_##field##_MASK) << AMDGPU_TILING_##field##_SHIFT) -#define AMDGPU_TILING_GET(value, field) \ - (((__u64)(value) >> AMDGPU_TILING_##field##_SHIFT) & AMDGPU_TILING_##field##_MASK) - -#define AMDGPU_GEM_METADATA_OP_SET_METADATA 1 -#define AMDGPU_GEM_METADATA_OP_GET_METADATA 2 - -/** The same structure is shared for input/output */ -struct drm_amdgpu_gem_metadata { - /** GEM Object handle */ - __u32 handle; - /** Do we want get or set metadata */ - __u32 op; - struct { - /** For future use, no flags defined so far */ - __u64 flags; - /** family specific tiling info */ - __u64 tiling_info; - __u32 data_size_bytes; - __u32 data[64]; - } data; -}; - -struct drm_amdgpu_gem_mmap_in { - /** the GEM object handle */ - __u32 handle; - __u32 _pad; -}; - -struct drm_amdgpu_gem_mmap_out { - /** mmap offset from the vma offset manager */ - __u64 addr_ptr; -}; - -union drm_amdgpu_gem_mmap { - struct drm_amdgpu_gem_mmap_in in; - struct drm_amdgpu_gem_mmap_out out; -}; - -struct drm_amdgpu_gem_wait_idle_in { - /** GEM object handle */ - __u32 handle; - /** For future use, no flags defined so far */ - __u32 flags; - /** Absolute timeout to wait */ - __u64 timeout; -}; - -struct drm_amdgpu_gem_wait_idle_out { - /** BO status: 0 - BO is idle, 1 - BO is busy */ - __u32 status; - /** Returned current memory domain */ - __u32 domain; -}; - -union drm_amdgpu_gem_wait_idle { - struct drm_amdgpu_gem_wait_idle_in in; - struct drm_amdgpu_gem_wait_idle_out out; -}; - -struct drm_amdgpu_wait_cs_in { - /* Command submission handle - * handle equals 0 means none to wait for - * handle equals ~0ull means wait for the latest sequence number - */ - __u64 handle; - /** Absolute timeout to wait */ - __u64 timeout; - __u32 ip_type; - __u32 ip_instance; - __u32 ring; - __u32 ctx_id; -}; - -struct drm_amdgpu_wait_cs_out { - /** CS status: 0 - CS completed, 1 - CS still busy */ - __u64 status; -}; - -union drm_amdgpu_wait_cs { - struct drm_amdgpu_wait_cs_in in; - struct drm_amdgpu_wait_cs_out out; -}; - -struct drm_amdgpu_fence { - __u32 ctx_id; - __u32 ip_type; - __u32 ip_instance; - __u32 ring; - __u64 seq_no; -}; - -struct drm_amdgpu_wait_fences_in { - /** This points to uint64_t * which points to fences */ - __u64 fences; - __u32 fence_count; - __u32 wait_all; - __u64 timeout_ns; -}; - -struct drm_amdgpu_wait_fences_out { - __u32 status; - __u32 first_signaled; -}; - -union drm_amdgpu_wait_fences { - struct drm_amdgpu_wait_fences_in in; - struct drm_amdgpu_wait_fences_out out; -}; - -#define AMDGPU_GEM_OP_GET_GEM_CREATE_INFO 0 -#define AMDGPU_GEM_OP_SET_PLACEMENT 1 - -/* Sets or returns a value associated with a buffer. */ -struct drm_amdgpu_gem_op { - /** GEM object handle */ - __u32 handle; - /** AMDGPU_GEM_OP_* */ - __u32 op; - /** Input or return value */ - __u64 value; -}; - -#define AMDGPU_VA_OP_MAP 1 -#define AMDGPU_VA_OP_UNMAP 2 -#define AMDGPU_VA_OP_CLEAR 3 -#define AMDGPU_VA_OP_REPLACE 4 - -/* Delay the page table update till the next CS */ -#define AMDGPU_VM_DELAY_UPDATE (1 << 0) - -/* Mapping flags */ -/* readable mapping */ -#define AMDGPU_VM_PAGE_READABLE (1 << 1) -/* writable mapping */ -#define AMDGPU_VM_PAGE_WRITEABLE (1 << 2) -/* executable mapping, new for VI */ -#define AMDGPU_VM_PAGE_EXECUTABLE (1 << 3) -/* partially resident texture */ -#define AMDGPU_VM_PAGE_PRT (1 << 4) -/* MTYPE flags use bit 5 to 8 */ -#define AMDGPU_VM_MTYPE_MASK (0xf << 5) -/* Default MTYPE. Pre-AI must use this. Recommended for newer ASICs. */ -#define AMDGPU_VM_MTYPE_DEFAULT (0 << 5) -/* Use Non Coherent MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_NC (1 << 5) -/* Use Write Combine MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_WC (2 << 5) -/* Use Cache Coherent MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_CC (3 << 5) -/* Use UnCached MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_UC (4 << 5) -/* Use Read Write MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_RW (5 << 5) - -struct drm_amdgpu_gem_va { - /** GEM object handle */ - __u32 handle; - __u32 _pad; - /** AMDGPU_VA_OP_* */ - __u32 operation; - /** AMDGPU_VM_PAGE_* */ - __u32 flags; - /** va address to assign . Must be correctly aligned.*/ - __u64 va_address; - /** Specify offset inside of BO to assign. Must be correctly aligned.*/ - __u64 offset_in_bo; - /** Specify mapping size. Must be correctly aligned. */ - __u64 map_size; -}; - -#define AMDGPU_HW_IP_GFX 0 -#define AMDGPU_HW_IP_COMPUTE 1 -#define AMDGPU_HW_IP_DMA 2 -#define AMDGPU_HW_IP_UVD 3 -#define AMDGPU_HW_IP_VCE 4 -#define AMDGPU_HW_IP_UVD_ENC 5 -#define AMDGPU_HW_IP_VCN_DEC 6 -#define AMDGPU_HW_IP_VCN_ENC 7 -#define AMDGPU_HW_IP_VCN_JPEG 8 -#define AMDGPU_HW_IP_NUM 9 - -#define AMDGPU_HW_IP_INSTANCE_MAX_COUNT 1 - -#define AMDGPU_CHUNK_ID_IB 0x01 -#define AMDGPU_CHUNK_ID_FENCE 0x02 -#define AMDGPU_CHUNK_ID_DEPENDENCIES 0x03 -#define AMDGPU_CHUNK_ID_SYNCOBJ_IN 0x04 -#define AMDGPU_CHUNK_ID_SYNCOBJ_OUT 0x05 -#define AMDGPU_CHUNK_ID_BO_HANDLES 0x06 -#define AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES 0x07 -#define AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_WAIT 0x08 -#define AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_SIGNAL 0x09 - -struct drm_amdgpu_cs_chunk { - __u32 chunk_id; - __u32 length_dw; - __u64 chunk_data; -}; - -struct drm_amdgpu_cs_in { - /** Rendering context id */ - __u32 ctx_id; - /** Handle of resource list associated with CS */ - __u32 bo_list_handle; - __u32 num_chunks; - __u32 flags; - /** this points to __u64 * which point to cs chunks */ - __u64 chunks; -}; - -struct drm_amdgpu_cs_out { - __u64 handle; -}; - -union drm_amdgpu_cs { - struct drm_amdgpu_cs_in in; - struct drm_amdgpu_cs_out out; -}; - -/* Specify flags to be used for IB */ - -/* This IB should be submitted to CE */ -#define AMDGPU_IB_FLAG_CE (1<<0) - -/* Preamble flag, which means the IB could be dropped if no context switch */ -#define AMDGPU_IB_FLAG_PREAMBLE (1<<1) - -/* Preempt flag, IB should set Pre_enb bit if PREEMPT flag detected */ -#define AMDGPU_IB_FLAG_PREEMPT (1<<2) - -/* The IB fence should do the L2 writeback but not invalidate any shader - * caches (L2/vL1/sL1/I$). */ -#define AMDGPU_IB_FLAG_TC_WB_NOT_INVALIDATE (1 << 3) - -/* Set GDS_COMPUTE_MAX_WAVE_ID = DEFAULT before PACKET3_INDIRECT_BUFFER. - * This will reset wave ID counters for the IB. - */ -#define AMDGPU_IB_FLAG_RESET_GDS_MAX_WAVE_ID (1 << 4) - -/* Flag the IB as secure (TMZ) - */ -#define AMDGPU_IB_FLAGS_SECURE (1 << 5) - -/* Tell KMD to flush and invalidate caches - */ -#define AMDGPU_IB_FLAG_EMIT_MEM_SYNC (1 << 6) - -struct drm_amdgpu_cs_chunk_ib { - __u32 _pad; - /** AMDGPU_IB_FLAG_* */ - __u32 flags; - /** Virtual address to begin IB execution */ - __u64 va_start; - /** Size of submission */ - __u32 ib_bytes; - /** HW IP to submit to */ - __u32 ip_type; - /** HW IP index of the same type to submit to */ - __u32 ip_instance; - /** Ring index to submit to */ - __u32 ring; -}; - -struct drm_amdgpu_cs_chunk_dep { - __u32 ip_type; - __u32 ip_instance; - __u32 ring; - __u32 ctx_id; - __u64 handle; -}; - -struct drm_amdgpu_cs_chunk_fence { - __u32 handle; - __u32 offset; -}; - -struct drm_amdgpu_cs_chunk_sem { - __u32 handle; -}; - -struct drm_amdgpu_cs_chunk_syncobj { - __u32 handle; - __u32 flags; - __u64 point; -}; - -#define AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ 0 -#define AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ_FD 1 -#define AMDGPU_FENCE_TO_HANDLE_GET_SYNC_FILE_FD 2 - -union drm_amdgpu_fence_to_handle { - struct { - struct drm_amdgpu_fence fence; - __u32 what; - __u32 pad; - } in; - struct { - __u32 handle; - } out; -}; - -struct drm_amdgpu_cs_chunk_data { - union { - struct drm_amdgpu_cs_chunk_ib ib_data; - struct drm_amdgpu_cs_chunk_fence fence_data; - }; -}; - -/* - * Query h/w info: Flag that this is integrated (a.h.a. fusion) GPU - * - */ -#define AMDGPU_IDS_FLAGS_FUSION 0x1 -#define AMDGPU_IDS_FLAGS_PREEMPTION 0x2 -#define AMDGPU_IDS_FLAGS_TMZ 0x4 - -/* indicate if acceleration can be working */ -#define AMDGPU_INFO_ACCEL_WORKING 0x00 -/* get the crtc_id from the mode object id? */ -#define AMDGPU_INFO_CRTC_FROM_ID 0x01 -/* query hw IP info */ -#define AMDGPU_INFO_HW_IP_INFO 0x02 -/* query hw IP instance count for the specified type */ -#define AMDGPU_INFO_HW_IP_COUNT 0x03 -/* timestamp for GL_ARB_timer_query */ -#define AMDGPU_INFO_TIMESTAMP 0x05 -/* Query the firmware version */ -#define AMDGPU_INFO_FW_VERSION 0x0e - /* Subquery id: Query VCE firmware version */ - #define AMDGPU_INFO_FW_VCE 0x1 - /* Subquery id: Query UVD firmware version */ - #define AMDGPU_INFO_FW_UVD 0x2 - /* Subquery id: Query GMC firmware version */ - #define AMDGPU_INFO_FW_GMC 0x03 - /* Subquery id: Query GFX ME firmware version */ - #define AMDGPU_INFO_FW_GFX_ME 0x04 - /* Subquery id: Query GFX PFP firmware version */ - #define AMDGPU_INFO_FW_GFX_PFP 0x05 - /* Subquery id: Query GFX CE firmware version */ - #define AMDGPU_INFO_FW_GFX_CE 0x06 - /* Subquery id: Query GFX RLC firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC 0x07 - /* Subquery id: Query GFX MEC firmware version */ - #define AMDGPU_INFO_FW_GFX_MEC 0x08 - /* Subquery id: Query SMC firmware version */ - #define AMDGPU_INFO_FW_SMC 0x0a - /* Subquery id: Query SDMA firmware version */ - #define AMDGPU_INFO_FW_SDMA 0x0b - /* Subquery id: Query PSP SOS firmware version */ - #define AMDGPU_INFO_FW_SOS 0x0c - /* Subquery id: Query PSP ASD firmware version */ - #define AMDGPU_INFO_FW_ASD 0x0d - /* Subquery id: Query VCN firmware version */ - #define AMDGPU_INFO_FW_VCN 0x0e - /* Subquery id: Query GFX RLC SRLC firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_CNTL 0x0f - /* Subquery id: Query GFX RLC SRLG firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_GPM_MEM 0x10 - /* Subquery id: Query GFX RLC SRLS firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_SRM_MEM 0x11 - /* Subquery id: Query DMCU firmware version */ - #define AMDGPU_INFO_FW_DMCU 0x12 - #define AMDGPU_INFO_FW_TA 0x13 - /* Subquery id: Query DMCUB firmware version */ - #define AMDGPU_INFO_FW_DMCUB 0x14 - /* Subquery id: Query TOC firmware version */ - #define AMDGPU_INFO_FW_TOC 0x15 - -/* number of bytes moved for TTM migration */ -#define AMDGPU_INFO_NUM_BYTES_MOVED 0x0f -/* the used VRAM size */ -#define AMDGPU_INFO_VRAM_USAGE 0x10 -/* the used GTT size */ -#define AMDGPU_INFO_GTT_USAGE 0x11 -/* Information about GDS, etc. resource configuration */ -#define AMDGPU_INFO_GDS_CONFIG 0x13 -/* Query information about VRAM and GTT domains */ -#define AMDGPU_INFO_VRAM_GTT 0x14 -/* Query information about register in MMR address space*/ -#define AMDGPU_INFO_READ_MMR_REG 0x15 -/* Query information about device: rev id, family, etc. */ -#define AMDGPU_INFO_DEV_INFO 0x16 -/* visible vram usage */ -#define AMDGPU_INFO_VIS_VRAM_USAGE 0x17 -/* number of TTM buffer evictions */ -#define AMDGPU_INFO_NUM_EVICTIONS 0x18 -/* Query memory about VRAM and GTT domains */ -#define AMDGPU_INFO_MEMORY 0x19 -/* Query vce clock table */ -#define AMDGPU_INFO_VCE_CLOCK_TABLE 0x1A -/* Query vbios related information */ -#define AMDGPU_INFO_VBIOS 0x1B - /* Subquery id: Query vbios size */ - #define AMDGPU_INFO_VBIOS_SIZE 0x1 - /* Subquery id: Query vbios image */ - #define AMDGPU_INFO_VBIOS_IMAGE 0x2 - /* Subquery id: Query vbios info */ - #define AMDGPU_INFO_VBIOS_INFO 0x3 -/* Query UVD handles */ -#define AMDGPU_INFO_NUM_HANDLES 0x1C -/* Query sensor related information */ -#define AMDGPU_INFO_SENSOR 0x1D - /* Subquery id: Query GPU shader clock */ - #define AMDGPU_INFO_SENSOR_GFX_SCLK 0x1 - /* Subquery id: Query GPU memory clock */ - #define AMDGPU_INFO_SENSOR_GFX_MCLK 0x2 - /* Subquery id: Query GPU temperature */ - #define AMDGPU_INFO_SENSOR_GPU_TEMP 0x3 - /* Subquery id: Query GPU load */ - #define AMDGPU_INFO_SENSOR_GPU_LOAD 0x4 - /* Subquery id: Query average GPU power */ - #define AMDGPU_INFO_SENSOR_GPU_AVG_POWER 0x5 - /* Subquery id: Query northbridge voltage */ - #define AMDGPU_INFO_SENSOR_VDDNB 0x6 - /* Subquery id: Query graphics voltage */ - #define AMDGPU_INFO_SENSOR_VDDGFX 0x7 - /* Subquery id: Query GPU stable pstate shader clock */ - #define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_SCLK 0x8 - /* Subquery id: Query GPU stable pstate memory clock */ - #define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_MCLK 0x9 -/* Number of VRAM page faults on CPU access. */ -#define AMDGPU_INFO_NUM_VRAM_CPU_PAGE_FAULTS 0x1E -#define AMDGPU_INFO_VRAM_LOST_COUNTER 0x1F -/* query ras mask of enabled features*/ -#define AMDGPU_INFO_RAS_ENABLED_FEATURES 0x20 -/* RAS MASK: UMC (VRAM) */ -#define AMDGPU_INFO_RAS_ENABLED_UMC (1 << 0) -/* RAS MASK: SDMA */ -#define AMDGPU_INFO_RAS_ENABLED_SDMA (1 << 1) -/* RAS MASK: GFX */ -#define AMDGPU_INFO_RAS_ENABLED_GFX (1 << 2) -/* RAS MASK: MMHUB */ -#define AMDGPU_INFO_RAS_ENABLED_MMHUB (1 << 3) -/* RAS MASK: ATHUB */ -#define AMDGPU_INFO_RAS_ENABLED_ATHUB (1 << 4) -/* RAS MASK: PCIE */ -#define AMDGPU_INFO_RAS_ENABLED_PCIE (1 << 5) -/* RAS MASK: HDP */ -#define AMDGPU_INFO_RAS_ENABLED_HDP (1 << 6) -/* RAS MASK: XGMI */ -#define AMDGPU_INFO_RAS_ENABLED_XGMI (1 << 7) -/* RAS MASK: DF */ -#define AMDGPU_INFO_RAS_ENABLED_DF (1 << 8) -/* RAS MASK: SMN */ -#define AMDGPU_INFO_RAS_ENABLED_SMN (1 << 9) -/* RAS MASK: SEM */ -#define AMDGPU_INFO_RAS_ENABLED_SEM (1 << 10) -/* RAS MASK: MP0 */ -#define AMDGPU_INFO_RAS_ENABLED_MP0 (1 << 11) -/* RAS MASK: MP1 */ -#define AMDGPU_INFO_RAS_ENABLED_MP1 (1 << 12) -/* RAS MASK: FUSE */ -#define AMDGPU_INFO_RAS_ENABLED_FUSE (1 << 13) -/* query video encode/decode caps */ -#define AMDGPU_INFO_VIDEO_CAPS 0x21 - /* Subquery id: Decode */ - #define AMDGPU_INFO_VIDEO_CAPS_DECODE 0 - /* Subquery id: Encode */ - #define AMDGPU_INFO_VIDEO_CAPS_ENCODE 1 - -#define AMDGPU_INFO_MMR_SE_INDEX_SHIFT 0 -#define AMDGPU_INFO_MMR_SE_INDEX_MASK 0xff -#define AMDGPU_INFO_MMR_SH_INDEX_SHIFT 8 -#define AMDGPU_INFO_MMR_SH_INDEX_MASK 0xff - -struct drm_amdgpu_query_fw { - /** AMDGPU_INFO_FW_* */ - __u32 fw_type; - /** - * Index of the IP if there are more IPs of - * the same type. - */ - __u32 ip_instance; - /** - * Index of the engine. Whether this is used depends - * on the firmware type. (e.g. MEC, SDMA) - */ - __u32 index; - __u32 _pad; -}; - -/* Input structure for the INFO ioctl */ -struct drm_amdgpu_info { - /* Where the return value will be stored */ - __u64 return_pointer; - /* The size of the return value. Just like "size" in "snprintf", - * it limits how many bytes the kernel can write. */ - __u32 return_size; - /* The query request id. */ - __u32 query; - - union { - struct { - __u32 id; - __u32 _pad; - } mode_crtc; - - struct { - /** AMDGPU_HW_IP_* */ - __u32 type; - /** - * Index of the IP if there are more IPs of the same - * type. Ignored by AMDGPU_INFO_HW_IP_COUNT. - */ - __u32 ip_instance; - } query_hw_ip; - - struct { - __u32 dword_offset; - /** number of registers to read */ - __u32 count; - __u32 instance; - /** For future use, no flags defined so far */ - __u32 flags; - } read_mmr_reg; - - struct drm_amdgpu_query_fw query_fw; - - struct { - __u32 type; - __u32 offset; - } vbios_info; - - struct { - __u32 type; - } sensor_info; - - struct { - __u32 type; - } video_cap; - }; -}; - -struct drm_amdgpu_info_gds { - /** GDS GFX partition size */ - __u32 gds_gfx_partition_size; - /** GDS compute partition size */ - __u32 compute_partition_size; - /** total GDS memory size */ - __u32 gds_total_size; - /** GWS size per GFX partition */ - __u32 gws_per_gfx_partition; - /** GSW size per compute partition */ - __u32 gws_per_compute_partition; - /** OA size per GFX partition */ - __u32 oa_per_gfx_partition; - /** OA size per compute partition */ - __u32 oa_per_compute_partition; - __u32 _pad; -}; - -struct drm_amdgpu_info_vram_gtt { - __u64 vram_size; - __u64 vram_cpu_accessible_size; - __u64 gtt_size; -}; - -struct drm_amdgpu_heap_info { - /** max. physical memory */ - __u64 total_heap_size; - - /** Theoretical max. available memory in the given heap */ - __u64 usable_heap_size; - - /** - * Number of bytes allocated in the heap. This includes all processes - * and private allocations in the kernel. It changes when new buffers - * are allocated, freed, and moved. It cannot be larger than - * heap_size. - */ - __u64 heap_usage; - - /** - * Theoretical possible max. size of buffer which - * could be allocated in the given heap - */ - __u64 max_allocation; -}; - -struct drm_amdgpu_memory_info { - struct drm_amdgpu_heap_info vram; - struct drm_amdgpu_heap_info cpu_accessible_vram; - struct drm_amdgpu_heap_info gtt; -}; - -struct drm_amdgpu_info_firmware { - __u32 ver; - __u32 feature; -}; - -struct drm_amdgpu_info_vbios { - __u8 name[64]; - __u8 vbios_pn[64]; - __u32 version; - __u32 pad; - __u8 vbios_ver_str[32]; - __u8 date[32]; -}; - -#define AMDGPU_VRAM_TYPE_UNKNOWN 0 -#define AMDGPU_VRAM_TYPE_GDDR1 1 -#define AMDGPU_VRAM_TYPE_DDR2 2 -#define AMDGPU_VRAM_TYPE_GDDR3 3 -#define AMDGPU_VRAM_TYPE_GDDR4 4 -#define AMDGPU_VRAM_TYPE_GDDR5 5 -#define AMDGPU_VRAM_TYPE_HBM 6 -#define AMDGPU_VRAM_TYPE_DDR3 7 -#define AMDGPU_VRAM_TYPE_DDR4 8 -#define AMDGPU_VRAM_TYPE_GDDR6 9 -#define AMDGPU_VRAM_TYPE_DDR5 10 - -struct drm_amdgpu_info_device { - /** PCI Device ID */ - __u32 device_id; - /** Internal chip revision: A0, A1, etc.) */ - __u32 chip_rev; - __u32 external_rev; - /** Revision id in PCI Config space */ - __u32 pci_rev; - __u32 family; - __u32 num_shader_engines; - __u32 num_shader_arrays_per_engine; - /* in KHz */ - __u32 gpu_counter_freq; - __u64 max_engine_clock; - __u64 max_memory_clock; - /* cu information */ - __u32 cu_active_number; - /* NOTE: cu_ao_mask is INVALID, DON'T use it */ - __u32 cu_ao_mask; - __u32 cu_bitmap[4][4]; - /** Render backend pipe mask. One render backend is CB+DB. */ - __u32 enabled_rb_pipes_mask; - __u32 num_rb_pipes; - __u32 num_hw_gfx_contexts; - __u32 _pad; - __u64 ids_flags; - /** Starting virtual address for UMDs. */ - __u64 virtual_address_offset; - /** The maximum virtual address */ - __u64 virtual_address_max; - /** Required alignment of virtual addresses. */ - __u32 virtual_address_alignment; - /** Page table entry - fragment size */ - __u32 pte_fragment_size; - __u32 gart_page_size; - /** constant engine ram size*/ - __u32 ce_ram_size; - /** video memory type info*/ - __u32 vram_type; - /** video memory bit width*/ - __u32 vram_bit_width; - /* vce harvesting instance */ - __u32 vce_harvest_config; - /* gfx double offchip LDS buffers */ - __u32 gc_double_offchip_lds_buf; - /* NGG Primitive Buffer */ - __u64 prim_buf_gpu_addr; - /* NGG Position Buffer */ - __u64 pos_buf_gpu_addr; - /* NGG Control Sideband */ - __u64 cntl_sb_buf_gpu_addr; - /* NGG Parameter Cache */ - __u64 param_buf_gpu_addr; - __u32 prim_buf_size; - __u32 pos_buf_size; - __u32 cntl_sb_buf_size; - __u32 param_buf_size; - /* wavefront size*/ - __u32 wave_front_size; - /* shader visible vgprs*/ - __u32 num_shader_visible_vgprs; - /* CU per shader array*/ - __u32 num_cu_per_sh; - /* number of tcc blocks*/ - __u32 num_tcc_blocks; - /* gs vgt table depth*/ - __u32 gs_vgt_table_depth; - /* gs primitive buffer depth*/ - __u32 gs_prim_buffer_depth; - /* max gs wavefront per vgt*/ - __u32 max_gs_waves_per_vgt; - __u32 _pad1; - /* always on cu bitmap */ - __u32 cu_ao_bitmap[4][4]; - /** Starting high virtual address for UMDs. */ - __u64 high_va_offset; - /** The maximum high virtual address */ - __u64 high_va_max; - /* gfx10 pa_sc_tile_steering_override */ - __u32 pa_sc_tile_steering_override; - /* disabled TCCs */ - __u64 tcc_disabled_mask; -}; - -struct drm_amdgpu_info_hw_ip { - /** Version of h/w IP */ - __u32 hw_ip_version_major; - __u32 hw_ip_version_minor; - /** Capabilities */ - __u64 capabilities_flags; - /** command buffer address start alignment*/ - __u32 ib_start_alignment; - /** command buffer size alignment*/ - __u32 ib_size_alignment; - /** Bitmask of available rings. Bit 0 means ring 0, etc. */ - __u32 available_rings; - __u32 _pad; -}; - -struct drm_amdgpu_info_num_handles { - /** Max handles as supported by firmware for UVD */ - __u32 uvd_max_handles; - /** Handles currently in use for UVD */ - __u32 uvd_used_handles; -}; - -#define AMDGPU_VCE_CLOCK_TABLE_ENTRIES 6 - -struct drm_amdgpu_info_vce_clock_table_entry { - /** System clock */ - __u32 sclk; - /** Memory clock */ - __u32 mclk; - /** VCE clock */ - __u32 eclk; - __u32 pad; -}; - -struct drm_amdgpu_info_vce_clock_table { - struct drm_amdgpu_info_vce_clock_table_entry entries[AMDGPU_VCE_CLOCK_TABLE_ENTRIES]; - __u32 num_valid_entries; - __u32 pad; -}; - -/* query video encode/decode caps */ -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 0 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 1 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 2 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC 3 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC 4 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG 5 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 6 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1 7 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_COUNT 8 - -struct drm_amdgpu_info_video_codec_info { - __u32 valid; - __u32 max_width; - __u32 max_height; - __u32 max_pixels_per_frame; - __u32 max_level; - __u32 pad; -}; - -struct drm_amdgpu_info_video_caps { - struct drm_amdgpu_info_video_codec_info codec_info[AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_COUNT]; -}; - -/* - * Supported GPU families - */ -#define AMDGPU_FAMILY_UNKNOWN 0 -#define AMDGPU_FAMILY_SI 110 /* Hainan, Oland, Verde, Pitcairn, Tahiti */ -#define AMDGPU_FAMILY_CI 120 /* Bonaire, Hawaii */ -#define AMDGPU_FAMILY_KV 125 /* Kaveri, Kabini, Mullins */ -#define AMDGPU_FAMILY_VI 130 /* Iceland, Tonga */ -#define AMDGPU_FAMILY_CZ 135 /* Carrizo, Stoney */ -#define AMDGPU_FAMILY_AI 141 /* Vega10 */ -#define AMDGPU_FAMILY_RV 142 /* Raven */ -#define AMDGPU_FAMILY_NV 143 /* Navi10 */ -#define AMDGPU_FAMILY_VGH 144 /* Van Gogh */ -#define AMDGPU_FAMILY_YC 146 /* Yellow Carp */ - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/libdrm/android/gralloc_handle.h b/prebuilts/aarch64/include/libdrm/android/gralloc_handle.h deleted file mode 100644 index d3d975e..0000000 --- a/prebuilts/aarch64/include/libdrm/android/gralloc_handle.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2010-2011 Chia-I Wu - * Copyright (C) 2010-2011 LunarG Inc. - * Copyright (C) 2016 Linaro, Ltd., Rob Herring - * Copyright (C) 2018 Collabora, Robert Foss - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#ifndef __ANDROID_GRALLOC_HANDLE_H__ -#define __ANDROID_GRALLOC_HANDLE_H__ - -#include -#include - -/* support users of drm_gralloc/gbm_gralloc */ -#define gralloc_gbm_handle_t gralloc_handle_t -#define gralloc_drm_handle_t gralloc_handle_t - -struct gralloc_handle_t { - native_handle_t base; - - /* dma-buf file descriptor - * Must be located first since, native_handle_t is allocated - * using native_handle_create(), which allocates space for - * sizeof(native_handle_t) + sizeof(int) * (numFds + numInts) - * numFds = GRALLOC_HANDLE_NUM_FDS - * numInts = GRALLOC_HANDLE_NUM_INTS - * Where numFds represents the number of FDs and - * numInts represents the space needed for the - * remainder of this struct. - * And the FDs are expected to be found first following - * native_handle_t. - */ - int prime_fd; - - /* api variables */ - uint32_t magic; /* differentiate between allocator impls */ - uint32_t version; /* api version */ - - uint32_t width; /* width of buffer in pixels */ - uint32_t height; /* height of buffer in pixels */ - uint32_t format; /* pixel format (Android) */ - uint32_t usage; /* android libhardware usage flags */ - - uint32_t stride; /* the stride in bytes */ - int data_owner; /* owner of data (for validation) */ - uint64_t modifier __attribute__((aligned(8))); /* buffer modifiers */ - - union { - void *data; /* pointer to struct gralloc_gbm_bo_t */ - uint64_t reserved; - } __attribute__((aligned(8))); -}; - -#define GRALLOC_HANDLE_VERSION 4 -#define GRALLOC_HANDLE_MAGIC 0x60585350 -#define GRALLOC_HANDLE_NUM_FDS 1 -#define GRALLOC_HANDLE_NUM_INTS ( \ - ((sizeof(struct gralloc_handle_t) - sizeof(native_handle_t))/sizeof(int)) \ - - GRALLOC_HANDLE_NUM_FDS) - -static inline struct gralloc_handle_t *gralloc_handle(buffer_handle_t handle) -{ - return (struct gralloc_handle_t *)handle; -} - -/** - * Create a buffer handle. - */ -static inline native_handle_t *gralloc_handle_create(int32_t width, - int32_t height, - int32_t hal_format, - int32_t usage) -{ - struct gralloc_handle_t *handle; - native_handle_t *nhandle = native_handle_create(GRALLOC_HANDLE_NUM_FDS, - GRALLOC_HANDLE_NUM_INTS); - - if (!nhandle) - return NULL; - - handle = gralloc_handle(nhandle); - handle->magic = GRALLOC_HANDLE_MAGIC; - handle->version = GRALLOC_HANDLE_VERSION; - handle->width = width; - handle->height = height; - handle->format = hal_format; - handle->usage = usage; - handle->prime_fd = -1; - - return nhandle; -} - -#endif diff --git a/prebuilts/aarch64/include/libdrm/drm.h b/prebuilts/aarch64/include/libdrm/drm.h deleted file mode 100644 index 398c396..0000000 --- a/prebuilts/aarch64/include/libdrm/drm.h +++ /dev/null @@ -1,1183 +0,0 @@ -/* - * Header for the Direct Rendering Manager - * - * Author: Rickard E. (Rik) Faith - * - * Acknowledgments: - * Dec 1999, Richard Henderson , move to generic cmpxchg. - */ - -/* - * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef _DRM_H_ -#define _DRM_H_ - -#if defined(__linux__) - -#include -#include -typedef unsigned int drm_handle_t; - -#else /* One of the BSDs */ - -#include -#include -#include -typedef int8_t __s8; -typedef uint8_t __u8; -typedef int16_t __s16; -typedef uint16_t __u16; -typedef int32_t __s32; -typedef uint32_t __u32; -typedef int64_t __s64; -typedef uint64_t __u64; -typedef size_t __kernel_size_t; -typedef unsigned long drm_handle_t; - -#endif - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_NAME "drm" /**< Name in kernel, /dev, and /proc */ -#define DRM_MIN_ORDER 5 /**< At least 2^5 bytes = 32 bytes */ -#define DRM_MAX_ORDER 22 /**< Up to 2^22 bytes = 4MB */ -#define DRM_RAM_PERCENT 10 /**< How much system ram can we lock? */ - -#define _DRM_LOCK_HELD 0x80000000U /**< Hardware lock is held */ -#define _DRM_LOCK_CONT 0x40000000U /**< Hardware lock is contended */ -#define _DRM_LOCK_IS_HELD(lock) ((lock) & _DRM_LOCK_HELD) -#define _DRM_LOCK_IS_CONT(lock) ((lock) & _DRM_LOCK_CONT) -#define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT)) - -typedef unsigned int drm_context_t; -typedef unsigned int drm_drawable_t; -typedef unsigned int drm_magic_t; - -/* - * Cliprect. - * - * \warning: If you change this structure, make sure you change - * XF86DRIClipRectRec in the server as well - * - * \note KW: Actually it's illegal to change either for - * backwards-compatibility reasons. - */ -struct drm_clip_rect { - unsigned short x1; - unsigned short y1; - unsigned short x2; - unsigned short y2; -}; - -/* - * Drawable information. - */ -struct drm_drawable_info { - unsigned int num_rects; - struct drm_clip_rect *rects; -}; - -/* - * Texture region, - */ -struct drm_tex_region { - unsigned char next; - unsigned char prev; - unsigned char in_use; - unsigned char padding; - unsigned int age; -}; - -/* - * Hardware lock. - * - * The lock structure is a simple cache-line aligned integer. To avoid - * processor bus contention on a multiprocessor system, there should not be any - * other data stored in the same cache line. - */ -struct drm_hw_lock { - __volatile__ unsigned int lock; /**< lock variable */ - char padding[60]; /**< Pad to cache line */ -}; - -/* - * DRM_IOCTL_VERSION ioctl argument type. - * - * \sa drmGetVersion(). - */ -struct drm_version { - int version_major; /**< Major version */ - int version_minor; /**< Minor version */ - int version_patchlevel; /**< Patch level */ - __kernel_size_t name_len; /**< Length of name buffer */ - char *name; /**< Name of driver */ - __kernel_size_t date_len; /**< Length of date buffer */ - char *date; /**< User-space buffer to hold date */ - __kernel_size_t desc_len; /**< Length of desc buffer */ - char *desc; /**< User-space buffer to hold desc */ -}; - -/* - * DRM_IOCTL_GET_UNIQUE ioctl argument type. - * - * \sa drmGetBusid() and drmSetBusId(). - */ -struct drm_unique { - __kernel_size_t unique_len; /**< Length of unique */ - char *unique; /**< Unique name for driver instantiation */ -}; - -struct drm_list { - int count; /**< Length of user-space structures */ - struct drm_version *version; -}; - -struct drm_block { - int unused; -}; - -/* - * DRM_IOCTL_CONTROL ioctl argument type. - * - * \sa drmCtlInstHandler() and drmCtlUninstHandler(). - */ -struct drm_control { - enum { - DRM_ADD_COMMAND, - DRM_RM_COMMAND, - DRM_INST_HANDLER, - DRM_UNINST_HANDLER - } func; - int irq; -}; - -/* - * Type of memory to map. - */ -enum drm_map_type { - _DRM_FRAME_BUFFER = 0, /**< WC (no caching), no core dump */ - _DRM_REGISTERS = 1, /**< no caching, no core dump */ - _DRM_SHM = 2, /**< shared, cached */ - _DRM_AGP = 3, /**< AGP/GART */ - _DRM_SCATTER_GATHER = 4, /**< Scatter/gather memory for PCI DMA */ - _DRM_CONSISTENT = 5 /**< Consistent memory for PCI DMA */ -}; - -/* - * Memory mapping flags. - */ -enum drm_map_flags { - _DRM_RESTRICTED = 0x01, /**< Cannot be mapped to user-virtual */ - _DRM_READ_ONLY = 0x02, - _DRM_LOCKED = 0x04, /**< shared, cached, locked */ - _DRM_KERNEL = 0x08, /**< kernel requires access */ - _DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */ - _DRM_CONTAINS_LOCK = 0x20, /**< SHM page that contains lock */ - _DRM_REMOVABLE = 0x40, /**< Removable mapping */ - _DRM_DRIVER = 0x80 /**< Managed by driver */ -}; - -struct drm_ctx_priv_map { - unsigned int ctx_id; /**< Context requesting private mapping */ - void *handle; /**< Handle of map */ -}; - -/* - * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls - * argument type. - * - * \sa drmAddMap(). - */ -struct drm_map { - unsigned long offset; /**< Requested physical address (0 for SAREA)*/ - unsigned long size; /**< Requested physical size (bytes) */ - enum drm_map_type type; /**< Type of memory to map */ - enum drm_map_flags flags; /**< Flags */ - void *handle; /**< User-space: "Handle" to pass to mmap() */ - /**< Kernel-space: kernel-virtual address */ - int mtrr; /**< MTRR slot used */ - /* Private data */ -}; - -/* - * DRM_IOCTL_GET_CLIENT ioctl argument type. - */ -struct drm_client { - int idx; /**< Which client desired? */ - int auth; /**< Is client authenticated? */ - unsigned long pid; /**< Process ID */ - unsigned long uid; /**< User ID */ - unsigned long magic; /**< Magic */ - unsigned long iocs; /**< Ioctl count */ -}; - -enum drm_stat_type { - _DRM_STAT_LOCK, - _DRM_STAT_OPENS, - _DRM_STAT_CLOSES, - _DRM_STAT_IOCTLS, - _DRM_STAT_LOCKS, - _DRM_STAT_UNLOCKS, - _DRM_STAT_VALUE, /**< Generic value */ - _DRM_STAT_BYTE, /**< Generic byte counter (1024bytes/K) */ - _DRM_STAT_COUNT, /**< Generic non-byte counter (1000/k) */ - - _DRM_STAT_IRQ, /**< IRQ */ - _DRM_STAT_PRIMARY, /**< Primary DMA bytes */ - _DRM_STAT_SECONDARY, /**< Secondary DMA bytes */ - _DRM_STAT_DMA, /**< DMA */ - _DRM_STAT_SPECIAL, /**< Special DMA (e.g., priority or polled) */ - _DRM_STAT_MISSED /**< Missed DMA opportunity */ - /* Add to the *END* of the list */ -}; - -/* - * DRM_IOCTL_GET_STATS ioctl argument type. - */ -struct drm_stats { - unsigned long count; - struct { - unsigned long value; - enum drm_stat_type type; - } data[15]; -}; - -/* - * Hardware locking flags. - */ -enum drm_lock_flags { - _DRM_LOCK_READY = 0x01, /**< Wait until hardware is ready for DMA */ - _DRM_LOCK_QUIESCENT = 0x02, /**< Wait until hardware quiescent */ - _DRM_LOCK_FLUSH = 0x04, /**< Flush this context's DMA queue first */ - _DRM_LOCK_FLUSH_ALL = 0x08, /**< Flush all DMA queues first */ - /* These *HALT* flags aren't supported yet - -- they will be used to support the - full-screen DGA-like mode. */ - _DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */ - _DRM_HALT_CUR_QUEUES = 0x20 /**< Halt all current queues */ -}; - -/* - * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type. - * - * \sa drmGetLock() and drmUnlock(). - */ -struct drm_lock { - int context; - enum drm_lock_flags flags; -}; - -/* - * DMA flags - * - * \warning - * These values \e must match xf86drm.h. - * - * \sa drm_dma. - */ -enum drm_dma_flags { - /* Flags for DMA buffer dispatch */ - _DRM_DMA_BLOCK = 0x01, /**< - * Block until buffer dispatched. - * - * \note The buffer may not yet have - * been processed by the hardware -- - * getting a hardware lock with the - * hardware quiescent will ensure - * that the buffer has been - * processed. - */ - _DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */ - _DRM_DMA_PRIORITY = 0x04, /**< High priority dispatch */ - - /* Flags for DMA buffer request */ - _DRM_DMA_WAIT = 0x10, /**< Wait for free buffers */ - _DRM_DMA_SMALLER_OK = 0x20, /**< Smaller-than-requested buffers OK */ - _DRM_DMA_LARGER_OK = 0x40 /**< Larger-than-requested buffers OK */ -}; - -/* - * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type. - * - * \sa drmAddBufs(). - */ -struct drm_buf_desc { - int count; /**< Number of buffers of this size */ - int size; /**< Size in bytes */ - int low_mark; /**< Low water mark */ - int high_mark; /**< High water mark */ - enum { - _DRM_PAGE_ALIGN = 0x01, /**< Align on page boundaries for DMA */ - _DRM_AGP_BUFFER = 0x02, /**< Buffer is in AGP space */ - _DRM_SG_BUFFER = 0x04, /**< Scatter/gather memory buffer */ - _DRM_FB_BUFFER = 0x08, /**< Buffer is in frame buffer */ - _DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */ - } flags; - unsigned long agp_start; /**< - * Start address of where the AGP buffers are - * in the AGP aperture - */ -}; - -/* - * DRM_IOCTL_INFO_BUFS ioctl argument type. - */ -struct drm_buf_info { - int count; /**< Entries in list */ - struct drm_buf_desc *list; -}; - -/* - * DRM_IOCTL_FREE_BUFS ioctl argument type. - */ -struct drm_buf_free { - int count; - int *list; -}; - -/* - * Buffer information - * - * \sa drm_buf_map. - */ -struct drm_buf_pub { - int idx; /**< Index into the master buffer list */ - int total; /**< Buffer size */ - int used; /**< Amount of buffer in use (for DMA) */ - void *address; /**< Address of buffer */ -}; - -/* - * DRM_IOCTL_MAP_BUFS ioctl argument type. - */ -struct drm_buf_map { - int count; /**< Length of the buffer list */ -#ifdef __cplusplus - void *virt; -#else - void *virtual; /**< Mmap'd area in user-virtual */ -#endif - struct drm_buf_pub *list; /**< Buffer information */ -}; - -/* - * DRM_IOCTL_DMA ioctl argument type. - * - * Indices here refer to the offset into the buffer list in drm_buf_get. - * - * \sa drmDMA(). - */ -struct drm_dma { - int context; /**< Context handle */ - int send_count; /**< Number of buffers to send */ - int *send_indices; /**< List of handles to buffers */ - int *send_sizes; /**< Lengths of data to send */ - enum drm_dma_flags flags; /**< Flags */ - int request_count; /**< Number of buffers requested */ - int request_size; /**< Desired size for buffers */ - int *request_indices; /**< Buffer information */ - int *request_sizes; - int granted_count; /**< Number of buffers granted */ -}; - -enum drm_ctx_flags { - _DRM_CONTEXT_PRESERVED = 0x01, - _DRM_CONTEXT_2DONLY = 0x02 -}; - -/* - * DRM_IOCTL_ADD_CTX ioctl argument type. - * - * \sa drmCreateContext() and drmDestroyContext(). - */ -struct drm_ctx { - drm_context_t handle; - enum drm_ctx_flags flags; -}; - -/* - * DRM_IOCTL_RES_CTX ioctl argument type. - */ -struct drm_ctx_res { - int count; - struct drm_ctx *contexts; -}; - -/* - * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type. - */ -struct drm_draw { - drm_drawable_t handle; -}; - -/* - * DRM_IOCTL_UPDATE_DRAW ioctl argument type. - */ -typedef enum { - DRM_DRAWABLE_CLIPRECTS -} drm_drawable_info_type_t; - -struct drm_update_draw { - drm_drawable_t handle; - unsigned int type; - unsigned int num; - unsigned long long data; -}; - -/* - * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type. - */ -struct drm_auth { - drm_magic_t magic; -}; - -/* - * DRM_IOCTL_IRQ_BUSID ioctl argument type. - * - * \sa drmGetInterruptFromBusID(). - */ -struct drm_irq_busid { - int irq; /**< IRQ number */ - int busnum; /**< bus number */ - int devnum; /**< device number */ - int funcnum; /**< function number */ -}; - -enum drm_vblank_seq_type { - _DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */ - _DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */ - /* bits 1-6 are reserved for high crtcs */ - _DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e, - _DRM_VBLANK_EVENT = 0x4000000, /**< Send event instead of blocking */ - _DRM_VBLANK_FLIP = 0x8000000, /**< Scheduled buffer swap should flip */ - _DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */ - _DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */ - _DRM_VBLANK_SIGNAL = 0x40000000 /**< Send signal instead of blocking, unsupported */ -}; -#define _DRM_VBLANK_HIGH_CRTC_SHIFT 1 - -#define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE) -#define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_EVENT | _DRM_VBLANK_SIGNAL | \ - _DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS) - -struct drm_wait_vblank_request { - enum drm_vblank_seq_type type; - unsigned int sequence; - unsigned long signal; -}; - -struct drm_wait_vblank_reply { - enum drm_vblank_seq_type type; - unsigned int sequence; - long tval_sec; - long tval_usec; -}; - -/* - * DRM_IOCTL_WAIT_VBLANK ioctl argument type. - * - * \sa drmWaitVBlank(). - */ -union drm_wait_vblank { - struct drm_wait_vblank_request request; - struct drm_wait_vblank_reply reply; -}; - -#define _DRM_PRE_MODESET 1 -#define _DRM_POST_MODESET 2 - -/* - * DRM_IOCTL_MODESET_CTL ioctl argument type - * - * \sa drmModesetCtl(). - */ -struct drm_modeset_ctl { - __u32 crtc; - __u32 cmd; -}; - -/* - * DRM_IOCTL_AGP_ENABLE ioctl argument type. - * - * \sa drmAgpEnable(). - */ -struct drm_agp_mode { - unsigned long mode; /**< AGP mode */ -}; - -/* - * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type. - * - * \sa drmAgpAlloc() and drmAgpFree(). - */ -struct drm_agp_buffer { - unsigned long size; /**< In bytes -- will round to page boundary */ - unsigned long handle; /**< Used for binding / unbinding */ - unsigned long type; /**< Type of memory to allocate */ - unsigned long physical; /**< Physical used by i810 */ -}; - -/* - * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type. - * - * \sa drmAgpBind() and drmAgpUnbind(). - */ -struct drm_agp_binding { - unsigned long handle; /**< From drm_agp_buffer */ - unsigned long offset; /**< In bytes -- will round to page boundary */ -}; - -/* - * DRM_IOCTL_AGP_INFO ioctl argument type. - * - * \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(), - * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(), - * drmAgpVendorId() and drmAgpDeviceId(). - */ -struct drm_agp_info { - int agp_version_major; - int agp_version_minor; - unsigned long mode; - unsigned long aperture_base; /* physical address */ - unsigned long aperture_size; /* bytes */ - unsigned long memory_allowed; /* bytes */ - unsigned long memory_used; - - /* PCI information */ - unsigned short id_vendor; - unsigned short id_device; -}; - -/* - * DRM_IOCTL_SG_ALLOC ioctl argument type. - */ -struct drm_scatter_gather { - unsigned long size; /**< In bytes -- will round to page boundary */ - unsigned long handle; /**< Used for mapping / unmapping */ -}; - -/* - * DRM_IOCTL_SET_VERSION ioctl argument type. - */ -struct drm_set_version { - int drm_di_major; - int drm_di_minor; - int drm_dd_major; - int drm_dd_minor; -}; - -/* DRM_IOCTL_GEM_CLOSE ioctl argument type */ -struct drm_gem_close { - /** Handle of the object to be closed. */ - __u32 handle; - __u32 pad; -}; - -/* DRM_IOCTL_GEM_FLINK ioctl argument type */ -struct drm_gem_flink { - /** Handle for the object being named */ - __u32 handle; - - /** Returned global name */ - __u32 name; -}; - -/* DRM_IOCTL_GEM_OPEN ioctl argument type */ -struct drm_gem_open { - /** Name of object being opened */ - __u32 name; - - /** Returned handle for the object */ - __u32 handle; - - /** Returned size of the object */ - __u64 size; -}; - -/** - * DRM_CAP_DUMB_BUFFER - * - * If set to 1, the driver supports creating dumb buffers via the - * &DRM_IOCTL_MODE_CREATE_DUMB ioctl. - */ -#define DRM_CAP_DUMB_BUFFER 0x1 -/** - * DRM_CAP_VBLANK_HIGH_CRTC - * - * If set to 1, the kernel supports specifying a CRTC index in the high bits of - * &drm_wait_vblank_request.type. - * - * Starting kernel version 2.6.39, this capability is always set to 1. - */ -#define DRM_CAP_VBLANK_HIGH_CRTC 0x2 -/** - * DRM_CAP_DUMB_PREFERRED_DEPTH - * - * The preferred bit depth for dumb buffers. - * - * The bit depth is the number of bits used to indicate the color of a single - * pixel excluding any padding. This is different from the number of bits per - * pixel. For instance, XRGB8888 has a bit depth of 24 but has 32 bits per - * pixel. - * - * Note that this preference only applies to dumb buffers, it's irrelevant for - * other types of buffers. - */ -#define DRM_CAP_DUMB_PREFERRED_DEPTH 0x3 -/** - * DRM_CAP_DUMB_PREFER_SHADOW - * - * If set to 1, the driver prefers userspace to render to a shadow buffer - * instead of directly rendering to a dumb buffer. For best speed, userspace - * should do streaming ordered memory copies into the dumb buffer and never - * read from it. - * - * Note that this preference only applies to dumb buffers, it's irrelevant for - * other types of buffers. - */ -#define DRM_CAP_DUMB_PREFER_SHADOW 0x4 -/** - * DRM_CAP_PRIME - * - * Bitfield of supported PRIME sharing capabilities. See &DRM_PRIME_CAP_IMPORT - * and &DRM_PRIME_CAP_EXPORT. - * - * PRIME buffers are exposed as dma-buf file descriptors. See - * Documentation/gpu/drm-mm.rst, section "PRIME Buffer Sharing". - */ -#define DRM_CAP_PRIME 0x5 -/** - * DRM_PRIME_CAP_IMPORT - * - * If this bit is set in &DRM_CAP_PRIME, the driver supports importing PRIME - * buffers via the &DRM_IOCTL_PRIME_FD_TO_HANDLE ioctl. - */ -#define DRM_PRIME_CAP_IMPORT 0x1 -/** - * DRM_PRIME_CAP_EXPORT - * - * If this bit is set in &DRM_CAP_PRIME, the driver supports exporting PRIME - * buffers via the &DRM_IOCTL_PRIME_HANDLE_TO_FD ioctl. - */ -#define DRM_PRIME_CAP_EXPORT 0x2 -/** - * DRM_CAP_TIMESTAMP_MONOTONIC - * - * If set to 0, the kernel will report timestamps with ``CLOCK_REALTIME`` in - * struct drm_event_vblank. If set to 1, the kernel will report timestamps with - * ``CLOCK_MONOTONIC``. See ``clock_gettime(2)`` for the definition of these - * clocks. - * - * Starting from kernel version 2.6.39, the default value for this capability - * is 1. Starting kernel version 4.15, this capability is always set to 1. - */ -#define DRM_CAP_TIMESTAMP_MONOTONIC 0x6 -/** - * DRM_CAP_ASYNC_PAGE_FLIP - * - * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC. - */ -#define DRM_CAP_ASYNC_PAGE_FLIP 0x7 -/** - * DRM_CAP_CURSOR_WIDTH - * - * The ``CURSOR_WIDTH`` and ``CURSOR_HEIGHT`` capabilities return a valid - * width x height combination for the hardware cursor. The intention is that a - * hardware agnostic userspace can query a cursor plane size to use. - * - * Note that the cross-driver contract is to merely return a valid size; - * drivers are free to attach another meaning on top, eg. i915 returns the - * maximum plane size. - */ -#define DRM_CAP_CURSOR_WIDTH 0x8 -/** - * DRM_CAP_CURSOR_HEIGHT - * - * See &DRM_CAP_CURSOR_WIDTH. - */ -#define DRM_CAP_CURSOR_HEIGHT 0x9 -/** - * DRM_CAP_ADDFB2_MODIFIERS - * - * If set to 1, the driver supports supplying modifiers in the - * &DRM_IOCTL_MODE_ADDFB2 ioctl. - */ -#define DRM_CAP_ADDFB2_MODIFIERS 0x10 -/** - * DRM_CAP_PAGE_FLIP_TARGET - * - * If set to 1, the driver supports the &DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE and - * &DRM_MODE_PAGE_FLIP_TARGET_RELATIVE flags in - * &drm_mode_crtc_page_flip_target.flags for the &DRM_IOCTL_MODE_PAGE_FLIP - * ioctl. - */ -#define DRM_CAP_PAGE_FLIP_TARGET 0x11 -/** - * DRM_CAP_CRTC_IN_VBLANK_EVENT - * - * If set to 1, the kernel supports reporting the CRTC ID in - * &drm_event_vblank.crtc_id for the &DRM_EVENT_VBLANK and - * &DRM_EVENT_FLIP_COMPLETE events. - * - * Starting kernel version 4.12, this capability is always set to 1. - */ -#define DRM_CAP_CRTC_IN_VBLANK_EVENT 0x12 -/** - * DRM_CAP_SYNCOBJ - * - * If set to 1, the driver supports sync objects. See - * Documentation/gpu/drm-mm.rst, section "DRM Sync Objects". - */ -#define DRM_CAP_SYNCOBJ 0x13 -/** - * DRM_CAP_SYNCOBJ_TIMELINE - * - * If set to 1, the driver supports timeline operations on sync objects. See - * Documentation/gpu/drm-mm.rst, section "DRM Sync Objects". - */ -#define DRM_CAP_SYNCOBJ_TIMELINE 0x14 - -/* DRM_IOCTL_GET_CAP ioctl argument type */ -struct drm_get_cap { - __u64 capability; - __u64 value; -}; - -/** - * DRM_CLIENT_CAP_STEREO_3D - * - * If set to 1, the DRM core will expose the stereo 3D capabilities of the - * monitor by advertising the supported 3D layouts in the flags of struct - * drm_mode_modeinfo. See ``DRM_MODE_FLAG_3D_*``. - * - * This capability is always supported for all drivers starting from kernel - * version 3.13. - */ -#define DRM_CLIENT_CAP_STEREO_3D 1 - -/** - * DRM_CLIENT_CAP_UNIVERSAL_PLANES - * - * If set to 1, the DRM core will expose all planes (overlay, primary, and - * cursor) to userspace. - * - * This capability has been introduced in kernel version 3.15. Starting from - * kernel version 3.17, this capability is always supported for all drivers. - */ -#define DRM_CLIENT_CAP_UNIVERSAL_PLANES 2 - -/** - * DRM_CLIENT_CAP_ATOMIC - * - * If set to 1, the DRM core will expose atomic properties to userspace. This - * implicitly enables &DRM_CLIENT_CAP_UNIVERSAL_PLANES and - * &DRM_CLIENT_CAP_ASPECT_RATIO. - * - * If the driver doesn't support atomic mode-setting, enabling this capability - * will fail with -EOPNOTSUPP. - * - * This capability has been introduced in kernel version 4.0. Starting from - * kernel version 4.2, this capability is always supported for atomic-capable - * drivers. - */ -#define DRM_CLIENT_CAP_ATOMIC 3 - -/** - * DRM_CLIENT_CAP_ASPECT_RATIO - * - * If set to 1, the DRM core will provide aspect ratio information in modes. - * See ``DRM_MODE_FLAG_PIC_AR_*``. - * - * This capability is always supported for all drivers starting from kernel - * version 4.18. - */ -#define DRM_CLIENT_CAP_ASPECT_RATIO 4 - -/** - * DRM_CLIENT_CAP_WRITEBACK_CONNECTORS - * - * If set to 1, the DRM core will expose special connectors to be used for - * writing back to memory the scene setup in the commit. The client must enable - * &DRM_CLIENT_CAP_ATOMIC first. - * - * This capability is always supported for atomic-capable drivers starting from - * kernel version 4.19. - */ -#define DRM_CLIENT_CAP_WRITEBACK_CONNECTORS 5 - -/* DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */ -struct drm_set_client_cap { - __u64 capability; - __u64 value; -}; - -#define DRM_RDWR O_RDWR -#define DRM_CLOEXEC O_CLOEXEC -struct drm_prime_handle { - __u32 handle; - - /** Flags.. only applicable for handle->fd */ - __u32 flags; - - /** Returned dmabuf file descriptor */ - __s32 fd; -}; - -struct drm_syncobj_create { - __u32 handle; -#define DRM_SYNCOBJ_CREATE_SIGNALED (1 << 0) - __u32 flags; -}; - -struct drm_syncobj_destroy { - __u32 handle; - __u32 pad; -}; - -#define DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE (1 << 0) -#define DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE (1 << 0) -struct drm_syncobj_handle { - __u32 handle; - __u32 flags; - - __s32 fd; - __u32 pad; -}; - -struct drm_syncobj_transfer { - __u32 src_handle; - __u32 dst_handle; - __u64 src_point; - __u64 dst_point; - __u32 flags; - __u32 pad; -}; - -#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0) -#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1) -#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE (1 << 2) /* wait for time point to become available */ -struct drm_syncobj_wait { - __u64 handles; - /* absolute timeout */ - __s64 timeout_nsec; - __u32 count_handles; - __u32 flags; - __u32 first_signaled; /* only valid when not waiting all */ - __u32 pad; -}; - -struct drm_syncobj_timeline_wait { - __u64 handles; - /* wait on specific timeline point for every handles*/ - __u64 points; - /* absolute timeout */ - __s64 timeout_nsec; - __u32 count_handles; - __u32 flags; - __u32 first_signaled; /* only valid when not waiting all */ - __u32 pad; -}; - - -struct drm_syncobj_array { - __u64 handles; - __u32 count_handles; - __u32 pad; -}; - -#define DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED (1 << 0) /* last available point on timeline syncobj */ -struct drm_syncobj_timeline_array { - __u64 handles; - __u64 points; - __u32 count_handles; - __u32 flags; -}; - - -/* Query current scanout sequence number */ -struct drm_crtc_get_sequence { - __u32 crtc_id; /* requested crtc_id */ - __u32 active; /* return: crtc output is active */ - __u64 sequence; /* return: most recent vblank sequence */ - __s64 sequence_ns; /* return: most recent time of first pixel out */ -}; - -/* Queue event to be delivered at specified sequence. Time stamp marks - * when the first pixel of the refresh cycle leaves the display engine - * for the display - */ -#define DRM_CRTC_SEQUENCE_RELATIVE 0x00000001 /* sequence is relative to current */ -#define DRM_CRTC_SEQUENCE_NEXT_ON_MISS 0x00000002 /* Use next sequence if we've missed */ - -struct drm_crtc_queue_sequence { - __u32 crtc_id; - __u32 flags; - __u64 sequence; /* on input, target sequence. on output, actual sequence */ - __u64 user_data; /* user data passed to event */ -}; - -#if defined(__cplusplus) -} -#endif - -#include "drm_mode.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_IOCTL_BASE 'd' -#define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr) -#define DRM_IOR(nr,type) _IOR(DRM_IOCTL_BASE,nr,type) -#define DRM_IOW(nr,type) _IOW(DRM_IOCTL_BASE,nr,type) -#define DRM_IOWR(nr,type) _IOWR(DRM_IOCTL_BASE,nr,type) - -#define DRM_IOCTL_VERSION DRM_IOWR(0x00, struct drm_version) -#define DRM_IOCTL_GET_UNIQUE DRM_IOWR(0x01, struct drm_unique) -#define DRM_IOCTL_GET_MAGIC DRM_IOR( 0x02, struct drm_auth) -#define DRM_IOCTL_IRQ_BUSID DRM_IOWR(0x03, struct drm_irq_busid) -#define DRM_IOCTL_GET_MAP DRM_IOWR(0x04, struct drm_map) -#define DRM_IOCTL_GET_CLIENT DRM_IOWR(0x05, struct drm_client) -#define DRM_IOCTL_GET_STATS DRM_IOR( 0x06, struct drm_stats) -#define DRM_IOCTL_SET_VERSION DRM_IOWR(0x07, struct drm_set_version) -#define DRM_IOCTL_MODESET_CTL DRM_IOW(0x08, struct drm_modeset_ctl) -#define DRM_IOCTL_GEM_CLOSE DRM_IOW (0x09, struct drm_gem_close) -#define DRM_IOCTL_GEM_FLINK DRM_IOWR(0x0a, struct drm_gem_flink) -#define DRM_IOCTL_GEM_OPEN DRM_IOWR(0x0b, struct drm_gem_open) -#define DRM_IOCTL_GET_CAP DRM_IOWR(0x0c, struct drm_get_cap) -#define DRM_IOCTL_SET_CLIENT_CAP DRM_IOW( 0x0d, struct drm_set_client_cap) - -#define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, struct drm_unique) -#define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, struct drm_auth) -#define DRM_IOCTL_BLOCK DRM_IOWR(0x12, struct drm_block) -#define DRM_IOCTL_UNBLOCK DRM_IOWR(0x13, struct drm_block) -#define DRM_IOCTL_CONTROL DRM_IOW( 0x14, struct drm_control) -#define DRM_IOCTL_ADD_MAP DRM_IOWR(0x15, struct drm_map) -#define DRM_IOCTL_ADD_BUFS DRM_IOWR(0x16, struct drm_buf_desc) -#define DRM_IOCTL_MARK_BUFS DRM_IOW( 0x17, struct drm_buf_desc) -#define DRM_IOCTL_INFO_BUFS DRM_IOWR(0x18, struct drm_buf_info) -#define DRM_IOCTL_MAP_BUFS DRM_IOWR(0x19, struct drm_buf_map) -#define DRM_IOCTL_FREE_BUFS DRM_IOW( 0x1a, struct drm_buf_free) - -#define DRM_IOCTL_RM_MAP DRM_IOW( 0x1b, struct drm_map) - -#define DRM_IOCTL_SET_SAREA_CTX DRM_IOW( 0x1c, struct drm_ctx_priv_map) -#define DRM_IOCTL_GET_SAREA_CTX DRM_IOWR(0x1d, struct drm_ctx_priv_map) - -#define DRM_IOCTL_SET_MASTER DRM_IO(0x1e) -#define DRM_IOCTL_DROP_MASTER DRM_IO(0x1f) - -#define DRM_IOCTL_ADD_CTX DRM_IOWR(0x20, struct drm_ctx) -#define DRM_IOCTL_RM_CTX DRM_IOWR(0x21, struct drm_ctx) -#define DRM_IOCTL_MOD_CTX DRM_IOW( 0x22, struct drm_ctx) -#define DRM_IOCTL_GET_CTX DRM_IOWR(0x23, struct drm_ctx) -#define DRM_IOCTL_SWITCH_CTX DRM_IOW( 0x24, struct drm_ctx) -#define DRM_IOCTL_NEW_CTX DRM_IOW( 0x25, struct drm_ctx) -#define DRM_IOCTL_RES_CTX DRM_IOWR(0x26, struct drm_ctx_res) -#define DRM_IOCTL_ADD_DRAW DRM_IOWR(0x27, struct drm_draw) -#define DRM_IOCTL_RM_DRAW DRM_IOWR(0x28, struct drm_draw) -#define DRM_IOCTL_DMA DRM_IOWR(0x29, struct drm_dma) -#define DRM_IOCTL_LOCK DRM_IOW( 0x2a, struct drm_lock) -#define DRM_IOCTL_UNLOCK DRM_IOW( 0x2b, struct drm_lock) -#define DRM_IOCTL_FINISH DRM_IOW( 0x2c, struct drm_lock) - -#define DRM_IOCTL_PRIME_HANDLE_TO_FD DRM_IOWR(0x2d, struct drm_prime_handle) -#define DRM_IOCTL_PRIME_FD_TO_HANDLE DRM_IOWR(0x2e, struct drm_prime_handle) - -#define DRM_IOCTL_AGP_ACQUIRE DRM_IO( 0x30) -#define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31) -#define DRM_IOCTL_AGP_ENABLE DRM_IOW( 0x32, struct drm_agp_mode) -#define DRM_IOCTL_AGP_INFO DRM_IOR( 0x33, struct drm_agp_info) -#define DRM_IOCTL_AGP_ALLOC DRM_IOWR(0x34, struct drm_agp_buffer) -#define DRM_IOCTL_AGP_FREE DRM_IOW( 0x35, struct drm_agp_buffer) -#define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding) -#define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding) - -#define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather) -#define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather) - -#define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank) - -#define DRM_IOCTL_CRTC_GET_SEQUENCE DRM_IOWR(0x3b, struct drm_crtc_get_sequence) -#define DRM_IOCTL_CRTC_QUEUE_SEQUENCE DRM_IOWR(0x3c, struct drm_crtc_queue_sequence) - -#define DRM_IOCTL_UPDATE_DRAW DRM_IOW(0x3f, struct drm_update_draw) - -#define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res) -#define DRM_IOCTL_MODE_GETCRTC DRM_IOWR(0xA1, struct drm_mode_crtc) -#define DRM_IOCTL_MODE_SETCRTC DRM_IOWR(0xA2, struct drm_mode_crtc) -#define DRM_IOCTL_MODE_CURSOR DRM_IOWR(0xA3, struct drm_mode_cursor) -#define DRM_IOCTL_MODE_GETGAMMA DRM_IOWR(0xA4, struct drm_mode_crtc_lut) -#define DRM_IOCTL_MODE_SETGAMMA DRM_IOWR(0xA5, struct drm_mode_crtc_lut) -#define DRM_IOCTL_MODE_GETENCODER DRM_IOWR(0xA6, struct drm_mode_get_encoder) -#define DRM_IOCTL_MODE_GETCONNECTOR DRM_IOWR(0xA7, struct drm_mode_get_connector) -#define DRM_IOCTL_MODE_ATTACHMODE DRM_IOWR(0xA8, struct drm_mode_mode_cmd) /* deprecated (never worked) */ -#define DRM_IOCTL_MODE_DETACHMODE DRM_IOWR(0xA9, struct drm_mode_mode_cmd) /* deprecated (never worked) */ - -#define DRM_IOCTL_MODE_GETPROPERTY DRM_IOWR(0xAA, struct drm_mode_get_property) -#define DRM_IOCTL_MODE_SETPROPERTY DRM_IOWR(0xAB, struct drm_mode_connector_set_property) -#define DRM_IOCTL_MODE_GETPROPBLOB DRM_IOWR(0xAC, struct drm_mode_get_blob) -#define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd) -#define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd) -#define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int) -#define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOWR(0xB0, struct drm_mode_crtc_page_flip) -#define DRM_IOCTL_MODE_DIRTYFB DRM_IOWR(0xB1, struct drm_mode_fb_dirty_cmd) - -#define DRM_IOCTL_MODE_CREATE_DUMB DRM_IOWR(0xB2, struct drm_mode_create_dumb) -#define DRM_IOCTL_MODE_MAP_DUMB DRM_IOWR(0xB3, struct drm_mode_map_dumb) -#define DRM_IOCTL_MODE_DESTROY_DUMB DRM_IOWR(0xB4, struct drm_mode_destroy_dumb) -#define DRM_IOCTL_MODE_GETPLANERESOURCES DRM_IOWR(0xB5, struct drm_mode_get_plane_res) -#define DRM_IOCTL_MODE_GETPLANE DRM_IOWR(0xB6, struct drm_mode_get_plane) -#define DRM_IOCTL_MODE_SETPLANE DRM_IOWR(0xB7, struct drm_mode_set_plane) -#define DRM_IOCTL_MODE_ADDFB2 DRM_IOWR(0xB8, struct drm_mode_fb_cmd2) -#define DRM_IOCTL_MODE_OBJ_GETPROPERTIES DRM_IOWR(0xB9, struct drm_mode_obj_get_properties) -#define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct drm_mode_obj_set_property) -#define DRM_IOCTL_MODE_CURSOR2 DRM_IOWR(0xBB, struct drm_mode_cursor2) -#define DRM_IOCTL_MODE_ATOMIC DRM_IOWR(0xBC, struct drm_mode_atomic) -#define DRM_IOCTL_MODE_CREATEPROPBLOB DRM_IOWR(0xBD, struct drm_mode_create_blob) -#define DRM_IOCTL_MODE_DESTROYPROPBLOB DRM_IOWR(0xBE, struct drm_mode_destroy_blob) - -#define DRM_IOCTL_SYNCOBJ_CREATE DRM_IOWR(0xBF, struct drm_syncobj_create) -#define DRM_IOCTL_SYNCOBJ_DESTROY DRM_IOWR(0xC0, struct drm_syncobj_destroy) -#define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD DRM_IOWR(0xC1, struct drm_syncobj_handle) -#define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE DRM_IOWR(0xC2, struct drm_syncobj_handle) -#define DRM_IOCTL_SYNCOBJ_WAIT DRM_IOWR(0xC3, struct drm_syncobj_wait) -#define DRM_IOCTL_SYNCOBJ_RESET DRM_IOWR(0xC4, struct drm_syncobj_array) -#define DRM_IOCTL_SYNCOBJ_SIGNAL DRM_IOWR(0xC5, struct drm_syncobj_array) - -#define DRM_IOCTL_MODE_CREATE_LEASE DRM_IOWR(0xC6, struct drm_mode_create_lease) -#define DRM_IOCTL_MODE_LIST_LESSEES DRM_IOWR(0xC7, struct drm_mode_list_lessees) -#define DRM_IOCTL_MODE_GET_LEASE DRM_IOWR(0xC8, struct drm_mode_get_lease) -#define DRM_IOCTL_MODE_REVOKE_LEASE DRM_IOWR(0xC9, struct drm_mode_revoke_lease) - -#define DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT DRM_IOWR(0xCA, struct drm_syncobj_timeline_wait) -#define DRM_IOCTL_SYNCOBJ_QUERY DRM_IOWR(0xCB, struct drm_syncobj_timeline_array) -#define DRM_IOCTL_SYNCOBJ_TRANSFER DRM_IOWR(0xCC, struct drm_syncobj_transfer) -#define DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL DRM_IOWR(0xCD, struct drm_syncobj_timeline_array) - -#define DRM_IOCTL_MODE_GETFB2 DRM_IOWR(0xCE, struct drm_mode_fb_cmd2) - -/* - * Device specific ioctls should only be in their respective headers - * The device specific ioctl range is from 0x40 to 0x9f. - * Generic IOCTLS restart at 0xA0. - * - * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and - * drmCommandReadWrite(). - */ -#define DRM_COMMAND_BASE 0x40 -#define DRM_COMMAND_END 0xA0 - -/* - * Header for events written back to userspace on the drm fd. The - * type defines the type of event, the length specifies the total - * length of the event (including the header), and user_data is - * typically a 64 bit value passed with the ioctl that triggered the - * event. A read on the drm fd will always only return complete - * events, that is, if for example the read buffer is 100 bytes, and - * there are two 64 byte events pending, only one will be returned. - * - * Event types 0 - 0x7fffffff are generic drm events, 0x80000000 and - * up are chipset specific. - */ -struct drm_event { - __u32 type; - __u32 length; -}; - -#define DRM_EVENT_VBLANK 0x01 -#define DRM_EVENT_FLIP_COMPLETE 0x02 -#define DRM_EVENT_CRTC_SEQUENCE 0x03 - -struct drm_event_vblank { - struct drm_event base; - __u64 user_data; - __u32 tv_sec; - __u32 tv_usec; - __u32 sequence; - __u32 crtc_id; /* 0 on older kernels that do not support this */ -}; - -/* Event delivered at sequence. Time stamp marks when the first pixel - * of the refresh cycle leaves the display engine for the display - */ -struct drm_event_crtc_sequence { - struct drm_event base; - __u64 user_data; - __s64 time_ns; - __u64 sequence; -}; - -/* typedef area */ -typedef struct drm_clip_rect drm_clip_rect_t; -typedef struct drm_drawable_info drm_drawable_info_t; -typedef struct drm_tex_region drm_tex_region_t; -typedef struct drm_hw_lock drm_hw_lock_t; -typedef struct drm_version drm_version_t; -typedef struct drm_unique drm_unique_t; -typedef struct drm_list drm_list_t; -typedef struct drm_block drm_block_t; -typedef struct drm_control drm_control_t; -typedef enum drm_map_type drm_map_type_t; -typedef enum drm_map_flags drm_map_flags_t; -typedef struct drm_ctx_priv_map drm_ctx_priv_map_t; -typedef struct drm_map drm_map_t; -typedef struct drm_client drm_client_t; -typedef enum drm_stat_type drm_stat_type_t; -typedef struct drm_stats drm_stats_t; -typedef enum drm_lock_flags drm_lock_flags_t; -typedef struct drm_lock drm_lock_t; -typedef enum drm_dma_flags drm_dma_flags_t; -typedef struct drm_buf_desc drm_buf_desc_t; -typedef struct drm_buf_info drm_buf_info_t; -typedef struct drm_buf_free drm_buf_free_t; -typedef struct drm_buf_pub drm_buf_pub_t; -typedef struct drm_buf_map drm_buf_map_t; -typedef struct drm_dma drm_dma_t; -typedef union drm_wait_vblank drm_wait_vblank_t; -typedef struct drm_agp_mode drm_agp_mode_t; -typedef enum drm_ctx_flags drm_ctx_flags_t; -typedef struct drm_ctx drm_ctx_t; -typedef struct drm_ctx_res drm_ctx_res_t; -typedef struct drm_draw drm_draw_t; -typedef struct drm_update_draw drm_update_draw_t; -typedef struct drm_auth drm_auth_t; -typedef struct drm_irq_busid drm_irq_busid_t; -typedef enum drm_vblank_seq_type drm_vblank_seq_type_t; - -typedef struct drm_agp_buffer drm_agp_buffer_t; -typedef struct drm_agp_binding drm_agp_binding_t; -typedef struct drm_agp_info drm_agp_info_t; -typedef struct drm_scatter_gather drm_scatter_gather_t; -typedef struct drm_set_version drm_set_version_t; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/libdrm/drm_fourcc.h b/prebuilts/aarch64/include/libdrm/drm_fourcc.h deleted file mode 100644 index 957c7be..0000000 --- a/prebuilts/aarch64/include/libdrm/drm_fourcc.h +++ /dev/null @@ -1,1365 +0,0 @@ -/* - * Copyright 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef DRM_FOURCC_H -#define DRM_FOURCC_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/** - * DOC: overview - * - * In the DRM subsystem, framebuffer pixel formats are described using the - * fourcc codes defined in `include/uapi/drm/drm_fourcc.h`. In addition to the - * fourcc code, a Format Modifier may optionally be provided, in order to - * further describe the buffer's format - for example tiling or compression. - * - * Format Modifiers - * ---------------- - * - * Format modifiers are used in conjunction with a fourcc code, forming a - * unique fourcc:modifier pair. This format:modifier pair must fully define the - * format and data layout of the buffer, and should be the only way to describe - * that particular buffer. - * - * Having multiple fourcc:modifier pairs which describe the same layout should - * be avoided, as such aliases run the risk of different drivers exposing - * different names for the same data format, forcing userspace to understand - * that they are aliases. - * - * Format modifiers may change any property of the buffer, including the number - * of planes and/or the required allocation size. Format modifiers are - * vendor-namespaced, and as such the relationship between a fourcc code and a - * modifier is specific to the modifer being used. For example, some modifiers - * may preserve meaning - such as number of planes - from the fourcc code, - * whereas others may not. - * - * Modifiers must uniquely encode buffer layout. In other words, a buffer must - * match only a single modifier. A modifier must not be a subset of layouts of - * another modifier. For instance, it's incorrect to encode pitch alignment in - * a modifier: a buffer may match a 64-pixel aligned modifier and a 32-pixel - * aligned modifier. That said, modifiers can have implicit minimal - * requirements. - * - * For modifiers where the combination of fourcc code and modifier can alias, - * a canonical pair needs to be defined and used by all drivers. Preferred - * combinations are also encouraged where all combinations might lead to - * confusion and unnecessarily reduced interoperability. An example for the - * latter is AFBC, where the ABGR layouts are preferred over ARGB layouts. - * - * There are two kinds of modifier users: - * - * - Kernel and user-space drivers: for drivers it's important that modifiers - * don't alias, otherwise two drivers might support the same format but use - * different aliases, preventing them from sharing buffers in an efficient - * format. - * - Higher-level programs interfacing with KMS/GBM/EGL/Vulkan/etc: these users - * see modifiers as opaque tokens they can check for equality and intersect. - * These users musn't need to know to reason about the modifier value - * (i.e. they are not expected to extract information out of the modifier). - * - * Vendors should document their modifier usage in as much detail as - * possible, to ensure maximum compatibility across devices, drivers and - * applications. - * - * The authoritative list of format modifier codes is found in - * `include/uapi/drm/drm_fourcc.h` - */ - -#define fourcc_code(a, b, c, d) ((__u32)(a) | ((__u32)(b) << 8) | \ - ((__u32)(c) << 16) | ((__u32)(d) << 24)) - -#define DRM_FORMAT_BIG_ENDIAN (1U<<31) /* format is big endian instead of little endian */ - -/* Reserve 0 for the invalid format specifier */ -#define DRM_FORMAT_INVALID 0 - -/* color index */ -#define DRM_FORMAT_C8 fourcc_code('C', '8', ' ', ' ') /* [7:0] C */ - -/* 8 bpp Red */ -#define DRM_FORMAT_R8 fourcc_code('R', '8', ' ', ' ') /* [7:0] R */ - -/* 16 bpp Red */ -#define DRM_FORMAT_R16 fourcc_code('R', '1', '6', ' ') /* [15:0] R little endian */ - -/* 16 bpp RG */ -#define DRM_FORMAT_RG88 fourcc_code('R', 'G', '8', '8') /* [15:0] R:G 8:8 little endian */ -#define DRM_FORMAT_GR88 fourcc_code('G', 'R', '8', '8') /* [15:0] G:R 8:8 little endian */ - -/* 32 bpp RG */ -#define DRM_FORMAT_RG1616 fourcc_code('R', 'G', '3', '2') /* [31:0] R:G 16:16 little endian */ -#define DRM_FORMAT_GR1616 fourcc_code('G', 'R', '3', '2') /* [31:0] G:R 16:16 little endian */ - -/* 8 bpp RGB */ -#define DRM_FORMAT_RGB332 fourcc_code('R', 'G', 'B', '8') /* [7:0] R:G:B 3:3:2 */ -#define DRM_FORMAT_BGR233 fourcc_code('B', 'G', 'R', '8') /* [7:0] B:G:R 2:3:3 */ - -/* 16 bpp RGB */ -#define DRM_FORMAT_XRGB4444 fourcc_code('X', 'R', '1', '2') /* [15:0] x:R:G:B 4:4:4:4 little endian */ -#define DRM_FORMAT_XBGR4444 fourcc_code('X', 'B', '1', '2') /* [15:0] x:B:G:R 4:4:4:4 little endian */ -#define DRM_FORMAT_RGBX4444 fourcc_code('R', 'X', '1', '2') /* [15:0] R:G:B:x 4:4:4:4 little endian */ -#define DRM_FORMAT_BGRX4444 fourcc_code('B', 'X', '1', '2') /* [15:0] B:G:R:x 4:4:4:4 little endian */ - -#define DRM_FORMAT_ARGB4444 fourcc_code('A', 'R', '1', '2') /* [15:0] A:R:G:B 4:4:4:4 little endian */ -#define DRM_FORMAT_ABGR4444 fourcc_code('A', 'B', '1', '2') /* [15:0] A:B:G:R 4:4:4:4 little endian */ -#define DRM_FORMAT_RGBA4444 fourcc_code('R', 'A', '1', '2') /* [15:0] R:G:B:A 4:4:4:4 little endian */ -#define DRM_FORMAT_BGRA4444 fourcc_code('B', 'A', '1', '2') /* [15:0] B:G:R:A 4:4:4:4 little endian */ - -#define DRM_FORMAT_XRGB1555 fourcc_code('X', 'R', '1', '5') /* [15:0] x:R:G:B 1:5:5:5 little endian */ -#define DRM_FORMAT_XBGR1555 fourcc_code('X', 'B', '1', '5') /* [15:0] x:B:G:R 1:5:5:5 little endian */ -#define DRM_FORMAT_RGBX5551 fourcc_code('R', 'X', '1', '5') /* [15:0] R:G:B:x 5:5:5:1 little endian */ -#define DRM_FORMAT_BGRX5551 fourcc_code('B', 'X', '1', '5') /* [15:0] B:G:R:x 5:5:5:1 little endian */ - -#define DRM_FORMAT_ARGB1555 fourcc_code('A', 'R', '1', '5') /* [15:0] A:R:G:B 1:5:5:5 little endian */ -#define DRM_FORMAT_ABGR1555 fourcc_code('A', 'B', '1', '5') /* [15:0] A:B:G:R 1:5:5:5 little endian */ -#define DRM_FORMAT_RGBA5551 fourcc_code('R', 'A', '1', '5') /* [15:0] R:G:B:A 5:5:5:1 little endian */ -#define DRM_FORMAT_BGRA5551 fourcc_code('B', 'A', '1', '5') /* [15:0] B:G:R:A 5:5:5:1 little endian */ - -#define DRM_FORMAT_RGB565 fourcc_code('R', 'G', '1', '6') /* [15:0] R:G:B 5:6:5 little endian */ -#define DRM_FORMAT_BGR565 fourcc_code('B', 'G', '1', '6') /* [15:0] B:G:R 5:6:5 little endian */ - -/* 24 bpp RGB */ -#define DRM_FORMAT_RGB888 fourcc_code('R', 'G', '2', '4') /* [23:0] R:G:B little endian */ -#define DRM_FORMAT_BGR888 fourcc_code('B', 'G', '2', '4') /* [23:0] B:G:R little endian */ - -/* 32 bpp RGB */ -#define DRM_FORMAT_XRGB8888 fourcc_code('X', 'R', '2', '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */ -#define DRM_FORMAT_XBGR8888 fourcc_code('X', 'B', '2', '4') /* [31:0] x:B:G:R 8:8:8:8 little endian */ -#define DRM_FORMAT_RGBX8888 fourcc_code('R', 'X', '2', '4') /* [31:0] R:G:B:x 8:8:8:8 little endian */ -#define DRM_FORMAT_BGRX8888 fourcc_code('B', 'X', '2', '4') /* [31:0] B:G:R:x 8:8:8:8 little endian */ - -#define DRM_FORMAT_ARGB8888 fourcc_code('A', 'R', '2', '4') /* [31:0] A:R:G:B 8:8:8:8 little endian */ -#define DRM_FORMAT_ABGR8888 fourcc_code('A', 'B', '2', '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */ -#define DRM_FORMAT_RGBA8888 fourcc_code('R', 'A', '2', '4') /* [31:0] R:G:B:A 8:8:8:8 little endian */ -#define DRM_FORMAT_BGRA8888 fourcc_code('B', 'A', '2', '4') /* [31:0] B:G:R:A 8:8:8:8 little endian */ - -#define DRM_FORMAT_XRGB2101010 fourcc_code('X', 'R', '3', '0') /* [31:0] x:R:G:B 2:10:10:10 little endian */ -#define DRM_FORMAT_XBGR2101010 fourcc_code('X', 'B', '3', '0') /* [31:0] x:B:G:R 2:10:10:10 little endian */ -#define DRM_FORMAT_RGBX1010102 fourcc_code('R', 'X', '3', '0') /* [31:0] R:G:B:x 10:10:10:2 little endian */ -#define DRM_FORMAT_BGRX1010102 fourcc_code('B', 'X', '3', '0') /* [31:0] B:G:R:x 10:10:10:2 little endian */ - -#define DRM_FORMAT_ARGB2101010 fourcc_code('A', 'R', '3', '0') /* [31:0] A:R:G:B 2:10:10:10 little endian */ -#define DRM_FORMAT_ABGR2101010 fourcc_code('A', 'B', '3', '0') /* [31:0] A:B:G:R 2:10:10:10 little endian */ -#define DRM_FORMAT_RGBA1010102 fourcc_code('R', 'A', '3', '0') /* [31:0] R:G:B:A 10:10:10:2 little endian */ -#define DRM_FORMAT_BGRA1010102 fourcc_code('B', 'A', '3', '0') /* [31:0] B:G:R:A 10:10:10:2 little endian */ - -/* 64 bpp RGB */ -#define DRM_FORMAT_XRGB16161616 fourcc_code('X', 'R', '4', '8') /* [63:0] x:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_XBGR16161616 fourcc_code('X', 'B', '4', '8') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define DRM_FORMAT_ARGB16161616 fourcc_code('A', 'R', '4', '8') /* [63:0] A:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_ABGR16161616 fourcc_code('A', 'B', '4', '8') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* - * Floating point 64bpp RGB - * IEEE 754-2008 binary16 half-precision float - * [15:0] sign:exponent:mantissa 1:5:10 - */ -#define DRM_FORMAT_XRGB16161616F fourcc_code('X', 'R', '4', 'H') /* [63:0] x:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_XBGR16161616F fourcc_code('X', 'B', '4', 'H') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define DRM_FORMAT_ARGB16161616F fourcc_code('A', 'R', '4', 'H') /* [63:0] A:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_ABGR16161616F fourcc_code('A', 'B', '4', 'H') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* - * RGBA format with 10-bit components packed in 64-bit per pixel, with 6 bits - * of unused padding per component: - */ -#define DRM_FORMAT_AXBXGXRX106106106106 fourcc_code('A', 'B', '1', '0') /* [63:0] A:x:B:x:G:x:R:x 10:6:10:6:10:6:10:6 little endian */ - -/* packed YCbCr */ -#define DRM_FORMAT_YUYV fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */ -#define DRM_FORMAT_YVYU fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */ -#define DRM_FORMAT_UYVY fourcc_code('U', 'Y', 'V', 'Y') /* [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian */ -#define DRM_FORMAT_VYUY fourcc_code('V', 'Y', 'U', 'Y') /* [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian */ - -#define DRM_FORMAT_AYUV fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */ -#define DRM_FORMAT_XYUV8888 fourcc_code('X', 'Y', 'U', 'V') /* [31:0] X:Y:Cb:Cr 8:8:8:8 little endian */ -#define DRM_FORMAT_VUY888 fourcc_code('V', 'U', '2', '4') /* [23:0] Cr:Cb:Y 8:8:8 little endian */ -#define DRM_FORMAT_VUY101010 fourcc_code('V', 'U', '3', '0') /* Y followed by U then V, 10:10:10. Non-linear modifier only */ - -/* - * packed Y2xx indicate for each component, xx valid data occupy msb - * 16-xx padding occupy lsb - */ -#define DRM_FORMAT_Y210 fourcc_code('Y', '2', '1', '0') /* [63:0] Cr0:0:Y1:0:Cb0:0:Y0:0 10:6:10:6:10:6:10:6 little endian per 2 Y pixels */ -#define DRM_FORMAT_Y212 fourcc_code('Y', '2', '1', '2') /* [63:0] Cr0:0:Y1:0:Cb0:0:Y0:0 12:4:12:4:12:4:12:4 little endian per 2 Y pixels */ -#define DRM_FORMAT_Y216 fourcc_code('Y', '2', '1', '6') /* [63:0] Cr0:Y1:Cb0:Y0 16:16:16:16 little endian per 2 Y pixels */ - -/* - * packed Y4xx indicate for each component, xx valid data occupy msb - * 16-xx padding occupy lsb except Y410 - */ -#define DRM_FORMAT_Y410 fourcc_code('Y', '4', '1', '0') /* [31:0] A:Cr:Y:Cb 2:10:10:10 little endian */ -#define DRM_FORMAT_Y412 fourcc_code('Y', '4', '1', '2') /* [63:0] A:0:Cr:0:Y:0:Cb:0 12:4:12:4:12:4:12:4 little endian */ -#define DRM_FORMAT_Y416 fourcc_code('Y', '4', '1', '6') /* [63:0] A:Cr:Y:Cb 16:16:16:16 little endian */ - -#define DRM_FORMAT_XVYU2101010 fourcc_code('X', 'V', '3', '0') /* [31:0] X:Cr:Y:Cb 2:10:10:10 little endian */ -#define DRM_FORMAT_XVYU12_16161616 fourcc_code('X', 'V', '3', '6') /* [63:0] X:0:Cr:0:Y:0:Cb:0 12:4:12:4:12:4:12:4 little endian */ -#define DRM_FORMAT_XVYU16161616 fourcc_code('X', 'V', '4', '8') /* [63:0] X:Cr:Y:Cb 16:16:16:16 little endian */ - -/* - * packed YCbCr420 2x2 tiled formats - * first 64 bits will contain Y,Cb,Cr components for a 2x2 tile - */ -/* [63:0] A3:A2:Y3:0:Cr0:0:Y2:0:A1:A0:Y1:0:Cb0:0:Y0:0 1:1:8:2:8:2:8:2:1:1:8:2:8:2:8:2 little endian */ -#define DRM_FORMAT_Y0L0 fourcc_code('Y', '0', 'L', '0') -/* [63:0] X3:X2:Y3:0:Cr0:0:Y2:0:X1:X0:Y1:0:Cb0:0:Y0:0 1:1:8:2:8:2:8:2:1:1:8:2:8:2:8:2 little endian */ -#define DRM_FORMAT_X0L0 fourcc_code('X', '0', 'L', '0') - -/* [63:0] A3:A2:Y3:Cr0:Y2:A1:A0:Y1:Cb0:Y0 1:1:10:10:10:1:1:10:10:10 little endian */ -#define DRM_FORMAT_Y0L2 fourcc_code('Y', '0', 'L', '2') -/* [63:0] X3:X2:Y3:Cr0:Y2:X1:X0:Y1:Cb0:Y0 1:1:10:10:10:1:1:10:10:10 little endian */ -#define DRM_FORMAT_X0L2 fourcc_code('X', '0', 'L', '2') - -/* - * 1-plane YUV 4:2:0 - * In these formats, the component ordering is specified (Y, followed by U - * then V), but the exact Linear layout is undefined. - * These formats can only be used with a non-Linear modifier. - */ -#define DRM_FORMAT_YUV420_8BIT fourcc_code('Y', 'U', '0', '8') -#define DRM_FORMAT_YUV420_10BIT fourcc_code('Y', 'U', '1', '0') - -/* - * 2 plane RGB + A - * index 0 = RGB plane, same format as the corresponding non _A8 format has - * index 1 = A plane, [7:0] A - */ -#define DRM_FORMAT_XRGB8888_A8 fourcc_code('X', 'R', 'A', '8') -#define DRM_FORMAT_XBGR8888_A8 fourcc_code('X', 'B', 'A', '8') -#define DRM_FORMAT_RGBX8888_A8 fourcc_code('R', 'X', 'A', '8') -#define DRM_FORMAT_BGRX8888_A8 fourcc_code('B', 'X', 'A', '8') -#define DRM_FORMAT_RGB888_A8 fourcc_code('R', '8', 'A', '8') -#define DRM_FORMAT_BGR888_A8 fourcc_code('B', '8', 'A', '8') -#define DRM_FORMAT_RGB565_A8 fourcc_code('R', '5', 'A', '8') -#define DRM_FORMAT_BGR565_A8 fourcc_code('B', '5', 'A', '8') - -/* - * 2 plane YCbCr - * index 0 = Y plane, [7:0] Y - * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian - * or - * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian - */ -#define DRM_FORMAT_NV12 fourcc_code('N', 'V', '1', '2') /* 2x2 subsampled Cr:Cb plane */ -#define DRM_FORMAT_NV21 fourcc_code('N', 'V', '2', '1') /* 2x2 subsampled Cb:Cr plane */ -#define DRM_FORMAT_NV16 fourcc_code('N', 'V', '1', '6') /* 2x1 subsampled Cr:Cb plane */ -#define DRM_FORMAT_NV61 fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */ -#define DRM_FORMAT_NV24 fourcc_code('N', 'V', '2', '4') /* non-subsampled Cr:Cb plane */ -#define DRM_FORMAT_NV42 fourcc_code('N', 'V', '4', '2') /* non-subsampled Cb:Cr plane */ -/* - * 2 plane YCbCr - * index 0 = Y plane, [39:0] Y3:Y2:Y1:Y0 little endian - * index 1 = Cr:Cb plane, [39:0] Cr1:Cb1:Cr0:Cb0 little endian - */ -#define DRM_FORMAT_NV15 fourcc_code('N', 'V', '1', '5') /* 2x2 subsampled Cr:Cb plane */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y:x [10:6] little endian - * index 1 = Cr:Cb plane, [31:0] Cr:x:Cb:x [10:6:10:6] little endian - */ -#define DRM_FORMAT_P210 fourcc_code('P', '2', '1', '0') /* 2x1 subsampled Cr:Cb plane, 10 bit per channel */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y:x [10:6] little endian - * index 1 = Cr:Cb plane, [31:0] Cr:x:Cb:x [10:6:10:6] little endian - */ -#define DRM_FORMAT_P010 fourcc_code('P', '0', '1', '0') /* 2x2 subsampled Cr:Cb plane 10 bits per channel */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y:x [12:4] little endian - * index 1 = Cr:Cb plane, [31:0] Cr:x:Cb:x [12:4:12:4] little endian - */ -#define DRM_FORMAT_P012 fourcc_code('P', '0', '1', '2') /* 2x2 subsampled Cr:Cb plane 12 bits per channel */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y little endian - * index 1 = Cr:Cb plane, [31:0] Cr:Cb [16:16] little endian - */ -#define DRM_FORMAT_P016 fourcc_code('P', '0', '1', '6') /* 2x2 subsampled Cr:Cb plane 16 bits per channel */ - -/* 3 plane non-subsampled (444) YCbCr - * 16 bits per component, but only 10 bits are used and 6 bits are padded - * index 0: Y plane, [15:0] Y:x [10:6] little endian - * index 1: Cb plane, [15:0] Cb:x [10:6] little endian - * index 2: Cr plane, [15:0] Cr:x [10:6] little endian - */ -#define DRM_FORMAT_Q410 fourcc_code('Q', '4', '1', '0') - -/* 3 plane non-subsampled (444) YCrCb - * 16 bits per component, but only 10 bits are used and 6 bits are padded - * index 0: Y plane, [15:0] Y:x [10:6] little endian - * index 1: Cr plane, [15:0] Cr:x [10:6] little endian - * index 2: Cb plane, [15:0] Cb:x [10:6] little endian - */ -#define DRM_FORMAT_Q401 fourcc_code('Q', '4', '0', '1') - -/* - * 3 plane YCbCr - * index 0: Y plane, [7:0] Y - * index 1: Cb plane, [7:0] Cb - * index 2: Cr plane, [7:0] Cr - * or - * index 1: Cr plane, [7:0] Cr - * index 2: Cb plane, [7:0] Cb - */ -#define DRM_FORMAT_YUV410 fourcc_code('Y', 'U', 'V', '9') /* 4x4 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU410 fourcc_code('Y', 'V', 'U', '9') /* 4x4 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV411 fourcc_code('Y', 'U', '1', '1') /* 4x1 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU411 fourcc_code('Y', 'V', '1', '1') /* 4x1 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV420 fourcc_code('Y', 'U', '1', '2') /* 2x2 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU420 fourcc_code('Y', 'V', '1', '2') /* 2x2 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV422 fourcc_code('Y', 'U', '1', '6') /* 2x1 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU422 fourcc_code('Y', 'V', '1', '6') /* 2x1 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV444 fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU444 fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */ - - -/* - * Format Modifiers: - * - * Format modifiers describe, typically, a re-ordering or modification - * of the data in a plane of an FB. This can be used to express tiled/ - * swizzled formats, or compression, or a combination of the two. - * - * The upper 8 bits of the format modifier are a vendor-id as assigned - * below. The lower 56 bits are assigned as vendor sees fit. - */ - -/* Vendor Ids: */ -#define DRM_FORMAT_MOD_VENDOR_NONE 0 -#define DRM_FORMAT_MOD_VENDOR_INTEL 0x01 -#define DRM_FORMAT_MOD_VENDOR_AMD 0x02 -#define DRM_FORMAT_MOD_VENDOR_NVIDIA 0x03 -#define DRM_FORMAT_MOD_VENDOR_SAMSUNG 0x04 -#define DRM_FORMAT_MOD_VENDOR_QCOM 0x05 -#define DRM_FORMAT_MOD_VENDOR_VIVANTE 0x06 -#define DRM_FORMAT_MOD_VENDOR_BROADCOM 0x07 -#define DRM_FORMAT_MOD_VENDOR_ARM 0x08 -#define DRM_FORMAT_MOD_VENDOR_ALLWINNER 0x09 -#define DRM_FORMAT_MOD_VENDOR_AMLOGIC 0x0a - -/* add more to the end as needed */ - -#define DRM_FORMAT_RESERVED ((1ULL << 56) - 1) - -#define fourcc_mod_code(vendor, val) \ - ((((__u64)DRM_FORMAT_MOD_VENDOR_## vendor) << 56) | ((val) & 0x00ffffffffffffffULL)) - -/* - * Format Modifier tokens: - * - * When adding a new token please document the layout with a code comment, - * similar to the fourcc codes above. drm_fourcc.h is considered the - * authoritative source for all of these. - * - * Generic modifier names: - * - * DRM_FORMAT_MOD_GENERIC_* definitions are used to provide vendor-neutral names - * for layouts which are common across multiple vendors. To preserve - * compatibility, in cases where a vendor-specific definition already exists and - * a generic name for it is desired, the common name is a purely symbolic alias - * and must use the same numerical value as the original definition. - * - * Note that generic names should only be used for modifiers which describe - * generic layouts (such as pixel re-ordering), which may have - * independently-developed support across multiple vendors. - * - * In future cases where a generic layout is identified before merging with a - * vendor-specific modifier, a new 'GENERIC' vendor or modifier using vendor - * 'NONE' could be considered. This should only be for obvious, exceptional - * cases to avoid polluting the 'GENERIC' namespace with modifiers which only - * apply to a single vendor. - * - * Generic names should not be used for cases where multiple hardware vendors - * have implementations of the same standardised compression scheme (such as - * AFBC). In those cases, all implementations should use the same format - * modifier(s), reflecting the vendor of the standard. - */ - -#define DRM_FORMAT_MOD_GENERIC_16_16_TILE DRM_FORMAT_MOD_SAMSUNG_16_16_TILE - -/* - * Invalid Modifier - * - * This modifier can be used as a sentinel to terminate the format modifiers - * list, or to initialize a variable with an invalid modifier. It might also be - * used to report an error back to userspace for certain APIs. - */ -#define DRM_FORMAT_MOD_INVALID fourcc_mod_code(NONE, DRM_FORMAT_RESERVED) - -/* - * Linear Layout - * - * Just plain linear layout. Note that this is different from no specifying any - * modifier (e.g. not setting DRM_MODE_FB_MODIFIERS in the DRM_ADDFB2 ioctl), - * which tells the driver to also take driver-internal information into account - * and so might actually result in a tiled framebuffer. - */ -#define DRM_FORMAT_MOD_LINEAR fourcc_mod_code(NONE, 0) - -/* - * Deprecated: use DRM_FORMAT_MOD_LINEAR instead - * - * The "none" format modifier doesn't actually mean that the modifier is - * implicit, instead it means that the layout is linear. Whether modifiers are - * used is out-of-band information carried in an API-specific way (e.g. in a - * flag for drm_mode_fb_cmd2). - */ -#define DRM_FORMAT_MOD_NONE 0 - -/* Intel framebuffer modifiers */ - -/* - * Intel X-tiling layout - * - * This is a tiled layout using 4Kb tiles (except on gen2 where the tiles 2Kb) - * in row-major layout. Within the tile bytes are laid out row-major, with - * a platform-dependent stride. On top of that the memory can apply - * platform-depending swizzling of some higher address bits into bit6. - * - * Note that this layout is only accurate on intel gen 8+ or valleyview chipsets. - * On earlier platforms the is highly platforms specific and not useful for - * cross-driver sharing. It exists since on a given platform it does uniquely - * identify the layout in a simple way for i915-specific userspace, which - * facilitated conversion of userspace to modifiers. Additionally the exact - * format on some really old platforms is not known. - */ -#define I915_FORMAT_MOD_X_TILED fourcc_mod_code(INTEL, 1) - -/* - * Intel Y-tiling layout - * - * This is a tiled layout using 4Kb tiles (except on gen2 where the tiles 2Kb) - * in row-major layout. Within the tile bytes are laid out in OWORD (16 bytes) - * chunks column-major, with a platform-dependent height. On top of that the - * memory can apply platform-depending swizzling of some higher address bits - * into bit6. - * - * Note that this layout is only accurate on intel gen 8+ or valleyview chipsets. - * On earlier platforms the is highly platforms specific and not useful for - * cross-driver sharing. It exists since on a given platform it does uniquely - * identify the layout in a simple way for i915-specific userspace, which - * facilitated conversion of userspace to modifiers. Additionally the exact - * format on some really old platforms is not known. - */ -#define I915_FORMAT_MOD_Y_TILED fourcc_mod_code(INTEL, 2) - -/* - * Intel Yf-tiling layout - * - * This is a tiled layout using 4Kb tiles in row-major layout. - * Within the tile pixels are laid out in 16 256 byte units / sub-tiles which - * are arranged in four groups (two wide, two high) with column-major layout. - * Each group therefore consits out of four 256 byte units, which are also laid - * out as 2x2 column-major. - * 256 byte units are made out of four 64 byte blocks of pixels, producing - * either a square block or a 2:1 unit. - * 64 byte blocks of pixels contain four pixel rows of 16 bytes, where the width - * in pixel depends on the pixel depth. - */ -#define I915_FORMAT_MOD_Yf_TILED fourcc_mod_code(INTEL, 3) - -/* - * Intel color control surface (CCS) for render compression - * - * The framebuffer format must be one of the 8:8:8:8 RGB formats. - * The main surface will be plane index 0 and must be Y/Yf-tiled, - * the CCS will be plane index 1. - * - * Each CCS tile matches a 1024x512 pixel area of the main surface. - * To match certain aspects of the 3D hardware the CCS is - * considered to be made up of normal 128Bx32 Y tiles, Thus - * the CCS pitch must be specified in multiples of 128 bytes. - * - * In reality the CCS tile appears to be a 64Bx64 Y tile, composed - * of QWORD (8 bytes) chunks instead of OWORD (16 bytes) chunks. - * But that fact is not relevant unless the memory is accessed - * directly. - */ -#define I915_FORMAT_MOD_Y_TILED_CCS fourcc_mod_code(INTEL, 4) -#define I915_FORMAT_MOD_Yf_TILED_CCS fourcc_mod_code(INTEL, 5) - -/* - * Intel color control surfaces (CCS) for Gen-12 render compression. - * - * The main surface is Y-tiled and at plane index 0, the CCS is linear and - * at index 1. A 64B CCS cache line corresponds to an area of 4x1 tiles in - * main surface. In other words, 4 bits in CCS map to a main surface cache - * line pair. The main surface pitch is required to be a multiple of four - * Y-tile widths. - */ -#define I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS fourcc_mod_code(INTEL, 6) - -/* - * Intel color control surfaces (CCS) for Gen-12 media compression - * - * The main surface is Y-tiled and at plane index 0, the CCS is linear and - * at index 1. A 64B CCS cache line corresponds to an area of 4x1 tiles in - * main surface. In other words, 4 bits in CCS map to a main surface cache - * line pair. The main surface pitch is required to be a multiple of four - * Y-tile widths. For semi-planar formats like NV12, CCS planes follow the - * Y and UV planes i.e., planes 0 and 1 are used for Y and UV surfaces, - * planes 2 and 3 for the respective CCS. - */ -#define I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS fourcc_mod_code(INTEL, 7) - -/* - * Intel Color Control Surface with Clear Color (CCS) for Gen-12 render - * compression. - * - * The main surface is Y-tiled and is at plane index 0 whereas CCS is linear - * and at index 1. The clear color is stored at index 2, and the pitch should - * be ignored. The clear color structure is 256 bits. The first 128 bits - * represents Raw Clear Color Red, Green, Blue and Alpha color each represented - * by 32 bits. The raw clear color is consumed by the 3d engine and generates - * the converted clear color of size 64 bits. The first 32 bits store the Lower - * Converted Clear Color value and the next 32 bits store the Higher Converted - * Clear Color value when applicable. The Converted Clear Color values are - * consumed by the DE. The last 64 bits are used to store Color Discard Enable - * and Depth Clear Value Valid which are ignored by the DE. A CCS cache line - * corresponds to an area of 4x1 tiles in the main surface. The main surface - * pitch is required to be a multiple of 4 tile widths. - */ -#define I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC fourcc_mod_code(INTEL, 8) - -/* - * Tiled, NV12MT, grouped in 64 (pixels) x 32 (lines) -sized macroblocks - * - * Macroblocks are laid in a Z-shape, and each pixel data is following the - * standard NV12 style. - * As for NV12, an image is the result of two frame buffers: one for Y, - * one for the interleaved Cb/Cr components (1/2 the height of the Y buffer). - * Alignment requirements are (for each buffer): - * - multiple of 128 pixels for the width - * - multiple of 32 pixels for the height - * - * For more information: see https://linuxtv.org/downloads/v4l-dvb-apis/re32.html - */ -#define DRM_FORMAT_MOD_SAMSUNG_64_32_TILE fourcc_mod_code(SAMSUNG, 1) - -/* - * Tiled, 16 (pixels) x 16 (lines) - sized macroblocks - * - * This is a simple tiled layout using tiles of 16x16 pixels in a row-major - * layout. For YCbCr formats Cb/Cr components are taken in such a way that - * they correspond to their 16x16 luma block. - */ -#define DRM_FORMAT_MOD_SAMSUNG_16_16_TILE fourcc_mod_code(SAMSUNG, 2) - -/* - * Qualcomm Compressed Format - * - * Refers to a compressed variant of the base format that is compressed. - * Implementation may be platform and base-format specific. - * - * Each macrotile consists of m x n (mostly 4 x 4) tiles. - * Pixel data pitch/stride is aligned with macrotile width. - * Pixel data height is aligned with macrotile height. - * Entire pixel data buffer is aligned with 4k(bytes). - */ -#define DRM_FORMAT_MOD_QCOM_COMPRESSED fourcc_mod_code(QCOM, 1) - -/* Vivante framebuffer modifiers */ - -/* - * Vivante 4x4 tiling layout - * - * This is a simple tiled layout using tiles of 4x4 pixels in a row-major - * layout. - */ -#define DRM_FORMAT_MOD_VIVANTE_TILED fourcc_mod_code(VIVANTE, 1) - -/* - * Vivante 64x64 super-tiling layout - * - * This is a tiled layout using 64x64 pixel super-tiles, where each super-tile - * contains 8x4 groups of 2x4 tiles of 4x4 pixels (like above) each, all in row- - * major layout. - * - * For more information: see - * https://github.com/etnaviv/etna_viv/blob/master/doc/hardware.md#texture-tiling - */ -#define DRM_FORMAT_MOD_VIVANTE_SUPER_TILED fourcc_mod_code(VIVANTE, 2) - -/* - * Vivante 4x4 tiling layout for dual-pipe - * - * Same as the 4x4 tiling layout, except every second 4x4 pixel tile starts at a - * different base address. Offsets from the base addresses are therefore halved - * compared to the non-split tiled layout. - */ -#define DRM_FORMAT_MOD_VIVANTE_SPLIT_TILED fourcc_mod_code(VIVANTE, 3) - -/* - * Vivante 64x64 super-tiling layout for dual-pipe - * - * Same as the 64x64 super-tiling layout, except every second 4x4 pixel tile - * starts at a different base address. Offsets from the base addresses are - * therefore halved compared to the non-split super-tiled layout. - */ -#define DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED fourcc_mod_code(VIVANTE, 4) - -/* NVIDIA frame buffer modifiers */ - -/* - * Tegra Tiled Layout, used by Tegra 2, 3 and 4. - * - * Pixels are arranged in simple tiles of 16 x 16 bytes. - */ -#define DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED fourcc_mod_code(NVIDIA, 1) - -/* - * Generalized Block Linear layout, used by desktop GPUs starting with NV50/G80, - * and Tegra GPUs starting with Tegra K1. - * - * Pixels are arranged in Groups of Bytes (GOBs). GOB size and layout varies - * based on the architecture generation. GOBs themselves are then arranged in - * 3D blocks, with the block dimensions (in terms of GOBs) always being a power - * of two, and hence expressible as their log2 equivalent (E.g., "2" represents - * a block depth or height of "4"). - * - * Chapter 20 "Pixel Memory Formats" of the Tegra X1 TRM describes this format - * in full detail. - * - * Macro - * Bits Param Description - * ---- ----- ----------------------------------------------------------------- - * - * 3:0 h log2(height) of each block, in GOBs. Placed here for - * compatibility with the existing - * DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK()-based modifiers. - * - * 4:4 - Must be 1, to indicate block-linear layout. Necessary for - * compatibility with the existing - * DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK()-based modifiers. - * - * 8:5 - Reserved (To support 3D-surfaces with variable log2(depth) block - * size). Must be zero. - * - * Note there is no log2(width) parameter. Some portions of the - * hardware support a block width of two gobs, but it is impractical - * to use due to lack of support elsewhere, and has no known - * benefits. - * - * 11:9 - Reserved (To support 2D-array textures with variable array stride - * in blocks, specified via log2(tile width in blocks)). Must be - * zero. - * - * 19:12 k Page Kind. This value directly maps to a field in the page - * tables of all GPUs >= NV50. It affects the exact layout of bits - * in memory and can be derived from the tuple - * - * (format, GPU model, compression type, samples per pixel) - * - * Where compression type is defined below. If GPU model were - * implied by the format modifier, format, or memory buffer, page - * kind would not need to be included in the modifier itself, but - * since the modifier should define the layout of the associated - * memory buffer independent from any device or other context, it - * must be included here. - * - * 21:20 g GOB Height and Page Kind Generation. The height of a GOB changed - * starting with Fermi GPUs. Additionally, the mapping between page - * kind and bit layout has changed at various points. - * - * 0 = Gob Height 8, Fermi - Volta, Tegra K1+ Page Kind mapping - * 1 = Gob Height 4, G80 - GT2XX Page Kind mapping - * 2 = Gob Height 8, Turing+ Page Kind mapping - * 3 = Reserved for future use. - * - * 22:22 s Sector layout. On Tegra GPUs prior to Xavier, there is a further - * bit remapping step that occurs at an even lower level than the - * page kind and block linear swizzles. This causes the layout of - * surfaces mapped in those SOC's GPUs to be incompatible with the - * equivalent mapping on other GPUs in the same system. - * - * 0 = Tegra K1 - Tegra Parker/TX2 Layout. - * 1 = Desktop GPU and Tegra Xavier+ Layout - * - * 25:23 c Lossless Framebuffer Compression type. - * - * 0 = none - * 1 = ROP/3D, layout 1, exact compression format implied by Page - * Kind field - * 2 = ROP/3D, layout 2, exact compression format implied by Page - * Kind field - * 3 = CDE horizontal - * 4 = CDE vertical - * 5 = Reserved for future use - * 6 = Reserved for future use - * 7 = Reserved for future use - * - * 55:25 - Reserved for future use. Must be zero. - */ -#define DRM_FORMAT_MOD_NVIDIA_BLOCK_LINEAR_2D(c, s, g, k, h) \ - fourcc_mod_code(NVIDIA, (0x10 | \ - ((h) & 0xf) | \ - (((k) & 0xff) << 12) | \ - (((g) & 0x3) << 20) | \ - (((s) & 0x1) << 22) | \ - (((c) & 0x7) << 23))) - -/* To grandfather in prior block linear format modifiers to the above layout, - * the page kind "0", which corresponds to "pitch/linear" and hence is unusable - * with block-linear layouts, is remapped within drivers to the value 0xfe, - * which corresponds to the "generic" kind used for simple single-sample - * uncompressed color formats on Fermi - Volta GPUs. - */ -static __inline__ __u64 -drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier) -{ - if (!(modifier & 0x10) || (modifier & (0xff << 12))) - return modifier; - else - return modifier | (0xfe << 12); -} - -/* - * 16Bx2 Block Linear layout, used by Tegra K1 and later - * - * Pixels are arranged in 64x8 Groups Of Bytes (GOBs). GOBs are then stacked - * vertically by a power of 2 (1 to 32 GOBs) to form a block. - * - * Within a GOB, data is ordered as 16B x 2 lines sectors laid in Z-shape. - * - * Parameter 'v' is the log2 encoding of the number of GOBs stacked vertically. - * Valid values are: - * - * 0 == ONE_GOB - * 1 == TWO_GOBS - * 2 == FOUR_GOBS - * 3 == EIGHT_GOBS - * 4 == SIXTEEN_GOBS - * 5 == THIRTYTWO_GOBS - * - * Chapter 20 "Pixel Memory Formats" of the Tegra X1 TRM describes this format - * in full detail. - */ -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(v) \ - DRM_FORMAT_MOD_NVIDIA_BLOCK_LINEAR_2D(0, 0, 0, 0, (v)) - -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(0) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(1) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(2) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(3) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(4) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(5) - -/* - * Some Broadcom modifiers take parameters, for example the number of - * vertical lines in the image. Reserve the lower 32 bits for modifier - * type, and the next 24 bits for parameters. Top 8 bits are the - * vendor code. - */ -#define __fourcc_mod_broadcom_param_shift 8 -#define __fourcc_mod_broadcom_param_bits 48 -#define fourcc_mod_broadcom_code(val, params) \ - fourcc_mod_code(BROADCOM, ((((__u64)params) << __fourcc_mod_broadcom_param_shift) | val)) -#define fourcc_mod_broadcom_param(m) \ - ((int)(((m) >> __fourcc_mod_broadcom_param_shift) & \ - ((1ULL << __fourcc_mod_broadcom_param_bits) - 1))) -#define fourcc_mod_broadcom_mod(m) \ - ((m) & ~(((1ULL << __fourcc_mod_broadcom_param_bits) - 1) << \ - __fourcc_mod_broadcom_param_shift)) - -/* - * Broadcom VC4 "T" format - * - * This is the primary layout that the V3D GPU can texture from (it - * can't do linear). The T format has: - * - * - 64b utiles of pixels in a raster-order grid according to cpp. It's 4x4 - * pixels at 32 bit depth. - * - * - 1k subtiles made of a 4x4 raster-order grid of 64b utiles (so usually - * 16x16 pixels). - * - * - 4k tiles made of a 2x2 grid of 1k subtiles (so usually 32x32 pixels). On - * even 4k tile rows, they're arranged as (BL, TL, TR, BR), and on odd rows - * they're (TR, BR, BL, TL), where bottom left is start of memory. - * - * - an image made of 4k tiles in rows either left-to-right (even rows of 4k - * tiles) or right-to-left (odd rows of 4k tiles). - */ -#define DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED fourcc_mod_code(BROADCOM, 1) - -/* - * Broadcom SAND format - * - * This is the native format that the H.264 codec block uses. For VC4 - * HVS, it is only valid for H.264 (NV12/21) and RGBA modes. - * - * The image can be considered to be split into columns, and the - * columns are placed consecutively into memory. The width of those - * columns can be either 32, 64, 128, or 256 pixels, but in practice - * only 128 pixel columns are used. - * - * The pitch between the start of each column is set to optimally - * switch between SDRAM banks. This is passed as the number of lines - * of column width in the modifier (we can't use the stride value due - * to various core checks that look at it , so you should set the - * stride to width*cpp). - * - * Note that the column height for this format modifier is the same - * for all of the planes, assuming that each column contains both Y - * and UV. Some SAND-using hardware stores UV in a separate tiled - * image from Y to reduce the column height, which is not supported - * with these modifiers. - */ - -#define DRM_FORMAT_MOD_BROADCOM_SAND32_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(2, v) -#define DRM_FORMAT_MOD_BROADCOM_SAND64_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(3, v) -#define DRM_FORMAT_MOD_BROADCOM_SAND128_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(4, v) -#define DRM_FORMAT_MOD_BROADCOM_SAND256_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(5, v) - -#define DRM_FORMAT_MOD_BROADCOM_SAND32 \ - DRM_FORMAT_MOD_BROADCOM_SAND32_COL_HEIGHT(0) -#define DRM_FORMAT_MOD_BROADCOM_SAND64 \ - DRM_FORMAT_MOD_BROADCOM_SAND64_COL_HEIGHT(0) -#define DRM_FORMAT_MOD_BROADCOM_SAND128 \ - DRM_FORMAT_MOD_BROADCOM_SAND128_COL_HEIGHT(0) -#define DRM_FORMAT_MOD_BROADCOM_SAND256 \ - DRM_FORMAT_MOD_BROADCOM_SAND256_COL_HEIGHT(0) - -/* Broadcom UIF format - * - * This is the common format for the current Broadcom multimedia - * blocks, including V3D 3.x and newer, newer video codecs, and - * displays. - * - * The image consists of utiles (64b blocks), UIF blocks (2x2 utiles), - * and macroblocks (4x4 UIF blocks). Those 4x4 UIF block groups are - * stored in columns, with padding between the columns to ensure that - * moving from one column to the next doesn't hit the same SDRAM page - * bank. - * - * To calculate the padding, it is assumed that each hardware block - * and the software driving it knows the platform's SDRAM page size, - * number of banks, and XOR address, and that it's identical between - * all blocks using the format. This tiling modifier will use XOR as - * necessary to reduce the padding. If a hardware block can't do XOR, - * the assumption is that a no-XOR tiling modifier will be created. - */ -#define DRM_FORMAT_MOD_BROADCOM_UIF fourcc_mod_code(BROADCOM, 6) - -/* - * Arm Framebuffer Compression (AFBC) modifiers - * - * AFBC is a proprietary lossless image compression protocol and format. - * It provides fine-grained random access and minimizes the amount of data - * transferred between IP blocks. - * - * AFBC has several features which may be supported and/or used, which are - * represented using bits in the modifier. Not all combinations are valid, - * and different devices or use-cases may support different combinations. - * - * Further information on the use of AFBC modifiers can be found in - * Documentation/gpu/afbc.rst - */ - -/* - * The top 4 bits (out of the 56 bits alloted for specifying vendor specific - * modifiers) denote the category for modifiers. Currently we have three - * categories of modifiers ie AFBC, MISC and AFRC. We can have a maximum of - * sixteen different categories. - */ -#define DRM_FORMAT_MOD_ARM_CODE(__type, __val) \ - fourcc_mod_code(ARM, ((__u64)(__type) << 52) | ((__val) & 0x000fffffffffffffULL)) - -#define DRM_FORMAT_MOD_ARM_TYPE_AFBC 0x00 -#define DRM_FORMAT_MOD_ARM_TYPE_MISC 0x01 - -#define DRM_FORMAT_MOD_ARM_AFBC(__afbc_mode) \ - DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_AFBC, __afbc_mode) - -/* - * AFBC superblock size - * - * Indicates the superblock size(s) used for the AFBC buffer. The buffer - * size (in pixels) must be aligned to a multiple of the superblock size. - * Four lowest significant bits(LSBs) are reserved for block size. - * - * Where one superblock size is specified, it applies to all planes of the - * buffer (e.g. 16x16, 32x8). When multiple superblock sizes are specified, - * the first applies to the Luma plane and the second applies to the Chroma - * plane(s). e.g. (32x8_64x4 means 32x8 Luma, with 64x4 Chroma). - * Multiple superblock sizes are only valid for multi-plane YCbCr formats. - */ -#define AFBC_FORMAT_MOD_BLOCK_SIZE_MASK 0xf -#define AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 (1ULL) -#define AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 (2ULL) -#define AFBC_FORMAT_MOD_BLOCK_SIZE_64x4 (3ULL) -#define AFBC_FORMAT_MOD_BLOCK_SIZE_32x8_64x4 (4ULL) - -/* - * AFBC lossless colorspace transform - * - * Indicates that the buffer makes use of the AFBC lossless colorspace - * transform. - */ -#define AFBC_FORMAT_MOD_YTR (1ULL << 4) - -/* - * AFBC block-split - * - * Indicates that the payload of each superblock is split. The second - * half of the payload is positioned at a predefined offset from the start - * of the superblock payload. - */ -#define AFBC_FORMAT_MOD_SPLIT (1ULL << 5) - -/* - * AFBC sparse layout - * - * This flag indicates that the payload of each superblock must be stored at a - * predefined position relative to the other superblocks in the same AFBC - * buffer. This order is the same order used by the header buffer. In this mode - * each superblock is given the same amount of space as an uncompressed - * superblock of the particular format would require, rounding up to the next - * multiple of 128 bytes in size. - */ -#define AFBC_FORMAT_MOD_SPARSE (1ULL << 6) - -/* - * AFBC copy-block restrict - * - * Buffers with this flag must obey the copy-block restriction. The restriction - * is such that there are no copy-blocks referring across the border of 8x8 - * blocks. For the subsampled data the 8x8 limitation is also subsampled. - */ -#define AFBC_FORMAT_MOD_CBR (1ULL << 7) - -/* - * AFBC tiled layout - * - * The tiled layout groups superblocks in 8x8 or 4x4 tiles, where all - * superblocks inside a tile are stored together in memory. 8x8 tiles are used - * for pixel formats up to and including 32 bpp while 4x4 tiles are used for - * larger bpp formats. The order between the tiles is scan line. - * When the tiled layout is used, the buffer size (in pixels) must be aligned - * to the tile size. - */ -#define AFBC_FORMAT_MOD_TILED (1ULL << 8) - -/* - * AFBC solid color blocks - * - * Indicates that the buffer makes use of solid-color blocks, whereby bandwidth - * can be reduced if a whole superblock is a single color. - */ -#define AFBC_FORMAT_MOD_SC (1ULL << 9) - -/* - * AFBC double-buffer - * - * Indicates that the buffer is allocated in a layout safe for front-buffer - * rendering. - */ -#define AFBC_FORMAT_MOD_DB (1ULL << 10) - -/* - * AFBC buffer content hints - * - * Indicates that the buffer includes per-superblock content hints. - */ -#define AFBC_FORMAT_MOD_BCH (1ULL << 11) - -/* AFBC uncompressed storage mode - * - * Indicates that the buffer is using AFBC uncompressed storage mode. - * In this mode all superblock payloads in the buffer use the uncompressed - * storage mode, which is usually only used for data which cannot be compressed. - * The buffer layout is the same as for AFBC buffers without USM set, this only - * affects the storage mode of the individual superblocks. Note that even a - * buffer without USM set may use uncompressed storage mode for some or all - * superblocks, USM just guarantees it for all. - */ -#define AFBC_FORMAT_MOD_USM (1ULL << 12) - -/* - * Arm Fixed-Rate Compression (AFRC) modifiers - * - * AFRC is a proprietary fixed rate image compression protocol and format, - * designed to provide guaranteed bandwidth and memory footprint - * reductions in graphics and media use-cases. - * - * AFRC buffers consist of one or more planes, with the same components - * and meaning as an uncompressed buffer using the same pixel format. - * - * Within each plane, the pixel/luma/chroma values are grouped into - * "coding unit" blocks which are individually compressed to a - * fixed size (in bytes). All coding units within a given plane of a buffer - * store the same number of values, and have the same compressed size. - * - * The coding unit size is configurable, allowing different rates of compression. - * - * The start of each AFRC buffer plane must be aligned to an alignment granule which - * depends on the coding unit size. - * - * Coding Unit Size Plane Alignment - * ---------------- --------------- - * 16 bytes 1024 bytes - * 24 bytes 512 bytes - * 32 bytes 2048 bytes - * - * Coding units are grouped into paging tiles. AFRC buffer dimensions must be aligned - * to a multiple of the paging tile dimensions. - * The dimensions of each paging tile depend on whether the buffer is optimised for - * scanline (SCAN layout) or rotated (ROT layout) access. - * - * Layout Paging Tile Width Paging Tile Height - * ------ ----------------- ------------------ - * SCAN 16 coding units 4 coding units - * ROT 8 coding units 8 coding units - * - * The dimensions of each coding unit depend on the number of components - * in the compressed plane and whether the buffer is optimised for - * scanline (SCAN layout) or rotated (ROT layout) access. - * - * Number of Components in Plane Layout Coding Unit Width Coding Unit Height - * ----------------------------- --------- ----------------- ------------------ - * 1 SCAN 16 samples 4 samples - * Example: 16x4 luma samples in a 'Y' plane - * 16x4 chroma 'V' values, in the 'V' plane of a fully-planar YUV buffer - * ----------------------------- --------- ----------------- ------------------ - * 1 ROT 8 samples 8 samples - * Example: 8x8 luma samples in a 'Y' plane - * 8x8 chroma 'V' values, in the 'V' plane of a fully-planar YUV buffer - * ----------------------------- --------- ----------------- ------------------ - * 2 DONT CARE 8 samples 4 samples - * Example: 8x4 chroma pairs in the 'UV' plane of a semi-planar YUV buffer - * ----------------------------- --------- ----------------- ------------------ - * 3 DONT CARE 4 samples 4 samples - * Example: 4x4 pixels in an RGB buffer without alpha - * ----------------------------- --------- ----------------- ------------------ - * 4 DONT CARE 4 samples 4 samples - * Example: 4x4 pixels in an RGB buffer with alpha - */ - -#define DRM_FORMAT_MOD_ARM_TYPE_AFRC 0x02 - -#define DRM_FORMAT_MOD_ARM_AFRC(__afrc_mode) \ - DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_AFRC, __afrc_mode) - -/* - * AFRC coding unit size modifier. - * - * Indicates the number of bytes used to store each compressed coding unit for - * one or more planes in an AFRC encoded buffer. The coding unit size for chrominance - * is the same for both Cb and Cr, which may be stored in separate planes. - * - * AFRC_FORMAT_MOD_CU_SIZE_P0 indicates the number of bytes used to store - * each compressed coding unit in the first plane of the buffer. For RGBA buffers - * this is the only plane, while for semi-planar and fully-planar YUV buffers, - * this corresponds to the luma plane. - * - * AFRC_FORMAT_MOD_CU_SIZE_P12 indicates the number of bytes used to store - * each compressed coding unit in the second and third planes in the buffer. - * For semi-planar and fully-planar YUV buffers, this corresponds to the chroma plane(s). - * - * For single-plane buffers, AFRC_FORMAT_MOD_CU_SIZE_P0 must be specified - * and AFRC_FORMAT_MOD_CU_SIZE_P12 must be zero. - * For semi-planar and fully-planar buffers, both AFRC_FORMAT_MOD_CU_SIZE_P0 and - * AFRC_FORMAT_MOD_CU_SIZE_P12 must be specified. - */ -#define AFRC_FORMAT_MOD_CU_SIZE_MASK 0xf -#define AFRC_FORMAT_MOD_CU_SIZE_16 (1ULL) -#define AFRC_FORMAT_MOD_CU_SIZE_24 (2ULL) -#define AFRC_FORMAT_MOD_CU_SIZE_32 (3ULL) - -#define AFRC_FORMAT_MOD_CU_SIZE_P0(__afrc_cu_size) (__afrc_cu_size) -#define AFRC_FORMAT_MOD_CU_SIZE_P12(__afrc_cu_size) ((__afrc_cu_size) << 4) - -/* - * AFRC scanline memory layout. - * - * Indicates if the buffer uses the scanline-optimised layout - * for an AFRC encoded buffer, otherwise, it uses the rotation-optimised layout. - * The memory layout is the same for all planes. - */ -#define AFRC_FORMAT_MOD_LAYOUT_SCAN (1ULL << 8) - -/* - * Arm 16x16 Block U-Interleaved modifier - * - * This is used by Arm Mali Utgard and Midgard GPUs. It divides the image - * into 16x16 pixel blocks. Blocks are stored linearly in order, but pixels - * in the block are reordered. - */ -#define DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED \ - DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_MISC, 1ULL) - -/* - * Allwinner tiled modifier - * - * This tiling mode is implemented by the VPU found on all Allwinner platforms, - * codenamed sunxi. It is associated with a YUV format that uses either 2 or 3 - * planes. - * - * With this tiling, the luminance samples are disposed in tiles representing - * 32x32 pixels and the chrominance samples in tiles representing 32x64 pixels. - * The pixel order in each tile is linear and the tiles are disposed linearly, - * both in row-major order. - */ -#define DRM_FORMAT_MOD_ALLWINNER_TILED fourcc_mod_code(ALLWINNER, 1) - -/* - * Amlogic Video Framebuffer Compression modifiers - * - * Amlogic uses a proprietary lossless image compression protocol and format - * for their hardware video codec accelerators, either video decoders or - * video input encoders. - * - * It considerably reduces memory bandwidth while writing and reading - * frames in memory. - * - * The underlying storage is considered to be 3 components, 8bit or 10-bit - * per component YCbCr 420, single plane : - * - DRM_FORMAT_YUV420_8BIT - * - DRM_FORMAT_YUV420_10BIT - * - * The first 8 bits of the mode defines the layout, then the following 8 bits - * defines the options changing the layout. - * - * Not all combinations are valid, and different SoCs may support different - * combinations of layout and options. - */ -#define __fourcc_mod_amlogic_layout_mask 0xff -#define __fourcc_mod_amlogic_options_shift 8 -#define __fourcc_mod_amlogic_options_mask 0xff - -#define DRM_FORMAT_MOD_AMLOGIC_FBC(__layout, __options) \ - fourcc_mod_code(AMLOGIC, \ - ((__layout) & __fourcc_mod_amlogic_layout_mask) | \ - (((__options) & __fourcc_mod_amlogic_options_mask) \ - << __fourcc_mod_amlogic_options_shift)) - -/* Amlogic FBC Layouts */ - -/* - * Amlogic FBC Basic Layout - * - * The basic layout is composed of: - * - a body content organized in 64x32 superblocks with 4096 bytes per - * superblock in default mode. - * - a 32 bytes per 128x64 header block - * - * This layout is transferrable between Amlogic SoCs supporting this modifier. - */ -#define AMLOGIC_FBC_LAYOUT_BASIC (1ULL) - -/* - * Amlogic FBC Scatter Memory layout - * - * Indicates the header contains IOMMU references to the compressed - * frames content to optimize memory access and layout. - * - * In this mode, only the header memory address is needed, thus the - * content memory organization is tied to the current producer - * execution and cannot be saved/dumped neither transferrable between - * Amlogic SoCs supporting this modifier. - * - * Due to the nature of the layout, these buffers are not expected to - * be accessible by the user-space clients, but only accessible by the - * hardware producers and consumers. - * - * The user-space clients should expect a failure while trying to mmap - * the DMA-BUF handle returned by the producer. - */ -#define AMLOGIC_FBC_LAYOUT_SCATTER (2ULL) - -/* Amlogic FBC Layout Options Bit Mask */ - -/* - * Amlogic FBC Memory Saving mode - * - * Indicates the storage is packed when pixel size is multiple of word - * boudaries, i.e. 8bit should be stored in this mode to save allocation - * memory. - * - * This mode reduces body layout to 3072 bytes per 64x32 superblock with - * the basic layout and 3200 bytes per 64x32 superblock combined with - * the scatter layout. - */ -#define AMLOGIC_FBC_OPTION_MEM_SAVING (1ULL << 0) - -/* - * AMD modifiers - * - * Memory layout: - * - * without DCC: - * - main surface - * - * with DCC & without DCC_RETILE: - * - main surface in plane 0 - * - DCC surface in plane 1 (RB-aligned, pipe-aligned if DCC_PIPE_ALIGN is set) - * - * with DCC & DCC_RETILE: - * - main surface in plane 0 - * - displayable DCC surface in plane 1 (not RB-aligned & not pipe-aligned) - * - pipe-aligned DCC surface in plane 2 (RB-aligned & pipe-aligned) - * - * For multi-plane formats the above surfaces get merged into one plane for - * each format plane, based on the required alignment only. - * - * Bits Parameter Notes - * ----- ------------------------ --------------------------------------------- - * - * 7:0 TILE_VERSION Values are AMD_FMT_MOD_TILE_VER_* - * 12:8 TILE Values are AMD_FMT_MOD_TILE__* - * 13 DCC - * 14 DCC_RETILE - * 15 DCC_PIPE_ALIGN - * 16 DCC_INDEPENDENT_64B - * 17 DCC_INDEPENDENT_128B - * 19:18 DCC_MAX_COMPRESSED_BLOCK Values are AMD_FMT_MOD_DCC_BLOCK_* - * 20 DCC_CONSTANT_ENCODE - * 23:21 PIPE_XOR_BITS Only for some chips - * 26:24 BANK_XOR_BITS Only for some chips - * 29:27 PACKERS Only for some chips - * 32:30 RB Only for some chips - * 35:33 PIPE Only for some chips - * 55:36 - Reserved for future use, must be zero - */ -#define AMD_FMT_MOD fourcc_mod_code(AMD, 0) - -#define IS_AMD_FMT_MOD(val) (((val) >> 56) == DRM_FORMAT_MOD_VENDOR_AMD) - -/* Reserve 0 for GFX8 and older */ -#define AMD_FMT_MOD_TILE_VER_GFX9 1 -#define AMD_FMT_MOD_TILE_VER_GFX10 2 -#define AMD_FMT_MOD_TILE_VER_GFX10_RBPLUS 3 - -/* - * 64K_S is the same for GFX9/GFX10/GFX10_RBPLUS and hence has GFX9 as canonical - * version. - */ -#define AMD_FMT_MOD_TILE_GFX9_64K_S 9 - -/* - * 64K_D for non-32 bpp is the same for GFX9/GFX10/GFX10_RBPLUS and hence has - * GFX9 as canonical version. - */ -#define AMD_FMT_MOD_TILE_GFX9_64K_D 10 -#define AMD_FMT_MOD_TILE_GFX9_64K_S_X 25 -#define AMD_FMT_MOD_TILE_GFX9_64K_D_X 26 -#define AMD_FMT_MOD_TILE_GFX9_64K_R_X 27 - -#define AMD_FMT_MOD_DCC_BLOCK_64B 0 -#define AMD_FMT_MOD_DCC_BLOCK_128B 1 -#define AMD_FMT_MOD_DCC_BLOCK_256B 2 - -#define AMD_FMT_MOD_TILE_VERSION_SHIFT 0 -#define AMD_FMT_MOD_TILE_VERSION_MASK 0xFF -#define AMD_FMT_MOD_TILE_SHIFT 8 -#define AMD_FMT_MOD_TILE_MASK 0x1F - -/* Whether DCC compression is enabled. */ -#define AMD_FMT_MOD_DCC_SHIFT 13 -#define AMD_FMT_MOD_DCC_MASK 0x1 - -/* - * Whether to include two DCC surfaces, one which is rb & pipe aligned, and - * one which is not-aligned. - */ -#define AMD_FMT_MOD_DCC_RETILE_SHIFT 14 -#define AMD_FMT_MOD_DCC_RETILE_MASK 0x1 - -/* Only set if DCC_RETILE = false */ -#define AMD_FMT_MOD_DCC_PIPE_ALIGN_SHIFT 15 -#define AMD_FMT_MOD_DCC_PIPE_ALIGN_MASK 0x1 - -#define AMD_FMT_MOD_DCC_INDEPENDENT_64B_SHIFT 16 -#define AMD_FMT_MOD_DCC_INDEPENDENT_64B_MASK 0x1 -#define AMD_FMT_MOD_DCC_INDEPENDENT_128B_SHIFT 17 -#define AMD_FMT_MOD_DCC_INDEPENDENT_128B_MASK 0x1 -#define AMD_FMT_MOD_DCC_MAX_COMPRESSED_BLOCK_SHIFT 18 -#define AMD_FMT_MOD_DCC_MAX_COMPRESSED_BLOCK_MASK 0x3 - -/* - * DCC supports embedding some clear colors directly in the DCC surface. - * However, on older GPUs the rendering HW ignores the embedded clear color - * and prefers the driver provided color. This necessitates doing a fastclear - * eliminate operation before a process transfers control. - * - * If this bit is set that means the fastclear eliminate is not needed for these - * embeddable colors. - */ -#define AMD_FMT_MOD_DCC_CONSTANT_ENCODE_SHIFT 20 -#define AMD_FMT_MOD_DCC_CONSTANT_ENCODE_MASK 0x1 - -/* - * The below fields are for accounting for per GPU differences. These are only - * relevant for GFX9 and later and if the tile field is *_X/_T. - * - * PIPE_XOR_BITS = always needed - * BANK_XOR_BITS = only for TILE_VER_GFX9 - * PACKERS = only for TILE_VER_GFX10_RBPLUS - * RB = only for TILE_VER_GFX9 & DCC - * PIPE = only for TILE_VER_GFX9 & DCC & (DCC_RETILE | DCC_PIPE_ALIGN) - */ -#define AMD_FMT_MOD_PIPE_XOR_BITS_SHIFT 21 -#define AMD_FMT_MOD_PIPE_XOR_BITS_MASK 0x7 -#define AMD_FMT_MOD_BANK_XOR_BITS_SHIFT 24 -#define AMD_FMT_MOD_BANK_XOR_BITS_MASK 0x7 -#define AMD_FMT_MOD_PACKERS_SHIFT 27 -#define AMD_FMT_MOD_PACKERS_MASK 0x7 -#define AMD_FMT_MOD_RB_SHIFT 30 -#define AMD_FMT_MOD_RB_MASK 0x7 -#define AMD_FMT_MOD_PIPE_SHIFT 33 -#define AMD_FMT_MOD_PIPE_MASK 0x7 - -#define AMD_FMT_MOD_SET(field, value) \ - ((uint64_t)(value) << AMD_FMT_MOD_##field##_SHIFT) -#define AMD_FMT_MOD_GET(field, value) \ - (((value) >> AMD_FMT_MOD_##field##_SHIFT) & AMD_FMT_MOD_##field##_MASK) -#define AMD_FMT_MOD_CLEAR(field) \ - (~((uint64_t)AMD_FMT_MOD_##field##_MASK << AMD_FMT_MOD_##field##_SHIFT)) - -#if defined(__cplusplus) -} -#endif - -#endif /* DRM_FOURCC_H */ diff --git a/prebuilts/aarch64/include/libdrm/drm_mode.h b/prebuilts/aarch64/include/libdrm/drm_mode.h deleted file mode 100644 index 9b6722d..0000000 --- a/prebuilts/aarch64/include/libdrm/drm_mode.h +++ /dev/null @@ -1,1129 +0,0 @@ -/* - * Copyright (c) 2007 Dave Airlie - * Copyright (c) 2007 Jakob Bornecrantz - * Copyright (c) 2008 Red Hat Inc. - * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA - * Copyright (c) 2007-2008 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef _DRM_MODE_H -#define _DRM_MODE_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/** - * DOC: overview - * - * DRM exposes many UAPI and structure definition to have a consistent - * and standardized interface with user. - * Userspace can refer to these structure definitions and UAPI formats - * to communicate to driver - */ - -#define DRM_CONNECTOR_NAME_LEN 32 -#define DRM_DISPLAY_MODE_LEN 32 -#define DRM_PROP_NAME_LEN 32 - -#define DRM_MODE_TYPE_BUILTIN (1<<0) /* deprecated */ -#define DRM_MODE_TYPE_CLOCK_C ((1<<1) | DRM_MODE_TYPE_BUILTIN) /* deprecated */ -#define DRM_MODE_TYPE_CRTC_C ((1<<2) | DRM_MODE_TYPE_BUILTIN) /* deprecated */ -#define DRM_MODE_TYPE_PREFERRED (1<<3) -#define DRM_MODE_TYPE_DEFAULT (1<<4) /* deprecated */ -#define DRM_MODE_TYPE_USERDEF (1<<5) -#define DRM_MODE_TYPE_DRIVER (1<<6) - -#define DRM_MODE_TYPE_ALL (DRM_MODE_TYPE_PREFERRED | \ - DRM_MODE_TYPE_USERDEF | \ - DRM_MODE_TYPE_DRIVER) - -/* Video mode flags */ -/* bit compatible with the xrandr RR_ definitions (bits 0-13) - * - * ABI warning: Existing userspace really expects - * the mode flags to match the xrandr definitions. Any - * changes that don't match the xrandr definitions will - * likely need a new client cap or some other mechanism - * to avoid breaking existing userspace. This includes - * allocating new flags in the previously unused bits! - */ -#define DRM_MODE_FLAG_PHSYNC (1<<0) -#define DRM_MODE_FLAG_NHSYNC (1<<1) -#define DRM_MODE_FLAG_PVSYNC (1<<2) -#define DRM_MODE_FLAG_NVSYNC (1<<3) -#define DRM_MODE_FLAG_INTERLACE (1<<4) -#define DRM_MODE_FLAG_DBLSCAN (1<<5) -#define DRM_MODE_FLAG_CSYNC (1<<6) -#define DRM_MODE_FLAG_PCSYNC (1<<7) -#define DRM_MODE_FLAG_NCSYNC (1<<8) -#define DRM_MODE_FLAG_HSKEW (1<<9) /* hskew provided */ -#define DRM_MODE_FLAG_BCAST (1<<10) /* deprecated */ -#define DRM_MODE_FLAG_PIXMUX (1<<11) /* deprecated */ -#define DRM_MODE_FLAG_DBLCLK (1<<12) -#define DRM_MODE_FLAG_CLKDIV2 (1<<13) - /* - * When adding a new stereo mode don't forget to adjust DRM_MODE_FLAGS_3D_MAX - * (define not exposed to user space). - */ -#define DRM_MODE_FLAG_3D_MASK (0x1f<<14) -#define DRM_MODE_FLAG_3D_NONE (0<<14) -#define DRM_MODE_FLAG_3D_FRAME_PACKING (1<<14) -#define DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE (2<<14) -#define DRM_MODE_FLAG_3D_LINE_ALTERNATIVE (3<<14) -#define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL (4<<14) -#define DRM_MODE_FLAG_3D_L_DEPTH (5<<14) -#define DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH (6<<14) -#define DRM_MODE_FLAG_3D_TOP_AND_BOTTOM (7<<14) -#define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF (8<<14) - -/* Picture aspect ratio options */ -#define DRM_MODE_PICTURE_ASPECT_NONE 0 -#define DRM_MODE_PICTURE_ASPECT_4_3 1 -#define DRM_MODE_PICTURE_ASPECT_16_9 2 -#define DRM_MODE_PICTURE_ASPECT_64_27 3 -#define DRM_MODE_PICTURE_ASPECT_256_135 4 - -/* Content type options */ -#define DRM_MODE_CONTENT_TYPE_NO_DATA 0 -#define DRM_MODE_CONTENT_TYPE_GRAPHICS 1 -#define DRM_MODE_CONTENT_TYPE_PHOTO 2 -#define DRM_MODE_CONTENT_TYPE_CINEMA 3 -#define DRM_MODE_CONTENT_TYPE_GAME 4 - -/* Aspect ratio flag bitmask (4 bits 22:19) */ -#define DRM_MODE_FLAG_PIC_AR_MASK (0x0F<<19) -#define DRM_MODE_FLAG_PIC_AR_NONE \ - (DRM_MODE_PICTURE_ASPECT_NONE<<19) -#define DRM_MODE_FLAG_PIC_AR_4_3 \ - (DRM_MODE_PICTURE_ASPECT_4_3<<19) -#define DRM_MODE_FLAG_PIC_AR_16_9 \ - (DRM_MODE_PICTURE_ASPECT_16_9<<19) -#define DRM_MODE_FLAG_PIC_AR_64_27 \ - (DRM_MODE_PICTURE_ASPECT_64_27<<19) -#define DRM_MODE_FLAG_PIC_AR_256_135 \ - (DRM_MODE_PICTURE_ASPECT_256_135<<19) - -#define DRM_MODE_FLAG_ALL (DRM_MODE_FLAG_PHSYNC | \ - DRM_MODE_FLAG_NHSYNC | \ - DRM_MODE_FLAG_PVSYNC | \ - DRM_MODE_FLAG_NVSYNC | \ - DRM_MODE_FLAG_INTERLACE | \ - DRM_MODE_FLAG_DBLSCAN | \ - DRM_MODE_FLAG_CSYNC | \ - DRM_MODE_FLAG_PCSYNC | \ - DRM_MODE_FLAG_NCSYNC | \ - DRM_MODE_FLAG_HSKEW | \ - DRM_MODE_FLAG_DBLCLK | \ - DRM_MODE_FLAG_CLKDIV2 | \ - DRM_MODE_FLAG_3D_MASK) - -/* DPMS flags */ -/* bit compatible with the xorg definitions. */ -#define DRM_MODE_DPMS_ON 0 -#define DRM_MODE_DPMS_STANDBY 1 -#define DRM_MODE_DPMS_SUSPEND 2 -#define DRM_MODE_DPMS_OFF 3 - -/* Scaling mode options */ -#define DRM_MODE_SCALE_NONE 0 /* Unmodified timing (display or - software can still scale) */ -#define DRM_MODE_SCALE_FULLSCREEN 1 /* Full screen, ignore aspect */ -#define DRM_MODE_SCALE_CENTER 2 /* Centered, no scaling */ -#define DRM_MODE_SCALE_ASPECT 3 /* Full screen, preserve aspect */ - -/* Dithering mode options */ -#define DRM_MODE_DITHERING_OFF 0 -#define DRM_MODE_DITHERING_ON 1 -#define DRM_MODE_DITHERING_AUTO 2 - -/* Dirty info options */ -#define DRM_MODE_DIRTY_OFF 0 -#define DRM_MODE_DIRTY_ON 1 -#define DRM_MODE_DIRTY_ANNOTATE 2 - -/* Link Status options */ -#define DRM_MODE_LINK_STATUS_GOOD 0 -#define DRM_MODE_LINK_STATUS_BAD 1 - -/* - * DRM_MODE_ROTATE_ - * - * Signals that a drm plane is been rotated degrees in counter - * clockwise direction. - * - * This define is provided as a convenience, looking up the property id - * using the name->prop id lookup is the preferred method. - */ -#define DRM_MODE_ROTATE_0 (1<<0) -#define DRM_MODE_ROTATE_90 (1<<1) -#define DRM_MODE_ROTATE_180 (1<<2) -#define DRM_MODE_ROTATE_270 (1<<3) - -/* - * DRM_MODE_ROTATE_MASK - * - * Bitmask used to look for drm plane rotations. - */ -#define DRM_MODE_ROTATE_MASK (\ - DRM_MODE_ROTATE_0 | \ - DRM_MODE_ROTATE_90 | \ - DRM_MODE_ROTATE_180 | \ - DRM_MODE_ROTATE_270) - -/* - * DRM_MODE_REFLECT_ - * - * Signals that the contents of a drm plane is reflected along the axis, - * in the same way as mirroring. - * See kerneldoc chapter "Plane Composition Properties" for more details. - * - * This define is provided as a convenience, looking up the property id - * using the name->prop id lookup is the preferred method. - */ -#define DRM_MODE_REFLECT_X (1<<4) -#define DRM_MODE_REFLECT_Y (1<<5) - -/* - * DRM_MODE_REFLECT_MASK - * - * Bitmask used to look for drm plane reflections. - */ -#define DRM_MODE_REFLECT_MASK (\ - DRM_MODE_REFLECT_X | \ - DRM_MODE_REFLECT_Y) - -/* Content Protection Flags */ -#define DRM_MODE_CONTENT_PROTECTION_UNDESIRED 0 -#define DRM_MODE_CONTENT_PROTECTION_DESIRED 1 -#define DRM_MODE_CONTENT_PROTECTION_ENABLED 2 - -/** - * struct drm_mode_modeinfo - Display mode information. - * @clock: pixel clock in kHz - * @hdisplay: horizontal display size - * @hsync_start: horizontal sync start - * @hsync_end: horizontal sync end - * @htotal: horizontal total size - * @hskew: horizontal skew - * @vdisplay: vertical display size - * @vsync_start: vertical sync start - * @vsync_end: vertical sync end - * @vtotal: vertical total size - * @vscan: vertical scan - * @vrefresh: approximate vertical refresh rate in Hz - * @flags: bitmask of misc. flags, see DRM_MODE_FLAG_* defines - * @type: bitmask of type flags, see DRM_MODE_TYPE_* defines - * @name: string describing the mode resolution - * - * This is the user-space API display mode information structure. For the - * kernel version see struct drm_display_mode. - */ -struct drm_mode_modeinfo { - __u32 clock; - __u16 hdisplay; - __u16 hsync_start; - __u16 hsync_end; - __u16 htotal; - __u16 hskew; - __u16 vdisplay; - __u16 vsync_start; - __u16 vsync_end; - __u16 vtotal; - __u16 vscan; - - __u32 vrefresh; - - __u32 flags; - __u32 type; - char name[DRM_DISPLAY_MODE_LEN]; -}; - -struct drm_mode_card_res { - __u64 fb_id_ptr; - __u64 crtc_id_ptr; - __u64 connector_id_ptr; - __u64 encoder_id_ptr; - __u32 count_fbs; - __u32 count_crtcs; - __u32 count_connectors; - __u32 count_encoders; - __u32 min_width; - __u32 max_width; - __u32 min_height; - __u32 max_height; -}; - -struct drm_mode_crtc { - __u64 set_connectors_ptr; - __u32 count_connectors; - - __u32 crtc_id; /**< Id */ - __u32 fb_id; /**< Id of framebuffer */ - - __u32 x; /**< x Position on the framebuffer */ - __u32 y; /**< y Position on the framebuffer */ - - __u32 gamma_size; - __u32 mode_valid; - struct drm_mode_modeinfo mode; -}; - -#define DRM_MODE_PRESENT_TOP_FIELD (1<<0) -#define DRM_MODE_PRESENT_BOTTOM_FIELD (1<<1) - -/* Planes blend with or override other bits on the CRTC */ -struct drm_mode_set_plane { - __u32 plane_id; - __u32 crtc_id; - __u32 fb_id; /* fb object contains surface format type */ - __u32 flags; /* see above flags */ - - /* Signed dest location allows it to be partially off screen */ - __s32 crtc_x; - __s32 crtc_y; - __u32 crtc_w; - __u32 crtc_h; - - /* Source values are 16.16 fixed point */ - __u32 src_x; - __u32 src_y; - __u32 src_h; - __u32 src_w; -}; - -struct drm_mode_get_plane { - __u32 plane_id; - - __u32 crtc_id; - __u32 fb_id; - - __u32 possible_crtcs; - __u32 gamma_size; - - __u32 count_format_types; - __u64 format_type_ptr; -}; - -struct drm_mode_get_plane_res { - __u64 plane_id_ptr; - __u32 count_planes; -}; - -#define DRM_MODE_ENCODER_NONE 0 -#define DRM_MODE_ENCODER_DAC 1 -#define DRM_MODE_ENCODER_TMDS 2 -#define DRM_MODE_ENCODER_LVDS 3 -#define DRM_MODE_ENCODER_TVDAC 4 -#define DRM_MODE_ENCODER_VIRTUAL 5 -#define DRM_MODE_ENCODER_DSI 6 -#define DRM_MODE_ENCODER_DPMST 7 -#define DRM_MODE_ENCODER_DPI 8 - -struct drm_mode_get_encoder { - __u32 encoder_id; - __u32 encoder_type; - - __u32 crtc_id; /**< Id of crtc */ - - __u32 possible_crtcs; - __u32 possible_clones; -}; - -/* This is for connectors with multiple signal types. */ -/* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */ -enum drm_mode_subconnector { - DRM_MODE_SUBCONNECTOR_Automatic = 0, /* DVI-I, TV */ - DRM_MODE_SUBCONNECTOR_Unknown = 0, /* DVI-I, TV, DP */ - DRM_MODE_SUBCONNECTOR_VGA = 1, /* DP */ - DRM_MODE_SUBCONNECTOR_DVID = 3, /* DVI-I DP */ - DRM_MODE_SUBCONNECTOR_DVIA = 4, /* DVI-I */ - DRM_MODE_SUBCONNECTOR_Composite = 5, /* TV */ - DRM_MODE_SUBCONNECTOR_SVIDEO = 6, /* TV */ - DRM_MODE_SUBCONNECTOR_Component = 8, /* TV */ - DRM_MODE_SUBCONNECTOR_SCART = 9, /* TV */ - DRM_MODE_SUBCONNECTOR_DisplayPort = 10, /* DP */ - DRM_MODE_SUBCONNECTOR_HDMIA = 11, /* DP */ - DRM_MODE_SUBCONNECTOR_Native = 15, /* DP */ - DRM_MODE_SUBCONNECTOR_Wireless = 18, /* DP */ -}; - -#define DRM_MODE_CONNECTOR_Unknown 0 -#define DRM_MODE_CONNECTOR_VGA 1 -#define DRM_MODE_CONNECTOR_DVII 2 -#define DRM_MODE_CONNECTOR_DVID 3 -#define DRM_MODE_CONNECTOR_DVIA 4 -#define DRM_MODE_CONNECTOR_Composite 5 -#define DRM_MODE_CONNECTOR_SVIDEO 6 -#define DRM_MODE_CONNECTOR_LVDS 7 -#define DRM_MODE_CONNECTOR_Component 8 -#define DRM_MODE_CONNECTOR_9PinDIN 9 -#define DRM_MODE_CONNECTOR_DisplayPort 10 -#define DRM_MODE_CONNECTOR_HDMIA 11 -#define DRM_MODE_CONNECTOR_HDMIB 12 -#define DRM_MODE_CONNECTOR_TV 13 -#define DRM_MODE_CONNECTOR_eDP 14 -#define DRM_MODE_CONNECTOR_VIRTUAL 15 -#define DRM_MODE_CONNECTOR_DSI 16 -#define DRM_MODE_CONNECTOR_DPI 17 -#define DRM_MODE_CONNECTOR_WRITEBACK 18 -#define DRM_MODE_CONNECTOR_SPI 19 -#define DRM_MODE_CONNECTOR_USB 20 - -/** - * struct drm_mode_get_connector - Get connector metadata. - * - * User-space can perform a GETCONNECTOR ioctl to retrieve information about a - * connector. User-space is expected to retrieve encoders, modes and properties - * by performing this ioctl at least twice: the first time to retrieve the - * number of elements, the second time to retrieve the elements themselves. - * - * To retrieve the number of elements, set @count_props and @count_encoders to - * zero, set @count_modes to 1, and set @modes_ptr to a temporary struct - * drm_mode_modeinfo element. - * - * To retrieve the elements, allocate arrays for @encoders_ptr, @modes_ptr, - * @props_ptr and @prop_values_ptr, then set @count_modes, @count_props and - * @count_encoders to their capacity. - * - * Performing the ioctl only twice may be racy: the number of elements may have - * changed with a hotplug event in-between the two ioctls. User-space is - * expected to retry the last ioctl until the number of elements stabilizes. - * The kernel won't fill any array which doesn't have the expected length. - * - * **Force-probing a connector** - * - * If the @count_modes field is set to zero and the DRM client is the current - * DRM master, the kernel will perform a forced probe on the connector to - * refresh the connector status, modes and EDID. A forced-probe can be slow, - * might cause flickering and the ioctl will block. - * - * User-space needs to force-probe connectors to ensure their metadata is - * up-to-date at startup and after receiving a hot-plug event. User-space - * may perform a forced-probe when the user explicitly requests it. User-space - * shouldn't perform a forced-probe in other situations. - */ -struct drm_mode_get_connector { - /** @encoders_ptr: Pointer to ``__u32`` array of object IDs. */ - __u64 encoders_ptr; - /** @modes_ptr: Pointer to struct drm_mode_modeinfo array. */ - __u64 modes_ptr; - /** @props_ptr: Pointer to ``__u32`` array of property IDs. */ - __u64 props_ptr; - /** @prop_values_ptr: Pointer to ``__u64`` array of property values. */ - __u64 prop_values_ptr; - - /** @count_modes: Number of modes. */ - __u32 count_modes; - /** @count_props: Number of properties. */ - __u32 count_props; - /** @count_encoders: Number of encoders. */ - __u32 count_encoders; - - /** @encoder_id: Object ID of the current encoder. */ - __u32 encoder_id; - /** @connector_id: Object ID of the connector. */ - __u32 connector_id; - /** - * @connector_type: Type of the connector. - * - * See DRM_MODE_CONNECTOR_* defines. - */ - __u32 connector_type; - /** - * @connector_type_id: Type-specific connector number. - * - * This is not an object ID. This is a per-type connector number. Each - * (type, type_id) combination is unique across all connectors of a DRM - * device. - */ - __u32 connector_type_id; - - /** - * @connection: Status of the connector. - * - * See enum drm_connector_status. - */ - __u32 connection; - /** @mm_width: Width of the connected sink in millimeters. */ - __u32 mm_width; - /** @mm_height: Height of the connected sink in millimeters. */ - __u32 mm_height; - /** - * @subpixel: Subpixel order of the connected sink. - * - * See enum subpixel_order. - */ - __u32 subpixel; - - /** @pad: Padding, must be zero. */ - __u32 pad; -}; - -#define DRM_MODE_PROP_PENDING (1<<0) /* deprecated, do not use */ -#define DRM_MODE_PROP_RANGE (1<<1) -#define DRM_MODE_PROP_IMMUTABLE (1<<2) -#define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */ -#define DRM_MODE_PROP_BLOB (1<<4) -#define DRM_MODE_PROP_BITMASK (1<<5) /* bitmask of enumerated types */ - -/* non-extended types: legacy bitmask, one bit per type: */ -#define DRM_MODE_PROP_LEGACY_TYPE ( \ - DRM_MODE_PROP_RANGE | \ - DRM_MODE_PROP_ENUM | \ - DRM_MODE_PROP_BLOB | \ - DRM_MODE_PROP_BITMASK) - -/* extended-types: rather than continue to consume a bit per type, - * grab a chunk of the bits to use as integer type id. - */ -#define DRM_MODE_PROP_EXTENDED_TYPE 0x0000ffc0 -#define DRM_MODE_PROP_TYPE(n) ((n) << 6) -#define DRM_MODE_PROP_OBJECT DRM_MODE_PROP_TYPE(1) -#define DRM_MODE_PROP_SIGNED_RANGE DRM_MODE_PROP_TYPE(2) - -/* the PROP_ATOMIC flag is used to hide properties from userspace that - * is not aware of atomic properties. This is mostly to work around - * older userspace (DDX drivers) that read/write each prop they find, - * witout being aware that this could be triggering a lengthy modeset. - */ -#define DRM_MODE_PROP_ATOMIC 0x80000000 - -struct drm_mode_property_enum { - __u64 value; - char name[DRM_PROP_NAME_LEN]; -}; - -struct drm_mode_get_property { - __u64 values_ptr; /* values and blob lengths */ - __u64 enum_blob_ptr; /* enum and blob id ptrs */ - - __u32 prop_id; - __u32 flags; - char name[DRM_PROP_NAME_LEN]; - - __u32 count_values; - /* This is only used to count enum values, not blobs. The _blobs is - * simply because of a historical reason, i.e. backwards compat. */ - __u32 count_enum_blobs; -}; - -struct drm_mode_connector_set_property { - __u64 value; - __u32 prop_id; - __u32 connector_id; -}; - -#define DRM_MODE_OBJECT_CRTC 0xcccccccc -#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0 -#define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0 -#define DRM_MODE_OBJECT_MODE 0xdededede -#define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0 -#define DRM_MODE_OBJECT_FB 0xfbfbfbfb -#define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb -#define DRM_MODE_OBJECT_PLANE 0xeeeeeeee -#define DRM_MODE_OBJECT_ANY 0 - -struct drm_mode_obj_get_properties { - __u64 props_ptr; - __u64 prop_values_ptr; - __u32 count_props; - __u32 obj_id; - __u32 obj_type; -}; - -struct drm_mode_obj_set_property { - __u64 value; - __u32 prop_id; - __u32 obj_id; - __u32 obj_type; -}; - -struct drm_mode_get_blob { - __u32 blob_id; - __u32 length; - __u64 data; -}; - -struct drm_mode_fb_cmd { - __u32 fb_id; - __u32 width; - __u32 height; - __u32 pitch; - __u32 bpp; - __u32 depth; - /* driver specific handle */ - __u32 handle; -}; - -#define DRM_MODE_FB_INTERLACED (1<<0) /* for interlaced framebuffers */ -#define DRM_MODE_FB_MODIFIERS (1<<1) /* enables ->modifer[] */ - -struct drm_mode_fb_cmd2 { - __u32 fb_id; - __u32 width; - __u32 height; - __u32 pixel_format; /* fourcc code from drm_fourcc.h */ - __u32 flags; /* see above flags */ - - /* - * In case of planar formats, this ioctl allows up to 4 - * buffer objects with offsets and pitches per plane. - * The pitch and offset order is dictated by the fourcc, - * e.g. NV12 (https://fourcc.org/yuv.php#NV12) is described as: - * - * YUV 4:2:0 image with a plane of 8 bit Y samples - * followed by an interleaved U/V plane containing - * 8 bit 2x2 subsampled colour difference samples. - * - * So it would consist of Y as offsets[0] and UV as - * offsets[1]. Note that offsets[0] will generally - * be 0 (but this is not required). - * - * To accommodate tiled, compressed, etc formats, a - * modifier can be specified. The default value of zero - * indicates "native" format as specified by the fourcc. - * Vendor specific modifier token. Note that even though - * it looks like we have a modifier per-plane, we in fact - * do not. The modifier for each plane must be identical. - * Thus all combinations of different data layouts for - * multi plane formats must be enumerated as separate - * modifiers. - */ - __u32 handles[4]; - __u32 pitches[4]; /* pitch for each plane */ - __u32 offsets[4]; /* offset of each plane */ - __u64 modifier[4]; /* ie, tiling, compress */ -}; - -#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01 -#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02 -#define DRM_MODE_FB_DIRTY_FLAGS 0x03 - -#define DRM_MODE_FB_DIRTY_MAX_CLIPS 256 - -/* - * Mark a region of a framebuffer as dirty. - * - * Some hardware does not automatically update display contents - * as a hardware or software draw to a framebuffer. This ioctl - * allows userspace to tell the kernel and the hardware what - * regions of the framebuffer have changed. - * - * The kernel or hardware is free to update more then just the - * region specified by the clip rects. The kernel or hardware - * may also delay and/or coalesce several calls to dirty into a - * single update. - * - * Userspace may annotate the updates, the annotates are a - * promise made by the caller that the change is either a copy - * of pixels or a fill of a single color in the region specified. - * - * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then - * the number of updated regions are half of num_clips given, - * where the clip rects are paired in src and dst. The width and - * height of each one of the pairs must match. - * - * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller - * promises that the region specified of the clip rects is filled - * completely with a single color as given in the color argument. - */ - -struct drm_mode_fb_dirty_cmd { - __u32 fb_id; - __u32 flags; - __u32 color; - __u32 num_clips; - __u64 clips_ptr; -}; - -struct drm_mode_mode_cmd { - __u32 connector_id; - struct drm_mode_modeinfo mode; -}; - -#define DRM_MODE_CURSOR_BO 0x01 -#define DRM_MODE_CURSOR_MOVE 0x02 -#define DRM_MODE_CURSOR_FLAGS 0x03 - -/* - * depending on the value in flags different members are used. - * - * CURSOR_BO uses - * crtc_id - * width - * height - * handle - if 0 turns the cursor off - * - * CURSOR_MOVE uses - * crtc_id - * x - * y - */ -struct drm_mode_cursor { - __u32 flags; - __u32 crtc_id; - __s32 x; - __s32 y; - __u32 width; - __u32 height; - /* driver specific handle */ - __u32 handle; -}; - -struct drm_mode_cursor2 { - __u32 flags; - __u32 crtc_id; - __s32 x; - __s32 y; - __u32 width; - __u32 height; - /* driver specific handle */ - __u32 handle; - __s32 hot_x; - __s32 hot_y; -}; - -struct drm_mode_crtc_lut { - __u32 crtc_id; - __u32 gamma_size; - - /* pointers to arrays */ - __u64 red; - __u64 green; - __u64 blue; -}; - -struct drm_color_ctm { - /* - * Conversion matrix in S31.32 sign-magnitude - * (not two's complement!) format. - */ - __u64 matrix[9]; -}; - -struct drm_color_lut { - /* - * Values are mapped linearly to 0.0 - 1.0 range, with 0x0 == 0.0 and - * 0xffff == 1.0. - */ - __u16 red; - __u16 green; - __u16 blue; - __u16 reserved; -}; - -/** - * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data. - * - * HDR Metadata Infoframe as per CTA 861.G spec. This is expected - * to match exactly with the spec. - * - * Userspace is expected to pass the metadata information as per - * the format described in this structure. - */ -struct hdr_metadata_infoframe { - /** - * @eotf: Electro-Optical Transfer Function (EOTF) - * used in the stream. - */ - __u8 eotf; - /** - * @metadata_type: Static_Metadata_Descriptor_ID. - */ - __u8 metadata_type; - /** - * @display_primaries: Color Primaries of the Data. - * These are coded as unsigned 16-bit values in units of - * 0.00002, where 0x0000 represents zero and 0xC350 - * represents 1.0000. - * @display_primaries.x: X cordinate of color primary. - * @display_primaries.y: Y cordinate of color primary. - */ - struct { - __u16 x, y; - } display_primaries[3]; - /** - * @white_point: White Point of Colorspace Data. - * These are coded as unsigned 16-bit values in units of - * 0.00002, where 0x0000 represents zero and 0xC350 - * represents 1.0000. - * @white_point.x: X cordinate of whitepoint of color primary. - * @white_point.y: Y cordinate of whitepoint of color primary. - */ - struct { - __u16 x, y; - } white_point; - /** - * @max_display_mastering_luminance: Max Mastering Display Luminance. - * This value is coded as an unsigned 16-bit value in units of 1 cd/m2, - * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2. - */ - __u16 max_display_mastering_luminance; - /** - * @min_display_mastering_luminance: Min Mastering Display Luminance. - * This value is coded as an unsigned 16-bit value in units of - * 0.0001 cd/m2, where 0x0001 represents 0.0001 cd/m2 and 0xFFFF - * represents 6.5535 cd/m2. - */ - __u16 min_display_mastering_luminance; - /** - * @max_cll: Max Content Light Level. - * This value is coded as an unsigned 16-bit value in units of 1 cd/m2, - * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2. - */ - __u16 max_cll; - /** - * @max_fall: Max Frame Average Light Level. - * This value is coded as an unsigned 16-bit value in units of 1 cd/m2, - * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2. - */ - __u16 max_fall; -}; - -/** - * struct hdr_output_metadata - HDR output metadata - * - * Metadata Information to be passed from userspace - */ -struct hdr_output_metadata { - /** - * @metadata_type: Static_Metadata_Descriptor_ID. - */ - __u32 metadata_type; - /** - * @hdmi_metadata_type1: HDR Metadata Infoframe. - */ - union { - struct hdr_metadata_infoframe hdmi_metadata_type1; - }; -}; - -#define DRM_MODE_PAGE_FLIP_EVENT 0x01 -#define DRM_MODE_PAGE_FLIP_ASYNC 0x02 -#define DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE 0x4 -#define DRM_MODE_PAGE_FLIP_TARGET_RELATIVE 0x8 -#define DRM_MODE_PAGE_FLIP_TARGET (DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE | \ - DRM_MODE_PAGE_FLIP_TARGET_RELATIVE) -#define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT | \ - DRM_MODE_PAGE_FLIP_ASYNC | \ - DRM_MODE_PAGE_FLIP_TARGET) - -/* - * Request a page flip on the specified crtc. - * - * This ioctl will ask KMS to schedule a page flip for the specified - * crtc. Once any pending rendering targeting the specified fb (as of - * ioctl time) has completed, the crtc will be reprogrammed to display - * that fb after the next vertical refresh. The ioctl returns - * immediately, but subsequent rendering to the current fb will block - * in the execbuffer ioctl until the page flip happens. If a page - * flip is already pending as the ioctl is called, EBUSY will be - * returned. - * - * Flag DRM_MODE_PAGE_FLIP_EVENT requests that drm sends back a vblank - * event (see drm.h: struct drm_event_vblank) when the page flip is - * done. The user_data field passed in with this ioctl will be - * returned as the user_data field in the vblank event struct. - * - * Flag DRM_MODE_PAGE_FLIP_ASYNC requests that the flip happen - * 'as soon as possible', meaning that it not delay waiting for vblank. - * This may cause tearing on the screen. - * - * The reserved field must be zero. - */ - -struct drm_mode_crtc_page_flip { - __u32 crtc_id; - __u32 fb_id; - __u32 flags; - __u32 reserved; - __u64 user_data; -}; - -/* - * Request a page flip on the specified crtc. - * - * Same as struct drm_mode_crtc_page_flip, but supports new flags and - * re-purposes the reserved field: - * - * The sequence field must be zero unless either of the - * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is specified. When - * the ABSOLUTE flag is specified, the sequence field denotes the absolute - * vblank sequence when the flip should take effect. When the RELATIVE - * flag is specified, the sequence field denotes the relative (to the - * current one when the ioctl is called) vblank sequence when the flip - * should take effect. NOTE: DRM_IOCTL_WAIT_VBLANK must still be used to - * make sure the vblank sequence before the target one has passed before - * calling this ioctl. The purpose of the - * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is merely to clarify - * the target for when code dealing with a page flip runs during a - * vertical blank period. - */ - -struct drm_mode_crtc_page_flip_target { - __u32 crtc_id; - __u32 fb_id; - __u32 flags; - __u32 sequence; - __u64 user_data; -}; - -/* create a dumb scanout buffer */ -struct drm_mode_create_dumb { - __u32 height; - __u32 width; - __u32 bpp; - __u32 flags; - /* handle, pitch, size will be returned */ - __u32 handle; - __u32 pitch; - __u64 size; -}; - -/* set up for mmap of a dumb scanout buffer */ -struct drm_mode_map_dumb { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 pad; - /** - * Fake offset to use for subsequent mmap call - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 offset; -}; - -struct drm_mode_destroy_dumb { - __u32 handle; -}; - -/* page-flip flags are valid, plus: */ -#define DRM_MODE_ATOMIC_TEST_ONLY 0x0100 -#define DRM_MODE_ATOMIC_NONBLOCK 0x0200 -#define DRM_MODE_ATOMIC_ALLOW_MODESET 0x0400 - -#define DRM_MODE_ATOMIC_FLAGS (\ - DRM_MODE_PAGE_FLIP_EVENT |\ - DRM_MODE_PAGE_FLIP_ASYNC |\ - DRM_MODE_ATOMIC_TEST_ONLY |\ - DRM_MODE_ATOMIC_NONBLOCK |\ - DRM_MODE_ATOMIC_ALLOW_MODESET) - -struct drm_mode_atomic { - __u32 flags; - __u32 count_objs; - __u64 objs_ptr; - __u64 count_props_ptr; - __u64 props_ptr; - __u64 prop_values_ptr; - __u64 reserved; - __u64 user_data; -}; - -struct drm_format_modifier_blob { -#define FORMAT_BLOB_CURRENT 1 - /* Version of this blob format */ - __u32 version; - - /* Flags */ - __u32 flags; - - /* Number of fourcc formats supported */ - __u32 count_formats; - - /* Where in this blob the formats exist (in bytes) */ - __u32 formats_offset; - - /* Number of drm_format_modifiers */ - __u32 count_modifiers; - - /* Where in this blob the modifiers exist (in bytes) */ - __u32 modifiers_offset; - - /* __u32 formats[] */ - /* struct drm_format_modifier modifiers[] */ -}; - -struct drm_format_modifier { - /* Bitmask of formats in get_plane format list this info applies to. The - * offset allows a sliding window of which 64 formats (bits). - * - * Some examples: - * In today's world with < 65 formats, and formats 0, and 2 are - * supported - * 0x0000000000000005 - * ^-offset = 0, formats = 5 - * - * If the number formats grew to 128, and formats 98-102 are - * supported with the modifier: - * - * 0x0000007c00000000 0000000000000000 - * ^ - * |__offset = 64, formats = 0x7c00000000 - * - */ - __u64 formats; - __u32 offset; - __u32 pad; - - /* The modifier that applies to the >get_plane format list bitmask. */ - __u64 modifier; -}; - -/** - * struct drm_mode_create_blob - Create New blob property - * - * Create a new 'blob' data property, copying length bytes from data pointer, - * and returning new blob ID. - */ -struct drm_mode_create_blob { - /** @data: Pointer to data to copy. */ - __u64 data; - /** @length: Length of data to copy. */ - __u32 length; - /** @blob_id: Return: new property ID. */ - __u32 blob_id; -}; - -/** - * struct drm_mode_destroy_blob - Destroy user blob - * @blob_id: blob_id to destroy - * - * Destroy a user-created blob property. - * - * User-space can release blobs as soon as they do not need to refer to them by - * their blob object ID. For instance, if you are using a MODE_ID blob in an - * atomic commit and you will not make another commit re-using the same ID, you - * can destroy the blob as soon as the commit has been issued, without waiting - * for it to complete. - */ -struct drm_mode_destroy_blob { - __u32 blob_id; -}; - -/** - * struct drm_mode_create_lease - Create lease - * - * Lease mode resources, creating another drm_master. - */ -struct drm_mode_create_lease { - /** @object_ids: Pointer to array of object ids (__u32) */ - __u64 object_ids; - /** @object_count: Number of object ids */ - __u32 object_count; - /** @flags: flags for new FD (O_CLOEXEC, etc) */ - __u32 flags; - - /** @lessee_id: Return: unique identifier for lessee. */ - __u32 lessee_id; - /** @fd: Return: file descriptor to new drm_master file */ - __u32 fd; -}; - -/** - * struct drm_mode_list_lessees - List lessees - * - * List lesses from a drm_master. - */ -struct drm_mode_list_lessees { - /** - * @count_lessees: Number of lessees. - * - * On input, provides length of the array. - * On output, provides total number. No - * more than the input number will be written - * back, so two calls can be used to get - * the size and then the data. - */ - __u32 count_lessees; - /** @pad: Padding. */ - __u32 pad; - - /** - * @lessees_ptr: Pointer to lessees. - * - * Pointer to __u64 array of lessee ids - */ - __u64 lessees_ptr; -}; - -/** - * struct drm_mode_get_lease - Get Lease - * - * Get leased objects. - */ -struct drm_mode_get_lease { - /** - * @count_objects: Number of leased objects. - * - * On input, provides length of the array. - * On output, provides total number. No - * more than the input number will be written - * back, so two calls can be used to get - * the size and then the data. - */ - __u32 count_objects; - /** @pad: Padding. */ - __u32 pad; - - /** - * @objects_ptr: Pointer to objects. - * - * Pointer to __u32 array of object ids. - */ - __u64 objects_ptr; -}; - -/** - * struct drm_mode_revoke_lease - Revoke lease - */ -struct drm_mode_revoke_lease { - /** @lessee_id: Unique ID of lessee */ - __u32 lessee_id; -}; - -/** - * struct drm_mode_rect - Two dimensional rectangle. - * @x1: Horizontal starting coordinate (inclusive). - * @y1: Vertical starting coordinate (inclusive). - * @x2: Horizontal ending coordinate (exclusive). - * @y2: Vertical ending coordinate (exclusive). - * - * With drm subsystem using struct drm_rect to manage rectangular area this - * export it to user-space. - * - * Currently used by drm_mode_atomic blob property FB_DAMAGE_CLIPS. - */ -struct drm_mode_rect { - __s32 x1; - __s32 y1; - __s32 x2; - __s32 y2; -}; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/libdrm/drm_sarea.h b/prebuilts/aarch64/include/libdrm/drm_sarea.h deleted file mode 100644 index 93025be..0000000 --- a/prebuilts/aarch64/include/libdrm/drm_sarea.h +++ /dev/null @@ -1,92 +0,0 @@ -/** - * \file drm_sarea.h - * \brief SAREA definitions - * - * \author Michel Dänzer - */ - -/* - * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef _DRM_SAREA_H_ -#define _DRM_SAREA_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* SAREA area needs to be at least a page */ -#if defined(__alpha__) -#define SAREA_MAX 0x2000U -#elif defined(__mips__) -#define SAREA_MAX 0x4000U -#elif defined(__ia64__) -#define SAREA_MAX 0x10000U /* 64kB */ -#else -/* Intel 830M driver needs at least 8k SAREA */ -#define SAREA_MAX 0x2000U -#endif - -/** Maximum number of drawables in the SAREA */ -#define SAREA_MAX_DRAWABLES 256 - -#define SAREA_DRAWABLE_CLAIMED_ENTRY 0x80000000 - -/** SAREA drawable */ -struct drm_sarea_drawable { - unsigned int stamp; - unsigned int flags; -}; - -/** SAREA frame */ -struct drm_sarea_frame { - unsigned int x; - unsigned int y; - unsigned int width; - unsigned int height; - unsigned int fullscreen; -}; - -/** SAREA */ -struct drm_sarea { - /** first thing is always the DRM locking structure */ - struct drm_hw_lock lock; - /** \todo Use readers/writer lock for drm_sarea::drawable_lock */ - struct drm_hw_lock drawable_lock; - struct drm_sarea_drawable drawableTable[SAREA_MAX_DRAWABLES]; /**< drawables */ - struct drm_sarea_frame frame; /**< frame */ - drm_context_t dummy_context; -}; - -typedef struct drm_sarea_drawable drm_sarea_drawable_t; -typedef struct drm_sarea_frame drm_sarea_frame_t; -typedef struct drm_sarea drm_sarea_t; - -#if defined(__cplusplus) -} -#endif - -#endif /* _DRM_SAREA_H_ */ diff --git a/prebuilts/aarch64/include/libdrm/i915_drm.h b/prebuilts/aarch64/include/libdrm/i915_drm.h deleted file mode 100644 index 72afd94..0000000 --- a/prebuilts/aarch64/include/libdrm/i915_drm.h +++ /dev/null @@ -1,1915 +0,0 @@ -/* - * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ - -#ifndef _I915_DRM_H_ -#define _I915_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints. - */ - -/** - * DOC: uevents generated by i915 on it's device node - * - * I915_L3_PARITY_UEVENT - Generated when the driver receives a parity mismatch - * event from the gpu l3 cache. Additional information supplied is ROW, - * BANK, SUBBANK, SLICE of the affected cacheline. Userspace should keep - * track of these events and if a specific cache-line seems to have a - * persistent error remap it with the l3 remapping tool supplied in - * intel-gpu-tools. The value supplied with the event is always 1. - * - * I915_ERROR_UEVENT - Generated upon error detection, currently only via - * hangcheck. The error detection event is a good indicator of when things - * began to go badly. The value supplied with the event is a 1 upon error - * detection, and a 0 upon reset completion, signifying no more error - * exists. NOTE: Disabling hangcheck or reset via module parameter will - * cause the related events to not be seen. - * - * I915_RESET_UEVENT - Event is generated just before an attempt to reset the - * the GPU. The value supplied with the event is always 1. NOTE: Disable - * reset via module parameter will cause this event to not be seen. - */ -#define I915_L3_PARITY_UEVENT "L3_PARITY_ERROR" -#define I915_ERROR_UEVENT "ERROR" -#define I915_RESET_UEVENT "RESET" - -/* - * i915_user_extension: Base class for defining a chain of extensions - * - * Many interfaces need to grow over time. In most cases we can simply - * extend the struct and have userspace pass in more data. Another option, - * as demonstrated by Vulkan's approach to providing extensions for forward - * and backward compatibility, is to use a list of optional structs to - * provide those extra details. - * - * The key advantage to using an extension chain is that it allows us to - * redefine the interface more easily than an ever growing struct of - * increasing complexity, and for large parts of that interface to be - * entirely optional. The downside is more pointer chasing; chasing across - * the boundary with pointers encapsulated inside u64. - */ -struct i915_user_extension { - __u64 next_extension; - __u32 name; - __u32 flags; /* All undefined bits must be zero. */ - __u32 rsvd[4]; /* Reserved for future use; must be zero. */ -}; - -/* - * MOCS indexes used for GPU surfaces, defining the cacheability of the - * surface data and the coherency for this data wrt. CPU vs. GPU accesses. - */ -enum i915_mocs_table_index { - /* - * Not cached anywhere, coherency between CPU and GPU accesses is - * guaranteed. - */ - I915_MOCS_UNCACHED, - /* - * Cacheability and coherency controlled by the kernel automatically - * based on the DRM_I915_GEM_SET_CACHING IOCTL setting and the current - * usage of the surface (used for display scanout or not). - */ - I915_MOCS_PTE, - /* - * Cached in all GPU caches available on the platform. - * Coherency between CPU and GPU accesses to the surface is not - * guaranteed without extra synchronization. - */ - I915_MOCS_CACHED, -}; - -/* - * Different engines serve different roles, and there may be more than one - * engine serving each role. enum drm_i915_gem_engine_class provides a - * classification of the role of the engine, which may be used when requesting - * operations to be performed on a certain subset of engines, or for providing - * information about that group. - */ -enum drm_i915_gem_engine_class { - I915_ENGINE_CLASS_RENDER = 0, - I915_ENGINE_CLASS_COPY = 1, - I915_ENGINE_CLASS_VIDEO = 2, - I915_ENGINE_CLASS_VIDEO_ENHANCE = 3, - - /* should be kept compact */ - - I915_ENGINE_CLASS_INVALID = -1 -}; - -/** - * DOC: perf_events exposed by i915 through /sys/bus/event_sources/drivers/i915 - * - */ - -enum drm_i915_pmu_engine_sample { - I915_SAMPLE_BUSY = 0, - I915_SAMPLE_WAIT = 1, - I915_SAMPLE_SEMA = 2 -}; - -#define I915_PMU_SAMPLE_BITS (4) -#define I915_PMU_SAMPLE_MASK (0xf) -#define I915_PMU_SAMPLE_INSTANCE_BITS (8) -#define I915_PMU_CLASS_SHIFT \ - (I915_PMU_SAMPLE_BITS + I915_PMU_SAMPLE_INSTANCE_BITS) - -#define __I915_PMU_ENGINE(class, instance, sample) \ - ((class) << I915_PMU_CLASS_SHIFT | \ - (instance) << I915_PMU_SAMPLE_BITS | \ - (sample)) - -#define I915_PMU_ENGINE_BUSY(class, instance) \ - __I915_PMU_ENGINE(class, instance, I915_SAMPLE_BUSY) - -#define I915_PMU_ENGINE_WAIT(class, instance) \ - __I915_PMU_ENGINE(class, instance, I915_SAMPLE_WAIT) - -#define I915_PMU_ENGINE_SEMA(class, instance) \ - __I915_PMU_ENGINE(class, instance, I915_SAMPLE_SEMA) - -#define __I915_PMU_OTHER(x) (__I915_PMU_ENGINE(0xff, 0xff, 0xf) + 1 + (x)) - -#define I915_PMU_ACTUAL_FREQUENCY __I915_PMU_OTHER(0) -#define I915_PMU_REQUESTED_FREQUENCY __I915_PMU_OTHER(1) -#define I915_PMU_INTERRUPTS __I915_PMU_OTHER(2) -#define I915_PMU_RC6_RESIDENCY __I915_PMU_OTHER(3) - -#define I915_PMU_LAST I915_PMU_RC6_RESIDENCY - -/* Each region is a minimum of 16k, and there are at most 255 of them. - */ -#define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use - * of chars for next/prev indices */ -#define I915_LOG_MIN_TEX_REGION_SIZE 14 - -typedef struct _drm_i915_init { - enum { - I915_INIT_DMA = 0x01, - I915_CLEANUP_DMA = 0x02, - I915_RESUME_DMA = 0x03 - } func; - unsigned int mmio_offset; - int sarea_priv_offset; - unsigned int ring_start; - unsigned int ring_end; - unsigned int ring_size; - unsigned int front_offset; - unsigned int back_offset; - unsigned int depth_offset; - unsigned int w; - unsigned int h; - unsigned int pitch; - unsigned int pitch_bits; - unsigned int back_pitch; - unsigned int depth_pitch; - unsigned int cpp; - unsigned int chipset; -} drm_i915_init_t; - -typedef struct _drm_i915_sarea { - struct drm_tex_region texList[I915_NR_TEX_REGIONS + 1]; - int last_upload; /* last time texture was uploaded */ - int last_enqueue; /* last time a buffer was enqueued */ - int last_dispatch; /* age of the most recently dispatched buffer */ - int ctxOwner; /* last context to upload state */ - int texAge; - int pf_enabled; /* is pageflipping allowed? */ - int pf_active; - int pf_current_page; /* which buffer is being displayed? */ - int perf_boxes; /* performance boxes to be displayed */ - int width, height; /* screen size in pixels */ - - drm_handle_t front_handle; - int front_offset; - int front_size; - - drm_handle_t back_handle; - int back_offset; - int back_size; - - drm_handle_t depth_handle; - int depth_offset; - int depth_size; - - drm_handle_t tex_handle; - int tex_offset; - int tex_size; - int log_tex_granularity; - int pitch; - int rotation; /* 0, 90, 180 or 270 */ - int rotated_offset; - int rotated_size; - int rotated_pitch; - int virtualX, virtualY; - - unsigned int front_tiled; - unsigned int back_tiled; - unsigned int depth_tiled; - unsigned int rotated_tiled; - unsigned int rotated2_tiled; - - int pipeA_x; - int pipeA_y; - int pipeA_w; - int pipeA_h; - int pipeB_x; - int pipeB_y; - int pipeB_w; - int pipeB_h; - - /* fill out some space for old userspace triple buffer */ - drm_handle_t unused_handle; - __u32 unused1, unused2, unused3; - - /* buffer object handles for static buffers. May change - * over the lifetime of the client. - */ - __u32 front_bo_handle; - __u32 back_bo_handle; - __u32 unused_bo_handle; - __u32 depth_bo_handle; - -} drm_i915_sarea_t; - -/* due to userspace building against these headers we need some compat here */ -#define planeA_x pipeA_x -#define planeA_y pipeA_y -#define planeA_w pipeA_w -#define planeA_h pipeA_h -#define planeB_x pipeB_x -#define planeB_y pipeB_y -#define planeB_w pipeB_w -#define planeB_h pipeB_h - -/* Flags for perf_boxes - */ -#define I915_BOX_RING_EMPTY 0x1 -#define I915_BOX_FLIP 0x2 -#define I915_BOX_WAIT 0x4 -#define I915_BOX_TEXTURE_LOAD 0x8 -#define I915_BOX_LOST_CONTEXT 0x10 - -/* - * i915 specific ioctls. - * - * The device specific ioctl range is [DRM_COMMAND_BASE, DRM_COMMAND_END) ie - * [0x40, 0xa0) (a0 is excluded). The numbers below are defined as offset - * against DRM_COMMAND_BASE and should be between [0x0, 0x60). - */ -#define DRM_I915_INIT 0x00 -#define DRM_I915_FLUSH 0x01 -#define DRM_I915_FLIP 0x02 -#define DRM_I915_BATCHBUFFER 0x03 -#define DRM_I915_IRQ_EMIT 0x04 -#define DRM_I915_IRQ_WAIT 0x05 -#define DRM_I915_GETPARAM 0x06 -#define DRM_I915_SETPARAM 0x07 -#define DRM_I915_ALLOC 0x08 -#define DRM_I915_FREE 0x09 -#define DRM_I915_INIT_HEAP 0x0a -#define DRM_I915_CMDBUFFER 0x0b -#define DRM_I915_DESTROY_HEAP 0x0c -#define DRM_I915_SET_VBLANK_PIPE 0x0d -#define DRM_I915_GET_VBLANK_PIPE 0x0e -#define DRM_I915_VBLANK_SWAP 0x0f -#define DRM_I915_HWS_ADDR 0x11 -#define DRM_I915_GEM_INIT 0x13 -#define DRM_I915_GEM_EXECBUFFER 0x14 -#define DRM_I915_GEM_PIN 0x15 -#define DRM_I915_GEM_UNPIN 0x16 -#define DRM_I915_GEM_BUSY 0x17 -#define DRM_I915_GEM_THROTTLE 0x18 -#define DRM_I915_GEM_ENTERVT 0x19 -#define DRM_I915_GEM_LEAVEVT 0x1a -#define DRM_I915_GEM_CREATE 0x1b -#define DRM_I915_GEM_PREAD 0x1c -#define DRM_I915_GEM_PWRITE 0x1d -#define DRM_I915_GEM_MMAP 0x1e -#define DRM_I915_GEM_SET_DOMAIN 0x1f -#define DRM_I915_GEM_SW_FINISH 0x20 -#define DRM_I915_GEM_SET_TILING 0x21 -#define DRM_I915_GEM_GET_TILING 0x22 -#define DRM_I915_GEM_GET_APERTURE 0x23 -#define DRM_I915_GEM_MMAP_GTT 0x24 -#define DRM_I915_GET_PIPE_FROM_CRTC_ID 0x25 -#define DRM_I915_GEM_MADVISE 0x26 -#define DRM_I915_OVERLAY_PUT_IMAGE 0x27 -#define DRM_I915_OVERLAY_ATTRS 0x28 -#define DRM_I915_GEM_EXECBUFFER2 0x29 -#define DRM_I915_GEM_EXECBUFFER2_WR DRM_I915_GEM_EXECBUFFER2 -#define DRM_I915_GET_SPRITE_COLORKEY 0x2a -#define DRM_I915_SET_SPRITE_COLORKEY 0x2b -#define DRM_I915_GEM_WAIT 0x2c -#define DRM_I915_GEM_CONTEXT_CREATE 0x2d -#define DRM_I915_GEM_CONTEXT_DESTROY 0x2e -#define DRM_I915_GEM_SET_CACHING 0x2f -#define DRM_I915_GEM_GET_CACHING 0x30 -#define DRM_I915_REG_READ 0x31 -#define DRM_I915_GET_RESET_STATS 0x32 -#define DRM_I915_GEM_USERPTR 0x33 -#define DRM_I915_GEM_CONTEXT_GETPARAM 0x34 -#define DRM_I915_GEM_CONTEXT_SETPARAM 0x35 -#define DRM_I915_PERF_OPEN 0x36 -#define DRM_I915_PERF_ADD_CONFIG 0x37 -#define DRM_I915_PERF_REMOVE_CONFIG 0x38 -#define DRM_I915_QUERY 0x39 -/* Must be kept compact -- no holes */ - -#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t) -#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) -#define DRM_IOCTL_I915_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP) -#define DRM_IOCTL_I915_BATCHBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t) -#define DRM_IOCTL_I915_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t) -#define DRM_IOCTL_I915_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t) -#define DRM_IOCTL_I915_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t) -#define DRM_IOCTL_I915_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t) -#define DRM_IOCTL_I915_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t) -#define DRM_IOCTL_I915_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t) -#define DRM_IOCTL_I915_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t) -#define DRM_IOCTL_I915_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t) -#define DRM_IOCTL_I915_DESTROY_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_DESTROY_HEAP, drm_i915_mem_destroy_heap_t) -#define DRM_IOCTL_I915_SET_VBLANK_PIPE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t) -#define DRM_IOCTL_I915_GET_VBLANK_PIPE DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t) -#define DRM_IOCTL_I915_VBLANK_SWAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t) -#define DRM_IOCTL_I915_HWS_ADDR DRM_IOW(DRM_COMMAND_BASE + DRM_I915_HWS_ADDR, struct drm_i915_gem_init) -#define DRM_IOCTL_I915_GEM_INIT DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_INIT, struct drm_i915_gem_init) -#define DRM_IOCTL_I915_GEM_EXECBUFFER DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER, struct drm_i915_gem_execbuffer) -#define DRM_IOCTL_I915_GEM_EXECBUFFER2 DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2, struct drm_i915_gem_execbuffer2) -#define DRM_IOCTL_I915_GEM_EXECBUFFER2_WR DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2_WR, struct drm_i915_gem_execbuffer2) -#define DRM_IOCTL_I915_GEM_PIN DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_PIN, struct drm_i915_gem_pin) -#define DRM_IOCTL_I915_GEM_UNPIN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_UNPIN, struct drm_i915_gem_unpin) -#define DRM_IOCTL_I915_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_BUSY, struct drm_i915_gem_busy) -#define DRM_IOCTL_I915_GEM_SET_CACHING DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_SET_CACHING, struct drm_i915_gem_caching) -#define DRM_IOCTL_I915_GEM_GET_CACHING DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_GET_CACHING, struct drm_i915_gem_caching) -#define DRM_IOCTL_I915_GEM_THROTTLE DRM_IO ( DRM_COMMAND_BASE + DRM_I915_GEM_THROTTLE) -#define DRM_IOCTL_I915_GEM_ENTERVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT) -#define DRM_IOCTL_I915_GEM_LEAVEVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT) -#define DRM_IOCTL_I915_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE, struct drm_i915_gem_create) -#define DRM_IOCTL_I915_GEM_PREAD DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PREAD, struct drm_i915_gem_pread) -#define DRM_IOCTL_I915_GEM_PWRITE DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite) -#define DRM_IOCTL_I915_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap) -#define DRM_IOCTL_I915_GEM_MMAP_GTT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP_GTT, struct drm_i915_gem_mmap_gtt) -#define DRM_IOCTL_I915_GEM_SET_DOMAIN DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SET_DOMAIN, struct drm_i915_gem_set_domain) -#define DRM_IOCTL_I915_GEM_SW_FINISH DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SW_FINISH, struct drm_i915_gem_sw_finish) -#define DRM_IOCTL_I915_GEM_SET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling) -#define DRM_IOCTL_I915_GEM_GET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling) -#define DRM_IOCTL_I915_GEM_GET_APERTURE DRM_IOR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture) -#define DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_PIPE_FROM_CRTC_ID, struct drm_i915_get_pipe_from_crtc_id) -#define DRM_IOCTL_I915_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MADVISE, struct drm_i915_gem_madvise) -#define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE DRM_IOW(DRM_COMMAND_BASE + DRM_I915_OVERLAY_PUT_IMAGE, struct drm_intel_overlay_put_image) -#define DRM_IOCTL_I915_OVERLAY_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_OVERLAY_ATTRS, struct drm_intel_overlay_attrs) -#define DRM_IOCTL_I915_SET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_SET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey) -#define DRM_IOCTL_I915_GET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey) -#define DRM_IOCTL_I915_GEM_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_WAIT, struct drm_i915_gem_wait) -#define DRM_IOCTL_I915_GEM_CONTEXT_CREATE DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create) -#define DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create_ext) -#define DRM_IOCTL_I915_GEM_CONTEXT_DESTROY DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_DESTROY, struct drm_i915_gem_context_destroy) -#define DRM_IOCTL_I915_REG_READ DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_REG_READ, struct drm_i915_reg_read) -#define DRM_IOCTL_I915_GET_RESET_STATS DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GET_RESET_STATS, struct drm_i915_reset_stats) -#define DRM_IOCTL_I915_GEM_USERPTR DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_USERPTR, struct drm_i915_gem_userptr) -#define DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_GETPARAM, struct drm_i915_gem_context_param) -#define DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_SETPARAM, struct drm_i915_gem_context_param) -#define DRM_IOCTL_I915_PERF_OPEN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_OPEN, struct drm_i915_perf_open_param) -#define DRM_IOCTL_I915_PERF_ADD_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config) -#define DRM_IOCTL_I915_PERF_REMOVE_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64) -#define DRM_IOCTL_I915_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_QUERY, struct drm_i915_query) - -/* Allow drivers to submit batchbuffers directly to hardware, relying - * on the security mechanisms provided by hardware. - */ -typedef struct drm_i915_batchbuffer { - int start; /* agp offset */ - int used; /* nr bytes in use */ - int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ - int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ - int num_cliprects; /* mulitpass with multiple cliprects? */ - struct drm_clip_rect *cliprects; /* pointer to userspace cliprects */ -} drm_i915_batchbuffer_t; - -/* As above, but pass a pointer to userspace buffer which can be - * validated by the kernel prior to sending to hardware. - */ -typedef struct _drm_i915_cmdbuffer { - char *buf; /* pointer to userspace command buffer */ - int sz; /* nr bytes in buf */ - int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ - int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ - int num_cliprects; /* mulitpass with multiple cliprects? */ - struct drm_clip_rect *cliprects; /* pointer to userspace cliprects */ -} drm_i915_cmdbuffer_t; - -/* Userspace can request & wait on irq's: - */ -typedef struct drm_i915_irq_emit { - int *irq_seq; -} drm_i915_irq_emit_t; - -typedef struct drm_i915_irq_wait { - int irq_seq; -} drm_i915_irq_wait_t; - -/* - * Different modes of per-process Graphics Translation Table, - * see I915_PARAM_HAS_ALIASING_PPGTT - */ -#define I915_GEM_PPGTT_NONE 0 -#define I915_GEM_PPGTT_ALIASING 1 -#define I915_GEM_PPGTT_FULL 2 - -/* Ioctl to query kernel params: - */ -#define I915_PARAM_IRQ_ACTIVE 1 -#define I915_PARAM_ALLOW_BATCHBUFFER 2 -#define I915_PARAM_LAST_DISPATCH 3 -#define I915_PARAM_CHIPSET_ID 4 -#define I915_PARAM_HAS_GEM 5 -#define I915_PARAM_NUM_FENCES_AVAIL 6 -#define I915_PARAM_HAS_OVERLAY 7 -#define I915_PARAM_HAS_PAGEFLIPPING 8 -#define I915_PARAM_HAS_EXECBUF2 9 -#define I915_PARAM_HAS_BSD 10 -#define I915_PARAM_HAS_BLT 11 -#define I915_PARAM_HAS_RELAXED_FENCING 12 -#define I915_PARAM_HAS_COHERENT_RINGS 13 -#define I915_PARAM_HAS_EXEC_CONSTANTS 14 -#define I915_PARAM_HAS_RELAXED_DELTA 15 -#define I915_PARAM_HAS_GEN7_SOL_RESET 16 -#define I915_PARAM_HAS_LLC 17 -#define I915_PARAM_HAS_ALIASING_PPGTT 18 -#define I915_PARAM_HAS_WAIT_TIMEOUT 19 -#define I915_PARAM_HAS_SEMAPHORES 20 -#define I915_PARAM_HAS_PRIME_VMAP_FLUSH 21 -#define I915_PARAM_HAS_VEBOX 22 -#define I915_PARAM_HAS_SECURE_BATCHES 23 -#define I915_PARAM_HAS_PINNED_BATCHES 24 -#define I915_PARAM_HAS_EXEC_NO_RELOC 25 -#define I915_PARAM_HAS_EXEC_HANDLE_LUT 26 -#define I915_PARAM_HAS_WT 27 -#define I915_PARAM_CMD_PARSER_VERSION 28 -#define I915_PARAM_HAS_COHERENT_PHYS_GTT 29 -#define I915_PARAM_MMAP_VERSION 30 -#define I915_PARAM_HAS_BSD2 31 -#define I915_PARAM_REVISION 32 -#define I915_PARAM_SUBSLICE_TOTAL 33 -#define I915_PARAM_EU_TOTAL 34 -#define I915_PARAM_HAS_GPU_RESET 35 -#define I915_PARAM_HAS_RESOURCE_STREAMER 36 -#define I915_PARAM_HAS_EXEC_SOFTPIN 37 -#define I915_PARAM_HAS_POOLED_EU 38 -#define I915_PARAM_MIN_EU_IN_POOL 39 -#define I915_PARAM_MMAP_GTT_VERSION 40 - -/* - * Query whether DRM_I915_GEM_EXECBUFFER2 supports user defined execution - * priorities and the driver will attempt to execute batches in priority order. - * The param returns a capability bitmask, nonzero implies that the scheduler - * is enabled, with different features present according to the mask. - * - * The initial priority for each batch is supplied by the context and is - * controlled via I915_CONTEXT_PARAM_PRIORITY. - */ -#define I915_PARAM_HAS_SCHEDULER 41 -#define I915_SCHEDULER_CAP_ENABLED (1ul << 0) -#define I915_SCHEDULER_CAP_PRIORITY (1ul << 1) -#define I915_SCHEDULER_CAP_PREEMPTION (1ul << 2) -#define I915_SCHEDULER_CAP_SEMAPHORES (1ul << 3) - -#define I915_PARAM_HUC_STATUS 42 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to opt-out of - * synchronisation with implicit fencing on individual objects. - * See EXEC_OBJECT_ASYNC. - */ -#define I915_PARAM_HAS_EXEC_ASYNC 43 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports explicit fence support - - * both being able to pass in a sync_file fd to wait upon before executing, - * and being able to return a new sync_file fd that is signaled when the - * current request is complete. See I915_EXEC_FENCE_IN and I915_EXEC_FENCE_OUT. - */ -#define I915_PARAM_HAS_EXEC_FENCE 44 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to capture - * user specified buffers for post-mortem debugging of GPU hangs. See - * EXEC_OBJECT_CAPTURE. - */ -#define I915_PARAM_HAS_EXEC_CAPTURE 45 - -#define I915_PARAM_SLICE_MASK 46 - -/* Assuming it's uniform for each slice, this queries the mask of subslices - * per-slice for this system. - */ -#define I915_PARAM_SUBSLICE_MASK 47 - -/* - * Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying the batch buffer - * as the first execobject as opposed to the last. See I915_EXEC_BATCH_FIRST. - */ -#define I915_PARAM_HAS_EXEC_BATCH_FIRST 48 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying an array of - * drm_i915_gem_exec_fence structures. See I915_EXEC_FENCE_ARRAY. - */ -#define I915_PARAM_HAS_EXEC_FENCE_ARRAY 49 - -/* - * Query whether every context (both per-file default and user created) is - * isolated (insofar as HW supports). If this parameter is not true, then - * freshly created contexts may inherit values from an existing context, - * rather than default HW values. If true, it also ensures (insofar as HW - * supports) that all state set by this context will not leak to any other - * context. - * - * As not every engine across every gen support contexts, the returned - * value reports the support of context isolation for individual engines by - * returning a bitmask of each engine class set to true if that class supports - * isolation. - */ -#define I915_PARAM_HAS_CONTEXT_ISOLATION 50 - -/* Frequency of the command streamer timestamps given by the *_TIMESTAMP - * registers. This used to be fixed per platform but from CNL onwards, this - * might vary depending on the parts. - */ -#define I915_PARAM_CS_TIMESTAMP_FREQUENCY 51 - -/* - * Once upon a time we supposed that writes through the GGTT would be - * immediately in physical memory (once flushed out of the CPU path). However, - * on a few different processors and chipsets, this is not necessarily the case - * as the writes appear to be buffered internally. Thus a read of the backing - * storage (physical memory) via a different path (with different physical tags - * to the indirect write via the GGTT) will see stale values from before - * the GGTT write. Inside the kernel, we can for the most part keep track of - * the different read/write domains in use (e.g. set-domain), but the assumption - * of coherency is baked into the ABI, hence reporting its true state in this - * parameter. - * - * Reports true when writes via mmap_gtt are immediately visible following an - * lfence to flush the WCB. - * - * Reports false when writes via mmap_gtt are indeterminately delayed in an in - * internal buffer and are _not_ immediately visible to third parties accessing - * directly via mmap_cpu/mmap_wc. Use of mmap_gtt as part of an IPC - * communications channel when reporting false is strongly disadvised. - */ -#define I915_PARAM_MMAP_GTT_COHERENT 52 - -/* Must be kept compact -- no holes and well documented */ - -typedef struct drm_i915_getparam { - __s32 param; - /* - * WARNING: Using pointers instead of fixed-size u64 means we need to write - * compat32 code. Don't repeat this mistake. - */ - int *value; -} drm_i915_getparam_t; - -/* Ioctl to set kernel params: - */ -#define I915_SETPARAM_USE_MI_BATCHBUFFER_START 1 -#define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY 2 -#define I915_SETPARAM_ALLOW_BATCHBUFFER 3 -#define I915_SETPARAM_NUM_USED_FENCES 4 -/* Must be kept compact -- no holes */ - -typedef struct drm_i915_setparam { - int param; - int value; -} drm_i915_setparam_t; - -/* A memory manager for regions of shared memory: - */ -#define I915_MEM_REGION_AGP 1 - -typedef struct drm_i915_mem_alloc { - int region; - int alignment; - int size; - int *region_offset; /* offset from start of fb or agp */ -} drm_i915_mem_alloc_t; - -typedef struct drm_i915_mem_free { - int region; - int region_offset; -} drm_i915_mem_free_t; - -typedef struct drm_i915_mem_init_heap { - int region; - int size; - int start; -} drm_i915_mem_init_heap_t; - -/* Allow memory manager to be torn down and re-initialized (eg on - * rotate): - */ -typedef struct drm_i915_mem_destroy_heap { - int region; -} drm_i915_mem_destroy_heap_t; - -/* Allow X server to configure which pipes to monitor for vblank signals - */ -#define DRM_I915_VBLANK_PIPE_A 1 -#define DRM_I915_VBLANK_PIPE_B 2 - -typedef struct drm_i915_vblank_pipe { - int pipe; -} drm_i915_vblank_pipe_t; - -/* Schedule buffer swap at given vertical blank: - */ -typedef struct drm_i915_vblank_swap { - drm_drawable_t drawable; - enum drm_vblank_seq_type seqtype; - unsigned int sequence; -} drm_i915_vblank_swap_t; - -typedef struct drm_i915_hws_addr { - __u64 addr; -} drm_i915_hws_addr_t; - -struct drm_i915_gem_init { - /** - * Beginning offset in the GTT to be managed by the DRM memory - * manager. - */ - __u64 gtt_start; - /** - * Ending offset in the GTT to be managed by the DRM memory - * manager. - */ - __u64 gtt_end; -}; - -struct drm_i915_gem_create { - /** - * Requested size for the object. - * - * The (page-aligned) allocated size for the object will be returned. - */ - __u64 size; - /** - * Returned handle for the object. - * - * Object handles are nonzero. - */ - __u32 handle; - __u32 pad; -}; - -struct drm_i915_gem_pread { - /** Handle for the object being read. */ - __u32 handle; - __u32 pad; - /** Offset into the object to read from */ - __u64 offset; - /** Length of data to read */ - __u64 size; - /** - * Pointer to write the data into. - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 data_ptr; -}; - -struct drm_i915_gem_pwrite { - /** Handle for the object being written to. */ - __u32 handle; - __u32 pad; - /** Offset into the object to write to */ - __u64 offset; - /** Length of data to write */ - __u64 size; - /** - * Pointer to read the data from. - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 data_ptr; -}; - -struct drm_i915_gem_mmap { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 pad; - /** Offset in the object to map. */ - __u64 offset; - /** - * Length of data to map. - * - * The value will be page-aligned. - */ - __u64 size; - /** - * Returned pointer the data was mapped at. - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 addr_ptr; - - /** - * Flags for extended behaviour. - * - * Added in version 2. - */ - __u64 flags; -#define I915_MMAP_WC 0x1 -}; - -struct drm_i915_gem_mmap_gtt { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 pad; - /** - * Fake offset to use for subsequent mmap call - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 offset; -}; - -struct drm_i915_gem_set_domain { - /** Handle for the object */ - __u32 handle; - - /** New read domains */ - __u32 read_domains; - - /** New write domain */ - __u32 write_domain; -}; - -struct drm_i915_gem_sw_finish { - /** Handle for the object */ - __u32 handle; -}; - -struct drm_i915_gem_relocation_entry { - /** - * Handle of the buffer being pointed to by this relocation entry. - * - * It's appealing to make this be an index into the mm_validate_entry - * list to refer to the buffer, but this allows the driver to create - * a relocation list for state buffers and not re-write it per - * exec using the buffer. - */ - __u32 target_handle; - - /** - * Value to be added to the offset of the target buffer to make up - * the relocation entry. - */ - __u32 delta; - - /** Offset in the buffer the relocation entry will be written into */ - __u64 offset; - - /** - * Offset value of the target buffer that the relocation entry was last - * written as. - * - * If the buffer has the same offset as last time, we can skip syncing - * and writing the relocation. This value is written back out by - * the execbuffer ioctl when the relocation is written. - */ - __u64 presumed_offset; - - /** - * Target memory domains read by this operation. - */ - __u32 read_domains; - - /** - * Target memory domains written by this operation. - * - * Note that only one domain may be written by the whole - * execbuffer operation, so that where there are conflicts, - * the application will get -EINVAL back. - */ - __u32 write_domain; -}; - -/** @{ - * Intel memory domains - * - * Most of these just align with the various caches in - * the system and are used to flush and invalidate as - * objects end up cached in different domains. - */ -/** CPU cache */ -#define I915_GEM_DOMAIN_CPU 0x00000001 -/** Render cache, used by 2D and 3D drawing */ -#define I915_GEM_DOMAIN_RENDER 0x00000002 -/** Sampler cache, used by texture engine */ -#define I915_GEM_DOMAIN_SAMPLER 0x00000004 -/** Command queue, used to load batch buffers */ -#define I915_GEM_DOMAIN_COMMAND 0x00000008 -/** Instruction cache, used by shader programs */ -#define I915_GEM_DOMAIN_INSTRUCTION 0x00000010 -/** Vertex address cache */ -#define I915_GEM_DOMAIN_VERTEX 0x00000020 -/** GTT domain - aperture and scanout */ -#define I915_GEM_DOMAIN_GTT 0x00000040 -/** WC domain - uncached access */ -#define I915_GEM_DOMAIN_WC 0x00000080 -/** @} */ - -struct drm_i915_gem_exec_object { - /** - * User's handle for a buffer to be bound into the GTT for this - * operation. - */ - __u32 handle; - - /** Number of relocations to be performed on this buffer */ - __u32 relocation_count; - /** - * Pointer to array of struct drm_i915_gem_relocation_entry containing - * the relocations to be performed in this buffer. - */ - __u64 relocs_ptr; - - /** Required alignment in graphics aperture */ - __u64 alignment; - - /** - * Returned value of the updated offset of the object, for future - * presumed_offset writes. - */ - __u64 offset; -}; - -struct drm_i915_gem_execbuffer { - /** - * List of buffers to be validated with their relocations to be - * performend on them. - * - * This is a pointer to an array of struct drm_i915_gem_validate_entry. - * - * These buffers must be listed in an order such that all relocations - * a buffer is performing refer to buffers that have already appeared - * in the validate list. - */ - __u64 buffers_ptr; - __u32 buffer_count; - - /** Offset in the batchbuffer to start execution from. */ - __u32 batch_start_offset; - /** Bytes used in batchbuffer from batch_start_offset */ - __u32 batch_len; - __u32 DR1; - __u32 DR4; - __u32 num_cliprects; - /** This is a struct drm_clip_rect *cliprects */ - __u64 cliprects_ptr; -}; - -struct drm_i915_gem_exec_object2 { - /** - * User's handle for a buffer to be bound into the GTT for this - * operation. - */ - __u32 handle; - - /** Number of relocations to be performed on this buffer */ - __u32 relocation_count; - /** - * Pointer to array of struct drm_i915_gem_relocation_entry containing - * the relocations to be performed in this buffer. - */ - __u64 relocs_ptr; - - /** Required alignment in graphics aperture */ - __u64 alignment; - - /** - * When the EXEC_OBJECT_PINNED flag is specified this is populated by - * the user with the GTT offset at which this object will be pinned. - * When the I915_EXEC_NO_RELOC flag is specified this must contain the - * presumed_offset of the object. - * During execbuffer2 the kernel populates it with the value of the - * current GTT offset of the object, for future presumed_offset writes. - */ - __u64 offset; - -#define EXEC_OBJECT_NEEDS_FENCE (1<<0) -#define EXEC_OBJECT_NEEDS_GTT (1<<1) -#define EXEC_OBJECT_WRITE (1<<2) -#define EXEC_OBJECT_SUPPORTS_48B_ADDRESS (1<<3) -#define EXEC_OBJECT_PINNED (1<<4) -#define EXEC_OBJECT_PAD_TO_SIZE (1<<5) -/* The kernel implicitly tracks GPU activity on all GEM objects, and - * synchronises operations with outstanding rendering. This includes - * rendering on other devices if exported via dma-buf. However, sometimes - * this tracking is too coarse and the user knows better. For example, - * if the object is split into non-overlapping ranges shared between different - * clients or engines (i.e. suballocating objects), the implicit tracking - * by kernel assumes that each operation affects the whole object rather - * than an individual range, causing needless synchronisation between clients. - * The kernel will also forgo any CPU cache flushes prior to rendering from - * the object as the client is expected to be also handling such domain - * tracking. - * - * The kernel maintains the implicit tracking in order to manage resources - * used by the GPU - this flag only disables the synchronisation prior to - * rendering with this object in this execbuf. - * - * Opting out of implicit synhronisation requires the user to do its own - * explicit tracking to avoid rendering corruption. See, for example, - * I915_PARAM_HAS_EXEC_FENCE to order execbufs and execute them asynchronously. - */ -#define EXEC_OBJECT_ASYNC (1<<6) -/* Request that the contents of this execobject be copied into the error - * state upon a GPU hang involving this batch for post-mortem debugging. - * These buffers are recorded in no particular order as "user" in - * /sys/class/drm/cardN/error. Query I915_PARAM_HAS_EXEC_CAPTURE to see - * if the kernel supports this flag. - */ -#define EXEC_OBJECT_CAPTURE (1<<7) -/* All remaining bits are MBZ and RESERVED FOR FUTURE USE */ -#define __EXEC_OBJECT_UNKNOWN_FLAGS -(EXEC_OBJECT_CAPTURE<<1) - __u64 flags; - - union { - __u64 rsvd1; - __u64 pad_to_size; - }; - __u64 rsvd2; -}; - -struct drm_i915_gem_exec_fence { - /** - * User's handle for a drm_syncobj to wait on or signal. - */ - __u32 handle; - -#define I915_EXEC_FENCE_WAIT (1<<0) -#define I915_EXEC_FENCE_SIGNAL (1<<1) -#define __I915_EXEC_FENCE_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SIGNAL << 1)) - __u32 flags; -}; - -struct drm_i915_gem_execbuffer2 { - /** - * List of gem_exec_object2 structs - */ - __u64 buffers_ptr; - __u32 buffer_count; - - /** Offset in the batchbuffer to start execution from. */ - __u32 batch_start_offset; - /** Bytes used in batchbuffer from batch_start_offset */ - __u32 batch_len; - __u32 DR1; - __u32 DR4; - __u32 num_cliprects; - /** - * This is a struct drm_clip_rect *cliprects if I915_EXEC_FENCE_ARRAY - * is not set. If I915_EXEC_FENCE_ARRAY is set, then this is a - * struct drm_i915_gem_exec_fence *fences. - */ - __u64 cliprects_ptr; -#define I915_EXEC_RING_MASK (0x3f) -#define I915_EXEC_DEFAULT (0<<0) -#define I915_EXEC_RENDER (1<<0) -#define I915_EXEC_BSD (2<<0) -#define I915_EXEC_BLT (3<<0) -#define I915_EXEC_VEBOX (4<<0) - -/* Used for switching the constants addressing mode on gen4+ RENDER ring. - * Gen6+ only supports relative addressing to dynamic state (default) and - * absolute addressing. - * - * These flags are ignored for the BSD and BLT rings. - */ -#define I915_EXEC_CONSTANTS_MASK (3<<6) -#define I915_EXEC_CONSTANTS_REL_GENERAL (0<<6) /* default */ -#define I915_EXEC_CONSTANTS_ABSOLUTE (1<<6) -#define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) /* gen4/5 only */ - __u64 flags; - __u64 rsvd1; /* now used for context info */ - __u64 rsvd2; -}; - -/** Resets the SO write offset registers for transform feedback on gen7. */ -#define I915_EXEC_GEN7_SOL_RESET (1<<8) - -/** Request a privileged ("secure") batch buffer. Note only available for - * DRM_ROOT_ONLY | DRM_MASTER processes. - */ -#define I915_EXEC_SECURE (1<<9) - -/** Inform the kernel that the batch is and will always be pinned. This - * negates the requirement for a workaround to be performed to avoid - * an incoherent CS (such as can be found on 830/845). If this flag is - * not passed, the kernel will endeavour to make sure the batch is - * coherent with the CS before execution. If this flag is passed, - * userspace assumes the responsibility for ensuring the same. - */ -#define I915_EXEC_IS_PINNED (1<<10) - -/** Provide a hint to the kernel that the command stream and auxiliary - * state buffers already holds the correct presumed addresses and so the - * relocation process may be skipped if no buffers need to be moved in - * preparation for the execbuffer. - */ -#define I915_EXEC_NO_RELOC (1<<11) - -/** Use the reloc.handle as an index into the exec object array rather - * than as the per-file handle. - */ -#define I915_EXEC_HANDLE_LUT (1<<12) - -/** Used for switching BSD rings on the platforms with two BSD rings */ -#define I915_EXEC_BSD_SHIFT (13) -#define I915_EXEC_BSD_MASK (3 << I915_EXEC_BSD_SHIFT) -/* default ping-pong mode */ -#define I915_EXEC_BSD_DEFAULT (0 << I915_EXEC_BSD_SHIFT) -#define I915_EXEC_BSD_RING1 (1 << I915_EXEC_BSD_SHIFT) -#define I915_EXEC_BSD_RING2 (2 << I915_EXEC_BSD_SHIFT) - -/** Tell the kernel that the batchbuffer is processed by - * the resource streamer. - */ -#define I915_EXEC_RESOURCE_STREAMER (1<<15) - -/* Setting I915_EXEC_FENCE_IN implies that lower_32_bits(rsvd2) represent - * a sync_file fd to wait upon (in a nonblocking manner) prior to executing - * the batch. - * - * Returns -EINVAL if the sync_file fd cannot be found. - */ -#define I915_EXEC_FENCE_IN (1<<16) - -/* Setting I915_EXEC_FENCE_OUT causes the ioctl to return a sync_file fd - * in the upper_32_bits(rsvd2) upon success. Ownership of the fd is given - * to the caller, and it should be close() after use. (The fd is a regular - * file descriptor and will be cleaned up on process termination. It holds - * a reference to the request, but nothing else.) - * - * The sync_file fd can be combined with other sync_file and passed either - * to execbuf using I915_EXEC_FENCE_IN, to atomic KMS ioctls (so that a flip - * will only occur after this request completes), or to other devices. - * - * Using I915_EXEC_FENCE_OUT requires use of - * DRM_IOCTL_I915_GEM_EXECBUFFER2_WR ioctl so that the result is written - * back to userspace. Failure to do so will cause the out-fence to always - * be reported as zero, and the real fence fd to be leaked. - */ -#define I915_EXEC_FENCE_OUT (1<<17) - -/* - * Traditionally the execbuf ioctl has only considered the final element in - * the execobject[] to be the executable batch. Often though, the client - * will known the batch object prior to construction and being able to place - * it into the execobject[] array first can simplify the relocation tracking. - * Setting I915_EXEC_BATCH_FIRST tells execbuf to use element 0 of the - * execobject[] as the * batch instead (the default is to use the last - * element). - */ -#define I915_EXEC_BATCH_FIRST (1<<18) - -/* Setting I915_FENCE_ARRAY implies that num_cliprects and cliprects_ptr - * define an array of i915_gem_exec_fence structures which specify a set of - * dma fences to wait upon or signal. - */ -#define I915_EXEC_FENCE_ARRAY (1<<19) - -#define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_ARRAY<<1)) - -#define I915_EXEC_CONTEXT_ID_MASK (0xffffffff) -#define i915_execbuffer2_set_context_id(eb2, context) \ - (eb2).rsvd1 = context & I915_EXEC_CONTEXT_ID_MASK -#define i915_execbuffer2_get_context_id(eb2) \ - ((eb2).rsvd1 & I915_EXEC_CONTEXT_ID_MASK) - -struct drm_i915_gem_pin { - /** Handle of the buffer to be pinned. */ - __u32 handle; - __u32 pad; - - /** alignment required within the aperture */ - __u64 alignment; - - /** Returned GTT offset of the buffer. */ - __u64 offset; -}; - -struct drm_i915_gem_unpin { - /** Handle of the buffer to be unpinned. */ - __u32 handle; - __u32 pad; -}; - -struct drm_i915_gem_busy { - /** Handle of the buffer to check for busy */ - __u32 handle; - - /** Return busy status - * - * A return of 0 implies that the object is idle (after - * having flushed any pending activity), and a non-zero return that - * the object is still in-flight on the GPU. (The GPU has not yet - * signaled completion for all pending requests that reference the - * object.) An object is guaranteed to become idle eventually (so - * long as no new GPU commands are executed upon it). Due to the - * asynchronous nature of the hardware, an object reported - * as busy may become idle before the ioctl is completed. - * - * Furthermore, if the object is busy, which engine is busy is only - * provided as a guide and only indirectly by reporting its class - * (there may be more than one engine in each class). There are race - * conditions which prevent the report of which engines are busy from - * being always accurate. However, the converse is not true. If the - * object is idle, the result of the ioctl, that all engines are idle, - * is accurate. - * - * The returned dword is split into two fields to indicate both - * the engine classess on which the object is being read, and the - * engine class on which it is currently being written (if any). - * - * The low word (bits 0:15) indicate if the object is being written - * to by any engine (there can only be one, as the GEM implicit - * synchronisation rules force writes to be serialised). Only the - * engine class (offset by 1, I915_ENGINE_CLASS_RENDER is reported as - * 1 not 0 etc) for the last write is reported. - * - * The high word (bits 16:31) are a bitmask of which engines classes - * are currently reading from the object. Multiple engines may be - * reading from the object simultaneously. - * - * The value of each engine class is the same as specified in the - * I915_CONTEXT_SET_ENGINES parameter and via perf, i.e. - * I915_ENGINE_CLASS_RENDER, I915_ENGINE_CLASS_COPY, etc. - * reported as active itself. Some hardware may have parallel - * execution engines, e.g. multiple media engines, which are - * mapped to the same class identifier and so are not separately - * reported for busyness. - * - * Caveat emptor: - * Only the boolean result of this query is reliable; that is whether - * the object is idle or busy. The report of which engines are busy - * should be only used as a heuristic. - */ - __u32 busy; -}; - -/** - * I915_CACHING_NONE - * - * GPU access is not coherent with cpu caches. Default for machines without an - * LLC. - */ -#define I915_CACHING_NONE 0 -/** - * I915_CACHING_CACHED - * - * GPU access is coherent with cpu caches and furthermore the data is cached in - * last-level caches shared between cpu cores and the gpu GT. Default on - * machines with HAS_LLC. - */ -#define I915_CACHING_CACHED 1 -/** - * I915_CACHING_DISPLAY - * - * Special GPU caching mode which is coherent with the scanout engines. - * Transparently falls back to I915_CACHING_NONE on platforms where no special - * cache mode (like write-through or gfdt flushing) is available. The kernel - * automatically sets this mode when using a buffer as a scanout target. - * Userspace can manually set this mode to avoid a costly stall and clflush in - * the hotpath of drawing the first frame. - */ -#define I915_CACHING_DISPLAY 2 - -struct drm_i915_gem_caching { - /** - * Handle of the buffer to set/get the caching level of. */ - __u32 handle; - - /** - * Caching level to apply or return value - * - * bits0-15 are for generic caching control (i.e. the above defined - * values). bits16-31 are reserved for platform-specific variations - * (e.g. l3$ caching on gen7). */ - __u32 caching; -}; - -#define I915_TILING_NONE 0 -#define I915_TILING_X 1 -#define I915_TILING_Y 2 -#define I915_TILING_LAST I915_TILING_Y - -#define I915_BIT_6_SWIZZLE_NONE 0 -#define I915_BIT_6_SWIZZLE_9 1 -#define I915_BIT_6_SWIZZLE_9_10 2 -#define I915_BIT_6_SWIZZLE_9_11 3 -#define I915_BIT_6_SWIZZLE_9_10_11 4 -/* Not seen by userland */ -#define I915_BIT_6_SWIZZLE_UNKNOWN 5 -/* Seen by userland. */ -#define I915_BIT_6_SWIZZLE_9_17 6 -#define I915_BIT_6_SWIZZLE_9_10_17 7 - -struct drm_i915_gem_set_tiling { - /** Handle of the buffer to have its tiling state updated */ - __u32 handle; - - /** - * Tiling mode for the object (I915_TILING_NONE, I915_TILING_X, - * I915_TILING_Y). - * - * This value is to be set on request, and will be updated by the - * kernel on successful return with the actual chosen tiling layout. - * - * The tiling mode may be demoted to I915_TILING_NONE when the system - * has bit 6 swizzling that can't be managed correctly by GEM. - * - * Buffer contents become undefined when changing tiling_mode. - */ - __u32 tiling_mode; - - /** - * Stride in bytes for the object when in I915_TILING_X or - * I915_TILING_Y. - */ - __u32 stride; - - /** - * Returned address bit 6 swizzling required for CPU access through - * mmap mapping. - */ - __u32 swizzle_mode; -}; - -struct drm_i915_gem_get_tiling { - /** Handle of the buffer to get tiling state for. */ - __u32 handle; - - /** - * Current tiling mode for the object (I915_TILING_NONE, I915_TILING_X, - * I915_TILING_Y). - */ - __u32 tiling_mode; - - /** - * Returned address bit 6 swizzling required for CPU access through - * mmap mapping. - */ - __u32 swizzle_mode; - - /** - * Returned address bit 6 swizzling required for CPU access through - * mmap mapping whilst bound. - */ - __u32 phys_swizzle_mode; -}; - -struct drm_i915_gem_get_aperture { - /** Total size of the aperture used by i915_gem_execbuffer, in bytes */ - __u64 aper_size; - - /** - * Available space in the aperture used by i915_gem_execbuffer, in - * bytes - */ - __u64 aper_available_size; -}; - -struct drm_i915_get_pipe_from_crtc_id { - /** ID of CRTC being requested **/ - __u32 crtc_id; - - /** pipe of requested CRTC **/ - __u32 pipe; -}; - -#define I915_MADV_WILLNEED 0 -#define I915_MADV_DONTNEED 1 -#define __I915_MADV_PURGED 2 /* internal state */ - -struct drm_i915_gem_madvise { - /** Handle of the buffer to change the backing store advice */ - __u32 handle; - - /* Advice: either the buffer will be needed again in the near future, - * or wont be and could be discarded under memory pressure. - */ - __u32 madv; - - /** Whether the backing store still exists. */ - __u32 retained; -}; - -/* flags */ -#define I915_OVERLAY_TYPE_MASK 0xff -#define I915_OVERLAY_YUV_PLANAR 0x01 -#define I915_OVERLAY_YUV_PACKED 0x02 -#define I915_OVERLAY_RGB 0x03 - -#define I915_OVERLAY_DEPTH_MASK 0xff00 -#define I915_OVERLAY_RGB24 0x1000 -#define I915_OVERLAY_RGB16 0x2000 -#define I915_OVERLAY_RGB15 0x3000 -#define I915_OVERLAY_YUV422 0x0100 -#define I915_OVERLAY_YUV411 0x0200 -#define I915_OVERLAY_YUV420 0x0300 -#define I915_OVERLAY_YUV410 0x0400 - -#define I915_OVERLAY_SWAP_MASK 0xff0000 -#define I915_OVERLAY_NO_SWAP 0x000000 -#define I915_OVERLAY_UV_SWAP 0x010000 -#define I915_OVERLAY_Y_SWAP 0x020000 -#define I915_OVERLAY_Y_AND_UV_SWAP 0x030000 - -#define I915_OVERLAY_FLAGS_MASK 0xff000000 -#define I915_OVERLAY_ENABLE 0x01000000 - -struct drm_intel_overlay_put_image { - /* various flags and src format description */ - __u32 flags; - /* source picture description */ - __u32 bo_handle; - /* stride values and offsets are in bytes, buffer relative */ - __u16 stride_Y; /* stride for packed formats */ - __u16 stride_UV; - __u32 offset_Y; /* offset for packet formats */ - __u32 offset_U; - __u32 offset_V; - /* in pixels */ - __u16 src_width; - __u16 src_height; - /* to compensate the scaling factors for partially covered surfaces */ - __u16 src_scan_width; - __u16 src_scan_height; - /* output crtc description */ - __u32 crtc_id; - __u16 dst_x; - __u16 dst_y; - __u16 dst_width; - __u16 dst_height; -}; - -/* flags */ -#define I915_OVERLAY_UPDATE_ATTRS (1<<0) -#define I915_OVERLAY_UPDATE_GAMMA (1<<1) -#define I915_OVERLAY_DISABLE_DEST_COLORKEY (1<<2) -struct drm_intel_overlay_attrs { - __u32 flags; - __u32 color_key; - __s32 brightness; - __u32 contrast; - __u32 saturation; - __u32 gamma0; - __u32 gamma1; - __u32 gamma2; - __u32 gamma3; - __u32 gamma4; - __u32 gamma5; -}; - -/* - * Intel sprite handling - * - * Color keying works with a min/mask/max tuple. Both source and destination - * color keying is allowed. - * - * Source keying: - * Sprite pixels within the min & max values, masked against the color channels - * specified in the mask field, will be transparent. All other pixels will - * be displayed on top of the primary plane. For RGB surfaces, only the min - * and mask fields will be used; ranged compares are not allowed. - * - * Destination keying: - * Primary plane pixels that match the min value, masked against the color - * channels specified in the mask field, will be replaced by corresponding - * pixels from the sprite plane. - * - * Note that source & destination keying are exclusive; only one can be - * active on a given plane. - */ - -#define I915_SET_COLORKEY_NONE (1<<0) /* Deprecated. Instead set - * flags==0 to disable colorkeying. - */ -#define I915_SET_COLORKEY_DESTINATION (1<<1) -#define I915_SET_COLORKEY_SOURCE (1<<2) -struct drm_intel_sprite_colorkey { - __u32 plane_id; - __u32 min_value; - __u32 channel_mask; - __u32 max_value; - __u32 flags; -}; - -struct drm_i915_gem_wait { - /** Handle of BO we shall wait on */ - __u32 bo_handle; - __u32 flags; - /** Number of nanoseconds to wait, Returns time remaining. */ - __s64 timeout_ns; -}; - -struct drm_i915_gem_context_create { - __u32 ctx_id; /* output: id of new context*/ - __u32 pad; -}; - -struct drm_i915_gem_context_create_ext { - __u32 ctx_id; /* output: id of new context*/ - __u32 flags; -#define I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS (1u << 0) -#define I915_CONTEXT_CREATE_FLAGS_UNKNOWN \ - (-(I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS << 1)) - __u64 extensions; -}; - -struct drm_i915_gem_context_param { - __u32 ctx_id; - __u32 size; - __u64 param; -#define I915_CONTEXT_PARAM_BAN_PERIOD 0x1 -#define I915_CONTEXT_PARAM_NO_ZEROMAP 0x2 -#define I915_CONTEXT_PARAM_GTT_SIZE 0x3 -#define I915_CONTEXT_PARAM_NO_ERROR_CAPTURE 0x4 -#define I915_CONTEXT_PARAM_BANNABLE 0x5 -#define I915_CONTEXT_PARAM_PRIORITY 0x6 -#define I915_CONTEXT_MAX_USER_PRIORITY 1023 /* inclusive */ -#define I915_CONTEXT_DEFAULT_PRIORITY 0 -#define I915_CONTEXT_MIN_USER_PRIORITY -1023 /* inclusive */ - /* - * When using the following param, value should be a pointer to - * drm_i915_gem_context_param_sseu. - */ -#define I915_CONTEXT_PARAM_SSEU 0x7 - -/* - * Not all clients may want to attempt automatic recover of a context after - * a hang (for example, some clients may only submit very small incremental - * batches relying on known logical state of previous batches which will never - * recover correctly and each attempt will hang), and so would prefer that - * the context is forever banned instead. - * - * If set to false (0), after a reset, subsequent (and in flight) rendering - * from this context is discarded, and the client will need to create a new - * context to use instead. - * - * If set to true (1), the kernel will automatically attempt to recover the - * context by skipping the hanging batch and executing the next batch starting - * from the default context state (discarding the incomplete logical context - * state lost due to the reset). - * - * On creation, all new contexts are marked as recoverable. - */ -#define I915_CONTEXT_PARAM_RECOVERABLE 0x8 -/* Must be kept compact -- no holes and well documented */ - - __u64 value; -}; - -/** - * Context SSEU programming - * - * It may be necessary for either functional or performance reason to configure - * a context to run with a reduced number of SSEU (where SSEU stands for Slice/ - * Sub-slice/EU). - * - * This is done by configuring SSEU configuration using the below - * @struct drm_i915_gem_context_param_sseu for every supported engine which - * userspace intends to use. - * - * Not all GPUs or engines support this functionality in which case an error - * code -ENODEV will be returned. - * - * Also, flexibility of possible SSEU configuration permutations varies between - * GPU generations and software imposed limitations. Requesting such a - * combination will return an error code of -EINVAL. - * - * NOTE: When perf/OA is active the context's SSEU configuration is ignored in - * favour of a single global setting. - */ -struct drm_i915_gem_context_param_sseu { - /* - * Engine class & instance to be configured or queried. - */ - __u16 engine_class; - __u16 engine_instance; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 flags; - - /* - * Mask of slices to enable for the context. Valid values are a subset - * of the bitmask value returned for I915_PARAM_SLICE_MASK. - */ - __u64 slice_mask; - - /* - * Mask of subslices to enable for the context. Valid values are a - * subset of the bitmask value return by I915_PARAM_SUBSLICE_MASK. - */ - __u64 subslice_mask; - - /* - * Minimum/Maximum number of EUs to enable per subslice for the - * context. min_eus_per_subslice must be inferior or equal to - * max_eus_per_subslice. - */ - __u16 min_eus_per_subslice; - __u16 max_eus_per_subslice; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 rsvd; -}; - -struct drm_i915_gem_context_create_ext_setparam { -#define I915_CONTEXT_CREATE_EXT_SETPARAM 0 - struct i915_user_extension base; - struct drm_i915_gem_context_param param; -}; - -struct drm_i915_gem_context_destroy { - __u32 ctx_id; - __u32 pad; -}; - -/* - * DRM_I915_GEM_VM_CREATE - - * - * Create a new virtual memory address space (ppGTT) for use within a context - * on the same file. Extensions can be provided to configure exactly how the - * address space is setup upon creation. - * - * The id of new VM (bound to the fd) for use with I915_CONTEXT_PARAM_VM is - * returned in the outparam @id. - * - * No flags are defined, with all bits reserved and must be zero. - * - * An extension chain maybe provided, starting with @extensions, and terminated - * by the @next_extension being 0. Currently, no extensions are defined. - * - * DRM_I915_GEM_VM_DESTROY - - * - * Destroys a previously created VM id, specified in @id. - * - * No extensions or flags are allowed currently, and so must be zero. - */ -struct drm_i915_gem_vm_control { - __u64 extensions; - __u32 flags; - __u32 vm_id; -}; - -struct drm_i915_reg_read { - /* - * Register offset. - * For 64bit wide registers where the upper 32bits don't immediately - * follow the lower 32bits, the offset of the lower 32bits must - * be specified - */ - __u64 offset; -#define I915_REG_READ_8B_WA (1ul << 0) - - __u64 val; /* Return value */ -}; - -/* Known registers: - * - * Render engine timestamp - 0x2358 + 64bit - gen7+ - * - Note this register returns an invalid value if using the default - * single instruction 8byte read, in order to workaround that pass - * flag I915_REG_READ_8B_WA in offset field. - * - */ - -struct drm_i915_reset_stats { - __u32 ctx_id; - __u32 flags; - - /* All resets since boot/module reload, for all contexts */ - __u32 reset_count; - - /* Number of batches lost when active in GPU, for this context */ - __u32 batch_active; - - /* Number of batches lost pending for execution, for this context */ - __u32 batch_pending; - - __u32 pad; -}; - -struct drm_i915_gem_userptr { - __u64 user_ptr; - __u64 user_size; - __u32 flags; -#define I915_USERPTR_READ_ONLY 0x1 -#define I915_USERPTR_UNSYNCHRONIZED 0x80000000 - /** - * Returned handle for the object. - * - * Object handles are nonzero. - */ - __u32 handle; -}; - -enum drm_i915_oa_format { - I915_OA_FORMAT_A13 = 1, /* HSW only */ - I915_OA_FORMAT_A29, /* HSW only */ - I915_OA_FORMAT_A13_B8_C8, /* HSW only */ - I915_OA_FORMAT_B4_C8, /* HSW only */ - I915_OA_FORMAT_A45_B8_C8, /* HSW only */ - I915_OA_FORMAT_B4_C8_A16, /* HSW only */ - I915_OA_FORMAT_C4_B8, /* HSW+ */ - - /* Gen8+ */ - I915_OA_FORMAT_A12, - I915_OA_FORMAT_A12_B8_C8, - I915_OA_FORMAT_A32u40_A4u32_B8_C8, - - I915_OA_FORMAT_MAX /* non-ABI */ -}; - -enum drm_i915_perf_property_id { - /** - * Open the stream for a specific context handle (as used with - * execbuffer2). A stream opened for a specific context this way - * won't typically require root privileges. - */ - DRM_I915_PERF_PROP_CTX_HANDLE = 1, - - /** - * A value of 1 requests the inclusion of raw OA unit reports as - * part of stream samples. - */ - DRM_I915_PERF_PROP_SAMPLE_OA, - - /** - * The value specifies which set of OA unit metrics should be - * be configured, defining the contents of any OA unit reports. - */ - DRM_I915_PERF_PROP_OA_METRICS_SET, - - /** - * The value specifies the size and layout of OA unit reports. - */ - DRM_I915_PERF_PROP_OA_FORMAT, - - /** - * Specifying this property implicitly requests periodic OA unit - * sampling and (at least on Haswell) the sampling frequency is derived - * from this exponent as follows: - * - * 80ns * 2^(period_exponent + 1) - */ - DRM_I915_PERF_PROP_OA_EXPONENT, - - DRM_I915_PERF_PROP_MAX /* non-ABI */ -}; - -struct drm_i915_perf_open_param { - __u32 flags; -#define I915_PERF_FLAG_FD_CLOEXEC (1<<0) -#define I915_PERF_FLAG_FD_NONBLOCK (1<<1) -#define I915_PERF_FLAG_DISABLED (1<<2) - - /** The number of u64 (id, value) pairs */ - __u32 num_properties; - - /** - * Pointer to array of u64 (id, value) pairs configuring the stream - * to open. - */ - __u64 properties_ptr; -}; - -/** - * Enable data capture for a stream that was either opened in a disabled state - * via I915_PERF_FLAG_DISABLED or was later disabled via - * I915_PERF_IOCTL_DISABLE. - * - * It is intended to be cheaper to disable and enable a stream than it may be - * to close and re-open a stream with the same configuration. - * - * It's undefined whether any pending data for the stream will be lost. - */ -#define I915_PERF_IOCTL_ENABLE _IO('i', 0x0) - -/** - * Disable data capture for a stream. - * - * It is an error to try and read a stream that is disabled. - */ -#define I915_PERF_IOCTL_DISABLE _IO('i', 0x1) - -/** - * Common to all i915 perf records - */ -struct drm_i915_perf_record_header { - __u32 type; - __u16 pad; - __u16 size; -}; - -enum drm_i915_perf_record_type { - - /** - * Samples are the work horse record type whose contents are extensible - * and defined when opening an i915 perf stream based on the given - * properties. - * - * Boolean properties following the naming convention - * DRM_I915_PERF_SAMPLE_xyz_PROP request the inclusion of 'xyz' data in - * every sample. - * - * The order of these sample properties given by userspace has no - * affect on the ordering of data within a sample. The order is - * documented here. - * - * struct { - * struct drm_i915_perf_record_header header; - * - * { u32 oa_report[]; } && DRM_I915_PERF_PROP_SAMPLE_OA - * }; - */ - DRM_I915_PERF_RECORD_SAMPLE = 1, - - /* - * Indicates that one or more OA reports were not written by the - * hardware. This can happen for example if an MI_REPORT_PERF_COUNT - * command collides with periodic sampling - which would be more likely - * at higher sampling frequencies. - */ - DRM_I915_PERF_RECORD_OA_REPORT_LOST = 2, - - /** - * An error occurred that resulted in all pending OA reports being lost. - */ - DRM_I915_PERF_RECORD_OA_BUFFER_LOST = 3, - - DRM_I915_PERF_RECORD_MAX /* non-ABI */ -}; - -/** - * Structure to upload perf dynamic configuration into the kernel. - */ -struct drm_i915_perf_oa_config { - /** String formatted like "%08x-%04x-%04x-%04x-%012x" */ - char uuid[36]; - - __u32 n_mux_regs; - __u32 n_boolean_regs; - __u32 n_flex_regs; - - /* - * These fields are pointers to tuples of u32 values (register address, - * value). For example the expected length of the buffer pointed by - * mux_regs_ptr is (2 * sizeof(u32) * n_mux_regs). - */ - __u64 mux_regs_ptr; - __u64 boolean_regs_ptr; - __u64 flex_regs_ptr; -}; - -struct drm_i915_query_item { - __u64 query_id; -#define DRM_I915_QUERY_TOPOLOGY_INFO 1 -/* Must be kept compact -- no holes and well documented */ - - /* - * When set to zero by userspace, this is filled with the size of the - * data to be written at the data_ptr pointer. The kernel sets this - * value to a negative value to signal an error on a particular query - * item. - */ - __s32 length; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 flags; - - /* - * Data will be written at the location pointed by data_ptr when the - * value of length matches the length of the data to be written by the - * kernel. - */ - __u64 data_ptr; -}; - -struct drm_i915_query { - __u32 num_items; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 flags; - - /* - * This points to an array of num_items drm_i915_query_item structures. - */ - __u64 items_ptr; -}; - -/* - * Data written by the kernel with query DRM_I915_QUERY_TOPOLOGY_INFO : - * - * data: contains the 3 pieces of information : - * - * - the slice mask with one bit per slice telling whether a slice is - * available. The availability of slice X can be queried with the following - * formula : - * - * (data[X / 8] >> (X % 8)) & 1 - * - * - the subslice mask for each slice with one bit per subslice telling - * whether a subslice is available. The availability of subslice Y in slice - * X can be queried with the following formula : - * - * (data[subslice_offset + - * X * subslice_stride + - * Y / 8] >> (Y % 8)) & 1 - * - * - the EU mask for each subslice in each slice with one bit per EU telling - * whether an EU is available. The availability of EU Z in subslice Y in - * slice X can be queried with the following formula : - * - * (data[eu_offset + - * (X * max_subslices + Y) * eu_stride + - * Z / 8] >> (Z % 8)) & 1 - */ -struct drm_i915_query_topology_info { - /* - * Unused for now. Must be cleared to zero. - */ - __u16 flags; - - __u16 max_slices; - __u16 max_subslices; - __u16 max_eus_per_subslice; - - /* - * Offset in data[] at which the subslice masks are stored. - */ - __u16 subslice_offset; - - /* - * Stride at which each of the subslice masks for each slice are - * stored. - */ - __u16 subslice_stride; - - /* - * Offset in data[] at which the EU masks are stored. - */ - __u16 eu_offset; - - /* - * Stride at which each of the EU masks for each subslice are stored. - */ - __u16 eu_stride; - - __u8 data[]; -}; - -#if defined(__cplusplus) -} -#endif - -#endif /* _I915_DRM_H_ */ diff --git a/prebuilts/aarch64/include/libdrm/mach64_drm.h b/prebuilts/aarch64/include/libdrm/mach64_drm.h deleted file mode 100644 index 1f5fd84..0000000 --- a/prebuilts/aarch64/include/libdrm/mach64_drm.h +++ /dev/null @@ -1,256 +0,0 @@ -/* mach64_drm.h -- Public header for the mach64 driver -*- linux-c -*- - * Created: Thu Nov 30 20:04:32 2000 by gareth@valinux.com - */ -/* - * Copyright 2000 Gareth Hughes - * Copyright 2002 Frank C. Earl - * Copyright 2002-2003 Leif Delgass - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT OWNER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Gareth Hughes - * Frank C. Earl - * Leif Delgass - */ - -#ifndef __MACH64_DRM_H__ -#define __MACH64_DRM_H__ - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (mach64_sarea.h) - */ -#ifndef __MACH64_SAREA_DEFINES__ -#define __MACH64_SAREA_DEFINES__ - -/* What needs to be changed for the current vertex buffer? - * GH: We're going to be pedantic about this. We want the card to do as - * little as possible, so let's avoid having it fetch a whole bunch of - * register values that don't change all that often, if at all. - */ -#define MACH64_UPLOAD_DST_OFF_PITCH 0x0001 -#define MACH64_UPLOAD_Z_OFF_PITCH 0x0002 -#define MACH64_UPLOAD_Z_ALPHA_CNTL 0x0004 -#define MACH64_UPLOAD_SCALE_3D_CNTL 0x0008 -#define MACH64_UPLOAD_DP_FOG_CLR 0x0010 -#define MACH64_UPLOAD_DP_WRITE_MASK 0x0020 -#define MACH64_UPLOAD_DP_PIX_WIDTH 0x0040 -#define MACH64_UPLOAD_SETUP_CNTL 0x0080 -#define MACH64_UPLOAD_MISC 0x0100 -#define MACH64_UPLOAD_TEXTURE 0x0200 -#define MACH64_UPLOAD_TEX0IMAGE 0x0400 -#define MACH64_UPLOAD_TEX1IMAGE 0x0800 -#define MACH64_UPLOAD_CLIPRECTS 0x1000 /* handled client-side */ -#define MACH64_UPLOAD_CONTEXT 0x00ff -#define MACH64_UPLOAD_ALL 0x1fff - -/* DMA buffer size - */ -#define MACH64_BUFFER_SIZE 16384 - -/* Max number of swaps allowed on the ring - * before the client must wait - */ -#define MACH64_MAX_QUEUED_FRAMES 3U - -/* Byte offsets for host blit buffer data - */ -#define MACH64_HOSTDATA_BLIT_OFFSET 104 - -/* Keep these small for testing. - */ -#define MACH64_NR_SAREA_CLIPRECTS 8 - -#define MACH64_CARD_HEAP 0 -#define MACH64_AGP_HEAP 1 -#define MACH64_NR_TEX_HEAPS 2 -#define MACH64_NR_TEX_REGIONS 64 -#define MACH64_LOG_TEX_GRANULARITY 16 - -#define MACH64_TEX_MAXLEVELS 1 - -#define MACH64_NR_CONTEXT_REGS 15 -#define MACH64_NR_TEXTURE_REGS 4 - -#endif /* __MACH64_SAREA_DEFINES__ */ - -typedef struct { - unsigned int dst_off_pitch; - - unsigned int z_off_pitch; - unsigned int z_cntl; - unsigned int alpha_tst_cntl; - - unsigned int scale_3d_cntl; - - unsigned int sc_left_right; - unsigned int sc_top_bottom; - - unsigned int dp_fog_clr; - unsigned int dp_write_mask; - unsigned int dp_pix_width; - unsigned int dp_mix; - unsigned int dp_src; - - unsigned int clr_cmp_cntl; - unsigned int gui_traj_cntl; - - unsigned int setup_cntl; - - unsigned int tex_size_pitch; - unsigned int tex_cntl; - unsigned int secondary_tex_off; - unsigned int tex_offset; -} drm_mach64_context_regs_t; - -typedef struct drm_mach64_sarea { - /* The channel for communication of state information to the kernel - * on firing a vertex dma buffer. - */ - drm_mach64_context_regs_t context_state; - unsigned int dirty; - unsigned int vertsize; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[MACH64_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Counters for client-side throttling of rendering clients. - */ - unsigned int frames_queued; - - /* Texture memory LRU. - */ - struct drm_tex_region tex_list[MACH64_NR_TEX_HEAPS][MACH64_NR_TEX_REGIONS + - 1]; - unsigned int tex_age[MACH64_NR_TEX_HEAPS]; - int ctx_owner; -} drm_mach64_sarea_t; - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (mach64_common.h) - */ - -/* Mach64 specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ - -#define DRM_MACH64_INIT 0x00 -#define DRM_MACH64_IDLE 0x01 -#define DRM_MACH64_RESET 0x02 -#define DRM_MACH64_SWAP 0x03 -#define DRM_MACH64_CLEAR 0x04 -#define DRM_MACH64_VERTEX 0x05 -#define DRM_MACH64_BLIT 0x06 -#define DRM_MACH64_FLUSH 0x07 -#define DRM_MACH64_GETPARAM 0x08 - -#define DRM_IOCTL_MACH64_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_INIT, drm_mach64_init_t) -#define DRM_IOCTL_MACH64_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_IDLE ) -#define DRM_IOCTL_MACH64_RESET DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_RESET ) -#define DRM_IOCTL_MACH64_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_SWAP ) -#define DRM_IOCTL_MACH64_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_CLEAR, drm_mach64_clear_t) -#define DRM_IOCTL_MACH64_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_VERTEX, drm_mach64_vertex_t) -#define DRM_IOCTL_MACH64_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_BLIT, drm_mach64_blit_t) -#define DRM_IOCTL_MACH64_FLUSH DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_FLUSH ) -#define DRM_IOCTL_MACH64_GETPARAM DRM_IOWR( DRM_COMMAND_BASE + DRM_MACH64_GETPARAM, drm_mach64_getparam_t) - -/* Buffer flags for clears - */ -#define MACH64_FRONT 0x1 -#define MACH64_BACK 0x2 -#define MACH64_DEPTH 0x4 - -/* Primitive types for vertex buffers - */ -#define MACH64_PRIM_POINTS 0x00000000 -#define MACH64_PRIM_LINES 0x00000001 -#define MACH64_PRIM_LINE_LOOP 0x00000002 -#define MACH64_PRIM_LINE_STRIP 0x00000003 -#define MACH64_PRIM_TRIANGLES 0x00000004 -#define MACH64_PRIM_TRIANGLE_STRIP 0x00000005 -#define MACH64_PRIM_TRIANGLE_FAN 0x00000006 -#define MACH64_PRIM_QUADS 0x00000007 -#define MACH64_PRIM_QUAD_STRIP 0x00000008 -#define MACH64_PRIM_POLYGON 0x00000009 - -typedef enum _drm_mach64_dma_mode_t { - MACH64_MODE_DMA_ASYNC, - MACH64_MODE_DMA_SYNC, - MACH64_MODE_MMIO -} drm_mach64_dma_mode_t; - -typedef struct drm_mach64_init { - enum { - DRM_MACH64_INIT_DMA = 0x01, - DRM_MACH64_CLEANUP_DMA = 0x02 - } func; - - unsigned long sarea_priv_offset; - int is_pci; - drm_mach64_dma_mode_t dma_mode; - - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long ring_offset; - unsigned long buffers_offset; - unsigned long agp_textures_offset; -} drm_mach64_init_t; - -typedef struct drm_mach64_clear { - unsigned int flags; - int x, y, w, h; - unsigned int clear_color; - unsigned int clear_depth; -} drm_mach64_clear_t; - -typedef struct drm_mach64_vertex { - int prim; - void *buf; /* Address of vertex buffer */ - unsigned long used; /* Number of bytes in buffer */ - int discard; /* Client finished with buffer? */ -} drm_mach64_vertex_t; - -typedef struct drm_mach64_blit { - void *buf; - int pitch; - int offset; - int format; - unsigned short x, y; - unsigned short width, height; -} drm_mach64_blit_t; - -typedef struct drm_mach64_getparam { - enum { - MACH64_PARAM_FRAMES_QUEUED = 0x01, - MACH64_PARAM_IRQ_NR = 0x02 - } param; - void *value; -} drm_mach64_getparam_t; - -#endif diff --git a/prebuilts/aarch64/include/libdrm/mga_drm.h b/prebuilts/aarch64/include/libdrm/mga_drm.h deleted file mode 100644 index 7930011..0000000 --- a/prebuilts/aarch64/include/libdrm/mga_drm.h +++ /dev/null @@ -1,427 +0,0 @@ -/* mga_drm.h -- Public header for the Matrox g200/g400 driver -*- linux-c -*- - * Created: Tue Jan 25 01:50:01 1999 by jhartmann@precisioninsight.com - * - * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Jeff Hartmann - * Keith Whitwell - * - * Rewritten by: - * Gareth Hughes - */ - -#ifndef __MGA_DRM_H__ -#define __MGA_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (mga_sarea.h) - */ - -#ifndef __MGA_SAREA_DEFINES__ -#define __MGA_SAREA_DEFINES__ - -/* WARP pipe flags - */ -#define MGA_F 0x1 /* fog */ -#define MGA_A 0x2 /* alpha */ -#define MGA_S 0x4 /* specular */ -#define MGA_T2 0x8 /* multitexture */ - -#define MGA_WARP_TGZ 0 -#define MGA_WARP_TGZF (MGA_F) -#define MGA_WARP_TGZA (MGA_A) -#define MGA_WARP_TGZAF (MGA_F|MGA_A) -#define MGA_WARP_TGZS (MGA_S) -#define MGA_WARP_TGZSF (MGA_S|MGA_F) -#define MGA_WARP_TGZSA (MGA_S|MGA_A) -#define MGA_WARP_TGZSAF (MGA_S|MGA_F|MGA_A) -#define MGA_WARP_T2GZ (MGA_T2) -#define MGA_WARP_T2GZF (MGA_T2|MGA_F) -#define MGA_WARP_T2GZA (MGA_T2|MGA_A) -#define MGA_WARP_T2GZAF (MGA_T2|MGA_A|MGA_F) -#define MGA_WARP_T2GZS (MGA_T2|MGA_S) -#define MGA_WARP_T2GZSF (MGA_T2|MGA_S|MGA_F) -#define MGA_WARP_T2GZSA (MGA_T2|MGA_S|MGA_A) -#define MGA_WARP_T2GZSAF (MGA_T2|MGA_S|MGA_F|MGA_A) - -#define MGA_MAX_G200_PIPES 8 /* no multitex */ -#define MGA_MAX_G400_PIPES 16 -#define MGA_MAX_WARP_PIPES MGA_MAX_G400_PIPES -#define MGA_WARP_UCODE_SIZE 32768 /* in bytes */ - -#define MGA_CARD_TYPE_G200 1 -#define MGA_CARD_TYPE_G400 2 -#define MGA_CARD_TYPE_G450 3 /* not currently used */ -#define MGA_CARD_TYPE_G550 4 - -#define MGA_FRONT 0x1 -#define MGA_BACK 0x2 -#define MGA_DEPTH 0x4 - -/* What needs to be changed for the current vertex dma buffer? - */ -#define MGA_UPLOAD_CONTEXT 0x1 -#define MGA_UPLOAD_TEX0 0x2 -#define MGA_UPLOAD_TEX1 0x4 -#define MGA_UPLOAD_PIPE 0x8 -#define MGA_UPLOAD_TEX0IMAGE 0x10 /* handled client-side */ -#define MGA_UPLOAD_TEX1IMAGE 0x20 /* handled client-side */ -#define MGA_UPLOAD_2D 0x40 -#define MGA_WAIT_AGE 0x80 /* handled client-side */ -#define MGA_UPLOAD_CLIPRECTS 0x100 /* handled client-side */ -#if 0 -#define MGA_DMA_FLUSH 0x200 /* set when someone gets the lock - quiescent */ -#endif - -/* 32 buffers of 64k each, total 2 meg. - */ -#define MGA_BUFFER_SIZE (1 << 16) -#define MGA_NUM_BUFFERS 128 - -/* Keep these small for testing. - */ -#define MGA_NR_SAREA_CLIPRECTS 8 - -/* 2 heaps (1 for card, 1 for agp), each divided into up to 128 - * regions, subject to a minimum region size of (1<<16) == 64k. - * - * Clients may subdivide regions internally, but when sharing between - * clients, the region size is the minimum granularity. - */ - -#define MGA_CARD_HEAP 0 -#define MGA_AGP_HEAP 1 -#define MGA_NR_TEX_HEAPS 2 -#define MGA_NR_TEX_REGIONS 16 -#define MGA_LOG_MIN_TEX_REGION_SIZE 16 - -#define DRM_MGA_IDLE_RETRY 2048 - -#endif /* __MGA_SAREA_DEFINES__ */ - -/* Setup registers for 3D context - */ -typedef struct { - unsigned int dstorg; - unsigned int maccess; - unsigned int plnwt; - unsigned int dwgctl; - unsigned int alphactrl; - unsigned int fogcolor; - unsigned int wflag; - unsigned int tdualstage0; - unsigned int tdualstage1; - unsigned int fcol; - unsigned int stencil; - unsigned int stencilctl; -} drm_mga_context_regs_t; - -/* Setup registers for 2D, X server - */ -typedef struct { - unsigned int pitch; -} drm_mga_server_regs_t; - -/* Setup registers for each texture unit - */ -typedef struct { - unsigned int texctl; - unsigned int texctl2; - unsigned int texfilter; - unsigned int texbordercol; - unsigned int texorg; - unsigned int texwidth; - unsigned int texheight; - unsigned int texorg1; - unsigned int texorg2; - unsigned int texorg3; - unsigned int texorg4; -} drm_mga_texture_regs_t; - -/* General aging mechanism - */ -typedef struct { - unsigned int head; /* Position of head pointer */ - unsigned int wrap; /* Primary DMA wrap count */ -} drm_mga_age_t; - -typedef struct _drm_mga_sarea { - /* The channel for communication of state information to the kernel - * on firing a vertex dma buffer. - */ - drm_mga_context_regs_t context_state; - drm_mga_server_regs_t server_state; - drm_mga_texture_regs_t tex_state[2]; - unsigned int warp_pipe; - unsigned int dirty; - unsigned int vertsize; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[MGA_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Information about the most recently used 3d drawable. The - * client fills in the req_* fields, the server fills in the - * exported_ fields and puts the cliprects into boxes, above. - * - * The client clears the exported_drawable field before - * clobbering the boxes data. - */ - unsigned int req_drawable; /* the X drawable id */ - unsigned int req_draw_buffer; /* MGA_FRONT or MGA_BACK */ - - unsigned int exported_drawable; - unsigned int exported_index; - unsigned int exported_stamp; - unsigned int exported_buffers; - unsigned int exported_nfront; - unsigned int exported_nback; - int exported_back_x, exported_front_x, exported_w; - int exported_back_y, exported_front_y, exported_h; - struct drm_clip_rect exported_boxes[MGA_NR_SAREA_CLIPRECTS]; - - /* Counters for aging textures and for client-side throttling. - */ - unsigned int status[4]; - unsigned int last_wrap; - - drm_mga_age_t last_frame; - unsigned int last_enqueue; /* last time a buffer was enqueued */ - unsigned int last_dispatch; /* age of the most recently dispatched buffer */ - unsigned int last_quiescent; /* */ - - /* LRU lists for texture memory in agp space and on the card. - */ - struct drm_tex_region texList[MGA_NR_TEX_HEAPS][MGA_NR_TEX_REGIONS + 1]; - unsigned int texAge[MGA_NR_TEX_HEAPS]; - - /* Mechanism to validate card state. - */ - int ctxOwner; -} drm_mga_sarea_t; - -/* MGA specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ -#define DRM_MGA_INIT 0x00 -#define DRM_MGA_FLUSH 0x01 -#define DRM_MGA_RESET 0x02 -#define DRM_MGA_SWAP 0x03 -#define DRM_MGA_CLEAR 0x04 -#define DRM_MGA_VERTEX 0x05 -#define DRM_MGA_INDICES 0x06 -#define DRM_MGA_ILOAD 0x07 -#define DRM_MGA_BLIT 0x08 -#define DRM_MGA_GETPARAM 0x09 - -/* 3.2: - * ioctls for operating on fences. - */ -#define DRM_MGA_SET_FENCE 0x0a -#define DRM_MGA_WAIT_FENCE 0x0b -#define DRM_MGA_DMA_BOOTSTRAP 0x0c - -#define DRM_IOCTL_MGA_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INIT, drm_mga_init_t) -#define DRM_IOCTL_MGA_FLUSH DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_FLUSH, struct drm_lock) -#define DRM_IOCTL_MGA_RESET DRM_IO( DRM_COMMAND_BASE + DRM_MGA_RESET) -#define DRM_IOCTL_MGA_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_MGA_SWAP) -#define DRM_IOCTL_MGA_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_CLEAR, drm_mga_clear_t) -#define DRM_IOCTL_MGA_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_VERTEX, drm_mga_vertex_t) -#define DRM_IOCTL_MGA_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INDICES, drm_mga_indices_t) -#define DRM_IOCTL_MGA_ILOAD DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_ILOAD, drm_mga_iload_t) -#define DRM_IOCTL_MGA_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_BLIT, drm_mga_blit_t) -#define DRM_IOCTL_MGA_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_GETPARAM, drm_mga_getparam_t) -#define DRM_IOCTL_MGA_SET_FENCE DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_SET_FENCE, __u32) -#define DRM_IOCTL_MGA_WAIT_FENCE DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_WAIT_FENCE, __u32) -#define DRM_IOCTL_MGA_DMA_BOOTSTRAP DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_DMA_BOOTSTRAP, drm_mga_dma_bootstrap_t) - -typedef struct _drm_mga_warp_index { - int installed; - unsigned long phys_addr; - int size; -} drm_mga_warp_index_t; - -typedef struct drm_mga_init { - enum { - MGA_INIT_DMA = 0x01, - MGA_CLEANUP_DMA = 0x02 - } func; - - unsigned long sarea_priv_offset; - - int chipset; - int sgram; - - unsigned int maccess; - - unsigned int fb_cpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - - unsigned int depth_cpp; - unsigned int depth_offset, depth_pitch; - - unsigned int texture_offset[MGA_NR_TEX_HEAPS]; - unsigned int texture_size[MGA_NR_TEX_HEAPS]; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long status_offset; - unsigned long warp_offset; - unsigned long primary_offset; - unsigned long buffers_offset; -} drm_mga_init_t; - -typedef struct drm_mga_dma_bootstrap { - /** - * \name AGP texture region - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, these fields will - * be filled in with the actual AGP texture settings. - * - * \warning - * If these fields are non-zero, but dma_mga_dma_bootstrap::agp_mode - * is zero, it means that PCI memory (most likely through the use of - * an IOMMU) is being used for "AGP" textures. - */ - /*@{ */ - unsigned long texture_handle; /**< Handle used to map AGP textures. */ - __u32 texture_size; /**< Size of the AGP texture region. */ - /*@} */ - - /** - * Requested size of the primary DMA region. - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be - * filled in with the actual AGP mode. If AGP was not available - */ - __u32 primary_size; - - /** - * Requested number of secondary DMA buffers. - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be - * filled in with the actual number of secondary DMA buffers - * allocated. Particularly when PCI DMA is used, this may be - * (subtantially) less than the number requested. - */ - __u32 secondary_bin_count; - - /** - * Requested size of each secondary DMA buffer. - * - * While the kernel \b is free to reduce - * dma_mga_dma_bootstrap::secondary_bin_count, it is \b not allowed - * to reduce dma_mga_dma_bootstrap::secondary_bin_size. - */ - __u32 secondary_bin_size; - - /** - * Bit-wise mask of AGPSTAT2_* values. Currently only \c AGPSTAT2_1X, - * \c AGPSTAT2_2X, and \c AGPSTAT2_4X are supported. If this value is - * zero, it means that PCI DMA should be used, even if AGP is - * possible. - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be - * filled in with the actual AGP mode. If AGP was not available - * (i.e., PCI DMA was used), this value will be zero. - */ - __u32 agp_mode; - - /** - * Desired AGP GART size, measured in megabytes. - */ - __u8 agp_size; -} drm_mga_dma_bootstrap_t; - -typedef struct drm_mga_clear { - unsigned int flags; - unsigned int clear_color; - unsigned int clear_depth; - unsigned int color_mask; - unsigned int depth_mask; -} drm_mga_clear_t; - -typedef struct drm_mga_vertex { - int idx; /* buffer to queue */ - int used; /* bytes in use */ - int discard; /* client finished with buffer? */ -} drm_mga_vertex_t; - -typedef struct drm_mga_indices { - int idx; /* buffer to queue */ - unsigned int start; - unsigned int end; - int discard; /* client finished with buffer? */ -} drm_mga_indices_t; - -typedef struct drm_mga_iload { - int idx; - unsigned int dstorg; - unsigned int length; -} drm_mga_iload_t; - -typedef struct _drm_mga_blit { - unsigned int planemask; - unsigned int srcorg; - unsigned int dstorg; - int src_pitch, dst_pitch; - int delta_sx, delta_sy; - int delta_dx, delta_dy; - int height, ydir; /* flip image vertically */ - int source_pitch, dest_pitch; -} drm_mga_blit_t; - -/* 3.1: An ioctl to get parameters that aren't available to the 3d - * client any other way. - */ -#define MGA_PARAM_IRQ_NR 1 - -/* 3.2: Query the actual card type. The DDX only distinguishes between - * G200 chips and non-G200 chips, which it calls G400. It turns out that - * there are some very sublte differences between the G4x0 chips and the G550 - * chips. Using this parameter query, a client-side driver can detect the - * difference between a G4x0 and a G550. - */ -#define MGA_PARAM_CARD_TYPE 2 - -typedef struct drm_mga_getparam { - int param; - void *value; -} drm_mga_getparam_t; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/libdrm/msm_drm.h b/prebuilts/aarch64/include/libdrm/msm_drm.h deleted file mode 100644 index c06d0a5..0000000 --- a/prebuilts/aarch64/include/libdrm/msm_drm.h +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat - * Author: Rob Clark - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __MSM_DRM_H__ -#define __MSM_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints: - * 1) Do not use pointers, use __u64 instead for 32 bit / 64 bit - * user/kernel compatibility - * 2) Keep fields aligned to their size - * 3) Because of how drm_ioctl() works, we can add new fields at - * the end of an ioctl if some care is taken: drm_ioctl() will - * zero out the new fields at the tail of the ioctl, so a zero - * value should have a backwards compatible meaning. And for - * output params, userspace won't see the newly added output - * fields.. so that has to be somehow ok. - */ - -#define MSM_PIPE_NONE 0x00 -#define MSM_PIPE_2D0 0x01 -#define MSM_PIPE_2D1 0x02 -#define MSM_PIPE_3D0 0x10 - -/* The pipe-id just uses the lower bits, so can be OR'd with flags in - * the upper 16 bits (which could be extended further, if needed, maybe - * we extend/overload the pipe-id some day to deal with multiple rings, - * but even then I don't think we need the full lower 16 bits). - */ -#define MSM_PIPE_ID_MASK 0xffff -#define MSM_PIPE_ID(x) ((x) & MSM_PIPE_ID_MASK) -#define MSM_PIPE_FLAGS(x) ((x) & ~MSM_PIPE_ID_MASK) - -/* timeouts are specified in clock-monotonic absolute times (to simplify - * restarting interrupted ioctls). The following struct is logically the - * same as 'struct timespec' but 32/64b ABI safe. - */ -struct drm_msm_timespec { - __s64 tv_sec; /* seconds */ - __s64 tv_nsec; /* nanoseconds */ -}; - -#define MSM_PARAM_GPU_ID 0x01 -#define MSM_PARAM_GMEM_SIZE 0x02 -#define MSM_PARAM_CHIP_ID 0x03 -#define MSM_PARAM_MAX_FREQ 0x04 -#define MSM_PARAM_TIMESTAMP 0x05 -#define MSM_PARAM_GMEM_BASE 0x06 -#define MSM_PARAM_NR_RINGS 0x07 - -struct drm_msm_param { - __u32 pipe; /* in, MSM_PIPE_x */ - __u32 param; /* in, MSM_PARAM_x */ - __u64 value; /* out (get_param) or in (set_param) */ -}; - -/* - * GEM buffers: - */ - -#define MSM_BO_SCANOUT 0x00000001 /* scanout capable */ -#define MSM_BO_GPU_READONLY 0x00000002 -#define MSM_BO_CACHE_MASK 0x000f0000 -/* cache modes */ -#define MSM_BO_CACHED 0x00010000 -#define MSM_BO_WC 0x00020000 -#define MSM_BO_UNCACHED 0x00040000 - -#define MSM_BO_FLAGS (MSM_BO_SCANOUT | \ - MSM_BO_GPU_READONLY | \ - MSM_BO_CACHED | \ - MSM_BO_WC | \ - MSM_BO_UNCACHED) - -struct drm_msm_gem_new { - __u64 size; /* in */ - __u32 flags; /* in, mask of MSM_BO_x */ - __u32 handle; /* out */ -}; - -#define MSM_INFO_IOVA 0x01 - -#define MSM_INFO_FLAGS (MSM_INFO_IOVA) - -struct drm_msm_gem_info { - __u32 handle; /* in */ - __u32 flags; /* in - combination of MSM_INFO_* flags */ - __u64 offset; /* out, mmap() offset or iova */ -}; - -#define MSM_PREP_READ 0x01 -#define MSM_PREP_WRITE 0x02 -#define MSM_PREP_NOSYNC 0x04 - -#define MSM_PREP_FLAGS (MSM_PREP_READ | MSM_PREP_WRITE | MSM_PREP_NOSYNC) - -struct drm_msm_gem_cpu_prep { - __u32 handle; /* in */ - __u32 op; /* in, mask of MSM_PREP_x */ - struct drm_msm_timespec timeout; /* in */ -}; - -struct drm_msm_gem_cpu_fini { - __u32 handle; /* in */ -}; - -/* - * Cmdstream Submission: - */ - -/* The value written into the cmdstream is logically: - * - * ((relocbuf->gpuaddr + reloc_offset) << shift) | or - * - * When we have GPU's w/ >32bit ptrs, it should be possible to deal - * with this by emit'ing two reloc entries with appropriate shift - * values. Or a new MSM_SUBMIT_CMD_x type would also be an option. - * - * NOTE that reloc's must be sorted by order of increasing submit_offset, - * otherwise EINVAL. - */ -struct drm_msm_gem_submit_reloc { - __u32 submit_offset; /* in, offset from submit_bo */ - __u32 or; /* in, value OR'd with result */ - __s32 shift; /* in, amount of left shift (can be negative) */ - __u32 reloc_idx; /* in, index of reloc_bo buffer */ - __u64 reloc_offset; /* in, offset from start of reloc_bo */ -}; - -/* submit-types: - * BUF - this cmd buffer is executed normally. - * IB_TARGET_BUF - this cmd buffer is an IB target. Reloc's are - * processed normally, but the kernel does not setup an IB to - * this buffer in the first-level ringbuffer - * CTX_RESTORE_BUF - only executed if there has been a GPU context - * switch since the last SUBMIT ioctl - */ -#define MSM_SUBMIT_CMD_BUF 0x0001 -#define MSM_SUBMIT_CMD_IB_TARGET_BUF 0x0002 -#define MSM_SUBMIT_CMD_CTX_RESTORE_BUF 0x0003 -struct drm_msm_gem_submit_cmd { - __u32 type; /* in, one of MSM_SUBMIT_CMD_x */ - __u32 submit_idx; /* in, index of submit_bo cmdstream buffer */ - __u32 submit_offset; /* in, offset into submit_bo */ - __u32 size; /* in, cmdstream size */ - __u32 pad; - __u32 nr_relocs; /* in, number of submit_reloc's */ - __u64 relocs; /* in, ptr to array of submit_reloc's */ -}; - -/* Each buffer referenced elsewhere in the cmdstream submit (ie. the - * cmdstream buffer(s) themselves or reloc entries) has one (and only - * one) entry in the submit->bos[] table. - * - * As a optimization, the current buffer (gpu virtual address) can be - * passed back through the 'presumed' field. If on a subsequent reloc, - * userspace passes back a 'presumed' address that is still valid, - * then patching the cmdstream for this entry is skipped. This can - * avoid kernel needing to map/access the cmdstream bo in the common - * case. - */ -#define MSM_SUBMIT_BO_READ 0x0001 -#define MSM_SUBMIT_BO_WRITE 0x0002 - -#define MSM_SUBMIT_BO_FLAGS (MSM_SUBMIT_BO_READ | MSM_SUBMIT_BO_WRITE) - -struct drm_msm_gem_submit_bo { - __u32 flags; /* in, mask of MSM_SUBMIT_BO_x */ - __u32 handle; /* in, GEM handle */ - __u64 presumed; /* in/out, presumed buffer address */ -}; - -/* Valid submit ioctl flags: */ -#define MSM_SUBMIT_NO_IMPLICIT 0x80000000 /* disable implicit sync */ -#define MSM_SUBMIT_FENCE_FD_IN 0x40000000 /* enable input fence_fd */ -#define MSM_SUBMIT_FENCE_FD_OUT 0x20000000 /* enable output fence_fd */ -#define MSM_SUBMIT_SUDO 0x10000000 /* run submitted cmds from RB */ -#define MSM_SUBMIT_FLAGS ( \ - MSM_SUBMIT_NO_IMPLICIT | \ - MSM_SUBMIT_FENCE_FD_IN | \ - MSM_SUBMIT_FENCE_FD_OUT | \ - MSM_SUBMIT_SUDO | \ - 0) - -/* Each cmdstream submit consists of a table of buffers involved, and - * one or more cmdstream buffers. This allows for conditional execution - * (context-restore), and IB buffers needed for per tile/bin draw cmds. - */ -struct drm_msm_gem_submit { - __u32 flags; /* MSM_PIPE_x | MSM_SUBMIT_x */ - __u32 fence; /* out */ - __u32 nr_bos; /* in, number of submit_bo's */ - __u32 nr_cmds; /* in, number of submit_cmd's */ - __u64 bos; /* in, ptr to array of submit_bo's */ - __u64 cmds; /* in, ptr to array of submit_cmd's */ - __s32 fence_fd; /* in/out fence fd (see MSM_SUBMIT_FENCE_FD_IN/OUT) */ - __u32 queueid; /* in, submitqueue id */ -}; - -/* The normal way to synchronize with the GPU is just to CPU_PREP on - * a buffer if you need to access it from the CPU (other cmdstream - * submission from same or other contexts, PAGE_FLIP ioctl, etc, all - * handle the required synchronization under the hood). This ioctl - * mainly just exists as a way to implement the gallium pipe_fence - * APIs without requiring a dummy bo to synchronize on. - */ -struct drm_msm_wait_fence { - __u32 fence; /* in */ - __u32 pad; - struct drm_msm_timespec timeout; /* in */ - __u32 queueid; /* in, submitqueue id */ -}; - -/* madvise provides a way to tell the kernel in case a buffers contents - * can be discarded under memory pressure, which is useful for userspace - * bo cache where we want to optimistically hold on to buffer allocate - * and potential mmap, but allow the pages to be discarded under memory - * pressure. - * - * Typical usage would involve madvise(DONTNEED) when buffer enters BO - * cache, and madvise(WILLNEED) if trying to recycle buffer from BO cache. - * In the WILLNEED case, 'retained' indicates to userspace whether the - * backing pages still exist. - */ -#define MSM_MADV_WILLNEED 0 /* backing pages are needed, status returned in 'retained' */ -#define MSM_MADV_DONTNEED 1 /* backing pages not needed */ -#define __MSM_MADV_PURGED 2 /* internal state */ - -struct drm_msm_gem_madvise { - __u32 handle; /* in, GEM handle */ - __u32 madv; /* in, MSM_MADV_x */ - __u32 retained; /* out, whether backing store still exists */ -}; - -/* - * Draw queues allow the user to set specific submission parameter. Command - * submissions specify a specific submitqueue to use. ID 0 is reserved for - * backwards compatibility as a "default" submitqueue - */ - -#define MSM_SUBMITQUEUE_FLAGS (0) - -struct drm_msm_submitqueue { - __u32 flags; /* in, MSM_SUBMITQUEUE_x */ - __u32 prio; /* in, Priority level */ - __u32 id; /* out, identifier */ -}; - -#define DRM_MSM_GET_PARAM 0x00 -/* placeholder: -#define DRM_MSM_SET_PARAM 0x01 - */ -#define DRM_MSM_GEM_NEW 0x02 -#define DRM_MSM_GEM_INFO 0x03 -#define DRM_MSM_GEM_CPU_PREP 0x04 -#define DRM_MSM_GEM_CPU_FINI 0x05 -#define DRM_MSM_GEM_SUBMIT 0x06 -#define DRM_MSM_WAIT_FENCE 0x07 -#define DRM_MSM_GEM_MADVISE 0x08 -/* placeholder: -#define DRM_MSM_GEM_SVM_NEW 0x09 - */ -#define DRM_MSM_SUBMITQUEUE_NEW 0x0A -#define DRM_MSM_SUBMITQUEUE_CLOSE 0x0B - -#define DRM_IOCTL_MSM_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GET_PARAM, struct drm_msm_param) -#define DRM_IOCTL_MSM_GEM_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_NEW, struct drm_msm_gem_new) -#define DRM_IOCTL_MSM_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_INFO, struct drm_msm_gem_info) -#define DRM_IOCTL_MSM_GEM_CPU_PREP DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_GEM_CPU_PREP, struct drm_msm_gem_cpu_prep) -#define DRM_IOCTL_MSM_GEM_CPU_FINI DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_GEM_CPU_FINI, struct drm_msm_gem_cpu_fini) -#define DRM_IOCTL_MSM_GEM_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_SUBMIT, struct drm_msm_gem_submit) -#define DRM_IOCTL_MSM_WAIT_FENCE DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_WAIT_FENCE, struct drm_msm_wait_fence) -#define DRM_IOCTL_MSM_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_MADVISE, struct drm_msm_gem_madvise) -#define DRM_IOCTL_MSM_SUBMITQUEUE_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_SUBMITQUEUE_NEW, struct drm_msm_submitqueue) -#define DRM_IOCTL_MSM_SUBMITQUEUE_CLOSE DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_SUBMITQUEUE_CLOSE, __u32) - -#if defined(__cplusplus) -} -#endif - -#endif /* __MSM_DRM_H__ */ diff --git a/prebuilts/aarch64/include/libdrm/nouveau/nouveau.h b/prebuilts/aarch64/include/libdrm/nouveau/nouveau.h deleted file mode 100644 index 0c632fe..0000000 --- a/prebuilts/aarch64/include/libdrm/nouveau/nouveau.h +++ /dev/null @@ -1,280 +0,0 @@ -#ifndef __NOUVEAU_H__ -#define __NOUVEAU_H__ - -#include -#include - -/* Supported class information, provided by the kernel */ -struct nouveau_sclass { - int32_t oclass; - int minver; - int maxver; -}; - -/* Client-provided array describing class versions that are desired. - * - * These are used to match against the kernel's list of supported classes. - */ -struct nouveau_mclass { - int32_t oclass; - int version; - void *data; -}; - -struct nouveau_object { - struct nouveau_object *parent; - uint64_t handle; - uint32_t oclass; - uint32_t length; /* deprecated */ - void *data; /* deprecated */ -}; - -int nouveau_object_new(struct nouveau_object *parent, uint64_t handle, - uint32_t oclass, void *data, uint32_t length, - struct nouveau_object **); -void nouveau_object_del(struct nouveau_object **); -int nouveau_object_mthd(struct nouveau_object *, uint32_t mthd, - void *data, uint32_t size); -int nouveau_object_sclass_get(struct nouveau_object *, - struct nouveau_sclass **); -void nouveau_object_sclass_put(struct nouveau_sclass **); -int nouveau_object_mclass(struct nouveau_object *, - const struct nouveau_mclass *); - -struct nouveau_drm { - struct nouveau_object client; - int fd; - uint32_t version; - bool nvif; -}; - -static inline struct nouveau_drm * -nouveau_drm(struct nouveau_object *obj) -{ - while (obj && obj->parent) - obj = obj->parent; - return (struct nouveau_drm *)obj; -} - -int nouveau_drm_new(int fd, struct nouveau_drm **); -void nouveau_drm_del(struct nouveau_drm **); - -struct nouveau_device { - struct nouveau_object object; - int fd; /* deprecated */ - uint32_t lib_version; /* deprecated */ - uint32_t drm_version; /* deprecated */ - uint32_t chipset; - uint64_t vram_size; - uint64_t gart_size; - uint64_t vram_limit; - uint64_t gart_limit; -}; - -int nouveau_device_new(struct nouveau_object *parent, int32_t oclass, - void *data, uint32_t size, struct nouveau_device **); -void nouveau_device_del(struct nouveau_device **); - -int nouveau_getparam(struct nouveau_device *, uint64_t param, uint64_t *value); -int nouveau_setparam(struct nouveau_device *, uint64_t param, uint64_t value); - -/* deprecated */ -int nouveau_device_wrap(int fd, int close, struct nouveau_device **); -int nouveau_device_open(const char *busid, struct nouveau_device **); - -struct nouveau_client { - struct nouveau_device *device; - int id; -}; - -int nouveau_client_new(struct nouveau_device *, struct nouveau_client **); -void nouveau_client_del(struct nouveau_client **); - -union nouveau_bo_config { - struct { -#define NV04_BO_16BPP 0x00000001 -#define NV04_BO_32BPP 0x00000002 -#define NV04_BO_ZETA 0x00000004 - uint32_t surf_flags; - uint32_t surf_pitch; - } nv04; - struct { - uint32_t memtype; - uint32_t tile_mode; - } nv50; - struct { - uint32_t memtype; - uint32_t tile_mode; - } nvc0; - uint32_t data[8]; -}; - -#define NOUVEAU_BO_VRAM 0x00000001 -#define NOUVEAU_BO_GART 0x00000002 -#define NOUVEAU_BO_APER (NOUVEAU_BO_VRAM | NOUVEAU_BO_GART) -#define NOUVEAU_BO_RD 0x00000100 -#define NOUVEAU_BO_WR 0x00000200 -#define NOUVEAU_BO_RDWR (NOUVEAU_BO_RD | NOUVEAU_BO_WR) -#define NOUVEAU_BO_NOBLOCK 0x00000400 -#define NOUVEAU_BO_LOW 0x00001000 -#define NOUVEAU_BO_HIGH 0x00002000 -#define NOUVEAU_BO_OR 0x00004000 -#define NOUVEAU_BO_MAP 0x80000000 -#define NOUVEAU_BO_CONTIG 0x40000000 -#define NOUVEAU_BO_NOSNOOP 0x20000000 -#define NOUVEAU_BO_COHERENT 0x10000000 - -struct nouveau_bo { - struct nouveau_device *device; - uint32_t handle; - uint64_t size; - uint32_t flags; - uint64_t offset; - void *map; - union nouveau_bo_config config; -}; - -int nouveau_bo_new(struct nouveau_device *, uint32_t flags, uint32_t align, - uint64_t size, union nouveau_bo_config *, - struct nouveau_bo **); -int nouveau_bo_wrap(struct nouveau_device *, uint32_t handle, - struct nouveau_bo **); -int nouveau_bo_name_ref(struct nouveau_device *v, uint32_t name, - struct nouveau_bo **); -int nouveau_bo_name_get(struct nouveau_bo *, uint32_t *name); -void nouveau_bo_ref(struct nouveau_bo *, struct nouveau_bo **); -int nouveau_bo_map(struct nouveau_bo *, uint32_t access, - struct nouveau_client *); -int nouveau_bo_wait(struct nouveau_bo *, uint32_t access, - struct nouveau_client *); -int nouveau_bo_prime_handle_ref(struct nouveau_device *, int prime_fd, - struct nouveau_bo **); -int nouveau_bo_set_prime(struct nouveau_bo *, int *prime_fd); - -struct nouveau_list { - struct nouveau_list *prev; - struct nouveau_list *next; -}; - -struct nouveau_bufref { - struct nouveau_list thead; - struct nouveau_bo *bo; - uint32_t packet; - uint32_t flags; - uint32_t data; - uint32_t vor; - uint32_t tor; - uint32_t priv_data; - void *priv; -}; - -struct nouveau_bufctx { - struct nouveau_client *client; - struct nouveau_list head; - struct nouveau_list pending; - struct nouveau_list current; - int relocs; -}; - -int nouveau_bufctx_new(struct nouveau_client *, int bins, - struct nouveau_bufctx **); -void nouveau_bufctx_del(struct nouveau_bufctx **); -struct nouveau_bufref * -nouveau_bufctx_refn(struct nouveau_bufctx *, int bin, - struct nouveau_bo *, uint32_t flags); -struct nouveau_bufref * -nouveau_bufctx_mthd(struct nouveau_bufctx *, int bin, uint32_t packet, - struct nouveau_bo *, uint64_t data, uint32_t flags, - uint32_t vor, uint32_t tor); -void nouveau_bufctx_reset(struct nouveau_bufctx *, int bin); - -struct nouveau_pushbuf_krec; -struct nouveau_pushbuf { - struct nouveau_client *client; - struct nouveau_object *channel; - struct nouveau_bufctx *bufctx; - void (*kick_notify)(struct nouveau_pushbuf *); - void *user_priv; - uint32_t rsvd_kick; - uint32_t flags; - uint32_t *cur; - uint32_t *end; -}; - -struct nouveau_pushbuf_refn { - struct nouveau_bo *bo; - uint32_t flags; -}; - -int nouveau_pushbuf_new(struct nouveau_client *, struct nouveau_object *chan, - int nr, uint32_t size, bool immediate, - struct nouveau_pushbuf **); -void nouveau_pushbuf_del(struct nouveau_pushbuf **); -int nouveau_pushbuf_space(struct nouveau_pushbuf *, uint32_t dwords, - uint32_t relocs, uint32_t pushes); -void nouveau_pushbuf_data(struct nouveau_pushbuf *, struct nouveau_bo *, - uint64_t offset, uint64_t length); -int nouveau_pushbuf_refn(struct nouveau_pushbuf *, - struct nouveau_pushbuf_refn *, int nr); -/* Emits a reloc into the push buffer at the current position, you *must* - * have previously added the referenced buffer to a buffer context, and - * validated it against the current push buffer. - */ -void nouveau_pushbuf_reloc(struct nouveau_pushbuf *, struct nouveau_bo *, - uint32_t data, uint32_t flags, - uint32_t vor, uint32_t tor); -int nouveau_pushbuf_validate(struct nouveau_pushbuf *); -uint32_t nouveau_pushbuf_refd(struct nouveau_pushbuf *, struct nouveau_bo *); -int nouveau_pushbuf_kick(struct nouveau_pushbuf *, struct nouveau_object *chan); -struct nouveau_bufctx * -nouveau_pushbuf_bufctx(struct nouveau_pushbuf *, struct nouveau_bufctx *); - -#define NOUVEAU_DEVICE_CLASS 0x80000000 -#define NOUVEAU_FIFO_CHANNEL_CLASS 0x80000001 -#define NOUVEAU_NOTIFIER_CLASS 0x80000002 - -struct nouveau_fifo { - struct nouveau_object *object; - uint32_t channel; - uint32_t pushbuf; - uint64_t unused1[3]; -}; - -struct nv04_fifo { - struct nouveau_fifo base; - uint32_t vram; - uint32_t gart; - uint32_t notify; -}; - -struct nvc0_fifo { - struct nouveau_fifo base; - uint32_t notify; -}; - -#define NVE0_FIFO_ENGINE_GR 0x00000001 -#define NVE0_FIFO_ENGINE_VP 0x00000002 -#define NVE0_FIFO_ENGINE_PPP 0x00000004 -#define NVE0_FIFO_ENGINE_BSP 0x00000008 -#define NVE0_FIFO_ENGINE_CE0 0x00000010 -#define NVE0_FIFO_ENGINE_CE1 0x00000020 -#define NVE0_FIFO_ENGINE_ENC 0x00000040 - -struct nve0_fifo { - struct { - struct nouveau_fifo base; - uint32_t notify; - }; - uint32_t engine; -}; - -struct nv04_notify { - struct nouveau_object *object; - uint32_t offset; - uint32_t length; -}; - -bool -nouveau_check_dead_channel(struct nouveau_drm *, struct nouveau_object *chan); - -#endif diff --git a/prebuilts/aarch64/include/libdrm/nouveau/nvif/cl0080.h b/prebuilts/aarch64/include/libdrm/nouveau/nvif/cl0080.h deleted file mode 100644 index 331620a..0000000 --- a/prebuilts/aarch64/include/libdrm/nouveau/nvif/cl0080.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef __NVIF_CL0080_H__ -#define __NVIF_CL0080_H__ - -struct nv_device_v0 { - __u8 version; - __u8 pad01[7]; - __u64 device; /* device identifier, ~0 for client default */ -}; - -#define NV_DEVICE_V0_INFO 0x00 -#define NV_DEVICE_V0_TIME 0x01 - -struct nv_device_info_v0 { - __u8 version; -#define NV_DEVICE_INFO_V0_IGP 0x00 -#define NV_DEVICE_INFO_V0_PCI 0x01 -#define NV_DEVICE_INFO_V0_AGP 0x02 -#define NV_DEVICE_INFO_V0_PCIE 0x03 -#define NV_DEVICE_INFO_V0_SOC 0x04 - __u8 platform; - __u16 chipset; /* from NV_PMC_BOOT_0 */ - __u8 revision; /* from NV_PMC_BOOT_0 */ -#define NV_DEVICE_INFO_V0_TNT 0x01 -#define NV_DEVICE_INFO_V0_CELSIUS 0x02 -#define NV_DEVICE_INFO_V0_KELVIN 0x03 -#define NV_DEVICE_INFO_V0_RANKINE 0x04 -#define NV_DEVICE_INFO_V0_CURIE 0x05 -#define NV_DEVICE_INFO_V0_TESLA 0x06 -#define NV_DEVICE_INFO_V0_FERMI 0x07 -#define NV_DEVICE_INFO_V0_KEPLER 0x08 -#define NV_DEVICE_INFO_V0_MAXWELL 0x09 - __u8 family; - __u8 pad06[2]; - __u64 ram_size; - __u64 ram_user; - char chip[16]; - char name[64]; -}; - -struct nv_device_time_v0 { - __u8 version; - __u8 pad01[7]; - __u64 time; -}; -#endif diff --git a/prebuilts/aarch64/include/libdrm/nouveau/nvif/cl9097.h b/prebuilts/aarch64/include/libdrm/nouveau/nvif/cl9097.h deleted file mode 100644 index 4057676..0000000 --- a/prebuilts/aarch64/include/libdrm/nouveau/nvif/cl9097.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef __NVIF_CL9097_H__ -#define __NVIF_CL9097_H__ - -#define FERMI_A_ZBC_COLOR 0x00 -#define FERMI_A_ZBC_DEPTH 0x01 - -struct fermi_a_zbc_color_v0 { - __u8 version; -#define FERMI_A_ZBC_COLOR_V0_FMT_ZERO 0x01 -#define FERMI_A_ZBC_COLOR_V0_FMT_UNORM_ONE 0x02 -#define FERMI_A_ZBC_COLOR_V0_FMT_RF32_GF32_BF32_AF32 0x04 -#define FERMI_A_ZBC_COLOR_V0_FMT_R16_G16_B16_A16 0x08 -#define FERMI_A_ZBC_COLOR_V0_FMT_RN16_GN16_BN16_AN16 0x0c -#define FERMI_A_ZBC_COLOR_V0_FMT_RS16_GS16_BS16_AS16 0x10 -#define FERMI_A_ZBC_COLOR_V0_FMT_RU16_GU16_BU16_AU16 0x14 -#define FERMI_A_ZBC_COLOR_V0_FMT_RF16_GF16_BF16_AF16 0x16 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8R8G8B8 0x18 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8RL8GL8BL8 0x1c -#define FERMI_A_ZBC_COLOR_V0_FMT_A2B10G10R10 0x20 -#define FERMI_A_ZBC_COLOR_V0_FMT_AU2BU10GU10RU10 0x24 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8B8G8R8 0x28 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8BL8GL8RL8 0x2c -#define FERMI_A_ZBC_COLOR_V0_FMT_AN8BN8GN8RN8 0x30 -#define FERMI_A_ZBC_COLOR_V0_FMT_AS8BS8GS8RS8 0x34 -#define FERMI_A_ZBC_COLOR_V0_FMT_AU8BU8GU8RU8 0x38 -#define FERMI_A_ZBC_COLOR_V0_FMT_A2R10G10B10 0x3c -#define FERMI_A_ZBC_COLOR_V0_FMT_BF10GF11RF11 0x40 - __u8 format; - __u8 index; - __u8 pad03[5]; - __u32 ds[4]; - __u32 l2[4]; -}; - -struct fermi_a_zbc_depth_v0 { - __u8 version; -#define FERMI_A_ZBC_DEPTH_V0_FMT_FP32 0x01 - __u8 format; - __u8 index; - __u8 pad03[5]; - __u32 ds; - __u32 l2; -}; -#endif diff --git a/prebuilts/aarch64/include/libdrm/nouveau/nvif/class.h b/prebuilts/aarch64/include/libdrm/nouveau/nvif/class.h deleted file mode 100644 index 4179cd6..0000000 --- a/prebuilts/aarch64/include/libdrm/nouveau/nvif/class.h +++ /dev/null @@ -1,141 +0,0 @@ -#ifndef __NVIF_CLASS_H__ -#define __NVIF_CLASS_H__ - -/* these class numbers are made up by us, and not nvidia-assigned */ -#define NVIF_CLASS_CONTROL /* if0001.h */ -1 -#define NVIF_CLASS_PERFMON /* if0002.h */ -2 -#define NVIF_CLASS_PERFDOM /* if0003.h */ -3 -#define NVIF_CLASS_SW_NV04 /* if0004.h */ -4 -#define NVIF_CLASS_SW_NV10 /* if0005.h */ -5 -#define NVIF_CLASS_SW_NV50 /* if0005.h */ -6 -#define NVIF_CLASS_SW_GF100 /* if0005.h */ -7 - -/* the below match nvidia-assigned (either in hw, or sw) class numbers */ -#define NV_DEVICE /* cl0080.h */ 0x00000080 - -#define NV_DMA_FROM_MEMORY /* cl0002.h */ 0x00000002 -#define NV_DMA_TO_MEMORY /* cl0002.h */ 0x00000003 -#define NV_DMA_IN_MEMORY /* cl0002.h */ 0x0000003d - -#define FERMI_TWOD_A 0x0000902d - -#define FERMI_MEMORY_TO_MEMORY_FORMAT_A 0x00009039 - -#define KEPLER_INLINE_TO_MEMORY_A 0x0000a040 -#define KEPLER_INLINE_TO_MEMORY_B 0x0000a140 - -#define NV04_DISP /* cl0046.h */ 0x00000046 - -#define NV03_CHANNEL_DMA /* cl506b.h */ 0x0000006b -#define NV10_CHANNEL_DMA /* cl506b.h */ 0x0000006e -#define NV17_CHANNEL_DMA /* cl506b.h */ 0x0000176e -#define NV40_CHANNEL_DMA /* cl506b.h */ 0x0000406e -#define NV50_CHANNEL_DMA /* cl506e.h */ 0x0000506e -#define G82_CHANNEL_DMA /* cl826e.h */ 0x0000826e - -#define NV50_CHANNEL_GPFIFO /* cl506f.h */ 0x0000506f -#define G82_CHANNEL_GPFIFO /* cl826f.h */ 0x0000826f -#define FERMI_CHANNEL_GPFIFO /* cl906f.h */ 0x0000906f -#define KEPLER_CHANNEL_GPFIFO_A /* cla06f.h */ 0x0000a06f -#define MAXWELL_CHANNEL_GPFIFO_A /* cla06f.h */ 0x0000b06f - -#define NV50_DISP /* cl5070.h */ 0x00005070 -#define G82_DISP /* cl5070.h */ 0x00008270 -#define GT200_DISP /* cl5070.h */ 0x00008370 -#define GT214_DISP /* cl5070.h */ 0x00008570 -#define GT206_DISP /* cl5070.h */ 0x00008870 -#define GF110_DISP /* cl5070.h */ 0x00009070 -#define GK104_DISP /* cl5070.h */ 0x00009170 -#define GK110_DISP /* cl5070.h */ 0x00009270 -#define GM107_DISP /* cl5070.h */ 0x00009470 -#define GM204_DISP /* cl5070.h */ 0x00009570 - -#define NV31_MPEG 0x00003174 -#define G82_MPEG 0x00008274 - -#define NV74_VP2 0x00007476 - -#define NV50_DISP_CURSOR /* cl507a.h */ 0x0000507a -#define G82_DISP_CURSOR /* cl507a.h */ 0x0000827a -#define GT214_DISP_CURSOR /* cl507a.h */ 0x0000857a -#define GF110_DISP_CURSOR /* cl507a.h */ 0x0000907a -#define GK104_DISP_CURSOR /* cl507a.h */ 0x0000917a - -#define NV50_DISP_OVERLAY /* cl507b.h */ 0x0000507b -#define G82_DISP_OVERLAY /* cl507b.h */ 0x0000827b -#define GT214_DISP_OVERLAY /* cl507b.h */ 0x0000857b -#define GF110_DISP_OVERLAY /* cl507b.h */ 0x0000907b -#define GK104_DISP_OVERLAY /* cl507b.h */ 0x0000917b - -#define NV50_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000507c -#define G82_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000827c -#define GT200_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000837c -#define GT214_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000857c -#define GF110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000907c -#define GK104_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000917c -#define GK110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000927c - -#define NV50_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000507d -#define G82_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000827d -#define GT200_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000837d -#define GT214_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000857d -#define GT206_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000887d -#define GF110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000907d -#define GK104_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000917d -#define GK110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000927d -#define GM107_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000947d -#define GM204_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000957d - -#define NV50_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000507e -#define G82_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000827e -#define GT200_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000837e -#define GT214_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000857e -#define GF110_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ 0x0000907e -#define GK104_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ 0x0000917e - -#define FERMI_A /* cl9097.h */ 0x00009097 -#define FERMI_B /* cl9097.h */ 0x00009197 -#define FERMI_C /* cl9097.h */ 0x00009297 - -#define KEPLER_A /* cl9097.h */ 0x0000a097 -#define KEPLER_B /* cl9097.h */ 0x0000a197 -#define KEPLER_C /* cl9097.h */ 0x0000a297 - -#define MAXWELL_A /* cl9097.h */ 0x0000b097 -#define MAXWELL_B /* cl9097.h */ 0x0000b197 - -#define NV74_BSP 0x000074b0 - -#define GT212_MSVLD 0x000085b1 -#define IGT21A_MSVLD 0x000086b1 -#define G98_MSVLD 0x000088b1 -#define GF100_MSVLD 0x000090b1 -#define GK104_MSVLD 0x000095b1 - -#define GT212_MSPDEC 0x000085b2 -#define G98_MSPDEC 0x000088b2 -#define GF100_MSPDEC 0x000090b2 -#define GK104_MSPDEC 0x000095b2 - -#define GT212_MSPPP 0x000085b3 -#define G98_MSPPP 0x000088b3 -#define GF100_MSPPP 0x000090b3 - -#define G98_SEC 0x000088b4 - -#define GT212_DMA 0x000085b5 -#define FERMI_DMA 0x000090b5 -#define KEPLER_DMA_COPY_A 0x0000a0b5 -#define MAXWELL_DMA_COPY_A 0x0000b0b5 - -#define FERMI_DECOMPRESS 0x000090b8 - -#define FERMI_COMPUTE_A 0x000090c0 -#define FERMI_COMPUTE_B 0x000091c0 -#define KEPLER_COMPUTE_A 0x0000a0c0 -#define KEPLER_COMPUTE_B 0x0000a1c0 -#define MAXWELL_COMPUTE_A 0x0000b0c0 -#define MAXWELL_COMPUTE_B 0x0000b1c0 - -#define NV74_CIPHER 0x000074c1 -#endif diff --git a/prebuilts/aarch64/include/libdrm/nouveau/nvif/if0002.h b/prebuilts/aarch64/include/libdrm/nouveau/nvif/if0002.h deleted file mode 100644 index c04c91d..0000000 --- a/prebuilts/aarch64/include/libdrm/nouveau/nvif/if0002.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef __NVIF_IF0002_H__ -#define __NVIF_IF0002_H__ - -#define NVIF_PERFMON_V0_QUERY_DOMAIN 0x00 -#define NVIF_PERFMON_V0_QUERY_SIGNAL 0x01 -#define NVIF_PERFMON_V0_QUERY_SOURCE 0x02 - -struct nvif_perfmon_query_domain_v0 { - __u8 version; - __u8 id; - __u8 counter_nr; - __u8 iter; - __u16 signal_nr; - __u8 pad05[2]; - char name[64]; -}; - -struct nvif_perfmon_query_signal_v0 { - __u8 version; - __u8 domain; - __u16 iter; - __u8 signal; - __u8 source_nr; - __u8 pad05[2]; - char name[64]; -}; - -struct nvif_perfmon_query_source_v0 { - __u8 version; - __u8 domain; - __u8 signal; - __u8 iter; - __u8 pad04[4]; - __u32 source; - __u32 mask; - char name[64]; -}; -#endif diff --git a/prebuilts/aarch64/include/libdrm/nouveau/nvif/if0003.h b/prebuilts/aarch64/include/libdrm/nouveau/nvif/if0003.h deleted file mode 100644 index 0cd03ef..0000000 --- a/prebuilts/aarch64/include/libdrm/nouveau/nvif/if0003.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __NVIF_IF0003_H__ -#define __NVIF_IF0003_H__ - -struct nvif_perfdom_v0 { - __u8 version; - __u8 domain; - __u8 mode; - __u8 pad03[1]; - struct { - __u8 signal[4]; - __u64 source[4][8]; - __u16 logic_op; - } ctr[4]; -}; - -#define NVIF_PERFDOM_V0_INIT 0x00 -#define NVIF_PERFDOM_V0_SAMPLE 0x01 -#define NVIF_PERFDOM_V0_READ 0x02 - -struct nvif_perfdom_init { -}; - -struct nvif_perfdom_sample { -}; - -struct nvif_perfdom_read_v0 { - __u8 version; - __u8 pad01[7]; - __u32 ctr[4]; - __u32 clk; - __u8 pad04[4]; -}; -#endif diff --git a/prebuilts/aarch64/include/libdrm/nouveau/nvif/ioctl.h b/prebuilts/aarch64/include/libdrm/nouveau/nvif/ioctl.h deleted file mode 100644 index c5f5eb8..0000000 --- a/prebuilts/aarch64/include/libdrm/nouveau/nvif/ioctl.h +++ /dev/null @@ -1,132 +0,0 @@ -#ifndef __NVIF_IOCTL_H__ -#define __NVIF_IOCTL_H__ - -#define NVIF_VERSION_LATEST 0x0000000000000000ULL - -struct nvif_ioctl_v0 { - __u8 version; -#define NVIF_IOCTL_V0_NOP 0x00 -#define NVIF_IOCTL_V0_SCLASS 0x01 -#define NVIF_IOCTL_V0_NEW 0x02 -#define NVIF_IOCTL_V0_DEL 0x03 -#define NVIF_IOCTL_V0_MTHD 0x04 -#define NVIF_IOCTL_V0_RD 0x05 -#define NVIF_IOCTL_V0_WR 0x06 -#define NVIF_IOCTL_V0_MAP 0x07 -#define NVIF_IOCTL_V0_UNMAP 0x08 -#define NVIF_IOCTL_V0_NTFY_NEW 0x09 -#define NVIF_IOCTL_V0_NTFY_DEL 0x0a -#define NVIF_IOCTL_V0_NTFY_GET 0x0b -#define NVIF_IOCTL_V0_NTFY_PUT 0x0c - __u8 type; - __u8 pad02[4]; -#define NVIF_IOCTL_V0_OWNER_NVIF 0x00 -#define NVIF_IOCTL_V0_OWNER_ANY 0xff - __u8 owner; -#define NVIF_IOCTL_V0_ROUTE_NVIF 0x00 -#define NVIF_IOCTL_V0_ROUTE_HIDDEN 0xff - __u8 route; - __u64 token; - __u64 object; - __u8 data[]; /* ioctl data (below) */ -}; - -struct nvif_ioctl_nop_v0 { - __u64 version; -}; - -struct nvif_ioctl_sclass_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 count; - __u8 pad02[6]; - struct nvif_ioctl_sclass_oclass_v0 { - __s32 oclass; - __s16 minver; - __s16 maxver; - } oclass[]; -}; - -struct nvif_ioctl_new_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 pad01[6]; - __u8 route; - __u64 token; - __u64 object; - __u32 handle; - __s32 oclass; - __u8 data[]; /* class data (class.h) */ -}; - -struct nvif_ioctl_del { -}; - -struct nvif_ioctl_rd_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 size; - __u8 pad02[2]; - __u32 data; - __u64 addr; -}; - -struct nvif_ioctl_wr_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 size; - __u8 pad02[2]; - __u32 data; - __u64 addr; -}; - -struct nvif_ioctl_map_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 pad01[3]; - __u32 length; - __u64 handle; -}; - -struct nvif_ioctl_unmap { -}; - -struct nvif_ioctl_ntfy_new_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 event; - __u8 index; - __u8 pad03[5]; - __u8 data[]; /* event request data (event.h) */ -}; - -struct nvif_ioctl_ntfy_del_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 index; - __u8 pad02[6]; -}; - -struct nvif_ioctl_ntfy_get_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 index; - __u8 pad02[6]; -}; - -struct nvif_ioctl_ntfy_put_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 index; - __u8 pad02[6]; -}; - -struct nvif_ioctl_mthd_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 method; - __u8 pad02[6]; - __u8 data[]; /* method data (class.h) */ -}; - -#endif diff --git a/prebuilts/aarch64/include/libdrm/nouveau/nvif/unpack.h b/prebuilts/aarch64/include/libdrm/nouveau/nvif/unpack.h deleted file mode 100644 index 751bcf4..0000000 --- a/prebuilts/aarch64/include/libdrm/nouveau/nvif/unpack.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __NVIF_UNPACK_H__ -#define __NVIF_UNPACK_H__ - -#define nvif_unvers(r,d,s,m) ({ \ - void **_data = (d); __u32 *_size = (s); int _ret = (r); \ - if (_ret == -ENOSYS && *_size == sizeof(m)) { \ - *_data = NULL; \ - *_size = _ret = 0; \ - } \ - _ret; \ -}) - -#define nvif_unpack(r,d,s,m,vl,vh,x) ({ \ - void **_data = (d); __u32 *_size = (s); \ - int _ret = (r), _vl = (vl), _vh = (vh); \ - if (_ret == -ENOSYS && *_size >= sizeof(m) && \ - (m).version >= _vl && (m).version <= _vh) { \ - *_data = (__u8 *)*_data + sizeof(m); \ - *_size = *_size - sizeof(m); \ - if (_ret = 0, !(x)) { \ - _ret = *_size ? -E2BIG : 0; \ - *_data = NULL; \ - *_size = 0; \ - } \ - } \ - _ret; \ -}) -#endif diff --git a/prebuilts/aarch64/include/libdrm/nouveau_drm.h b/prebuilts/aarch64/include/libdrm/nouveau_drm.h deleted file mode 100644 index 4f94148..0000000 --- a/prebuilts/aarch64/include/libdrm/nouveau_drm.h +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright 2005 Stephane Marchesin. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef __NOUVEAU_DRM_H__ -#define __NOUVEAU_DRM_H__ - -#define NOUVEAU_DRM_HEADER_PATCHLEVEL 16 - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -struct drm_nouveau_channel_alloc { - uint32_t fb_ctxdma_handle; - uint32_t tt_ctxdma_handle; - - int channel; - uint32_t pushbuf_domains; - - /* Notifier memory */ - uint32_t notifier_handle; - - /* DRM-enforced subchannel assignments */ - struct { - uint32_t handle; - uint32_t grclass; - } subchan[8]; - uint32_t nr_subchan; -}; - -struct drm_nouveau_channel_free { - int channel; -}; - -struct drm_nouveau_grobj_alloc { - int channel; - uint32_t handle; - int class; -}; - -struct drm_nouveau_notifierobj_alloc { - uint32_t channel; - uint32_t handle; - uint32_t size; - uint32_t offset; -}; - -struct drm_nouveau_gpuobj_free { - int channel; - uint32_t handle; -}; - -#define NOUVEAU_GETPARAM_PCI_VENDOR 3 -#define NOUVEAU_GETPARAM_PCI_DEVICE 4 -#define NOUVEAU_GETPARAM_BUS_TYPE 5 -#define NOUVEAU_GETPARAM_FB_SIZE 8 -#define NOUVEAU_GETPARAM_AGP_SIZE 9 -#define NOUVEAU_GETPARAM_CHIPSET_ID 11 -#define NOUVEAU_GETPARAM_VM_VRAM_BASE 12 -#define NOUVEAU_GETPARAM_GRAPH_UNITS 13 -#define NOUVEAU_GETPARAM_PTIMER_TIME 14 -#define NOUVEAU_GETPARAM_HAS_BO_USAGE 15 -#define NOUVEAU_GETPARAM_HAS_PAGEFLIP 16 -struct drm_nouveau_getparam { - uint64_t param; - uint64_t value; -}; - -struct drm_nouveau_setparam { - uint64_t param; - uint64_t value; -}; - -#define NOUVEAU_GEM_DOMAIN_CPU (1 << 0) -#define NOUVEAU_GEM_DOMAIN_VRAM (1 << 1) -#define NOUVEAU_GEM_DOMAIN_GART (1 << 2) -#define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3) -#define NOUVEAU_GEM_DOMAIN_COHERENT (1 << 4) - -#define NOUVEAU_GEM_TILE_COMP 0x00030000 /* nv50-only */ -#define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00 -#define NOUVEAU_GEM_TILE_16BPP 0x00000001 -#define NOUVEAU_GEM_TILE_32BPP 0x00000002 -#define NOUVEAU_GEM_TILE_ZETA 0x00000004 -#define NOUVEAU_GEM_TILE_NONCONTIG 0x00000008 - -struct drm_nouveau_gem_info { - __u32 handle; - __u32 domain; - __u64 size; - __u64 offset; - __u64 map_handle; - __u32 tile_mode; - __u32 tile_flags; -}; - -struct drm_nouveau_gem_new { - struct drm_nouveau_gem_info info; - __u32 channel_hint; - __u32 align; -}; - -#define NOUVEAU_GEM_MAX_BUFFERS 1024 -struct drm_nouveau_gem_pushbuf_bo_presumed { - __u32 valid; - __u32 domain; - __u64 offset; -}; - -struct drm_nouveau_gem_pushbuf_bo { - __u64 user_priv; - __u32 handle; - __u32 read_domains; - __u32 write_domains; - __u32 valid_domains; - struct drm_nouveau_gem_pushbuf_bo_presumed presumed; -}; - -#define NOUVEAU_GEM_RELOC_LOW (1 << 0) -#define NOUVEAU_GEM_RELOC_HIGH (1 << 1) -#define NOUVEAU_GEM_RELOC_OR (1 << 2) -#define NOUVEAU_GEM_MAX_RELOCS 1024 -struct drm_nouveau_gem_pushbuf_reloc { - __u32 reloc_bo_index; - __u32 reloc_bo_offset; - __u32 bo_index; - __u32 flags; - __u32 data; - __u32 vor; - __u32 tor; -}; - -#define NOUVEAU_GEM_MAX_PUSH 512 -struct drm_nouveau_gem_pushbuf_push { - __u32 bo_index; - __u32 pad; - __u64 offset; - __u64 length; -}; - -struct drm_nouveau_gem_pushbuf { - __u32 channel; - __u32 nr_buffers; - __u64 buffers; - __u32 nr_relocs; - __u32 nr_push; - __u64 relocs; - __u64 push; - __u32 suffix0; - __u32 suffix1; -#define NOUVEAU_GEM_PUSHBUF_SYNC (1ULL << 0) - __u64 vram_available; - __u64 gart_available; -}; - -#define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001 -#define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004 -struct drm_nouveau_gem_cpu_prep { - __u32 handle; - __u32 flags; -}; - -struct drm_nouveau_gem_cpu_fini { - __u32 handle; -}; - -#define DRM_NOUVEAU_GETPARAM 0x00 /* deprecated */ -#define DRM_NOUVEAU_SETPARAM 0x01 /* deprecated */ -#define DRM_NOUVEAU_CHANNEL_ALLOC 0x02 /* deprecated */ -#define DRM_NOUVEAU_CHANNEL_FREE 0x03 /* deprecated */ -#define DRM_NOUVEAU_GROBJ_ALLOC 0x04 /* deprecated */ -#define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC 0x05 /* deprecated */ -#define DRM_NOUVEAU_GPUOBJ_FREE 0x06 /* deprecated */ -#define DRM_NOUVEAU_NVIF 0x07 -#define DRM_NOUVEAU_SVM_INIT 0x08 -#define DRM_NOUVEAU_SVM_BIND 0x09 -#define DRM_NOUVEAU_GEM_NEW 0x40 -#define DRM_NOUVEAU_GEM_PUSHBUF 0x41 -#define DRM_NOUVEAU_GEM_CPU_PREP 0x42 -#define DRM_NOUVEAU_GEM_CPU_FINI 0x43 -#define DRM_NOUVEAU_GEM_INFO 0x44 - -struct drm_nouveau_svm_init { - __u64 unmanaged_addr; - __u64 unmanaged_size; -}; - -struct drm_nouveau_svm_bind { - __u64 header; - __u64 va_start; - __u64 va_end; - __u64 npages; - __u64 stride; - __u64 result; - __u64 reserved0; - __u64 reserved1; -}; - -#define NOUVEAU_SVM_BIND_COMMAND_SHIFT 0 -#define NOUVEAU_SVM_BIND_COMMAND_BITS 8 -#define NOUVEAU_SVM_BIND_COMMAND_MASK ((1 << 8) - 1) -#define NOUVEAU_SVM_BIND_PRIORITY_SHIFT 8 -#define NOUVEAU_SVM_BIND_PRIORITY_BITS 8 -#define NOUVEAU_SVM_BIND_PRIORITY_MASK ((1 << 8) - 1) -#define NOUVEAU_SVM_BIND_TARGET_SHIFT 16 -#define NOUVEAU_SVM_BIND_TARGET_BITS 32 -#define NOUVEAU_SVM_BIND_TARGET_MASK 0xffffffff - -/* - * Below is use to validate ioctl argument, userspace can also use it to make - * sure that no bit are set beyond known fields for a given kernel version. - */ -#define NOUVEAU_SVM_BIND_VALID_BITS 48 -#define NOUVEAU_SVM_BIND_VALID_MASK ((1ULL << NOUVEAU_SVM_BIND_VALID_BITS) - 1) - - -/* - * NOUVEAU_BIND_COMMAND__MIGRATE: synchronous migrate to target memory. - * result: number of page successfuly migrate to the target memory. - */ -#define NOUVEAU_SVM_BIND_COMMAND__MIGRATE 0 - -/* - * NOUVEAU_SVM_BIND_HEADER_TARGET__GPU_VRAM: target the GPU VRAM memory. - */ -#define NOUVEAU_SVM_BIND_TARGET__GPU_VRAM (1UL << 31) - - -#if defined(__cplusplus) -} -#endif - -#endif /* __NOUVEAU_DRM_H__ */ diff --git a/prebuilts/aarch64/include/libdrm/qxl_drm.h b/prebuilts/aarch64/include/libdrm/qxl_drm.h deleted file mode 100644 index 880999d..0000000 --- a/prebuilts/aarch64/include/libdrm/qxl_drm.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright 2013 Red Hat - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef QXL_DRM_H -#define QXL_DRM_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints. - * - * Do not use pointers, use __u64 instead for 32 bit / 64 bit user/kernel - * compatibility Keep fields aligned to their size - */ - -#define QXL_GEM_DOMAIN_CPU 0 -#define QXL_GEM_DOMAIN_VRAM 1 -#define QXL_GEM_DOMAIN_SURFACE 2 - -#define DRM_QXL_ALLOC 0x00 -#define DRM_QXL_MAP 0x01 -#define DRM_QXL_EXECBUFFER 0x02 -#define DRM_QXL_UPDATE_AREA 0x03 -#define DRM_QXL_GETPARAM 0x04 -#define DRM_QXL_CLIENTCAP 0x05 - -#define DRM_QXL_ALLOC_SURF 0x06 - -struct drm_qxl_alloc { - __u32 size; - __u32 handle; /* 0 is an invalid handle */ -}; - -struct drm_qxl_map { - __u64 offset; /* use for mmap system call */ - __u32 handle; - __u32 pad; -}; - -/* - * dest is the bo we are writing the relocation into - * src is bo we are relocating. - * *(dest_handle.base_addr + dest_offset) = physical_address(src_handle.addr + - * src_offset) - */ -#define QXL_RELOC_TYPE_BO 1 -#define QXL_RELOC_TYPE_SURF 2 - -struct drm_qxl_reloc { - __u64 src_offset; /* offset into src_handle or src buffer */ - __u64 dst_offset; /* offset in dest handle */ - __u32 src_handle; /* dest handle to compute address from */ - __u32 dst_handle; /* 0 if to command buffer */ - __u32 reloc_type; - __u32 pad; -}; - -struct drm_qxl_command { - __u64 command; /* void* */ - __u64 relocs; /* struct drm_qxl_reloc* */ - __u32 type; - __u32 command_size; - __u32 relocs_num; - __u32 pad; -}; - -struct drm_qxl_execbuffer { - __u32 flags; /* for future use */ - __u32 commands_num; - __u64 commands; /* struct drm_qxl_command* */ -}; - -struct drm_qxl_update_area { - __u32 handle; - __u32 top; - __u32 left; - __u32 bottom; - __u32 right; - __u32 pad; -}; - -#define QXL_PARAM_NUM_SURFACES 1 /* rom->n_surfaces */ -#define QXL_PARAM_MAX_RELOCS 2 -struct drm_qxl_getparam { - __u64 param; - __u64 value; -}; - -/* these are one bit values */ -struct drm_qxl_clientcap { - __u32 index; - __u32 pad; -}; - -struct drm_qxl_alloc_surf { - __u32 format; - __u32 width; - __u32 height; - __s32 stride; - __u32 handle; - __u32 pad; -}; - -#define DRM_IOCTL_QXL_ALLOC \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_ALLOC, struct drm_qxl_alloc) - -#define DRM_IOCTL_QXL_MAP \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_MAP, struct drm_qxl_map) - -#define DRM_IOCTL_QXL_EXECBUFFER \ - DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_EXECBUFFER,\ - struct drm_qxl_execbuffer) - -#define DRM_IOCTL_QXL_UPDATE_AREA \ - DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_UPDATE_AREA,\ - struct drm_qxl_update_area) - -#define DRM_IOCTL_QXL_GETPARAM \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_GETPARAM,\ - struct drm_qxl_getparam) - -#define DRM_IOCTL_QXL_CLIENTCAP \ - DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_CLIENTCAP,\ - struct drm_qxl_clientcap) - -#define DRM_IOCTL_QXL_ALLOC_SURF \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_ALLOC_SURF,\ - struct drm_qxl_alloc_surf) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/libdrm/r128_drm.h b/prebuilts/aarch64/include/libdrm/r128_drm.h deleted file mode 100644 index bf431a0..0000000 --- a/prebuilts/aarch64/include/libdrm/r128_drm.h +++ /dev/null @@ -1,336 +0,0 @@ -/* r128_drm.h -- Public header for the r128 driver -*- linux-c -*- - * Created: Wed Apr 5 19:24:19 2000 by kevin@precisioninsight.com - */ -/* - * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Gareth Hughes - * Kevin E. Martin - */ - -#ifndef __R128_DRM_H__ -#define __R128_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the X server file (r128_sarea.h) - */ -#ifndef __R128_SAREA_DEFINES__ -#define __R128_SAREA_DEFINES__ - -/* What needs to be changed for the current vertex buffer? - */ -#define R128_UPLOAD_CONTEXT 0x001 -#define R128_UPLOAD_SETUP 0x002 -#define R128_UPLOAD_TEX0 0x004 -#define R128_UPLOAD_TEX1 0x008 -#define R128_UPLOAD_TEX0IMAGES 0x010 -#define R128_UPLOAD_TEX1IMAGES 0x020 -#define R128_UPLOAD_CORE 0x040 -#define R128_UPLOAD_MASKS 0x080 -#define R128_UPLOAD_WINDOW 0x100 -#define R128_UPLOAD_CLIPRECTS 0x200 /* handled client-side */ -#define R128_REQUIRE_QUIESCENCE 0x400 -#define R128_UPLOAD_ALL 0x7ff - -#define R128_FRONT 0x1 -#define R128_BACK 0x2 -#define R128_DEPTH 0x4 - -/* Primitive types - */ -#define R128_POINTS 0x1 -#define R128_LINES 0x2 -#define R128_LINE_STRIP 0x3 -#define R128_TRIANGLES 0x4 -#define R128_TRIANGLE_FAN 0x5 -#define R128_TRIANGLE_STRIP 0x6 - -/* Vertex/indirect buffer size - */ -#define R128_BUFFER_SIZE 16384 - -/* Byte offsets for indirect buffer data - */ -#define R128_INDEX_PRIM_OFFSET 20 -#define R128_HOSTDATA_BLIT_OFFSET 32 - -/* Keep these small for testing. - */ -#define R128_NR_SAREA_CLIPRECTS 12 - -/* There are 2 heaps (local/AGP). Each region within a heap is a - * minimum of 64k, and there are at most 64 of them per heap. - */ -#define R128_LOCAL_TEX_HEAP 0 -#define R128_AGP_TEX_HEAP 1 -#define R128_NR_TEX_HEAPS 2 -#define R128_NR_TEX_REGIONS 64 -#define R128_LOG_TEX_GRANULARITY 16 - -#define R128_NR_CONTEXT_REGS 12 - -#define R128_MAX_TEXTURE_LEVELS 11 -#define R128_MAX_TEXTURE_UNITS 2 - -#endif /* __R128_SAREA_DEFINES__ */ - -typedef struct { - /* Context state - can be written in one large chunk */ - unsigned int dst_pitch_offset_c; - unsigned int dp_gui_master_cntl_c; - unsigned int sc_top_left_c; - unsigned int sc_bottom_right_c; - unsigned int z_offset_c; - unsigned int z_pitch_c; - unsigned int z_sten_cntl_c; - unsigned int tex_cntl_c; - unsigned int misc_3d_state_cntl_reg; - unsigned int texture_clr_cmp_clr_c; - unsigned int texture_clr_cmp_msk_c; - unsigned int fog_color_c; - - /* Texture state */ - unsigned int tex_size_pitch_c; - unsigned int constant_color_c; - - /* Setup state */ - unsigned int pm4_vc_fpu_setup; - unsigned int setup_cntl; - - /* Mask state */ - unsigned int dp_write_mask; - unsigned int sten_ref_mask_c; - unsigned int plane_3d_mask_c; - - /* Window state */ - unsigned int window_xy_offset; - - /* Core state */ - unsigned int scale_3d_cntl; -} drm_r128_context_regs_t; - -/* Setup registers for each texture unit - */ -typedef struct { - unsigned int tex_cntl; - unsigned int tex_combine_cntl; - unsigned int tex_size_pitch; - unsigned int tex_offset[R128_MAX_TEXTURE_LEVELS]; - unsigned int tex_border_color; -} drm_r128_texture_regs_t; - -typedef struct drm_r128_sarea { - /* The channel for communication of state information to the kernel - * on firing a vertex buffer. - */ - drm_r128_context_regs_t context_state; - drm_r128_texture_regs_t tex_state[R128_MAX_TEXTURE_UNITS]; - unsigned int dirty; - unsigned int vertsize; - unsigned int vc_format; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[R128_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Counters for client-side throttling of rendering clients. - */ - unsigned int last_frame; - unsigned int last_dispatch; - - struct drm_tex_region tex_list[R128_NR_TEX_HEAPS][R128_NR_TEX_REGIONS + 1]; - unsigned int tex_age[R128_NR_TEX_HEAPS]; - int ctx_owner; - int pfAllowPageFlip; /* number of 3d windows (0,1,2 or more) */ - int pfCurrentPage; /* which buffer is being displayed? */ -} drm_r128_sarea_t; - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (xf86drmR128.h) - */ - -/* Rage 128 specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ -#define DRM_R128_INIT 0x00 -#define DRM_R128_CCE_START 0x01 -#define DRM_R128_CCE_STOP 0x02 -#define DRM_R128_CCE_RESET 0x03 -#define DRM_R128_CCE_IDLE 0x04 -/* 0x05 not used */ -#define DRM_R128_RESET 0x06 -#define DRM_R128_SWAP 0x07 -#define DRM_R128_CLEAR 0x08 -#define DRM_R128_VERTEX 0x09 -#define DRM_R128_INDICES 0x0a -#define DRM_R128_BLIT 0x0b -#define DRM_R128_DEPTH 0x0c -#define DRM_R128_STIPPLE 0x0d -/* 0x0e not used */ -#define DRM_R128_INDIRECT 0x0f -#define DRM_R128_FULLSCREEN 0x10 -#define DRM_R128_CLEAR2 0x11 -#define DRM_R128_GETPARAM 0x12 -#define DRM_R128_FLIP 0x13 - -#define DRM_IOCTL_R128_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INIT, drm_r128_init_t) -#define DRM_IOCTL_R128_CCE_START DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_START) -#define DRM_IOCTL_R128_CCE_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CCE_STOP, drm_r128_cce_stop_t) -#define DRM_IOCTL_R128_CCE_RESET DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_RESET) -#define DRM_IOCTL_R128_CCE_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_IDLE) -/* 0x05 not used */ -#define DRM_IOCTL_R128_RESET DRM_IO( DRM_COMMAND_BASE + DRM_R128_RESET) -#define DRM_IOCTL_R128_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_R128_SWAP) -#define DRM_IOCTL_R128_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR, drm_r128_clear_t) -#define DRM_IOCTL_R128_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_R128_VERTEX, drm_r128_vertex_t) -#define DRM_IOCTL_R128_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INDICES, drm_r128_indices_t) -#define DRM_IOCTL_R128_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_R128_BLIT, drm_r128_blit_t) -#define DRM_IOCTL_R128_DEPTH DRM_IOW( DRM_COMMAND_BASE + DRM_R128_DEPTH, drm_r128_depth_t) -#define DRM_IOCTL_R128_STIPPLE DRM_IOW( DRM_COMMAND_BASE + DRM_R128_STIPPLE, drm_r128_stipple_t) -/* 0x0e not used */ -#define DRM_IOCTL_R128_INDIRECT DRM_IOWR(DRM_COMMAND_BASE + DRM_R128_INDIRECT, drm_r128_indirect_t) -#define DRM_IOCTL_R128_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_R128_FULLSCREEN, drm_r128_fullscreen_t) -#define DRM_IOCTL_R128_CLEAR2 DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR2, drm_r128_clear2_t) -#define DRM_IOCTL_R128_GETPARAM DRM_IOWR( DRM_COMMAND_BASE + DRM_R128_GETPARAM, drm_r128_getparam_t) -#define DRM_IOCTL_R128_FLIP DRM_IO( DRM_COMMAND_BASE + DRM_R128_FLIP) - -typedef struct drm_r128_init { - enum { - R128_INIT_CCE = 0x01, - R128_CLEANUP_CCE = 0x02 - } func; - unsigned long sarea_priv_offset; - int is_pci; - int cce_mode; - int cce_secure; - int ring_size; - int usec_timeout; - - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - unsigned int span_offset; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long ring_offset; - unsigned long ring_rptr_offset; - unsigned long buffers_offset; - unsigned long agp_textures_offset; -} drm_r128_init_t; - -typedef struct drm_r128_cce_stop { - int flush; - int idle; -} drm_r128_cce_stop_t; - -typedef struct drm_r128_clear { - unsigned int flags; - unsigned int clear_color; - unsigned int clear_depth; - unsigned int color_mask; - unsigned int depth_mask; -} drm_r128_clear_t; - -typedef struct drm_r128_vertex { - int prim; - int idx; /* Index of vertex buffer */ - int count; /* Number of vertices in buffer */ - int discard; /* Client finished with buffer? */ -} drm_r128_vertex_t; - -typedef struct drm_r128_indices { - int prim; - int idx; - int start; - int end; - int discard; /* Client finished with buffer? */ -} drm_r128_indices_t; - -typedef struct drm_r128_blit { - int idx; - int pitch; - int offset; - int format; - unsigned short x, y; - unsigned short width, height; -} drm_r128_blit_t; - -typedef struct drm_r128_depth { - enum { - R128_WRITE_SPAN = 0x01, - R128_WRITE_PIXELS = 0x02, - R128_READ_SPAN = 0x03, - R128_READ_PIXELS = 0x04 - } func; - int n; - int *x; - int *y; - unsigned int *buffer; - unsigned char *mask; -} drm_r128_depth_t; - -typedef struct drm_r128_stipple { - unsigned int *mask; -} drm_r128_stipple_t; - -typedef struct drm_r128_indirect { - int idx; - int start; - int end; - int discard; -} drm_r128_indirect_t; - -typedef struct drm_r128_fullscreen { - enum { - R128_INIT_FULLSCREEN = 0x01, - R128_CLEANUP_FULLSCREEN = 0x02 - } func; -} drm_r128_fullscreen_t; - -/* 2.3: An ioctl to get parameters that aren't available to the 3d - * client any other way. - */ -#define R128_PARAM_IRQ_NR 1 - -typedef struct drm_r128_getparam { - int param; - void *value; -} drm_r128_getparam_t; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/libdrm/r600_pci_ids.h b/prebuilts/aarch64/include/libdrm/r600_pci_ids.h deleted file mode 100644 index a3b2eac..0000000 --- a/prebuilts/aarch64/include/libdrm/r600_pci_ids.h +++ /dev/null @@ -1,487 +0,0 @@ -CHIPSET(0x9400, R600_9400, R600) -CHIPSET(0x9401, R600_9401, R600) -CHIPSET(0x9402, R600_9402, R600) -CHIPSET(0x9403, R600_9403, R600) -CHIPSET(0x9405, R600_9405, R600) -CHIPSET(0x940A, R600_940A, R600) -CHIPSET(0x940B, R600_940B, R600) -CHIPSET(0x940F, R600_940F, R600) - -CHIPSET(0x94C0, RV610_94C0, RV610) -CHIPSET(0x94C1, RV610_94C1, RV610) -CHIPSET(0x94C3, RV610_94C3, RV610) -CHIPSET(0x94C4, RV610_94C4, RV610) -CHIPSET(0x94C5, RV610_94C5, RV610) -CHIPSET(0x94C6, RV610_94C6, RV610) -CHIPSET(0x94C7, RV610_94C7, RV610) -CHIPSET(0x94C8, RV610_94C8, RV610) -CHIPSET(0x94C9, RV610_94C9, RV610) -CHIPSET(0x94CB, RV610_94CB, RV610) -CHIPSET(0x94CC, RV610_94CC, RV610) -CHIPSET(0x94CD, RV610_94CD, RV610) - -CHIPSET(0x9580, RV630_9580, RV630) -CHIPSET(0x9581, RV630_9581, RV630) -CHIPSET(0x9583, RV630_9583, RV630) -CHIPSET(0x9586, RV630_9586, RV630) -CHIPSET(0x9587, RV630_9587, RV630) -CHIPSET(0x9588, RV630_9588, RV630) -CHIPSET(0x9589, RV630_9589, RV630) -CHIPSET(0x958A, RV630_958A, RV630) -CHIPSET(0x958B, RV630_958B, RV630) -CHIPSET(0x958C, RV630_958C, RV630) -CHIPSET(0x958D, RV630_958D, RV630) -CHIPSET(0x958E, RV630_958E, RV630) -CHIPSET(0x958F, RV630_958F, RV630) - -CHIPSET(0x9500, RV670_9500, RV670) -CHIPSET(0x9501, RV670_9501, RV670) -CHIPSET(0x9504, RV670_9504, RV670) -CHIPSET(0x9505, RV670_9505, RV670) -CHIPSET(0x9506, RV670_9506, RV670) -CHIPSET(0x9507, RV670_9507, RV670) -CHIPSET(0x9508, RV670_9508, RV670) -CHIPSET(0x9509, RV670_9509, RV670) -CHIPSET(0x950F, RV670_950F, RV670) -CHIPSET(0x9511, RV670_9511, RV670) -CHIPSET(0x9515, RV670_9515, RV670) -CHIPSET(0x9517, RV670_9517, RV670) -CHIPSET(0x9519, RV670_9519, RV670) - -CHIPSET(0x95C0, RV620_95C0, RV620) -CHIPSET(0x95C2, RV620_95C2, RV620) -CHIPSET(0x95C4, RV620_95C4, RV620) -CHIPSET(0x95C5, RV620_95C5, RV620) -CHIPSET(0x95C6, RV620_95C6, RV620) -CHIPSET(0x95C7, RV620_95C7, RV620) -CHIPSET(0x95C9, RV620_95C9, RV620) -CHIPSET(0x95CC, RV620_95CC, RV620) -CHIPSET(0x95CD, RV620_95CD, RV620) -CHIPSET(0x95CE, RV620_95CE, RV620) -CHIPSET(0x95CF, RV620_95CF, RV620) - -CHIPSET(0x9590, RV635_9590, RV635) -CHIPSET(0x9591, RV635_9591, RV635) -CHIPSET(0x9593, RV635_9593, RV635) -CHIPSET(0x9595, RV635_9595, RV635) -CHIPSET(0x9596, RV635_9596, RV635) -CHIPSET(0x9597, RV635_9597, RV635) -CHIPSET(0x9598, RV635_9598, RV635) -CHIPSET(0x9599, RV635_9599, RV635) -CHIPSET(0x959B, RV635_959B, RV635) - -CHIPSET(0x9610, RS780_9610, RS780) -CHIPSET(0x9611, RS780_9611, RS780) -CHIPSET(0x9612, RS780_9612, RS780) -CHIPSET(0x9613, RS780_9613, RS780) -CHIPSET(0x9614, RS780_9614, RS780) -CHIPSET(0x9615, RS780_9615, RS780) -CHIPSET(0x9616, RS780_9616, RS780) - -CHIPSET(0x9710, RS880_9710, RS880) -CHIPSET(0x9711, RS880_9711, RS880) -CHIPSET(0x9712, RS880_9712, RS880) -CHIPSET(0x9713, RS880_9713, RS880) -CHIPSET(0x9714, RS880_9714, RS880) -CHIPSET(0x9715, RS880_9715, RS880) - -CHIPSET(0x9440, RV770_9440, RV770) -CHIPSET(0x9441, RV770_9441, RV770) -CHIPSET(0x9442, RV770_9442, RV770) -CHIPSET(0x9443, RV770_9443, RV770) -CHIPSET(0x9444, RV770_9444, RV770) -CHIPSET(0x9446, RV770_9446, RV770) -CHIPSET(0x944A, RV770_944A, RV770) -CHIPSET(0x944B, RV770_944B, RV770) -CHIPSET(0x944C, RV770_944C, RV770) -CHIPSET(0x944E, RV770_944E, RV770) -CHIPSET(0x9450, RV770_9450, RV770) -CHIPSET(0x9452, RV770_9452, RV770) -CHIPSET(0x9456, RV770_9456, RV770) -CHIPSET(0x945A, RV770_945A, RV770) -CHIPSET(0x945B, RV770_945B, RV770) -CHIPSET(0x945E, RV770_945E, RV770) -CHIPSET(0x9460, RV790_9460, RV770) -CHIPSET(0x9462, RV790_9462, RV770) -CHIPSET(0x946A, RV770_946A, RV770) -CHIPSET(0x946B, RV770_946B, RV770) -CHIPSET(0x947A, RV770_947A, RV770) -CHIPSET(0x947B, RV770_947B, RV770) - -CHIPSET(0x9480, RV730_9480, RV730) -CHIPSET(0x9487, RV730_9487, RV730) -CHIPSET(0x9488, RV730_9488, RV730) -CHIPSET(0x9489, RV730_9489, RV730) -CHIPSET(0x948A, RV730_948A, RV730) -CHIPSET(0x948F, RV730_948F, RV730) -CHIPSET(0x9490, RV730_9490, RV730) -CHIPSET(0x9491, RV730_9491, RV730) -CHIPSET(0x9495, RV730_9495, RV730) -CHIPSET(0x9498, RV730_9498, RV730) -CHIPSET(0x949C, RV730_949C, RV730) -CHIPSET(0x949E, RV730_949E, RV730) -CHIPSET(0x949F, RV730_949F, RV730) - -CHIPSET(0x9540, RV710_9540, RV710) -CHIPSET(0x9541, RV710_9541, RV710) -CHIPSET(0x9542, RV710_9542, RV710) -CHIPSET(0x954E, RV710_954E, RV710) -CHIPSET(0x954F, RV710_954F, RV710) -CHIPSET(0x9552, RV710_9552, RV710) -CHIPSET(0x9553, RV710_9553, RV710) -CHIPSET(0x9555, RV710_9555, RV710) -CHIPSET(0x9557, RV710_9557, RV710) -CHIPSET(0x955F, RV710_955F, RV710) - -CHIPSET(0x94A0, RV740_94A0, RV740) -CHIPSET(0x94A1, RV740_94A1, RV740) -CHIPSET(0x94A3, RV740_94A3, RV740) -CHIPSET(0x94B1, RV740_94B1, RV740) -CHIPSET(0x94B3, RV740_94B3, RV740) -CHIPSET(0x94B4, RV740_94B4, RV740) -CHIPSET(0x94B5, RV740_94B5, RV740) -CHIPSET(0x94B9, RV740_94B9, RV740) - -CHIPSET(0x68E0, CEDAR_68E0, CEDAR) -CHIPSET(0x68E1, CEDAR_68E1, CEDAR) -CHIPSET(0x68E4, CEDAR_68E4, CEDAR) -CHIPSET(0x68E5, CEDAR_68E5, CEDAR) -CHIPSET(0x68E8, CEDAR_68E8, CEDAR) -CHIPSET(0x68E9, CEDAR_68E9, CEDAR) -CHIPSET(0x68F1, CEDAR_68F1, CEDAR) -CHIPSET(0x68F2, CEDAR_68F2, CEDAR) -CHIPSET(0x68F8, CEDAR_68F8, CEDAR) -CHIPSET(0x68F9, CEDAR_68F9, CEDAR) -CHIPSET(0x68FA, CEDAR_68FA, CEDAR) -CHIPSET(0x68FE, CEDAR_68FE, CEDAR) - -CHIPSET(0x68C0, REDWOOD_68C0, REDWOOD) -CHIPSET(0x68C1, REDWOOD_68C1, REDWOOD) -CHIPSET(0x68C7, REDWOOD_68C7, REDWOOD) -CHIPSET(0x68C8, REDWOOD_68C8, REDWOOD) -CHIPSET(0x68C9, REDWOOD_68C9, REDWOOD) -CHIPSET(0x68D8, REDWOOD_68D8, REDWOOD) -CHIPSET(0x68D9, REDWOOD_68D9, REDWOOD) -CHIPSET(0x68DA, REDWOOD_68DA, REDWOOD) -CHIPSET(0x68DE, REDWOOD_68DE, REDWOOD) - -CHIPSET(0x68A0, JUNIPER_68A0, JUNIPER) -CHIPSET(0x68A1, JUNIPER_68A1, JUNIPER) -CHIPSET(0x68A8, JUNIPER_68A8, JUNIPER) -CHIPSET(0x68A9, JUNIPER_68A9, JUNIPER) -CHIPSET(0x68B0, JUNIPER_68B0, JUNIPER) -CHIPSET(0x68B8, JUNIPER_68B8, JUNIPER) -CHIPSET(0x68B9, JUNIPER_68B9, JUNIPER) -CHIPSET(0x68BA, JUNIPER_68BA, JUNIPER) -CHIPSET(0x68BE, JUNIPER_68BE, JUNIPER) -CHIPSET(0x68BF, JUNIPER_68BF, JUNIPER) - -CHIPSET(0x6880, CYPRESS_6880, CYPRESS) -CHIPSET(0x6888, CYPRESS_6888, CYPRESS) -CHIPSET(0x6889, CYPRESS_6889, CYPRESS) -CHIPSET(0x688A, CYPRESS_688A, CYPRESS) -CHIPSET(0x688C, CYPRESS_688C, CYPRESS) -CHIPSET(0x688D, CYPRESS_688D, CYPRESS) -CHIPSET(0x6898, CYPRESS_6898, CYPRESS) -CHIPSET(0x6899, CYPRESS_6899, CYPRESS) -CHIPSET(0x689B, CYPRESS_689B, CYPRESS) -CHIPSET(0x689E, CYPRESS_689E, CYPRESS) - -CHIPSET(0x689C, HEMLOCK_689C, HEMLOCK) -CHIPSET(0x689D, HEMLOCK_689D, HEMLOCK) - -CHIPSET(0x9802, PALM_9802, PALM) -CHIPSET(0x9803, PALM_9803, PALM) -CHIPSET(0x9804, PALM_9804, PALM) -CHIPSET(0x9805, PALM_9805, PALM) -CHIPSET(0x9806, PALM_9806, PALM) -CHIPSET(0x9807, PALM_9807, PALM) -CHIPSET(0x9808, PALM_9808, PALM) -CHIPSET(0x9809, PALM_9809, PALM) -CHIPSET(0x980A, PALM_980A, PALM) - -CHIPSET(0x9640, SUMO_9640, SUMO) -CHIPSET(0x9641, SUMO_9641, SUMO) -CHIPSET(0x9642, SUMO2_9642, SUMO2) -CHIPSET(0x9643, SUMO2_9643, SUMO2) -CHIPSET(0x9644, SUMO2_9644, SUMO2) -CHIPSET(0x9645, SUMO2_9645, SUMO2) -CHIPSET(0x9647, SUMO_9647, SUMO) -CHIPSET(0x9648, SUMO_9648, SUMO) -CHIPSET(0x9649, SUMO2_9649, SUMO2) -CHIPSET(0x964a, SUMO_964A, SUMO) -CHIPSET(0x964b, SUMO_964B, SUMO) -CHIPSET(0x964c, SUMO_964C, SUMO) -CHIPSET(0x964e, SUMO_964E, SUMO) -CHIPSET(0x964f, SUMO_964F, SUMO) - -CHIPSET(0x6700, CAYMAN_6700, CAYMAN) -CHIPSET(0x6701, CAYMAN_6701, CAYMAN) -CHIPSET(0x6702, CAYMAN_6702, CAYMAN) -CHIPSET(0x6703, CAYMAN_6703, CAYMAN) -CHIPSET(0x6704, CAYMAN_6704, CAYMAN) -CHIPSET(0x6705, CAYMAN_6705, CAYMAN) -CHIPSET(0x6706, CAYMAN_6706, CAYMAN) -CHIPSET(0x6707, CAYMAN_6707, CAYMAN) -CHIPSET(0x6708, CAYMAN_6708, CAYMAN) -CHIPSET(0x6709, CAYMAN_6709, CAYMAN) -CHIPSET(0x6718, CAYMAN_6718, CAYMAN) -CHIPSET(0x6719, CAYMAN_6719, CAYMAN) -CHIPSET(0x671C, CAYMAN_671C, CAYMAN) -CHIPSET(0x671D, CAYMAN_671D, CAYMAN) -CHIPSET(0x671F, CAYMAN_671F, CAYMAN) - -CHIPSET(0x6720, BARTS_6720, BARTS) -CHIPSET(0x6721, BARTS_6721, BARTS) -CHIPSET(0x6722, BARTS_6722, BARTS) -CHIPSET(0x6723, BARTS_6723, BARTS) -CHIPSET(0x6724, BARTS_6724, BARTS) -CHIPSET(0x6725, BARTS_6725, BARTS) -CHIPSET(0x6726, BARTS_6726, BARTS) -CHIPSET(0x6727, BARTS_6727, BARTS) -CHIPSET(0x6728, BARTS_6728, BARTS) -CHIPSET(0x6729, BARTS_6729, BARTS) -CHIPSET(0x6738, BARTS_6738, BARTS) -CHIPSET(0x6739, BARTS_6739, BARTS) -CHIPSET(0x673E, BARTS_673E, BARTS) - -CHIPSET(0x6740, TURKS_6740, TURKS) -CHIPSET(0x6741, TURKS_6741, TURKS) -CHIPSET(0x6742, TURKS_6742, TURKS) -CHIPSET(0x6743, TURKS_6743, TURKS) -CHIPSET(0x6744, TURKS_6744, TURKS) -CHIPSET(0x6745, TURKS_6745, TURKS) -CHIPSET(0x6746, TURKS_6746, TURKS) -CHIPSET(0x6747, TURKS_6747, TURKS) -CHIPSET(0x6748, TURKS_6748, TURKS) -CHIPSET(0x6749, TURKS_6749, TURKS) -CHIPSET(0x674A, TURKS_674A, TURKS) -CHIPSET(0x6750, TURKS_6750, TURKS) -CHIPSET(0x6751, TURKS_6751, TURKS) -CHIPSET(0x6758, TURKS_6758, TURKS) -CHIPSET(0x6759, TURKS_6759, TURKS) -CHIPSET(0x675B, TURKS_675B, TURKS) -CHIPSET(0x675D, TURKS_675D, TURKS) -CHIPSET(0x675F, TURKS_675F, TURKS) -CHIPSET(0x6840, TURKS_6840, TURKS) -CHIPSET(0x6841, TURKS_6841, TURKS) -CHIPSET(0x6842, TURKS_6842, TURKS) -CHIPSET(0x6843, TURKS_6843, TURKS) -CHIPSET(0x6849, TURKS_6849, TURKS) -CHIPSET(0x6850, TURKS_6850, TURKS) -CHIPSET(0x6858, TURKS_6858, TURKS) -CHIPSET(0x6859, TURKS_6859, TURKS) - -CHIPSET(0x6760, CAICOS_6760, CAICOS) -CHIPSET(0x6761, CAICOS_6761, CAICOS) -CHIPSET(0x6762, CAICOS_6762, CAICOS) -CHIPSET(0x6763, CAICOS_6763, CAICOS) -CHIPSET(0x6764, CAICOS_6764, CAICOS) -CHIPSET(0x6765, CAICOS_6765, CAICOS) -CHIPSET(0x6766, CAICOS_6766, CAICOS) -CHIPSET(0x6767, CAICOS_6767, CAICOS) -CHIPSET(0x6768, CAICOS_6768, CAICOS) -CHIPSET(0x6770, CAICOS_6770, CAICOS) -CHIPSET(0x6771, CAICOS_6771, CAICOS) -CHIPSET(0x6772, CAICOS_6772, CAICOS) -CHIPSET(0x6778, CAICOS_6778, CAICOS) -CHIPSET(0x6779, CAICOS_6779, CAICOS) -CHIPSET(0x677B, CAICOS_677B, CAICOS) - -CHIPSET(0x9900, ARUBA_9900, ARUBA) -CHIPSET(0x9901, ARUBA_9901, ARUBA) -CHIPSET(0x9903, ARUBA_9903, ARUBA) -CHIPSET(0x9904, ARUBA_9904, ARUBA) -CHIPSET(0x9905, ARUBA_9905, ARUBA) -CHIPSET(0x9906, ARUBA_9906, ARUBA) -CHIPSET(0x9907, ARUBA_9907, ARUBA) -CHIPSET(0x9908, ARUBA_9908, ARUBA) -CHIPSET(0x9909, ARUBA_9909, ARUBA) -CHIPSET(0x990A, ARUBA_990A, ARUBA) -CHIPSET(0x990B, ARUBA_990B, ARUBA) -CHIPSET(0x990C, ARUBA_990C, ARUBA) -CHIPSET(0x990D, ARUBA_990D, ARUBA) -CHIPSET(0x990E, ARUBA_990E, ARUBA) -CHIPSET(0x990F, ARUBA_990F, ARUBA) -CHIPSET(0x9910, ARUBA_9910, ARUBA) -CHIPSET(0x9913, ARUBA_9913, ARUBA) -CHIPSET(0x9917, ARUBA_9917, ARUBA) -CHIPSET(0x9918, ARUBA_9918, ARUBA) -CHIPSET(0x9919, ARUBA_9919, ARUBA) -CHIPSET(0x9990, ARUBA_9990, ARUBA) -CHIPSET(0x9991, ARUBA_9991, ARUBA) -CHIPSET(0x9992, ARUBA_9992, ARUBA) -CHIPSET(0x9993, ARUBA_9993, ARUBA) -CHIPSET(0x9994, ARUBA_9994, ARUBA) -CHIPSET(0x9995, ARUBA_9995, ARUBA) -CHIPSET(0x9996, ARUBA_9996, ARUBA) -CHIPSET(0x9997, ARUBA_9997, ARUBA) -CHIPSET(0x9998, ARUBA_9998, ARUBA) -CHIPSET(0x9999, ARUBA_9999, ARUBA) -CHIPSET(0x999A, ARUBA_999A, ARUBA) -CHIPSET(0x999B, ARUBA_999B, ARUBA) -CHIPSET(0x999C, ARUBA_999C, ARUBA) -CHIPSET(0x999D, ARUBA_999D, ARUBA) -CHIPSET(0x99A0, ARUBA_99A0, ARUBA) -CHIPSET(0x99A2, ARUBA_99A2, ARUBA) -CHIPSET(0x99A4, ARUBA_99A4, ARUBA) - -CHIPSET(0x6780, TAHITI_6780, TAHITI) -CHIPSET(0x6784, TAHITI_6784, TAHITI) -CHIPSET(0x6788, TAHITI_6788, TAHITI) -CHIPSET(0x678A, TAHITI_678A, TAHITI) -CHIPSET(0x6790, TAHITI_6790, TAHITI) -CHIPSET(0x6791, TAHITI_6791, TAHITI) -CHIPSET(0x6792, TAHITI_6792, TAHITI) -CHIPSET(0x6798, TAHITI_6798, TAHITI) -CHIPSET(0x6799, TAHITI_6799, TAHITI) -CHIPSET(0x679A, TAHITI_679A, TAHITI) -CHIPSET(0x679B, TAHITI_679B, TAHITI) -CHIPSET(0x679E, TAHITI_679E, TAHITI) -CHIPSET(0x679F, TAHITI_679F, TAHITI) - -CHIPSET(0x6800, PITCAIRN_6800, PITCAIRN) -CHIPSET(0x6801, PITCAIRN_6801, PITCAIRN) -CHIPSET(0x6802, PITCAIRN_6802, PITCAIRN) -CHIPSET(0x6806, PITCAIRN_6806, PITCAIRN) -CHIPSET(0x6808, PITCAIRN_6808, PITCAIRN) -CHIPSET(0x6809, PITCAIRN_6809, PITCAIRN) -CHIPSET(0x6810, PITCAIRN_6810, PITCAIRN) -CHIPSET(0x6811, PITCAIRN_6811, PITCAIRN) -CHIPSET(0x6816, PITCAIRN_6816, PITCAIRN) -CHIPSET(0x6817, PITCAIRN_6817, PITCAIRN) -CHIPSET(0x6818, PITCAIRN_6818, PITCAIRN) -CHIPSET(0x6819, PITCAIRN_6819, PITCAIRN) -CHIPSET(0x684C, PITCAIRN_684C, PITCAIRN) - -CHIPSET(0x6820, VERDE_6820, VERDE) -CHIPSET(0x6821, VERDE_6821, VERDE) -CHIPSET(0x6822, VERDE_6822, VERDE) -CHIPSET(0x6823, VERDE_6823, VERDE) -CHIPSET(0x6824, VERDE_6824, VERDE) -CHIPSET(0x6825, VERDE_6825, VERDE) -CHIPSET(0x6826, VERDE_6826, VERDE) -CHIPSET(0x6827, VERDE_6827, VERDE) -CHIPSET(0x6828, VERDE_6828, VERDE) -CHIPSET(0x6829, VERDE_6829, VERDE) -CHIPSET(0x682A, VERDE_682A, VERDE) -CHIPSET(0x682B, VERDE_682B, VERDE) -CHIPSET(0x682C, VERDE_682C, VERDE) -CHIPSET(0x682D, VERDE_682D, VERDE) -CHIPSET(0x682F, VERDE_682F, VERDE) -CHIPSET(0x6830, VERDE_6830, VERDE) -CHIPSET(0x6831, VERDE_6831, VERDE) -CHIPSET(0x6835, VERDE_6835, VERDE) -CHIPSET(0x6837, VERDE_6837, VERDE) -CHIPSET(0x6838, VERDE_6838, VERDE) -CHIPSET(0x6839, VERDE_6839, VERDE) -CHIPSET(0x683B, VERDE_683B, VERDE) -CHIPSET(0x683D, VERDE_683D, VERDE) -CHIPSET(0x683F, VERDE_683F, VERDE) - -CHIPSET(0x6600, OLAND_6600, OLAND) -CHIPSET(0x6601, OLAND_6601, OLAND) -CHIPSET(0x6602, OLAND_6602, OLAND) -CHIPSET(0x6603, OLAND_6603, OLAND) -CHIPSET(0x6604, OLAND_6604, OLAND) -CHIPSET(0x6605, OLAND_6605, OLAND) -CHIPSET(0x6606, OLAND_6606, OLAND) -CHIPSET(0x6607, OLAND_6607, OLAND) -CHIPSET(0x6608, OLAND_6608, OLAND) -CHIPSET(0x6610, OLAND_6610, OLAND) -CHIPSET(0x6611, OLAND_6611, OLAND) -CHIPSET(0x6613, OLAND_6613, OLAND) -CHIPSET(0x6617, OLAND_6617, OLAND) -CHIPSET(0x6620, OLAND_6620, OLAND) -CHIPSET(0x6621, OLAND_6621, OLAND) -CHIPSET(0x6623, OLAND_6623, OLAND) -CHIPSET(0x6631, OLAND_6631, OLAND) - -CHIPSET(0x6660, HAINAN_6660, HAINAN) -CHIPSET(0x6663, HAINAN_6663, HAINAN) -CHIPSET(0x6664, HAINAN_6664, HAINAN) -CHIPSET(0x6665, HAINAN_6665, HAINAN) -CHIPSET(0x6667, HAINAN_6667, HAINAN) -CHIPSET(0x666F, HAINAN_666F, HAINAN) - -CHIPSET(0x6640, BONAIRE_6640, BONAIRE) -CHIPSET(0x6641, BONAIRE_6641, BONAIRE) -CHIPSET(0x6646, BONAIRE_6646, BONAIRE) -CHIPSET(0x6647, BONAIRE_6647, BONAIRE) -CHIPSET(0x6649, BONAIRE_6649, BONAIRE) -CHIPSET(0x6650, BONAIRE_6650, BONAIRE) -CHIPSET(0x6651, BONAIRE_6651, BONAIRE) -CHIPSET(0x6658, BONAIRE_6658, BONAIRE) -CHIPSET(0x665C, BONAIRE_665C, BONAIRE) -CHIPSET(0x665D, BONAIRE_665D, BONAIRE) -CHIPSET(0x665F, BONAIRE_665F, BONAIRE) - -CHIPSET(0x9830, KABINI_9830, KABINI) -CHIPSET(0x9831, KABINI_9831, KABINI) -CHIPSET(0x9832, KABINI_9832, KABINI) -CHIPSET(0x9833, KABINI_9833, KABINI) -CHIPSET(0x9834, KABINI_9834, KABINI) -CHIPSET(0x9835, KABINI_9835, KABINI) -CHIPSET(0x9836, KABINI_9836, KABINI) -CHIPSET(0x9837, KABINI_9837, KABINI) -CHIPSET(0x9838, KABINI_9838, KABINI) -CHIPSET(0x9839, KABINI_9839, KABINI) -CHIPSET(0x983A, KABINI_983A, KABINI) -CHIPSET(0x983B, KABINI_983B, KABINI) -CHIPSET(0x983C, KABINI_983C, KABINI) -CHIPSET(0x983D, KABINI_983D, KABINI) -CHIPSET(0x983E, KABINI_983E, KABINI) -CHIPSET(0x983F, KABINI_983F, KABINI) - -CHIPSET(0x9850, MULLINS_9850, MULLINS) -CHIPSET(0x9851, MULLINS_9851, MULLINS) -CHIPSET(0x9852, MULLINS_9852, MULLINS) -CHIPSET(0x9853, MULLINS_9853, MULLINS) -CHIPSET(0x9854, MULLINS_9854, MULLINS) -CHIPSET(0x9855, MULLINS_9855, MULLINS) -CHIPSET(0x9856, MULLINS_9856, MULLINS) -CHIPSET(0x9857, MULLINS_9857, MULLINS) -CHIPSET(0x9858, MULLINS_9858, MULLINS) -CHIPSET(0x9859, MULLINS_9859, MULLINS) -CHIPSET(0x985A, MULLINS_985A, MULLINS) -CHIPSET(0x985B, MULLINS_985B, MULLINS) -CHIPSET(0x985C, MULLINS_985C, MULLINS) -CHIPSET(0x985D, MULLINS_985D, MULLINS) -CHIPSET(0x985E, MULLINS_985E, MULLINS) -CHIPSET(0x985F, MULLINS_985F, MULLINS) - -CHIPSET(0x1304, KAVERI_1304, KAVERI) -CHIPSET(0x1305, KAVERI_1305, KAVERI) -CHIPSET(0x1306, KAVERI_1306, KAVERI) -CHIPSET(0x1307, KAVERI_1307, KAVERI) -CHIPSET(0x1309, KAVERI_1309, KAVERI) -CHIPSET(0x130A, KAVERI_130A, KAVERI) -CHIPSET(0x130B, KAVERI_130B, KAVERI) -CHIPSET(0x130C, KAVERI_130C, KAVERI) -CHIPSET(0x130D, KAVERI_130D, KAVERI) -CHIPSET(0x130E, KAVERI_130E, KAVERI) -CHIPSET(0x130F, KAVERI_130F, KAVERI) -CHIPSET(0x1310, KAVERI_1310, KAVERI) -CHIPSET(0x1311, KAVERI_1311, KAVERI) -CHIPSET(0x1312, KAVERI_1312, KAVERI) -CHIPSET(0x1313, KAVERI_1313, KAVERI) -CHIPSET(0x1315, KAVERI_1315, KAVERI) -CHIPSET(0x1316, KAVERI_1316, KAVERI) -CHIPSET(0x1317, KAVERI_1317, KAVERI) -CHIPSET(0x1318, KAVERI_1318, KAVERI) -CHIPSET(0x131B, KAVERI_131B, KAVERI) -CHIPSET(0x131C, KAVERI_131C, KAVERI) -CHIPSET(0x131D, KAVERI_131D, KAVERI) - -CHIPSET(0x67A0, HAWAII_67A0, HAWAII) -CHIPSET(0x67A1, HAWAII_67A1, HAWAII) -CHIPSET(0x67A2, HAWAII_67A2, HAWAII) -CHIPSET(0x67A8, HAWAII_67A8, HAWAII) -CHIPSET(0x67A9, HAWAII_67A9, HAWAII) -CHIPSET(0x67AA, HAWAII_67AA, HAWAII) -CHIPSET(0x67B0, HAWAII_67B0, HAWAII) -CHIPSET(0x67B1, HAWAII_67B1, HAWAII) -CHIPSET(0x67B8, HAWAII_67B8, HAWAII) -CHIPSET(0x67B9, HAWAII_67B9, HAWAII) -CHIPSET(0x67BA, HAWAII_67BA, HAWAII) -CHIPSET(0x67BE, HAWAII_67BE, HAWAII) diff --git a/prebuilts/aarch64/include/libdrm/radeon_bo.h b/prebuilts/aarch64/include/libdrm/radeon_bo.h deleted file mode 100644 index 6e20c6c..0000000 --- a/prebuilts/aarch64/include/libdrm/radeon_bo.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Jérôme Glisse - */ -#ifndef RADEON_BO_H -#define RADEON_BO_H - -#include -#include - -/* bo object */ -#define RADEON_BO_FLAGS_MACRO_TILE 1 -#define RADEON_BO_FLAGS_MICRO_TILE 2 -#define RADEON_BO_FLAGS_MICRO_TILE_SQUARE 0x20 - -struct radeon_bo_manager; -struct radeon_cs; - -struct radeon_bo { - void *ptr; - uint32_t flags; - uint32_t handle; - uint32_t size; -}; - - -void radeon_bo_debug(struct radeon_bo *bo, const char *op); - -struct radeon_bo *radeon_bo_open(struct radeon_bo_manager *bom, - uint32_t handle, - uint32_t size, - uint32_t alignment, - uint32_t domains, - uint32_t flags); - -void radeon_bo_ref(struct radeon_bo *bo); -struct radeon_bo *radeon_bo_unref(struct radeon_bo *bo); -int radeon_bo_map(struct radeon_bo *bo, int write); -int radeon_bo_unmap(struct radeon_bo *bo); -int radeon_bo_wait(struct radeon_bo *bo); -int radeon_bo_is_busy(struct radeon_bo *bo, uint32_t *domain); -int radeon_bo_set_tiling(struct radeon_bo *bo, uint32_t tiling_flags, uint32_t pitch); -int radeon_bo_get_tiling(struct radeon_bo *bo, uint32_t *tiling_flags, uint32_t *pitch); -int radeon_bo_is_static(struct radeon_bo *bo); -int radeon_bo_is_referenced_by_cs(struct radeon_bo *bo, struct radeon_cs *cs); -uint32_t radeon_bo_get_handle(struct radeon_bo *bo); -uint32_t radeon_bo_get_src_domain(struct radeon_bo *bo); -#endif diff --git a/prebuilts/aarch64/include/libdrm/radeon_bo_gem.h b/prebuilts/aarch64/include/libdrm/radeon_bo_gem.h deleted file mode 100644 index 08965f3..0000000 --- a/prebuilts/aarch64/include/libdrm/radeon_bo_gem.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2008 Dave Airlie - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Dave Airlie - * Jérôme Glisse - */ -#ifndef RADEON_BO_GEM_H -#define RADEON_BO_GEM_H - -#include "radeon_bo.h" - -struct radeon_bo_manager *radeon_bo_manager_gem_ctor(int fd); -void radeon_bo_manager_gem_dtor(struct radeon_bo_manager *bom); - -uint32_t radeon_gem_name_bo(struct radeon_bo *bo); -void *radeon_gem_get_reloc_in_cs(struct radeon_bo *bo); -int radeon_gem_set_domain(struct radeon_bo *bo, uint32_t read_domains, uint32_t write_domain); -int radeon_gem_get_kernel_name(struct radeon_bo *bo, uint32_t *name); -int radeon_gem_prime_share_bo(struct radeon_bo *bo, int *handle); -struct radeon_bo *radeon_gem_bo_open_prime(struct radeon_bo_manager *bom, - int fd_handle, - uint32_t size); -#endif diff --git a/prebuilts/aarch64/include/libdrm/radeon_bo_int.h b/prebuilts/aarch64/include/libdrm/radeon_bo_int.h deleted file mode 100644 index de981b0..0000000 --- a/prebuilts/aarch64/include/libdrm/radeon_bo_int.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef RADEON_BO_INT -#define RADEON_BO_INT - -struct radeon_bo_manager { - const struct radeon_bo_funcs *funcs; - int fd; -}; - -struct radeon_bo_int { - void *ptr; - uint32_t flags; - uint32_t handle; - uint32_t size; - /* private members */ - uint32_t alignment; - uint32_t domains; - unsigned cref; - struct radeon_bo_manager *bom; - uint32_t space_accounted; - uint32_t referenced_in_cs; -}; - -/* bo functions */ -struct radeon_bo_funcs { - struct radeon_bo *(*bo_open)(struct radeon_bo_manager *bom, - uint32_t handle, - uint32_t size, - uint32_t alignment, - uint32_t domains, - uint32_t flags); - void (*bo_ref)(struct radeon_bo_int *bo); - struct radeon_bo *(*bo_unref)(struct radeon_bo_int *bo); - int (*bo_map)(struct radeon_bo_int *bo, int write); - int (*bo_unmap)(struct radeon_bo_int *bo); - int (*bo_wait)(struct radeon_bo_int *bo); - int (*bo_is_static)(struct radeon_bo_int *bo); - int (*bo_set_tiling)(struct radeon_bo_int *bo, uint32_t tiling_flags, - uint32_t pitch); - int (*bo_get_tiling)(struct radeon_bo_int *bo, uint32_t *tiling_flags, - uint32_t *pitch); - int (*bo_is_busy)(struct radeon_bo_int *bo, uint32_t *domain); - int (*bo_is_referenced_by_cs)(struct radeon_bo_int *bo, struct radeon_cs *cs); -}; - -#endif diff --git a/prebuilts/aarch64/include/libdrm/radeon_cs.h b/prebuilts/aarch64/include/libdrm/radeon_cs.h deleted file mode 100644 index f68a624..0000000 --- a/prebuilts/aarch64/include/libdrm/radeon_cs.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright © 2008 Nicolai Haehnle - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Aapo Tahkola - * Nicolai Haehnle - * Jérôme Glisse - */ -#ifndef RADEON_CS_H -#define RADEON_CS_H - -#include -#include -#include "drm.h" -#include "radeon_drm.h" -#include "radeon_bo.h" - -struct radeon_cs_reloc { - struct radeon_bo *bo; - uint32_t read_domain; - uint32_t write_domain; - uint32_t flags; -}; - - -#define RADEON_CS_SPACE_OK 0 -#define RADEON_CS_SPACE_OP_TO_BIG 1 -#define RADEON_CS_SPACE_FLUSH 2 - -struct radeon_cs { - uint32_t *packets; - unsigned cdw; - unsigned ndw; - unsigned section_ndw; - unsigned section_cdw; -}; - -#define MAX_SPACE_BOS (32) - -struct radeon_cs_manager; - -extern struct radeon_cs *radeon_cs_create(struct radeon_cs_manager *csm, - uint32_t ndw); - -extern int radeon_cs_begin(struct radeon_cs *cs, - uint32_t ndw, - const char *file, - const char *func, int line); -extern int radeon_cs_end(struct radeon_cs *cs, - const char *file, - const char *func, - int line); -extern int radeon_cs_emit(struct radeon_cs *cs); -extern int radeon_cs_destroy(struct radeon_cs *cs); -extern int radeon_cs_erase(struct radeon_cs *cs); -extern int radeon_cs_need_flush(struct radeon_cs *cs); -extern void radeon_cs_print(struct radeon_cs *cs, FILE *file); -extern void radeon_cs_set_limit(struct radeon_cs *cs, uint32_t domain, uint32_t limit); -extern void radeon_cs_space_set_flush(struct radeon_cs *cs, void (*fn)(void *), void *data); -extern int radeon_cs_write_reloc(struct radeon_cs *cs, - struct radeon_bo *bo, - uint32_t read_domain, - uint32_t write_domain, - uint32_t flags); -extern uint32_t radeon_cs_get_id(struct radeon_cs *cs); -/* - * add a persistent BO to the list - * a persistent BO is one that will be referenced across flushes, - * i.e. colorbuffer, textures etc. - * They get reset when a new "operation" happens, where an operation - * is a state emission with a color/textures etc followed by a bunch of vertices. - */ -void radeon_cs_space_add_persistent_bo(struct radeon_cs *cs, - struct radeon_bo *bo, - uint32_t read_domains, - uint32_t write_domain); - -/* reset the persistent BO list */ -void radeon_cs_space_reset_bos(struct radeon_cs *cs); - -/* do a space check with the current persistent BO list */ -int radeon_cs_space_check(struct radeon_cs *cs); - -/* do a space check with the current persistent BO list and a temporary BO - * a temporary BO is like a DMA buffer, which gets flushed with the - * command buffer */ -int radeon_cs_space_check_with_bo(struct radeon_cs *cs, - struct radeon_bo *bo, - uint32_t read_domains, - uint32_t write_domain); - -static inline void radeon_cs_write_dword(struct radeon_cs *cs, uint32_t dword) -{ - cs->packets[cs->cdw++] = dword; - if (cs->section_ndw) { - cs->section_cdw++; - } -} - -static inline void radeon_cs_write_qword(struct radeon_cs *cs, uint64_t qword) -{ - memcpy(cs->packets + cs->cdw, &qword, sizeof(uint64_t)); - cs->cdw += 2; - if (cs->section_ndw) { - cs->section_cdw += 2; - } -} - -static inline void radeon_cs_write_table(struct radeon_cs *cs, - const void *data, uint32_t size) -{ - memcpy(cs->packets + cs->cdw, data, size * 4); - cs->cdw += size; - if (cs->section_ndw) { - cs->section_cdw += size; - } -} -#endif diff --git a/prebuilts/aarch64/include/libdrm/radeon_cs_gem.h b/prebuilts/aarch64/include/libdrm/radeon_cs_gem.h deleted file mode 100644 index 5dea38a..0000000 --- a/prebuilts/aarch64/include/libdrm/radeon_cs_gem.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright © 2008 Nicolai Haehnle - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Aapo Tahkola - * Nicolai Haehnle - * Jérôme Glisse - */ -#ifndef RADEON_CS_GEM_H -#define RADEON_CS_GEM_H - -#include "radeon_cs.h" - -struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd); -void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm); - -#endif diff --git a/prebuilts/aarch64/include/libdrm/radeon_cs_int.h b/prebuilts/aarch64/include/libdrm/radeon_cs_int.h deleted file mode 100644 index d906ad4..0000000 --- a/prebuilts/aarch64/include/libdrm/radeon_cs_int.h +++ /dev/null @@ -1,67 +0,0 @@ - -#ifndef _RADEON_CS_INT_H_ -#define _RADEON_CS_INT_H_ - -struct radeon_cs_space_check { - struct radeon_bo_int *bo; - uint32_t read_domains; - uint32_t write_domain; - uint32_t new_accounted; -}; - -struct radeon_cs_int { - /* keep first two in same place */ - uint32_t *packets; - unsigned cdw; - unsigned ndw; - unsigned section_ndw; - unsigned section_cdw; - /* private members */ - struct radeon_cs_manager *csm; - void *relocs; - unsigned crelocs; - unsigned relocs_total_size; - const char *section_file; - const char *section_func; - int section_line; - struct radeon_cs_space_check bos[MAX_SPACE_BOS]; - int bo_count; - void (*space_flush_fn)(void *); - void *space_flush_data; - uint32_t id; -}; - -/* cs functions */ -struct radeon_cs_funcs { - struct radeon_cs_int *(*cs_create)(struct radeon_cs_manager *csm, - uint32_t ndw); - int (*cs_write_reloc)(struct radeon_cs_int *cs, - struct radeon_bo *bo, - uint32_t read_domain, - uint32_t write_domain, - uint32_t flags); - int (*cs_begin)(struct radeon_cs_int *cs, - uint32_t ndw, - const char *file, - const char *func, - int line); - int (*cs_end)(struct radeon_cs_int *cs, - const char *file, const char *func, - int line); - - - int (*cs_emit)(struct radeon_cs_int *cs); - int (*cs_destroy)(struct radeon_cs_int *cs); - int (*cs_erase)(struct radeon_cs_int *cs); - int (*cs_need_flush)(struct radeon_cs_int *cs); - void (*cs_print)(struct radeon_cs_int *cs, FILE *file); -}; - -struct radeon_cs_manager { - const struct radeon_cs_funcs *funcs; - int fd; - int32_t vram_limit, gart_limit; - int32_t vram_write_used, gart_write_used; - int32_t read_used; -}; -#endif diff --git a/prebuilts/aarch64/include/libdrm/radeon_drm.h b/prebuilts/aarch64/include/libdrm/radeon_drm.h deleted file mode 100644 index a1e385d..0000000 --- a/prebuilts/aarch64/include/libdrm/radeon_drm.h +++ /dev/null @@ -1,1079 +0,0 @@ -/* radeon_drm.h -- Public header for the radeon driver -*- linux-c -*- - * - * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Fremont, California. - * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Kevin E. Martin - * Gareth Hughes - * Keith Whitwell - */ - -#ifndef __RADEON_DRM_H__ -#define __RADEON_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the X server file (radeon_sarea.h) - */ -#ifndef __RADEON_SAREA_DEFINES__ -#define __RADEON_SAREA_DEFINES__ - -/* Old style state flags, required for sarea interface (1.1 and 1.2 - * clears) and 1.2 drm_vertex2 ioctl. - */ -#define RADEON_UPLOAD_CONTEXT 0x00000001 -#define RADEON_UPLOAD_VERTFMT 0x00000002 -#define RADEON_UPLOAD_LINE 0x00000004 -#define RADEON_UPLOAD_BUMPMAP 0x00000008 -#define RADEON_UPLOAD_MASKS 0x00000010 -#define RADEON_UPLOAD_VIEWPORT 0x00000020 -#define RADEON_UPLOAD_SETUP 0x00000040 -#define RADEON_UPLOAD_TCL 0x00000080 -#define RADEON_UPLOAD_MISC 0x00000100 -#define RADEON_UPLOAD_TEX0 0x00000200 -#define RADEON_UPLOAD_TEX1 0x00000400 -#define RADEON_UPLOAD_TEX2 0x00000800 -#define RADEON_UPLOAD_TEX0IMAGES 0x00001000 -#define RADEON_UPLOAD_TEX1IMAGES 0x00002000 -#define RADEON_UPLOAD_TEX2IMAGES 0x00004000 -#define RADEON_UPLOAD_CLIPRECTS 0x00008000 /* handled client-side */ -#define RADEON_REQUIRE_QUIESCENCE 0x00010000 -#define RADEON_UPLOAD_ZBIAS 0x00020000 /* version 1.2 and newer */ -#define RADEON_UPLOAD_ALL 0x003effff -#define RADEON_UPLOAD_CONTEXT_ALL 0x003e01ff - -/* New style per-packet identifiers for use in cmd_buffer ioctl with - * the RADEON_EMIT_PACKET command. Comments relate new packets to old - * state bits and the packet size: - */ -#define RADEON_EMIT_PP_MISC 0 /* context/7 */ -#define RADEON_EMIT_PP_CNTL 1 /* context/3 */ -#define RADEON_EMIT_RB3D_COLORPITCH 2 /* context/1 */ -#define RADEON_EMIT_RE_LINE_PATTERN 3 /* line/2 */ -#define RADEON_EMIT_SE_LINE_WIDTH 4 /* line/1 */ -#define RADEON_EMIT_PP_LUM_MATRIX 5 /* bumpmap/1 */ -#define RADEON_EMIT_PP_ROT_MATRIX_0 6 /* bumpmap/2 */ -#define RADEON_EMIT_RB3D_STENCILREFMASK 7 /* masks/3 */ -#define RADEON_EMIT_SE_VPORT_XSCALE 8 /* viewport/6 */ -#define RADEON_EMIT_SE_CNTL 9 /* setup/2 */ -#define RADEON_EMIT_SE_CNTL_STATUS 10 /* setup/1 */ -#define RADEON_EMIT_RE_MISC 11 /* misc/1 */ -#define RADEON_EMIT_PP_TXFILTER_0 12 /* tex0/6 */ -#define RADEON_EMIT_PP_BORDER_COLOR_0 13 /* tex0/1 */ -#define RADEON_EMIT_PP_TXFILTER_1 14 /* tex1/6 */ -#define RADEON_EMIT_PP_BORDER_COLOR_1 15 /* tex1/1 */ -#define RADEON_EMIT_PP_TXFILTER_2 16 /* tex2/6 */ -#define RADEON_EMIT_PP_BORDER_COLOR_2 17 /* tex2/1 */ -#define RADEON_EMIT_SE_ZBIAS_FACTOR 18 /* zbias/2 */ -#define RADEON_EMIT_SE_TCL_OUTPUT_VTX_FMT 19 /* tcl/11 */ -#define RADEON_EMIT_SE_TCL_MATERIAL_EMMISSIVE_RED 20 /* material/17 */ -#define R200_EMIT_PP_TXCBLEND_0 21 /* tex0/4 */ -#define R200_EMIT_PP_TXCBLEND_1 22 /* tex1/4 */ -#define R200_EMIT_PP_TXCBLEND_2 23 /* tex2/4 */ -#define R200_EMIT_PP_TXCBLEND_3 24 /* tex3/4 */ -#define R200_EMIT_PP_TXCBLEND_4 25 /* tex4/4 */ -#define R200_EMIT_PP_TXCBLEND_5 26 /* tex5/4 */ -#define R200_EMIT_PP_TXCBLEND_6 27 /* /4 */ -#define R200_EMIT_PP_TXCBLEND_7 28 /* /4 */ -#define R200_EMIT_TCL_LIGHT_MODEL_CTL_0 29 /* tcl/7 */ -#define R200_EMIT_TFACTOR_0 30 /* tf/7 */ -#define R200_EMIT_VTX_FMT_0 31 /* vtx/5 */ -#define R200_EMIT_VAP_CTL 32 /* vap/1 */ -#define R200_EMIT_MATRIX_SELECT_0 33 /* msl/5 */ -#define R200_EMIT_TEX_PROC_CTL_2 34 /* tcg/5 */ -#define R200_EMIT_TCL_UCP_VERT_BLEND_CTL 35 /* tcl/1 */ -#define R200_EMIT_PP_TXFILTER_0 36 /* tex0/6 */ -#define R200_EMIT_PP_TXFILTER_1 37 /* tex1/6 */ -#define R200_EMIT_PP_TXFILTER_2 38 /* tex2/6 */ -#define R200_EMIT_PP_TXFILTER_3 39 /* tex3/6 */ -#define R200_EMIT_PP_TXFILTER_4 40 /* tex4/6 */ -#define R200_EMIT_PP_TXFILTER_5 41 /* tex5/6 */ -#define R200_EMIT_PP_TXOFFSET_0 42 /* tex0/1 */ -#define R200_EMIT_PP_TXOFFSET_1 43 /* tex1/1 */ -#define R200_EMIT_PP_TXOFFSET_2 44 /* tex2/1 */ -#define R200_EMIT_PP_TXOFFSET_3 45 /* tex3/1 */ -#define R200_EMIT_PP_TXOFFSET_4 46 /* tex4/1 */ -#define R200_EMIT_PP_TXOFFSET_5 47 /* tex5/1 */ -#define R200_EMIT_VTE_CNTL 48 /* vte/1 */ -#define R200_EMIT_OUTPUT_VTX_COMP_SEL 49 /* vtx/1 */ -#define R200_EMIT_PP_TAM_DEBUG3 50 /* tam/1 */ -#define R200_EMIT_PP_CNTL_X 51 /* cst/1 */ -#define R200_EMIT_RB3D_DEPTHXY_OFFSET 52 /* cst/1 */ -#define R200_EMIT_RE_AUX_SCISSOR_CNTL 53 /* cst/1 */ -#define R200_EMIT_RE_SCISSOR_TL_0 54 /* cst/2 */ -#define R200_EMIT_RE_SCISSOR_TL_1 55 /* cst/2 */ -#define R200_EMIT_RE_SCISSOR_TL_2 56 /* cst/2 */ -#define R200_EMIT_SE_VAP_CNTL_STATUS 57 /* cst/1 */ -#define R200_EMIT_SE_VTX_STATE_CNTL 58 /* cst/1 */ -#define R200_EMIT_RE_POINTSIZE 59 /* cst/1 */ -#define R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0 60 /* cst/4 */ -#define R200_EMIT_PP_CUBIC_FACES_0 61 -#define R200_EMIT_PP_CUBIC_OFFSETS_0 62 -#define R200_EMIT_PP_CUBIC_FACES_1 63 -#define R200_EMIT_PP_CUBIC_OFFSETS_1 64 -#define R200_EMIT_PP_CUBIC_FACES_2 65 -#define R200_EMIT_PP_CUBIC_OFFSETS_2 66 -#define R200_EMIT_PP_CUBIC_FACES_3 67 -#define R200_EMIT_PP_CUBIC_OFFSETS_3 68 -#define R200_EMIT_PP_CUBIC_FACES_4 69 -#define R200_EMIT_PP_CUBIC_OFFSETS_4 70 -#define R200_EMIT_PP_CUBIC_FACES_5 71 -#define R200_EMIT_PP_CUBIC_OFFSETS_5 72 -#define RADEON_EMIT_PP_TEX_SIZE_0 73 -#define RADEON_EMIT_PP_TEX_SIZE_1 74 -#define RADEON_EMIT_PP_TEX_SIZE_2 75 -#define R200_EMIT_RB3D_BLENDCOLOR 76 -#define R200_EMIT_TCL_POINT_SPRITE_CNTL 77 -#define RADEON_EMIT_PP_CUBIC_FACES_0 78 -#define RADEON_EMIT_PP_CUBIC_OFFSETS_T0 79 -#define RADEON_EMIT_PP_CUBIC_FACES_1 80 -#define RADEON_EMIT_PP_CUBIC_OFFSETS_T1 81 -#define RADEON_EMIT_PP_CUBIC_FACES_2 82 -#define RADEON_EMIT_PP_CUBIC_OFFSETS_T2 83 -#define R200_EMIT_PP_TRI_PERF_CNTL 84 -#define R200_EMIT_PP_AFS_0 85 -#define R200_EMIT_PP_AFS_1 86 -#define R200_EMIT_ATF_TFACTOR 87 -#define R200_EMIT_PP_TXCTLALL_0 88 -#define R200_EMIT_PP_TXCTLALL_1 89 -#define R200_EMIT_PP_TXCTLALL_2 90 -#define R200_EMIT_PP_TXCTLALL_3 91 -#define R200_EMIT_PP_TXCTLALL_4 92 -#define R200_EMIT_PP_TXCTLALL_5 93 -#define R200_EMIT_VAP_PVS_CNTL 94 -#define RADEON_MAX_STATE_PACKETS 95 - -/* Commands understood by cmd_buffer ioctl. More can be added but - * obviously these can't be removed or changed: - */ -#define RADEON_CMD_PACKET 1 /* emit one of the register packets above */ -#define RADEON_CMD_SCALARS 2 /* emit scalar data */ -#define RADEON_CMD_VECTORS 3 /* emit vector data */ -#define RADEON_CMD_DMA_DISCARD 4 /* discard current dma buf */ -#define RADEON_CMD_PACKET3 5 /* emit hw packet */ -#define RADEON_CMD_PACKET3_CLIP 6 /* emit hw packet wrapped in cliprects */ -#define RADEON_CMD_SCALARS2 7 /* r200 stopgap */ -#define RADEON_CMD_WAIT 8 /* emit hw wait commands -- note: - * doesn't make the cpu wait, just - * the graphics hardware */ -#define RADEON_CMD_VECLINEAR 9 /* another r200 stopgap */ - -typedef union { - int i; - struct { - unsigned char cmd_type, pad0, pad1, pad2; - } header; - struct { - unsigned char cmd_type, packet_id, pad0, pad1; - } packet; - struct { - unsigned char cmd_type, offset, stride, count; - } scalars; - struct { - unsigned char cmd_type, offset, stride, count; - } vectors; - struct { - unsigned char cmd_type, addr_lo, addr_hi, count; - } veclinear; - struct { - unsigned char cmd_type, buf_idx, pad0, pad1; - } dma; - struct { - unsigned char cmd_type, flags, pad0, pad1; - } wait; -} drm_radeon_cmd_header_t; - -#define RADEON_WAIT_2D 0x1 -#define RADEON_WAIT_3D 0x2 - -/* Allowed parameters for R300_CMD_PACKET3 - */ -#define R300_CMD_PACKET3_CLEAR 0 -#define R300_CMD_PACKET3_RAW 1 - -/* Commands understood by cmd_buffer ioctl for R300. - * The interface has not been stabilized, so some of these may be removed - * and eventually reordered before stabilization. - */ -#define R300_CMD_PACKET0 1 -#define R300_CMD_VPU 2 /* emit vertex program upload */ -#define R300_CMD_PACKET3 3 /* emit a packet3 */ -#define R300_CMD_END3D 4 /* emit sequence ending 3d rendering */ -#define R300_CMD_CP_DELAY 5 -#define R300_CMD_DMA_DISCARD 6 -#define R300_CMD_WAIT 7 -# define R300_WAIT_2D 0x1 -# define R300_WAIT_3D 0x2 -/* these two defines are DOING IT WRONG - however - * we have userspace which relies on using these. - * The wait interface is backwards compat new - * code should use the NEW_WAIT defines below - * THESE ARE NOT BIT FIELDS - */ -# define R300_WAIT_2D_CLEAN 0x3 -# define R300_WAIT_3D_CLEAN 0x4 - -# define R300_NEW_WAIT_2D_3D 0x3 -# define R300_NEW_WAIT_2D_2D_CLEAN 0x4 -# define R300_NEW_WAIT_3D_3D_CLEAN 0x6 -# define R300_NEW_WAIT_2D_2D_CLEAN_3D_3D_CLEAN 0x8 - -#define R300_CMD_SCRATCH 8 -#define R300_CMD_R500FP 9 - -typedef union { - unsigned int u; - struct { - unsigned char cmd_type, pad0, pad1, pad2; - } header; - struct { - unsigned char cmd_type, count, reglo, reghi; - } packet0; - struct { - unsigned char cmd_type, count, adrlo, adrhi; - } vpu; - struct { - unsigned char cmd_type, packet, pad0, pad1; - } packet3; - struct { - unsigned char cmd_type, packet; - unsigned short count; /* amount of packet2 to emit */ - } delay; - struct { - unsigned char cmd_type, buf_idx, pad0, pad1; - } dma; - struct { - unsigned char cmd_type, flags, pad0, pad1; - } wait; - struct { - unsigned char cmd_type, reg, n_bufs, flags; - } scratch; - struct { - unsigned char cmd_type, count, adrlo, adrhi_flags; - } r500fp; -} drm_r300_cmd_header_t; - -#define RADEON_FRONT 0x1 -#define RADEON_BACK 0x2 -#define RADEON_DEPTH 0x4 -#define RADEON_STENCIL 0x8 -#define RADEON_CLEAR_FASTZ 0x80000000 -#define RADEON_USE_HIERZ 0x40000000 -#define RADEON_USE_COMP_ZBUF 0x20000000 - -#define R500FP_CONSTANT_TYPE (1 << 1) -#define R500FP_CONSTANT_CLAMP (1 << 2) - -/* Primitive types - */ -#define RADEON_POINTS 0x1 -#define RADEON_LINES 0x2 -#define RADEON_LINE_STRIP 0x3 -#define RADEON_TRIANGLES 0x4 -#define RADEON_TRIANGLE_FAN 0x5 -#define RADEON_TRIANGLE_STRIP 0x6 - -/* Vertex/indirect buffer size - */ -#define RADEON_BUFFER_SIZE 65536 - -/* Byte offsets for indirect buffer data - */ -#define RADEON_INDEX_PRIM_OFFSET 20 - -#define RADEON_SCRATCH_REG_OFFSET 32 - -#define R600_SCRATCH_REG_OFFSET 256 - -#define RADEON_NR_SAREA_CLIPRECTS 12 - -/* There are 2 heaps (local/GART). Each region within a heap is a - * minimum of 64k, and there are at most 64 of them per heap. - */ -#define RADEON_LOCAL_TEX_HEAP 0 -#define RADEON_GART_TEX_HEAP 1 -#define RADEON_NR_TEX_HEAPS 2 -#define RADEON_NR_TEX_REGIONS 64 -#define RADEON_LOG_TEX_GRANULARITY 16 - -#define RADEON_MAX_TEXTURE_LEVELS 12 -#define RADEON_MAX_TEXTURE_UNITS 3 - -#define RADEON_MAX_SURFACES 8 - -/* Blits have strict offset rules. All blit offset must be aligned on - * a 1K-byte boundary. - */ -#define RADEON_OFFSET_SHIFT 10 -#define RADEON_OFFSET_ALIGN (1 << RADEON_OFFSET_SHIFT) -#define RADEON_OFFSET_MASK (RADEON_OFFSET_ALIGN - 1) - -#endif /* __RADEON_SAREA_DEFINES__ */ - -typedef struct { - unsigned int red; - unsigned int green; - unsigned int blue; - unsigned int alpha; -} radeon_color_regs_t; - -typedef struct { - /* Context state */ - unsigned int pp_misc; /* 0x1c14 */ - unsigned int pp_fog_color; - unsigned int re_solid_color; - unsigned int rb3d_blendcntl; - unsigned int rb3d_depthoffset; - unsigned int rb3d_depthpitch; - unsigned int rb3d_zstencilcntl; - - unsigned int pp_cntl; /* 0x1c38 */ - unsigned int rb3d_cntl; - unsigned int rb3d_coloroffset; - unsigned int re_width_height; - unsigned int rb3d_colorpitch; - unsigned int se_cntl; - - /* Vertex format state */ - unsigned int se_coord_fmt; /* 0x1c50 */ - - /* Line state */ - unsigned int re_line_pattern; /* 0x1cd0 */ - unsigned int re_line_state; - - unsigned int se_line_width; /* 0x1db8 */ - - /* Bumpmap state */ - unsigned int pp_lum_matrix; /* 0x1d00 */ - - unsigned int pp_rot_matrix_0; /* 0x1d58 */ - unsigned int pp_rot_matrix_1; - - /* Mask state */ - unsigned int rb3d_stencilrefmask; /* 0x1d7c */ - unsigned int rb3d_ropcntl; - unsigned int rb3d_planemask; - - /* Viewport state */ - unsigned int se_vport_xscale; /* 0x1d98 */ - unsigned int se_vport_xoffset; - unsigned int se_vport_yscale; - unsigned int se_vport_yoffset; - unsigned int se_vport_zscale; - unsigned int se_vport_zoffset; - - /* Setup state */ - unsigned int se_cntl_status; /* 0x2140 */ - - /* Misc state */ - unsigned int re_top_left; /* 0x26c0 */ - unsigned int re_misc; -} drm_radeon_context_regs_t; - -typedef struct { - /* Zbias state */ - unsigned int se_zbias_factor; /* 0x1dac */ - unsigned int se_zbias_constant; -} drm_radeon_context2_regs_t; - -/* Setup registers for each texture unit - */ -typedef struct { - unsigned int pp_txfilter; - unsigned int pp_txformat; - unsigned int pp_txoffset; - unsigned int pp_txcblend; - unsigned int pp_txablend; - unsigned int pp_tfactor; - unsigned int pp_border_color; -} drm_radeon_texture_regs_t; - -typedef struct { - unsigned int start; - unsigned int finish; - unsigned int prim:8; - unsigned int stateidx:8; - unsigned int numverts:16; /* overloaded as offset/64 for elt prims */ - unsigned int vc_format; /* vertex format */ -} drm_radeon_prim_t; - -typedef struct { - drm_radeon_context_regs_t context; - drm_radeon_texture_regs_t tex[RADEON_MAX_TEXTURE_UNITS]; - drm_radeon_context2_regs_t context2; - unsigned int dirty; -} drm_radeon_state_t; - -typedef struct { - /* The channel for communication of state information to the - * kernel on firing a vertex buffer with either of the - * obsoleted vertex/index ioctls. - */ - drm_radeon_context_regs_t context_state; - drm_radeon_texture_regs_t tex_state[RADEON_MAX_TEXTURE_UNITS]; - unsigned int dirty; - unsigned int vertsize; - unsigned int vc_format; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[RADEON_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Counters for client-side throttling of rendering clients. - */ - unsigned int last_frame; - unsigned int last_dispatch; - unsigned int last_clear; - - struct drm_tex_region tex_list[RADEON_NR_TEX_HEAPS][RADEON_NR_TEX_REGIONS + - 1]; - unsigned int tex_age[RADEON_NR_TEX_HEAPS]; - int ctx_owner; - int pfState; /* number of 3d windows (0,1,2ormore) */ - int pfCurrentPage; /* which buffer is being displayed? */ - int crtc2_base; /* CRTC2 frame offset */ - int tiling_enabled; /* set by drm, read by 2d + 3d clients */ -} drm_radeon_sarea_t; - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (xf86drmRadeon.h) - * - * KW: actually it's illegal to change any of this (backwards compatibility). - */ - -/* Radeon specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ -#define DRM_RADEON_CP_INIT 0x00 -#define DRM_RADEON_CP_START 0x01 -#define DRM_RADEON_CP_STOP 0x02 -#define DRM_RADEON_CP_RESET 0x03 -#define DRM_RADEON_CP_IDLE 0x04 -#define DRM_RADEON_RESET 0x05 -#define DRM_RADEON_FULLSCREEN 0x06 -#define DRM_RADEON_SWAP 0x07 -#define DRM_RADEON_CLEAR 0x08 -#define DRM_RADEON_VERTEX 0x09 -#define DRM_RADEON_INDICES 0x0A -#define DRM_RADEON_NOT_USED -#define DRM_RADEON_STIPPLE 0x0C -#define DRM_RADEON_INDIRECT 0x0D -#define DRM_RADEON_TEXTURE 0x0E -#define DRM_RADEON_VERTEX2 0x0F -#define DRM_RADEON_CMDBUF 0x10 -#define DRM_RADEON_GETPARAM 0x11 -#define DRM_RADEON_FLIP 0x12 -#define DRM_RADEON_ALLOC 0x13 -#define DRM_RADEON_FREE 0x14 -#define DRM_RADEON_INIT_HEAP 0x15 -#define DRM_RADEON_IRQ_EMIT 0x16 -#define DRM_RADEON_IRQ_WAIT 0x17 -#define DRM_RADEON_CP_RESUME 0x18 -#define DRM_RADEON_SETPARAM 0x19 -#define DRM_RADEON_SURF_ALLOC 0x1a -#define DRM_RADEON_SURF_FREE 0x1b -/* KMS ioctl */ -#define DRM_RADEON_GEM_INFO 0x1c -#define DRM_RADEON_GEM_CREATE 0x1d -#define DRM_RADEON_GEM_MMAP 0x1e -#define DRM_RADEON_GEM_PREAD 0x21 -#define DRM_RADEON_GEM_PWRITE 0x22 -#define DRM_RADEON_GEM_SET_DOMAIN 0x23 -#define DRM_RADEON_GEM_WAIT_IDLE 0x24 -#define DRM_RADEON_CS 0x26 -#define DRM_RADEON_INFO 0x27 -#define DRM_RADEON_GEM_SET_TILING 0x28 -#define DRM_RADEON_GEM_GET_TILING 0x29 -#define DRM_RADEON_GEM_BUSY 0x2a -#define DRM_RADEON_GEM_VA 0x2b -#define DRM_RADEON_GEM_OP 0x2c -#define DRM_RADEON_GEM_USERPTR 0x2d - -#define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t) -#define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START) -#define DRM_IOCTL_RADEON_CP_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_STOP, drm_radeon_cp_stop_t) -#define DRM_IOCTL_RADEON_CP_RESET DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_RESET) -#define DRM_IOCTL_RADEON_CP_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_IDLE) -#define DRM_IOCTL_RADEON_RESET DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_RESET) -#define DRM_IOCTL_RADEON_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FULLSCREEN, drm_radeon_fullscreen_t) -#define DRM_IOCTL_RADEON_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_SWAP) -#define DRM_IOCTL_RADEON_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CLEAR, drm_radeon_clear_t) -#define DRM_IOCTL_RADEON_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX, drm_radeon_vertex_t) -#define DRM_IOCTL_RADEON_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INDICES, drm_radeon_indices_t) -#define DRM_IOCTL_RADEON_STIPPLE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_STIPPLE, drm_radeon_stipple_t) -#define DRM_IOCTL_RADEON_INDIRECT DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INDIRECT, drm_radeon_indirect_t) -#define DRM_IOCTL_RADEON_TEXTURE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_TEXTURE, drm_radeon_texture_t) -#define DRM_IOCTL_RADEON_VERTEX2 DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX2, drm_radeon_vertex2_t) -#define DRM_IOCTL_RADEON_CMDBUF DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CMDBUF, drm_radeon_cmd_buffer_t) -#define DRM_IOCTL_RADEON_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GETPARAM, drm_radeon_getparam_t) -#define DRM_IOCTL_RADEON_FLIP DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_FLIP) -#define DRM_IOCTL_RADEON_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_ALLOC, drm_radeon_mem_alloc_t) -#define DRM_IOCTL_RADEON_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FREE, drm_radeon_mem_free_t) -#define DRM_IOCTL_RADEON_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INIT_HEAP, drm_radeon_mem_init_heap_t) -#define DRM_IOCTL_RADEON_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_IRQ_EMIT, drm_radeon_irq_emit_t) -#define DRM_IOCTL_RADEON_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_IRQ_WAIT, drm_radeon_irq_wait_t) -#define DRM_IOCTL_RADEON_CP_RESUME DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_RESUME) -#define DRM_IOCTL_RADEON_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SETPARAM, drm_radeon_setparam_t) -#define DRM_IOCTL_RADEON_SURF_ALLOC DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_ALLOC, drm_radeon_surface_alloc_t) -#define DRM_IOCTL_RADEON_SURF_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_FREE, drm_radeon_surface_free_t) -/* KMS */ -#define DRM_IOCTL_RADEON_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_INFO, struct drm_radeon_gem_info) -#define DRM_IOCTL_RADEON_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_CREATE, struct drm_radeon_gem_create) -#define DRM_IOCTL_RADEON_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_MMAP, struct drm_radeon_gem_mmap) -#define DRM_IOCTL_RADEON_GEM_PREAD DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PREAD, struct drm_radeon_gem_pread) -#define DRM_IOCTL_RADEON_GEM_PWRITE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PWRITE, struct drm_radeon_gem_pwrite) -#define DRM_IOCTL_RADEON_GEM_SET_DOMAIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_DOMAIN, struct drm_radeon_gem_set_domain) -#define DRM_IOCTL_RADEON_GEM_WAIT_IDLE DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_GEM_WAIT_IDLE, struct drm_radeon_gem_wait_idle) -#define DRM_IOCTL_RADEON_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_CS, struct drm_radeon_cs) -#define DRM_IOCTL_RADEON_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INFO, struct drm_radeon_info) -#define DRM_IOCTL_RADEON_GEM_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_TILING, struct drm_radeon_gem_set_tiling) -#define DRM_IOCTL_RADEON_GEM_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_GET_TILING, struct drm_radeon_gem_get_tiling) -#define DRM_IOCTL_RADEON_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_BUSY, struct drm_radeon_gem_busy) -#define DRM_IOCTL_RADEON_GEM_VA DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_VA, struct drm_radeon_gem_va) -#define DRM_IOCTL_RADEON_GEM_OP DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_OP, struct drm_radeon_gem_op) -#define DRM_IOCTL_RADEON_GEM_USERPTR DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_USERPTR, struct drm_radeon_gem_userptr) - -typedef struct drm_radeon_init { - enum { - RADEON_INIT_CP = 0x01, - RADEON_CLEANUP_CP = 0x02, - RADEON_INIT_R200_CP = 0x03, - RADEON_INIT_R300_CP = 0x04, - RADEON_INIT_R600_CP = 0x05 - } func; - unsigned long sarea_priv_offset; - int is_pci; - int cp_mode; - int gart_size; - int ring_size; - int usec_timeout; - - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long ring_offset; - unsigned long ring_rptr_offset; - unsigned long buffers_offset; - unsigned long gart_textures_offset; -} drm_radeon_init_t; - -typedef struct drm_radeon_cp_stop { - int flush; - int idle; -} drm_radeon_cp_stop_t; - -typedef struct drm_radeon_fullscreen { - enum { - RADEON_INIT_FULLSCREEN = 0x01, - RADEON_CLEANUP_FULLSCREEN = 0x02 - } func; -} drm_radeon_fullscreen_t; - -#define CLEAR_X1 0 -#define CLEAR_Y1 1 -#define CLEAR_X2 2 -#define CLEAR_Y2 3 -#define CLEAR_DEPTH 4 - -typedef union drm_radeon_clear_rect { - float f[5]; - unsigned int ui[5]; -} drm_radeon_clear_rect_t; - -typedef struct drm_radeon_clear { - unsigned int flags; - unsigned int clear_color; - unsigned int clear_depth; - unsigned int color_mask; - unsigned int depth_mask; /* misnamed field: should be stencil */ - drm_radeon_clear_rect_t *depth_boxes; -} drm_radeon_clear_t; - -typedef struct drm_radeon_vertex { - int prim; - int idx; /* Index of vertex buffer */ - int count; /* Number of vertices in buffer */ - int discard; /* Client finished with buffer? */ -} drm_radeon_vertex_t; - -typedef struct drm_radeon_indices { - int prim; - int idx; - int start; - int end; - int discard; /* Client finished with buffer? */ -} drm_radeon_indices_t; - -/* v1.2 - obsoletes drm_radeon_vertex and drm_radeon_indices - * - allows multiple primitives and state changes in a single ioctl - * - supports driver change to emit native primitives - */ -typedef struct drm_radeon_vertex2 { - int idx; /* Index of vertex buffer */ - int discard; /* Client finished with buffer? */ - int nr_states; - drm_radeon_state_t *state; - int nr_prims; - drm_radeon_prim_t *prim; -} drm_radeon_vertex2_t; - -/* v1.3 - obsoletes drm_radeon_vertex2 - * - allows arbitrarily large cliprect list - * - allows updating of tcl packet, vector and scalar state - * - allows memory-efficient description of state updates - * - allows state to be emitted without a primitive - * (for clears, ctx switches) - * - allows more than one dma buffer to be referenced per ioctl - * - supports tcl driver - * - may be extended in future versions with new cmd types, packets - */ -typedef struct drm_radeon_cmd_buffer { - int bufsz; - char *buf; - int nbox; - struct drm_clip_rect *boxes; -} drm_radeon_cmd_buffer_t; - -typedef struct drm_radeon_tex_image { - unsigned int x, y; /* Blit coordinates */ - unsigned int width, height; - const void *data; -} drm_radeon_tex_image_t; - -typedef struct drm_radeon_texture { - unsigned int offset; - int pitch; - int format; - int width; /* Texture image coordinates */ - int height; - drm_radeon_tex_image_t *image; -} drm_radeon_texture_t; - -typedef struct drm_radeon_stipple { - unsigned int *mask; -} drm_radeon_stipple_t; - -typedef struct drm_radeon_indirect { - int idx; - int start; - int end; - int discard; -} drm_radeon_indirect_t; - -/* enum for card type parameters */ -#define RADEON_CARD_PCI 0 -#define RADEON_CARD_AGP 1 -#define RADEON_CARD_PCIE 2 - -/* 1.3: An ioctl to get parameters that aren't available to the 3d - * client any other way. - */ -#define RADEON_PARAM_GART_BUFFER_OFFSET 1 /* card offset of 1st GART buffer */ -#define RADEON_PARAM_LAST_FRAME 2 -#define RADEON_PARAM_LAST_DISPATCH 3 -#define RADEON_PARAM_LAST_CLEAR 4 -/* Added with DRM version 1.6. */ -#define RADEON_PARAM_IRQ_NR 5 -#define RADEON_PARAM_GART_BASE 6 /* card offset of GART base */ -/* Added with DRM version 1.8. */ -#define RADEON_PARAM_REGISTER_HANDLE 7 /* for drmMap() */ -#define RADEON_PARAM_STATUS_HANDLE 8 -#define RADEON_PARAM_SAREA_HANDLE 9 -#define RADEON_PARAM_GART_TEX_HANDLE 10 -#define RADEON_PARAM_SCRATCH_OFFSET 11 -#define RADEON_PARAM_CARD_TYPE 12 -#define RADEON_PARAM_VBLANK_CRTC 13 /* VBLANK CRTC */ -#define RADEON_PARAM_FB_LOCATION 14 /* FB location */ -#define RADEON_PARAM_NUM_GB_PIPES 15 /* num GB pipes */ -#define RADEON_PARAM_DEVICE_ID 16 -#define RADEON_PARAM_NUM_Z_PIPES 17 /* num Z pipes */ - -typedef struct drm_radeon_getparam { - int param; - void *value; -} drm_radeon_getparam_t; - -/* 1.6: Set up a memory manager for regions of shared memory: - */ -#define RADEON_MEM_REGION_GART 1 -#define RADEON_MEM_REGION_FB 2 - -typedef struct drm_radeon_mem_alloc { - int region; - int alignment; - int size; - int *region_offset; /* offset from start of fb or GART */ -} drm_radeon_mem_alloc_t; - -typedef struct drm_radeon_mem_free { - int region; - int region_offset; -} drm_radeon_mem_free_t; - -typedef struct drm_radeon_mem_init_heap { - int region; - int size; - int start; -} drm_radeon_mem_init_heap_t; - -/* 1.6: Userspace can request & wait on irq's: - */ -typedef struct drm_radeon_irq_emit { - int *irq_seq; -} drm_radeon_irq_emit_t; - -typedef struct drm_radeon_irq_wait { - int irq_seq; -} drm_radeon_irq_wait_t; - -/* 1.10: Clients tell the DRM where they think the framebuffer is located in - * the card's address space, via a new generic ioctl to set parameters - */ - -typedef struct drm_radeon_setparam { - unsigned int param; - __s64 value; -} drm_radeon_setparam_t; - -#define RADEON_SETPARAM_FB_LOCATION 1 /* determined framebuffer location */ -#define RADEON_SETPARAM_SWITCH_TILING 2 /* enable/disable color tiling */ -#define RADEON_SETPARAM_PCIGART_LOCATION 3 /* PCI Gart Location */ -#define RADEON_SETPARAM_NEW_MEMMAP 4 /* Use new memory map */ -#define RADEON_SETPARAM_PCIGART_TABLE_SIZE 5 /* PCI GART Table Size */ -#define RADEON_SETPARAM_VBLANK_CRTC 6 /* VBLANK CRTC */ -/* 1.14: Clients can allocate/free a surface - */ -typedef struct drm_radeon_surface_alloc { - unsigned int address; - unsigned int size; - unsigned int flags; -} drm_radeon_surface_alloc_t; - -typedef struct drm_radeon_surface_free { - unsigned int address; -} drm_radeon_surface_free_t; - -#define DRM_RADEON_VBLANK_CRTC1 1 -#define DRM_RADEON_VBLANK_CRTC2 2 - -/* - * Kernel modesetting world below. - */ -#define RADEON_GEM_DOMAIN_CPU 0x1 -#define RADEON_GEM_DOMAIN_GTT 0x2 -#define RADEON_GEM_DOMAIN_VRAM 0x4 - -struct drm_radeon_gem_info { - __u64 gart_size; - __u64 vram_size; - __u64 vram_visible; -}; - -#define RADEON_GEM_NO_BACKING_STORE (1 << 0) -#define RADEON_GEM_GTT_UC (1 << 1) -#define RADEON_GEM_GTT_WC (1 << 2) -/* BO is expected to be accessed by the CPU */ -#define RADEON_GEM_CPU_ACCESS (1 << 3) -/* CPU access is not expected to work for this BO */ -#define RADEON_GEM_NO_CPU_ACCESS (1 << 4) - -struct drm_radeon_gem_create { - __u64 size; - __u64 alignment; - __u32 handle; - __u32 initial_domain; - __u32 flags; -}; - -/* - * This is not a reliable API and you should expect it to fail for any - * number of reasons and have fallback path that do not use userptr to - * perform any operation. - */ -#define RADEON_GEM_USERPTR_READONLY (1 << 0) -#define RADEON_GEM_USERPTR_ANONONLY (1 << 1) -#define RADEON_GEM_USERPTR_VALIDATE (1 << 2) -#define RADEON_GEM_USERPTR_REGISTER (1 << 3) - -struct drm_radeon_gem_userptr { - __u64 addr; - __u64 size; - __u32 flags; - __u32 handle; -}; - -#define RADEON_TILING_MACRO 0x1 -#define RADEON_TILING_MICRO 0x2 -#define RADEON_TILING_SWAP_16BIT 0x4 -#define RADEON_TILING_R600_NO_SCANOUT RADEON_TILING_SWAP_16BIT -#define RADEON_TILING_SWAP_32BIT 0x8 -/* this object requires a surface when mapped - i.e. front buffer */ -#define RADEON_TILING_SURFACE 0x10 -#define RADEON_TILING_MICRO_SQUARE 0x20 -#define RADEON_TILING_EG_BANKW_SHIFT 8 -#define RADEON_TILING_EG_BANKW_MASK 0xf -#define RADEON_TILING_EG_BANKH_SHIFT 12 -#define RADEON_TILING_EG_BANKH_MASK 0xf -#define RADEON_TILING_EG_MACRO_TILE_ASPECT_SHIFT 16 -#define RADEON_TILING_EG_MACRO_TILE_ASPECT_MASK 0xf -#define RADEON_TILING_EG_TILE_SPLIT_SHIFT 24 -#define RADEON_TILING_EG_TILE_SPLIT_MASK 0xf -#define RADEON_TILING_EG_STENCIL_TILE_SPLIT_SHIFT 28 -#define RADEON_TILING_EG_STENCIL_TILE_SPLIT_MASK 0xf - -struct drm_radeon_gem_set_tiling { - __u32 handle; - __u32 tiling_flags; - __u32 pitch; -}; - -struct drm_radeon_gem_get_tiling { - __u32 handle; - __u32 tiling_flags; - __u32 pitch; -}; - -struct drm_radeon_gem_mmap { - __u32 handle; - __u32 pad; - __u64 offset; - __u64 size; - __u64 addr_ptr; -}; - -struct drm_radeon_gem_set_domain { - __u32 handle; - __u32 read_domains; - __u32 write_domain; -}; - -struct drm_radeon_gem_wait_idle { - __u32 handle; - __u32 pad; -}; - -struct drm_radeon_gem_busy { - __u32 handle; - __u32 domain; -}; - -struct drm_radeon_gem_pread { - /** Handle for the object being read. */ - __u32 handle; - __u32 pad; - /** Offset into the object to read from */ - __u64 offset; - /** Length of data to read */ - __u64 size; - /** Pointer to write the data into. */ - /* void *, but pointers are not 32/64 compatible */ - __u64 data_ptr; -}; - -struct drm_radeon_gem_pwrite { - /** Handle for the object being written to. */ - __u32 handle; - __u32 pad; - /** Offset into the object to write to */ - __u64 offset; - /** Length of data to write */ - __u64 size; - /** Pointer to read the data from. */ - /* void *, but pointers are not 32/64 compatible */ - __u64 data_ptr; -}; - -/* Sets or returns a value associated with a buffer. */ -struct drm_radeon_gem_op { - __u32 handle; /* buffer */ - __u32 op; /* RADEON_GEM_OP_* */ - __u64 value; /* input or return value */ -}; - -#define RADEON_GEM_OP_GET_INITIAL_DOMAIN 0 -#define RADEON_GEM_OP_SET_INITIAL_DOMAIN 1 - -#define RADEON_VA_MAP 1 -#define RADEON_VA_UNMAP 2 - -#define RADEON_VA_RESULT_OK 0 -#define RADEON_VA_RESULT_ERROR 1 -#define RADEON_VA_RESULT_VA_EXIST 2 - -#define RADEON_VM_PAGE_VALID (1 << 0) -#define RADEON_VM_PAGE_READABLE (1 << 1) -#define RADEON_VM_PAGE_WRITEABLE (1 << 2) -#define RADEON_VM_PAGE_SYSTEM (1 << 3) -#define RADEON_VM_PAGE_SNOOPED (1 << 4) - -struct drm_radeon_gem_va { - __u32 handle; - __u32 operation; - __u32 vm_id; - __u32 flags; - __u64 offset; -}; - -#define RADEON_CHUNK_ID_RELOCS 0x01 -#define RADEON_CHUNK_ID_IB 0x02 -#define RADEON_CHUNK_ID_FLAGS 0x03 -#define RADEON_CHUNK_ID_CONST_IB 0x04 - -/* The first dword of RADEON_CHUNK_ID_FLAGS is a uint32 of these flags: */ -#define RADEON_CS_KEEP_TILING_FLAGS 0x01 -#define RADEON_CS_USE_VM 0x02 -#define RADEON_CS_END_OF_FRAME 0x04 /* a hint from userspace which CS is the last one */ -/* The second dword of RADEON_CHUNK_ID_FLAGS is a uint32 that sets the ring type */ -#define RADEON_CS_RING_GFX 0 -#define RADEON_CS_RING_COMPUTE 1 -#define RADEON_CS_RING_DMA 2 -#define RADEON_CS_RING_UVD 3 -#define RADEON_CS_RING_VCE 4 -/* The third dword of RADEON_CHUNK_ID_FLAGS is a sint32 that sets the priority */ -/* 0 = normal, + = higher priority, - = lower priority */ - -struct drm_radeon_cs_chunk { - __u32 chunk_id; - __u32 length_dw; - __u64 chunk_data; -}; - -/* drm_radeon_cs_reloc.flags */ -#define RADEON_RELOC_PRIO_MASK (0xf << 0) - -struct drm_radeon_cs_reloc { - __u32 handle; - __u32 read_domains; - __u32 write_domain; - __u32 flags; -}; - -struct drm_radeon_cs { - __u32 num_chunks; - __u32 cs_id; - /* this points to __u64 * which point to cs chunks */ - __u64 chunks; - /* updates to the limits after this CS ioctl */ - __u64 gart_limit; - __u64 vram_limit; -}; - -#define RADEON_INFO_DEVICE_ID 0x00 -#define RADEON_INFO_NUM_GB_PIPES 0x01 -#define RADEON_INFO_NUM_Z_PIPES 0x02 -#define RADEON_INFO_ACCEL_WORKING 0x03 -#define RADEON_INFO_CRTC_FROM_ID 0x04 -#define RADEON_INFO_ACCEL_WORKING2 0x05 -#define RADEON_INFO_TILING_CONFIG 0x06 -#define RADEON_INFO_WANT_HYPERZ 0x07 -#define RADEON_INFO_WANT_CMASK 0x08 /* get access to CMASK on r300 */ -#define RADEON_INFO_CLOCK_CRYSTAL_FREQ 0x09 /* clock crystal frequency */ -#define RADEON_INFO_NUM_BACKENDS 0x0a /* DB/backends for r600+ - need for OQ */ -#define RADEON_INFO_NUM_TILE_PIPES 0x0b /* tile pipes for r600+ */ -#define RADEON_INFO_FUSION_GART_WORKING 0x0c /* fusion writes to GTT were broken before this */ -#define RADEON_INFO_BACKEND_MAP 0x0d /* pipe to backend map, needed by mesa */ -/* virtual address start, va < start are reserved by the kernel */ -#define RADEON_INFO_VA_START 0x0e -/* maximum size of ib using the virtual memory cs */ -#define RADEON_INFO_IB_VM_MAX_SIZE 0x0f -/* max pipes - needed for compute shaders */ -#define RADEON_INFO_MAX_PIPES 0x10 -/* timestamp for GL_ARB_timer_query (OpenGL), returns the current GPU clock */ -#define RADEON_INFO_TIMESTAMP 0x11 -/* max shader engines (SE) - needed for geometry shaders, etc. */ -#define RADEON_INFO_MAX_SE 0x12 -/* max SH per SE */ -#define RADEON_INFO_MAX_SH_PER_SE 0x13 -/* fast fb access is enabled */ -#define RADEON_INFO_FASTFB_WORKING 0x14 -/* query if a RADEON_CS_RING_* submission is supported */ -#define RADEON_INFO_RING_WORKING 0x15 -/* SI tile mode array */ -#define RADEON_INFO_SI_TILE_MODE_ARRAY 0x16 -/* query if CP DMA is supported on the compute ring */ -#define RADEON_INFO_SI_CP_DMA_COMPUTE 0x17 -/* CIK macrotile mode array */ -#define RADEON_INFO_CIK_MACROTILE_MODE_ARRAY 0x18 -/* query the number of render backends */ -#define RADEON_INFO_SI_BACKEND_ENABLED_MASK 0x19 -/* max engine clock - needed for OpenCL */ -#define RADEON_INFO_MAX_SCLK 0x1a -/* version of VCE firmware */ -#define RADEON_INFO_VCE_FW_VERSION 0x1b -/* version of VCE feedback */ -#define RADEON_INFO_VCE_FB_VERSION 0x1c -#define RADEON_INFO_NUM_BYTES_MOVED 0x1d -#define RADEON_INFO_VRAM_USAGE 0x1e -#define RADEON_INFO_GTT_USAGE 0x1f -#define RADEON_INFO_ACTIVE_CU_COUNT 0x20 -#define RADEON_INFO_CURRENT_GPU_TEMP 0x21 -#define RADEON_INFO_CURRENT_GPU_SCLK 0x22 -#define RADEON_INFO_CURRENT_GPU_MCLK 0x23 -#define RADEON_INFO_READ_REG 0x24 -#define RADEON_INFO_VA_UNMAP_WORKING 0x25 -#define RADEON_INFO_GPU_RESET_COUNTER 0x26 - -struct drm_radeon_info { - __u32 request; - __u32 pad; - __u64 value; -}; - -/* Those correspond to the tile index to use, this is to explicitly state - * the API that is implicitly defined by the tile mode array. - */ -#define SI_TILE_MODE_COLOR_LINEAR_ALIGNED 8 -#define SI_TILE_MODE_COLOR_1D 13 -#define SI_TILE_MODE_COLOR_1D_SCANOUT 9 -#define SI_TILE_MODE_COLOR_2D_8BPP 14 -#define SI_TILE_MODE_COLOR_2D_16BPP 15 -#define SI_TILE_MODE_COLOR_2D_32BPP 16 -#define SI_TILE_MODE_COLOR_2D_64BPP 17 -#define SI_TILE_MODE_COLOR_2D_SCANOUT_16BPP 11 -#define SI_TILE_MODE_COLOR_2D_SCANOUT_32BPP 12 -#define SI_TILE_MODE_DEPTH_STENCIL_1D 4 -#define SI_TILE_MODE_DEPTH_STENCIL_2D 0 -#define SI_TILE_MODE_DEPTH_STENCIL_2D_2AA 3 -#define SI_TILE_MODE_DEPTH_STENCIL_2D_4AA 3 -#define SI_TILE_MODE_DEPTH_STENCIL_2D_8AA 2 - -#define CIK_TILE_MODE_DEPTH_STENCIL_1D 5 - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/libdrm/radeon_surface.h b/prebuilts/aarch64/include/libdrm/radeon_surface.h deleted file mode 100644 index af7cab6..0000000 --- a/prebuilts/aarch64/include/libdrm/radeon_surface.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright © 2011 Red Hat All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Jérôme Glisse - */ -#ifndef RADEON_SURFACE_H -#define RADEON_SURFACE_H - -/* Note : - * - * For texture array, the n layer are stored one after the other within each - * mipmap level. 0 value for field than can be hint is always valid. - */ - -#define RADEON_SURF_MAX_LEVEL 32 - -#define RADEON_SURF_TYPE_MASK 0xFF -#define RADEON_SURF_TYPE_SHIFT 0 -#define RADEON_SURF_TYPE_1D 0 -#define RADEON_SURF_TYPE_2D 1 -#define RADEON_SURF_TYPE_3D 2 -#define RADEON_SURF_TYPE_CUBEMAP 3 -#define RADEON_SURF_TYPE_1D_ARRAY 4 -#define RADEON_SURF_TYPE_2D_ARRAY 5 -#define RADEON_SURF_MODE_MASK 0xFF -#define RADEON_SURF_MODE_SHIFT 8 -#define RADEON_SURF_MODE_LINEAR 0 -#define RADEON_SURF_MODE_LINEAR_ALIGNED 1 -#define RADEON_SURF_MODE_1D 2 -#define RADEON_SURF_MODE_2D 3 -#define RADEON_SURF_SCANOUT (1 << 16) -#define RADEON_SURF_ZBUFFER (1 << 17) -#define RADEON_SURF_SBUFFER (1 << 18) -#define RADEON_SURF_Z_OR_SBUFFER (RADEON_SURF_ZBUFFER | RADEON_SURF_SBUFFER) -#define RADEON_SURF_HAS_SBUFFER_MIPTREE (1 << 19) -#define RADEON_SURF_HAS_TILE_MODE_INDEX (1 << 20) -#define RADEON_SURF_FMASK (1 << 21) - -#define RADEON_SURF_GET(v, field) (((v) >> RADEON_SURF_ ## field ## _SHIFT) & RADEON_SURF_ ## field ## _MASK) -#define RADEON_SURF_SET(v, field) (((v) & RADEON_SURF_ ## field ## _MASK) << RADEON_SURF_ ## field ## _SHIFT) -#define RADEON_SURF_CLR(v, field) ((v) & ~(RADEON_SURF_ ## field ## _MASK << RADEON_SURF_ ## field ## _SHIFT)) - -/* first field up to mode need to match r6 struct so that we can reuse - * same function for linear & linear aligned - */ -struct radeon_surface_level { - uint64_t offset; - uint64_t slice_size; - uint32_t npix_x; - uint32_t npix_y; - uint32_t npix_z; - uint32_t nblk_x; - uint32_t nblk_y; - uint32_t nblk_z; - uint32_t pitch_bytes; - uint32_t mode; -}; - -enum si_tiling_mode { - SI_TILING_AUTO = 0, - - SI_TILING_COLOR_1D, - SI_TILING_COLOR_1D_SCANOUT, - SI_TILING_COLOR_2D_8BPP, - SI_TILING_COLOR_2D_16BPP, - SI_TILING_COLOR_2D_32BPP, - SI_TILING_COLOR_2D_64BPP, - SI_TILING_COLOR_2D_SCANOUT_16BPP, - SI_TILING_COLOR_2D_SCANOUT_32BPP, - SI_TILING_COLOR_LINEAR, - - SI_TILING_STENCIL_1D, - SI_TILING_STENCIL_2D, - SI_TILING_STENCIL_2D_2AA, - SI_TILING_STENCIL_2D_4AA, - SI_TILING_STENCIL_2D_8AA, - - SI_TILING_DEPTH_1D, - SI_TILING_DEPTH_2D, - SI_TILING_DEPTH_2D_2AA, - SI_TILING_DEPTH_2D_4AA, - SI_TILING_DEPTH_2D_8AA, - - SI_TILING_LAST_MODE, -}; - -struct radeon_surface { - uint32_t npix_x; - uint32_t npix_y; - uint32_t npix_z; - uint32_t blk_w; - uint32_t blk_h; - uint32_t blk_d; - uint32_t array_size; - uint32_t last_level; - uint32_t bpe; - uint32_t nsamples; - uint32_t flags; - /* Following is updated/fill by the allocator. It's allowed to - * set some of the value but they are use as hint and can be - * overridden (things lile bankw/bankh on evergreen for - * instance). - */ - uint64_t bo_size; - uint64_t bo_alignment; - /* apply to eg */ - uint32_t bankw; - uint32_t bankh; - uint32_t mtilea; - uint32_t tile_split; - uint32_t stencil_tile_split; - uint64_t stencil_offset; - struct radeon_surface_level level[RADEON_SURF_MAX_LEVEL]; - struct radeon_surface_level stencil_level[RADEON_SURF_MAX_LEVEL]; - uint32_t tiling_index[RADEON_SURF_MAX_LEVEL]; - uint32_t stencil_tiling_index[RADEON_SURF_MAX_LEVEL]; -}; - -struct radeon_surface_manager *radeon_surface_manager_new(int fd); -void radeon_surface_manager_free(struct radeon_surface_manager *surf_man); -int radeon_surface_init(struct radeon_surface_manager *surf_man, - struct radeon_surface *surf); -int radeon_surface_best(struct radeon_surface_manager *surf_man, - struct radeon_surface *surf); - -#endif diff --git a/prebuilts/aarch64/include/libdrm/savage_drm.h b/prebuilts/aarch64/include/libdrm/savage_drm.h deleted file mode 100644 index 1a91234..0000000 --- a/prebuilts/aarch64/include/libdrm/savage_drm.h +++ /dev/null @@ -1,220 +0,0 @@ -/* savage_drm.h -- Public header for the savage driver - * - * Copyright 2004 Felix Kuehling - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sub license, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL FELIX KUEHLING BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef __SAVAGE_DRM_H__ -#define __SAVAGE_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef __SAVAGE_SAREA_DEFINES__ -#define __SAVAGE_SAREA_DEFINES__ - -/* 2 heaps (1 for card, 1 for agp), each divided into up to 128 - * regions, subject to a minimum region size of (1<<16) == 64k. - * - * Clients may subdivide regions internally, but when sharing between - * clients, the region size is the minimum granularity. - */ - -#define SAVAGE_CARD_HEAP 0 -#define SAVAGE_AGP_HEAP 1 -#define SAVAGE_NR_TEX_HEAPS 2 -#define SAVAGE_NR_TEX_REGIONS 16 -#define SAVAGE_LOG_MIN_TEX_REGION_SIZE 16 - -#endif /* __SAVAGE_SAREA_DEFINES__ */ - -typedef struct _drm_savage_sarea { - /* LRU lists for texture memory in agp space and on the card. - */ - struct drm_tex_region texList[SAVAGE_NR_TEX_HEAPS][SAVAGE_NR_TEX_REGIONS + - 1]; - unsigned int texAge[SAVAGE_NR_TEX_HEAPS]; - - /* Mechanism to validate card state. - */ - int ctxOwner; -} drm_savage_sarea_t, *drm_savage_sarea_ptr; - -/* Savage-specific ioctls - */ -#define DRM_SAVAGE_BCI_INIT 0x00 -#define DRM_SAVAGE_BCI_CMDBUF 0x01 -#define DRM_SAVAGE_BCI_EVENT_EMIT 0x02 -#define DRM_SAVAGE_BCI_EVENT_WAIT 0x03 - -#define DRM_IOCTL_SAVAGE_BCI_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_INIT, drm_savage_init_t) -#define DRM_IOCTL_SAVAGE_BCI_CMDBUF DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_CMDBUF, drm_savage_cmdbuf_t) -#define DRM_IOCTL_SAVAGE_BCI_EVENT_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_SAVAGE_BCI_EVENT_EMIT, drm_savage_event_emit_t) -#define DRM_IOCTL_SAVAGE_BCI_EVENT_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_EVENT_WAIT, drm_savage_event_wait_t) - -#define SAVAGE_DMA_PCI 1 -#define SAVAGE_DMA_AGP 3 -typedef struct drm_savage_init { - enum { - SAVAGE_INIT_BCI = 1, - SAVAGE_CLEANUP_BCI = 2 - } func; - unsigned int sarea_priv_offset; - - /* some parameters */ - unsigned int cob_size; - unsigned int bci_threshold_lo, bci_threshold_hi; - unsigned int dma_type; - - /* frame buffer layout */ - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - - /* local textures */ - unsigned int texture_offset; - unsigned int texture_size; - - /* physical locations of non-permanent maps */ - unsigned long status_offset; - unsigned long buffers_offset; - unsigned long agp_textures_offset; - unsigned long cmd_dma_offset; -} drm_savage_init_t; - -typedef union drm_savage_cmd_header drm_savage_cmd_header_t; -typedef struct drm_savage_cmdbuf { - /* command buffer in client's address space */ - drm_savage_cmd_header_t *cmd_addr; - unsigned int size; /* size of the command buffer in 64bit units */ - - unsigned int dma_idx; /* DMA buffer index to use */ - int discard; /* discard DMA buffer when done */ - /* vertex buffer in client's address space */ - unsigned int *vb_addr; - unsigned int vb_size; /* size of client vertex buffer in bytes */ - unsigned int vb_stride; /* stride of vertices in 32bit words */ - /* boxes in client's address space */ - struct drm_clip_rect *box_addr; - unsigned int nbox; /* number of clipping boxes */ -} drm_savage_cmdbuf_t; - -#define SAVAGE_WAIT_2D 0x1 /* wait for 2D idle before updating event tag */ -#define SAVAGE_WAIT_3D 0x2 /* wait for 3D idle before updating event tag */ -#define SAVAGE_WAIT_IRQ 0x4 /* emit or wait for IRQ, not implemented yet */ -typedef struct drm_savage_event { - unsigned int count; - unsigned int flags; -} drm_savage_event_emit_t, drm_savage_event_wait_t; - -/* Commands for the cmdbuf ioctl - */ -#define SAVAGE_CMD_STATE 0 /* a range of state registers */ -#define SAVAGE_CMD_DMA_PRIM 1 /* vertices from DMA buffer */ -#define SAVAGE_CMD_VB_PRIM 2 /* vertices from client vertex buffer */ -#define SAVAGE_CMD_DMA_IDX 3 /* indexed vertices from DMA buffer */ -#define SAVAGE_CMD_VB_IDX 4 /* indexed vertices client vertex buffer */ -#define SAVAGE_CMD_CLEAR 5 /* clear buffers */ -#define SAVAGE_CMD_SWAP 6 /* swap buffers */ - -/* Primitive types -*/ -#define SAVAGE_PRIM_TRILIST 0 /* triangle list */ -#define SAVAGE_PRIM_TRISTRIP 1 /* triangle strip */ -#define SAVAGE_PRIM_TRIFAN 2 /* triangle fan */ -#define SAVAGE_PRIM_TRILIST_201 3 /* reorder verts for correct flat - * shading on s3d */ - -/* Skip flags (vertex format) - */ -#define SAVAGE_SKIP_Z 0x01 -#define SAVAGE_SKIP_W 0x02 -#define SAVAGE_SKIP_C0 0x04 -#define SAVAGE_SKIP_C1 0x08 -#define SAVAGE_SKIP_S0 0x10 -#define SAVAGE_SKIP_T0 0x20 -#define SAVAGE_SKIP_ST0 0x30 -#define SAVAGE_SKIP_S1 0x40 -#define SAVAGE_SKIP_T1 0x80 -#define SAVAGE_SKIP_ST1 0xc0 -#define SAVAGE_SKIP_ALL_S3D 0x3f -#define SAVAGE_SKIP_ALL_S4 0xff - -/* Buffer names for clear command - */ -#define SAVAGE_FRONT 0x1 -#define SAVAGE_BACK 0x2 -#define SAVAGE_DEPTH 0x4 - -/* 64-bit command header - */ -union drm_savage_cmd_header { - struct { - unsigned char cmd; /* command */ - unsigned char pad0; - unsigned short pad1; - unsigned short pad2; - unsigned short pad3; - } cmd; /* generic */ - struct { - unsigned char cmd; - unsigned char global; /* need idle engine? */ - unsigned short count; /* number of consecutive registers */ - unsigned short start; /* first register */ - unsigned short pad3; - } state; /* SAVAGE_CMD_STATE */ - struct { - unsigned char cmd; - unsigned char prim; /* primitive type */ - unsigned short skip; /* vertex format (skip flags) */ - unsigned short count; /* number of vertices */ - unsigned short start; /* first vertex in DMA/vertex buffer */ - } prim; /* SAVAGE_CMD_DMA_PRIM, SAVAGE_CMD_VB_PRIM */ - struct { - unsigned char cmd; - unsigned char prim; - unsigned short skip; - unsigned short count; /* number of indices that follow */ - unsigned short pad3; - } idx; /* SAVAGE_CMD_DMA_IDX, SAVAGE_CMD_VB_IDX */ - struct { - unsigned char cmd; - unsigned char pad0; - unsigned short pad1; - unsigned int flags; - } clear0; /* SAVAGE_CMD_CLEAR */ - struct { - unsigned int mask; - unsigned int value; - } clear1; /* SAVAGE_CMD_CLEAR data */ -}; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/libdrm/sis_drm.h b/prebuilts/aarch64/include/libdrm/sis_drm.h deleted file mode 100644 index 8e51bb9..0000000 --- a/prebuilts/aarch64/include/libdrm/sis_drm.h +++ /dev/null @@ -1,77 +0,0 @@ -/* sis_drv.h -- Private header for sis driver -*- linux-c -*- */ -/* - * Copyright 2005 Eric Anholt - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - */ - -#ifndef __SIS_DRM_H__ -#define __SIS_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* SiS specific ioctls */ -#define NOT_USED_0_3 -#define DRM_SIS_FB_ALLOC 0x04 -#define DRM_SIS_FB_FREE 0x05 -#define NOT_USED_6_12 -#define DRM_SIS_AGP_INIT 0x13 -#define DRM_SIS_AGP_ALLOC 0x14 -#define DRM_SIS_AGP_FREE 0x15 -#define DRM_SIS_FB_INIT 0x16 - -#define DRM_IOCTL_SIS_FB_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_FB_ALLOC, drm_sis_mem_t) -#define DRM_IOCTL_SIS_FB_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_FB_FREE, drm_sis_mem_t) -#define DRM_IOCTL_SIS_AGP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_AGP_INIT, drm_sis_agp_t) -#define DRM_IOCTL_SIS_AGP_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_AGP_ALLOC, drm_sis_mem_t) -#define DRM_IOCTL_SIS_AGP_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_AGP_FREE, drm_sis_mem_t) -#define DRM_IOCTL_SIS_FB_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_FB_INIT, drm_sis_fb_t) -/* -#define DRM_IOCTL_SIS_FLIP DRM_IOW( 0x48, drm_sis_flip_t) -#define DRM_IOCTL_SIS_FLIP_INIT DRM_IO( 0x49) -#define DRM_IOCTL_SIS_FLIP_FINAL DRM_IO( 0x50) -*/ - -typedef struct { - int context; - unsigned int offset; - unsigned int size; - unsigned long free; -} drm_sis_mem_t; - -typedef struct { - unsigned int offset, size; -} drm_sis_agp_t; - -typedef struct { - unsigned int offset, size; -} drm_sis_fb_t; - -#if defined(__cplusplus) -} -#endif - -#endif /* __SIS_DRM_H__ */ diff --git a/prebuilts/aarch64/include/libdrm/tegra_drm.h b/prebuilts/aarch64/include/libdrm/tegra_drm.h deleted file mode 100644 index 94cfc30..0000000 --- a/prebuilts/aarch64/include/libdrm/tegra_drm.h +++ /dev/null @@ -1,1060 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/* Copyright (c) 2012-2020 NVIDIA Corporation */ - -#ifndef _UAPI_TEGRA_DRM_H_ -#define _UAPI_TEGRA_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Tegra DRM legacy UAPI. Only enabled with STAGING */ - -#define DRM_TEGRA_GEM_CREATE_TILED (1 << 0) -#define DRM_TEGRA_GEM_CREATE_BOTTOM_UP (1 << 1) - -/** - * struct drm_tegra_gem_create - parameters for the GEM object creation IOCTL - */ -struct drm_tegra_gem_create { - /** - * @size: - * - * The size, in bytes, of the buffer object to be created. - */ - __u64 size; - - /** - * @flags: - * - * A bitmask of flags that influence the creation of GEM objects: - * - * DRM_TEGRA_GEM_CREATE_TILED - * Use the 16x16 tiling format for this buffer. - * - * DRM_TEGRA_GEM_CREATE_BOTTOM_UP - * The buffer has a bottom-up layout. - */ - __u32 flags; - - /** - * @handle: - * - * The handle of the created GEM object. Set by the kernel upon - * successful completion of the IOCTL. - */ - __u32 handle; -}; - -/** - * struct drm_tegra_gem_mmap - parameters for the GEM mmap IOCTL - */ -struct drm_tegra_gem_mmap { - /** - * @handle: - * - * Handle of the GEM object to obtain an mmap offset for. - */ - __u32 handle; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; - - /** - * @offset: - * - * The mmap offset for the given GEM object. Set by the kernel upon - * successful completion of the IOCTL. - */ - __u64 offset; -}; - -/** - * struct drm_tegra_syncpt_read - parameters for the read syncpoint IOCTL - */ -struct drm_tegra_syncpt_read { - /** - * @id: - * - * ID of the syncpoint to read the current value from. - */ - __u32 id; - - /** - * @value: - * - * The current syncpoint value. Set by the kernel upon successful - * completion of the IOCTL. - */ - __u32 value; -}; - -/** - * struct drm_tegra_syncpt_incr - parameters for the increment syncpoint IOCTL - */ -struct drm_tegra_syncpt_incr { - /** - * @id: - * - * ID of the syncpoint to increment. - */ - __u32 id; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_syncpt_wait - parameters for the wait syncpoint IOCTL - */ -struct drm_tegra_syncpt_wait { - /** - * @id: - * - * ID of the syncpoint to wait on. - */ - __u32 id; - - /** - * @thresh: - * - * Threshold value for which to wait. - */ - __u32 thresh; - - /** - * @timeout: - * - * Timeout, in milliseconds, to wait. - */ - __u32 timeout; - - /** - * @value: - * - * The new syncpoint value after the wait. Set by the kernel upon - * successful completion of the IOCTL. - */ - __u32 value; -}; - -#define DRM_TEGRA_NO_TIMEOUT (0xffffffff) - -/** - * struct drm_tegra_open_channel - parameters for the open channel IOCTL - */ -struct drm_tegra_open_channel { - /** - * @client: - * - * The client ID for this channel. - */ - __u32 client; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; - - /** - * @context: - * - * The application context of this channel. Set by the kernel upon - * successful completion of the IOCTL. This context needs to be passed - * to the DRM_TEGRA_CHANNEL_CLOSE or the DRM_TEGRA_SUBMIT IOCTLs. - */ - __u64 context; -}; - -/** - * struct drm_tegra_close_channel - parameters for the close channel IOCTL - */ -struct drm_tegra_close_channel { - /** - * @context: - * - * The application context of this channel. This is obtained from the - * DRM_TEGRA_OPEN_CHANNEL IOCTL. - */ - __u64 context; -}; - -/** - * struct drm_tegra_get_syncpt - parameters for the get syncpoint IOCTL - */ -struct drm_tegra_get_syncpt { - /** - * @context: - * - * The application context identifying the channel for which to obtain - * the syncpoint ID. - */ - __u64 context; - - /** - * @index: - * - * Index of the client syncpoint for which to obtain the ID. - */ - __u32 index; - - /** - * @id: - * - * The ID of the given syncpoint. Set by the kernel upon successful - * completion of the IOCTL. - */ - __u32 id; -}; - -/** - * struct drm_tegra_get_syncpt_base - parameters for the get wait base IOCTL - */ -struct drm_tegra_get_syncpt_base { - /** - * @context: - * - * The application context identifying for which channel to obtain the - * wait base. - */ - __u64 context; - - /** - * @syncpt: - * - * ID of the syncpoint for which to obtain the wait base. - */ - __u32 syncpt; - - /** - * @id: - * - * The ID of the wait base corresponding to the client syncpoint. Set - * by the kernel upon successful completion of the IOCTL. - */ - __u32 id; -}; - -/** - * struct drm_tegra_syncpt - syncpoint increment operation - */ -struct drm_tegra_syncpt { - /** - * @id: - * - * ID of the syncpoint to operate on. - */ - __u32 id; - - /** - * @incrs: - * - * Number of increments to perform for the syncpoint. - */ - __u32 incrs; -}; - -/** - * struct drm_tegra_cmdbuf - structure describing a command buffer - */ -struct drm_tegra_cmdbuf { - /** - * @handle: - * - * Handle to a GEM object containing the command buffer. - */ - __u32 handle; - - /** - * @offset: - * - * Offset, in bytes, into the GEM object identified by @handle at - * which the command buffer starts. - */ - __u32 offset; - - /** - * @words: - * - * Number of 32-bit words in this command buffer. - */ - __u32 words; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_reloc - GEM object relocation structure - */ -struct drm_tegra_reloc { - struct { - /** - * @cmdbuf.handle: - * - * Handle to the GEM object containing the command buffer for - * which to perform this GEM object relocation. - */ - __u32 handle; - - /** - * @cmdbuf.offset: - * - * Offset, in bytes, into the command buffer at which to - * insert the relocated address. - */ - __u32 offset; - } cmdbuf; - struct { - /** - * @target.handle: - * - * Handle to the GEM object to be relocated. - */ - __u32 handle; - - /** - * @target.offset: - * - * Offset, in bytes, into the target GEM object at which the - * relocated data starts. - */ - __u32 offset; - } target; - - /** - * @shift: - * - * The number of bits by which to shift relocated addresses. - */ - __u32 shift; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_waitchk - wait check structure - */ -struct drm_tegra_waitchk { - /** - * @handle: - * - * Handle to the GEM object containing a command stream on which to - * perform the wait check. - */ - __u32 handle; - - /** - * @offset: - * - * Offset, in bytes, of the location in the command stream to perform - * the wait check on. - */ - __u32 offset; - - /** - * @syncpt: - * - * ID of the syncpoint to wait check. - */ - __u32 syncpt; - - /** - * @thresh: - * - * Threshold value for which to check. - */ - __u32 thresh; -}; - -/** - * struct drm_tegra_submit - job submission structure - */ -struct drm_tegra_submit { - /** - * @context: - * - * The application context identifying the channel to use for the - * execution of this job. - */ - __u64 context; - - /** - * @num_syncpts: - * - * The number of syncpoints operated on by this job. This defines the - * length of the array pointed to by @syncpts. - */ - __u32 num_syncpts; - - /** - * @num_cmdbufs: - * - * The number of command buffers to execute as part of this job. This - * defines the length of the array pointed to by @cmdbufs. - */ - __u32 num_cmdbufs; - - /** - * @num_relocs: - * - * The number of relocations to perform before executing this job. - * This defines the length of the array pointed to by @relocs. - */ - __u32 num_relocs; - - /** - * @num_waitchks: - * - * The number of wait checks to perform as part of this job. This - * defines the length of the array pointed to by @waitchks. - */ - __u32 num_waitchks; - - /** - * @waitchk_mask: - * - * Bitmask of valid wait checks. - */ - __u32 waitchk_mask; - - /** - * @timeout: - * - * Timeout, in milliseconds, before this job is cancelled. - */ - __u32 timeout; - - /** - * @syncpts: - * - * A pointer to an array of &struct drm_tegra_syncpt structures that - * specify the syncpoint operations performed as part of this job. - * The number of elements in the array must be equal to the value - * given by @num_syncpts. - */ - __u64 syncpts; - - /** - * @cmdbufs: - * - * A pointer to an array of &struct drm_tegra_cmdbuf structures that - * define the command buffers to execute as part of this job. The - * number of elements in the array must be equal to the value given - * by @num_syncpts. - */ - __u64 cmdbufs; - - /** - * @relocs: - * - * A pointer to an array of &struct drm_tegra_reloc structures that - * specify the relocations that need to be performed before executing - * this job. The number of elements in the array must be equal to the - * value given by @num_relocs. - */ - __u64 relocs; - - /** - * @waitchks: - * - * A pointer to an array of &struct drm_tegra_waitchk structures that - * specify the wait checks to be performed while executing this job. - * The number of elements in the array must be equal to the value - * given by @num_waitchks. - */ - __u64 waitchks; - - /** - * @fence: - * - * The threshold of the syncpoint associated with this job after it - * has been completed. Set by the kernel upon successful completion of - * the IOCTL. This can be used with the DRM_TEGRA_SYNCPT_WAIT IOCTL to - * wait for this job to be finished. - */ - __u32 fence; - - /** - * @reserved: - * - * This field is reserved for future use. Must be 0. - */ - __u32 reserved[5]; -}; - -#define DRM_TEGRA_GEM_TILING_MODE_PITCH 0 -#define DRM_TEGRA_GEM_TILING_MODE_TILED 1 -#define DRM_TEGRA_GEM_TILING_MODE_BLOCK 2 - -/** - * struct drm_tegra_gem_set_tiling - parameters for the set tiling IOCTL - */ -struct drm_tegra_gem_set_tiling { - /** - * @handle: - * - * Handle to the GEM object for which to set the tiling parameters. - */ - __u32 handle; - - /** - * @mode: - * - * The tiling mode to set. Must be one of: - * - * DRM_TEGRA_GEM_TILING_MODE_PITCH - * pitch linear format - * - * DRM_TEGRA_GEM_TILING_MODE_TILED - * 16x16 tiling format - * - * DRM_TEGRA_GEM_TILING_MODE_BLOCK - * 16Bx2 tiling format - */ - __u32 mode; - - /** - * @value: - * - * The value to set for the tiling mode parameter. - */ - __u32 value; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_gem_get_tiling - parameters for the get tiling IOCTL - */ -struct drm_tegra_gem_get_tiling { - /** - * @handle: - * - * Handle to the GEM object for which to query the tiling parameters. - */ - __u32 handle; - - /** - * @mode: - * - * The tiling mode currently associated with the GEM object. Set by - * the kernel upon successful completion of the IOCTL. - */ - __u32 mode; - - /** - * @value: - * - * The tiling mode parameter currently associated with the GEM object. - * Set by the kernel upon successful completion of the IOCTL. - */ - __u32 value; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -#define DRM_TEGRA_GEM_BOTTOM_UP (1 << 0) -#define DRM_TEGRA_GEM_FLAGS (DRM_TEGRA_GEM_BOTTOM_UP) - -/** - * struct drm_tegra_gem_set_flags - parameters for the set flags IOCTL - */ -struct drm_tegra_gem_set_flags { - /** - * @handle: - * - * Handle to the GEM object for which to set the flags. - */ - __u32 handle; - - /** - * @flags: - * - * The flags to set for the GEM object. - */ - __u32 flags; -}; - -/** - * struct drm_tegra_gem_get_flags - parameters for the get flags IOCTL - */ -struct drm_tegra_gem_get_flags { - /** - * @handle: - * - * Handle to the GEM object for which to query the flags. - */ - __u32 handle; - - /** - * @flags: - * - * The flags currently associated with the GEM object. Set by the - * kernel upon successful completion of the IOCTL. - */ - __u32 flags; -}; - -#define DRM_TEGRA_GEM_CREATE 0x00 -#define DRM_TEGRA_GEM_MMAP 0x01 -#define DRM_TEGRA_SYNCPT_READ 0x02 -#define DRM_TEGRA_SYNCPT_INCR 0x03 -#define DRM_TEGRA_SYNCPT_WAIT 0x04 -#define DRM_TEGRA_OPEN_CHANNEL 0x05 -#define DRM_TEGRA_CLOSE_CHANNEL 0x06 -#define DRM_TEGRA_GET_SYNCPT 0x07 -#define DRM_TEGRA_SUBMIT 0x08 -#define DRM_TEGRA_GET_SYNCPT_BASE 0x09 -#define DRM_TEGRA_GEM_SET_TILING 0x0a -#define DRM_TEGRA_GEM_GET_TILING 0x0b -#define DRM_TEGRA_GEM_SET_FLAGS 0x0c -#define DRM_TEGRA_GEM_GET_FLAGS 0x0d - -#define DRM_IOCTL_TEGRA_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_CREATE, struct drm_tegra_gem_create) -#define DRM_IOCTL_TEGRA_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_MMAP, struct drm_tegra_gem_mmap) -#define DRM_IOCTL_TEGRA_SYNCPT_READ DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_READ, struct drm_tegra_syncpt_read) -#define DRM_IOCTL_TEGRA_SYNCPT_INCR DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_INCR, struct drm_tegra_syncpt_incr) -#define DRM_IOCTL_TEGRA_SYNCPT_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_WAIT, struct drm_tegra_syncpt_wait) -#define DRM_IOCTL_TEGRA_OPEN_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_OPEN_CHANNEL, struct drm_tegra_open_channel) -#define DRM_IOCTL_TEGRA_CLOSE_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_CLOSE_CHANNEL, struct drm_tegra_close_channel) -#define DRM_IOCTL_TEGRA_GET_SYNCPT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT, struct drm_tegra_get_syncpt) -#define DRM_IOCTL_TEGRA_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SUBMIT, struct drm_tegra_submit) -#define DRM_IOCTL_TEGRA_GET_SYNCPT_BASE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT_BASE, struct drm_tegra_get_syncpt_base) -#define DRM_IOCTL_TEGRA_GEM_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_TILING, struct drm_tegra_gem_set_tiling) -#define DRM_IOCTL_TEGRA_GEM_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_TILING, struct drm_tegra_gem_get_tiling) -#define DRM_IOCTL_TEGRA_GEM_SET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_FLAGS, struct drm_tegra_gem_set_flags) -#define DRM_IOCTL_TEGRA_GEM_GET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_FLAGS, struct drm_tegra_gem_get_flags) - -/* New Tegra DRM UAPI */ - -/* - * Reported by the driver in the `capabilities` field. - * - * DRM_TEGRA_CHANNEL_CAP_CACHE_COHERENT: If set, the engine is cache coherent - * with regard to the system memory. - */ -#define DRM_TEGRA_CHANNEL_CAP_CACHE_COHERENT (1 << 0) - -struct drm_tegra_channel_open { - /** - * @host1x_class: [in] - * - * Host1x class of the engine that will be programmed using this - * channel. - */ - __u32 host1x_class; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * @context: [out] - * - * Opaque identifier corresponding to the opened channel. - */ - __u32 context; - - /** - * @version: [out] - * - * Version of the engine hardware. This can be used by userspace - * to determine how the engine needs to be programmed. - */ - __u32 version; - - /** - * @capabilities: [out] - * - * Flags describing the hardware capabilities. - */ - __u32 capabilities; - __u32 padding; -}; - -struct drm_tegra_channel_close { - /** - * @context: [in] - * - * Identifier of the channel to close. - */ - __u32 context; - __u32 padding; -}; - -/* - * Mapping flags that can be used to influence how the mapping is created. - * - * DRM_TEGRA_CHANNEL_MAP_READ: create mapping that allows HW read access - * DRM_TEGRA_CHANNEL_MAP_WRITE: create mapping that allows HW write access - */ -#define DRM_TEGRA_CHANNEL_MAP_READ (1 << 0) -#define DRM_TEGRA_CHANNEL_MAP_WRITE (1 << 1) -#define DRM_TEGRA_CHANNEL_MAP_READ_WRITE (DRM_TEGRA_CHANNEL_MAP_READ | \ - DRM_TEGRA_CHANNEL_MAP_WRITE) - -struct drm_tegra_channel_map { - /** - * @context: [in] - * - * Identifier of the channel to which make memory available for. - */ - __u32 context; - - /** - * @handle: [in] - * - * GEM handle of the memory to map. - */ - __u32 handle; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * @mapping: [out] - * - * Identifier corresponding to the mapping, to be used for - * relocations or unmapping later. - */ - __u32 mapping; -}; - -struct drm_tegra_channel_unmap { - /** - * @context: [in] - * - * Channel identifier of the channel to unmap memory from. - */ - __u32 context; - - /** - * @mapping: [in] - * - * Mapping identifier of the memory mapping to unmap. - */ - __u32 mapping; -}; - -/* Submission */ - -/** - * Specify that bit 39 of the patched-in address should be set to switch - * swizzling between Tegra and non-Tegra sector layout on systems that store - * surfaces in system memory in non-Tegra sector layout. - */ -#define DRM_TEGRA_SUBMIT_RELOC_SECTOR_LAYOUT (1 << 0) - -struct drm_tegra_submit_buf { - /** - * @mapping: [in] - * - * Identifier of the mapping to use in the submission. - */ - __u32 mapping; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * Information for relocation patching. - */ - struct { - /** - * @target_offset: [in] - * - * Offset from the start of the mapping of the data whose - * address is to be patched into the gather. - */ - __u64 target_offset; - - /** - * @gather_offset_words: [in] - * - * Offset in words from the start of the gather data to - * where the address should be patched into. - */ - __u32 gather_offset_words; - - /** - * @shift: [in] - * - * Number of bits the address should be shifted right before - * patching in. - */ - __u32 shift; - } reloc; -}; - -/** - * Execute `words` words of Host1x opcodes specified in the `gather_data_ptr` - * buffer. Each GATHER_UPTR command uses successive words from the buffer. - */ -#define DRM_TEGRA_SUBMIT_CMD_GATHER_UPTR 0 -/** - * Wait for a syncpoint to reach a value before continuing with further - * commands. - */ -#define DRM_TEGRA_SUBMIT_CMD_WAIT_SYNCPT 1 -/** - * Wait for a syncpoint to reach a value before continuing with further - * commands. The threshold is calculated relative to the start of the job. - */ -#define DRM_TEGRA_SUBMIT_CMD_WAIT_SYNCPT_RELATIVE 2 - -struct drm_tegra_submit_cmd_gather_uptr { - __u32 words; - __u32 reserved[3]; -}; - -struct drm_tegra_submit_cmd_wait_syncpt { - __u32 id; - __u32 value; - __u32 reserved[2]; -}; - -struct drm_tegra_submit_cmd { - /** - * @type: [in] - * - * Command type to execute. One of the DRM_TEGRA_SUBMIT_CMD* - * defines. - */ - __u32 type; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - union { - struct drm_tegra_submit_cmd_gather_uptr gather_uptr; - struct drm_tegra_submit_cmd_wait_syncpt wait_syncpt; - __u32 reserved[4]; - }; -}; - -struct drm_tegra_submit_syncpt { - /** - * @id: [in] - * - * ID of the syncpoint that the job will increment. - */ - __u32 id; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * @increments: [in] - * - * Number of times the job will increment this syncpoint. - */ - __u32 increments; - - /** - * @value: [out] - * - * Value the syncpoint will have once the job has completed all - * its specified syncpoint increments. - * - * Note that the kernel may increment the syncpoint before or after - * the job. These increments are not reflected in this field. - * - * If the job hangs or times out, not all of the increments may - * get executed. - */ - __u32 value; -}; - -struct drm_tegra_channel_submit { - /** - * @context: [in] - * - * Identifier of the channel to submit this job to. - */ - __u32 context; - - /** - * @num_bufs: [in] - * - * Number of elements in the `bufs_ptr` array. - */ - __u32 num_bufs; - - /** - * @num_cmds: [in] - * - * Number of elements in the `cmds_ptr` array. - */ - __u32 num_cmds; - - /** - * @gather_data_words: [in] - * - * Number of 32-bit words in the `gather_data_ptr` array. - */ - __u32 gather_data_words; - - /** - * @bufs_ptr: [in] - * - * Pointer to an array of drm_tegra_submit_buf structures. - */ - __u64 bufs_ptr; - - /** - * @cmds_ptr: [in] - * - * Pointer to an array of drm_tegra_submit_cmd structures. - */ - __u64 cmds_ptr; - - /** - * @gather_data_ptr: [in] - * - * Pointer to an array of Host1x opcodes to be used by GATHER_UPTR - * commands. - */ - __u64 gather_data_ptr; - - /** - * @syncobj_in: [in] - * - * Handle for DRM syncobj that will be waited before submission. - * Ignored if zero. - */ - __u32 syncobj_in; - - /** - * @syncobj_out: [in] - * - * Handle for DRM syncobj that will have its fence replaced with - * the job's completion fence. Ignored if zero. - */ - __u32 syncobj_out; - - /** - * @syncpt_incr: [in,out] - * - * Information about the syncpoint the job will increment. - */ - struct drm_tegra_submit_syncpt syncpt; -}; - -struct drm_tegra_syncpoint_allocate { - /** - * @id: [out] - * - * ID of allocated syncpoint. - */ - __u32 id; - __u32 padding; -}; - -struct drm_tegra_syncpoint_free { - /** - * @id: [in] - * - * ID of syncpoint to free. - */ - __u32 id; - __u32 padding; -}; - -struct drm_tegra_syncpoint_wait { - /** - * @timeout: [in] - * - * Absolute timestamp at which the wait will time out. - */ - __s64 timeout_ns; - - /** - * @id: [in] - * - * ID of syncpoint to wait on. - */ - __u32 id; - - /** - * @threshold: [in] - * - * Threshold to wait for. - */ - __u32 threshold; - - /** - * @value: [out] - * - * Value of the syncpoint upon wait completion. - */ - __u32 value; - - __u32 padding; -}; - -#define DRM_IOCTL_TEGRA_CHANNEL_OPEN DRM_IOWR(DRM_COMMAND_BASE + 0x10, struct drm_tegra_channel_open) -#define DRM_IOCTL_TEGRA_CHANNEL_CLOSE DRM_IOWR(DRM_COMMAND_BASE + 0x11, struct drm_tegra_channel_close) -#define DRM_IOCTL_TEGRA_CHANNEL_MAP DRM_IOWR(DRM_COMMAND_BASE + 0x12, struct drm_tegra_channel_map) -#define DRM_IOCTL_TEGRA_CHANNEL_UNMAP DRM_IOWR(DRM_COMMAND_BASE + 0x13, struct drm_tegra_channel_unmap) -#define DRM_IOCTL_TEGRA_CHANNEL_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + 0x14, struct drm_tegra_channel_submit) - -#define DRM_IOCTL_TEGRA_SYNCPOINT_ALLOCATE DRM_IOWR(DRM_COMMAND_BASE + 0x20, struct drm_tegra_syncpoint_allocate) -#define DRM_IOCTL_TEGRA_SYNCPOINT_FREE DRM_IOWR(DRM_COMMAND_BASE + 0x21, struct drm_tegra_syncpoint_free) -#define DRM_IOCTL_TEGRA_SYNCPOINT_WAIT DRM_IOWR(DRM_COMMAND_BASE + 0x22, struct drm_tegra_syncpoint_wait) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/libdrm/vc4_drm.h b/prebuilts/aarch64/include/libdrm/vc4_drm.h deleted file mode 100644 index 31f50de..0000000 --- a/prebuilts/aarch64/include/libdrm/vc4_drm.h +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright © 2014-2015 Broadcom - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef _VC4_DRM_H_ -#define _VC4_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_VC4_SUBMIT_CL 0x00 -#define DRM_VC4_WAIT_SEQNO 0x01 -#define DRM_VC4_WAIT_BO 0x02 -#define DRM_VC4_CREATE_BO 0x03 -#define DRM_VC4_MMAP_BO 0x04 -#define DRM_VC4_CREATE_SHADER_BO 0x05 -#define DRM_VC4_GET_HANG_STATE 0x06 -#define DRM_VC4_GET_PARAM 0x07 -#define DRM_VC4_SET_TILING 0x08 -#define DRM_VC4_GET_TILING 0x09 -#define DRM_VC4_LABEL_BO 0x0a -#define DRM_VC4_GEM_MADVISE 0x0b -#define DRM_VC4_PERFMON_CREATE 0x0c -#define DRM_VC4_PERFMON_DESTROY 0x0d -#define DRM_VC4_PERFMON_GET_VALUES 0x0e - -#define DRM_IOCTL_VC4_SUBMIT_CL DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SUBMIT_CL, struct drm_vc4_submit_cl) -#define DRM_IOCTL_VC4_WAIT_SEQNO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_SEQNO, struct drm_vc4_wait_seqno) -#define DRM_IOCTL_VC4_WAIT_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_BO, struct drm_vc4_wait_bo) -#define DRM_IOCTL_VC4_CREATE_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_CREATE_BO, struct drm_vc4_create_bo) -#define DRM_IOCTL_VC4_MMAP_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_MMAP_BO, struct drm_vc4_mmap_bo) -#define DRM_IOCTL_VC4_CREATE_SHADER_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_CREATE_SHADER_BO, struct drm_vc4_create_shader_bo) -#define DRM_IOCTL_VC4_GET_HANG_STATE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_HANG_STATE, struct drm_vc4_get_hang_state) -#define DRM_IOCTL_VC4_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_PARAM, struct drm_vc4_get_param) -#define DRM_IOCTL_VC4_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SET_TILING, struct drm_vc4_set_tiling) -#define DRM_IOCTL_VC4_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_TILING, struct drm_vc4_get_tiling) -#define DRM_IOCTL_VC4_LABEL_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_LABEL_BO, struct drm_vc4_label_bo) -#define DRM_IOCTL_VC4_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GEM_MADVISE, struct drm_vc4_gem_madvise) -#define DRM_IOCTL_VC4_PERFMON_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_CREATE, struct drm_vc4_perfmon_create) -#define DRM_IOCTL_VC4_PERFMON_DESTROY DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_DESTROY, struct drm_vc4_perfmon_destroy) -#define DRM_IOCTL_VC4_PERFMON_GET_VALUES DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_GET_VALUES, struct drm_vc4_perfmon_get_values) - -struct drm_vc4_submit_rcl_surface { - __u32 hindex; /* Handle index, or ~0 if not present. */ - __u32 offset; /* Offset to start of buffer. */ - /* - * Bits for either render config (color_write) or load/store packet. - * Bits should all be 0 for MSAA load/stores. - */ - __u16 bits; - -#define VC4_SUBMIT_RCL_SURFACE_READ_IS_FULL_RES (1 << 0) - __u16 flags; -}; - -/** - * struct drm_vc4_submit_cl - ioctl argument for submitting commands to the 3D - * engine. - * - * Drivers typically use GPU BOs to store batchbuffers / command lists and - * their associated state. However, because the VC4 lacks an MMU, we have to - * do validation of memory accesses by the GPU commands. If we were to store - * our commands in BOs, we'd need to do uncached readback from them to do the - * validation process, which is too expensive. Instead, userspace accumulates - * commands and associated state in plain memory, then the kernel copies the - * data to its own address space, and then validates and stores it in a GPU - * BO. - */ -struct drm_vc4_submit_cl { - /* Pointer to the binner command list. - * - * This is the first set of commands executed, which runs the - * coordinate shader to determine where primitives land on the screen, - * then writes out the state updates and draw calls necessary per tile - * to the tile allocation BO. - */ - __u64 bin_cl; - - /* Pointer to the shader records. - * - * Shader records are the structures read by the hardware that contain - * pointers to uniforms, shaders, and vertex attributes. The - * reference to the shader record has enough information to determine - * how many pointers are necessary (fixed number for shaders/uniforms, - * and an attribute count), so those BO indices into bo_handles are - * just stored as __u32s before each shader record passed in. - */ - __u64 shader_rec; - - /* Pointer to uniform data and texture handles for the textures - * referenced by the shader. - * - * For each shader state record, there is a set of uniform data in the - * order referenced by the record (FS, VS, then CS). Each set of - * uniform data has a __u32 index into bo_handles per texture - * sample operation, in the order the QPU_W_TMUn_S writes appear in - * the program. Following the texture BO handle indices is the actual - * uniform data. - * - * The individual uniform state blocks don't have sizes passed in, - * because the kernel has to determine the sizes anyway during shader - * code validation. - */ - __u64 uniforms; - __u64 bo_handles; - - /* Size in bytes of the binner command list. */ - __u32 bin_cl_size; - /* Size in bytes of the set of shader records. */ - __u32 shader_rec_size; - /* Number of shader records. - * - * This could just be computed from the contents of shader_records and - * the address bits of references to them from the bin CL, but it - * keeps the kernel from having to resize some allocations it makes. - */ - __u32 shader_rec_count; - /* Size in bytes of the uniform state. */ - __u32 uniforms_size; - - /* Number of BO handles passed in (size is that times 4). */ - __u32 bo_handle_count; - - /* RCL setup: */ - __u16 width; - __u16 height; - __u8 min_x_tile; - __u8 min_y_tile; - __u8 max_x_tile; - __u8 max_y_tile; - struct drm_vc4_submit_rcl_surface color_read; - struct drm_vc4_submit_rcl_surface color_write; - struct drm_vc4_submit_rcl_surface zs_read; - struct drm_vc4_submit_rcl_surface zs_write; - struct drm_vc4_submit_rcl_surface msaa_color_write; - struct drm_vc4_submit_rcl_surface msaa_zs_write; - __u32 clear_color[2]; - __u32 clear_z; - __u8 clear_s; - - __u32 pad:24; - -#define VC4_SUBMIT_CL_USE_CLEAR_COLOR (1 << 0) -/* By default, the kernel gets to choose the order that the tiles are - * rendered in. If this is set, then the tiles will be rendered in a - * raster order, with the right-to-left vs left-to-right and - * top-to-bottom vs bottom-to-top dictated by - * VC4_SUBMIT_CL_RCL_ORDER_INCREASING_*. This allows overlapping - * blits to be implemented using the 3D engine. - */ -#define VC4_SUBMIT_CL_FIXED_RCL_ORDER (1 << 1) -#define VC4_SUBMIT_CL_RCL_ORDER_INCREASING_X (1 << 2) -#define VC4_SUBMIT_CL_RCL_ORDER_INCREASING_Y (1 << 3) - __u32 flags; - - /* Returned value of the seqno of this render job (for the - * wait ioctl). - */ - __u64 seqno; - - /* ID of the perfmon to attach to this job. 0 means no perfmon. */ - __u32 perfmonid; - - /* Syncobj handle to wait on. If set, processing of this render job - * will not start until the syncobj is signaled. 0 means ignore. - */ - __u32 in_sync; - - /* Syncobj handle to export fence to. If set, the fence in the syncobj - * will be replaced with a fence that signals upon completion of this - * render job. 0 means ignore. - */ - __u32 out_sync; - - __u32 pad2; -}; - -/** - * struct drm_vc4_wait_seqno - ioctl argument for waiting for - * DRM_VC4_SUBMIT_CL completion using its returned seqno. - * - * timeout_ns is the timeout in nanoseconds, where "0" means "don't - * block, just return the status." - */ -struct drm_vc4_wait_seqno { - __u64 seqno; - __u64 timeout_ns; -}; - -/** - * struct drm_vc4_wait_bo - ioctl argument for waiting for - * completion of the last DRM_VC4_SUBMIT_CL on a BO. - * - * This is useful for cases where multiple processes might be - * rendering to a BO and you want to wait for all rendering to be - * completed. - */ -struct drm_vc4_wait_bo { - __u32 handle; - __u32 pad; - __u64 timeout_ns; -}; - -/** - * struct drm_vc4_create_bo - ioctl argument for creating VC4 BOs. - * - * There are currently no values for the flags argument, but it may be - * used in a future extension. - */ -struct drm_vc4_create_bo { - __u32 size; - __u32 flags; - /** Returned GEM handle for the BO. */ - __u32 handle; - __u32 pad; -}; - -/** - * struct drm_vc4_mmap_bo - ioctl argument for mapping VC4 BOs. - * - * This doesn't actually perform an mmap. Instead, it returns the - * offset you need to use in an mmap on the DRM device node. This - * means that tools like valgrind end up knowing about the mapped - * memory. - * - * There are currently no values for the flags argument, but it may be - * used in a future extension. - */ -struct drm_vc4_mmap_bo { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 flags; - /** offset into the drm node to use for subsequent mmap call. */ - __u64 offset; -}; - -/** - * struct drm_vc4_create_shader_bo - ioctl argument for creating VC4 - * shader BOs. - * - * Since allowing a shader to be overwritten while it's also being - * executed from would allow privlege escalation, shaders must be - * created using this ioctl, and they can't be mmapped later. - */ -struct drm_vc4_create_shader_bo { - /* Size of the data argument. */ - __u32 size; - /* Flags, currently must be 0. */ - __u32 flags; - - /* Pointer to the data. */ - __u64 data; - - /** Returned GEM handle for the BO. */ - __u32 handle; - /* Pad, must be 0. */ - __u32 pad; -}; - -struct drm_vc4_get_hang_state_bo { - __u32 handle; - __u32 paddr; - __u32 size; - __u32 pad; -}; - -/** - * struct drm_vc4_hang_state - ioctl argument for collecting state - * from a GPU hang for analysis. -*/ -struct drm_vc4_get_hang_state { - /** Pointer to array of struct drm_vc4_get_hang_state_bo. */ - __u64 bo; - /** - * On input, the size of the bo array. Output is the number - * of bos to be returned. - */ - __u32 bo_count; - - __u32 start_bin, start_render; - - __u32 ct0ca, ct0ea; - __u32 ct1ca, ct1ea; - __u32 ct0cs, ct1cs; - __u32 ct0ra0, ct1ra0; - - __u32 bpca, bpcs; - __u32 bpoa, bpos; - - __u32 vpmbase; - - __u32 dbge; - __u32 fdbgo; - __u32 fdbgb; - __u32 fdbgr; - __u32 fdbgs; - __u32 errstat; - - /* Pad that we may save more registers into in the future. */ - __u32 pad[16]; -}; - -#define DRM_VC4_PARAM_V3D_IDENT0 0 -#define DRM_VC4_PARAM_V3D_IDENT1 1 -#define DRM_VC4_PARAM_V3D_IDENT2 2 -#define DRM_VC4_PARAM_SUPPORTS_BRANCHES 3 -#define DRM_VC4_PARAM_SUPPORTS_ETC1 4 -#define DRM_VC4_PARAM_SUPPORTS_THREADED_FS 5 -#define DRM_VC4_PARAM_SUPPORTS_FIXED_RCL_ORDER 6 -#define DRM_VC4_PARAM_SUPPORTS_MADVISE 7 -#define DRM_VC4_PARAM_SUPPORTS_PERFMON 8 - -struct drm_vc4_get_param { - __u32 param; - __u32 pad; - __u64 value; -}; - -struct drm_vc4_get_tiling { - __u32 handle; - __u32 flags; - __u64 modifier; -}; - -struct drm_vc4_set_tiling { - __u32 handle; - __u32 flags; - __u64 modifier; -}; - -/** - * struct drm_vc4_label_bo - Attach a name to a BO for debug purposes. - */ -struct drm_vc4_label_bo { - __u32 handle; - __u32 len; - __u64 name; -}; - -/* - * States prefixed with '__' are internal states and cannot be passed to the - * DRM_IOCTL_VC4_GEM_MADVISE ioctl. - */ -#define VC4_MADV_WILLNEED 0 -#define VC4_MADV_DONTNEED 1 -#define __VC4_MADV_PURGED 2 -#define __VC4_MADV_NOTSUPP 3 - -struct drm_vc4_gem_madvise { - __u32 handle; - __u32 madv; - __u32 retained; - __u32 pad; -}; - -enum { - VC4_PERFCNT_FEP_VALID_PRIMS_NO_RENDER, - VC4_PERFCNT_FEP_VALID_PRIMS_RENDER, - VC4_PERFCNT_FEP_CLIPPED_QUADS, - VC4_PERFCNT_FEP_VALID_QUADS, - VC4_PERFCNT_TLB_QUADS_NOT_PASSING_STENCIL, - VC4_PERFCNT_TLB_QUADS_NOT_PASSING_Z_AND_STENCIL, - VC4_PERFCNT_TLB_QUADS_PASSING_Z_AND_STENCIL, - VC4_PERFCNT_TLB_QUADS_ZERO_COVERAGE, - VC4_PERFCNT_TLB_QUADS_NON_ZERO_COVERAGE, - VC4_PERFCNT_TLB_QUADS_WRITTEN_TO_COLOR_BUF, - VC4_PERFCNT_PLB_PRIMS_OUTSIDE_VIEWPORT, - VC4_PERFCNT_PLB_PRIMS_NEED_CLIPPING, - VC4_PERFCNT_PSE_PRIMS_REVERSED, - VC4_PERFCNT_QPU_TOTAL_IDLE_CYCLES, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_VERTEX_COORD_SHADING, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_FRAGMENT_SHADING, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_EXEC_VALID_INST, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_TMUS, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_SCOREBOARD, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_VARYINGS, - VC4_PERFCNT_QPU_TOTAL_INST_CACHE_HIT, - VC4_PERFCNT_QPU_TOTAL_INST_CACHE_MISS, - VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_HIT, - VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_MISS, - VC4_PERFCNT_TMU_TOTAL_TEXT_QUADS_PROCESSED, - VC4_PERFCNT_TMU_TOTAL_TEXT_CACHE_MISS, - VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VDW_STALLED, - VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VCD_STALLED, - VC4_PERFCNT_L2C_TOTAL_L2_CACHE_HIT, - VC4_PERFCNT_L2C_TOTAL_L2_CACHE_MISS, - VC4_PERFCNT_NUM_EVENTS, -}; - -#define DRM_VC4_MAX_PERF_COUNTERS 16 - -struct drm_vc4_perfmon_create { - __u32 id; - __u32 ncounters; - __u8 events[DRM_VC4_MAX_PERF_COUNTERS]; -}; - -struct drm_vc4_perfmon_destroy { - __u32 id; -}; - -/* - * Returns the values of the performance counters tracked by this - * perfmon (as an array of ncounters u64 values). - * - * No implicit synchronization is performed, so the user has to - * guarantee that any jobs using this perfmon have already been - * completed (probably by blocking on the seqno returned by the - * last exec that used the perfmon). - */ -struct drm_vc4_perfmon_get_values { - __u32 id; - __u64 values_ptr; -}; - -#if defined(__cplusplus) -} -#endif - -#endif /* _VC4_DRM_H_ */ diff --git a/prebuilts/aarch64/include/libdrm/vc4_packet.h b/prebuilts/aarch64/include/libdrm/vc4_packet.h deleted file mode 100644 index e18e0bd..0000000 --- a/prebuilts/aarch64/include/libdrm/vc4_packet.h +++ /dev/null @@ -1,397 +0,0 @@ -/* - * Copyright © 2014 Broadcom - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef VC4_PACKET_H -#define VC4_PACKET_H - -enum vc4_packet { - VC4_PACKET_HALT = 0, - VC4_PACKET_NOP = 1, - - VC4_PACKET_FLUSH = 4, - VC4_PACKET_FLUSH_ALL = 5, - VC4_PACKET_START_TILE_BINNING = 6, - VC4_PACKET_INCREMENT_SEMAPHORE = 7, - VC4_PACKET_WAIT_ON_SEMAPHORE = 8, - - VC4_PACKET_BRANCH = 16, - VC4_PACKET_BRANCH_TO_SUB_LIST = 17, - VC4_PACKET_RETURN_FROM_SUB_LIST = 18, - - VC4_PACKET_STORE_MS_TILE_BUFFER = 24, - VC4_PACKET_STORE_MS_TILE_BUFFER_AND_EOF = 25, - VC4_PACKET_STORE_FULL_RES_TILE_BUFFER = 26, - VC4_PACKET_LOAD_FULL_RES_TILE_BUFFER = 27, - VC4_PACKET_STORE_TILE_BUFFER_GENERAL = 28, - VC4_PACKET_LOAD_TILE_BUFFER_GENERAL = 29, - - VC4_PACKET_GL_INDEXED_PRIMITIVE = 32, - VC4_PACKET_GL_ARRAY_PRIMITIVE = 33, - - VC4_PACKET_COMPRESSED_PRIMITIVE = 48, - VC4_PACKET_CLIPPED_COMPRESSED_PRIMITIVE = 49, - - VC4_PACKET_PRIMITIVE_LIST_FORMAT = 56, - - VC4_PACKET_GL_SHADER_STATE = 64, - VC4_PACKET_NV_SHADER_STATE = 65, - VC4_PACKET_VG_SHADER_STATE = 66, - - VC4_PACKET_CONFIGURATION_BITS = 96, - VC4_PACKET_FLAT_SHADE_FLAGS = 97, - VC4_PACKET_POINT_SIZE = 98, - VC4_PACKET_LINE_WIDTH = 99, - VC4_PACKET_RHT_X_BOUNDARY = 100, - VC4_PACKET_DEPTH_OFFSET = 101, - VC4_PACKET_CLIP_WINDOW = 102, - VC4_PACKET_VIEWPORT_OFFSET = 103, - VC4_PACKET_Z_CLIPPING = 104, - VC4_PACKET_CLIPPER_XY_SCALING = 105, - VC4_PACKET_CLIPPER_Z_SCALING = 106, - - VC4_PACKET_TILE_BINNING_MODE_CONFIG = 112, - VC4_PACKET_TILE_RENDERING_MODE_CONFIG = 113, - VC4_PACKET_CLEAR_COLORS = 114, - VC4_PACKET_TILE_COORDINATES = 115, - - /* Not an actual hardware packet -- this is what we use to put - * references to GEM bos in the command stream, since we need the u32 - * int the actual address packet in order to store the offset from the - * start of the BO. - */ - VC4_PACKET_GEM_HANDLES = 254, -} __attribute__ ((__packed__)); - -#define VC4_PACKET_HALT_SIZE 1 -#define VC4_PACKET_NOP_SIZE 1 -#define VC4_PACKET_FLUSH_SIZE 1 -#define VC4_PACKET_FLUSH_ALL_SIZE 1 -#define VC4_PACKET_START_TILE_BINNING_SIZE 1 -#define VC4_PACKET_INCREMENT_SEMAPHORE_SIZE 1 -#define VC4_PACKET_WAIT_ON_SEMAPHORE_SIZE 1 -#define VC4_PACKET_BRANCH_SIZE 5 -#define VC4_PACKET_BRANCH_TO_SUB_LIST_SIZE 5 -#define VC4_PACKET_RETURN_FROM_SUB_LIST_SIZE 1 -#define VC4_PACKET_STORE_MS_TILE_BUFFER_SIZE 1 -#define VC4_PACKET_STORE_MS_TILE_BUFFER_AND_EOF_SIZE 1 -#define VC4_PACKET_STORE_FULL_RES_TILE_BUFFER_SIZE 5 -#define VC4_PACKET_LOAD_FULL_RES_TILE_BUFFER_SIZE 5 -#define VC4_PACKET_STORE_TILE_BUFFER_GENERAL_SIZE 7 -#define VC4_PACKET_LOAD_TILE_BUFFER_GENERAL_SIZE 7 -#define VC4_PACKET_GL_INDEXED_PRIMITIVE_SIZE 14 -#define VC4_PACKET_GL_ARRAY_PRIMITIVE_SIZE 10 -#define VC4_PACKET_COMPRESSED_PRIMITIVE_SIZE 1 -#define VC4_PACKET_CLIPPED_COMPRESSED_PRIMITIVE_SIZE 1 -#define VC4_PACKET_PRIMITIVE_LIST_FORMAT_SIZE 2 -#define VC4_PACKET_GL_SHADER_STATE_SIZE 5 -#define VC4_PACKET_NV_SHADER_STATE_SIZE 5 -#define VC4_PACKET_VG_SHADER_STATE_SIZE 5 -#define VC4_PACKET_CONFIGURATION_BITS_SIZE 4 -#define VC4_PACKET_FLAT_SHADE_FLAGS_SIZE 5 -#define VC4_PACKET_POINT_SIZE_SIZE 5 -#define VC4_PACKET_LINE_WIDTH_SIZE 5 -#define VC4_PACKET_RHT_X_BOUNDARY_SIZE 3 -#define VC4_PACKET_DEPTH_OFFSET_SIZE 5 -#define VC4_PACKET_CLIP_WINDOW_SIZE 9 -#define VC4_PACKET_VIEWPORT_OFFSET_SIZE 5 -#define VC4_PACKET_Z_CLIPPING_SIZE 9 -#define VC4_PACKET_CLIPPER_XY_SCALING_SIZE 9 -#define VC4_PACKET_CLIPPER_Z_SCALING_SIZE 9 -#define VC4_PACKET_TILE_BINNING_MODE_CONFIG_SIZE 16 -#define VC4_PACKET_TILE_RENDERING_MODE_CONFIG_SIZE 11 -#define VC4_PACKET_CLEAR_COLORS_SIZE 14 -#define VC4_PACKET_TILE_COORDINATES_SIZE 3 -#define VC4_PACKET_GEM_HANDLES_SIZE 9 - -#define VC4_MASK(high, low) (((1 << ((high) - (low) + 1)) - 1) << (low)) -/* Using the GNU statement expression extension */ -#define VC4_SET_FIELD(value, field) \ - ({ \ - uint32_t fieldval = (value) << field ## _SHIFT; \ - assert((fieldval & ~ field ## _MASK) == 0); \ - fieldval & field ## _MASK; \ - }) - -#define VC4_GET_FIELD(word, field) (((word) & field ## _MASK) >> field ## _SHIFT) - -/** @{ - * Bits used by packets like VC4_PACKET_STORE_TILE_BUFFER_GENERAL and - * VC4_PACKET_TILE_RENDERING_MODE_CONFIG. -*/ -#define VC4_TILING_FORMAT_LINEAR 0 -#define VC4_TILING_FORMAT_T 1 -#define VC4_TILING_FORMAT_LT 2 -/** @} */ - -/** @{ - * - * low bits of VC4_PACKET_STORE_FULL_RES_TILE_BUFFER and - * VC4_PACKET_LOAD_FULL_RES_TILE_BUFFER. - */ -#define VC4_LOADSTORE_FULL_RES_EOF (1 << 3) -#define VC4_LOADSTORE_FULL_RES_DISABLE_CLEAR_ALL (1 << 2) -#define VC4_LOADSTORE_FULL_RES_DISABLE_ZS (1 << 1) -#define VC4_LOADSTORE_FULL_RES_DISABLE_COLOR (1 << 0) - -/** @{ - * - * byte 2 of VC4_PACKET_STORE_TILE_BUFFER_GENERAL and - * VC4_PACKET_LOAD_TILE_BUFFER_GENERAL (low bits of the address) - */ - -#define VC4_LOADSTORE_TILE_BUFFER_EOF (1 << 3) -#define VC4_LOADSTORE_TILE_BUFFER_DISABLE_FULL_VG_MASK (1 << 2) -#define VC4_LOADSTORE_TILE_BUFFER_DISABLE_FULL_ZS (1 << 1) -#define VC4_LOADSTORE_TILE_BUFFER_DISABLE_FULL_COLOR (1 << 0) - -/** @} */ - -/** @{ - * - * byte 0-1 of VC4_PACKET_STORE_TILE_BUFFER_GENERAL and - * VC4_PACKET_LOAD_TILE_BUFFER_GENERAL - */ -#define VC4_STORE_TILE_BUFFER_DISABLE_VG_MASK_CLEAR (1 << 15) -#define VC4_STORE_TILE_BUFFER_DISABLE_ZS_CLEAR (1 << 14) -#define VC4_STORE_TILE_BUFFER_DISABLE_COLOR_CLEAR (1 << 13) -#define VC4_STORE_TILE_BUFFER_DISABLE_SWAP (1 << 12) - -#define VC4_LOADSTORE_TILE_BUFFER_FORMAT_MASK VC4_MASK(9, 8) -#define VC4_LOADSTORE_TILE_BUFFER_FORMAT_SHIFT 8 -#define VC4_LOADSTORE_TILE_BUFFER_RGBA8888 0 -#define VC4_LOADSTORE_TILE_BUFFER_BGR565_DITHER 1 -#define VC4_LOADSTORE_TILE_BUFFER_BGR565 2 -/** @} */ - -/** @{ - * - * byte 0 of VC4_PACKET_STORE_TILE_BUFFER_GENERAL and - * VC4_PACKET_LOAD_TILE_BUFFER_GENERAL - */ -#define VC4_STORE_TILE_BUFFER_MODE_MASK VC4_MASK(7, 6) -#define VC4_STORE_TILE_BUFFER_MODE_SHIFT 6 -#define VC4_STORE_TILE_BUFFER_MODE_SAMPLE0 (0 << 6) -#define VC4_STORE_TILE_BUFFER_MODE_DECIMATE_X4 (1 << 6) -#define VC4_STORE_TILE_BUFFER_MODE_DECIMATE_X16 (2 << 6) - -/** The values of the field are VC4_TILING_FORMAT_* */ -#define VC4_LOADSTORE_TILE_BUFFER_TILING_MASK VC4_MASK(5, 4) -#define VC4_LOADSTORE_TILE_BUFFER_TILING_SHIFT 4 - -#define VC4_LOADSTORE_TILE_BUFFER_BUFFER_MASK VC4_MASK(2, 0) -#define VC4_LOADSTORE_TILE_BUFFER_BUFFER_SHIFT 0 -#define VC4_LOADSTORE_TILE_BUFFER_NONE 0 -#define VC4_LOADSTORE_TILE_BUFFER_COLOR 1 -#define VC4_LOADSTORE_TILE_BUFFER_ZS 2 -#define VC4_LOADSTORE_TILE_BUFFER_Z 3 -#define VC4_LOADSTORE_TILE_BUFFER_VG_MASK 4 -#define VC4_LOADSTORE_TILE_BUFFER_FULL 5 -/** @} */ - -#define VC4_INDEX_BUFFER_U8 (0 << 4) -#define VC4_INDEX_BUFFER_U16 (1 << 4) - -/* This flag is only present in NV shader state. */ -#define VC4_SHADER_FLAG_SHADED_CLIP_COORDS (1 << 3) -#define VC4_SHADER_FLAG_ENABLE_CLIPPING (1 << 2) -#define VC4_SHADER_FLAG_VS_POINT_SIZE (1 << 1) -#define VC4_SHADER_FLAG_FS_SINGLE_THREAD (1 << 0) - -/** @{ byte 2 of config bits. */ -#define VC4_CONFIG_BITS_EARLY_Z_UPDATE (1 << 1) -#define VC4_CONFIG_BITS_EARLY_Z (1 << 0) -/** @} */ - -/** @{ byte 1 of config bits. */ -#define VC4_CONFIG_BITS_Z_UPDATE (1 << 7) -/** same values in this 3-bit field as PIPE_FUNC_* */ -#define VC4_CONFIG_BITS_DEPTH_FUNC_SHIFT 4 -#define VC4_CONFIG_BITS_COVERAGE_READ_LEAVE (1 << 3) - -#define VC4_CONFIG_BITS_COVERAGE_UPDATE_NONZERO (0 << 1) -#define VC4_CONFIG_BITS_COVERAGE_UPDATE_ODD (1 << 1) -#define VC4_CONFIG_BITS_COVERAGE_UPDATE_OR (2 << 1) -#define VC4_CONFIG_BITS_COVERAGE_UPDATE_ZERO (3 << 1) - -#define VC4_CONFIG_BITS_COVERAGE_PIPE_SELECT (1 << 0) -/** @} */ - -/** @{ byte 0 of config bits. */ -#define VC4_CONFIG_BITS_RASTERIZER_OVERSAMPLE_NONE (0 << 6) -#define VC4_CONFIG_BITS_RASTERIZER_OVERSAMPLE_4X (1 << 6) -#define VC4_CONFIG_BITS_RASTERIZER_OVERSAMPLE_16X (2 << 6) -#define VC4_CONFIG_BITS_RASTERIZER_OVERSAMPLE_MASK (3 << 6) - -#define VC4_CONFIG_BITS_AA_POINTS_AND_LINES (1 << 4) -#define VC4_CONFIG_BITS_ENABLE_DEPTH_OFFSET (1 << 3) -#define VC4_CONFIG_BITS_CW_PRIMITIVES (1 << 2) -#define VC4_CONFIG_BITS_ENABLE_PRIM_BACK (1 << 1) -#define VC4_CONFIG_BITS_ENABLE_PRIM_FRONT (1 << 0) -/** @} */ - -/** @{ bits in the last u8 of VC4_PACKET_TILE_BINNING_MODE_CONFIG */ -#define VC4_BIN_CONFIG_DB_NON_MS (1 << 7) - -#define VC4_BIN_CONFIG_ALLOC_BLOCK_SIZE_MASK VC4_MASK(6, 5) -#define VC4_BIN_CONFIG_ALLOC_BLOCK_SIZE_SHIFT 5 -#define VC4_BIN_CONFIG_ALLOC_BLOCK_SIZE_32 0 -#define VC4_BIN_CONFIG_ALLOC_BLOCK_SIZE_64 1 -#define VC4_BIN_CONFIG_ALLOC_BLOCK_SIZE_128 2 -#define VC4_BIN_CONFIG_ALLOC_BLOCK_SIZE_256 3 - -#define VC4_BIN_CONFIG_ALLOC_INIT_BLOCK_SIZE_MASK VC4_MASK(4, 3) -#define VC4_BIN_CONFIG_ALLOC_INIT_BLOCK_SIZE_SHIFT 3 -#define VC4_BIN_CONFIG_ALLOC_INIT_BLOCK_SIZE_32 0 -#define VC4_BIN_CONFIG_ALLOC_INIT_BLOCK_SIZE_64 1 -#define VC4_BIN_CONFIG_ALLOC_INIT_BLOCK_SIZE_128 2 -#define VC4_BIN_CONFIG_ALLOC_INIT_BLOCK_SIZE_256 3 - -#define VC4_BIN_CONFIG_AUTO_INIT_TSDA (1 << 2) -#define VC4_BIN_CONFIG_TILE_BUFFER_64BIT (1 << 1) -#define VC4_BIN_CONFIG_MS_MODE_4X (1 << 0) -/** @} */ - -/** @{ bits in the last u16 of VC4_PACKET_TILE_RENDERING_MODE_CONFIG */ -#define VC4_RENDER_CONFIG_DB_NON_MS (1 << 12) -#define VC4_RENDER_CONFIG_EARLY_Z_COVERAGE_DISABLE (1 << 11) -#define VC4_RENDER_CONFIG_EARLY_Z_DIRECTION_G (1 << 10) -#define VC4_RENDER_CONFIG_COVERAGE_MODE (1 << 9) -#define VC4_RENDER_CONFIG_ENABLE_VG_MASK (1 << 8) - -/** The values of the field are VC4_TILING_FORMAT_* */ -#define VC4_RENDER_CONFIG_MEMORY_FORMAT_MASK VC4_MASK(7, 6) -#define VC4_RENDER_CONFIG_MEMORY_FORMAT_SHIFT 6 - -#define VC4_RENDER_CONFIG_DECIMATE_MODE_1X (0 << 4) -#define VC4_RENDER_CONFIG_DECIMATE_MODE_4X (1 << 4) -#define VC4_RENDER_CONFIG_DECIMATE_MODE_16X (2 << 4) -#define VC4_RENDER_CONFIG_DECIMATE_MODE_MASK (3 << 4) - -#define VC4_RENDER_CONFIG_FORMAT_MASK VC4_MASK(3, 2) -#define VC4_RENDER_CONFIG_FORMAT_SHIFT 2 -#define VC4_RENDER_CONFIG_FORMAT_BGR565_DITHERED 0 -#define VC4_RENDER_CONFIG_FORMAT_RGBA8888 1 -#define VC4_RENDER_CONFIG_FORMAT_BGR565 2 - -#define VC4_RENDER_CONFIG_TILE_BUFFER_64BIT (1 << 1) -#define VC4_RENDER_CONFIG_MS_MODE_4X (1 << 0) - -#define VC4_PRIMITIVE_LIST_FORMAT_16_INDEX (1 << 4) -#define VC4_PRIMITIVE_LIST_FORMAT_32_XY (3 << 4) -#define VC4_PRIMITIVE_LIST_FORMAT_TYPE_POINTS (0 << 0) -#define VC4_PRIMITIVE_LIST_FORMAT_TYPE_LINES (1 << 0) -#define VC4_PRIMITIVE_LIST_FORMAT_TYPE_TRIANGLES (2 << 0) -#define VC4_PRIMITIVE_LIST_FORMAT_TYPE_RHT (3 << 0) - -enum vc4_texture_data_type { - VC4_TEXTURE_TYPE_RGBA8888 = 0, - VC4_TEXTURE_TYPE_RGBX8888 = 1, - VC4_TEXTURE_TYPE_RGBA4444 = 2, - VC4_TEXTURE_TYPE_RGBA5551 = 3, - VC4_TEXTURE_TYPE_RGB565 = 4, - VC4_TEXTURE_TYPE_LUMINANCE = 5, - VC4_TEXTURE_TYPE_ALPHA = 6, - VC4_TEXTURE_TYPE_LUMALPHA = 7, - VC4_TEXTURE_TYPE_ETC1 = 8, - VC4_TEXTURE_TYPE_S16F = 9, - VC4_TEXTURE_TYPE_S8 = 10, - VC4_TEXTURE_TYPE_S16 = 11, - VC4_TEXTURE_TYPE_BW1 = 12, - VC4_TEXTURE_TYPE_A4 = 13, - VC4_TEXTURE_TYPE_A1 = 14, - VC4_TEXTURE_TYPE_RGBA64 = 15, - VC4_TEXTURE_TYPE_RGBA32R = 16, - VC4_TEXTURE_TYPE_YUV422R = 17, -}; - -#define VC4_TEX_P0_OFFSET_MASK VC4_MASK(31, 12) -#define VC4_TEX_P0_OFFSET_SHIFT 12 -#define VC4_TEX_P0_CSWIZ_MASK VC4_MASK(11, 10) -#define VC4_TEX_P0_CSWIZ_SHIFT 10 -#define VC4_TEX_P0_CMMODE_MASK VC4_MASK(9, 9) -#define VC4_TEX_P0_CMMODE_SHIFT 9 -#define VC4_TEX_P0_FLIPY_MASK VC4_MASK(8, 8) -#define VC4_TEX_P0_FLIPY_SHIFT 8 -#define VC4_TEX_P0_TYPE_MASK VC4_MASK(7, 4) -#define VC4_TEX_P0_TYPE_SHIFT 4 -#define VC4_TEX_P0_MIPLVLS_MASK VC4_MASK(3, 0) -#define VC4_TEX_P0_MIPLVLS_SHIFT 0 - -#define VC4_TEX_P1_TYPE4_MASK VC4_MASK(31, 31) -#define VC4_TEX_P1_TYPE4_SHIFT 31 -#define VC4_TEX_P1_HEIGHT_MASK VC4_MASK(30, 20) -#define VC4_TEX_P1_HEIGHT_SHIFT 20 -#define VC4_TEX_P1_ETCFLIP_MASK VC4_MASK(19, 19) -#define VC4_TEX_P1_ETCFLIP_SHIFT 19 -#define VC4_TEX_P1_WIDTH_MASK VC4_MASK(18, 8) -#define VC4_TEX_P1_WIDTH_SHIFT 8 - -#define VC4_TEX_P1_MAGFILT_MASK VC4_MASK(7, 7) -#define VC4_TEX_P1_MAGFILT_SHIFT 7 -# define VC4_TEX_P1_MAGFILT_LINEAR 0 -# define VC4_TEX_P1_MAGFILT_NEAREST 1 - -#define VC4_TEX_P1_MINFILT_MASK VC4_MASK(6, 4) -#define VC4_TEX_P1_MINFILT_SHIFT 4 -# define VC4_TEX_P1_MINFILT_LINEAR 0 -# define VC4_TEX_P1_MINFILT_NEAREST 1 -# define VC4_TEX_P1_MINFILT_NEAR_MIP_NEAR 2 -# define VC4_TEX_P1_MINFILT_NEAR_MIP_LIN 3 -# define VC4_TEX_P1_MINFILT_LIN_MIP_NEAR 4 -# define VC4_TEX_P1_MINFILT_LIN_MIP_LIN 5 - -#define VC4_TEX_P1_WRAP_T_MASK VC4_MASK(3, 2) -#define VC4_TEX_P1_WRAP_T_SHIFT 2 -#define VC4_TEX_P1_WRAP_S_MASK VC4_MASK(1, 0) -#define VC4_TEX_P1_WRAP_S_SHIFT 0 -# define VC4_TEX_P1_WRAP_REPEAT 0 -# define VC4_TEX_P1_WRAP_CLAMP 1 -# define VC4_TEX_P1_WRAP_MIRROR 2 -# define VC4_TEX_P1_WRAP_BORDER 3 - -#define VC4_TEX_P2_PTYPE_MASK VC4_MASK(31, 30) -#define VC4_TEX_P2_PTYPE_SHIFT 30 -# define VC4_TEX_P2_PTYPE_IGNORED 0 -# define VC4_TEX_P2_PTYPE_CUBE_MAP_STRIDE 1 -# define VC4_TEX_P2_PTYPE_CHILD_IMAGE_DIMENSIONS 2 -# define VC4_TEX_P2_PTYPE_CHILD_IMAGE_OFFSETS 3 - -/* VC4_TEX_P2_PTYPE_CUBE_MAP_STRIDE bits */ -#define VC4_TEX_P2_CMST_MASK VC4_MASK(29, 12) -#define VC4_TEX_P2_CMST_SHIFT 12 -#define VC4_TEX_P2_BSLOD_MASK VC4_MASK(0, 0) -#define VC4_TEX_P2_BSLOD_SHIFT 0 - -/* VC4_TEX_P2_PTYPE_CHILD_IMAGE_DIMENSIONS */ -#define VC4_TEX_P2_CHEIGHT_MASK VC4_MASK(22, 12) -#define VC4_TEX_P2_CHEIGHT_SHIFT 12 -#define VC4_TEX_P2_CWIDTH_MASK VC4_MASK(10, 0) -#define VC4_TEX_P2_CWIDTH_SHIFT 0 - -/* VC4_TEX_P2_PTYPE_CHILD_IMAGE_OFFSETS */ -#define VC4_TEX_P2_CYOFF_MASK VC4_MASK(22, 12) -#define VC4_TEX_P2_CYOFF_SHIFT 12 -#define VC4_TEX_P2_CXOFF_MASK VC4_MASK(10, 0) -#define VC4_TEX_P2_CXOFF_SHIFT 0 - -#endif /* VC4_PACKET_H */ diff --git a/prebuilts/aarch64/include/libdrm/vc4_qpu_defines.h b/prebuilts/aarch64/include/libdrm/vc4_qpu_defines.h deleted file mode 100644 index 26fcf50..0000000 --- a/prebuilts/aarch64/include/libdrm/vc4_qpu_defines.h +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright © 2014 Broadcom - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef VC4_QPU_DEFINES_H -#define VC4_QPU_DEFINES_H - -enum qpu_op_add { - QPU_A_NOP, - QPU_A_FADD, - QPU_A_FSUB, - QPU_A_FMIN, - QPU_A_FMAX, - QPU_A_FMINABS, - QPU_A_FMAXABS, - QPU_A_FTOI, - QPU_A_ITOF, - QPU_A_ADD = 12, - QPU_A_SUB, - QPU_A_SHR, - QPU_A_ASR, - QPU_A_ROR, - QPU_A_SHL, - QPU_A_MIN, - QPU_A_MAX, - QPU_A_AND, - QPU_A_OR, - QPU_A_XOR, - QPU_A_NOT, - QPU_A_CLZ, - QPU_A_V8ADDS = 30, - QPU_A_V8SUBS = 31, -}; - -enum qpu_op_mul { - QPU_M_NOP, - QPU_M_FMUL, - QPU_M_MUL24, - QPU_M_V8MULD, - QPU_M_V8MIN, - QPU_M_V8MAX, - QPU_M_V8ADDS, - QPU_M_V8SUBS, -}; - -enum qpu_raddr { - QPU_R_FRAG_PAYLOAD_ZW = 15, /* W for A file, Z for B file */ - /* 0-31 are the plain regfile a or b fields */ - QPU_R_UNIF = 32, - QPU_R_VARY = 35, - QPU_R_ELEM_QPU = 38, - QPU_R_NOP, - QPU_R_XY_PIXEL_COORD = 41, - QPU_R_MS_REV_FLAGS = 42, - QPU_R_VPM = 48, - QPU_R_VPM_LD_BUSY, - QPU_R_VPM_LD_WAIT, - QPU_R_MUTEX_ACQUIRE, -}; - -enum qpu_waddr { - /* 0-31 are the plain regfile a or b fields */ - QPU_W_ACC0 = 32, /* aka r0 */ - QPU_W_ACC1, - QPU_W_ACC2, - QPU_W_ACC3, - QPU_W_TMU_NOSWAP, - QPU_W_ACC5, - QPU_W_HOST_INT, - QPU_W_NOP, - QPU_W_UNIFORMS_ADDRESS, - QPU_W_QUAD_XY, /* X for regfile a, Y for regfile b */ - QPU_W_MS_FLAGS = 42, - QPU_W_REV_FLAG = 42, - QPU_W_TLB_STENCIL_SETUP = 43, - QPU_W_TLB_Z, - QPU_W_TLB_COLOR_MS, - QPU_W_TLB_COLOR_ALL, - QPU_W_TLB_ALPHA_MASK, - QPU_W_VPM, - QPU_W_VPMVCD_SETUP, /* LD for regfile a, ST for regfile b */ - QPU_W_VPM_ADDR, /* LD for regfile a, ST for regfile b */ - QPU_W_MUTEX_RELEASE, - QPU_W_SFU_RECIP, - QPU_W_SFU_RECIPSQRT, - QPU_W_SFU_EXP, - QPU_W_SFU_LOG, - QPU_W_TMU0_S, - QPU_W_TMU0_T, - QPU_W_TMU0_R, - QPU_W_TMU0_B, - QPU_W_TMU1_S, - QPU_W_TMU1_T, - QPU_W_TMU1_R, - QPU_W_TMU1_B, -}; - -enum qpu_sig_bits { - QPU_SIG_SW_BREAKPOINT, - QPU_SIG_NONE, - QPU_SIG_THREAD_SWITCH, - QPU_SIG_PROG_END, - QPU_SIG_WAIT_FOR_SCOREBOARD, - QPU_SIG_SCOREBOARD_UNLOCK, - QPU_SIG_LAST_THREAD_SWITCH, - QPU_SIG_COVERAGE_LOAD, - QPU_SIG_COLOR_LOAD, - QPU_SIG_COLOR_LOAD_END, - QPU_SIG_LOAD_TMU0, - QPU_SIG_LOAD_TMU1, - QPU_SIG_ALPHA_MASK_LOAD, - QPU_SIG_SMALL_IMM, - QPU_SIG_LOAD_IMM, - QPU_SIG_BRANCH -}; - -enum qpu_mux { - /* hardware mux values */ - QPU_MUX_R0, - QPU_MUX_R1, - QPU_MUX_R2, - QPU_MUX_R3, - QPU_MUX_R4, - QPU_MUX_R5, - QPU_MUX_A, - QPU_MUX_B, - - /** - * Non-hardware mux value, stores a small immediate field to be - * programmed into raddr_b in the qpu_reg.index. - */ - QPU_MUX_SMALL_IMM, -}; - -enum qpu_cond { - QPU_COND_NEVER, - QPU_COND_ALWAYS, - QPU_COND_ZS, - QPU_COND_ZC, - QPU_COND_NS, - QPU_COND_NC, - QPU_COND_CS, - QPU_COND_CC, -}; - -enum qpu_pack_mul { - QPU_PACK_MUL_NOP, - QPU_PACK_MUL_8888 = 3, /* replicated to each 8 bits of the 32-bit dst. */ - QPU_PACK_MUL_8A, - QPU_PACK_MUL_8B, - QPU_PACK_MUL_8C, - QPU_PACK_MUL_8D, -}; - -enum qpu_pack_a { - QPU_PACK_A_NOP, - /* convert to 16 bit float if float input, or to int16. */ - QPU_PACK_A_16A, - QPU_PACK_A_16B, - /* replicated to each 8 bits of the 32-bit dst. */ - QPU_PACK_A_8888, - /* Convert to 8-bit unsigned int. */ - QPU_PACK_A_8A, - QPU_PACK_A_8B, - QPU_PACK_A_8C, - QPU_PACK_A_8D, - - /* Saturating variants of the previous instructions. */ - QPU_PACK_A_32_SAT, /* int-only */ - QPU_PACK_A_16A_SAT, /* int or float */ - QPU_PACK_A_16B_SAT, - QPU_PACK_A_8888_SAT, - QPU_PACK_A_8A_SAT, - QPU_PACK_A_8B_SAT, - QPU_PACK_A_8C_SAT, - QPU_PACK_A_8D_SAT, -}; - -enum qpu_unpack { - QPU_UNPACK_NOP, - QPU_UNPACK_16A, - QPU_UNPACK_16B, - QPU_UNPACK_8D_REP, - QPU_UNPACK_8A, - QPU_UNPACK_8B, - QPU_UNPACK_8C, - QPU_UNPACK_8D, -}; - -#define QPU_MASK(high, low) ((((uint64_t)1<<((high)-(low)+1))-1)<<(low)) -/* Using the GNU statement expression extension */ -#define QPU_SET_FIELD(value, field) \ - ({ \ - uint64_t fieldval = (uint64_t)(value) << field ## _SHIFT; \ - assert((fieldval & ~ field ## _MASK) == 0); \ - fieldval & field ## _MASK; \ - }) - -#define QPU_GET_FIELD(word, field) ((uint32_t)(((word) & field ## _MASK) >> field ## _SHIFT)) - -#define QPU_UPDATE_FIELD(inst, value, field) \ - (((inst) & ~(field ## _MASK)) | QPU_SET_FIELD(value, field)) - -#define QPU_SIG_SHIFT 60 -#define QPU_SIG_MASK QPU_MASK(63, 60) - -#define QPU_UNPACK_SHIFT 57 -#define QPU_UNPACK_MASK QPU_MASK(59, 57) - -/** - * If set, the pack field means PACK_MUL or R4 packing, instead of normal - * regfile a packing. - */ -#define QPU_PM ((uint64_t)1 << 56) - -#define QPU_PACK_SHIFT 52 -#define QPU_PACK_MASK QPU_MASK(55, 52) - -#define QPU_COND_ADD_SHIFT 49 -#define QPU_COND_ADD_MASK QPU_MASK(51, 49) -#define QPU_COND_MUL_SHIFT 46 -#define QPU_COND_MUL_MASK QPU_MASK(48, 46) - -#define QPU_SF ((uint64_t)1 << 45) - -#define QPU_WADDR_ADD_SHIFT 38 -#define QPU_WADDR_ADD_MASK QPU_MASK(43, 38) -#define QPU_WADDR_MUL_SHIFT 32 -#define QPU_WADDR_MUL_MASK QPU_MASK(37, 32) - -#define QPU_OP_MUL_SHIFT 29 -#define QPU_OP_MUL_MASK QPU_MASK(31, 29) - -#define QPU_RADDR_A_SHIFT 18 -#define QPU_RADDR_A_MASK QPU_MASK(23, 18) -#define QPU_RADDR_B_SHIFT 12 -#define QPU_RADDR_B_MASK QPU_MASK(17, 12) -#define QPU_SMALL_IMM_SHIFT 12 -#define QPU_SMALL_IMM_MASK QPU_MASK(17, 12) - -#define QPU_ADD_A_SHIFT 9 -#define QPU_ADD_A_MASK QPU_MASK(11, 9) -#define QPU_ADD_B_SHIFT 6 -#define QPU_ADD_B_MASK QPU_MASK(8, 6) -#define QPU_MUL_A_SHIFT 3 -#define QPU_MUL_A_MASK QPU_MASK(5, 3) -#define QPU_MUL_B_SHIFT 0 -#define QPU_MUL_B_MASK QPU_MASK(2, 0) - -#define QPU_WS ((uint64_t)1 << 44) - -#define QPU_OP_ADD_SHIFT 24 -#define QPU_OP_ADD_MASK QPU_MASK(28, 24) - -#endif /* VC4_QPU_DEFINES_H */ diff --git a/prebuilts/aarch64/include/libdrm/via_drm.h b/prebuilts/aarch64/include/libdrm/via_drm.h deleted file mode 100644 index 8b69e81..0000000 --- a/prebuilts/aarch64/include/libdrm/via_drm.h +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. - * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sub license, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ -#ifndef _VIA_DRM_H_ -#define _VIA_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: These defines must be the same as what the Xserver uses. - * if you change them, you must change the defines in the Xserver. - */ - -#ifndef _VIA_DEFINES_ -#define _VIA_DEFINES_ - -#include "via_drmclient.h" - -#define VIA_NR_SAREA_CLIPRECTS 8 -#define VIA_NR_XVMC_PORTS 10 -#define VIA_NR_XVMC_LOCKS 5 -#define VIA_MAX_CACHELINE_SIZE 64 -#define XVMCLOCKPTR(saPriv,lockNo) \ - ((__volatile__ struct drm_hw_lock *)(((((unsigned long) (saPriv)->XvMCLockArea) + \ - (VIA_MAX_CACHELINE_SIZE - 1)) & \ - ~(VIA_MAX_CACHELINE_SIZE - 1)) + \ - VIA_MAX_CACHELINE_SIZE*(lockNo))) - -/* Each region is a minimum of 64k, and there are at most 64 of them. - */ -#define VIA_NR_TEX_REGIONS 64 -#define VIA_LOG_MIN_TEX_REGION_SIZE 16 -#endif - -#define VIA_UPLOAD_TEX0IMAGE 0x1 /* handled clientside */ -#define VIA_UPLOAD_TEX1IMAGE 0x2 /* handled clientside */ -#define VIA_UPLOAD_CTX 0x4 -#define VIA_UPLOAD_BUFFERS 0x8 -#define VIA_UPLOAD_TEX0 0x10 -#define VIA_UPLOAD_TEX1 0x20 -#define VIA_UPLOAD_CLIPRECTS 0x40 -#define VIA_UPLOAD_ALL 0xff - -/* VIA specific ioctls */ -#define DRM_VIA_ALLOCMEM 0x00 -#define DRM_VIA_FREEMEM 0x01 -#define DRM_VIA_AGP_INIT 0x02 -#define DRM_VIA_FB_INIT 0x03 -#define DRM_VIA_MAP_INIT 0x04 -#define DRM_VIA_DEC_FUTEX 0x05 -#define NOT_USED -#define DRM_VIA_DMA_INIT 0x07 -#define DRM_VIA_CMDBUFFER 0x08 -#define DRM_VIA_FLUSH 0x09 -#define DRM_VIA_PCICMD 0x0a -#define DRM_VIA_CMDBUF_SIZE 0x0b -#define NOT_USED -#define DRM_VIA_WAIT_IRQ 0x0d -#define DRM_VIA_DMA_BLIT 0x0e -#define DRM_VIA_BLIT_SYNC 0x0f - -#define DRM_IOCTL_VIA_ALLOCMEM DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_ALLOCMEM, drm_via_mem_t) -#define DRM_IOCTL_VIA_FREEMEM DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_FREEMEM, drm_via_mem_t) -#define DRM_IOCTL_VIA_AGP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_AGP_INIT, drm_via_agp_t) -#define DRM_IOCTL_VIA_FB_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_FB_INIT, drm_via_fb_t) -#define DRM_IOCTL_VIA_MAP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_MAP_INIT, drm_via_init_t) -#define DRM_IOCTL_VIA_DEC_FUTEX DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_DEC_FUTEX, drm_via_futex_t) -#define DRM_IOCTL_VIA_DMA_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_DMA_INIT, drm_via_dma_init_t) -#define DRM_IOCTL_VIA_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_CMDBUFFER, drm_via_cmdbuffer_t) -#define DRM_IOCTL_VIA_FLUSH DRM_IO( DRM_COMMAND_BASE + DRM_VIA_FLUSH) -#define DRM_IOCTL_VIA_PCICMD DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_PCICMD, drm_via_cmdbuffer_t) -#define DRM_IOCTL_VIA_CMDBUF_SIZE DRM_IOWR( DRM_COMMAND_BASE + DRM_VIA_CMDBUF_SIZE, \ - drm_via_cmdbuf_size_t) -#define DRM_IOCTL_VIA_WAIT_IRQ DRM_IOWR( DRM_COMMAND_BASE + DRM_VIA_WAIT_IRQ, drm_via_irqwait_t) -#define DRM_IOCTL_VIA_DMA_BLIT DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_DMA_BLIT, drm_via_dmablit_t) -#define DRM_IOCTL_VIA_BLIT_SYNC DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_BLIT_SYNC, drm_via_blitsync_t) - -/* Indices into buf.Setup where various bits of state are mirrored per - * context and per buffer. These can be fired at the card as a unit, - * or in a piecewise fashion as required. - */ - -#define VIA_TEX_SETUP_SIZE 8 - -/* Flags for clear ioctl - */ -#define VIA_FRONT 0x1 -#define VIA_BACK 0x2 -#define VIA_DEPTH 0x4 -#define VIA_STENCIL 0x8 -#define VIA_MEM_VIDEO 0 /* matches drm constant */ -#define VIA_MEM_AGP 1 /* matches drm constant */ -#define VIA_MEM_SYSTEM 2 -#define VIA_MEM_MIXED 3 -#define VIA_MEM_UNKNOWN 4 - -typedef struct { - __u32 offset; - __u32 size; -} drm_via_agp_t; - -typedef struct { - __u32 offset; - __u32 size; -} drm_via_fb_t; - -typedef struct { - __u32 context; - __u32 type; - __u32 size; - unsigned long index; - unsigned long offset; -} drm_via_mem_t; - -typedef struct _drm_via_init { - enum { - VIA_INIT_MAP = 0x01, - VIA_CLEANUP_MAP = 0x02 - } func; - - unsigned long sarea_priv_offset; - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long agpAddr; -} drm_via_init_t; - -typedef struct _drm_via_futex { - enum { - VIA_FUTEX_WAIT = 0x00, - VIA_FUTEX_WAKE = 0X01 - } func; - __u32 ms; - __u32 lock; - __u32 val; -} drm_via_futex_t; - -typedef struct _drm_via_dma_init { - enum { - VIA_INIT_DMA = 0x01, - VIA_CLEANUP_DMA = 0x02, - VIA_DMA_INITIALIZED = 0x03 - } func; - - unsigned long offset; - unsigned long size; - unsigned long reg_pause_addr; -} drm_via_dma_init_t; - -typedef struct _drm_via_cmdbuffer { - char *buf; - unsigned long size; -} drm_via_cmdbuffer_t; - -/* Warning: If you change the SAREA structure you must change the Xserver - * structure as well */ - -typedef struct _drm_via_tex_region { - unsigned char next, prev; /* indices to form a circular LRU */ - unsigned char inUse; /* owned by a client, or free? */ - int age; /* tracked by clients to update local LRU's */ -} drm_via_tex_region_t; - -typedef struct _drm_via_sarea { - unsigned int dirty; - unsigned int nbox; - struct drm_clip_rect boxes[VIA_NR_SAREA_CLIPRECTS]; - drm_via_tex_region_t texList[VIA_NR_TEX_REGIONS + 1]; - int texAge; /* last time texture was uploaded */ - int ctxOwner; /* last context to upload state */ - int vertexPrim; - - /* - * Below is for XvMC. - * We want the lock integers alone on, and aligned to, a cache line. - * Therefore this somewhat strange construct. - */ - - char XvMCLockArea[VIA_MAX_CACHELINE_SIZE * (VIA_NR_XVMC_LOCKS + 1)]; - - unsigned int XvMCDisplaying[VIA_NR_XVMC_PORTS]; - unsigned int XvMCSubPicOn[VIA_NR_XVMC_PORTS]; - unsigned int XvMCCtxNoGrabbed; /* Last context to hold decoder */ - - /* Used by the 3d driver only at this point, for pageflipping: - */ - unsigned int pfCurrentOffset; -} drm_via_sarea_t; - -typedef struct _drm_via_cmdbuf_size { - enum { - VIA_CMDBUF_SPACE = 0x01, - VIA_CMDBUF_LAG = 0x02 - } func; - int wait; - __u32 size; -} drm_via_cmdbuf_size_t; - -typedef enum { - VIA_IRQ_ABSOLUTE = 0x0, - VIA_IRQ_RELATIVE = 0x1, - VIA_IRQ_SIGNAL = 0x10000000, - VIA_IRQ_FORCE_SEQUENCE = 0x20000000 -} via_irq_seq_type_t; - -#define VIA_IRQ_FLAGS_MASK 0xF0000000 - -enum drm_via_irqs { - drm_via_irq_hqv0 = 0, - drm_via_irq_hqv1, - drm_via_irq_dma0_dd, - drm_via_irq_dma0_td, - drm_via_irq_dma1_dd, - drm_via_irq_dma1_td, - drm_via_irq_num -}; - -struct drm_via_wait_irq_request { - unsigned irq; - via_irq_seq_type_t type; - __u32 sequence; - __u32 signal; -}; - -typedef union drm_via_irqwait { - struct drm_via_wait_irq_request request; - struct drm_wait_vblank_reply reply; -} drm_via_irqwait_t; - -typedef struct drm_via_blitsync { - __u32 sync_handle; - unsigned engine; -} drm_via_blitsync_t; - -/* - * Below,"flags" is currently unused but will be used for possible future - * extensions like kernel space bounce buffers for bad alignments and - * blit engine busy-wait polling for better latency in the absence of - * interrupts. - */ - -typedef struct drm_via_dmablit { - __u32 num_lines; - __u32 line_length; - - __u32 fb_addr; - __u32 fb_stride; - - unsigned char *mem_addr; - __u32 mem_stride; - - __u32 flags; - int to_fb; - - drm_via_blitsync_t sync; -} drm_via_dmablit_t; - -#if defined(__cplusplus) -} -#endif - -#endif /* _VIA_DRM_H_ */ diff --git a/prebuilts/aarch64/include/libdrm/virtgpu_drm.h b/prebuilts/aarch64/include/libdrm/virtgpu_drm.h deleted file mode 100644 index f06a789..0000000 --- a/prebuilts/aarch64/include/libdrm/virtgpu_drm.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright 2013 Red Hat - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef VIRTGPU_DRM_H -#define VIRTGPU_DRM_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints. - * - * Do not use pointers, use __u64 instead for 32 bit / 64 bit user/kernel - * compatibility Keep fields aligned to their size - */ - -#define DRM_VIRTGPU_MAP 0x01 -#define DRM_VIRTGPU_EXECBUFFER 0x02 -#define DRM_VIRTGPU_GETPARAM 0x03 -#define DRM_VIRTGPU_RESOURCE_CREATE 0x04 -#define DRM_VIRTGPU_RESOURCE_INFO 0x05 -#define DRM_VIRTGPU_TRANSFER_FROM_HOST 0x06 -#define DRM_VIRTGPU_TRANSFER_TO_HOST 0x07 -#define DRM_VIRTGPU_WAIT 0x08 -#define DRM_VIRTGPU_GET_CAPS 0x09 - -#define VIRTGPU_EXECBUF_FENCE_FD_IN 0x01 -#define VIRTGPU_EXECBUF_FENCE_FD_OUT 0x02 -#define VIRTGPU_EXECBUF_FLAGS (\ - VIRTGPU_EXECBUF_FENCE_FD_IN |\ - VIRTGPU_EXECBUF_FENCE_FD_OUT |\ - 0) - -struct drm_virtgpu_map { - __u64 offset; /* use for mmap system call */ - __u32 handle; - __u32 pad; -}; - -struct drm_virtgpu_execbuffer { - __u32 flags; - __u32 size; - __u64 command; /* void* */ - __u64 bo_handles; - __u32 num_bo_handles; - __s32 fence_fd; /* in/out fence fd (see VIRTGPU_EXECBUF_FENCE_FD_IN/OUT) */ -}; - -#define VIRTGPU_PARAM_3D_FEATURES 1 /* do we have 3D features in the hw */ -#define VIRTGPU_PARAM_CAPSET_QUERY_FIX 2 /* do we have the capset fix */ - -struct drm_virtgpu_getparam { - __u64 param; - __u64 value; -}; - -/* NO_BO flags? NO resource flag? */ -/* resource flag for y_0_top */ -struct drm_virtgpu_resource_create { - __u32 target; - __u32 format; - __u32 bind; - __u32 width; - __u32 height; - __u32 depth; - __u32 array_size; - __u32 last_level; - __u32 nr_samples; - __u32 flags; - __u32 bo_handle; /* if this is set - recreate a new resource attached to this bo ? */ - __u32 res_handle; /* returned by kernel */ - __u32 size; /* validate transfer in the host */ - __u32 stride; /* validate transfer in the host */ -}; - -struct drm_virtgpu_resource_info { - __u32 bo_handle; - __u32 res_handle; - __u32 size; - __u32 stride; -}; - -struct drm_virtgpu_3d_box { - __u32 x; - __u32 y; - __u32 z; - __u32 w; - __u32 h; - __u32 d; -}; - -struct drm_virtgpu_3d_transfer_to_host { - __u32 bo_handle; - struct drm_virtgpu_3d_box box; - __u32 level; - __u32 offset; -}; - -struct drm_virtgpu_3d_transfer_from_host { - __u32 bo_handle; - struct drm_virtgpu_3d_box box; - __u32 level; - __u32 offset; -}; - -#define VIRTGPU_WAIT_NOWAIT 1 /* like it */ -struct drm_virtgpu_3d_wait { - __u32 handle; /* 0 is an invalid handle */ - __u32 flags; -}; - -struct drm_virtgpu_get_caps { - __u32 cap_set_id; - __u32 cap_set_ver; - __u64 addr; - __u32 size; - __u32 pad; -}; - -#define DRM_IOCTL_VIRTGPU_MAP \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_MAP, struct drm_virtgpu_map) - -#define DRM_IOCTL_VIRTGPU_EXECBUFFER \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_EXECBUFFER,\ - struct drm_virtgpu_execbuffer) - -#define DRM_IOCTL_VIRTGPU_GETPARAM \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GETPARAM,\ - struct drm_virtgpu_getparam) - -#define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE, \ - struct drm_virtgpu_resource_create) - -#define DRM_IOCTL_VIRTGPU_RESOURCE_INFO \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_INFO, \ - struct drm_virtgpu_resource_info) - -#define DRM_IOCTL_VIRTGPU_TRANSFER_FROM_HOST \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_TRANSFER_FROM_HOST, \ - struct drm_virtgpu_3d_transfer_from_host) - -#define DRM_IOCTL_VIRTGPU_TRANSFER_TO_HOST \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_TRANSFER_TO_HOST, \ - struct drm_virtgpu_3d_transfer_to_host) - -#define DRM_IOCTL_VIRTGPU_WAIT \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_WAIT, \ - struct drm_virtgpu_3d_wait) - -#define DRM_IOCTL_VIRTGPU_GET_CAPS \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GET_CAPS, \ - struct drm_virtgpu_get_caps) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/libdrm/vmwgfx_drm.h b/prebuilts/aarch64/include/libdrm/vmwgfx_drm.h deleted file mode 100644 index 2b8d47e..0000000 --- a/prebuilts/aarch64/include/libdrm/vmwgfx_drm.h +++ /dev/null @@ -1,1128 +0,0 @@ -/************************************************************************** - * - * Copyright © 2009-2015 VMware, Inc., Palo Alto, CA., USA - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **************************************************************************/ - -#ifndef __VMWGFX_DRM_H__ -#define __VMWGFX_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_VMW_MAX_SURFACE_FACES 6 -#define DRM_VMW_MAX_MIP_LEVELS 24 - - -#define DRM_VMW_GET_PARAM 0 -#define DRM_VMW_ALLOC_DMABUF 1 -#define DRM_VMW_UNREF_DMABUF 2 -#define DRM_VMW_HANDLE_CLOSE 2 -#define DRM_VMW_CURSOR_BYPASS 3 -/* guarded by DRM_VMW_PARAM_NUM_STREAMS != 0*/ -#define DRM_VMW_CONTROL_STREAM 4 -#define DRM_VMW_CLAIM_STREAM 5 -#define DRM_VMW_UNREF_STREAM 6 -/* guarded by DRM_VMW_PARAM_3D == 1 */ -#define DRM_VMW_CREATE_CONTEXT 7 -#define DRM_VMW_UNREF_CONTEXT 8 -#define DRM_VMW_CREATE_SURFACE 9 -#define DRM_VMW_UNREF_SURFACE 10 -#define DRM_VMW_REF_SURFACE 11 -#define DRM_VMW_EXECBUF 12 -#define DRM_VMW_GET_3D_CAP 13 -#define DRM_VMW_FENCE_WAIT 14 -#define DRM_VMW_FENCE_SIGNALED 15 -#define DRM_VMW_FENCE_UNREF 16 -#define DRM_VMW_FENCE_EVENT 17 -#define DRM_VMW_PRESENT 18 -#define DRM_VMW_PRESENT_READBACK 19 -#define DRM_VMW_UPDATE_LAYOUT 20 -#define DRM_VMW_CREATE_SHADER 21 -#define DRM_VMW_UNREF_SHADER 22 -#define DRM_VMW_GB_SURFACE_CREATE 23 -#define DRM_VMW_GB_SURFACE_REF 24 -#define DRM_VMW_SYNCCPU 25 -#define DRM_VMW_CREATE_EXTENDED_CONTEXT 26 - -/*************************************************************************/ -/** - * DRM_VMW_GET_PARAM - get device information. - * - * DRM_VMW_PARAM_FIFO_OFFSET: - * Offset to use to map the first page of the FIFO read-only. - * The fifo is mapped using the mmap() system call on the drm device. - * - * DRM_VMW_PARAM_OVERLAY_IOCTL: - * Does the driver support the overlay ioctl. - */ - -#define DRM_VMW_PARAM_NUM_STREAMS 0 -#define DRM_VMW_PARAM_NUM_FREE_STREAMS 1 -#define DRM_VMW_PARAM_3D 2 -#define DRM_VMW_PARAM_HW_CAPS 3 -#define DRM_VMW_PARAM_FIFO_CAPS 4 -#define DRM_VMW_PARAM_MAX_FB_SIZE 5 -#define DRM_VMW_PARAM_FIFO_HW_VERSION 6 -#define DRM_VMW_PARAM_MAX_SURF_MEMORY 7 -#define DRM_VMW_PARAM_3D_CAPS_SIZE 8 -#define DRM_VMW_PARAM_MAX_MOB_MEMORY 9 -#define DRM_VMW_PARAM_MAX_MOB_SIZE 10 -#define DRM_VMW_PARAM_SCREEN_TARGET 11 -#define DRM_VMW_PARAM_DX 12 - -/** - * enum drm_vmw_handle_type - handle type for ref ioctls - * - */ -enum drm_vmw_handle_type { - DRM_VMW_HANDLE_LEGACY = 0, - DRM_VMW_HANDLE_PRIME = 1 -}; - -/** - * struct drm_vmw_getparam_arg - * - * @value: Returned value. //Out - * @param: Parameter to query. //In. - * - * Argument to the DRM_VMW_GET_PARAM Ioctl. - */ - -struct drm_vmw_getparam_arg { - __u64 value; - __u32 param; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_CONTEXT - Create a host context. - * - * Allocates a device unique context id, and queues a create context command - * for the host. Does not wait for host completion. - */ - -/** - * struct drm_vmw_context_arg - * - * @cid: Device unique context ID. - * - * Output argument to the DRM_VMW_CREATE_CONTEXT Ioctl. - * Input argument to the DRM_VMW_UNREF_CONTEXT Ioctl. - */ - -struct drm_vmw_context_arg { - __s32 cid; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_CONTEXT - Create a host context. - * - * Frees a global context id, and queues a destroy host command for the host. - * Does not wait for host completion. The context ID can be used directly - * in the command stream and shows up as the same context ID on the host. - */ - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_SURFACE - Create a host suface. - * - * Allocates a device unique surface id, and queues a create surface command - * for the host. Does not wait for host completion. The surface ID can be - * used directly in the command stream and shows up as the same surface - * ID on the host. - */ - -/** - * struct drm_wmv_surface_create_req - * - * @flags: Surface flags as understood by the host. - * @format: Surface format as understood by the host. - * @mip_levels: Number of mip levels for each face. - * An unused face should have 0 encoded. - * @size_addr: Address of a user-space array of sruct drm_vmw_size - * cast to an __u64 for 32-64 bit compatibility. - * The size of the array should equal the total number of mipmap levels. - * @shareable: Boolean whether other clients (as identified by file descriptors) - * may reference this surface. - * @scanout: Boolean whether the surface is intended to be used as a - * scanout. - * - * Input data to the DRM_VMW_CREATE_SURFACE Ioctl. - * Output data from the DRM_VMW_REF_SURFACE Ioctl. - */ - -struct drm_vmw_surface_create_req { - __u32 flags; - __u32 format; - __u32 mip_levels[DRM_VMW_MAX_SURFACE_FACES]; - __u64 size_addr; - __s32 shareable; - __s32 scanout; -}; - -/** - * struct drm_wmv_surface_arg - * - * @sid: Surface id of created surface or surface to destroy or reference. - * @handle_type: Handle type for DRM_VMW_REF_SURFACE Ioctl. - * - * Output data from the DRM_VMW_CREATE_SURFACE Ioctl. - * Input argument to the DRM_VMW_UNREF_SURFACE Ioctl. - * Input argument to the DRM_VMW_REF_SURFACE Ioctl. - */ - -struct drm_vmw_surface_arg { - __s32 sid; - enum drm_vmw_handle_type handle_type; -}; - -/** - * struct drm_vmw_size ioctl. - * - * @width - mip level width - * @height - mip level height - * @depth - mip level depth - * - * Description of a mip level. - * Input data to the DRM_WMW_CREATE_SURFACE Ioctl. - */ - -struct drm_vmw_size { - __u32 width; - __u32 height; - __u32 depth; - __u32 pad64; -}; - -/** - * union drm_vmw_surface_create_arg - * - * @rep: Output data as described above. - * @req: Input data as described above. - * - * Argument to the DRM_VMW_CREATE_SURFACE Ioctl. - */ - -union drm_vmw_surface_create_arg { - struct drm_vmw_surface_arg rep; - struct drm_vmw_surface_create_req req; -}; - -/*************************************************************************/ -/** - * DRM_VMW_REF_SURFACE - Reference a host surface. - * - * Puts a reference on a host surface with a give sid, as previously - * returned by the DRM_VMW_CREATE_SURFACE ioctl. - * A reference will make sure the surface isn't destroyed while we hold - * it and will allow the calling client to use the surface ID in the command - * stream. - * - * On successful return, the Ioctl returns the surface information given - * in the DRM_VMW_CREATE_SURFACE ioctl. - */ - -/** - * union drm_vmw_surface_reference_arg - * - * @rep: Output data as described above. - * @req: Input data as described above. - * - * Argument to the DRM_VMW_REF_SURFACE Ioctl. - */ - -union drm_vmw_surface_reference_arg { - struct drm_vmw_surface_create_req rep; - struct drm_vmw_surface_arg req; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_SURFACE - Unreference a host surface. - * - * Clear a reference previously put on a host surface. - * When all references are gone, including the one implicitly placed - * on creation, - * a destroy surface command will be queued for the host. - * Does not wait for completion. - */ - -/*************************************************************************/ -/** - * DRM_VMW_EXECBUF - * - * Submit a command buffer for execution on the host, and return a - * fence seqno that when signaled, indicates that the command buffer has - * executed. - */ - -/** - * struct drm_vmw_execbuf_arg - * - * @commands: User-space address of a command buffer cast to an __u64. - * @command-size: Size in bytes of the command buffer. - * @throttle-us: Sleep until software is less than @throttle_us - * microseconds ahead of hardware. The driver may round this value - * to the nearest kernel tick. - * @fence_rep: User-space address of a struct drm_vmw_fence_rep cast to an - * __u64. - * @version: Allows expanding the execbuf ioctl parameters without breaking - * backwards compatibility, since user-space will always tell the kernel - * which version it uses. - * @flags: Execbuf flags. - * @imported_fence_fd: FD for a fence imported from another device - * - * Argument to the DRM_VMW_EXECBUF Ioctl. - */ - -#define DRM_VMW_EXECBUF_VERSION 2 - -#define DRM_VMW_EXECBUF_FLAG_IMPORT_FENCE_FD (1 << 0) -#define DRM_VMW_EXECBUF_FLAG_EXPORT_FENCE_FD (1 << 1) - -struct drm_vmw_execbuf_arg { - __u64 commands; - __u32 command_size; - __u32 throttle_us; - __u64 fence_rep; - __u32 version; - __u32 flags; - __u32 context_handle; - __s32 imported_fence_fd; -}; - -/** - * struct drm_vmw_fence_rep - * - * @handle: Fence object handle for fence associated with a command submission. - * @mask: Fence flags relevant for this fence object. - * @seqno: Fence sequence number in fifo. A fence object with a lower - * seqno will signal the EXEC flag before a fence object with a higher - * seqno. This can be used by user-space to avoid kernel calls to determine - * whether a fence has signaled the EXEC flag. Note that @seqno will - * wrap at 32-bit. - * @passed_seqno: The highest seqno number processed by the hardware - * so far. This can be used to mark user-space fence objects as signaled, and - * to determine whether a fence seqno might be stale. - * @fd: FD associated with the fence, -1 if not exported - * @error: This member should've been set to -EFAULT on submission. - * The following actions should be take on completion: - * error == -EFAULT: Fence communication failed. The host is synchronized. - * Use the last fence id read from the FIFO fence register. - * error != 0 && error != -EFAULT: - * Fence submission failed. The host is synchronized. Use the fence_seq member. - * error == 0: All is OK, The host may not be synchronized. - * Use the fence_seq member. - * - * Input / Output data to the DRM_VMW_EXECBUF Ioctl. - */ - -struct drm_vmw_fence_rep { - __u32 handle; - __u32 mask; - __u32 seqno; - __u32 passed_seqno; - __s32 fd; - __s32 error; -}; - -/*************************************************************************/ -/** - * DRM_VMW_ALLOC_DMABUF - * - * Allocate a DMA buffer that is visible also to the host. - * NOTE: The buffer is - * identified by a handle and an offset, which are private to the guest, but - * usable in the command stream. The guest kernel may translate these - * and patch up the command stream accordingly. In the future, the offset may - * be zero at all times, or it may disappear from the interface before it is - * fixed. - * - * The DMA buffer may stay user-space mapped in the guest at all times, - * and is thus suitable for sub-allocation. - * - * DMA buffers are mapped using the mmap() syscall on the drm device. - */ - -/** - * struct drm_vmw_alloc_dmabuf_req - * - * @size: Required minimum size of the buffer. - * - * Input data to the DRM_VMW_ALLOC_DMABUF Ioctl. - */ - -struct drm_vmw_alloc_dmabuf_req { - __u32 size; - __u32 pad64; -}; - -/** - * struct drm_vmw_dmabuf_rep - * - * @map_handle: Offset to use in the mmap() call used to map the buffer. - * @handle: Handle unique to this buffer. Used for unreferencing. - * @cur_gmr_id: GMR id to use in the command stream when this buffer is - * referenced. See not above. - * @cur_gmr_offset: Offset to use in the command stream when this buffer is - * referenced. See note above. - * - * Output data from the DRM_VMW_ALLOC_DMABUF Ioctl. - */ - -struct drm_vmw_dmabuf_rep { - __u64 map_handle; - __u32 handle; - __u32 cur_gmr_id; - __u32 cur_gmr_offset; - __u32 pad64; -}; - -/** - * union drm_vmw_dmabuf_arg - * - * @req: Input data as described above. - * @rep: Output data as described above. - * - * Argument to the DRM_VMW_ALLOC_DMABUF Ioctl. - */ - -union drm_vmw_alloc_dmabuf_arg { - struct drm_vmw_alloc_dmabuf_req req; - struct drm_vmw_dmabuf_rep rep; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_DMABUF - Free a DMA buffer. - * - */ - -/** - * struct drm_vmw_unref_dmabuf_arg - * - * @handle: Handle indicating what buffer to free. Obtained from the - * DRM_VMW_ALLOC_DMABUF Ioctl. - * - * Argument to the DRM_VMW_UNREF_DMABUF Ioctl. - */ - -struct drm_vmw_unref_dmabuf_arg { - __u32 handle; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CONTROL_STREAM - Control overlays, aka streams. - * - * This IOCTL controls the overlay units of the svga device. - * The SVGA overlay units does not work like regular hardware units in - * that they do not automatically read back the contents of the given dma - * buffer. But instead only read back for each call to this ioctl, and - * at any point between this call being made and a following call that - * either changes the buffer or disables the stream. - */ - -/** - * struct drm_vmw_rect - * - * Defines a rectangle. Used in the overlay ioctl to define - * source and destination rectangle. - */ - -struct drm_vmw_rect { - __s32 x; - __s32 y; - __u32 w; - __u32 h; -}; - -/** - * struct drm_vmw_control_stream_arg - * - * @stream_id: Stearm to control - * @enabled: If false all following arguments are ignored. - * @handle: Handle to buffer for getting data from. - * @format: Format of the overlay as understood by the host. - * @width: Width of the overlay. - * @height: Height of the overlay. - * @size: Size of the overlay in bytes. - * @pitch: Array of pitches, the two last are only used for YUV12 formats. - * @offset: Offset from start of dma buffer to overlay. - * @src: Source rect, must be within the defined area above. - * @dst: Destination rect, x and y may be negative. - * - * Argument to the DRM_VMW_CONTROL_STREAM Ioctl. - */ - -struct drm_vmw_control_stream_arg { - __u32 stream_id; - __u32 enabled; - - __u32 flags; - __u32 color_key; - - __u32 handle; - __u32 offset; - __s32 format; - __u32 size; - __u32 width; - __u32 height; - __u32 pitch[3]; - - __u32 pad64; - struct drm_vmw_rect src; - struct drm_vmw_rect dst; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CURSOR_BYPASS - Give extra information about cursor bypass. - * - */ - -#define DRM_VMW_CURSOR_BYPASS_ALL (1 << 0) -#define DRM_VMW_CURSOR_BYPASS_FLAGS (1) - -/** - * struct drm_vmw_cursor_bypass_arg - * - * @flags: Flags. - * @crtc_id: Crtc id, only used if DMR_CURSOR_BYPASS_ALL isn't passed. - * @xpos: X position of cursor. - * @ypos: Y position of cursor. - * @xhot: X hotspot. - * @yhot: Y hotspot. - * - * Argument to the DRM_VMW_CURSOR_BYPASS Ioctl. - */ - -struct drm_vmw_cursor_bypass_arg { - __u32 flags; - __u32 crtc_id; - __s32 xpos; - __s32 ypos; - __s32 xhot; - __s32 yhot; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CLAIM_STREAM - Claim a single stream. - */ - -/** - * struct drm_vmw_context_arg - * - * @stream_id: Device unique context ID. - * - * Output argument to the DRM_VMW_CREATE_CONTEXT Ioctl. - * Input argument to the DRM_VMW_UNREF_CONTEXT Ioctl. - */ - -struct drm_vmw_stream_arg { - __u32 stream_id; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_STREAM - Unclaim a stream. - * - * Return a single stream that was claimed by this process. Also makes - * sure that the stream has been stopped. - */ - -/*************************************************************************/ -/** - * DRM_VMW_GET_3D_CAP - * - * Read 3D capabilities from the FIFO - * - */ - -/** - * struct drm_vmw_get_3d_cap_arg - * - * @buffer: Pointer to a buffer for capability data, cast to an __u64 - * @size: Max size to copy - * - * Input argument to the DRM_VMW_GET_3D_CAP_IOCTL - * ioctls. - */ - -struct drm_vmw_get_3d_cap_arg { - __u64 buffer; - __u32 max_size; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_WAIT - * - * Waits for a fence object to signal. The wait is interruptible, so that - * signals may be delivered during the interrupt. The wait may timeout, - * in which case the calls returns -EBUSY. If the wait is restarted, - * that is restarting without resetting @cookie_valid to zero, - * the timeout is computed from the first call. - * - * The flags argument to the DRM_VMW_FENCE_WAIT ioctl indicates what to wait - * on: - * DRM_VMW_FENCE_FLAG_EXEC: All commands ahead of the fence in the command - * stream - * have executed. - * DRM_VMW_FENCE_FLAG_QUERY: All query results resulting from query finish - * commands - * in the buffer given to the EXECBUF ioctl returning the fence object handle - * are available to user-space. - * - * DRM_VMW_WAIT_OPTION_UNREF: If this wait option is given, and the - * fenc wait ioctl returns 0, the fence object has been unreferenced after - * the wait. - */ - -#define DRM_VMW_FENCE_FLAG_EXEC (1 << 0) -#define DRM_VMW_FENCE_FLAG_QUERY (1 << 1) - -#define DRM_VMW_WAIT_OPTION_UNREF (1 << 0) - -/** - * struct drm_vmw_fence_wait_arg - * - * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. - * @cookie_valid: Must be reset to 0 on first call. Left alone on restart. - * @kernel_cookie: Set to 0 on first call. Left alone on restart. - * @timeout_us: Wait timeout in microseconds. 0 for indefinite timeout. - * @lazy: Set to 1 if timing is not critical. Allow more than a kernel tick - * before returning. - * @flags: Fence flags to wait on. - * @wait_options: Options that control the behaviour of the wait ioctl. - * - * Input argument to the DRM_VMW_FENCE_WAIT ioctl. - */ - -struct drm_vmw_fence_wait_arg { - __u32 handle; - __s32 cookie_valid; - __u64 kernel_cookie; - __u64 timeout_us; - __s32 lazy; - __s32 flags; - __s32 wait_options; - __s32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_SIGNALED - * - * Checks if a fence object is signaled.. - */ - -/** - * struct drm_vmw_fence_signaled_arg - * - * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. - * @flags: Fence object flags input to DRM_VMW_FENCE_SIGNALED ioctl - * @signaled: Out: Flags signaled. - * @sequence: Out: Highest sequence passed so far. Can be used to signal the - * EXEC flag of user-space fence objects. - * - * Input/Output argument to the DRM_VMW_FENCE_SIGNALED and DRM_VMW_FENCE_UNREF - * ioctls. - */ - -struct drm_vmw_fence_signaled_arg { - __u32 handle; - __u32 flags; - __s32 signaled; - __u32 passed_seqno; - __u32 signaled_flags; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_UNREF - * - * Unreferences a fence object, and causes it to be destroyed if there are no - * other references to it. - * - */ - -/** - * struct drm_vmw_fence_arg - * - * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. - * - * Input/Output argument to the DRM_VMW_FENCE_UNREF ioctl.. - */ - -struct drm_vmw_fence_arg { - __u32 handle; - __u32 pad64; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_EVENT - * - * Queues an event on a fence to be delivered on the drm character device - * when the fence has signaled the DRM_VMW_FENCE_FLAG_EXEC flag. - * Optionally the approximate time when the fence signaled is - * given by the event. - */ - -/* - * The event type - */ -#define DRM_VMW_EVENT_FENCE_SIGNALED 0x80000000 - -struct drm_vmw_event_fence { - struct drm_event base; - __u64 user_data; - __u32 tv_sec; - __u32 tv_usec; -}; - -/* - * Flags that may be given to the command. - */ -/* Request fence signaled time on the event. */ -#define DRM_VMW_FE_FLAG_REQ_TIME (1 << 0) - -/** - * struct drm_vmw_fence_event_arg - * - * @fence_rep: Pointer to fence_rep structure cast to __u64 or 0 if - * the fence is not supposed to be referenced by user-space. - * @user_info: Info to be delivered with the event. - * @handle: Attach the event to this fence only. - * @flags: A set of flags as defined above. - */ -struct drm_vmw_fence_event_arg { - __u64 fence_rep; - __u64 user_data; - __u32 handle; - __u32 flags; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_PRESENT - * - * Executes an SVGA present on a given fb for a given surface. The surface - * is placed on the framebuffer. Cliprects are given relative to the given - * point (the point disignated by dest_{x|y}). - * - */ - -/** - * struct drm_vmw_present_arg - * @fb_id: framebuffer id to present / read back from. - * @sid: Surface id to present from. - * @dest_x: X placement coordinate for surface. - * @dest_y: Y placement coordinate for surface. - * @clips_ptr: Pointer to an array of clip rects cast to an __u64. - * @num_clips: Number of cliprects given relative to the framebuffer origin, - * in the same coordinate space as the frame buffer. - * @pad64: Unused 64-bit padding. - * - * Input argument to the DRM_VMW_PRESENT ioctl. - */ - -struct drm_vmw_present_arg { - __u32 fb_id; - __u32 sid; - __s32 dest_x; - __s32 dest_y; - __u64 clips_ptr; - __u32 num_clips; - __u32 pad64; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_PRESENT_READBACK - * - * Executes an SVGA present readback from a given fb to the dma buffer - * currently bound as the fb. If there is no dma buffer bound to the fb, - * an error will be returned. - * - */ - -/** - * struct drm_vmw_present_arg - * @fb_id: fb_id to present / read back from. - * @num_clips: Number of cliprects. - * @clips_ptr: Pointer to an array of clip rects cast to an __u64. - * @fence_rep: Pointer to a struct drm_vmw_fence_rep, cast to an __u64. - * If this member is NULL, then the ioctl should not return a fence. - */ - -struct drm_vmw_present_readback_arg { - __u32 fb_id; - __u32 num_clips; - __u64 clips_ptr; - __u64 fence_rep; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UPDATE_LAYOUT - Update layout - * - * Updates the preferred modes and connection status for connectors. The - * command consists of one drm_vmw_update_layout_arg pointing to an array - * of num_outputs drm_vmw_rect's. - */ - -/** - * struct drm_vmw_update_layout_arg - * - * @num_outputs: number of active connectors - * @rects: pointer to array of drm_vmw_rect cast to an __u64 - * - * Input argument to the DRM_VMW_UPDATE_LAYOUT Ioctl. - */ -struct drm_vmw_update_layout_arg { - __u32 num_outputs; - __u32 pad64; - __u64 rects; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_SHADER - Create shader - * - * Creates a shader and optionally binds it to a dma buffer containing - * the shader byte-code. - */ - -/** - * enum drm_vmw_shader_type - Shader types - */ -enum drm_vmw_shader_type { - drm_vmw_shader_type_vs = 0, - drm_vmw_shader_type_ps, -}; - - -/** - * struct drm_vmw_shader_create_arg - * - * @shader_type: Shader type of the shader to create. - * @size: Size of the byte-code in bytes. - * where the shader byte-code starts - * @buffer_handle: Buffer handle identifying the buffer containing the - * shader byte-code - * @shader_handle: On successful completion contains a handle that - * can be used to subsequently identify the shader. - * @offset: Offset in bytes into the buffer given by @buffer_handle, - * - * Input / Output argument to the DRM_VMW_CREATE_SHADER Ioctl. - */ -struct drm_vmw_shader_create_arg { - enum drm_vmw_shader_type shader_type; - __u32 size; - __u32 buffer_handle; - __u32 shader_handle; - __u64 offset; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_SHADER - Unreferences a shader - * - * Destroys a user-space reference to a shader, optionally destroying - * it. - */ - -/** - * struct drm_vmw_shader_arg - * - * @handle: Handle identifying the shader to destroy. - * - * Input argument to the DRM_VMW_UNREF_SHADER ioctl. - */ -struct drm_vmw_shader_arg { - __u32 handle; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_GB_SURFACE_CREATE - Create a host guest-backed surface. - * - * Allocates a surface handle and queues a create surface command - * for the host on the first use of the surface. The surface ID can - * be used as the surface ID in commands referencing the surface. - */ - -/** - * enum drm_vmw_surface_flags - * - * @drm_vmw_surface_flag_shareable: Whether the surface is shareable - * @drm_vmw_surface_flag_scanout: Whether the surface is a scanout - * surface. - * @drm_vmw_surface_flag_create_buffer: Create a backup buffer if none is - * given. - */ -enum drm_vmw_surface_flags { - drm_vmw_surface_flag_shareable = (1 << 0), - drm_vmw_surface_flag_scanout = (1 << 1), - drm_vmw_surface_flag_create_buffer = (1 << 2) -}; - -/** - * struct drm_vmw_gb_surface_create_req - * - * @svga3d_flags: SVGA3d surface flags for the device. - * @format: SVGA3d format. - * @mip_level: Number of mip levels for all faces. - * @drm_surface_flags Flags as described above. - * @multisample_count Future use. Set to 0. - * @autogen_filter Future use. Set to 0. - * @buffer_handle Buffer handle of backup buffer. SVGA3D_INVALID_ID - * if none. - * @base_size Size of the base mip level for all faces. - * @array_size Must be zero for non-DX hardware, and if non-zero - * svga3d_flags must have proper bind flags setup. - * - * Input argument to the DRM_VMW_GB_SURFACE_CREATE Ioctl. - * Part of output argument for the DRM_VMW_GB_SURFACE_REF Ioctl. - */ -struct drm_vmw_gb_surface_create_req { - __u32 svga3d_flags; - __u32 format; - __u32 mip_levels; - enum drm_vmw_surface_flags drm_surface_flags; - __u32 multisample_count; - __u32 autogen_filter; - __u32 buffer_handle; - __u32 array_size; - struct drm_vmw_size base_size; -}; - -/** - * struct drm_vmw_gb_surface_create_rep - * - * @handle: Surface handle. - * @backup_size: Size of backup buffers for this surface. - * @buffer_handle: Handle of backup buffer. SVGA3D_INVALID_ID if none. - * @buffer_size: Actual size of the buffer identified by - * @buffer_handle - * @buffer_map_handle: Offset into device address space for the buffer - * identified by @buffer_handle. - * - * Part of output argument for the DRM_VMW_GB_SURFACE_REF ioctl. - * Output argument for the DRM_VMW_GB_SURFACE_CREATE ioctl. - */ -struct drm_vmw_gb_surface_create_rep { - __u32 handle; - __u32 backup_size; - __u32 buffer_handle; - __u32 buffer_size; - __u64 buffer_map_handle; -}; - -/** - * union drm_vmw_gb_surface_create_arg - * - * @req: Input argument as described above. - * @rep: Output argument as described above. - * - * Argument to the DRM_VMW_GB_SURFACE_CREATE ioctl. - */ -union drm_vmw_gb_surface_create_arg { - struct drm_vmw_gb_surface_create_rep rep; - struct drm_vmw_gb_surface_create_req req; -}; - -/*************************************************************************/ -/** - * DRM_VMW_GB_SURFACE_REF - Reference a host surface. - * - * Puts a reference on a host surface with a given handle, as previously - * returned by the DRM_VMW_GB_SURFACE_CREATE ioctl. - * A reference will make sure the surface isn't destroyed while we hold - * it and will allow the calling client to use the surface handle in - * the command stream. - * - * On successful return, the Ioctl returns the surface information given - * to and returned from the DRM_VMW_GB_SURFACE_CREATE ioctl. - */ - -/** - * struct drm_vmw_gb_surface_reference_arg - * - * @creq: The data used as input when the surface was created, as described - * above at "struct drm_vmw_gb_surface_create_req" - * @crep: Additional data output when the surface was created, as described - * above at "struct drm_vmw_gb_surface_create_rep" - * - * Output Argument to the DRM_VMW_GB_SURFACE_REF ioctl. - */ -struct drm_vmw_gb_surface_ref_rep { - struct drm_vmw_gb_surface_create_req creq; - struct drm_vmw_gb_surface_create_rep crep; -}; - -/** - * union drm_vmw_gb_surface_reference_arg - * - * @req: Input data as described above at "struct drm_vmw_surface_arg" - * @rep: Output data as described above at "struct drm_vmw_gb_surface_ref_rep" - * - * Argument to the DRM_VMW_GB_SURFACE_REF Ioctl. - */ -union drm_vmw_gb_surface_reference_arg { - struct drm_vmw_gb_surface_ref_rep rep; - struct drm_vmw_surface_arg req; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_SYNCCPU - Sync a DMA buffer / MOB for CPU access. - * - * Idles any previously submitted GPU operations on the buffer and - * by default blocks command submissions that reference the buffer. - * If the file descriptor used to grab a blocking CPU sync is closed, the - * cpu sync is released. - * The flags argument indicates how the grab / release operation should be - * performed: - */ - -/** - * enum drm_vmw_synccpu_flags - Synccpu flags: - * - * @drm_vmw_synccpu_read: Sync for read. If sync is done for read only, it's a - * hint to the kernel to allow command submissions that references the buffer - * for read-only. - * @drm_vmw_synccpu_write: Sync for write. Block all command submissions - * referencing this buffer. - * @drm_vmw_synccpu_dontblock: Don't wait for GPU idle, but rather return - * -EBUSY should the buffer be busy. - * @drm_vmw_synccpu_allow_cs: Allow command submission that touches the buffer - * while the buffer is synced for CPU. This is similar to the GEM bo idle - * behavior. - */ -enum drm_vmw_synccpu_flags { - drm_vmw_synccpu_read = (1 << 0), - drm_vmw_synccpu_write = (1 << 1), - drm_vmw_synccpu_dontblock = (1 << 2), - drm_vmw_synccpu_allow_cs = (1 << 3) -}; - -/** - * enum drm_vmw_synccpu_op - Synccpu operations: - * - * @drm_vmw_synccpu_grab: Grab the buffer for CPU operations - * @drm_vmw_synccpu_release: Release a previous grab. - */ -enum drm_vmw_synccpu_op { - drm_vmw_synccpu_grab, - drm_vmw_synccpu_release -}; - -/** - * struct drm_vmw_synccpu_arg - * - * @op: The synccpu operation as described above. - * @handle: Handle identifying the buffer object. - * @flags: Flags as described above. - */ -struct drm_vmw_synccpu_arg { - enum drm_vmw_synccpu_op op; - enum drm_vmw_synccpu_flags flags; - __u32 handle; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_EXTENDED_CONTEXT - Create a host context. - * - * Allocates a device unique context id, and queues a create context command - * for the host. Does not wait for host completion. - */ -enum drm_vmw_extended_context { - drm_vmw_context_legacy, - drm_vmw_context_dx -}; - -/** - * union drm_vmw_extended_context_arg - * - * @req: Context type. - * @rep: Context identifier. - * - * Argument to the DRM_VMW_CREATE_EXTENDED_CONTEXT Ioctl. - */ -union drm_vmw_extended_context_arg { - enum drm_vmw_extended_context req; - struct drm_vmw_context_arg rep; -}; - -/*************************************************************************/ -/* - * DRM_VMW_HANDLE_CLOSE - Close a user-space handle and release its - * underlying resource. - * - * Note that this ioctl is overlaid on the DRM_VMW_UNREF_DMABUF Ioctl. - * The ioctl arguments therefore need to be identical in layout. - * - */ - -/** - * struct drm_vmw_handle_close_arg - * - * @handle: Handle to close. - * - * Argument to the DRM_VMW_HANDLE_CLOSE Ioctl. - */ -struct drm_vmw_handle_close_arg { - __u32 handle; - __u32 pad64; -}; - - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/libpostproc/postprocess.h b/prebuilts/aarch64/include/libpostproc/postprocess.h deleted file mode 100644 index 348ee7c..0000000 --- a/prebuilts/aarch64/include/libpostproc/postprocess.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2001-2003 Michael Niedermayer (michaelni@gmx.at) - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef POSTPROC_POSTPROCESS_H -#define POSTPROC_POSTPROCESS_H - -/** - * @file - * @ingroup lpp - * external API header - */ - -/** - * @defgroup lpp libpostproc - * Video postprocessing library. - * - * @{ - */ - -#include "libpostproc/version.h" - -/** - * Return the LIBPOSTPROC_VERSION_INT constant. - */ -unsigned postproc_version(void); - -/** - * Return the libpostproc build-time configuration. - */ -const char *postproc_configuration(void); - -/** - * Return the libpostproc license. - */ -const char *postproc_license(void); - -#define PP_QUALITY_MAX 6 - -#include - -typedef void pp_context; -typedef void pp_mode; - -#if LIBPOSTPROC_VERSION_INT < (52<<16) -typedef pp_context pp_context_t; -typedef pp_mode pp_mode_t; -extern const char *const pp_help; ///< a simple help text -#else -extern const char pp_help[]; ///< a simple help text -#endif - -void pp_postprocess(const uint8_t * src[3], const int srcStride[3], - uint8_t * dst[3], const int dstStride[3], - int horizontalSize, int verticalSize, - const int8_t *QP_store, int QP_stride, - pp_mode *mode, pp_context *ppContext, int pict_type); - - -/** - * Return a pp_mode or NULL if an error occurred. - * - * @param name the string after "-pp" on the command line - * @param quality a number from 0 to PP_QUALITY_MAX - */ -pp_mode *pp_get_mode_by_name_and_quality(const char *name, int quality); -void pp_free_mode(pp_mode *mode); - -pp_context *pp_get_context(int width, int height, int flags); -void pp_free_context(pp_context *ppContext); - -#define PP_CPU_CAPS_MMX 0x80000000 -#define PP_CPU_CAPS_MMX2 0x20000000 -#define PP_CPU_CAPS_3DNOW 0x40000000 -#define PP_CPU_CAPS_ALTIVEC 0x10000000 -#define PP_CPU_CAPS_AUTO 0x00080000 - -#define PP_FORMAT 0x00000008 -#define PP_FORMAT_420 (0x00000011|PP_FORMAT) -#define PP_FORMAT_422 (0x00000001|PP_FORMAT) -#define PP_FORMAT_411 (0x00000002|PP_FORMAT) -#define PP_FORMAT_444 (0x00000000|PP_FORMAT) -#define PP_FORMAT_440 (0x00000010|PP_FORMAT) - -#define PP_PICT_TYPE_QP2 0x00000010 ///< MPEG2 style QScale - -/** - * @} - */ - -#endif /* POSTPROC_POSTPROCESS_H */ diff --git a/prebuilts/aarch64/include/libpostproc/version.h b/prebuilts/aarch64/include/libpostproc/version.h deleted file mode 100644 index 812f8e0..0000000 --- a/prebuilts/aarch64/include/libpostproc/version.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef POSTPROC_VERSION_H -#define POSTPROC_VERSION_H - -/** - * @file - * Libpostproc version macros - */ - -#include "libavutil/avutil.h" - -#define LIBPOSTPROC_VERSION_MAJOR 55 -#define LIBPOSTPROC_VERSION_MINOR 9 -#define LIBPOSTPROC_VERSION_MICRO 100 - -#define LIBPOSTPROC_VERSION_INT AV_VERSION_INT(LIBPOSTPROC_VERSION_MAJOR, \ - LIBPOSTPROC_VERSION_MINOR, \ - LIBPOSTPROC_VERSION_MICRO) -#define LIBPOSTPROC_VERSION AV_VERSION(LIBPOSTPROC_VERSION_MAJOR, \ - LIBPOSTPROC_VERSION_MINOR, \ - LIBPOSTPROC_VERSION_MICRO) -#define LIBPOSTPROC_BUILD LIBPOSTPROC_VERSION_INT - -#define LIBPOSTPROC_IDENT "postproc" AV_STRINGIFY(LIBPOSTPROC_VERSION) - -#endif /* POSTPROC_VERSION_H */ diff --git a/prebuilts/aarch64/include/libswresample/swresample.h b/prebuilts/aarch64/include/libswresample/swresample.h deleted file mode 100644 index c7b84fb..0000000 --- a/prebuilts/aarch64/include/libswresample/swresample.h +++ /dev/null @@ -1,579 +0,0 @@ -/* - * Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at) - * - * This file is part of libswresample - * - * libswresample is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * libswresample is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with libswresample; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWRESAMPLE_SWRESAMPLE_H -#define SWRESAMPLE_SWRESAMPLE_H - -/** - * @file - * @ingroup lswr - * libswresample public header - */ - -/** - * @defgroup lswr libswresample - * @{ - * - * Audio resampling, sample format conversion and mixing library. - * - * Interaction with lswr is done through SwrContext, which is - * allocated with swr_alloc() or swr_alloc_set_opts(). It is opaque, so all parameters - * must be set with the @ref avoptions API. - * - * The first thing you will need to do in order to use lswr is to allocate - * SwrContext. This can be done with swr_alloc() or swr_alloc_set_opts(). If you - * are using the former, you must set options through the @ref avoptions API. - * The latter function provides the same feature, but it allows you to set some - * common options in the same statement. - * - * For example the following code will setup conversion from planar float sample - * format to interleaved signed 16-bit integer, downsampling from 48kHz to - * 44.1kHz and downmixing from 5.1 channels to stereo (using the default mixing - * matrix). This is using the swr_alloc() function. - * @code - * SwrContext *swr = swr_alloc(); - * av_opt_set_channel_layout(swr, "in_channel_layout", AV_CH_LAYOUT_5POINT1, 0); - * av_opt_set_channel_layout(swr, "out_channel_layout", AV_CH_LAYOUT_STEREO, 0); - * av_opt_set_int(swr, "in_sample_rate", 48000, 0); - * av_opt_set_int(swr, "out_sample_rate", 44100, 0); - * av_opt_set_sample_fmt(swr, "in_sample_fmt", AV_SAMPLE_FMT_FLTP, 0); - * av_opt_set_sample_fmt(swr, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0); - * @endcode - * - * The same job can be done using swr_alloc_set_opts() as well: - * @code - * SwrContext *swr = swr_alloc_set_opts(NULL, // we're allocating a new context - * AV_CH_LAYOUT_STEREO, // out_ch_layout - * AV_SAMPLE_FMT_S16, // out_sample_fmt - * 44100, // out_sample_rate - * AV_CH_LAYOUT_5POINT1, // in_ch_layout - * AV_SAMPLE_FMT_FLTP, // in_sample_fmt - * 48000, // in_sample_rate - * 0, // log_offset - * NULL); // log_ctx - * @endcode - * - * Once all values have been set, it must be initialized with swr_init(). If - * you need to change the conversion parameters, you can change the parameters - * using @ref AVOptions, as described above in the first example; or by using - * swr_alloc_set_opts(), but with the first argument the allocated context. - * You must then call swr_init() again. - * - * The conversion itself is done by repeatedly calling swr_convert(). - * Note that the samples may get buffered in swr if you provide insufficient - * output space or if sample rate conversion is done, which requires "future" - * samples. Samples that do not require future input can be retrieved at any - * time by using swr_convert() (in_count can be set to 0). - * At the end of conversion the resampling buffer can be flushed by calling - * swr_convert() with NULL in and 0 in_count. - * - * The samples used in the conversion process can be managed with the libavutil - * @ref lavu_sampmanip "samples manipulation" API, including av_samples_alloc() - * function used in the following example. - * - * The delay between input and output, can at any time be found by using - * swr_get_delay(). - * - * The following code demonstrates the conversion loop assuming the parameters - * from above and caller-defined functions get_input() and handle_output(): - * @code - * uint8_t **input; - * int in_samples; - * - * while (get_input(&input, &in_samples)) { - * uint8_t *output; - * int out_samples = av_rescale_rnd(swr_get_delay(swr, 48000) + - * in_samples, 44100, 48000, AV_ROUND_UP); - * av_samples_alloc(&output, NULL, 2, out_samples, - * AV_SAMPLE_FMT_S16, 0); - * out_samples = swr_convert(swr, &output, out_samples, - * input, in_samples); - * handle_output(output, out_samples); - * av_freep(&output); - * } - * @endcode - * - * When the conversion is finished, the conversion - * context and everything associated with it must be freed with swr_free(). - * A swr_close() function is also available, but it exists mainly for - * compatibility with libavresample, and is not required to be called. - * - * There will be no memory leak if the data is not completely flushed before - * swr_free(). - */ - -#include -#include "libavutil/channel_layout.h" -#include "libavutil/frame.h" -#include "libavutil/samplefmt.h" - -#include "libswresample/version.h" - -/** - * @name Option constants - * These constants are used for the @ref avoptions interface for lswr. - * @{ - * - */ - -#define SWR_FLAG_RESAMPLE 1 ///< Force resampling even if equal sample rate -//TODO use int resample ? -//long term TODO can we enable this dynamically? - -/** Dithering algorithms */ -enum SwrDitherType { - SWR_DITHER_NONE = 0, - SWR_DITHER_RECTANGULAR, - SWR_DITHER_TRIANGULAR, - SWR_DITHER_TRIANGULAR_HIGHPASS, - - SWR_DITHER_NS = 64, ///< not part of API/ABI - SWR_DITHER_NS_LIPSHITZ, - SWR_DITHER_NS_F_WEIGHTED, - SWR_DITHER_NS_MODIFIED_E_WEIGHTED, - SWR_DITHER_NS_IMPROVED_E_WEIGHTED, - SWR_DITHER_NS_SHIBATA, - SWR_DITHER_NS_LOW_SHIBATA, - SWR_DITHER_NS_HIGH_SHIBATA, - SWR_DITHER_NB, ///< not part of API/ABI -}; - -/** Resampling Engines */ -enum SwrEngine { - SWR_ENGINE_SWR, /**< SW Resampler */ - SWR_ENGINE_SOXR, /**< SoX Resampler */ - SWR_ENGINE_NB, ///< not part of API/ABI -}; - -/** Resampling Filter Types */ -enum SwrFilterType { - SWR_FILTER_TYPE_CUBIC, /**< Cubic */ - SWR_FILTER_TYPE_BLACKMAN_NUTTALL, /**< Blackman Nuttall windowed sinc */ - SWR_FILTER_TYPE_KAISER, /**< Kaiser windowed sinc */ -}; - -/** - * @} - */ - -/** - * The libswresample context. Unlike libavcodec and libavformat, this structure - * is opaque. This means that if you would like to set options, you must use - * the @ref avoptions API and cannot directly set values to members of the - * structure. - */ -typedef struct SwrContext SwrContext; - -/** - * Get the AVClass for SwrContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - * @return the AVClass of SwrContext - */ -const AVClass *swr_get_class(void); - -/** - * @name SwrContext constructor functions - * @{ - */ - -/** - * Allocate SwrContext. - * - * If you use this function you will need to set the parameters (manually or - * with swr_alloc_set_opts()) before calling swr_init(). - * - * @see swr_alloc_set_opts(), swr_init(), swr_free() - * @return NULL on error, allocated context otherwise - */ -struct SwrContext *swr_alloc(void); - -/** - * Initialize context after user parameters have been set. - * @note The context must be configured using the AVOption API. - * - * @see av_opt_set_int() - * @see av_opt_set_dict() - * - * @param[in,out] s Swr context to initialize - * @return AVERROR error code in case of failure. - */ -int swr_init(struct SwrContext *s); - -/** - * Check whether an swr context has been initialized or not. - * - * @param[in] s Swr context to check - * @see swr_init() - * @return positive if it has been initialized, 0 if not initialized - */ -int swr_is_initialized(struct SwrContext *s); - -/** - * Allocate SwrContext if needed and set/reset common parameters. - * - * This function does not require s to be allocated with swr_alloc(). On the - * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters - * on the allocated context. - * - * @param s existing Swr context if available, or NULL if not - * @param out_ch_layout output channel layout (AV_CH_LAYOUT_*) - * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*). - * @param out_sample_rate output sample rate (frequency in Hz) - * @param in_ch_layout input channel layout (AV_CH_LAYOUT_*) - * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*). - * @param in_sample_rate input sample rate (frequency in Hz) - * @param log_offset logging level offset - * @param log_ctx parent logging context, can be NULL - * - * @see swr_init(), swr_free() - * @return NULL on error, allocated context otherwise - */ -struct SwrContext *swr_alloc_set_opts(struct SwrContext *s, - int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate, - int64_t in_ch_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate, - int log_offset, void *log_ctx); - -/** - * @} - * - * @name SwrContext destructor functions - * @{ - */ - -/** - * Free the given SwrContext and set the pointer to NULL. - * - * @param[in] s a pointer to a pointer to Swr context - */ -void swr_free(struct SwrContext **s); - -/** - * Closes the context so that swr_is_initialized() returns 0. - * - * The context can be brought back to life by running swr_init(), - * swr_init() can also be used without swr_close(). - * This function is mainly provided for simplifying the usecase - * where one tries to support libavresample and libswresample. - * - * @param[in,out] s Swr context to be closed - */ -void swr_close(struct SwrContext *s); - -/** - * @} - * - * @name Core conversion functions - * @{ - */ - -/** Convert audio. - * - * in and in_count can be set to 0 to flush the last few samples out at the - * end. - * - * If more input is provided than output space, then the input will be buffered. - * You can avoid this buffering by using swr_get_out_samples() to retrieve an - * upper bound on the required number of output samples for the given number of - * input samples. Conversion will run directly without copying whenever possible. - * - * @param s allocated Swr context, with parameters set - * @param out output buffers, only the first one need be set in case of packed audio - * @param out_count amount of space available for output in samples per channel - * @param in input buffers, only the first one need to be set in case of packed audio - * @param in_count number of input samples available in one channel - * - * @return number of samples output per channel, negative value on error - */ -int swr_convert(struct SwrContext *s, uint8_t **out, int out_count, - const uint8_t **in , int in_count); - -/** - * Convert the next timestamp from input to output - * timestamps are in 1/(in_sample_rate * out_sample_rate) units. - * - * @note There are 2 slightly differently behaving modes. - * @li When automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) - * in this case timestamps will be passed through with delays compensated - * @li When automatic timestamp compensation is used, (min_compensation < FLT_MAX) - * in this case the output timestamps will match output sample numbers. - * See ffmpeg-resampler(1) for the two modes of compensation. - * - * @param s[in] initialized Swr context - * @param pts[in] timestamp for the next input sample, INT64_MIN if unknown - * @see swr_set_compensation(), swr_drop_output(), and swr_inject_silence() are - * function used internally for timestamp compensation. - * @return the output timestamp for the next output sample - */ -int64_t swr_next_pts(struct SwrContext *s, int64_t pts); - -/** - * @} - * - * @name Low-level option setting functions - * These functons provide a means to set low-level options that is not possible - * with the AVOption API. - * @{ - */ - -/** - * Activate resampling compensation ("soft" compensation). This function is - * internally called when needed in swr_next_pts(). - * - * @param[in,out] s allocated Swr context. If it is not initialized, - * or SWR_FLAG_RESAMPLE is not set, swr_init() is - * called with the flag set. - * @param[in] sample_delta delta in PTS per sample - * @param[in] compensation_distance number of samples to compensate for - * @return >= 0 on success, AVERROR error codes if: - * @li @c s is NULL, - * @li @c compensation_distance is less than 0, - * @li @c compensation_distance is 0 but sample_delta is not, - * @li compensation unsupported by resampler, or - * @li swr_init() fails when called. - */ -int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensation_distance); - -/** - * Set a customized input channel mapping. - * - * @param[in,out] s allocated Swr context, not yet initialized - * @param[in] channel_map customized input channel mapping (array of channel - * indexes, -1 for a muted channel) - * @return >= 0 on success, or AVERROR error code in case of failure. - */ -int swr_set_channel_mapping(struct SwrContext *s, const int *channel_map); - -/** - * Generate a channel mixing matrix. - * - * This function is the one used internally by libswresample for building the - * default mixing matrix. It is made public just as a utility function for - * building custom matrices. - * - * @param in_layout input channel layout - * @param out_layout output channel layout - * @param center_mix_level mix level for the center channel - * @param surround_mix_level mix level for the surround channel(s) - * @param lfe_mix_level mix level for the low-frequency effects channel - * @param rematrix_maxval if 1.0, coefficients will be normalized to prevent - * overflow. if INT_MAX, coefficients will not be - * normalized. - * @param[out] matrix mixing coefficients; matrix[i + stride * o] is - * the weight of input channel i in output channel o. - * @param stride distance between adjacent input channels in the - * matrix array - * @param matrix_encoding matrixed stereo downmix mode (e.g. dplii) - * @param log_ctx parent logging context, can be NULL - * @return 0 on success, negative AVERROR code on failure - */ -int swr_build_matrix(uint64_t in_layout, uint64_t out_layout, - double center_mix_level, double surround_mix_level, - double lfe_mix_level, double rematrix_maxval, - double rematrix_volume, double *matrix, - int stride, enum AVMatrixEncoding matrix_encoding, - void *log_ctx); - -/** - * Set a customized remix matrix. - * - * @param s allocated Swr context, not yet initialized - * @param matrix remix coefficients; matrix[i + stride * o] is - * the weight of input channel i in output channel o - * @param stride offset between lines of the matrix - * @return >= 0 on success, or AVERROR error code in case of failure. - */ -int swr_set_matrix(struct SwrContext *s, const double *matrix, int stride); - -/** - * @} - * - * @name Sample handling functions - * @{ - */ - -/** - * Drops the specified number of output samples. - * - * This function, along with swr_inject_silence(), is called by swr_next_pts() - * if needed for "hard" compensation. - * - * @param s allocated Swr context - * @param count number of samples to be dropped - * - * @return >= 0 on success, or a negative AVERROR code on failure - */ -int swr_drop_output(struct SwrContext *s, int count); - -/** - * Injects the specified number of silence samples. - * - * This function, along with swr_drop_output(), is called by swr_next_pts() - * if needed for "hard" compensation. - * - * @param s allocated Swr context - * @param count number of samples to be dropped - * - * @return >= 0 on success, or a negative AVERROR code on failure - */ -int swr_inject_silence(struct SwrContext *s, int count); - -/** - * Gets the delay the next input sample will experience relative to the next output sample. - * - * Swresample can buffer data if more input has been provided than available - * output space, also converting between sample rates needs a delay. - * This function returns the sum of all such delays. - * The exact delay is not necessarily an integer value in either input or - * output sample rate. Especially when downsampling by a large value, the - * output sample rate may be a poor choice to represent the delay, similarly - * for upsampling and the input sample rate. - * - * @param s swr context - * @param base timebase in which the returned delay will be: - * @li if it's set to 1 the returned delay is in seconds - * @li if it's set to 1000 the returned delay is in milliseconds - * @li if it's set to the input sample rate then the returned - * delay is in input samples - * @li if it's set to the output sample rate then the returned - * delay is in output samples - * @li if it's the least common multiple of in_sample_rate and - * out_sample_rate then an exact rounding-free delay will be - * returned - * @returns the delay in 1 / @c base units. - */ -int64_t swr_get_delay(struct SwrContext *s, int64_t base); - -/** - * Find an upper bound on the number of samples that the next swr_convert - * call will output, if called with in_samples of input samples. This - * depends on the internal state, and anything changing the internal state - * (like further swr_convert() calls) will may change the number of samples - * swr_get_out_samples() returns for the same number of input samples. - * - * @param in_samples number of input samples. - * @note any call to swr_inject_silence(), swr_convert(), swr_next_pts() - * or swr_set_compensation() invalidates this limit - * @note it is recommended to pass the correct available buffer size - * to all functions like swr_convert() even if swr_get_out_samples() - * indicates that less would be used. - * @returns an upper bound on the number of samples that the next swr_convert - * will output or a negative value to indicate an error - */ -int swr_get_out_samples(struct SwrContext *s, int in_samples); - -/** - * @} - * - * @name Configuration accessors - * @{ - */ - -/** - * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. - * - * This is useful to check if the build-time libswresample has the same version - * as the run-time one. - * - * @returns the unsigned int-typed version - */ -unsigned swresample_version(void); - -/** - * Return the swr build-time configuration. - * - * @returns the build-time @c ./configure flags - */ -const char *swresample_configuration(void); - -/** - * Return the swr license. - * - * @returns the license of libswresample, determined at build-time - */ -const char *swresample_license(void); - -/** - * @} - * - * @name AVFrame based API - * @{ - */ - -/** - * Convert the samples in the input AVFrame and write them to the output AVFrame. - * - * Input and output AVFrames must have channel_layout, sample_rate and format set. - * - * If the output AVFrame does not have the data pointers allocated the nb_samples - * field will be set using av_frame_get_buffer() - * is called to allocate the frame. - * - * The output AVFrame can be NULL or have fewer allocated samples than required. - * In this case, any remaining samples not written to the output will be added - * to an internal FIFO buffer, to be returned at the next call to this function - * or to swr_convert(). - * - * If converting sample rate, there may be data remaining in the internal - * resampling delay buffer. swr_get_delay() tells the number of - * remaining samples. To get this data as output, call this function or - * swr_convert() with NULL input. - * - * If the SwrContext configuration does not match the output and - * input AVFrame settings the conversion does not take place and depending on - * which AVFrame is not matching AVERROR_OUTPUT_CHANGED, AVERROR_INPUT_CHANGED - * or the result of a bitwise-OR of them is returned. - * - * @see swr_delay() - * @see swr_convert() - * @see swr_get_delay() - * - * @param swr audio resample context - * @param output output AVFrame - * @param input input AVFrame - * @return 0 on success, AVERROR on failure or nonmatching - * configuration. - */ -int swr_convert_frame(SwrContext *swr, - AVFrame *output, const AVFrame *input); - -/** - * Configure or reconfigure the SwrContext using the information - * provided by the AVFrames. - * - * The original resampling context is reset even on failure. - * The function calls swr_close() internally if the context is open. - * - * @see swr_close(); - * - * @param swr audio resample context - * @param output output AVFrame - * @param input input AVFrame - * @return 0 on success, AVERROR on failure. - */ -int swr_config_frame(SwrContext *swr, const AVFrame *out, const AVFrame *in); - -/** - * @} - * @} - */ - -#endif /* SWRESAMPLE_SWRESAMPLE_H */ diff --git a/prebuilts/aarch64/include/libswresample/version.h b/prebuilts/aarch64/include/libswresample/version.h deleted file mode 100644 index 0a99e0f..0000000 --- a/prebuilts/aarch64/include/libswresample/version.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Version macros. - * - * This file is part of libswresample - * - * libswresample is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * libswresample is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with libswresample; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWRESAMPLE_VERSION_H -#define SWRESAMPLE_VERSION_H - -/** - * @file - * Libswresample version macros - */ - -#include "libavutil/avutil.h" - -#define LIBSWRESAMPLE_VERSION_MAJOR 3 -#define LIBSWRESAMPLE_VERSION_MINOR 9 -#define LIBSWRESAMPLE_VERSION_MICRO 100 - -#define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ - LIBSWRESAMPLE_VERSION_MINOR, \ - LIBSWRESAMPLE_VERSION_MICRO) -#define LIBSWRESAMPLE_VERSION AV_VERSION(LIBSWRESAMPLE_VERSION_MAJOR, \ - LIBSWRESAMPLE_VERSION_MINOR, \ - LIBSWRESAMPLE_VERSION_MICRO) -#define LIBSWRESAMPLE_BUILD LIBSWRESAMPLE_VERSION_INT - -#define LIBSWRESAMPLE_IDENT "SwR" AV_STRINGIFY(LIBSWRESAMPLE_VERSION) - -#endif /* SWRESAMPLE_VERSION_H */ diff --git a/prebuilts/aarch64/include/libswscale/swscale.h b/prebuilts/aarch64/include/libswscale/swscale.h deleted file mode 100644 index 7713f51..0000000 --- a/prebuilts/aarch64/include/libswscale/swscale.h +++ /dev/null @@ -1,336 +0,0 @@ -/* - * Copyright (C) 2001-2011 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_SWSCALE_H -#define SWSCALE_SWSCALE_H - -/** - * @file - * @ingroup libsws - * external API header - */ - -#include - -#include "libavutil/avutil.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "version.h" - -/** - * @defgroup libsws libswscale - * Color conversion and scaling library. - * - * @{ - * - * Return the LIBSWSCALE_VERSION_INT constant. - */ -unsigned swscale_version(void); - -/** - * Return the libswscale build-time configuration. - */ -const char *swscale_configuration(void); - -/** - * Return the libswscale license. - */ -const char *swscale_license(void); - -/* values for the flags, the stuff on the command line is different */ -#define SWS_FAST_BILINEAR 1 -#define SWS_BILINEAR 2 -#define SWS_BICUBIC 4 -#define SWS_X 8 -#define SWS_POINT 0x10 -#define SWS_AREA 0x20 -#define SWS_BICUBLIN 0x40 -#define SWS_GAUSS 0x80 -#define SWS_SINC 0x100 -#define SWS_LANCZOS 0x200 -#define SWS_SPLINE 0x400 - -#define SWS_SRC_V_CHR_DROP_MASK 0x30000 -#define SWS_SRC_V_CHR_DROP_SHIFT 16 - -#define SWS_PARAM_DEFAULT 123456 - -#define SWS_PRINT_INFO 0x1000 - -//the following 3 flags are not completely implemented -//internal chrominance subsampling info -#define SWS_FULL_CHR_H_INT 0x2000 -//input subsampling info -#define SWS_FULL_CHR_H_INP 0x4000 -#define SWS_DIRECT_BGR 0x8000 -#define SWS_ACCURATE_RND 0x40000 -#define SWS_BITEXACT 0x80000 -#define SWS_ERROR_DIFFUSION 0x800000 - -#define SWS_MAX_REDUCE_CUTOFF 0.002 - -#define SWS_CS_ITU709 1 -#define SWS_CS_FCC 4 -#define SWS_CS_ITU601 5 -#define SWS_CS_ITU624 5 -#define SWS_CS_SMPTE170M 5 -#define SWS_CS_SMPTE240M 7 -#define SWS_CS_DEFAULT 5 -#define SWS_CS_BT2020 9 - -/** - * Return a pointer to yuv<->rgb coefficients for the given colorspace - * suitable for sws_setColorspaceDetails(). - * - * @param colorspace One of the SWS_CS_* macros. If invalid, - * SWS_CS_DEFAULT is used. - */ -const int *sws_getCoefficients(int colorspace); - -// when used for filters they must have an odd number of elements -// coeffs cannot be shared between vectors -typedef struct SwsVector { - double *coeff; ///< pointer to the list of coefficients - int length; ///< number of coefficients in the vector -} SwsVector; - -// vectors can be shared -typedef struct SwsFilter { - SwsVector *lumH; - SwsVector *lumV; - SwsVector *chrH; - SwsVector *chrV; -} SwsFilter; - -struct SwsContext; - -/** - * Return a positive value if pix_fmt is a supported input format, 0 - * otherwise. - */ -int sws_isSupportedInput(enum AVPixelFormat pix_fmt); - -/** - * Return a positive value if pix_fmt is a supported output format, 0 - * otherwise. - */ -int sws_isSupportedOutput(enum AVPixelFormat pix_fmt); - -/** - * @param[in] pix_fmt the pixel format - * @return a positive value if an endianness conversion for pix_fmt is - * supported, 0 otherwise. - */ -int sws_isSupportedEndiannessConversion(enum AVPixelFormat pix_fmt); - -/** - * Allocate an empty SwsContext. This must be filled and passed to - * sws_init_context(). For filling see AVOptions, options.c and - * sws_setColorspaceDetails(). - */ -struct SwsContext *sws_alloc_context(void); - -/** - * Initialize the swscaler context sws_context. - * - * @return zero or positive value on success, a negative value on - * error - */ -av_warn_unused_result -int sws_init_context(struct SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter); - -/** - * Free the swscaler context swsContext. - * If swsContext is NULL, then does nothing. - */ -void sws_freeContext(struct SwsContext *swsContext); - -/** - * Allocate and return an SwsContext. You need it to perform - * scaling/conversion operations using sws_scale(). - * - * @param srcW the width of the source image - * @param srcH the height of the source image - * @param srcFormat the source image format - * @param dstW the width of the destination image - * @param dstH the height of the destination image - * @param dstFormat the destination image format - * @param flags specify which algorithm and options to use for rescaling - * @param param extra parameters to tune the used scaler - * For SWS_BICUBIC param[0] and [1] tune the shape of the basis - * function, param[0] tunes f(1) and param[1] f´(1) - * For SWS_GAUSS param[0] tunes the exponent and thus cutoff - * frequency - * For SWS_LANCZOS param[0] tunes the width of the window function - * @return a pointer to an allocated context, or NULL in case of error - * @note this function is to be removed after a saner alternative is - * written - */ -struct SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat, - int dstW, int dstH, enum AVPixelFormat dstFormat, - int flags, SwsFilter *srcFilter, - SwsFilter *dstFilter, const double *param); - -/** - * Scale the image slice in srcSlice and put the resulting scaled - * slice in the image in dst. A slice is a sequence of consecutive - * rows in an image. - * - * Slices have to be provided in sequential order, either in - * top-bottom or bottom-top order. If slices are provided in - * non-sequential order the behavior of the function is undefined. - * - * @param c the scaling context previously created with - * sws_getContext() - * @param srcSlice the array containing the pointers to the planes of - * the source slice - * @param srcStride the array containing the strides for each plane of - * the source image - * @param srcSliceY the position in the source image of the slice to - * process, that is the number (counted starting from - * zero) in the image of the first row of the slice - * @param srcSliceH the height of the source slice, that is the number - * of rows in the slice - * @param dst the array containing the pointers to the planes of - * the destination image - * @param dstStride the array containing the strides for each plane of - * the destination image - * @return the height of the output slice - */ -int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], - const int srcStride[], int srcSliceY, int srcSliceH, - uint8_t *const dst[], const int dstStride[]); - -/** - * @param dstRange flag indicating the while-black range of the output (1=jpeg / 0=mpeg) - * @param srcRange flag indicating the while-black range of the input (1=jpeg / 0=mpeg) - * @param table the yuv2rgb coefficients describing the output yuv space, normally ff_yuv2rgb_coeffs[x] - * @param inv_table the yuv2rgb coefficients describing the input yuv space, normally ff_yuv2rgb_coeffs[x] - * @param brightness 16.16 fixed point brightness correction - * @param contrast 16.16 fixed point contrast correction - * @param saturation 16.16 fixed point saturation correction - * @return -1 if not supported - */ -int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], - int srcRange, const int table[4], int dstRange, - int brightness, int contrast, int saturation); - -/** - * @return -1 if not supported - */ -int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, - int *srcRange, int **table, int *dstRange, - int *brightness, int *contrast, int *saturation); - -/** - * Allocate and return an uninitialized vector with length coefficients. - */ -SwsVector *sws_allocVec(int length); - -/** - * Return a normalized Gaussian curve used to filter stuff - * quality = 3 is high quality, lower is lower quality. - */ -SwsVector *sws_getGaussianVec(double variance, double quality); - -/** - * Scale all the coefficients of a by the scalar value. - */ -void sws_scaleVec(SwsVector *a, double scalar); - -/** - * Scale all the coefficients of a so that their sum equals height. - */ -void sws_normalizeVec(SwsVector *a, double height); - -#if FF_API_SWS_VECTOR -attribute_deprecated SwsVector *sws_getConstVec(double c, int length); -attribute_deprecated SwsVector *sws_getIdentityVec(void); -attribute_deprecated void sws_convVec(SwsVector *a, SwsVector *b); -attribute_deprecated void sws_addVec(SwsVector *a, SwsVector *b); -attribute_deprecated void sws_subVec(SwsVector *a, SwsVector *b); -attribute_deprecated void sws_shiftVec(SwsVector *a, int shift); -attribute_deprecated SwsVector *sws_cloneVec(SwsVector *a); -attribute_deprecated void sws_printVec2(SwsVector *a, AVClass *log_ctx, int log_level); -#endif - -void sws_freeVec(SwsVector *a); - -SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, - float lumaSharpen, float chromaSharpen, - float chromaHShift, float chromaVShift, - int verbose); -void sws_freeFilter(SwsFilter *filter); - -/** - * Check if context can be reused, otherwise reallocate a new one. - * - * If context is NULL, just calls sws_getContext() to get a new - * context. Otherwise, checks if the parameters are the ones already - * saved in context. If that is the case, returns the current - * context. Otherwise, frees context and gets a new context with - * the new parameters. - * - * Be warned that srcFilter and dstFilter are not checked, they - * are assumed to remain the same. - */ -struct SwsContext *sws_getCachedContext(struct SwsContext *context, - int srcW, int srcH, enum AVPixelFormat srcFormat, - int dstW, int dstH, enum AVPixelFormat dstFormat, - int flags, SwsFilter *srcFilter, - SwsFilter *dstFilter, const double *param); - -/** - * Convert an 8-bit paletted frame into a frame with a color depth of 32 bits. - * - * The output frame will have the same packed format as the palette. - * - * @param src source frame buffer - * @param dst destination frame buffer - * @param num_pixels number of pixels to convert - * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src - */ -void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); - -/** - * Convert an 8-bit paletted frame into a frame with a color depth of 24 bits. - * - * With the palette format "ABCD", the destination frame ends up with the format "ABC". - * - * @param src source frame buffer - * @param dst destination frame buffer - * @param num_pixels number of pixels to convert - * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src - */ -void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); - -/** - * Get the AVClass for swsContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *sws_get_class(void); - -/** - * @} - */ - -#endif /* SWSCALE_SWSCALE_H */ diff --git a/prebuilts/aarch64/include/libswscale/version.h b/prebuilts/aarch64/include/libswscale/version.h deleted file mode 100644 index bc61201..0000000 --- a/prebuilts/aarch64/include/libswscale/version.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_VERSION_H -#define SWSCALE_VERSION_H - -/** - * @file - * swscale version macros - */ - -#include "libavutil/version.h" - -#define LIBSWSCALE_VERSION_MAJOR 5 -#define LIBSWSCALE_VERSION_MINOR 9 -#define LIBSWSCALE_VERSION_MICRO 100 - -#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_VERSION AV_VERSION(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_BUILD LIBSWSCALE_VERSION_INT - -#define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ - -#ifndef FF_API_SWS_VECTOR -#define FF_API_SWS_VECTOR (LIBSWSCALE_VERSION_MAJOR < 6) -#endif - -#endif /* SWSCALE_VERSION_H */ diff --git a/prebuilts/aarch64/include/va/va.h b/prebuilts/aarch64/include/va/va.h deleted file mode 100644 index 957dc53..0000000 --- a/prebuilts/aarch64/include/va/va.h +++ /dev/null @@ -1,5269 +0,0 @@ -/* - * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -/* - * Video Acceleration (VA) API Specification - * - * Rev. 0.30 - * - * - * Revision History: - * rev 0.10 (12/10/2006 Jonathan Bian) - Initial draft - * rev 0.11 (12/15/2006 Jonathan Bian) - Fixed some errors - * rev 0.12 (02/05/2007 Jonathan Bian) - Added VC-1 data structures for slice level decode - * rev 0.13 (02/28/2007 Jonathan Bian) - Added GetDisplay() - * rev 0.14 (04/13/2007 Jonathan Bian) - Fixed MPEG-2 PictureParameter structure, cleaned up a few funcs. - * rev 0.15 (04/20/2007 Jonathan Bian) - Overhauled buffer management - * rev 0.16 (05/02/2007 Jonathan Bian) - Added error codes and fixed some issues with configuration - * rev 0.17 (05/07/2007 Jonathan Bian) - Added H.264/AVC data structures for slice level decode. - * rev 0.18 (05/14/2007 Jonathan Bian) - Added data structures for MPEG-4 slice level decode - * and MPEG-2 motion compensation. - * rev 0.19 (08/06/2007 Jonathan Bian) - Removed extra type for bitplane data. - * rev 0.20 (08/08/2007 Jonathan Bian) - Added missing fields to VC-1 PictureParameter structure. - * rev 0.21 (08/20/2007 Jonathan Bian) - Added image and subpicture support. - * rev 0.22 (08/27/2007 Jonathan Bian) - Added support for chroma-keying and global alpha. - * rev 0.23 (09/11/2007 Jonathan Bian) - Fixed some issues with images and subpictures. - * rev 0.24 (09/18/2007 Jonathan Bian) - Added display attributes. - * rev 0.25 (10/18/2007 Jonathan Bian) - Changed to use IDs only for some types. - * rev 0.26 (11/07/2007 Waldo Bastian) - Change vaCreateBuffer semantics - * rev 0.27 (11/19/2007 Matt Sottek) - Added DeriveImage - * rev 0.28 (12/06/2007 Jonathan Bian) - Added new versions of PutImage and AssociateSubpicture - * to enable scaling - * rev 0.29 (02/07/2008 Jonathan Bian) - VC1 parameter fixes, - * added VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED - * rev 0.30 (03/01/2009 Jonathan Bian) - Added encoding support for H.264 BP and MPEG-4 SP and fixes - * for ISO C conformance. - * rev 0.31 (09/02/2009 Gwenole Beauchesne) - VC-1/H264 fields change for VDPAU and XvBA backend - * Application needs to relink with the new library. - * - * rev 0.31.1 (03/29/2009) - Data structure for JPEG encode - * rev 0.31.2 (01/13/2011 Anthony Pabon)- Added a flag to indicate Subpicture coordinates are screen - * screen relative rather than source video relative. - * rev 0.32.0 (01/13/2011 Xiang Haihao) - Add profile into VAPictureParameterBufferVC1 - * update VAAPI to 0.32.0 - * - * Acknowledgements: - * Some concepts borrowed from XvMC and XvImage. - * Waldo Bastian (Intel), Matt Sottek (Intel), Austin Yuan (Intel), and Gwenole Beauchesne (SDS) - * contributed to various aspects of the API. - */ - -/** - * \file va.h - * \brief The Core API - * - * This file contains the \ref api_core "Core API". - */ - -#ifndef _VA_H_ -#define _VA_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(__GNUC__) && !defined(__COVERITY__) -#define va_deprecated __attribute__((deprecated)) -#if __GNUC__ >= 6 -#define va_deprecated_enum va_deprecated -#else -#define va_deprecated_enum -#endif -#else -#define va_deprecated -#define va_deprecated_enum -#endif - -/** - * \mainpage Video Acceleration (VA) API - * - * \section intro Introduction - * - * The main motivation for VA-API (Video Acceleration API) is to - * enable hardware accelerated video decode and encode at various - * entry-points (VLD, IDCT, Motion Compensation etc.) for the - * prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 - * AVC/H.264, VC-1/VMW3, and JPEG, HEVC/H265, VP8, VP9) and video pre/post - * processing - * - * VA-API is split into several modules: - * - \ref api_core - * - Encoder (H264, HEVC, JPEG, MPEG2, VP8, VP9) - * - \ref api_enc_h264 - * - \ref api_enc_hevc - * - \ref api_enc_jpeg - * - \ref api_enc_mpeg2 - * - \ref api_enc_vp8 - * - \ref api_enc_vp9 - * - \ref api_enc_av1 - * - Decoder (HEVC, JPEG, VP8, VP9, AV1) - * - \ref api_dec_hevc - * - \ref api_dec_jpeg - * - \ref api_dec_vp8 - * - \ref api_dec_vp9 - * - \ref api_dec_av1 - * - \ref api_vpp - * - \ref api_prot - * - FEI (H264, HEVC) - * - \ref api_fei - * - \ref api_fei_h264 - * - \ref api_fei_hevc - * - * \section threading Multithreading Guide - * All VAAPI functions implemented in libva are thread-safe. For any VAAPI - * function that requires the implementation of a backend (e.g. hardware driver), - * the backend must ensure that its implementation is also thread-safe. If the - * backend implementation of a VAAPI function is not thread-safe then this should - * be considered as a bug against the backend implementation. - * - * It is assumed that none of the VAAPI functions will be called from signal - * handlers. - * - * Thread-safety in this context means that when VAAPI is being called by multiple - * concurrent threads, it will not crash or hang the OS, and VAAPI internal - * data structures will not be corrupted. When multiple threads are operating on - * the same VAAPI objects, it is the application's responsibility to synchronize - * these operations in order to generate the expected results. For example, using - * a single VAContext from multiple threads may generate unexpected results. - * - * Following pseudo code illustrates a multithreaded transcoding scenario, where - * one thread is handling the decoding operation and another thread is handling - * the encoding operation, while synchronizing the use of a common pool of - * surfaces. - * - * \code - * // Initialization - * dpy = vaGetDisplayDRM(fd); - * vaInitialize(dpy, ...); - * - * // Create surfaces required for decoding and subsequence encoding - * vaCreateSurfaces(dpy, VA_RT_FORMAT_YUV420, width, height, &surfaces[0], ...); - * - * // Set up a queue for the surfaces shared between decode and encode threads - * surface_queue = queue_create(); - * - * // Create decode_thread - * pthread_create(&decode_thread, NULL, decode, ...); - * - * // Create encode_thread - * pthread_create(&encode_thread, NULL, encode, ...); - * - * // Decode thread function - * decode() { - * // Find the decode entrypoint for H.264 - * vaQueryConfigEntrypoints(dpy, h264_profile, entrypoints, ...); - * - * // Create a config for H.264 decode - * vaCreateConfig(dpy, h264_profile, VAEntrypointVLD, ...); - * - * // Create a context for decode - * vaCreateContext(dpy, config, width, height, VA_PROGRESSIVE, surfaces, - * num_surfaces, &decode_context); - * - * // Decode frames in the bitstream - * for (;;) { - * // Parse one frame and decode - * vaBeginPicture(dpy, decode_context, surfaces[surface_index]); - * vaRenderPicture(dpy, decode_context, buf, ...); - * vaEndPicture(dpy, decode_context); - * // Poll the decoding status and enqueue the surface in display order after - * // decoding is complete - * vaQuerySurfaceStatus(); - * enqueue(surface_queue, surface_index); - * } - * } - * - * // Encode thread function - * encode() { - * // Find the encode entrypoint for HEVC - * vaQueryConfigEntrypoints(dpy, hevc_profile, entrypoints, ...); - * - * // Create a config for HEVC encode - * vaCreateConfig(dpy, hevc_profile, VAEntrypointEncSlice, ...); - * - * // Create a context for encode - * vaCreateContext(dpy, config, width, height, VA_PROGRESSIVE, surfaces, - * num_surfaces, &encode_context); - * - * // Encode frames produced by the decoder - * for (;;) { - * // Dequeue the surface enqueued by the decoder - * surface_index = dequeue(surface_queue); - * // Encode using this surface as the source - * vaBeginPicture(dpy, encode_context, surfaces[surface_index]); - * vaRenderPicture(dpy, encode_context, buf, ...); - * vaEndPicture(dpy, encode_context); - * } - * } - * \endcode - */ - -/** - * \defgroup api_core Core API - * - * @{ - */ - -/** -Overview - -The VA API is intended to provide an interface between a video decode/encode/processing -application (client) and a hardware accelerator (server), to off-load -video decode/encode/processing operations from the host to the hardware accelerator at various -entry-points. - -The basic operation steps are: - -- Negotiate a mutually acceptable configuration with the server to lock - down profile, entrypoints, and other attributes that will not change on - a frame-by-frame basis. -- Create a video decode, encode or processing context which represents a - "virtualized" hardware device -- Get and fill the render buffers with the corresponding data (depending on - profiles and entrypoints) -- Pass the render buffers to the server to handle the current frame - -Initialization & Configuration Management - -- Find out supported profiles -- Find out entrypoints for a given profile -- Find out configuration attributes for a given profile/entrypoint pair -- Create a configuration for use by the application - -*/ - -typedef void* VADisplay; /* window system dependent */ - -typedef int VAStatus; /** Return status type from functions */ -/** Values for the return status */ -#define VA_STATUS_SUCCESS 0x00000000 -#define VA_STATUS_ERROR_OPERATION_FAILED 0x00000001 -#define VA_STATUS_ERROR_ALLOCATION_FAILED 0x00000002 -#define VA_STATUS_ERROR_INVALID_DISPLAY 0x00000003 -#define VA_STATUS_ERROR_INVALID_CONFIG 0x00000004 -#define VA_STATUS_ERROR_INVALID_CONTEXT 0x00000005 -#define VA_STATUS_ERROR_INVALID_SURFACE 0x00000006 -#define VA_STATUS_ERROR_INVALID_BUFFER 0x00000007 -#define VA_STATUS_ERROR_INVALID_IMAGE 0x00000008 -#define VA_STATUS_ERROR_INVALID_SUBPICTURE 0x00000009 -#define VA_STATUS_ERROR_ATTR_NOT_SUPPORTED 0x0000000a -#define VA_STATUS_ERROR_MAX_NUM_EXCEEDED 0x0000000b -#define VA_STATUS_ERROR_UNSUPPORTED_PROFILE 0x0000000c -#define VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT 0x0000000d -#define VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT 0x0000000e -#define VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE 0x0000000f -#define VA_STATUS_ERROR_SURFACE_BUSY 0x00000010 -#define VA_STATUS_ERROR_FLAG_NOT_SUPPORTED 0x00000011 -#define VA_STATUS_ERROR_INVALID_PARAMETER 0x00000012 -#define VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 0x00000013 -#define VA_STATUS_ERROR_UNIMPLEMENTED 0x00000014 -#define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING 0x00000015 -#define VA_STATUS_ERROR_INVALID_IMAGE_FORMAT 0x00000016 -#define VA_STATUS_ERROR_DECODING_ERROR 0x00000017 -#define VA_STATUS_ERROR_ENCODING_ERROR 0x00000018 -/** - * \brief An invalid/unsupported value was supplied. - * - * This is a catch-all error code for invalid or unsupported values. - * e.g. value exceeding the valid range, invalid type in the context - * of generic attribute values. - */ -#define VA_STATUS_ERROR_INVALID_VALUE 0x00000019 -/** \brief An unsupported filter was supplied. */ -#define VA_STATUS_ERROR_UNSUPPORTED_FILTER 0x00000020 -/** \brief An invalid filter chain was supplied. */ -#define VA_STATUS_ERROR_INVALID_FILTER_CHAIN 0x00000021 -/** \brief Indicate HW busy (e.g. run multiple encoding simultaneously). */ -#define VA_STATUS_ERROR_HW_BUSY 0x00000022 -/** \brief An unsupported memory type was supplied. */ -#define VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE 0x00000024 -/** \brief Indicate allocated buffer size is not enough for input or output. */ -#define VA_STATUS_ERROR_NOT_ENOUGH_BUFFER 0x00000025 -/** \brief Indicate an operation isn't completed because time-out interval elapsed. */ -#define VA_STATUS_ERROR_TIMEDOUT 0x00000026 -#define VA_STATUS_ERROR_UNKNOWN 0xFFFFFFFF - -/** - * 1. De-interlacing flags for vaPutSurface() - * 2. Surface sample type for input/output surface flag - * - Progressive: VA_FRAME_PICTURE - * - Interleaved: VA_TOP_FIELD_FIRST, VA_BOTTOM_FIELD_FIRST - * - Field: VA_TOP_FIELD, VA_BOTTOM_FIELD -*/ -#define VA_FRAME_PICTURE 0x00000000 -#define VA_TOP_FIELD 0x00000001 -#define VA_BOTTOM_FIELD 0x00000002 -#define VA_TOP_FIELD_FIRST 0x00000004 -#define VA_BOTTOM_FIELD_FIRST 0x00000008 - -/** - * Enabled the positioning/cropping/blending feature: - * 1, specify the video playback position in the isurface - * 2, specify the cropping info for video playback - * 3, encoded video will blend with background color - */ -#define VA_ENABLE_BLEND 0x00000004 /* video area blend with the constant color */ - -/** - * Clears the drawable with background color. - * for hardware overlay based implementation this flag - * can be used to turn off the overlay - */ -#define VA_CLEAR_DRAWABLE 0x00000008 - -/** Color space conversion flags for vaPutSurface() */ -#define VA_SRC_COLOR_MASK 0x000000f0 -#define VA_SRC_BT601 0x00000010 -#define VA_SRC_BT709 0x00000020 -#define VA_SRC_SMPTE_240 0x00000040 - -/** Scaling flags for vaPutSurface() */ -#define VA_FILTER_SCALING_DEFAULT 0x00000000 -#define VA_FILTER_SCALING_FAST 0x00000100 -#define VA_FILTER_SCALING_HQ 0x00000200 -#define VA_FILTER_SCALING_NL_ANAMORPHIC 0x00000300 -#define VA_FILTER_SCALING_MASK 0x00000f00 - -/** Interpolation method for scaling */ -#define VA_FILTER_INTERPOLATION_DEFAULT 0x00000000 -#define VA_FILTER_INTERPOLATION_NEAREST_NEIGHBOR 0x00001000 -#define VA_FILTER_INTERPOLATION_BILINEAR 0x00002000 -#define VA_FILTER_INTERPOLATION_ADVANCED 0x00003000 -#define VA_FILTER_INTERPOLATION_MASK 0x0000f000 - -/** Padding size in 4-bytes */ -#define VA_PADDING_LOW 4 -#define VA_PADDING_MEDIUM 8 -#define VA_PADDING_HIGH 16 -#define VA_PADDING_LARGE 32 - -/** operation options */ -/** synchronization, block call, output should be ready after execution function return*/ -#define VA_EXEC_SYNC 0x0 -/** asynchronization,application should call additonal sync operation to access output */ -#define VA_EXEC_ASYNC 0x1 - -/** operation mode */ -#define VA_EXEC_MODE_DEFAULT 0x0 -#define VA_EXEC_MODE_POWER_SAVING 0x1 -#define VA_EXEC_MODE_PERFORMANCE 0x2 - -/* Values used to describe device features. */ -/** The feature is not supported by the device. - * - * Any corresponding feature flag must not be set. - */ -#define VA_FEATURE_NOT_SUPPORTED 0 -/** The feature is supported by the device. - * - * The user may decide whether or not to use this feature. - * - * Note that support for a feature only indicates that the hardware - * is able to use it; whether it is actually a positive change to - * enable it in a given situation will depend on other factors - * including the input provided by the user. - */ -#define VA_FEATURE_SUPPORTED 1 -/** The feature is required by the device. - * - * The device does not support not enabling this feature, so any - * corresponding feature flag must be set and any additional - * configuration needed by the feature must be supplied. - */ -#define VA_FEATURE_REQUIRED 2 - -/** - * Returns a short english description of error_status - */ -const char *vaErrorStr(VAStatus error_status); - -typedef struct _VARectangle { - int16_t x; - int16_t y; - uint16_t width; - uint16_t height; -} VARectangle; - -/** \brief Generic motion vector data structure. */ -typedef struct _VAMotionVector { - /** \mv0[0]: horizontal motion vector for past reference */ - /** \mv0[1]: vertical motion vector for past reference */ - /** \mv1[0]: horizontal motion vector for future reference */ - /** \mv1[1]: vertical motion vector for future reference */ - int16_t mv0[2]; /* past reference */ - int16_t mv1[2]; /* future reference */ -} VAMotionVector; - -/** Type of a message callback, used for both error and info log. */ -typedef void (*VAMessageCallback)(void *user_context, const char *message); - -/** - * Set the callback for error messages, or NULL for no logging. - * Returns the previous one, or NULL if it was disabled. - */ -VAMessageCallback vaSetErrorCallback(VADisplay dpy, VAMessageCallback callback, void *user_context); - -/** - * Set the callback for info messages, or NULL for no logging. - * Returns the previous one, or NULL if it was disabled. - */ -VAMessageCallback vaSetInfoCallback(VADisplay dpy, VAMessageCallback callback, void *user_context); - -/** - * Initialization: - * A display must be obtained by calling vaGetDisplay() before calling - * vaInitialize() and other functions. This connects the API to the - * native window system. - * For X Windows, native_dpy would be from XOpenDisplay() - */ -typedef void* VANativeDisplay; /* window system dependent */ - -int vaDisplayIsValid(VADisplay dpy); - -/** - * Set the override driver name instead of queried driver driver. - */ -VAStatus vaSetDriverName(VADisplay dpy, - char *driver_name - ); - -/** - * Initialize the library - */ -VAStatus vaInitialize( - VADisplay dpy, - int *major_version, /* out */ - int *minor_version /* out */ -); - -/** - * After this call, all library internal resources will be cleaned up - */ -VAStatus vaTerminate( - VADisplay dpy -); - -/** - * vaQueryVendorString returns a pointer to a zero-terminated string - * describing some aspects of the VA implemenation on a specific - * hardware accelerator. The format of the returned string is vendor - * specific and at the discretion of the implementer. - * e.g. for the Intel GMA500 implementation, an example would be: - * "Intel GMA500 - 2.0.0.32L.0005" - */ -const char *vaQueryVendorString( - VADisplay dpy -); - -typedef int (*VAPrivFunc)(void); - -/** - * Return a function pointer given a function name in the library. - * This allows private interfaces into the library - */ -VAPrivFunc vaGetLibFunc( - VADisplay dpy, - const char *func -); - -/** Currently defined profiles */ -typedef enum { - /** \brief Profile ID used for video processing. */ - VAProfileNone = -1, - VAProfileMPEG2Simple = 0, - VAProfileMPEG2Main = 1, - VAProfileMPEG4Simple = 2, - VAProfileMPEG4AdvancedSimple = 3, - VAProfileMPEG4Main = 4, - VAProfileH264Baseline va_deprecated_enum = 5, - VAProfileH264Main = 6, - VAProfileH264High = 7, - VAProfileVC1Simple = 8, - VAProfileVC1Main = 9, - VAProfileVC1Advanced = 10, - VAProfileH263Baseline = 11, - VAProfileJPEGBaseline = 12, - VAProfileH264ConstrainedBaseline = 13, - VAProfileVP8Version0_3 = 14, - VAProfileH264MultiviewHigh = 15, - VAProfileH264StereoHigh = 16, - VAProfileHEVCMain = 17, - VAProfileHEVCMain10 = 18, - VAProfileVP9Profile0 = 19, - VAProfileVP9Profile1 = 20, - VAProfileVP9Profile2 = 21, - VAProfileVP9Profile3 = 22, - VAProfileHEVCMain12 = 23, - VAProfileHEVCMain422_10 = 24, - VAProfileHEVCMain422_12 = 25, - VAProfileHEVCMain444 = 26, - VAProfileHEVCMain444_10 = 27, - VAProfileHEVCMain444_12 = 28, - VAProfileHEVCSccMain = 29, - VAProfileHEVCSccMain10 = 30, - VAProfileHEVCSccMain444 = 31, - VAProfileAV1Profile0 = 32, - VAProfileAV1Profile1 = 33, - VAProfileHEVCSccMain444_10 = 34, - /** \brief Profile ID used for protected video playback. */ - VAProfileProtected = 35 -} VAProfile; - -/** - * Currently defined entrypoints - */ -typedef enum { - VAEntrypointVLD = 1, - VAEntrypointIZZ = 2, - VAEntrypointIDCT = 3, - VAEntrypointMoComp = 4, - VAEntrypointDeblocking = 5, - VAEntrypointEncSlice = 6, /* slice level encode */ - VAEntrypointEncPicture = 7, /* pictuer encode, JPEG, etc */ - /* - * For an implementation that supports a low power/high performance variant - * for slice level encode, it can choose to expose the - * VAEntrypointEncSliceLP entrypoint. Certain encoding tools may not be - * available with this entrypoint (e.g. interlace, MBAFF) and the - * application can query the encoding configuration attributes to find - * out more details if this entrypoint is supported. - */ - VAEntrypointEncSliceLP = 8, - VAEntrypointVideoProc = 10, /**< Video pre/post-processing. */ - /** - * \brief VAEntrypointFEI - * - * The purpose of FEI (Flexible Encoding Infrastructure) is to allow applications to - * have more controls and trade off quality for speed with their own IPs. - * The application can optionally provide input to ENC for extra encode control - * and get the output from ENC. Application can chose to modify the ENC - * output/PAK input during encoding, but the performance impact is significant. - * - * On top of the existing buffers for normal encode, there will be - * one extra input buffer (VAEncMiscParameterFEIFrameControl) and - * three extra output buffers (VAEncFEIMVBufferType, VAEncFEIMBModeBufferType - * and VAEncFEIDistortionBufferType) for VAEntrypointFEI entry function. - * If separate PAK is set, two extra input buffers - * (VAEncFEIMVBufferType, VAEncFEIMBModeBufferType) are needed for PAK input. - **/ - VAEntrypointFEI = 11, - /** - * \brief VAEntrypointStats - * - * A pre-processing function for getting some statistics and motion vectors is added, - * and some extra controls for Encode pipeline are provided. The application can - * optionally call the statistics function to get motion vectors and statistics like - * variances, distortions before calling Encode function via this entry point. - * - * Checking whether Statistics is supported can be performed with vaQueryConfigEntrypoints(). - * If Statistics entry point is supported, then the list of returned entry-points will - * include #VAEntrypointStats. Supported pixel format, maximum resolution and statistics - * specific attributes can be obtained via normal attribute query. One input buffer - * (VAStatsStatisticsParameterBufferType) and one or two output buffers - * (VAStatsStatisticsBufferType, VAStatsStatisticsBottomFieldBufferType (for interlace only) - * and VAStatsMVBufferType) are needed for this entry point. - **/ - VAEntrypointStats = 12, - /** - * \brief VAEntrypointProtectedTEEComm - * - * A function for communicating with TEE (Trusted Execution Environment). - **/ - VAEntrypointProtectedTEEComm = 13, - /** - * \brief VAEntrypointProtectedContent - * - * A function for protected content to decrypt encrypted content. - **/ - VAEntrypointProtectedContent = 14, -} VAEntrypoint; - -/** Currently defined configuration attribute types */ -typedef enum { - VAConfigAttribRTFormat = 0, - VAConfigAttribSpatialResidual = 1, - VAConfigAttribSpatialClipping = 2, - VAConfigAttribIntraResidual = 3, - VAConfigAttribEncryption = 4, - VAConfigAttribRateControl = 5, - - /** @name Attributes for decoding */ - /**@{*/ - /** - * \brief Slice Decoding mode. Read/write. - * - * This attribute determines what mode the driver supports for slice - * decoding, through vaGetConfigAttributes(); and what mode the user - * will be providing to the driver, through vaCreateConfig(), if the - * driver supports those. If this attribute is not set by the user then - * it is assumed that VA_DEC_SLICE_MODE_NORMAL mode is used. - * - * See \c VA_DEC_SLICE_MODE_xxx for the list of slice decoding modes. - */ - VAConfigAttribDecSliceMode = 6, - /** - * \brief JPEG decoding attribute. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * JPEG implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValDecJPEG union. - */ - VAConfigAttribDecJPEG = 7, - /** - * \brief Decode processing support. Read/write. - * - * This attribute determines if the driver supports video processing - * with decoding using the decoding context in a single call, through - * vaGetConfigAttributes(); and if the user may use this feature, - * through vaCreateConfig(), if the driver supports the user scenario. - * The user will essentially create a regular decode VAContext. Therefore, - * the parameters of vaCreateContext() such as picture_width, picture_height - * and render_targets are in relation to the decode output parameters - * (not processing output parameters) as normal. - * If this attribute is not set by the user then it is assumed that no - * extra processing is done after decoding for this decode context. - * - * Since essentially the application is creating a decoder config and context, - * all function calls that take in the config (e.g. vaQuerySurfaceAttributes()) - * or context are in relation to the decoder, except those video processing - * function specified in the next paragraph. - * - * Once the decode config and context are created, the user must further - * query the supported processing filters using vaQueryVideoProcFilters(), - * vaQueryVideoProcFilterCaps(), vaQueryVideoProcPipelineCaps() by specifying - * the created decode context. The user must provide processing information - * and extra processing output surfaces as "additional_outputs" to the driver - * through VAProcPipelineParameterBufferType. The render_target specified - * at vaBeginPicture() time refers to the decode output surface. The - * target surface for the output of processing needs to be a different - * surface since the decode process requires the original reconstructed buffer. - * The “surface” member of VAProcPipelineParameterBuffer should be set to the - * same as “render_target” set in vaBeginPicture(), but the driver may choose - * to ignore this parameter. - */ - VAConfigAttribDecProcessing = 8, - /** @name Attributes for encoding */ - /**@{*/ - /** - * \brief Packed headers mode. Read/write. - * - * This attribute determines what packed headers the driver supports, - * through vaGetConfigAttributes(); and what packed headers the user - * will be providing to the driver, through vaCreateConfig(), if the - * driver supports those. - * - * See \c VA_ENC_PACKED_HEADER_xxx for the list of packed headers. - */ - VAConfigAttribEncPackedHeaders = 10, - /** - * \brief Interlaced mode. Read/write. - * - * This attribute determines what kind of interlaced encoding mode - * the driver supports. - * - * See \c VA_ENC_INTERLACED_xxx for the list of interlaced modes. - */ - VAConfigAttribEncInterlaced = 11, - /** - * \brief Maximum number of reference frames. Read-only. - * - * This attribute determines the maximum number of reference - * frames supported for encoding. - * - * Note: for H.264 encoding, the value represents the maximum number - * of reference frames for both the reference picture list 0 (bottom - * 16 bits) and the reference picture list 1 (top 16 bits). - */ - VAConfigAttribEncMaxRefFrames = 13, - /** - * \brief Maximum number of slices per frame. Read-only. - * - * This attribute determines the maximum number of slices the - * driver can support to encode a single frame. - */ - VAConfigAttribEncMaxSlices = 14, - /** - * \brief Slice structure. Read-only. - * - * This attribute determines slice structures supported by the - * driver for encoding. This attribute is a hint to the user so - * that he can choose a suitable surface size and how to arrange - * the encoding process of multiple slices per frame. - * - * More specifically, for H.264 encoding, this attribute - * determines the range of accepted values to - * VAEncSliceParameterBufferH264::macroblock_address and - * VAEncSliceParameterBufferH264::num_macroblocks. - * - * See \c VA_ENC_SLICE_STRUCTURE_xxx for the supported slice - * structure types. - */ - VAConfigAttribEncSliceStructure = 15, - /** - * \brief Macroblock information. Read-only. - * - * This attribute determines whether the driver supports extra - * encoding information per-macroblock. e.g. QP. - * - * More specifically, for H.264 encoding, if the driver returns a non-zero - * value for this attribute, this means the application can create - * additional #VAEncMacroblockParameterBufferH264 buffers referenced - * through VAEncSliceParameterBufferH264::macroblock_info. - */ - VAConfigAttribEncMacroblockInfo = 16, - /** - * \brief Maximum picture width. Read-only. - * - * This attribute determines the maximum picture width the driver supports - * for a given configuration. - */ - VAConfigAttribMaxPictureWidth = 18, - /** - * \brief Maximum picture height. Read-only. - * - * This attribute determines the maximum picture height the driver supports - * for a given configuration. - */ - VAConfigAttribMaxPictureHeight = 19, - /** - * \brief JPEG encoding attribute. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * JPEG implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncJPEG union. - */ - VAConfigAttribEncJPEG = 20, - /** - * \brief Encoding quality range attribute. Read-only. - * - * This attribute conveys whether the driver supports different quality level settings - * for encoding. A value less than or equal to 1 means that the encoder only has a single - * quality setting, and a value greater than 1 represents the number of quality levels - * that can be configured. e.g. a value of 2 means there are two distinct quality levels. - */ - VAConfigAttribEncQualityRange = 21, - /** - * \brief Encoding quantization attribute. Read-only. - * - * This attribute conveys whether the driver supports certain types of quantization methods - * for encoding (e.g. trellis). See \c VA_ENC_QUANTIZATION_xxx for the list of quantization methods - */ - VAConfigAttribEncQuantization = 22, - /** - * \brief Encoding intra refresh attribute. Read-only. - * - * This attribute conveys whether the driver supports certain types of intra refresh methods - * for encoding (e.g. adaptive intra refresh or rolling intra refresh). - * See \c VA_ENC_INTRA_REFRESH_xxx for intra refresh methods - */ - VAConfigAttribEncIntraRefresh = 23, - /** - * \brief Encoding skip frame attribute. Read-only. - * - * This attribute conveys whether the driver supports sending skip frame parameters - * (VAEncMiscParameterTypeSkipFrame) to the encoder's rate control, when the user has - * externally skipped frames. - */ - VAConfigAttribEncSkipFrame = 24, - /** - * \brief Encoding region-of-interest (ROI) attribute. Read-only. - * - * This attribute conveys whether the driver supports region-of-interest (ROI) encoding, - * based on user provided ROI rectangles. The attribute value is partitioned into fields - * as defined in the VAConfigAttribValEncROI union. - * - * If ROI encoding is supported, the ROI information is passed to the driver using - * VAEncMiscParameterTypeROI. - */ - VAConfigAttribEncROI = 25, - /** - * \brief Encoding extended rate control attribute. Read-only. - * - * This attribute conveys whether the driver supports any extended rate control features - * The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncRateControlExt union. - */ - VAConfigAttribEncRateControlExt = 26, - /** - * \brief Processing rate reporting attribute. Read-only. - * - * This attribute conveys whether the driver supports reporting of - * encode/decode processing rate based on certain set of parameters - * (i.e. levels, I frame internvals) for a given configuration. - * If this is supported, vaQueryProcessingRate() can be used to get - * encode or decode processing rate. - * See \c VA_PROCESSING_RATE_xxx for encode/decode processing rate - */ - VAConfigAttribProcessingRate = 27, - /** - * \brief Encoding dirty rectangle. Read-only. - * - * This attribute conveys whether the driver supports dirty rectangle. - * encoding, based on user provided ROI rectangles which indicate the rectangular areas - * where the content has changed as compared to the previous picture. The regions of the - * picture that are not covered by dirty rect rectangles are assumed to have not changed - * compared to the previous picture. The encoder may do some optimizations based on - * this information. The attribute value returned indicates the number of regions that - * are supported. e.g. A value of 0 means dirty rect encoding is not supported. If dirty - * rect encoding is supported, the ROI information is passed to the driver using - * VAEncMiscParameterTypeDirtyRect. - */ - VAConfigAttribEncDirtyRect = 28, - /** - * \brief Parallel Rate Control (hierachical B) attribute. Read-only. - * - * This attribute conveys whether the encoder supports parallel rate control. - * It is a integer value 0 - unsupported, > 0 - maximum layer supported. - * This is the way when hireachical B frames are encoded, multiple independent B frames - * on the same layer may be processed at same time. If supported, app may enable it by - * setting enable_parallel_brc in VAEncMiscParameterRateControl,and the number of B frames - * per layer per GOP will be passed to driver through VAEncMiscParameterParallelRateControl - * structure.Currently three layers are defined. - */ - VAConfigAttribEncParallelRateControl = 29, - /** - * \brief Dynamic Scaling Attribute. Read-only. - * - * This attribute conveys whether encoder is capable to determine dynamic frame - * resolutions adaptive to bandwidth utilization and processing power, etc. - * It is a boolean value 0 - unsupported, 1 - supported. - * If it is supported,for VP9, suggested frame resolution can be retrieved from VACodedBufferVP9Status. - */ - VAConfigAttribEncDynamicScaling = 30, - /** - * \brief frame size tolerance support - * it indicates the tolerance of frame size - */ - VAConfigAttribFrameSizeToleranceSupport = 31, - /** - * \brief Encode function type for FEI. - * - * This attribute conveys whether the driver supports different function types for encode. - * It can be VA_FEI_FUNCTION_ENC, VA_FEI_FUNCTION_PAK, or VA_FEI_FUNCTION_ENC_PAK. Currently - * it is for FEI entry point only. - * Default is VA_FEI_FUNCTION_ENC_PAK. - */ - VAConfigAttribFEIFunctionType = 32, - /** - * \brief Maximum number of FEI MV predictors. Read-only. - * - * This attribute determines the maximum number of MV predictors the driver - * can support to encode a single frame. 0 means no MV predictor is supported. - * Currently it is for FEI entry point only. - */ - VAConfigAttribFEIMVPredictors = 33, - /** - * \brief Statistics attribute. Read-only. - * - * This attribute exposes a number of capabilities of the VAEntrypointStats entry - * point. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValStats union. Currently it is for VAEntrypointStats only. - */ - VAConfigAttribStats = 34, - /** - * \brief Tile Support Attribute. Read-only. - * - * This attribute conveys whether encoder is capable to support tiles. - * If not supported, the tile related parameters sent to encoder, such as - * tiling structure, should be ignored. 0 - unsupported, 1 - supported. - */ - VAConfigAttribEncTileSupport = 35, - /** - * \brief whether accept rouding setting from application. Read-only. - * This attribute is for encode quality, if it is report, - * application can change the rounding setting by VAEncMiscParameterTypeCustomRoundingControl - */ - VAConfigAttribCustomRoundingControl = 36, - /** - * \brief Encoding QP info block size attribute. Read-only. - * This attribute conveys the block sizes that underlying driver - * support for QP info for buffer #VAEncQpBuffer. - */ - VAConfigAttribQPBlockSize = 37, - /** - * \brief encode max frame size attribute. Read-only - * attribute value \c VAConfigAttribValMaxFrameSize represent max frame size support - */ - VAConfigAttribMaxFrameSize = 38, - /** \brief inter frame prediction directrion attribute. Read-only. - * this attribute conveys the prediction direction (backward or forword) for specific config - * the value could be VA_PREDICTION_DIRECTION_XXXX. it can be combined with VAConfigAttribEncMaxRefFrames - * to describe reference list , and the prediction direction. if this attrib is not present,both direction - * should be supported, no restriction. - * for example: normal HEVC encoding , maximum reference frame number in reflist 0 and reflist 1 is deduced - * by VAConfigAttribEncMaxRefFrames. so there are typical P frame, B frame, - * if VAConfigAttribPredictionDirection is also present. it will stipulate prediction direction in both - * reference list. if only one prediction direction present(such as PREVIOUS),all reference frame should be - * previous frame (PoC < current). - */ - VAConfigAttribPredictionDirection = 39, - /** \brief combined submission of multiple frames from different streams, it is optimization for different HW - * implementation, multiple frames encode/decode can improve HW concurrency - */ - VAConfigAttribMultipleFrame = 40, - /** \brief priority setting for the context. Read-Write - * attribute value is \c VAConfigAttribValContextPriority - * this setting also could be update by \c VAContextParameterUpdateBuffer - */ - VAConfigAttribContextPriority = 41, - /** \brief AV1 decoding features. Read-only. - * - * This attribute describes the supported features of an - * AV1 decoder configuration. The value returned uses the - * VAConfigAttribValDecAV1Features type. - */ - VAConfigAttribDecAV1Features = 42, - /** \brief TEE could be any HW secure device. Read-only */ - VAConfigAttribTEEType = 43, - /** \brief TEE type client is a specific module supporting specific functions in TEE. Read-only*/ - VAConfigAttribTEETypeClient = 44, - /** - * \brief Cipher algorithm of the protected content session. - * - * This attribute specifies the cipher algorithm of the protected content session. It - * could be \c VA_PC_CIPHER_AES, etc.... - */ - VAConfigAttribProtectedContentCipherAlgorithm = 45, - /** - * \brief Cipher block size of the protected content session. - * - * This attribute specifies the block size of the protected content session. It could be - * \c VA_PC_BLOCK_SIZE_128, \c VA_PC_BLOCK_SIZE_192, or \c VA_PC_BLOCK_SIZE_256, etc.... - */ - VAConfigAttribProtectedContentCipherBlockSize = 46, - /** - * \brief Cipher mode of the protected content session. - * - * This attribute specifies the cipher mode of the protected content session. It could - * be \c VA_PC_CIPHER_MODE_ECB, \c VA_PC_CIPHER_MODE_CBC, \c VA_PC_CIPHER_MODE_CTR, etc... - */ - VAConfigAttribProtectedContentCipherMode = 47, - /** - * \brief Decryption sample type of the protected content session. - * - * This attribute specifies the decryption sample type of the protected content session. - * It could be \c VA_PC_SAMPLE_TYPE_FULLSAMPLE or \c VA_PC_SAMPLE_TYPE_SUBSAMPLE. - */ - VAConfigAttribProtectedContentCipherSampleType = 48, - /** - * \brief Special usage attribute of the protected session. - * - * The attribute specifies the flow for the protected session could be used. For - * example, it could be \c VA_PC_USAGE_DEFAULT, \c VA_PC_USAGE_WIDEVINE, etc.... - */ - VAConfigAttribProtectedContentUsage = 49, - - /** \brief HEVC/H.265 encoding features. Read-only. - * - * This attribute describes the supported features of an - * HEVC/H.265 encoder configuration. The value returned uses the - * VAConfigAttribValEncHEVCFeatures type. - * - * If this attribute is supported by a driver then it must also - * support the VAConfigAttribEncHEVCBlockSizes attribute. - */ - VAConfigAttribEncHEVCFeatures = 50, - /** \brief HEVC/H.265 encoding block sizes. Read-only. - * - * This attribute describes the supported coding tree and transform - * block sizes of an HEVC/H.265 encoder configuration. The value - * returned uses the VAConfigAttribValEncHEVCBlockSizes type. - * - * If this attribute is supported by a driver then it must also - * support the VAConfigAttribEncHEVCFeatures attribute. - */ - VAConfigAttribEncHEVCBlockSizes = 51, - /** - * \brief AV1 encoding attribute. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * AV1 implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncAV1 union. - */ - VAConfigAttribEncAV1 = 52, - /** - * \brief AV1 encoding attribute extend1. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * AV1 implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncAV1Ext1 union. - */ - VAConfigAttribEncAV1Ext1 = 53, - /** - * \brief AV1 encoding attribute extend2. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * AV1 implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncAV1Ext2 union. - */ - VAConfigAttribEncAV1Ext2 = 54, - /** \brief Settings per block attribute for Encoding. Read-only. - * - * This attribute describes whether to support delta qp per block, - * the supported size of delta qp block and the size of delta QP in bytes. - * The value returned uses the VAConfigAttribValEncPerBlockControl type. - */ - VAConfigAttribEncPerBlockControl = 55, - /**@}*/ - VAConfigAttribTypeMax -} VAConfigAttribType; - -/** - * Configuration attributes - * If there is more than one value for an attribute, a default - * value will be assigned to the attribute if the client does not - * specify the attribute when creating a configuration - */ -typedef struct _VAConfigAttrib { - VAConfigAttribType type; - uint32_t value; /* OR'd flags (bits) for this attribute */ -} VAConfigAttrib; - -/* Attribute values for VAConfigAttribRTFormat. */ - -#define VA_RT_FORMAT_YUV420 0x00000001 ///< YUV 4:2:0 8-bit. -#define VA_RT_FORMAT_YUV422 0x00000002 ///< YUV 4:2:2 8-bit. -#define VA_RT_FORMAT_YUV444 0x00000004 ///< YUV 4:4:4 8-bit. -#define VA_RT_FORMAT_YUV411 0x00000008 ///< YUV 4:1:1 8-bit. -#define VA_RT_FORMAT_YUV400 0x00000010 ///< Greyscale 8-bit. -#define VA_RT_FORMAT_YUV420_10 0x00000100 ///< YUV 4:2:0 10-bit. -#define VA_RT_FORMAT_YUV422_10 0x00000200 ///< YUV 4:2:2 10-bit. -#define VA_RT_FORMAT_YUV444_10 0x00000400 ///< YUV 4:4:4 10-bit. -#define VA_RT_FORMAT_YUV420_12 0x00001000 ///< YUV 4:2:0 12-bit. -#define VA_RT_FORMAT_YUV422_12 0x00002000 ///< YUV 4:2:2 12-bit. -#define VA_RT_FORMAT_YUV444_12 0x00004000 ///< YUV 4:4:4 12-bit. - -#define VA_RT_FORMAT_RGB16 0x00010000 ///< Packed RGB, 16 bits per pixel. -#define VA_RT_FORMAT_RGB32 0x00020000 ///< Packed RGB, 32 bits per pixel, 8 bits per colour sample. -#define VA_RT_FORMAT_RGBP 0x00100000 ///< Planar RGB, 8 bits per sample. -#define VA_RT_FORMAT_RGB32_10 0x00200000 ///< Packed RGB, 32 bits per pixel, 10 bits per colour sample. - -#define VA_RT_FORMAT_PROTECTED 0x80000000 - -#define VA_RT_FORMAT_RGB32_10BPP VA_RT_FORMAT_RGB32_10 ///< @deprecated use VA_RT_FORMAT_RGB32_10 instead. -#define VA_RT_FORMAT_YUV420_10BPP VA_RT_FORMAT_YUV420_10 ///< @deprecated use VA_RT_FORMAT_YUV420_10 instead. - -/** @name Attribute values for VAConfigAttribRateControl */ -/**@{*/ -/** \brief Driver does not support any form of rate control. */ -#define VA_RC_NONE 0x00000001 -/** \brief Constant bitrate. */ -#define VA_RC_CBR 0x00000002 -/** \brief Variable bitrate. */ -#define VA_RC_VBR 0x00000004 -/** \brief Video conference mode. */ -#define VA_RC_VCM 0x00000008 -/** \brief Constant QP. */ -#define VA_RC_CQP 0x00000010 -/** \brief Variable bitrate with peak rate higher than average bitrate. */ -#define VA_RC_VBR_CONSTRAINED 0x00000020 -/** \brief Intelligent Constant Quality. Provided an initial ICQ_quality_factor, - * adjusts QP at a frame and MB level based on motion to improve subjective quality. */ -#define VA_RC_ICQ 0x00000040 -/** \brief Macroblock based rate control. Per MB control is decided - * internally in the encoder. It may be combined with other RC modes, except CQP. */ -#define VA_RC_MB 0x00000080 -/** \brief Constant Frame Size, it is used for small tolerent */ -#define VA_RC_CFS 0x00000100 -/** \brief Parallel BRC, for hierachical B. - * - * For hierachical B, B frames can be refered by other B frames. - * Currently three layers of hierachy are defined: - * B0 - regular B, no reference to other B frames. - * B1 - reference to only I, P and regular B0 frames. - * B2 - reference to any other frames, including B1. - * In Hierachical B structure, B frames on the same layer can be processed - * simultaneously. And BRC would adjust accordingly. This is so called - * Parallel BRC. */ -#define VA_RC_PARALLEL 0x00000200 -/** \brief Quality defined VBR - * Use Quality factor to determine the good enough QP for each MB such that - * good enough quality can be obtained without waste of bits - * for this BRC mode, you must set all legacy VBR parameters - * and reuse quality_factor in \c VAEncMiscParameterRateControl - * */ -#define VA_RC_QVBR 0x00000400 -/** \brief Average VBR - * Average variable bitrate control algorithm focuses on overall encoding - * quality while meeting the specified target bitrate, within the accuracy - * range, after a convergence period. - * bits_per_second in VAEncMiscParameterRateControl is target bitrate for AVBR. - * Convergence is specified in the unit of frame. - * window_size in VAEncMiscParameterRateControl is equal to convergence for AVBR. - * Accuracy is in the range of [1,100], 1 means one percent, and so on. - * target_percentage in VAEncMiscParameterRateControl is equal to accuracy for AVBR. - * */ -#define VA_RC_AVBR 0x00000800 -/** \brief Transport Controlled BRC - * Specific bitrate control for real time streaming. - * TCBRC can instantly react to channel change to remove or significantly reduce the delay. - * Application (transport) provides channel feedback to driver through TargetFrameSize. - * When channel condition is very good (almost no constraint on instant frame size), - * the app should set target frame size as zero. Otherwise, channel capacity divided by fps - * should be used. - * */ -#define VA_RC_TCBRC 0x00001000 - -/**@}*/ - -/** @name Attribute values for VAConfigAttribDecSliceMode */ -/**@{*/ -/** \brief Driver supports normal mode for slice decoding */ -#define VA_DEC_SLICE_MODE_NORMAL 0x00000001 -/** \brief Driver supports base mode for slice decoding */ -#define VA_DEC_SLICE_MODE_BASE 0x00000002 - -/** @name Attribute values for VAConfigAttribDecJPEG */ -/**@{*/ -typedef union _VAConfigAttribValDecJPEG { - struct { - /** \brief Set to (1 << VA_ROTATION_xxx) for supported rotation angles. */ - uint32_t rotation : 4; - /** \brief Reserved for future use. */ - uint32_t reserved : 28; - } bits; - uint32_t value; -} VAConfigAttribValDecJPEG; -/** @name Attribute values for VAConfigAttribDecProcessing */ -/**@{*/ -/** \brief No decoding + processing in a single decoding call. */ -#define VA_DEC_PROCESSING_NONE 0x00000000 -/** \brief Decode + processing in a single decoding call. */ -#define VA_DEC_PROCESSING 0x00000001 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncPackedHeaders */ -/**@{*/ -/** \brief Driver does not support any packed headers mode. */ -#define VA_ENC_PACKED_HEADER_NONE 0x00000000 -/** - * \brief Driver supports packed sequence headers. e.g. SPS for H.264. - * - * Application must provide it to driver once this flag is returned through - * vaGetConfigAttributes() - */ -#define VA_ENC_PACKED_HEADER_SEQUENCE 0x00000001 -/** - * \brief Driver supports packed picture headers. e.g. PPS for H.264. - * - * Application must provide it to driver once this falg is returned through - * vaGetConfigAttributes() - */ -#define VA_ENC_PACKED_HEADER_PICTURE 0x00000002 -/** - * \brief Driver supports packed slice headers. e.g. slice_header() for H.264. - * - * Application must provide it to driver once this flag is returned through - * vaGetConfigAttributes() - */ -#define VA_ENC_PACKED_HEADER_SLICE 0x00000004 -/** - * \brief Driver supports misc packed headers. e.g. SEI for H.264. - * - * @deprecated - * This is a deprecated packed header flag, All applications can use - * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed - * header data buffer to the driver - */ -#define VA_ENC_PACKED_HEADER_MISC 0x00000008 -/** \brief Driver supports raw packed header, see VAEncPackedHeaderRawData */ -#define VA_ENC_PACKED_HEADER_RAW_DATA 0x00000010 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncInterlaced */ -/**@{*/ -/** \brief Driver does not support interlaced coding. */ -#define VA_ENC_INTERLACED_NONE 0x00000000 -/** \brief Driver supports interlaced frame coding. */ -#define VA_ENC_INTERLACED_FRAME 0x00000001 -/** \brief Driver supports interlaced field coding. */ -#define VA_ENC_INTERLACED_FIELD 0x00000002 -/** \brief Driver supports macroblock adaptive frame field coding. */ -#define VA_ENC_INTERLACED_MBAFF 0x00000004 -/** \brief Driver supports picture adaptive frame field coding. */ -#define VA_ENC_INTERLACED_PAFF 0x00000008 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncSliceStructure */ -/**@{*/ -/** \brief Driver supports a power-of-two number of rows per slice. */ -#define VA_ENC_SLICE_STRUCTURE_POWER_OF_TWO_ROWS 0x00000001 -/** \brief Driver supports an arbitrary number of macroblocks per slice. */ -#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS 0x00000002 -/** \brief Driver support 1 row per slice */ -#define VA_ENC_SLICE_STRUCTURE_EQUAL_ROWS 0x00000004 -/** \brief Driver support max encoded slice size per slice */ -#define VA_ENC_SLICE_STRUCTURE_MAX_SLICE_SIZE 0x00000008 -/** \brief Driver supports an arbitrary number of rows per slice. */ -#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_ROWS 0x00000010 -/** \brief Driver supports any number of rows per slice but they must be the same -* for all slices except for the last one, which must be equal or smaller -* to the previous slices. */ -#define VA_ENC_SLICE_STRUCTURE_EQUAL_MULTI_ROWS 0x00000020 -/**@}*/ - -/** \brief Attribute value for VAConfigAttribMaxFrameSize */ -typedef union _VAConfigAttribValMaxFrameSize { - struct { - /** \brief support max frame size - * if max_frame_size == 1, VAEncMiscParameterTypeMaxFrameSize/VAEncMiscParameterBufferMaxFrameSize - * could be used to set the frame size, if multiple_pass also equal 1, VAEncMiscParameterTypeMultiPassFrameSize - * VAEncMiscParameterBufferMultiPassFrameSize could be used to set frame size and pass information - */ - uint32_t max_frame_size : 1; - /** \brief multiple_pass support */ - uint32_t multiple_pass : 1; - /** \brief reserved bits for future, must be zero*/ - uint32_t reserved : 30; - } bits; - uint32_t value; -} VAConfigAttribValMaxFrameSize; - -/** \brief Attribute value for VAConfigAttribEncJPEG */ -typedef union _VAConfigAttribValEncJPEG { - struct { - /** \brief set to 1 for arithmatic coding. */ - uint32_t arithmatic_coding_mode : 1; - /** \brief set to 1 for progressive dct. */ - uint32_t progressive_dct_mode : 1; - /** \brief set to 1 for non-interleaved. */ - uint32_t non_interleaved_mode : 1; - /** \brief set to 1 for differential. */ - uint32_t differential_mode : 1; - uint32_t max_num_components : 3; - uint32_t max_num_scans : 4; - uint32_t max_num_huffman_tables : 3; - uint32_t max_num_quantization_tables : 3; - } bits; - uint32_t value; -} VAConfigAttribValEncJPEG; - -/** @name Attribute values for VAConfigAttribEncQuantization */ -/**@{*/ -/** \brief Driver does not support special types of quantization */ -#define VA_ENC_QUANTIZATION_NONE 0x00000000 -/** \brief Driver supports trellis quantization */ -#define VA_ENC_QUANTIZATION_TRELLIS_SUPPORTED 0x00000001 -/**@}*/ - -/** @name Attribute values for VAConfigAttribPredictionDirection */ -/**@{*/ -/** \brief Driver support forward reference frame (inter frame for vpx, P frame for H26x MPEG) - * can work with the VAConfigAttribEncMaxRefFrames. for example: low delay B frame of HEVC. - * these value can be OR'd together. typical value should be VA_PREDICTION_DIRECTION_PREVIOUS - * or VA_PREDICTION_DIRECTION_PREVIOUS | VA_PREDICTION_DIRECTION_FUTURE, theoretically, there - * are no stream only include future reference frame. - */ -#define VA_PREDICTION_DIRECTION_PREVIOUS 0x00000001 -/** \brief Driver support backward prediction frame/slice */ -#define VA_PREDICTION_DIRECTION_FUTURE 0x00000002 -/** \brief Dirver require both reference list must be not empty for inter frame */ -#define VA_PREDICTION_DIRECTION_BI_NOT_EMPTY 0x00000004 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncIntraRefresh */ -/**@{*/ -/** \brief Driver does not support intra refresh */ -#define VA_ENC_INTRA_REFRESH_NONE 0x00000000 -/** \brief Driver supports column based rolling intra refresh */ -#define VA_ENC_INTRA_REFRESH_ROLLING_COLUMN 0x00000001 -/** \brief Driver supports row based rolling intra refresh */ -#define VA_ENC_INTRA_REFRESH_ROLLING_ROW 0x00000002 -/** \brief Driver supports adaptive intra refresh */ -#define VA_ENC_INTRA_REFRESH_ADAPTIVE 0x00000010 -/** \brief Driver supports cyclic intra refresh */ -#define VA_ENC_INTRA_REFRESH_CYCLIC 0x00000020 -/** \brief Driver supports intra refresh of P frame*/ -#define VA_ENC_INTRA_REFRESH_P_FRAME 0x00010000 -/** \brief Driver supports intra refresh of B frame */ -#define VA_ENC_INTRA_REFRESH_B_FRAME 0x00020000 -/** \brief Driver supports intra refresh of multiple reference encoder */ -#define VA_ENC_INTRA_REFRESH_MULTI_REF 0x00040000 - -/**@}*/ - -/** \brief Attribute value for VAConfigAttribEncROI */ -typedef union _VAConfigAttribValEncROI { - struct { - /** \brief The number of ROI regions supported, 0 if ROI is not supported. */ - uint32_t num_roi_regions : 8; - /** - * \brief A flag indicates whether ROI priority is supported - * - * \ref roi_rc_priority_support equal to 1 specifies the underlying driver supports - * ROI priority when VAConfigAttribRateControl != VA_RC_CQP, user can use \c roi_value - * in #VAEncROI to set ROI priority. \ref roi_rc_priority_support equal to 0 specifies - * the underlying driver doesn't support ROI priority. - * - * User should ignore \ref roi_rc_priority_support when VAConfigAttribRateControl == VA_RC_CQP - * because ROI delta QP is always required when VAConfigAttribRateControl == VA_RC_CQP. - */ - uint32_t roi_rc_priority_support : 1; - /** - * \brief A flag indicates whether ROI delta QP is supported - * - * \ref roi_rc_qp_delta_support equal to 1 specifies the underlying driver supports - * ROI delta QP when VAConfigAttribRateControl != VA_RC_CQP, user can use \c roi_value - * in #VAEncROI to set ROI delta QP. \ref roi_rc_qp_delta_support equal to 0 specifies - * the underlying driver doesn't support ROI delta QP. - * - * User should ignore \ref roi_rc_qp_delta_support when VAConfigAttribRateControl == VA_RC_CQP - * because ROI delta QP is always required when VAConfigAttribRateControl == VA_RC_CQP. - */ - uint32_t roi_rc_qp_delta_support : 1; - uint32_t reserved : 22; - } bits; - uint32_t value; -} VAConfigAttribValEncROI; - -/** \brief Attribute value for VAConfigAttribEncRateControlExt */ -typedef union _VAConfigAttribValEncRateControlExt { - struct { - /** - * \brief The maximum number of temporal layers minus 1 - * - * \ref max_num_temporal_layers_minus1 plus 1 specifies the maximum number of temporal - * layers that supported by the underlying driver. \ref max_num_temporal_layers_minus1 - * equal to 0 implies the underlying driver doesn't support encoding with temporal layer. - */ - uint32_t max_num_temporal_layers_minus1 : 8; - - /** - * /brief support temporal layer bit-rate control flag - * - * \ref temporal_layer_bitrate_control_flag equal to 1 specifies the underlying driver - * can support bit-rate control per temporal layer when (#VAConfigAttribRateControl == #VA_RC_CBR || - * #VAConfigAttribRateControl == #VA_RC_VBR). - * - * The underlying driver must set \ref temporal_layer_bitrate_control_flag to 0 when - * \c max_num_temporal_layers_minus1 is equal to 0 - * - * To use bit-rate control per temporal layer, an application must send the right layer - * structure via #VAEncMiscParameterTemporalLayerStructure at the beginning of a coded sequence - * and then followed by #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate structures - * for each layer, using the \c temporal_id field as the layer identifier. Otherwise - * the driver doesn't use bitrate control per temporal layer if an application doesn't send the - * layer structure via #VAEncMiscParameterTemporalLayerStructure to the driver. The driver returns - * VA_STATUS_ERROR_INVALID_PARAMETER if an application sends a wrong layer structure or doesn't send - * #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate for each layer. - * - * The driver will ignore #VAEncMiscParameterTemporalLayerStructure and the \c temporal_id field - * in #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate if - * \ref temporal_layer_bitrate_control_flag is equal to 0 or #VAConfigAttribRateControl == #VA_RC_CQP - */ - uint32_t temporal_layer_bitrate_control_flag : 1; - uint32_t reserved : 23; - } bits; - uint32_t value; -} VAConfigAttribValEncRateControlExt; - -/** \brief Attribute value for VAConfigAttribMultipleFrame*/ -typedef union _VAConfigAttribValMultipleFrame { - struct { - /** \brief max num of concurrent frames from different stream */ - uint32_t max_num_concurrent_frames : 8; - /** \brief indicate whether all stream must support same quality level - * if mixed_quality_level == 0, same quality level setting for multple streams is required - * if mixed_quality_level == 1, different stream can have different quality level*/ - uint32_t mixed_quality_level : 1; - /** \brief reserved bit for future, must be zero */ - uint32_t reserved : 23; - } bits; - uint32_t value; -} VAConfigAttribValMultipleFrame; - -/** brief Attribute value VAConfigAttribValContextPriority */ -typedef union _VAConfigAttribValContextPriority { - struct { - /** \brief the priority , for the Query operation (read) it represents highest priority - * for the set operation (write), value should be [0~highest priority] , 0 is lowest priority*/ - uint32_t priority : 16; - /** \brief reserved bits for future, must be zero*/ - uint32_t reserved : 16; - } bits; - uint32_t value; -} VAConfigAttribValContextPriority; - -/** brief Attribute value VAConfigAttribEncPerBlockControl */ -typedef union _VAConfigAttribValEncPerBlockControl { - struct { - /** \brief whether to support dela qp per block */ - uint32_t delta_qp_support : 1; - /** \brief supported size of delta qp block */ - uint32_t log2_delta_qp_block_size : 4; - /** \brief size of delta qp per block in bytes*/ - uint32_t delta_qp_size_in_bytes : 3; - /** \brief reserved bit for future, must be zero */ - uint32_t reserved : 24; - } bits; - uint32_t value; -} VAConfigAttribValEncPerBlockControl; - -/** @name Attribute values for VAConfigAttribProtectedContentCipherAlgorithm */ -/** \brief AES cipher */ -#define VA_PC_CIPHER_AES 0x00000001 - -/** @name Attribute values for VAConfigAttribProtectedContentCipherBlockSize */ -/** \brief 128 bits block size */ -#define VA_PC_BLOCK_SIZE_128 0x00000001 -/** \brief 192 bits block size */ -#define VA_PC_BLOCK_SIZE_192 0x00000002 -/** \brief 256 bits block size */ -#define VA_PC_BLOCK_SIZE_256 0x00000004 - -/** @name Attribute values for VAConfigAttribProtectedContentCipherMode */ -/** \brief AES ECB */ -#define VA_PC_CIPHER_MODE_ECB 0x00000001 -/** \brief AES CBC */ -#define VA_PC_CIPHER_MODE_CBC 0x00000002 -/** \brief AES CTR */ -#define VA_PC_CIPHER_MODE_CTR 0x00000004 - -/** @name Attribute values for VAConfigAttribProtectedContentCipherSampleType */ -/** \brief Full sample */ -#define VA_PC_SAMPLE_TYPE_FULLSAMPLE 0x00000001 -/** \brief Sub sample */ -#define VA_PC_SAMPLE_TYPE_SUBSAMPLE 0x00000002 - -/** @name Attribute values for VAConfigAttribProtectedContentUsage */ -/** \brief Default usage */ -#define VA_PC_USAGE_DEFAULT 0x00000000 -/** \brief Widevine */ -#define VA_PC_USAGE_WIDEVINE 0x00000001 - -/** @name Attribute values for VAConfigAttribProcessingRate. */ -/**@{*/ -/** \brief Driver does not support processing rate report */ -#define VA_PROCESSING_RATE_NONE 0x00000000 -/** \brief Driver supports encode processing rate report */ -#define VA_PROCESSING_RATE_ENCODE 0x00000001 -/** \brief Driver supports decode processing rate report */ -#define VA_PROCESSING_RATE_DECODE 0x00000002 -/**@}*/ -/** - * if an attribute is not applicable for a given - * profile/entrypoint pair, then set the value to the following - */ -#define VA_ATTRIB_NOT_SUPPORTED 0x80000000 - -/** Get maximum number of profiles supported by the implementation */ -int vaMaxNumProfiles( - VADisplay dpy -); - -/** Get maximum number of entrypoints supported by the implementation */ -int vaMaxNumEntrypoints( - VADisplay dpy -); - -/** Get maximum number of attributs supported by the implementation */ -int vaMaxNumConfigAttributes( - VADisplay dpy -); - -/** - * Query supported profiles - * The caller must provide a "profile_list" array that can hold at - * least vaMaxNumProfile() entries. The actual number of profiles - * returned in "profile_list" is returned in "num_profile". - */ -VAStatus vaQueryConfigProfiles( - VADisplay dpy, - VAProfile *profile_list, /* out */ - int *num_profiles /* out */ -); - -/** - * Query supported entrypoints for a given profile - * The caller must provide an "entrypoint_list" array that can hold at - * least vaMaxNumEntrypoints() entries. The actual number of entrypoints - * returned in "entrypoint_list" is returned in "num_entrypoints". - */ -VAStatus vaQueryConfigEntrypoints( - VADisplay dpy, - VAProfile profile, - VAEntrypoint *entrypoint_list, /* out */ - int *num_entrypoints /* out */ -); - -/** - * Get attributes for a given profile/entrypoint pair - * The caller must provide an "attrib_list" with all attributes to be - * retrieved. Upon return, the attributes in "attrib_list" have been - * updated with their value. Unknown attributes or attributes that are - * not supported for the given profile/entrypoint pair will have their - * value set to VA_ATTRIB_NOT_SUPPORTED - */ -VAStatus vaGetConfigAttributes( - VADisplay dpy, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, /* in/out */ - int num_attribs -); - -/** Generic ID type, can be re-typed for specific implementation */ -typedef unsigned int VAGenericID; - -typedef VAGenericID VAConfigID; - -/** - * Create a configuration for the video decode/encode/processing pipeline - * it passes in the attribute list that specifies the attributes it cares - * about, with the rest taking default values. - */ -VAStatus vaCreateConfig( - VADisplay dpy, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, - int num_attribs, - VAConfigID *config_id /* out */ -); - -/** - * Free resources associdated with a given config - */ -VAStatus vaDestroyConfig( - VADisplay dpy, - VAConfigID config_id -); - -/** - * Query all attributes for a given configuration - * The profile of the configuration is returned in "profile" - * The entrypoint of the configuration is returned in "entrypoint" - * The caller must provide an "attrib_list" array that can hold at least - * vaMaxNumConfigAttributes() entries. The actual number of attributes - * returned in "attrib_list" is returned in "num_attribs" - */ -VAStatus vaQueryConfigAttributes( - VADisplay dpy, - VAConfigID config_id, - VAProfile *profile, /* out */ - VAEntrypoint *entrypoint, /* out */ - VAConfigAttrib *attrib_list,/* out */ - int *num_attribs /* out */ -); - - -/** - * Contexts and Surfaces - * - * Context represents a "virtual" video decode, encode or video processing - * pipeline. Surfaces are render targets for a given context. The data in the - * surfaces are not accessible to the client except if derived image is supported - * and the internal data format of the surface is implementation specific. - * - * Surfaces are provided as a hint of what surfaces will be used when the context - * is created through vaCreateContext(). A surface may be used by different contexts - * at the same time as soon as application can make sure the operations are synchronized - * between different contexts, e.g. a surface is used as the output of a decode context - * and the input of a video process context. Surfaces can only be destroyed after all - * contexts using these surfaces have been destroyed. - * - * Both contexts and surfaces are identified by unique IDs and its - * implementation specific internals are kept opaque to the clients - */ - -typedef VAGenericID VAContextID; - -typedef VAGenericID VASurfaceID; - -#define VA_INVALID_ID 0xffffffff -#define VA_INVALID_SURFACE VA_INVALID_ID - -/** \brief Generic value types. */ -typedef enum { - VAGenericValueTypeInteger = 1, /**< 32-bit signed integer. */ - VAGenericValueTypeFloat, /**< 32-bit floating-point value. */ - VAGenericValueTypePointer, /**< Generic pointer type */ - VAGenericValueTypeFunc /**< Pointer to function */ -} VAGenericValueType; - -/** \brief Generic function type. */ -typedef void (*VAGenericFunc)(void); - -/** \brief Generic value. */ -typedef struct _VAGenericValue { - /** \brief Value type. See #VAGenericValueType. */ - VAGenericValueType type; - /** \brief Value holder. */ - union { - /** \brief 32-bit signed integer. */ - int32_t i; - /** \brief 32-bit float. */ - float f; - /** \brief Generic pointer. */ - void *p; - /** \brief Pointer to function. */ - VAGenericFunc fn; - } value; -} VAGenericValue; - -/** @name Surface attribute flags */ -/**@{*/ -/** \brief Surface attribute is not supported. */ -#define VA_SURFACE_ATTRIB_NOT_SUPPORTED 0x00000000 -/** \brief Surface attribute can be got through vaQuerySurfaceAttributes(). */ -#define VA_SURFACE_ATTRIB_GETTABLE 0x00000001 -/** \brief Surface attribute can be set through vaCreateSurfaces(). */ -#define VA_SURFACE_ATTRIB_SETTABLE 0x00000002 -/**@}*/ - -/** \brief Surface attribute types. */ -typedef enum { - VASurfaceAttribNone = 0, - /** - * \brief Pixel format as a FOURCC (int, read/write). - * - * When vaQuerySurfaceAttributes() is called, the driver will return one - * PixelFormat attribute per supported pixel format. - * - * When provided as an input to vaCreateSurfaces(), the driver will - * allocate a surface with the provided pixel format. - */ - VASurfaceAttribPixelFormat, - /** \brief Minimal width in pixels (int, read-only). */ - VASurfaceAttribMinWidth, - /** \brief Maximal width in pixels (int, read-only). */ - VASurfaceAttribMaxWidth, - /** \brief Minimal height in pixels (int, read-only). */ - VASurfaceAttribMinHeight, - /** \brief Maximal height in pixels (int, read-only). */ - VASurfaceAttribMaxHeight, - /** \brief Surface memory type expressed in bit fields (int, read/write). */ - VASurfaceAttribMemoryType, - /** \brief External buffer descriptor (pointer, write). - * - * Refer to the documentation for the memory type being created to - * determine what descriptor structure to pass here. If not otherwise - * stated, the common VASurfaceAttribExternalBuffers should be used. - */ - VASurfaceAttribExternalBufferDescriptor, - /** \brief Surface usage hint, gives the driver a hint of intended usage - * to optimize allocation (e.g. tiling) (int, read/write). */ - VASurfaceAttribUsageHint, - /** \brief List of possible DRM format modifiers (pointer, write). - * - * The value must be a pointer to a VADRMFormatModifierList. This can only - * be used when allocating a new buffer, it's invalid to use this attribute - * when importing an existing buffer. - */ - VASurfaceAttribDRMFormatModifiers, - /** \brief Number of surface attributes. */ - VASurfaceAttribCount -} VASurfaceAttribType; - -/** \brief Surface attribute. */ -typedef struct _VASurfaceAttrib { - /** \brief Type. */ - VASurfaceAttribType type; - /** \brief Flags. See "Surface attribute flags". */ - uint32_t flags; - /** \brief Value. See "Surface attribute types" for the expected types. */ - VAGenericValue value; -} VASurfaceAttrib; - -/** - * @name VASurfaceAttribMemoryType values in bit fields. - * Bit 0:7 are reserved for generic types, Bit 31:28 are reserved for - * Linux DRM, Bit 23:20 are reserved for Android. DRM and Android specific - * types are defined in DRM and Android header files. - */ -/**@{*/ -/** \brief VA memory type (default) is supported. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_VA 0x00000001 -/** \brief V4L2 buffer memory type is supported. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_V4L2 0x00000002 -/** \brief User pointer memory type is supported. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_USER_PTR 0x00000004 -/**@}*/ - -/** - * \brief VASurfaceAttribExternalBuffers structure for - * the VASurfaceAttribExternalBufferDescriptor attribute. - */ -typedef struct _VASurfaceAttribExternalBuffers { - /** \brief pixel format in fourcc. */ - uint32_t pixel_format; - /** \brief width in pixels. */ - uint32_t width; - /** \brief height in pixels. */ - uint32_t height; - /** \brief total size of the buffer in bytes. */ - uint32_t data_size; - /** \brief number of planes for planar layout */ - uint32_t num_planes; - /** \brief pitch for each plane in bytes */ - uint32_t pitches[4]; - /** \brief offset for each plane in bytes */ - uint32_t offsets[4]; - /** \brief buffer handles or user pointers */ - uintptr_t *buffers; - /** \brief number of elements in the "buffers" array */ - uint32_t num_buffers; - /** \brief flags. See "Surface external buffer descriptor flags". */ - uint32_t flags; - /** \brief reserved for passing private data */ - void *private_data; -} VASurfaceAttribExternalBuffers; - -/** @name VASurfaceAttribExternalBuffers flags */ -/**@{*/ -/** \brief Enable memory tiling */ -#define VA_SURFACE_EXTBUF_DESC_ENABLE_TILING 0x00000001 -/** \brief Memory is cacheable */ -#define VA_SURFACE_EXTBUF_DESC_CACHED 0x00000002 -/** \brief Memory is non-cacheable */ -#define VA_SURFACE_EXTBUF_DESC_UNCACHED 0x00000004 -/** \brief Memory is write-combined */ -#define VA_SURFACE_EXTBUF_DESC_WC 0x00000008 -/** \brief Memory is protected */ -#define VA_SURFACE_EXTBUF_DESC_PROTECTED 0x80000000 - -/** @name VASurfaceAttribUsageHint attribute usage hint flags */ -/**@{*/ -/** \brief Surface usage not indicated. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_GENERIC 0x00000000 -/** \brief Surface used by video decoder. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_DECODER 0x00000001 -/** \brief Surface used by video encoder. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_ENCODER 0x00000002 -/** \brief Surface read by video post-processing. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_VPP_READ 0x00000004 -/** \brief Surface written by video post-processing. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_VPP_WRITE 0x00000008 -/** \brief Surface used for display. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_DISPLAY 0x00000010 -/** \brief Surface used for export to third-party APIs, e.g. via - * vaExportSurfaceHandle(). */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_EXPORT 0x00000020 - -/**@}*/ - -/** - * \brief Queries surface attributes for the supplied config. - * - * This function queries for all supported attributes for the - * supplied VA @config. In particular, if the underlying hardware - * supports the creation of VA surfaces in various formats, then - * this function will enumerate all pixel formats that are supported. - * - * The \c attrib_list array is allocated by the user and \c - * num_attribs shall be initialized to the number of allocated - * elements in that array. Upon successful return, the actual number - * of attributes will be overwritten into \c num_attribs. Otherwise, - * \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and \c num_attribs - * is adjusted to the number of elements that would be returned if - * enough space was available. - * - * Note: it is perfectly valid to pass NULL to the \c attrib_list - * argument when vaQuerySurfaceAttributes() is used to determine the - * actual number of elements that need to be allocated. - * - * @param[in] dpy the VA display - * @param[in] config the config identifying a codec or a video - * processing pipeline - * @param[out] attrib_list the output array of #VASurfaceAttrib elements - * @param[in,out] num_attribs the number of elements allocated on - * input, the number of elements actually filled in output - */ -VAStatus -vaQuerySurfaceAttributes( - VADisplay dpy, - VAConfigID config, - VASurfaceAttrib *attrib_list, - unsigned int *num_attribs -); - -/** - * \brief Creates an array of surfaces - * - * Creates an array of surfaces. The optional list of attributes shall - * be constructed based on what the underlying hardware could expose - * through vaQuerySurfaceAttributes(). - * - * @param[in] dpy the VA display - * @param[in] format the desired surface format. See \c VA_RT_FORMAT_* - * @param[in] width the surface width - * @param[in] height the surface height - * @param[out] surfaces the array of newly created surfaces - * @param[in] num_surfaces the number of surfaces to create - * @param[in] attrib_list the list of (optional) attributes, or \c NULL - * @param[in] num_attribs the number of attributes supplied in - * \c attrib_list, or zero - */ -VAStatus -vaCreateSurfaces( - VADisplay dpy, - unsigned int format, - unsigned int width, - unsigned int height, - VASurfaceID *surfaces, - unsigned int num_surfaces, - VASurfaceAttrib *attrib_list, - unsigned int num_attribs -); - -/** - * vaDestroySurfaces - Destroy resources associated with surfaces. - * Surfaces can only be destroyed after all contexts using these surfaces have been - * destroyed. - * dpy: display - * surfaces: array of surfaces to destroy - * num_surfaces: number of surfaces in the array to be destroyed. - */ -VAStatus vaDestroySurfaces( - VADisplay dpy, - VASurfaceID *surfaces, - int num_surfaces -); - -#define VA_PROGRESSIVE 0x1 -/** - * vaCreateContext - Create a context - * dpy: display - * config_id: configuration for the context - * picture_width: coded picture width - * picture_height: coded picture height - * flag: any combination of the following: - * VA_PROGRESSIVE (only progressive frame pictures in the sequence when set) - * render_targets: a hint for render targets (surfaces) tied to the context - * num_render_targets: number of render targets in the above array - * context: created context id upon return - */ -VAStatus vaCreateContext( - VADisplay dpy, - VAConfigID config_id, - int picture_width, - int picture_height, - int flag, - VASurfaceID *render_targets, - int num_render_targets, - VAContextID *context /* out */ -); - -/** - * vaDestroyContext - Destroy a context - * dpy: display - * context: context to be destroyed - */ -VAStatus vaDestroyContext( - VADisplay dpy, - VAContextID context -); - -//Multi-frame context -typedef VAGenericID VAMFContextID; -/** - * vaCreateMFContext - Create a multi-frame context - * interface encapsulating common for all streams memory objects and structures - * required for single GPU task submission from several VAContextID's. - * Allocation: This call only creates an instance, doesn't allocate any additional memory. - * Support identification: Application can identify multi-frame feature support by ability - * to create multi-frame context. If driver supports multi-frame - call successful, - * mf_context != NULL and VAStatus = VA_STATUS_SUCCESS, otherwise if multi-frame processing - * not supported driver returns VA_STATUS_ERROR_UNIMPLEMENTED and mf_context = NULL. - * return values: - * VA_STATUS_SUCCESS - operation successful. - * VA_STATUS_ERROR_UNIMPLEMENTED - no support for multi-frame. - * dpy: display adapter. - * mf_context: Multi-Frame context encapsulating all associated context - * for multi-frame submission. - */ -VAStatus vaCreateMFContext( - VADisplay dpy, - VAMFContextID *mf_context /* out */ -); - -/** - * vaMFAddContext - Provide ability to associate each context used for - * Multi-Frame submission and common Multi-Frame context. - * Try to add context to understand if it is supported. - * Allocation: this call allocates and/or reallocates all memory objects - * common for all contexts associated with particular Multi-Frame context. - * All memory required for each context(pixel buffers, internal driver - * buffers required for processing) allocated during standard vaCreateContext call for each context. - * Runtime dependency - if current implementation doesn't allow to run different entry points/profile, - * first context added will set entry point/profile for whole Multi-Frame context, - * all other entry points and profiles can be rejected to be added. - * Return values: - * VA_STATUS_SUCCESS - operation successful, context was added. - * VA_STATUS_ERROR_OPERATION_FAILED - something unexpected happened - application have to close - * current mf_context and associated contexts and start working with new ones. - * VA_STATUS_ERROR_INVALID_CONTEXT - ContextID is invalid, means: - * 1 - mf_context is not valid context or - * 2 - driver can't suport different VAEntrypoint or VAProfile simultaneosly - * and current context contradicts with previously added, application can continue with current mf_context - * and other contexts passed this call, rejected context can continue work in stand-alone - * mode or other mf_context. - * VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT - particular context being added was created with with - * unsupported VAEntrypoint. Application can continue with current mf_context - * and other contexts passed this call, rejected context can continue work in stand-alone - * mode. - * VA_STATUS_ERROR_UNSUPPORTED_PROFILE - Current context with Particular VAEntrypoint is supported - * but VAProfile is not supported. Application can continue with current mf_context - * and other contexts passed this call, rejected context can continue work in stand-alone - * mode. - * dpy: display adapter. - * context: context being associated with Multi-Frame context. - * mf_context: - multi-frame context used to associate contexts for multi-frame submission. - */ -VAStatus vaMFAddContext( - VADisplay dpy, - VAMFContextID mf_context, - VAContextID context -); - -/** - * vaMFReleaseContext - Removes context from multi-frame and - * association with multi-frame context. - * After association removed vaEndPicture will submit tasks, but not vaMFSubmit. - * Return values: - * VA_STATUS_SUCCESS - operation successful, context was removed. - * VA_STATUS_ERROR_OPERATION_FAILED - something unexpected happened. - * application need to destroy this VAMFContextID and all assotiated VAContextID - * dpy: display - * mf_context: VAMFContextID where context is added - * context: VAContextID to be added - */ -VAStatus vaMFReleaseContext( - VADisplay dpy, - VAMFContextID mf_context, - VAContextID context -); - -/** - * Buffers - * Buffers are used to pass various types of data from the - * client to the server. The server maintains a data store - * for each buffer created, and the client idenfies a buffer - * through a unique buffer id assigned by the server. - */ - -typedef VAGenericID VABufferID; - -typedef enum { - VAPictureParameterBufferType = 0, - VAIQMatrixBufferType = 1, - VABitPlaneBufferType = 2, - VASliceGroupMapBufferType = 3, - VASliceParameterBufferType = 4, - VASliceDataBufferType = 5, - VAMacroblockParameterBufferType = 6, - VAResidualDataBufferType = 7, - VADeblockingParameterBufferType = 8, - VAImageBufferType = 9, - VAProtectedSliceDataBufferType = 10, - VAQMatrixBufferType = 11, - VAHuffmanTableBufferType = 12, - VAProbabilityBufferType = 13, - - /* Following are encode buffer types */ - VAEncCodedBufferType = 21, - VAEncSequenceParameterBufferType = 22, - VAEncPictureParameterBufferType = 23, - VAEncSliceParameterBufferType = 24, - VAEncPackedHeaderParameterBufferType = 25, - VAEncPackedHeaderDataBufferType = 26, - VAEncMiscParameterBufferType = 27, - VAEncMacroblockParameterBufferType = 28, - VAEncMacroblockMapBufferType = 29, - - /** - * \brief Encoding QP buffer - * - * This buffer contains QP per MB for encoding. Currently - * VAEncQPBufferH264 is defined for H.264 encoding, see - * #VAEncQPBufferH264 for details - */ - VAEncQPBufferType = 30, - /* Following are video processing buffer types */ - /** - * \brief Video processing pipeline parameter buffer. - * - * This buffer describes the video processing pipeline. See - * #VAProcPipelineParameterBuffer for details. - */ - VAProcPipelineParameterBufferType = 41, - /** - * \brief Video filter parameter buffer. - * - * This buffer describes the video filter parameters. All buffers - * inherit from #VAProcFilterParameterBufferBase, thus including - * a unique filter buffer type. - * - * The default buffer used by most filters is #VAProcFilterParameterBuffer. - * Filters requiring advanced parameters include, but are not limited to, - * deinterlacing (#VAProcFilterParameterBufferDeinterlacing), - * color balance (#VAProcFilterParameterBufferColorBalance), etc. - */ - VAProcFilterParameterBufferType = 42, - /** - * \brief FEI specific buffer types - */ - VAEncFEIMVBufferType = 43, - VAEncFEIMBCodeBufferType = 44, - VAEncFEIDistortionBufferType = 45, - VAEncFEIMBControlBufferType = 46, - VAEncFEIMVPredictorBufferType = 47, - VAStatsStatisticsParameterBufferType = 48, - /** \brief Statistics output for VAEntrypointStats progressive and top field of interlaced case*/ - VAStatsStatisticsBufferType = 49, - /** \brief Statistics output for VAEntrypointStats bottom field of interlaced case*/ - VAStatsStatisticsBottomFieldBufferType = 50, - VAStatsMVBufferType = 51, - VAStatsMVPredictorBufferType = 52, - /** Force MB's to be non skip for encode.it's per-mb control buffer, The width of the MB map - * Surface is (width of the Picture in MB unit) * 1 byte, multiple of 64 bytes. - * The height is (height of the picture in MB unit). The picture is either - * frame or non-interleaved top or bottom field. If the application provides this - *surface, it will override the "skipCheckDisable" setting in VAEncMiscParameterEncQuality. - */ - VAEncMacroblockDisableSkipMapBufferType = 53, - /** - * \brief HEVC FEI CTB level cmd buffer - * it is CTB level information for future usage. - */ - VAEncFEICTBCmdBufferType = 54, - /** - * \brief HEVC FEI CU level data buffer - * it's CTB level information for future usage - */ - VAEncFEICURecordBufferType = 55, - /** decode stream out buffer, intermedia data of decode, it may include MV, MB mode etc. - * it can be used to detect motion and analyze the frame contain */ - VADecodeStreamoutBufferType = 56, - - /** \brief HEVC Decoding Subset Parameter buffer type - * - * The subsets parameter buffer is concatenation with one or multiple - * subset entry point offsets. All the offset values are layed out one - * by one according to slice order with first slice segment first, second - * slice segment second, etc... The entry number is indicated by parameter - * \ref num_entry_point_offsets. And the first entry position of the entry - * point offsets for any slice segment is indicated by parameter - * entry_offset_to_subset_array in VAPictureParameterBufferHEVC data structure. - */ - VASubsetsParameterBufferType = 57, - /** \brief adjust context parameters dynamically - * - * this parameter is used to update context parameters, detail parameter is in - * \c VAContextParameterUpdateBuffer - */ - VAContextParameterUpdateBufferType = 58, - /** - * \brief Protected session execution buffer type - * - * It's for TEE execution usage (vaProtectedSessionExecute()). The buffer structure is in - * \c VAProtectedSessionExecuteBuffer - */ - VAProtectedSessionExecuteBufferType = 59, - - /** \brief Encryption parameters buffer for protected content session. - * - * Refer to \c VAEncryptionParameters - */ - VAEncryptionParameterBufferType = 60, - - /** - * \brief Encoding delta QP per block buffer - * - * This buffer only could be created and accepted - * when \c VAConfigAttribValEncPerBlockControl delta_qp_support == 1. - * This input buffer contains delta QP per block for encoding. - * The supported size of delta QP block and the size of delta QP - * must be quried from \c VAConfigAttribValEncPerBlockControl. - */ - VAEncDeltaQpPerBlockBufferType = 61, - - VABufferTypeMax -} VABufferType; - -/** \brief update the context parameter - * this structure is used to update context parameters, such as priority of the context - * backend driver should keep the parameter unchanged if there no new - * parameter updated. - */ -typedef struct _VAContextParameterUpdateBuffer { - union { - struct { - /** \brief indicate whether context priority changed */ - uint32_t context_priority_update : 1; - /** \brief Reserved bits for future use, must be zero */ - uint32_t reserved : 31; - } bits; - uint32_t value; - } flags; - /** \brief task/context priority */ - VAConfigAttribValContextPriority context_priority; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved[VA_PADDING_MEDIUM]; -} VAContextParameterUpdateBuffer; - -/** - * These ENCRYPTION_TYPEs are used for the attribute values for - * \c VAConfigAttribEncryption and for encryption_type in - * VAEncryptionParameters. - * - * When used for \c VAConfigAttribEncryption, it be used via - * vaQueryConfigEntrypoints to check which type are supported for specific - * profile or not. - * - * When used for encryption_type in VAEncryptionParameters, it tells driver - * the parameters in VAEncryptionParameters are used for which encryption type. - */ -#define VA_ENCRYPTION_TYPE_FULLSAMPLE_CTR 0x00000001 /* AES CTR fullsample */ -#define VA_ENCRYPTION_TYPE_FULLSAMPLE_CBC 0x00000002 /* AES CBC fullsample */ -#define VA_ENCRYPTION_TYPE_SUBSAMPLE_CTR 0x00000004 /* AES CTR fullsample */ -#define VA_ENCRYPTION_TYPE_SUBSAMPLE_CBC 0x00000008 /* AES CBC fullsample */ - -/** \brief structure for encrypted segment info. */ -typedef struct _VAEncryptionSegmentInfo { - /** \brief The offset relative to the start of the bitstream input in - * bytes of the start of the segment */ - uint32_t segment_start_offset; - /** \brief The length of the segments in bytes */ - uint32_t segment_length; - /** \brief The length in bytes of the remainder of an incomplete block - * from a previous segment*/ - uint32_t partial_aes_block_size; - /** \brief The length in bytes of the initial clear data */ - uint32_t init_byte_length; - /** \brief This will be AES counter for secure decode and secure encode - * when numSegments equals 1, valid size is specified by - * \c key_blob_size */ - uint8_t aes_cbc_iv_or_ctr[64]; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAEncryptionSegmentInfo; - -/** \brief Encryption parameters buffer for VAEncryptionParameterBufferType */ -typedef struct _VAEncryptionParameters { - /** \brief Encryption type, refer to \c VA_ENCRYPTION_TYPE_FULLSAMPLE_CTR, - * \c VA_ENCRYPTION_TYPE_FULLSAMPLE_CBC, \c VA_ENCRYPTION_TYPE_SUBSAMPLE_CTR, - * or \c VA_ENCRYPTION_TYPE_SUBSAMPLE_CBC */ - uint32_t encryption_type; - /** \brief The number of sengments */ - uint32_t num_segments; - /** \brief Pointer of segments */ - VAEncryptionSegmentInfo *segment_info; - /** \brief The status report index reserved for CENC fullsample workload. - * The related structures and definitions are vendor specific. - */ - uint32_t status_report_index; - /** \brief CENC counter length */ - uint32_t size_of_length; - /** \brief Wrapped decrypt blob (Snd)kb, valid size is specified by - * \c key_blob_size */ - uint8_t wrapped_decrypt_blob[64]; - /** \brief Wrapped Key blob info (Sne)kb, valid size is specified by - * \c key_blob_size */ - uint8_t wrapped_encrypt_blob[64]; - /** \brief key blob size - * It could be \c VA_PC_BLOCK_SIZE_128, \c VA_PC_BLOCK_SIZE_192, or - * \c VA_PC_BLOCK_SIZE_256 - */ - uint32_t key_blob_size; - /** \brief Indicates the number of 16-byte BLOCKS that are encrypted in any - * given encrypted region of segments. - * If this value is zero: - * 1. All bytes in encrypted region of segments are encrypted, i.e. the - * CENC or CBC1 scheme is being used - * 2. blocks_stripe_clear must also be zero. - * If this value is non-zero, blocks_stripe_clear must also be non-zero. - */ - uint32_t blocks_stripe_encrypted; - /** \brief Indicates the number of 16-byte BLOCKS that are clear in any given - * encrypted region of segments, as defined by the CENS and CBCS schemes in - * the common encryption spec. - * If this value is zero, all bytes in encrypted region of segments are - * encrypted, i.e. the CENC or CBC1 scheme is being used. - */ - uint32_t blocks_stripe_clear; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAEncryptionParameters; - -/** - * Processing rate parameter for encode. - */ -typedef struct _VAProcessingRateParameterEnc { - /** \brief Profile level */ - uint8_t level_idc; - uint8_t reserved[3]; - /** \brief quality level. When set to 0, default quality - * level is used. - */ - uint32_t quality_level; - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; -} VAProcessingRateParameterEnc; - -/** - * Processing rate parameter for decode. - */ -typedef struct _VAProcessingRateParameterDec { - /** \brief Profile level */ - uint8_t level_idc; - uint8_t reserved0[3]; - uint32_t reserved; -} VAProcessingRateParameterDec; - -typedef struct _VAProcessingRateParameter { - union { - VAProcessingRateParameterEnc proc_buf_enc; - VAProcessingRateParameterDec proc_buf_dec; - }; -} VAProcessingRateParameter; - -/** - * \brief Queries processing rate for the supplied config. - * - * This function queries the processing rate based on parameters in - * \c proc_buf for the given \c config. Upon successful return, the processing - * rate value will be stored in \c processing_rate. Processing rate is - * specified as the number of macroblocks/CTU per second. - * - * If NULL is passed to the \c proc_buf, the default processing rate for the - * given configuration will be returned. - * - * @param[in] dpy the VA display - * @param[in] config the config identifying a codec or a video - * processing pipeline - * @param[in] proc_buf the buffer that contains the parameters for - either the encode or decode processing rate - * @param[out] processing_rate processing rate in number of macroblocks per - second constrained by parameters specified in proc_buf - * - */ -VAStatus -vaQueryProcessingRate( - VADisplay dpy, - VAConfigID config, - VAProcessingRateParameter *proc_buf, - unsigned int *processing_rate -); - -typedef enum { - VAEncMiscParameterTypeFrameRate = 0, - VAEncMiscParameterTypeRateControl = 1, - VAEncMiscParameterTypeMaxSliceSize = 2, - VAEncMiscParameterTypeAIR = 3, - /** \brief Buffer type used to express a maximum frame size (in bits). */ - VAEncMiscParameterTypeMaxFrameSize = 4, - /** \brief Buffer type used for HRD parameters. */ - VAEncMiscParameterTypeHRD = 5, - VAEncMiscParameterTypeQualityLevel = 6, - /** \brief Buffer type used for Rolling intra refresh */ - VAEncMiscParameterTypeRIR = 7, - /** \brief Buffer type used for quantization parameters, it's per-sequence parameter*/ - VAEncMiscParameterTypeQuantization = 8, - /** \brief Buffer type used for sending skip frame parameters to the encoder's - * rate control, when the user has externally skipped frames. */ - VAEncMiscParameterTypeSkipFrame = 9, - /** \brief Buffer type used for region-of-interest (ROI) parameters. */ - VAEncMiscParameterTypeROI = 10, - /** \brief Buffer type used to express a maximum frame size (in bytes) settings for multiple pass. */ - VAEncMiscParameterTypeMultiPassFrameSize = 11, - /** \brief Buffer type used for temporal layer structure */ - VAEncMiscParameterTypeTemporalLayerStructure = 12, - /** \brief Buffer type used for dirty region-of-interest (ROI) parameters. */ - VAEncMiscParameterTypeDirtyRect = 13, - /** \brief Buffer type used for parallel BRC parameters. */ - VAEncMiscParameterTypeParallelBRC = 14, - /** \brief Set MB partion mode mask and Half-pel/Quant-pel motion search */ - VAEncMiscParameterTypeSubMbPartPel = 15, - /** \brief set encode quality tuning */ - VAEncMiscParameterTypeEncQuality = 16, - /** \brief Buffer type used for encoder rounding offset parameters. */ - VAEncMiscParameterTypeCustomRoundingControl = 17, - /** \brief Buffer type used for FEI input frame level parameters */ - VAEncMiscParameterTypeFEIFrameControl = 18, - /** \brief encode extension buffer, ect. MPEG2 Sequence extenstion data */ - VAEncMiscParameterTypeExtensionData = 19 -} VAEncMiscParameterType; - -/** \brief Packed header type. */ -typedef enum { - /** \brief Packed sequence header. */ - VAEncPackedHeaderSequence = 1, - /** \brief Packed picture header. */ - VAEncPackedHeaderPicture = 2, - /** \brief Packed slice header. */ - VAEncPackedHeaderSlice = 3, - /** - * \brief Packed raw header. - * - * Packed raw data header can be used by the client to insert a header - * into the bitstream data buffer at the point it is passed, the driver - * will handle the raw packed header based on "has_emulation_bytes" field - * in the packed header parameter structure. - */ - VAEncPackedHeaderRawData = 4, - /** - * \brief Misc packed header. See codec-specific definitions. - * - * @deprecated - * This is a deprecated packed header type. All applications can use - * \c VAEncPackedHeaderRawData to insert a codec-specific packed header - */ - VAEncPackedHeaderMiscMask va_deprecated_enum = 0x80000000, -} VAEncPackedHeaderType; - -/** \brief Packed header parameter. */ -typedef struct _VAEncPackedHeaderParameterBuffer { - /** Type of the packed header buffer. See #VAEncPackedHeaderType. */ - uint32_t type; - /** \brief Size of the #VAEncPackedHeaderDataBuffer in bits. */ - uint32_t bit_length; - /** \brief Flag: buffer contains start code emulation prevention bytes? */ - uint8_t has_emulation_bytes; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPackedHeaderParameterBuffer; - -/** - * For application, e.g. set a new bitrate - * VABufferID buf_id; - * VAEncMiscParameterBuffer *misc_param; - * VAEncMiscParameterRateControl *misc_rate_ctrl; - * - * vaCreateBuffer(dpy, context, VAEncMiscParameterBufferType, - * sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParameterRateControl), - * 1, NULL, &buf_id); - * - * vaMapBuffer(dpy,buf_id,(void **)&misc_param); - * misc_param->type = VAEncMiscParameterTypeRateControl; - * misc_rate_ctrl= (VAEncMiscParameterRateControl *)misc_param->data; - * misc_rate_ctrl->bits_per_second = 6400000; - * vaUnmapBuffer(dpy, buf_id); - * vaRenderPicture(dpy, context, &buf_id, 1); - */ -typedef struct _VAEncMiscParameterBuffer { - VAEncMiscParameterType type; - uint32_t data[]; -} VAEncMiscParameterBuffer; - -/** \brief Temporal layer Structure*/ -typedef struct _VAEncMiscParameterTemporalLayerStructure { - /** \brief The number of temporal layers */ - uint32_t number_of_layers; - /** \brief The length of the array defining frame layer membership. Should be 1-32 */ - uint32_t periodicity; - /** - * \brief The array indicating the layer id for each frame - * - * The layer id for the first frame in a coded sequence is always 0, so layer_id[] specifies the layer - * ids for frames starting from the 2nd frame. - */ - uint32_t layer_id[32]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterTemporalLayerStructure; - - -/** \brief Rate control parameters */ -typedef struct _VAEncMiscParameterRateControl { - /** The maximum bit-rate which the the rate controller should generate. */ - uint32_t bits_per_second; - /** The target bit-rate which the rate controller should generate, as a percentage of the - * maximum bit-rate. - * - * In CBR mode this value is ignored (treated as 100%). - */ - uint32_t target_percentage; - /** Rate control window size in milliseconds. - * - * The rate controller will attempt to guarantee that the target and maximum bit-rates are - * correct over this window. - */ - uint32_t window_size; - /** Initial quantiser value used at the start of the stream. - * - * Ignored if set to zero. - */ - uint32_t initial_qp; - /** Minimum quantiser value to use. - * - * The quantiser will not go below the value - if this limit is hit, the output bitrate may - * be lower than the target. Ignored if set to zero. - */ - uint32_t min_qp; - /** Basic unit size. - * - * Only used by some drivers - see driver documentation for details. Set to zero if unused. - */ - uint32_t basic_unit_size; - union { - struct { - /** Force rate controller reset. - * - * The next frame will be treated as the start of a new stream, with all rate - * controller state reset to its initial values. - */ - uint32_t reset : 1; - /** Disable frame skip in rate control mode. */ - uint32_t disable_frame_skip : 1; - /** Disable bit stuffing in rate control mode. */ - uint32_t disable_bit_stuffing : 1; - /** Macroblock-level rate control. - * - * 0: use default, 1: always enable, 2: always disable, other: reserved. - * - * This feature is only available if VAConfigAttribRateControl has the - * \ref VA_RC_MB bit set. - */ - uint32_t mb_rate_control : 4; - /** The temporal layer that these rate control parameters apply to. */ - uint32_t temporal_id : 8; - /** Ensure that intra frames also conform to the constant frame size. */ - uint32_t cfs_I_frames : 1; - /** Enable parallel rate control for hierarchical B frames. - * - * See \ref VA_RC_PARALLEL. - */ - uint32_t enable_parallel_brc : 1; - uint32_t enable_dynamic_scaling : 1; - /** Frame tolerance mode. - * - * Indicates the tolerance the application has to variations in the frame size. - * For example, wireless display scenarios may require very steady bit rate to - * reduce buffering time. It affects the rate control algorithm used, - * but may or may not have an effect based on the combination of other BRC - * parameters. Only valid when the driver reports support for - * #VAConfigAttribFrameSizeToleranceSupport. - * - * equals 0 -- normal mode; - * equals 1 -- maps to sliding window; - * equals 2 -- maps to low delay mode; - * other -- invalid. - */ - uint32_t frame_tolerance_mode : 2; - /** Reserved for future use, must be zero. */ - uint32_t reserved : 12; - } bits; - uint32_t value; - } rc_flags; - /** Initial quality factor used in ICQ mode. - * - * This value must be between 1 and 51. - * this value will be deprecated in future, to use quality_factor instead of it. - */ - uint32_t ICQ_quality_factor; - /** Maximum quantiser value to use. - * - * The quantiser will not go above this value - if this limit is hit, the output bitrate - * may exceed the target. Ignored if set to zero. - */ - uint32_t max_qp; - /** Quality factor - * - * the range will be different for different codec - */ - uint32_t quality_factor; - /** Target frame size - * - * Desired frame size in bytes. - * This parameter can be used in some RC modes (like Transport Controlled BRC) - * where feedback from the app is required. - * Zero value means no limits. - * - */ - uint32_t target_frame_size; - /** Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterRateControl; - -/** Encode framerate parameters. - * - * Sets the encode framerate used by the rate controller. This should be - * provided in all modes using a bitrate target (variable framerate is not - * supported). - */ -typedef struct _VAEncMiscParameterFrameRate { - /** Encode framerate. - * - * The framerate is specified as a number of frames per second, as a - * fraction. The denominator of the fraction is given in the top half - * (the high two bytes) of the framerate field, and the numerator is - * given in the bottom half (the low two bytes). - * - * That is: - * denominator = framerate >> 16 & 0xffff; - * numerator = framerate & 0xffff; - * fps = numerator / denominator; - * - * For example, if framerate is set to (100 << 16 | 750), this is - * 750 / 100, hence 7.5fps. - * - * If the denominator is zero (the high two bytes are both zero) then - * it takes the value one instead, so the framerate is just the integer - * in the low 2 bytes. - */ - uint32_t framerate; - union { - struct { - /** The temporal layer that these framerate parameters apply to. */ - uint32_t temporal_id : 8; - /** Reserved for future use, must be zero. */ - uint32_t reserved : 24; - } bits; - uint32_t value; - } framerate_flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterFrameRate; - -/** - * Allow a maximum slice size to be specified (in bits). - * The encoder will attempt to make sure that individual slices do not exceed this size - * Or to signal applicate if the slice size exceed this size, see "status" of VACodedBufferSegment - */ -typedef struct _VAEncMiscParameterMaxSliceSize { - uint32_t max_slice_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterMaxSliceSize; - -typedef struct _VAEncMiscParameterAIR { - uint32_t air_num_mbs; - uint32_t air_threshold; - uint32_t air_auto; /* if set to 1 then hardware auto-tune the AIR threshold */ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterAIR; - -/* - * \brief Rolling intra refresh data structure for encoding. - */ -typedef struct _VAEncMiscParameterRIR { - union { - struct - /** - * \brief Indicate if intra refresh is enabled in column/row. - * - * App should query VAConfigAttribEncIntraRefresh to confirm RIR support - * by the driver before sending this structure. - */ - { - /* \brief enable RIR in column */ - uint32_t enable_rir_column : 1; - /* \brief enable RIR in row */ - uint32_t enable_rir_row : 1; - uint32_t reserved : 30; - } bits; - uint32_t value; - } rir_flags; - /** - * \brief Indicates the column or row location in MB. It is ignored if - * rir_flags is 0. - */ - uint16_t intra_insertion_location; - /** - * \brief Indicates the number of columns or rows in MB. It is ignored if - * rir_flags is 0. - */ - uint16_t intra_insert_size; - /** - * \brief indicates the Qp difference for inserted intra columns or rows. - * App can use this to adjust intra Qp based on bitrate & max frame size. - */ - uint8_t qp_delta_for_inserted_intra; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterRIR; - -/** HRD / VBV buffering parameters for encoding. - * - * This sets the HRD / VBV parameters which will be used by the rate - * controller for encoding. It should be specified in modes using a bitrate - * target when the buffering of the output stream needs to be constrained. - * - * If not provided, the encoder may use arbitrary amounts of buffering. - */ -typedef struct _VAEncMiscParameterHRD { - /** The initial fullness of the HRD coded picture buffer, in bits. - * - * This sets how full the CPB is when encoding begins - that is, how much - * buffering will happen on the decoder side before the first frame. - * The CPB fullness will be reset to this value after any rate control - * reset (a change in parameters or an explicit reset). - * - * For H.264, it should match the value of initial_cpb_removal_delay in - * buffering_period SEI messages. - */ - uint32_t initial_buffer_fullness; - /** The HRD coded picture buffer size, in bits. - * - * For H.264, it should match the value of cpb_size_value_minus1 in the VUI - * parameters. - */ - uint32_t buffer_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterHRD; - -/** - * \brief Defines a maximum frame size (in bits). - * - * This misc parameter buffer defines the maximum size of a frame (in - * bits). The encoder will try to make sure that each frame does not - * exceed this size. Otherwise, if the frame size exceeds this size, - * the \c status flag of #VACodedBufferSegment will contain - * #VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW. - */ -typedef struct _VAEncMiscParameterBufferMaxFrameSize { - /** \brief Type. Shall be set to #VAEncMiscParameterTypeMaxFrameSize. */ - /** duplicated with VAEncMiscParameterBuffer, should be deprecated*/ - va_deprecated VAEncMiscParameterType type; - /** \brief Maximum size of a frame (in bits). */ - uint32_t max_frame_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferMaxFrameSize; - -/** - * \brief Maximum frame size (in bytes) settings for multiple pass. - * - * This misc parameter buffer defines the maximum size of a frame (in - * bytes) settings for multiple pass. currently only AVC encoder can - * support this settings in multiple pass case. If the frame size exceeds - * this size, the encoder will do more pak passes to adjust the QP value - * to control the frame size. - */ -typedef struct _VAEncMiscParameterBufferMultiPassFrameSize { - /** \brief Type. Shall be set to #VAEncMiscParameterTypeMultiPassMaxFrameSize. */ - /** duplicated with VAEncMiscParameterBuffer, should be deprecated*/ - va_deprecated VAEncMiscParameterType type; - /** \brief Maximum size of a frame (in byte) */ - uint32_t max_frame_size; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved; - /** \brief number of passes, every pass has different QP, currently AVC encoder can support up to 4 passes */ - uint8_t num_passes; - /** \brief delta QP list for every pass */ - uint8_t *delta_qp; - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferMultiPassFrameSize; - -/** - * \brief Encoding quality level. - * - * The encoding quality could be set through this structure, if the implementation - * supports multiple quality levels. The quality level set through this structure is - * persistent over the entire coded sequence, or until a new structure is being sent. - * The quality level range can be queried through the VAConfigAttribEncQualityRange - * attribute. A lower value means higher quality, and a value of 1 represents the highest - * quality. The quality level setting is used as a trade-off between quality and speed/power - * consumption, with higher quality corresponds to lower speed and higher power consumption. - */ -typedef struct _VAEncMiscParameterBufferQualityLevel { - /** \brief Encoding quality level setting. When set to 0, default quality - * level is used. - */ - uint32_t quality_level; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferQualityLevel; - -/** - * \brief Quantization settings for encoding. - * - * Some encoders support special types of quantization such as trellis, and this structure - * can be used by the app to control these special types of quantization by the encoder. - */ -typedef struct _VAEncMiscParameterQuantization { - union { - /* if no flags is set then quantization is determined by the driver */ - struct { - /* \brief disable trellis for all frames/fields */ - uint32_t disable_trellis : 1; - /* \brief enable trellis for I frames/fields */ - uint32_t enable_trellis_I : 1; - /* \brief enable trellis for P frames/fields */ - uint32_t enable_trellis_P : 1; - /* \brief enable trellis for B frames/fields */ - uint32_t enable_trellis_B : 1; - uint32_t reserved : 28; - } bits; - uint32_t value; - } quantization_flags; - uint32_t va_reserved; -} VAEncMiscParameterQuantization; - -/** - * \brief Encoding skip frame. - * - * The application may choose to skip frames externally to the encoder (e.g. drop completely or - * code as all skip's). For rate control purposes the encoder will need to know the size and number - * of skipped frames. Skip frame(s) indicated through this structure is applicable only to the - * current frame. It is allowed for the application to still send in packed headers for the driver to - * pack, although no frame will be encoded (e.g. for HW to encrypt the frame). - */ -typedef struct _VAEncMiscParameterSkipFrame { - /** \brief Indicates skip frames as below. - * 0: Encode as normal, no skip. - * 1: One or more frames were skipped prior to the current frame, encode the current frame as normal. - * 2: The current frame is to be skipped, do not encode it but pack/encrypt the packed header contents - * (all except VAEncPackedHeaderSlice) which could contain actual frame contents (e.g. pack the frame - * in VAEncPackedHeaderPicture). */ - uint8_t skip_frame_flag; - /** \brief The number of frames skipped prior to the current frame. Valid when skip_frame_flag = 1. */ - uint8_t num_skip_frames; - /** \brief When skip_frame_flag = 1, the size of the skipped frames in bits. When skip_frame_flag = 2, - * the size of the current skipped frame that is to be packed/encrypted in bits. */ - uint32_t size_skip_frames; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterSkipFrame; - -/** - * \brief Encoding region-of-interest (ROI). - * - * The encoding ROI can be set through VAEncMiscParameterBufferROI, if the implementation - * supports ROI input. The ROI set through this structure is applicable only to the - * current frame or field, so must be sent every frame or field to be applied. The number of - * supported ROIs can be queried through the VAConfigAttribEncROI. The encoder will use the - * ROI information to adjust the QP values of the MB's that fall within the ROIs. - */ -typedef struct _VAEncROI { - /** \brief Defines the ROI boundary in pixels, the driver will map it to appropriate - * codec coding units. It is relative to frame coordinates for the frame case and - * to field coordinates for the field case. */ - VARectangle roi_rectangle; - /** - * \brief ROI value - * - * \ref roi_value specifies ROI delta QP or ROI priority. - * -- ROI delta QP is the value that will be added on top of the frame level QP. - * -- ROI priority specifies the priority of a region, it can be positive (more important) - * or negative (less important) values and is compared with non-ROI region (taken as value 0), - * E.g. ROI region with \ref roi_value -3 is less important than the non-ROI region (\ref roi_value - * implied to be 0) which is less important than ROI region with roi_value +2. For overlapping - * regions, the roi_value that is first in the ROI array will have priority. - * - * \ref roi_value always specifes ROI delta QP when VAConfigAttribRateControl == VA_RC_CQP, no matter - * the value of \c roi_value_is_qp_delta in #VAEncMiscParameterBufferROI. - * - * \ref roi_value depends on \c roi_value_is_qp_delta in #VAEncMiscParameterBufferROI when - * VAConfigAttribRateControl != VA_RC_CQP. \ref roi_value specifies ROI_delta QP if \c roi_value_is_qp_delta - * in VAEncMiscParameterBufferROI is 1, otherwise \ref roi_value specifies ROI priority. - */ - int8_t roi_value; -} VAEncROI; - -typedef struct _VAEncMiscParameterBufferROI { - /** \brief Number of ROIs being sent.*/ - uint32_t num_roi; - - /** \brief Valid when VAConfigAttribRateControl != VA_RC_CQP, then the encoder's - * rate control will determine actual delta QPs. Specifies the max/min allowed delta - * QPs. */ - int8_t max_delta_qp; - int8_t min_delta_qp; - - /** \brief Pointer to a VAEncROI array with num_roi elements. It is relative to frame - * coordinates for the frame case and to field coordinates for the field case.*/ - VAEncROI *roi; - union { - struct { - /** - * \brief An indication for roi value. - * - * \ref roi_value_is_qp_delta equal to 1 indicates \c roi_value in #VAEncROI should - * be used as ROI delta QP. \ref roi_value_is_qp_delta equal to 0 indicates \c roi_value - * in #VAEncROI should be used as ROI priority. - * - * \ref roi_value_is_qp_delta is only available when VAConfigAttribRateControl != VA_RC_CQP, - * the setting must comply with \c roi_rc_priority_support and \c roi_rc_qp_delta_support in - * #VAConfigAttribValEncROI. The underlying driver should ignore this field - * when VAConfigAttribRateControl == VA_RC_CQP. - */ - uint32_t roi_value_is_qp_delta : 1; - uint32_t reserved : 31; - } bits; - uint32_t value; - } roi_flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferROI; -/* - * \brief Dirty rectangle data structure for encoding. - * - * The encoding dirty rect can be set through VAEncMiscParameterBufferDirtyRect, if the - * implementation supports dirty rect input. The rect set through this structure is applicable - * only to the current frame or field, so must be sent every frame or field to be applied. - * The number of supported rects can be queried through the VAConfigAttribEncDirtyRect. The - * encoder will use the rect information to know those rectangle areas have changed while the - * areas not covered by dirty rect rectangles are assumed to have not changed compared to the - * previous picture. The encoder may do some internal optimizations. - */ -typedef struct _VAEncMiscParameterBufferDirtyRect { - /** \brief Number of Rectangle being sent.*/ - uint32_t num_roi_rectangle; - - /** \brief Pointer to a VARectangle array with num_roi_rectangle elements.*/ - VARectangle *roi_rectangle; -} VAEncMiscParameterBufferDirtyRect; - -/** \brief Attribute value for VAConfigAttribEncParallelRateControl */ -typedef struct _VAEncMiscParameterParallelRateControl { - /** brief Number of layers*/ - uint32_t num_layers; - /** brief Number of B frames per layer per GOP. - * - * it should be allocated by application, and the is num_layers. - * num_b_in_gop[0] is the number of regular B which refers to only I or P frames. */ - uint32_t *num_b_in_gop; -} VAEncMiscParameterParallelRateControl; - -/** per frame encoder quality controls, once set they will persist for all future frames - *till it is updated again. */ -typedef struct _VAEncMiscParameterEncQuality { - union { - struct { - /** Use raw frames for reference instead of reconstructed frames. - * it only impact motion estimation (ME) stage, and will not impact MC stage - * so the reconstruct picture will can match with decode side */ - uint32_t useRawPicForRef : 1; - /** Disables skip check for ME stage, it will increase the bistream size - * but will improve the qulity */ - uint32_t skipCheckDisable : 1; - /** Indicates app will override default driver FTQ settings using FTQEnable. - * FTQ is forward transform quantization */ - uint32_t FTQOverride : 1; - /** Enables/disables FTQ. */ - uint32_t FTQEnable : 1; - /** Indicates the app will provide the Skip Threshold LUT to use when FTQ is - * enabled (FTQSkipThresholdLUT), else default driver thresholds will be used. */ - uint32_t FTQSkipThresholdLUTInput : 1; - /** Indicates the app will provide the Skip Threshold LUT to use when FTQ is - * disabled (NonFTQSkipThresholdLUT), else default driver thresholds will be used. */ - uint32_t NonFTQSkipThresholdLUTInput : 1; - uint32_t ReservedBit : 1; - /** Control to enable the ME mode decision algorithm to bias to fewer B Direct/Skip types. - * Applies only to B frames, all other frames will ignore this setting. */ - uint32_t directBiasAdjustmentEnable : 1; - /** Enables global motion bias. global motion also is called HME (Heirarchical Motion Estimation ) - * HME is used to handle large motions and avoiding local minima in the video encoding process - * down scaled the input and reference picture, then do ME. the result will be a predictor to next level HME or ME - * current interface divide the HME to 3 level. UltraHME , SuperHME, and HME, result of UltraHME will be input of SurperHME, - * result of superHME will be a input for HME. HME result will be input of ME. it is a switch for HMEMVCostScalingFactor - * can change the HME bias inside RDO stage*/ - uint32_t globalMotionBiasAdjustmentEnable : 1; - /** MV cost scaling ratio for HME ( predictors. It is used when - * globalMotionBiasAdjustmentEnable == 1, else it is ignored. Values are: - * 0: set MV cost to be 0 for HME predictor. - * 1: scale MV cost to be 1/2 of the default value for HME predictor. - * 2: scale MV cost to be 1/4 of the default value for HME predictor. - * 3: scale MV cost to be 1/8 of the default value for HME predictor. */ - uint32_t HMEMVCostScalingFactor : 2; - /**disable HME, if it is disabled. Super*ultraHME should also be disabled */ - uint32_t HMEDisable : 1; - /**disable Super HME, if it is disabled, ultraHME should be disabled */ - uint32_t SuperHMEDisable : 1; - /** disable Ultra HME */ - uint32_t UltraHMEDisable : 1; - /** disable panic mode. Panic mode happened when there are extreme BRC (bit rate control) requirement - * frame size cant achieve the target of BRC. when Panic mode is triggered, Coefficients will - * be set to zero. disable panic mode will improve quality but will impact BRC */ - uint32_t PanicModeDisable : 1; - /** Force RepartitionCheck - * 0: DEFAULT - follow driver default settings. - * 1: FORCE_ENABLE - enable this feature totally for all cases. - * 2: FORCE_DISABLE - disable this feature totally for all cases. */ - uint32_t ForceRepartitionCheck : 2; - - }; - uint32_t encControls; - }; - - /** Maps QP to skip thresholds when FTQ is enabled. Valid range is 0-255. */ - uint8_t FTQSkipThresholdLUT[52]; - /** Maps QP to skip thresholds when FTQ is disabled. Valid range is 0-65535. */ - uint16_t NonFTQSkipThresholdLUT[52]; - - uint32_t reserved[VA_PADDING_HIGH]; // Reserved for future use. - -} VAEncMiscParameterEncQuality; - -/** - * \brief Custom Encoder Rounding Offset Control. - * Application may use this structure to set customized rounding - * offset parameters for quantization. - * Valid when \c VAConfigAttribCustomRoundingControl equals 1. - */ -typedef struct _VAEncMiscParameterCustomRoundingControl { - union { - struct { - /** \brief Enable customized rounding offset for intra blocks. - * If 0, default value would be taken by driver for intra - * rounding offset. - */ - uint32_t enable_custom_rouding_intra : 1 ; - - /** \brief Intra rounding offset - * Ignored if \c enable_custom_rouding_intra equals 0. - */ - uint32_t rounding_offset_intra : 7; - - /** \brief Enable customized rounding offset for inter blocks. - * If 0, default value would be taken by driver for inter - * rounding offset. - */ - uint32_t enable_custom_rounding_inter : 1 ; - - /** \brief Inter rounding offset - * Ignored if \c enable_custom_rouding_inter equals 0. - */ - uint32_t rounding_offset_inter : 7; - - /* Reserved */ - uint32_t reserved : 16; - } bits; - uint32_t value; - } rounding_offset_setting; -} VAEncMiscParameterCustomRoundingControl; - -/** - * There will be cases where the bitstream buffer will not have enough room to hold - * the data for the entire slice, and the following flags will be used in the slice - * parameter to signal to the server for the possible cases. - * If a slice parameter buffer and slice data buffer pair is sent to the server with - * the slice data partially in the slice data buffer (BEGIN and MIDDLE cases below), - * then a slice parameter and data buffer needs to be sent again to complete this slice. - */ -#define VA_SLICE_DATA_FLAG_ALL 0x00 /* whole slice is in the buffer */ -#define VA_SLICE_DATA_FLAG_BEGIN 0x01 /* The beginning of the slice is in the buffer but the end if not */ -#define VA_SLICE_DATA_FLAG_MIDDLE 0x02 /* Neither beginning nor end of the slice is in the buffer */ -#define VA_SLICE_DATA_FLAG_END 0x04 /* end of the slice is in the buffer */ - -/* Codec-independent Slice Parameter Buffer base */ -typedef struct _VASliceParameterBufferBase { - uint32_t slice_data_size; /* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset; /* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX definitions */ -} VASliceParameterBufferBase; - -/********************************** - * JPEG common data structures - **********************************/ -/** - * \brief Huffman table for JPEG decoding. - * - * This structure holds the complete Huffman tables. This is an - * aggregation of all Huffman table (DHT) segments maintained by the - * application. i.e. up to 2 Huffman tables are stored in there for - * baseline profile. - * - * The #load_huffman_table array can be used as a hint to notify the - * VA driver implementation about which table(s) actually changed - * since the last submission of this buffer. - */ -typedef struct _VAHuffmanTableBufferJPEGBaseline { - /** \brief Specifies which #huffman_table is valid. */ - uint8_t load_huffman_table[2]; - /** \brief Huffman tables indexed by table identifier (Th). */ - struct { - /** @name DC table (up to 12 categories) */ - /**@{*/ - /** \brief Number of Huffman codes of length i + 1 (Li). */ - uint8_t num_dc_codes[16]; - /** \brief Value associated with each Huffman code (Vij). */ - uint8_t dc_values[12]; - /**@}*/ - /** @name AC table (2 special codes + up to 16 * 10 codes) */ - /**@{*/ - /** \brief Number of Huffman codes of length i + 1 (Li). */ - uint8_t num_ac_codes[16]; - /** \brief Value associated with each Huffman code (Vij). */ - uint8_t ac_values[162]; - /** \brief Padding to 4-byte boundaries. Must be set to zero. */ - uint8_t pad[2]; - /**@}*/ - } huffman_table[2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAHuffmanTableBufferJPEGBaseline; - -/**************************** - * MPEG-2 data structures - ****************************/ - -/* MPEG-2 Picture Parameter Buffer */ -/* - * For each frame or field, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferMPEG2 { - uint16_t horizontal_size; - uint16_t vertical_size; - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - /* meanings of the following fields are the same as in the standard */ - int32_t picture_coding_type; - int32_t f_code; /* pack all four fcode into this */ - union { - struct { - uint32_t intra_dc_precision : 2; - uint32_t picture_structure : 2; - uint32_t top_field_first : 1; - uint32_t frame_pred_frame_dct : 1; - uint32_t concealment_motion_vectors : 1; - uint32_t q_scale_type : 1; - uint32_t intra_vlc_format : 1; - uint32_t alternate_scan : 1; - uint32_t repeat_first_field : 1; - uint32_t progressive_frame : 1; - uint32_t is_first_field : 1; /* indicate whether the current field - * is the first field for field picture - */ - } bits; - uint32_t value; - } picture_coding_extension; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureParameterBufferMPEG2; - -/** MPEG-2 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferMPEG2 { - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_intra_quantiser_matrix; - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_non_intra_quantiser_matrix; - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_chroma_intra_quantiser_matrix; - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_chroma_non_intra_quantiser_matrix; - /** \brief Luminance intra matrix, in zig-zag scan order. */ - uint8_t intra_quantiser_matrix[64]; - /** \brief Luminance non-intra matrix, in zig-zag scan order. */ - uint8_t non_intra_quantiser_matrix[64]; - /** \brief Chroma intra matrix, in zig-zag scan order. */ - uint8_t chroma_intra_quantiser_matrix[64]; - /** \brief Chroma non-intra matrix, in zig-zag scan order. */ - uint8_t chroma_non_intra_quantiser_matrix[64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferMPEG2; - -/** MPEG-2 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferMPEG2 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset;/* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - uint32_t slice_horizontal_position; - uint32_t slice_vertical_position; - int32_t quantiser_scale_code; - int32_t intra_slice_flag; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferMPEG2; - -/** MPEG-2 Macroblock Parameter Buffer */ -typedef struct _VAMacroblockParameterBufferMPEG2 { - uint16_t macroblock_address; - /* - * macroblock_address (in raster scan order) - * top-left: 0 - * bottom-right: picture-height-in-mb*picture-width-in-mb - 1 - */ - uint8_t macroblock_type; /* see definition below */ - union { - struct { - uint32_t frame_motion_type : 2; - uint32_t field_motion_type : 2; - uint32_t dct_type : 1; - } bits; - uint32_t value; - } macroblock_modes; - uint8_t motion_vertical_field_select; - /* - * motion_vertical_field_select: - * see section 6.3.17.2 in the spec - * only the lower 4 bits are used - * bit 0: first vector forward - * bit 1: first vector backward - * bit 2: second vector forward - * bit 3: second vector backward - */ - int16_t PMV[2][2][2]; /* see Table 7-7 in the spec */ - uint16_t coded_block_pattern; - /* - * The bitplanes for coded_block_pattern are described - * in Figure 6.10-12 in the spec - */ - - /* Number of skipped macroblocks after this macroblock */ - uint16_t num_skipped_macroblocks; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAMacroblockParameterBufferMPEG2; - -/* - * OR'd flags for macroblock_type (section 6.3.17.1 in the spec) - */ -#define VA_MB_TYPE_MOTION_FORWARD 0x02 -#define VA_MB_TYPE_MOTION_BACKWARD 0x04 -#define VA_MB_TYPE_MOTION_PATTERN 0x08 -#define VA_MB_TYPE_MOTION_INTRA 0x10 - -/** - * MPEG-2 Residual Data Buffer - * For each macroblock, there wil be 64 shorts (16-bit) in the - * residual data buffer - */ - -/**************************** - * MPEG-4 Part 2 data structures - ****************************/ - -/* MPEG-4 Picture Parameter Buffer */ -/* - * For each frame or field, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferMPEG4 { - uint16_t vop_width; - uint16_t vop_height; - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - union { - struct { - uint32_t short_video_header : 1; - uint32_t chroma_format : 2; - uint32_t interlaced : 1; - uint32_t obmc_disable : 1; - uint32_t sprite_enable : 2; - uint32_t sprite_warping_accuracy : 2; - uint32_t quant_type : 1; - uint32_t quarter_sample : 1; - uint32_t data_partitioned : 1; - uint32_t reversible_vlc : 1; - uint32_t resync_marker_disable : 1; - } bits; - uint32_t value; - } vol_fields; - uint8_t no_of_sprite_warping_points; - int16_t sprite_trajectory_du[3]; - int16_t sprite_trajectory_dv[3]; - uint8_t quant_precision; - union { - struct { - uint32_t vop_coding_type : 2; - uint32_t backward_reference_vop_coding_type : 2; - uint32_t vop_rounding_type : 1; - uint32_t intra_dc_vlc_thr : 3; - uint32_t top_field_first : 1; - uint32_t alternate_vertical_scan_flag : 1; - } bits; - uint32_t value; - } vop_fields; - uint8_t vop_fcode_forward; - uint8_t vop_fcode_backward; - uint16_t vop_time_increment_resolution; - /* short header related */ - uint8_t num_gobs_in_vop; - uint8_t num_macroblocks_in_gob; - /* for direct mode prediction */ - int16_t TRB; - int16_t TRD; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureParameterBufferMPEG4; - -/** MPEG-4 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferMPEG4 { - /** Same as the MPEG-4:2 bitstream syntax element. */ - int32_t load_intra_quant_mat; - /** Same as the MPEG-4:2 bitstream syntax element. */ - int32_t load_non_intra_quant_mat; - /** The matrix for intra blocks, in zig-zag scan order. */ - uint8_t intra_quant_mat[64]; - /** The matrix for non-intra blocks, in zig-zag scan order. */ - uint8_t non_intra_quant_mat[64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferMPEG4; - -/** MPEG-4 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferMPEG4 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset;/* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - uint32_t macroblock_number; - int32_t quant_scale; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferMPEG4; - -/** - VC-1 data structures -*/ - -typedef enum /* see 7.1.1.32 */ -{ - VAMvMode1Mv = 0, - VAMvMode1MvHalfPel = 1, - VAMvMode1MvHalfPelBilinear = 2, - VAMvModeMixedMv = 3, - VAMvModeIntensityCompensation = 4 -} VAMvModeVC1; - -/** VC-1 Picture Parameter Buffer */ -/* - * For each picture, and before any slice data, a picture parameter - * buffer must be send. Multiple picture parameter buffers may be - * sent for a single picture. In that case picture parameters will - * apply to all slice data that follow it until a new picture - * parameter buffer is sent. - * - * Notes: - * pic_quantizer_type should be set to the applicable quantizer - * type as defined by QUANTIZER (J.1.19) and either - * PQUANTIZER (7.1.1.8) or PQINDEX (7.1.1.6) - */ -typedef struct _VAPictureParameterBufferVC1 { - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - /* if out-of-loop post-processing is done on the render - target, then we need to keep the in-loop decoded - picture as a reference picture */ - VASurfaceID inloop_decoded_picture; - - /* sequence layer for AP or meta data for SP and MP */ - union { - struct { - uint32_t pulldown : 1; /* SEQUENCE_LAYER::PULLDOWN */ - uint32_t interlace : 1; /* SEQUENCE_LAYER::INTERLACE */ - uint32_t tfcntrflag : 1; /* SEQUENCE_LAYER::TFCNTRFLAG */ - uint32_t finterpflag : 1; /* SEQUENCE_LAYER::FINTERPFLAG */ - uint32_t psf : 1; /* SEQUENCE_LAYER::PSF */ - uint32_t multires : 1; /* METADATA::MULTIRES */ - uint32_t overlap : 1; /* METADATA::OVERLAP */ - uint32_t syncmarker : 1; /* METADATA::SYNCMARKER */ - uint32_t rangered : 1; /* METADATA::RANGERED */ - uint32_t max_b_frames : 3; /* METADATA::MAXBFRAMES */ - uint32_t profile : 2; /* SEQUENCE_LAYER::PROFILE or The MSB of METADATA::PROFILE */ - } bits; - uint32_t value; - } sequence_fields; - - uint16_t coded_width; /* ENTRY_POINT_LAYER::CODED_WIDTH */ - uint16_t coded_height; /* ENTRY_POINT_LAYER::CODED_HEIGHT */ - union { - struct { - uint32_t broken_link : 1; /* ENTRY_POINT_LAYER::BROKEN_LINK */ - uint32_t closed_entry : 1; /* ENTRY_POINT_LAYER::CLOSED_ENTRY */ - uint32_t panscan_flag : 1; /* ENTRY_POINT_LAYER::PANSCAN_FLAG */ - uint32_t loopfilter : 1; /* ENTRY_POINT_LAYER::LOOPFILTER */ - } bits; - uint32_t value; - } entrypoint_fields; - uint8_t conditional_overlap_flag; /* ENTRY_POINT_LAYER::CONDOVER */ - uint8_t fast_uvmc_flag; /* ENTRY_POINT_LAYER::FASTUVMC */ - union { - struct { - uint32_t luma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPY_FLAG */ - uint32_t luma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPY */ - uint32_t chroma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPUV_FLAG */ - uint32_t chroma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPUV */ - } bits; - uint32_t value; - } range_mapping_fields; - - uint8_t b_picture_fraction; /* Index for PICTURE_LAYER::BFRACTION value in Table 40 (7.1.1.14) */ - uint8_t cbp_table; /* PICTURE_LAYER::CBPTAB/ICBPTAB */ - uint8_t mb_mode_table; /* PICTURE_LAYER::MBMODETAB */ - uint8_t range_reduction_frame;/* PICTURE_LAYER::RANGEREDFRM */ - uint8_t rounding_control; /* PICTURE_LAYER::RNDCTRL */ - uint8_t post_processing; /* PICTURE_LAYER::POSTPROC */ - uint8_t picture_resolution_index; /* PICTURE_LAYER::RESPIC */ - uint8_t luma_scale; /* PICTURE_LAYER::LUMSCALE */ - uint8_t luma_shift; /* PICTURE_LAYER::LUMSHIFT */ - - union { - struct { - uint32_t picture_type : 3; /* PICTURE_LAYER::PTYPE */ - uint32_t frame_coding_mode : 3; /* PICTURE_LAYER::FCM */ - uint32_t top_field_first : 1; /* PICTURE_LAYER::TFF */ - uint32_t is_first_field : 1; /* set to 1 if it is the first field */ - uint32_t intensity_compensation : 1; /* PICTURE_LAYER::INTCOMP */ - } bits; - uint32_t value; - } picture_fields; - union { - struct { - uint32_t mv_type_mb : 1; /* PICTURE::MVTYPEMB */ - uint32_t direct_mb : 1; /* PICTURE::DIRECTMB */ - uint32_t skip_mb : 1; /* PICTURE::SKIPMB */ - uint32_t field_tx : 1; /* PICTURE::FIELDTX */ - uint32_t forward_mb : 1; /* PICTURE::FORWARDMB */ - uint32_t ac_pred : 1; /* PICTURE::ACPRED */ - uint32_t overflags : 1; /* PICTURE::OVERFLAGS */ - } flags; - uint32_t value; - } raw_coding; - union { - struct { - uint32_t bp_mv_type_mb : 1; /* PICTURE::MVTYPEMB */ - uint32_t bp_direct_mb : 1; /* PICTURE::DIRECTMB */ - uint32_t bp_skip_mb : 1; /* PICTURE::SKIPMB */ - uint32_t bp_field_tx : 1; /* PICTURE::FIELDTX */ - uint32_t bp_forward_mb : 1; /* PICTURE::FORWARDMB */ - uint32_t bp_ac_pred : 1; /* PICTURE::ACPRED */ - uint32_t bp_overflags : 1; /* PICTURE::OVERFLAGS */ - } flags; - uint32_t value; - } bitplane_present; /* signal what bitplane is being passed via the bitplane buffer */ - union { - struct { - uint32_t reference_distance_flag : 1;/* PICTURE_LAYER::REFDIST_FLAG */ - uint32_t reference_distance : 5;/* PICTURE_LAYER::REFDIST */ - uint32_t num_reference_pictures: 1;/* PICTURE_LAYER::NUMREF */ - uint32_t reference_field_pic_indicator : 1;/* PICTURE_LAYER::REFFIELD */ - } bits; - uint32_t value; - } reference_fields; - union { - struct { - uint32_t mv_mode : 3; /* PICTURE_LAYER::MVMODE */ - uint32_t mv_mode2 : 3; /* PICTURE_LAYER::MVMODE2 */ - uint32_t mv_table : 3; /* PICTURE_LAYER::MVTAB/IMVTAB */ - uint32_t two_mv_block_pattern_table: 2; /* PICTURE_LAYER::2MVBPTAB */ - uint32_t four_mv_switch : 1; /* PICTURE_LAYER::4MVSWITCH */ - uint32_t four_mv_block_pattern_table : 2; /* PICTURE_LAYER::4MVBPTAB */ - uint32_t extended_mv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_MV */ - uint32_t extended_mv_range : 2; /* PICTURE_LAYER::MVRANGE */ - uint32_t extended_dmv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_DMV */ - uint32_t extended_dmv_range : 2; /* PICTURE_LAYER::DMVRANGE */ - } bits; - uint32_t value; - } mv_fields; - union { - struct { - uint32_t dquant : 2; /* ENTRY_POINT_LAYER::DQUANT */ - uint32_t quantizer : 2; /* ENTRY_POINT_LAYER::QUANTIZER */ - uint32_t half_qp : 1; /* PICTURE_LAYER::HALFQP */ - uint32_t pic_quantizer_scale : 5;/* PICTURE_LAYER::PQUANT */ - uint32_t pic_quantizer_type : 1;/* PICTURE_LAYER::PQUANTIZER */ - uint32_t dq_frame : 1; /* VOPDQUANT::DQUANTFRM */ - uint32_t dq_profile : 2; /* VOPDQUANT::DQPROFILE */ - uint32_t dq_sb_edge : 2; /* VOPDQUANT::DQSBEDGE */ - uint32_t dq_db_edge : 2; /* VOPDQUANT::DQDBEDGE */ - uint32_t dq_binary_level : 1; /* VOPDQUANT::DQBILEVEL */ - uint32_t alt_pic_quantizer : 5;/* VOPDQUANT::ALTPQUANT */ - } bits; - uint32_t value; - } pic_quantizer_fields; - union { - struct { - uint32_t variable_sized_transform_flag : 1;/* ENTRY_POINT_LAYER::VSTRANSFORM */ - uint32_t mb_level_transform_type_flag : 1;/* PICTURE_LAYER::TTMBF */ - uint32_t frame_level_transform_type : 2;/* PICTURE_LAYER::TTFRM */ - uint32_t transform_ac_codingset_idx1 : 2;/* PICTURE_LAYER::TRANSACFRM */ - uint32_t transform_ac_codingset_idx2 : 2;/* PICTURE_LAYER::TRANSACFRM2 */ - uint32_t intra_transform_dc_table : 1;/* PICTURE_LAYER::TRANSDCTAB */ - } bits; - uint32_t value; - } transform_fields; - - uint8_t luma_scale2; /* PICTURE_LAYER::LUMSCALE2 */ - uint8_t luma_shift2; /* PICTURE_LAYER::LUMSHIFT2 */ - uint8_t intensity_compensation_field; /* Index for PICTURE_LAYER::INTCOMPFIELD value in Table 109 (9.1.1.48) */ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 1]; -} VAPictureParameterBufferVC1; - -/** VC-1 Bitplane Buffer -There will be at most three bitplanes coded in any picture header. To send -the bitplane data more efficiently, each byte is divided in two nibbles, with -each nibble carrying three bitplanes for one macroblock. The following table -shows the bitplane data arrangement within each nibble based on the picture -type. - -Picture Type Bit3 Bit2 Bit1 Bit0 -I or BI OVERFLAGS ACPRED FIELDTX -P MYTYPEMB SKIPMB DIRECTMB -B FORWARDMB SKIPMB DIRECTMB - -Within each byte, the lower nibble is for the first MB and the upper nibble is -for the second MB. E.g. the lower nibble of the first byte in the bitplane -buffer is for Macroblock #1 and the upper nibble of the first byte is for -Macroblock #2 in the first row. -*/ - -/* VC-1 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferVC1 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset;/* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - uint32_t slice_vertical_position; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferVC1; - -/* VC-1 Slice Data Buffer */ -/* -This is simplely a buffer containing raw bit-stream bytes -*/ - -/**************************** - * H.264/AVC data structures - ****************************/ - -typedef struct _VAPictureH264 { - VASurfaceID picture_id; - uint32_t frame_idx; - uint32_t flags; - int32_t TopFieldOrderCnt; - int32_t BottomFieldOrderCnt; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureH264; -/* flags in VAPictureH264 could be OR of the following */ -#define VA_PICTURE_H264_INVALID 0x00000001 -#define VA_PICTURE_H264_TOP_FIELD 0x00000002 -#define VA_PICTURE_H264_BOTTOM_FIELD 0x00000004 -#define VA_PICTURE_H264_SHORT_TERM_REFERENCE 0x00000008 -#define VA_PICTURE_H264_LONG_TERM_REFERENCE 0x00000010 - -/** H.264 Picture Parameter Buffer */ -/* - * For each picture, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferH264 { - VAPictureH264 CurrPic; - VAPictureH264 ReferenceFrames[16]; /* in DPB */ - uint16_t picture_width_in_mbs_minus1; - uint16_t picture_height_in_mbs_minus1; - uint8_t bit_depth_luma_minus8; - uint8_t bit_depth_chroma_minus8; - uint8_t num_ref_frames; - union { - struct { - uint32_t chroma_format_idc : 2; - uint32_t residual_colour_transform_flag : 1; /* Renamed to separate_colour_plane_flag in newer standard versions. */ - uint32_t gaps_in_frame_num_value_allowed_flag : 1; - uint32_t frame_mbs_only_flag : 1; - uint32_t mb_adaptive_frame_field_flag : 1; - uint32_t direct_8x8_inference_flag : 1; - uint32_t MinLumaBiPredSize8x8 : 1; /* see A.3.3.2 */ - uint32_t log2_max_frame_num_minus4 : 4; - uint32_t pic_order_cnt_type : 2; - uint32_t log2_max_pic_order_cnt_lsb_minus4 : 4; - uint32_t delta_pic_order_always_zero_flag : 1; - } bits; - uint32_t value; - } seq_fields; - // FMO is not supported. - va_deprecated uint8_t num_slice_groups_minus1; - va_deprecated uint8_t slice_group_map_type; - va_deprecated uint16_t slice_group_change_rate_minus1; - int8_t pic_init_qp_minus26; - int8_t pic_init_qs_minus26; - int8_t chroma_qp_index_offset; - int8_t second_chroma_qp_index_offset; - union { - struct { - uint32_t entropy_coding_mode_flag : 1; - uint32_t weighted_pred_flag : 1; - uint32_t weighted_bipred_idc : 2; - uint32_t transform_8x8_mode_flag : 1; - uint32_t field_pic_flag : 1; - uint32_t constrained_intra_pred_flag : 1; - uint32_t pic_order_present_flag : 1; /* Renamed to bottom_field_pic_order_in_frame_present_flag in newer standard versions. */ - uint32_t deblocking_filter_control_present_flag : 1; - uint32_t redundant_pic_cnt_present_flag : 1; - uint32_t reference_pic_flag : 1; /* nal_ref_idc != 0 */ - } bits; - uint32_t value; - } pic_fields; - uint16_t frame_num; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAPictureParameterBufferH264; - -/** H.264 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferH264 { - /** \brief 4x4 scaling list, in raster scan order. */ - uint8_t ScalingList4x4[6][16]; - /** \brief 8x8 scaling list, in raster scan order. */ - uint8_t ScalingList8x8[2][64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferH264; - -/** H.264 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferH264 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - /** \brief Byte offset to the NAL Header Unit for this slice. */ - uint32_t slice_data_offset; - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - /** - * \brief Bit offset from NAL Header Unit to the begining of slice_data(). - * - * This bit offset is relative to and includes the NAL unit byte - * and represents the number of bits parsed in the slice_header() - * after the removal of any emulation prevention bytes in - * there. However, the slice data buffer passed to the hardware is - * the original bitstream, thus including any emulation prevention - * bytes. - */ - uint16_t slice_data_bit_offset; - uint16_t first_mb_in_slice; - uint8_t slice_type; - uint8_t direct_spatial_mv_pred_flag; - /** - * H264/AVC syntax element - * - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l0_default_active_minus1. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** - * H264/AVC syntax element - * - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l1_default_active_minus1. - */ - uint8_t num_ref_idx_l1_active_minus1; - uint8_t cabac_init_idc; - int8_t slice_qp_delta; - uint8_t disable_deblocking_filter_idc; - int8_t slice_alpha_c0_offset_div2; - int8_t slice_beta_offset_div2; - VAPictureH264 RefPicList0[32]; /* See 8.2.4.2 */ - VAPictureH264 RefPicList1[32]; /* See 8.2.4.2 */ - uint8_t luma_log2_weight_denom; - uint8_t chroma_log2_weight_denom; - uint8_t luma_weight_l0_flag; - int16_t luma_weight_l0[32]; - int16_t luma_offset_l0[32]; - uint8_t chroma_weight_l0_flag; - int16_t chroma_weight_l0[32][2]; - int16_t chroma_offset_l0[32][2]; - uint8_t luma_weight_l1_flag; - int16_t luma_weight_l1[32]; - int16_t luma_offset_l1[32]; - uint8_t chroma_weight_l1_flag; - int16_t chroma_weight_l1[32][2]; - int16_t chroma_offset_l1[32][2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferH264; - -/**************************** - * Common encode data structures - ****************************/ -typedef enum { - VAEncPictureTypeIntra = 0, - VAEncPictureTypePredictive = 1, - VAEncPictureTypeBidirectional = 2, -} VAEncPictureType; - -/** - * \brief Encode Slice Parameter Buffer. - * - * @deprecated - * This is a deprecated encode slice parameter buffer, All applications - * \c can use VAEncSliceParameterBufferXXX (XXX = MPEG2, HEVC, H264, JPEG) - */ -typedef struct _VAEncSliceParameterBuffer { - uint32_t start_row_number; /* starting MB row number for this slice */ - uint32_t slice_height; /* slice height measured in MB */ - union { - struct { - uint32_t is_intra : 1; - uint32_t disable_deblocking_filter_idc : 2; - uint32_t uses_long_term_ref : 1; - uint32_t is_long_term_ref : 1; - } bits; - uint32_t value; - } slice_flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSliceParameterBuffer; - - -/**************************** - * H.263 specific encode data structures - ****************************/ - -typedef struct _VAEncSequenceParameterBufferH263 { - uint32_t intra_period; - uint32_t bits_per_second; - uint32_t frame_rate; - uint32_t initial_qp; - uint32_t min_qp; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferH263; - -typedef struct _VAEncPictureParameterBufferH263 { - VASurfaceID reference_picture; - VASurfaceID reconstructed_picture; - VABufferID coded_buf; - uint16_t picture_width; - uint16_t picture_height; - VAEncPictureType picture_type; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferH263; - -/**************************** - * MPEG-4 specific encode data structures - ****************************/ - -typedef struct _VAEncSequenceParameterBufferMPEG4 { - uint8_t profile_and_level_indication; - uint32_t intra_period; - uint32_t video_object_layer_width; - uint32_t video_object_layer_height; - uint32_t vop_time_increment_resolution; - uint32_t fixed_vop_rate; - uint32_t fixed_vop_time_increment; - uint32_t bits_per_second; - uint32_t frame_rate; - uint32_t initial_qp; - uint32_t min_qp; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferMPEG4; - -typedef struct _VAEncPictureParameterBufferMPEG4 { - VASurfaceID reference_picture; - VASurfaceID reconstructed_picture; - VABufferID coded_buf; - uint16_t picture_width; - uint16_t picture_height; - uint32_t modulo_time_base; /* number of 1s */ - uint32_t vop_time_increment; - VAEncPictureType picture_type; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferMPEG4; - - - -/** Buffer functions */ - -/** - * Creates a buffer for "num_elements" elements of "size" bytes and - * initalize with "data". - * if "data" is null, then the contents of the buffer data store - * are undefined. - * Basically there are two ways to get buffer data to the server side. One is - * to call vaCreateBuffer() with a non-null "data", which results the data being - * copied to the data store on the server side. A different method that - * eliminates this copy is to pass null as "data" when calling vaCreateBuffer(), - * and then use vaMapBuffer() to map the data store from the server side to the - * client address space for access. - * The user must call vaDestroyBuffer() to destroy a buffer. - * Note: image buffers are created by the library, not the client. Please see - * vaCreateImage on how image buffers are managed. - */ -VAStatus vaCreateBuffer( - VADisplay dpy, - VAContextID context, - VABufferType type, /* in */ - unsigned int size, /* in */ - unsigned int num_elements, /* in */ - void *data, /* in */ - VABufferID *buf_id /* out */ -); - -/** - * Create a buffer for given width & height get unit_size, pitch, buf_id for 2D buffer - * for permb qp buffer, it will return unit_size for one MB or LCU and the pitch for alignments - * can call vaMapBuffer with this Buffer ID to get virtual address. - * e.g. AVC 1080P encode, 1920x1088, the size in MB is 120x68,but inside driver, - * maybe it should align with 256, and one byte present one Qp.so, call the function. - * then get unit_size = 1, pitch = 256. call vaMapBuffer to get the virtual address (pBuf). - * then read write the memory like 2D. the size is 256x68, application can only use 120x68 - * pBuf + 256 is the start of next line. - * different driver implementation maybe return different unit_size and pitch - */ -VAStatus vaCreateBuffer2( - VADisplay dpy, - VAContextID context, - VABufferType type, - unsigned int width, - unsigned int height, - unsigned int *unit_size, - unsigned int *pitch, - VABufferID *buf_id -); - -/** - * Convey to the server how many valid elements are in the buffer. - * e.g. if multiple slice parameters are being held in a single buffer, - * this will communicate to the server the number of slice parameters - * that are valid in the buffer. - */ -VAStatus vaBufferSetNumElements( - VADisplay dpy, - VABufferID buf_id, /* in */ - unsigned int num_elements /* in */ -); - - -/** - * device independent data structure for codedbuffer - */ - -/* - * FICTURE_AVE_QP(bit7-0): The average Qp value used during this frame - * LARGE_SLICE(bit8):At least one slice in the current frame was large - * enough for the encoder to attempt to limit its size. - * SLICE_OVERFLOW(bit9): At least one slice in the current frame has - * exceeded the maximum slice size specified. - * BITRATE_OVERFLOW(bit10): The peak bitrate was exceeded for this frame. - * BITRATE_HIGH(bit11): The frame size got within the safety margin of the maximum size (VCM only) - * AIR_MB_OVER_THRESHOLD: the number of MBs adapted to Intra MB - */ -#define VA_CODED_BUF_STATUS_PICTURE_AVE_QP_MASK 0xff -#define VA_CODED_BUF_STATUS_LARGE_SLICE_MASK 0x100 -#define VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK 0x200 -#define VA_CODED_BUF_STATUS_BITRATE_OVERFLOW 0x400 -#define VA_CODED_BUF_STATUS_BITRATE_HIGH 0x800 -/** - * \brief The frame has exceeded the maximum requested size. - * - * This flag indicates that the encoded frame size exceeds the value - * specified through a misc parameter buffer of type - * #VAEncMiscParameterTypeMaxFrameSize. - */ -#define VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW 0x1000 -/** - * \brief the bitstream is bad or corrupt. - */ -#define VA_CODED_BUF_STATUS_BAD_BITSTREAM 0x8000 -#define VA_CODED_BUF_STATUS_AIR_MB_OVER_THRESHOLD 0xff0000 - -/** - * \brief The coded buffer segment status contains frame encoding passes number - * - * This is the mask to get the number of encoding passes from the coded - * buffer segment status. - * NUMBER_PASS(bit24~bit27): the number for encoding passes executed for the coded frame. - * - */ -#define VA_CODED_BUF_STATUS_NUMBER_PASSES_MASK 0xf000000 - -/** - * \brief The coded buffer segment contains a single NAL unit. - * - * This flag indicates that the coded buffer segment contains a - * single NAL unit. This flag might be useful to the user for - * processing the coded buffer. - */ -#define VA_CODED_BUF_STATUS_SINGLE_NALU 0x10000000 - -/** - * \brief Coded buffer segment. - * - * #VACodedBufferSegment is an element of a linked list describing - * some information on the coded buffer. The coded buffer segment - * could contain either a single NAL unit, or more than one NAL unit. - * It is recommended (but not required) to return a single NAL unit - * in a coded buffer segment, and the implementation should set the - * VA_CODED_BUF_STATUS_SINGLE_NALU status flag if that is the case. - */ -typedef struct _VACodedBufferSegment { - /** - * \brief Size of the data buffer in this segment (in bytes). - */ - uint32_t size; - /** \brief Bit offset into the data buffer where the video data starts. */ - uint32_t bit_offset; - /** \brief Status set by the driver. See \c VA_CODED_BUF_STATUS_*. */ - uint32_t status; - /** \brief Reserved for future use. */ - uint32_t reserved; - /** \brief Pointer to the start of the data buffer. */ - void *buf; - /** - * \brief Pointer to the next #VACodedBufferSegment element, - * or \c NULL if there is none. - */ - void *next; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VACodedBufferSegment; - -/** - * Map data store of the buffer into the client's address space - * vaCreateBuffer() needs to be called with "data" set to NULL before - * calling vaMapBuffer() - * - * if buffer type is VAEncCodedBufferType, pbuf points to link-list of - * VACodedBufferSegment, and the list is terminated if "next" is NULL - */ -VAStatus vaMapBuffer( - VADisplay dpy, - VABufferID buf_id, /* in */ - void **pbuf /* out */ -); - -/** - * After client making changes to a mapped data store, it needs to - * "Unmap" it to let the server know that the data is ready to be - * consumed by the server - */ -VAStatus vaUnmapBuffer( - VADisplay dpy, - VABufferID buf_id /* in */ -); - -/** - * After this call, the buffer is deleted and this buffer_id is no longer valid - * - * A buffer can be re-used and sent to the server by another Begin/Render/End - * sequence if vaDestroyBuffer() is not called with this buffer. - * - * Note re-using a shared buffer (e.g. a slice data buffer) between the host and the - * hardware accelerator can result in performance dropping. - */ -VAStatus vaDestroyBuffer( - VADisplay dpy, - VABufferID buffer_id -); - -/** \brief VA buffer information */ -typedef struct { - /** \brief Buffer handle */ - uintptr_t handle; - /** \brief Buffer type (See \ref VABufferType). */ - uint32_t type; - /** - * \brief Buffer memory type (See \ref VASurfaceAttribMemoryType). - * - * On input to vaAcquireBufferHandle(), this field can serve as a hint - * to specify the set of memory types the caller is interested in. - * On successful return from vaAcquireBufferHandle(), the field is - * updated with the best matching memory type. - */ - uint32_t mem_type; - /** \brief Size of the underlying buffer. */ - size_t mem_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VABufferInfo; - -/** - * \brief Acquires buffer handle for external API usage - * - * Locks the VA buffer object \ref buf_id for external API usage like - * EGL or OpenCL (OCL). This function is a synchronization point. This - * means that any pending operation is guaranteed to be completed - * prior to returning from the function. - * - * If the referenced VA buffer object is the backing store of a VA - * surface, then this function acts as if vaSyncSurface() on the - * parent surface was called first. - * - * The \ref VABufferInfo argument shall be zero'ed on input. On - * successful output, the data structure is filled in with all the - * necessary buffer level implementation details like handle, type, - * memory type and memory size. - * - * Note: the external API implementation, or the application, can - * express the memory types it is interested in by filling in the \ref - * mem_type field accordingly. On successful output, the memory type - * that fits best the request and that was used is updated in the \ref - * VABufferInfo data structure. If none of the supplied memory types - * is supported, then a \ref VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE - * error is returned. - * - * The \ref VABufferInfo data is valid until vaReleaseBufferHandle() - * is called. Besides, no additional operation is allowed on any of - * the buffer parent object until vaReleaseBufferHandle() is called. - * e.g. decoding into a VA surface backed with the supplied VA buffer - * object \ref buf_id would fail with a \ref VA_STATUS_ERROR_SURFACE_BUSY - * error. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied - * - \ref VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation - * does not support exporting buffers of the specified type - * - \ref VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE: none of the requested - * memory types in \ref VABufferInfo.mem_type was supported - * - * @param[in] dpy the VA display - * @param[in] buf_id the VA buffer - * @param[in,out] buf_info the associated VA buffer information - * @return VA_STATUS_SUCCESS if successful - */ -VAStatus -vaAcquireBufferHandle(VADisplay dpy, VABufferID buf_id, VABufferInfo *buf_info); - -/** - * \brief Releases buffer after usage from external API - * - * Unlocks the VA buffer object \ref buf_id from external API usage like - * EGL or OpenCL (OCL). This function is a synchronization point. This - * means that any pending operation is guaranteed to be completed - * prior to returning from the function. - * - * The \ref VABufferInfo argument shall point to the original data - * structure that was obtained from vaAcquireBufferHandle(), unaltered. - * This is necessary so that the VA driver implementation could - * deallocate any resources that were needed. - * - * In any case, returning from this function invalidates any contents - * in \ref VABufferInfo. i.e. the underlyng buffer handle is no longer - * valid. Therefore, VA driver implementations are free to reset this - * data structure to safe defaults. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied - * - \ref VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation - * does not support exporting buffers of the specified type - * - * @param[in] dpy the VA display - * @param[in] buf_id the VA buffer - * @return VA_STATUS_SUCCESS if successful - */ -VAStatus -vaReleaseBufferHandle(VADisplay dpy, VABufferID buf_id); - -/** @name vaExportSurfaceHandle() flags - * - * @{ - */ -/** Export surface to be read by external API. */ -#define VA_EXPORT_SURFACE_READ_ONLY 0x0001 -/** Export surface to be written by external API. */ -#define VA_EXPORT_SURFACE_WRITE_ONLY 0x0002 -/** Export surface to be both read and written by external API. */ -#define VA_EXPORT_SURFACE_READ_WRITE 0x0003 -/** Export surface with separate layers. - * - * For example, NV12 surfaces should be exported as two separate - * planes for luma and chroma. - */ -#define VA_EXPORT_SURFACE_SEPARATE_LAYERS 0x0004 -/** Export surface with composed layers. - * - * For example, NV12 surfaces should be exported as a single NV12 - * composed object. - */ -#define VA_EXPORT_SURFACE_COMPOSED_LAYERS 0x0008 - -/** @} */ - -/** - * \brief Export a handle to a surface for use with an external API - * - * The exported handles are owned by the caller, and the caller is - * responsible for freeing them when no longer needed (e.g. by closing - * DRM PRIME file descriptors). - * - * This does not perform any synchronisation. If the contents of the - * surface will be read, vaSyncSurface() must be called before doing so. - * If the contents of the surface are written, then all operations must - * be completed externally before using the surface again by via VA-API - * functions. - * - * @param[in] dpy VA display. - * @param[in] surface_id Surface to export. - * @param[in] mem_type Memory type to export to. - * @param[in] flags Combination of flags to apply - * (VA_EXPORT_SURFACE_*). - * @param[out] descriptor Pointer to the descriptor structure to fill - * with the handle details. The type of this structure depends on - * the value of mem_type. - * - * @return Status code: - * - VA_STATUS_SUCCESS: Success. - * - VA_STATUS_ERROR_INVALID_DISPLAY: The display is not valid. - * - VA_STATUS_ERROR_UNIMPLEMENTED: The driver does not implement - * this interface. - * - VA_STATUS_ERROR_INVALID_SURFACE: The surface is not valid, or - * the surface is not exportable in the specified way. - * - VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE: The driver does not - * support exporting surfaces to the specified memory type. - */ -VAStatus vaExportSurfaceHandle(VADisplay dpy, - VASurfaceID surface_id, - uint32_t mem_type, uint32_t flags, - void *descriptor); - -/** - * Render (Video Decode/Encode/Processing) Pictures - * - * A picture represents either a frame or a field. - * - * The Begin/Render/End sequence sends the video decode/encode/processing buffers - * to the server - */ - -/** - * Get ready for a video pipeline - * - decode a picture to a target surface - * - encode a picture from a target surface - * - process a picture to a target surface - */ -VAStatus vaBeginPicture( - VADisplay dpy, - VAContextID context, - VASurfaceID render_target -); - -/** - * Send video decode, encode or processing buffers to the server. - */ -VAStatus vaRenderPicture( - VADisplay dpy, - VAContextID context, - VABufferID *buffers, - int num_buffers -); - -/** - * Make the end of rendering for a picture. - * The server should start processing all pending operations for this - * surface. This call is non-blocking. The client can start another - * Begin/Render/End sequence on a different render target. - * if VAContextID used in this function previously successfully passed - * vaMFAddContext call, real processing will be started during vaMFSubmit - */ -VAStatus vaEndPicture( - VADisplay dpy, - VAContextID context -); - -/** - * Make the end of rendering for a pictures in contexts passed with submission. - * The server should start processing all pending operations for contexts. - * All contexts passed should be associated through vaMFAddContext - * and call sequence Begin/Render/End performed. - * This call is non-blocking. The client can start another - * Begin/Render/End/vaMFSubmit sequence on a different render targets. - * Return values: - * VA_STATUS_SUCCESS - operation successful, context was removed. - * VA_STATUS_ERROR_INVALID_CONTEXT - mf_context or one of contexts are invalid - * due to mf_context not created or one of contexts not assotiated with mf_context - * through vaAddContext. - * VA_STATUS_ERROR_INVALID_PARAMETER - one of context has not submitted it's frame - * through vaBeginPicture vaRenderPicture vaEndPicture call sequence. - * dpy: display - * mf_context: Multi-Frame context - * contexts: list of contexts submitting their tasks for multi-frame operation. - * num_contexts: number of passed contexts. - */ -VAStatus vaMFSubmit( - VADisplay dpy, - VAMFContextID mf_context, - VAContextID * contexts, - int num_contexts -); - -/* - -Synchronization - -*/ - -/** - * This function blocks until all pending operations on the render target - * have been completed. Upon return it is safe to use the render target for a - * different picture. - */ -VAStatus vaSyncSurface( - VADisplay dpy, - VASurfaceID render_target -); - -/** \brief Indicates an infinite timeout. */ -#define VA_TIMEOUT_INFINITE 0xFFFFFFFFFFFFFFFF - -/** - * \brief Synchronizes pending operations associated with the supplied surface. - * - * This function blocks during specified timeout (in nanoseconds) until - * all pending operations on the render target have been completed. - * If timeout is zero, the function returns immediately. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_SURFACE: an invalid surface was supplied - * - \ref VA_STATUS_ERROR_TIMEDOUT: synchronization is still in progress, - * client should call the function again to complete synchronization - * - * @param[in] dpy the VA display - * @param[in] surface the surface for which synchronization is performed - * @param[in] timeout_ns the timeout in nanoseconds - * - */ -VAStatus vaSyncSurface2( - VADisplay dpy, - VASurfaceID surface, - uint64_t timeout_ns -); - -typedef enum { - VASurfaceRendering = 1, /* Rendering in progress */ - VASurfaceDisplaying = 2, /* Displaying in progress (not safe to render into it) */ - /* this status is useful if surface is used as the source */ - /* of an overlay */ - VASurfaceReady = 4, /* not being rendered or displayed */ - VASurfaceSkipped = 8 /* Indicate a skipped frame during encode */ -} VASurfaceStatus; - -/** - * Find out any pending ops on the render target - */ -VAStatus vaQuerySurfaceStatus( - VADisplay dpy, - VASurfaceID render_target, - VASurfaceStatus *status /* out */ -); - -typedef enum { - VADecodeSliceMissing = 0, - VADecodeMBError = 1, -} VADecodeErrorType; - -/** - * Client calls vaQuerySurfaceError with VA_STATUS_ERROR_DECODING_ERROR, server side returns - * an array of structure VASurfaceDecodeMBErrors, and the array is terminated by setting status=-1 -*/ -typedef struct _VASurfaceDecodeMBErrors { - int32_t status; /* 1 if hardware has returned detailed info below, -1 means this record is invalid */ - uint32_t start_mb; /* start mb address with errors */ - uint32_t end_mb; /* end mb address with errors */ - VADecodeErrorType decode_error_type; - uint32_t num_mb; /* number of mbs with errors */ - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW - 1]; -} VASurfaceDecodeMBErrors; - -/** - * After the application gets VA_STATUS_ERROR_DECODING_ERROR after calling vaSyncSurface(), - * it can call vaQuerySurfaceError to find out further details on the particular error. - * VA_STATUS_ERROR_DECODING_ERROR should be passed in as "error_status", - * upon the return, error_info will point to an array of _VASurfaceDecodeMBErrors structure, - * which is allocated and filled by libVA with detailed information on the missing or error macroblocks. - * The array is terminated if "status==-1" is detected. - */ -VAStatus vaQuerySurfaceError( - VADisplay dpy, - VASurfaceID surface, - VAStatus error_status, - void **error_info -); - -/** - * \brief Synchronizes pending operations associated with the supplied buffer. - * - * This function blocks during specified timeout (in nanoseconds) until - * all pending operations on the supplied buffer have been completed. - * If timeout is zero, the function returns immediately. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied - * - \ref VA_STATUS_ERROR_TIMEDOUT: synchronization is still in progress, - * client should call the function again to complete synchronization - * - * @param[in] dpy the VA display - * @param[in] buf_id the buffer for which synchronization is performed - * @param[in] timeout_ns the timeout in nanoseconds - * - */ -VAStatus vaSyncBuffer( - VADisplay dpy, - VABufferID buf_id, - uint64_t timeout_ns -); - -/** - * Notes about synchronization interfaces: - * vaSyncSurface: - * 1. Allows to synchronize output surface (i.e. from decoding or VP) - * 2. Allows to synchronize all bitstreams being encoded from the given input surface (1->N pipelines). - * - * vaSyncSurface2: - * 1. The same as vaSyncSurface but allows to specify a timeout - * - * vaSyncBuffer: - * 1. Allows to synchronize output buffer (e.g. bitstream from encoding). - * Comparing to vaSyncSurface this function synchronizes given bitstream only. - */ - -/** - * Images and Subpictures - * VAImage is used to either get the surface data to client memory, or - * to copy image data in client memory to a surface. - * Both images, subpictures and surfaces follow the same 2D coordinate system where origin - * is at the upper left corner with positive X to the right and positive Y down - */ -#define VA_FOURCC(ch0, ch1, ch2, ch3) \ - ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \ - ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigned char) (ch3) << 24 )) - -/* Pre-defined fourcc codes. */ - -/** NV12: two-plane 8-bit YUV 4:2:0. - * The first plane contains Y, the second plane contains U and V in pairs of bytes. - */ -#define VA_FOURCC_NV12 0x3231564E -/** NV21: two-plane 8-bit YUV 4:2:0. - * Same as NV12, but with U and V swapped. - */ -#define VA_FOURCC_NV21 0x3132564E - -/** AI44: packed 4-bit YA. - * - * The bottom half of each byte contains luma, the top half contains alpha. - */ -#define VA_FOURCC_AI44 0x34344149 - -/** RGBA: packed 8-bit RGBA. - * - * Four bytes per pixel: red, green, blue, alpha. - */ -#define VA_FOURCC_RGBA 0x41424752 -/** RGBX: packed 8-bit RGB. - * - * Four bytes per pixel: red, green, blue, unspecified. - */ -#define VA_FOURCC_RGBX 0x58424752 -/** BGRA: packed 8-bit RGBA. - * - * Four bytes per pixel: blue, green, red, alpha. - */ -#define VA_FOURCC_BGRA 0x41524742 -/** BGRX: packed 8-bit RGB. - * - * Four bytes per pixel: blue, green, red, unspecified. - */ -#define VA_FOURCC_BGRX 0x58524742 -/** ARGB: packed 8-bit RGBA. - * - * Four bytes per pixel: alpha, red, green, blue. - */ -#define VA_FOURCC_ARGB 0x42475241 -/** XRGB: packed 8-bit RGB. - * - * Four bytes per pixel: unspecified, red, green, blue. - */ -#define VA_FOURCC_XRGB 0x42475258 -/** ABGR: packed 8-bit RGBA. - * - * Four bytes per pixel: alpha, blue, green, red. - */ -#define VA_FOURCC_ABGR 0x52474241 -/** XBGR: packed 8-bit RGB. - * - * Four bytes per pixel: unspecified, blue, green, red. - */ -#define VA_FOURCC_XBGR 0x52474258 - -/** UYUV: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: U, Y, U, V. - */ -#define VA_FOURCC_UYVY 0x59565955 -/** YUY2: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: Y, U, Y, V. - */ -#define VA_FOURCC_YUY2 0x32595559 -/** AYUV: packed 8-bit YUVA 4:4:4. - * - * Four bytes per pixel: A, Y, U, V. - */ -#define VA_FOURCC_AYUV 0x56555941 -/** NV11: two-plane 8-bit YUV 4:1:1. - * - * The first plane contains Y, the second plane contains U and V in pairs of bytes. - */ -#define VA_FOURCC_NV11 0x3131564e -/** YV12: three-plane 8-bit YUV 4:2:0. - * - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_YV12 0x32315659 -/** P208: two-plane 8-bit YUV 4:2:2. - * - * The first plane contains Y, the second plane contains U and V in pairs of bytes. - */ -#define VA_FOURCC_P208 0x38303250 -/** I420: three-plane 8-bit YUV 4:2:0. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_I420 0x30323449 -/** YV24: three-plane 8-bit YUV 4:4:4. - * - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_YV24 0x34325659 -/** YV32: four-plane 8-bit YUVA 4:4:4 - * - * The four planes contain Y, V, U and A respectively. - */ -#define VA_FOURCC_YV32 0x32335659 -/** Y800: 8-bit greyscale. - */ -#define VA_FOURCC_Y800 0x30303859 -/** IMC3: three-plane 8-bit YUV 4:2:0. - * - * Equivalent to YV12, but with the additional constraint that the pitch of all three planes - * must be the same. - */ -#define VA_FOURCC_IMC3 0x33434D49 -/** 411P: three-plane 8-bit YUV 4:1:1. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_411P 0x50313134 -/** 411R: three-plane 8-bit YUV. - * - * The subsampling is the transpose of 4:1:1 - full chroma appears on every fourth line. - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_411R 0x52313134 -/** 422H: three-plane 8-bit YUV 4:2:2. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_422H 0x48323234 -/** 422V: three-plane 8-bit YUV 4:4:0. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_422V 0x56323234 -/** 444P: three-plane 8-bit YUV 4:4:4. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_444P 0x50343434 - -/** RGBP: three-plane 8-bit RGB. - * - * The three planes contain red, green and blue respectively. - */ -#define VA_FOURCC_RGBP 0x50424752 -/** BGRP: three-plane 8-bit RGB. - * - * The three planes contain blue, green and red respectively. - */ -#define VA_FOURCC_BGRP 0x50524742 -/** RG16: packed 5/6-bit RGB. - * - * Each pixel is a two-byte little-endian value. - * Red, green and blue are found in bits 15:11, 10:5, 4:0 respectively. - */ -#define VA_FOURCC_RGB565 0x36314752 -/** BG16: packed 5/6-bit RGB. - * - * Each pixel is a two-byte little-endian value. - * Blue, green and red are found in bits 15:11, 10:5, 4:0 respectively. - */ -#define VA_FOURCC_BGR565 0x36314742 - -/** Y210: packed 10-bit YUV 4:2:2. - * - * Eight bytes represent a pair of pixels. Each sample is a two-byte little-endian value, - * with the bottom six bits ignored. The samples are in the order Y, U, Y, V. - */ -#define VA_FOURCC_Y210 0x30313259 -/** Y212: packed 12-bit YUV 4:2:2. - * - * Eight bytes represent a pair of pixels. Each sample is a two-byte little-endian value. - * The samples are in the order Y, U, Y, V. - */ -#define VA_FOURCC_Y212 0x32313259 -/** Y216: packed 16-bit YUV 4:2:2. - * - * Eight bytes represent a pair of pixels. Each sample is a two-byte little-endian value. - * The samples are in the order Y, U, Y, V. - */ -#define VA_FOURCC_Y216 0x36313259 -/** Y410: packed 10-bit YUVA 4:4:4. - * - * Each pixel is a four-byte little-endian value. - * A, V, Y, U are found in bits 31:30, 29:20, 19:10, 9:0 respectively. - */ -#define VA_FOURCC_Y410 0x30313459 -/** Y412 packed 12-bit YUVA 4:4:4. - * - * Each pixel is a set of four samples, each of which is a two-byte little-endian value. - * The samples are in the order A, V, Y, U. - */ -#define VA_FOURCC_Y412 0x32313459 -/** Y416: packed 16-bit YUVA 4:4:4. - * - * Each pixel is a set of four samples, each of which is a two-byte little-endian value. - * The samples are in the order A, V, Y, U. - */ -#define VA_FOURCC_Y416 0x36313459 - -/** YV16: three-plane 8-bit YUV 4:2:2. - * - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_YV16 0x36315659 -/** P010: two-plane 10-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value with the bottom six bits ignored. - * The first plane contains Y, the second plane contains U and V in pairs of samples. - */ -#define VA_FOURCC_P010 0x30313050 -/** P012: two-plane 12-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value with the bottom four bits ignored. - * The first plane contains Y, the second plane contains U and V in pairs of samples. - */ -#define VA_FOURCC_P012 0x32313050 -/** P016: two-plane 16-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value. The first plane contains Y, the second - * plane contains U and V in pairs of samples. - */ -#define VA_FOURCC_P016 0x36313050 - -/** I010: three-plane 10-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value with the top six bits ignored. - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_I010 0x30313049 - -/** IYUV: three-plane 8-bit YUV 4:2:0. - * - * @deprecated Use I420 instead. - */ -#define VA_FOURCC_IYUV 0x56555949 -/** - * 10-bit Pixel RGB formats. - */ -#define VA_FOURCC_A2R10G10B10 0x30335241 /* VA_FOURCC('A','R','3','0') */ -/** - * 10-bit Pixel BGR formats. - */ -#define VA_FOURCC_A2B10G10R10 0x30334241 /* VA_FOURCC('A','B','3','0') */ -/** - * 10-bit Pixel RGB formats without alpha. - */ -#define VA_FOURCC_X2R10G10B10 0x30335258 /* VA_FOURCC('X','R','3','0') */ -/** - * 10-bit Pixel BGR formats without alpha. - */ -#define VA_FOURCC_X2B10G10R10 0x30334258 /* VA_FOURCC('X','B','3','0') */ - -/** Y8: 8-bit greyscale. - * - * Only a single sample, 8 bit Y plane for monochrome images - */ -#define VA_FOURCC_Y8 0x20203859 -/** Y16: 16-bit greyscale. - * - * Only a single sample, 16 bit Y plane for monochrome images - */ -#define VA_FOURCC_Y16 0x20363159 -/** VYUV: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: V, Y, U, V. - */ -#define VA_FOURCC_VYUY 0x59555956 -/** YVYU: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: Y, V, Y, U. - */ -#define VA_FOURCC_YVYU 0x55595659 -/** AGRB64: three-plane 16-bit ARGB 16:16:16:16 - * - * The four planes contain: alpha, red, green, blue respectively. - */ -#define VA_FOURCC_ARGB64 0x34475241 -/** ABGR64: three-plane 16-bit ABGR 16:16:16:16 - * - * The four planes contain: alpha, blue, green, red respectively. - */ -#define VA_FOURCC_ABGR64 0x34474241 -/** XYUV: packed 8-bit YUVX 4:4:4. - * - * Four bytes per pixel: X, Y, U, V. - */ -#define VA_FOURCC_XYUV 0x56555958 - -/* byte order */ -#define VA_LSB_FIRST 1 -#define VA_MSB_FIRST 2 - -typedef struct _VAImageFormat { - uint32_t fourcc; - uint32_t byte_order; /* VA_LSB_FIRST, VA_MSB_FIRST */ - uint32_t bits_per_pixel; - /* for RGB formats */ - uint32_t depth; /* significant bits per pixel */ - uint32_t red_mask; - uint32_t green_mask; - uint32_t blue_mask; - uint32_t alpha_mask; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAImageFormat; - -typedef VAGenericID VAImageID; - -typedef struct _VAImage { - VAImageID image_id; /* uniquely identify this image */ - VAImageFormat format; - VABufferID buf; /* image data buffer */ - /* - * Image data will be stored in a buffer of type VAImageBufferType to facilitate - * data store on the server side for optimal performance. The buffer will be - * created by the CreateImage function, and proper storage allocated based on the image - * size and format. This buffer is managed by the library implementation, and - * accessed by the client through the buffer Map/Unmap functions. - */ - uint16_t width; - uint16_t height; - uint32_t data_size; - uint32_t num_planes; /* can not be greater than 3 */ - /* - * An array indicating the scanline pitch in bytes for each plane. - * Each plane may have a different pitch. Maximum 3 planes for planar formats - */ - uint32_t pitches[3]; - /* - * An array indicating the byte offset from the beginning of the image data - * to the start of each plane. - */ - uint32_t offsets[3]; - - /* The following fields are only needed for paletted formats */ - int32_t num_palette_entries; /* set to zero for non-palette images */ - /* - * Each component is one byte and entry_bytes indicates the number of components in - * each entry (eg. 3 for YUV palette entries). set to zero for non-palette images - */ - int32_t entry_bytes; - /* - * An array of ascii characters describing the order of the components within the bytes. - * Only entry_bytes characters of the string are used. - */ - int8_t component_order[4]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAImage; - -/** Get maximum number of image formats supported by the implementation */ -int vaMaxNumImageFormats( - VADisplay dpy -); - -/** - * Query supported image formats - * The caller must provide a "format_list" array that can hold at - * least vaMaxNumImageFormats() entries. The actual number of formats - * returned in "format_list" is returned in "num_formats". - */ -VAStatus vaQueryImageFormats( - VADisplay dpy, - VAImageFormat *format_list, /* out */ - int *num_formats /* out */ -); - -/** - * Create a VAImage structure - * The width and height fields returned in the VAImage structure may get - * enlarged for some YUV formats. Upon return from this function, - * image->buf has been created and proper storage allocated by the library. - * The client can access the image through the Map/Unmap calls. - */ -VAStatus vaCreateImage( - VADisplay dpy, - VAImageFormat *format, - int width, - int height, - VAImage *image /* out */ -); - -/** - * Should call DestroyImage before destroying the surface it is bound to - */ -VAStatus vaDestroyImage( - VADisplay dpy, - VAImageID image -); - -VAStatus vaSetImagePalette( - VADisplay dpy, - VAImageID image, - /* - * pointer to an array holding the palette data. The size of the array is - * num_palette_entries * entry_bytes in size. The order of the components - * in the palette is described by the component_order in VAImage struct - */ - unsigned char *palette -); - -/** - * Retrive surface data into a VAImage - * Image must be in a format supported by the implementation - */ -VAStatus vaGetImage( - VADisplay dpy, - VASurfaceID surface, - int x, /* coordinates of the upper left source pixel */ - int y, - unsigned int width, /* width and height of the region */ - unsigned int height, - VAImageID image -); - -/** - * Copy data from a VAImage to a surface - * Image must be in a format supported by the implementation - * Returns a VA_STATUS_ERROR_SURFACE_BUSY if the surface - * shouldn't be rendered into when this is called - */ -VAStatus vaPutImage( - VADisplay dpy, - VASurfaceID surface, - VAImageID image, - int src_x, - int src_y, - unsigned int src_width, - unsigned int src_height, - int dest_x, - int dest_y, - unsigned int dest_width, - unsigned int dest_height -); - -/** - * Derive an VAImage from an existing surface. - * This interface will derive a VAImage and corresponding image buffer from - * an existing VA Surface. The image buffer can then be mapped/unmapped for - * direct CPU access. This operation is only possible on implementations with - * direct rendering capabilities and internal surface formats that can be - * represented with a VAImage. When the operation is not possible this interface - * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back - * to using vaCreateImage + vaPutImage to accomplish the same task in an - * indirect manner. - * - * Implementations should only return success when the resulting image buffer - * would be useable with vaMap/Unmap. - * - * When directly accessing a surface special care must be taken to insure - * proper synchronization with the graphics hardware. Clients should call - * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent - * rendering or currently being displayed by an overlay. - * - * Additionally nothing about the contents of a surface should be assumed - * following a vaPutSurface. Implementations are free to modify the surface for - * scaling or subpicture blending within a call to vaPutImage. - * - * Calls to vaPutImage or vaGetImage using the same surface from which the image - * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or - * vaGetImage with other surfaces is supported. - * - * An image created with vaDeriveImage should be freed with vaDestroyImage. The - * image and image buffer structures will be destroyed; however, the underlying - * surface will remain unchanged until freed with vaDestroySurfaces. - */ -VAStatus vaDeriveImage( - VADisplay dpy, - VASurfaceID surface, - VAImage *image /* out */ -); - -/** - * Subpictures - * Subpicture is a special type of image that can be blended - * with a surface during vaPutSurface(). Subpicture can be used to render - * DVD sub-titles or closed captioning text etc. - */ - -typedef VAGenericID VASubpictureID; - -/** Get maximum number of subpicture formats supported by the implementation */ -int vaMaxNumSubpictureFormats( - VADisplay dpy -); - -/** flags for subpictures */ -#define VA_SUBPICTURE_CHROMA_KEYING 0x0001 -#define VA_SUBPICTURE_GLOBAL_ALPHA 0x0002 -#define VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD 0x0004 -/** - * Query supported subpicture formats - * The caller must provide a "format_list" array that can hold at - * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag - * for each format to indicate additional capabilities for that format. The actual - * number of formats returned in "format_list" is returned in "num_formats". - * flags: returned value to indicate addtional capabilities - * VA_SUBPICTURE_CHROMA_KEYING - supports chroma-keying - * VA_SUBPICTURE_GLOBAL_ALPHA - supports global alpha - * VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD - supports unscaled screen relative subpictures for On Screen Display - */ - -VAStatus vaQuerySubpictureFormats( - VADisplay dpy, - VAImageFormat *format_list, /* out */ - unsigned int *flags, /* out */ - unsigned int *num_formats /* out */ -); - -/** - * Subpictures are created with an image associated. - */ -VAStatus vaCreateSubpicture( - VADisplay dpy, - VAImageID image, - VASubpictureID *subpicture /* out */ -); - -/** - * Destroy the subpicture before destroying the image it is assocated to - */ -VAStatus vaDestroySubpicture( - VADisplay dpy, - VASubpictureID subpicture -); - -/** - * Bind an image to the subpicture. This image will now be associated with - * the subpicture instead of the one at creation. - */ -VAStatus vaSetSubpictureImage( - VADisplay dpy, - VASubpictureID subpicture, - VAImageID image -); - -/** - * If chromakey is enabled, then the area where the source value falls within - * the chromakey [min, max] range is transparent - * The chromakey component format is the following: - * For RGB: [0:7] Red [8:15] Blue [16:23] Green - * For YUV: [0:7] V [8:15] U [16:23] Y - * The chromakey mask can be used to mask out certain components for chromakey - * comparision - */ -VAStatus vaSetSubpictureChromakey( - VADisplay dpy, - VASubpictureID subpicture, - unsigned int chromakey_min, - unsigned int chromakey_max, - unsigned int chromakey_mask -); - -/** - * Global alpha value is between 0 and 1. A value of 1 means fully opaque and - * a value of 0 means fully transparent. If per-pixel alpha is also specified then - * the overall alpha is per-pixel alpha multiplied by the global alpha - */ -VAStatus vaSetSubpictureGlobalAlpha( - VADisplay dpy, - VASubpictureID subpicture, - float global_alpha -); - -/** - * vaAssociateSubpicture associates the subpicture with target_surfaces. - * It defines the region mapping between the subpicture and the target - * surfaces through source and destination rectangles (with the same width and height). - * Both will be displayed at the next call to vaPutSurface. Additional - * associations before the call to vaPutSurface simply overrides the association. - */ -VAStatus vaAssociateSubpicture( - VADisplay dpy, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces, - int16_t src_x, /* upper left offset in subpicture */ - int16_t src_y, - uint16_t src_width, - uint16_t src_height, - int16_t dest_x, /* upper left offset in surface */ - int16_t dest_y, - uint16_t dest_width, - uint16_t dest_height, - /* - * whether to enable chroma-keying, global-alpha, or screen relative mode - * see VA_SUBPICTURE_XXX values - */ - uint32_t flags -); - -/** - * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces. - */ -VAStatus vaDeassociateSubpicture( - VADisplay dpy, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces -); - -/** - * Display attributes - * Display attributes are used to control things such as contrast, hue, saturation, - * brightness etc. in the rendering process. The application can query what - * attributes are supported by the driver, and then set the appropriate attributes - * before calling vaPutSurface() - * - * Display attributes can also be used to query/set platform or display adaptor (vaDisplay) - * related information. These attributes do not depend on vaConfig, and could not be used - * for vaPutSurface. Application can use vaQueryDisplayAttributes/vaGetDisplayAttributes - * at anytime after vaInitialize, but (for settable attributes) vaSetDisplayAttributes should be - * called after vaInitialize and before any other function call. - * - * To distinguish these two types of display attributes, display adaptor related attributes - * should be marked as "HW attribute" in the description. - */ - -/* PowerVR IEP Lite attributes */ -typedef enum { - VADISPLAYATTRIB_BLE_OFF = 0x00, - VADISPLAYATTRIB_BLE_LOW, - VADISPLAYATTRIB_BLE_MEDIUM, - VADISPLAYATTRIB_BLE_HIGH, - VADISPLAYATTRIB_BLE_NONE, -} VADisplayAttribBLEMode; - -/** attribute value for VADisplayAttribRotation */ -#define VA_ROTATION_NONE 0x00000000 -#define VA_ROTATION_90 0x00000001 -#define VA_ROTATION_180 0x00000002 -#define VA_ROTATION_270 0x00000003 -/**@}*/ - -/** - * @name Mirroring directions - * - * Those values could be used for VADisplayAttribMirror attribute or - * VAProcPipelineParameterBuffer::mirror_state. - - */ -/**@{*/ -/** \brief No Mirroring. */ -#define VA_MIRROR_NONE 0x00000000 -/** \brief Horizontal Mirroring. */ -#define VA_MIRROR_HORIZONTAL 0x00000001 -/** \brief Vertical Mirroring. */ -#define VA_MIRROR_VERTICAL 0x00000002 -/**@}*/ - -/** attribute value for VADisplayAttribOutOfLoopDeblock */ -#define VA_OOL_DEBLOCKING_FALSE 0x00000000 -#define VA_OOL_DEBLOCKING_TRUE 0x00000001 - -/** Render mode */ -#define VA_RENDER_MODE_UNDEFINED 0 -#define VA_RENDER_MODE_LOCAL_OVERLAY 1 -#define VA_RENDER_MODE_LOCAL_GPU 2 -#define VA_RENDER_MODE_EXTERNAL_OVERLAY 4 -#define VA_RENDER_MODE_EXTERNAL_GPU 8 - -/** Render device */ -#define VA_RENDER_DEVICE_UNDEFINED 0 -#define VA_RENDER_DEVICE_LOCAL 1 -#define VA_RENDER_DEVICE_EXTERNAL 2 - -/**\brief sub device info - * Sub-device is the concept basing on the "device" behind "vaDisplay". - * If a device could be divided to several sub devices, the task of - * decode/encode/vpp could be assigned on one sub-device. So, application - * could choose the sub device before any other operations. After that, - * all of the task execution/resource allocation will be dispatched to - * the sub device. If application does not choose the sub device, driver - * will assign one as default. - * - * If the value == VA_ATTRIB_NOT_SUPPORTED, it mean that the attribute - * is unsupport or UNKNOWN. - */ - -typedef union _VADisplayAttribValSubDevice { - struct { - /** \brief current sub device index, read - write */ - uint32_t current_sub_device : 4; - /** \brief sub devices count, read - only */ - uint32_t sub_device_count : 4; - /** \brief reserved bits for future, must be zero*/ - uint32_t reserved : 8; - /** \brief bit mask to indicate which sub_device is available, read only - * \code - * VADisplayAttribValSubDevice reg; - * VADisplayAttribute reg_attr; - * reg_attr.type = VADisplayAttribSubDevice; - * vaGetDisplayAttributes(dpy, ®_attr, 1); - * reg.value = reg_attr.value; - * - * for(int i = 0; i < reg.bits.sub_device_count; i ++ ){ - * if((1< -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_H_ */ diff --git a/prebuilts/aarch64/include/va/va_android.h b/prebuilts/aarch64/include/va/va_android.h deleted file mode 100644 index dfed8fd..0000000 --- a/prebuilts/aarch64/include/va/va_android.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef _VA_ANDROID_H_ -#define _VA_ANDROID_H_ - -#include - -/** \brief Android Gralloc buffer memory type. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_ANDROID_GRALLOC 0x00100000 -/** \brief Android ION buffer memory type. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_ANDROID_ION 0x00200000 - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Returns a suitable VADisplay for VA API - */ -VADisplay vaGetDisplay( - void *android_dpy -); - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_ANDROID_H_ */ diff --git a/prebuilts/aarch64/include/va/va_backend.h b/prebuilts/aarch64/include/va/va_backend.h deleted file mode 100644 index 149b6a3..0000000 --- a/prebuilts/aarch64/include/va/va_backend.h +++ /dev/null @@ -1,695 +0,0 @@ -/* - * Copyright (c) 2007 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * Video Decode Acceleration -Backend API - */ - -#ifndef _VA_BACKEND_H_ -#define _VA_BACKEND_H_ - -#include - -typedef struct VADriverContext *VADriverContextP; -typedef struct VADisplayContext *VADisplayContextP; - -/** \brief VA display types. */ -enum { - /** \brief Mask to major identifier for VA display type. */ - VA_DISPLAY_MAJOR_MASK = 0xf0, - - /** \brief VA/X11 API is used, through vaGetDisplay() entry-point. */ - VA_DISPLAY_X11 = 0x10, - /** \brief VA/GLX API is used, through vaGetDisplayGLX() entry-point. */ - VA_DISPLAY_GLX = (VA_DISPLAY_X11 | (1 << 0)), - /** \brief VA/Android API is used, through vaGetDisplay() entry-point. */ - VA_DISPLAY_ANDROID = 0x20, - /** \brief VA/DRM API is used, through vaGetDisplayDRM() entry-point. */ - VA_DISPLAY_DRM = 0x30, - /** \brief VA/DRM API is used, with a render-node device path */ - VA_DISPLAY_DRM_RENDERNODES = (VA_DISPLAY_DRM | (1 << 0)), - /** \brief VA/Wayland API is used, through vaGetDisplayWl() entry-point. */ - VA_DISPLAY_WAYLAND = 0x40, -}; - -struct VADriverVTable { - VAStatus(*vaTerminate)(VADriverContextP ctx); - - VAStatus(*vaQueryConfigProfiles)( - VADriverContextP ctx, - VAProfile *profile_list, /* out */ - int *num_profiles /* out */ - ); - - VAStatus(*vaQueryConfigEntrypoints)( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint *entrypoint_list, /* out */ - int *num_entrypoints /* out */ - ); - - VAStatus(*vaGetConfigAttributes)( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, /* in/out */ - int num_attribs - ); - - VAStatus(*vaCreateConfig)( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, - int num_attribs, - VAConfigID *config_id /* out */ - ); - - VAStatus(*vaDestroyConfig)( - VADriverContextP ctx, - VAConfigID config_id - ); - - VAStatus(*vaQueryConfigAttributes)( - VADriverContextP ctx, - VAConfigID config_id, - VAProfile *profile, /* out */ - VAEntrypoint *entrypoint, /* out */ - VAConfigAttrib *attrib_list, /* out */ - int *num_attribs /* out */ - ); - - VAStatus(*vaCreateSurfaces)( - VADriverContextP ctx, - int width, - int height, - int format, - int num_surfaces, - VASurfaceID *surfaces /* out */ - ); - - VAStatus(*vaDestroySurfaces)( - VADriverContextP ctx, - VASurfaceID *surface_list, - int num_surfaces - ); - - VAStatus(*vaCreateContext)( - VADriverContextP ctx, - VAConfigID config_id, - int picture_width, - int picture_height, - int flag, - VASurfaceID *render_targets, - int num_render_targets, - VAContextID *context /* out */ - ); - - VAStatus(*vaDestroyContext)( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus(*vaCreateBuffer)( - VADriverContextP ctx, - VAContextID context, /* in */ - VABufferType type, /* in */ - unsigned int size, /* in */ - unsigned int num_elements, /* in */ - void *data, /* in */ - VABufferID *buf_id - ); - - VAStatus(*vaBufferSetNumElements)( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - unsigned int num_elements /* in */ - ); - - VAStatus(*vaMapBuffer)( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - void **pbuf /* out */ - ); - - VAStatus(*vaUnmapBuffer)( - VADriverContextP ctx, - VABufferID buf_id /* in */ - ); - - VAStatus(*vaDestroyBuffer)( - VADriverContextP ctx, - VABufferID buffer_id - ); - - VAStatus(*vaBeginPicture)( - VADriverContextP ctx, - VAContextID context, - VASurfaceID render_target - ); - - VAStatus(*vaRenderPicture)( - VADriverContextP ctx, - VAContextID context, - VABufferID *buffers, - int num_buffers - ); - - VAStatus(*vaEndPicture)( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus(*vaSyncSurface)( - VADriverContextP ctx, - VASurfaceID render_target - ); - - VAStatus(*vaQuerySurfaceStatus)( - VADriverContextP ctx, - VASurfaceID render_target, - VASurfaceStatus *status /* out */ - ); - - VAStatus(*vaQuerySurfaceError)( - VADriverContextP ctx, - VASurfaceID render_target, - VAStatus error_status, - void **error_info /*out*/ - ); - - VAStatus(*vaPutSurface)( - VADriverContextP ctx, - VASurfaceID surface, - void* draw, /* Drawable of window system */ - short srcx, - short srcy, - unsigned short srcw, - unsigned short srch, - short destx, - short desty, - unsigned short destw, - unsigned short desth, - VARectangle *cliprects, /* client supplied clip list */ - unsigned int number_cliprects, /* number of clip rects in the clip list */ - unsigned int flags /* de-interlacing flags */ - ); - - VAStatus(*vaQueryImageFormats)( - VADriverContextP ctx, - VAImageFormat *format_list, /* out */ - int *num_formats /* out */ - ); - - VAStatus(*vaCreateImage)( - VADriverContextP ctx, - VAImageFormat *format, - int width, - int height, - VAImage *image /* out */ - ); - - VAStatus(*vaDeriveImage)( - VADriverContextP ctx, - VASurfaceID surface, - VAImage *image /* out */ - ); - - VAStatus(*vaDestroyImage)( - VADriverContextP ctx, - VAImageID image - ); - - VAStatus(*vaSetImagePalette)( - VADriverContextP ctx, - VAImageID image, - /* - * pointer to an array holding the palette data. The size of the array is - * num_palette_entries * entry_bytes in size. The order of the components - * in the palette is described by the component_order in VAImage struct - */ - unsigned char *palette - ); - - VAStatus(*vaGetImage)( - VADriverContextP ctx, - VASurfaceID surface, - int x, /* coordinates of the upper left source pixel */ - int y, - unsigned int width, /* width and height of the region */ - unsigned int height, - VAImageID image - ); - - VAStatus(*vaPutImage)( - VADriverContextP ctx, - VASurfaceID surface, - VAImageID image, - int src_x, - int src_y, - unsigned int src_width, - unsigned int src_height, - int dest_x, - int dest_y, - unsigned int dest_width, - unsigned int dest_height - ); - - VAStatus(*vaQuerySubpictureFormats)( - VADriverContextP ctx, - VAImageFormat *format_list, /* out */ - unsigned int *flags, /* out */ - unsigned int *num_formats /* out */ - ); - - VAStatus(*vaCreateSubpicture)( - VADriverContextP ctx, - VAImageID image, - VASubpictureID *subpicture /* out */ - ); - - VAStatus(*vaDestroySubpicture)( - VADriverContextP ctx, - VASubpictureID subpicture - ); - - VAStatus(*vaSetSubpictureImage)( - VADriverContextP ctx, - VASubpictureID subpicture, - VAImageID image - ); - - VAStatus(*vaSetSubpictureChromakey)( - VADriverContextP ctx, - VASubpictureID subpicture, - unsigned int chromakey_min, - unsigned int chromakey_max, - unsigned int chromakey_mask - ); - - VAStatus(*vaSetSubpictureGlobalAlpha)( - VADriverContextP ctx, - VASubpictureID subpicture, - float global_alpha - ); - - VAStatus(*vaAssociateSubpicture)( - VADriverContextP ctx, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces, - short src_x, /* upper left offset in subpicture */ - short src_y, - unsigned short src_width, - unsigned short src_height, - short dest_x, /* upper left offset in surface */ - short dest_y, - unsigned short dest_width, - unsigned short dest_height, - /* - * whether to enable chroma-keying or global-alpha - * see VA_SUBPICTURE_XXX values - */ - unsigned int flags - ); - - VAStatus(*vaDeassociateSubpicture)( - VADriverContextP ctx, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces - ); - - VAStatus(*vaQueryDisplayAttributes)( - VADriverContextP ctx, - VADisplayAttribute *attr_list, /* out */ - int *num_attributes /* out */ - ); - - VAStatus(*vaGetDisplayAttributes)( - VADriverContextP ctx, - VADisplayAttribute *attr_list, /* in/out */ - int num_attributes - ); - - VAStatus(*vaSetDisplayAttributes)( - VADriverContextP ctx, - VADisplayAttribute *attr_list, - int num_attributes - ); - - /* used by va trace */ - VAStatus(*vaBufferInfo)( - VADriverContextP ctx, /* in */ - VABufferID buf_id, /* in */ - VABufferType *type, /* out */ - unsigned int *size, /* out */ - unsigned int *num_elements /* out */ - ); - - /* lock/unlock surface for external access */ - VAStatus(*vaLockSurface)( - VADriverContextP ctx, - VASurfaceID surface, - unsigned int *fourcc, /* out for follow argument */ - unsigned int *luma_stride, - unsigned int *chroma_u_stride, - unsigned int *chroma_v_stride, - unsigned int *luma_offset, - unsigned int *chroma_u_offset, - unsigned int *chroma_v_offset, - unsigned int *buffer_name, /* if it is not NULL, assign the low lever - * surface buffer name - */ - void **buffer /* if it is not NULL, map the surface buffer for - * CPU access - */ - ); - - VAStatus(*vaUnlockSurface)( - VADriverContextP ctx, - VASurfaceID surface - ); - - /* DEPRECATED */ - VAStatus - (*vaGetSurfaceAttributes)( - VADriverContextP dpy, - VAConfigID config, - VASurfaceAttrib *attrib_list, - unsigned int num_attribs - ); - - VAStatus - (*vaCreateSurfaces2)( - VADriverContextP ctx, - unsigned int format, - unsigned int width, - unsigned int height, - VASurfaceID *surfaces, - unsigned int num_surfaces, - VASurfaceAttrib *attrib_list, - unsigned int num_attribs - ); - - VAStatus - (*vaQuerySurfaceAttributes)( - VADriverContextP dpy, - VAConfigID config, - VASurfaceAttrib *attrib_list, - unsigned int *num_attribs - ); - - VAStatus - (*vaAcquireBufferHandle)( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - VABufferInfo * buf_info /* in/out */ - ); - - VAStatus - (*vaReleaseBufferHandle)( - VADriverContextP ctx, - VABufferID buf_id /* in */ - ); - - VAStatus(*vaCreateMFContext)( - VADriverContextP ctx, - VAMFContextID *mfe_context /* out */ - ); - - VAStatus(*vaMFAddContext)( - VADriverContextP ctx, - VAMFContextID mf_context, - VAContextID context - ); - - VAStatus(*vaMFReleaseContext)( - VADriverContextP ctx, - VAMFContextID mf_context, - VAContextID context - ); - - VAStatus(*vaMFSubmit)( - VADriverContextP ctx, - VAMFContextID mf_context, - VAContextID *contexts, - int num_contexts - ); - VAStatus(*vaCreateBuffer2)( - VADriverContextP ctx, - VAContextID context, /* in */ - VABufferType type, /* in */ - unsigned int width, /* in */ - unsigned int height, /* in */ - unsigned int *unit_size, /* out */ - unsigned int *pitch, /* out */ - VABufferID *buf_id /* out */ - ); - - VAStatus(*vaQueryProcessingRate)( - VADriverContextP ctx, /* in */ - VAConfigID config_id, /* in */ - VAProcessingRateParameter *proc_buf,/* in */ - unsigned int *processing_rate /* out */ - ); - - VAStatus - (*vaExportSurfaceHandle)( - VADriverContextP ctx, - VASurfaceID surface_id, /* in */ - uint32_t mem_type, /* in */ - uint32_t flags, /* in */ - void *descriptor /* out */ - ); - VAStatus(*vaSyncSurface2)( - VADriverContextP ctx, - VASurfaceID surface, - uint64_t timeout_ns - ); - - VAStatus(*vaSyncBuffer)( - VADriverContextP ctx, - VABufferID buf_id, - uint64_t timeout_ns - ); - - VAStatus - (*vaCopy)( - VADriverContextP ctx, /* in */ - VACopyObject *dst, /* in */ - VACopyObject *src, /* in */ - VACopyOption option /* in */ - ); - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[54]; -}; - -struct VADriverContext { - void *pDriverData; - - /** - * The core VA implementation hooks. - * - * This structure is allocated from libva with calloc(). - */ - struct VADriverVTable *vtable; - - /** - * The VA/GLX implementation hooks. - * - * This structure is intended for drivers that implement the - * VA/GLX API. The driver implementation is responsible for the - * allocation and deallocation of this structure. - */ - struct VADriverVTableGLX *vtable_glx; - - /** - * The VA/EGL implementation hooks. - * - * This structure is intended for drivers that implement the - * VA/EGL API. The driver implementation is responsible for the - * allocation and deallocation of this structure. - */ - struct VADriverVTableEGL *vtable_egl; - - /** - * The third-party/private implementation hooks. - * - * This structure is intended for drivers that implement the - * private API. The driver implementation is responsible for the - * allocation and deallocation of this structure. - */ - void *vtable_tpi; - - void *native_dpy; - int x11_screen; - int version_major; - int version_minor; - int max_profiles; - int max_entrypoints; - int max_attributes; - int max_image_formats; - int max_subpic_formats; - int max_display_attributes; - const char *str_vendor; - - void *handle; /* dlopen handle */ - - /** - * \brief DRM state. - * - * This field holds driver specific data for DRM-based - * drivers. This structure is allocated from libva with - * calloc(). Do not deallocate from within VA driver - * implementations. - * - * All structures shall be derived from struct drm_state. So, for - * instance, this field holds a dri_state structure for VA/X11 - * drivers that use the DRM protocol. - */ - void *drm_state; - - void *glx; /* opaque for GLX code */ - - /** \brief VA display type. */ - unsigned long display_type; - - /** - * The VA/Wayland implementation hooks. - * - * This structure is intended for drivers that implement the - * VA/Wayland API. libVA allocates this structure with calloc() - * and owns the resulting memory. - */ - struct VADriverVTableWayland *vtable_wayland; - - /** - * \brief The VA/VPP implementation hooks. - * - * This structure is allocated from libva with calloc(). - */ - struct VADriverVTableVPP *vtable_vpp; - - char *override_driver_name; - - void *pDisplayContext; - - /** - * Error callback. - * - * This is set by libva when the driver is opened, and will not be - * changed thereafter. The driver can call it with an error message, - * which will be propagated to the API user through their error - * callbacks, or sent to a default output if no callback is available. - * - * It is expected that end users will always be able to see these - * messages, so it should be called only for serious errors. For - * example, hardware problems or fatal configuration errors. - * - * @param pDriverContext Pointer to the driver context structure - * being used by the current driver. - * @param message Message to send to the API user. This must be a - * null-terminated string. - */ - void (*error_callback)(VADriverContextP pDriverContext, - const char *message); - /** - * Info callback. - * - * This has the same behaviour as the error callback, but has its - * own set of callbacks to the API user. - * - * It should be used for informational messages which may be useful - * for an application programmer or for debugging. For example, minor - * configuration errors, or information about the reason when another - * API call generates an error return. It is not expected that end - * users will see these messages. - * - * @param pDriverContext Pointer to the driver context structure - * being used by the current driver. - * @param message Message to send to the API user. This must be a - * null-terminated string. - */ - void (*info_callback)(VADriverContextP pDriverContext, - const char *message); - - /** - * \brief The VA/Protected implementation hooks. - * - * This structure is allocated from libva with calloc(). - */ - struct VADriverVTableProt *vtable_prot; - - unsigned long reserved[37]; /* reserve for future add-ins, decrease the subscript accordingly */ -}; - -#define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */ -struct VADisplayContext { - int vadpy_magic; - - VADisplayContextP pNext; - VADriverContextP pDriverContext; - - int (*vaIsValid)( - VADisplayContextP ctx - ); - - void (*vaDestroy)( - VADisplayContextP ctx - ); - - VAStatus(*vaGetDriverName)( - VADisplayContextP ctx, - char **driver_name - ); - - void *opaque; /* opaque for display extensions (e.g. GLX) */ - void *vatrace; /* opaque for VA trace context */ - void *vafool; /* opaque for VA fool context */ - - VAMessageCallback error_callback; - void *error_callback_user_context; - VAMessageCallback info_callback; - void *info_callback_user_context; - VAStatus(*vaGetNumCandidates)( - VADisplayContextP ctx, - int * num_candidates - ); - - VAStatus(*vaGetDriverNameByIndex)( - VADisplayContextP ctx, - char **driver_name, - int candidate_index - ); - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[30]; -}; - -typedef VAStatus(*VADriverInit)( - VADriverContextP driver_context -); - -#endif /* _VA_BACKEND_H_ */ diff --git a/prebuilts/aarch64/include/va/va_backend_prot.h b/prebuilts/aarch64/include/va/va_backend_prot.h deleted file mode 100644 index 93447e1..0000000 --- a/prebuilts/aarch64/include/va/va_backend_prot.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2020 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_BACKEND_PROT_H -#define VA_BACKEND_PROT_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \brief VTable version for VA/PROTECTION hooks. */ -#define VA_DRIVER_VTABLE_PROT_VERSION 1 - -struct VADriverVTableProt { - unsigned int version; - - VAStatus - (*vaCreateProtectedSession)( - VADriverContextP ctx, - VAConfigID config_id, - VAProtectedSessionID *protected_session - ); - - VAStatus - (*vaDestroyProtectedSession)( - VADriverContextP ctx, - VAProtectedSessionID protected_session - ); - - VAStatus - (*vaAttachProtectedSession)( - VADriverContextP ctx, - VAContextID context, - VAProtectedSessionID protected_session - ); - - VAStatus - (*vaDetachProtectedSession)( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus - (*vaProtectedSessionExecute)( - VADriverContextP ctx, - VAProtectedSessionID protected_session, - VABufferID buf_id - ); - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[VA_PADDING_MEDIUM]; -}; - -#ifdef __cplusplus -} -#endif - -#endif /* VA_BACKEND_PROT_H */ diff --git a/prebuilts/aarch64/include/va/va_backend_vpp.h b/prebuilts/aarch64/include/va/va_backend_vpp.h deleted file mode 100644 index 8ed10d5..0000000 --- a/prebuilts/aarch64/include/va/va_backend_vpp.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_BACKEND_VPP_H -#define VA_BACKEND_VPP_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \brief VTable version for VA/VPP hooks. */ -#define VA_DRIVER_VTABLE_VPP_VERSION 1 - -struct VADriverVTableVPP { - unsigned int version; - - VAStatus - (*vaQueryVideoProcFilters)( - VADriverContextP ctx, - VAContextID context, - VAProcFilterType *filters, - unsigned int *num_filters - ); - - VAStatus - (*vaQueryVideoProcFilterCaps)( - VADriverContextP ctx, - VAContextID context, - VAProcFilterType type, - void *filter_caps, - unsigned int *num_filter_caps - ); - - VAStatus - (*vaQueryVideoProcPipelineCaps)( - VADriverContextP ctx, - VAContextID context, - VABufferID *filters, - unsigned int num_filters, - VAProcPipelineCaps *pipeline_caps - ); - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[16]; -}; - -#ifdef __cplusplus -} -#endif - -#endif /* VA_BACKEND_VPP_H */ diff --git a/prebuilts/aarch64/include/va/va_compat.h b/prebuilts/aarch64/include/va/va_compat.h deleted file mode 100644 index 41a3f73..0000000 --- a/prebuilts/aarch64/include/va/va_compat.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_compat.h - * \brief The Compatibility API - * - * This file contains the \ref api_compat "Compatibility API". - */ - -#ifndef VA_COMPAT_H -#define VA_COMPAT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_compat Compatibility API - * - * The Compatibility API allows older programs that are not ported to - * the current API to still build and run correctly. In particular, - * this exposes older API to allow for backwards source compatibility. - * - * @{ - */ - -/** - * Makes a string literal out of the macro argument - */ -#define VA_CPP_HELPER_STRINGIFY(x) \ - VA_CPP_HELPER_STRINGIFY_(x) -#define VA_CPP_HELPER_STRINGIFY_(x) \ - #x - -/** - * Concatenates two macro arguments at preprocessing time. - */ -#define VA_CPP_HELPER_CONCAT(a, b) \ - VA_CPP_HELPER_CONCAT_(a, b) -#define VA_CPP_HELPER_CONCAT_(a, b) \ - a ## b - -/** - * Generates the number of macro arguments at preprocessing time. - * - * - * Note: this doesn't work for macros with no arguments - */ -#define VA_CPP_HELPER_N_ARGS(...) \ - VA_CPP_HELPER_N_ARGS_(__VA_ARGS__, VA_CPP_HELPER_N_ARGS_LIST_REV()) -#define VA_CPP_HELPER_N_ARGS_(...) \ - VA_CPP_HELPER_N_ARGS_LIST(__VA_ARGS__) -#define VA_CPP_HELPER_N_ARGS_LIST(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a12, a13, a14, a15, a16, N, ...) N -#define VA_CPP_HELPER_N_ARGS_LIST_REV() \ - 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 - -/** - * Generates a versioned function alias. - * - * VA_CPP_HELPER_ALIAS(vaSomeFunction, 0,32,0) will generate - * .symber vaSomeFunction_0_32_0, vaSomeFunction@VA_API_0.32.0 - */ -#define VA_CPP_HELPER_ALIAS(func, major, minor, micro) \ - VA_CPP_HELPER_ALIAS_(func, major, minor, micro, "@") -#define VA_CPP_HELPER_ALIAS_DEFAULT(func, major, minor, micro) \ - VA_CPP_HELPER_ALIAS_(func, major, minor, micro, "@@") -#define VA_CPP_HELPER_ALIAS_(func, major, minor, micro, binding) \ - asm(".symver " #func "_" #major "_" #minor "_" #micro ", " \ - #func binding "VA_API_" #major "." #minor "." #micro) - -/* vaCreateSurfaces() */ - -#ifndef VA_COMPAT_DISABLED -#define vaCreateSurfaces(dpy, ...) \ - VA_CPP_HELPER_CONCAT(vaCreateSurfaces, \ - VA_CPP_HELPER_N_ARGS(dpy, __VA_ARGS__)) \ - (dpy, __VA_ARGS__) -#endif - -#define vaCreateSurfaces6(dpy, width, height, format, num_surfaces, surfaces) \ - (vaCreateSurfaces)(dpy, format, width, height, surfaces, num_surfaces, \ - NULL, 0) - -#define vaCreateSurfaces8(dpy, format, width, height, surfaces, num_surfaces, attribs, num_attribs) \ - (vaCreateSurfaces)(dpy, format, width, height, surfaces, num_surfaces, \ - attribs, num_attribs) - -/*@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_COMPAT_H */ diff --git a/prebuilts/aarch64/include/va/va_dec_av1.h b/prebuilts/aarch64/include/va/va_dec_av1.h deleted file mode 100644 index c195538..0000000 --- a/prebuilts/aarch64/include/va/va_dec_av1.h +++ /dev/null @@ -1,695 +0,0 @@ -/* - * Copyright (c) 2019 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_av1.h - * \brief The AV1 decoding API - * - * This file contains the \ref api_dec_av1 "AV1 decoding API". - */ - -#ifndef VA_DEC_AV1_H -#define VA_DEC_AV1_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_dec_av1 AV1 decoding API - * - * This AV1 decoding API supports 8-bit/10bit 420 format only. - * - * @{ - */ - -/** Attribute value for VAConfigAttribDecAV1Features. - * - * This attribute decribes the supported features of a AV1 - * decoder configuration. - * - */ -typedef union VAConfigAttribValDecAV1Features { - struct { - /** large scale tile - * - * This conveys whether AV1 large scale tile is supported by HW. - * 0 - unsupported, 1 - supported. - */ - uint32_t lst_support : 2; - /* Reserved for future use. */ - uint32_t reserved : 30; - } bits; - uint32_t value; -} VAConfigAttribValDecAV1Features; - -/** - * \brief AV1 Decoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * App should send a surface with this data structure down to VAAPI once - * per frame. - * - */ - -/** \brief Segmentation Information - */ -typedef struct _VASegmentationStructAV1 { - union { - struct { - /** Indicates whether segmentation map related syntax elements - * are present or not for current frame. If equal to 0, - * the segmentation map related syntax elements are - * not present for the current frame and the control flags of - * segmentation map related tables feature_data[][], and - * feature_mask[] are not valid and shall be ignored by accelerator. - */ - uint32_t enabled : 1; - /** Value 1 indicates that the segmentation map are updated - * during the decoding of this frame. - * Value 0 means that the segmentation map from the previous - * frame is used. - */ - uint32_t update_map : 1; - /** Value 1 indicates that the updates to the segmentation map - * are coded relative to the existing segmentation map. - * Value 0 indicates that the new segmentation map is coded - * without reference to the existing segmentation map. - */ - uint32_t temporal_update : 1; - /** Value 1 indicates that new parameters are about to be - * specified for each segment. - * Value 0 indicates that the segmentation parameters - * should keep their existing values. - */ - uint32_t update_data : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 28; - } bits; - uint32_t value; - } segment_info_fields; - - /** \brief Segmentation parameters for current frame. - * feature_data[segment_id][feature_id] - * where segment_id has value range [0..7] indicating the segment id. - * and feature_id is defined as - typedef enum { - SEG_LVL_ALT_Q, // Use alternate Quantizer .... - SEG_LVL_ALT_LF_Y_V, // Use alternate loop filter value on y plane vertical - SEG_LVL_ALT_LF_Y_H, // Use alternate loop filter value on y plane horizontal - SEG_LVL_ALT_LF_U, // Use alternate loop filter value on u plane - SEG_LVL_ALT_LF_V, // Use alternate loop filter value on v plane - SEG_LVL_REF_FRAME, // Optional Segment reference frame - SEG_LVL_SKIP, // Optional Segment (0,0) + skip mode - SEG_LVL_GLOBALMV, - SEG_LVL_MAX - } SEG_LVL_FEATURES; - * feature_data[][] is equivalent to variable FeatureData[][] in spec, - * which is after clip3() operation. - * Clip3(x, y, z) = (z < x)? x : ((z > y)? y : z); - * The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = { - * 255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, 7, 0, 0 } - */ - int16_t feature_data[8][8]; - - /** \brief indicates if a feature is enabled or not. - * Each bit field itself is the feature_id. Index is segment_id. - * feature_mask[segment_id] & (1 << feature_id) equal to 1 specify that the feature of - * feature_id for segment of segment_id is enabled, otherwise disabled. - */ - uint8_t feature_mask[8]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VASegmentationStructAV1; - -/** \brief Film Grain Information - */ -typedef struct _VAFilmGrainStructAV1 { - union { - struct { - /** \brief Specify whether or not film grain is applied on current frame. - * If set to 0, all the rest parameters should be set to zero - * and ignored. - */ - uint32_t apply_grain : 1; - uint32_t chroma_scaling_from_luma : 1; - uint32_t grain_scaling_minus_8 : 2; - uint32_t ar_coeff_lag : 2; - uint32_t ar_coeff_shift_minus_6 : 2; - uint32_t grain_scale_shift : 2; - uint32_t overlap_flag : 1; - uint32_t clip_to_restricted_range : 1; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 20; - } bits; - uint32_t value; - } film_grain_info_fields; - - uint16_t grain_seed; - /* value range [0..14] */ - uint8_t num_y_points; - uint8_t point_y_value[14]; - uint8_t point_y_scaling[14]; - /* value range [0..10] */ - uint8_t num_cb_points; - uint8_t point_cb_value[10]; - uint8_t point_cb_scaling[10]; - /* value range [0..10] */ - uint8_t num_cr_points; - uint8_t point_cr_value[10]; - uint8_t point_cr_scaling[10]; - /* value range [-128..127] */ - int8_t ar_coeffs_y[24]; - int8_t ar_coeffs_cb[25]; - int8_t ar_coeffs_cr[25]; - uint8_t cb_mult; - uint8_t cb_luma_mult; - uint16_t cb_offset; - uint8_t cr_mult; - uint8_t cr_luma_mult; - uint16_t cr_offset; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VAFilmGrainStructAV1; - -typedef enum { - /** identity transformation, 0-parameter */ - VAAV1TransformationIdentity = 0, - /** translational motion, 2-parameter */ - VAAV1TransformationTranslation = 1, - /** simplified affine with rotation + zoom only, 4-parameter */ - VAAV1TransformationRotzoom = 2, - /** affine, 6-parameter */ - VAAV1TransformationAffine = 3, - /** transformation count */ - VAAV1TransformationCount -} VAAV1TransformationType; - -typedef struct _VAWarpedMotionParamsAV1 { - - /** \brief Specify the type of warped motion */ - VAAV1TransformationType wmtype; - - /** \brief Specify warp motion parameters - * wm.wmmat[] corresponds to gm_params[][] in spec. - * Details in AV1 spec section 5.9.24 or refer to libaom code - * https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c - */ - int32_t wmmat[8]; - - /* valid or invalid on affine set */ - uint8_t invalid; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VAWarpedMotionParamsAV1; - -/** - * \brief AV1 Decoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters and should be sent once - * per frame. - * - */ -typedef struct _VADecPictureParameterBufferAV1 { - /**@{*/ - - /** \brief sequence level information - */ - - /** \brief AV1 bit stream profile - */ - uint8_t profile; - - uint8_t order_hint_bits_minus_1; - - /** \brief bit depth index - * value range [0..2] - * 0 - bit depth 8; - * 1 - bit depth 10; - * 2 - bit depth 12; - */ - uint8_t bit_depth_idx; - - /** \brief corresponds to AV1 spec variable of the same name. */ - uint8_t matrix_coefficients; - - union { - struct { - uint32_t still_picture : 1; - uint32_t use_128x128_superblock : 1; - uint32_t enable_filter_intra : 1; - uint32_t enable_intra_edge_filter : 1; - - /** read_compound_tools */ - uint32_t enable_interintra_compound : 1; - uint32_t enable_masked_compound : 1; - - uint32_t enable_dual_filter : 1; - uint32_t enable_order_hint : 1; - uint32_t enable_jnt_comp : 1; - uint32_t enable_cdef : 1; - uint32_t mono_chrome : 1; - uint32_t color_range : 1; - uint32_t subsampling_x : 1; - uint32_t subsampling_y : 1; - va_deprecated uint32_t chroma_sample_position : 1; - uint32_t film_grain_params_present : 1; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 16; - } fields; - uint32_t value; - } seq_info_fields; - - /** \brief Picture level information - */ - - /** \brief buffer description of decoded current picture - */ - VASurfaceID current_frame; - - /** \brief display buffer of current picture - * Used for film grain applied decoded picture. - * Valid only when apply_grain equals 1. - */ - VASurfaceID current_display_picture; - - /** \brief number of anchor frames for large scale tile - * This parameter gives the number of entries of anchor_frames_list[]. - * Value range [0..128]. - */ - uint8_t anchor_frames_num; - - /** \brief anchor frame list for large scale tile - * For large scale tile applications, the anchor frames could come from - * previously decoded frames in current sequence (aka. internal), or - * from external sources. - * For external anchor frames, application should call API - * vaCreateBuffer() to generate frame buffers and populate them with - * pixel frames. And this process may happen multiple times. - * The array anchor_frames_list[] is used to register all the available - * anchor frames from both external and internal, up to the current - * frame instance. If a previously registerred anchor frame is no longer - * needed, it should be removed from the list. But it does not prevent - * applications from relacing the frame buffer with new anchor frames. - * Please note that the internal anchor frames may not still be present - * in the current DPB buffer. But if it is in the anchor_frames_list[], - * it should not be replaced with other frames or removed from memory - * until it is not shown in the list. - * This number of entries of the list is given by parameter anchor_frames_num. - */ - VASurfaceID *anchor_frames_list; - - /** \brief Picture resolution minus 1 - * Picture original resolution. If SuperRes is enabled, - * this is the upscaled resolution. - * value range [0..65535] - */ - uint16_t frame_width_minus1; - uint16_t frame_height_minus1; - - /** \brief Output frame buffer size in unit of tiles - * Valid only when large_scale_tile equals 1. - * value range [0..65535] - */ - uint16_t output_frame_width_in_tiles_minus_1; - uint16_t output_frame_height_in_tiles_minus_1; - - /** \brief Surface indices of reference frames in DPB. - * - * Contains a list of uncompressed frame buffer surface indices as references. - * Application needs to make sure all the entries point to valid frames - * except for intra frames by checking ref_frame_id[]. If missing frame - * is identified, application may choose to perform error recovery by - * pointing problematic index to an alternative frame buffer. - * Driver is not responsible to validate reference frames' id. - */ - VASurfaceID ref_frame_map[8]; - - /** \brief Reference frame indices. - * - * Contains a list of indices into ref_frame_map[8]. - * It specifies the reference frame correspondence. - * The indices of the array are defined as [LAST_FRAME – LAST_FRAME, - * LAST2_FRAME – LAST_FRAME, …, ALTREF_FRAME – LAST_FRAME], where each - * symbol is defined as: - * enum{INTRA_FRAME = 0, LAST_FRAME, LAST2_FRAME, LAST3_FRAME, GOLDEN_FRAME, - * BWDREF_FRAME, ALTREF2_FRAME, ALTREF_FRAME}; - */ - uint8_t ref_frame_idx[7]; - - /** \brief primary reference frame index - * Index into ref_frame_idx[], specifying which reference frame contains - * propagated info that should be loaded at the start of the frame. - * When value equals PRIMARY_REF_NONE (7), it indicates there is - * no primary reference frame. - * value range [0..7] - */ - uint8_t primary_ref_frame; - - uint8_t order_hint; - - VASegmentationStructAV1 seg_info; - VAFilmGrainStructAV1 film_grain_info; - - /** \brief tile structure - * When uniform_tile_spacing_flag == 1, width_in_sbs_minus_1[] and - * height_in_sbs_minus_1[] should be ignored, which will be generated - * by driver based on tile_cols and tile_rows. - */ - uint8_t tile_cols; - uint8_t tile_rows; - - /* The width/height of a tile minus 1 in units of superblocks. Though the - * maximum number of tiles is 64, since ones of the last tile are computed - * from ones of the other tiles and frame_width/height, they are not - * necessarily specified. - */ - uint16_t width_in_sbs_minus_1[63]; - uint16_t height_in_sbs_minus_1[63]; - - /** \brief number of tiles minus 1 in large scale tile list - * Same as AV1 semantic element. - * Valid only when large_scale_tiles == 1. - */ - uint16_t tile_count_minus_1; - - /* specify the tile index for context updating */ - uint16_t context_update_tile_id; - - union { - struct { - /** \brief flags for current picture - * same syntax and semantic as those in AV1 code - */ - - /** \brief Frame Type - * 0: KEY_FRAME; - * 1: INTER_FRAME; - * 2: INTRA_ONLY_FRAME; - * 3: SWITCH_FRAME - * For SWITCH_FRAME, application shall set error_resilient_mode = 1, - * refresh_frame_flags, etc. appropriately. And driver will convert it - * to INTER_FRAME. - */ - uint32_t frame_type : 2; - uint32_t show_frame : 1; - uint32_t showable_frame : 1; - uint32_t error_resilient_mode : 1; - uint32_t disable_cdf_update : 1; - uint32_t allow_screen_content_tools : 1; - uint32_t force_integer_mv : 1; - uint32_t allow_intrabc : 1; - uint32_t use_superres : 1; - uint32_t allow_high_precision_mv : 1; - uint32_t is_motion_mode_switchable : 1; - uint32_t use_ref_frame_mvs : 1; - /* disable_frame_end_update_cdf is coded as refresh_frame_context. */ - uint32_t disable_frame_end_update_cdf : 1; - uint32_t uniform_tile_spacing_flag : 1; - uint32_t allow_warped_motion : 1; - /** \brief indicate if current frame in large scale tile mode */ - uint32_t large_scale_tile : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 15; - } bits; - uint32_t value; - } pic_info_fields; - - /** \brief Supper resolution scale denominator. - * When use_superres=1, superres_scale_denominator must be in the range [9..16]. - * When use_superres=0, superres_scale_denominator must be 8. - */ - uint8_t superres_scale_denominator; - - /** \brief Interpolation filter. - * value range [0..4] - */ - uint8_t interp_filter; - - /** \brief luma loop filter levels. - * value range [0..63]. - */ - uint8_t filter_level[2]; - - /** \brief chroma loop filter levels. - * value range [0..63]. - */ - uint8_t filter_level_u; - uint8_t filter_level_v; - - union { - struct { - /** \brief flags for reference pictures - * same syntax and semantic as those in AV1 code - */ - uint8_t sharpness_level : 3; - uint8_t mode_ref_delta_enabled : 1; - uint8_t mode_ref_delta_update : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint8_t reserved : 3; - } bits; - uint8_t value; - } loop_filter_info_fields; - - /** \brief The adjustment needed for the filter level based on - * the chosen reference frame. - * value range [-64..63]. - */ - int8_t ref_deltas[8]; - - /** \brief The adjustment needed for the filter level based on - * the chosen mode. - * value range [-64..63]. - */ - int8_t mode_deltas[2]; - - /** \brief quantization - */ - /** \brief Y AC index - * value range [0..255] - */ - uint8_t base_qindex; - /** \brief Y DC delta from Y AC - * value range [-64..63] - */ - int8_t y_dc_delta_q; - /** \brief U DC delta from Y AC - * value range [-64..63] - */ - int8_t u_dc_delta_q; - /** \brief U AC delta from Y AC - * value range [-64..63] - */ - int8_t u_ac_delta_q; - /** \brief V DC delta from Y AC - * value range [-64..63] - */ - int8_t v_dc_delta_q; - /** \brief V AC delta from Y AC - * value range [-64..63] - */ - int8_t v_ac_delta_q; - - /** \brief quantization_matrix - */ - union { - struct { - uint16_t using_qmatrix : 1; - /** \brief qm level - * value range [0..15] - * Invalid if using_qmatrix equals 0. - */ - uint16_t qm_y : 4; - uint16_t qm_u : 4; - uint16_t qm_v : 4; - - /** \brief Reserved bytes for future use, must be zero */ - uint16_t reserved : 3; - } bits; - uint16_t value; - } qmatrix_fields; - - union { - struct { - /** \brief delta_q parameters - */ - uint32_t delta_q_present_flag : 1; - uint32_t log2_delta_q_res : 2; - - /** \brief delta_lf parameters - */ - uint32_t delta_lf_present_flag : 1; - uint32_t log2_delta_lf_res : 2; - - /** \brief CONFIG_LOOPFILTER_LEVEL - */ - uint32_t delta_lf_multi : 1; - - /** \brief read_tx_mode - * value range [0..2] - */ - uint32_t tx_mode : 2; - - /* AV1 frame reference mode semantic */ - uint32_t reference_select : 1; - - uint32_t reduced_tx_set_used : 1; - - uint32_t skip_mode_present : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 20; - } bits; - uint32_t value; - } mode_control_fields; - - /** \brief CDEF parameters - */ - /* value range [0..3] */ - uint8_t cdef_damping_minus_3; - /* value range [0..3] */ - uint8_t cdef_bits; - - /** Encode cdef strength: - * - * The cdef_y_strengths[] and cdef_uv_strengths[] are expected to be packed - * with both primary and secondary strength. The secondary strength is - * given in the lower two bits and the primary strength is given in the next - * four bits. - * - * cdef_y_strengths[] & cdef_uv_strengths[] should be derived as: - * (cdef_y_strengths[]) = (cdef_y_pri_strength[] << 2) | (cdef_y_sec_strength[] & 0x03) - * (cdef_uv_strengths[]) = (cdef_uv_pri_strength[] << 2) | (cdef_uv_sec_strength[] & 0x03) - * In which, cdef_y_pri_strength[]/cdef_y_sec_strength[]/cdef_uv_pri_strength[]/cdef_uv_sec_strength[] - * are variables defined in AV1 Spec 5.9.19. The cdef_y_strengths[] & cdef_uv_strengths[] - * are corresponding to LIBAOM variables cm->cdef_strengths[] & cm->cdef_uv_strengths[] respectively. - */ - /* value range [0..63] */ - uint8_t cdef_y_strengths[8]; - /* value range [0..63] */ - uint8_t cdef_uv_strengths[8]; - - /** \brief loop restoration parameters - */ - union { - struct { - uint16_t yframe_restoration_type : 2; - uint16_t cbframe_restoration_type : 2; - uint16_t crframe_restoration_type : 2; - uint16_t lr_unit_shift : 2; - uint16_t lr_uv_shift : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint16_t reserved : 7; - } bits; - uint16_t value; - } loop_restoration_fields; - - /** \brief global motion - */ - VAWarpedMotionParamsAV1 wm[7]; - - /**@}*/ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VADecPictureParameterBufferAV1; - - -/** - * \brief AV1 Slice Parameter Buffer Structure - * - * This structure conveys parameters related to bit stream data and should be - * sent once per tile. - * - * It uses the name VASliceParameterBufferAV1 to be consistent with other codec, - * but actually means VATileParameterBufferAV1. - * - * Slice data buffer of VASliceDataBufferType is used - * to send the bitstream. - * - * Please note that host decoder is responsible to parse out the - * per tile information. And the bit stream in sent to driver in per - * tile granularity. - */ -typedef struct _VASliceParameterBufferAV1 { - /**@{*/ - /** \brief The byte count of current tile in the bitstream buffer, - * starting from first byte of the buffer. - * It uses the name slice_data_size to be consistent with other codec, - * but actually means tile_data_size. - */ - uint32_t slice_data_size; - /** - * offset to the first byte of the data buffer. - */ - uint32_t slice_data_offset; - /** - * see VA_SLICE_DATA_FLAG_XXX definitions - */ - uint32_t slice_data_flag; - - uint16_t tile_row; - uint16_t tile_column; - - va_deprecated uint16_t tg_start; - va_deprecated uint16_t tg_end; - /** \brief anchor frame index for large scale tile. - * index into an array AnchorFrames of the frames that the tile uses - * for prediction. - * valid only when large_scale_tile equals 1. - */ - uint8_t anchor_frame_idx; - - /** \brief tile index in the tile list. - * Valid only when large_scale_tile is enabled. - * Driver uses this field to decide the tile output location. - */ - uint16_t tile_idx_in_tile_list; - - /**@}*/ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferAV1; - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_AV1_H */ diff --git a/prebuilts/aarch64/include/va/va_dec_hevc.h b/prebuilts/aarch64/include/va/va_dec_hevc.h deleted file mode 100644 index eef0530..0000000 --- a/prebuilts/aarch64/include/va/va_dec_hevc.h +++ /dev/null @@ -1,616 +0,0 @@ -/* - * Copyright (c) 2014 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_hevc.h - * \brief The HEVC decoding API - * - * This file contains the \ref api_dec_hevc "HEVC decoding API". - */ - -#ifndef VA_DEC_HEVC_H -#define VA_DEC_HEVC_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_dec_hevc HEVC decoding API - * - * This HEVC decoding API supports Main and Main Still Picture profiles. - * And it supports both short slice format and long slice format. - * - * @{ - */ - -/** - * \brief HEVC Decoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters and should be sent once - * per frame. - * - */ -typedef struct _VAPictureParameterBufferHEVC { - /** \brief buffer description of decoded current picture - * only VA_PICTURE_HEVC_FIELD_PIC and VA_PICTURE_HEVC_BOTTOM_FIELD - * of "flags" fields are meaningful. - */ - VAPictureHEVC CurrPic; - /** \brief buffer description of reference frames in DPB */ - VAPictureHEVC ReferenceFrames[15]; - /** \brief picture width, shall be integer multiple of minimum CB size. */ - uint16_t pic_width_in_luma_samples; - /** \brief picture height, shall be integer multiple of minimum CB size. */ - uint16_t pic_height_in_luma_samples; - - - union { - struct { - /** following flags have same syntax and semantic as those in HEVC spec */ - uint32_t chroma_format_idc : 2; - uint32_t separate_colour_plane_flag : 1; - uint32_t pcm_enabled_flag : 1; - uint32_t scaling_list_enabled_flag : 1; - uint32_t transform_skip_enabled_flag : 1; - uint32_t amp_enabled_flag : 1; - uint32_t strong_intra_smoothing_enabled_flag : 1; - uint32_t sign_data_hiding_enabled_flag : 1; - uint32_t constrained_intra_pred_flag : 1; - uint32_t cu_qp_delta_enabled_flag : 1; - uint32_t weighted_pred_flag : 1; - uint32_t weighted_bipred_flag : 1; - uint32_t transquant_bypass_enabled_flag : 1; - uint32_t tiles_enabled_flag : 1; - uint32_t entropy_coding_sync_enabled_flag : 1; - uint32_t pps_loop_filter_across_slices_enabled_flag : 1; - uint32_t loop_filter_across_tiles_enabled_flag : 1; - uint32_t pcm_loop_filter_disabled_flag : 1; - /** set based on sps_max_num_reorder_pics of current temporal layer. */ - uint32_t NoPicReorderingFlag : 1; - /** picture has no B slices */ - uint32_t NoBiPredFlag : 1; - - uint32_t ReservedBits : 11; - } bits; - uint32_t value; - } pic_fields; - - /** following parameters have same syntax with those in HEVC spec */ - /** \brief DPB size for current temporal layer */ - uint8_t sps_max_dec_pic_buffering_minus1; - uint8_t bit_depth_luma_minus8; - uint8_t bit_depth_chroma_minus8; - uint8_t pcm_sample_bit_depth_luma_minus1; - uint8_t pcm_sample_bit_depth_chroma_minus1; - uint8_t log2_min_luma_coding_block_size_minus3; - uint8_t log2_diff_max_min_luma_coding_block_size; - uint8_t log2_min_transform_block_size_minus2; - uint8_t log2_diff_max_min_transform_block_size; - uint8_t log2_min_pcm_luma_coding_block_size_minus3; - uint8_t log2_diff_max_min_pcm_luma_coding_block_size; - uint8_t max_transform_hierarchy_depth_intra; - uint8_t max_transform_hierarchy_depth_inter; - int8_t init_qp_minus26; - uint8_t diff_cu_qp_delta_depth; - int8_t pps_cb_qp_offset; - int8_t pps_cr_qp_offset; - uint8_t log2_parallel_merge_level_minus2; - uint8_t num_tile_columns_minus1; - uint8_t num_tile_rows_minus1; - /** - * when uniform_spacing_flag equals 1, application should populate - * column_width_minus[], and row_height_minus1[] with approperiate values. - */ - uint16_t column_width_minus1[19]; - uint16_t row_height_minus1[21]; - - /** - * The Following Parameters are needed for Short Slice Format Only. - * Only format decoding can ignore them. - */ - - /** - * \brief Parameters needed for parsing slice segment headers - */ - union { - struct { - /** following parameters have same syntax with those in HEVC spec */ - uint32_t lists_modification_present_flag : 1; - uint32_t long_term_ref_pics_present_flag : 1; - uint32_t sps_temporal_mvp_enabled_flag : 1; - uint32_t cabac_init_present_flag : 1; - uint32_t output_flag_present_flag : 1; - uint32_t dependent_slice_segments_enabled_flag : 1; - uint32_t pps_slice_chroma_qp_offsets_present_flag : 1; - uint32_t sample_adaptive_offset_enabled_flag : 1; - uint32_t deblocking_filter_override_enabled_flag : 1; - uint32_t pps_disable_deblocking_filter_flag : 1; - uint32_t slice_segment_header_extension_present_flag : 1; - - /** current picture with NUT between 16 and 21 inclusive */ - uint32_t RapPicFlag : 1; - /** current picture with NUT between 19 and 20 inclusive */ - uint32_t IdrPicFlag : 1; - /** current picture has only intra slices */ - uint32_t IntraPicFlag : 1; - - uint32_t ReservedBits : 18; - } bits; - uint32_t value; - } slice_parsing_fields; - - /** following parameters have same syntax with those in HEVC spec */ - uint8_t log2_max_pic_order_cnt_lsb_minus4; - uint8_t num_short_term_ref_pic_sets; - uint8_t num_long_term_ref_pic_sps; - uint8_t num_ref_idx_l0_default_active_minus1; - uint8_t num_ref_idx_l1_default_active_minus1; - int8_t pps_beta_offset_div2; - int8_t pps_tc_offset_div2; - uint8_t num_extra_slice_header_bits; - - /** - * \brief number of bits that structure - * short_term_ref_pic_set( num_short_term_ref_pic_sets ) takes in slice - * segment header when short_term_ref_pic_set_sps_flag equals 0. - * if short_term_ref_pic_set_sps_flag equals 1, the value should be 0. - * the bit count is calculated after emulation prevention bytes are removed - * from bit streams. - * This variable is used for accelorater to skip parsing the - * short_term_ref_pic_set( num_short_term_ref_pic_sets ) structure. - */ - uint32_t st_rps_bits; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAPictureParameterBufferHEVC; - -/** - * \brief HEVC Decoding Picture Parameter Buffer Structure for Range Extension - * - * This structure conveys picture level HEVC Range Extension parameters - * and should be sent once per frame. This data structure should be sent - * together with VAPictureParameterBufferHEVC in a single buffer of - * \ref VAPictureParameterBufferHEVCExtension since each frame - * of HEVC range extension contains both picture level parameters and picture - * level range extension parameters. They should be parsed together. The buffer - * type is same as \ref VAPictureParameterBufferHEVC. - * - */ -typedef struct _VAPictureParameterBufferHEVCRext { - union { - struct { - /** \brief HEVC range extension flags - * The following flags bears the same syntax and semantics as - * those defined in HEVC bit stream spec. - */ - uint32_t transform_skip_rotation_enabled_flag : 1; - uint32_t transform_skip_context_enabled_flag : 1; - uint32_t implicit_rdpcm_enabled_flag : 1; - uint32_t explicit_rdpcm_enabled_flag : 1; - uint32_t extended_precision_processing_flag : 1; - uint32_t intra_smoothing_disabled_flag : 1; - uint32_t high_precision_offsets_enabled_flag : 1; - uint32_t persistent_rice_adaptation_enabled_flag : 1; - uint32_t cabac_bypass_alignment_enabled_flag : 1; - uint32_t cross_component_prediction_enabled_flag : 1; - uint32_t chroma_qp_offset_list_enabled_flag : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 21; - } bits; - uint32_t value; - } range_extension_pic_fields; - - /** \brief HEVC range extension flags - * The following flags bears the same syntax and semantics as - * those defined in HEVC bit stream spec. - */ - uint8_t diff_cu_chroma_qp_offset_depth; - uint8_t chroma_qp_offset_list_len_minus1; - uint8_t log2_sao_offset_scale_luma; - uint8_t log2_sao_offset_scale_chroma; - uint8_t log2_max_transform_skip_block_size_minus2; - int8_t cb_qp_offset_list[6]; - int8_t cr_qp_offset_list[6]; -} VAPictureParameterBufferHEVCRext; - -/** - *\brief HEVC Decoding Picture Parameter Buffer Structure for - *Screen Content extension - * - *This structure conveys picture level HEVC Scc parameters - *and should be sent once per frame. This data structure should be sent - *together with VAPictureParameterBufferHEVC and VAPictureParameterBufferHEVCRext - *in a single buffer of \ref VAPictureParameterBufferHEVCExtension since each - *frame of HEVC SCC contains picture level parameters, picture level range - *extension parameters and picture level Scc parameters. They should be parsed - *together and the buffer type is same as \ref VAPictureParameterBufferHEVC. - * - */ -typedef struct _VAPictureParameterBufferHEVCScc { - union { - struct { - /** \brief HEVC Scc extension flags - * The following flags bears the same syntax and semantics as - * those defined in HEVC bit stream spec. - */ - /* indicates if intra block copy (IBC) is enabled or not. */ - uint32_t pps_curr_pic_ref_enabled_flag : 1; - /* indicates if Palette Mode is enabled or not. */ - uint32_t palette_mode_enabled_flag : 1; - /* controls the presence and inference of the use_integer_mv_flag syntax - * in slice segment header that specifies the resolution of motion - * vectors for inter prediction. - */ - uint32_t motion_vector_resolution_control_idc : 2; - /* specifies that the intra boundary filtering process is - * disabled or not for intra prediction. - */ - uint32_t intra_boundary_filtering_disabled_flag : 1; - /* specifies that an adaptive colour transform may be applied - * to the residual in the decoding process. - */ - uint32_t residual_adaptive_colour_transform_enabled_flag : 1; - - /* specifies that slice_act_y_qp_offset, slice_act_cb_qp_offset, - * slice_act_cr_qp_offset are present in the slice header - */ - uint32_t pps_slice_act_qp_offsets_present_flag : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 25; - } bits; - uint32_t value; - } screen_content_pic_fields; - - /* specifies the maximum allowed palette size. */ - uint8_t palette_max_size; - /* Correspond to HEVC syntax elements of the same names. - * It specifies the difference between the maximum allowed palette - * predictor size and the maximum allowed palette size. - * App needs to enforce that the variable PaletteMaxPredictorSize, - * which is derived as follows: - * PaletteMaxPredictorSize = palette_max_size + delta_palette_max_predictor_size - * should have a value range of [0..128]. - */ - uint8_t delta_palette_max_predictor_size; - /** \brief Size of initial palette predictor. - * It is derived from pps_num_palette_predictor_initializer or - * sps_num_palette_predictor_initializer_minus1. - * Details in HEVC SCC spec section 9.3.2.3. - */ - uint8_t predictor_palette_size; - /** \brief Palette predictor initializer. - * It is derived from pps_palette_predictor_initializers[][] - * or sps_palette_predictor_initializers[][]. - * Details in HEVC SCC spec section 9.3.2.3. - */ - uint16_t predictor_palette_entries[3][128]; - /* are used to determine the offsets that are applied to the - * quantization parameter values for the luma, Cb and Cr - * components, respectively. - */ - int8_t pps_act_y_qp_offset_plus5; - int8_t pps_act_cb_qp_offset_plus5; - int8_t pps_act_cr_qp_offset_plus3; -} VAPictureParameterBufferHEVCScc; - -/** - * \brief HEVC Decoding Picture Parameter Buffer Structure including Extensions - * - * This structure conveys picture level HEVC parameters including basic version 1 - * and range extension and screen content extension. - * The data buffer should be sent once per frame. - * - */ -typedef struct _VAPictureParameterBufferHEVCExtension { - /** \brief basic HEVC picture parameters data structure - */ - VAPictureParameterBufferHEVC base; - - /** \brief HEVC range extension picture parameters data structure - */ - VAPictureParameterBufferHEVCRext rext; - - /** \brief HEVC screen content picture parameters data structure - */ - VAPictureParameterBufferHEVCScc scc; -} VAPictureParameterBufferHEVCExtension; - -/** - * \brief HEVC Slice Parameter Buffer Structure For Long Format - * - * VASliceParameterBufferHEVC structure should be accompanied by a - * slice data buffer, which holds the whole raw slice NAL unit bit streams - * including start code prefix and emulation prevention bytes not removed. - * - * This structure conveys parameters related to slice segment header and should - * be sent once per slice. - * - * For short format, this data structure is not sent by application. - * - */ -typedef struct _VASliceParameterBufferHEVC { - /** @name Codec-independent Slice Parameter Buffer base. */ - - /**@{*/ - - /** \brief Number of bytes in the slice data buffer for this slice - * counting from and including NAL unit header. - */ - uint32_t slice_data_size; - /** \brief The offset to the NAL unit header for this slice */ - uint32_t slice_data_offset; - /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_XXX. */ - uint32_t slice_data_flag; - /** - * \brief Byte offset from NAL unit header to the begining of slice_data(). - * - * This byte offset is relative to and includes the NAL unit header - * and represents the number of bytes parsed in the slice_header() - * after the removal of any emulation prevention bytes in - * there. However, the slice data buffer passed to the hardware is - * the original bitstream, thus including any emulation prevention - * bytes. - */ - uint32_t slice_data_byte_offset; - /** HEVC syntax element. */ - uint32_t slice_segment_address; - /** \brief index into ReferenceFrames[] - * RefPicList[0][] corresponds to RefPicList0[] of HEVC variable. - * RefPicList[1][] corresponds to RefPicList1[] of HEVC variable. - * value range [0..14, 0xFF], where 0xFF indicates invalid entry. - */ - uint8_t RefPicList[2][15]; - union { - uint32_t value; - struct { - /** current slice is last slice of picture. */ - uint32_t LastSliceOfPic : 1; - /** HEVC syntax element. */ - uint32_t dependent_slice_segment_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_type : 2; - /** HEVC syntax element. */ - uint32_t color_plane_id : 2; - /** HEVC syntax element. */ - uint32_t slice_sao_luma_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_sao_chroma_flag : 1; - /** HEVC syntax element. */ - uint32_t mvd_l1_zero_flag : 1; - /** HEVC syntax element. */ - uint32_t cabac_init_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_temporal_mvp_enabled_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_deblocking_filter_disabled_flag : 1; - /** HEVC syntax element. */ - uint32_t collocated_from_l0_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_loop_filter_across_slices_enabled_flag : 1; - uint32_t reserved : 18; - } fields; - } LongSliceFlags; - - /** HEVC syntax element. Collocated Reference Picture Index. - * index to RefPicList[0][] or RefPicList[1][]. - * when slice_temporal_mvp_enabled_flag equals 0, it should take value 0xFF. - * value range [0..14, 0xFF]. - */ - uint8_t collocated_ref_idx; - /** HEVC syntax element. - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l0_default_active_minus1. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** HEVC syntax element. - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l1_default_active_minus1. - */ - uint8_t num_ref_idx_l1_active_minus1; - /** HEVC syntax element. */ - int8_t slice_qp_delta; - /** HEVC syntax element. */ - int8_t slice_cb_qp_offset; - /** HEVC syntax element. */ - int8_t slice_cr_qp_offset; - /** HEVC syntax element. */ - int8_t slice_beta_offset_div2; - /** HEVC syntax element. */ - int8_t slice_tc_offset_div2; - /** HEVC syntax element. */ - uint8_t luma_log2_weight_denom; - /** HEVC syntax element. */ - int8_t delta_chroma_log2_weight_denom; - /** HEVC syntax element. */ - int8_t delta_luma_weight_l0[15]; - /** HEVC syntax element. */ - int8_t luma_offset_l0[15]; - /** HEVC syntax element. */ - int8_t delta_chroma_weight_l0[15][2]; - /** corresponds to HEVC spec variable of the same name. */ - int8_t ChromaOffsetL0[15][2]; - /** HEVC syntax element. */ - int8_t delta_luma_weight_l1[15]; - /** HEVC syntax element. */ - int8_t luma_offset_l1[15]; - /** HEVC syntax element. */ - int8_t delta_chroma_weight_l1[15][2]; - /** corresponds to HEVC spec variable of the same name. */ - int8_t ChromaOffsetL1[15][2]; - /** HEVC syntax element. */ - uint8_t five_minus_max_num_merge_cand; - /** HEVC syntax element. */ - uint16_t num_entry_point_offsets; - /** HEVC syntax element. */ - uint16_t entry_offset_to_subset_array; - /** \brief Number of emulation prevention bytes in slice header. */ - uint16_t slice_data_num_emu_prevn_bytes; - /**@}*/ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW - 2]; -} VASliceParameterBufferHEVC; - -/** - * \brief HEVC Extented Slice Parameter Buffer Structure For Long Format - * - * This data structure contains extension profiles (range extension and screen content). - * - * VASliceParameterBufferHEVCRext structure should be accompanied by a - * slice data buffer, which holds the whole raw slice NAL unit bit streams - * including start code prefix and emulation prevention bytes not removed. - * - * This structure conveys parameters related to slice segment header and should - * be sent once per slice with VASliceParameterBufferHEVC in a single buffer of - * \ref VASliceParameterBufferHEVCExtension and the buffer type is same as \ref - * VASliceParameterBufferHEVC. - * - * For short format, this data structure is not sent by application. - * - */ -typedef struct _VASliceParameterBufferHEVCRext { - /* below four parameters are used to replace data types of the - * corresponding parameters of those in \# VASliceParameterBufferHEVC. - */ - int16_t luma_offset_l0[15]; - int16_t ChromaOffsetL0[15][2]; - int16_t luma_offset_l1[15]; - int16_t ChromaOffsetL1[15][2]; - - union { - struct { - uint32_t cu_chroma_qp_offset_enabled_flag : 1; - uint32_t use_integer_mv_flag : 1; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 30; - } bits; - uint32_t value; - } slice_ext_flags; - - /** \brief Screen Content Extension parameters. - * data range [-12..12] - */ - int8_t slice_act_y_qp_offset; - int8_t slice_act_cb_qp_offset; - int8_t slice_act_cr_qp_offset; -} VASliceParameterBufferHEVCRext; - -/** - * \brief HEVC Decoding Slice Parameter Buffer Structure For Long Format including Extensions - * - * This data structure contains both baseline HEVC profiles (main, main10) - * and extension profiles (range extension and screen content). - * - * VASliceParameterBufferHEVCExtension structure should be accompanied by a - * slice data buffer, which holds the whole raw slice NAL unit bit streams - * including start code prefix and emulation prevention bytes not removed. - * - * This structure conveys parameters related to slice segment header and should - * be sent once per slice. For HEVC range extension and HEVC Scc decoding, - * application should parse both basic slice parameters and extented slice - * parameters into this buffer structure and sent it. - * - * For short format, this data structure is not sent by application. - * - */ -typedef struct _VASliceParameterBufferHEVCExtension { - /** \brief baseline HEVC slice parameters data structure */ - VASliceParameterBufferHEVC base; - - /** \brief extented HEVC slice parameters data structure */ - VASliceParameterBufferHEVCRext rext; -} VASliceParameterBufferHEVCExtension; - -/** - * \brief HEVC Inverse Quantization Matrix Buffer Structure - * - * This structure is sent once per frame, - * and only when scaling_list_enabled_flag = 1. - * When sps_scaling_list_data_present_flag = 0, app still - * needs to send in this structure with default matrix values. - * - * Matrix entries are in raster scan order which follows HEVC spec. - */ -typedef struct _VAIQMatrixBufferHEVC { - /** - * \brief scaling lists, - * corresponds to same HEVC spec syntax element - * ScalingList[ i ][ MatrixID ][ j ]. - * - * \brief 4x4 scaling, - * correspongs i = 0, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 15, inclusive. - */ - uint8_t ScalingList4x4[6][16]; - /** - * \brief 8x8 scaling, - * correspongs i = 1, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t ScalingList8x8[6][64]; - /** - * \brief 16x16 scaling, - * correspongs i = 2, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t ScalingList16x16[6][64]; - /** - * \brief 32x32 scaling, - * correspongs i = 3, MatrixID is in the range of 0 to 1, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t ScalingList32x32[2][64]; - /** - * \brief DC values of the 16x16 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 2 and matrixID in the range of 0 to 5, inclusive. - */ - uint8_t ScalingListDC16x16[6]; - /** - * \brief DC values of the 32x32 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 3 and matrixID in the range of 0 to 1, inclusive. - */ - uint8_t ScalingListDC32x32[2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferHEVC; - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_HEVC_H */ diff --git a/prebuilts/aarch64/include/va/va_dec_jpeg.h b/prebuilts/aarch64/include/va/va_dec_jpeg.h deleted file mode 100644 index 7bb26c2..0000000 --- a/prebuilts/aarch64/include/va/va_dec_jpeg.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_jpeg.h - * \brief The JPEG decoding API - * - * This file contains the \ref api_dec_jpeg "JPEG decoding API". - */ - -#ifndef VA_DEC_JPEG_H -#define VA_DEC_JPEG_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_dec_jpeg JPEG decoding API - * - * This JPEG decoding API supports Baseline profile only. - * - * @{ - */ - -/** - * \brief Picture parameter for JPEG decoding. - * - * This structure holds information from the frame header, along with - * definitions from additional segments. - */ -typedef struct _VAPictureParameterBufferJPEGBaseline { - /** \brief Picture width in pixels. */ - uint16_t picture_width; - /** \brief Picture height in pixels. */ - uint16_t picture_height; - - struct { - /** \brief Component identifier (Ci). */ - uint8_t component_id; - /** \brief Horizontal sampling factor (Hi). */ - uint8_t h_sampling_factor; - /** \brief Vertical sampling factor (Vi). */ - uint8_t v_sampling_factor; - /* \brief Quantization table selector (Tqi). */ - uint8_t quantiser_table_selector; - } components[255]; - /** \brief Number of components in frame (Nf). */ - uint8_t num_components; - - /** \brief Input color space 0: YUV, 1: RGB, 2: BGR, others: reserved */ - uint8_t color_space; - /** \brief Set to VA_ROTATION_* for a single rotation angle reported by VAConfigAttribDecJPEG. */ - uint32_t rotation; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 1]; -} VAPictureParameterBufferJPEGBaseline; - -/** - * \brief Quantization table for JPEG decoding. - * - * This structure holds the complete quantization tables. This is an - * aggregation of all quantization table (DQT) segments maintained by - * the application. i.e. up to 4 quantization tables are stored in - * there for baseline profile. - * - * The #load_quantization_table array can be used as a hint to notify - * the VA driver implementation about which table(s) actually changed - * since the last submission of this buffer. - * - * The #quantiser_table values are specified in zig-zag scan order. - */ -typedef struct _VAIQMatrixBufferJPEGBaseline { - /** \brief Specifies which #quantiser_table is valid. */ - uint8_t load_quantiser_table[4]; - /** \brief Quanziation tables indexed by table identifier (Tqi). */ - uint8_t quantiser_table[4][64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferJPEGBaseline; - -/** - * \brief Slice parameter for JPEG decoding. - * - * This structure holds information from the scan header, along with - * definitions from additional segments. The associated slice data - * buffer holds all entropy coded segments (ECS) in the scan. - */ -typedef struct _VASliceParameterBufferJPEGBaseline { - /** @name Codec-independent Slice Parameter Buffer base. */ - /**@{*/ - /** \brief Number of bytes in the slice data buffer for this slice. */ - uint32_t slice_data_size; - /** \brief The offset to the first byte of the first MCU. */ - uint32_t slice_data_offset; - /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_xxx. */ - uint32_t slice_data_flag; - /**@}*/ - - /** \brief Scan horizontal position. */ - uint32_t slice_horizontal_position; - /** \brief Scan vertical position. */ - uint32_t slice_vertical_position; - - struct { - /** \brief Scan component selector (Csj). */ - uint8_t component_selector; - /** \brief DC entropy coding table selector (Tdj). */ - uint8_t dc_table_selector; - /** \brief AC entropy coding table selector (Taj). */ - uint8_t ac_table_selector; - } components[4]; - /** \brief Number of components in scan (Ns). */ - uint8_t num_components; - - /** \brief Restart interval definition (Ri). */ - uint16_t restart_interval; - /** \brief Number of MCUs in a scan. */ - uint32_t num_mcus; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferJPEGBaseline; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_JPEG_H */ diff --git a/prebuilts/aarch64/include/va/va_dec_vp8.h b/prebuilts/aarch64/include/va/va_dec_vp8.h deleted file mode 100644 index 8004f7d..0000000 --- a/prebuilts/aarch64/include/va/va_dec_vp8.h +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_vp.h - * \brief VP8 decoding API - * - * This file contains the \ref api_dec_vp8 "VP8 decoding API". - */ - -#ifndef VA_DEC_VP8_H -#define VA_DEC_VP8_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_dec_vp8 VP8 decoding API - * - * @{ - */ - -/** - * \brief VPX Bool Coder Context structure - * - * This common structure is defined for potential sharing by other VP formats - * - */ -typedef struct _VABoolCoderContextVPX { - /* partition 0 "range" */ - uint8_t range; - /* partition 0 "value" */ - uint8_t value; - /* - * 'partition 0 number of shifts before an output byte is available' - * it is the number of remaining bits in 'value' for decoding, range [0, 7]. - */ - - uint8_t count; -} VABoolCoderContextVPX; - -/** - * \brief VP8 Decoding Picture Parameter Buffer Structure - * - * This structure conveys frame level parameters and should be sent once - * per frame. - * - */ -typedef struct _VAPictureParameterBufferVP8 { - /* frame width in pixels */ - uint32_t frame_width; - /* frame height in pixels */ - uint32_t frame_height; - - /* specifies the "last" reference frame */ - VASurfaceID last_ref_frame; - /* specifies the "golden" reference frame */ - VASurfaceID golden_ref_frame; - /* specifies the "alternate" referrence frame */ - VASurfaceID alt_ref_frame; - /* specifies the out-of-loop deblocked frame, not used currently */ - VASurfaceID out_of_loop_frame; - - union { - struct { - /* same as key_frame in bitstream syntax, 0 means a key frame */ - uint32_t key_frame : 1; - /* same as version in bitstream syntax */ - uint32_t version : 3; - /* same as segmentation_enabled in bitstream syntax */ - uint32_t segmentation_enabled : 1; - /* same as update_mb_segmentation_map in bitstream syntax */ - uint32_t update_mb_segmentation_map : 1; - /* same as update_segment_feature_data in bitstream syntax */ - uint32_t update_segment_feature_data : 1; - /* same as filter_type in bitstream syntax */ - uint32_t filter_type : 1; - /* same as sharpness_level in bitstream syntax */ - uint32_t sharpness_level : 3; - /* same as loop_filter_adj_enable in bitstream syntax */ - uint32_t loop_filter_adj_enable : 1; - /* same as mode_ref_lf_delta_update in bitstream syntax */ - uint32_t mode_ref_lf_delta_update : 1; - /* same as sign_bias_golden in bitstream syntax */ - uint32_t sign_bias_golden : 1; - /* same as sign_bias_alternate in bitstream syntax */ - uint32_t sign_bias_alternate : 1; - /* same as mb_no_coeff_skip in bitstream syntax */ - uint32_t mb_no_coeff_skip : 1; - /* flag to indicate that loop filter should be disabled */ - uint32_t loop_filter_disable : 1; - } bits; - uint32_t value; - } pic_fields; - - /* - * probabilities of the segment_id decoding tree and same as - * mb_segment_tree_probs in the spec. - */ - uint8_t mb_segment_tree_probs[3]; - - /* Post-adjustment loop filter levels for the 4 segments */ - uint8_t loop_filter_level[4]; - /* loop filter deltas for reference frame based MB level adjustment */ - int8_t loop_filter_deltas_ref_frame[4]; - /* loop filter deltas for coding mode based MB level adjustment */ - int8_t loop_filter_deltas_mode[4]; - - /* same as prob_skip_false in bitstream syntax */ - uint8_t prob_skip_false; - /* same as prob_intra in bitstream syntax */ - uint8_t prob_intra; - /* same as prob_last in bitstream syntax */ - uint8_t prob_last; - /* same as prob_gf in bitstream syntax */ - uint8_t prob_gf; - - /* - * list of 4 probabilities of the luma intra prediction mode decoding - * tree and same as y_mode_probs in frame header - */ - uint8_t y_mode_probs[4]; - /* - * list of 3 probabilities of the chroma intra prediction mode decoding - * tree and same as uv_mode_probs in frame header - */ - uint8_t uv_mode_probs[3]; - /* - * updated mv decoding probabilities and same as mv_probs in - * frame header - */ - uint8_t mv_probs[2][19]; - - VABoolCoderContextVPX bool_coder_ctx; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureParameterBufferVP8; - -/** - * \brief VP8 Slice Parameter Buffer Structure - * - * This structure conveys parameters related to data partitions and should be - * sent once per frame. Slice data buffer of VASliceDataBufferType is used - * to send the partition data. - * - */ -typedef struct _VASliceParameterBufferVP8 { - /* - * number of bytes in the slice data buffer for the partitions - */ - uint32_t slice_data_size; - /* - * offset to the first byte of partition data (control partition) - */ - uint32_t slice_data_offset; - /* - * see VA_SLICE_DATA_FLAG_XXX definitions - */ - uint32_t slice_data_flag; - /* - * offset to the first bit of MB from the first byte of partition data(slice_data_offset) - */ - uint32_t macroblock_offset; - - /* - * Partitions - * (1<lvl[seg][ref][mode] in VP9 code, - * where m is [ref], and n is [mode] in FilterLevel[m][n]. - */ - uint8_t filter_level[4][2]; - /** \brief Specifies per segment Luma AC quantization scale. - * Corresponding to y_dequant[qindex][1] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t luma_ac_quant_scale; - /** \brief Specifies per segment Luma DC quantization scale. - * Corresponding to y_dequant[qindex][0] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t luma_dc_quant_scale; - /** \brief Specifies per segment Chroma AC quantization scale. - * Corresponding to uv_dequant[qindex][1] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t chroma_ac_quant_scale; - /** \brief Specifies per segment Chroma DC quantization scale. - * Corresponding to uv_dequant[qindex][0] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t chroma_dc_quant_scale; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VASegmentParameterVP9; - - - -/** - * \brief VP9 Slice Parameter Buffer Structure - * - * This structure conveys parameters related to segmentation data and should be - * sent once per frame. - * - * When segmentation is disabled, only SegParam[0] has valid values, - * all other entries should be populated with 0. - * Otherwise, all eight entries should be valid. - * - * Slice data buffer of VASliceDataBufferType is used - * to send the bitstream which should include whole or part of partition 0 - * (at least compressed header) to the end of frame. - * - */ -typedef struct _VASliceParameterBufferVP9 { - /** \brief The byte count of current frame in the bitstream buffer, - * starting from first byte of the buffer. - * It uses the name slice_data_size to be consitent with other codec, - * but actually means frame_data_size. - */ - uint32_t slice_data_size; - /** - * offset to the first byte of partition data (control partition) - */ - uint32_t slice_data_offset; - /** - * see VA_SLICE_DATA_FLAG_XXX definitions - */ - uint32_t slice_data_flag; - - /** - * \brief per segment information - */ - VASegmentParameterVP9 seg_param[8]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VASliceParameterBufferVP9; - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_VP9_H */ diff --git a/prebuilts/aarch64/include/va/va_drm.h b/prebuilts/aarch64/include/va/va_drm.h deleted file mode 100644 index a39c5a2..0000000 --- a/prebuilts/aarch64/include/va/va_drm.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * va_drm.h - Raw DRM API - * - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_DRM_H -#define VA_DRM_H - -#include - -/** - * \file va_drm.h - * \brief The raw DRM API - * - * This file contains the \ref api_drm "Raw DRM API". - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Returns a VA display derived from the specified DRM connection. - * - * This function returns a (possibly cached) VA display from the - * specified DRM connection @fd. - * - * @param[in] fd the DRM connection descriptor - * @return the VA display - */ -VADisplay -vaGetDisplayDRM(int fd); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DRM_H */ diff --git a/prebuilts/aarch64/include/va/va_drmcommon.h b/prebuilts/aarch64/include/va/va_drmcommon.h deleted file mode 100644 index 0bda458..0000000 --- a/prebuilts/aarch64/include/va/va_drmcommon.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - * va_drmcommon.h - Common utilities for DRM-based drivers - * - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_DRM_COMMON_H -#define VA_DRM_COMMON_H - -#include - - -/** \brief DRM authentication type. */ -enum { - /** \brief Disconnected. */ - VA_DRM_AUTH_NONE = 0, - /** - * \brief Connected. Authenticated with DRI1 protocol. - * - * @deprecated - * This is a deprecated authentication type. All DRI-based drivers have - * been migrated to use the DRI2 protocol. Newly written drivers shall - * use DRI2 protocol only, or a custom authentication means. e.g. opt - * for authenticating on the VA driver side, instead of libva side. - */ - VA_DRM_AUTH_DRI1 = 1, - /** - * \brief Connected. Authenticated with DRI2 protocol. - * - * This is only useful to VA/X11 drivers. The libva-x11 library provides - * a helper function VA_DRI2Authenticate() for authenticating the - * connection. However, DRI2 conformant drivers don't need to call that - * function since authentication happens on the libva side, implicitly. - */ - VA_DRM_AUTH_DRI2 = 2, - /** - * \brief Connected. Authenticated with some alternate raw protocol. - * - * This authentication mode is mainly used in non-VA/X11 drivers. - * Authentication happens through some alternative method, at the - * discretion of the VA driver implementation. - */ - VA_DRM_AUTH_CUSTOM = 3 -}; - -/** \brief Base DRM state. */ -struct drm_state { - /** \brief DRM connection descriptor. */ - int fd; - /** \brief DRM authentication type. */ - int auth_type; - /** \brief Reserved bytes for future use, must be zero */ - int va_reserved[8]; -}; - -/** \brief Kernel DRM buffer memory type. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM 0x10000000 -/** \brief DRM PRIME memory type (old version) - * - * This supports only single objects with restricted memory layout. - * Used with VASurfaceAttribExternalBuffers. - */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME 0x20000000 -/** \brief DRM PRIME memory type - * - * Used with VADRMPRIMESurfaceDescriptor. - */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 0x40000000 - -/** - * \brief External buffer descriptor for a DRM PRIME surface. - * - * For export, call vaExportSurfaceHandle() with mem_type set to - * VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 and pass a pointer to an - * instance of this structure to fill. - * If VA_EXPORT_SURFACE_SEPARATE_LAYERS is specified on export, each - * layer will contain exactly one plane. For example, an NV12 - * surface will be exported as two layers, one of DRM_FORMAT_R8 and - * one of DRM_FORMAT_GR88. - * If VA_EXPORT_SURFACE_COMPOSED_LAYERS is specified on export, - * there will be exactly one layer. - * - * For import, call vaCreateSurfaces() with the MemoryType attribute - * set to VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 and the - * ExternalBufferDescriptor attribute set to point to an array of - * num_surfaces instances of this structure. - * The number of planes which need to be provided for a given layer - * is dependent on both the format and the format modifier used for - * the objects containing it. For example, the format DRM_FORMAT_RGBA - * normally requires one plane, but with the format modifier - * I915_FORMAT_MOD_Y_TILED_CCS it requires two planes - the first - * being the main data plane and the second containing the color - * control surface. - * Note that a given driver may only support a subset of possible - * representations of a particular format. For example, it may only - * support NV12 surfaces when they are contained within a single DRM - * object, and therefore fail to create such surfaces if the two - * planes are in different DRM objects. - * Note that backend driver will retrieve the resource represent by fd, - * and a valid surface ID is generated. Backend driver will not close - * the file descriptor. Application should handle the release of the fd. - * releasing the fd will not impact the existence of the surface. - */ -typedef struct _VADRMPRIMESurfaceDescriptor { - /** Pixel format fourcc of the whole surface (VA_FOURCC_*). */ - uint32_t fourcc; - /** Width of the surface in pixels. */ - uint32_t width; - /** Height of the surface in pixels. */ - uint32_t height; - /** Number of distinct DRM objects making up the surface. */ - uint32_t num_objects; - /** Description of each object. */ - struct { - /** DRM PRIME file descriptor for this object. */ - int fd; - /** Total size of this object (may include regions which are - * not part of the surface). */ - uint32_t size; - /** Format modifier applied to this object. */ - uint64_t drm_format_modifier; - } objects[4]; - /** Number of layers making up the surface. */ - uint32_t num_layers; - /** Description of each layer in the surface. */ - struct { - /** DRM format fourcc of this layer (DRM_FOURCC_*). */ - uint32_t drm_format; - /** Number of planes in this layer. */ - uint32_t num_planes; - /** Index in the objects array of the object containing each - * plane. */ - uint32_t object_index[4]; - /** Offset within the object of each plane. */ - uint32_t offset[4]; - /** Pitch of each plane. */ - uint32_t pitch[4]; - } layers[4]; -} VADRMPRIMESurfaceDescriptor; - -/** - * \brief List of DRM format modifiers. - * - * To allocate surfaces with one of the modifiers specified in the array, call - * vaCreateSurfaces() with the VASurfaceAttribDRMFormatModifiers attribute set - * to point to an array of num_surfaces instances of this structure. The driver - * will select the optimal modifier in the list. - * - * DRM format modifiers are defined in drm_fourcc.h in the Linux kernel. - */ -typedef struct _VADRMFormatModifierList { - /** Number of modifiers. */ - uint32_t num_modifiers; - /** Array of modifiers. */ - uint64_t *modifiers; -} VADRMFormatModifierList; - - -#endif /* VA_DRM_COMMON_H */ diff --git a/prebuilts/aarch64/include/va/va_egl.h b/prebuilts/aarch64/include/va/va_egl.h deleted file mode 100644 index d6acb7d..0000000 --- a/prebuilts/aarch64/include/va/va_egl.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2007 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef _VA_EGL_H_ -#define _VA_EGL_H_ - -#warning The APIs / data structures included in this file are deprecated - -#endif /* _VA_EGL_H_ */ diff --git a/prebuilts/aarch64/include/va/va_enc_av1.h b/prebuilts/aarch64/include/va/va_enc_av1.h deleted file mode 100644 index 6a845b7..0000000 --- a/prebuilts/aarch64/include/va/va_enc_av1.h +++ /dev/null @@ -1,995 +0,0 @@ -/* - * Copyright (c) 2021 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_av1.h - * \brief AV1 encoding API - * - * This file contains the \ref api_enc_av1 "AV1 encoding API". - * - */ - -#ifndef VA_ENC_AV1_H -#define VA_ENC_AV1_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_enc_av1 AV1 encoding API - * - * This AV1 encoding API supports 8-bit/10bit 420 format only. - * - * @{ - */ - -/** \brief Attribute value for VAConfigAttribEncAV1. - * - * This attribute decribes the supported features of an AV1 - * encoder configuration. - * - * All of the field values in this attribute are VA_FEATURE_* values, - * indicating support for the corresponding feature. - * - */ -typedef union _VAConfigAttribValEncAV1 { - struct { - /** - * \brief Use 128x128 superblock. - * - * Allows setting use_128x128_superblock in the SPS. - */ - uint32_t support_128x128_superblock : 2; - /** - * \brief Intra filter. - * Allows setting enable_filter_intra in the SPS. - */ - uint32_t support_filter_intra : 2; - /** - * \brief Intra edge filter. - * Allows setting enable_intra_edge_filter in the SPS. - */ - uint32_t support_intra_edge_filter : 2; - /** - * \brief Interintra compound. - * Allows setting enable_interintra_compound in the SPS. - */ - uint32_t support_interintra_compound : 2; - /** - * \brief Masked compound. - * Allows setting enable_masked_compound in the SPS. - */ - uint32_t support_masked_compound : 2; - /** - * \brief Warped motion. - * Allows setting enable_warped_motion in the SPS. - */ - uint32_t support_warped_motion : 2; - /** - * \brief Palette mode. - * Allows setting palette_mode in the PPS. - */ - uint32_t support_palette_mode : 2; - /** - * \brief Dual filter. - * Allows setting enable_dual_filter in the SPS. - */ - uint32_t support_dual_filter : 2; - /** - * \brief Jnt compound. - * Allows setting enable_jnt_comp in the SPS. - */ - uint32_t support_jnt_comp : 2; - /** - * \brief Refrence frame mvs. - * Allows setting enable_ref_frame_mvs in the SPS. - */ - uint32_t support_ref_frame_mvs : 2; - /** - * \brief Super resolution. - * Allows setting enable_superres in the SPS. - */ - uint32_t support_superres : 2; - /** - * \brief Restoration. - * Allows setting enable_restoration in the SPS. - */ - uint32_t support_restoration : 2; - /** - * \brief Allow intraBC. - * Allows setting allow_intrabc in the PPS. - */ - uint32_t support_allow_intrabc : 2; - /** - * \brief Cdef channel strength. - * Allows setting cdef_y_strengths and cdef_uv_strengths in PPS. - */ - uint32_t support_cdef_channel_strength : 2; - /** \brief Reserved bits for future, must be zero. */ - uint32_t reserved : 4; - } bits; - uint32_t value; -} VAConfigAttribValEncAV1; - -/** \brief Attribute value for VAConfigAttribEncAV1Ext1. */ -typedef union _VAConfigAttribValEncAV1Ext1 { - struct { - /** - * \brief Fields indicate which types of interpolation filter are supported. - * (interpolation_filter & 0x01) == 1: eight_tap filter is supported, 0: not. - * (interpolation_filter & 0x02) == 1: eight_tap_smooth filter is supported, 0: not. - * (interpolation_filter & 0x04) == 1: eight_sharp filter is supported, 0: not. - * (interpolation_filter & 0x08) == 1: bilinear filter is supported, 0: not. - * (interpolation_filter & 0x10) == 1: switchable filter is supported, 0: not. - */ - uint32_t interpolation_filter : 5; - /** - * \brief Min segmentId block size accepted. - * Application need to send seg_id_block_size in PPS equal or larger than this value. - */ - uint32_t min_segid_block_size_accepted : 8; - /** - * \brief Type of segment feature supported. - * (segment_feature_support & 0x01) == 1: SEG_LVL_ALT_Q is supported, 0: not. - * (segment_feature_support & 0x02) == 1: SEG_LVL_ALT_LF_Y_V is supported, 0: not. - * (segment_feature_support & 0x04) == 1: SEG_LVL_ALT_LF_Y_H is supported, 0: not. - * (segment_feature_support & 0x08) == 1: SEG_LVL_ALT_LF_U is supported, 0: not. - * (segment_feature_support & 0x10) == 1: SEG_LVL_ALT_LF_V is supported, 0: not. - * (segment_feature_support & 0x20) == 1: SEG_LVL_REF_FRAME is supported, 0: not. - * (segment_feature_support & 0x40) == 1: SEG_LVL_SKIP is supported, 0: not. - * (segment_feature_support & 0x80) == 1: SEG_LVL_GLOBALMV is supported, 0: not. - */ - uint32_t segment_feature_support : 8; - /** \brief Reserved bits for future, must be zero. */ - uint32_t reserved : 11; - } bits; - uint32_t value; -} VAConfigAttribValEncAV1Ext1; - -/** \brief Attribute value for VAConfigAttribEncAV1Ext2. */ -typedef union _VAConfigAttribValEncAV1Ext2 { - struct { - /** - * \brief Tile size bytes minus1. - * Specify the number of bytes needed to code tile size supported. - * This value need to be set in frame header obu. - */ - uint32_t tile_size_bytes_minus1 : 2; - /** - * \brief Tile size bytes minus1. - * Specify the fixed number of bytes needed to code syntax obu_size. - */ - uint32_t obu_size_bytes_minus1 : 2; - /** - * \brief tx_mode supported. - * (tx_mode_support & 0x01) == 1: ONLY_4X4 is supported, 0: not. - * (tx_mode_support & 0x02) == 1: TX_MODE_LARGEST is supported, 0: not. - * (tx_mode_support & 0x04) == 1: TX_MODE_SELECT is supported, 0: not. - */ - uint32_t tx_mode_support : 3; - /** - * \brief Max tile num minus1. - * Specify the max number of tile supported by driver. - */ - uint32_t max_tile_num_minus1 : 13; - /** \brief Reserved bits for future, must be zero. */ - uint32_t reserved : 12; - } bits; - uint32_t value; -} VAConfigAttribValEncAV1Ext2; - -/** - * \brief Packed header types specific to AV1 encoding. - * - * Types of packed headers generally used for AV1 encoding. - * - */ -typedef enum { - /** - * \brief Packed Sequence Parameter Set (SPS). - * - * The corresponding packed header data buffer shall contain the - * complete sequence_header_obu() syntax element. - * - */ - VAEncPackedHeaderAV1_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - * The corresponding packed header data buffer shall contain the - * complete frame_header_obu() syntax element. - * - */ - VAEncPackedHeaderAV1_PPS = VAEncPackedHeaderPicture, -} VAEncPackedHeaderTypeAV1; - -/** - * \brief AV1 Encoding Sequence Parameter Buffer Structure. - * - * This structure conveys sequence level parameters. - * - */ -typedef struct _VAEncSequenceParameterBufferAV1 { - /** \brief AV1 profile setting. - * value range [0..2]. - */ - uint8_t seq_profile; - - /** \brief Level Setting of current operation point. - * value range [0..23]. - */ - uint8_t seq_level_idx; - - /** \brief Tier Setting of current operation point. - * value range [0..1]. - */ - uint8_t seq_tier; - - uint8_t reserved8b; - - /** \brief Period between intra_only frames. */ - uint32_t intra_period; - - /** \brief Period between I/P frames. - * For hierarchical structure, this is the anchor frame distance. - */ - uint32_t ip_period; - - /* \brief RC related fields. RC modes are set with VAConfigAttribRateControl. */ - /* For AV1, CBR implies HRD conformance and VBR implies no HRD conformance. */ - - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for CBR mode or - * initial max bitrate value for VBR mode in this sequence. - * i.e. if the encoder pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - - union { - struct { - /** \brief Still picture encoding, no inter frame referencing. */ - uint32_t still_picture : 1; - /** \brief Force using 128x128 or 64x64 Supper block */ - uint32_t use_128x128_superblock : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_filter_intra : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_intra_edge_filter : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_interintra_compound : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_masked_compound : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_warped_motion : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_dual_filter : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_order_hint : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_jnt_comp : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_ref_frame_mvs : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_superres : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_cdef : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_restoration : 1; - /** \brief Sepcify number of bits for every channel(Y, U or V). */ - uint32_t bit_depth_minus8 : 3; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t subsampling_x : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t subsampling_y : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t reserved_bits : 13; - } bits; - uint32_t value; - } seq_fields; - - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..7]. - */ - uint8_t order_hint_bits_minus_1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAEncSequenceParameterBufferAV1; - -#define VA_AV1_MAX_SEGMENTS 8 -#define VA_AV1_SEG_LVL_MAX 8 - -/** - * \brief Segment parameters - */ -typedef struct _VAEncSegParamAV1 { - union { - struct { - /** \brief Indicates if segmentation is enabled in the current frame. - * If disabled, all the below parameters in the structure should - * be set to 0, and ignored by driver. - */ - uint8_t segmentation_enabled : 1; - - /** - * When segmentation_enabled equals 1 and segment_number > 0, - * this parameter equals 1 indicates the segmentation map may - * come from application, and that "Segment map data buffer" - * should be provided with populated segment_id. If equals 0, - * segmentation map should be inherited from a reference frame - * (specified by \c primary_ref_frame). When segmentation_enabled or - * segment_number equals 0, this parameter should be set to 0 - * and ignored by driver. - */ - uint8_t segmentation_update_map : 1; - /** - * When segmentation_update_map equals 1, this parameter equaling 1 - * indicates segment id per block will be determined either from - * reference frame or from app. Equaling 0 means segment id per block - * will come from app. When segmentation_temporal_update equals 0, - * this parameter should be set to 0 and ignored by driver. - */ - uint8_t segmentation_temporal_update : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint8_t reserved : 5; - - } bits; - uint8_t value; - } seg_flags; - - /** - * If segmentation_enabled equals 1, this parameter indicates - * the number of segments conveyed through VAAPI. In this case, - * if segment_number equals 0, it will force the driver to determine - * how many segments would be created as well as the segmentation map - * to be generated. Also the driver shall write the segmentation_params() - * syntax in the uncompressed header at \c bit_offset_segmentation (back-annotation). - * In application, the rest parameters in this structure should be all - * set to 0 and ignored by driver. And app should NOT send the - * "Segment map data buffer". In packed uncompressed header - * bitstream, app should write syntax element segmentation_enabled - * as 0 and segmentation_params() should be only 1-bit-long. - * If segment_number > 0, and segmentation_update_map = 1, app should provide - * the "Segment map data buffer" and populate the rest of the - * current data structure. And that underline encoder would honor - * the segmentation parameters feature_data[0..segment_number-1][] - * and feature_mask[0..segment_number-1], etc. - * Value range [0..8]. - */ - uint8_t segment_number; - - /** \brief segment parameters. - * feature_data[][] is equivalent to variable FeatureData[][] in spec, - * which is after clip3() operation. - * Clip3(x, y, z) = (z y)? y : z); - * The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = { - * 255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, - * MAX_LOOP_FILTER, 7, 0, 0 } - */ - int16_t feature_data[VA_AV1_MAX_SEGMENTS][VA_AV1_SEG_LVL_MAX]; - - /** \brief Bit field to indicate each feature is enabled or not per - * segment_id. Each bit is the feature_id. - */ - uint8_t feature_mask[VA_AV1_MAX_SEGMENTS]; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSegParamAV1; - -/** - * \brief Segment map data buffer. - * - * This buffer is optional depending on the value of av1_segments.segmentation_enabled. - * If av1_segments.segmentation_enabled in the picture parameters equals 1, - * and RateControlMethod is not CQP and this surface is not provided by App, - * the encoder will determine the per block segmentation map. In this case, - * App should not provide the segmentation parameter data structure - * in frame header as well. If av1_segments.segmentation_enabled equals 1 - * and the segmentation map buffer is provided, app should embed the - * segmentation info in frame header, populate the VAEncSegParamAV1 structure with - * #VAEncMacroblockMapBufferType and the driver as well as the underline encoder - * should honor what is given by the app. - */ -typedef struct _VAEncSegMapBufferAV1 { - /** \brief Segment map data size. */ - uint32_t segmentMapDataSize; - - /** - * \brief Segment map. - * Size of this map is indicated by \ref segmentMapDataSize and each element - * in this map contains the segment id of a particular block. - * The element is indexed by raster scan order. - * The value of each entry should be in the range [0..7], inclusive. - */ - uint8_t *pSegmentMap; -} VAEncSegMapBufferAV1; - -typedef enum { - /** \brief Identity transformation, 0-parameter. */ - VAAV1EncTransformationIdentity = 0, - /** \brief Translational motion, 2-parameter. */ - VAAV1EncTransformationTranslation = 1, - /** \brief Simplified affine with rotation + zoom only, 4-parameter. */ - VAAV1EncTransformationRotzoom = 2, - /** \brief Affine, 6-parameter. */ - VAAV1EncTransformationAffine = 3, - /** \brief Transformation count. */ - VAAV1EncTransformationCount -} VAEncTransformationTypeAV1; - -typedef struct _VAEncWarpedMotionParamsAV1{ - - /** \brief Specify the type of warped motion. */ - VAEncTransformationTypeAV1 wmtype; - - /** \brief Specify warp motion parameters. - * wm.wmmat[] corresponds to gm_params[][] in spec. - * Details in AV1 spec section 5.9.24 or refer to libaom code - * https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c. - */ - int32_t wmmat[8]; - - /** \brief Valid or invalid on affine set. */ - uint8_t invalid; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VAEncWarpedMotionParamsAV1; - -/** - * \brief Reference frame control. - * - * Suggest which frame to be used as reference along with preferred search order. - * - * search_idx#: index into ref_frame_idx[] to indicate that frame will be included - * in the reference list if value in range [1..7]. Invalid when value is 0. - * The order of the search_idx# indicates the preferred search order. - * - */ -typedef union { - struct - { - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx0 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx1 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx2 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx3 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx4 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx5 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx6 : 3; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t Reserved : 11; - } fields; - uint32_t value; -} VARefFrameCtrlAV1; - -/** - * \brief AV1 Encoding Picture Parameter Buffer Structure. - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferAV1 -{ - /** \brief AV1 encoder may support SupRes and dynamic scaling function. - * For SupRes, underline encoder is responsible to do downscaling. - * For dynamic scaling, app should provide the scaled raw source. - */ - /** \brief Raw source frame width in pixels. */ - uint16_t frame_width_minus_1; - /** \brief Raw source frame height in pixels. */ - uint16_t frame_height_minus_1; - - /** \brief Surface to store reconstructed frame, not used for enc only case. */ - VASurfaceID reconstructed_frame; - - /** \brief Buffer to store coded data. */ - VABufferID coded_buf; - - /** \brief Reference frame buffers. - * Each entry of the array specifies the surface index of the picture - * that is referred by current picture or will be referred by any future - * picture. The valid entries take value from 0 to 127, inclusive. - * Non-valid entries, those do not point to pictures which are referred - * by current picture or future pictures, should take value 0xFF. - * Other values are not allowed. - * - * Application should update this array based on the refreshing - * information expected. - */ - VASurfaceID reference_frames[8]; - - /** \brief Reference index list. - * Contains a list of indices into refernce_frames[]. - * Indice with refernce frames range: [LAST_FRAME - LAST_FRAME, - * LAST2_FRAME - LAST_FRAME, ..., ALTREF2_FRAME - LAST_FRAME]. - * #define LAST_FRAME 1 - * #define LAST2_FRAME 2 - * #define LAST3_FRAME 3 - * #define GOLDEN_FRAME 4 - * #define BWDREF_FRAME 5 - * #define ALTREF_FRAME 6 - * #define ALTREF2_FRAME 7 - * value range [0..7]. - */ - uint8_t ref_frame_idx[7]; - - uint8_t reserved8bits0; - - /** \brief primary reference frame. - * Index into reference_frames[] - * segment id map, context table, etc. come from the reference - * frame pointed by this index. - * value range [0..7]. - */ - uint8_t primary_ref_frame; - - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint8_t order_hint; - - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint8_t refresh_frame_flags; - - uint8_t reserved8bits1; - - /** \brief Suggest which frames to be used as references. - * see struct #VARefFrameCtrl for details. - */ - VARefFrameCtrlAV1 ref_frame_ctrl_l0; - VARefFrameCtrlAV1 ref_frame_ctrl_l1; - - union { - struct { - /** \brief frame type. - * 0: key_frame. - * 1: inter_frame. - * 2: intra_only frame. - * 3: switch_frame (app needs to set error_resilient_mode = 1, - * refresh_frame_flags, etc approperately.). - */ - uint32_t frame_type : 2; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t error_resilient_mode : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t disable_cdf_update : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t use_superres : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t allow_high_precision_mv : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t use_ref_frame_mvs : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t disable_frame_end_update_cdf : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t reduced_tx_set : 1; - - /** \brief For single tile group, app may choose to use one frame obu - * to replace one frame header obu + one tile group obu. - * Invalid if num_tile_groups_minus1 > 0. - */ - uint32_t enable_frame_obu : 1; - - /** \brief Indicate the current frame will be used as a long term reference. */ - uint32_t long_term_reference : 1; - /** \brief If the encoded frame will not be referred by other frames, - * its recon may not be generated in order to save memory bandwidth. - */ - uint32_t disable_frame_recon : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t allow_intrabc : 1; - /** \brief Equal to 1 indicates that intra blocks may use palette encoding. - * Otherwise disable palette encoding. - */ - uint32_t palette_mode_enable : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t reserved : 18; - } bits; - uint32_t value; - } picture_flags; - - /** \brief Block size for each Segment ID in Segment Map. - * 0: 16x16 block size, default value; - * 1: 32x32 block size; - * 2: 64x64 block size; - * 3: 8x8 block size. - */ - uint8_t seg_id_block_size; - - /** \brief Number of tile groups minus 1. - * value range [0..255]. - */ - uint8_t num_tile_groups_minus1; - - /** \brief Temporal id of the frame.*/ - uint8_t temporal_id; - - /** \brief Deblock filter parameters. - * value range [0..63]. - */ - uint8_t filter_level[2]; - uint8_t filter_level_u; - uint8_t filter_level_v; - - union { - struct { - /** \brief Sharpness level for deblock filter. - * value range [0..7]. - */ - uint8_t sharpness_level : 3; - uint8_t mode_ref_delta_enabled : 1; - uint8_t mode_ref_delta_update : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint8_t reserved : 3; - } bits; - uint8_t value; - } loop_filter_flags; - - /** \brief Super resolution scale denominator. - * value range [9..16]. - */ - uint8_t superres_scale_denominator; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint8_t interpolation_filter; - - /** \brief Loop filter ref deltas. - * value range [-63..63]. - */ - int8_t ref_deltas[8]; - - /** \brief Loop filter mode deltas. - * value range [-63..63]. - */ - int8_t mode_deltas[2]; - - /** \brief Quantization params. */ - uint8_t base_qindex; - int8_t y_dc_delta_q; - int8_t u_dc_delta_q; - int8_t u_ac_delta_q; - int8_t v_dc_delta_q; - int8_t v_ac_delta_q; - - /** \brief Min value for base q index for BRC. - * value range [1..255]. - */ - uint8_t min_base_qindex; - - /** \brief Max value for base q index for BRC. - * value range [1..255]. - */ - uint8_t max_base_qindex; - - /** \brief Quantization matrix. */ - union { - struct { - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint16_t using_qmatrix : 1; - /** \brief Following parameters only valid when using_qmatrix == 1. */ - uint16_t qm_y : 4; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint16_t qm_u : 4; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint16_t qm_v : 4; - /** \brief Reserved bytes for future use, must be zero. */ - uint16_t reserved : 3; - } bits; - uint16_t value; - } qmatrix_flags; - - uint16_t reserved16bits1; - - union { - struct { - /** \brief Specify whether quantizer index delta values are present. - * value range [0..1]. */ - uint32_t delta_q_present : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. */ - uint32_t delta_q_res : 2; - - /** \brief Specify whether loop filter delta values are present. - * value range [0..1]. */ - uint32_t delta_lf_present : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. */ - uint32_t delta_lf_res : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. */ - uint32_t delta_lf_multi : 1; - - /** \brief Corresponds to AV1 syntax element of the same name. - * 0: ONLY_4X4; - * 1: TX_MODE_LARGEST; - * 2: TX_MODE_SELECT; - * 3: Invalid. - */ - uint32_t tx_mode : 2; - - /** \brief Indicates whether to use single or compound reference prediction. - * 0: SINGLE_REFERENCE; - * 1: COMPOUND_REFERENCE; - * 2: REFERENCE_MODE_SELECT. - * 3: Invalid. - * - * Value 2 means driver make decision to use single reference or compound reference. - */ - uint32_t reference_mode : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint32_t skip_mode_present : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t reserved : 20; - } bits; - uint32_t value; - } mode_control_flags; - - /** \brief Segmentation parameters. */ - VAEncSegParamAV1 segments; - - /** \brief Number of tile columns. */ - uint8_t tile_cols; - /** \brief Number of tile rows. */ - uint8_t tile_rows; - - uint16_t reserved16bits2; - - /** \brief The last tile column or row size needs to be derived. */ - uint16_t width_in_sbs_minus_1[63]; - uint16_t height_in_sbs_minus_1[63]; - - /** \brief specify which tile to use for the CDF update. - * value range [0..127]*/ - uint16_t context_update_tile_id; - - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. - */ - uint8_t cdef_damping_minus_3; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. - */ - uint8_t cdef_bits; - /** \brief CDEF Y strengths. - * value range [0..63]*/ - uint8_t cdef_y_strengths[8]; - /** \brief CDEF UV strengths. - * value range [0..63]*/ - uint8_t cdef_uv_strengths[8]; - - union { - struct { - /** \brief Restoration type for Y frame. - * value range [0..3]. - */ - uint16_t yframe_restoration_type : 2; - /** \brief Restoration type for Cb frame. - * value range [0..3]. - */ - uint16_t cbframe_restoration_type : 2; - /** \brief Restoration type for Cr frame. - * value range [0..3]. - */ - uint16_t crframe_restoration_type : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..2]. - */ - uint16_t lr_unit_shift : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint16_t lr_uv_shift : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint16_t reserved : 7; - } bits; - uint16_t value; - } loop_restoration_flags; - - /** \brief Global motion. */ - VAEncWarpedMotionParamsAV1 wm[7]; - - /** - * Offset in bits for syntax base_q_idx in packed frame header bit stream - * from the start of the packed header data. - * In BRC mode, this parameter should be set and driver will update base_q_idx in - * uncompressed header according to this offset. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_qindex; - /** - * Offset in bits for syntax segmentation_enabled of frame header OBU - * in packed frame header bit stream from the start of the packed header data. - * Valid only in auto segmentation mode. Other than that, this parameter - * should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_segmentation; - /** - * Offset in bits for syntax loop_filter_params() in packed frame - * header bit stream from the start of the packed header data. - * In BRC mode, this parameter should be set and driver will update filter params - * in packed frame header according to this offset. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_loopfilter_params; - /** - * In BRC mode, underline encoder should generate the approperiate - * CDEF values and write back into uncompressed header. And app - * should provide default CDEF values in packed header. This parameter - * should point to the starting bit of cdef_params() syntax structure - * in packed header. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_cdef_params; - /** - * In BRC mode, this parameter indicates the actual bit usage of - * cdef_params() syntax structure in packed uncompressed header. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t size_in_bits_cdef_params; - - /** - * Offset in bytes for syntax obu_size of frame header OBU in packed - * frame header bit stream from the start of the packed header. The frame - * header OBU size depends on the encoded tile sizes. It applies to both - * Frame Header OBU and Frame OBU if obu_size needs to be updated by - * underline encoder. Otherwise, app can set it to 0 and ignored by driver. - * - * In BRC mode, obu_size needs to be updated and this parameter should be set. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t byte_offset_frame_hdr_obu_size; - - /** - * Frame header OBU bit stream size in bits. The frame header obu packed bit - * stream contains an obu header, a 4-byte long obu_size field, frame_header_obu() - * syntax chain, and a trailing bit if not inside a frame obu. If \c enable_frame_obu == 1, - * the value should include and up to the last bit of frame_header_obu() and - * excluding the bits generated by byte_alignment(). If \c enable_frame_obu == 0, - * the value should include and up to the trailing bit at the end of the frame - * header obu. The size will be used by encoder to calculate the final frame - * header size after bit shifting due to auto segmentation. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t size_in_bits_frame_hdr_obu; - - /** \brief Tile Group OBU header */ - union { - struct { - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint8_t obu_extension_flag : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint8_t obu_has_size_field : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..7]. - */ - uint8_t temporal_id : 3; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..2]. - */ - uint8_t spatial_id : 2; - /** \brief Reserved bytes for future use, must be zero. */ - uint8_t reserved : 1; - } bits; - uint8_t value; - } tile_group_obu_hdr_info; - - /** \brief The number of frames skipped prior to the current frame. - * It includes only the skipped frames that were not counted before. - * App may generate the "show_existing_frame" short frame header OBUs - * and send to driver with the next frame. Default value 0. - */ - uint8_t number_skip_frames; - - uint16_t reserved16bits3; - - /** \brief Indicates the application forced frame size change in bytes. - * When the value is positive, the frame size is reduced. Otherwise, the frame - * size increases. The parameter can be used when application skips frames with - * setting of NumSkipFrames. And application can also use it for other scenarios - * such as inserting "show_existing_frame" at very end of the sequence. - */ - int32_t skip_frames_reduced_size; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAEncPictureParameterBufferAV1; - -/** - * \brief Tile Group Buffer. - */ -typedef struct _VAEncTileGroupBufferAV1 { - /** \brief Tile group start location. - * The position of the first tile in current tile group - * in raster scan order across the frame. - * value range [0..127]. - */ - uint8_t tg_start; - /** \brief Tile group end location. - * The position of the last tile in current tile group - * in raster scan order across the frame. - * value range [0..127]. - */ - uint8_t tg_end; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncTileGroupBufferAV1; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_AV1_H */ diff --git a/prebuilts/aarch64/include/va/va_enc_h264.h b/prebuilts/aarch64/include/va/va_enc_h264.h deleted file mode 100644 index 46a6704..0000000 --- a/prebuilts/aarch64/include/va/va_enc_h264.h +++ /dev/null @@ -1,659 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_h264.h - * \brief The H.264 encoding API - * - * This file contains the \ref api_enc_h264 "H.264 encoding API". - */ - -#ifndef VA_ENC_H264_H -#define VA_ENC_H264_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_h264 H.264 encoding API - * - * @{ - */ - -/** - * @name Picture flags - * - * Those flags flags are meant to signal when a picture marks the end - * of a sequence, a stream, or even both at once. - * - * @{ - */ -/** - * \brief Marks the last picture in the sequence. - * - * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame. - */ -#define H264_LAST_PICTURE_EOSEQ 0x01 -/** - * \brief Marks the last picture in the stream. - * - * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame. - */ -#define H264_LAST_PICTURE_EOSTREAM 0x02 -/**@}*/ - -/** - * \brief Packed header types specific to H.264 encoding. - * - * Types of packed headers generally used for H.264 encoding. Each - * associated packed header data buffer shall contain the start code - * prefix 0x000001 followed by the complete NAL unit, thus also - * including the \c nal_unit_type. - * - * Note: the start code prefix can contain an arbitrary number of leading - * zeros. The driver will skip them for emulation prevention bytes insertion, - * if necessary. - */ -typedef enum { - /** - * \brief Packed Sequence Parameter Set (SPS). - * - * The corresponding packed header data buffer shall contain the - * complete seq_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 7. - */ - VAEncPackedHeaderH264_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - * The corresponding packed header data buffer shall contain the - * complete pic_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 8. - */ - VAEncPackedHeaderH264_PPS = VAEncPackedHeaderPicture, - /** - * \brief Packed slice header. - * - * The corresponding packed header data buffer shall contain the - * \c slice_header() syntax element only, along with any start - * code prefix and NAL unit type preceeding it. i.e. this means - * that the buffer does not contain any of the \c slice_data() or - * the \c rbsp_slice_trailing_bits(). - * - * Note: packed \c nal_unit_type shall be equal to 1 (non-IDR - * picture), or 5 (IDR picture). - */ - VAEncPackedHeaderH264_Slice = VAEncPackedHeaderSlice, - /** - * \brief Packed Supplemental Enhancement Information (SEI). - * - * The corresponding packed header data buffer shall contain the - * complete sei_rbsp() syntax element, thus including several - * sei_message() elements if necessary. - * - * Note: packed \c nal_unit_type shall be equal to 6. - * - * @deprecated - * This is a deprecated packed header flag, All applications can use - * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed - * SEI header data buffer to the driver - */ - VAEncPackedHeaderH264_SEI va_deprecated_enum = (0x80000000 | 1), -} VAEncPackedHeaderTypeH264; - -/** - * \brief Sequence parameter for H.264 encoding in baseline, main & high - * profiles. - * - * This structure holds information for \c seq_parameter_set_data() as - * defined by the H.264 specification. - * - * If packed sequence headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c seq_scaling_matrix_present_flag is set to \c 1, then a - * #VAIQMatrixBufferH264 buffer shall also be provided within the same - * \c vaRenderPicture() call as this sequence parameter buffer. - */ -typedef struct _VAEncSequenceParameterBufferH264 { - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t seq_parameter_set_id; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t level_idc; - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between IDR frames. */ - uint32_t intra_idr_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t max_num_ref_frames; - /** \brief Picture width in macroblocks. */ - uint16_t picture_width_in_mbs; - /** \brief Picture height in macroblocks. */ - uint16_t picture_height_in_mbs; - - union { - struct { - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t chroma_format_idc : 2; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_mbs_only_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t mb_adaptive_frame_field_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t seq_scaling_matrix_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t direct_8x8_inference_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t log2_max_frame_num_minus4 : 4; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t pic_order_cnt_type : 2; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t log2_max_pic_order_cnt_lsb_minus4 : 4; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t delta_pic_order_always_zero_flag : 1; - } bits; - uint32_t value; - } seq_fields; - - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t bit_depth_luma_minus8; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t bit_depth_chroma_minus8; - - /** if pic_order_cnt_type == 1 */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t num_ref_frames_in_pic_order_cnt_cycle; - /** \brief Same as the H.264 bitstream syntax element. */ - int32_t offset_for_non_ref_pic; - /** \brief Same as the H.264 bitstream syntax element. */ - int32_t offset_for_top_to_bottom_field; - /** \brief Same as the H.264 bitstream syntax element. */ - int32_t offset_for_ref_frame[256]; - /**@}*/ - - /** @name Cropping (optional) */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t frame_cropping_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_left_offset; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_right_offset; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_top_offset; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_bottom_offset; - /**@}*/ - - /** @name VUI parameters (optional) */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t vui_parameters_present_flag; - union { - struct { - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t aspect_ratio_info_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t timing_info_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t bitstream_restriction_flag : 1; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_horizontal : 5; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_vertical : 5; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t fixed_frame_rate_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t low_delay_hrd_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t motion_vectors_over_pic_boundaries_flag: 1; - /** \brief Reserved for future use, must be zero */ - uint32_t reserved : 16; - } bits; - uint32_t value; - } vui_fields; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t aspect_ratio_idc; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t sar_width; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t sar_height; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t num_units_in_tick; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t time_scale; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - /**@}*/ -} VAEncSequenceParameterBufferH264; - -/** - * \brief Picture parameter for H.264 encoding in baseline, main & high - * profiles. - * - * This structure holds information for \c pic_parameter_set_rbsp() as - * defined by the H.264 specification. - * - * If packed picture headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c pic_scaling_matrix_present_flag is set to \c 1, then a - * #VAIQMatrixBufferH264 buffer shall also be provided within the same - * \c vaRenderPicture() call as this picture parameter buffer. - */ -typedef struct _VAEncPictureParameterBufferH264 { - /** - * \brief Information about the picture to be encoded. - * - * See #VAPictureH264 for further description of each field. - * Note that CurrPic.picture_id represents the reconstructed - * (decoded) picture. User provides a scratch VA surface ID here. - */ - VAPictureH264 CurrPic; - /** - * \brief Decoded Picture Buffer (DPB). - * - * This array represents the list of reconstructed (decoded) - * frames used as reference. It is important to keep track of - * reconstructed frames so that they can be used later on as - * reference for P or B-frames encoding. - */ - VAPictureH264 ReferenceFrames[16]; - /** - * \brief Output encoded bitstream. - * - * \ref coded_buf has type #VAEncCodedBufferType. It should be - * large enough to hold the compressed NAL slice and possibly SPS - * and PPS NAL units. - */ - VABufferID coded_buf; - - /** \brief The picture parameter set referred to in the slice header. */ - uint8_t pic_parameter_set_id; - /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */ - uint8_t seq_parameter_set_id; - - /** - * \brief OR'd flags describing whether the picture is the last one or not. - * - * This fields holds 0 if the picture to be encoded is not the last - * one in the stream or sequence. Otherwise, it is a combination of - * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM. - */ - uint8_t last_picture; - - /** \brief The picture identifier. - * Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive. - */ - uint16_t frame_num; - - /** \brief \c pic_init_qp_minus26 + 26. */ - uint8_t pic_init_qp; - /** \brief Maximum reference index for reference picture list 0. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** \brief Maximum reference index for reference picture list 1. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l1_active_minus1; - - /** \brief Range: -12 to 12, inclusive. */ - int8_t chroma_qp_index_offset; - /** \brief Range: -12 to 12, inclusive. */ - int8_t second_chroma_qp_index_offset; - - union { - struct { - /** \brief Is picture an IDR picture? */ - uint32_t idr_pic_flag : 1; - /** \brief Is picture a reference picture? */ - uint32_t reference_pic_flag : 2; - /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */ - uint32_t entropy_coding_mode_flag : 1; - /** \brief Is weighted prediction applied to P slices? */ - uint32_t weighted_pred_flag : 1; - /** \brief Range: 0 to 2, inclusive. */ - uint32_t weighted_bipred_idc : 2; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t constrained_intra_pred_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t transform_8x8_mode_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t deblocking_filter_control_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t redundant_pic_cnt_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t pic_order_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t pic_scaling_matrix_present_flag : 1; - } bits; - uint32_t value; - } pic_fields; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferH264; - -typedef struct _VAEncQPBufferH264 { - /* - * \brief This structure holds QP per 16x16 macroblock. Buffer size shall be - * sufficient to fit the slice or frame to be encoded depending on if it is a - * slice level or frame level encoding. - */ - uint8_t qp; -} VAEncQPBufferH264; - -/** - * \brief Slice parameter for H.264 encoding in baseline, main & high profiles. - * - * This structure holds information for \c - * slice_layer_without_partitioning_rbsp() as defined by the H.264 - * specification. - * - * If packed slice headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSlice ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If per-macroblock encoder configuration is needed, \c macroblock_info - * references a buffer of type #VAEncMacroblockParameterBufferH264. This - * buffer is not passed to vaRenderPicture() and it can be re-used - * without re-allocating the whole buffer. - */ -typedef struct _VAEncSliceParameterBufferH264 { - /** \brief Starting MB address for this slice. */ - uint32_t macroblock_address; - /** \brief Number of macroblocks in this slice. */ - uint32_t num_macroblocks; - /** - * \brief Per-MB encoder configuration buffer, or \c VA_INVALID_ID. - * - * If per-MB encoder configuration is needed, then \ref macroblock_info - * references a buffer of type #VAEncMacroblockParameterBufferH264 - * (\c VAEncMacroblockParameterBufferType). Otherwise, buffer id - * is set to \c VA_INVALID_ID and per-MB configuration is derived - * from this slice parameter. - * - * The \c macroblock_info buffer must hold \ref num_macroblocks - * elements. - */ - VABufferID macroblock_info; - /** \brief Slice type. - * Range: 0..2, 5..7, i.e. no switching slices. - */ - uint8_t slice_type; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t pic_parameter_set_id; - /** \brief Same as the H.264 bitstream syntax element. */ - uint16_t idr_pic_id; - - /** @name If pic_order_cnt_type == 0 */ - /**@{*/ - /** \brief The picture order count modulo MaxPicOrderCntLsb. */ - uint16_t pic_order_cnt_lsb; - /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */ - int32_t delta_pic_order_cnt_bottom; - /**@}*/ - /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */ - /**@{*/ - /** \brief [0]: top, [1]: bottom. */ - int32_t delta_pic_order_cnt[2]; - /**@}*/ - - /** @name If slice_type == B */ - /**@{*/ - uint8_t direct_spatial_mv_pred_flag; - /**@}*/ - - /** @name If slice_type == P */ - /**@{*/ - /** \brief Specifies if - * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or - * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are - * overriden by the values for this slice. - */ - uint8_t num_ref_idx_active_override_flag; - /** \brief Maximum reference index for reference picture list 0. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** \brief Maximum reference index for reference picture list 1. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l1_active_minus1; - /** \brief Reference picture list 0 (for P slices). */ - VAPictureH264 RefPicList0[32]; - /** \brief Reference picture list 1 (for B slices). */ - VAPictureH264 RefPicList1[32]; - /**@}*/ - - /** @name pred_weight_table() */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t luma_log2_weight_denom; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t chroma_log2_weight_denom; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t luma_weight_l0_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_weight_l0[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_offset_l0[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t chroma_weight_l0_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_weight_l0[32][2]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_offset_l0[32][2]; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t luma_weight_l1_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_weight_l1[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_offset_l1[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t chroma_weight_l1_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_weight_l1[32][2]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_offset_l1[32][2]; - /**@}*/ - - /** \brief Range: 0 to 2, inclusive. */ - uint8_t cabac_init_idc; - /** \brief Same as the H.264 bitstream syntax element. */ - int8_t slice_qp_delta; - /** @name If deblocking_filter_control_present_flag */ - /**@{*/ - /** \brief Range: 0 to 2, inclusive. */ - uint8_t disable_deblocking_filter_idc; - /** \brief Same as the H.264 bitstream syntax element. */ - int8_t slice_alpha_c0_offset_div2; - /** \brief Same as the H.264 bitstream syntax element. */ - int8_t slice_beta_offset_div2; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - /**@}*/ -} VAEncSliceParameterBufferH264; - -/** - * @name Macroblock neighbour availability bits - * - * \anchor api_enc_h264_mb_pred_avail_bits - * Definitions for macroblock neighbour availability bits used in - * intra prediction mode (non MBAFF only). - * - * @{ - */ -/** \brief References macroblock in the top-left corner. */ -#define VA_MB_PRED_AVAIL_TOP_LEFT (1 << 2) -/** \brief References macroblock above the current macroblock. */ -#define VA_MB_PRED_AVAIL_TOP (1 << 4) -/** \brief References macroblock in the top-right corner. */ -#define VA_MB_PRED_AVAIL_TOP_RIGHT (1 << 3) -/** \brief References macroblock on the left of the current macroblock. */ -#define VA_MB_PRED_AVAIL_LEFT (1 << 6) -/**@}*/ - -/** - * \brief Macroblock parameter for H.264 encoding in baseline, main & high - * profiles. - * - * This structure holds per-macroblock information. The buffer must be - * allocated with as many elements (macroblocks) as necessary to fit - * the slice to be encoded. Besides, the per-macroblock records must - * be written in a strict raster order and with no gap. i.e. every - * macroblock, regardless of its type, shall have an entry. - */ -typedef struct _VAEncMacroblockParameterBufferH264 { - /** - * \brief Quantization parameter. - * - * Requested quantization parameter. Range: 0 to 51, inclusive. - * If \ref qp is set to 0xff, then the actual value is derived - * from the slice-level value: \c pic_init_qp + \c slice_qp_delta. - */ - uint8_t qp; - - union { - /** @name Data for intra macroblock */ - /**@{*/ - union { - struct { - /** - * \brief Flag specified to override MB neighbour - * availability bits from VME stage. - * - * This flag specifies that macroblock neighbour - * availability bits from the VME stage are overriden - * by the \ref pred_avail_flags hereunder. - */ - uint32_t pred_avail_override_flag : 1; - /** - * \brief Bitwise representation of which macroblocks - * are available for intra prediction. - * - * If the slice is intra-coded, this field represents - * the macroblocks available for intra prediction. - * See \ref api_enc_h264_mb_pred_avail_bits - * "macroblock neighbour availability" bit definitions. - */ - uint32_t pred_avail_flags : 8; - } bits; - uint32_t value; - } intra_fields; - /**@}*/ - - /** @name Data for inter macroblock */ - /**@{*/ - union { - struct { - uint32_t reserved; - } bits; - uint32_t value; - } inter_fields; - /**@}*/ - } info; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMacroblockParameterBufferH264; - -/** - * \brief MB partition modes and 1/2 1/4 motion search configuration - * - * Specifies MB partition modes that are disabled. Specifies Half-pel - * mode and Quarter-pel mode searching - */ -typedef struct _VAEncMiscParameterSubMbPartPelH264 { - uint32_t disable_inter_sub_mb_partition; - union { - struct { - uint32_t disable_16x16_inter_mb_partition : 1; - uint32_t disable_16x8_inter_mb_partition : 1; - uint32_t disable_8x16_inter_mb_partition : 1; - uint32_t disable_8x8_inter_mb_partition : 1; - uint32_t disable_8x4_inter_mb_partition : 1; - uint32_t disable_4x8_inter_mb_partition : 1; - uint32_t disable_4x4_inter_mb_partition : 1; - uint32_t reserved : 1; - } bits; - uint8_t value; - } inter_sub_mb_partition_mask; - - /** - * \brief Precison of motion search - * 0:Integer mode searching - * 1:Half-pel mode searching - * 2:Reserved - * 3:Quarter-pel mode searching - */ - uint32_t enable_sub_pel_mode; - uint8_t sub_pel_mode; - uint8_t reserved[3]; -} VAEncMiscParameterSubMbPartPelH264; -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_H264_H */ diff --git a/prebuilts/aarch64/include/va/va_enc_hevc.h b/prebuilts/aarch64/include/va/va_enc_hevc.h deleted file mode 100644 index 96b5ae5..0000000 --- a/prebuilts/aarch64/include/va/va_enc_hevc.h +++ /dev/null @@ -1,958 +0,0 @@ -/* - * Copyright (c) 2007-2014 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_hevc.h - * \brief The HEVC encoding API - * - * This file contains the \ref api_enc_hevc "HEVC encoding API". - * - */ - -#ifndef VA_ENC_HEVC_H -#define VA_ENC_HEVC_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_enc_hevc HEVC encoding API - * - * @{ - */ - -/** Attribute value for VAConfigAttribEncHEVCFeatures. - * - * This attribute decribes the supported features of an HEVC/H.265 - * encoder configuration. - * - * All of the field values in this attribute are VA_FEATURE_* values, - * indicating support for the corresponding feature. - */ -typedef union VAConfigAttribValEncHEVCFeatures { - struct { - /** Separate colour planes. - * - * Allows setting separate_colour_plane_flag in the SPS. - */ - uint32_t separate_colour_planes : 2; - /** Scaling lists. - * - * Allows scaling_list() elements to be present in both the SPS - * and the PPS. The decoded form of the scaling lists must also - * be supplied in a VAQMatrixBufferHEVC buffer when scaling lists - * are enabled. - */ - uint32_t scaling_lists : 2; - /** Asymmetric motion partitions. - * - * Allows setting amp_enabled_flag in the SPS. - */ - uint32_t amp : 2; - /** Sample adaptive offset filter. - * - * Allows setting slice_sao_luma_flag and slice_sao_chroma_flag - * in slice headers. - */ - uint32_t sao : 2; - /** PCM sample blocks. - * - * Allows setting pcm_enabled_flag in the SPS. When enabled - * PCM parameters must be supplied with the sequence parameters, - * including block sizes which may be further constrained as - * noted in the VAConfigAttribEncHEVCBlockSizes attribute. - */ - uint32_t pcm : 2; - /** Temporal motion vector Prediction. - * - * Allows setting slice_temporal_mvp_enabled_flag in slice - * headers. - */ - uint32_t temporal_mvp : 2; - /** Strong intra smoothing. - * - * Allows setting strong_intra_smoothing_enabled_flag in the SPS. - */ - uint32_t strong_intra_smoothing : 2; - /** Dependent slices. - * - * Allows setting dependent_slice_segment_flag in slice headers. - */ - uint32_t dependent_slices : 2; - /** Sign data hiding. - * - * Allows setting sign_data_hiding_enable_flag in the PPS. - */ - uint32_t sign_data_hiding : 2; - /** Constrained intra prediction. - * - * Allows setting constrained_intra_pred_flag in the PPS. - */ - uint32_t constrained_intra_pred : 2; - /** Transform skipping. - * - * Allows setting transform_skip_enabled_flag in the PPS. - */ - uint32_t transform_skip : 2; - /** QP delta within coding units. - * - * Allows setting cu_qp_delta_enabled_flag in the PPS. - */ - uint32_t cu_qp_delta : 2; - /** Weighted prediction. - * - * Allows setting weighted_pred_flag and weighted_bipred_flag in - * the PPS. The pred_weight_table() data must be supplied with - * every slice header when weighted prediction is enabled. - */ - uint32_t weighted_prediction : 2; - /** Transform and quantisation bypass. - * - * Allows setting transquant_bypass_enabled_flag in the PPS. - */ - uint32_t transquant_bypass : 2; - /** Deblocking filter disable. - * - * Allows setting slice_deblocking_filter_disabled_flag. - */ - uint32_t deblocking_filter_disable : 2; - /* Reserved,should not be used, avoid conflict with VA_ATTRIB_NOT_SUPPORTED. */ - uint32_t reserved : 2; - } bits; - uint32_t value; -} VAConfigAttribValEncHEVCFeatures; - -/** Attribute value for VAConfigAttribEncHEVCBlockSizes. - * - * This attribute describes the supported coding tree and transform block - * sizes of an HEVC/H.265 encoder configuration - */ -typedef union VAConfigAttribValEncHEVCBlockSizes { - struct { - /** Largest supported size of coding tree blocks. - * - * CtbLog2SizeY must not be larger than this. - */ - uint32_t log2_max_coding_tree_block_size_minus3 : 2; - /** Smallest supported size of coding tree blocks. - * - * CtbLog2SizeY must not be smaller than this. - * - * This may be the same as the maximum size, indicating that only - * one CTB size is supported. - */ - uint32_t log2_min_coding_tree_block_size_minus3 : 2; - - /** Smallest supported size of luma coding blocks. - * - * MinCbLog2SizeY must not be smaller than this. - */ - uint32_t log2_min_luma_coding_block_size_minus3 : 2; - - /** Largest supported size of luma transform blocks. - * - * MaxTbLog2SizeY must not be larger than this. - */ - uint32_t log2_max_luma_transform_block_size_minus2 : 2; - /** Smallest supported size of luma transform blocks. - * - * MinTbLog2SizeY must not be smaller than this. - */ - uint32_t log2_min_luma_transform_block_size_minus2 : 2; - - /** Largest supported transform hierarchy depth in inter - * coding units. - * - * max_transform_hierarchy_depth_inter must not be larger - * than this. - */ - uint32_t max_max_transform_hierarchy_depth_inter : 2; - /** Smallest supported transform hierarchy depth in inter - * coding units. - * - * max_transform_hierarchy_depth_inter must not be smaller - * than this. - */ - uint32_t min_max_transform_hierarchy_depth_inter : 2; - - /** Largest supported transform hierarchy depth in intra - * coding units. - * - * max_transform_hierarchy_depth_intra must not be larger - * than this. - */ - uint32_t max_max_transform_hierarchy_depth_intra : 2; - /** Smallest supported transform hierarchy depth in intra - * coding units. - * - * max_transform_hierarchy_depth_intra must not be smaller - * than this. - */ - uint32_t min_max_transform_hierarchy_depth_intra : 2; - - /** Largest supported size of PCM coding blocks. - * - * Log2MaxIpcmCbSizeY must not be larger than this. - */ - uint32_t log2_max_pcm_coding_block_size_minus3 : 2; - /** Smallest supported size of PCM coding blocks. - * - * Log2MinIpcmCbSizeY must not be smaller than this. - */ - uint32_t log2_min_pcm_coding_block_size_minus3 : 2; - - /** Reserved for future use. */ - uint32_t reserved : 10; - } bits; - uint32_t value; -} VAConfigAttribValEncHEVCBlockSizes; - -/** - * @name Picture flags - * - * Those flags flags are meant to signal when a picture marks the end - * of a sequence, a stream, or even both at once. - * - * @{ - */ -/** - * \brief Marks the last picture in the sequence. - * - * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame. - */ -#define HEVC_LAST_PICTURE_EOSEQ 0x01 -/** - * \brief Marks the last picture in the stream. - * - * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame. - */ -#define HEVC_LAST_PICTURE_EOSTREAM 0x02 -/**@}*/ - -/** - * \brief Packed header types specific to HEVC encoding. - * - * Types of packed headers generally used for HEVC encoding. Each - * associated packed header data buffer shall contain the start code - * prefix 0x000001 followed by the complete NAL unit, thus also - * including the \c nal_unit_type. - * - * Note: the start code prefix can contain an arbitrary number of leading - * zeros. The driver will skip them for emulation prevention bytes insertion, - * if necessary. - */ -typedef enum { - /** - * \brief Packed Video Parameter Set (VPS). - * - * The corresponding packed header data buffer shall contain the - * complete video_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 32. - */ - VAEncPackedHeaderHEVC_VPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Sequence Parameter Set (SPS). - * - * The corresponding packed header data buffer shall contain the - * complete seq_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 33. - */ - VAEncPackedHeaderHEVC_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - * The corresponding packed header data buffer shall contain the - * complete pic_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 34. - */ - VAEncPackedHeaderHEVC_PPS = VAEncPackedHeaderPicture, - /** - * \brief Packed slice header. - * - * The corresponding packed header data buffer shall contain the - * \c slice_header() syntax element only, along with any start - * code prefix and NAL unit type preceeding it. i.e. this means - * that the buffer does not contain any of the \c slice_data() or - * the \c rbsp_slice_trailing_bits(). - * - * Note: packed \c nal_unit_type shall be equal to 0 to 9 (non-IRAP - * picture), or 16 to 21 (IRAP picture). - */ - VAEncPackedHeaderHEVC_Slice = VAEncPackedHeaderSlice, - /** - * \brief Packed Supplemental Enhancement Information (SEI). - * - * The corresponding packed header data buffer shall contain the - * complete sei_rbsp() syntax element, thus including several - * sei_message() elements if necessary. - * - * Note: packed \c nal_unit_type shall be equal to 39 or 40. - * - * @deprecated - * This is a deprecated packed header flag, All applications can use - * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed - * SEI header data buffer to the driver - */ - VAEncPackedHeaderHEVC_SEI va_deprecated_enum = (0x80000000 | 1), -} VAEncPackedHeaderTypeHEVC; - -/** - * \brief Sequence parameter for HEVC encoding in main & main 10 - * profiles. - * - * This structure holds information for \c seq_parameter_set_data() as - * defined by the HEVC specification. - * - * If packed sequence headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c seq_scaling_matrix_present_flag is set to \c 1, then a - * #VAQMatrixBufferHEVC buffer shall also be provided within the same - * \c vaRenderPicture() call as this sequence parameter buffer. - */ -typedef struct _VAEncSequenceParameterBufferHEVC { - /** \brief Same as the HEVC bitstream syntax element. - * value range [1..2]. - */ - uint8_t general_profile_idc; - /** \brief Same as the HEVC bitstream syntax element. - * general_level_idc shall be set equal to a value of 30 times the level - * numbers allowed [1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 5.2, 6, 6.1, 6.2] - */ - uint8_t general_level_idc; - /** \brief Same as the HEVC bitstream syntax element. - * Only value 0 is allowed for level value below 4, exclusive. - */ - uint8_t general_tier_flag; - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between IDR frames. */ - uint32_t intra_idr_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - /** \brief Picture width in pixel samples. - * Its value must be multiple of min CU size. - */ - uint16_t pic_width_in_luma_samples; - /** \brief Picture height in pixel samples. - * Its value must be multiple of min CU size. - */ - uint16_t pic_height_in_luma_samples; - - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t chroma_format_idc : 2; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t separate_colour_plane_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t bit_depth_luma_minus8 : 3; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t bit_depth_chroma_minus8 : 3; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t scaling_list_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t strong_intra_smoothing_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t amp_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sample_adaptive_offset_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_loop_filter_disabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sps_temporal_mvp_enabled_flag : 1; - /** \brief Indicates whether or not the encoding is in low delay mode. - * 0 normal sequence - * 1 no random access B will be coded . and the coding type could be only I, P or LDB - * this flag only indicates the frame coding type of the sequence. - */ - uint32_t low_delay_seq : 1; - /** \brief Indicates whether or not the encoding is in dyadic hierarchical GOP structure - * the default value 0, BRC would treat is as flat structure. if HierachicalFlag == 1, - * application would enable Qp Modulation - */ - uint32_t hierachical_flag : 1; - /** \brief keep for future , should be set to 0 */ - uint32_t reserved_bits : 14; - } bits; - uint32_t value; - } seq_fields; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [0..3] - */ - uint8_t log2_min_luma_coding_block_size_minus3; - - /** \brief Same as the HEVC bitstream syntax element. - */ - uint8_t log2_diff_max_min_luma_coding_block_size; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [0..3] - */ - uint8_t log2_min_transform_block_size_minus2; - - /** \brief Same as the HEVC bitstream syntax element. - */ - uint8_t log2_diff_max_min_transform_block_size; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [2] - */ - uint8_t max_transform_hierarchy_depth_inter; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [2] - */ - uint8_t max_transform_hierarchy_depth_intra; - - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_sample_bit_depth_luma_minus1; - - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_sample_bit_depth_chroma_minus1; - - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t log2_min_pcm_luma_coding_block_size_minus3; - - /** \brief Derived from the HEVC bitstream syntax element. - * log2_min_pcm_luma_coding_block_size_minus3 + - * log2_diff_max_min_pcm_luma_coding_block_size - */ - uint32_t log2_max_pcm_luma_coding_block_size_minus3; - - /** @name VUI parameters (optional) */ - /**@{*/ - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t vui_parameters_present_flag; - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t aspect_ratio_info_present_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t neutral_chroma_indication_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t field_seq_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t vui_timing_info_present_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t bitstream_restriction_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t tiles_fixed_structure_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t motion_vectors_over_pic_boundaries_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t restricted_ref_pic_lists_flag : 1; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_horizontal : 5; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_vertical : 5; - } bits; - uint32_t value; - } vui_fields; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t aspect_ratio_idc; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sar_width; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sar_height; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t vui_num_units_in_tick; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t vui_time_scale; - /** \brief Same as the HEVC bitstream syntax element. */ - uint16_t min_spatial_segmentation_idc; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t max_bytes_per_pic_denom; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t max_bits_per_min_cu_denom; - - /** \brief SCC flags to enable/disable features, including IBC and palette mode at present.*/ - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t palette_mode_enabled_flag : 1; - /** \brief Reserved bits for future use, must be zero */ - uint32_t reserved : 31; - } bits; - uint32_t value; - } scc_fields; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 1]; - /**@}*/ -} VAEncSequenceParameterBufferHEVC; - -/**************************** - * HEVC data structures - ****************************/ -/** - * \brief Picture parameter for HEVC encoding in main & main 10 - * profiles. - * - * This structure holds information for \c pic_parameter_set_rbsp() as - * defined by the HEVC specification. - * - * If packed picture headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c pic_scaling_matrix_present_flag is set to \c 1, then a - * #VAQMatrixBufferHEVC buffer shall also be provided within the same - * \c vaRenderPicture() call as this picture parameter buffer. - */ -typedef struct _VAEncPictureParameterBufferHEVC { - /** - * \brief Information about the picture to be encoded. - * - * See #VAPictureHEVC for further description of each field. - * Note that decoded_curr_pic.picture_id represents the reconstructed - * (decoded) picture. User provides a scratch VA surface ID here. - * Long term reference and RPS related fields should be set to 0 - * and ignored. - */ - VAPictureHEVC decoded_curr_pic; - /** - * \brief Decoded Picture Buffer (DPB). - * - * This array represents the list of reconstructed (decoded) - * frames used as reference. It is important to keep track of - * reconstructed frames so that they can be used later on as - * reference for P or B-frames encoding. - */ - VAPictureHEVC reference_frames[15]; - /** - * \brief Output encoded bitstream. - * - * \ref coded_buf has type #VAEncCodedBufferType. It should be - * large enough to hold the compressed NAL slice and possibly VPS, SPS - * and PPS NAL units, and other NAL units such as SEI. - */ - VABufferID coded_buf; - - /** \brief collocated reference picture buffer index of ReferenceFrames[]. - * Please note it is different from HEVC syntac element collocated_ref_idx. - * When the HEVC syntax element slice_temporal_mvp_enable_flag takes value 0, - * collocated_ref_pic_index should take value 0xFF. . - * Range: [0..14, 0xFF] - */ - uint8_t collocated_ref_pic_index; - - /** - * \brief OR'd flags describing whether the picture is the last one or not. - * - * This fields holds 0 if the picture to be encoded is not the last - * one in the stream or sequence. Otherwise, it is a combination of - * \ref HEVC_LAST_PICTURE_EOSEQ or \ref HEVC_LAST_PICTURE_EOSTREAM. - */ - uint8_t last_picture; - - /** \brief \c init_qp_minus26 + 26. */ - uint8_t pic_init_qp; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t diff_cu_qp_delta_depth; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - int8_t pps_cb_qp_offset; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - int8_t pps_cr_qp_offset; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t num_tile_columns_minus1; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t num_tile_rows_minus1; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t column_width_minus1[19]; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t row_height_minus1[21]; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t log2_parallel_merge_level_minus2; - - /** \brief Application may set the CTU bit size limit based on - * spec requirement (A.3.2), or other value for special purpose. - * If the value is set 0, no bit size limit is checked. - */ - uint8_t ctu_max_bitsize_allowed; - - /** \brief Maximum reference index for reference picture list 0. - * value range: [0..14]. - */ - uint8_t num_ref_idx_l0_default_active_minus1; - - /** \brief Maximum reference index for reference picture list 1. - * value range: [0..14]. - */ - uint8_t num_ref_idx_l1_default_active_minus1; - - /** \brief PPS header - * Used by GPU to generate new slice headers in slice size control. - * value range: [0..63]. - */ - uint8_t slice_pic_parameter_set_id; - - /** \brief NAL unit type - * Used by GPU to generate new slice headers in slice size control. - * value range: [0..63]. - */ - uint8_t nal_unit_type; - - union { - struct { - /** \brief Is picture an IDR picture? */ - uint32_t idr_pic_flag : 1; - /** \brief Picture type. - * I - 1; - * P - 2; - * B - 3; - * B1 - 4; - * B2 - 5; - * B1 and B2 are frame types for hierachical B, explanation - * can refer to num_b_in_gop[]. - */ - uint32_t coding_type : 3; - /** \brief Is picture a reference picture? */ - uint32_t reference_pic_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t dependent_slice_segments_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t sign_data_hiding_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t constrained_intra_pred_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t transform_skip_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t cu_qp_delta_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t weighted_pred_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t weighted_bipred_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t transquant_bypass_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t tiles_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t entropy_coding_sync_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t loop_filter_across_tiles_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t pps_loop_filter_across_slices_enabled_flag : 1; - /** \brief A combination of HEVC syntax element of - * sps_scaling_list_data_present_flag and - * pps_scaling_list_data_present_flag - * when scaling_list_enable_flag is 0, it must be 0. - */ - uint32_t scaling_list_data_present_flag : 1; - /** \brief indicate the current picture contains significant - * screen contents (text, characters, etc.) or animated image. - * GPU may want to treat them differently from normal video. - * For example, encoder may choose a small transform unit size - * and may use transform skip mode. - */ - uint32_t screen_content_flag : 1; - /** - * When either weighted_pred_flag or weighted_bipred_flag is - * turned on, the flag enable_gpu_weighted_prediction requests - * GPU to determine weighted prediction factors. In this case, - * the following parameters in slice control data structure - * shall be ignored: - * luma_log2_weight_denom, delta_chroma_log2_weight_denom, - * luma_offset_l0[15], luma_offset_l1[15], - * delta_luma_weight_l0[15], delta_luma_weight_l1[15], - * chroma_offset_l0[15][2], chroma_offset_l1[15][2], - * and delta_chroma_weight_l0[15][2], delta_chroma_weight_l1[15][2]. - */ - uint32_t enable_gpu_weighted_prediction : 1; - /** \brief HEVC syntax element in slice segment header - * GPU uses it to generate new slice headers in slice size control. - */ - uint32_t no_output_of_prior_pics_flag : 1; - uint32_t reserved : 11; - } bits; - uint32_t value; - } pic_fields; - - /** \brief When hierachical_level_plus1 > 0, hierachical_level_plus1-1 indicates - *the current frame's level.when it > 0. B1, B2 setting in CodingType can be treated as B, - *hirachical level is determined by this variable.When hierachical_level_plus1 == 0, - *hierarchical level information still comes from coding_type. - */ - uint8_t hierarchical_level_plus1; - /** \brief Reserved bytes for future use, must be zero */ - uint8_t va_byte_reserved; - /** \brief SCC flags to enable/disable feature, only IBC at present.*/ - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint16_t pps_curr_pic_ref_enabled_flag : 1; - /** \brief Reserved bits for future use, must be zero */ - uint16_t reserved : 15; - } bits; - uint16_t value; - } scc_fields; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH - 1]; -} VAEncPictureParameterBufferHEVC; - -/** - * \brief Slice parameter for HEVC encoding in main & main 10 profiles. - * - * This structure holds information for \c - * slice_segment_layer_rbsp() as defined by the HEVC - * specification. - * - * If packed slice headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSlice ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - */ -typedef struct _VAEncSliceParameterBufferHEVC { - /** \brief Starting CTU address for this slice. */ - uint32_t slice_segment_address; - /** \brief Number of CTUs in this slice. */ - uint32_t num_ctu_in_slice; - - /** \brief Slice type. - * Corresponds to HEVC syntax element of the same name. - */ - uint8_t slice_type; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t slice_pic_parameter_set_id; - - /** \brief Maximum reference index for reference picture list 0. - * Range: 0 to 14, inclusive. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** \brief Maximum reference index for reference picture list 1. - * Range: 0 to 14, inclusive. - */ - uint8_t num_ref_idx_l1_active_minus1; - /** \brief Reference picture list 0 (for P slices). */ - VAPictureHEVC ref_pic_list0[15]; - /** \brief Reference picture list 1 (for B slices). */ - VAPictureHEVC ref_pic_list1[15]; - /**@}*/ - - /** @name pred_weight_table() */ - /**@{*/ - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t luma_log2_weight_denom; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_chroma_log2_weight_denom; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_luma_weight_l0[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t luma_offset_l0[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_chroma_weight_l0[15][2]; - /** \brief Same as the HEVC spec variable ChromaOffsetL0[]. */ - int8_t chroma_offset_l0[15][2]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_luma_weight_l1[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t luma_offset_l1[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_chroma_weight_l1[15][2]; - /** \brief Same as the HEVC spec variable ChromaOffsetL1[]. */ - int8_t chroma_offset_l1[15][2]; - /**@}*/ - - /** \brief Corresponds to HEVC spec variable MaxNumMergeCand. - * Range: [1..5]. - */ - uint8_t max_num_merge_cand; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_qp_delta; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_cb_qp_offset; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_cr_qp_offset; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_beta_offset_div2; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_tc_offset_div2; - - union { - struct { - /** \brief Indicates if current slice is the last one in picture */ - uint32_t last_slice_of_pic_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name */ - uint32_t dependent_slice_segment_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name */ - uint32_t colour_plane_id : 2; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_temporal_mvp_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_sao_luma_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_sao_chroma_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. - * if this flag is set to 0, num_ref_idx_l0_active_minus1 should be - * equal to num_ref_idx_l0_default_active_minus1 - * as well as for that for l1. - */ - uint32_t num_ref_idx_active_override_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t mvd_l1_zero_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t cabac_init_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_deblocking_filter_disabled_flag : 2; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_loop_filter_across_slices_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t collocated_from_l0_flag : 1; - } bits; - uint32_t value; - } slice_fields; - - - /** - * \brief bit offset of syntax element pred_weight_table() in slice segment header. - * It aligns with the starting position of the current packed slice header. - * It is used when encoder prefers to override the weighted prediction parameters passed in - * from application. - * Please refer to enable_gpu_weighted_prediction in VAEncPictureParameterBufferHEVC. - */ - uint32_t pred_weight_table_bit_offset; - /** - * \brief bit length of syntax element pred_weight_table() in slice segment header. - * It is used when encoder prefers to override the weighted prediction parameters passed in - * from application. - * Please refer to enable_gpu_weighted_prediction in VAEncPictureParameterBufferHEVC. - */ - uint32_t pred_weight_table_bit_length; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 2]; - /**@}*/ -} VAEncSliceParameterBufferHEVC; - -/** - * \brief HEVC Quantization Matrix Buffer Structure - * - * This structure is sent once per frame, - * and only when scaling_list_enabled_flag = 1 and scaling_list_data_present_flag = 1. - * Only when scaling_list_data_present_flag = 1, app still - * needs to send in this structure. When scaling_list_enabled_flag = 1 and - * scaling_list_data_present_flag = 0, driver is responsible to generate - * the default scaling list values. - * - * Matrix entries are in raster scan order which follows HEVC spec. - */ -typedef struct _VAQMatrixBufferHEVC { - /** - * \brief scaling lists, - * corresponds to same HEVC spec syntax element - * ScalingList[ i ][ MatrixID ][ j ]. - * - * \brief 4x4 scaling, - */ - uint8_t scaling_lists_4x4[3][2][16]; - /** - * \brief 8x8 scaling, - */ - uint8_t scaling_lists_8x8[3][2][64]; - /** - * \brief 16x16 scaling, - * correspongs i = 2, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t scaling_lists_16x16[3][2][64]; - /** - * \brief 32x32 scaling, - * correspongs i = 3, MatrixID is in the range of 0 to 1, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t scaling_lists_32x32[2][64]; - /** - * \brief DC values of the 16x16 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 2 and matrixID in the range of 0 to 5, inclusive. - */ - uint8_t scaling_list_dc_16x16[3][2]; - /** - * \brief DC values of the 32x32 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 3 and matrixID in the range of 0 to 1, inclusive. - */ - uint8_t scaling_list_dc_32x32[2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAQMatrixBufferHEVC; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_HEVC_H */ diff --git a/prebuilts/aarch64/include/va/va_enc_jpeg.h b/prebuilts/aarch64/include/va/va_enc_jpeg.h deleted file mode 100644 index ec02191..0000000 --- a/prebuilts/aarch64/include/va/va_enc_jpeg.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (c) 2007-2013 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_jpeg.h - * \brief JPEG encoding API - * - * This file contains the \ref api_enc_jpeg "JPEG encoding API". - */ - -#ifndef VA_ENC_JPEG_H -#define VA_ENC_JPEG_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_jpeg JPEG encoding API - * - * @{ - */ - -/** - * \brief JPEG Encoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferJPEG { - /** \brief holds reconstructed picture. */ - VASurfaceID reconstructed_picture; - /** \brief picture width. */ - uint16_t picture_width; - /** \brief picture height. */ - uint16_t picture_height; - /** \brief holds coded data. */ - VABufferID coded_buf; - - /** - * \brief pic_flags - * - */ - union { - struct { - /** - * \brief profile: - * 0 - Baseline, 1 - Extended, 2 - Lossless, 3 - Hierarchical - */ - uint32_t profile : 2; - /** - * \brief progressive: - * 0 - sequential, 1 - extended, 2 - progressive - */ - uint32_t progressive : 1; - /** - * \brief huffman: - * 0 - arithmetic, 1 - huffman - */ - uint32_t huffman : 1; - /** - * \brief interleaved: - * 0 - non interleaved, 1 - interleaved - */ - uint32_t interleaved : 1; - /** - * \brief differential: - * 0 - non differential, 1 - differential - */ - uint32_t differential : 1; - } bits; - uint32_t value; - } pic_flags; - - /** \brief number of bits per sample. */ - uint8_t sample_bit_depth; - /** \brief total number of scans in image. */ - uint8_t num_scan; - /** \brief number of image components in frame. */ - uint16_t num_components; - /** \brief Component identifier (Ci). */ - uint8_t component_id[4]; - /** \brief Quantization table selector (Tqi). */ - uint8_t quantiser_table_selector[4]; - /** \brief number from 1 to 100 that specifies quality of image. */ - uint8_t quality; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferJPEG; - - -/** - * \brief Slice parameter for JPEG encoding. - * - * This structure conveys slice (scan) level parameters. - * - */ -typedef struct _VAEncSliceParameterBufferJPEG { - /** \brief Restart interval definition (Ri). */ - uint16_t restart_interval; - /** \brief number of image components in a scan. */ - uint16_t num_components; - struct { - /** \brief Scan component selector (Csj). */ - uint8_t component_selector; - /** \brief DC entropy coding table selector (Tdj). */ - uint8_t dc_table_selector; - /** \brief AC entropy coding table selector (Taj). */ - uint8_t ac_table_selector; - } components[4]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSliceParameterBufferJPEG; - -/** - * \brief Quantization table for JPEG encoding. - * - */ -typedef struct _VAQMatrixBufferJPEG { - /** \brief load luma quantization table. */ - int32_t load_lum_quantiser_matrix; - /** \brief load chroma quantization table. */ - int32_t load_chroma_quantiser_matrix; - /** \brief luma quantization table. */ - uint8_t lum_quantiser_matrix[64]; - /** \brief chroma quantization table. */ - uint8_t chroma_quantiser_matrix[64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAQMatrixBufferJPEG; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_JPEG_H */ diff --git a/prebuilts/aarch64/include/va/va_enc_mpeg2.h b/prebuilts/aarch64/include/va/va_enc_mpeg2.h deleted file mode 100644 index 669df03..0000000 --- a/prebuilts/aarch64/include/va/va_enc_mpeg2.h +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_mpeg2.h - * \brief The MPEG-2 encoding API - * - * This file contains the \ref api_enc_mpeg2 "MPEG-2 encoding API". - */ - -#ifndef _VA_ENC_MPEG2_H_ -#define _VA_ENC_MPEG2_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_mpeg2 MPEG-2 encoding API - * - * @{ - */ - -/** - * \brief MPEG-2 Quantization Matrix Buffer - * - */ -typedef VAIQMatrixBufferMPEG2 VAQMatrixBufferMPEG2; - -/** - * \brief Packed header types specific to MPEG-2 encoding. - * - * Types of packed headers generally used for MPEG-2 encoding. - */ -typedef enum { - /** - * \brief Packed Sequence Parameter Set (SPS). - * - */ - VAEncPackedHeaderMPEG2_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - */ - VAEncPackedHeaderMPEG2_PPS = VAEncPackedHeaderPicture, - /** - * \brief Packed slice header. - * - */ - VAEncPackedHeaderMPEG2_Slice = VAEncPackedHeaderSlice, -} VAEncPackedHeaderTypeMPEG2; - -/** - * \brief Sequence parameter for MPEG-2 encoding - * - * This structure holds information for \c sequence_header() and - * sequence_extension(). - * - * If packed sequence headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - */ -typedef struct _VAEncSequenceParameterBufferMPEG2 { - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; - /** \brief Picture width. - * - * A 14bits unsigned inter, the lower 12bits - * is horizontal_size_value, and the upper - * 2bits is \c horizontal_size_extension - * - */ - uint16_t picture_width; - /** \brief Picture height. - * - * A 14bits unsigned inter, the lower 12bits - * is vertical_size_value, and the upper 2bits is - * vertical_size_size_extension - * - */ - uint16_t picture_height; - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * bits_per_second may be derived from bit_rate. - * - */ - uint32_t bits_per_second; - /** - * \brief Frame rate - * - * Derived from frame_rate_value, frame_rate_extension_n and - * frame_rate_extension_d - * - */ - float frame_rate; - /** \brief Same as the element in sequence_header() */ - uint16_t aspect_ratio_information; - /** \brief Define the size of VBV */ - uint32_t vbv_buffer_size; - - union { - struct { - /** \brief Same as the element in Sequence extension() */ - uint32_t profile_and_level_indication : 8; - /** \brief Same as the element in Sequence extension() */ - uint32_t progressive_sequence : 1; - /** \brief Same as the element in Sequence extension() */ - uint32_t chroma_format : 2; - /** \brief Same as the element in Sequence extension() */ - uint32_t low_delay : 1; - /** \brief Same as the element in Sequence extension() */ - uint32_t frame_rate_extension_n : 2; - /** \brief Same as the element in Sequence extension() */ - uint32_t frame_rate_extension_d : 5; - } bits; - uint32_t value; - } sequence_extension; - - /** \brief Flag to indicate the following GOP header are being updated */ - uint32_t new_gop_header; - - union { - struct { - /** \brief Time code */ - uint32_t time_code : 25; - /** \brief Same as the element in GOP header */ - uint32_t closed_gop : 1; - /** \brief SAme as the element in GOP header */ - uint32_t broken_link : 1; - } bits; - uint32_t value; - } gop_header; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferMPEG2; - -/** - * \brief Picture parameter for MPEG-2 encoding - * - * This structure holds information for picture_header() and - * picture_coding_extension() - * - * If packed picture headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - */ -typedef struct _VAEncPictureParameterBufferMPEG2 { - /** \brief Forward reference picture */ - VASurfaceID forward_reference_picture; - /** \brief Backward reference picture */ - VASurfaceID backward_reference_picture; - /** \brief Reconstructed(decoded) picture */ - VASurfaceID reconstructed_picture; - /** - * \brief Output encoded bitstream. - * - * \ref coded_buf has type #VAEncCodedBufferType. It should be - * large enough to hold the compressed NAL slice and possibly SPS - * and PPS NAL units. - */ - VABufferID coded_buf; - /** - * \brief Flag to indicate the picture is the last one or not. - * - * This fields holds 0 if the picture to be encoded is not - * the last one in the stream. Otherwise, it - * is \ref MPEG2_LAST_PICTURE_EOSTREAM. - */ - uint8_t last_picture; - /** \brief Picture type */ - VAEncPictureType picture_type; - /** \brief Same as the element in picture_header() */ - uint32_t temporal_reference; - /** \brief Same as the element in picture_header() */ - uint32_t vbv_delay; - /** \brief Same as the element in Picture coding extension */ - uint8_t f_code[2][2]; - union { - struct { - /** \brief Same as the element in Picture coding extension */ - uint32_t intra_dc_precision : 2; - /** \brief Same as the element in Picture coding extension */ - uint32_t picture_structure : 2; - /** \brief Same as the element in Picture coding extension */ - uint32_t top_field_first : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t frame_pred_frame_dct : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t concealment_motion_vectors : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t q_scale_type : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t intra_vlc_format : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t alternate_scan : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t repeat_first_field : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t progressive_frame : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t composite_display_flag : 1; - } bits; - uint32_t value; - } picture_coding_extension; - - /* \brief Parameters for composite display - * - * Valid only when omposite_display_flag is 1 - */ - union { - struct { - /** \brief Same as the element in Picture coding extension */ - uint32_t v_axis : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t field_sequence : 3; - /** \brief Same as the element in Picture coding extension */ - uint32_t sub_carrier : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t burst_amplitude : 7; - /** \brief Same as the element in Picture coding extension */ - uint32_t sub_carrier_phase : 8; - } bits; - uint32_t value; - } composite_display; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferMPEG2; - -/** - * \brief Slice parameter for MPEG-2 encoding - * - */ -typedef struct _VAEncSliceParameterBufferMPEG2 { - /** \brief Starting MB address for this slice. */ - uint32_t macroblock_address; - /** \brief Number of macroblocks in this slice. */ - uint32_t num_macroblocks; - /** \brief Same as the element in slice() */ - int32_t quantiser_scale_code; - /** \brief Flag to indicate intra slice */ - int32_t is_intra_slice; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSliceParameterBufferMPEG2; - -typedef struct _VAEncMiscParameterExtensionDataSeqDisplayMPEG2 { - /** should always be 0x02 to identify it is Sequence Display Extension ISO-13818 */ - uint8_t extension_start_code_identifier; - /** these field should follow ISO-13818 6.3.6 */ - uint8_t video_format; - uint8_t colour_description; - uint8_t colour_primaries; - uint8_t transfer_characteristics; - uint8_t matrix_coefficients; - uint16_t display_horizontal_size; - uint16_t display_vertical_size; -} VAEncMiscParameterExtensionDataSeqDisplayMPEG2; -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_ENC_MPEG2_H_ */ diff --git a/prebuilts/aarch64/include/va/va_enc_vp8.h b/prebuilts/aarch64/include/va/va_enc_vp8.h deleted file mode 100644 index 84ce05f..0000000 --- a/prebuilts/aarch64/include/va/va_enc_vp8.h +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_vp8.h - * \brief VP8 encoding API - * - * This file contains the \ref api_enc_vp8 "VP8 encoding API". - */ - -#ifndef VA_ENC_VP8_H -#define VA_ENC_VP8_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_vp8 VP8 encoding API - * - * @{ - */ - -/** - * \brief VP8 Encoding Sequence Parameter Buffer Structure - * - * This structure conveys sequence level parameters. - * - */ -typedef struct _VAEncSequenceParameterBufferVP8 { - /* frame width in pixels */ - uint32_t frame_width; - /* frame height in pixels */ - uint32_t frame_height; - /* horizontal scale */ - uint32_t frame_width_scale; - /* vertical scale */ - uint32_t frame_height_scale; - - /* whether to enable error resilience features */ - uint32_t error_resilient; - /* auto keyframe placement, non-zero means enable auto keyframe placement */ - uint32_t kf_auto; - /* keyframe minimum interval */ - uint32_t kf_min_dist; - /* keyframe maximum interval */ - uint32_t kf_max_dist; - - - /* RC related fields. RC modes are set with VAConfigAttribRateControl */ - /* For VP8, CBR implies HRD conformance and VBR implies no HRD conformance */ - - /** - * Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - /* Period between I frames. */ - uint32_t intra_period; - - /* reference and reconstructed frame buffers - * Used for driver auto reference management when configured through - * VAConfigAttribEncAutoReference. - */ - VASurfaceID reference_frames[4]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferVP8; - - -/** - * \brief VP8 Encoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferVP8 { - /* surface to store reconstructed frame */ - VASurfaceID reconstructed_frame; - - /* - * surfaces to store reference frames in non auto reference mode - * VA_INVALID_SURFACE can be used to denote an invalid reference frame. - */ - VASurfaceID ref_last_frame; - VASurfaceID ref_gf_frame; - VASurfaceID ref_arf_frame; - - /* buffer to store coded data */ - VABufferID coded_buf; - - union { - struct { - /* force this frame to be a keyframe */ - uint32_t force_kf : 1; - /* don't reference the last frame */ - uint32_t no_ref_last : 1; - /* don't reference the golden frame */ - uint32_t no_ref_gf : 1; - /* don't reference the alternate reference frame */ - uint32_t no_ref_arf : 1; - /* The temporal id the frame belongs to. */ - uint32_t temporal_id : 8; - /** - * following two flags indicate the reference order - * LastRef is specified by 01b; - * GoldRef is specified by 10b; - * AltRef is specified by 11b; - * first_ref specifies the reference frame which is searched first. - * second_ref specifies the reference frame which is searched second - * if there is. - */ - uint32_t first_ref : 2; - uint32_t second_ref : 2; - /** \brief Reserved for future use, must be zero */ - uint32_t reserved : 16; - } bits; - uint32_t value; - } ref_flags; - - union { - struct { - /* version */ - uint32_t frame_type : 1; - uint32_t version : 3; - /* show_frame */ - uint32_t show_frame : 1; - /* color_space */ - uint32_t color_space : 1; - /* 0: bicubic, 1: bilinear, other: none */ - uint32_t recon_filter_type : 2; - /* 0: no loop fitler, 1: simple loop filter */ - uint32_t loop_filter_type : 2; - /* 0: disabled, 1: normal, 2: simple */ - uint32_t auto_partitions : 1; - /* same as log2_nbr_of_dct_partitions in frame header syntax */ - uint32_t num_token_partitions : 2; - - /** - * The following fields correspond to the same VP8 syntax elements - * in the frame header. - */ - /** - * 0: clamping of reconstruction pixels is disabled, - * 1: clamping enabled. - */ - uint32_t clamping_type : 1; - /* indicate segmentation is enabled for the current frame. */ - uint32_t segmentation_enabled : 1; - /** - * Determines if the MB segmentation map is updated in the current - * frame. - */ - uint32_t update_mb_segmentation_map : 1; - /** - * Indicates if the segment feature data is updated in the current - * frame. - */ - uint32_t update_segment_feature_data : 1; - /** - * indicates if the MB level loop filter adjustment is enabled for - * the current frame (0 off, 1 on). - */ - uint32_t loop_filter_adj_enable : 1; - /** - * Determines whether updated token probabilities are used only for - * this frame or until further update. - * It may be used by application to enable error resilient mode. - * In this mode probability updates are allowed only at Key Frames. - */ - uint32_t refresh_entropy_probs : 1; - /** - * Determines if the current decoded frame refreshes the golden frame. - */ - uint32_t refresh_golden_frame : 1; - /** - * Determines if the current decoded frame refreshes the alternate - * reference frame. - */ - uint32_t refresh_alternate_frame : 1; - /** - * Determines if the current decoded frame refreshes the last frame - * reference buffer. - */ - uint32_t refresh_last : 1; - /** - * Determines if the golden reference is replaced by another reference. - */ - uint32_t copy_buffer_to_golden : 2; - /** - * Determines if the alternate reference is replaced by another reference. - */ - uint32_t copy_buffer_to_alternate : 2; - /** - * Controls the sign of motion vectors when the golden frame is referenced. - */ - uint32_t sign_bias_golden : 1; - /** - * Controls the sign of motion vectors when the alternate frame is - * referenced. - */ - uint32_t sign_bias_alternate : 1; - /** - * Enables or disables the skipping of macroblocks containing no - * non-zero coefficients. - */ - uint32_t mb_no_coeff_skip : 1; - /** - * Enforces unconditional per-MB loop filter delta update setting frame - * header flags mode_ref_lf_delta_update, all mb_mode_delta_update_flag[4], - * and all ref_frame_delta_update_flag[4] to 1. - * Since loop filter deltas are not automatically refreshed to default - * values at key frames, dropped frame with delta update may prevent - * correct decoding from the next key frame. - * Encoder application is advised to set this flag to 1 at key frames. - */ - uint32_t forced_lf_adjustment : 1; - uint32_t reserved : 2; - } bits; - uint32_t value; - } pic_flags; - - /** - * Contains a list of 4 loop filter level values (updated value if applicable) - * controlling the deblocking filter strength. Each entry represents a segment. - * When segmentation is disabled, use entry 0. - * When loop_filter_level is 0, loop filter shall be disabled. - */ - int8_t loop_filter_level[4]; - - /** - * Contains a list of 4 delta values for reference frame based MB-level - * loop filter adjustment. - * If no update, then set to 0. - */ - int8_t ref_lf_delta[4]; - - /** - * Contains a list of 4 delta values for coding mode based MB-level loop - * filter adjustment. - * If no update, then set to 0. - */ - int8_t mode_lf_delta[4]; - - /** - * Controls the deblocking filter sensitivity. - * Corresponds to the same VP8 syntax element in frame header. - */ - uint8_t sharpness_level; - - /** - * Application supplied maximum clamp value for Qindex used in quantization. - * Qindex will not be allowed to exceed this value. - * It has a valid range [0..127] inclusive. - */ - uint8_t clamp_qindex_high; - - /** - * Application supplied minimum clamp value for Qindex used in quantization. - * Qindex will not be allowed to be lower than this value. - * It has a valid range [0..127] inclusive. - * Condition clamp_qindex_low <= clamp_qindex_high must be guaranteed, - * otherwise they are ignored. - */ - uint8_t clamp_qindex_low; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferVP8; - - -/** - * \brief VP8 MB Segmentation ID Buffer - * - * application provides buffer containing the initial segmentation id for each - * MB, in raster scan order. Rate control may reassign it. - * For an 640x480 video, the buffer has 1200 entries. - * the value of each entry should be in the range [0..3], inclusive. - * If segmentation is not enabled, application does not need to provide it. - */ -typedef struct _VAEncMBMapBufferVP8 { - /** - * number of MBs in the frame. - * It is also the number of entries of mb_segment_id[]; - */ - uint32_t num_mbs; - /** - * per MB Segmentation ID Buffer - */ - uint8_t *mb_segment_id; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMBMapBufferVP8; - - -/** - * \brief VP8 Quantization Matrix Buffer Structure - * - * Contains quantization index for yac(0-3) for each segment and quantization - * index deltas, ydc(0), y2dc(1), y2ac(2), uvdc(3), uvac(4) that are applied - * to all segments. When segmentation is disabled, only quantization_index[0] - * will be used. This structure is sent once per frame. - */ -typedef struct _VAQMatrixBufferVP8 { - uint16_t quantization_index[4]; - int16_t quantization_index_delta[5]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAQMatrixBufferVP8; - - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_VP8_H */ diff --git a/prebuilts/aarch64/include/va/va_enc_vp9.h b/prebuilts/aarch64/include/va/va_enc_vp9.h deleted file mode 100644 index 107ab0c..0000000 --- a/prebuilts/aarch64/include/va/va_enc_vp9.h +++ /dev/null @@ -1,603 +0,0 @@ -/* - * Copyright (c) 2007-2015 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_vp9.h - * \brief VP9 encoding API - * - * This file contains the \ref api_enc_vp9 "VP9 encoding API". - * - */ - -#ifndef VA_ENC_VP9_H -#define VA_ENC_VP9_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_vp9 VP9 encoding API - * - * @{ - */ - -/** - * \brief VP9 Encoding Status Data Buffer Structure - * - * This structure is used to convey status data from encoder to application. - * Driver allocates VACodedBufferVP9Status as a private data buffer. - * Driver encapsulates the status buffer with a VACodedBufferSegment, - * and sets VACodedBufferSegment.status to be VA_CODED_BUF_STATUS_CODEC_SPECIFIC. - * And driver associates status data segment to the bit stream buffer segment - * by setting VACodedBufferSegment.next of coded_buf (bit stream) to the private - * buffer segment of status data. - * Application accesses it by calling VAMapBuffer() with VAEncCodedBufferType. - */ -typedef struct _VACodedBufferVP9Status { - /** Final quantization index used (yac), determined by BRC. - * Application is providing quantization index deltas - * ydc(0), y2dc(1), y2ac(2), uvdc(3), uvac(4) that are applied to all segments - * and segmentation qi deltas, they will not be changed by BRC. - */ - uint16_t base_qp_index; - - /** Final loopfilter levels for the frame, if segmentation is disabled only - * index 0 is used. - * If loop_filter_level is 0, it indicates loop filter is disabled. - */ - uint8_t loop_filter_level; - - /** - * Long term reference frame indication from BRC. BRC recommends the - * current frame that is being queried is a good candidate for a long - * term reference. - */ - uint8_t long_term_indication; - - /* suggested next frame width */ - uint16_t next_frame_width; - - /* suggested next frame height */ - uint16_t next_frame_height; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VACodedBufferVP9Status; - -/** - * \brief VP9 Encoding Sequence Parameter Buffer Structure - * - * This structure conveys sequence level parameters. - * - */ -typedef struct _VAEncSequenceParameterBufferVP9 { - /** \brief Frame size note: - * Picture resolution may change frame by frame. - * Application needs to allocate surfaces and frame buffers based on - * max frame resolution in case resolution changes for later frames. - * The source and recon surfaces allocated should be 64x64(SB) aligned - * on both horizontal and vertical directions. - * But buffers on the surfaces need to be aligned to CU boundaries. - */ - /* maximum frame width in pixels for the whole sequence */ - uint32_t max_frame_width; - - /* maximum frame height in pixels for the whole sequence */ - uint32_t max_frame_height; - - /* auto keyframe placement, non-zero means enable auto keyframe placement */ - uint32_t kf_auto; - - /* keyframe minimum interval */ - uint32_t kf_min_dist; - - /* keyframe maximum interval */ - uint32_t kf_max_dist; - - - /* RC related fields. RC modes are set with VAConfigAttribRateControl */ - /* For VP9, CBR implies HRD conformance and VBR implies no HRD conformance */ - - /** - * Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - - /* Period between key frames */ - uint32_t intra_period; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferVP9; - - -/** - * \brief VP9 Encoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferVP9 { - /** VP9 encoder may support dynamic scaling function. - * If enabled (enable_dynamic_scaling is set), application may request - * GPU encodes picture with a different resolution from the raw source. - * GPU should handle the scaling process of source and - * all reference frames. - */ - /* raw source frame width in pixels */ - uint32_t frame_width_src; - /* raw source frame height in pixels */ - uint32_t frame_height_src; - - /* to be encoded frame width in pixels */ - uint32_t frame_width_dst; - /* to be encoded frame height in pixels */ - uint32_t frame_height_dst; - - /* surface to store reconstructed frame, not used for enc only case */ - VASurfaceID reconstructed_frame; - - /** \brief reference frame buffers - * Each entry of the array specifies the surface index of the picture - * that is referred by current picture or will be referred by any future - * picture. The valid entries take value from 0 to 127, inclusive. - * Non-valid entries, those do not point to pictures which are referred - * by current picture or future pictures, should take value 0xFF. - * Other values are not allowed. - * - * Application should update this array based on the refreshing - * information expected. - */ - VASurfaceID reference_frames[8]; - - /* buffer to store coded data */ - VABufferID coded_buf; - - union { - struct { - /* force this frame to be a keyframe */ - uint32_t force_kf : 1; - - /** \brief Indiates which frames to be used as reference. - * (Ref_frame_ctrl & 0x01) ? 1: last frame as reference frame, 0: not. - * (Ref_frame_ctrl & 0x02) ? 1: golden frame as reference frame, 0: not. - * (Ref_frame_ctrl & 0x04) ? 1: alt frame as reference frame, 0: not. - * L0 is for forward prediction. - * L1 is for backward prediction. - */ - uint32_t ref_frame_ctrl_l0 : 3; - uint32_t ref_frame_ctrl_l1 : 3; - - /** \brief Last Reference Frame index - * Specifies the index to RefFrameList[] which points to the LAST - * reference frame. It corresponds to active_ref_idx[0] in VP9 code. - */ - uint32_t ref_last_idx : 3; - - /** \brief Specifies the Sign Bias of the LAST reference frame. - * It corresponds to ref_frame_sign_bias[LAST_FRAME] in VP9 code. - */ - uint32_t ref_last_sign_bias : 1; - - /** \brief GOLDEN Reference Frame index - * Specifies the index to RefFrameList[] which points to the Golden - * reference frame. It corresponds to active_ref_idx[1] in VP9 code. - */ - uint32_t ref_gf_idx : 3; - - /** \brief Specifies the Sign Bias of the GOLDEN reference frame. - * It corresponds to ref_frame_sign_bias[GOLDEN_FRAME] in VP9 code. - */ - uint32_t ref_gf_sign_bias : 1; - - /** \brief Alternate Reference Frame index - * Specifies the index to RefFrameList[] which points to the Alternate - * reference frame. It corresponds to active_ref_idx[2] in VP9 code. - */ - uint32_t ref_arf_idx : 3; - - /** \brief Specifies the Sign Bias of the ALTERNATE reference frame. - * It corresponds to ref_frame_sign_bias[ALTREF_FRAME] in VP9 code. - */ - uint32_t ref_arf_sign_bias : 1; - - /* The temporal id the frame belongs to */ - uint32_t temporal_id : 8; - - uint32_t reserved : 5; - } bits; - uint32_t value; - } ref_flags; - - union { - struct { - /** - * Indicates if the current frame is a key frame or not. - * Corresponds to the same VP9 syntax element in frame tag. - */ - uint32_t frame_type : 1; - - /** \brief show_frame - * 0: current frame is not for display - * 1: current frame is for display - */ - uint32_t show_frame : 1; - - /** - * The following fields correspond to the same VP9 syntax elements - * in the frame header. - */ - uint32_t error_resilient_mode : 1; - - /** \brief Indicate intra-only for inter pictures. - * Must be 0 for key frames. - * 0: inter frame use both intra and inter blocks - * 1: inter frame use only intra blocks. - */ - uint32_t intra_only : 1; - - /** \brief Indicate high precision mode for Motion Vector prediction - * 0: normal mode - * 1: high precision mode - */ - uint32_t allow_high_precision_mv : 1; - - /** \brief Motion Compensation Filter type - * 0: eight-tap (only this mode is supported now.) - * 1: eight-tap-smooth - * 2: eight-tap-sharp - * 3: bilinear - * 4: switchable - */ - uint32_t mcomp_filter_type : 3; - uint32_t frame_parallel_decoding_mode : 1; - uint32_t reset_frame_context : 2; - uint32_t refresh_frame_context : 1; - uint32_t frame_context_idx : 2; - uint32_t segmentation_enabled : 1; - - /* corresponds to variable temporal_update in VP9 code. - * Indicates whether Segment ID is from bitstream or from previous - * frame. - * 0: Segment ID from bitstream - * 1: Segment ID from previous frame - */ - uint32_t segmentation_temporal_update : 1; - - /* corresponds to variable update_mb_segmentation_map in VP9 code. - * Indicates how hardware determines segmentation ID - * 0: intra block - segment id is 0; - * inter block - segment id from previous frame - * 1: intra block - segment id from bitstream (app or GPU decides) - * inter block - depends on segmentation_temporal_update - */ - uint32_t segmentation_update_map : 1; - - /** \brief Specifies if the picture is coded in lossless mode. - * - * lossless_mode = base_qindex == 0 && y_dc_delta_q == 0 \ - * && uv_dc_delta_q == 0 && uv_ac_delta_q == 0; - * Where base_qindex, y_dc_delta_q, uv_dc_delta_q and uv_ac_delta_q - * are all variables in VP9 code. - * - * When enabled, tx_mode needs to be set to 4x4 only and all - * tu_size in CU record set to 4x4 for entire frame. - * Software also has to program such that final_qindex=0 and - * final_filter_level=0 following the Quant Scale and - * Filter Level Table in Segmentation State section. - * Hardware forces Hadamard Tx when this bit is set. - * When lossless_mode is on, BRC has to be turned off. - * 0: normal mode - * 1: lossless mode - */ - uint32_t lossless_mode : 1; - - /** \brief MV prediction mode. Corresponds to VP9 variable with same name. - * comp_prediction_mode = 0: single prediction ony, - * comp_prediction_mode = 1: compound prediction, - * comp_prediction_mode = 2: hybrid prediction - * - * Not mandatory. App may suggest the setting based on power or - * performance. Kernal may use it as a guildline and decide the proper - * setting on its own. - */ - uint32_t comp_prediction_mode : 2; - - /** \brief Indicate how segmentation is specified - * 0 application specifies segmentation partitioning and - * relevant parameters. - * 1 GPU may decide on segmentation. If application already - * provides segmentation information, GPU may choose to - * honor it and further split into more levels if possible. - */ - uint32_t auto_segmentation : 1; - - /** \brief Indicate super frame syntax should be inserted - * 0 current frame is not encapsulated in super frame structure - * 1 current fame is to be encapsulated in super frame structure. - * super frame index syntax will be inserted by encoder at - * the end of current frame. - */ - uint32_t super_frame_flag : 1; - - uint32_t reserved : 10; - } bits; - uint32_t value; - } pic_flags; - - /** \brief indicate which frames in DPB should be refreshed. - * same syntax and semantic as in VP9 code. - */ - uint8_t refresh_frame_flags; - - /** \brief Base Q index in the VP9 term. - * Added with per segment delta Q index to get Q index of Luma AC. - */ - uint8_t luma_ac_qindex; - - /** - * Q index delta from base Q index in the VP9 term for Luma DC. - */ - int8_t luma_dc_qindex_delta; - - /** - * Q index delta from base Q index in the VP9 term for Chroma AC. - */ - int8_t chroma_ac_qindex_delta; - - /** - * Q index delta from base Q index in the VP9 term for Chroma DC. - */ - int8_t chroma_dc_qindex_delta; - - /** \brief filter level - * Corresponds to the same VP9 syntax element in frame header. - */ - uint8_t filter_level; - - /** - * Controls the deblocking filter sensitivity. - * Corresponds to the same VP9 syntax element in frame header. - */ - uint8_t sharpness_level; - - /** \brief Loop filter level reference delta values. - * Contains a list of 4 delta values for reference frame based block-level - * loop filter adjustment. - * If no update, set to 0. - * value range [-63..63] - */ - int8_t ref_lf_delta[4]; - - /** \brief Loop filter level mode delta values. - * Contains a list of 4 delta values for coding mode based MB-level loop - * filter adjustment. - * If no update, set to 0. - * value range [-63..63] - */ - int8_t mode_lf_delta[2]; - - /** - * Offset from starting position of output bitstream in bits where - * ref_lf_delta[] should be inserted. This offset should cover any metadata - * ahead of uncompressed header in inserted bit stream buffer (the offset - * should be same as that for final output bitstream buffer). - * - * In BRC mode, always insert ref_lf_delta[] (This implies uncompressed - * header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1). - */ - uint16_t bit_offset_ref_lf_delta; - - /** - * Offset from starting position of output bitstream in bits where - * mode_lf_delta[] should be inserted. - * - * In BRC mode, always insert mode_lf_delta[] (This implies uncompressed - * header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1). - */ - uint16_t bit_offset_mode_lf_delta; - - /** - * Offset from starting position of output bitstream in bits where (loop) - * filter_level should be inserted. - */ - uint16_t bit_offset_lf_level; - - /** - * Offset from starting position of output bitstream in bits where - * Base Qindex should be inserted. - */ - uint16_t bit_offset_qindex; - - /** - * Offset from starting position of output bitstream in bits where - * First Partition Size should be inserted. - */ - uint16_t bit_offset_first_partition_size; - - /** - * Offset from starting position of output bitstream in bits where - * segmentation_enabled is located in bitstream. When auto_segmentation - * is enabled, GPU uses this offset to locate and update the - * segmentation related information. - */ - uint16_t bit_offset_segmentation; - - /** \brief length in bit of segmentation portion from the location - * in bit stream where segmentation_enabled syntax is coded. - * When auto_segmentation is enabled, GPU uses this bit size to locate - * and update the information after segmentation. - */ - uint16_t bit_size_segmentation; - - - /** \brief log2 of number of tile rows - * Corresponds to the same VP9 syntax element in frame header. - * value range [0..2] - */ - uint8_t log2_tile_rows; - - /** \brief log2 of number of tile columns - * Corresponds to the same VP9 syntax element in frame header. - * value range [0..6] - */ - uint8_t log2_tile_columns; - - /** \brief indicate frame-skip happens - * Application may choose to drop/skip one or mulitple encoded frames or - * to-be-encoded frame due to various reasons such as insufficient - * bandwidth. - * Application uses the following three flags to inform GPU about frame-skip. - * - * value range of skip_frame_flag: [0..2] - * 0 - encode as normal, no skip; - * 1 - one or more frames were skipped by application prior to the - * current frame. Encode the current frame as normal. The driver - * will pass the number_skip_frames and skip_frames_size - * to bit rate control for adjustment. - * 2 - the current frame is to be skipped. Do not encode it but encrypt - * the packed header contents. This is for the secure encoding case - * where application generates a frame of all skipped blocks. - * The packed header will contain the skipped frame. - */ - uint8_t skip_frame_flag; - - /** \brief The number of frames skipped prior to the current frame. - * It includes only the skipped frames that were not counted before, - * and does not include the frame with skip_frame_flag == 2. - * Valid when skip_frame_flag = 1. - */ - uint8_t number_skip_frames; - - /** \brief When skip_frame_flag = 1, the size of the skipped frames in bits. - * It includes only the skipped frames that were not counted before, - * and does not include the frame size with skip_frame_flag = 2. - * When skip_frame_flag = 2, it is the size of the current skipped frame - * that is to be encrypted. - */ - uint32_t skip_frames_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAEncPictureParameterBufferVP9; - - -/** - * \brief Per segment parameters - */ -typedef struct _VAEncSegParamVP9 { - union { - struct { - /** \brief Indicates if per segment reference frame indicator is enabled. - * Corresponding to variable feature_enabled when - * j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code. - */ - uint8_t segment_reference_enabled : 1; - - /** \brief Specifies per segment reference indication. - * 0: reserved - * 1: Last ref - * 2: golden - * 3: altref - * Value can be derived from variable data when - * j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code. - * value range: [0..3] - */ - uint8_t segment_reference : 2; - - /** \brief Indicates if per segment skip mode is enabled. - * Corresponding to variable feature_enabled when - * j == SEG_LVL_SKIP in function setup_segmentation() VP9 code. - */ - uint8_t segment_reference_skipped : 1; - - uint8_t reserved : 4; - - } bits; - uint8_t value; - } seg_flags; - - /** \brief Specifies per segment Loop Filter Delta. - * Must be 0 when segmentation_enabled == 0. - * value range: [-63..63] - */ - int8_t segment_lf_level_delta; - - /** \brief Specifies per segment QIndex Delta. - * Must be 0 when segmentation_enabled == 0. - * value range: [-255..255] - */ - int16_t segment_qindex_delta; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSegParamVP9; - -/** - * Structure to convey all segment related information. - * If segmentation is disabled, this data structure is still required. - * In this case, only seg_data[0] contains valid data. - * This buffer is sent once per frame. - * - * The buffer is created with VABufferType VAQMatrixBufferType. - * - */ -typedef struct _VAEncMiscParameterTypeVP9PerSegmantParam { - /** - * Parameters for 8 segments. - */ - VAEncSegParamVP9 seg_data[8]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterTypeVP9PerSegmantParam; - - -/** - * \brief VP9 Block Segmentation ID Buffer - * - * The application provides a buffer of VAEncMacroblockMapBufferType containing - * the initial segmentation id for each 8x8 block, one byte each, in raster scan order. - * Rate control may reassign it. For example, a 640x480 video, the buffer has 4800 entries. - * The value of each entry should be in the range [0..7], inclusive. - * If segmentation is not enabled, the application does not need to provide it. - */ - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_VP9_H */ diff --git a/prebuilts/aarch64/include/va/va_fei.h b/prebuilts/aarch64/include/va/va_fei.h deleted file mode 100644 index 5563cc9..0000000 --- a/prebuilts/aarch64/include/va/va_fei.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (c) 2007-2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_fei.h - * \brief The FEI encoding common API - */ - -#ifndef VA_FEI_H -#define VA_FEI_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_fei FEI encoding common API - * - * @{ - */ - -/** - * \brief FEI specific attribute definitions - */ -/** @name Attribute values for VAConfigAttribFEIFunctionType - * - * This is only for VAEntrypointFEI - * The desired type should be passed to driver when creating the configuration. - * If VA_FEI_FUNCTION_ENC_PAK is set, VA_FEI_FUNCTION_ENC and VA_FEI_FUNCTION_PAK - * will be ignored if set also. Combination of VA_FEI_FUNCTION_ENC and VA_FEI_FUNCTION_PAK - * is not valid. If VA_FEI_FUNCTION_ENC is set, there will be no bitstream output. - * If VA_FEI_FUNCTION_PAK is set, two extra input buffers for PAK are needed: - * VAEncFEIMVBufferType and VAEncFEIMBCodeBufferType. - * VA_FEI_FUNCTION_ENC_PAK is recommended for best performance. - * - **/ -/**@{*/ -/** \brief ENC only is supported */ -#define VA_FEI_FUNCTION_ENC 0x00000001 -/** \brief PAK only is supported */ -#define VA_FEI_FUNCTION_PAK 0x00000002 -/** \brief ENC_PAK is supported */ -#define VA_FEI_FUNCTION_ENC_PAK 0x00000004 - -/**@}*/ - -/** \brief Attribute value for VAConfigAttribStats */ -typedef union _VAConfigAttribValStats { - struct { - /** \brief Max number of past reference frames that are supported. */ - uint32_t max_num_past_references : 4; - /** \brief Max number of future reference frames that are supported. */ - uint32_t max_num_future_references : 4; - /** \brief Number of supported output buffers for VAStatsStatisticsParameter->outputs */ - uint32_t num_outputs : 3; - /** \brief Interlaced content is supported */ - uint32_t interlaced : 1; - uint32_t reserved : 20; - } bits; - uint32_t value; -} VAConfigAttribValStats; - -typedef struct _VAPictureStats { - VASurfaceID picture_id; - /* - * see flags below. - */ - uint32_t flags; -} VAPictureStats; -/* flags in VAPictureStats could be one of the following */ -#define VA_PICTURE_STATS_INVALID 0x00000001 -#define VA_PICTURE_STATS_PROGRESSIVE 0x00000000 -#define VA_PICTURE_STATS_TOP_FIELD 0x00000002 -#define VA_PICTURE_STATS_BOTTOM_FIELD 0x00000004 -/** \brief picutre surface content updated indicator. - * The picture surface content is updated, it means temporary buffer like downscaled pixel data in driver - * internal needs be forced freshing - **/ -#define VA_PICTURE_STATS_CONTENT_UPDATED 0x00000010 - -/** \brief Motion Vector and Statistics frame level controls. - * common part VAStatsStatisticsParameterBufferType for a MB or CTB - **/ -typedef struct _VAStatsStatisticsParameter { - /** \brief Source surface ID. */ - VAPictureStats input; - - /** \brief Past reference surface ID pointer. */ - VAPictureStats *past_references; - - /** \brief Past reference surface number */ - uint32_t num_past_references; - - /** \brief Statistics output for past reference surface. - * Only enabling statistics output for past reference picture when *past_ref_stat_buf is a valid - * VABufferID, it is needed in case app wants statistics data of both reference and current pictures - * in very special use cases for better performance. - * The output layout is defined by VAStatsStatisticsBufferType(for progressive and top field of - * interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case), only - * pixel_average_16x16/pixel_average_8x8 and variance_16x16/variance_8x8 data are valid. - **/ - VABufferID *past_ref_stat_buf; - - /** \brief Future reference surface ID pointer. */ - VAPictureStats *future_references; - - /** \brief Future reference surface number */ - uint32_t num_future_references; - - /** \brief Statistics output for future reference surface. - * Only enabling statistics output for future reference picture when *past_ref_stat_buf is a valid - * VABufferID, it is needed in case app wants statistics data of both reference and current pictures - * in very special use cases for better performance. - * The output layout is defined by VAStatsStatisticsBufferType(for progressive and top field of - * interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case), only - * pixel_average_16x16/pixel_average_8x8 and variance_16x16/variance_8x8 data are valid. - **/ - VABufferID *future_ref_stat_buf; - - /** \brief ID of the output buffer. - * The number of outputs is determined by below DisableMVOutput and DisableStatisticsOutput. - * The output layout is defined by VAStatsMVBufferType, VAStatsStatisticsBufferType(for progressive and - * top field of interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case). - **/ - VABufferID *outputs; - - /** \brief MV predictor. It is valid only when mv_predictor_ctrl is not 0. - * Each block has a pair of MVs, one for past and one for future reference - * as defined by VAMotionVector. The block is in raster scan order. - * Buffer size shall not be less than the number of blocks multiplied by sizeof(VAMotionVector). - **/ - VABufferID mv_predictor; - - /** \brief QP input buffer. It is valid only when mb_qp is set to 1. - * The data in this buffer correspond to the input source. - * One QP per MB or CTB block in raster scan order, each QP is a signed char (8-bit) value. - **/ - VABufferID qp; -} VAStatsStatisticsParameter; - -#ifdef __cplusplus -} -#endif - -#endif /* VA_FEI_H */ diff --git a/prebuilts/aarch64/include/va/va_fei_h264.h b/prebuilts/aarch64/include/va/va_fei_h264.h deleted file mode 100644 index ddb8e8c..0000000 --- a/prebuilts/aarch64/include/va/va_fei_h264.h +++ /dev/null @@ -1,504 +0,0 @@ -/* - * Copyright (c) 2007-2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_fei_h264.h - * \brief The FEI encoding H264 special API - */ - -#ifndef VA_FEI_H264_H -#define VA_FEI_H264_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "va_fei.h" - -/** - * \defgroup api_fei_h264 H.264 FEI encoding API - * - * @{ - */ - -/** \brief FEI frame level control buffer for H.264 */ -typedef struct _VAEncMiscParameterFEIFrameControlH264 { - uint32_t function; /* one of the VAConfigAttribFEIFunctionType values */ - /** \brief MB (16x16) control input buffer. It is valid only when (mb_input | mb_size_ctrl) - * is set to 1. The data in this buffer correspond to the input source. 16x16 MB is in raster scan order, - * each MB control data structure is defined by VAEncFEIMBControlH264. - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMBControlH264). - * Note: if mb_qp is set, VAEncQPBufferH264 is expected. - */ - VABufferID mb_ctrl; - /** \brief distortion output of MB ENC or ENC_PAK. - * Each 16x16 block has one distortion data with VAEncFEIDistortionH264 layout - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIDistortionH264). - */ - VABufferID distortion; - /** \brief MVs data output of MB ENC. - * Each 16x16 block has one MVs data with layout VAMotionVector - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAMotionVector) * 16. - */ - VABufferID mv_data; - /** \brief MBCode data output of MB ENC. - * Each 16x16 block has one MB Code data with layout VAEncFEIMBCodeH264 - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMBCodeH264). - */ - VABufferID mb_code_data; - /** \brief QP input buffer with layout VAEncQPBufferH264. It is valid only when mb_qp is set to 1. - * The data in this buffer correspond to the input source. - * One QP per 16x16 block in raster scan order, each QP is a signed char (8-bit) value. - **/ - VABufferID qp; - /** \brief MV predictor. It is valid only when mv_predictor_enable is set to 1. - * Each 16x16 block has one or more pair of motion vectors and the corresponding - * reference indexes as defined by VAEncFEIMVPredictorH264. 16x16 block is in raster scan order. - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMVPredictorH264). */ - VABufferID mv_predictor; - - /** \brief number of MV predictors. It must not be greater than maximum supported MV predictor. */ - uint32_t num_mv_predictors_l0 : 16; - uint32_t num_mv_predictors_l1 : 16; - - /** \brief motion search method definition - * 0: default value, diamond search - * 1: full search - * 2: diamond search - **/ - uint32_t search_path : 8; - /** \brief maximum number of Search Units, valid range is [1, 63] - * 0 is treated as 1. reference search locations are grouped in a predefined pattern, - * and all locations within the same group must be either all are chosen or all are skipped. - * These predefined groups are called search unit (SU).*/ - uint32_t len_sp : 8; - uint32_t reserved0 : 16; - /** \brief defines the bit-mask for disabling sub-partition - * The lower 4 bits are for the major partitions (sub-macroblock) and the higher 3 bits for minor partitions (with sub-partition for 4x(8x8) sub-macroblocks. - * xxxxxx1 : 16x16 sub-macroblock disabled - * xxxxx1x : 2x(16x8) sub-macroblock within 16x16 disabled - * xxxx1xx : 2x(8x16) sub-macroblock within 16x16 disabled - * xxx1xxx : 1x(8x8) sub-partition for 4x(8x8) within 16x16 disabled - * xx1xxxx : 2x(8x4) sub-partition for 4x(8x8) within 16x16 disabled - * x1xxxxx : 2x(4x8) sub-partition for 4x(8x8) within 16x16 disabled - * 1xxxxxx : 4x(4x4) sub-partition for 4x(8x8) within 16x16 disabled - * 1111111 : Invalid - * 0000000 : default value */ - uint32_t sub_mb_part_mask : 7; - /** specifies which Luma Intra partition is enabled/disabled for intra mode decision. - * xxxx1: luma_intra_16x16 disabled - * xxx1x: luma_intra_8x8 disabled - * xx1xx: luma_intra_4x4 disabled - * xx111: intra prediction is disabled */ - uint32_t intra_part_mask : 5; - /** when set to 1, neighbor MV will be used as predictor; when set to 0, no neighbor MV will be used as predictor.*/ - uint32_t multi_pred_l0 : 1; - /** when set to 1, neighbor MV will be used as predictor; when set to 0, no neighbor MV will be used as predictor.*/ - uint32_t multi_pred_l1 : 1; - /**defines the half/quarter pel modes. The mode is inclusive, ie., higher precision mode samples lower precision locations. - * 00b: integer mode searching - * 01b: half-pel mode searching - * 10b: reserved - * 11b: quarter-pel mode searching */ - uint32_t sub_pel_mode : 2; - /** specifies distortion measure adjustments used for the inter motion search SAD comparison. - * 00b: none - * 10b: Haar transform adjusted*/ - uint32_t inter_sad : 2; - /** specifies distortion measure adjustments used for the intra motion search SAD comparison. - * 00b: none - * 10b: Haar transform adjusted*/ - uint32_t intra_sad : 2; - /** specifies if the output distortion is the raw distortion or cost adjusted distortion. - * 0: Raw Distortion without Cost - * 1: Distortion with added Cost */ - uint32_t distortion_type : 1; - /** when set to 1, enables the additional calls on Fraction & Bidirectional Refinement*/ - uint32_t repartition_check_enable : 1; - /** defines whether adaptive searching is enabled for IME(Integer Motion Estimation). - * 0: disable - * 1: enable */ - uint32_t adaptive_search : 1; - /** enables using the motion vector as an extra predictor provided by the host. If it is set, - * host needs to provide a buffer with motion vectors and the associated reference index for - * each 16x16 block as defined . The host can call processing function to get motion vectors and use as predictor. - * 0: MV predictor disabled - * 1: MV predictor enabled */ - uint32_t mv_predictor_enable : 1; - /** enables using the QP buffer to set the QP for each block*/ - uint32_t mb_qp : 1; - /** enable mb_ctrl buffer to handle MB*/ - uint32_t mb_input : 1; - /** when this flag is set, mb_ctrl must be set too and a buffer with per MB input - * needs to be provided and MaxSizeInWord and */ - uint32_t mb_size_ctrl : 1; - /** when this flag is set, extra distortion between the current MB and co-located MB is provided. - * Extra distortion output has performance impact, set it only when it is needed.*/ - uint32_t colocated_mb_distortion : 1; - uint32_t reserved1 : 4; - - /** \brief motion search window(ref_width * ref_height) */ - uint32_t ref_width : 8; - uint32_t ref_height : 8; - /** \brief predefined motion search windows. If selected, len_sp, window(ref_width * ref_eight) - * and search_path setting are ignored. - * 0: not use predefined search window - * 1: Tiny, len_sp=4, 24x24 window and diamond search - * 2: Small, len_sp=9, 28x28 window and diamond search - * 3: Diamond, len_sp=16, 48x40 window and diamond search - * 4: Large Diamond, len_sp=32, 48x40 window and diamond search - * 5: Exhaustive, len_sp=48, 48x40 window and full search - * 6: Extend Diamond, len_sp=16, 64x40 window and diamond search - * 7: Extend Large Diamond, len_sp=32, 64x40 window and diamond search - * 8: Extend Exhaustive, len_sp=48, 64x40 window and full search - **/ - uint32_t search_window : 4; - uint32_t reserved2 : 12; - - /** \brief max frame size control with multi passes QP setting */ - uint32_t max_frame_size; - /** \brief number of passes, every pass has different QP */ - uint32_t num_passes; - /** \brief delta QP list for every pass */ - uint8_t *delta_qp; - uint32_t reserved3[VA_PADDING_LOW]; -} VAEncMiscParameterFEIFrameControlH264; - -/** \brief FEI MB level control data structure */ -typedef struct _VAEncFEIMBControlH264 { - /** \brief when set, correposndent MB is coded as intra */ - uint32_t force_to_intra : 1; - /** \brief when set, correposndent MB is coded as skip */ - uint32_t force_to_skip : 1; - /** \brief specifies whether this macroblock should be coded as a non-skipped macroblock. */ - uint32_t force_to_nonskip : 1; - uint32_t enable_direct_bias_adjustment : 1; - uint32_t enable_motion_bias_adjustment : 1; - uint32_t ext_mv_cost_scaling_factor : 3; - uint32_t reserved0 : 24; - - uint32_t reserved1; - - uint32_t reserved2; - - uint32_t reserved3 : 16; - /** \brief when mb_size_ctrl is set, size here is used to budget accumulatively. Set to 0xFF if don't care. */ - uint32_t target_size_in_word : 8; - /** \brief specifies the max size of each MB */ - uint32_t max_size_in_word : 8; -} VAEncFEIMBControlH264; - - -/** \brief Application can use this definition as reference to allocate the buffer - * based on MaxNumPredictor returned from attribute VAConfigAttribFEIMVPredictors query. - **/ -typedef struct _VAEncFEIMVPredictorH264 { - /** \brief Reference index corresponding to the entry of RefPicList0 & RefPicList1 in VAEncSliceParameterBufferH264. - * Note that RefPicList0 & RefPicList1 needs to be the same for all slices. - * ref_idx_l0_x : index to RefPicList0; ref_idx_l1_x : index to RefPicList1; x : 0 - MaxNumPredictor. - **/ - struct { - uint8_t ref_idx_l0 : 4; - uint8_t ref_idx_l1 : 4; - } ref_idx[4]; /* index is predictor number */ - uint32_t reserved; - /** \brief MV. MaxNumPredictor must be the returned value from attribute VAConfigAttribFEIMVPredictors query. - * Even application doesn't use the maximum predictors, the VAFEIMVPredictorH264 structure size - * has to be defined as maximum so each MB can be at a fixed location. - * Note that 0x8000 must be used for correspondent intra block. - **/ - VAMotionVector mv[4]; /* MaxNumPredictor is 4 */ -} VAEncFEIMVPredictorH264; - -/** \brief FEI output */ -/** - * Motion vector output is per 4x4 block. For each 4x4 block there is a pair of MVs - * for RefPicList0 and RefPicList1 and each MV is 4 bytes including horizontal and vertical directions. - * Depending on Subblock partition, for the shape that is not 4x4, the MV is replicated - * so each 4x4 block has a pair of MVs. The 16x16 block has 32 MVs (128 bytes). - * 0x8000 is used for correspondent intra block. The 16x16 block is in raster scan order, - * within the 16x16 block, each 4x4 block MV is ordered as below in memory. - * The buffer size shall be greater than or equal to the number of 16x16 blocks multiplied by 128 bytes. - * Note that, when separate ENC and PAK is enabled, the exact layout of this buffer is needed for PAK input. - * App can reuse this buffer, or copy to a different buffer as PAK input. - * Layout is defined as Generic motion vector data structure VAMotionVector - * 16x16 Block - * ----------------------------------------- - * | 1 | 2 | 5 | 6 | - * ----------------------------------------- - * | 3 | 4 | 7 | 8 | - * ----------------------------------------- - * | 9 | 10 | 13 | 14 | - * ----------------------------------------- - * | 11 | 12 | 15 | 16 | - * ----------------------------------------- - **/ - -/** \brief VAEncFEIMBCodeH264 defines the data structure for VAEncFEIMBCodeBufferType per 16x16 MB block. - * it is output buffer of ENC and ENC_PAK modes, it's also input buffer of PAK mode. - * The 16x16 block is in raster scan order. Buffer size shall not be less than the number of 16x16 blocks - * multiplied by sizeof(VAEncFEIMBCodeH264). Note that, when separate ENC and PAK is enabled, - * the exact layout of this buffer is needed for PAK input. App can reuse this buffer, - * or copy to a different buffer as PAK input, reserved elements must not be modified when used as PAK input. - **/ -typedef struct _VAEncFEIMBCodeH264 { - //DWORD 0~2 - uint32_t reserved0[3]; - - //DWORD 3 - uint32_t inter_mb_mode : 2; - uint32_t mb_skip_flag : 1; - uint32_t reserved1 : 1; - uint32_t intra_mb_mode : 2; - uint32_t reserved2 : 1; - uint32_t field_mb_polarity_flag : 1; - uint32_t mb_type : 5; - uint32_t intra_mb_flag : 1; - uint32_t field_mb_flag : 1; - uint32_t transform8x8_flag : 1; - uint32_t reserved3 : 1; - uint32_t dc_block_coded_cr_flag : 1; - uint32_t dc_block_coded_cb_flag : 1; - uint32_t dc_block_coded_y_flag : 1; - uint32_t reserved4 : 12; - - //DWORD 4 - uint32_t horz_origin : 8; - uint32_t vert_origin : 8; - uint32_t cbp_y : 16; - - //DWORD 5 - uint32_t cbp_cb : 16; - uint32_t cbp_cr : 16; - - //DWORD 6 - uint32_t qp_prime_y : 8; - uint32_t reserved5 : 17; - uint32_t mb_skip_conv_disable : 1; - uint32_t is_last_mb : 1; - uint32_t enable_coefficient_clamp : 1; - uint32_t direct8x8_pattern : 4; - - //DWORD 7 8 and 9 - union { - /* Intra MBs */ - struct { - uint32_t luma_intra_pred_modes0 : 16; - uint32_t luma_intra_pred_modes1 : 16; - - uint32_t luma_intra_pred_modes2 : 16; - uint32_t luma_intra_pred_modes3 : 16; - - uint32_t chroma_intra_pred_mode : 2; - uint32_t intra_pred_avail_flag : 5; - uint32_t intra_pred_avail_flagF : 1; - uint32_t reserved6 : 24; - } intra_mb; - - /* Inter MBs */ - struct { - uint32_t sub_mb_shapes : 8; - uint32_t sub_mb_pred_modes : 8; - uint32_t reserved7 : 16; - - uint32_t ref_idx_l0_0 : 8; - uint32_t ref_idx_l0_1 : 8; - uint32_t ref_idx_l0_2 : 8; - uint32_t ref_idx_l0_3 : 8; - - uint32_t ref_idx_l1_0 : 8; - uint32_t ref_idx_l1_1 : 8; - uint32_t ref_idx_l1_2 : 8; - uint32_t ref_idx_l1_3 : 8; - } inter_mb; - } mb_mode; - - //DWORD 10 - uint32_t reserved8 : 16; - uint32_t target_size_in_word : 8; - uint32_t max_size_in_word : 8; - - //DWORD 11~14 - uint32_t reserved9[4]; - - //DWORD 15 - uint32_t reserved10; -} VAEncFEIMBCodeH264; // 64 bytes - -/** \brief VAEncFEIDistortionH264 defines the data structure for VAEncFEIDistortionBufferType per 16x16 MB block. - * It is output buffer of ENC and ENC_PAK modes, The 16x16 block is in raster scan order. - * Buffer size shall not be less than the number of 16x16 blocks multiple by sizeof(VAEncFEIDistortionH264). - **/ -typedef struct _VAEncFEIDistortionH264 { - /** \brief Inter-prediction-distortion associated with motion vector i (co-located with subblock_4x4_i). - * Its meaning is determined by sub-shape. It must be zero if the corresponding sub-shape is not chosen. - **/ - uint16_t inter_distortion[16]; - uint32_t best_inter_distortion : 16; - uint32_t best_intra_distortion : 16; - uint32_t colocated_mb_distortion : 16; - uint32_t reserved0 : 16; - uint32_t reserved1[2]; -} VAEncFEIDistortionH264; // 48 bytes - -/** \brief Motion Vector and Statistics frame level controls. - * VAStatsStatisticsParameterBufferType for H264 16x16 block - **/ -typedef struct _VAStatsStatisticsParameterH264 { - VAStatsStatisticsParameter stats_params; - - uint32_t frame_qp : 8; - /** \brief length of search path */ - uint32_t len_sp : 8; - /** \brief motion search method definition - * 0: default value, diamond search - * 1: full search - * 2: diamond search - **/ - uint32_t search_path : 8; - uint32_t reserved0 : 8; - - uint32_t sub_mb_part_mask : 7; - /** \brief sub pixel mode definition - * 00b: integer mode searching - * 01b: half-pel mode searching - * 10b: reserved - * 11b: quarter-pel mode searching - **/ - uint32_t sub_pel_mode : 2; - /** \brief distortion measure adjustment for inter search SAD comparison - * 00b: none - * 01b: reserved - * 10b: Haar transform adjusted - * 11b: reserved - **/ - uint32_t inter_sad : 2; - /** \brief distortion measure adjustment for intra search SAD comparison - * 00b: none - * 01b: reserved - * 10b: Haar transform adjusted - * 11b: reserved - **/ - uint32_t intra_sad : 2; - uint32_t adaptive_search : 1; - /** \brief indicate if future or/and past MV in mv_predictor buffer is valid. - * 0: MV predictor disabled - * 1: MV predictor enabled for past reference - * 2: MV predictor enabled for future reference - * 3: MV predictor enabled for both past and future references - **/ - uint32_t mv_predictor_ctrl : 3; - uint32_t mb_qp : 1; - /** \brief forward transform enable - * 0: disable - * 1: enable, needs frame_qp or mb_qp input for transform - **/ - uint32_t ft_enable : 1; - /** \brief luma intra mode partition mask - * xxxx1: luma_intra_16x16 disabled - * xxx1x: luma_intra_8x8 disabled - * xx1xx: luma_intra_4x4 disabled - * xx111: intra prediction is disabled - **/ - uint32_t intra_part_mask : 5; - uint32_t reserved1 : 8; - - /** \brief motion search window(ref_width * ref_height) */ - uint32_t ref_width : 8; - uint32_t ref_height : 8; - /** \brief predefined motion search windows. If selected, len_sp, window(ref_width * ref_eight) - * and search_path setting are ignored. - * 0: not use predefined search window - * 1: Tiny, len_sp=4, 24x24 window and diamond search - * 2: Small, len_sp=9, 28x28 window and diamond search - * 3: Diamond, len_sp=16, 48x40 window and diamond search - * 4: Large Diamond, len_sp=32, 48x40 window and diamond search - * 5: Exhaustive, len_sp=48, 48x40 window and full search - * 6: Extend Diamond, len_sp=16, 64x40 window and diamond search - * 7: Extend Large Diamond, len_sp=32, 64x40 window and diamond search - * 8: Extend Exhaustive, len_sp=48, 64x40 window and full search - **/ - uint32_t search_window : 4; - uint32_t reserved2 : 12; - - /** \brief MVOutput. When set to 1, MV output is NOT provided */ - uint32_t disable_mv_output : 1; - /** \brief StatisticsOutput. When set to 1, Statistics output is NOT provided. */ - uint32_t disable_statistics_output : 1; - /** \brief block 8x8 data enabling in statistics output */ - uint32_t enable_8x8_statistics : 1; - uint32_t reserved3 : 29; - uint32_t reserved4[2]; -} VAStatsStatisticsParameterH264; - -/** \brief VAStatsStatisticsH264. H264 Statistics buffer layout for VAStatsStatisticsBufferType - * and VAStatsStatisticsBottomFieldBufferType(for interlaced only). - * Statistics output is per 16x16 block. Data structure per 16x16 block is defined below. - * The 16x16 block is in raster scan order. The buffer size shall be greater than or equal to - * the number of 16x16 blocks multiplied by sizeof(VAStatsStatisticsH264). - **/ -typedef struct _VAStatsStatisticsH264 { - /** \brief past reference */ - uint32_t best_inter_distortion0 : 16; - uint32_t inter_mode0 : 16; - - /** \brief future reference */ - uint32_t best_inter_distortion1 : 16; - uint32_t inter_mode1 : 16; - - uint32_t best_intra_distortion : 16; - uint32_t intra_mode : 16; - - uint32_t num_non_zero_coef : 16; - uint32_t reserved0 : 16; - - uint32_t sum_coef; - - /** \brief DWORD 5 flat info **/ - uint32_t mb_is_flat : 1; - uint32_t reserved1 : 31; - - /** \brief DWORD 6 variance for block16x16**/ - uint32_t variance_16x16; - /** \brief DWORD 7 ~ 10, variance for block8x8 **/ - uint32_t variance_8x8[4]; - - /** \brief DWORD 11 pixel_average for block16x16 **/ - uint32_t pixel_average_16x16; - /** \brief DWORD 12 ~ 15, pixel_average for block8x8 **/ - uint32_t pixel_average_8x8[4]; -} VAStatsStatisticsH264; // 64 bytes - - -#ifdef __cplusplus -} -#endif - -#endif /* VA_FEI_H264_H */ diff --git a/prebuilts/aarch64/include/va/va_fei_hevc.h b/prebuilts/aarch64/include/va/va_fei_hevc.h deleted file mode 100644 index 6ba9047..0000000 --- a/prebuilts/aarch64/include/va/va_fei_hevc.h +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Copyright (c) 2007-2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_fei_hevc.h - * \brief The FEI encoding HEVC special API - */ - - -#ifndef __VA_FEI_HEVC_H__ -#define __VA_FEI_HEVC_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "va_fei.h" - -/** - * \defgroup api_fei_hevc HEVC FEI encoding API - * - * @{ - */ - -/** \brief FEI frame level control buffer for HEVC */ -typedef struct _VAEncMiscParameterFEIFrameControlHEVC { - /* one of the VAConfigAttribFEIFunctionType values */ - uint32_t function; - /** \brief CTB control input buffer. It is valid only when per_ctb_input - * is set to 1. The data in this buffer correspond to the input source. CTB is in raster scan order, - * each CTB control data structure is defined by VAEncFEICTBControlHEVC. - * Buffer size shall not be less than the number of CTBs multiplied by - * sizeof(VAEncFEICTBControlHEVC). - */ - VABufferID ctb_ctrl; - /** \brief CTB cmd per CTB data output of ENC - * it is reserved for CTB level information - * it should include CU split information and other CTB datas . - * Each CTB block has one CTB cmd data. - */ - VABufferID ctb_cmd; - /** \brief CU record data output of ENC - * it is reserved for CU level information - * it should include CU detail data. include mode,MV, reference etc. - * Each CTB block has one CU record data. - */ - VABufferID cu_record; - /** \brief distortion output of ENC or ENC_PAK. - * Each CTB has one distortion data with VAEncFEIDistortionHevc - * Buffer size shall not be less than the number of CTBs multiplied by - * sizeof(VAEncFEIDistortionHevc). - */ - VABufferID distortion; - /** \brief Qp input buffer. It is valid only when per_block_qp is set to 1. - * The data in this buffer correspond to the input source. - * One Qp per block block is in raster scan order, each Qp is a signed char (8-bit) value. - **/ - VABufferID qp; - /** \brief MV predictor. It is valid only when mv_predictor_input is set to non-zero. - * Each CTB block has one or more pair of motion vectors and the corresponding - * reference indexes as defined by VAEncFEIMVPredictorHEVC. 32x32 block is in raster scan order. - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMVPredictorHEVC). */ - VABufferID mv_predictor; - - /** \brief number of MV predictors L0 and L1. the maximum number of motion vector predictor for a 16x16, 32x32 or - * 64x64 block is four, it must not be greater than maximum supported MV predictor, - **/ - uint32_t num_mv_predictors_l0 : 16; - uint32_t num_mv_predictors_l1 : 16; - - /** \brief control parameters */ - uint32_t search_path : 8; - uint32_t len_sp : 8; - uint32_t reserved0 : 16; - - /** \brief multi pred l0/1 - * 0000: no internal MV predictor will be used - * 0001: spatial MV predictors - * 0100/1000: Reserved - **/ - uint32_t multi_pred_l0 : 4; - uint32_t multi_pred_l1 : 4; - /** \brief defines the motion vector precision, like integer/half/quarter pel. - * 00b: integer pel - * 01b: half-pel - * 10b: reserved - * 11b: quarter-pel - */ - uint32_t sub_pel_mode : 2; - uint32_t adaptive_search : 1; - /** \brief mv_predictor_input - * 000: MV predictor disabled - * 001: MV predictor enabled per 16x16 block - * 010: MV predictor enabled per 32x32 block - * 011: MV predictor enabled per 64x64 block - * 111: MV predictor enabled, block size can vary and is determined by BlockSize in motion vector predictor buffer - * 100/101/110: Reserved - **/ - uint32_t mv_predictor_input : 3; - /** \brief enables per CTB or CU qp */ - uint32_t per_block_qp : 1; - /** \brief enables the per CTB input , if 1, need ctb_ctrl to be a real surface ID*/ - uint32_t per_ctb_input : 1; - /** when this flag is set, extra distortion between current CTB and co-located CTB is provided. - * Extra distortion output has performance impact, set it only when it is needed */ - uint32_t colocated_ctb_distortion : 1; - /** brief specifies whether this CTB should be forced to split to remove Inter big LCU: do not check Inter 32x32 - * PUs. Every 32x32 LCU is split at least once. It can be used to improved performance. - * 0: ENC determined block type - * 1: Force to split - **/ - uint32_t force_lcu_split : 1; - /** \brief enables CU64x64 check */ - uint32_t enable_cu64_check : 1; - /** \brief enables CU64x64 asymmetric motion partition check */ - uint32_t enable_cu64_amp_check : 1; - /** \brief specifies if check the 64x64 merge candidate - * 0: after skip check, - * 1: only skip check for 64x64 - Default: 0. This field is used by LCU64 bi-directional. - **/ - uint32_t cu64_skip_check_only : 1; - uint32_t reserved1 : 11; - /** specifies the search region width in pixels. - * When bidirectional search is enabled, this applies to both search regions */ - uint32_t ref_width : 8; - /** specifies the reference region height in pixels. When bidirectional search is enabled, - * this applies to both search regions. */ - uint32_t ref_height : 8; - /** \brief search window similar for AVC - * defines predefined search windows. If it is selected, RefWidth, RefHeight, LenSP and SearchPath are ignored. - * 0 : not use predefined search window - * 1 : Tiny – (4 SUs) 24x24 window diamond search - * 2 : Small – (9 SUs) 28x28 window diamond search - * 3 : Diamond – (16 SUs) 48x40 window diamond search - * 4 : Large Diamond – (32 SUs) 48x40 window diamond search - * 5 : Exhaustive – 48x40 window full search - * 6 : (64 SUs) 64x64 window full search - * Note: option 1, 2, 3 and 4 are valid only when CAP parameter SearchWindow64Support is 0. - * And option 6 is valid only when SearchWindow64Support is 1.*/ - uint32_t search_window : 8; - /** \brief number of internal MV predictors for IME searches */ - uint32_t max_num_ime_search_center : 3; - /** \brief fast intra prediction enabling bit. It is used as a trade-off between speed and quality. - * The flag will be ignored if it's unsupported in the driver*/ - uint32_t fast_intra_mode : 1; - uint32_t reserved2 : 4; - - /** \brief specifies number of splits that encoder could be run concurrently - * 1: level 1, default value - * 2: level 2 - * 4: level 3 - **/ - uint32_t num_concurrent_enc_frame_partition : 8; - uint32_t reserved3 : 24; - - /** \brief max frame size control with multi passes QP setting */ - uint32_t max_frame_size; - /** \brief number of passes, every pass has different QP */ - uint32_t num_passes; - /** \brief delta QP list for every pass */ - uint8_t *delta_qp; - - uint32_t reserved4[2]; -} VAEncMiscParameterFEIFrameControlHEVC; - -/** \brief Application can use this definition as reference to allocate the buffer - * based on MaxNumPredictor returned from attribute VAConfigAttribFEIMVPredictors query. - * this buffer allocation is always based on 16x16 block even block size is indicated as 32x32 or 64x64, and buffer - * layout is always in 32x32 block raster scan order even block size is 16x16 or 64x64. If 32x32 block size is set, - * only the data in the first 16x16 block (block 0) is used for 32x32 block. If 64x64 block size is set - * MV layout is still in 32x32 raster scan order, the same as 32x32 and the first 16x16 - * block within each 32x32 block needs to have intended MV data (four 32x32 blocks will have the same MV data in the - * correspondent first 16x16 block). Data structure for each 16x16 block is defined as below (same as AVC except - * BlockSize/Reserved bits). - **/ -typedef struct _VAEncFEIMVPredictorHEVC { - /** \brief Feference index corresponding to the entry of RefPicList0 & RefPicList1 in slice header (final reference - * list). Note that RefPicList0 & RefPicList1 needs to be the same for all slices. - * Ref0xIndex – RefPicList0; Ref1xIndex – RefPicList1; x – 0 ~ MaxNumPredictor */ - struct { - uint8_t ref_idx_l0 : 4; - uint8_t ref_idx_l1 : 4; - } ref_idx[4]; /* index is predictor number */ - /** \brief Valid only when MVPredictor is set to 011 for HEVC. Only valid in the first 16x16 block. - * 00: MV predictor disabled for this 32x32 block - * 01: MV predictor enabled per 16x16 block for this 32x32 block - * 10: MV predictor enabled per 32x32 block, the rest of 16x16 block data within this 32x32 block are ignored - * 11: Reserved */ - uint32_t block_size : 2; - uint32_t reserved : 30; - - VAMotionVector mv[4]; /* MaxNumPredictor is 4 */ -} VAEncFEIMVPredictorHEVC; //40 bytes - -/** \brief FEI CTB level control data structure */ -typedef struct _VAEncFEICTBControlHEVC { - // DWORD 0 - uint32_t force_to_intra : 1; - uint32_t force_to_inter : 1; - uint32_t force_to_skip : 1; - /** \brief force all coeff to zero */ - uint32_t force_to_zero_coeff : 1; - uint32_t reserved0 : 28; - // DWORD 1 - uint32_t reserved1; - // DWORD 2 - uint32_t reserved2; - // DWORD 3 - uint32_t reserved3; -} VAEncFEICTBControlHEVC; - -/** \brief VAEncFEIDistortionHevc defines the data structure for VAEncFEIDistortionBufferType per CTB block. - * It is output buffer of ENC and ENC_PAK modes, The CTB block is in raster scan order. - * Buffer size shall not be less than the number of CTB blocks multiple by sizeof(VAEncFEIDistortionHevc). - **/ -typedef struct _VAEncFEIDistortionHevc { - /** best CTB distortion */ - uint32_t best_distortion; - /** only when colocated_ctb_distortion in VAEncMiscParameterFEIFrameControlHEVC is set */ - uint32_t colocated_ctb_distortion; -} VAEncFEIDistortionHevc; -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/prebuilts/aarch64/include/va/va_prot.h b/prebuilts/aarch64/include/va/va_prot.h deleted file mode 100644 index 5c59bb0..0000000 --- a/prebuilts/aarch64/include/va/va_prot.h +++ /dev/null @@ -1,515 +0,0 @@ -/* - * Copyright (c) 2020 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_prot.h - * \brief Protected content API. - * - * This file contains the \ref api_prot "Protected content API". - */ - -#ifndef VA_PROT_H -#define VA_PROT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_prot Protected content API - * - * @{ - * \section prolouge Prolouge - * Video streaming is ubiquitous and the support for video streaming is widely - * available across client open systems such as PCs, MACs, Chromebooks etc. and - * closed systems such as settop box, smart TVs, DVDs etc. By default, - * video streaming is not considered premium due to various constraints such as - * resolution, quality, production cost etc. but recently streaming of premium - * video(1080p+) has become norm. The streaming of premium video in open systems - * such as PCs, MACs, Chromebooks etc. makes video particularly susceptible to - * piracy (due to non-video playback usages of such systems) resulting in - * millions of dollars of loss to content creators. - * - * Digital Rights Management(DRM) has been proposed to stop piracy of premium - * video streams across a wide spectrum. There are some known open/closed DRM - * standards such as [Widevine by Google](https://www.widevine.com/), - * [PlayReady by Microsoft](https://www.microsoft.com/playready/), - * [FairPlay by Apple](https://developer.apple.com/streaming/fps/), - * [Merlin by Sony](https://www.marlin-community.com/), etc... Each DRM - * standard has its properties but all DRM standards support a common - * mechanism. This common mechanism involves cryptographical method for - * authenticating the client system, delivering bitstream and required - * cryptographic assets to client system and then cryptographically processing - * bitstream in client system. The cryptographic methods used in these steps - * are asymmetric such as RSA, DH etc. and symmetric such as AES CTR, CBC etc. - * encryption mechanisms. The authentication of client system, delivery of - * bitstream and cryptographic assets to client system is performed using - * asymmetric cryptographic mechanism while bitstream is encrypted and processed - * using symmetric cryptographic. In DRM world, authentication of client system, - * delivery of bitstream and required cryptographic assets to client system is - * loosely called provisioning and license acquisition while the processing of - * cryptographically secure bitstream is divided as video decryption/decoding, - * audio decryption/playback, video display. Besides DRM standards, Video/Audio - * bitstream encryption standard such as - * [Common Encryption Standard(CENC)](https://www.iso.org/standard/76597.html) - * provides a mechanism to normalize bitstream encryption methods across vendors - * while providing flexibility. - * - * \section DRM Pipeline - * Most DRM standards execute the following deep pipeline to playback - * contents on client systems from streaming servers - provisioning uses - * provisioning servers, licence aquisition uses license servers, video - * bitstream delivery uses content servers and decryption/decoding, audio - * bitstream delivery uses content servers and decyption/playback, - * display/playback. The system level HWDRM sequence diagram is following - - * ![HWDRM sequence diagram](https://user-images.githubusercontent.com/75039699/102427278-df284e80-3fc5-11eb-9a3e-129b5f6b567a.png) - * and HWDRM pipeline view is following - - * ![HWDRM pipeline view](https://user-images.githubusercontent.com/75039699/102427357-04b55800-3fc6-11eb-8b8c-f34fc44ec061.png) - * - * \section LibVA Protected Content APIs - * The LibVA Protected APIs are designed to enable DRM capabilities or - * facilitate isolated communicaiton with TEE. - * The VAEntrypointProtectedTEEComm is to define interfaces for Application - * to TEE direct communication to perform various TEE centric operations - * such as standalone provisioning of platform at factory or provisioning - * TEE for other usages, providing TEE capabilities etc. - * The VAEntrypointProtectedContent is to define interfaces for protected - * video playback using HWDRM. This entry point co-ordinates assets across - * TEE/GPU/Display for HWDRM playback. - * - * The difference between Protected Content and Protected TEE Communication - * is that Protected Content Entrypoint does not provide isolated entry - * point for TEE and invokes TEE only from HWDRM perspective. - * - * Protected Content Entrypoint - * The most of DRM standards execute following deep pipeline to playback - * contents on client systems from streaming servers - provisioning uses - * provisioning servers, licence aquisition uses license servers, video - * bitstream delivery uses content servers and decryption/decoding, audio - * bitstream delivery uses content servers and decyption/playback, - * display/playback. - * - * The Provisioning and License aquisition implementations are Independent - * Hardware Vendor (IHV) specific but most IHVs use some form of Trusted - * Execution Environment (TEE) to prepare client platform or system for DRM - * content playback. The provisioning operations use provisioning servers (as - * instructed in DRM standard) and client system TEE. The communication between - * provisioning servers and client system TEE uses asymmetic cryptographic - * mechanism. This step provides a way to establish root-of-trust between - * client system and streaming servers. Once root-of-trust is established then - * client system requests for license aquisition for a particular streaming - * title. The license aquisition involves communication between licensing - * servers and TEE using asymmetic cryptographic mechanism. At end of this step, - * client system TEE has required assets to decrypt/decode. Although these - * communication does not direcly involve video aspect of GPU but **facilitate - * GPU required assets to playback premium contents**. - * - * To support DRM standard requirements in playback pipeline, OSes and HWs - * incorporate various methods to protect full playback pipeline. These - * methods of protection could be SW based or HW based. The SW based protection - * mechanism of DRMs is called SWDRM while HW based protection mechanism is - * called HWDRM. There is no previous support in LibVA to support either DRM - * mechanism. - * - * For DRM capabilities, APIs inolve creation of protected session to - * communicate with TEE and then using these protected sessions to process - * video/audio data. The philophashy behind these API is to leverage existing - * LibVA infrastructure as much as possible. - * - * Note: TEE could be any secure HW device such as ME-FW or FPGA Secure - * Enclave or NPU Secure Enclave. There are 2 concepts here – TEE Type such - * as ME-FW or FPGA or NPU; TEE Type Client such as for AMT or HDCP or - * something else etc. - * - * \section description Detailed Description - * The Protected content API provides a general mechanism for opening - * protected session with TEE and if required then \ref priming GPU/Display. - * The behavior of protected session API depends on parameterization/ - * configuration of protected session. Just for TEE tasks, protected - * session is parameterized/configured as TEE Communication while for - * HWDRM, protected session is parameterized/confgured as Protected - * Content. - * - * TEE Communication Entrypoint - * With TEE Communication parameterization/configuration, client - * executes TEE workloads in TEE with TEE Communication protected - * session. - * - * Protected Content Entrypoint - * With Protected Content parameterization/configuration, client - * executes HWDRM playback workloads HW accelerating protected video - * content decryption/decoding with protected content session. - * - * Before calling vaCreateProtectedSession, VAConfigID is obtained using - * existing libva mechanism to determine configuration parameters of - * protected session. The VAConfigID is determined in this way so that - * Protected Session implementation aligns with existing libva implementation. - * After obtaining VAConfigID, Protected Session needs to be created but - * note this is a session and not a context. Refer VAProtectedSessionID - * for more details. - * - * Note:- Protected session represents session object that has all security - * information needed for Secure Enclave to operate certain operations. - * - * \subsection priming Priming - * Priming is used to refer various types of initializations. For example, - * if license acquisition is being performed then priming means that TEE is - * already provisioned aka TEE has some sort of "cryptographic" whitelist of - * servers that TEE will use to do license acquisition for video playback. If - * HWDRM video playback is being performed then priming means that HWDRM - * eco-system TEE/GPU/Display has proper keys to do proper video playback etc. - * - * Protected content API uses the following paradigm for protected content - * session: - * - \ref api_pc_caps - * - \ref api_pc_setup - * - \ref api_pc_exec - * - \ref api_pc_attach - * - * \subsection api_pc_caps Query for supported cipher mode, block size, mode - * - * Checking whether protected content is supported can be performed with - * vaQueryConfigEntrypoints() and the profile argument set to - * #VAProfileProtected. If protected content is supported, then the list of - * returned entry-points will include #VAEntrypointProtectedContent - * - * \code - * VAEntrypoint *entrypoints; - * int i, num_entrypoints, supportsProtectedContent = 0; - * - * num_entrypoints = vaMaxNumEntrypoints(); - * entrypoints = malloc(num_entrypoints * sizeof(entrypoints[0]); - * vaQueryConfigEntrypoints(va_dpy, VAProfileProtected, entrypoints, - * &num_entrypoints); - * - * for (i = 0; !supportsProtectedContent && i < num_entrypoints; i++) { - * if (entrypoints[i] == VAEntrypointProtectedContent) - * supportsProtectedContent = 1; - * } - * \endcode - * - * Then, the vaGetConfigAttributes() function is used to query the protected - * session capabilities. - * - * \code - * VAConfigAttrib attribs; - * attribs[0].type = VAConfigAttribProtectedContentCipherAlgorithm; - * attribs[1].type = VAConfigAttribProtectedContentCipherBlockSize; - * attribs[2].type = VAConfigAttribProtectedContentCipherMode; - * attribs[3].type = VAConfigAttribProtectedContentCipherSampleType; - * attribs[4].type = VAConfigAttribProtectedContentUsage; - * vaGetConfigAttributes(va_dpy, VAProfileProtected, - * VAEntrypointProtectedContent, attribs, 5); - * if ((attribs[1].value & VA_PC_CIPHER_AES) == 0) { - * // not find desired cipher algorithm - * assert(0); - * } - * if ((attribs[2].value & VA_PC_BLOCK_SIZE_128) == 0) { - * // not find desired block size - * assert(0); - * } - * if ((attribs[3].value & VA_PC_CIPHER_MODE_CBC) == 0) { - * // not find desired counter mode - * assert(0); - * } - * if ((attribs[4].value & VA_PC_SAMPLE_TYPE_SUBSAMPLE) == 0) { - * // not find desired sample type - * assert(0); - * } - * if ((attribs[5].value & VA_PC_USAGE_WIDEVINE) == 0) { - * // not find desired usage - * assert(0); - * } - * \endcode - * - * \subsection api_pc_setup Set up a protected content session - * - * TEE Communication Entrypoint - * The protected content session provides a TEE session that is used to extract - * TEE information. This information could be used to peform TEE operations. - * - * Protected Content Entrypoint - * The protected content session can be attached to VA decode/encode/vp context - * to do decryption/protection in the pipeline. - * Before creating a protected content session, it needs to create a config - * first via vaCreateConfig(). Then using this config id to create a protected - * content session via vaCreateProtectedSession(). - * - * The general control flow is demonstrated by the following pseudo-code: - * \code - * // Create config - * VAConfigID config_id; - * - * attribs[0].value = VA_PC_CIPHER_AES; - * attribs[1].value = VA_PC_BLOCK_SIZE_128; - * attribs[2].value = VA_PC_CIPHER_MODE_CBC; - * attribs[3].value = VA_PC_SAMPLE_TYPE_SUBSAMPLE; - * attribs[4].value = VA_PC_USAGE_WIDEVINE; - * va_status = vaCreateConfig(va_dpy, VAProfileProtected, - * VAEntrypointProtectedContent, attribs, 5, &config_id); - * CHECK_VASTATUS(va_status, "vaCreateConfig"); - * \endcode - * - * Once the config is set up, we can create protected content session via - vaCreateProtectedSession(). - * \code - * // Create a protected session - * VAProtectedSessionID crypto_session; - * - * va_status = vaCreateProtectedSession(va_dpy, config_id, &crypto_session); - * CHECK_VASTATUS(va_status, "vaCreateProtectedSession"); - * \endcode - * - * \subsection api_pc_exec TEE communication via vaProtectedSessionExecute() - * - * TEE Communication Entrypoint - * App needs to communicate with TEE to get TEE information or \ref priming - * "prime" TEE with information that will be utilized for future TEE - * operations/tasks. - * - * Protected Content Entrypoint - * Before starting decryption/encryption operation in GPU, app may need to - * communicate with TEE to get encrypted assets for \ref priming HWDRM pipeline - * for decryption. App need to call vaProtectedSessionExecute() to get this - * asset. The following pseudo-code demonstrates getting session assets via - * vaProtectedSessionExecute() as an example. - * - * In this example, the vaCreateBuffer is called with exec_buffer mainly becasue TEE - * Communication Entrypoint buffers are CPU bound and buffer size is small enough to - * have extra copy operation without impacting performance. - * - * \code - * uint32_t app_id = 0xFF; - * VABufferID buffer; - * VAProtectedSessionExecuteBuffer exec_buff = {0}; - * - * exec_buff.function_id = GET_SESSION_ID; - * exec_buff.input.data = nullptr; - * exec_buff.input.data_size = 0; - * exec_buff.output.data = &app_id; - * exec_buff.output.max_data_size = sizeof(app_id); - * va_status = vaCreateBuffer( - * va_dpy, - * crypto_session, - * (VABufferType) VAProtectedSessionExecuteBufferType, - * sizeof(exec_buff), - * 1, - * &exec_buff, - * &buffer); - * - * va_status = vaProtectedSessionExecute(va_dpy, crypto_session, buffer); - * - * vaDestroyBuffer(va_dpy, buffer); - * \endcode - * - * \subsection api_pc_attach Attach/Detach protected content session to the VA - * context which want to enable/disable decryption/protection - * - * Protected content session is attached to VA decode/encode/vp context to - * enable protected decoding/encoding/video processing per frame or entire - * stream. If protected session attached per frame then application has 2 - * options for decoding/encoding skip processing i.e. accomodating clear - * frames - 1. Application could do detach after each frame is processed - * to process clear frame 2. Application could remains attached to decode/ - * encode session but specify enryption byte length to 0. - * The video processing does not has option #2 mainly because API does - * not provide skip processing. - * - * \code - * vaAttachProtectedSession(va_dpy, decode_ctx, crypto_session); - * foreach (iteration) { - * vaBeginPicture(va_dpy, decode_ctx, surface); - * ... - * vaRenderPicture(va_dpy, decode_ctx, &buf_id1, 1); - * vaRenderPicture(va_dpy, decode_ctx, &buf_id2, 1); - * // Buffer holding encryption parameters, i.e. VAEncryptionParameterBufferType buffer - * vaRenderPicture(va_dpy, decode_ctx, &buf_id_enc_param, 1); - * ... - * vaEndPicture(va_dpy, decode_ctx); - * } - * vaDetachProtectedSession(va_dpy, decode_ctx); - * \endcode - * - * or it could be frame-by-frame attaching/detaching as following: - * - * \code - * foreach (iteration) { - * if (encrypted) - * vaAttachProtectedSession(va_dpy, decode_ctx, crypto_session); - - * vaBeginPicture(va_dpy, decode_ctx, surface); - * ... - * vaRenderPicture(va_dpy, decode_ctx, &buf_id1, 1); - * vaRenderPicture(va_dpy, decode_ctx, &buf_id2, 1); - * // Buffer holding encryption parameters, i.e. VAEncryptionParameterBufferType buffer - * vaRenderPicture(va_dpy, decode_ctx, &buf_id_enc_param, 1); - * ... - * vaEndPicture(va_dpy, decode_ctx); - * - * if (encrypted) - * vaDetachProtectedSession(va_dpy, decode_ctx); - - * // check encrypted variable for next frame - * } - * \endcode - */ - -/** - * ProtectedSessions and Contexts - * - * According to #VAContextID, Context represents a "virtual" video decode, - * encode or video processing pipeline. Surfaces are render targets for a given - * context. The data in the surfaces are not accessible to the client except if - * derived image is supported and the internal data format of the surface is - * implementation specific. Application can create a video decode, encode or - * processing context which represents a "virtualized" hardware device. - * - * Since Protected Session does not virtualize any HW device or build any - * pipeline but rather accessorize existing virtualized HW device or pipeline - * to operate in protected mode so we decided to create separate function. - * Beside this, a virtualized HW device or pipeline could own several protected - * sessions and operate in those protected modes without ever re-creating - * virtualization of HW device or re-building HW pipeline (an unique protected - * environment multiplexing capability in Intel HW). - * - * The returned protected_session represents a notion of Host and TEE clients - * while representing protection status in GPU and Display. - * - * Both contexts and protected sessions are identified by unique IDs and its - * implementation specific internals are kept opaque to the clients - */ -typedef VAGenericID VAProtectedSessionID; - -/** \brief TEE Execucte Function ID. */ -typedef enum _VA_TEE_EXEC_FUNCTION_ID { - VA_TEE_EXECUTE_FUNCTION_ID_PASS_THROUGH = 0x00000001, - VA_TEE_EXECUTE_FUNCTION_ID_GET_FIRMWARE_VERSION = 0x00000002, - -} VA_TEE_EXECUTE_FUNCTION_ID; - -/** \brief Input/Output buffer of VAProtectedSessionExecuteBuffer */ -typedef struct _VAProtectedSessionBuffer { - /* - * This is used when this buffer refer to output buffer. The maximum size of - * data that the driver can return in the output buffer. It is not used for - * input buffer. - */ - uint32_t max_data_size; - /* - * If it is used for input buffer, it is the size of the input data. If it is - * used for output buffer, it is the returns size of the output data written - * by the driver. - */ - uint32_t data_size; - /* - * data pointer of this buffer - */ - void *data; - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProtectedSessionBuffer; - -/** \brief Buffer for vaProtectedSessionExecute() */ -typedef struct _VAProtectedSessionExecuteBuffer { - /** \brief Specify the function to execute. It is IHV's implementation - * specific */ - uint32_t function_id; - /** \brief Input buffer */ - VAProtectedSessionBuffer input; - /** \brief Output buffer */ - VAProtectedSessionBuffer output; - /** \brief Return the result of this function. The status result is IHV's - * implementation specific */ - uint32_t status; - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProtectedSessionExecuteBuffer; - -/** - * \brief Create a protected session - * - * Create a protected session - * - * @param[in] dpy the VA display - * @param[in] config_id configuration for the protected session - * @param[out] protected_session created protected session id upon return - */ -VAStatus vaCreateProtectedSession(VADisplay dpy, VAConfigID config_id, - VAProtectedSessionID *protected_session); - -/** - * \brief Destroy a protected session - * - * Destroy a protected session - * - * @param[in] dpy the VA display - * @param[in] protected_session protected session to be destroyed - */ -VAStatus vaDestroyProtectedSession(VADisplay dpy, - VAProtectedSessionID protected_session); - -/** - * \brief Attach a protected content session to VA context - * - * Attach a protected content session to the context to enable - * decryption/protection - * - * @param[in] dpy the VA display - * @param[in] id the VA decode/encode/vp context - * @param[in] protected_session the protected session to attach - */ -VAStatus vaAttachProtectedSession(VADisplay dpy, VAGenericID id, - VAProtectedSessionID protected_session); - -/** - * \brief Detach the protected content session from the VA context - * - * Detach protected content session of the context to disable - * decryption/protection - * - * @param[in] dpy the VA display - * @param[in] id TEE client id to be detached - */ -VAStatus vaDetachProtectedSession(VADisplay dpy, VAGenericID id); - -/** - * \brief Execute provides a general mechanism for TEE client tasks execution. - * - * vaProtectedSessionExecute provides a mechanism for TEE clients to execute - * specific tasks. The implementation may differ between IHVs. - * This is a synchronous API. - * - * @param[in] dpy the VA display - * @param[in] protected_session the protected session - * @param[in,out] buf_id the VA buffer - */ -VAStatus vaProtectedSessionExecute(VADisplay dpy, - VAProtectedSessionID protected_session, - VABufferID buf_id); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_PROT_H */ diff --git a/prebuilts/aarch64/include/va/va_str.h b/prebuilts/aarch64/include/va/va_str.h deleted file mode 100644 index 1bfe583..0000000 --- a/prebuilts/aarch64/include/va/va_str.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - - -#ifndef _VA_STR_H_ -#define _VA_STR_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -const char *vaProfileStr(VAProfile profile); - -const char *vaEntrypointStr(VAEntrypoint entrypoint); - -const char *vaConfigAttribTypeStr(VAConfigAttribType configAttribType); - -const char *vaBufferTypeStr(VABufferType bufferType); - -const char *vaStatusStr(VAStatus status); - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_STR_H_ */ diff --git a/prebuilts/aarch64/include/va/va_tpi.h b/prebuilts/aarch64/include/va/va_tpi.h deleted file mode 100644 index fb165ad..0000000 --- a/prebuilts/aarch64/include/va/va_tpi.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef _VA_TPI_H_ -#define _VA_TPI_H_ - -#warning The APIs / data structures included in this file are deprecated - -#endif diff --git a/prebuilts/aarch64/include/va/va_version.h b/prebuilts/aarch64/include/va/va_version.h deleted file mode 100644 index ab2ec18..0000000 --- a/prebuilts/aarch64/include/va/va_version.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_VERSION_H -#define VA_VERSION_H - -/** - * VA_MAJOR_VERSION: - * - * The major version of VA-API (1, if %VA_VERSION is 1.2.3) - */ -#define VA_MAJOR_VERSION 1 - -/** - * VA_MINOR_VERSION: - * - * The minor version of VA-API (2, if %VA_VERSION is 1.2.3) - */ -#define VA_MINOR_VERSION 15 - -/** - * VA_MICRO_VERSION: - * - * The micro version of VA-API (3, if %VA_VERSION is 1.2.3) - */ -#define VA_MICRO_VERSION 0 - -/** - * VA_VERSION: - * - * The full version of VA-API, like 1.2.3 - */ -#define VA_VERSION 1.15.0 - -/** - * VA_VERSION_S: - * - * The full version of VA-API, in string form (suited for string - * concatenation) - */ -#define VA_VERSION_S "1.15.0" - -/** - * VA_VERSION_HEX: - * - * Numerically encoded version of VA-API, like 0x010203 - */ -#define VA_VERSION_HEX ((VA_MAJOR_VERSION << 24) | \ - (VA_MINOR_VERSION << 16) | \ - (VA_MICRO_VERSION << 8)) - -/** - * VA_CHECK_VERSION: - * @major: major version, like 1 in 1.2.3 - * @minor: minor version, like 2 in 1.2.3 - * @micro: micro version, like 3 in 1.2.3 - * - * Evaluates to %TRUE if the version of VA-API is greater than - * @major, @minor and @micro - */ -#define VA_CHECK_VERSION(major,minor,micro) \ - (VA_MAJOR_VERSION > (major) || \ - (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION > (minor)) || \ - (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION == (minor) && VA_MICRO_VERSION >= (micro))) - -#endif /* VA_VERSION_H */ diff --git a/prebuilts/aarch64/include/va/va_vpp.h b/prebuilts/aarch64/include/va/va_vpp.h deleted file mode 100644 index 193dc5f..0000000 --- a/prebuilts/aarch64/include/va/va_vpp.h +++ /dev/null @@ -1,1590 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_vpp.h - * \brief The video processing API - * - * This file contains the \ref api_vpp "Video processing API". - */ - -#ifndef VA_VPP_H -#define VA_VPP_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_vpp Video processing API - * - * @{ - * - * The video processing API uses the same paradigm as for decoding: - * - Query for supported filters; - * - Set up a video processing pipeline; - * - Send video processing parameters through VA buffers. - * - * \section api_vpp_caps Query for supported filters - * - * Checking whether video processing is supported can be performed - * with vaQueryConfigEntrypoints() and the profile argument set to - * #VAProfileNone. If video processing is supported, then the list of - * returned entry-points will include #VAEntrypointVideoProc. - * - * \code - * VAEntrypoint *entrypoints; - * int i, num_entrypoints, supportsVideoProcessing = 0; - * - * num_entrypoints = vaMaxNumEntrypoints(); - * entrypoints = malloc(num_entrypoints * sizeof(entrypoints[0]); - * vaQueryConfigEntrypoints(va_dpy, VAProfileNone, - * entrypoints, &num_entrypoints); - * - * for (i = 0; !supportsVideoProcessing && i < num_entrypoints; i++) { - * if (entrypoints[i] == VAEntrypointVideoProc) - * supportsVideoProcessing = 1; - * } - * \endcode - * - * Then, the vaQueryVideoProcFilters() function is used to query the - * list of video processing filters. - * - * \code - * VAProcFilterType filters[VAProcFilterCount]; - * unsigned int num_filters = VAProcFilterCount; - * - * // num_filters shall be initialized to the length of the array - * vaQueryVideoProcFilters(va_dpy, vpp_ctx, &filters, &num_filters); - * \endcode - * - * Finally, individual filter capabilities can be checked with - * vaQueryVideoProcFilterCaps(). - * - * \code - * VAProcFilterCap denoise_caps; - * unsigned int num_denoise_caps = 1; - * vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, - * VAProcFilterNoiseReduction, - * &denoise_caps, &num_denoise_caps - * ); - * - * VAProcFilterCapDeinterlacing deinterlacing_caps[VAProcDeinterlacingCount]; - * unsigned int num_deinterlacing_caps = VAProcDeinterlacingCount; - * vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, - * VAProcFilterDeinterlacing, - * &deinterlacing_caps, &num_deinterlacing_caps - * ); - * \endcode - * - * \section api_vpp_setup Set up a video processing pipeline - * - * A video processing pipeline buffer is created for each source - * surface we want to process. However, buffers holding filter - * parameters can be created once and for all. Rationale is to avoid - * multiple creation/destruction chains of filter buffers and also - * because filter parameters generally won't change frame after - * frame. e.g. this makes it possible to implement a checkerboard of - * videos where the same filters are applied to each video source. - * - * The general control flow is demonstrated by the following pseudo-code: - * \code - * // Create filters - * VABufferID denoise_filter, deint_filter; - * VABufferID filter_bufs[VAProcFilterCount]; - * unsigned int num_filter_bufs; - * - * for (i = 0; i < num_filters; i++) { - * switch (filters[i]) { - * case VAProcFilterNoiseReduction: { // Noise reduction filter - * VAProcFilterParameterBuffer denoise; - * denoise.type = VAProcFilterNoiseReduction; - * denoise.value = 0.5; - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcFilterParameterBufferType, sizeof(denoise), 1, - * &denoise, &denoise_filter - * ); - * filter_bufs[num_filter_bufs++] = denoise_filter; - * break; - * } - * - * case VAProcFilterDeinterlacing: // Motion-adaptive deinterlacing - * for (j = 0; j < num_deinterlacing_caps; j++) { - * VAProcFilterCapDeinterlacing * const cap = &deinterlacing_caps[j]; - * if (cap->type != VAProcDeinterlacingMotionAdaptive) - * continue; - * - * VAProcFilterParameterBufferDeinterlacing deint; - * deint.type = VAProcFilterDeinterlacing; - * deint.algorithm = VAProcDeinterlacingMotionAdaptive; - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcFilterParameterBufferType, sizeof(deint), 1, - * &deint, &deint_filter - * ); - * filter_bufs[num_filter_bufs++] = deint_filter; - * } - * } - * } - * \endcode - * - * Once the video processing pipeline is set up, the caller shall check the - * implied capabilities and requirements with vaQueryVideoProcPipelineCaps(). - * This function can be used to validate the number of reference frames are - * needed by the specified deinterlacing algorithm, the supported color - * primaries, etc. - * \code - * // Create filters - * VAProcPipelineCaps pipeline_caps; - * VASurfaceID *forward_references; - * unsigned int num_forward_references; - * VASurfaceID *backward_references; - * unsigned int num_backward_references; - * VAProcColorStandardType in_color_standards[VAProcColorStandardCount]; - * VAProcColorStandardType out_color_standards[VAProcColorStandardCount]; - * - * pipeline_caps.input_color_standards = NULL; - * pipeline_caps.num_input_color_standards = ARRAY_ELEMS(in_color_standards); - * pipeline_caps.output_color_standards = NULL; - * pipeline_caps.num_output_color_standards = ARRAY_ELEMS(out_color_standards); - * vaQueryVideoProcPipelineCaps(va_dpy, vpp_ctx, - * filter_bufs, num_filter_bufs, - * &pipeline_caps - * ); - * - * num_forward_references = pipeline_caps.num_forward_references; - * forward_references = - * malloc(num__forward_references * sizeof(VASurfaceID)); - * num_backward_references = pipeline_caps.num_backward_references; - * backward_references = - * malloc(num_backward_references * sizeof(VASurfaceID)); - * \endcode - * - * \section api_vpp_submit Send video processing parameters through VA buffers - * - * Video processing pipeline parameters are submitted for each source - * surface to process. Video filter parameters can also change, per-surface. - * e.g. the list of reference frames used for deinterlacing. - * - * \code - * foreach (iteration) { - * vaBeginPicture(va_dpy, vpp_ctx, vpp_surface); - * foreach (surface) { - * VARectangle output_region; - * VABufferID pipeline_buf; - * VAProcPipelineParameterBuffer *pipeline_param; - * - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcPipelineParameterBuffer, sizeof(*pipeline_param), 1, - * NULL, &pipeline_buf - * ); - * - * // Setup output region for this surface - * // e.g. upper left corner for the first surface - * output_region.x = BORDER; - * output_region.y = BORDER; - * output_region.width = - * (vpp_surface_width - (Nx_surfaces + 1) * BORDER) / Nx_surfaces; - * output_region.height = - * (vpp_surface_height - (Ny_surfaces + 1) * BORDER) / Ny_surfaces; - * - * vaMapBuffer(va_dpy, pipeline_buf, &pipeline_param); - * pipeline_param->surface = surface; - * pipeline_param->surface_region = NULL; - * pipeline_param->output_region = &output_region; - * pipeline_param->output_background_color = 0; - * if (first surface to render) - * pipeline_param->output_background_color = 0xff000000; // black - * pipeline_param->filter_flags = VA_FILTER_SCALING_HQ; - * pipeline_param->filters = filter_bufs; - * pipeline_param->num_filters = num_filter_bufs; - * vaUnmapBuffer(va_dpy, pipeline_buf); - * - * // Update reference frames for deinterlacing, if necessary - * pipeline_param->forward_references = forward_references; - * pipeline_param->num_forward_references = num_forward_references_used; - * pipeline_param->backward_references = backward_references; - * pipeline_param->num_backward_references = num_bacward_references_used; - * - * // Apply filters - * vaRenderPicture(va_dpy, vpp_ctx, &pipeline_buf, 1); - * } - * vaEndPicture(va_dpy, vpp_ctx); - * } - * \endcode - */ - -/** \brief Video filter types. */ -typedef enum _VAProcFilterType { - VAProcFilterNone = 0, - /** \brief Noise reduction filter. */ - VAProcFilterNoiseReduction, - /** \brief Deinterlacing filter. */ - VAProcFilterDeinterlacing, - /** \brief Sharpening filter. */ - VAProcFilterSharpening, - /** \brief Color balance parameters. */ - VAProcFilterColorBalance, - /** \brief Skin Tone Enhancement. */ - VAProcFilterSkinToneEnhancement, - /** \brief Total Color Correction. */ - VAProcFilterTotalColorCorrection, - /** \brief Human Vision System(HVS) Noise reduction filter. */ - VAProcFilterHVSNoiseReduction, - /** \brief High Dynamic Range Tone Mapping. */ - VAProcFilterHighDynamicRangeToneMapping, - /** \brief Three-Dimensional Look Up Table (3DLUT). */ - VAProcFilter3DLUT, - /** \brief Number of video filters. */ - VAProcFilterCount -} VAProcFilterType; - -/** \brief Deinterlacing types. */ -typedef enum _VAProcDeinterlacingType { - VAProcDeinterlacingNone = 0, - /** \brief Bob deinterlacing algorithm. */ - VAProcDeinterlacingBob, - /** \brief Weave deinterlacing algorithm. */ - VAProcDeinterlacingWeave, - /** \brief Motion adaptive deinterlacing algorithm. */ - VAProcDeinterlacingMotionAdaptive, - /** \brief Motion compensated deinterlacing algorithm. */ - VAProcDeinterlacingMotionCompensated, - /** \brief Number of deinterlacing algorithms. */ - VAProcDeinterlacingCount -} VAProcDeinterlacingType; - -/** \brief Color balance types. */ -typedef enum _VAProcColorBalanceType { - VAProcColorBalanceNone = 0, - /** \brief Hue. */ - VAProcColorBalanceHue, - /** \brief Saturation. */ - VAProcColorBalanceSaturation, - /** \brief Brightness. */ - VAProcColorBalanceBrightness, - /** \brief Contrast. */ - VAProcColorBalanceContrast, - /** \brief Automatically adjusted saturation. */ - VAProcColorBalanceAutoSaturation, - /** \brief Automatically adjusted brightness. */ - VAProcColorBalanceAutoBrightness, - /** \brief Automatically adjusted contrast. */ - VAProcColorBalanceAutoContrast, - /** \brief Number of color balance attributes. */ - VAProcColorBalanceCount -} VAProcColorBalanceType; - -/** \brief Color standard types. - * - * These define a set of color properties corresponding to particular - * video standards. - * - * Where matrix_coefficients is specified, it applies only to YUV data - - * RGB data always use the identity matrix (matrix_coefficients = 0). - */ -typedef enum _VAProcColorStandardType { - VAProcColorStandardNone = 0, - /** \brief ITU-R BT.601. - * - * It is unspecified whether this will use 525-line or 625-line values; - * specify the colour primaries and matrix coefficients explicitly if - * it is known which one is required. - * - * Equivalent to: - * colour_primaries = 5 or 6 - * transfer_characteristics = 6 - * matrix_coefficients = 5 or 6 - */ - VAProcColorStandardBT601, - /** \brief ITU-R BT.709. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 1 - * matrix_coefficients = 1 - */ - VAProcColorStandardBT709, - /** \brief ITU-R BT.470-2 System M. - * - * Equivalent to: - * colour_primaries = 4 - * transfer_characteristics = 4 - * matrix_coefficients = 4 - */ - VAProcColorStandardBT470M, - /** \brief ITU-R BT.470-2 System B, G. - * - * Equivalent to: - * colour_primaries = 5 - * transfer_characteristics = 5 - * matrix_coefficients = 5 - */ - VAProcColorStandardBT470BG, - /** \brief SMPTE-170M. - * - * Equivalent to: - * colour_primaries = 6 - * transfer_characteristics = 6 - * matrix_coefficients = 6 - */ - VAProcColorStandardSMPTE170M, - /** \brief SMPTE-240M. - * - * Equivalent to: - * colour_primaries = 7 - * transfer_characteristics = 7 - * matrix_coefficients = 7 - */ - VAProcColorStandardSMPTE240M, - /** \brief Generic film. - * - * Equivalent to: - * colour_primaries = 8 - * transfer_characteristics = 1 - * matrix_coefficients = 1 - */ - VAProcColorStandardGenericFilm, - /** \brief sRGB. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 13 - * matrix_coefficients = 0 - */ - VAProcColorStandardSRGB, - /** \brief stRGB. - * - * ??? - */ - VAProcColorStandardSTRGB, - /** \brief xvYCC601. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 11 - * matrix_coefficients = 5 - */ - VAProcColorStandardXVYCC601, - /** \brief xvYCC709. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 11 - * matrix_coefficients = 1 - */ - VAProcColorStandardXVYCC709, - /** \brief ITU-R BT.2020. - * - * Equivalent to: - * colour_primaries = 9 - * transfer_characteristics = 14 - * matrix_coefficients = 9 - */ - VAProcColorStandardBT2020, - /** \brief Explicitly specified color properties. - * - * Use corresponding color properties section. - * For example, HDR10 content: - * colour_primaries = 9 (BT2020) - * transfer_characteristics = 16 (SMPTE ST2084) - * matrix_coefficients = 9 - */ - VAProcColorStandardExplicit, - /** \brief Number of color standards. */ - VAProcColorStandardCount -} VAProcColorStandardType; - -/** \brief Total color correction types. */ -typedef enum _VAProcTotalColorCorrectionType { - VAProcTotalColorCorrectionNone = 0, - /** \brief Red Saturation. */ - VAProcTotalColorCorrectionRed, - /** \brief Green Saturation. */ - VAProcTotalColorCorrectionGreen, - /** \brief Blue Saturation. */ - VAProcTotalColorCorrectionBlue, - /** \brief Cyan Saturation. */ - VAProcTotalColorCorrectionCyan, - /** \brief Magenta Saturation. */ - VAProcTotalColorCorrectionMagenta, - /** \brief Yellow Saturation. */ - VAProcTotalColorCorrectionYellow, - /** \brief Number of color correction attributes. */ - VAProcTotalColorCorrectionCount -} VAProcTotalColorCorrectionType; - -/** \brief High Dynamic Range Metadata types. */ -typedef enum _VAProcHighDynamicRangeMetadataType { - VAProcHighDynamicRangeMetadataNone = 0, - /** \brief Metadata type for HDR10. */ - VAProcHighDynamicRangeMetadataHDR10, - /** \brief Number of Metadata type. */ - VAProcHighDynamicRangeMetadataTypeCount -} VAProcHighDynamicRangeMetadataType; - -/** \brief Video Processing Mode. */ -typedef enum _VAProcMode { - /** - * \brief Default Mode. - * In this mode, pipeline is decided in driver to the appropriate mode. - * e.g. a mode that's a balance between power and performance. - */ - VAProcDefaultMode = 0, - /** - * \brief Power Saving Mode. - * In this mode, pipeline is optimized for power saving. - */ - VAProcPowerSavingMode, - /** - * \brief Performance Mode. - * In this mode, pipeline is optimized for performance. - */ - VAProcPerformanceMode -} VAProcMode; - -/** @name Video blending flags */ -/**@{*/ -/** \brief Global alpha blending. */ -#define VA_BLEND_GLOBAL_ALPHA 0x0001 -/** \brief Premultiplied alpha blending (RGBA surfaces only). */ -#define VA_BLEND_PREMULTIPLIED_ALPHA 0x0002 -/** \brief Luma color key (YUV surfaces only). */ -#define VA_BLEND_LUMA_KEY 0x0010 -/**@}*/ - -/** \brief Video blending state definition. */ -typedef struct _VABlendState { - /** \brief Video blending flags. */ - unsigned int flags; - /** - * \brief Global alpha value. - * - * Valid if \flags has VA_BLEND_GLOBAL_ALPHA. - * Valid range is 0.0 to 1.0 inclusive. - */ - float global_alpha; - /** - * \brief Minimum luma value. - * - * Valid if \flags has VA_BLEND_LUMA_KEY. - * Valid range is 0.0 to 1.0 inclusive. - * \ref min_luma shall be set to a sensible value lower than \ref max_luma. - */ - float min_luma; - /** - * \brief Maximum luma value. - * - * Valid if \flags has VA_BLEND_LUMA_KEY. - * Valid range is 0.0 to 1.0 inclusive. - * \ref max_luma shall be set to a sensible value larger than \ref min_luma. - */ - float max_luma; -} VABlendState; - -/** @name Video pipeline flags */ -/**@{*/ -/** \brief Specifies whether to apply subpictures when processing a surface. */ -#define VA_PROC_PIPELINE_SUBPICTURES 0x00000001 -/** - * \brief Specifies whether to apply power or performance - * optimizations to a pipeline. - * - * When processing several surfaces, it may be necessary to prioritize - * more certain pipelines than others. This flag is only a hint to the - * video processor so that it can omit certain filters to save power - * for example. Typically, this flag could be used with video surfaces - * decoded from a secondary bitstream. - */ -#define VA_PROC_PIPELINE_FAST 0x00000002 -/**@}*/ - -/** @name Video filter flags */ -/**@{*/ -/** \brief Specifies whether the filter shall be present in the pipeline. */ -#define VA_PROC_FILTER_MANDATORY 0x00000001 -/**@}*/ - -/** @name Pipeline end flags */ -/**@{*/ -/** \brief Specifies the pipeline is the last. */ -#define VA_PIPELINE_FLAG_END 0x00000004 -/**@}*/ - -/** @name Chroma Siting flag */ -/**@{*/ -/** vertical chroma sitting take bit 0-1, horizontal chroma sitting take bit 2-3 - * vertical chromma siting | horizontal chroma sitting to be chroma sitting */ -#define VA_CHROMA_SITING_UNKNOWN 0x00 -/** \brief Chroma samples are co-sited vertically on the top with the luma samples. */ -#define VA_CHROMA_SITING_VERTICAL_TOP 0x01 -/** \brief Chroma samples are not co-sited vertically with the luma samples. */ -#define VA_CHROMA_SITING_VERTICAL_CENTER 0x02 -/** \brief Chroma samples are co-sited vertically on the bottom with the luma samples. */ -#define VA_CHROMA_SITING_VERTICAL_BOTTOM 0x03 -/** \brief Chroma samples are co-sited horizontally on the left with the luma samples. */ -#define VA_CHROMA_SITING_HORIZONTAL_LEFT 0x04 -/** \brief Chroma samples are not co-sited horizontally with the luma samples. */ -#define VA_CHROMA_SITING_HORIZONTAL_CENTER 0x08 -/**@}*/ - -/** - * This is to indicate that the color-space conversion uses full range or reduced range. - * VA_SOURCE_RANGE_FULL(Full range): Y/Cb/Cr is in [0, 255]. It is mainly used - * for JPEG/JFIF formats. The combination with the BT601 flag means that - * JPEG/JFIF color-space conversion matrix is used. - * VA_SOURCE_RANGE_REDUCED(Reduced range): Y is in [16, 235] and Cb/Cr is in [16, 240]. - * It is mainly used for the YUV->RGB color-space conversion in SDTV/HDTV/UHDTV. - */ -#define VA_SOURCE_RANGE_UNKNOWN 0 -#define VA_SOURCE_RANGE_REDUCED 1 -#define VA_SOURCE_RANGE_FULL 2 - -/** @name Tone Mapping flags multiple HDR mode*/ -/**@{*/ -/** \brief Tone Mapping from HDR content to HDR display. */ -#define VA_TONE_MAPPING_HDR_TO_HDR 0x0001 -/** \brief Tone Mapping from HDR content to SDR display. */ -#define VA_TONE_MAPPING_HDR_TO_SDR 0x0002 -/** \brief Tone Mapping from HDR content to EDR display. */ -#define VA_TONE_MAPPING_HDR_TO_EDR 0x0004 -/** \brief Tone Mapping from SDR content to HDR display. */ -#define VA_TONE_MAPPING_SDR_TO_HDR 0x0008 -/**@}*/ - -/** \brief Video processing pipeline capabilities. */ -typedef struct _VAProcPipelineCaps { - /** \brief Pipeline flags. See VAProcPipelineParameterBuffer::pipeline_flags. */ - uint32_t pipeline_flags; - /** \brief Extra filter flags. See VAProcPipelineParameterBuffer::filter_flags. */ - uint32_t filter_flags; - /** \brief Number of forward reference frames that are needed. */ - uint32_t num_forward_references; - /** \brief Number of backward reference frames that are needed. */ - uint32_t num_backward_references; - /** \brief List of color standards supported on input. */ - VAProcColorStandardType *input_color_standards; - /** \brief Number of elements in \ref input_color_standards array. */ - uint32_t num_input_color_standards; - /** \brief List of color standards supported on output. */ - VAProcColorStandardType *output_color_standards; - /** \brief Number of elements in \ref output_color_standards array. */ - uint32_t num_output_color_standards; - - /** - * \brief Rotation flags. - * - * For each rotation angle supported by the underlying hardware, - * the corresponding bit is set in \ref rotation_flags. See - * "Rotation angles" for a description of rotation angles. - * - * A value of 0 means the underlying hardware does not support any - * rotation. Otherwise, a check for a specific rotation angle can be - * performed as follows: - * - * \code - * VAProcPipelineCaps pipeline_caps; - * ... - * vaQueryVideoProcPipelineCaps(va_dpy, vpp_ctx, - * filter_bufs, num_filter_bufs, - * &pipeline_caps - * ); - * ... - * if (pipeline_caps.rotation_flags & (1 << VA_ROTATION_xxx)) { - * // Clockwise rotation by xxx degrees is supported - * ... - * } - * \endcode - */ - uint32_t rotation_flags; - /** \brief Blend flags. See "Video blending flags". */ - uint32_t blend_flags; - /** - * \brief Mirroring flags. - * - * For each mirroring direction supported by the underlying hardware, - * the corresponding bit is set in \ref mirror_flags. See - * "Mirroring directions" for a description of mirroring directions. - * - */ - uint32_t mirror_flags; - /** \brief Number of additional output surfaces supported by the pipeline */ - uint32_t num_additional_outputs; - - /** \brief Number of elements in \ref input_pixel_format array. */ - uint32_t num_input_pixel_formats; - /** \brief List of input pixel formats in fourcc. */ - uint32_t *input_pixel_format; - /** \brief Number of elements in \ref output_pixel_format array. */ - uint32_t num_output_pixel_formats; - /** \brief List of output pixel formats in fourcc. */ - uint32_t *output_pixel_format; - - /** \brief Max supported input width in pixels. */ - uint32_t max_input_width; - /** \brief Max supported input height in pixels. */ - uint32_t max_input_height; - /** \brief Min supported input width in pixels. */ - uint32_t min_input_width; - /** \brief Min supported input height in pixels. */ - uint32_t min_input_height; - - /** \brief Max supported output width in pixels. */ - uint32_t max_output_width; - /** \brief Max supported output height in pixels. */ - uint32_t max_output_height; - /** \brief Min supported output width in pixels. */ - uint32_t min_output_width; - /** \brief Min supported output height in pixels. */ - uint32_t min_output_height; - /** \brief Reserved bytes for future use, must be zero */ -#if defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__) || defined(__LP64__) - uint32_t va_reserved[VA_PADDING_HIGH - 2]; -#else - uint32_t va_reserved[VA_PADDING_HIGH]; -#endif -} VAProcPipelineCaps; - -/** \brief Specification of values supported by the filter. */ -typedef struct _VAProcFilterValueRange { - /** \brief Minimum value supported, inclusive. */ - float min_value; - /** \brief Maximum value supported, inclusive. */ - float max_value; - /** \brief Default value. */ - float default_value; - /** \brief Step value that alters the filter behaviour in a sensible way. */ - float step; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterValueRange; - -typedef struct _VAProcColorProperties { - /** Chroma sample location.\c VA_CHROMA_SITING_VERTICAL_XXX | VA_CHROMA_SITING_HORIZONTAL_XXX */ - uint8_t chroma_sample_location; - /** Color range. \c VA_SOURCE_RANGE_XXX*/ - uint8_t color_range; - /** Colour primaries. - * - * See ISO/IEC 23001-8 or ITU H.273, section 8.1 and table 2. - * Only used if the color standard in use is \c VAColorStandardExplicit. - * Below list the typical colour primaries for the reference. - * --------------------------------------------------------------------------------- - * | Value | Primaries | Informative Remark | - * -------------------------------------------------------------------------------- - * | 1 |primary x y |Rec.ITU-R BT.709-5 | - * | |green 0.300 0.600 |IEC 61966-2-1(sRGB or sYCC) | - * | |blue 0.150 0.060 | | - * | |red 0.640 0.330 | | - * | |whiteD65 0.3127 0.3290 | | - * --------------------------------------------------------------------------------- - * | 6 |primary x y |Rec.ITU-R BT.601-6 525 | - * | |green 0.310 0.595 | | - * | |blue 0.155 0.070 | | - * | |red 0.630 0.340 | | - * | |whiteD65 0.3127 0.3290 | | - * --------------------------------------------------------------------------------- - * | 9 |primary x y |Rec.ITU-R BT.2020 | - * | |green 0.170 0.797 | | - * | |blue 0.131 0.046 | | - * | |red 0.708 0.292 | | - * | |whiteD65 0.3127 0.3290 | | - * --------------------------------------------------------------------------------- - */ - uint8_t colour_primaries; - /** Transfer characteristics. - * - * See ISO/IEC 23001-8 or ITU H.273, section 8.2 and table 3. - * Only used if the color standard in use is \c VAColorStandardExplicit. - * Below list the typical transfer characteristics for the reference. - * ----------------------------------------------------------- - * | Value | Informative Remark | - * ----------------------------------------------------------- - * | 1 |Rec.ITU-R BT.709-5 | - * | |colour gamut system | - * ----------------------------------------------------------- - * | 4 |Assumed display gamma 2.2 | - * ----------------------------------------------------------- - * | 6 |Rec.ITU-R BT.601-6 525 or 625 | - * ----------------------------------------------------------- - * | 8 |Linear transfer characteristics | - * ----------------------------------------------------------- - * | 13 |IEC 61966-2-1(sRGB or sYCC) | - * ----------------------------------------------------------- - * | 14,15 |Rec.ITU-R BT.2020 | - * ----------------------------------------------------------- - * | 16 |SMPTE ST 2084 for 10,12,14 and 16bit system | - * ----------------------------------------------------------- - */ - uint8_t transfer_characteristics; - /** Matrix coefficients. - * - * See ISO/IEC 23001-8 or ITU H.273, section 8.3 and table 4. - * Only used if the color standard in use is \c VAColorStandardExplicit. - */ - uint8_t matrix_coefficients; - /** Reserved bytes for future use, must be zero. */ - uint8_t reserved[3]; -} VAProcColorProperties; - -/** \brief Describes High Dynamic Range Meta Data for HDR10. - * - * Specifies the colour volume(the colour primaries, white point and luminance range) of - * a display considered to be the mastering display for the associated video content -e.g., - * the colour volume of a display that was used for viewing while authoring the video content. - * See ITU-T H.265 D.3.27 Mastering display colour volume SEI message semantics. - * - * Specifies upper bounds for the nominal light level of the content. See ITU-T H.265 D.3.35 - * Content light level information SEI message semantics. - * - * This structure can be used to indicate the HDR10 metadata for 1) the content which was authored; - * 2) the display on which the content will be presented. If it is for display, max_content_light_level - * and max_pic_average_light_level are ignored. - */ -typedef struct _VAHdrMetaDataHDR10 { - /** - * \brief X chromaticity coordinate of the mastering display. - * - * Index value c equal to 0 should correspond to the green primary. - * Index value c equal to 1 should correspond to the blue primary. - * Index value c equal to 2 should correspond to the red primary. - * The value for display_primaries_x shall be in the range of 0 to 50000 inclusive. - */ - uint16_t display_primaries_x[3]; - /** - * \brief Y chromaticity coordinate of the mastering display. - * - * Index value c equal to 0 should correspond to the green primary. - * Index value c equal to 1 should correspond to the blue primary. - * Index value c equal to 2 should correspond to the red primary. - * The value for display_primaries_y shall be in the range of 0 to 50000 inclusive. - */ - uint16_t display_primaries_y[3]; - /** - * \brief X chromaticity coordinate of the white point of the mastering display. - * - * The value for white_point_x shall be in the range of 0 to 50000 inclusive. - */ - uint16_t white_point_x; - /** - * \brief Y chromaticity coordinate of the white point of the mastering display. - * - * The value for white_point_y shall be in the range of 0 to 50000 inclusive. - */ - uint16_t white_point_y; - /** - * \brief The maximum display luminance of the mastering display. - * - * The value is in units of 0.0001 candelas per square metre. - */ - uint32_t max_display_mastering_luminance; - /** - * \brief The minumum display luminance of the mastering display. - * - * The value is in units of 0.0001 candelas per square metre. - */ - uint32_t min_display_mastering_luminance; - /** - * \brief The maximum content light level (MaxCLL). - * - * The value is in units of 1 candelas per square metre. - */ - uint16_t max_content_light_level; - /** - * \brief The maximum picture average light level (MaxFALL). - * - * The value is in units of 1 candelas per square metre. - */ - uint16_t max_pic_average_light_level; - /** Resevered */ - uint16_t reserved[VA_PADDING_HIGH]; -} VAHdrMetaDataHDR10; - -/** \brief Capabilities specification for the High Dynamic Range filter. */ -typedef struct _VAProcFilterCapHighDynamicRange { - /** \brief high dynamic range type. */ - VAProcHighDynamicRangeMetadataType metadata_type; - /** - * \brief flag for high dynamic range tone mapping - * - * The flag is the combination of VA_TONE_MAPPING_XXX_TO_XXX. - * It could be VA_TONE_MAPPING_HDR_TO_HDR | VA_TONE_MAPPING_HDR_TO_SDR. - * SDR content to SDR display is always supported by default since it is legacy path. - */ - uint16_t caps_flag; - /** \brief Reserved bytes for future use, must be zero */ - uint16_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterCapHighDynamicRange; - -/** \brief High Dynamic Range Meta Data. */ -typedef struct _VAHdrMetaData { - /** \brief high dynamic range metadata type, HDR10 etc. */ - VAProcHighDynamicRangeMetadataType metadata_type; - /** - * \brief Pointer to high dynamic range metadata. - * - * The pointer could point to VAHdrMetaDataHDR10 or other HDR meta data. - */ - void* metadata; - /** - * \brief Size of high dynamic range metadata. - */ - uint32_t metadata_size; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved[VA_PADDING_LOW]; -} VAHdrMetaData; - -/** - * \brief Video processing pipeline configuration. - * - * This buffer defines a video processing pipeline. The actual filters to - * be applied are provided in the \c filters field, they can be re-used - * in other processing pipelines. - * - * The target surface is specified by the \c render_target argument of - * \c vaBeginPicture(). The general usage model is described as follows: - * - \c vaBeginPicture(): specify the target surface that receives the - * processed output; - * - \c vaRenderPicture(): specify a surface to be processed and composed - * into the \c render_target. Use as many \c vaRenderPicture() calls as - * necessary surfaces to compose ; - * - \c vaEndPicture(): tell the driver to start processing the surfaces - * with the requested filters. - * - * If a filter (e.g. noise reduction) needs to be applied with different - * values for multiple surfaces, the application needs to create as many - * filter parameter buffers as necessary. i.e. the filter parameters shall - * not change between two calls to \c vaRenderPicture(). - * - * For composition usage models, the first surface to process will generally - * use an opaque background color, i.e. \c output_background_color set with - * the most significant byte set to \c 0xff. For instance, \c 0xff000000 for - * a black background. Then, subsequent surfaces would use a transparent - * background color. - */ -typedef struct _VAProcPipelineParameterBuffer { - /** - * \brief Source surface ID. - * - * ID of the source surface to process. If subpictures are associated - * with the video surfaces then they shall be rendered to the target - * surface, if the #VA_PROC_PIPELINE_SUBPICTURES pipeline flag is set. - */ - VASurfaceID surface; - /** - * \brief Region within the source surface to be processed. - * - * Pointer to a #VARectangle defining the region within the source - * surface to be processed. If NULL, \c surface_region implies the - * whole surface. - */ - const VARectangle *surface_region; - /** - * \brief Requested input color standard. - * - * Color properties are implicitly converted throughout the processing - * pipeline. The video processor chooses the best moment to apply - * this conversion. The set of supported color standards for input shall - * be queried with vaQueryVideoProcPipelineCaps(). - * - * If this is set to VAProcColorStandardExplicit, the color properties - * are specified explicitly in surface_color_properties instead. - */ - VAProcColorStandardType surface_color_standard; - /** - * \brief Region within the output surface. - * - * Pointer to a #VARectangle defining the region within the output - * surface that receives the processed pixels. If NULL, \c output_region - * implies the whole surface. - * - * Note that any pixels residing outside the specified region will - * be filled in with the \ref output_background_color. - */ - const VARectangle *output_region; - /** - * \brief Background color. - * - * Background color used to fill in pixels that reside outside of the - * specified \ref output_region. The color is specified in ARGB format: - * [31:24] alpha, [23:16] red, [15:8] green, [7:0] blue. - * - * Unless the alpha value is zero or the \ref output_region represents - * the whole target surface size, implementations shall not render the - * source surface to the target surface directly. Rather, in order to - * maintain the exact semantics of \ref output_background_color, the - * driver shall use a temporary surface and fill it in with the - * appropriate background color. Next, the driver will blend this - * temporary surface into the target surface. - */ - uint32_t output_background_color; - /** - * \brief Requested output color standard. - * - * If this is set to VAProcColorStandardExplicit, the color properties - * are specified explicitly in output_color_properties instead. - */ - VAProcColorStandardType output_color_standard; - /** - * \brief Pipeline filters. See video pipeline flags. - * - * Flags to control the pipeline, like whether to apply subpictures - * or not, notify the driver that it can opt for power optimizations, - * should this be needed. - */ - uint32_t pipeline_flags; - /** - * \brief Extra filter flags. See vaPutSurface() flags. - * - * Filter flags are used as a fast path, wherever possible, to use - * vaPutSurface() flags instead of explicit filter parameter buffers. - * - * Allowed filter flags API-wise. Use vaQueryVideoProcPipelineCaps() - * to check for implementation details: - * - Bob-deinterlacing: \c VA_FRAME_PICTURE, \c VA_TOP_FIELD, - * \c VA_BOTTOM_FIELD. Note that any deinterlacing filter - * (#VAProcFilterDeinterlacing) will override those flags. - * - Color space conversion: \c VA_SRC_BT601, \c VA_SRC_BT709, - * \c VA_SRC_SMPTE_240. - * - Scaling: \c VA_FILTER_SCALING_DEFAULT, \c VA_FILTER_SCALING_FAST, - * \c VA_FILTER_SCALING_HQ, \c VA_FILTER_SCALING_NL_ANAMORPHIC. - * - Interpolation Method: \c VA_FILTER_INTERPOLATION_DEFAULT, - * \c VA_FILTER_INTERPOLATION_NEAREST_NEIGHBOR, - * \c VA_FILTER_INTERPOLATION_BILINEAR, \c VA_FILTER_INTERPOLATION_ADVANCED. - */ - uint32_t filter_flags; - /** - * \brief Array of filters to apply to the surface. - * - * The list of filters shall be ordered in the same way the driver expects - * them. i.e. as was returned from vaQueryVideoProcFilters(). - * Otherwise, a #VA_STATUS_ERROR_INVALID_FILTER_CHAIN is returned - * from vaRenderPicture() with this buffer. - * - * #VA_STATUS_ERROR_UNSUPPORTED_FILTER is returned if the list - * contains an unsupported filter. - * - */ - VABufferID *filters; - /** \brief Actual number of filters. */ - uint32_t num_filters; - /** \brief Array of forward reference frames (past frames). */ - VASurfaceID *forward_references; - /** \brief Number of forward reference frames that were supplied. */ - uint32_t num_forward_references; - /** \brief Array of backward reference frames (future frames). */ - VASurfaceID *backward_references; - /** \brief Number of backward reference frames that were supplied. */ - uint32_t num_backward_references; - /** - * \brief Rotation state. See rotation angles. - * - * The rotation angle is clockwise. There is no specific rotation - * center for this operation. Rather, The source \ref surface is - * first rotated by the specified angle and then scaled to fit the - * \ref output_region. - * - * This means that the top-left hand corner (0,0) of the output - * (rotated) surface is expressed as follows: - * - \ref VA_ROTATION_NONE: (0,0) is the top left corner of the - * source surface -- no rotation is performed ; - * - \ref VA_ROTATION_90: (0,0) is the bottom-left corner of the - * source surface ; - * - \ref VA_ROTATION_180: (0,0) is the bottom-right corner of the - * source surface -- the surface is flipped around the X axis ; - * - \ref VA_ROTATION_270: (0,0) is the top-right corner of the - * source surface. - * - * Check VAProcPipelineCaps::rotation_flags first prior to - * defining a specific rotation angle. Otherwise, the hardware can - * perfectly ignore this variable if it does not support any - * rotation. - */ - uint32_t rotation_state; - /** - * \brief blending state. See "Video blending state definition". - * - * If \ref blend_state is NULL, then default operation mode depends - * on the source \ref surface format: - * - RGB: per-pixel alpha blending ; - * - YUV: no blending, i.e override the underlying pixels. - * - * Otherwise, \ref blend_state is a pointer to a #VABlendState - * structure that shall be live until vaEndPicture(). - * - * Implementation note: the driver is responsible for checking the - * blend state flags against the actual source \ref surface format. - * e.g. premultiplied alpha blending is only applicable to RGB - * surfaces, and luma keying is only applicable to YUV surfaces. - * If a mismatch occurs, then #VA_STATUS_ERROR_INVALID_BLEND_STATE - * is returned. - */ - const VABlendState *blend_state; - /** - * \bried mirroring state. See "Mirroring directions". - * - * Mirroring of an image can be performed either along the - * horizontal or vertical axis. It is assumed that the rotation - * operation is always performed before the mirroring operation. - */ - uint32_t mirror_state; - /** \brief Array of additional output surfaces. */ - VASurfaceID *additional_outputs; - /** \brief Number of additional output surfaces. */ - uint32_t num_additional_outputs; - /** - * \brief Flag to indicate the input surface flag - * - * bit0~3: Surface sample type - * - 0000: Progressive --> VA_FRAME_PICTURE - * - 0001: Single Top Field --> VA_TOP_FIELD - * - 0010: Single Bottom Field --> VA_BOTTOM_FIELD - * - 0100: Interleaved Top Field First --> VA_TOP_FIELD_FIRST - * - 1000: Interleaved Bottom Field First --> VA_BOTTOM_FIELD_FIRST - * - * For interlaced scaling, examples as follow: - * - 1. Interleaved to Interleaved (Suppose input is top field first) - * -- set input_surface_flag as VA_TOP_FIELD_FIRST - * -- set output_surface_flag as VA_TOP_FIELD_FIRST - * - 2. Interleaved to Field (Suppose input is top field first) - * An interleaved frame need to be passed twice. - * First cycle to get the first field: - * -- set input_surface_flag as VA_TOP_FIELD_FIRST - * -- set output_surface_flag as VA_TOP_FIELD - * Second cycle to get the second field: - * -- set input_surface_flag as VA_TOP_FIELD_FIRST - * -- set output_surface_flag as VA_BOTTOM_FIELD - * - 3. Field to Interleaved (Suppose first field is top field) - * -- create two surfaces, one for top field, the other for bottom field - * -- set surface with the first field surface id - * -- set backward_reference with the second field surface id - * -- set input_surface_flag as VA_TOP_FIELD - * -- set output_surface_flag as VA_TOP_FIELD_FIRST - * - 4. Field to Field: - * -- set flag according to each frame. - * - * bit31: Surface encryption - * - 0: non-protected - * - 1: protected - * - * bit4~30 for future - */ - uint32_t input_surface_flag; - /** - * \brief Flag to indicate the output surface flag - * - * bit0~3: Surface sample type - * - 0000: Progressive --> VA_FRAME_PICTURE - * - 0001: Top Field --> VA_TOP_FIELD - * - 0010: Bottom Field --> VA_BOTTOM_FIELD - * - 0100: Top Field First --> VA_TOP_FIELD_FIRST - * - 1000: Bottom Field First --> VA_BOTTOM_FIELD_FIRST - * - * bit31: Surface encryption - * - 0: non-protected - * - 1: protected - * - * bit4~30 for future - */ - uint32_t output_surface_flag; - /** - * \brief Input Color Properties. See "VAProcColorProperties". - */ - VAProcColorProperties input_color_properties; - /** - * \brief Output Color Properties. See "VAProcColorProperties". - */ - VAProcColorProperties output_color_properties; - /** - * \brief Processing mode. See "VAProcMode". - */ - VAProcMode processing_mode; - /** - * \brief Output High Dynamic Metadata. - * - * If output_metadata is NULL, then output default to SDR. - */ - VAHdrMetaData *output_hdr_metadata; - - /** \brief Reserved bytes for future use, must be zero */ -#if defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__)|| defined(__LP64__) - uint32_t va_reserved[VA_PADDING_LARGE - 16]; -#else - uint32_t va_reserved[VA_PADDING_LARGE - 13]; -#endif -} VAProcPipelineParameterBuffer; - -/** - * \brief Filter parameter buffer base. - * - * This is a helper structure used by driver implementations only. - * Users are not supposed to allocate filter parameter buffers of this - * type. - */ -typedef struct _VAProcFilterParameterBufferBase { - /** \brief Filter type. */ - VAProcFilterType type; -} VAProcFilterParameterBufferBase; - -/** - * \brief Default filter parametrization. - * - * Unless there is a filter-specific parameter buffer, - * #VAProcFilterParameterBuffer is the default type to use. - */ -typedef struct _VAProcFilterParameterBuffer { - /** \brief Filter type. */ - VAProcFilterType type; - /** \brief Value. */ - float value; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterParameterBuffer; - -/** @name De-interlacing flags */ -/**@{*/ -/** - * \brief Bottom field first in the input frame. - * if this is not set then assumes top field first. - */ -#define VA_DEINTERLACING_BOTTOM_FIELD_FIRST 0x0001 -/** - * \brief Bottom field used in deinterlacing. - * if this is not set then assumes top field is used. - */ -#define VA_DEINTERLACING_BOTTOM_FIELD 0x0002 -/** - * \brief A single field is stored in the input frame. - * if this is not set then assumes the frame contains two interleaved fields. - */ -#define VA_DEINTERLACING_ONE_FIELD 0x0004 -/** - * \brief Film Mode Detection is enabled. If enabled, driver performs inverse - * of various pulldowns, such as 3:2 pulldown. - * if this is not set then assumes FMD is disabled. - */ -#define VA_DEINTERLACING_FMD_ENABLE 0x0008 - -//Scene change parameter for ADI on Linux, if enabled, driver use spatial DI(Bob), instead of ADI. if not, use old behavior for ADI -//Input stream is TFF(set flags = 0), SRC0,1,2,3 are interlaced frame (top +bottom fields), DSTs are progressive frames -//30i->30p -//SRC0 -> BOBDI, no reference, set flag = 0, output DST0 -//SRC1 -> ADI, reference frame=SRC0, set flags = 0, call VP, output DST1 -//SRC2 -> ADI, reference frame=SRC1, set flags = 0x0010(decimal 16), call VP, output DST2(T4) -//SRC3 -> ADI, reference frame=SRC2, set flags = 0, call VP, output DST3 -//30i->60p -//SRC0 -> BOBDI, no reference, set flag = 0, output DST0 -//SRC0 -> BOBDI, no reference, set flag =0x0002, output DST1 - -//SRC1 -> ADI, reference frame =SRC0, set flags = 0, call VP, output DST2 -//SRC1 -> ADI, reference frame =SRC0, set flags = 0x0012(decimal18), call VP, output DST3(B3) - -//SRC2 -> ADI, reference frame =SRC1, set flags = 0x0010(decimal 16), call VP, output DST4(T4) -//SRC2 -> ADI, reference frame =SRC1, set flags = 0x0002, call VP, output DST5 - -//SRC3 -> ADI, reference frame =SRC2, set flags = 0, call VP, output DST6 -//SRC3 -> ADI, reference frame =SRC1, set flags = 0x0002, call VP, output DST7 - -#define VA_DEINTERLACING_SCD_ENABLE 0x0010 - -/**@}*/ - -/** \brief Deinterlacing filter parametrization. */ -typedef struct _VAProcFilterParameterBufferDeinterlacing { - /** \brief Filter type. Shall be set to #VAProcFilterDeinterlacing. */ - VAProcFilterType type; - /** \brief Deinterlacing algorithm. */ - VAProcDeinterlacingType algorithm; - /** \brief Deinterlacing flags. */ - uint32_t flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterParameterBufferDeinterlacing; - -/** - * \brief Color balance filter parametrization. - * - * This buffer defines color balance attributes. A VA buffer can hold - * several color balance attributes by creating a VA buffer of desired - * number of elements. This can be achieved by the following pseudo-code: - * - * \code - * enum { kHue, kSaturation, kBrightness, kContrast }; - * - * // Initial color balance parameters - * static const VAProcFilterParameterBufferColorBalance colorBalanceParams[4] = - * { - * [kHue] = - * { VAProcFilterColorBalance, VAProcColorBalanceHue, 0.5 }, - * [kSaturation] = - * { VAProcFilterColorBalance, VAProcColorBalanceSaturation, 0.5 }, - * [kBrightness] = - * { VAProcFilterColorBalance, VAProcColorBalanceBrightness, 0.5 }, - * [kSaturation] = - * { VAProcFilterColorBalance, VAProcColorBalanceSaturation, 0.5 } - * }; - * - * // Create buffer - * VABufferID colorBalanceBuffer; - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcFilterParameterBufferType, sizeof(*pColorBalanceParam), 4, - * colorBalanceParams, - * &colorBalanceBuffer - * ); - * - * VAProcFilterParameterBufferColorBalance *pColorBalanceParam; - * vaMapBuffer(va_dpy, colorBalanceBuffer, &pColorBalanceParam); - * { - * // Change brightness only - * pColorBalanceBuffer[kBrightness].value = 0.75; - * } - * vaUnmapBuffer(va_dpy, colorBalanceBuffer); - * \endcode - */ -typedef struct _VAProcFilterParameterBufferColorBalance { - /** \brief Filter type. Shall be set to #VAProcFilterColorBalance. */ - VAProcFilterType type; - /** \brief Color balance attribute. */ - VAProcColorBalanceType attrib; - /** - * \brief Color balance value. - * - * Special case for automatically adjusted attributes. e.g. - * #VAProcColorBalanceAutoSaturation, - * #VAProcColorBalanceAutoBrightness, - * #VAProcColorBalanceAutoContrast. - * - If \ref value is \c 1.0 +/- \c FLT_EPSILON, the attribute is - * automatically adjusted and overrides any other attribute of - * the same type that would have been set explicitly; - * - If \ref value is \c 0.0 +/- \c FLT_EPSILON, the attribute is - * disabled and other attribute of the same type is used instead. - */ - float value; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterParameterBufferColorBalance; - -/** \brief Total color correction filter parametrization. */ -typedef struct _VAProcFilterParameterBufferTotalColorCorrection { - /** \brief Filter type. Shall be set to #VAProcFilterTotalColorCorrection. */ - VAProcFilterType type; - /** \brief Color to correct. */ - VAProcTotalColorCorrectionType attrib; - /** \brief Color correction value. */ - float value; -} VAProcFilterParameterBufferTotalColorCorrection; - -/** @name Video Processing Human Vision System (HVS) Denoise Mode.*/ -/**@{*/ -/** - * \brief Default Mode. - * This mode is decided in driver to the appropriate mode. - */ -#define VA_PROC_HVS_DENOISE_DEFAULT 0x0000 -/** - * \brief Auto BDRate Mode. - * Indicates auto BD rate improvement in pre-processing (such as before video encoding), ignore Strength. - */ -#define VA_PROC_HVS_DENOISE_AUTO_BDRATE 0x0001 -/** - * \brief Auto Subjective Mode. - * Indicates auto subjective quality improvement in pre-processing (such as before video encoding), ignore Strength. - */ -#define VA_PROC_HVS_DENOISE_AUTO_SUBJECTIVE 0x0002 -/** - * \brief Manual Mode. - * Indicates manual mode, allow to adjust the denoise strength manually (need to set Strength explicitly). - */ -#define VA_PROC_HVS_DENOISE_MANUAL 0x0003 -/**@}*/ - -/** \brief Human Vision System(HVS) Noise reduction filter parametrization. */ -typedef struct _VAProcFilterParameterBufferHVSNoiseReduction { - /** \brief Filter type. Shall be set to #VAProcFilterHVSNoiseReduction. */ - VAProcFilterType type; - /** \brief QP for encoding, used for HVS Denoise */ - uint16_t qp; - /** - * \brief QP to Noise Reduction Strength Mode, used for Human Vision System Based Noise Reduction. - * Controls Noise Reduction strength of conservative and aggressive mode. - * It is an integer from [0-16]. - * Value 0 means completely turn off Noise Reduction; - * Value 16 means the most aggressive mode of Noise Reduction; - * Value 10 is the default value. - */ - uint16_t strength; - /** - * \brief HVS Denoise Mode which controls denoise method. - * It is a value of VA_PROC_HVS_DENOISE_xxx. - * Please see the definition of VA_PROC_HVS_DENOISE_xxx. - */ - uint16_t mode; - /** \brief Reserved bytes for future use, must be zero */ - uint16_t va_reserved[VA_PADDING_HIGH - 1]; -} VAProcFilterParameterBufferHVSNoiseReduction; - -/** \brief High Dynamic Range(HDR) Tone Mapping filter parametrization. */ -typedef struct _VAProcFilterParameterBufferHDRToneMapping { - /** \brief Filter type. Shall be set to #VAProcFilterHighDynamicRangeToneMapping.*/ - VAProcFilterType type; - /** - * \brief High Dynamic Range metadata, could be HDR10 etc. - * - * This metadata is mainly for the input surface. Given that dynamic metadata is changing - * on frame-by-frame or scene-by-scene basis for HDR10 plus, differentiate the metadata - * for the input and output. - */ - VAHdrMetaData data; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterParameterBufferHDRToneMapping; - -/** @name 3DLUT Channel Layout and Mapping */ -/**@{*/ -/** \brief 3DLUT Channel Layout is unknown. */ -#define VA_3DLUT_CHANNEL_UNKNOWN 0x00000000 -/** \brief 3DLUT Channel Layout is R, G, B, the default layout. Map RGB to RGB. */ -#define VA_3DLUT_CHANNEL_RGB_RGB 0x00000001 -/** \brief 3DLUT Channel Layout is Y, U, V. Map YUV to RGB. */ -#define VA_3DLUT_CHANNEL_YUV_RGB 0x00000002 -/** \brief 3DLUT Channel Layout is V, U, Y. Map VUY to RGB. */ -#define VA_3DLUT_CHANNEL_VUY_RGB 0x00000004 -/**@}*/ - -/** - * \brief 3DLUT filter parametrization. - * - * 3DLUT (Three Dimensional Look Up Table) is often used when converting an image or a video frame - * from one color representation to another, for example, when converting log and gamma encodings, - * changing the color space, applying a color correction, changing the dynamic range, gamut mapping etc. - * - * This buffer defines 3DLUT attributes and memory layout. The typical 3DLUT has fixed number(lut_size) - * per dimension and memory layout is 3 dimensional array as 3dlut[stride_0][stride_1][stride_2] (lut_size - * shall be smaller than stride_0/1/2). - * - * API user should query hardware capability by using the VAProcFilterCap3DLUT to get the 3DLUT attributes - * which hardware supports, and use these attributes. For example, if the user queries hardware, the API user - * could get caps with 3dlut[33][33][64] (lut_size = 33, lut_stride[0/1/2] = 33/33/64). API user shall not - * use the attributes which hardware can not support. - * - * 3DLUT is usually used to transform input RGB/YUV values in one color space to output RGB values in another - * color space. Based on 1) the format and color space of VPP input and output and 2) 3DLUT memory layout and - * channel mapping, driver will enable some color space conversion implicitly if needed. For example, the input of - * VPP is P010 format in BT2020 color space, the output of VPP is NV12 in BT709 color space and the 3DLUT channel - * mapping is VA_3DLUT_CHANNEL_RGB_RGB, driver could build the data pipeline as P010(BT2020)->RGB(BT2020) - * ->3DULT(BT709)->NV12(BT709). Please note, the limitation of 3DLUT filter color space is that the color space of - * 3DLUT filter input data needs to be same as the input data of VPP; the color space of 3DLUT filter output data - * needs to be same as the output data of VPP; format does not have such limitation. - */ -typedef struct _VAProcFilterParameterBuffer3DLUT { - /** \brief Filter type. Shall be set to #VAProcFilter3DLUT.*/ - VAProcFilterType type; - - /** \brief lut_surface contains 3DLUT data in the 3DLUT memory layout, must be linear */ - VASurfaceID lut_surface; - /** - * \brief lut_size is the number of valid points on every dimension of the three dimensional look up table. - * The size of LUT (lut_size) shall be same among every dimension of the three dimensional look up table. - * The size of LUT (lut_size) shall be smaller than lut_stride[0/1/2]. - */ - uint16_t lut_size; - /** - * \brief lut_stride are the number of points on every dimension of the three dimensional look up table. - * Three dimension can has 3 different stride, lut3d[lut_stride[0]][lut_stride[1]][lut_stride[2]]. - * But the valid point shall start from 0, the range of valid point is [0, lut_size-1] for every dimension. - */ - uint16_t lut_stride[3]; - /** \brief bit_depth is the number of bits for every channel R, G or B (or Y, U, V) */ - uint16_t bit_depth; - /** \brief num_channel is the number of channels */ - uint16_t num_channel; - - /** \brief channel_mapping defines the mapping of input and output channels, could be one of VA_3DLUT_CHANNEL_XXX*/ - uint32_t channel_mapping; - - /** \brief reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterParameterBuffer3DLUT; - -/** \brief Capabilities specification for the 3DLUT filter. */ -typedef struct _VAProcFilterCap3DLUT { - /** \brief lut_size is the number of valid points on every dimension of the three dimensional look up table. */ - uint16_t lut_size; - /** \brief lut_stride are the number of points on every dimension of the three dimensional look up table. lut3d[lut_stride[0]][lut_stride[1]][lut_stride[2]]*/ - uint16_t lut_stride[3]; - /** \brief bit_depth is the number of bits for every channel R, G or B (or Y, U, V) */ - uint16_t bit_depth; - /** \brief num_channel is the number of channels */ - uint16_t num_channel; - /** \brief channel_mapping defines the mapping of channels, could be some combination of VA_3DLUT_CHANNEL_XXX*/ - uint32_t channel_mapping; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterCap3DLUT; - -/** - * \brief Default filter cap specification (single range value). - * - * Unless there is a filter-specific cap structure, #VAProcFilterCap is the - * default type to use for output caps from vaQueryVideoProcFilterCaps(). - */ -typedef struct _VAProcFilterCap { - /** \brief Range of supported values for the filter. */ - VAProcFilterValueRange range; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterCap; - -/** \brief Capabilities specification for the deinterlacing filter. */ -typedef struct _VAProcFilterCapDeinterlacing { - /** \brief Deinterlacing algorithm. */ - VAProcDeinterlacingType type; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterCapDeinterlacing; - -/** \brief Capabilities specification for the color balance filter. */ -typedef struct _VAProcFilterCapColorBalance { - /** \brief Color balance operation. */ - VAProcColorBalanceType type; - /** \brief Range of supported values for the specified operation. */ - VAProcFilterValueRange range; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterCapColorBalance; - -/** \brief Capabilities specification for the Total Color Correction filter. */ -typedef struct _VAProcFilterCapTotalColorCorrection { - /** \brief Color to correct. */ - VAProcTotalColorCorrectionType type; - /** \brief Range of supported values for the specified color. */ - VAProcFilterValueRange range; -} VAProcFilterCapTotalColorCorrection; - -/** - * \brief Queries video processing filters. - * - * This function returns the list of video processing filters supported - * by the driver. The \c filters array is allocated by the user and - * \c num_filters shall be initialized to the number of allocated - * elements in that array. Upon successful return, the actual number - * of filters will be overwritten into \c num_filters. Otherwise, - * \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and \c num_filters - * is adjusted to the number of elements that would be returned if enough - * space was available. - * - * The list of video processing filters supported by the driver shall - * be ordered in the way they can be iteratively applied. This is needed - * for both correctness, i.e. some filters would not mean anything if - * applied at the beginning of the pipeline; but also for performance - * since some filters can be applied in a single pass (e.g. noise - * reduction + deinterlacing). - * - * @param[in] dpy the VA display - * @param[in] context the video processing context - * @param[out] filters the output array of #VAProcFilterType elements - * @param[in,out] num_filters the number of elements allocated on input, - * the number of elements actually filled in on output - */ -VAStatus -vaQueryVideoProcFilters( - VADisplay dpy, - VAContextID context, - VAProcFilterType *filters, - unsigned int *num_filters -); - -/** - * \brief Queries video filter capabilities. - * - * This function returns the list of capabilities supported by the driver - * for a specific video filter. The \c filter_caps array is allocated by - * the user and \c num_filter_caps shall be initialized to the number - * of allocated elements in that array. Upon successful return, the - * actual number of filters will be overwritten into \c num_filter_caps. - * Otherwise, \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and - * \c num_filter_caps is adjusted to the number of elements that would be - * returned if enough space was available. - * - * @param[in] dpy the VA display - * @param[in] context the video processing context - * @param[in] type the video filter type - * @param[out] filter_caps the output array of #VAProcFilterCap elements - * @param[in,out] num_filter_caps the number of elements allocated on input, - * the number of elements actually filled in output - */ -VAStatus -vaQueryVideoProcFilterCaps( - VADisplay dpy, - VAContextID context, - VAProcFilterType type, - void *filter_caps, - unsigned int *num_filter_caps -); - -/** - * \brief Queries video processing pipeline capabilities. - * - * This function returns the video processing pipeline capabilities. The - * \c filters array defines the video processing pipeline and is an array - * of buffers holding filter parameters. - * - * Note: the #VAProcPipelineCaps structure contains user-provided arrays. - * If non-NULL, the corresponding \c num_* fields shall be filled in on - * input with the number of elements allocated. Upon successful return, - * the actual number of elements will be overwritten into the \c num_* - * fields. Otherwise, \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned - * and \c num_* fields are adjusted to the number of elements that would - * be returned if enough space was available. - * - * @param[in] dpy the VA display - * @param[in] context the video processing context - * @param[in] filters the array of VA buffers defining the video - * processing pipeline - * @param[in] num_filters the number of elements in filters - * @param[in,out] pipeline_caps the video processing pipeline capabilities - */ -VAStatus -vaQueryVideoProcPipelineCaps( - VADisplay dpy, - VAContextID context, - VABufferID *filters, - unsigned int num_filters, - VAProcPipelineCaps *pipeline_caps -); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_VPP_H */ diff --git a/prebuilts/aarch64/include/x264.h b/prebuilts/aarch64/include/x264.h deleted file mode 100644 index 5aa2a8d..0000000 --- a/prebuilts/aarch64/include/x264.h +++ /dev/null @@ -1,1019 +0,0 @@ -/***************************************************************************** - * x264.h: x264 public header - ***************************************************************************** - * Copyright (C) 2003-2022 x264 project - * - * Authors: Laurent Aimar - * Loren Merritt - * Fiona Glaser - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA. - * - * This program is also available under a commercial proprietary license. - * For more information, contact us at licensing@x264.com. - *****************************************************************************/ - -#ifndef X264_X264_H -#define X264_X264_H - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(_STDINT_H) && !defined(_STDINT_H_) && !defined(_STDINT_H_INCLUDED) && !defined(_STDINT) &&\ - !defined(_SYS_STDINT_H_) && !defined(_INTTYPES_H) && !defined(_INTTYPES_H_) && !defined(_INTTYPES) -# ifdef _MSC_VER -# pragma message("You must include stdint.h or inttypes.h before x264.h") -# else -# warning You must include stdint.h or inttypes.h before x264.h -# endif -#endif - -#include - -#include "x264_config.h" - -#define X264_BUILD 164 - -#ifdef _WIN32 -# define X264_DLL_IMPORT __declspec(dllimport) -# define X264_DLL_EXPORT __declspec(dllexport) -#else -# if defined(__GNUC__) && (__GNUC__ >= 4) -# define X264_DLL_IMPORT -# define X264_DLL_EXPORT __attribute__((visibility("default"))) -# else -# define X264_DLL_IMPORT -# define X264_DLL_EXPORT -# endif -#endif - -/* Application developers planning to link against a shared library version of - * libx264 from a Microsoft Visual Studio or similar development environment - * will need to define X264_API_IMPORTS before including this header. - * This clause does not apply to MinGW, similar development environments, or non - * Windows platforms. */ -#ifdef X264_API_IMPORTS -# define X264_API X264_DLL_IMPORT -#else -# ifdef X264_API_EXPORTS -# define X264_API X264_DLL_EXPORT -# else -# define X264_API -# endif -#endif - -/* x264_t: - * opaque handler for encoder */ -typedef struct x264_t x264_t; - -/**************************************************************************** - * NAL structure and functions - ****************************************************************************/ - -enum nal_unit_type_e -{ - NAL_UNKNOWN = 0, - NAL_SLICE = 1, - NAL_SLICE_DPA = 2, - NAL_SLICE_DPB = 3, - NAL_SLICE_DPC = 4, - NAL_SLICE_IDR = 5, /* ref_idc != 0 */ - NAL_SEI = 6, /* ref_idc == 0 */ - NAL_SPS = 7, - NAL_PPS = 8, - NAL_AUD = 9, - NAL_FILLER = 12, - /* ref_idc == 0 for 6,9,10,11,12 */ -}; -enum nal_priority_e -{ - NAL_PRIORITY_DISPOSABLE = 0, - NAL_PRIORITY_LOW = 1, - NAL_PRIORITY_HIGH = 2, - NAL_PRIORITY_HIGHEST = 3, -}; - -/* The data within the payload is already NAL-encapsulated; the ref_idc and type - * are merely in the struct for easy access by the calling application. - * All data returned in an x264_nal_t, including the data in p_payload, is no longer - * valid after the next call to x264_encoder_encode. Thus it must be used or copied - * before calling x264_encoder_encode or x264_encoder_headers again. */ -typedef struct x264_nal_t -{ - int i_ref_idc; /* nal_priority_e */ - int i_type; /* nal_unit_type_e */ - int b_long_startcode; - int i_first_mb; /* If this NAL is a slice, the index of the first MB in the slice. */ - int i_last_mb; /* If this NAL is a slice, the index of the last MB in the slice. */ - - /* Size of payload (including any padding) in bytes. */ - int i_payload; - /* If param->b_annexb is set, Annex-B bytestream with startcode. - * Otherwise, startcode is replaced with a 4-byte size. - * This size is the size used in mp4/similar muxing; it is equal to i_payload-4 */ - uint8_t *p_payload; - - /* Size of padding in bytes. */ - int i_padding; -} x264_nal_t; - -/**************************************************************************** - * Encoder parameters - ****************************************************************************/ -/* CPU flags */ - -/* x86 */ -#define X264_CPU_MMX (1U<<0) -#define X264_CPU_MMX2 (1U<<1) /* MMX2 aka MMXEXT aka ISSE */ -#define X264_CPU_MMXEXT X264_CPU_MMX2 -#define X264_CPU_SSE (1U<<2) -#define X264_CPU_SSE2 (1U<<3) -#define X264_CPU_LZCNT (1U<<4) -#define X264_CPU_SSE3 (1U<<5) -#define X264_CPU_SSSE3 (1U<<6) -#define X264_CPU_SSE4 (1U<<7) /* SSE4.1 */ -#define X264_CPU_SSE42 (1U<<8) /* SSE4.2 */ -#define X264_CPU_AVX (1U<<9) /* Requires OS support even if YMM registers aren't used */ -#define X264_CPU_XOP (1U<<10) /* AMD XOP */ -#define X264_CPU_FMA4 (1U<<11) /* AMD FMA4 */ -#define X264_CPU_FMA3 (1U<<12) -#define X264_CPU_BMI1 (1U<<13) -#define X264_CPU_BMI2 (1U<<14) -#define X264_CPU_AVX2 (1U<<15) -#define X264_CPU_AVX512 (1U<<16) /* AVX-512 {F, CD, BW, DQ, VL}, requires OS support */ -/* x86 modifiers */ -#define X264_CPU_CACHELINE_32 (1U<<17) /* avoid memory loads that span the border between two cachelines */ -#define X264_CPU_CACHELINE_64 (1U<<18) /* 32/64 is the size of a cacheline in bytes */ -#define X264_CPU_SSE2_IS_SLOW (1U<<19) /* avoid most SSE2 functions on Athlon64 */ -#define X264_CPU_SSE2_IS_FAST (1U<<20) /* a few functions are only faster on Core2 and Phenom */ -#define X264_CPU_SLOW_SHUFFLE (1U<<21) /* The Conroe has a slow shuffle unit (relative to overall SSE performance) */ -#define X264_CPU_STACK_MOD4 (1U<<22) /* if stack is only mod4 and not mod16 */ -#define X264_CPU_SLOW_ATOM (1U<<23) /* The Atom is terrible: slow SSE unaligned loads, slow - * SIMD multiplies, slow SIMD variable shifts, slow pshufb, - * cacheline split penalties -- gather everything here that - * isn't shared by other CPUs to avoid making half a dozen - * new SLOW flags. */ -#define X264_CPU_SLOW_PSHUFB (1U<<24) /* such as on the Intel Atom */ -#define X264_CPU_SLOW_PALIGNR (1U<<25) /* such as on the AMD Bobcat */ - -/* PowerPC */ -#define X264_CPU_ALTIVEC 0x0000001U - -/* ARM and AArch64 */ -#define X264_CPU_ARMV6 0x0000001U -#define X264_CPU_NEON 0x0000002U /* ARM NEON */ -#define X264_CPU_FAST_NEON_MRC 0x0000004U /* Transfer from NEON to ARM register is fast (Cortex-A9) */ -#define X264_CPU_ARMV8 0x0000008U - -/* MIPS */ -#define X264_CPU_MSA 0x0000001U /* MIPS MSA */ - -/* Analyse flags */ -#define X264_ANALYSE_I4x4 0x0001U /* Analyse i4x4 */ -#define X264_ANALYSE_I8x8 0x0002U /* Analyse i8x8 (requires 8x8 transform) */ -#define X264_ANALYSE_PSUB16x16 0x0010U /* Analyse p16x8, p8x16 and p8x8 */ -#define X264_ANALYSE_PSUB8x8 0x0020U /* Analyse p8x4, p4x8, p4x4 */ -#define X264_ANALYSE_BSUB16x16 0x0100U /* Analyse b16x8, b8x16 and b8x8 */ - -#define X264_DIRECT_PRED_NONE 0 -#define X264_DIRECT_PRED_SPATIAL 1 -#define X264_DIRECT_PRED_TEMPORAL 2 -#define X264_DIRECT_PRED_AUTO 3 -#define X264_ME_DIA 0 -#define X264_ME_HEX 1 -#define X264_ME_UMH 2 -#define X264_ME_ESA 3 -#define X264_ME_TESA 4 -#define X264_CQM_FLAT 0 -#define X264_CQM_JVT 1 -#define X264_CQM_CUSTOM 2 -#define X264_RC_CQP 0 -#define X264_RC_CRF 1 -#define X264_RC_ABR 2 -#define X264_QP_AUTO 0 -#define X264_AQ_NONE 0 -#define X264_AQ_VARIANCE 1 -#define X264_AQ_AUTOVARIANCE 2 -#define X264_AQ_AUTOVARIANCE_BIASED 3 -#define X264_B_ADAPT_NONE 0 -#define X264_B_ADAPT_FAST 1 -#define X264_B_ADAPT_TRELLIS 2 -#define X264_WEIGHTP_NONE 0 -#define X264_WEIGHTP_SIMPLE 1 -#define X264_WEIGHTP_SMART 2 -#define X264_B_PYRAMID_NONE 0 -#define X264_B_PYRAMID_STRICT 1 -#define X264_B_PYRAMID_NORMAL 2 -#define X264_KEYINT_MIN_AUTO 0 -#define X264_KEYINT_MAX_INFINITE (1<<30) - -/* AVC-Intra flavors */ -#define X264_AVCINTRA_FLAVOR_PANASONIC 0 -#define X264_AVCINTRA_FLAVOR_SONY 1 - -static const char * const x264_direct_pred_names[] = { "none", "spatial", "temporal", "auto", 0 }; -static const char * const x264_motion_est_names[] = { "dia", "hex", "umh", "esa", "tesa", 0 }; -static const char * const x264_b_pyramid_names[] = { "none", "strict", "normal", 0 }; -static const char * const x264_overscan_names[] = { "undef", "show", "crop", 0 }; -static const char * const x264_vidformat_names[] = { "component", "pal", "ntsc", "secam", "mac", "undef", 0 }; -static const char * const x264_fullrange_names[] = { "off", "on", 0 }; -static const char * const x264_colorprim_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "film", "bt2020", "smpte428", - "smpte431", "smpte432", 0 }; -static const char * const x264_transfer_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "linear", "log100", "log316", - "iec61966-2-4", "bt1361e", "iec61966-2-1", "bt2020-10", "bt2020-12", "smpte2084", "smpte428", "arib-std-b67", 0 }; -static const char * const x264_colmatrix_names[] = { "GBR", "bt709", "undef", "", "fcc", "bt470bg", "smpte170m", "smpte240m", "YCgCo", "bt2020nc", "bt2020c", - "smpte2085", "chroma-derived-nc", "chroma-derived-c", "ICtCp", 0 }; -static const char * const x264_nal_hrd_names[] = { "none", "vbr", "cbr", 0 }; -static const char * const x264_avcintra_flavor_names[] = { "panasonic", "sony", 0 }; - -/* Colorspace type */ -#define X264_CSP_MASK 0x00ff /* */ -#define X264_CSP_NONE 0x0000 /* Invalid mode */ -#define X264_CSP_I400 0x0001 /* monochrome 4:0:0 */ -#define X264_CSP_I420 0x0002 /* yuv 4:2:0 planar */ -#define X264_CSP_YV12 0x0003 /* yvu 4:2:0 planar */ -#define X264_CSP_NV12 0x0004 /* yuv 4:2:0, with one y plane and one packed u+v */ -#define X264_CSP_NV21 0x0005 /* yuv 4:2:0, with one y plane and one packed v+u */ -#define X264_CSP_I422 0x0006 /* yuv 4:2:2 planar */ -#define X264_CSP_YV16 0x0007 /* yvu 4:2:2 planar */ -#define X264_CSP_NV16 0x0008 /* yuv 4:2:2, with one y plane and one packed u+v */ -#define X264_CSP_YUYV 0x0009 /* yuyv 4:2:2 packed */ -#define X264_CSP_UYVY 0x000a /* uyvy 4:2:2 packed */ -#define X264_CSP_V210 0x000b /* 10-bit yuv 4:2:2 packed in 32 */ -#define X264_CSP_I444 0x000c /* yuv 4:4:4 planar */ -#define X264_CSP_YV24 0x000d /* yvu 4:4:4 planar */ -#define X264_CSP_BGR 0x000e /* packed bgr 24bits */ -#define X264_CSP_BGRA 0x000f /* packed bgr 32bits */ -#define X264_CSP_RGB 0x0010 /* packed rgb 24bits */ -#define X264_CSP_MAX 0x0011 /* end of list */ -#define X264_CSP_VFLIP 0x1000 /* the csp is vertically flipped */ -#define X264_CSP_HIGH_DEPTH 0x2000 /* the csp has a depth of 16 bits per pixel component */ - -/* Slice type */ -#define X264_TYPE_AUTO 0x0000 /* Let x264 choose the right type */ -#define X264_TYPE_IDR 0x0001 -#define X264_TYPE_I 0x0002 -#define X264_TYPE_P 0x0003 -#define X264_TYPE_BREF 0x0004 /* Non-disposable B-frame */ -#define X264_TYPE_B 0x0005 -#define X264_TYPE_KEYFRAME 0x0006 /* IDR or I depending on b_open_gop option */ -#define IS_X264_TYPE_I(x) ((x)==X264_TYPE_I || (x)==X264_TYPE_IDR || (x)==X264_TYPE_KEYFRAME) -#define IS_X264_TYPE_B(x) ((x)==X264_TYPE_B || (x)==X264_TYPE_BREF) - -/* Log level */ -#define X264_LOG_NONE (-1) -#define X264_LOG_ERROR 0 -#define X264_LOG_WARNING 1 -#define X264_LOG_INFO 2 -#define X264_LOG_DEBUG 3 - -/* Threading */ -#define X264_THREADS_AUTO 0 /* Automatically select optimal number of threads */ -#define X264_SYNC_LOOKAHEAD_AUTO (-1) /* Automatically select optimal lookahead thread buffer size */ - -/* HRD */ -#define X264_NAL_HRD_NONE 0 -#define X264_NAL_HRD_VBR 1 -#define X264_NAL_HRD_CBR 2 - -/* Zones: override ratecontrol or other options for specific sections of the video. - * See x264_encoder_reconfig() for which options can be changed. - * If zones overlap, whichever comes later in the list takes precedence. */ -typedef struct x264_zone_t -{ - int i_start, i_end; /* range of frame numbers */ - int b_force_qp; /* whether to use qp vs bitrate factor */ - int i_qp; - float f_bitrate_factor; - struct x264_param_t *param; -} x264_zone_t; - -typedef struct x264_param_t -{ - /* CPU flags */ - uint32_t cpu; - int i_threads; /* encode multiple frames in parallel */ - int i_lookahead_threads; /* multiple threads for lookahead analysis */ - int b_sliced_threads; /* Whether to use slice-based threading. */ - int b_deterministic; /* whether to allow non-deterministic optimizations when threaded */ - int b_cpu_independent; /* force canonical behavior rather than cpu-dependent optimal algorithms */ - int i_sync_lookahead; /* threaded lookahead buffer */ - - /* Video Properties */ - int i_width; - int i_height; - int i_csp; /* CSP of encoded bitstream */ - int i_bitdepth; - int i_level_idc; - int i_frame_total; /* number of frames to encode if known, else 0 */ - - /* NAL HRD - * Uses Buffering and Picture Timing SEIs to signal HRD - * The HRD in H.264 was not designed with VFR in mind. - * It is therefore not recommendeded to use NAL HRD with VFR. - * Furthermore, reconfiguring the VBV (via x264_encoder_reconfig) - * will currently generate invalid HRD. */ - int i_nal_hrd; - - struct - { - /* they will be reduced to be 0 < x <= 65535 and prime */ - int i_sar_height; - int i_sar_width; - - int i_overscan; /* 0=undef, 1=no overscan, 2=overscan */ - - /* see h264 annex E for the values of the following */ - int i_vidformat; - int b_fullrange; - int i_colorprim; - int i_transfer; - int i_colmatrix; - int i_chroma_loc; /* both top & bottom */ - } vui; - - /* Bitstream parameters */ - int i_frame_reference; /* Maximum number of reference frames */ - int i_dpb_size; /* Force a DPB size larger than that implied by B-frames and reference frames. - * Useful in combination with interactive error resilience. */ - int i_keyint_max; /* Force an IDR keyframe at this interval */ - int i_keyint_min; /* Scenecuts closer together than this are coded as I, not IDR. */ - int i_scenecut_threshold; /* how aggressively to insert extra I frames */ - int b_intra_refresh; /* Whether or not to use periodic intra refresh instead of IDR frames. */ - - int i_bframe; /* how many b-frame between 2 references pictures */ - int i_bframe_adaptive; - int i_bframe_bias; - int i_bframe_pyramid; /* Keep some B-frames as references: 0=off, 1=strict hierarchical, 2=normal */ - int b_open_gop; - int b_bluray_compat; - int i_avcintra_class; - int i_avcintra_flavor; - - int b_deblocking_filter; - int i_deblocking_filter_alphac0; /* [-6, 6] -6 light filter, 6 strong */ - int i_deblocking_filter_beta; /* [-6, 6] idem */ - - int b_cabac; - int i_cabac_init_idc; - - int b_interlaced; - int b_constrained_intra; - - int i_cqm_preset; - char *psz_cqm_file; /* filename (in UTF-8) of CQM file, JM format */ - uint8_t cqm_4iy[16]; /* used only if i_cqm_preset == X264_CQM_CUSTOM */ - uint8_t cqm_4py[16]; - uint8_t cqm_4ic[16]; - uint8_t cqm_4pc[16]; - uint8_t cqm_8iy[64]; - uint8_t cqm_8py[64]; - uint8_t cqm_8ic[64]; - uint8_t cqm_8pc[64]; - - /* Log */ - void (*pf_log)( void *, int i_level, const char *psz, va_list ); - void *p_log_private; - int i_log_level; - int b_full_recon; /* fully reconstruct frames, even when not necessary for encoding. Implied by psz_dump_yuv */ - char *psz_dump_yuv; /* filename (in UTF-8) for reconstructed frames */ - - /* Encoder analyser parameters */ - struct - { - unsigned int intra; /* intra partitions */ - unsigned int inter; /* inter partitions */ - - int b_transform_8x8; - int i_weighted_pred; /* weighting for P-frames */ - int b_weighted_bipred; /* implicit weighting for B-frames */ - int i_direct_mv_pred; /* spatial vs temporal mv prediction */ - int i_chroma_qp_offset; - - int i_me_method; /* motion estimation algorithm to use (X264_ME_*) */ - int i_me_range; /* integer pixel motion estimation search range (from predicted mv) */ - int i_mv_range; /* maximum length of a mv (in pixels). -1 = auto, based on level */ - int i_mv_range_thread; /* minimum space between threads. -1 = auto, based on number of threads. */ - int i_subpel_refine; /* subpixel motion estimation quality */ - int b_chroma_me; /* chroma ME for subpel and mode decision in P-frames */ - int b_mixed_references; /* allow each mb partition to have its own reference number */ - int i_trellis; /* trellis RD quantization */ - int b_fast_pskip; /* early SKIP detection on P-frames */ - int b_dct_decimate; /* transform coefficient thresholding on P-frames */ - int i_noise_reduction; /* adaptive pseudo-deadzone */ - float f_psy_rd; /* Psy RD strength */ - float f_psy_trellis; /* Psy trellis strength */ - int b_psy; /* Toggle all psy optimizations */ - - int b_mb_info; /* Use input mb_info data in x264_picture_t */ - int b_mb_info_update; /* Update the values in mb_info according to the results of encoding. */ - - /* the deadzone size that will be used in luma quantization */ - int i_luma_deadzone[2]; /* {inter, intra} */ - - int b_psnr; /* compute and print PSNR stats */ - int b_ssim; /* compute and print SSIM stats */ - } analyse; - - /* Rate control parameters */ - struct - { - int i_rc_method; /* X264_RC_* */ - - int i_qp_constant; /* 0=lossless */ - int i_qp_min; /* min allowed QP value */ - int i_qp_max; /* max allowed QP value */ - int i_qp_step; /* max QP step between frames */ - - int i_bitrate; - float f_rf_constant; /* 1pass VBR, nominal QP */ - float f_rf_constant_max; /* In CRF mode, maximum CRF as caused by VBV */ - float f_rate_tolerance; - int i_vbv_max_bitrate; - int i_vbv_buffer_size; - float f_vbv_buffer_init; /* <=1: fraction of buffer_size. >1: kbit */ - float f_ip_factor; - float f_pb_factor; - - /* VBV filler: force CBR VBV and use filler bytes to ensure hard-CBR. - * Implied by NAL-HRD CBR. */ - int b_filler; - - int i_aq_mode; /* psy adaptive QP. (X264_AQ_*) */ - float f_aq_strength; - int b_mb_tree; /* Macroblock-tree ratecontrol. */ - int i_lookahead; - - /* 2pass */ - int b_stat_write; /* Enable stat writing in psz_stat_out */ - char *psz_stat_out; /* output filename (in UTF-8) of the 2pass stats file */ - int b_stat_read; /* Read stat from psz_stat_in and use it */ - char *psz_stat_in; /* input filename (in UTF-8) of the 2pass stats file */ - - /* 2pass params (same as ffmpeg ones) */ - float f_qcompress; /* 0.0 => cbr, 1.0 => constant qp */ - float f_qblur; /* temporally blur quants */ - float f_complexity_blur; /* temporally blur complexity */ - x264_zone_t *zones; /* ratecontrol overrides */ - int i_zones; /* number of zone_t's */ - char *psz_zones; /* alternate method of specifying zones */ - } rc; - - /* Cropping Rectangle parameters: added to those implicitly defined by - non-mod16 video resolutions. */ - struct - { - int i_left; - int i_top; - int i_right; - int i_bottom; - } crop_rect; - - /* frame packing arrangement flag */ - int i_frame_packing; - - /* mastering display SEI: Primary and white point chromaticity coordinates - in 0.00002 increments. Brightness units are 0.0001 cd/m^2. */ - struct - { - int b_mastering_display; /* enable writing this SEI */ - int i_green_x; - int i_green_y; - int i_blue_x; - int i_blue_y; - int i_red_x; - int i_red_y; - int i_white_x; - int i_white_y; - int64_t i_display_max; - int64_t i_display_min; - } mastering_display; - - /* content light level SEI */ - struct - { - int b_cll; /* enable writing this SEI */ - int i_max_cll; - int i_max_fall; - } content_light_level; - - /* alternative transfer SEI */ - int i_alternative_transfer; - - /* Muxing parameters */ - int b_aud; /* generate access unit delimiters */ - int b_repeat_headers; /* put SPS/PPS before each keyframe */ - int b_annexb; /* if set, place start codes (4 bytes) before NAL units, - * otherwise place size (4 bytes) before NAL units. */ - int i_sps_id; /* SPS and PPS id number */ - int b_vfr_input; /* VFR input. If 1, use timebase and timestamps for ratecontrol purposes. - * If 0, use fps only. */ - int b_pulldown; /* use explicitly set timebase for CFR */ - uint32_t i_fps_num; - uint32_t i_fps_den; - uint32_t i_timebase_num; /* Timebase numerator */ - uint32_t i_timebase_den; /* Timebase denominator */ - - int b_tff; - - /* Pulldown: - * The correct pic_struct must be passed with each input frame. - * The input timebase should be the timebase corresponding to the output framerate. This should be constant. - * e.g. for 3:2 pulldown timebase should be 1001/30000 - * The PTS passed with each frame must be the PTS of the frame after pulldown is applied. - * Frame doubling and tripling require b_vfr_input set to zero (see H.264 Table D-1) - * - * Pulldown changes are not clearly defined in H.264. Therefore, it is the calling app's responsibility to manage this. - */ - - int b_pic_struct; - - /* Fake Interlaced. - * - * Used only when b_interlaced=0. Setting this flag makes it possible to flag the stream as PAFF interlaced yet - * encode all frames progessively. It is useful for encoding 25p and 30p Blu-Ray streams. - */ - - int b_fake_interlaced; - - /* Don't optimize header parameters based on video content, e.g. ensure that splitting an input video, compressing - * each part, and stitching them back together will result in identical SPS/PPS. This is necessary for stitching - * with container formats that don't allow multiple SPS/PPS. */ - int b_stitchable; - - int b_opencl; /* use OpenCL when available */ - int i_opencl_device; /* specify count of GPU devices to skip, for CLI users */ - void *opencl_device_id; /* pass explicit cl_device_id as void*, for API users */ - char *psz_clbin_file; /* filename (in UTF-8) of the compiled OpenCL kernel cache file */ - - /* Slicing parameters */ - int i_slice_max_size; /* Max size per slice in bytes; includes estimated NAL overhead. */ - int i_slice_max_mbs; /* Max number of MBs per slice; overrides i_slice_count. */ - int i_slice_min_mbs; /* Min number of MBs per slice */ - int i_slice_count; /* Number of slices per frame: forces rectangular slices. */ - int i_slice_count_max; /* Absolute cap on slices per frame; stops applying slice-max-size - * and slice-max-mbs if this is reached. */ - - /* Optional callback for freeing this x264_param_t when it is done being used. - * Only used when the x264_param_t sits in memory for an indefinite period of time, - * i.e. when an x264_param_t is passed to x264_t in an x264_picture_t or in zones. - * Not used when x264_encoder_reconfig is called directly. */ - void (*param_free)( void* ); - - /* Optional low-level callback for low-latency encoding. Called for each output NAL unit - * immediately after the NAL unit is finished encoding. This allows the calling application - * to begin processing video data (e.g. by sending packets over a network) before the frame - * is done encoding. - * - * This callback MUST do the following in order to work correctly: - * 1) Have available an output buffer of at least size nal->i_payload*3/2 + 5 + 64. - * 2) Call x264_nal_encode( h, dst, nal ), where dst is the output buffer. - * After these steps, the content of nal is valid and can be used in the same way as if - * the NAL unit were output by x264_encoder_encode. - * - * This does not need to be synchronous with the encoding process: the data pointed to - * by nal (both before and after x264_nal_encode) will remain valid until the next - * x264_encoder_encode call. The callback must be re-entrant. - * - * This callback does not work with frame-based threads; threads must be disabled - * or sliced-threads enabled. This callback also does not work as one would expect - * with HRD -- since the buffering period SEI cannot be calculated until the frame - * is finished encoding, it will not be sent via this callback. - * - * Note also that the NALs are not necessarily returned in order when sliced threads is - * enabled. Accordingly, the variable i_first_mb and i_last_mb are available in - * x264_nal_t to help the calling application reorder the slices if necessary. - * - * When this callback is enabled, x264_encoder_encode does not return valid NALs; - * the calling application is expected to acquire all output NALs through the callback. - * - * It is generally sensible to combine this callback with a use of slice-max-mbs or - * slice-max-size. - * - * The opaque pointer is the opaque pointer from the input frame associated with this - * NAL unit. This helps distinguish between nalu_process calls from different sources, - * e.g. if doing multiple encodes in one process. - */ - void (*nalu_process)( x264_t *h, x264_nal_t *nal, void *opaque ); - - /* For internal use only */ - void *opaque; -} x264_param_t; - -X264_API void x264_nal_encode( x264_t *h, uint8_t *dst, x264_nal_t *nal ); - -/**************************************************************************** - * H.264 level restriction information - ****************************************************************************/ - -typedef struct x264_level_t -{ - uint8_t level_idc; - int32_t mbps; /* max macroblock processing rate (macroblocks/sec) */ - int32_t frame_size; /* max frame size (macroblocks) */ - int32_t dpb; /* max decoded picture buffer (mbs) */ - int32_t bitrate; /* max bitrate (kbit/sec) */ - int32_t cpb; /* max vbv buffer (kbit) */ - uint16_t mv_range; /* max vertical mv component range (pixels) */ - uint8_t mvs_per_2mb; /* max mvs per 2 consecutive mbs. */ - uint8_t slice_rate; /* ?? */ - uint8_t mincr; /* min compression ratio */ - uint8_t bipred8x8; /* limit bipred to >=8x8 */ - uint8_t direct8x8; /* limit b_direct to >=8x8 */ - uint8_t frame_only; /* forbid interlacing */ -} x264_level_t; - -/* all of the levels defined in the standard, terminated by .level_idc=0 */ -X264_API extern const x264_level_t x264_levels[]; - -/**************************************************************************** - * Basic parameter handling functions - ****************************************************************************/ - -/* x264_param_default: - * fill x264_param_t with default values and do CPU detection */ -X264_API void x264_param_default( x264_param_t * ); - -/* x264_param_parse: - * set one parameter by name. - * returns 0 on success, or returns one of the following errors. - * note: BAD_VALUE occurs only if it can't even parse the value, - * numerical range is not checked until x264_encoder_open() or - * x264_encoder_reconfig(). - * value=NULL means "true" for boolean options, but is a BAD_VALUE for non-booleans. - * can allocate memory which should be freed by call of x264_param_cleanup. */ -#define X264_PARAM_BAD_NAME (-1) -#define X264_PARAM_BAD_VALUE (-2) -#define X264_PARAM_ALLOC_FAILED (-3) -X264_API int x264_param_parse( x264_param_t *, const char *name, const char *value ); - -/* x264_param_cleanup: - * Cleans up and frees allocated members of x264_param_t. - * This *does not* free the x264_param_t itself, as it may exist on the - * stack. It only frees any members of the struct that were allocated by - * x264 itself, in e.g. x264_param_parse(). */ -X264_API void x264_param_cleanup( x264_param_t *param ); - -/**************************************************************************** - * Advanced parameter handling functions - ****************************************************************************/ - -/* These functions expose the full power of x264's preset-tune-profile system for - * easy adjustment of large numbers of internal parameters. - * - * In order to replicate x264CLI's option handling, these functions MUST be called - * in the following order: - * 1) x264_param_default_preset - * 2) Custom user options (via param_parse or directly assigned variables) - * 3) x264_param_apply_fastfirstpass - * 4) x264_param_apply_profile - * - * Additionally, x264CLI does not apply step 3 if the preset chosen is "placebo" - * or --slow-firstpass is set. */ - -/* x264_param_default_preset: - * The same as x264_param_default, but also use the passed preset and tune - * to modify the default settings. - * (either can be NULL, which implies no preset or no tune, respectively) - * - * Currently available presets are, ordered from fastest to slowest: */ -static const char * const x264_preset_names[] = { "ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo", 0 }; - -/* The presets can also be indexed numerically, as in: - * x264_param_default_preset( ¶m, "3", ... ) - * with ultrafast mapping to "0" and placebo mapping to "9". This mapping may - * of course change if new presets are added in between, but will always be - * ordered from fastest to slowest. - * - * Warning: the speed of these presets scales dramatically. Ultrafast is a full - * 100 times faster than placebo! - * - * Currently available tunings are: */ -static const char * const x264_tune_names[] = { "film", "animation", "grain", "stillimage", "psnr", "ssim", "fastdecode", "zerolatency", 0 }; - -/* Multiple tunings can be used if separated by a delimiter in ",./-+", - * however multiple psy tunings cannot be used. - * film, animation, grain, stillimage, psnr, and ssim are psy tunings. - * - * returns 0 on success, negative on failure (e.g. invalid preset/tune name). */ -X264_API int x264_param_default_preset( x264_param_t *, const char *preset, const char *tune ); - -/* x264_param_apply_fastfirstpass: - * If first-pass mode is set (rc.b_stat_read == 0, rc.b_stat_write == 1), - * modify the encoder settings to disable options generally not useful on - * the first pass. */ -X264_API void x264_param_apply_fastfirstpass( x264_param_t * ); - -/* x264_param_apply_profile: - * Applies the restrictions of the given profile. - * Currently available profiles are, from most to least restrictive: */ -static const char * const x264_profile_names[] = { "baseline", "main", "high", "high10", "high422", "high444", 0 }; - -/* (can be NULL, in which case the function will do nothing) - * - * Does NOT guarantee that the given profile will be used: if the restrictions - * of "High" are applied to settings that are already Baseline-compatible, the - * stream will remain baseline. In short, it does not increase settings, only - * decrease them. - * - * returns 0 on success, negative on failure (e.g. invalid profile name). */ -X264_API int x264_param_apply_profile( x264_param_t *, const char *profile ); - -/**************************************************************************** - * Picture structures and functions - ****************************************************************************/ - -/* x264_chroma_format: - * Specifies the chroma formats that x264 supports encoding. When this - * value is non-zero, then it represents a X264_CSP_* that is the only - * chroma format that x264 supports encoding. If the value is 0 then - * there are no restrictions. */ -X264_API extern const int x264_chroma_format; - -enum pic_struct_e -{ - PIC_STRUCT_AUTO = 0, // automatically decide (default) - PIC_STRUCT_PROGRESSIVE = 1, // progressive frame - // "TOP" and "BOTTOM" are not supported in x264 (PAFF only) - PIC_STRUCT_TOP_BOTTOM = 4, // top field followed by bottom - PIC_STRUCT_BOTTOM_TOP = 5, // bottom field followed by top - PIC_STRUCT_TOP_BOTTOM_TOP = 6, // top field, bottom field, top field repeated - PIC_STRUCT_BOTTOM_TOP_BOTTOM = 7, // bottom field, top field, bottom field repeated - PIC_STRUCT_DOUBLE = 8, // double frame - PIC_STRUCT_TRIPLE = 9, // triple frame -}; - -typedef struct x264_hrd_t -{ - double cpb_initial_arrival_time; - double cpb_final_arrival_time; - double cpb_removal_time; - - double dpb_output_time; -} x264_hrd_t; - -/* Arbitrary user SEI: - * Payload size is in bytes and the payload pointer must be valid. - * Payload types and syntax can be found in Annex D of the H.264 Specification. - * SEI payload alignment bits as described in Annex D must be included at the - * end of the payload if needed. - * The payload should not be NAL-encapsulated. - * Payloads are written first in order of input, apart from in the case when HRD - * is enabled where payloads are written after the Buffering Period SEI. */ - -typedef struct x264_sei_payload_t -{ - int payload_size; - int payload_type; - uint8_t *payload; -} x264_sei_payload_t; - -typedef struct x264_sei_t -{ - int num_payloads; - x264_sei_payload_t *payloads; - /* In: optional callback to free each payload AND x264_sei_payload_t when used. */ - void (*sei_free)( void* ); -} x264_sei_t; - -typedef struct x264_image_t -{ - int i_csp; /* Colorspace */ - int i_plane; /* Number of image planes */ - int i_stride[4]; /* Strides for each plane */ - uint8_t *plane[4]; /* Pointers to each plane */ -} x264_image_t; - -typedef struct x264_image_properties_t -{ - /* All arrays of data here are ordered as follows: - * each array contains one offset per macroblock, in raster scan order. In interlaced - * mode, top-field MBs and bottom-field MBs are interleaved at the row level. - * Macroblocks are 16x16 blocks of pixels (with respect to the luma plane). For the - * purposes of calculating the number of macroblocks, width and height are rounded up to - * the nearest 16. If in interlaced mode, height is rounded up to the nearest 32 instead. */ - - /* In: an array of quantizer offsets to be applied to this image during encoding. - * These are added on top of the decisions made by x264. - * Offsets can be fractional; they are added before QPs are rounded to integer. - * Adaptive quantization must be enabled to use this feature. Behavior if quant - * offsets differ between encoding passes is undefined. */ - float *quant_offsets; - /* In: optional callback to free quant_offsets when used. - * Useful if one wants to use a different quant_offset array for each frame. */ - void (*quant_offsets_free)( void* ); - - /* In: optional array of flags for each macroblock. - * Allows specifying additional information for the encoder such as which macroblocks - * remain unchanged. Usable flags are listed below. - * x264_param_t.analyse.b_mb_info must be set to use this, since x264 needs to track - * extra data internally to make full use of this information. - * - * Out: if b_mb_info_update is set, x264 will update this array as a result of encoding. - * - * For "MBINFO_CONSTANT", it will remove this flag on any macroblock whose decoded - * pixels have changed. This can be useful for e.g. noting which areas of the - * frame need to actually be blitted. Note: this intentionally ignores the effects - * of deblocking for the current frame, which should be fine unless one needs exact - * pixel-perfect accuracy. - * - * Results for MBINFO_CONSTANT are currently only set for P-frames, and are not - * guaranteed to enumerate all blocks which haven't changed. (There may be false - * negatives, but no false positives.) - */ - uint8_t *mb_info; - /* In: optional callback to free mb_info when used. */ - void (*mb_info_free)( void* ); - - /* The macroblock is constant and remains unchanged from the previous frame. */ - #define X264_MBINFO_CONSTANT (1U<<0) - /* More flags may be added in the future. */ - - /* Out: SSIM of the the frame luma (if x264_param_t.b_ssim is set) */ - double f_ssim; - /* Out: Average PSNR of the frame (if x264_param_t.b_psnr is set) */ - double f_psnr_avg; - /* Out: PSNR of Y, U, and V (if x264_param_t.b_psnr is set) */ - double f_psnr[3]; - - /* Out: Average effective CRF of the encoded frame */ - double f_crf_avg; -} x264_image_properties_t; - -typedef struct x264_picture_t -{ - /* In: force picture type (if not auto) - * If x264 encoding parameters are violated in the forcing of picture types, - * x264 will correct the input picture type and log a warning. - * Out: type of the picture encoded */ - int i_type; - /* In: force quantizer for != X264_QP_AUTO */ - int i_qpplus1; - /* In: pic_struct, for pulldown/doubling/etc...used only if b_pic_struct=1. - * use pic_struct_e for pic_struct inputs - * Out: pic_struct element associated with frame */ - int i_pic_struct; - /* Out: whether this frame is a keyframe. Important when using modes that result in - * SEI recovery points being used instead of IDR frames. */ - int b_keyframe; - /* In: user pts, Out: pts of encoded picture (user)*/ - int64_t i_pts; - /* Out: frame dts. When the pts of the first frame is close to zero, - * initial frames may have a negative dts which must be dealt with by any muxer */ - int64_t i_dts; - /* In: custom encoding parameters to be set from this frame forwards - (in coded order, not display order). If NULL, continue using - parameters from the previous frame. Some parameters, such as - aspect ratio, can only be changed per-GOP due to the limitations - of H.264 itself; in this case, the caller must force an IDR frame - if it needs the changed parameter to apply immediately. */ - x264_param_t *param; - /* In: raw image data */ - /* Out: reconstructed image data. x264 may skip part of the reconstruction process, - e.g. deblocking, in frames where it isn't necessary. To force complete - reconstruction, at a small speed cost, set b_full_recon. */ - x264_image_t img; - /* In: optional information to modify encoder decisions for this frame - * Out: information about the encoded frame */ - x264_image_properties_t prop; - /* Out: HRD timing information. Output only when i_nal_hrd is set. */ - x264_hrd_t hrd_timing; - /* In: arbitrary user SEI (e.g subtitles, AFDs) */ - x264_sei_t extra_sei; - /* private user data. copied from input to output frames. */ - void *opaque; -} x264_picture_t; - -/* x264_picture_init: - * initialize an x264_picture_t. Needs to be done if the calling application - * allocates its own x264_picture_t as opposed to using x264_picture_alloc. */ -X264_API void x264_picture_init( x264_picture_t *pic ); - -/* x264_picture_alloc: - * alloc data for a picture. You must call x264_picture_clean on it. - * returns 0 on success, or -1 on malloc failure or invalid colorspace. */ -X264_API int x264_picture_alloc( x264_picture_t *pic, int i_csp, int i_width, int i_height ); - -/* x264_picture_clean: - * free associated resource for a x264_picture_t allocated with - * x264_picture_alloc ONLY */ -X264_API void x264_picture_clean( x264_picture_t *pic ); - -/**************************************************************************** - * Encoder functions - ****************************************************************************/ - -/* Force a link error in the case of linking against an incompatible API version. - * Glue #defines exist to force correct macro expansion; the final output of the macro - * is x264_encoder_open_##X264_BUILD (for purposes of dlopen). */ -#define x264_encoder_glue1(x,y) x##y -#define x264_encoder_glue2(x,y) x264_encoder_glue1(x,y) -#define x264_encoder_open x264_encoder_glue2(x264_encoder_open_,X264_BUILD) - -/* x264_encoder_open: - * create a new encoder handler, all parameters from x264_param_t are copied */ -X264_API x264_t *x264_encoder_open( x264_param_t * ); - -/* x264_encoder_reconfig: - * various parameters from x264_param_t are copied. - * this takes effect immediately, on whichever frame is encoded next; - * due to delay, this may not be the next frame passed to encoder_encode. - * if the change should apply to some particular frame, use x264_picture_t->param instead. - * returns 0 on success, negative on parameter validation error. - * not all parameters can be changed; see the actual function for a detailed breakdown. - * - * since not all parameters can be changed, moving from preset to preset may not always - * fully copy all relevant parameters, but should still work usably in practice. however, - * more so than for other presets, many of the speed shortcuts used in ultrafast cannot be - * switched out of; using reconfig to switch between ultrafast and other presets is not - * recommended without a more fine-grained breakdown of parameters to take this into account. */ -X264_API int x264_encoder_reconfig( x264_t *, x264_param_t * ); -/* x264_encoder_parameters: - * copies the current internal set of parameters to the pointer provided - * by the caller. useful when the calling application needs to know - * how x264_encoder_open has changed the parameters, or the current state - * of the encoder after multiple x264_encoder_reconfig calls. - * note that the data accessible through pointers in the returned param struct - * (e.g. filenames) should not be modified by the calling application. */ -X264_API void x264_encoder_parameters( x264_t *, x264_param_t * ); -/* x264_encoder_headers: - * return the SPS and PPS that will be used for the whole stream. - * *pi_nal is the number of NAL units outputted in pp_nal. - * returns the number of bytes in the returned NALs. - * returns negative on error. - * the payloads of all output NALs are guaranteed to be sequential in memory. */ -X264_API int x264_encoder_headers( x264_t *, x264_nal_t **pp_nal, int *pi_nal ); -/* x264_encoder_encode: - * encode one picture. - * *pi_nal is the number of NAL units outputted in pp_nal. - * returns the number of bytes in the returned NALs. - * returns negative on error and zero if no NAL units returned. - * the payloads of all output NALs are guaranteed to be sequential in memory. */ -X264_API int x264_encoder_encode( x264_t *, x264_nal_t **pp_nal, int *pi_nal, x264_picture_t *pic_in, x264_picture_t *pic_out ); -/* x264_encoder_close: - * close an encoder handler */ -X264_API void x264_encoder_close( x264_t * ); -/* x264_encoder_delayed_frames: - * return the number of currently delayed (buffered) frames - * this should be used at the end of the stream, to know when you have all the encoded frames. */ -X264_API int x264_encoder_delayed_frames( x264_t * ); -/* x264_encoder_maximum_delayed_frames( x264_t * ): - * return the maximum number of delayed (buffered) frames that can occur with the current - * parameters. */ -X264_API int x264_encoder_maximum_delayed_frames( x264_t * ); -/* x264_encoder_intra_refresh: - * If an intra refresh is not in progress, begin one with the next P-frame. - * If an intra refresh is in progress, begin one as soon as the current one finishes. - * Requires that b_intra_refresh be set. - * - * Useful for interactive streaming where the client can tell the server that packet loss has - * occurred. In this case, keyint can be set to an extremely high value so that intra refreshes - * only occur when calling x264_encoder_intra_refresh. - * - * In multi-pass encoding, if x264_encoder_intra_refresh is called differently in each pass, - * behavior is undefined. - * - * Should not be called during an x264_encoder_encode. */ -X264_API void x264_encoder_intra_refresh( x264_t * ); -/* x264_encoder_invalidate_reference: - * An interactive error resilience tool, designed for use in a low-latency one-encoder-few-clients - * system. When the client has packet loss or otherwise incorrectly decodes a frame, the encoder - * can be told with this command to "forget" the frame and all frames that depend on it, referencing - * only frames that occurred before the loss. This will force a keyframe if no frames are left to - * reference after the aforementioned "forgetting". - * - * It is strongly recommended to use a large i_dpb_size in this case, which allows the encoder to - * keep around extra, older frames to fall back on in case more recent frames are all invalidated. - * Unlike increasing i_frame_reference, this does not increase the number of frames used for motion - * estimation and thus has no speed impact. It is also recommended to set a very large keyframe - * interval, so that keyframes are not used except as necessary for error recovery. - * - * x264_encoder_invalidate_reference is not currently compatible with the use of B-frames or intra - * refresh. - * - * In multi-pass encoding, if x264_encoder_invalidate_reference is called differently in each pass, - * behavior is undefined. - * - * Should not be called during an x264_encoder_encode, but multiple calls can be made simultaneously. - * - * Returns 0 on success, negative on failure. */ -X264_API int x264_encoder_invalidate_reference( x264_t *, int64_t pts ); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/x264_config.h b/prebuilts/aarch64/include/x264_config.h deleted file mode 100644 index 4b4b60e..0000000 --- a/prebuilts/aarch64/include/x264_config.h +++ /dev/null @@ -1,8 +0,0 @@ -#define X264_GPL 1 -#define X264_INTERLACED 1 -#define X264_BIT_DEPTH 0 -#define X264_CHROMA_FORMAT 0 -#define X264_REV 3094 -#define X264_REV_DIFF 0 -#define X264_VERSION " r3094 bfc87b7" -#define X264_POINTVER "0.164.3094 bfc87b7" diff --git a/prebuilts/aarch64/include/xf86drm.h b/prebuilts/aarch64/include/xf86drm.h deleted file mode 100644 index 1631396..0000000 --- a/prebuilts/aarch64/include/xf86drm.h +++ /dev/null @@ -1,966 +0,0 @@ -/** - * \file xf86drm.h - * OS-independent header for DRM user-level library interface. - * - * \author Rickard E. (Rik) Faith - */ - -/* - * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - */ - -#ifndef _XF86DRM_H_ -#define _XF86DRM_H_ - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef DRM_MAX_MINOR -#define DRM_MAX_MINOR 16 -#endif - -#if defined(__linux__) - -#define DRM_IOCTL_NR(n) _IOC_NR(n) -#define DRM_IOC_VOID _IOC_NONE -#define DRM_IOC_READ _IOC_READ -#define DRM_IOC_WRITE _IOC_WRITE -#define DRM_IOC_READWRITE _IOC_READ|_IOC_WRITE -#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) - -#else /* One of the *BSDs */ - -#include -#define DRM_IOCTL_NR(n) ((n) & 0xff) -#define DRM_IOC_VOID IOC_VOID -#define DRM_IOC_READ IOC_OUT -#define DRM_IOC_WRITE IOC_IN -#define DRM_IOC_READWRITE IOC_INOUT -#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) - -#endif - - /* Defaults, if nothing set in xf86config */ -#define DRM_DEV_UID 0 -#define DRM_DEV_GID 0 -/* Default /dev/dri directory permissions 0755 */ -#define DRM_DEV_DIRMODE \ - (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH) -#define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) - -#ifdef __OpenBSD__ -#define DRM_DIR_NAME "/dev" -#define DRM_PRIMARY_MINOR_NAME "drm" -#define DRM_CONTROL_MINOR_NAME "drmC" -#define DRM_RENDER_MINOR_NAME "drmR" -#else -#define DRM_DIR_NAME "/dev/dri" -#define DRM_PRIMARY_MINOR_NAME "card" -#define DRM_CONTROL_MINOR_NAME "controlD" -#define DRM_RENDER_MINOR_NAME "renderD" -#define DRM_PROC_NAME "/proc/dri/" /* For backward Linux compatibility */ -#endif - -#define DRM_DEV_NAME "%s/" DRM_PRIMARY_MINOR_NAME "%d" -#define DRM_CONTROL_DEV_NAME "%s/" DRM_CONTROL_MINOR_NAME "%d" -#define DRM_RENDER_DEV_NAME "%s/" DRM_RENDER_MINOR_NAME "%d" - -#define DRM_NODE_NAME_MAX \ - (sizeof(DRM_DIR_NAME) + 1 /* slash */ \ - + MAX3(sizeof(DRM_PRIMARY_MINOR_NAME), \ - sizeof(DRM_CONTROL_MINOR_NAME), \ - sizeof(DRM_RENDER_MINOR_NAME)) \ - + sizeof("144") /* highest possible node number */ \ - + 1) /* NULL-terminator */ - -#define DRM_ERR_NO_DEVICE (-1001) -#define DRM_ERR_NO_ACCESS (-1002) -#define DRM_ERR_NOT_ROOT (-1003) -#define DRM_ERR_INVALID (-1004) -#define DRM_ERR_NO_FD (-1005) - -#define DRM_AGP_NO_HANDLE 0 - -typedef unsigned int drmSize, *drmSizePtr; /**< For mapped regions */ -typedef void *drmAddress, **drmAddressPtr; /**< For mapped regions */ - -#if (__GNUC__ >= 3) -#define DRM_PRINTFLIKE(f, a) __attribute__ ((format(__printf__, f, a))) -#else -#define DRM_PRINTFLIKE(f, a) -#endif - -typedef struct _drmServerInfo { - int (*debug_print)(const char *format, va_list ap) DRM_PRINTFLIKE(1,0); - int (*load_module)(const char *name); - void (*get_perms)(gid_t *, mode_t *); -} drmServerInfo, *drmServerInfoPtr; - -typedef struct drmHashEntry { - int fd; - void (*f)(int, void *, void *); - void *tagTable; -} drmHashEntry; - -extern int drmIoctl(int fd, unsigned long request, void *arg); -extern void *drmGetHashTable(void); -extern drmHashEntry *drmGetEntry(int fd); - -/** - * Driver version information. - * - * \sa drmGetVersion() and drmSetVersion(). - */ -typedef struct _drmVersion { - int version_major; /**< Major version */ - int version_minor; /**< Minor version */ - int version_patchlevel; /**< Patch level */ - int name_len; /**< Length of name buffer */ - char *name; /**< Name of driver */ - int date_len; /**< Length of date buffer */ - char *date; /**< User-space buffer to hold date */ - int desc_len; /**< Length of desc buffer */ - char *desc; /**< User-space buffer to hold desc */ -} drmVersion, *drmVersionPtr; - -typedef struct _drmStats { - unsigned long count; /**< Number of data */ - struct { - unsigned long value; /**< Value from kernel */ - const char *long_format; /**< Suggested format for long_name */ - const char *long_name; /**< Long name for value */ - const char *rate_format; /**< Suggested format for rate_name */ - const char *rate_name; /**< Short name for value per second */ - int isvalue; /**< True if value (vs. counter) */ - const char *mult_names; /**< Multiplier names (e.g., "KGM") */ - int mult; /**< Multiplier value (e.g., 1024) */ - int verbose; /**< Suggest only in verbose output */ - } data[15]; -} drmStatsT; - - - /* All of these enums *MUST* match with the - kernel implementation -- so do *NOT* - change them! (The drmlib implementation - will just copy the flags instead of - translating them.) */ -typedef enum { - DRM_FRAME_BUFFER = 0, /**< WC, no caching, no core dump */ - DRM_REGISTERS = 1, /**< no caching, no core dump */ - DRM_SHM = 2, /**< shared, cached */ - DRM_AGP = 3, /**< AGP/GART */ - DRM_SCATTER_GATHER = 4, /**< PCI scatter/gather */ - DRM_CONSISTENT = 5 /**< PCI consistent */ -} drmMapType; - -typedef enum { - DRM_RESTRICTED = 0x0001, /**< Cannot be mapped to client-virtual */ - DRM_READ_ONLY = 0x0002, /**< Read-only in client-virtual */ - DRM_LOCKED = 0x0004, /**< Physical pages locked */ - DRM_KERNEL = 0x0008, /**< Kernel requires access */ - DRM_WRITE_COMBINING = 0x0010, /**< Use write-combining, if available */ - DRM_CONTAINS_LOCK = 0x0020, /**< SHM page that contains lock */ - DRM_REMOVABLE = 0x0040 /**< Removable mapping */ -} drmMapFlags; - -/** - * \warning These values *MUST* match drm.h - */ -typedef enum { - /** \name Flags for DMA buffer dispatch */ - /*@{*/ - DRM_DMA_BLOCK = 0x01, /**< - * Block until buffer dispatched. - * - * \note the buffer may not yet have been - * processed by the hardware -- getting a - * hardware lock with the hardware quiescent - * will ensure that the buffer has been - * processed. - */ - DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */ - DRM_DMA_PRIORITY = 0x04, /**< High priority dispatch */ - /*@}*/ - - /** \name Flags for DMA buffer request */ - /*@{*/ - DRM_DMA_WAIT = 0x10, /**< Wait for free buffers */ - DRM_DMA_SMALLER_OK = 0x20, /**< Smaller-than-requested buffers OK */ - DRM_DMA_LARGER_OK = 0x40 /**< Larger-than-requested buffers OK */ - /*@}*/ -} drmDMAFlags; - -typedef enum { - DRM_PAGE_ALIGN = 0x01, - DRM_AGP_BUFFER = 0x02, - DRM_SG_BUFFER = 0x04, - DRM_FB_BUFFER = 0x08, - DRM_PCI_BUFFER_RO = 0x10 -} drmBufDescFlags; - -typedef enum { - DRM_LOCK_READY = 0x01, /**< Wait until hardware is ready for DMA */ - DRM_LOCK_QUIESCENT = 0x02, /**< Wait until hardware quiescent */ - DRM_LOCK_FLUSH = 0x04, /**< Flush this context's DMA queue first */ - DRM_LOCK_FLUSH_ALL = 0x08, /**< Flush all DMA queues first */ - /* These *HALT* flags aren't supported yet - -- they will be used to support the - full-screen DGA-like mode. */ - DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */ - DRM_HALT_CUR_QUEUES = 0x20 /**< Halt all current queues */ -} drmLockFlags; - -typedef enum { - DRM_CONTEXT_PRESERVED = 0x01, /**< This context is preserved and - never swapped. */ - DRM_CONTEXT_2DONLY = 0x02 /**< This context is for 2D rendering only. */ -} drm_context_tFlags, *drm_context_tFlagsPtr; - -typedef struct _drmBufDesc { - int count; /**< Number of buffers of this size */ - int size; /**< Size in bytes */ - int low_mark; /**< Low water mark */ - int high_mark; /**< High water mark */ -} drmBufDesc, *drmBufDescPtr; - -typedef struct _drmBufInfo { - int count; /**< Number of buffers described in list */ - drmBufDescPtr list; /**< List of buffer descriptions */ -} drmBufInfo, *drmBufInfoPtr; - -typedef struct _drmBuf { - int idx; /**< Index into the master buffer list */ - int total; /**< Buffer size */ - int used; /**< Amount of buffer in use (for DMA) */ - drmAddress address; /**< Address */ -} drmBuf, *drmBufPtr; - -/** - * Buffer mapping information. - * - * Used by drmMapBufs() and drmUnmapBufs() to store information about the - * mapped buffers. - */ -typedef struct _drmBufMap { - int count; /**< Number of buffers mapped */ - drmBufPtr list; /**< Buffers */ -} drmBufMap, *drmBufMapPtr; - -typedef struct _drmLock { - volatile unsigned int lock; - char padding[60]; - /* This is big enough for most current (and future?) architectures: - DEC Alpha: 32 bytes - Intel Merced: ? - Intel P5/PPro/PII/PIII: 32 bytes - Intel StrongARM: 32 bytes - Intel i386/i486: 16 bytes - MIPS: 32 bytes (?) - Motorola 68k: 16 bytes - Motorola PowerPC: 32 bytes - Sun SPARC: 32 bytes - */ -} drmLock, *drmLockPtr; - -/** - * Indices here refer to the offset into - * list in drmBufInfo - */ -typedef struct _drmDMAReq { - drm_context_t context; /**< Context handle */ - int send_count; /**< Number of buffers to send */ - int *send_list; /**< List of handles to buffers */ - int *send_sizes; /**< Lengths of data to send, in bytes */ - drmDMAFlags flags; /**< Flags */ - int request_count; /**< Number of buffers requested */ - int request_size; /**< Desired size of buffers requested */ - int *request_list; /**< Buffer information */ - int *request_sizes; /**< Minimum acceptable sizes */ - int granted_count; /**< Number of buffers granted at this size */ -} drmDMAReq, *drmDMAReqPtr; - -typedef struct _drmRegion { - drm_handle_t handle; - unsigned int offset; - drmSize size; - drmAddress map; -} drmRegion, *drmRegionPtr; - -typedef struct _drmTextureRegion { - unsigned char next; - unsigned char prev; - unsigned char in_use; - unsigned char padding; /**< Explicitly pad this out */ - unsigned int age; -} drmTextureRegion, *drmTextureRegionPtr; - - -typedef enum { - DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */ - DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */ - /* bits 1-6 are reserved for high crtcs */ - DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e, - DRM_VBLANK_EVENT = 0x4000000, /**< Send event instead of blocking */ - DRM_VBLANK_FLIP = 0x8000000, /**< Scheduled buffer swap should flip */ - DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */ - DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */ - DRM_VBLANK_SIGNAL = 0x40000000 /* Send signal instead of blocking */ -} drmVBlankSeqType; -#define DRM_VBLANK_HIGH_CRTC_SHIFT 1 - -typedef struct _drmVBlankReq { - drmVBlankSeqType type; - unsigned int sequence; - unsigned long signal; -} drmVBlankReq, *drmVBlankReqPtr; - -typedef struct _drmVBlankReply { - drmVBlankSeqType type; - unsigned int sequence; - long tval_sec; - long tval_usec; -} drmVBlankReply, *drmVBlankReplyPtr; - -typedef union _drmVBlank { - drmVBlankReq request; - drmVBlankReply reply; -} drmVBlank, *drmVBlankPtr; - -typedef struct _drmSetVersion { - int drm_di_major; - int drm_di_minor; - int drm_dd_major; - int drm_dd_minor; -} drmSetVersion, *drmSetVersionPtr; - -#define __drm_dummy_lock(lock) (*(__volatile__ unsigned int *)lock) - -#define DRM_LOCK_HELD 0x80000000U /**< Hardware lock is held */ -#define DRM_LOCK_CONT 0x40000000U /**< Hardware lock is contended */ - -#if defined(__GNUC__) && (__GNUC__ >= 2) -# if defined(__i386) || defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__) - /* Reflect changes here to drmP.h */ -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - int __dummy; /* Can't mark eax as clobbered */ \ - __asm__ __volatile__( \ - "lock ; cmpxchg %4,%1\n\t" \ - "setnz %0" \ - : "=d" (__ret), \ - "=m" (__drm_dummy_lock(lock)), \ - "=a" (__dummy) \ - : "2" (old), \ - "r" (new)); \ - } while (0) - -#elif defined(__alpha__) - -#define DRM_CAS(lock, old, new, ret) \ - do { \ - int tmp, old32; \ - __asm__ __volatile__( \ - " addl $31, %5, %3\n" \ - "1: ldl_l %0, %2\n" \ - " cmpeq %0, %3, %1\n" \ - " beq %1, 2f\n" \ - " mov %4, %0\n" \ - " stl_c %0, %2\n" \ - " beq %0, 3f\n" \ - " mb\n" \ - "2: cmpeq %1, 0, %1\n" \ - ".subsection 2\n" \ - "3: br 1b\n" \ - ".previous" \ - : "=&r"(tmp), "=&r"(ret), \ - "=m"(__drm_dummy_lock(lock)), \ - "=&r"(old32) \ - : "r"(new), "r"(old) \ - : "memory"); \ - } while (0) - -#elif defined(__sparc__) - -#define DRM_CAS(lock,old,new,__ret) \ -do { register unsigned int __old __asm("o0"); \ - register unsigned int __new __asm("o1"); \ - register volatile unsigned int *__lock __asm("o2"); \ - __old = old; \ - __new = new; \ - __lock = (volatile unsigned int *)lock; \ - __asm__ __volatile__( \ - /*"cas [%2], %3, %0"*/ \ - ".word 0xd3e29008\n\t" \ - /*"membar #StoreStore | #StoreLoad"*/ \ - ".word 0x8143e00a" \ - : "=&r" (__new) \ - : "0" (__new), \ - "r" (__lock), \ - "r" (__old) \ - : "memory"); \ - __ret = (__new != __old); \ -} while(0) - -#elif defined(__ia64__) - -#ifdef __INTEL_COMPILER -/* this currently generates bad code (missing stop bits)... */ -#include - -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - unsigned long __result, __old = (old) & 0xffffffff; \ - __mf(); \ - __result = _InterlockedCompareExchange_acq(&__drm_dummy_lock(lock), (new), __old);\ - __ret = (__result) != (__old); \ -/* __ret = (__sync_val_compare_and_swap(&__drm_dummy_lock(lock), \ - (old), (new)) \ - != (old)); */\ - } while (0) - -#else -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - unsigned int __result, __old = (old); \ - __asm__ __volatile__( \ - "mf\n" \ - "mov ar.ccv=%2\n" \ - ";;\n" \ - "cmpxchg4.acq %0=%1,%3,ar.ccv" \ - : "=r" (__result), "=m" (__drm_dummy_lock(lock)) \ - : "r" ((unsigned long)__old), "r" (new) \ - : "memory"); \ - __ret = (__result) != (__old); \ - } while (0) - -#endif - -#elif defined(__powerpc__) - -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - __asm__ __volatile__( \ - "sync;" \ - "0: lwarx %0,0,%1;" \ - " xor. %0,%3,%0;" \ - " bne 1f;" \ - " stwcx. %2,0,%1;" \ - " bne- 0b;" \ - "1: " \ - "sync;" \ - : "=&r"(__ret) \ - : "r"(lock), "r"(new), "r"(old) \ - : "cr0", "memory"); \ - } while (0) - -# elif defined (__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ - || defined (__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \ - || defined (__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) \ - || defined (__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ - || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ - || defined(__ARM_ARCH_7EM__) - /* excluding ARMv4/ARMv5 and lower (lacking ldrex/strex support) */ - #undef DRM_DEV_MODE - #define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) - - #define DRM_CAS(lock,old,new,__ret) \ - do { \ - __asm__ __volatile__ ( \ - "1: ldrex %0, [%1]\n" \ - " teq %0, %2\n" \ - " ite eq\n" \ - " strexeq %0, %3, [%1]\n" \ - " movne %0, #1\n" \ - : "=&r" (__ret) \ - : "r" (lock), "r" (old), "r" (new) \ - : "cc","memory"); \ - } while (0) - -#endif /* architecture */ -#endif /* __GNUC__ >= 2 */ - -#ifndef DRM_CAS -#define DRM_CAS(lock,old,new,ret) do { ret=1; } while (0) /* FAST LOCK FAILS */ -#endif - -#if defined(__alpha__) -#define DRM_CAS_RESULT(_result) long _result -#elif defined(__powerpc__) -#define DRM_CAS_RESULT(_result) int _result -#else -#define DRM_CAS_RESULT(_result) char _result -#endif - -#define DRM_LIGHT_LOCK(fd,lock,context) \ - do { \ - DRM_CAS_RESULT(__ret); \ - DRM_CAS(lock,context,DRM_LOCK_HELD|context,__ret); \ - if (__ret) drmGetLock(fd,context,0); \ - } while(0) - - /* This one counts fast locks -- for - benchmarking only. */ -#define DRM_LIGHT_LOCK_COUNT(fd,lock,context,count) \ - do { \ - DRM_CAS_RESULT(__ret); \ - DRM_CAS(lock,context,DRM_LOCK_HELD|context,__ret); \ - if (__ret) drmGetLock(fd,context,0); \ - else ++count; \ - } while(0) - -#define DRM_LOCK(fd,lock,context,flags) \ - do { \ - if (flags) drmGetLock(fd,context,flags); \ - else DRM_LIGHT_LOCK(fd,lock,context); \ - } while(0) - -#define DRM_UNLOCK(fd,lock,context) \ - do { \ - DRM_CAS_RESULT(__ret); \ - DRM_CAS(lock,DRM_LOCK_HELD|context,context,__ret); \ - if (__ret) drmUnlock(fd,context); \ - } while(0) - - /* Simple spin locks */ -#define DRM_SPINLOCK(spin,val) \ - do { \ - DRM_CAS_RESULT(__ret); \ - do { \ - DRM_CAS(spin,0,val,__ret); \ - if (__ret) while ((spin)->lock); \ - } while (__ret); \ - } while(0) - -#define DRM_SPINLOCK_TAKE(spin,val) \ - do { \ - DRM_CAS_RESULT(__ret); \ - int cur; \ - do { \ - cur = (*spin).lock; \ - DRM_CAS(spin,cur,val,__ret); \ - } while (__ret); \ - } while(0) - -#define DRM_SPINLOCK_COUNT(spin,val,count,__ret) \ - do { \ - int __i; \ - __ret = 1; \ - for (__i = 0; __ret && __i < count; __i++) { \ - DRM_CAS(spin,0,val,__ret); \ - if (__ret) for (;__i < count && (spin)->lock; __i++); \ - } \ - } while(0) - -#define DRM_SPINUNLOCK(spin,val) \ - do { \ - DRM_CAS_RESULT(__ret); \ - if ((*spin).lock == val) { /* else server stole lock */ \ - do { \ - DRM_CAS(spin,val,0,__ret); \ - } while (__ret); \ - } \ - } while(0) - - - -/* General user-level programmer's API: unprivileged */ -extern int drmAvailable(void); -extern int drmOpen(const char *name, const char *busid); - -#define DRM_NODE_PRIMARY 0 -#define DRM_NODE_CONTROL 1 -#define DRM_NODE_RENDER 2 -#define DRM_NODE_MAX 3 - -extern int drmOpenWithType(const char *name, const char *busid, - int type); - -extern int drmOpenControl(int minor); -extern int drmOpenRender(int minor); -extern int drmClose(int fd); -extern drmVersionPtr drmGetVersion(int fd); -extern drmVersionPtr drmGetLibVersion(int fd); -extern int drmGetCap(int fd, uint64_t capability, uint64_t *value); -extern void drmFreeVersion(drmVersionPtr); -extern int drmGetMagic(int fd, drm_magic_t * magic); -extern char *drmGetBusid(int fd); -extern int drmGetInterruptFromBusID(int fd, int busnum, int devnum, - int funcnum); -extern int drmGetMap(int fd, int idx, drm_handle_t *offset, - drmSize *size, drmMapType *type, - drmMapFlags *flags, drm_handle_t *handle, - int *mtrr); -extern int drmGetClient(int fd, int idx, int *auth, int *pid, - int *uid, unsigned long *magic, - unsigned long *iocs); -extern int drmGetStats(int fd, drmStatsT *stats); -extern int drmSetInterfaceVersion(int fd, drmSetVersion *version); -extern int drmCommandNone(int fd, unsigned long drmCommandIndex); -extern int drmCommandRead(int fd, unsigned long drmCommandIndex, - void *data, unsigned long size); -extern int drmCommandWrite(int fd, unsigned long drmCommandIndex, - void *data, unsigned long size); -extern int drmCommandWriteRead(int fd, unsigned long drmCommandIndex, - void *data, unsigned long size); - -/* General user-level programmer's API: X server (root) only */ -extern void drmFreeBusid(const char *busid); -extern int drmSetBusid(int fd, const char *busid); -extern int drmAuthMagic(int fd, drm_magic_t magic); -extern int drmAddMap(int fd, - drm_handle_t offset, - drmSize size, - drmMapType type, - drmMapFlags flags, - drm_handle_t * handle); -extern int drmRmMap(int fd, drm_handle_t handle); -extern int drmAddContextPrivateMapping(int fd, drm_context_t ctx_id, - drm_handle_t handle); - -extern int drmAddBufs(int fd, int count, int size, - drmBufDescFlags flags, - int agp_offset); -extern int drmMarkBufs(int fd, double low, double high); -extern int drmCreateContext(int fd, drm_context_t * handle); -extern int drmSetContextFlags(int fd, drm_context_t context, - drm_context_tFlags flags); -extern int drmGetContextFlags(int fd, drm_context_t context, - drm_context_tFlagsPtr flags); -extern int drmAddContextTag(int fd, drm_context_t context, void *tag); -extern int drmDelContextTag(int fd, drm_context_t context); -extern void *drmGetContextTag(int fd, drm_context_t context); -extern drm_context_t * drmGetReservedContextList(int fd, int *count); -extern void drmFreeReservedContextList(drm_context_t *); -extern int drmSwitchToContext(int fd, drm_context_t context); -extern int drmDestroyContext(int fd, drm_context_t handle); -extern int drmCreateDrawable(int fd, drm_drawable_t * handle); -extern int drmDestroyDrawable(int fd, drm_drawable_t handle); -extern int drmUpdateDrawableInfo(int fd, drm_drawable_t handle, - drm_drawable_info_type_t type, - unsigned int num, void *data); -extern int drmCtlInstHandler(int fd, int irq); -extern int drmCtlUninstHandler(int fd); -extern int drmSetClientCap(int fd, uint64_t capability, - uint64_t value); - -extern int drmCrtcGetSequence(int fd, uint32_t crtcId, - uint64_t *sequence, uint64_t *ns); -extern int drmCrtcQueueSequence(int fd, uint32_t crtcId, - uint32_t flags, uint64_t sequence, - uint64_t *sequence_queued, - uint64_t user_data); -/* General user-level programmer's API: authenticated client and/or X */ -extern int drmMap(int fd, - drm_handle_t handle, - drmSize size, - drmAddressPtr address); -extern int drmUnmap(drmAddress address, drmSize size); -extern drmBufInfoPtr drmGetBufInfo(int fd); -extern drmBufMapPtr drmMapBufs(int fd); -extern int drmUnmapBufs(drmBufMapPtr bufs); -extern int drmDMA(int fd, drmDMAReqPtr request); -extern int drmFreeBufs(int fd, int count, int *list); -extern int drmGetLock(int fd, - drm_context_t context, - drmLockFlags flags); -extern int drmUnlock(int fd, drm_context_t context); -extern int drmFinish(int fd, int context, drmLockFlags flags); -extern int drmGetContextPrivateMapping(int fd, drm_context_t ctx_id, - drm_handle_t * handle); - -/* AGP/GART support: X server (root) only */ -extern int drmAgpAcquire(int fd); -extern int drmAgpRelease(int fd); -extern int drmAgpEnable(int fd, unsigned long mode); -extern int drmAgpAlloc(int fd, unsigned long size, - unsigned long type, unsigned long *address, - drm_handle_t *handle); -extern int drmAgpFree(int fd, drm_handle_t handle); -extern int drmAgpBind(int fd, drm_handle_t handle, - unsigned long offset); -extern int drmAgpUnbind(int fd, drm_handle_t handle); - -/* AGP/GART info: authenticated client and/or X */ -extern int drmAgpVersionMajor(int fd); -extern int drmAgpVersionMinor(int fd); -extern unsigned long drmAgpGetMode(int fd); -extern unsigned long drmAgpBase(int fd); /* Physical location */ -extern unsigned long drmAgpSize(int fd); /* Bytes */ -extern unsigned long drmAgpMemoryUsed(int fd); -extern unsigned long drmAgpMemoryAvail(int fd); -extern unsigned int drmAgpVendorId(int fd); -extern unsigned int drmAgpDeviceId(int fd); - -/* PCI scatter/gather support: X server (root) only */ -extern int drmScatterGatherAlloc(int fd, unsigned long size, - drm_handle_t *handle); -extern int drmScatterGatherFree(int fd, drm_handle_t handle); - -extern int drmWaitVBlank(int fd, drmVBlankPtr vbl); - -/* Support routines */ -extern void drmSetServerInfo(drmServerInfoPtr info); -extern int drmError(int err, const char *label); -extern void *drmMalloc(int size); -extern void drmFree(void *pt); - -/* Hash table routines */ -extern void *drmHashCreate(void); -extern int drmHashDestroy(void *t); -extern int drmHashLookup(void *t, unsigned long key, void **value); -extern int drmHashInsert(void *t, unsigned long key, void *value); -extern int drmHashDelete(void *t, unsigned long key); -extern int drmHashFirst(void *t, unsigned long *key, void **value); -extern int drmHashNext(void *t, unsigned long *key, void **value); - -/* PRNG routines */ -extern void *drmRandomCreate(unsigned long seed); -extern int drmRandomDestroy(void *state); -extern unsigned long drmRandom(void *state); -extern double drmRandomDouble(void *state); - -/* Skip list routines */ - -extern void *drmSLCreate(void); -extern int drmSLDestroy(void *l); -extern int drmSLLookup(void *l, unsigned long key, void **value); -extern int drmSLInsert(void *l, unsigned long key, void *value); -extern int drmSLDelete(void *l, unsigned long key); -extern int drmSLNext(void *l, unsigned long *key, void **value); -extern int drmSLFirst(void *l, unsigned long *key, void **value); -extern void drmSLDump(void *l); -extern int drmSLLookupNeighbors(void *l, unsigned long key, - unsigned long *prev_key, void **prev_value, - unsigned long *next_key, void **next_value); - -extern int drmOpenOnce(void *unused, const char *BusID, int *newlyopened); -extern int drmOpenOnceWithType(const char *BusID, int *newlyopened, int type); -extern void drmCloseOnce(int fd); -extern void drmMsg(const char *format, ...) DRM_PRINTFLIKE(1, 2); - -extern int drmSetMaster(int fd); -extern int drmDropMaster(int fd); -extern int drmIsMaster(int fd); - -#define DRM_EVENT_CONTEXT_VERSION 4 - -typedef struct _drmEventContext { - - /* This struct is versioned so we can add more pointers if we - * add more events. */ - int version; - - void (*vblank_handler)(int fd, - unsigned int sequence, - unsigned int tv_sec, - unsigned int tv_usec, - void *user_data); - - void (*page_flip_handler)(int fd, - unsigned int sequence, - unsigned int tv_sec, - unsigned int tv_usec, - void *user_data); - - void (*page_flip_handler2)(int fd, - unsigned int sequence, - unsigned int tv_sec, - unsigned int tv_usec, - unsigned int crtc_id, - void *user_data); - - void (*sequence_handler)(int fd, - uint64_t sequence, - uint64_t ns, - uint64_t user_data); -} drmEventContext, *drmEventContextPtr; - -extern int drmHandleEvent(int fd, drmEventContextPtr evctx); - -extern char *drmGetDeviceNameFromFd(int fd); - -/* Improved version of drmGetDeviceNameFromFd which attributes for any type of - * device/node - card, control or renderD. - */ -extern char *drmGetDeviceNameFromFd2(int fd); -extern int drmGetNodeTypeFromFd(int fd); - -/* Convert between GEM handles and DMA-BUF file descriptors. - * - * Warning: since GEM handles are not reference-counted and are unique per - * DRM file description, the caller is expected to perform its own reference - * counting. drmPrimeFDToHandle is guaranteed to return the same handle for - * different FDs if they reference the same underlying buffer object. This - * could even be a buffer object originally created on the same DRM FD. - * - * When sharing a DRM FD with an API such as EGL or GBM, the caller must not - * use drmPrimeHandleToFD nor drmPrimeFDToHandle. A single user-space - * reference-counting implementation is necessary to avoid double-closing GEM - * handles. - * - * Two processes can't share the same DRM FD and both use it to create or - * import GEM handles, even when using a single user-space reference-counting - * implementation like GBM, because GBM doesn't share its state between - * processes. - */ -extern int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd); -extern int drmPrimeFDToHandle(int fd, int prime_fd, uint32_t *handle); - -extern int drmCloseBufferHandle(int fd, uint32_t handle); - -extern char *drmGetPrimaryDeviceNameFromFd(int fd); -extern char *drmGetRenderDeviceNameFromFd(int fd); - -#define DRM_BUS_PCI 0 -#define DRM_BUS_USB 1 -#define DRM_BUS_PLATFORM 2 -#define DRM_BUS_HOST1X 3 - -typedef struct _drmPciBusInfo { - uint16_t domain; - uint8_t bus; - uint8_t dev; - uint8_t func; -} drmPciBusInfo, *drmPciBusInfoPtr; - -typedef struct _drmPciDeviceInfo { - uint16_t vendor_id; - uint16_t device_id; - uint16_t subvendor_id; - uint16_t subdevice_id; - uint8_t revision_id; -} drmPciDeviceInfo, *drmPciDeviceInfoPtr; - -typedef struct _drmUsbBusInfo { - uint8_t bus; - uint8_t dev; -} drmUsbBusInfo, *drmUsbBusInfoPtr; - -typedef struct _drmUsbDeviceInfo { - uint16_t vendor; - uint16_t product; -} drmUsbDeviceInfo, *drmUsbDeviceInfoPtr; - -#define DRM_PLATFORM_DEVICE_NAME_LEN 512 - -typedef struct _drmPlatformBusInfo { - char fullname[DRM_PLATFORM_DEVICE_NAME_LEN]; -} drmPlatformBusInfo, *drmPlatformBusInfoPtr; - -typedef struct _drmPlatformDeviceInfo { - char **compatible; /* NULL terminated list of compatible strings */ -} drmPlatformDeviceInfo, *drmPlatformDeviceInfoPtr; - -#define DRM_HOST1X_DEVICE_NAME_LEN 512 - -typedef struct _drmHost1xBusInfo { - char fullname[DRM_HOST1X_DEVICE_NAME_LEN]; -} drmHost1xBusInfo, *drmHost1xBusInfoPtr; - -typedef struct _drmHost1xDeviceInfo { - char **compatible; /* NULL terminated list of compatible strings */ -} drmHost1xDeviceInfo, *drmHost1xDeviceInfoPtr; - -typedef struct _drmDevice { - char **nodes; /* DRM_NODE_MAX sized array */ - int available_nodes; /* DRM_NODE_* bitmask */ - int bustype; - union { - drmPciBusInfoPtr pci; - drmUsbBusInfoPtr usb; - drmPlatformBusInfoPtr platform; - drmHost1xBusInfoPtr host1x; - } businfo; - union { - drmPciDeviceInfoPtr pci; - drmUsbDeviceInfoPtr usb; - drmPlatformDeviceInfoPtr platform; - drmHost1xDeviceInfoPtr host1x; - } deviceinfo; -} drmDevice, *drmDevicePtr; - -extern int drmGetDevice(int fd, drmDevicePtr *device); -extern void drmFreeDevice(drmDevicePtr *device); - -extern int drmGetDevices(drmDevicePtr devices[], int max_devices); -extern void drmFreeDevices(drmDevicePtr devices[], int count); - -#define DRM_DEVICE_GET_PCI_REVISION (1 << 0) -extern int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device); -extern int drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices); - -extern int drmGetDeviceFromDevId(dev_t dev_id, uint32_t flags, drmDevicePtr *device); - -extern int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b); - -extern int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle); -extern int drmSyncobjDestroy(int fd, uint32_t handle); -extern int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd); -extern int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle); - -extern int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd); -extern int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd); -extern int drmSyncobjWait(int fd, uint32_t *handles, unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); -extern int drmSyncobjReset(int fd, const uint32_t *handles, uint32_t handle_count); -extern int drmSyncobjSignal(int fd, const uint32_t *handles, uint32_t handle_count); -extern int drmSyncobjTimelineSignal(int fd, const uint32_t *handles, - uint64_t *points, uint32_t handle_count); -extern int drmSyncobjTimelineWait(int fd, uint32_t *handles, uint64_t *points, - unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); -extern int drmSyncobjQuery(int fd, uint32_t *handles, uint64_t *points, - uint32_t handle_count); -extern int drmSyncobjQuery2(int fd, uint32_t *handles, uint64_t *points, - uint32_t handle_count, uint32_t flags); -extern int drmSyncobjTransfer(int fd, - uint32_t dst_handle, uint64_t dst_point, - uint32_t src_handle, uint64_t src_point, - uint32_t flags); - -extern char * -drmGetFormatModifierVendor(uint64_t modifier); - -extern char * -drmGetFormatModifierName(uint64_t modifier); - -#ifndef fourcc_mod_get_vendor -#define fourcc_mod_get_vendor(modifier) \ - (((modifier) >> 56) & 0xff) -#endif - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/aarch64/include/xf86drmMode.h b/prebuilts/aarch64/include/xf86drmMode.h deleted file mode 100644 index 4617d1e..0000000 --- a/prebuilts/aarch64/include/xf86drmMode.h +++ /dev/null @@ -1,504 +0,0 @@ -/* - * \file xf86drmMode.h - * Header for DRM modesetting interface. - * - * \author Jakob Bornecrantz - * - * \par Acknowledgements: - * Feb 2007, Dave Airlie - */ - -/* - * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas. - * Copyright (c) 2007-2008 Dave Airlie - * Copyright (c) 2007-2008 Jakob Bornecrantz - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - * - */ - -#ifndef _XF86DRMMODE_H_ -#define _XF86DRMMODE_H_ - -#if defined(__cplusplus) -extern "C" { -#endif - -#include -#include -#include -#include -#include - -/* - * This is the interface for modesetting for drm. - * - * It aims to provide a randr1.2 compatible interface for modesettings in the - * kernel, the interface is also meant to be used by libraries like EGL. - * - * More information can be found in randrproto.txt which can be found here: - * http://gitweb.freedesktop.org/?p=xorg/proto/randrproto.git - * - * There are some major differences to be noted. Unlike the randr1.2 proto you - * need to create the memory object of the framebuffer yourself with the ttm - * buffer object interface. This object needs to be pinned. - */ - -/* - * Feature defines - * - * Just because these are defined doesn't mean that the kernel - * can do that feature, its just for new code vs old libdrm. - */ -#define DRM_MODE_FEATURE_KMS 1 -#define DRM_MODE_FEATURE_DIRTYFB 1 - - -typedef struct _drmModeRes { - - int count_fbs; - uint32_t *fbs; - - int count_crtcs; - uint32_t *crtcs; - - int count_connectors; - uint32_t *connectors; - - int count_encoders; - uint32_t *encoders; - - uint32_t min_width, max_width; - uint32_t min_height, max_height; -} drmModeRes, *drmModeResPtr; - -typedef struct _drmModeModeInfo { - uint32_t clock; - uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew; - uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan; - - uint32_t vrefresh; - - uint32_t flags; - uint32_t type; - char name[DRM_DISPLAY_MODE_LEN]; -} drmModeModeInfo, *drmModeModeInfoPtr; - -typedef struct _drmModeFB { - uint32_t fb_id; - uint32_t width, height; - uint32_t pitch; - uint32_t bpp; - uint32_t depth; - /* driver specific handle */ - uint32_t handle; -} drmModeFB, *drmModeFBPtr; - -typedef struct _drmModeFB2 { - uint32_t fb_id; - uint32_t width, height; - uint32_t pixel_format; /* fourcc code from drm_fourcc.h */ - uint64_t modifier; /* applies to all buffers */ - uint32_t flags; - - /* per-plane GEM handle; may be duplicate entries for multiple planes */ - uint32_t handles[4]; - uint32_t pitches[4]; /* bytes */ - uint32_t offsets[4]; /* bytes */ -} drmModeFB2, *drmModeFB2Ptr; - -typedef struct drm_clip_rect drmModeClip, *drmModeClipPtr; - -typedef struct _drmModePropertyBlob { - uint32_t id; - uint32_t length; - void *data; -} drmModePropertyBlobRes, *drmModePropertyBlobPtr; - -typedef struct _drmModeProperty { - uint32_t prop_id; - uint32_t flags; - char name[DRM_PROP_NAME_LEN]; - int count_values; - uint64_t *values; /* store the blob lengths */ - int count_enums; - struct drm_mode_property_enum *enums; - int count_blobs; - uint32_t *blob_ids; /* store the blob IDs */ -} drmModePropertyRes, *drmModePropertyPtr; - -static inline uint32_t drmModeGetPropertyType(const drmModePropertyRes *prop) -{ - return prop->flags & (DRM_MODE_PROP_LEGACY_TYPE | DRM_MODE_PROP_EXTENDED_TYPE); -} - -static inline int drm_property_type_is(const drmModePropertyPtr property, - uint32_t type) -{ - return drmModeGetPropertyType(property) == type; -} - -typedef struct _drmModeCrtc { - uint32_t crtc_id; - uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */ - - uint32_t x, y; /**< Position on the framebuffer */ - uint32_t width, height; - int mode_valid; - drmModeModeInfo mode; - - int gamma_size; /**< Number of gamma stops */ - -} drmModeCrtc, *drmModeCrtcPtr; - -typedef struct _drmModeEncoder { - uint32_t encoder_id; - uint32_t encoder_type; - uint32_t crtc_id; - uint32_t possible_crtcs; - uint32_t possible_clones; -} drmModeEncoder, *drmModeEncoderPtr; - -/** - * Describes the connector status. - * - * DRM_MODE_CONNECTED means that the connector has a sink plugged in. - * DRM_MODE_DISCONNECTED means the contrary. DRM_MODE_UNKNOWNCONNECTION is used - * when it could be either. - * - * User-space should first try to enable DRM_MODE_CONNECTED connectors and - * ignore other connectors. If there are no DRM_MODE_CONNECTED connectors, - * user-space should then try to probe and enable DRM_MODE_UNKNOWNCONNECTION - * connectors. - */ -typedef enum { - DRM_MODE_CONNECTED = 1, - DRM_MODE_DISCONNECTED = 2, - DRM_MODE_UNKNOWNCONNECTION = 3 -} drmModeConnection; - -typedef enum { - DRM_MODE_SUBPIXEL_UNKNOWN = 1, - DRM_MODE_SUBPIXEL_HORIZONTAL_RGB = 2, - DRM_MODE_SUBPIXEL_HORIZONTAL_BGR = 3, - DRM_MODE_SUBPIXEL_VERTICAL_RGB = 4, - DRM_MODE_SUBPIXEL_VERTICAL_BGR = 5, - DRM_MODE_SUBPIXEL_NONE = 6 -} drmModeSubPixel; - -typedef struct _drmModeConnector { - uint32_t connector_id; - uint32_t encoder_id; /**< Encoder currently connected to */ - uint32_t connector_type; - uint32_t connector_type_id; - drmModeConnection connection; - uint32_t mmWidth, mmHeight; /**< HxW in millimeters */ - drmModeSubPixel subpixel; - - int count_modes; - drmModeModeInfoPtr modes; - - int count_props; - uint32_t *props; /**< List of property ids */ - uint64_t *prop_values; /**< List of property values */ - - int count_encoders; - uint32_t *encoders; /**< List of encoder ids */ -} drmModeConnector, *drmModeConnectorPtr; - -#define DRM_PLANE_TYPE_OVERLAY 0 -#define DRM_PLANE_TYPE_PRIMARY 1 -#define DRM_PLANE_TYPE_CURSOR 2 - -typedef struct _drmModeObjectProperties { - uint32_t count_props; - uint32_t *props; - uint64_t *prop_values; -} drmModeObjectProperties, *drmModeObjectPropertiesPtr; - -typedef struct _drmModeFormatModifierIterator { - uint32_t fmt_idx, mod_idx; - uint32_t fmt; - uint64_t mod; -} drmModeFormatModifierIterator; - -typedef struct _drmModePlane { - uint32_t count_formats; - uint32_t *formats; - uint32_t plane_id; - - uint32_t crtc_id; - uint32_t fb_id; - - uint32_t crtc_x, crtc_y; - uint32_t x, y; - - uint32_t possible_crtcs; - uint32_t gamma_size; -} drmModePlane, *drmModePlanePtr; - -typedef struct _drmModePlaneRes { - uint32_t count_planes; - uint32_t *planes; -} drmModePlaneRes, *drmModePlaneResPtr; - -extern void drmModeFreeModeInfo( drmModeModeInfoPtr ptr ); -extern void drmModeFreeResources( drmModeResPtr ptr ); -extern void drmModeFreeFB( drmModeFBPtr ptr ); -extern void drmModeFreeFB2( drmModeFB2Ptr ptr ); -extern void drmModeFreeCrtc( drmModeCrtcPtr ptr ); -extern void drmModeFreeConnector( drmModeConnectorPtr ptr ); -extern void drmModeFreeEncoder( drmModeEncoderPtr ptr ); -extern void drmModeFreePlane( drmModePlanePtr ptr ); -extern void drmModeFreePlaneResources(drmModePlaneResPtr ptr); - -/** - * Check whether the DRM node supports Kernel Mode-Setting. - * - * Returns 1 if suitable for KMS, 0 otherwise. - */ -extern int drmIsKMS(int fd); - -/** - * Retrieves all of the resources associated with a card. - */ -extern drmModeResPtr drmModeGetResources(int fd); - -/* - * FrameBuffer manipulation. - */ - -/** - * Retrieve information about framebuffer bufferId - */ -extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId); -extern drmModeFB2Ptr drmModeGetFB2(int fd, uint32_t bufferId); - -/** - * Creates a new framebuffer with an buffer object as its scanout buffer. - */ -extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth, - uint8_t bpp, uint32_t pitch, uint32_t bo_handle, - uint32_t *buf_id); -/* ...with a specific pixel format */ -extern int drmModeAddFB2(int fd, uint32_t width, uint32_t height, - uint32_t pixel_format, const uint32_t bo_handles[4], - const uint32_t pitches[4], const uint32_t offsets[4], - uint32_t *buf_id, uint32_t flags); - -/* ...with format modifiers */ -int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height, - uint32_t pixel_format, const uint32_t bo_handles[4], - const uint32_t pitches[4], const uint32_t offsets[4], - const uint64_t modifier[4], uint32_t *buf_id, - uint32_t flags); - -/** - * Destroies the given framebuffer. - */ -extern int drmModeRmFB(int fd, uint32_t bufferId); - -/** - * Mark a region of a framebuffer as dirty. - */ -extern int drmModeDirtyFB(int fd, uint32_t bufferId, - drmModeClipPtr clips, uint32_t num_clips); - - -/* - * Crtc functions - */ - -/** - * Retrieve information about the ctrt crtcId - */ -extern drmModeCrtcPtr drmModeGetCrtc(int fd, uint32_t crtcId); - -/** - * Set the mode on a crtc crtcId with the given mode modeId. - */ -int drmModeSetCrtc(int fd, uint32_t crtcId, uint32_t bufferId, - uint32_t x, uint32_t y, uint32_t *connectors, int count, - drmModeModeInfoPtr mode); - -/* - * Cursor functions - */ - -/** - * Set the cursor on crtc - */ -int drmModeSetCursor(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height); - -int drmModeSetCursor2(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height, int32_t hot_x, int32_t hot_y); -/** - * Move the cursor on crtc - */ -int drmModeMoveCursor(int fd, uint32_t crtcId, int x, int y); - -/** - * Encoder functions - */ -drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id); - -/* - * Connector manipulation - */ - -/** - * Retrieve all information about the connector connectorId. This will do a - * forced probe on the connector to retrieve remote information such as EDIDs - * from the display device. - */ -extern drmModeConnectorPtr drmModeGetConnector(int fd, - uint32_t connectorId); - -/** - * Retrieve current information, i.e the currently active mode and encoder, - * about the connector connectorId. This will not do any probing on the - * connector or remote device, and only reports what is currently known. - * For the complete set of modes and encoders associated with the connector - * use drmModeGetConnector() which will do a probe to determine any display - * link changes first. - */ -extern drmModeConnectorPtr drmModeGetConnectorCurrent(int fd, - uint32_t connector_id); - -/** - * Get a bitmask of CRTCs a connector is compatible with. - * - * The bits reference CRTC indices. If the n-th CRTC is compatible with the - * connector, the n-th bit will be set. The indices are taken from the array - * returned by drmModeGetResources(). The indices are different from the object - * IDs. - * - * Zero is returned on error. - */ -extern uint32_t drmModeConnectorGetPossibleCrtcs(int fd, - const drmModeConnector *connector); - -/** - * Attaches the given mode to an connector. - */ -extern int drmModeAttachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info); - -/** - * Detaches a mode from the connector - * must be unused, by the given mode. - */ -extern int drmModeDetachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info); - -extern drmModePropertyPtr drmModeGetProperty(int fd, uint32_t propertyId); -extern void drmModeFreeProperty(drmModePropertyPtr ptr); - -extern drmModePropertyBlobPtr drmModeGetPropertyBlob(int fd, uint32_t blob_id); -extern bool drmModeFormatModifierBlobIterNext(const drmModePropertyBlobRes *blob, - drmModeFormatModifierIterator *iter); -extern void drmModeFreePropertyBlob(drmModePropertyBlobPtr ptr); -extern int drmModeConnectorSetProperty(int fd, uint32_t connector_id, uint32_t property_id, - uint64_t value); -extern int drmCheckModesettingSupported(const char *busid); - -extern int drmModeCrtcSetGamma(int fd, uint32_t crtc_id, uint32_t size, - uint16_t *red, uint16_t *green, uint16_t *blue); -extern int drmModeCrtcGetGamma(int fd, uint32_t crtc_id, uint32_t size, - uint16_t *red, uint16_t *green, uint16_t *blue); -extern int drmModePageFlip(int fd, uint32_t crtc_id, uint32_t fb_id, - uint32_t flags, void *user_data); -extern int drmModePageFlipTarget(int fd, uint32_t crtc_id, uint32_t fb_id, - uint32_t flags, void *user_data, - uint32_t target_vblank); - -extern drmModePlaneResPtr drmModeGetPlaneResources(int fd); -extern drmModePlanePtr drmModeGetPlane(int fd, uint32_t plane_id); -extern int drmModeSetPlane(int fd, uint32_t plane_id, uint32_t crtc_id, - uint32_t fb_id, uint32_t flags, - int32_t crtc_x, int32_t crtc_y, - uint32_t crtc_w, uint32_t crtc_h, - uint32_t src_x, uint32_t src_y, - uint32_t src_w, uint32_t src_h); - -extern drmModeObjectPropertiesPtr drmModeObjectGetProperties(int fd, - uint32_t object_id, - uint32_t object_type); -extern void drmModeFreeObjectProperties(drmModeObjectPropertiesPtr ptr); -extern int drmModeObjectSetProperty(int fd, uint32_t object_id, - uint32_t object_type, uint32_t property_id, - uint64_t value); - - -typedef struct _drmModeAtomicReq drmModeAtomicReq, *drmModeAtomicReqPtr; - -extern drmModeAtomicReqPtr drmModeAtomicAlloc(void); -extern drmModeAtomicReqPtr drmModeAtomicDuplicate(const drmModeAtomicReqPtr req); -extern int drmModeAtomicMerge(drmModeAtomicReqPtr base, - const drmModeAtomicReqPtr augment); -extern void drmModeAtomicFree(drmModeAtomicReqPtr req); -extern int drmModeAtomicGetCursor(const drmModeAtomicReqPtr req); -extern void drmModeAtomicSetCursor(drmModeAtomicReqPtr req, int cursor); -extern int drmModeAtomicAddProperty(drmModeAtomicReqPtr req, - uint32_t object_id, - uint32_t property_id, - uint64_t value); -extern int drmModeAtomicCommit(int fd, - const drmModeAtomicReqPtr req, - uint32_t flags, - void *user_data); - -extern int drmModeCreatePropertyBlob(int fd, const void *data, size_t size, - uint32_t *id); -extern int drmModeDestroyPropertyBlob(int fd, uint32_t id); - -/* - * DRM mode lease APIs. These create and manage new drm_masters with - * access to a subset of the available DRM resources - */ - -extern int drmModeCreateLease(int fd, const uint32_t *objects, int num_objects, int flags, uint32_t *lessee_id); - -typedef struct drmModeLesseeList { - uint32_t count; - uint32_t lessees[]; -} drmModeLesseeListRes, *drmModeLesseeListPtr; - -extern drmModeLesseeListPtr drmModeListLessees(int fd); - -typedef struct drmModeObjectList { - uint32_t count; - uint32_t objects[]; -} drmModeObjectListRes, *drmModeObjectListPtr; - -extern drmModeObjectListPtr drmModeGetLease(int fd); - -extern int drmModeRevokeLease(int fd, uint32_t lessee_id); - -/** - * Get a string describing a connector type. - * - * NULL is returned if the connector type is unsupported. Callers should handle - * this gracefully, e.g. by falling back to "Unknown" or printing the raw value. - */ -extern const char * -drmModeGetConnectorTypeName(uint32_t connector_type); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/arm/include/gbm.h b/prebuilts/arm/include/gbm.h deleted file mode 100644 index 829c4cb..0000000 --- a/prebuilts/arm/include/gbm.h +++ /dev/null @@ -1,461 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Benjamin Franzke - */ - -#ifndef _GBM_H_ -#define _GBM_H_ - -#define __GBM__ 1 - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * \file gbm.h - * \brief Generic Buffer Manager - */ - -struct gbm_device; -struct gbm_bo; -struct gbm_surface; - -/** - * \mainpage The Generic Buffer Manager - * - * This module provides an abstraction that the caller can use to request a - * buffer from the underlying memory management system for the platform. - * - * This allows the creation of portable code whilst still allowing access to - * the underlying memory manager. - */ - -/** - * Abstraction representing the handle to a buffer allocated by the - * manager - */ -union gbm_bo_handle { - void *ptr; - int32_t s32; - uint32_t u32; - int64_t s64; - uint64_t u64; -}; - -/** Format of the allocated buffer */ -enum gbm_bo_format { - /** RGB with 8 bits per channel in a 32 bit value */ - GBM_BO_FORMAT_XRGB8888, - /** ARGB with 8 bits per channel in a 32 bit value */ - GBM_BO_FORMAT_ARGB8888 -}; - - -/** - * The FourCC format codes are taken from the drm_fourcc.h definition, and - * re-namespaced. New GBM formats must not be added, unless they are - * identical ports from drm_fourcc. - */ -#define __gbm_fourcc_code(a,b,c,d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | \ - ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24)) - -#define GBM_FORMAT_BIG_ENDIAN (1<<31) /* format is big endian instead of little endian */ - -/* color index */ -#define GBM_FORMAT_C8 __gbm_fourcc_code('C', '8', ' ', ' ') /* [7:0] C */ - -/* 8 bpp Red */ -#define GBM_FORMAT_R8 __gbm_fourcc_code('R', '8', ' ', ' ') /* [7:0] R */ - -/* 16 bpp Red */ -#define GBM_FORMAT_R16 __gbm_fourcc_code('R', '1', '6', ' ') /* [15:0] R little endian */ - -/* 16 bpp RG */ -#define GBM_FORMAT_GR88 __gbm_fourcc_code('G', 'R', '8', '8') /* [15:0] G:R 8:8 little endian */ - -/* 32 bpp RG */ -#define GBM_FORMAT_RG1616 __gbm_fourcc_code('R', 'G', '3', '2') /* [31:0] R:G 16:16 little endian */ -#define GBM_FORMAT_GR1616 __gbm_fourcc_code('G', 'R', '3', '2') /* [31:0] G:R 16:16 little endian */ - -/* 8 bpp RGB */ -#define GBM_FORMAT_RGB332 __gbm_fourcc_code('R', 'G', 'B', '8') /* [7:0] R:G:B 3:3:2 */ -#define GBM_FORMAT_BGR233 __gbm_fourcc_code('B', 'G', 'R', '8') /* [7:0] B:G:R 2:3:3 */ - -/* 16 bpp RGB */ -#define GBM_FORMAT_XRGB4444 __gbm_fourcc_code('X', 'R', '1', '2') /* [15:0] x:R:G:B 4:4:4:4 little endian */ -#define GBM_FORMAT_XBGR4444 __gbm_fourcc_code('X', 'B', '1', '2') /* [15:0] x:B:G:R 4:4:4:4 little endian */ -#define GBM_FORMAT_RGBX4444 __gbm_fourcc_code('R', 'X', '1', '2') /* [15:0] R:G:B:x 4:4:4:4 little endian */ -#define GBM_FORMAT_BGRX4444 __gbm_fourcc_code('B', 'X', '1', '2') /* [15:0] B:G:R:x 4:4:4:4 little endian */ - -#define GBM_FORMAT_ARGB4444 __gbm_fourcc_code('A', 'R', '1', '2') /* [15:0] A:R:G:B 4:4:4:4 little endian */ -#define GBM_FORMAT_ABGR4444 __gbm_fourcc_code('A', 'B', '1', '2') /* [15:0] A:B:G:R 4:4:4:4 little endian */ -#define GBM_FORMAT_RGBA4444 __gbm_fourcc_code('R', 'A', '1', '2') /* [15:0] R:G:B:A 4:4:4:4 little endian */ -#define GBM_FORMAT_BGRA4444 __gbm_fourcc_code('B', 'A', '1', '2') /* [15:0] B:G:R:A 4:4:4:4 little endian */ - -#define GBM_FORMAT_XRGB1555 __gbm_fourcc_code('X', 'R', '1', '5') /* [15:0] x:R:G:B 1:5:5:5 little endian */ -#define GBM_FORMAT_XBGR1555 __gbm_fourcc_code('X', 'B', '1', '5') /* [15:0] x:B:G:R 1:5:5:5 little endian */ -#define GBM_FORMAT_RGBX5551 __gbm_fourcc_code('R', 'X', '1', '5') /* [15:0] R:G:B:x 5:5:5:1 little endian */ -#define GBM_FORMAT_BGRX5551 __gbm_fourcc_code('B', 'X', '1', '5') /* [15:0] B:G:R:x 5:5:5:1 little endian */ - -#define GBM_FORMAT_ARGB1555 __gbm_fourcc_code('A', 'R', '1', '5') /* [15:0] A:R:G:B 1:5:5:5 little endian */ -#define GBM_FORMAT_ABGR1555 __gbm_fourcc_code('A', 'B', '1', '5') /* [15:0] A:B:G:R 1:5:5:5 little endian */ -#define GBM_FORMAT_RGBA5551 __gbm_fourcc_code('R', 'A', '1', '5') /* [15:0] R:G:B:A 5:5:5:1 little endian */ -#define GBM_FORMAT_BGRA5551 __gbm_fourcc_code('B', 'A', '1', '5') /* [15:0] B:G:R:A 5:5:5:1 little endian */ - -#define GBM_FORMAT_RGB565 __gbm_fourcc_code('R', 'G', '1', '6') /* [15:0] R:G:B 5:6:5 little endian */ -#define GBM_FORMAT_BGR565 __gbm_fourcc_code('B', 'G', '1', '6') /* [15:0] B:G:R 5:6:5 little endian */ - -/* 24 bpp RGB */ -#define GBM_FORMAT_RGB888 __gbm_fourcc_code('R', 'G', '2', '4') /* [23:0] R:G:B little endian */ -#define GBM_FORMAT_BGR888 __gbm_fourcc_code('B', 'G', '2', '4') /* [23:0] B:G:R little endian */ - -/* 32 bpp RGB */ -#define GBM_FORMAT_XRGB8888 __gbm_fourcc_code('X', 'R', '2', '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */ -#define GBM_FORMAT_XBGR8888 __gbm_fourcc_code('X', 'B', '2', '4') /* [31:0] x:B:G:R 8:8:8:8 little endian */ -#define GBM_FORMAT_RGBX8888 __gbm_fourcc_code('R', 'X', '2', '4') /* [31:0] R:G:B:x 8:8:8:8 little endian */ -#define GBM_FORMAT_BGRX8888 __gbm_fourcc_code('B', 'X', '2', '4') /* [31:0] B:G:R:x 8:8:8:8 little endian */ - -#define GBM_FORMAT_ARGB8888 __gbm_fourcc_code('A', 'R', '2', '4') /* [31:0] A:R:G:B 8:8:8:8 little endian */ -#define GBM_FORMAT_ABGR8888 __gbm_fourcc_code('A', 'B', '2', '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */ -#define GBM_FORMAT_RGBA8888 __gbm_fourcc_code('R', 'A', '2', '4') /* [31:0] R:G:B:A 8:8:8:8 little endian */ -#define GBM_FORMAT_BGRA8888 __gbm_fourcc_code('B', 'A', '2', '4') /* [31:0] B:G:R:A 8:8:8:8 little endian */ - -#define GBM_FORMAT_XRGB2101010 __gbm_fourcc_code('X', 'R', '3', '0') /* [31:0] x:R:G:B 2:10:10:10 little endian */ -#define GBM_FORMAT_XBGR2101010 __gbm_fourcc_code('X', 'B', '3', '0') /* [31:0] x:B:G:R 2:10:10:10 little endian */ -#define GBM_FORMAT_RGBX1010102 __gbm_fourcc_code('R', 'X', '3', '0') /* [31:0] R:G:B:x 10:10:10:2 little endian */ -#define GBM_FORMAT_BGRX1010102 __gbm_fourcc_code('B', 'X', '3', '0') /* [31:0] B:G:R:x 10:10:10:2 little endian */ - -#define GBM_FORMAT_ARGB2101010 __gbm_fourcc_code('A', 'R', '3', '0') /* [31:0] A:R:G:B 2:10:10:10 little endian */ -#define GBM_FORMAT_ABGR2101010 __gbm_fourcc_code('A', 'B', '3', '0') /* [31:0] A:B:G:R 2:10:10:10 little endian */ -#define GBM_FORMAT_RGBA1010102 __gbm_fourcc_code('R', 'A', '3', '0') /* [31:0] R:G:B:A 10:10:10:2 little endian */ -#define GBM_FORMAT_BGRA1010102 __gbm_fourcc_code('B', 'A', '3', '0') /* [31:0] B:G:R:A 10:10:10:2 little endian */ - -/* 64 bpp RGB */ -#define GBM_FORMAT_XBGR16161616 __gbm_fourcc_code('X', 'B', '4', '8') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define GBM_FORMAT_ABGR16161616 __gbm_fourcc_code('A', 'B', '4', '8') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* - * Floating point 64bpp RGB - * IEEE 754-2008 binary16 half-precision float - * [15:0] sign:exponent:mantissa 1:5:10 - */ -#define GBM_FORMAT_XBGR16161616F __gbm_fourcc_code('X', 'B', '4', 'H') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define GBM_FORMAT_ABGR16161616F __gbm_fourcc_code('A', 'B', '4', 'H') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* packed YCbCr */ -#define GBM_FORMAT_YUYV __gbm_fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */ -#define GBM_FORMAT_YVYU __gbm_fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */ -#define GBM_FORMAT_UYVY __gbm_fourcc_code('U', 'Y', 'V', 'Y') /* [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian */ -#define GBM_FORMAT_VYUY __gbm_fourcc_code('V', 'Y', 'U', 'Y') /* [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian */ - -#define GBM_FORMAT_AYUV __gbm_fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */ - -/* - * 2 plane YCbCr - * index 0 = Y plane, [7:0] Y - * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian - * or - * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian - */ -#define GBM_FORMAT_NV12 __gbm_fourcc_code('N', 'V', '1', '2') /* 2x2 subsampled Cr:Cb plane */ -#define GBM_FORMAT_NV21 __gbm_fourcc_code('N', 'V', '2', '1') /* 2x2 subsampled Cb:Cr plane */ -#define GBM_FORMAT_NV16 __gbm_fourcc_code('N', 'V', '1', '6') /* 2x1 subsampled Cr:Cb plane */ -#define GBM_FORMAT_NV61 __gbm_fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */ - -/* - * 3 plane YCbCr - * index 0: Y plane, [7:0] Y - * index 1: Cb plane, [7:0] Cb - * index 2: Cr plane, [7:0] Cr - * or - * index 1: Cr plane, [7:0] Cr - * index 2: Cb plane, [7:0] Cb - */ -#define GBM_FORMAT_YUV410 __gbm_fourcc_code('Y', 'U', 'V', '9') /* 4x4 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU410 __gbm_fourcc_code('Y', 'V', 'U', '9') /* 4x4 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV411 __gbm_fourcc_code('Y', 'U', '1', '1') /* 4x1 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU411 __gbm_fourcc_code('Y', 'V', '1', '1') /* 4x1 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV420 __gbm_fourcc_code('Y', 'U', '1', '2') /* 2x2 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU420 __gbm_fourcc_code('Y', 'V', '1', '2') /* 2x2 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV422 __gbm_fourcc_code('Y', 'U', '1', '6') /* 2x1 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU422 __gbm_fourcc_code('Y', 'V', '1', '6') /* 2x1 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV444 __gbm_fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU444 __gbm_fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */ - -struct gbm_format_name_desc { - char name[5]; -}; - -/** - * Flags to indicate the intended use for the buffer - these are passed into - * gbm_bo_create(). The caller must set the union of all the flags that are - * appropriate - * - * \sa Use gbm_device_is_format_supported() to check if the combination of format - * and use flags are supported - */ -enum gbm_bo_flags { - /** - * Buffer is going to be presented to the screen using an API such as KMS - */ - GBM_BO_USE_SCANOUT = (1 << 0), - /** - * Buffer is going to be used as cursor - */ - GBM_BO_USE_CURSOR = (1 << 1), - /** - * Deprecated - */ - GBM_BO_USE_CURSOR_64X64 = GBM_BO_USE_CURSOR, - /** - * Buffer is to be used for rendering - for example it is going to be used - * as the storage for a color buffer - */ - GBM_BO_USE_RENDERING = (1 << 2), - /** - * Buffer can be used for gbm_bo_write. This is guaranteed to work - * with GBM_BO_USE_CURSOR, but may not work for other combinations. - */ - GBM_BO_USE_WRITE = (1 << 3), - /** - * Buffer is linear, i.e. not tiled. - */ - GBM_BO_USE_LINEAR = (1 << 4), - /** - * Buffer is protected, i.e. encrypted and not readable by CPU or any - * other non-secure / non-trusted components nor by non-trusted OpenGL, - * OpenCL, and Vulkan applications. - */ - GBM_BO_USE_PROTECTED = (1 << 5), -}; - -int -gbm_device_get_fd(struct gbm_device *gbm); - -const char * -gbm_device_get_backend_name(struct gbm_device *gbm); - -int -gbm_device_is_format_supported(struct gbm_device *gbm, - uint32_t format, uint32_t flags); - -int -gbm_device_get_format_modifier_plane_count(struct gbm_device *gbm, - uint32_t format, - uint64_t modifier); - -void -gbm_device_destroy(struct gbm_device *gbm); - -struct gbm_device * -gbm_create_device(int fd); - -struct gbm_bo * -gbm_bo_create(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); - -struct gbm_bo * -gbm_bo_create_with_modifiers(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count); - -struct gbm_bo * -gbm_bo_create_with_modifiers2(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count, - uint32_t flags); - -#define GBM_BO_IMPORT_WL_BUFFER 0x5501 -#define GBM_BO_IMPORT_EGL_IMAGE 0x5502 -#define GBM_BO_IMPORT_FD 0x5503 -#define GBM_BO_IMPORT_FD_MODIFIER 0x5504 - -struct gbm_import_fd_data { - int fd; - uint32_t width; - uint32_t height; - uint32_t stride; - uint32_t format; -}; - -#define GBM_MAX_PLANES 4 - -struct gbm_import_fd_modifier_data { - uint32_t width; - uint32_t height; - uint32_t format; - uint32_t num_fds; - int fds[GBM_MAX_PLANES]; - int strides[GBM_MAX_PLANES]; - int offsets[GBM_MAX_PLANES]; - uint64_t modifier; -}; - -struct gbm_bo * -gbm_bo_import(struct gbm_device *gbm, uint32_t type, - void *buffer, uint32_t flags); - -/** - * Flags to indicate the type of mapping for the buffer - these are - * passed into gbm_bo_map(). The caller must set the union of all the - * flags that are appropriate. - * - * These flags are independent of the GBM_BO_USE_* creation flags. However, - * mapping the buffer may require copying to/from a staging buffer. - * - * See also: pipe_map_flags - */ -enum gbm_bo_transfer_flags { - /** - * Buffer contents read back (or accessed directly) at transfer - * create time. - */ - GBM_BO_TRANSFER_READ = (1 << 0), - /** - * Buffer contents will be written back at unmap time - * (or modified as a result of being accessed directly). - */ - GBM_BO_TRANSFER_WRITE = (1 << 1), - /** - * Read/modify/write - */ - GBM_BO_TRANSFER_READ_WRITE = (GBM_BO_TRANSFER_READ | GBM_BO_TRANSFER_WRITE), -}; - -void * -gbm_bo_map(struct gbm_bo *bo, - uint32_t x, uint32_t y, uint32_t width, uint32_t height, - uint32_t flags, uint32_t *stride, void **map_data); - -void -gbm_bo_unmap(struct gbm_bo *bo, void *map_data); - -uint32_t -gbm_bo_get_width(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_height(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_stride(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_stride_for_plane(struct gbm_bo *bo, int plane); - -uint32_t -gbm_bo_get_format(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_bpp(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_offset(struct gbm_bo *bo, int plane); - -struct gbm_device * -gbm_bo_get_device(struct gbm_bo *bo); - -union gbm_bo_handle -gbm_bo_get_handle(struct gbm_bo *bo); - -int -gbm_bo_get_fd(struct gbm_bo *bo); - -uint64_t -gbm_bo_get_modifier(struct gbm_bo *bo); - -int -gbm_bo_get_plane_count(struct gbm_bo *bo); - -union gbm_bo_handle -gbm_bo_get_handle_for_plane(struct gbm_bo *bo, int plane); - -int -gbm_bo_get_fd_for_plane(struct gbm_bo *bo, int plane); - -int -gbm_bo_write(struct gbm_bo *bo, const void *buf, size_t count); - -void -gbm_bo_set_user_data(struct gbm_bo *bo, void *data, - void (*destroy_user_data)(struct gbm_bo *, void *)); - -void * -gbm_bo_get_user_data(struct gbm_bo *bo); - -void -gbm_bo_destroy(struct gbm_bo *bo); - -struct gbm_surface * -gbm_surface_create(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); - -struct gbm_surface * -gbm_surface_create_with_modifiers(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count); - -struct gbm_surface * -gbm_surface_create_with_modifiers2(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count, - uint32_t flags); - -struct gbm_bo * -gbm_surface_lock_front_buffer(struct gbm_surface *surface); - -void -gbm_surface_release_buffer(struct gbm_surface *surface, struct gbm_bo *bo); - -int -gbm_surface_has_free_buffers(struct gbm_surface *surface); - -void -gbm_surface_destroy(struct gbm_surface *surface); - -char * -gbm_format_get_name(uint32_t gbm_format, struct gbm_format_name_desc *desc); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/prebuilts/arm/include/libavcodec/ac3_parser.h b/prebuilts/arm/include/libavcodec/ac3_parser.h deleted file mode 100644 index ff8cc4c..0000000 --- a/prebuilts/arm/include/libavcodec/ac3_parser.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * AC-3 parser prototypes - * Copyright (c) 2003 Fabrice Bellard - * Copyright (c) 2003 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AC3_PARSER_H -#define AVCODEC_AC3_PARSER_H - -#include -#include - -/** - * Extract the bitstream ID and the frame size from AC-3 data. - */ -int av_ac3_parse_header(const uint8_t *buf, size_t size, - uint8_t *bitstream_id, uint16_t *frame_size); - - -#endif /* AVCODEC_AC3_PARSER_H */ diff --git a/prebuilts/arm/include/libavcodec/adts_parser.h b/prebuilts/arm/include/libavcodec/adts_parser.h deleted file mode 100644 index f85becd..0000000 --- a/prebuilts/arm/include/libavcodec/adts_parser.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_ADTS_PARSER_H -#define AVCODEC_ADTS_PARSER_H - -#include -#include - -#define AV_AAC_ADTS_HEADER_SIZE 7 - -/** - * Extract the number of samples and frames from AAC data. - * @param[in] buf pointer to AAC data buffer - * @param[out] samples Pointer to where number of samples is written - * @param[out] frames Pointer to where number of frames is written - * @return Returns 0 on success, error code on failure. - */ -int av_adts_header_parse(const uint8_t *buf, uint32_t *samples, - uint8_t *frames); - -#endif /* AVCODEC_ADTS_PARSER_H */ diff --git a/prebuilts/arm/include/libavcodec/avcodec.h b/prebuilts/arm/include/libavcodec/avcodec.h deleted file mode 100644 index 8a71c04..0000000 --- a/prebuilts/arm/include/libavcodec/avcodec.h +++ /dev/null @@ -1,4184 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVCODEC_H -#define AVCODEC_AVCODEC_H - -/** - * @file - * @ingroup libavc - * Libavcodec external API header - */ - -#include -#include "libavutil/samplefmt.h" -#include "libavutil/attributes.h" -#include "libavutil/avutil.h" -#include "libavutil/buffer.h" -#include "libavutil/cpu.h" -#include "libavutil/channel_layout.h" -#include "libavutil/dict.h" -#include "libavutil/frame.h" -#include "libavutil/hwcontext.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" - -#include "bsf.h" -#include "codec.h" -#include "codec_desc.h" -#include "codec_par.h" -#include "codec_id.h" -#include "packet.h" -#include "version.h" - -/** - * @defgroup libavc libavcodec - * Encoding/Decoding Library - * - * @{ - * - * @defgroup lavc_decoding Decoding - * @{ - * @} - * - * @defgroup lavc_encoding Encoding - * @{ - * @} - * - * @defgroup lavc_codec Codecs - * @{ - * @defgroup lavc_codec_native Native Codecs - * @{ - * @} - * @defgroup lavc_codec_wrappers External library wrappers - * @{ - * @} - * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge - * @{ - * @} - * @} - * @defgroup lavc_internal Internal - * @{ - * @} - * @} - */ - -/** - * @ingroup libavc - * @defgroup lavc_encdec send/receive encoding and decoding API overview - * @{ - * - * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/ - * avcodec_receive_packet() functions provide an encode/decode API, which - * decouples input and output. - * - * The API is very similar for encoding/decoding and audio/video, and works as - * follows: - * - Set up and open the AVCodecContext as usual. - * - Send valid input: - * - For decoding, call avcodec_send_packet() to give the decoder raw - * compressed data in an AVPacket. - * - For encoding, call avcodec_send_frame() to give the encoder an AVFrame - * containing uncompressed audio or video. - * - * In both cases, it is recommended that AVPackets and AVFrames are - * refcounted, or libavcodec might have to copy the input data. (libavformat - * always returns refcounted AVPackets, and av_frame_get_buffer() allocates - * refcounted AVFrames.) - * - Receive output in a loop. Periodically call one of the avcodec_receive_*() - * functions and process their output: - * - For decoding, call avcodec_receive_frame(). On success, it will return - * an AVFrame containing uncompressed audio or video data. - * - For encoding, call avcodec_receive_packet(). On success, it will return - * an AVPacket with a compressed frame. - * - * Repeat this call until it returns AVERROR(EAGAIN) or an error. The - * AVERROR(EAGAIN) return value means that new input data is required to - * return new output. In this case, continue with sending input. For each - * input frame/packet, the codec will typically return 1 output frame/packet, - * but it can also be 0 or more than 1. - * - * At the beginning of decoding or encoding, the codec might accept multiple - * input frames/packets without returning a frame, until its internal buffers - * are filled. This situation is handled transparently if you follow the steps - * outlined above. - * - * In theory, sending input can result in EAGAIN - this should happen only if - * not all output was received. You can use this to structure alternative decode - * or encode loops other than the one suggested above. For example, you could - * try sending new input on each iteration, and try to receive output if that - * returns EAGAIN. - * - * End of stream situations. These require "flushing" (aka draining) the codec, - * as the codec might buffer multiple frames or packets internally for - * performance or out of necessity (consider B-frames). - * This is handled as follows: - * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding) - * or avcodec_send_frame() (encoding) functions. This will enter draining - * mode. - * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet() - * (encoding) in a loop until AVERROR_EOF is returned. The functions will - * not return AVERROR(EAGAIN), unless you forgot to enter draining mode. - * - Before decoding can be resumed again, the codec has to be reset with - * avcodec_flush_buffers(). - * - * Using the API as outlined above is highly recommended. But it is also - * possible to call functions outside of this rigid schema. For example, you can - * call avcodec_send_packet() repeatedly without calling - * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed - * until the codec's internal buffer has been filled up (which is typically of - * size 1 per output frame, after initial input), and then reject input with - * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to - * read at least some output. - * - * Not all codecs will follow a rigid and predictable dataflow; the only - * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on - * one end implies that a receive/send call on the other end will succeed, or - * at least will not fail with AVERROR(EAGAIN). In general, no codec will - * permit unlimited buffering of input or output. - * - * This API replaces the following legacy functions: - * - avcodec_decode_video2() and avcodec_decode_audio4(): - * Use avcodec_send_packet() to feed input to the decoder, then use - * avcodec_receive_frame() to receive decoded frames after each packet. - * Unlike with the old video decoding API, multiple frames might result from - * a packet. For audio, splitting the input packet into frames by partially - * decoding packets becomes transparent to the API user. You never need to - * feed an AVPacket to the API twice (unless it is rejected with AVERROR(EAGAIN) - then - * no data was read from the packet). - * Additionally, sending a flush/draining packet is required only once. - * - avcodec_encode_video2()/avcodec_encode_audio2(): - * Use avcodec_send_frame() to feed input to the encoder, then use - * avcodec_receive_packet() to receive encoded packets. - * Providing user-allocated buffers for avcodec_receive_packet() is not - * possible. - * - The new API does not handle subtitles yet. - * - * Mixing new and old function calls on the same AVCodecContext is not allowed, - * and will result in undefined behavior. - * - * Some codecs might require using the new API; using the old API will return - * an error when calling it. All codecs support the new API. - * - * A codec is not allowed to return AVERROR(EAGAIN) for both sending and receiving. This - * would be an invalid state, which could put the codec user into an endless - * loop. The API has no concept of time either: it cannot happen that trying to - * do avcodec_send_packet() results in AVERROR(EAGAIN), but a repeated call 1 second - * later accepts the packet (with no other receive/flush API calls involved). - * The API is a strict state machine, and the passage of time is not supposed - * to influence it. Some timing-dependent behavior might still be deemed - * acceptable in certain cases. But it must never result in both send/receive - * returning EAGAIN at the same time at any point. It must also absolutely be - * avoided that the current state is "unstable" and can "flip-flop" between - * the send/receive APIs allowing progress. For example, it's not allowed that - * the codec randomly decides that it actually wants to consume a packet now - * instead of returning a frame, after it just returned AVERROR(EAGAIN) on an - * avcodec_send_packet() call. - * @} - */ - -/** - * @defgroup lavc_core Core functions/structures. - * @ingroup libavc - * - * Basic definitions, functions for querying libavcodec capabilities, - * allocating core structures, etc. - * @{ - */ - -/** - * @ingroup lavc_decoding - * Required number of additionally allocated bytes at the end of the input bitstream for decoding. - * This is mainly needed because some optimized bitstream readers read - * 32 or 64 bit at once and could read over the end.
- * Note: If the first 23 bits of the additional bytes are not 0, then damaged - * MPEG bitstreams could cause overread and segfault. - */ -#define AV_INPUT_BUFFER_PADDING_SIZE 64 - -/** - * @ingroup lavc_encoding - * minimum encoding buffer size - * Used to avoid some checks during header writing. - */ -#define AV_INPUT_BUFFER_MIN_SIZE 16384 - -/** - * @ingroup lavc_decoding - */ -enum AVDiscard{ - /* We leave some space between them for extensions (drop some - * keyframes for intra-only or drop just some bidir frames). */ - AVDISCARD_NONE =-16, ///< discard nothing - AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi - AVDISCARD_NONREF = 8, ///< discard all non reference - AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames - AVDISCARD_NONINTRA= 24, ///< discard all non intra frames - AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes - AVDISCARD_ALL = 48, ///< discard all -}; - -enum AVAudioServiceType { - AV_AUDIO_SERVICE_TYPE_MAIN = 0, - AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, - AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, - AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, - AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, - AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, - AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, - AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, - AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, - AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI -}; - -/** - * @ingroup lavc_encoding - */ -typedef struct RcOverride{ - int start_frame; - int end_frame; - int qscale; // If this is 0 then quality_factor will be used instead. - float quality_factor; -} RcOverride; - -/* encoding support - These flags can be passed in AVCodecContext.flags before initialization. - Note: Not everything is supported yet. -*/ - -/** - * Allow decoders to produce frames with data planes that are not aligned - * to CPU requirements (e.g. due to cropping). - */ -#define AV_CODEC_FLAG_UNALIGNED (1 << 0) -/** - * Use fixed qscale. - */ -#define AV_CODEC_FLAG_QSCALE (1 << 1) -/** - * 4 MV per MB allowed / advanced prediction for H.263. - */ -#define AV_CODEC_FLAG_4MV (1 << 2) -/** - * Output even those frames that might be corrupted. - */ -#define AV_CODEC_FLAG_OUTPUT_CORRUPT (1 << 3) -/** - * Use qpel MC. - */ -#define AV_CODEC_FLAG_QPEL (1 << 4) -/** - * Don't output frames whose parameters differ from first - * decoded frame in stream. - */ -#define AV_CODEC_FLAG_DROPCHANGED (1 << 5) -/** - * Use internal 2pass ratecontrol in first pass mode. - */ -#define AV_CODEC_FLAG_PASS1 (1 << 9) -/** - * Use internal 2pass ratecontrol in second pass mode. - */ -#define AV_CODEC_FLAG_PASS2 (1 << 10) -/** - * loop filter. - */ -#define AV_CODEC_FLAG_LOOP_FILTER (1 << 11) -/** - * Only decode/encode grayscale. - */ -#define AV_CODEC_FLAG_GRAY (1 << 13) -/** - * error[?] variables will be set during encoding. - */ -#define AV_CODEC_FLAG_PSNR (1 << 15) -/** - * Input bitstream might be truncated at a random location - * instead of only at frame boundaries. - */ -#define AV_CODEC_FLAG_TRUNCATED (1 << 16) -/** - * Use interlaced DCT. - */ -#define AV_CODEC_FLAG_INTERLACED_DCT (1 << 18) -/** - * Force low delay. - */ -#define AV_CODEC_FLAG_LOW_DELAY (1 << 19) -/** - * Place global headers in extradata instead of every keyframe. - */ -#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22) -/** - * Use only bitexact stuff (except (I)DCT). - */ -#define AV_CODEC_FLAG_BITEXACT (1 << 23) -/* Fx : Flag for H.263+ extra options */ -/** - * H.263 advanced intra coding / MPEG-4 AC prediction - */ -#define AV_CODEC_FLAG_AC_PRED (1 << 24) -/** - * interlaced motion estimation - */ -#define AV_CODEC_FLAG_INTERLACED_ME (1 << 29) -#define AV_CODEC_FLAG_CLOSED_GOP (1U << 31) - -/** - * Allow non spec compliant speedup tricks. - */ -#define AV_CODEC_FLAG2_FAST (1 << 0) -/** - * Skip bitstream encoding. - */ -#define AV_CODEC_FLAG2_NO_OUTPUT (1 << 2) -/** - * Place global headers at every keyframe instead of in extradata. - */ -#define AV_CODEC_FLAG2_LOCAL_HEADER (1 << 3) - -/** - * timecode is in drop frame format. DEPRECATED!!!! - */ -#define AV_CODEC_FLAG2_DROP_FRAME_TIMECODE (1 << 13) - -/** - * Input bitstream might be truncated at a packet boundaries - * instead of only at frame boundaries. - */ -#define AV_CODEC_FLAG2_CHUNKS (1 << 15) -/** - * Discard cropping information from SPS. - */ -#define AV_CODEC_FLAG2_IGNORE_CROP (1 << 16) - -/** - * Show all frames before the first keyframe - */ -#define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) -/** - * Export motion vectors through frame side data - */ -#define AV_CODEC_FLAG2_EXPORT_MVS (1 << 28) -/** - * Do not skip samples and export skip information as frame side data - */ -#define AV_CODEC_FLAG2_SKIP_MANUAL (1 << 29) -/** - * Do not reset ASS ReadOrder field on flush (subtitles decoding) - */ -#define AV_CODEC_FLAG2_RO_FLUSH_NOOP (1 << 30) - -/* Unsupported options : - * Syntax Arithmetic coding (SAC) - * Reference Picture Selection - * Independent Segment Decoding */ -/* /Fx */ -/* codec capabilities */ - -/* Exported side data. - These flags can be passed in AVCodecContext.export_side_data before initialization. -*/ -/** - * Export motion vectors through frame side data - */ -#define AV_CODEC_EXPORT_DATA_MVS (1 << 0) -/** - * Export encoder Producer Reference Time through packet side data - */ -#define AV_CODEC_EXPORT_DATA_PRFT (1 << 1) -/** - * Decoding only. - * Export the AVVideoEncParams structure through frame side data. - */ -#define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS (1 << 2) -/** - * Decoding only. - * Do not apply film grain, export it instead. - */ -#define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) - -/** - * Pan Scan area. - * This specifies the area which should be displayed. - * Note there may be multiple such areas for one frame. - */ -typedef struct AVPanScan { - /** - * id - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int id; - - /** - * width and height in 1/16 pel - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int width; - int height; - - /** - * position of the top left corner in 1/16 pel for up to 3 fields/frames - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int16_t position[3][2]; -} AVPanScan; - -/** - * This structure describes the bitrate properties of an encoded bitstream. It - * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD - * parameters for H.264/HEVC. - */ -typedef struct AVCPBProperties { - /** - * Maximum bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ -#if FF_API_UNSANITIZED_BITRATES - int max_bitrate; -#else - int64_t max_bitrate; -#endif - /** - * Minimum bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ -#if FF_API_UNSANITIZED_BITRATES - int min_bitrate; -#else - int64_t min_bitrate; -#endif - /** - * Average bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ -#if FF_API_UNSANITIZED_BITRATES - int avg_bitrate; -#else - int64_t avg_bitrate; -#endif - - /** - * The size of the buffer to which the ratecontrol is applied, in bits. - * Zero if unknown or unspecified. - */ - int buffer_size; - - /** - * The delay between the time the packet this structure is associated with - * is received and the time when it should be decoded, in periods of a 27MHz - * clock. - * - * UINT64_MAX when unknown or unspecified. - */ - uint64_t vbv_delay; -} AVCPBProperties; - -/** - * This structure supplies correlation between a packet timestamp and a wall clock - * production time. The definition follows the Producer Reference Time ('prft') - * as defined in ISO/IEC 14496-12 - */ -typedef struct AVProducerReferenceTime { - /** - * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()). - */ - int64_t wallclock; - int flags; -} AVProducerReferenceTime; - -/** - * The decoder will keep a reference to the frame and may reuse it later. - */ -#define AV_GET_BUFFER_FLAG_REF (1 << 0) - -/** - * The encoder will keep a reference to the packet and may reuse it later. - */ -#define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0) - -struct AVCodecInternal; - -/** - * main external API structure. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from user - * applications. - * The name string for AVOptions options matches the associated command line - * parameter name and can be found in libavcodec/options_table.h - * The AVOption/command line parameter names differ in some cases from the C - * structure field names for historic reasons or brevity. - * sizeof(AVCodecContext) must not be used outside libav*. - */ -typedef struct AVCodecContext { - /** - * information on struct for av_log - * - set by avcodec_alloc_context3 - */ - const AVClass *av_class; - int log_level_offset; - - enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ - const struct AVCodec *codec; - enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ - - /** - * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). - * This is used to work around some encoder bugs. - * A demuxer should set this to what is stored in the field used to identify the codec. - * If there are multiple such fields in a container then the demuxer should choose the one - * which maximizes the information about the used codec. - * If the codec tag field in a container is larger than 32 bits then the demuxer should - * remap the longer ID to 32 bits with a table or other structure. Alternatively a new - * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated - * first. - * - encoding: Set by user, if not then the default based on codec_id will be used. - * - decoding: Set by user, will be converted to uppercase by libavcodec during init. - */ - unsigned int codec_tag; - - void *priv_data; - - /** - * Private context used for internal data. - * - * Unlike priv_data, this is not codec-specific. It is used in general - * libavcodec functions. - */ - struct AVCodecInternal *internal; - - /** - * Private data of the user, can be used to carry app specific stuff. - * - encoding: Set by user. - * - decoding: Set by user. - */ - void *opaque; - - /** - * the average bitrate - * - encoding: Set by user; unused for constant quantizer encoding. - * - decoding: Set by user, may be overwritten by libavcodec - * if this info is available in the stream - */ - int64_t bit_rate; - - /** - * number of bits the bitstream is allowed to diverge from the reference. - * the reference can be CBR (for CBR pass1) or VBR (for pass2) - * - encoding: Set by user; unused for constant quantizer encoding. - * - decoding: unused - */ - int bit_rate_tolerance; - - /** - * Global quality for codecs which cannot change it per frame. - * This should be proportional to MPEG-1/2/4 qscale. - * - encoding: Set by user. - * - decoding: unused - */ - int global_quality; - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int compression_level; -#define FF_COMPRESSION_DEFAULT -1 - - /** - * AV_CODEC_FLAG_*. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int flags; - - /** - * AV_CODEC_FLAG2_* - * - encoding: Set by user. - * - decoding: Set by user. - */ - int flags2; - - /** - * some codecs need / can use extradata like Huffman tables. - * MJPEG: Huffman tables - * rv10: additional flags - * MPEG-4: global headers (they can be in the bitstream or here) - * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger - * than extradata_size to avoid problems if it is read with the bitstream reader. - * The bytewise contents of extradata must not depend on the architecture or CPU endianness. - * Must be allocated with the av_malloc() family of functions. - * - encoding: Set/allocated/freed by libavcodec. - * - decoding: Set/allocated/freed by user. - */ - uint8_t *extradata; - int extradata_size; - - /** - * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. For fixed-fps content, - * timebase should be 1/framerate and timestamp increments should be - * identically 1. - * This often, but not always is the inverse of the frame rate or field rate - * for video. 1/time_base is not the average frame rate if the frame rate is not - * constant. - * - * Like containers, elementary streams also can store timestamps, 1/time_base - * is the unit in which these timestamps are specified. - * As example of such codec time base see ISO/IEC 14496-2:2001(E) - * vop_time_increment_resolution and fixed_vop_rate - * (fixed_vop_rate == 0 implies that it is different from the framerate) - * - * - encoding: MUST be set by user. - * - decoding: the use of this field for decoding is deprecated. - * Use framerate instead. - */ - AVRational time_base; - - /** - * For some codecs, the time base is closer to the field rate than the frame rate. - * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration - * if no telecine is used ... - * - * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. - */ - int ticks_per_frame; - - /** - * Codec delay. - * - * Encoding: Number of frames delay there will be from the encoder input to - * the decoder output. (we assume the decoder matches the spec) - * Decoding: Number of frames delay in addition to what a standard decoder - * as specified in the spec would produce. - * - * Video: - * Number of frames the decoded output will be delayed relative to the - * encoded input. - * - * Audio: - * For encoding, this field is unused (see initial_padding). - * - * For decoding, this is the number of samples the decoder needs to - * output before the decoder's output is valid. When seeking, you should - * start decoding this many samples prior to your desired seek point. - * - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int delay; - - - /* video only */ - /** - * picture width / height. - * - * @note Those fields may not match the values of the last - * AVFrame output by avcodec_decode_video2 due frame - * reordering. - * - * - encoding: MUST be set by user. - * - decoding: May be set by the user before opening the decoder if known e.g. - * from the container. Some decoders will require the dimensions - * to be set by the caller. During decoding, the decoder may - * overwrite those values as required while parsing the data. - */ - int width, height; - - /** - * Bitstream width / height, may be different from width/height e.g. when - * the decoded frame is cropped before being output or lowres is enabled. - * - * @note Those field may not match the value of the last - * AVFrame output by avcodec_receive_frame() due frame - * reordering. - * - * - encoding: unused - * - decoding: May be set by the user before opening the decoder if known - * e.g. from the container. During decoding, the decoder may - * overwrite those values as required while parsing the data. - */ - int coded_width, coded_height; - - /** - * the number of pictures in a group of pictures, or 0 for intra_only - * - encoding: Set by user. - * - decoding: unused - */ - int gop_size; - - /** - * Pixel format, see AV_PIX_FMT_xxx. - * May be set by the demuxer if known from headers. - * May be overridden by the decoder if it knows better. - * - * @note This field may not match the value of the last - * AVFrame output by avcodec_receive_frame() due frame - * reordering. - * - * - encoding: Set by user. - * - decoding: Set by user if known, overridden by libavcodec while - * parsing the data. - */ - enum AVPixelFormat pix_fmt; - - /** - * If non NULL, 'draw_horiz_band' is called by the libavcodec - * decoder to draw a horizontal band. It improves cache usage. Not - * all codecs can do that. You must check the codec capabilities - * beforehand. - * When multithreading is used, it may be called from multiple threads - * at the same time; threads might draw different parts of the same AVFrame, - * or multiple AVFrames, and there is no guarantee that slices will be drawn - * in order. - * The function is also used by hardware acceleration APIs. - * It is called at least once during frame decoding to pass - * the data needed for hardware render. - * In that mode instead of pixel data, AVFrame points to - * a structure specific to the acceleration API. The application - * reads the structure and can change some fields to indicate progress - * or mark state. - * - encoding: unused - * - decoding: Set by user. - * @param height the height of the slice - * @param y the y position of the slice - * @param type 1->top field, 2->bottom field, 3->frame - * @param offset offset into the AVFrame.data from which the slice should be read - */ - void (*draw_horiz_band)(struct AVCodecContext *s, - const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], - int y, int type, int height); - - /** - * callback to negotiate the pixelFormat - * @param fmt is the list of formats which are supported by the codec, - * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. - * The first is always the native one. - * @note The callback may be called again immediately if initialization for - * the selected (hardware-accelerated) pixel format failed. - * @warning Behavior is undefined if the callback returns a value not - * in the fmt list of formats. - * @return the chosen format - * - encoding: unused - * - decoding: Set by user, if not set the native format will be chosen. - */ - enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - - /** - * maximum number of B-frames between non-B-frames - * Note: The output will be delayed by max_b_frames+1 relative to the input. - * - encoding: Set by user. - * - decoding: unused - */ - int max_b_frames; - - /** - * qscale factor between IP and B-frames - * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). - * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). - * - encoding: Set by user. - * - decoding: unused - */ - float b_quant_factor; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int b_frame_strategy; -#endif - - /** - * qscale offset between IP and B-frames - * - encoding: Set by user. - * - decoding: unused - */ - float b_quant_offset; - - /** - * Size of the frame reordering buffer in the decoder. - * For MPEG-2 it is 1 IPB or 0 low delay IP. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int has_b_frames; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int mpeg_quant; -#endif - - /** - * qscale factor between P- and I-frames - * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + offset). - * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). - * - encoding: Set by user. - * - decoding: unused - */ - float i_quant_factor; - - /** - * qscale offset between P and I-frames - * - encoding: Set by user. - * - decoding: unused - */ - float i_quant_offset; - - /** - * luminance masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float lumi_masking; - - /** - * temporary complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float temporal_cplx_masking; - - /** - * spatial complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float spatial_cplx_masking; - - /** - * p block masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float p_masking; - - /** - * darkness masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float dark_masking; - - /** - * slice count - * - encoding: Set by libavcodec. - * - decoding: Set by user (or 0). - */ - int slice_count; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int prediction_method; -#define FF_PRED_LEFT 0 -#define FF_PRED_PLANE 1 -#define FF_PRED_MEDIAN 2 -#endif - - /** - * slice offsets in the frame in bytes - * - encoding: Set/allocated by libavcodec. - * - decoding: Set/allocated by user (or NULL). - */ - int *slice_offset; - - /** - * sample aspect ratio (0 if unknown) - * That is the width of a pixel divided by the height of the pixel. - * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - AVRational sample_aspect_ratio; - - /** - * motion estimation comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_cmp; - /** - * subpixel motion estimation comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_sub_cmp; - /** - * macroblock comparison function (not supported yet) - * - encoding: Set by user. - * - decoding: unused - */ - int mb_cmp; - /** - * interlaced DCT comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int ildct_cmp; -#define FF_CMP_SAD 0 -#define FF_CMP_SSE 1 -#define FF_CMP_SATD 2 -#define FF_CMP_DCT 3 -#define FF_CMP_PSNR 4 -#define FF_CMP_BIT 5 -#define FF_CMP_RD 6 -#define FF_CMP_ZERO 7 -#define FF_CMP_VSAD 8 -#define FF_CMP_VSSE 9 -#define FF_CMP_NSSE 10 -#define FF_CMP_W53 11 -#define FF_CMP_W97 12 -#define FF_CMP_DCTMAX 13 -#define FF_CMP_DCT264 14 -#define FF_CMP_MEDIAN_SAD 15 -#define FF_CMP_CHROMA 256 - - /** - * ME diamond size & shape - * - encoding: Set by user. - * - decoding: unused - */ - int dia_size; - - /** - * amount of previous MV predictors (2a+1 x 2a+1 square) - * - encoding: Set by user. - * - decoding: unused - */ - int last_predictor_count; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int pre_me; -#endif - - /** - * motion estimation prepass comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_pre_cmp; - - /** - * ME prepass diamond size & shape - * - encoding: Set by user. - * - decoding: unused - */ - int pre_dia_size; - - /** - * subpel ME quality - * - encoding: Set by user. - * - decoding: unused - */ - int me_subpel_quality; - - /** - * maximum motion estimation search range in subpel units - * If 0 then no limit. - * - * - encoding: Set by user. - * - decoding: unused - */ - int me_range; - - /** - * slice flags - * - encoding: unused - * - decoding: Set by user. - */ - int slice_flags; -#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display -#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG-2 field pics) -#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1) - - /** - * macroblock decision mode - * - encoding: Set by user. - * - decoding: unused - */ - int mb_decision; -#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp -#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits -#define FF_MB_DECISION_RD 2 ///< rate distortion - - /** - * custom intra quantization matrix - * Must be allocated with the av_malloc() family of functions, and will be freed in - * avcodec_free_context(). - * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. - * - decoding: Set/allocated/freed by libavcodec. - */ - uint16_t *intra_matrix; - - /** - * custom inter quantization matrix - * Must be allocated with the av_malloc() family of functions, and will be freed in - * avcodec_free_context(). - * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. - * - decoding: Set/allocated/freed by libavcodec. - */ - uint16_t *inter_matrix; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int scenechange_threshold; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int noise_reduction; -#endif - - /** - * precision of the intra DC coefficient - 8 - * - encoding: Set by user. - * - decoding: Set by libavcodec - */ - int intra_dc_precision; - - /** - * Number of macroblock rows at the top which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_top; - - /** - * Number of macroblock rows at the bottom which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_bottom; - - /** - * minimum MB Lagrange multiplier - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmin; - - /** - * maximum MB Lagrange multiplier - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmax; - -#if FF_API_PRIVATE_OPT - /** - * @deprecated use encoder private options instead - */ - attribute_deprecated - int me_penalty_compensation; -#endif - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int bidir_refine; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int brd_scale; -#endif - - /** - * minimum GOP size - * - encoding: Set by user. - * - decoding: unused - */ - int keyint_min; - - /** - * number of reference frames - * - encoding: Set by user. - * - decoding: Set by lavc. - */ - int refs; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int chromaoffset; -#endif - - /** - * Note: Value depends upon the compare function used for fullpel ME. - * - encoding: Set by user. - * - decoding: unused - */ - int mv0_threshold; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int b_sensitivity; -#endif - - /** - * Chromaticity coordinates of the source primaries. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorPrimaries color_primaries; - - /** - * Color Transfer Characteristic. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorTransferCharacteristic color_trc; - - /** - * YUV colorspace type. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorSpace colorspace; - - /** - * MPEG vs JPEG YUV range. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorRange color_range; - - /** - * This defines the location of chroma samples. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVChromaLocation chroma_sample_location; - - /** - * Number of slices. - * Indicates number of picture subdivisions. Used for parallelized - * decoding. - * - encoding: Set by user - * - decoding: unused - */ - int slices; - - /** Field order - * - encoding: set by libavcodec - * - decoding: Set by user. - */ - enum AVFieldOrder field_order; - - /* audio only */ - int sample_rate; ///< samples per second - int channels; ///< number of audio channels - - /** - * audio sample format - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - enum AVSampleFormat sample_fmt; ///< sample format - - /* The following data should not be initialized. */ - /** - * Number of samples per channel in an audio frame. - * - * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame - * except the last must contain exactly frame_size samples per channel. - * May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the - * frame size is not restricted. - * - decoding: may be set by some decoders to indicate constant frame size - */ - int frame_size; - - /** - * Frame counter, set by libavcodec. - * - * - decoding: total number of frames returned from the decoder so far. - * - encoding: total number of frames passed to the encoder so far. - * - * @note the counter is not incremented if encoding/decoding resulted in - * an error. - */ - int frame_number; - - /** - * number of bytes per packet if constant and known or 0 - * Used by some WAV based audio codecs. - */ - int block_align; - - /** - * Audio cutoff bandwidth (0 means "automatic") - * - encoding: Set by user. - * - decoding: unused - */ - int cutoff; - - /** - * Audio channel layout. - * - encoding: set by user. - * - decoding: set by user, may be overwritten by libavcodec. - */ - uint64_t channel_layout; - - /** - * Request decoder to use this channel layout if it can (0 for default) - * - encoding: unused - * - decoding: Set by user. - */ - uint64_t request_channel_layout; - - /** - * Type of service that the audio stream conveys. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - enum AVAudioServiceType audio_service_type; - - /** - * desired sample format - * - encoding: Not used. - * - decoding: Set by user. - * Decoder will decode to this format if it can. - */ - enum AVSampleFormat request_sample_fmt; - - /** - * This callback is called at the beginning of each frame to get data - * buffer(s) for it. There may be one contiguous buffer for all the data or - * there may be a buffer per each data plane or anything in between. What - * this means is, you may set however many entries in buf[] you feel necessary. - * Each buffer must be reference-counted using the AVBuffer API (see description - * of buf[] below). - * - * The following fields will be set in the frame before this callback is - * called: - * - format - * - width, height (video only) - * - sample_rate, channel_layout, nb_samples (audio only) - * Their values may differ from the corresponding values in - * AVCodecContext. This callback must use the frame values, not the codec - * context values, to calculate the required buffer size. - * - * This callback must fill the following fields in the frame: - * - data[] - * - linesize[] - * - extended_data: - * * if the data is planar audio with more than 8 channels, then this - * callback must allocate and fill extended_data to contain all pointers - * to all data planes. data[] must hold as many pointers as it can. - * extended_data must be allocated with av_malloc() and will be freed in - * av_frame_unref(). - * * otherwise extended_data must point to data - * - buf[] must contain one or more pointers to AVBufferRef structures. Each of - * the frame's data and extended_data pointers must be contained in these. That - * is, one AVBufferRef for each allocated chunk of memory, not necessarily one - * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(), - * and av_buffer_ref(). - * - extended_buf and nb_extended_buf must be allocated with av_malloc() by - * this callback and filled with the extra buffers if there are more - * buffers than buf[] can hold. extended_buf will be freed in - * av_frame_unref(). - * - * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call - * avcodec_default_get_buffer2() instead of providing buffers allocated by - * some other means. - * - * Each data plane must be aligned to the maximum required by the target - * CPU. - * - * @see avcodec_default_get_buffer2() - * - * Video: - * - * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused - * (read and/or written to if it is writable) later by libavcodec. - * - * avcodec_align_dimensions2() should be used to find the required width and - * height, as they normally need to be rounded up to the next multiple of 16. - * - * Some decoders do not support linesizes changing between frames. - * - * If frame multithreading is used, this callback may be called from a - * different thread, but not from more than one at once. Does not need to be - * reentrant. - * - * @see avcodec_align_dimensions2() - * - * Audio: - * - * Decoders request a buffer of a particular size by setting - * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, - * however, utilize only part of the buffer by setting AVFrame.nb_samples - * to a smaller value in the output frame. - * - * As a convenience, av_samples_get_buffer_size() and - * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() - * functions to find the required data size and to fill data pointers and - * linesize. In AVFrame.linesize, only linesize[0] may be set for audio - * since all planes must be the same size. - * - * @see av_samples_get_buffer_size(), av_samples_fill_arrays() - * - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - */ - int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags); - -#if FF_API_OLD_ENCDEC - /** - * If non-zero, the decoded audio and video frames returned from - * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted - * and are valid indefinitely. The caller must free them with - * av_frame_unref() when they are not needed anymore. - * Otherwise, the decoded frames must not be freed by the caller and are - * only valid until the next decode call. - * - * This is always automatically enabled if avcodec_receive_frame() is used. - * - * - encoding: unused - * - decoding: set by the caller before avcodec_open2(). - */ - attribute_deprecated - int refcounted_frames; -#endif - - /* - encoding parameters */ - float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) - float qblur; ///< amount of qscale smoothing over time (0.0-1.0) - - /** - * minimum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmin; - - /** - * maximum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmax; - - /** - * maximum quantizer difference between frames - * - encoding: Set by user. - * - decoding: unused - */ - int max_qdiff; - - /** - * decoder bitstream buffer size - * - encoding: Set by user. - * - decoding: unused - */ - int rc_buffer_size; - - /** - * ratecontrol override, see RcOverride - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - int rc_override_count; - RcOverride *rc_override; - - /** - * maximum bitrate - * - encoding: Set by user. - * - decoding: Set by user, may be overwritten by libavcodec. - */ - int64_t rc_max_rate; - - /** - * minimum bitrate - * - encoding: Set by user. - * - decoding: unused - */ - int64_t rc_min_rate; - - /** - * Ratecontrol attempt to use, at maximum, of what can be used without an underflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_max_available_vbv_use; - - /** - * Ratecontrol attempt to use, at least, times the amount needed to prevent a vbv overflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_min_vbv_overflow_use; - - /** - * Number of bits which should be loaded into the rc buffer before decoding starts. - * - encoding: Set by user. - * - decoding: unused - */ - int rc_initial_buffer_occupancy; - -#if FF_API_CODER_TYPE -#define FF_CODER_TYPE_VLC 0 -#define FF_CODER_TYPE_AC 1 -#define FF_CODER_TYPE_RAW 2 -#define FF_CODER_TYPE_RLE 3 - /** - * @deprecated use encoder private options instead - */ - attribute_deprecated - int coder_type; -#endif /* FF_API_CODER_TYPE */ - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int context_model; -#endif - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_threshold; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_factor; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_exp; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_cmp; -#endif /* FF_API_PRIVATE_OPT */ - - /** - * trellis RD quantization - * - encoding: Set by user. - * - decoding: unused - */ - int trellis; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int min_prediction_order; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int max_prediction_order; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int64_t timecode_frame_start; -#endif - -#if FF_API_RTP_CALLBACK - /** - * @deprecated unused - */ - /* The RTP callback: This function is called */ - /* every time the encoder has a packet to send. */ - /* It depends on the encoder if the data starts */ - /* with a Start Code (it should). H.263 does. */ - /* mb_nb contains the number of macroblocks */ - /* encoded in the RTP payload. */ - attribute_deprecated - void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb); -#endif - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int rtp_payload_size; /* The size of the RTP payload: the coder will */ - /* do its best to deliver a chunk with size */ - /* below rtp_payload_size, the chunk will start */ - /* with a start code on some codecs like H.263. */ - /* This doesn't take account of any particular */ - /* headers inside the transmitted RTP payload. */ -#endif - -#if FF_API_STAT_BITS - /* statistics, used for 2-pass encoding */ - attribute_deprecated - int mv_bits; - attribute_deprecated - int header_bits; - attribute_deprecated - int i_tex_bits; - attribute_deprecated - int p_tex_bits; - attribute_deprecated - int i_count; - attribute_deprecated - int p_count; - attribute_deprecated - int skip_count; - attribute_deprecated - int misc_bits; - - /** @deprecated this field is unused */ - attribute_deprecated - int frame_bits; -#endif - - /** - * pass1 encoding statistics output buffer - * - encoding: Set by libavcodec. - * - decoding: unused - */ - char *stats_out; - - /** - * pass2 encoding statistics input buffer - * Concatenated stuff from stats_out of pass1 should be placed here. - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - char *stats_in; - - /** - * Work around bugs in encoders which sometimes cannot be detected automatically. - * - encoding: Set by user - * - decoding: Set by user - */ - int workaround_bugs; -#define FF_BUG_AUTODETECT 1 ///< autodetection -#define FF_BUG_XVID_ILACE 4 -#define FF_BUG_UMP4 8 -#define FF_BUG_NO_PADDING 16 -#define FF_BUG_AMV 32 -#define FF_BUG_QPEL_CHROMA 64 -#define FF_BUG_STD_QPEL 128 -#define FF_BUG_QPEL_CHROMA2 256 -#define FF_BUG_DIRECT_BLOCKSIZE 512 -#define FF_BUG_EDGE 1024 -#define FF_BUG_HPEL_CHROMA 2048 -#define FF_BUG_DC_CLIP 4096 -#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders. -#define FF_BUG_TRUNCATED 16384 -#define FF_BUG_IEDGE 32768 - - /** - * strictly follow the standard (MPEG-4, ...). - * - encoding: Set by user. - * - decoding: Set by user. - * Setting this to STRICT or higher means the encoder and decoder will - * generally do stupid things, whereas setting it to unofficial or lower - * will mean the encoder might produce output that is not supported by all - * spec-compliant decoders. Decoders don't differentiate between normal, - * unofficial and experimental (that is, they always try to decode things - * when they can) unless they are explicitly asked to behave stupidly - * (=strictly conform to the specs) - */ - int strict_std_compliance; -#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. -#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. -#define FF_COMPLIANCE_NORMAL 0 -#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions -#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. - - /** - * error concealment flags - * - encoding: unused - * - decoding: Set by user. - */ - int error_concealment; -#define FF_EC_GUESS_MVS 1 -#define FF_EC_DEBLOCK 2 -#define FF_EC_FAVOR_INTER 256 - - /** - * debug - * - encoding: Set by user. - * - decoding: Set by user. - */ - int debug; -#define FF_DEBUG_PICT_INFO 1 -#define FF_DEBUG_RC 2 -#define FF_DEBUG_BITSTREAM 4 -#define FF_DEBUG_MB_TYPE 8 -#define FF_DEBUG_QP 16 -#define FF_DEBUG_DCT_COEFF 0x00000040 -#define FF_DEBUG_SKIP 0x00000080 -#define FF_DEBUG_STARTCODE 0x00000100 -#define FF_DEBUG_ER 0x00000400 -#define FF_DEBUG_MMCO 0x00000800 -#define FF_DEBUG_BUGS 0x00001000 -#define FF_DEBUG_BUFFERS 0x00008000 -#define FF_DEBUG_THREADS 0x00010000 -#define FF_DEBUG_GREEN_MD 0x00800000 -#define FF_DEBUG_NOMC 0x01000000 - - /** - * Error recognition; may misdetect some more or less valid parts as errors. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int err_recognition; - -/** - * Verify checksums embedded in the bitstream (could be of either encoded or - * decoded data, depending on the codec) and print an error message on mismatch. - * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the - * decoder returning an error. - */ -#define AV_EF_CRCCHECK (1<<0) -#define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations -#define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length -#define AV_EF_EXPLODE (1<<3) ///< abort decoding on minor error detection - -#define AV_EF_IGNORE_ERR (1<<15) ///< ignore errors and continue -#define AV_EF_CAREFUL (1<<16) ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors -#define AV_EF_COMPLIANT (1<<17) ///< consider all spec non compliances as errors -#define AV_EF_AGGRESSIVE (1<<18) ///< consider things that a sane encoder should not do as an error - - - /** - * opaque 64-bit number (generally a PTS) that will be reordered and - * output in AVFrame.reordered_opaque - * - encoding: Set by libavcodec to the reordered_opaque of the input - * frame corresponding to the last returned packet. Only - * supported by encoders with the - * AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability. - * - decoding: Set by user. - */ - int64_t reordered_opaque; - - /** - * Hardware accelerator in use - * - encoding: unused. - * - decoding: Set by libavcodec - */ - const struct AVHWAccel *hwaccel; - - /** - * Hardware accelerator context. - * For some hardware accelerators, a global context needs to be - * provided by the user. In that case, this holds display-dependent - * data FFmpeg cannot instantiate itself. Please refer to the - * FFmpeg HW accelerator documentation to know how to fill this - * is. e.g. for VA API, this is a struct vaapi_context. - * - encoding: unused - * - decoding: Set by user - */ - void *hwaccel_context; - - /** - * error - * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR. - * - decoding: unused - */ - uint64_t error[AV_NUM_DATA_POINTERS]; - - /** - * DCT algorithm, see FF_DCT_* below - * - encoding: Set by user. - * - decoding: unused - */ - int dct_algo; -#define FF_DCT_AUTO 0 -#define FF_DCT_FASTINT 1 -#define FF_DCT_INT 2 -#define FF_DCT_MMX 3 -#define FF_DCT_ALTIVEC 5 -#define FF_DCT_FAAN 6 - - /** - * IDCT algorithm, see FF_IDCT_* below. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int idct_algo; -#define FF_IDCT_AUTO 0 -#define FF_IDCT_INT 1 -#define FF_IDCT_SIMPLE 2 -#define FF_IDCT_SIMPLEMMX 3 -#define FF_IDCT_ARM 7 -#define FF_IDCT_ALTIVEC 8 -#define FF_IDCT_SIMPLEARM 10 -#define FF_IDCT_XVID 14 -#define FF_IDCT_SIMPLEARMV5TE 16 -#define FF_IDCT_SIMPLEARMV6 17 -#define FF_IDCT_FAAN 20 -#define FF_IDCT_SIMPLENEON 22 -#define FF_IDCT_NONE 24 /* Used by XvMC to extract IDCT coefficients with FF_IDCT_PERM_NONE */ -#define FF_IDCT_SIMPLEAUTO 128 - - /** - * bits per sample/pixel from the demuxer (needed for huffyuv). - * - encoding: Set by libavcodec. - * - decoding: Set by user. - */ - int bits_per_coded_sample; - - /** - * Bits per sample/pixel of internal libavcodec pixel/sample format. - * - encoding: set by user. - * - decoding: set by libavcodec. - */ - int bits_per_raw_sample; - - /** - * low resolution decoding, 1-> 1/2 size, 2->1/4 size - * - encoding: unused - * - decoding: Set by user. - */ - int lowres; - -#if FF_API_CODED_FRAME - /** - * the picture in the bitstream - * - encoding: Set by libavcodec. - * - decoding: unused - * - * @deprecated use the quality factor packet side data instead - */ - attribute_deprecated AVFrame *coded_frame; -#endif - - /** - * thread count - * is used to decide how many independent tasks should be passed to execute() - * - encoding: Set by user. - * - decoding: Set by user. - */ - int thread_count; - - /** - * Which multithreading methods to use. - * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, - * so clients which cannot provide future frames should not use it. - * - * - encoding: Set by user, otherwise the default is used. - * - decoding: Set by user, otherwise the default is used. - */ - int thread_type; -#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once -#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once - - /** - * Which multithreading methods are in use by the codec. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int active_thread_type; - -#if FF_API_THREAD_SAFE_CALLBACKS - /** - * Set by the client if its custom get_buffer() callback can be called - * synchronously from another thread, which allows faster multithreaded decoding. - * draw_horiz_band() will be called from other threads regardless of this setting. - * Ignored if the default get_buffer() is used. - * - encoding: Set by user. - * - decoding: Set by user. - * - * @deprecated the custom get_buffer2() callback should always be - * thread-safe. Thread-unsafe get_buffer2() implementations will be - * invalid starting with LIBAVCODEC_VERSION_MAJOR=60; in other words, - * libavcodec will behave as if this field was always set to 1. - * Callers that want to be forward compatible with future libavcodec - * versions should wrap access to this field in - * #if LIBAVCODEC_VERSION_MAJOR < 60 - */ - attribute_deprecated - int thread_safe_callbacks; -#endif - - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. - * @param count the number of things to execute - * - encoding: Set by libavcodec, user can override. - * - decoding: Set by libavcodec, user can override. - */ - int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size); - - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. - * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. - * @param c context passed also to func - * @param count the number of things to execute - * @param arg2 argument passed unchanged to func - * @param ret return values of executed functions, must have space for "count" values. May be NULL. - * @param func function that will be called count times, with jobnr from 0 to count-1. - * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no - * two instances of func executing at the same time will have the same threadnr. - * @return always 0 currently, but code should handle a future improvement where when any call to func - * returns < 0 no further calls to func may be done and < 0 is returned. - * - encoding: Set by libavcodec, user can override. - * - decoding: Set by libavcodec, user can override. - */ - int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count); - - /** - * noise vs. sse weight for the nsse comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int nsse_weight; - - /** - * profile - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int profile; -#define FF_PROFILE_UNKNOWN -99 -#define FF_PROFILE_RESERVED -100 - -#define FF_PROFILE_AAC_MAIN 0 -#define FF_PROFILE_AAC_LOW 1 -#define FF_PROFILE_AAC_SSR 2 -#define FF_PROFILE_AAC_LTP 3 -#define FF_PROFILE_AAC_HE 4 -#define FF_PROFILE_AAC_HE_V2 28 -#define FF_PROFILE_AAC_LD 22 -#define FF_PROFILE_AAC_ELD 38 -#define FF_PROFILE_MPEG2_AAC_LOW 128 -#define FF_PROFILE_MPEG2_AAC_HE 131 - -#define FF_PROFILE_DNXHD 0 -#define FF_PROFILE_DNXHR_LB 1 -#define FF_PROFILE_DNXHR_SQ 2 -#define FF_PROFILE_DNXHR_HQ 3 -#define FF_PROFILE_DNXHR_HQX 4 -#define FF_PROFILE_DNXHR_444 5 - -#define FF_PROFILE_DTS 20 -#define FF_PROFILE_DTS_ES 30 -#define FF_PROFILE_DTS_96_24 40 -#define FF_PROFILE_DTS_HD_HRA 50 -#define FF_PROFILE_DTS_HD_MA 60 -#define FF_PROFILE_DTS_EXPRESS 70 - -#define FF_PROFILE_MPEG2_422 0 -#define FF_PROFILE_MPEG2_HIGH 1 -#define FF_PROFILE_MPEG2_SS 2 -#define FF_PROFILE_MPEG2_SNR_SCALABLE 3 -#define FF_PROFILE_MPEG2_MAIN 4 -#define FF_PROFILE_MPEG2_SIMPLE 5 - -#define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag -#define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag - -#define FF_PROFILE_H264_BASELINE 66 -#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED) -#define FF_PROFILE_H264_MAIN 77 -#define FF_PROFILE_H264_EXTENDED 88 -#define FF_PROFILE_H264_HIGH 100 -#define FF_PROFILE_H264_HIGH_10 110 -#define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_MULTIVIEW_HIGH 118 -#define FF_PROFILE_H264_HIGH_422 122 -#define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_STEREO_HIGH 128 -#define FF_PROFILE_H264_HIGH_444 144 -#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244 -#define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_CAVLC_444 44 - -#define FF_PROFILE_VC1_SIMPLE 0 -#define FF_PROFILE_VC1_MAIN 1 -#define FF_PROFILE_VC1_COMPLEX 2 -#define FF_PROFILE_VC1_ADVANCED 3 - -#define FF_PROFILE_MPEG4_SIMPLE 0 -#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1 -#define FF_PROFILE_MPEG4_CORE 2 -#define FF_PROFILE_MPEG4_MAIN 3 -#define FF_PROFILE_MPEG4_N_BIT 4 -#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5 -#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6 -#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7 -#define FF_PROFILE_MPEG4_HYBRID 8 -#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9 -#define FF_PROFILE_MPEG4_CORE_SCALABLE 10 -#define FF_PROFILE_MPEG4_ADVANCED_CODING 11 -#define FF_PROFILE_MPEG4_ADVANCED_CORE 12 -#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13 -#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14 -#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15 - -#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 1 -#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 2 -#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 32768 -#define FF_PROFILE_JPEG2000_DCINEMA_2K 3 -#define FF_PROFILE_JPEG2000_DCINEMA_4K 4 - -#define FF_PROFILE_VP9_0 0 -#define FF_PROFILE_VP9_1 1 -#define FF_PROFILE_VP9_2 2 -#define FF_PROFILE_VP9_3 3 - -#define FF_PROFILE_HEVC_MAIN 1 -#define FF_PROFILE_HEVC_MAIN_10 2 -#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 -#define FF_PROFILE_HEVC_REXT 4 - -#define FF_PROFILE_VVC_MAIN_10 1 -#define FF_PROFILE_VVC_MAIN_10_444 33 - -#define FF_PROFILE_AV1_MAIN 0 -#define FF_PROFILE_AV1_HIGH 1 -#define FF_PROFILE_AV1_PROFESSIONAL 2 - -#define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT 0xc0 -#define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1 -#define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT 0xc2 -#define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS 0xc3 -#define FF_PROFILE_MJPEG_JPEG_LS 0xf7 - -#define FF_PROFILE_SBC_MSBC 1 - -#define FF_PROFILE_PRORES_PROXY 0 -#define FF_PROFILE_PRORES_LT 1 -#define FF_PROFILE_PRORES_STANDARD 2 -#define FF_PROFILE_PRORES_HQ 3 -#define FF_PROFILE_PRORES_4444 4 -#define FF_PROFILE_PRORES_XQ 5 - -#define FF_PROFILE_ARIB_PROFILE_A 0 -#define FF_PROFILE_ARIB_PROFILE_C 1 - -#define FF_PROFILE_KLVA_SYNC 0 -#define FF_PROFILE_KLVA_ASYNC 1 - - /** - * level - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int level; -#define FF_LEVEL_UNKNOWN -99 - - /** - * Skip loop filtering for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_loop_filter; - - /** - * Skip IDCT/dequantization for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_idct; - - /** - * Skip decoding for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_frame; - - /** - * Header containing style information for text subtitles. - * For SUBTITLE_ASS subtitle type, it should contain the whole ASS - * [Script Info] and [V4+ Styles] section, plus the [Events] line and - * the Format line following. It shouldn't include any Dialogue line. - * - encoding: Set/allocated/freed by user (before avcodec_open2()) - * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2()) - */ - uint8_t *subtitle_header; - int subtitle_header_size; - -#if FF_API_VBV_DELAY - /** - * VBV delay coded in the last frame (in periods of a 27 MHz clock). - * Used for compliant TS muxing. - * - encoding: Set by libavcodec. - * - decoding: unused. - * @deprecated this value is now exported as a part of - * AV_PKT_DATA_CPB_PROPERTIES packet side data - */ - attribute_deprecated - uint64_t vbv_delay; -#endif - -#if FF_API_SIDEDATA_ONLY_PKT - /** - * Encoding only and set by default. Allow encoders to output packets - * that do not contain any encoded data, only side data. - * - * Some encoders need to output such packets, e.g. to update some stream - * parameters at the end of encoding. - * - * @deprecated this field disables the default behaviour and - * it is kept only for compatibility. - */ - attribute_deprecated - int side_data_only_packets; -#endif - - /** - * Audio only. The number of "priming" samples (padding) inserted by the - * encoder at the beginning of the audio. I.e. this number of leading - * decoded samples must be discarded by the caller to get the original audio - * without leading padding. - * - * - decoding: unused - * - encoding: Set by libavcodec. The timestamps on the output packets are - * adjusted by the encoder so that they always refer to the - * first sample of the data actually contained in the packet, - * including any added padding. E.g. if the timebase is - * 1/samplerate and the timestamp of the first input sample is - * 0, the timestamp of the first output packet will be - * -initial_padding. - */ - int initial_padding; - - /** - * - decoding: For codecs that store a framerate value in the compressed - * bitstream, the decoder may export it here. { 0, 1} when - * unknown. - * - encoding: May be used to signal the framerate of CFR content to an - * encoder. - */ - AVRational framerate; - - /** - * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx. - * - encoding: unused. - * - decoding: Set by libavcodec before calling get_format() - */ - enum AVPixelFormat sw_pix_fmt; - - /** - * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. - * - encoding unused. - * - decoding set by user. - */ - AVRational pkt_timebase; - - /** - * AVCodecDescriptor - * - encoding: unused. - * - decoding: set by libavcodec. - */ - const AVCodecDescriptor *codec_descriptor; - - /** - * Current statistics for PTS correction. - * - decoding: maintained and used by libavcodec, not intended to be used by user apps - * - encoding: unused - */ - int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far - int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far - int64_t pts_correction_last_pts; /// PTS of the last frame - int64_t pts_correction_last_dts; /// DTS of the last frame - - /** - * Character encoding of the input subtitles file. - * - decoding: set by user - * - encoding: unused - */ - char *sub_charenc; - - /** - * Subtitles character encoding mode. Formats or codecs might be adjusting - * this setting (if they are doing the conversion themselves for instance). - * - decoding: set by libavcodec - * - encoding: unused - */ - int sub_charenc_mode; -#define FF_SUB_CHARENC_MODE_DO_NOTHING -1 ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance) -#define FF_SUB_CHARENC_MODE_AUTOMATIC 0 ///< libavcodec will select the mode itself -#define FF_SUB_CHARENC_MODE_PRE_DECODER 1 ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv -#define FF_SUB_CHARENC_MODE_IGNORE 2 ///< neither convert the subtitles, nor check them for valid UTF-8 - - /** - * Skip processing alpha if supported by codec. - * Note that if the format uses pre-multiplied alpha (common with VP6, - * and recommended due to better video quality/compression) - * the image will look as if alpha-blended onto a black background. - * However for formats that do not use pre-multiplied alpha - * there might be serious artefacts (though e.g. libswscale currently - * assumes pre-multiplied alpha anyway). - * - * - decoding: set by user - * - encoding: unused - */ - int skip_alpha; - - /** - * Number of samples to skip after a discontinuity - * - decoding: unused - * - encoding: set by libavcodec - */ - int seek_preroll; - -#if FF_API_DEBUG_MV - /** - * @deprecated unused - */ - attribute_deprecated - int debug_mv; -#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames -#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames -#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames -#endif - - /** - * custom intra quantization matrix - * - encoding: Set by user, can be NULL. - * - decoding: unused. - */ - uint16_t *chroma_intra_matrix; - - /** - * dump format separator. - * can be ", " or "\n " or anything else - * - encoding: Set by user. - * - decoding: Set by user. - */ - uint8_t *dump_separator; - - /** - * ',' separated list of allowed decoders. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *codec_whitelist; - - /** - * Properties of the stream that gets decoded - * - encoding: unused - * - decoding: set by libavcodec - */ - unsigned properties; -#define FF_CODEC_PROPERTY_LOSSLESS 0x00000001 -#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002 - - /** - * Additional data associated with the entire coded stream. - * - * - decoding: unused - * - encoding: may be set by libavcodec after avcodec_open2(). - */ - AVPacketSideData *coded_side_data; - int nb_coded_side_data; - - /** - * A reference to the AVHWFramesContext describing the input (for encoding) - * or output (decoding) frames. The reference is set by the caller and - * afterwards owned (and freed) by libavcodec - it should never be read by - * the caller after being set. - * - * - decoding: This field should be set by the caller from the get_format() - * callback. The previous reference (if any) will always be - * unreffed by libavcodec before the get_format() call. - * - * If the default get_buffer2() is used with a hwaccel pixel - * format, then this AVHWFramesContext will be used for - * allocating the frame buffers. - * - * - encoding: For hardware encoders configured to use a hwaccel pixel - * format, this field should be set by the caller to a reference - * to the AVHWFramesContext describing input frames. - * AVHWFramesContext.format must be equal to - * AVCodecContext.pix_fmt. - * - * This field should be set before avcodec_open2() is called. - */ - AVBufferRef *hw_frames_ctx; - - /** - * Control the form of AVSubtitle.rects[N]->ass - * - decoding: set by user - * - encoding: unused - */ - int sub_text_format; -#define FF_SUB_TEXT_FMT_ASS 0 -#if FF_API_ASS_TIMING -#define FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS 1 -#endif - - /** - * Audio only. The amount of padding (in samples) appended by the encoder to - * the end of the audio. I.e. this number of decoded samples must be - * discarded by the caller from the end of the stream to get the original - * audio without any trailing padding. - * - * - decoding: unused - * - encoding: unused - */ - int trailing_padding; - - /** - * The number of pixels per image to maximally accept. - * - * - decoding: set by user - * - encoding: set by user - */ - int64_t max_pixels; - - /** - * A reference to the AVHWDeviceContext describing the device which will - * be used by a hardware encoder/decoder. The reference is set by the - * caller and afterwards owned (and freed) by libavcodec. - * - * This should be used if either the codec device does not require - * hardware frames or any that are used are to be allocated internally by - * libavcodec. If the user wishes to supply any of the frames used as - * encoder input or decoder output then hw_frames_ctx should be used - * instead. When hw_frames_ctx is set in get_format() for a decoder, this - * field will be ignored while decoding the associated stream segment, but - * may again be used on a following one after another get_format() call. - * - * For both encoders and decoders this field should be set before - * avcodec_open2() is called and must not be written to thereafter. - * - * Note that some decoders may require this field to be set initially in - * order to support hw_frames_ctx at all - in that case, all frames - * contexts used must be created on the same device. - */ - AVBufferRef *hw_device_ctx; - - /** - * Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated - * decoding (if active). - * - encoding: unused - * - decoding: Set by user (either before avcodec_open2(), or in the - * AVCodecContext.get_format callback) - */ - int hwaccel_flags; - - /** - * Video decoding only. Certain video codecs support cropping, meaning that - * only a sub-rectangle of the decoded frame is intended for display. This - * option controls how cropping is handled by libavcodec. - * - * When set to 1 (the default), libavcodec will apply cropping internally. - * I.e. it will modify the output frame width/height fields and offset the - * data pointers (only by as much as possible while preserving alignment, or - * by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that - * the frames output by the decoder refer only to the cropped area. The - * crop_* fields of the output frames will be zero. - * - * When set to 0, the width/height fields of the output frames will be set - * to the coded dimensions and the crop_* fields will describe the cropping - * rectangle. Applying the cropping is left to the caller. - * - * @warning When hardware acceleration with opaque output frames is used, - * libavcodec is unable to apply cropping from the top/left border. - * - * @note when this option is set to zero, the width/height fields of the - * AVCodecContext and output AVFrames have different meanings. The codec - * context fields store display dimensions (with the coded dimensions in - * coded_width/height), while the frame fields store the coded dimensions - * (with the display dimensions being determined by the crop_* fields). - */ - int apply_cropping; - - /* - * Video decoding only. Sets the number of extra hardware frames which - * the decoder will allocate for use by the caller. This must be set - * before avcodec_open2() is called. - * - * Some hardware decoders require all frames that they will use for - * output to be defined in advance before decoding starts. For such - * decoders, the hardware frame pool must therefore be of a fixed size. - * The extra frames set here are on top of any number that the decoder - * needs internally in order to operate normally (for example, frames - * used as reference pictures). - */ - int extra_hw_frames; - - /** - * The percentage of damaged samples to discard a frame. - * - * - decoding: set by user - * - encoding: unused - */ - int discard_damaged_percentage; - - /** - * The number of samples per frame to maximally accept. - * - * - decoding: set by user - * - encoding: set by user - */ - int64_t max_samples; - - /** - * Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of - * metadata exported in frame, packet, or coded stream side data by - * decoders and encoders. - * - * - decoding: set by user - * - encoding: set by user - */ - int export_side_data; - - /** - * This callback is called at the beginning of each packet to get a data - * buffer for it. - * - * The following field will be set in the packet before this callback is - * called: - * - size - * This callback must use the above value to calculate the required buffer size, - * which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes. - * - * This callback must fill the following fields in the packet: - * - data: alignment requirements for AVPacket apply, if any. Some architectures and - * encoders may benefit from having aligned data. - * - buf: must contain a pointer to an AVBufferRef structure. The packet's - * data pointer must be contained in it. See: av_buffer_create(), av_buffer_alloc(), - * and av_buffer_ref(). - * - * If AV_CODEC_CAP_DR1 is not set then get_encode_buffer() must call - * avcodec_default_get_encode_buffer() instead of providing a buffer allocated by - * some other means. - * - * The flags field may contain a combination of AV_GET_ENCODE_BUFFER_FLAG_ flags. - * They may be used for example to hint what use the buffer may get after being - * created. - * Implementations of this callback may ignore flags they don't understand. - * If AV_GET_ENCODE_BUFFER_FLAG_REF is set in flags then the packet may be reused - * (read and/or written to if it is writable) later by libavcodec. - * - * This callback must be thread-safe, as when frame threading is used, it may - * be called from multiple threads simultaneously. - * - * @see avcodec_default_get_encode_buffer() - * - * - encoding: Set by libavcodec, user can override. - * - decoding: unused - */ - int (*get_encode_buffer)(struct AVCodecContext *s, AVPacket *pkt, int flags); -} AVCodecContext; - -#if FF_API_CODEC_GET_SET -/** - * Accessors for some AVCodecContext fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_pkt_timebase (AVCodecContext *avctx, AVRational val); - -attribute_deprecated -const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc); - -attribute_deprecated -unsigned av_codec_get_codec_properties(const AVCodecContext *avctx); - -attribute_deprecated -int av_codec_get_lowres(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_lowres(AVCodecContext *avctx, int val); - -attribute_deprecated -int av_codec_get_seek_preroll(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_seek_preroll(AVCodecContext *avctx, int val); - -attribute_deprecated -uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val); -#endif - -struct AVSubtitle; - -#if FF_API_CODEC_GET_SET -attribute_deprecated -int av_codec_get_max_lowres(const AVCodec *codec); -#endif - -struct MpegEncContext; - -/** - * @defgroup lavc_hwaccel AVHWAccel - * - * @note Nothing in this structure should be accessed by the user. At some - * point in future it will not be externally visible at all. - * - * @{ - */ -typedef struct AVHWAccel { - /** - * Name of the hardware accelerated codec. - * The name is globally unique among encoders and among decoders (but an - * encoder and a decoder can share the same name). - */ - const char *name; - - /** - * Type of codec implemented by the hardware accelerator. - * - * See AVMEDIA_TYPE_xxx - */ - enum AVMediaType type; - - /** - * Codec implemented by the hardware accelerator. - * - * See AV_CODEC_ID_xxx - */ - enum AVCodecID id; - - /** - * Supported pixel format. - * - * Only hardware accelerated formats are supported here. - */ - enum AVPixelFormat pix_fmt; - - /** - * Hardware accelerated codec capabilities. - * see AV_HWACCEL_CODEC_CAP_* - */ - int capabilities; - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavcodec and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * Allocate a custom buffer - */ - int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame); - - /** - * Called at the beginning of each frame or field picture. - * - * Meaningful frame information (codec specific) is guaranteed to - * be parsed at this point. This function is mandatory. - * - * Note that buf can be NULL along with buf_size set to 0. - * Otherwise, this means the whole frame is available at this point. - * - * @param avctx the codec context - * @param buf the frame data buffer base - * @param buf_size the size of the frame in bytes - * @return zero if successful, a negative value otherwise - */ - int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); - - /** - * Callback for parameter data (SPS/PPS/VPS etc). - * - * Useful for hardware decoders which keep persistent state about the - * video parameters, and need to receive any changes to update that state. - * - * @param avctx the codec context - * @param type the nal unit type - * @param buf the nal unit data buffer - * @param buf_size the size of the nal unit in bytes - * @return zero if successful, a negative value otherwise - */ - int (*decode_params)(AVCodecContext *avctx, int type, const uint8_t *buf, uint32_t buf_size); - - /** - * Callback for each slice. - * - * Meaningful slice information (codec specific) is guaranteed to - * be parsed at this point. This function is mandatory. - * The only exception is XvMC, that works on MB level. - * - * @param avctx the codec context - * @param buf the slice data buffer base - * @param buf_size the size of the slice in bytes - * @return zero if successful, a negative value otherwise - */ - int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); - - /** - * Called at the end of each frame or field picture. - * - * The whole picture is parsed at this point and can now be sent - * to the hardware accelerator. This function is mandatory. - * - * @param avctx the codec context - * @return zero if successful, a negative value otherwise - */ - int (*end_frame)(AVCodecContext *avctx); - - /** - * Size of per-frame hardware accelerator private data. - * - * Private data is allocated with av_mallocz() before - * AVCodecContext.get_buffer() and deallocated after - * AVCodecContext.release_buffer(). - */ - int frame_priv_data_size; - - /** - * Called for every Macroblock in a slice. - * - * XvMC uses it to replace the ff_mpv_reconstruct_mb(). - * Instead of decoding to raw picture, MB parameters are - * stored in an array provided by the video driver. - * - * @param s the mpeg context - */ - void (*decode_mb)(struct MpegEncContext *s); - - /** - * Initialize the hwaccel private data. - * - * This will be called from ff_get_format(), after hwaccel and - * hwaccel_context are set and the hwaccel private data in AVCodecInternal - * is allocated. - */ - int (*init)(AVCodecContext *avctx); - - /** - * Uninitialize the hwaccel private data. - * - * This will be called from get_format() or avcodec_close(), after hwaccel - * and hwaccel_context are already uninitialized. - */ - int (*uninit)(AVCodecContext *avctx); - - /** - * Size of the private data to allocate in - * AVCodecInternal.hwaccel_priv_data. - */ - int priv_data_size; - - /** - * Internal hwaccel capabilities. - */ - int caps_internal; - - /** - * Fill the given hw_frames context with current codec parameters. Called - * from get_format. Refer to avcodec_get_hw_frames_parameters() for - * details. - * - * This CAN be called before AVHWAccel.init is called, and you must assume - * that avctx->hwaccel_priv_data is invalid. - */ - int (*frame_params)(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx); -} AVHWAccel; - -/** - * HWAccel is experimental and is thus avoided in favor of non experimental - * codecs - */ -#define AV_HWACCEL_CODEC_CAP_EXPERIMENTAL 0x0200 - -/** - * Hardware acceleration should be used for decoding even if the codec level - * used is unknown or higher than the maximum supported level reported by the - * hardware driver. - * - * It's generally a good idea to pass this flag unless you have a specific - * reason not to, as hardware tends to under-report supported levels. - */ -#define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0) - -/** - * Hardware acceleration can output YUV pixel formats with a different chroma - * sampling than 4:2:0 and/or other than 8 bits per component. - */ -#define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1) - -/** - * Hardware acceleration should still be attempted for decoding when the - * codec profile does not match the reported capabilities of the hardware. - * - * For example, this can be used to try to decode baseline profile H.264 - * streams in hardware - it will often succeed, because many streams marked - * as baseline profile actually conform to constrained baseline profile. - * - * @warning If the stream is actually not supported then the behaviour is - * undefined, and may include returning entirely incorrect output - * while indicating success. - */ -#define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) - -/** - * @} - */ - -#if FF_API_AVPICTURE -/** - * @defgroup lavc_picture AVPicture - * - * Functions for working with AVPicture - * @{ - */ - -/** - * Picture data structure. - * - * Up to four components can be stored into it, the last component is - * alpha. - * @deprecated use AVFrame or imgutils functions instead - */ -typedef struct AVPicture { - attribute_deprecated - uint8_t *data[AV_NUM_DATA_POINTERS]; ///< pointers to the image data planes - attribute_deprecated - int linesize[AV_NUM_DATA_POINTERS]; ///< number of bytes per line -} AVPicture; - -/** - * @} - */ -#endif - -enum AVSubtitleType { - SUBTITLE_NONE, - - SUBTITLE_BITMAP, ///< A bitmap, pict will be set - - /** - * Plain text, the text field must be set by the decoder and is - * authoritative. ass and pict fields may contain approximations. - */ - SUBTITLE_TEXT, - - /** - * Formatted text, the ass field must be set by the decoder and is - * authoritative. pict and text fields may contain approximations. - */ - SUBTITLE_ASS, -}; - -#define AV_SUBTITLE_FLAG_FORCED 0x00000001 - -typedef struct AVSubtitleRect { - int x; ///< top left corner of pict, undefined when pict is not set - int y; ///< top left corner of pict, undefined when pict is not set - int w; ///< width of pict, undefined when pict is not set - int h; ///< height of pict, undefined when pict is not set - int nb_colors; ///< number of colors in pict, undefined when pict is not set - -#if FF_API_AVPICTURE - /** - * @deprecated unused - */ - attribute_deprecated - AVPicture pict; -#endif - /** - * data+linesize for the bitmap of this subtitle. - * Can be set for text/ass as well once they are rendered. - */ - uint8_t *data[4]; - int linesize[4]; - - enum AVSubtitleType type; - - char *text; ///< 0 terminated plain UTF-8 text - - /** - * 0 terminated ASS/SSA compatible event line. - * The presentation of this is unaffected by the other values in this - * struct. - */ - char *ass; - - int flags; -} AVSubtitleRect; - -typedef struct AVSubtitle { - uint16_t format; /* 0 = graphics */ - uint32_t start_display_time; /* relative to packet pts, in ms */ - uint32_t end_display_time; /* relative to packet pts, in ms */ - unsigned num_rects; - AVSubtitleRect **rects; - int64_t pts; ///< Same as packet pts, in AV_TIME_BASE -} AVSubtitle; - -#if FF_API_NEXT -/** - * If c is NULL, returns the first registered codec, - * if c is non-NULL, returns the next registered codec after c, - * or NULL if c is the last one. - */ -attribute_deprecated -AVCodec *av_codec_next(const AVCodec *c); -#endif - -/** - * Return the LIBAVCODEC_VERSION_INT constant. - */ -unsigned avcodec_version(void); - -/** - * Return the libavcodec build-time configuration. - */ -const char *avcodec_configuration(void); - -/** - * Return the libavcodec license. - */ -const char *avcodec_license(void); - -#if FF_API_NEXT -/** - * @deprecated Calling this function is unnecessary. - */ -attribute_deprecated -void avcodec_register(AVCodec *codec); - -/** - * @deprecated Calling this function is unnecessary. - */ -attribute_deprecated -void avcodec_register_all(void); -#endif - -/** - * Allocate an AVCodecContext and set its fields to default values. The - * resulting struct should be freed with avcodec_free_context(). - * - * @param codec if non-NULL, allocate private data and initialize defaults - * for the given codec. It is illegal to then call avcodec_open2() - * with a different codec. - * If NULL, then the codec-specific defaults won't be initialized, - * which may result in suboptimal default settings (this is - * important mainly for encoders, e.g. libx264). - * - * @return An AVCodecContext filled with default values or NULL on failure. - */ -AVCodecContext *avcodec_alloc_context3(const AVCodec *codec); - -/** - * Free the codec context and everything associated with it and write NULL to - * the provided pointer. - */ -void avcodec_free_context(AVCodecContext **avctx); - -#if FF_API_GET_CONTEXT_DEFAULTS -/** - * @deprecated This function should not be used, as closing and opening a codec - * context multiple time is not supported. A new codec context should be - * allocated for each new use. - */ -int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec); -#endif - -/** - * Get the AVClass for AVCodecContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avcodec_get_class(void); - -#if FF_API_GET_FRAME_CLASS -/** - * @deprecated This function should not be used. - */ -attribute_deprecated -const AVClass *avcodec_get_frame_class(void); -#endif - -/** - * Get the AVClass for AVSubtitleRect. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avcodec_get_subtitle_rect_class(void); - -#if FF_API_COPY_CONTEXT -/** - * Copy the settings of the source AVCodecContext into the destination - * AVCodecContext. The resulting destination codec context will be - * unopened, i.e. you are required to call avcodec_open2() before you - * can use this AVCodecContext to decode/encode video/audio data. - * - * @param dest target codec context, should be initialized with - * avcodec_alloc_context3(NULL), but otherwise uninitialized - * @param src source codec context - * @return AVERROR() on error (e.g. memory allocation error), 0 on success - * - * @deprecated The semantics of this function are ill-defined and it should not - * be used. If you need to transfer the stream parameters from one codec context - * to another, use an intermediate AVCodecParameters instance and the - * avcodec_parameters_from_context() / avcodec_parameters_to_context() - * functions. - */ -attribute_deprecated -int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src); -#endif - -/** - * Fill the parameters struct based on the values from the supplied codec - * context. Any allocated fields in par are freed and replaced with duplicates - * of the corresponding fields in codec. - * - * @return >= 0 on success, a negative AVERROR code on failure - */ -int avcodec_parameters_from_context(AVCodecParameters *par, - const AVCodecContext *codec); - -/** - * Fill the codec context based on the values from the supplied codec - * parameters. Any allocated fields in codec that have a corresponding field in - * par are freed and replaced with duplicates of the corresponding field in par. - * Fields in codec that do not have a counterpart in par are not touched. - * - * @return >= 0 on success, a negative AVERROR code on failure. - */ -int avcodec_parameters_to_context(AVCodecContext *codec, - const AVCodecParameters *par); - -/** - * Initialize the AVCodecContext to use the given AVCodec. Prior to using this - * function the context has to be allocated with avcodec_alloc_context3(). - * - * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), - * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for - * retrieving a codec. - * - * @warning This function is not thread safe! - * - * @note Always call this function before using decoding routines (such as - * @ref avcodec_receive_frame()). - * - * @code - * av_dict_set(&opts, "b", "2.5M", 0); - * codec = avcodec_find_decoder(AV_CODEC_ID_H264); - * if (!codec) - * exit(1); - * - * context = avcodec_alloc_context3(codec); - * - * if (avcodec_open2(context, codec, opts) < 0) - * exit(1); - * @endcode - * - * @param avctx The context to initialize. - * @param codec The codec to open this context for. If a non-NULL codec has been - * previously passed to avcodec_alloc_context3() or - * for this context, then this parameter MUST be either NULL or - * equal to the previously passed codec. - * @param options A dictionary filled with AVCodecContext and codec-private options. - * On return this object will be filled with options that were not found. - * - * @return zero on success, a negative value on error - * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), - * av_dict_set(), av_opt_find(). - */ -int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options); - -/** - * Close a given AVCodecContext and free all the data associated with it - * (but not the AVCodecContext itself). - * - * Calling this function on an AVCodecContext that hasn't been opened will free - * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL - * codec. Subsequent calls will do nothing. - * - * @note Do not use this function. Use avcodec_free_context() to destroy a - * codec context (either open or closed). Opening and closing a codec context - * multiple times is not supported anymore -- use multiple codec contexts - * instead. - */ -int avcodec_close(AVCodecContext *avctx); - -/** - * Free all allocated data in the given subtitle struct. - * - * @param sub AVSubtitle to free. - */ -void avsubtitle_free(AVSubtitle *sub); - -/** - * @} - */ - -/** - * @addtogroup lavc_decoding - * @{ - */ - -/** - * The default callback for AVCodecContext.get_buffer2(). It is made public so - * it can be called by custom get_buffer2() implementations for decoders without - * AV_CODEC_CAP_DR1 set. - */ -int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags); - -/** - * The default callback for AVCodecContext.get_encode_buffer(). It is made public so - * it can be called by custom get_encode_buffer() implementations for encoders without - * AV_CODEC_CAP_DR1 set. - */ -int avcodec_default_get_encode_buffer(AVCodecContext *s, AVPacket *pkt, int flags); - -/** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you do not use any horizontal - * padding. - * - * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. - */ -void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height); - -/** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you also ensure that all - * line sizes are a multiple of the respective linesize_align[i]. - * - * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. - */ -void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, - int linesize_align[AV_NUM_DATA_POINTERS]); - -/** - * Converts AVChromaLocation to swscale x/y chroma position. - * - * The positions represent the chroma (0,0) position in a coordinates system - * with luma (0,0) representing the origin and luma(1,1) representing 256,256 - * - * @param xpos horizontal chroma sample position - * @param ypos vertical chroma sample position - */ -int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos); - -/** - * Converts swscale x/y chroma position to AVChromaLocation. - * - * The positions represent the chroma (0,0) position in a coordinates system - * with luma (0,0) representing the origin and luma(1,1) representing 256,256 - * - * @param xpos horizontal chroma sample position - * @param ypos vertical chroma sample position - */ -enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos); - -#if FF_API_OLD_ENCDEC -/** - * Decode the audio frame of size avpkt->size from avpkt->data into frame. - * - * Some decoders may support multiple frames in a single AVPacket. Such - * decoders would then just decode the first frame and the return value would be - * less than the packet size. In this case, avcodec_decode_audio4 has to be - * called again with an AVPacket containing the remaining data in order to - * decode the second frame, etc... Even if no frames are returned, the packet - * needs to be fed to the decoder with remaining data until it is completely - * consumed or an error occurs. - * - * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input - * and output. This means that for some packets they will not immediately - * produce decoded output and need to be flushed at the end of decoding to get - * all the decoded data. Flushing is done by calling this function with packets - * with avpkt->data set to NULL and avpkt->size set to 0 until it stops - * returning samples. It is safe to flush even those decoders that are not - * marked with AV_CODEC_CAP_DELAY, then no samples will be returned. - * - * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE - * larger than the actual read bytes because some optimized bitstream - * readers read 32 or 64 bits at once and could read over the end. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx the codec context - * @param[out] frame The AVFrame in which to store decoded audio samples. - * The decoder will allocate a buffer for the decoded frame by - * calling the AVCodecContext.get_buffer2() callback. - * When AVCodecContext.refcounted_frames is set to 1, the frame is - * reference counted and the returned reference belongs to the - * caller. The caller must release the frame using av_frame_unref() - * when the frame is no longer needed. The caller may safely write - * to the frame if av_frame_is_writable() returns 1. - * When AVCodecContext.refcounted_frames is set to 0, the returned - * reference belongs to the decoder and is valid only until the - * next call to this function or until closing or flushing the - * decoder. The caller may not write to it. - * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is - * non-zero. Note that this field being set to zero - * does not mean that an error has occurred. For - * decoders with AV_CODEC_CAP_DELAY set, no given decode - * call is guaranteed to produce a frame. - * @param[in] avpkt The input AVPacket containing the input buffer. - * At least avpkt->data and avpkt->size should be set. Some - * decoders might also require additional fields to be set. - * @return A negative error code is returned if an error occurred during - * decoding, otherwise the number of bytes consumed from the input - * AVPacket is returned. - * -* @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). - */ -attribute_deprecated -int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, - int *got_frame_ptr, const AVPacket *avpkt); - -/** - * Decode the video frame of size avpkt->size from avpkt->data into picture. - * Some decoders may support multiple frames in a single AVPacket, such - * decoders would then just decode the first frame. - * - * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than - * the actual read bytes because some optimized bitstream readers read 32 or 64 - * bits at once and could read over the end. - * - * @warning The end of the input buffer buf should be set to 0 to ensure that - * no overreading happens for damaged MPEG streams. - * - * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay - * between input and output, these need to be fed with avpkt->data=NULL, - * avpkt->size=0 at the end to return the remaining frames. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx the codec context - * @param[out] picture The AVFrame in which the decoded video frame will be stored. - * Use av_frame_alloc() to get an AVFrame. The codec will - * allocate memory for the actual bitmap by calling the - * AVCodecContext.get_buffer2() callback. - * When AVCodecContext.refcounted_frames is set to 1, the frame is - * reference counted and the returned reference belongs to the - * caller. The caller must release the frame using av_frame_unref() - * when the frame is no longer needed. The caller may safely write - * to the frame if av_frame_is_writable() returns 1. - * When AVCodecContext.refcounted_frames is set to 0, the returned - * reference belongs to the decoder and is valid only until the - * next call to this function or until closing or flushing the - * decoder. The caller may not write to it. - * - * @param[in] avpkt The input AVPacket containing the input buffer. - * You can create such packet with av_init_packet() and by then setting - * data and size, some decoders might in addition need other fields like - * flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least - * fields possible. - * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. - * @return On error a negative value is returned, otherwise the number of bytes - * used or zero if no frame could be decompressed. - * - * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). - */ -attribute_deprecated -int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, - int *got_picture_ptr, - const AVPacket *avpkt); -#endif - -/** - * Decode a subtitle message. - * Return a negative value on error, otherwise return the number of bytes used. - * If no subtitle could be decompressed, got_sub_ptr is zero. - * Otherwise, the subtitle is stored in *sub. - * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for - * simplicity, because the performance difference is expected to be negligible - * and reusing a get_buffer written for video codecs would probably perform badly - * due to a potentially very different allocation pattern. - * - * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input - * and output. This means that for some packets they will not immediately - * produce decoded output and need to be flushed at the end of decoding to get - * all the decoded data. Flushing is done by calling this function with packets - * with avpkt->data set to NULL and avpkt->size set to 0 until it stops - * returning subtitles. It is safe to flush even those decoders that are not - * marked with AV_CODEC_CAP_DELAY, then no subtitles will be returned. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx the codec context - * @param[out] sub The preallocated AVSubtitle in which the decoded subtitle will be stored, - * must be freed with avsubtitle_free if *got_sub_ptr is set. - * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. - * @param[in] avpkt The input AVPacket containing the input buffer. - */ -int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, - int *got_sub_ptr, - AVPacket *avpkt); - -/** - * Supply raw packet data as input to a decoder. - * - * Internally, this call will copy relevant AVCodecContext fields, which can - * influence decoding per-packet, and apply them when the packet is actually - * decoded. (For example AVCodecContext.skip_frame, which might direct the - * decoder to drop the frame contained by the packet sent with this function.) - * - * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE - * larger than the actual read bytes because some optimized bitstream - * readers read 32 or 64 bits at once and could read over the end. - * - * @warning Do not mix this API with the legacy API (like avcodec_decode_video2()) - * on the same AVCodecContext. It will return unexpected results now - * or in future libavcodec versions. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx codec context - * @param[in] avpkt The input AVPacket. Usually, this will be a single video - * frame, or several complete audio frames. - * Ownership of the packet remains with the caller, and the - * decoder will not write to the packet. The decoder may create - * a reference to the packet data (or copy it if the packet is - * not reference-counted). - * Unlike with older APIs, the packet is always fully consumed, - * and if it contains multiple frames (e.g. some audio codecs), - * will require you to call avcodec_receive_frame() multiple - * times afterwards before you can send a new packet. - * It can be NULL (or an AVPacket with data set to NULL and - * size set to 0); in this case, it is considered a flush - * packet, which signals the end of the stream. Sending the - * first flush packet will return success. Subsequent ones are - * unnecessary and will return AVERROR_EOF. If the decoder - * still has frames buffered, it will return them after sending - * a flush packet. - * - * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): input is not accepted in the current state - user - * must read output with avcodec_receive_frame() (once - * all output is read, the packet should be resent, and - * the call will not fail with EAGAIN). - * AVERROR_EOF: the decoder has been flushed, and no new packets can - * be sent to it (also returned if more than 1 flush - * packet is sent) - * AVERROR(EINVAL): codec not opened, it is an encoder, or requires flush - * AVERROR(ENOMEM): failed to add packet to internal queue, or similar - * other errors: legitimate decoding errors - */ -int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); - -/** - * Return decoded output data from a decoder. - * - * @param avctx codec context - * @param frame This will be set to a reference-counted video or audio - * frame (depending on the decoder type) allocated by the - * decoder. Note that the function will always call - * av_frame_unref(frame) before doing anything else. - * - * @return - * 0: success, a frame was returned - * AVERROR(EAGAIN): output is not available in this state - user must try - * to send new input - * AVERROR_EOF: the decoder has been fully flushed, and there will be - * no more output frames - * AVERROR(EINVAL): codec not opened, or it is an encoder - * AVERROR_INPUT_CHANGED: current decoded frame has changed parameters - * with respect to first decoded frame. Applicable - * when flag AV_CODEC_FLAG_DROPCHANGED is set. - * other negative values: legitimate decoding errors - */ -int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); - -/** - * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet() - * to retrieve buffered output packets. - * - * @param avctx codec context - * @param[in] frame AVFrame containing the raw audio or video frame to be encoded. - * Ownership of the frame remains with the caller, and the - * encoder will not write to the frame. The encoder may create - * a reference to the frame data (or copy it if the frame is - * not reference-counted). - * It can be NULL, in which case it is considered a flush - * packet. This signals the end of the stream. If the encoder - * still has packets buffered, it will return them after this - * call. Once flushing mode has been entered, additional flush - * packets are ignored, and sending frames will return - * AVERROR_EOF. - * - * For audio: - * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame - * can have any number of samples. - * If it is not set, frame->nb_samples must be equal to - * avctx->frame_size for all frames except the last. - * The final frame may be smaller than avctx->frame_size. - * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): input is not accepted in the current state - user - * must read output with avcodec_receive_packet() (once - * all output is read, the packet should be resent, and - * the call will not fail with EAGAIN). - * AVERROR_EOF: the encoder has been flushed, and no new frames can - * be sent to it - * AVERROR(EINVAL): codec not opened, refcounted_frames not set, it is a - * decoder, or requires flush - * AVERROR(ENOMEM): failed to add packet to internal queue, or similar - * other errors: legitimate encoding errors - */ -int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame); - -/** - * Read encoded data from the encoder. - * - * @param avctx codec context - * @param avpkt This will be set to a reference-counted packet allocated by the - * encoder. Note that the function will always call - * av_packet_unref(avpkt) before doing anything else. - * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): output is not available in the current state - user - * must try to send input - * AVERROR_EOF: the encoder has been fully flushed, and there will be - * no more output packets - * AVERROR(EINVAL): codec not opened, or it is a decoder - * other errors: legitimate encoding errors - */ -int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt); - -/** - * Create and return a AVHWFramesContext with values adequate for hardware - * decoding. This is meant to get called from the get_format callback, and is - * a helper for preparing a AVHWFramesContext for AVCodecContext.hw_frames_ctx. - * This API is for decoding with certain hardware acceleration modes/APIs only. - * - * The returned AVHWFramesContext is not initialized. The caller must do this - * with av_hwframe_ctx_init(). - * - * Calling this function is not a requirement, but makes it simpler to avoid - * codec or hardware API specific details when manually allocating frames. - * - * Alternatively to this, an API user can set AVCodecContext.hw_device_ctx, - * which sets up AVCodecContext.hw_frames_ctx fully automatically, and makes - * it unnecessary to call this function or having to care about - * AVHWFramesContext initialization at all. - * - * There are a number of requirements for calling this function: - * - * - It must be called from get_format with the same avctx parameter that was - * passed to get_format. Calling it outside of get_format is not allowed, and - * can trigger undefined behavior. - * - The function is not always supported (see description of return values). - * Even if this function returns successfully, hwaccel initialization could - * fail later. (The degree to which implementations check whether the stream - * is actually supported varies. Some do this check only after the user's - * get_format callback returns.) - * - The hw_pix_fmt must be one of the choices suggested by get_format. If the - * user decides to use a AVHWFramesContext prepared with this API function, - * the user must return the same hw_pix_fmt from get_format. - * - The device_ref passed to this function must support the given hw_pix_fmt. - * - After calling this API function, it is the user's responsibility to - * initialize the AVHWFramesContext (returned by the out_frames_ref parameter), - * and to set AVCodecContext.hw_frames_ctx to it. If done, this must be done - * before returning from get_format (this is implied by the normal - * AVCodecContext.hw_frames_ctx API rules). - * - The AVHWFramesContext parameters may change every time time get_format is - * called. Also, AVCodecContext.hw_frames_ctx is reset before get_format. So - * you are inherently required to go through this process again on every - * get_format call. - * - It is perfectly possible to call this function without actually using - * the resulting AVHWFramesContext. One use-case might be trying to reuse a - * previously initialized AVHWFramesContext, and calling this API function - * only to test whether the required frame parameters have changed. - * - Fields that use dynamically allocated values of any kind must not be set - * by the user unless setting them is explicitly allowed by the documentation. - * If the user sets AVHWFramesContext.free and AVHWFramesContext.user_opaque, - * the new free callback must call the potentially set previous free callback. - * This API call may set any dynamically allocated fields, including the free - * callback. - * - * The function will set at least the following fields on AVHWFramesContext - * (potentially more, depending on hwaccel API): - * - * - All fields set by av_hwframe_ctx_alloc(). - * - Set the format field to hw_pix_fmt. - * - Set the sw_format field to the most suited and most versatile format. (An - * implication is that this will prefer generic formats over opaque formats - * with arbitrary restrictions, if possible.) - * - Set the width/height fields to the coded frame size, rounded up to the - * API-specific minimum alignment. - * - Only _if_ the hwaccel requires a pre-allocated pool: set the initial_pool_size - * field to the number of maximum reference surfaces possible with the codec, - * plus 1 surface for the user to work (meaning the user can safely reference - * at most 1 decoded surface at a time), plus additional buffering introduced - * by frame threading. If the hwaccel does not require pre-allocation, the - * field is left to 0, and the decoder will allocate new surfaces on demand - * during decoding. - * - Possibly AVHWFramesContext.hwctx fields, depending on the underlying - * hardware API. - * - * Essentially, out_frames_ref returns the same as av_hwframe_ctx_alloc(), but - * with basic frame parameters set. - * - * The function is stateless, and does not change the AVCodecContext or the - * device_ref AVHWDeviceContext. - * - * @param avctx The context which is currently calling get_format, and which - * implicitly contains all state needed for filling the returned - * AVHWFramesContext properly. - * @param device_ref A reference to the AVHWDeviceContext describing the device - * which will be used by the hardware decoder. - * @param hw_pix_fmt The hwaccel format you are going to return from get_format. - * @param out_frames_ref On success, set to a reference to an _uninitialized_ - * AVHWFramesContext, created from the given device_ref. - * Fields will be set to values required for decoding. - * Not changed if an error is returned. - * @return zero on success, a negative value on error. The following error codes - * have special semantics: - * AVERROR(ENOENT): the decoder does not support this functionality. Setup - * is always manual, or it is a decoder which does not - * support setting AVCodecContext.hw_frames_ctx at all, - * or it is a software format. - * AVERROR(EINVAL): it is known that hardware decoding is not supported for - * this configuration, or the device_ref is not supported - * for the hwaccel referenced by hw_pix_fmt. - */ -int avcodec_get_hw_frames_parameters(AVCodecContext *avctx, - AVBufferRef *device_ref, - enum AVPixelFormat hw_pix_fmt, - AVBufferRef **out_frames_ref); - - - -/** - * @defgroup lavc_parsing Frame parsing - * @{ - */ - -enum AVPictureStructure { - AV_PICTURE_STRUCTURE_UNKNOWN, //< unknown - AV_PICTURE_STRUCTURE_TOP_FIELD, //< coded as top field - AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field - AV_PICTURE_STRUCTURE_FRAME, //< coded as frame -}; - -typedef struct AVCodecParserContext { - void *priv_data; - struct AVCodecParser *parser; - int64_t frame_offset; /* offset of the current frame */ - int64_t cur_offset; /* current offset - (incremented by each av_parser_parse()) */ - int64_t next_frame_offset; /* offset of the next frame */ - /* video info */ - int pict_type; /* XXX: Put it back in AVCodecContext. */ - /** - * This field is used for proper frame duration computation in lavf. - * It signals, how much longer the frame duration of the current frame - * is compared to normal frame duration. - * - * frame_duration = (1 + repeat_pict) * time_base - * - * It is used by codecs like H.264 to display telecined material. - */ - int repeat_pict; /* XXX: Put it back in AVCodecContext. */ - int64_t pts; /* pts of the current frame */ - int64_t dts; /* dts of the current frame */ - - /* private data */ - int64_t last_pts; - int64_t last_dts; - int fetch_timestamp; - -#define AV_PARSER_PTS_NB 4 - int cur_frame_start_index; - int64_t cur_frame_offset[AV_PARSER_PTS_NB]; - int64_t cur_frame_pts[AV_PARSER_PTS_NB]; - int64_t cur_frame_dts[AV_PARSER_PTS_NB]; - - int flags; -#define PARSER_FLAG_COMPLETE_FRAMES 0x0001 -#define PARSER_FLAG_ONCE 0x0002 -/// Set if the parser has a valid file offset -#define PARSER_FLAG_FETCHED_OFFSET 0x0004 -#define PARSER_FLAG_USE_CODEC_TS 0x1000 - - int64_t offset; ///< byte offset from starting packet start - int64_t cur_frame_end[AV_PARSER_PTS_NB]; - - /** - * Set by parser to 1 for key frames and 0 for non-key frames. - * It is initialized to -1, so if the parser doesn't set this flag, - * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames - * will be used. - */ - int key_frame; - -#if FF_API_CONVERGENCE_DURATION - /** - * @deprecated unused - */ - attribute_deprecated - int64_t convergence_duration; -#endif - - // Timestamp generation support: - /** - * Synchronization point for start of timestamp generation. - * - * Set to >0 for sync point, 0 for no sync point and <0 for undefined - * (default). - * - * For example, this corresponds to presence of H.264 buffering period - * SEI message. - */ - int dts_sync_point; - - /** - * Offset of the current timestamp against last timestamp sync point in - * units of AVCodecContext.time_base. - * - * Set to INT_MIN when dts_sync_point unused. Otherwise, it must - * contain a valid timestamp offset. - * - * Note that the timestamp of sync point has usually a nonzero - * dts_ref_dts_delta, which refers to the previous sync point. Offset of - * the next frame after timestamp sync point will be usually 1. - * - * For example, this corresponds to H.264 cpb_removal_delay. - */ - int dts_ref_dts_delta; - - /** - * Presentation delay of current frame in units of AVCodecContext.time_base. - * - * Set to INT_MIN when dts_sync_point unused. Otherwise, it must - * contain valid non-negative timestamp delta (presentation time of a frame - * must not lie in the past). - * - * This delay represents the difference between decoding and presentation - * time of the frame. - * - * For example, this corresponds to H.264 dpb_output_delay. - */ - int pts_dts_delta; - - /** - * Position of the packet in file. - * - * Analogous to cur_frame_pts/dts - */ - int64_t cur_frame_pos[AV_PARSER_PTS_NB]; - - /** - * Byte position of currently parsed frame in stream. - */ - int64_t pos; - - /** - * Previous frame byte position. - */ - int64_t last_pos; - - /** - * Duration of the current frame. - * For audio, this is in units of 1 / AVCodecContext.sample_rate. - * For all other types, this is in units of AVCodecContext.time_base. - */ - int duration; - - enum AVFieldOrder field_order; - - /** - * Indicate whether a picture is coded as a frame, top field or bottom field. - * - * For example, H.264 field_pic_flag equal to 0 corresponds to - * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag - * equal to 1 and bottom_field_flag equal to 0 corresponds to - * AV_PICTURE_STRUCTURE_TOP_FIELD. - */ - enum AVPictureStructure picture_structure; - - /** - * Picture number incremented in presentation or output order. - * This field may be reinitialized at the first picture of a new sequence. - * - * For example, this corresponds to H.264 PicOrderCnt. - */ - int output_picture_number; - - /** - * Dimensions of the decoded video intended for presentation. - */ - int width; - int height; - - /** - * Dimensions of the coded video. - */ - int coded_width; - int coded_height; - - /** - * The format of the coded data, corresponds to enum AVPixelFormat for video - * and for enum AVSampleFormat for audio. - * - * Note that a decoder can have considerable freedom in how exactly it - * decodes the data, so the format reported here might be different from the - * one returned by a decoder. - */ - int format; -} AVCodecParserContext; - -typedef struct AVCodecParser { - int codec_ids[5]; /* several codec IDs are permitted */ - int priv_data_size; - int (*parser_init)(AVCodecParserContext *s); - /* This callback never returns an error, a negative value means that - * the frame start was in a previous packet. */ - int (*parser_parse)(AVCodecParserContext *s, - AVCodecContext *avctx, - const uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size); - void (*parser_close)(AVCodecParserContext *s); - int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size); -#if FF_API_NEXT - attribute_deprecated - struct AVCodecParser *next; -#endif -} AVCodecParser; - -/** - * Iterate over all registered codec parsers. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered codec parser or NULL when the iteration is - * finished - */ -const AVCodecParser *av_parser_iterate(void **opaque); - -#if FF_API_NEXT -attribute_deprecated -AVCodecParser *av_parser_next(const AVCodecParser *c); - -attribute_deprecated -void av_register_codec_parser(AVCodecParser *parser); -#endif -AVCodecParserContext *av_parser_init(int codec_id); - -/** - * Parse a packet. - * - * @param s parser context. - * @param avctx codec context. - * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. - * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. - * @param buf input buffer. - * @param buf_size buffer size in bytes without the padding. I.e. the full buffer - size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE. - To signal EOF, this should be 0 (so that the last frame - can be output). - * @param pts input presentation timestamp. - * @param dts input decoding timestamp. - * @param pos input byte position in stream. - * @return the number of bytes of the input bitstream used. - * - * Example: - * @code - * while(in_len){ - * len = av_parser_parse2(myparser, AVCodecContext, &data, &size, - * in_data, in_len, - * pts, dts, pos); - * in_data += len; - * in_len -= len; - * - * if(size) - * decode_frame(data, size); - * } - * @endcode - */ -int av_parser_parse2(AVCodecParserContext *s, - AVCodecContext *avctx, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, - int64_t pts, int64_t dts, - int64_t pos); - -#if FF_API_PARSER_CHANGE -/** - * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed - * @deprecated Use dump_extradata, remove_extra or extract_extradata - * bitstream filters instead. - */ -attribute_deprecated -int av_parser_change(AVCodecParserContext *s, - AVCodecContext *avctx, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, int keyframe); -#endif -void av_parser_close(AVCodecParserContext *s); - -/** - * @} - * @} - */ - -/** - * @addtogroup lavc_encoding - * @{ - */ - -#if FF_API_OLD_ENCDEC -/** - * Encode a frame of audio. - * - * Takes input samples from frame and writes the next output packet, if - * available, to avpkt. The output packet does not necessarily contain data for - * the most recent frame, as encoders can delay, split, and combine input frames - * internally as needed. - * - * @param avctx codec context - * @param avpkt output AVPacket. - * The user can supply an output buffer by setting - * avpkt->data and avpkt->size prior to calling the - * function, but if the size of the user-provided data is not - * large enough, encoding will fail. If avpkt->data and - * avpkt->size are set, avpkt->destruct must also be set. All - * other AVPacket fields will be reset by the encoder using - * av_init_packet(). If avpkt->data is NULL, the encoder will - * allocate it. The encoder will set avpkt->size to the size - * of the output packet. - * - * If this function fails or produces no output, avpkt will be - * freed using av_packet_unref(). - * @param[in] frame AVFrame containing the raw audio data to be encoded. - * May be NULL when flushing an encoder that has the - * AV_CODEC_CAP_DELAY capability set. - * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame - * can have any number of samples. - * If it is not set, frame->nb_samples must be equal to - * avctx->frame_size for all frames except the last. - * The final frame may be smaller than avctx->frame_size. - * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the - * output packet is non-empty, and to 0 if it is - * empty. If the function returns an error, the - * packet can be assumed to be invalid, and the - * value of got_packet_ptr is undefined and should - * not be used. - * @return 0 on success, negative error code on failure - * - * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. - * If allowed and required, set AVCodecContext.get_encode_buffer to - * a custom function to pass user supplied output buffers. - */ -attribute_deprecated -int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, - const AVFrame *frame, int *got_packet_ptr); - -/** - * Encode a frame of video. - * - * Takes input raw video data from frame and writes the next output packet, if - * available, to avpkt. The output packet does not necessarily contain data for - * the most recent frame, as encoders can delay and reorder input frames - * internally as needed. - * - * @param avctx codec context - * @param avpkt output AVPacket. - * The user can supply an output buffer by setting - * avpkt->data and avpkt->size prior to calling the - * function, but if the size of the user-provided data is not - * large enough, encoding will fail. All other AVPacket fields - * will be reset by the encoder using av_init_packet(). If - * avpkt->data is NULL, the encoder will allocate it. - * The encoder will set avpkt->size to the size of the - * output packet. The returned data (if any) belongs to the - * caller, he is responsible for freeing it. - * - * If this function fails or produces no output, avpkt will be - * freed using av_packet_unref(). - * @param[in] frame AVFrame containing the raw video data to be encoded. - * May be NULL when flushing an encoder that has the - * AV_CODEC_CAP_DELAY capability set. - * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the - * output packet is non-empty, and to 0 if it is - * empty. If the function returns an error, the - * packet can be assumed to be invalid, and the - * value of got_packet_ptr is undefined and should - * not be used. - * @return 0 on success, negative error code on failure - * - * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. - * If allowed and required, set AVCodecContext.get_encode_buffer to - * a custom function to pass user supplied output buffers. - */ -attribute_deprecated -int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, - const AVFrame *frame, int *got_packet_ptr); -#endif - -int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, - const AVSubtitle *sub); - - -/** - * @} - */ - -#if FF_API_AVPICTURE -/** - * @addtogroup lavc_picture - * @{ - */ - -/** - * @deprecated unused - */ -attribute_deprecated -int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated unused - */ -attribute_deprecated -void avpicture_free(AVPicture *picture); - -/** - * @deprecated use av_image_fill_arrays() instead. - */ -attribute_deprecated -int avpicture_fill(AVPicture *picture, const uint8_t *ptr, - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated use av_image_copy_to_buffer() instead. - */ -attribute_deprecated -int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt, - int width, int height, - unsigned char *dest, int dest_size); - -/** - * @deprecated use av_image_get_buffer_size() instead. - */ -attribute_deprecated -int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated av_image_copy() instead. - */ -attribute_deprecated -void av_picture_copy(AVPicture *dst, const AVPicture *src, - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated unused - */ -attribute_deprecated -int av_picture_crop(AVPicture *dst, const AVPicture *src, - enum AVPixelFormat pix_fmt, int top_band, int left_band); - -/** - * @deprecated unused - */ -attribute_deprecated -int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt, - int padtop, int padbottom, int padleft, int padright, int *color); - -/** - * @} - */ -#endif - -/** - * @defgroup lavc_misc Utility functions - * @ingroup libavc - * - * Miscellaneous utility functions related to both encoding and decoding - * (or neither). - * @{ - */ - -/** - * @defgroup lavc_misc_pixfmt Pixel formats - * - * Functions for working with pixel formats. - * @{ - */ - -#if FF_API_GETCHROMA -/** - * @deprecated Use av_pix_fmt_get_chroma_sub_sample - */ - -attribute_deprecated -void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift); -#endif - -/** - * Return a value representing the fourCC code associated to the - * pixel format pix_fmt, or 0 if no associated fourCC code can be - * found. - */ -unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt); - -/** - * Find the best pixel format to convert to given a certain source pixel - * format. When converting from one pixel format to another, information loss - * may occur. For example, when converting from RGB24 to GRAY, the color - * information will be lost. Similarly, other losses occur when converting from - * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of - * the given pixel formats should be used to suffer the least amount of loss. - * The pixel formats from which it chooses one, are determined by the - * pix_fmt_list parameter. - * - * - * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. - * @return The best pixel format to convert to or -1 if none was found. - */ -enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list, - enum AVPixelFormat src_pix_fmt, - int has_alpha, int *loss_ptr); - -#if FF_API_AVCODEC_PIX_FMT -/** - * @deprecated see av_get_pix_fmt_loss() - */ -attribute_deprecated -int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, - int has_alpha); -/** - * @deprecated see av_find_best_pix_fmt_of_2() - */ -attribute_deprecated -enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); - -attribute_deprecated -enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); -#endif - -enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - -/** - * @} - */ - -#if FF_API_TAG_STRING -/** - * Put a string representing the codec tag codec_tag in buf. - * - * @param buf buffer to place codec tag in - * @param buf_size size in bytes of buf - * @param codec_tag codec tag to assign - * @return the length of the string that would have been generated if - * enough space had been available, excluding the trailing null - * - * @deprecated see av_fourcc_make_string() and av_fourcc2str(). - */ -attribute_deprecated -size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag); -#endif - -void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); - -/** - * Return a name for the specified profile, if available. - * - * @param codec the codec that is searched for the given profile - * @param profile the profile value for which a name is requested - * @return A name for the profile if found, NULL otherwise. - */ -const char *av_get_profile_name(const AVCodec *codec, int profile); - -/** - * Return a name for the specified profile, if available. - * - * @param codec_id the ID of the codec to which the requested profile belongs - * @param profile the profile value for which a name is requested - * @return A name for the profile if found, NULL otherwise. - * - * @note unlike av_get_profile_name(), which searches a list of profiles - * supported by a specific decoder or encoder implementation, this - * function searches the list of profiles from the AVCodecDescriptor - */ -const char *avcodec_profile_name(enum AVCodecID codec_id, int profile); - -int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); -int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); -//FIXME func typedef - -/** - * Fill AVFrame audio data and linesize pointers. - * - * The buffer buf must be a preallocated buffer with a size big enough - * to contain the specified samples amount. The filled AVFrame data - * pointers will point to this buffer. - * - * AVFrame extended_data channel pointers are allocated if necessary for - * planar audio. - * - * @param frame the AVFrame - * frame->nb_samples must be set prior to calling the - * function. This function fills in frame->data, - * frame->extended_data, frame->linesize[0]. - * @param nb_channels channel count - * @param sample_fmt sample format - * @param buf buffer to use for frame data - * @param buf_size size of buffer - * @param align plane size sample alignment (0 = default) - * @return >=0 on success, negative error code on failure - * @todo return the size in bytes required to store the samples in - * case of success, at the next libavutil bump - */ -int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, - enum AVSampleFormat sample_fmt, const uint8_t *buf, - int buf_size, int align); - -/** - * Reset the internal codec state / flush internal buffers. Should be called - * e.g. when seeking or when switching to a different stream. - * - * @note for decoders, when refcounted frames are not used - * (i.e. avctx->refcounted_frames is 0), this invalidates the frames previously - * returned from the decoder. When refcounted frames are used, the decoder just - * releases any references it might keep internally, but the caller's reference - * remains valid. - * - * @note for encoders, this function will only do something if the encoder - * declares support for AV_CODEC_CAP_ENCODER_FLUSH. When called, the encoder - * will drain any remaining packets, and can then be re-used for a different - * stream (as opposed to sending a null frame which will leave the encoder - * in a permanent EOF state after draining). This can be desirable if the - * cost of tearing down and replacing the encoder instance is high. - */ -void avcodec_flush_buffers(AVCodecContext *avctx); - -/** - * Return codec bits per sample. - * - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ -int av_get_bits_per_sample(enum AVCodecID codec_id); - -/** - * Return the PCM codec associated with a sample format. - * @param be endianness, 0 for little, 1 for big, - * -1 (or anything else) for native - * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE - */ -enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be); - -/** - * Return codec bits per sample. - * Only return non-zero if the bits per sample is exactly correct, not an - * approximation. - * - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ -int av_get_exact_bits_per_sample(enum AVCodecID codec_id); - -/** - * Return audio frame duration. - * - * @param avctx codec context - * @param frame_bytes size of the frame, or 0 if unknown - * @return frame duration, in samples, if known. 0 if not able to - * determine. - */ -int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); - -/** - * This function is the same as av_get_audio_frame_duration(), except it works - * with AVCodecParameters instead of an AVCodecContext. - */ -int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes); - -#if FF_API_OLD_BSF -typedef struct AVBitStreamFilterContext { - void *priv_data; - const struct AVBitStreamFilter *filter; - AVCodecParserContext *parser; - struct AVBitStreamFilterContext *next; - /** - * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter(). - * Not for access by library users. - */ - char *args; -} AVBitStreamFilterContext; - -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use the new bitstream filtering API (using AVBSFContext). - */ -attribute_deprecated -void av_register_bitstream_filter(AVBitStreamFilter *bsf); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_get_by_name(), av_bsf_alloc(), and av_bsf_init() - * from the new bitstream filtering API (using AVBSFContext). - */ -attribute_deprecated -AVBitStreamFilterContext *av_bitstream_filter_init(const char *name); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_send_packet() and av_bsf_receive_packet() from the - * new bitstream filtering API (using AVBSFContext). - */ -attribute_deprecated -int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, - AVCodecContext *avctx, const char *args, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, int keyframe); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_free() from the new bitstream filtering API (using - * AVBSFContext). - */ -attribute_deprecated -void av_bitstream_filter_close(AVBitStreamFilterContext *bsf); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_iterate() from the new bitstream filtering API (using - * AVBSFContext). - */ -attribute_deprecated -const AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f); -#endif - -#if FF_API_NEXT -attribute_deprecated -const AVBitStreamFilter *av_bsf_next(void **opaque); -#endif - -/* memory */ - -/** - * Same behaviour av_fast_malloc but the buffer has additional - * AV_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0. - * - * In addition the whole buffer will initially and after resizes - * be 0-initialized so that no uninitialized data will ever appear. - */ -void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Same behaviour av_fast_padded_malloc except that buffer will always - * be 0-initialized after call. - */ -void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); - -/** - * Encode extradata length to a buffer. Used by xiph codecs. - * - * @param s buffer to write to; must be at least (v/255+1) bytes long - * @param v size of extradata in bytes - * @return number of bytes written to the buffer. - */ -unsigned int av_xiphlacing(unsigned char *s, unsigned int v); - -#if FF_API_USER_VISIBLE_AVHWACCEL -/** - * Register the hardware accelerator hwaccel. - * - * @deprecated This function doesn't do anything. - */ -attribute_deprecated -void av_register_hwaccel(AVHWAccel *hwaccel); - -/** - * If hwaccel is NULL, returns the first registered hardware accelerator, - * if hwaccel is non-NULL, returns the next registered hardware accelerator - * after hwaccel, or NULL if hwaccel is the last one. - * - * @deprecated AVHWaccel structures contain no user-serviceable parts, so - * this function should not be used. - */ -attribute_deprecated -AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel); -#endif - -#if FF_API_LOCKMGR -/** - * Lock operation used by lockmgr - * - * @deprecated Deprecated together with av_lockmgr_register(). - */ -enum AVLockOp { - AV_LOCK_CREATE, ///< Create a mutex - AV_LOCK_OBTAIN, ///< Lock the mutex - AV_LOCK_RELEASE, ///< Unlock the mutex - AV_LOCK_DESTROY, ///< Free mutex resources -}; - -/** - * Register a user provided lock manager supporting the operations - * specified by AVLockOp. The "mutex" argument to the function points - * to a (void *) where the lockmgr should store/get a pointer to a user - * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the - * value left by the last call for all other ops. If the lock manager is - * unable to perform the op then it should leave the mutex in the same - * state as when it was called and return a non-zero value. However, - * when called with AV_LOCK_DESTROY the mutex will always be assumed to - * have been successfully destroyed. If av_lockmgr_register succeeds - * it will return a non-negative value, if it fails it will return a - * negative value and destroy all mutex and unregister all callbacks. - * av_lockmgr_register is not thread-safe, it must be called from a - * single thread before any calls which make use of locking are used. - * - * @param cb User defined callback. av_lockmgr_register invokes calls - * to this callback and the previously registered callback. - * The callback will be used to create more than one mutex - * each of which must be backed by its own underlying locking - * mechanism (i.e. do not use a single static object to - * implement your lock manager). If cb is set to NULL the - * lockmgr will be unregistered. - * - * @deprecated This function does nothing, and always returns 0. Be sure to - * build with thread support to get basic thread safety. - */ -attribute_deprecated -int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)); -#endif - -/** - * @return a positive value if s is open (i.e. avcodec_open2() was called on it - * with no corresponding avcodec_close()), 0 otherwise. - */ -int avcodec_is_open(AVCodecContext *s); - -/** - * Allocate a CPB properties structure and initialize its fields to default - * values. - * - * @param size if non-NULL, the size of the allocated struct will be written - * here. This is useful for embedding it in side data. - * - * @return the newly allocated struct or NULL on failure - */ -AVCPBProperties *av_cpb_properties_alloc(size_t *size); - -/** - * @} - */ - -#endif /* AVCODEC_AVCODEC_H */ diff --git a/prebuilts/arm/include/libavcodec/avdct.h b/prebuilts/arm/include/libavcodec/avdct.h deleted file mode 100644 index 6411fab..0000000 --- a/prebuilts/arm/include/libavcodec/avdct.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVDCT_H -#define AVCODEC_AVDCT_H - -#include "libavutil/opt.h" - -/** - * AVDCT context. - * @note function pointers can be NULL if the specific features have been - * disabled at build time. - */ -typedef struct AVDCT { - const AVClass *av_class; - - void (*idct)(int16_t *block /* align 16 */); - - /** - * IDCT input permutation. - * Several optimized IDCTs need a permutated input (relative to the - * normal order of the reference IDCT). - * This permutation must be performed before the idct_put/add. - * Note, normally this can be merged with the zigzag/alternate scan
- * An example to avoid confusion: - * - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...) - * - (x -> reference DCT -> reference IDCT -> x) - * - (x -> reference DCT -> simple_mmx_perm = idct_permutation - * -> simple_idct_mmx -> x) - * - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant - * -> simple_idct_mmx -> ...) - */ - uint8_t idct_permutation[64]; - - void (*fdct)(int16_t *block /* align 16 */); - - - /** - * DCT algorithm. - * must use AVOptions to set this field. - */ - int dct_algo; - - /** - * IDCT algorithm. - * must use AVOptions to set this field. - */ - int idct_algo; - - void (*get_pixels)(int16_t *block /* align 16 */, - const uint8_t *pixels /* align 8 */, - ptrdiff_t line_size); - - int bits_per_sample; - - void (*get_pixels_unaligned)(int16_t *block /* align 16 */, - const uint8_t *pixels, - ptrdiff_t line_size); -} AVDCT; - -/** - * Allocates a AVDCT context. - * This needs to be initialized with avcodec_dct_init() after optionally - * configuring it with AVOptions. - * - * To free it use av_free() - */ -AVDCT *avcodec_dct_alloc(void); -int avcodec_dct_init(AVDCT *); - -const AVClass *avcodec_dct_get_class(void); - -#endif /* AVCODEC_AVDCT_H */ diff --git a/prebuilts/arm/include/libavcodec/avfft.h b/prebuilts/arm/include/libavcodec/avfft.h deleted file mode 100644 index 0c0f9b8..0000000 --- a/prebuilts/arm/include/libavcodec/avfft.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVFFT_H -#define AVCODEC_AVFFT_H - -/** - * @file - * @ingroup lavc_fft - * FFT functions - */ - -/** - * @defgroup lavc_fft FFT functions - * @ingroup lavc_misc - * - * @{ - */ - -typedef float FFTSample; - -typedef struct FFTComplex { - FFTSample re, im; -} FFTComplex; - -typedef struct FFTContext FFTContext; - -/** - * Set up a complex FFT. - * @param nbits log2 of the length of the input array - * @param inverse if 0 perform the forward transform, if 1 perform the inverse - */ -FFTContext *av_fft_init(int nbits, int inverse); - -/** - * Do the permutation needed BEFORE calling ff_fft_calc(). - */ -void av_fft_permute(FFTContext *s, FFTComplex *z); - -/** - * Do a complex FFT with the parameters defined in av_fft_init(). The - * input data must be permuted before. No 1.0/sqrt(n) normalization is done. - */ -void av_fft_calc(FFTContext *s, FFTComplex *z); - -void av_fft_end(FFTContext *s); - -FFTContext *av_mdct_init(int nbits, int inverse, double scale); -void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_mdct_end(FFTContext *s); - -/* Real Discrete Fourier Transform */ - -enum RDFTransformType { - DFT_R2C, - IDFT_C2R, - IDFT_R2C, - DFT_C2R, -}; - -typedef struct RDFTContext RDFTContext; - -/** - * Set up a real FFT. - * @param nbits log2 of the length of the input array - * @param trans the type of transform - */ -RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans); -void av_rdft_calc(RDFTContext *s, FFTSample *data); -void av_rdft_end(RDFTContext *s); - -/* Discrete Cosine Transform */ - -typedef struct DCTContext DCTContext; - -enum DCTTransformType { - DCT_II = 0, - DCT_III, - DCT_I, - DST_I, -}; - -/** - * Set up DCT. - * - * @param nbits size of the input array: - * (1 << nbits) for DCT-II, DCT-III and DST-I - * (1 << nbits) + 1 for DCT-I - * @param type the type of transform - * - * @note the first element of the input of DST-I is ignored - */ -DCTContext *av_dct_init(int nbits, enum DCTTransformType type); -void av_dct_calc(DCTContext *s, FFTSample *data); -void av_dct_end (DCTContext *s); - -/** - * @} - */ - -#endif /* AVCODEC_AVFFT_H */ diff --git a/prebuilts/arm/include/libavcodec/bsf.h b/prebuilts/arm/include/libavcodec/bsf.h deleted file mode 100644 index 3b5faa8..0000000 --- a/prebuilts/arm/include/libavcodec/bsf.h +++ /dev/null @@ -1,325 +0,0 @@ -/* - * Bitstream filters public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_BSF_H -#define AVCODEC_BSF_H - -#include "libavutil/dict.h" -#include "libavutil/log.h" -#include "libavutil/rational.h" - -#include "codec_id.h" -#include "codec_par.h" -#include "packet.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -typedef struct AVBSFInternal AVBSFInternal; - -/** - * The bitstream filter state. - * - * This struct must be allocated with av_bsf_alloc() and freed with - * av_bsf_free(). - * - * The fields in the struct will only be changed (by the caller or by the - * filter) as described in their documentation, and are to be considered - * immutable otherwise. - */ -typedef struct AVBSFContext { - /** - * A class for logging and AVOptions - */ - const AVClass *av_class; - - /** - * The bitstream filter this context is an instance of. - */ - const struct AVBitStreamFilter *filter; - - /** - * Opaque libavcodec internal data. Must not be touched by the caller in any - * way. - */ - AVBSFInternal *internal; - - /** - * Opaque filter-specific private data. If filter->priv_class is non-NULL, - * this is an AVOptions-enabled struct. - */ - void *priv_data; - - /** - * Parameters of the input stream. This field is allocated in - * av_bsf_alloc(), it needs to be filled by the caller before - * av_bsf_init(). - */ - AVCodecParameters *par_in; - - /** - * Parameters of the output stream. This field is allocated in - * av_bsf_alloc(), it is set by the filter in av_bsf_init(). - */ - AVCodecParameters *par_out; - - /** - * The timebase used for the timestamps of the input packets. Set by the - * caller before av_bsf_init(). - */ - AVRational time_base_in; - - /** - * The timebase used for the timestamps of the output packets. Set by the - * filter in av_bsf_init(). - */ - AVRational time_base_out; -} AVBSFContext; - -typedef struct AVBitStreamFilter { - const char *name; - - /** - * A list of codec ids supported by the filter, terminated by - * AV_CODEC_ID_NONE. - * May be NULL, in that case the bitstream filter works with any codec id. - */ - const enum AVCodecID *codec_ids; - - /** - * A class for the private data, used to declare bitstream filter private - * AVOptions. This field is NULL for bitstream filters that do not declare - * any options. - * - * If this field is non-NULL, the first member of the filter private data - * must be a pointer to AVClass, which will be set by libavcodec generic - * code to this class. - */ - const AVClass *priv_class; - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavcodec and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - int priv_data_size; - int (*init)(AVBSFContext *ctx); - int (*filter)(AVBSFContext *ctx, AVPacket *pkt); - void (*close)(AVBSFContext *ctx); - void (*flush)(AVBSFContext *ctx); -} AVBitStreamFilter; - -/** - * @return a bitstream filter with the specified name or NULL if no such - * bitstream filter exists. - */ -const AVBitStreamFilter *av_bsf_get_by_name(const char *name); - -/** - * Iterate over all registered bitstream filters. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered bitstream filter or NULL when the iteration is - * finished - */ -const AVBitStreamFilter *av_bsf_iterate(void **opaque); - -/** - * Allocate a context for a given bitstream filter. The caller must fill in the - * context parameters as described in the documentation and then call - * av_bsf_init() before sending any data to the filter. - * - * @param filter the filter for which to allocate an instance. - * @param ctx a pointer into which the pointer to the newly-allocated context - * will be written. It must be freed with av_bsf_free() after the - * filtering is done. - * - * @return 0 on success, a negative AVERROR code on failure - */ -int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx); - -/** - * Prepare the filter for use, after all the parameters and options have been - * set. - */ -int av_bsf_init(AVBSFContext *ctx); - -/** - * Submit a packet for filtering. - * - * After sending each packet, the filter must be completely drained by calling - * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or - * AVERROR_EOF. - * - * @param pkt the packet to filter. The bitstream filter will take ownership of - * the packet and reset the contents of pkt. pkt is not touched if an error occurs. - * If pkt is empty (i.e. NULL, or pkt->data is NULL and pkt->side_data_elems zero), - * it signals the end of the stream (i.e. no more non-empty packets will be sent; - * sending more empty packets does nothing) and will cause the filter to output - * any packets it may have buffered internally. - * - * @return 0 on success. AVERROR(EAGAIN) if packets need to be retrieved from the - * filter (using av_bsf_receive_packet()) before new input can be consumed. Another - * negative AVERROR value if an error occurs. - */ -int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt); - -/** - * Retrieve a filtered packet. - * - * @param[out] pkt this struct will be filled with the contents of the filtered - * packet. It is owned by the caller and must be freed using - * av_packet_unref() when it is no longer needed. - * This parameter should be "clean" (i.e. freshly allocated - * with av_packet_alloc() or unreffed with av_packet_unref()) - * when this function is called. If this function returns - * successfully, the contents of pkt will be completely - * overwritten by the returned data. On failure, pkt is not - * touched. - * - * @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the - * filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there - * will be no further output from the filter. Another negative AVERROR value if - * an error occurs. - * - * @note one input packet may result in several output packets, so after sending - * a packet with av_bsf_send_packet(), this function needs to be called - * repeatedly until it stops returning 0. It is also possible for a filter to - * output fewer packets than were sent to it, so this function may return - * AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call. - */ -int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt); - -/** - * Reset the internal bitstream filter state. Should be called e.g. when seeking. - */ -void av_bsf_flush(AVBSFContext *ctx); - -/** - * Free a bitstream filter context and everything associated with it; write NULL - * into the supplied pointer. - */ -void av_bsf_free(AVBSFContext **ctx); - -/** - * Get the AVClass for AVBSFContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *av_bsf_get_class(void); - -/** - * Structure for chain/list of bitstream filters. - * Empty list can be allocated by av_bsf_list_alloc(). - */ -typedef struct AVBSFList AVBSFList; - -/** - * Allocate empty list of bitstream filters. - * The list must be later freed by av_bsf_list_free() - * or finalized by av_bsf_list_finalize(). - * - * @return Pointer to @ref AVBSFList on success, NULL in case of failure - */ -AVBSFList *av_bsf_list_alloc(void); - -/** - * Free list of bitstream filters. - * - * @param lst Pointer to pointer returned by av_bsf_list_alloc() - */ -void av_bsf_list_free(AVBSFList **lst); - -/** - * Append bitstream filter to the list of bitstream filters. - * - * @param lst List to append to - * @param bsf Filter context to be appended - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_append(AVBSFList *lst, AVBSFContext *bsf); - -/** - * Construct new bitstream filter context given it's name and options - * and append it to the list of bitstream filters. - * - * @param lst List to append to - * @param bsf_name Name of the bitstream filter - * @param options Options for the bitstream filter, can be set to NULL - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_append2(AVBSFList *lst, const char * bsf_name, AVDictionary **options); -/** - * Finalize list of bitstream filters. - * - * This function will transform @ref AVBSFList to single @ref AVBSFContext, - * so the whole chain of bitstream filters can be treated as single filter - * freshly allocated by av_bsf_alloc(). - * If the call is successful, @ref AVBSFList structure is freed and lst - * will be set to NULL. In case of failure, caller is responsible for - * freeing the structure by av_bsf_list_free() - * - * @param lst Filter list structure to be transformed - * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure - * representing the chain of bitstream filters - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf); - -/** - * Parse string describing list of bitstream filters and create single - * @ref AVBSFContext describing the whole chain of bitstream filters. - * Resulting @ref AVBSFContext can be treated as any other @ref AVBSFContext freshly - * allocated by av_bsf_alloc(). - * - * @param str String describing chain of bitstream filters in format - * `bsf1[=opt1=val1:opt2=val2][,bsf2]` - * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure - * representing the chain of bitstream filters - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf); - -/** - * Get null/pass-through bitstream filter. - * - * @param[out] bsf Pointer to be set to new instance of pass-through bitstream filter - * - * @return - */ -int av_bsf_get_null_filter(AVBSFContext **bsf); - -/** - * @} - */ - -#endif // AVCODEC_BSF_H diff --git a/prebuilts/arm/include/libavcodec/codec.h b/prebuilts/arm/include/libavcodec/codec.h deleted file mode 100644 index 50a22f6..0000000 --- a/prebuilts/arm/include/libavcodec/codec.h +++ /dev/null @@ -1,480 +0,0 @@ -/* - * AVCodec public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_H -#define AVCODEC_CODEC_H - -#include - -#include "libavutil/avutil.h" -#include "libavutil/hwcontext.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" -#include "libavutil/samplefmt.h" - -#include "libavcodec/codec_id.h" -#include "libavcodec/version.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * Decoder can use draw_horiz_band callback. - */ -#define AV_CODEC_CAP_DRAW_HORIZ_BAND (1 << 0) -/** - * Codec uses get_buffer() or get_encode_buffer() for allocating buffers and - * supports custom allocators. - * If not set, it might not use get_buffer() or get_encode_buffer() at all, or - * use operations that assume the buffer was allocated by - * avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer. - */ -#define AV_CODEC_CAP_DR1 (1 << 1) -#define AV_CODEC_CAP_TRUNCATED (1 << 3) -/** - * Encoder or decoder requires flushing with NULL input at the end in order to - * give the complete and correct output. - * - * NOTE: If this flag is not set, the codec is guaranteed to never be fed with - * with NULL data. The user can still send NULL data to the public encode - * or decode function, but libavcodec will not pass it along to the codec - * unless this flag is set. - * - * Decoders: - * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, - * avpkt->size=0 at the end to get the delayed data until the decoder no longer - * returns frames. - * - * Encoders: - * The encoder needs to be fed with NULL data at the end of encoding until the - * encoder no longer returns data. - * - * NOTE: For encoders implementing the AVCodec.encode2() function, setting this - * flag also means that the encoder must set the pts and duration for - * each output packet. If this flag is not set, the pts and duration will - * be determined by libavcodec from the input frame. - */ -#define AV_CODEC_CAP_DELAY (1 << 5) -/** - * Codec can be fed a final frame with a smaller size. - * This can be used to prevent truncation of the last audio samples. - */ -#define AV_CODEC_CAP_SMALL_LAST_FRAME (1 << 6) - -/** - * Codec can output multiple frames per AVPacket - * Normally demuxers return one frame at a time, demuxers which do not do - * are connected to a parser to split what they return into proper frames. - * This flag is reserved to the very rare category of codecs which have a - * bitstream that cannot be split into frames without timeconsuming - * operations like full decoding. Demuxers carrying such bitstreams thus - * may return multiple frames in a packet. This has many disadvantages like - * prohibiting stream copy in many cases thus it should only be considered - * as a last resort. - */ -#define AV_CODEC_CAP_SUBFRAMES (1 << 8) -/** - * Codec is experimental and is thus avoided in favor of non experimental - * encoders - */ -#define AV_CODEC_CAP_EXPERIMENTAL (1 << 9) -/** - * Codec should fill in channel configuration and samplerate instead of container - */ -#define AV_CODEC_CAP_CHANNEL_CONF (1 << 10) -/** - * Codec supports frame-level multithreading. - */ -#define AV_CODEC_CAP_FRAME_THREADS (1 << 12) -/** - * Codec supports slice-based (or partition-based) multithreading. - */ -#define AV_CODEC_CAP_SLICE_THREADS (1 << 13) -/** - * Codec supports changed parameters at any point. - */ -#define AV_CODEC_CAP_PARAM_CHANGE (1 << 14) -/** - * Codec supports multithreading through a method other than slice- or - * frame-level multithreading. Typically this marks wrappers around - * multithreading-capable external libraries. - */ -#define AV_CODEC_CAP_OTHER_THREADS (1 << 15) -#if FF_API_AUTO_THREADS -#define AV_CODEC_CAP_AUTO_THREADS AV_CODEC_CAP_OTHER_THREADS -#endif -/** - * Audio encoder supports receiving a different number of samples in each call. - */ -#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16) -/** - * Decoder is not a preferred choice for probing. - * This indicates that the decoder is not a good choice for probing. - * It could for example be an expensive to spin up hardware decoder, - * or it could simply not provide a lot of useful information about - * the stream. - * A decoder marked with this flag should only be used as last resort - * choice for probing. - */ -#define AV_CODEC_CAP_AVOID_PROBING (1 << 17) - -#if FF_API_UNUSED_CODEC_CAPS -/** - * Deprecated and unused. Use AVCodecDescriptor.props instead - */ -#define AV_CODEC_CAP_INTRA_ONLY 0x40000000 -/** - * Deprecated and unused. Use AVCodecDescriptor.props instead - */ -#define AV_CODEC_CAP_LOSSLESS 0x80000000 -#endif - -/** - * Codec is backed by a hardware implementation. Typically used to - * identify a non-hwaccel hardware decoder. For information about hwaccels, use - * avcodec_get_hw_config() instead. - */ -#define AV_CODEC_CAP_HARDWARE (1 << 18) - -/** - * Codec is potentially backed by a hardware implementation, but not - * necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the - * implementation provides some sort of internal fallback. - */ -#define AV_CODEC_CAP_HYBRID (1 << 19) - -/** - * This codec takes the reordered_opaque field from input AVFrames - * and returns it in the corresponding field in AVCodecContext after - * encoding. - */ -#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20) - -/** - * This encoder can be flushed using avcodec_flush_buffers(). If this flag is - * not set, the encoder must be closed and reopened to ensure that no frames - * remain pending. - */ -#define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21) - -/** - * AVProfile. - */ -typedef struct AVProfile { - int profile; - const char *name; ///< short name for the profile -} AVProfile; - -typedef struct AVCodecDefault AVCodecDefault; - -struct AVCodecContext; -struct AVSubtitle; -struct AVPacket; - -/** - * AVCodec. - */ -typedef struct AVCodec { - /** - * Name of the codec implementation. - * The name is globally unique among encoders and among decoders (but an - * encoder and a decoder can share the same name). - * This is the primary way to find a codec from the user perspective. - */ - const char *name; - /** - * Descriptive name for the codec, meant to be more human readable than name. - * You should use the NULL_IF_CONFIG_SMALL() macro to define it. - */ - const char *long_name; - enum AVMediaType type; - enum AVCodecID id; - /** - * Codec capabilities. - * see AV_CODEC_CAP_* - */ - int capabilities; - const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} - const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 - const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 - const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 - const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 - uint8_t max_lowres; ///< maximum value for lowres supported by the decoder - const AVClass *priv_class; ///< AVClass for the private context - const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} - - /** - * Group name of the codec implementation. - * This is a short symbolic name of the wrapper backing this codec. A - * wrapper uses some kind of external implementation for the codec, such - * as an external library, or a codec implementation provided by the OS or - * the hardware. - * If this field is NULL, this is a builtin, libavcodec native codec. - * If non-NULL, this will be the suffix in AVCodec.name in most cases - * (usually AVCodec.name will be of the form "_"). - */ - const char *wrapper_name; - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavcodec and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - int priv_data_size; -#if FF_API_NEXT - struct AVCodec *next; -#endif - /** - * @name Frame-level threading support functions - * @{ - */ - /** - * Copy necessary context variables from a previous thread context to the current one. - * If not defined, the next thread will start automatically; otherwise, the codec - * must call ff_thread_finish_setup(). - * - * dst and src will (rarely) point to the same context, in which case memcpy should be skipped. - */ - int (*update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src); - /** @} */ - - /** - * Private codec-specific defaults. - */ - const AVCodecDefault *defaults; - - /** - * Initialize codec static data, called from av_codec_iterate(). - * - * This is not intended for time consuming operations as it is - * run for every codec regardless of that codec being used. - */ - void (*init_static_data)(struct AVCodec *codec); - - int (*init)(struct AVCodecContext *); - int (*encode_sub)(struct AVCodecContext *, uint8_t *buf, int buf_size, - const struct AVSubtitle *sub); - /** - * Encode data to an AVPacket. - * - * @param avctx codec context - * @param avpkt output AVPacket - * @param[in] frame AVFrame containing the raw data to be encoded - * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a - * non-empty packet was returned in avpkt. - * @return 0 on success, negative error code on failure - */ - int (*encode2)(struct AVCodecContext *avctx, struct AVPacket *avpkt, - const struct AVFrame *frame, int *got_packet_ptr); - /** - * Decode picture or subtitle data. - * - * @param avctx codec context - * @param outdata codec type dependent output struct - * @param[out] got_frame_ptr decoder sets to 0 or 1 to indicate that a - * non-empty frame or subtitle was returned in - * outdata. - * @param[in] avpkt AVPacket containing the data to be decoded - * @return amount of bytes read from the packet on success, negative error - * code on failure - */ - int (*decode)(struct AVCodecContext *avctx, void *outdata, - int *got_frame_ptr, struct AVPacket *avpkt); - int (*close)(struct AVCodecContext *); - /** - * Encode API with decoupled frame/packet dataflow. This function is called - * to get one output packet. It should call ff_encode_get_frame() to obtain - * input data. - */ - int (*receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt); - - /** - * Decode API with decoupled packet/frame dataflow. This function is called - * to get one output frame. It should call ff_decode_get_packet() to obtain - * input data. - */ - int (*receive_frame)(struct AVCodecContext *avctx, struct AVFrame *frame); - /** - * Flush buffers. - * Will be called when seeking - */ - void (*flush)(struct AVCodecContext *); - /** - * Internal codec capabilities. - * See FF_CODEC_CAP_* in internal.h - */ - int caps_internal; - - /** - * Decoding only, a comma-separated list of bitstream filters to apply to - * packets before decoding. - */ - const char *bsfs; - - /** - * Array of pointers to hardware configurations supported by the codec, - * or NULL if no hardware supported. The array is terminated by a NULL - * pointer. - * - * The user can only access this field via avcodec_get_hw_config(). - */ - const struct AVCodecHWConfigInternal *const *hw_configs; - - /** - * List of supported codec_tags, terminated by FF_CODEC_TAGS_END. - */ - const uint32_t *codec_tags; -} AVCodec; - -/** - * Iterate over all registered codecs. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered codec or NULL when the iteration is - * finished - */ -const AVCodec *av_codec_iterate(void **opaque); - -/** - * Find a registered decoder with a matching codec ID. - * - * @param id AVCodecID of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_decoder(enum AVCodecID id); - -/** - * Find a registered decoder with the specified name. - * - * @param name name of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_decoder_by_name(const char *name); - -/** - * Find a registered encoder with a matching codec ID. - * - * @param id AVCodecID of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_encoder(enum AVCodecID id); - -/** - * Find a registered encoder with the specified name. - * - * @param name name of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_encoder_by_name(const char *name); -/** - * @return a non-zero number if codec is an encoder, zero otherwise - */ -int av_codec_is_encoder(const AVCodec *codec); - -/** - * @return a non-zero number if codec is a decoder, zero otherwise - */ -int av_codec_is_decoder(const AVCodec *codec); - -enum { - /** - * The codec supports this format via the hw_device_ctx interface. - * - * When selecting this format, AVCodecContext.hw_device_ctx should - * have been set to a device of the specified type before calling - * avcodec_open2(). - */ - AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX = 0x01, - /** - * The codec supports this format via the hw_frames_ctx interface. - * - * When selecting this format for a decoder, - * AVCodecContext.hw_frames_ctx should be set to a suitable frames - * context inside the get_format() callback. The frames context - * must have been created on a device of the specified type. - * - * When selecting this format for an encoder, - * AVCodecContext.hw_frames_ctx should be set to the context which - * will be used for the input frames before calling avcodec_open2(). - */ - AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = 0x02, - /** - * The codec supports this format by some internal method. - * - * This format can be selected without any additional configuration - - * no device or frames context is required. - */ - AV_CODEC_HW_CONFIG_METHOD_INTERNAL = 0x04, - /** - * The codec supports this format by some ad-hoc method. - * - * Additional settings and/or function calls are required. See the - * codec-specific documentation for details. (Methods requiring - * this sort of configuration are deprecated and others should be - * used in preference.) - */ - AV_CODEC_HW_CONFIG_METHOD_AD_HOC = 0x08, -}; - -typedef struct AVCodecHWConfig { - /** - * For decoders, a hardware pixel format which that decoder may be - * able to decode to if suitable hardware is available. - * - * For encoders, a pixel format which the encoder may be able to - * accept. If set to AV_PIX_FMT_NONE, this applies to all pixel - * formats supported by the codec. - */ - enum AVPixelFormat pix_fmt; - /** - * Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible - * setup methods which can be used with this configuration. - */ - int methods; - /** - * The device type associated with the configuration. - * - * Must be set for AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX and - * AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, otherwise unused. - */ - enum AVHWDeviceType device_type; -} AVCodecHWConfig; - -/** - * Retrieve supported hardware configurations for a codec. - * - * Values of index from zero to some maximum return the indexed configuration - * descriptor; all other values return NULL. If the codec does not support - * any hardware configurations then it will always return NULL. - */ -const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *codec, int index); - -/** - * @} - */ - -#endif /* AVCODEC_CODEC_H */ diff --git a/prebuilts/arm/include/libavcodec/codec_desc.h b/prebuilts/arm/include/libavcodec/codec_desc.h deleted file mode 100644 index 126b52d..0000000 --- a/prebuilts/arm/include/libavcodec/codec_desc.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Codec descriptors public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_DESC_H -#define AVCODEC_CODEC_DESC_H - -#include "libavutil/avutil.h" - -#include "codec_id.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * This struct describes the properties of a single codec described by an - * AVCodecID. - * @see avcodec_descriptor_get() - */ -typedef struct AVCodecDescriptor { - enum AVCodecID id; - enum AVMediaType type; - /** - * Name of the codec described by this descriptor. It is non-empty and - * unique for each codec descriptor. It should contain alphanumeric - * characters and '_' only. - */ - const char *name; - /** - * A more descriptive name for this codec. May be NULL. - */ - const char *long_name; - /** - * Codec properties, a combination of AV_CODEC_PROP_* flags. - */ - int props; - /** - * MIME type(s) associated with the codec. - * May be NULL; if not, a NULL-terminated array of MIME types. - * The first item is always non-NULL and is the preferred MIME type. - */ - const char *const *mime_types; - /** - * If non-NULL, an array of profiles recognized for this codec. - * Terminated with FF_PROFILE_UNKNOWN. - */ - const struct AVProfile *profiles; -} AVCodecDescriptor; - -/** - * Codec uses only intra compression. - * Video and audio codecs only. - */ -#define AV_CODEC_PROP_INTRA_ONLY (1 << 0) -/** - * Codec supports lossy compression. Audio and video codecs only. - * @note a codec may support both lossy and lossless - * compression modes - */ -#define AV_CODEC_PROP_LOSSY (1 << 1) -/** - * Codec supports lossless compression. Audio and video codecs only. - */ -#define AV_CODEC_PROP_LOSSLESS (1 << 2) -/** - * Codec supports frame reordering. That is, the coded order (the order in which - * the encoded packets are output by the encoders / stored / input to the - * decoders) may be different from the presentation order of the corresponding - * frames. - * - * For codecs that do not have this property set, PTS and DTS should always be - * equal. - */ -#define AV_CODEC_PROP_REORDER (1 << 3) -/** - * Subtitle codec is bitmap based - * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. - */ -#define AV_CODEC_PROP_BITMAP_SUB (1 << 16) -/** - * Subtitle codec is text based. - * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. - */ -#define AV_CODEC_PROP_TEXT_SUB (1 << 17) - -/** - * @return descriptor for given codec ID or NULL if no descriptor exists. - */ -const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id); - -/** - * Iterate over all codec descriptors known to libavcodec. - * - * @param prev previous descriptor. NULL to get the first descriptor. - * - * @return next descriptor or NULL after the last descriptor - */ -const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev); - -/** - * @return codec descriptor with the given name or NULL if no such descriptor - * exists. - */ -const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name); - -/** - * @} - */ - -#endif // AVCODEC_CODEC_DESC_H diff --git a/prebuilts/arm/include/libavcodec/codec_id.h b/prebuilts/arm/include/libavcodec/codec_id.h deleted file mode 100644 index ab7bc68..0000000 --- a/prebuilts/arm/include/libavcodec/codec_id.h +++ /dev/null @@ -1,592 +0,0 @@ -/* - * Codec IDs - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_ID_H -#define AVCODEC_CODEC_ID_H - -#include "libavutil/avutil.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * Identify the syntax and semantics of the bitstream. - * The principle is roughly: - * Two decoders with the same ID can decode the same streams. - * Two encoders with the same ID can encode compatible streams. - * There may be slight deviations from the principle due to implementation - * details. - * - * If you add a codec ID to this list, add it so that - * 1. no value of an existing codec ID changes (that would break ABI), - * 2. it is as close as possible to similar codecs - * - * After adding new codec IDs, do not forget to add an entry to the codec - * descriptor list and bump libavcodec minor version. - */ -enum AVCodecID { - AV_CODEC_ID_NONE, - - /* video codecs */ - AV_CODEC_ID_MPEG1VIDEO, - AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding - AV_CODEC_ID_H261, - AV_CODEC_ID_H263, - AV_CODEC_ID_RV10, - AV_CODEC_ID_RV20, - AV_CODEC_ID_MJPEG, - AV_CODEC_ID_MJPEGB, - AV_CODEC_ID_LJPEG, - AV_CODEC_ID_SP5X, - AV_CODEC_ID_JPEGLS, - AV_CODEC_ID_MPEG4, - AV_CODEC_ID_RAWVIDEO, - AV_CODEC_ID_MSMPEG4V1, - AV_CODEC_ID_MSMPEG4V2, - AV_CODEC_ID_MSMPEG4V3, - AV_CODEC_ID_WMV1, - AV_CODEC_ID_WMV2, - AV_CODEC_ID_H263P, - AV_CODEC_ID_H263I, - AV_CODEC_ID_FLV1, - AV_CODEC_ID_SVQ1, - AV_CODEC_ID_SVQ3, - AV_CODEC_ID_DVVIDEO, - AV_CODEC_ID_HUFFYUV, - AV_CODEC_ID_CYUV, - AV_CODEC_ID_H264, - AV_CODEC_ID_INDEO3, - AV_CODEC_ID_VP3, - AV_CODEC_ID_THEORA, - AV_CODEC_ID_ASV1, - AV_CODEC_ID_ASV2, - AV_CODEC_ID_FFV1, - AV_CODEC_ID_4XM, - AV_CODEC_ID_VCR1, - AV_CODEC_ID_CLJR, - AV_CODEC_ID_MDEC, - AV_CODEC_ID_ROQ, - AV_CODEC_ID_INTERPLAY_VIDEO, - AV_CODEC_ID_XAN_WC3, - AV_CODEC_ID_XAN_WC4, - AV_CODEC_ID_RPZA, - AV_CODEC_ID_CINEPAK, - AV_CODEC_ID_WS_VQA, - AV_CODEC_ID_MSRLE, - AV_CODEC_ID_MSVIDEO1, - AV_CODEC_ID_IDCIN, - AV_CODEC_ID_8BPS, - AV_CODEC_ID_SMC, - AV_CODEC_ID_FLIC, - AV_CODEC_ID_TRUEMOTION1, - AV_CODEC_ID_VMDVIDEO, - AV_CODEC_ID_MSZH, - AV_CODEC_ID_ZLIB, - AV_CODEC_ID_QTRLE, - AV_CODEC_ID_TSCC, - AV_CODEC_ID_ULTI, - AV_CODEC_ID_QDRAW, - AV_CODEC_ID_VIXL, - AV_CODEC_ID_QPEG, - AV_CODEC_ID_PNG, - AV_CODEC_ID_PPM, - AV_CODEC_ID_PBM, - AV_CODEC_ID_PGM, - AV_CODEC_ID_PGMYUV, - AV_CODEC_ID_PAM, - AV_CODEC_ID_FFVHUFF, - AV_CODEC_ID_RV30, - AV_CODEC_ID_RV40, - AV_CODEC_ID_VC1, - AV_CODEC_ID_WMV3, - AV_CODEC_ID_LOCO, - AV_CODEC_ID_WNV1, - AV_CODEC_ID_AASC, - AV_CODEC_ID_INDEO2, - AV_CODEC_ID_FRAPS, - AV_CODEC_ID_TRUEMOTION2, - AV_CODEC_ID_BMP, - AV_CODEC_ID_CSCD, - AV_CODEC_ID_MMVIDEO, - AV_CODEC_ID_ZMBV, - AV_CODEC_ID_AVS, - AV_CODEC_ID_SMACKVIDEO, - AV_CODEC_ID_NUV, - AV_CODEC_ID_KMVC, - AV_CODEC_ID_FLASHSV, - AV_CODEC_ID_CAVS, - AV_CODEC_ID_JPEG2000, - AV_CODEC_ID_VMNC, - AV_CODEC_ID_VP5, - AV_CODEC_ID_VP6, - AV_CODEC_ID_VP6F, - AV_CODEC_ID_TARGA, - AV_CODEC_ID_DSICINVIDEO, - AV_CODEC_ID_TIERTEXSEQVIDEO, - AV_CODEC_ID_TIFF, - AV_CODEC_ID_GIF, - AV_CODEC_ID_DXA, - AV_CODEC_ID_DNXHD, - AV_CODEC_ID_THP, - AV_CODEC_ID_SGI, - AV_CODEC_ID_C93, - AV_CODEC_ID_BETHSOFTVID, - AV_CODEC_ID_PTX, - AV_CODEC_ID_TXD, - AV_CODEC_ID_VP6A, - AV_CODEC_ID_AMV, - AV_CODEC_ID_VB, - AV_CODEC_ID_PCX, - AV_CODEC_ID_SUNRAST, - AV_CODEC_ID_INDEO4, - AV_CODEC_ID_INDEO5, - AV_CODEC_ID_MIMIC, - AV_CODEC_ID_RL2, - AV_CODEC_ID_ESCAPE124, - AV_CODEC_ID_DIRAC, - AV_CODEC_ID_BFI, - AV_CODEC_ID_CMV, - AV_CODEC_ID_MOTIONPIXELS, - AV_CODEC_ID_TGV, - AV_CODEC_ID_TGQ, - AV_CODEC_ID_TQI, - AV_CODEC_ID_AURA, - AV_CODEC_ID_AURA2, - AV_CODEC_ID_V210X, - AV_CODEC_ID_TMV, - AV_CODEC_ID_V210, - AV_CODEC_ID_DPX, - AV_CODEC_ID_MAD, - AV_CODEC_ID_FRWU, - AV_CODEC_ID_FLASHSV2, - AV_CODEC_ID_CDGRAPHICS, - AV_CODEC_ID_R210, - AV_CODEC_ID_ANM, - AV_CODEC_ID_BINKVIDEO, - AV_CODEC_ID_IFF_ILBM, -#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM - AV_CODEC_ID_KGV1, - AV_CODEC_ID_YOP, - AV_CODEC_ID_VP8, - AV_CODEC_ID_PICTOR, - AV_CODEC_ID_ANSI, - AV_CODEC_ID_A64_MULTI, - AV_CODEC_ID_A64_MULTI5, - AV_CODEC_ID_R10K, - AV_CODEC_ID_MXPEG, - AV_CODEC_ID_LAGARITH, - AV_CODEC_ID_PRORES, - AV_CODEC_ID_JV, - AV_CODEC_ID_DFA, - AV_CODEC_ID_WMV3IMAGE, - AV_CODEC_ID_VC1IMAGE, - AV_CODEC_ID_UTVIDEO, - AV_CODEC_ID_BMV_VIDEO, - AV_CODEC_ID_VBLE, - AV_CODEC_ID_DXTORY, - AV_CODEC_ID_V410, - AV_CODEC_ID_XWD, - AV_CODEC_ID_CDXL, - AV_CODEC_ID_XBM, - AV_CODEC_ID_ZEROCODEC, - AV_CODEC_ID_MSS1, - AV_CODEC_ID_MSA1, - AV_CODEC_ID_TSCC2, - AV_CODEC_ID_MTS2, - AV_CODEC_ID_CLLC, - AV_CODEC_ID_MSS2, - AV_CODEC_ID_VP9, - AV_CODEC_ID_AIC, - AV_CODEC_ID_ESCAPE130, - AV_CODEC_ID_G2M, - AV_CODEC_ID_WEBP, - AV_CODEC_ID_HNM4_VIDEO, - AV_CODEC_ID_HEVC, -#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC - AV_CODEC_ID_FIC, - AV_CODEC_ID_ALIAS_PIX, - AV_CODEC_ID_BRENDER_PIX, - AV_CODEC_ID_PAF_VIDEO, - AV_CODEC_ID_EXR, - AV_CODEC_ID_VP7, - AV_CODEC_ID_SANM, - AV_CODEC_ID_SGIRLE, - AV_CODEC_ID_MVC1, - AV_CODEC_ID_MVC2, - AV_CODEC_ID_HQX, - AV_CODEC_ID_TDSC, - AV_CODEC_ID_HQ_HQA, - AV_CODEC_ID_HAP, - AV_CODEC_ID_DDS, - AV_CODEC_ID_DXV, - AV_CODEC_ID_SCREENPRESSO, - AV_CODEC_ID_RSCC, - AV_CODEC_ID_AVS2, - AV_CODEC_ID_PGX, - AV_CODEC_ID_AVS3, - AV_CODEC_ID_MSP2, - AV_CODEC_ID_VVC, -#define AV_CODEC_ID_H266 AV_CODEC_ID_VVC - - AV_CODEC_ID_Y41P = 0x8000, - AV_CODEC_ID_AVRP, - AV_CODEC_ID_012V, - AV_CODEC_ID_AVUI, - AV_CODEC_ID_AYUV, - AV_CODEC_ID_TARGA_Y216, - AV_CODEC_ID_V308, - AV_CODEC_ID_V408, - AV_CODEC_ID_YUV4, - AV_CODEC_ID_AVRN, - AV_CODEC_ID_CPIA, - AV_CODEC_ID_XFACE, - AV_CODEC_ID_SNOW, - AV_CODEC_ID_SMVJPEG, - AV_CODEC_ID_APNG, - AV_CODEC_ID_DAALA, - AV_CODEC_ID_CFHD, - AV_CODEC_ID_TRUEMOTION2RT, - AV_CODEC_ID_M101, - AV_CODEC_ID_MAGICYUV, - AV_CODEC_ID_SHEERVIDEO, - AV_CODEC_ID_YLC, - AV_CODEC_ID_PSD, - AV_CODEC_ID_PIXLET, - AV_CODEC_ID_SPEEDHQ, - AV_CODEC_ID_FMVC, - AV_CODEC_ID_SCPR, - AV_CODEC_ID_CLEARVIDEO, - AV_CODEC_ID_XPM, - AV_CODEC_ID_AV1, - AV_CODEC_ID_BITPACKED, - AV_CODEC_ID_MSCC, - AV_CODEC_ID_SRGC, - AV_CODEC_ID_SVG, - AV_CODEC_ID_GDV, - AV_CODEC_ID_FITS, - AV_CODEC_ID_IMM4, - AV_CODEC_ID_PROSUMER, - AV_CODEC_ID_MWSC, - AV_CODEC_ID_WCMV, - AV_CODEC_ID_RASC, - AV_CODEC_ID_HYMT, - AV_CODEC_ID_ARBC, - AV_CODEC_ID_AGM, - AV_CODEC_ID_LSCR, - AV_CODEC_ID_VP4, - AV_CODEC_ID_IMM5, - AV_CODEC_ID_MVDV, - AV_CODEC_ID_MVHA, - AV_CODEC_ID_CDTOONS, - AV_CODEC_ID_MV30, - AV_CODEC_ID_NOTCHLC, - AV_CODEC_ID_PFM, - AV_CODEC_ID_MOBICLIP, - AV_CODEC_ID_PHOTOCD, - AV_CODEC_ID_IPU, - AV_CODEC_ID_ARGO, - AV_CODEC_ID_CRI, - AV_CODEC_ID_SIMBIOSIS_IMX, - AV_CODEC_ID_SGA_VIDEO, - - /* various PCM "codecs" */ - AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs - AV_CODEC_ID_PCM_S16LE = 0x10000, - AV_CODEC_ID_PCM_S16BE, - AV_CODEC_ID_PCM_U16LE, - AV_CODEC_ID_PCM_U16BE, - AV_CODEC_ID_PCM_S8, - AV_CODEC_ID_PCM_U8, - AV_CODEC_ID_PCM_MULAW, - AV_CODEC_ID_PCM_ALAW, - AV_CODEC_ID_PCM_S32LE, - AV_CODEC_ID_PCM_S32BE, - AV_CODEC_ID_PCM_U32LE, - AV_CODEC_ID_PCM_U32BE, - AV_CODEC_ID_PCM_S24LE, - AV_CODEC_ID_PCM_S24BE, - AV_CODEC_ID_PCM_U24LE, - AV_CODEC_ID_PCM_U24BE, - AV_CODEC_ID_PCM_S24DAUD, - AV_CODEC_ID_PCM_ZORK, - AV_CODEC_ID_PCM_S16LE_PLANAR, - AV_CODEC_ID_PCM_DVD, - AV_CODEC_ID_PCM_F32BE, - AV_CODEC_ID_PCM_F32LE, - AV_CODEC_ID_PCM_F64BE, - AV_CODEC_ID_PCM_F64LE, - AV_CODEC_ID_PCM_BLURAY, - AV_CODEC_ID_PCM_LXF, - AV_CODEC_ID_S302M, - AV_CODEC_ID_PCM_S8_PLANAR, - AV_CODEC_ID_PCM_S24LE_PLANAR, - AV_CODEC_ID_PCM_S32LE_PLANAR, - AV_CODEC_ID_PCM_S16BE_PLANAR, - - AV_CODEC_ID_PCM_S64LE = 0x10800, - AV_CODEC_ID_PCM_S64BE, - AV_CODEC_ID_PCM_F16LE, - AV_CODEC_ID_PCM_F24LE, - AV_CODEC_ID_PCM_VIDC, - AV_CODEC_ID_PCM_SGA, - - /* various ADPCM codecs */ - AV_CODEC_ID_ADPCM_IMA_QT = 0x11000, - AV_CODEC_ID_ADPCM_IMA_WAV, - AV_CODEC_ID_ADPCM_IMA_DK3, - AV_CODEC_ID_ADPCM_IMA_DK4, - AV_CODEC_ID_ADPCM_IMA_WS, - AV_CODEC_ID_ADPCM_IMA_SMJPEG, - AV_CODEC_ID_ADPCM_MS, - AV_CODEC_ID_ADPCM_4XM, - AV_CODEC_ID_ADPCM_XA, - AV_CODEC_ID_ADPCM_ADX, - AV_CODEC_ID_ADPCM_EA, - AV_CODEC_ID_ADPCM_G726, - AV_CODEC_ID_ADPCM_CT, - AV_CODEC_ID_ADPCM_SWF, - AV_CODEC_ID_ADPCM_YAMAHA, - AV_CODEC_ID_ADPCM_SBPRO_4, - AV_CODEC_ID_ADPCM_SBPRO_3, - AV_CODEC_ID_ADPCM_SBPRO_2, - AV_CODEC_ID_ADPCM_THP, - AV_CODEC_ID_ADPCM_IMA_AMV, - AV_CODEC_ID_ADPCM_EA_R1, - AV_CODEC_ID_ADPCM_EA_R3, - AV_CODEC_ID_ADPCM_EA_R2, - AV_CODEC_ID_ADPCM_IMA_EA_SEAD, - AV_CODEC_ID_ADPCM_IMA_EA_EACS, - AV_CODEC_ID_ADPCM_EA_XAS, - AV_CODEC_ID_ADPCM_EA_MAXIS_XA, - AV_CODEC_ID_ADPCM_IMA_ISS, - AV_CODEC_ID_ADPCM_G722, - AV_CODEC_ID_ADPCM_IMA_APC, - AV_CODEC_ID_ADPCM_VIMA, - - AV_CODEC_ID_ADPCM_AFC = 0x11800, - AV_CODEC_ID_ADPCM_IMA_OKI, - AV_CODEC_ID_ADPCM_DTK, - AV_CODEC_ID_ADPCM_IMA_RAD, - AV_CODEC_ID_ADPCM_G726LE, - AV_CODEC_ID_ADPCM_THP_LE, - AV_CODEC_ID_ADPCM_PSX, - AV_CODEC_ID_ADPCM_AICA, - AV_CODEC_ID_ADPCM_IMA_DAT4, - AV_CODEC_ID_ADPCM_MTAF, - AV_CODEC_ID_ADPCM_AGM, - AV_CODEC_ID_ADPCM_ARGO, - AV_CODEC_ID_ADPCM_IMA_SSI, - AV_CODEC_ID_ADPCM_ZORK, - AV_CODEC_ID_ADPCM_IMA_APM, - AV_CODEC_ID_ADPCM_IMA_ALP, - AV_CODEC_ID_ADPCM_IMA_MTF, - AV_CODEC_ID_ADPCM_IMA_CUNNING, - AV_CODEC_ID_ADPCM_IMA_MOFLEX, - - /* AMR */ - AV_CODEC_ID_AMR_NB = 0x12000, - AV_CODEC_ID_AMR_WB, - - /* RealAudio codecs*/ - AV_CODEC_ID_RA_144 = 0x13000, - AV_CODEC_ID_RA_288, - - /* various DPCM codecs */ - AV_CODEC_ID_ROQ_DPCM = 0x14000, - AV_CODEC_ID_INTERPLAY_DPCM, - AV_CODEC_ID_XAN_DPCM, - AV_CODEC_ID_SOL_DPCM, - - AV_CODEC_ID_SDX2_DPCM = 0x14800, - AV_CODEC_ID_GREMLIN_DPCM, - AV_CODEC_ID_DERF_DPCM, - - /* audio codecs */ - AV_CODEC_ID_MP2 = 0x15000, - AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 - AV_CODEC_ID_AAC, - AV_CODEC_ID_AC3, - AV_CODEC_ID_DTS, - AV_CODEC_ID_VORBIS, - AV_CODEC_ID_DVAUDIO, - AV_CODEC_ID_WMAV1, - AV_CODEC_ID_WMAV2, - AV_CODEC_ID_MACE3, - AV_CODEC_ID_MACE6, - AV_CODEC_ID_VMDAUDIO, - AV_CODEC_ID_FLAC, - AV_CODEC_ID_MP3ADU, - AV_CODEC_ID_MP3ON4, - AV_CODEC_ID_SHORTEN, - AV_CODEC_ID_ALAC, - AV_CODEC_ID_WESTWOOD_SND1, - AV_CODEC_ID_GSM, ///< as in Berlin toast format - AV_CODEC_ID_QDM2, - AV_CODEC_ID_COOK, - AV_CODEC_ID_TRUESPEECH, - AV_CODEC_ID_TTA, - AV_CODEC_ID_SMACKAUDIO, - AV_CODEC_ID_QCELP, - AV_CODEC_ID_WAVPACK, - AV_CODEC_ID_DSICINAUDIO, - AV_CODEC_ID_IMC, - AV_CODEC_ID_MUSEPACK7, - AV_CODEC_ID_MLP, - AV_CODEC_ID_GSM_MS, /* as found in WAV */ - AV_CODEC_ID_ATRAC3, - AV_CODEC_ID_APE, - AV_CODEC_ID_NELLYMOSER, - AV_CODEC_ID_MUSEPACK8, - AV_CODEC_ID_SPEEX, - AV_CODEC_ID_WMAVOICE, - AV_CODEC_ID_WMAPRO, - AV_CODEC_ID_WMALOSSLESS, - AV_CODEC_ID_ATRAC3P, - AV_CODEC_ID_EAC3, - AV_CODEC_ID_SIPR, - AV_CODEC_ID_MP1, - AV_CODEC_ID_TWINVQ, - AV_CODEC_ID_TRUEHD, - AV_CODEC_ID_MP4ALS, - AV_CODEC_ID_ATRAC1, - AV_CODEC_ID_BINKAUDIO_RDFT, - AV_CODEC_ID_BINKAUDIO_DCT, - AV_CODEC_ID_AAC_LATM, - AV_CODEC_ID_QDMC, - AV_CODEC_ID_CELT, - AV_CODEC_ID_G723_1, - AV_CODEC_ID_G729, - AV_CODEC_ID_8SVX_EXP, - AV_CODEC_ID_8SVX_FIB, - AV_CODEC_ID_BMV_AUDIO, - AV_CODEC_ID_RALF, - AV_CODEC_ID_IAC, - AV_CODEC_ID_ILBC, - AV_CODEC_ID_OPUS, - AV_CODEC_ID_COMFORT_NOISE, - AV_CODEC_ID_TAK, - AV_CODEC_ID_METASOUND, - AV_CODEC_ID_PAF_AUDIO, - AV_CODEC_ID_ON2AVC, - AV_CODEC_ID_DSS_SP, - AV_CODEC_ID_CODEC2, - - AV_CODEC_ID_FFWAVESYNTH = 0x15800, - AV_CODEC_ID_SONIC, - AV_CODEC_ID_SONIC_LS, - AV_CODEC_ID_EVRC, - AV_CODEC_ID_SMV, - AV_CODEC_ID_DSD_LSBF, - AV_CODEC_ID_DSD_MSBF, - AV_CODEC_ID_DSD_LSBF_PLANAR, - AV_CODEC_ID_DSD_MSBF_PLANAR, - AV_CODEC_ID_4GV, - AV_CODEC_ID_INTERPLAY_ACM, - AV_CODEC_ID_XMA1, - AV_CODEC_ID_XMA2, - AV_CODEC_ID_DST, - AV_CODEC_ID_ATRAC3AL, - AV_CODEC_ID_ATRAC3PAL, - AV_CODEC_ID_DOLBY_E, - AV_CODEC_ID_APTX, - AV_CODEC_ID_APTX_HD, - AV_CODEC_ID_SBC, - AV_CODEC_ID_ATRAC9, - AV_CODEC_ID_HCOM, - AV_CODEC_ID_ACELP_KELVIN, - AV_CODEC_ID_MPEGH_3D_AUDIO, - AV_CODEC_ID_SIREN, - AV_CODEC_ID_HCA, - AV_CODEC_ID_FASTAUDIO, - - /* subtitle codecs */ - AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. - AV_CODEC_ID_DVD_SUBTITLE = 0x17000, - AV_CODEC_ID_DVB_SUBTITLE, - AV_CODEC_ID_TEXT, ///< raw UTF-8 text - AV_CODEC_ID_XSUB, - AV_CODEC_ID_SSA, - AV_CODEC_ID_MOV_TEXT, - AV_CODEC_ID_HDMV_PGS_SUBTITLE, - AV_CODEC_ID_DVB_TELETEXT, - AV_CODEC_ID_SRT, - - AV_CODEC_ID_MICRODVD = 0x17800, - AV_CODEC_ID_EIA_608, - AV_CODEC_ID_JACOSUB, - AV_CODEC_ID_SAMI, - AV_CODEC_ID_REALTEXT, - AV_CODEC_ID_STL, - AV_CODEC_ID_SUBVIEWER1, - AV_CODEC_ID_SUBVIEWER, - AV_CODEC_ID_SUBRIP, - AV_CODEC_ID_WEBVTT, - AV_CODEC_ID_MPL2, - AV_CODEC_ID_VPLAYER, - AV_CODEC_ID_PJS, - AV_CODEC_ID_ASS, - AV_CODEC_ID_HDMV_TEXT_SUBTITLE, - AV_CODEC_ID_TTML, - AV_CODEC_ID_ARIB_CAPTION, - - /* other specific kind of codecs (generally used for attachments) */ - AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs. - AV_CODEC_ID_TTF = 0x18000, - - AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program stream. - AV_CODEC_ID_EPG, - AV_CODEC_ID_BINTEXT = 0x18800, - AV_CODEC_ID_XBIN, - AV_CODEC_ID_IDF, - AV_CODEC_ID_OTF, - AV_CODEC_ID_SMPTE_KLV, - AV_CODEC_ID_DVD_NAV, - AV_CODEC_ID_TIMED_ID3, - AV_CODEC_ID_BIN_DATA, - - - AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it - - AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS - * stream (only used by libavformat) */ - AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems - * stream (only used by libavformat) */ - AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. - AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket -}; - -/** - * Get the type of the given codec. - */ -enum AVMediaType avcodec_get_type(enum AVCodecID codec_id); - -/** - * Get the name of a codec. - * @return a static string identifying the codec; never NULL - */ -const char *avcodec_get_name(enum AVCodecID id); - -/** - * @} - */ - -#endif // AVCODEC_CODEC_ID_H diff --git a/prebuilts/arm/include/libavcodec/codec_par.h b/prebuilts/arm/include/libavcodec/codec_par.h deleted file mode 100644 index 948758e..0000000 --- a/prebuilts/arm/include/libavcodec/codec_par.h +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Codec parameters public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_PAR_H -#define AVCODEC_CODEC_PAR_H - -#include - -#include "libavutil/avutil.h" -#include "libavutil/rational.h" -#include "libavutil/pixfmt.h" - -#include "codec_id.h" - -/** - * @addtogroup lavc_core - */ - -enum AVFieldOrder { - AV_FIELD_UNKNOWN, - AV_FIELD_PROGRESSIVE, - AV_FIELD_TT, //< Top coded_first, top displayed first - AV_FIELD_BB, //< Bottom coded first, bottom displayed first - AV_FIELD_TB, //< Top coded first, bottom displayed first - AV_FIELD_BT, //< Bottom coded first, top displayed first -}; - -/** - * This struct describes the properties of an encoded stream. - * - * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must - * be allocated with avcodec_parameters_alloc() and freed with - * avcodec_parameters_free(). - */ -typedef struct AVCodecParameters { - /** - * General type of the encoded data. - */ - enum AVMediaType codec_type; - /** - * Specific type of the encoded data (the codec used). - */ - enum AVCodecID codec_id; - /** - * Additional information about the codec (corresponds to the AVI FOURCC). - */ - uint32_t codec_tag; - - /** - * Extra binary data needed for initializing the decoder, codec-dependent. - * - * Must be allocated with av_malloc() and will be freed by - * avcodec_parameters_free(). The allocated size of extradata must be at - * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding - * bytes zeroed. - */ - uint8_t *extradata; - /** - * Size of the extradata content in bytes. - */ - int extradata_size; - - /** - * - video: the pixel format, the value corresponds to enum AVPixelFormat. - * - audio: the sample format, the value corresponds to enum AVSampleFormat. - */ - int format; - - /** - * The average bitrate of the encoded data (in bits per second). - */ - int64_t bit_rate; - - /** - * The number of bits per sample in the codedwords. - * - * This is basically the bitrate per sample. It is mandatory for a bunch of - * formats to actually decode them. It's the number of bits for one sample in - * the actual coded bitstream. - * - * This could be for example 4 for ADPCM - * For PCM formats this matches bits_per_raw_sample - * Can be 0 - */ - int bits_per_coded_sample; - - /** - * This is the number of valid bits in each output sample. If the - * sample format has more bits, the least significant bits are additional - * padding bits, which are always 0. Use right shifts to reduce the sample - * to its actual size. For example, audio formats with 24 bit samples will - * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32. - * To get the original sample use "(int32_t)sample >> 8"." - * - * For ADPCM this might be 12 or 16 or similar - * Can be 0 - */ - int bits_per_raw_sample; - - /** - * Codec-specific bitstream restrictions that the stream conforms to. - */ - int profile; - int level; - - /** - * Video only. The dimensions of the video frame in pixels. - */ - int width; - int height; - - /** - * Video only. The aspect ratio (width / height) which a single pixel - * should have when displayed. - * - * When the aspect ratio is unknown / undefined, the numerator should be - * set to 0 (the denominator may have any value). - */ - AVRational sample_aspect_ratio; - - /** - * Video only. The order of the fields in interlaced video. - */ - enum AVFieldOrder field_order; - - /** - * Video only. Additional colorspace characteristics. - */ - enum AVColorRange color_range; - enum AVColorPrimaries color_primaries; - enum AVColorTransferCharacteristic color_trc; - enum AVColorSpace color_space; - enum AVChromaLocation chroma_location; - - /** - * Video only. Number of delayed frames. - */ - int video_delay; - - /** - * Audio only. The channel layout bitmask. May be 0 if the channel layout is - * unknown or unspecified, otherwise the number of bits set must be equal to - * the channels field. - */ - uint64_t channel_layout; - /** - * Audio only. The number of audio channels. - */ - int channels; - /** - * Audio only. The number of audio samples per second. - */ - int sample_rate; - /** - * Audio only. The number of bytes per coded audio frame, required by some - * formats. - * - * Corresponds to nBlockAlign in WAVEFORMATEX. - */ - int block_align; - /** - * Audio only. Audio frame size, if known. Required by some formats to be static. - */ - int frame_size; - - /** - * Audio only. The amount of padding (in samples) inserted by the encoder at - * the beginning of the audio. I.e. this number of leading decoded samples - * must be discarded by the caller to get the original audio without leading - * padding. - */ - int initial_padding; - /** - * Audio only. The amount of padding (in samples) appended by the encoder to - * the end of the audio. I.e. this number of decoded samples must be - * discarded by the caller from the end of the stream to get the original - * audio without any trailing padding. - */ - int trailing_padding; - /** - * Audio only. Number of samples to skip after a discontinuity. - */ - int seek_preroll; -} AVCodecParameters; - -/** - * Allocate a new AVCodecParameters and set its fields to default values - * (unknown/invalid/0). The returned struct must be freed with - * avcodec_parameters_free(). - */ -AVCodecParameters *avcodec_parameters_alloc(void); - -/** - * Free an AVCodecParameters instance and everything associated with it and - * write NULL to the supplied pointer. - */ -void avcodec_parameters_free(AVCodecParameters **par); - -/** - * Copy the contents of src to dst. Any allocated fields in dst are freed and - * replaced with newly allocated duplicates of the corresponding fields in src. - * - * @return >= 0 on success, a negative AVERROR code on failure. - */ -int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src); - - -/** - * @} - */ - -#endif // AVCODEC_CODEC_PAR_H diff --git a/prebuilts/arm/include/libavcodec/d3d11va.h b/prebuilts/arm/include/libavcodec/d3d11va.h deleted file mode 100644 index 6816b6c..0000000 --- a/prebuilts/arm/include/libavcodec/d3d11va.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Direct3D11 HW acceleration - * - * copyright (c) 2009 Laurent Aimar - * copyright (c) 2015 Steve Lhomme - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_D3D11VA_H -#define AVCODEC_D3D11VA_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_d3d11va - * Public libavcodec D3D11VA header. - */ - -#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0602 -#endif - -#include -#include - -/** - * @defgroup lavc_codec_hwaccel_d3d11va Direct3D11 - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for Direct3D11 and old UVD/UVD+ ATI video cards -#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for Direct3D11 and old Intel GPUs with ClearVideo interface - -/** - * This structure is used to provides the necessary configurations and data - * to the Direct3D11 FFmpeg HWAccel implementation. - * - * The application must make it available as AVCodecContext.hwaccel_context. - * - * Use av_d3d11va_alloc_context() exclusively to allocate an AVD3D11VAContext. - */ -typedef struct AVD3D11VAContext { - /** - * D3D11 decoder object - */ - ID3D11VideoDecoder *decoder; - - /** - * D3D11 VideoContext - */ - ID3D11VideoContext *video_context; - - /** - * D3D11 configuration used to create the decoder - */ - D3D11_VIDEO_DECODER_CONFIG *cfg; - - /** - * The number of surface in the surface array - */ - unsigned surface_count; - - /** - * The array of Direct3D surfaces used to create the decoder - */ - ID3D11VideoDecoderOutputView **surface; - - /** - * A bit field configuring the workarounds needed for using the decoder - */ - uint64_t workaround; - - /** - * Private to the FFmpeg AVHWAccel implementation - */ - unsigned report_id; - - /** - * Mutex to access video_context - */ - HANDLE context_mutex; -} AVD3D11VAContext; - -/** - * Allocate an AVD3D11VAContext. - * - * @return Newly-allocated AVD3D11VAContext or NULL on failure. - */ -AVD3D11VAContext *av_d3d11va_alloc_context(void); - -/** - * @} - */ - -#endif /* AVCODEC_D3D11VA_H */ diff --git a/prebuilts/arm/include/libavcodec/dirac.h b/prebuilts/arm/include/libavcodec/dirac.h deleted file mode 100644 index e6d9d34..0000000 --- a/prebuilts/arm/include/libavcodec/dirac.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2007 Marco Gerards - * Copyright (C) 2009 David Conrad - * Copyright (C) 2011 Jordi Ortiz - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DIRAC_H -#define AVCODEC_DIRAC_H - -/** - * @file - * Interface to Dirac Decoder/Encoder - * @author Marco Gerards - * @author David Conrad - * @author Jordi Ortiz - */ - -#include "avcodec.h" - -/** - * The spec limits the number of wavelet decompositions to 4 for both - * level 1 (VC-2) and 128 (long-gop default). - * 5 decompositions is the maximum before >16-bit buffers are needed. - * Schroedinger allows this for DD 9,7 and 13,7 wavelets only, limiting - * the others to 4 decompositions (or 3 for the fidelity filter). - * - * We use this instead of MAX_DECOMPOSITIONS to save some memory. - */ -#define MAX_DWT_LEVELS 5 - -/** - * Parse code values: - * - * Dirac Specification -> - * 9.6.1 Table 9.1 - * - * VC-2 Specification -> - * 10.4.1 Table 10.1 - */ - -enum DiracParseCodes { - DIRAC_PCODE_SEQ_HEADER = 0x00, - DIRAC_PCODE_END_SEQ = 0x10, - DIRAC_PCODE_AUX = 0x20, - DIRAC_PCODE_PAD = 0x30, - DIRAC_PCODE_PICTURE_CODED = 0x08, - DIRAC_PCODE_PICTURE_RAW = 0x48, - DIRAC_PCODE_PICTURE_LOW_DEL = 0xC8, - DIRAC_PCODE_PICTURE_HQ = 0xE8, - DIRAC_PCODE_INTER_NOREF_CO1 = 0x0A, - DIRAC_PCODE_INTER_NOREF_CO2 = 0x09, - DIRAC_PCODE_INTER_REF_CO1 = 0x0D, - DIRAC_PCODE_INTER_REF_CO2 = 0x0E, - DIRAC_PCODE_INTRA_REF_CO = 0x0C, - DIRAC_PCODE_INTRA_REF_RAW = 0x4C, - DIRAC_PCODE_INTRA_REF_PICT = 0xCC, - DIRAC_PCODE_MAGIC = 0x42424344, -}; - -typedef struct DiracVersionInfo { - int major; - int minor; -} DiracVersionInfo; - -typedef struct AVDiracSeqHeader { - unsigned width; - unsigned height; - uint8_t chroma_format; ///< 0: 444 1: 422 2: 420 - - uint8_t interlaced; - uint8_t top_field_first; - - uint8_t frame_rate_index; ///< index into dirac_frame_rate[] - uint8_t aspect_ratio_index; ///< index into dirac_aspect_ratio[] - - uint16_t clean_width; - uint16_t clean_height; - uint16_t clean_left_offset; - uint16_t clean_right_offset; - - uint8_t pixel_range_index; ///< index into dirac_pixel_range_presets[] - uint8_t color_spec_index; ///< index into dirac_color_spec_presets[] - - int profile; - int level; - - AVRational framerate; - AVRational sample_aspect_ratio; - - enum AVPixelFormat pix_fmt; - enum AVColorRange color_range; - enum AVColorPrimaries color_primaries; - enum AVColorTransferCharacteristic color_trc; - enum AVColorSpace colorspace; - - DiracVersionInfo version; - int bit_depth; -} AVDiracSeqHeader; - -/** - * Parse a Dirac sequence header. - * - * @param dsh this function will allocate and fill an AVDiracSeqHeader struct - * and write it into this pointer. The caller must free it with - * av_free(). - * @param buf the data buffer - * @param buf_size the size of the data buffer in bytes - * @param log_ctx if non-NULL, this function will log errors here - * @return 0 on success, a negative AVERROR code on failure - */ -int av_dirac_parse_sequence_header(AVDiracSeqHeader **dsh, - const uint8_t *buf, size_t buf_size, - void *log_ctx); - -#endif /* AVCODEC_DIRAC_H */ diff --git a/prebuilts/arm/include/libavcodec/dv_profile.h b/prebuilts/arm/include/libavcodec/dv_profile.h deleted file mode 100644 index 9380a66..0000000 --- a/prebuilts/arm/include/libavcodec/dv_profile.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DV_PROFILE_H -#define AVCODEC_DV_PROFILE_H - -#include - -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" -#include "avcodec.h" - -/* minimum number of bytes to read from a DV stream in order to - * determine the profile */ -#define DV_PROFILE_BYTES (6 * 80) /* 6 DIF blocks */ - - -/* - * AVDVProfile is used to express the differences between various - * DV flavors. For now it's primarily used for differentiating - * 525/60 and 625/50, but the plans are to use it for various - * DV specs as well (e.g. SMPTE314M vs. IEC 61834). - */ -typedef struct AVDVProfile { - int dsf; /* value of the dsf in the DV header */ - int video_stype; /* stype for VAUX source pack */ - int frame_size; /* total size of one frame in bytes */ - int difseg_size; /* number of DIF segments per DIF channel */ - int n_difchan; /* number of DIF channels per frame */ - AVRational time_base; /* 1/framerate */ - int ltc_divisor; /* FPS from the LTS standpoint */ - int height; /* picture height in pixels */ - int width; /* picture width in pixels */ - AVRational sar[2]; /* sample aspect ratios for 4:3 and 16:9 */ - enum AVPixelFormat pix_fmt; /* picture pixel format */ - int bpm; /* blocks per macroblock */ - const uint8_t *block_sizes; /* AC block sizes, in bits */ - int audio_stride; /* size of audio_shuffle table */ - int audio_min_samples[3]; /* min amount of audio samples */ - /* for 48kHz, 44.1kHz and 32kHz */ - int audio_samples_dist[5]; /* how many samples are supposed to be */ - /* in each frame in a 5 frames window */ - const uint8_t (*audio_shuffle)[9]; /* PCM shuffling table */ -} AVDVProfile; - -/** - * Get a DV profile for the provided compressed frame. - * - * @param sys the profile used for the previous frame, may be NULL - * @param frame the compressed data buffer - * @param buf_size size of the buffer in bytes - * @return the DV profile for the supplied data or NULL on failure - */ -const AVDVProfile *av_dv_frame_profile(const AVDVProfile *sys, - const uint8_t *frame, unsigned buf_size); - -/** - * Get a DV profile for the provided stream parameters. - */ -const AVDVProfile *av_dv_codec_profile(int width, int height, enum AVPixelFormat pix_fmt); - -/** - * Get a DV profile for the provided stream parameters. - * The frame rate is used as a best-effort parameter. - */ -const AVDVProfile *av_dv_codec_profile2(int width, int height, enum AVPixelFormat pix_fmt, AVRational frame_rate); - -#endif /* AVCODEC_DV_PROFILE_H */ diff --git a/prebuilts/arm/include/libavcodec/dxva2.h b/prebuilts/arm/include/libavcodec/dxva2.h deleted file mode 100644 index 22c9399..0000000 --- a/prebuilts/arm/include/libavcodec/dxva2.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * DXVA2 HW acceleration - * - * copyright (c) 2009 Laurent Aimar - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DXVA2_H -#define AVCODEC_DXVA2_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_dxva2 - * Public libavcodec DXVA2 header. - */ - -#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0602 -#endif - -#include -#include -#include - -/** - * @defgroup lavc_codec_hwaccel_dxva2 DXVA2 - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards -#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for DXVA2 and old Intel GPUs with ClearVideo interface - -/** - * This structure is used to provides the necessary configurations and data - * to the DXVA2 FFmpeg HWAccel implementation. - * - * The application must make it available as AVCodecContext.hwaccel_context. - */ -struct dxva_context { - /** - * DXVA2 decoder object - */ - IDirectXVideoDecoder *decoder; - - /** - * DXVA2 configuration used to create the decoder - */ - const DXVA2_ConfigPictureDecode *cfg; - - /** - * The number of surface in the surface array - */ - unsigned surface_count; - - /** - * The array of Direct3D surfaces used to create the decoder - */ - LPDIRECT3DSURFACE9 *surface; - - /** - * A bit field configuring the workarounds needed for using the decoder - */ - uint64_t workaround; - - /** - * Private to the FFmpeg AVHWAccel implementation - */ - unsigned report_id; -}; - -/** - * @} - */ - -#endif /* AVCODEC_DXVA2_H */ diff --git a/prebuilts/arm/include/libavcodec/jni.h b/prebuilts/arm/include/libavcodec/jni.h deleted file mode 100644 index dd99e92..0000000 --- a/prebuilts/arm/include/libavcodec/jni.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * JNI public API functions - * - * Copyright (c) 2015-2016 Matthieu Bouron - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_JNI_H -#define AVCODEC_JNI_H - -/* - * Manually set a Java virtual machine which will be used to retrieve the JNI - * environment. Once a Java VM is set it cannot be changed afterwards, meaning - * you can call multiple times av_jni_set_java_vm with the same Java VM pointer - * however it will error out if you try to set a different Java VM. - * - * @param vm Java virtual machine - * @param log_ctx context used for logging, can be NULL - * @return 0 on success, < 0 otherwise - */ -int av_jni_set_java_vm(void *vm, void *log_ctx); - -/* - * Get the Java virtual machine which has been set with av_jni_set_java_vm. - * - * @param vm Java virtual machine - * @return a pointer to the Java virtual machine - */ -void *av_jni_get_java_vm(void *log_ctx); - -#endif /* AVCODEC_JNI_H */ diff --git a/prebuilts/arm/include/libavcodec/mediacodec.h b/prebuilts/arm/include/libavcodec/mediacodec.h deleted file mode 100644 index 4c8545d..0000000 --- a/prebuilts/arm/include/libavcodec/mediacodec.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Android MediaCodec public API - * - * Copyright (c) 2016 Matthieu Bouron - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_MEDIACODEC_H -#define AVCODEC_MEDIACODEC_H - -#include "libavcodec/avcodec.h" - -/** - * This structure holds a reference to a android/view/Surface object that will - * be used as output by the decoder. - * - */ -typedef struct AVMediaCodecContext { - - /** - * android/view/Surface object reference. - */ - void *surface; - -} AVMediaCodecContext; - -/** - * Allocate and initialize a MediaCodec context. - * - * When decoding with MediaCodec is finished, the caller must free the - * MediaCodec context with av_mediacodec_default_free. - * - * @return a pointer to a newly allocated AVMediaCodecContext on success, NULL otherwise - */ -AVMediaCodecContext *av_mediacodec_alloc_context(void); - -/** - * Convenience function that sets up the MediaCodec context. - * - * @param avctx codec context - * @param ctx MediaCodec context to initialize - * @param surface reference to an android/view/Surface - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_default_init(AVCodecContext *avctx, AVMediaCodecContext *ctx, void *surface); - -/** - * This function must be called to free the MediaCodec context initialized with - * av_mediacodec_default_init(). - * - * @param avctx codec context - */ -void av_mediacodec_default_free(AVCodecContext *avctx); - -/** - * Opaque structure representing a MediaCodec buffer to render. - */ -typedef struct MediaCodecBuffer AVMediaCodecBuffer; - -/** - * Release a MediaCodec buffer and render it to the surface that is associated - * with the decoder. This function should only be called once on a given - * buffer, once released the underlying buffer returns to the codec, thus - * subsequent calls to this function will have no effect. - * - * @param buffer the buffer to render - * @param render 1 to release and render the buffer to the surface or 0 to - * discard the buffer - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_release_buffer(AVMediaCodecBuffer *buffer, int render); - -/** - * Release a MediaCodec buffer and render it at the given time to the surface - * that is associated with the decoder. The timestamp must be within one second - * of the current java/lang/System#nanoTime() (which is implemented using - * CLOCK_MONOTONIC on Android). See the Android MediaCodec documentation - * of android/media/MediaCodec#releaseOutputBuffer(int,long) for more details. - * - * @param buffer the buffer to render - * @param time timestamp in nanoseconds of when to render the buffer - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_render_buffer_at_time(AVMediaCodecBuffer *buffer, int64_t time); - -#endif /* AVCODEC_MEDIACODEC_H */ diff --git a/prebuilts/arm/include/libavcodec/packet.h b/prebuilts/arm/include/libavcodec/packet.h deleted file mode 100644 index ca18ae6..0000000 --- a/prebuilts/arm/include/libavcodec/packet.h +++ /dev/null @@ -1,774 +0,0 @@ -/* - * AVPacket public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_PACKET_H -#define AVCODEC_PACKET_H - -#include -#include - -#include "libavutil/attributes.h" -#include "libavutil/buffer.h" -#include "libavutil/dict.h" -#include "libavutil/rational.h" - -#include "libavcodec/version.h" - -/** - * @defgroup lavc_packet AVPacket - * - * Types and functions for working with AVPacket. - * @{ - */ -enum AVPacketSideDataType { - /** - * An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE - * bytes worth of palette. This side data signals that a new palette is - * present. - */ - AV_PKT_DATA_PALETTE, - - /** - * The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format - * that the extradata buffer was changed and the receiving side should - * act upon it appropriately. The new extradata is embedded in the side - * data buffer and should be immediately used for processing the current - * frame or packet. - */ - AV_PKT_DATA_NEW_EXTRADATA, - - /** - * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: - * @code - * u32le param_flags - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) - * s32le channel_count - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) - * u64le channel_layout - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) - * s32le sample_rate - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) - * s32le width - * s32le height - * @endcode - */ - AV_PKT_DATA_PARAM_CHANGE, - - /** - * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of - * structures with info about macroblocks relevant to splitting the - * packet into smaller packets on macroblock edges (e.g. as for RFC 2190). - * That is, it does not necessarily contain info about all macroblocks, - * as long as the distance between macroblocks in the info is smaller - * than the target payload size. - * Each MB info structure is 12 bytes, and is laid out as follows: - * @code - * u32le bit offset from the start of the packet - * u8 current quantizer at the start of the macroblock - * u8 GOB number - * u16le macroblock address within the GOB - * u8 horizontal MV predictor - * u8 vertical MV predictor - * u8 horizontal MV predictor for block number 3 - * u8 vertical MV predictor for block number 3 - * @endcode - */ - AV_PKT_DATA_H263_MB_INFO, - - /** - * This side data should be associated with an audio stream and contains - * ReplayGain information in form of the AVReplayGain struct. - */ - AV_PKT_DATA_REPLAYGAIN, - - /** - * This side data contains a 3x3 transformation matrix describing an affine - * transformation that needs to be applied to the decoded video frames for - * correct presentation. - * - * See libavutil/display.h for a detailed description of the data. - */ - AV_PKT_DATA_DISPLAYMATRIX, - - /** - * This side data should be associated with a video stream and contains - * Stereoscopic 3D information in form of the AVStereo3D struct. - */ - AV_PKT_DATA_STEREO3D, - - /** - * This side data should be associated with an audio stream and corresponds - * to enum AVAudioServiceType. - */ - AV_PKT_DATA_AUDIO_SERVICE_TYPE, - - /** - * This side data contains quality related information from the encoder. - * @code - * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad). - * u8 picture type - * u8 error count - * u16 reserved - * u64le[error count] sum of squared differences between encoder in and output - * @endcode - */ - AV_PKT_DATA_QUALITY_STATS, - - /** - * This side data contains an integer value representing the stream index - * of a "fallback" track. A fallback track indicates an alternate - * track to use when the current track can not be decoded for some reason. - * e.g. no decoder available for codec. - */ - AV_PKT_DATA_FALLBACK_TRACK, - - /** - * This side data corresponds to the AVCPBProperties struct. - */ - AV_PKT_DATA_CPB_PROPERTIES, - - /** - * Recommmends skipping the specified number of samples - * @code - * u32le number of samples to skip from start of this packet - * u32le number of samples to skip from end of this packet - * u8 reason for start skip - * u8 reason for end skip (0=padding silence, 1=convergence) - * @endcode - */ - AV_PKT_DATA_SKIP_SAMPLES, - - /** - * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that - * the packet may contain "dual mono" audio specific to Japanese DTV - * and if it is true, recommends only the selected channel to be used. - * @code - * u8 selected channels (0=mail/left, 1=sub/right, 2=both) - * @endcode - */ - AV_PKT_DATA_JP_DUALMONO, - - /** - * A list of zero terminated key/value strings. There is no end marker for - * the list, so it is required to rely on the side data size to stop. - */ - AV_PKT_DATA_STRINGS_METADATA, - - /** - * Subtitle event position - * @code - * u32le x1 - * u32le y1 - * u32le x2 - * u32le y2 - * @endcode - */ - AV_PKT_DATA_SUBTITLE_POSITION, - - /** - * Data found in BlockAdditional element of matroska container. There is - * no end marker for the data, so it is required to rely on the side data - * size to recognize the end. 8 byte id (as found in BlockAddId) followed - * by data. - */ - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, - - /** - * The optional first identifier line of a WebVTT cue. - */ - AV_PKT_DATA_WEBVTT_IDENTIFIER, - - /** - * The optional settings (rendering instructions) that immediately - * follow the timestamp specifier of a WebVTT cue. - */ - AV_PKT_DATA_WEBVTT_SETTINGS, - - /** - * A list of zero terminated key/value strings. There is no end marker for - * the list, so it is required to rely on the side data size to stop. This - * side data includes updated metadata which appeared in the stream. - */ - AV_PKT_DATA_METADATA_UPDATE, - - /** - * MPEGTS stream ID as uint8_t, this is required to pass the stream ID - * information from the demuxer to the corresponding muxer. - */ - AV_PKT_DATA_MPEGTS_STREAM_ID, - - /** - * Mastering display metadata (based on SMPTE-2086:2014). This metadata - * should be associated with a video stream and contains data in the form - * of the AVMasteringDisplayMetadata struct. - */ - AV_PKT_DATA_MASTERING_DISPLAY_METADATA, - - /** - * This side data should be associated with a video stream and corresponds - * to the AVSphericalMapping structure. - */ - AV_PKT_DATA_SPHERICAL, - - /** - * Content light level (based on CTA-861.3). This metadata should be - * associated with a video stream and contains data in the form of the - * AVContentLightMetadata struct. - */ - AV_PKT_DATA_CONTENT_LIGHT_LEVEL, - - /** - * ATSC A53 Part 4 Closed Captions. This metadata should be associated with - * a video stream. A53 CC bitstream is stored as uint8_t in AVPacketSideData.data. - * The number of bytes of CC data is AVPacketSideData.size. - */ - AV_PKT_DATA_A53_CC, - - /** - * This side data is encryption initialization data. - * The format is not part of ABI, use av_encryption_init_info_* methods to - * access. - */ - AV_PKT_DATA_ENCRYPTION_INIT_INFO, - - /** - * This side data contains encryption info for how to decrypt the packet. - * The format is not part of ABI, use av_encryption_info_* methods to access. - */ - AV_PKT_DATA_ENCRYPTION_INFO, - - /** - * Active Format Description data consisting of a single byte as specified - * in ETSI TS 101 154 using AVActiveFormatDescription enum. - */ - AV_PKT_DATA_AFD, - - /** - * Producer Reference Time data corresponding to the AVProducerReferenceTime struct, - * usually exported by some encoders (on demand through the prft flag set in the - * AVCodecContext export_side_data field). - */ - AV_PKT_DATA_PRFT, - - /** - * ICC profile data consisting of an opaque octet buffer following the - * format described by ISO 15076-1. - */ - AV_PKT_DATA_ICC_PROFILE, - - /** - * DOVI configuration - * ref: - * dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2, section 2.2 - * dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2, section 3.3 - * Tags are stored in struct AVDOVIDecoderConfigurationRecord. - */ - AV_PKT_DATA_DOVI_CONF, - - /** - * Timecode which conforms to SMPTE ST 12-1:2014. The data is an array of 4 uint32_t - * where the first uint32_t describes how many (1-3) of the other timecodes are used. - * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() - * function in libavutil/timecode.h. - */ - AV_PKT_DATA_S12M_TIMECODE, - - /** - * The number of side data types. - * This is not part of the public API/ABI in the sense that it may - * change when new side data types are added. - * This must stay the last enum value. - * If its value becomes huge, some code using it - * needs to be updated as it assumes it to be smaller than other limits. - */ - AV_PKT_DATA_NB -}; - -#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED - -typedef struct AVPacketSideData { - uint8_t *data; -#if FF_API_BUFFER_SIZE_T - int size; -#else - size_t size; -#endif - enum AVPacketSideDataType type; -} AVPacketSideData; - -/** - * This structure stores compressed data. It is typically exported by demuxers - * and then passed as input to decoders, or received as output from encoders and - * then passed to muxers. - * - * For video, it should typically contain one compressed frame. For audio it may - * contain several compressed frames. Encoders are allowed to output empty - * packets, with no compressed data, containing only side data - * (e.g. to update some stream parameters at the end of encoding). - * - * The semantics of data ownership depends on the buf field. - * If it is set, the packet data is dynamically allocated and is - * valid indefinitely until a call to av_packet_unref() reduces the - * reference count to 0. - * - * If the buf field is not set av_packet_ref() would make a copy instead - * of increasing the reference count. - * - * The side data is always allocated with av_malloc(), copied by - * av_packet_ref() and freed by av_packet_unref(). - * - * sizeof(AVPacket) being a part of the public ABI is deprecated. once - * av_init_packet() is removed, new packets will only be able to be allocated - * with av_packet_alloc(), and new fields may be added to the end of the struct - * with a minor bump. - * - * @see av_packet_alloc - * @see av_packet_ref - * @see av_packet_unref - */ -typedef struct AVPacket { - /** - * A reference to the reference-counted buffer where the packet data is - * stored. - * May be NULL, then the packet data is not reference-counted. - */ - AVBufferRef *buf; - /** - * Presentation timestamp in AVStream->time_base units; the time at which - * the decompressed packet will be presented to the user. - * Can be AV_NOPTS_VALUE if it is not stored in the file. - * pts MUST be larger or equal to dts as presentation cannot happen before - * decompression, unless one wants to view hex dumps. Some formats misuse - * the terms dts and pts/cts to mean something different. Such timestamps - * must be converted to true pts/dts before they are stored in AVPacket. - */ - int64_t pts; - /** - * Decompression timestamp in AVStream->time_base units; the time at which - * the packet is decompressed. - * Can be AV_NOPTS_VALUE if it is not stored in the file. - */ - int64_t dts; - uint8_t *data; - int size; - int stream_index; - /** - * A combination of AV_PKT_FLAG values - */ - int flags; - /** - * Additional packet data that can be provided by the container. - * Packet can contain several types of side information. - */ - AVPacketSideData *side_data; - int side_data_elems; - - /** - * Duration of this packet in AVStream->time_base units, 0 if unknown. - * Equals next_pts - this_pts in presentation order. - */ - int64_t duration; - - int64_t pos; ///< byte position in stream, -1 if unknown - -#if FF_API_CONVERGENCE_DURATION - /** - * @deprecated Same as the duration field, but as int64_t. This was required - * for Matroska subtitles, whose duration values could overflow when the - * duration field was still an int. - */ - attribute_deprecated - int64_t convergence_duration; -#endif -} AVPacket; - -#if FF_API_INIT_PACKET -attribute_deprecated -typedef struct AVPacketList { - AVPacket pkt; - struct AVPacketList *next; -} AVPacketList; -#endif - -#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe -#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted -/** - * Flag is used to discard packets which are required to maintain valid - * decoder state but are not required for output and should be dropped - * after decoding. - **/ -#define AV_PKT_FLAG_DISCARD 0x0004 -/** - * The packet comes from a trusted source. - * - * Otherwise-unsafe constructs such as arbitrary pointers to data - * outside the packet may be followed. - */ -#define AV_PKT_FLAG_TRUSTED 0x0008 -/** - * Flag is used to indicate packets that contain frames that can - * be discarded by the decoder. I.e. Non-reference frames. - */ -#define AV_PKT_FLAG_DISPOSABLE 0x0010 - -enum AVSideDataParamChangeFlags { - AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001, - AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002, - AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004, - AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008, -}; - -/** - * Allocate an AVPacket and set its fields to default values. The resulting - * struct must be freed using av_packet_free(). - * - * @return An AVPacket filled with default values or NULL on failure. - * - * @note this only allocates the AVPacket itself, not the data buffers. Those - * must be allocated through other means such as av_new_packet. - * - * @see av_new_packet - */ -AVPacket *av_packet_alloc(void); - -/** - * Create a new packet that references the same data as src. - * - * This is a shortcut for av_packet_alloc()+av_packet_ref(). - * - * @return newly created AVPacket on success, NULL on error. - * - * @see av_packet_alloc - * @see av_packet_ref - */ -AVPacket *av_packet_clone(const AVPacket *src); - -/** - * Free the packet, if the packet is reference counted, it will be - * unreferenced first. - * - * @param pkt packet to be freed. The pointer will be set to NULL. - * @note passing NULL is a no-op. - */ -void av_packet_free(AVPacket **pkt); - -#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 - -/** - * Allocate the payload of a packet and initialize its fields with - * default values. - * - * @param pkt packet - * @param size wanted payload size - * @return 0 if OK, AVERROR_xxx otherwise - */ -int av_new_packet(AVPacket *pkt, int size); - -/** - * Reduce packet size, correctly zeroing padding - * - * @param pkt packet - * @param size new size - */ -void av_shrink_packet(AVPacket *pkt, int size); - -/** - * Increase packet size, correctly zeroing padding - * - * @param pkt packet - * @param grow_by number of bytes by which to increase the size of the packet - */ -int av_grow_packet(AVPacket *pkt, int grow_by); - -/** - * Initialize a reference-counted packet from av_malloc()ed data. - * - * @param pkt packet to be initialized. This function will set the data, size, - * and buf fields, all others are left untouched. - * @param data Data allocated by av_malloc() to be used as packet data. If this - * function returns successfully, the data is owned by the underlying AVBuffer. - * The caller may not access the data through other means. - * @param size size of data in bytes, without the padding. I.e. the full buffer - * size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE. - * - * @return 0 on success, a negative AVERROR on error - */ -int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size); - -#if FF_API_AVPACKET_OLD_API -/** - * @warning This is a hack - the packet memory allocation stuff is broken. The - * packet is allocated if it was not really allocated. - * - * @deprecated Use av_packet_ref or av_packet_make_refcounted - */ -attribute_deprecated -int av_dup_packet(AVPacket *pkt); -/** - * Copy packet, including contents - * - * @return 0 on success, negative AVERROR on fail - * - * @deprecated Use av_packet_ref - */ -attribute_deprecated -int av_copy_packet(AVPacket *dst, const AVPacket *src); - -/** - * Copy packet side data - * - * @return 0 on success, negative AVERROR on fail - * - * @deprecated Use av_packet_copy_props - */ -attribute_deprecated -int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src); - -/** - * Free a packet. - * - * @deprecated Use av_packet_unref - * - * @param pkt packet to free - */ -attribute_deprecated -void av_free_packet(AVPacket *pkt); -#endif -/** - * Allocate new information of a packet. - * - * @param pkt packet - * @param type side information type - * @param size side information size - * @return pointer to fresh allocated data or NULL otherwise - */ -uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, -#if FF_API_BUFFER_SIZE_T - int size); -#else - size_t size); -#endif - -/** - * Wrap an existing array as a packet side data. - * - * @param pkt packet - * @param type side information type - * @param data the side data array. It must be allocated with the av_malloc() - * family of functions. The ownership of the data is transferred to - * pkt. - * @param size side information size - * @return a non-negative number on success, a negative AVERROR code on - * failure. On failure, the packet is unchanged and the data remains - * owned by the caller. - */ -int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - uint8_t *data, size_t size); - -/** - * Shrink the already allocated side data buffer - * - * @param pkt packet - * @param type side information type - * @param size new side information size - * @return 0 on success, < 0 on failure - */ -int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, -#if FF_API_BUFFER_SIZE_T - int size); -#else - size_t size); -#endif - -/** - * Get side information from packet. - * - * @param pkt packet - * @param type desired side information type - * @param size If supplied, *size will be set to the size of the side data - * or to zero if the desired side data is not present. - * @return pointer to data if present or NULL otherwise - */ -uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, -#if FF_API_BUFFER_SIZE_T - int *size); -#else - size_t *size); -#endif - -#if FF_API_MERGE_SD_API -attribute_deprecated -int av_packet_merge_side_data(AVPacket *pkt); - -attribute_deprecated -int av_packet_split_side_data(AVPacket *pkt); -#endif - -const char *av_packet_side_data_name(enum AVPacketSideDataType type); - -/** - * Pack a dictionary for use in side_data. - * - * @param dict The dictionary to pack. - * @param size pointer to store the size of the returned data - * @return pointer to data if successful, NULL otherwise - */ -#if FF_API_BUFFER_SIZE_T -uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size); -#else -uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size); -#endif -/** - * Unpack a dictionary from side_data. - * - * @param data data from side_data - * @param size size of the data - * @param dict the metadata storage dictionary - * @return 0 on success, < 0 on failure - */ -#if FF_API_BUFFER_SIZE_T -int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict); -#else -int av_packet_unpack_dictionary(const uint8_t *data, size_t size, - AVDictionary **dict); -#endif - -/** - * Convenience function to free all the side data stored. - * All the other fields stay untouched. - * - * @param pkt packet - */ -void av_packet_free_side_data(AVPacket *pkt); - -/** - * Setup a new reference to the data described by a given packet - * - * If src is reference-counted, setup dst as a new reference to the - * buffer in src. Otherwise allocate a new buffer in dst and copy the - * data from src into it. - * - * All the other fields are copied from src. - * - * @see av_packet_unref - * - * @param dst Destination packet. Will be completely overwritten. - * @param src Source packet - * - * @return 0 on success, a negative AVERROR on error. On error, dst - * will be blank (as if returned by av_packet_alloc()). - */ -int av_packet_ref(AVPacket *dst, const AVPacket *src); - -/** - * Wipe the packet. - * - * Unreference the buffer referenced by the packet and reset the - * remaining packet fields to their default values. - * - * @param pkt The packet to be unreferenced. - */ -void av_packet_unref(AVPacket *pkt); - -/** - * Move every field in src to dst and reset src. - * - * @see av_packet_unref - * - * @param src Source packet, will be reset - * @param dst Destination packet - */ -void av_packet_move_ref(AVPacket *dst, AVPacket *src); - -/** - * Copy only "properties" fields from src to dst. - * - * Properties for the purpose of this function are all the fields - * beside those related to the packet data (buf, data, size) - * - * @param dst Destination packet - * @param src Source packet - * - * @return 0 on success AVERROR on failure. - */ -int av_packet_copy_props(AVPacket *dst, const AVPacket *src); - -/** - * Ensure the data described by a given packet is reference counted. - * - * @note This function does not ensure that the reference will be writable. - * Use av_packet_make_writable instead for that purpose. - * - * @see av_packet_ref - * @see av_packet_make_writable - * - * @param pkt packet whose data should be made reference counted. - * - * @return 0 on success, a negative AVERROR on error. On failure, the - * packet is unchanged. - */ -int av_packet_make_refcounted(AVPacket *pkt); - -/** - * Create a writable reference for the data described by a given packet, - * avoiding data copy if possible. - * - * @param pkt Packet whose data should be made writable. - * - * @return 0 on success, a negative AVERROR on failure. On failure, the - * packet is unchanged. - */ -int av_packet_make_writable(AVPacket *pkt); - -/** - * Convert valid timing fields (timestamps / durations) in a packet from one - * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be - * ignored. - * - * @param pkt packet on which the conversion will be performed - * @param tb_src source timebase, in which the timing fields in pkt are - * expressed - * @param tb_dst destination timebase, to which the timing fields will be - * converted - */ -void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst); - -/** - * @} - */ - -#endif // AVCODEC_PACKET_H diff --git a/prebuilts/arm/include/libavcodec/qsv.h b/prebuilts/arm/include/libavcodec/qsv.h deleted file mode 100644 index b77158e..0000000 --- a/prebuilts/arm/include/libavcodec/qsv.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Intel MediaSDK QSV public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_QSV_H -#define AVCODEC_QSV_H - -#include - -#include "libavutil/buffer.h" - -/** - * This struct is used for communicating QSV parameters between libavcodec and - * the caller. It is managed by the caller and must be assigned to - * AVCodecContext.hwaccel_context. - * - decoding: hwaccel_context must be set on return from the get_format() - * callback - * - encoding: hwaccel_context must be set before avcodec_open2() - */ -typedef struct AVQSVContext { - /** - * If non-NULL, the session to use for encoding or decoding. - * Otherwise, libavcodec will try to create an internal session. - */ - mfxSession session; - - /** - * The IO pattern to use. - */ - int iopattern; - - /** - * Extra buffers to pass to encoder or decoder initialization. - */ - mfxExtBuffer **ext_buffers; - int nb_ext_buffers; - - /** - * Encoding only. If this field is set to non-zero by the caller, libavcodec - * will create an mfxExtOpaqueSurfaceAlloc extended buffer and pass it to - * the encoder initialization. This only makes sense if iopattern is also - * set to MFX_IOPATTERN_IN_OPAQUE_MEMORY. - * - * The number of allocated opaque surfaces will be the sum of the number - * required by the encoder and the user-provided value nb_opaque_surfaces. - * The array of the opaque surfaces will be exported to the caller through - * the opaque_surfaces field. - */ - int opaque_alloc; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. Before - * calling avcodec_open2(), the caller should set this field to the number - * of extra opaque surfaces to allocate beyond what is required by the - * encoder. - * - * On return from avcodec_open2(), this field will be set by libavcodec to - * the total number of allocated opaque surfaces. - */ - int nb_opaque_surfaces; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. On return - * from avcodec_open2(), this field will be used by libavcodec to export the - * array of the allocated opaque surfaces to the caller, so they can be - * passed to other parts of the pipeline. - * - * The buffer reference exported here is owned and managed by libavcodec, - * the callers should make their own reference with av_buffer_ref() and free - * it with av_buffer_unref() when it is no longer needed. - * - * The buffer data is an nb_opaque_surfaces-sized array of mfxFrameSurface1. - */ - AVBufferRef *opaque_surfaces; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. On return - * from avcodec_open2(), this field will be set to the surface type used in - * the opaque allocation request. - */ - int opaque_alloc_type; -} AVQSVContext; - -/** - * Allocate a new context. - * - * It must be freed by the caller with av_free(). - */ -AVQSVContext *av_qsv_alloc_context(void); - -#endif /* AVCODEC_QSV_H */ diff --git a/prebuilts/arm/include/libavcodec/vaapi.h b/prebuilts/arm/include/libavcodec/vaapi.h deleted file mode 100644 index 2cf7da5..0000000 --- a/prebuilts/arm/include/libavcodec/vaapi.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Video Acceleration API (shared data between FFmpeg and the video player) - * HW decode acceleration for MPEG-2, MPEG-4, H.264 and VC-1 - * - * Copyright (C) 2008-2009 Splitted-Desktop Systems - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VAAPI_H -#define AVCODEC_VAAPI_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_vaapi - * Public libavcodec VA API header. - */ - -#include -#include "libavutil/attributes.h" -#include "version.h" - -#if FF_API_STRUCT_VAAPI_CONTEXT - -/** - * @defgroup lavc_codec_hwaccel_vaapi VA API Decoding - * @ingroup lavc_codec_hwaccel - * @{ - */ - -/** - * This structure is used to share data between the FFmpeg library and - * the client video application. - * This shall be zero-allocated and available as - * AVCodecContext.hwaccel_context. All user members can be set once - * during initialization or through each AVCodecContext.get_buffer() - * function call. In any case, they must be valid prior to calling - * decoding functions. - * - * Deprecated: use AVCodecContext.hw_frames_ctx instead. - */ -struct attribute_deprecated vaapi_context { - /** - * Window system dependent data - * - * - encoding: unused - * - decoding: Set by user - */ - void *display; - - /** - * Configuration ID - * - * - encoding: unused - * - decoding: Set by user - */ - uint32_t config_id; - - /** - * Context ID (video decode pipeline) - * - * - encoding: unused - * - decoding: Set by user - */ - uint32_t context_id; -}; - -/* @} */ - -#endif /* FF_API_STRUCT_VAAPI_CONTEXT */ - -#endif /* AVCODEC_VAAPI_H */ diff --git a/prebuilts/arm/include/libavcodec/vdpau.h b/prebuilts/arm/include/libavcodec/vdpau.h deleted file mode 100644 index 4d99943..0000000 --- a/prebuilts/arm/include/libavcodec/vdpau.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * The Video Decode and Presentation API for UNIX (VDPAU) is used for - * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1. - * - * Copyright (C) 2008 NVIDIA - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VDPAU_H -#define AVCODEC_VDPAU_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_vdpau - * Public libavcodec VDPAU header. - */ - - -/** - * @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer - * @ingroup lavc_codec_hwaccel - * - * VDPAU hardware acceleration has two modules - * - VDPAU decoding - * - VDPAU presentation - * - * The VDPAU decoding module parses all headers using FFmpeg - * parsing mechanisms and uses VDPAU for the actual decoding. - * - * As per the current implementation, the actual decoding - * and rendering (API calls) are done as part of the VDPAU - * presentation (vo_vdpau.c) module. - * - * @{ - */ - -#include - -#include "libavutil/avconfig.h" -#include "libavutil/attributes.h" - -#include "avcodec.h" -#include "version.h" - -struct AVCodecContext; -struct AVFrame; - -typedef int (*AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *, - const VdpPictureInfo *, uint32_t, - const VdpBitstreamBuffer *); - -/** - * This structure is used to share data between the libavcodec library and - * the client video application. - * The user shall allocate the structure via the av_alloc_vdpau_hwaccel - * function and make it available as - * AVCodecContext.hwaccel_context. Members can be set by the user once - * during initialization or through each AVCodecContext.get_buffer() - * function call. In any case, they must be valid prior to calling - * decoding functions. - * - * The size of this structure is not a part of the public ABI and must not - * be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an - * AVVDPAUContext. - */ -typedef struct AVVDPAUContext { - /** - * VDPAU decoder handle - * - * Set by user. - */ - VdpDecoder decoder; - - /** - * VDPAU decoder render callback - * - * Set by the user. - */ - VdpDecoderRender *render; - - AVVDPAU_Render2 render2; -} AVVDPAUContext; - -/** - * @brief allocation function for AVVDPAUContext - * - * Allows extending the struct without breaking API/ABI - */ -AVVDPAUContext *av_alloc_vdpaucontext(void); - -AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *); -void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2); - -/** - * Associate a VDPAU device with a codec context for hardware acceleration. - * This function is meant to be called from the get_format() codec callback, - * or earlier. It can also be called after avcodec_flush_buffers() to change - * the underlying VDPAU device mid-stream (e.g. to recover from non-transparent - * display preemption). - * - * @note get_format() must return AV_PIX_FMT_VDPAU if this function completes - * successfully. - * - * @param avctx decoding context whose get_format() callback is invoked - * @param device VDPAU device handle to use for hardware acceleration - * @param get_proc_address VDPAU device driver - * @param flags zero of more OR'd AV_HWACCEL_FLAG_* flags - * - * @return 0 on success, an AVERROR code on failure. - */ -int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device, - VdpGetProcAddress *get_proc_address, unsigned flags); - -/** - * Gets the parameters to create an adequate VDPAU video surface for the codec - * context using VDPAU hardware decoding acceleration. - * - * @note Behavior is undefined if the context was not successfully bound to a - * VDPAU device using av_vdpau_bind_context(). - * - * @param avctx the codec context being used for decoding the stream - * @param type storage space for the VDPAU video surface chroma type - * (or NULL to ignore) - * @param width storage space for the VDPAU video surface pixel width - * (or NULL to ignore) - * @param height storage space for the VDPAU video surface pixel height - * (or NULL to ignore) - * - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type, - uint32_t *width, uint32_t *height); - -/** - * Allocate an AVVDPAUContext. - * - * @return Newly-allocated AVVDPAUContext or NULL on failure. - */ -AVVDPAUContext *av_vdpau_alloc_context(void); - -#if FF_API_VDPAU_PROFILE -/** - * Get a decoder profile that should be used for initializing a VDPAU decoder. - * Should be called from the AVCodecContext.get_format() callback. - * - * @deprecated Use av_vdpau_bind_context() instead. - * - * @param avctx the codec context being used for decoding the stream - * @param profile a pointer into which the result will be written on success. - * The contents of profile are undefined if this function returns - * an error. - * - * @return 0 on success (non-negative), a negative AVERROR on failure. - */ -attribute_deprecated -int av_vdpau_get_profile(AVCodecContext *avctx, VdpDecoderProfile *profile); -#endif - -/* @}*/ - -#endif /* AVCODEC_VDPAU_H */ diff --git a/prebuilts/arm/include/libavcodec/version.h b/prebuilts/arm/include/libavcodec/version.h deleted file mode 100644 index cfdde46..0000000 --- a/prebuilts/arm/include/libavcodec/version.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VERSION_H -#define AVCODEC_VERSION_H - -/** - * @file - * @ingroup libavc - * Libavcodec version macros. - */ - -#include "libavutil/version.h" - -#define LIBAVCODEC_VERSION_MAJOR 58 -#define LIBAVCODEC_VERSION_MINOR 134 -#define LIBAVCODEC_VERSION_MICRO 100 - -#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ - LIBAVCODEC_VERSION_MINOR, \ - LIBAVCODEC_VERSION_MICRO) -#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \ - LIBAVCODEC_VERSION_MINOR, \ - LIBAVCODEC_VERSION_MICRO) -#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT - -#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - */ - -#ifndef FF_API_AVCTX_TIMEBASE -#define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CODED_FRAME -#define FF_API_CODED_FRAME (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_SIDEDATA_ONLY_PKT -#define FF_API_SIDEDATA_ONLY_PKT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_VDPAU_PROFILE -#define FF_API_VDPAU_PROFILE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CONVERGENCE_DURATION -#define FF_API_CONVERGENCE_DURATION (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVPICTURE -#define FF_API_AVPICTURE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVPACKET_OLD_API -#define FF_API_AVPACKET_OLD_API (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_RTP_CALLBACK -#define FF_API_RTP_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_VBV_DELAY -#define FF_API_VBV_DELAY (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CODER_TYPE -#define FF_API_CODER_TYPE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_STAT_BITS -#define FF_API_STAT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_PRIVATE_OPT -#define FF_API_PRIVATE_OPT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_ASS_TIMING -#define FF_API_ASS_TIMING (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_BSF -#define FF_API_OLD_BSF (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_COPY_CONTEXT -#define FF_API_COPY_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_GET_CONTEXT_DEFAULTS -#define FF_API_GET_CONTEXT_DEFAULTS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_NVENC_OLD_NAME -#define FF_API_NVENC_OLD_NAME (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_STRUCT_VAAPI_CONTEXT -#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_MERGE_SD_API -#define FF_API_MERGE_SD_API (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_TAG_STRING -#define FF_API_TAG_STRING (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_GETCHROMA -#define FF_API_GETCHROMA (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CODEC_GET_SET -#define FF_API_CODEC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_USER_VISIBLE_AVHWACCEL -#define FF_API_USER_VISIBLE_AVHWACCEL (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LOCKMGR -#define FF_API_LOCKMGR (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_NEXT -#define FF_API_NEXT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_UNSANITIZED_BITRATES -#define FF_API_UNSANITIZED_BITRATES (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OPENH264_SLICE_MODE -#define FF_API_OPENH264_SLICE_MODE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OPENH264_CABAC -#define FF_API_OPENH264_CABAC (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_UNUSED_CODEC_CAPS -#define FF_API_UNUSED_CODEC_CAPS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVPRIV_PUT_BITS -#define FF_API_AVPRIV_PUT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_ENCDEC -#define FF_API_OLD_ENCDEC (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVCODEC_PIX_FMT -#define FF_API_AVCODEC_PIX_FMT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_MPV_RC_STRATEGY -#define FF_API_MPV_RC_STRATEGY (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_PARSER_CHANGE -#define FF_API_PARSER_CHANGE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_THREAD_SAFE_CALLBACKS -#define FF_API_THREAD_SAFE_CALLBACKS (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_DEBUG_MV -#define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_GET_FRAME_CLASS -#define FF_API_GET_FRAME_CLASS (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_AUTO_THREADS -#define FF_API_AUTO_THREADS (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_INIT_PACKET -#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 60) -#endif - -#endif /* AVCODEC_VERSION_H */ diff --git a/prebuilts/arm/include/libavcodec/videotoolbox.h b/prebuilts/arm/include/libavcodec/videotoolbox.h deleted file mode 100644 index af2db0d..0000000 --- a/prebuilts/arm/include/libavcodec/videotoolbox.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Videotoolbox hardware acceleration - * - * copyright (c) 2012 Sebastien Zwickert - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VIDEOTOOLBOX_H -#define AVCODEC_VIDEOTOOLBOX_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_videotoolbox - * Public libavcodec Videotoolbox header. - */ - -#include - -#define Picture QuickdrawPicture -#include -#undef Picture - -#include "libavcodec/avcodec.h" - -/** - * This struct holds all the information that needs to be passed - * between the caller and libavcodec for initializing Videotoolbox decoding. - * Its size is not a part of the public ABI, it must be allocated with - * av_videotoolbox_alloc_context() and freed with av_free(). - */ -typedef struct AVVideotoolboxContext { - /** - * Videotoolbox decompression session object. - * Created and freed the caller. - */ - VTDecompressionSessionRef session; - - /** - * The output callback that must be passed to the session. - * Set by av_videottoolbox_default_init() - */ - VTDecompressionOutputCallback output_callback; - - /** - * CVPixelBuffer Format Type that Videotoolbox will use for decoded frames. - * set by the caller. If this is set to 0, then no specific format is - * requested from the decoder, and its native format is output. - */ - OSType cv_pix_fmt_type; - - /** - * CoreMedia Format Description that Videotoolbox will use to create the decompression session. - * Set by the caller. - */ - CMVideoFormatDescriptionRef cm_fmt_desc; - - /** - * CoreMedia codec type that Videotoolbox will use to create the decompression session. - * Set by the caller. - */ - int cm_codec_type; -} AVVideotoolboxContext; - -/** - * Allocate and initialize a Videotoolbox context. - * - * This function should be called from the get_format() callback when the caller - * selects the AV_PIX_FMT_VIDETOOLBOX format. The caller must then create - * the decoder object (using the output callback provided by libavcodec) that - * will be used for Videotoolbox-accelerated decoding. - * - * When decoding with Videotoolbox is finished, the caller must destroy the decoder - * object and free the Videotoolbox context using av_free(). - * - * @return the newly allocated context or NULL on failure - */ -AVVideotoolboxContext *av_videotoolbox_alloc_context(void); - -/** - * This is a convenience function that creates and sets up the Videotoolbox context using - * an internal implementation. - * - * @param avctx the corresponding codec context - * - * @return >= 0 on success, a negative AVERROR code on failure - */ -int av_videotoolbox_default_init(AVCodecContext *avctx); - -/** - * This is a convenience function that creates and sets up the Videotoolbox context using - * an internal implementation. - * - * @param avctx the corresponding codec context - * @param vtctx the Videotoolbox context to use - * - * @return >= 0 on success, a negative AVERROR code on failure - */ -int av_videotoolbox_default_init2(AVCodecContext *avctx, AVVideotoolboxContext *vtctx); - -/** - * This function must be called to free the Videotoolbox context initialized with - * av_videotoolbox_default_init(). - * - * @param avctx the corresponding codec context - */ -void av_videotoolbox_default_free(AVCodecContext *avctx); - -/** - * @} - */ - -#endif /* AVCODEC_VIDEOTOOLBOX_H */ diff --git a/prebuilts/arm/include/libavcodec/vorbis_parser.h b/prebuilts/arm/include/libavcodec/vorbis_parser.h deleted file mode 100644 index 789932a..0000000 --- a/prebuilts/arm/include/libavcodec/vorbis_parser.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * A public API for Vorbis parsing - * - * Determines the duration for each packet. - */ - -#ifndef AVCODEC_VORBIS_PARSER_H -#define AVCODEC_VORBIS_PARSER_H - -#include - -typedef struct AVVorbisParseContext AVVorbisParseContext; - -/** - * Allocate and initialize the Vorbis parser using headers in the extradata. - */ -AVVorbisParseContext *av_vorbis_parse_init(const uint8_t *extradata, - int extradata_size); - -/** - * Free the parser and everything associated with it. - */ -void av_vorbis_parse_free(AVVorbisParseContext **s); - -#define VORBIS_FLAG_HEADER 0x00000001 -#define VORBIS_FLAG_COMMENT 0x00000002 -#define VORBIS_FLAG_SETUP 0x00000004 - -/** - * Get the duration for a Vorbis packet. - * - * If @p flags is @c NULL, - * special frames are considered invalid. - * - * @param s Vorbis parser context - * @param buf buffer containing a Vorbis frame - * @param buf_size size of the buffer - * @param flags flags for special frames - */ -int av_vorbis_parse_frame_flags(AVVorbisParseContext *s, const uint8_t *buf, - int buf_size, int *flags); - -/** - * Get the duration for a Vorbis packet. - * - * @param s Vorbis parser context - * @param buf buffer containing a Vorbis frame - * @param buf_size size of the buffer - */ -int av_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf, - int buf_size); - -void av_vorbis_parse_reset(AVVorbisParseContext *s); - -#endif /* AVCODEC_VORBIS_PARSER_H */ diff --git a/prebuilts/arm/include/libavcodec/xvmc.h b/prebuilts/arm/include/libavcodec/xvmc.h deleted file mode 100644 index 465ee78..0000000 --- a/prebuilts/arm/include/libavcodec/xvmc.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (C) 2003 Ivan Kalvachev - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_XVMC_H -#define AVCODEC_XVMC_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_xvmc - * Public libavcodec XvMC header. - */ - -#include - -#include "libavutil/attributes.h" -#include "version.h" -#include "avcodec.h" - -/** - * @defgroup lavc_codec_hwaccel_xvmc XvMC - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct - the number is 1337 speak for the letters IDCT MCo (motion compensation) */ - -struct attribute_deprecated xvmc_pix_fmt { - /** The field contains the special constant value AV_XVMC_ID. - It is used as a test that the application correctly uses the API, - and that there is no corruption caused by pixel routines. - - application - set during initialization - - libavcodec - unchanged - */ - int xvmc_id; - - /** Pointer to the block array allocated by XvMCCreateBlocks(). - The array has to be freed by XvMCDestroyBlocks(). - Each group of 64 values represents one data block of differential - pixel information (in MoCo mode) or coefficients for IDCT. - - application - set the pointer during initialization - - libavcodec - fills coefficients/pixel data into the array - */ - short* data_blocks; - - /** Pointer to the macroblock description array allocated by - XvMCCreateMacroBlocks() and freed by XvMCDestroyMacroBlocks(). - - application - set the pointer during initialization - - libavcodec - fills description data into the array - */ - XvMCMacroBlock* mv_blocks; - - /** Number of macroblock descriptions that can be stored in the mv_blocks - array. - - application - set during initialization - - libavcodec - unchanged - */ - int allocated_mv_blocks; - - /** Number of blocks that can be stored at once in the data_blocks array. - - application - set during initialization - - libavcodec - unchanged - */ - int allocated_data_blocks; - - /** Indicate that the hardware would interpret data_blocks as IDCT - coefficients and perform IDCT on them. - - application - set during initialization - - libavcodec - unchanged - */ - int idct; - - /** In MoCo mode it indicates that intra macroblocks are assumed to be in - unsigned format; same as the XVMC_INTRA_UNSIGNED flag. - - application - set during initialization - - libavcodec - unchanged - */ - int unsigned_intra; - - /** Pointer to the surface allocated by XvMCCreateSurface(). - It has to be freed by XvMCDestroySurface() on application exit. - It identifies the frame and its state on the video hardware. - - application - set during initialization - - libavcodec - unchanged - */ - XvMCSurface* p_surface; - -/** Set by the decoder before calling ff_draw_horiz_band(), - needed by the XvMCRenderSurface function. */ -//@{ - /** Pointer to the surface used as past reference - - application - unchanged - - libavcodec - set - */ - XvMCSurface* p_past_surface; - - /** Pointer to the surface used as future reference - - application - unchanged - - libavcodec - set - */ - XvMCSurface* p_future_surface; - - /** top/bottom field or frame - - application - unchanged - - libavcodec - set - */ - unsigned int picture_structure; - - /** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence - - application - unchanged - - libavcodec - set - */ - unsigned int flags; -//}@ - - /** Number of macroblock descriptions in the mv_blocks array - that have already been passed to the hardware. - - application - zeroes it on get_buffer(). - A successful ff_draw_horiz_band() may increment it - with filled_mb_block_num or zero both. - - libavcodec - unchanged - */ - int start_mv_blocks_num; - - /** Number of new macroblock descriptions in the mv_blocks array (after - start_mv_blocks_num) that are filled by libavcodec and have to be - passed to the hardware. - - application - zeroes it on get_buffer() or after successful - ff_draw_horiz_band(). - - libavcodec - increment with one of each stored MB - */ - int filled_mv_blocks_num; - - /** Number of the next free data block; one data block consists of - 64 short values in the data_blocks array. - All blocks before this one have already been claimed by placing their - position into the corresponding block description structure field, - that are part of the mv_blocks array. - - application - zeroes it on get_buffer(). - A successful ff_draw_horiz_band() may zero it together - with start_mb_blocks_num. - - libavcodec - each decoded macroblock increases it by the number - of coded blocks it contains. - */ - int next_free_data_block_num; -}; - -/** - * @} - */ - -#endif /* AVCODEC_XVMC_H */ diff --git a/prebuilts/arm/include/libavdevice/avdevice.h b/prebuilts/arm/include/libavdevice/avdevice.h deleted file mode 100644 index 85a4dcc..0000000 --- a/prebuilts/arm/include/libavdevice/avdevice.h +++ /dev/null @@ -1,519 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVDEVICE_AVDEVICE_H -#define AVDEVICE_AVDEVICE_H - -#include "version.h" - -/** - * @file - * @ingroup lavd - * Main libavdevice API header - */ - -/** - * @defgroup lavd libavdevice - * Special devices muxing/demuxing library. - * - * Libavdevice is a complementary library to @ref libavf "libavformat". It - * provides various "special" platform-specific muxers and demuxers, e.g. for - * grabbing devices, audio capture and playback etc. As a consequence, the - * (de)muxers in libavdevice are of the AVFMT_NOFILE type (they use their own - * I/O functions). The filename passed to avformat_open_input() often does not - * refer to an actually existing file, but has some special device-specific - * meaning - e.g. for xcbgrab it is the display name. - * - * To use libavdevice, simply call avdevice_register_all() to register all - * compiled muxers and demuxers. They all use standard libavformat API. - * - * @{ - */ - -#include "libavutil/log.h" -#include "libavutil/opt.h" -#include "libavutil/dict.h" -#include "libavformat/avformat.h" - -/** - * Return the LIBAVDEVICE_VERSION_INT constant. - */ -unsigned avdevice_version(void); - -/** - * Return the libavdevice build-time configuration. - */ -const char *avdevice_configuration(void); - -/** - * Return the libavdevice license. - */ -const char *avdevice_license(void); - -/** - * Initialize libavdevice and register all the input and output devices. - */ -void avdevice_register_all(void); - -/** - * Audio input devices iterator. - * - * If d is NULL, returns the first registered input audio/video device, - * if d is non-NULL, returns the next registered input audio/video device after d - * or NULL if d is the last one. - */ -AVInputFormat *av_input_audio_device_next(AVInputFormat *d); - -/** - * Video input devices iterator. - * - * If d is NULL, returns the first registered input audio/video device, - * if d is non-NULL, returns the next registered input audio/video device after d - * or NULL if d is the last one. - */ -AVInputFormat *av_input_video_device_next(AVInputFormat *d); - -/** - * Audio output devices iterator. - * - * If d is NULL, returns the first registered output audio/video device, - * if d is non-NULL, returns the next registered output audio/video device after d - * or NULL if d is the last one. - */ -AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d); - -/** - * Video output devices iterator. - * - * If d is NULL, returns the first registered output audio/video device, - * if d is non-NULL, returns the next registered output audio/video device after d - * or NULL if d is the last one. - */ -AVOutputFormat *av_output_video_device_next(AVOutputFormat *d); - -typedef struct AVDeviceRect { - int x; /**< x coordinate of top left corner */ - int y; /**< y coordinate of top left corner */ - int width; /**< width */ - int height; /**< height */ -} AVDeviceRect; - -/** - * Message types used by avdevice_app_to_dev_control_message(). - */ -enum AVAppToDevMessageType { - /** - * Dummy message. - */ - AV_APP_TO_DEV_NONE = MKBETAG('N','O','N','E'), - - /** - * Window size change message. - * - * Message is sent to the device every time the application changes the size - * of the window device renders to. - * Message should also be sent right after window is created. - * - * data: AVDeviceRect: new window size. - */ - AV_APP_TO_DEV_WINDOW_SIZE = MKBETAG('G','E','O','M'), - - /** - * Repaint request message. - * - * Message is sent to the device when window has to be repainted. - * - * data: AVDeviceRect: area required to be repainted. - * NULL: whole area is required to be repainted. - */ - AV_APP_TO_DEV_WINDOW_REPAINT = MKBETAG('R','E','P','A'), - - /** - * Request pause/play. - * - * Application requests pause/unpause playback. - * Mostly usable with devices that have internal buffer. - * By default devices are not paused. - * - * data: NULL - */ - AV_APP_TO_DEV_PAUSE = MKBETAG('P', 'A', 'U', ' '), - AV_APP_TO_DEV_PLAY = MKBETAG('P', 'L', 'A', 'Y'), - AV_APP_TO_DEV_TOGGLE_PAUSE = MKBETAG('P', 'A', 'U', 'T'), - - /** - * Volume control message. - * - * Set volume level. It may be device-dependent if volume - * is changed per stream or system wide. Per stream volume - * change is expected when possible. - * - * data: double: new volume with range of 0.0 - 1.0. - */ - AV_APP_TO_DEV_SET_VOLUME = MKBETAG('S', 'V', 'O', 'L'), - - /** - * Mute control messages. - * - * Change mute state. It may be device-dependent if mute status - * is changed per stream or system wide. Per stream mute status - * change is expected when possible. - * - * data: NULL. - */ - AV_APP_TO_DEV_MUTE = MKBETAG(' ', 'M', 'U', 'T'), - AV_APP_TO_DEV_UNMUTE = MKBETAG('U', 'M', 'U', 'T'), - AV_APP_TO_DEV_TOGGLE_MUTE = MKBETAG('T', 'M', 'U', 'T'), - - /** - * Get volume/mute messages. - * - * Force the device to send AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED or - * AV_DEV_TO_APP_MUTE_STATE_CHANGED command respectively. - * - * data: NULL. - */ - AV_APP_TO_DEV_GET_VOLUME = MKBETAG('G', 'V', 'O', 'L'), - AV_APP_TO_DEV_GET_MUTE = MKBETAG('G', 'M', 'U', 'T'), -}; - -/** - * Message types used by avdevice_dev_to_app_control_message(). - */ -enum AVDevToAppMessageType { - /** - * Dummy message. - */ - AV_DEV_TO_APP_NONE = MKBETAG('N','O','N','E'), - - /** - * Create window buffer message. - * - * Device requests to create a window buffer. Exact meaning is device- - * and application-dependent. Message is sent before rendering first - * frame and all one-shot initializations should be done here. - * Application is allowed to ignore preferred window buffer size. - * - * @note: Application is obligated to inform about window buffer size - * with AV_APP_TO_DEV_WINDOW_SIZE message. - * - * data: AVDeviceRect: preferred size of the window buffer. - * NULL: no preferred size of the window buffer. - */ - AV_DEV_TO_APP_CREATE_WINDOW_BUFFER = MKBETAG('B','C','R','E'), - - /** - * Prepare window buffer message. - * - * Device requests to prepare a window buffer for rendering. - * Exact meaning is device- and application-dependent. - * Message is sent before rendering of each frame. - * - * data: NULL. - */ - AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER = MKBETAG('B','P','R','E'), - - /** - * Display window buffer message. - * - * Device requests to display a window buffer. - * Message is sent when new frame is ready to be displayed. - * Usually buffers need to be swapped in handler of this message. - * - * data: NULL. - */ - AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER = MKBETAG('B','D','I','S'), - - /** - * Destroy window buffer message. - * - * Device requests to destroy a window buffer. - * Message is sent when device is about to be destroyed and window - * buffer is not required anymore. - * - * data: NULL. - */ - AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER = MKBETAG('B','D','E','S'), - - /** - * Buffer fullness status messages. - * - * Device signals buffer overflow/underflow. - * - * data: NULL. - */ - AV_DEV_TO_APP_BUFFER_OVERFLOW = MKBETAG('B','O','F','L'), - AV_DEV_TO_APP_BUFFER_UNDERFLOW = MKBETAG('B','U','F','L'), - - /** - * Buffer readable/writable. - * - * Device informs that buffer is readable/writable. - * When possible, device informs how many bytes can be read/write. - * - * @warning Device may not inform when number of bytes than can be read/write changes. - * - * data: int64_t: amount of bytes available to read/write. - * NULL: amount of bytes available to read/write is not known. - */ - AV_DEV_TO_APP_BUFFER_READABLE = MKBETAG('B','R','D',' '), - AV_DEV_TO_APP_BUFFER_WRITABLE = MKBETAG('B','W','R',' '), - - /** - * Mute state change message. - * - * Device informs that mute state has changed. - * - * data: int: 0 for not muted state, non-zero for muted state. - */ - AV_DEV_TO_APP_MUTE_STATE_CHANGED = MKBETAG('C','M','U','T'), - - /** - * Volume level change message. - * - * Device informs that volume level has changed. - * - * data: double: new volume with range of 0.0 - 1.0. - */ - AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED = MKBETAG('C','V','O','L'), -}; - -/** - * Send control message from application to device. - * - * @param s device context. - * @param type message type. - * @param data message data. Exact type depends on message type. - * @param data_size size of message data. - * @return >= 0 on success, negative on error. - * AVERROR(ENOSYS) when device doesn't implement handler of the message. - */ -int avdevice_app_to_dev_control_message(struct AVFormatContext *s, - enum AVAppToDevMessageType type, - void *data, size_t data_size); - -/** - * Send control message from device to application. - * - * @param s device context. - * @param type message type. - * @param data message data. Can be NULL. - * @param data_size size of message data. - * @return >= 0 on success, negative on error. - * AVERROR(ENOSYS) when application doesn't implement handler of the message. - */ -int avdevice_dev_to_app_control_message(struct AVFormatContext *s, - enum AVDevToAppMessageType type, - void *data, size_t data_size); - -#if FF_API_DEVICE_CAPABILITIES -/** - * Following API allows user to probe device capabilities (supported codecs, - * pixel formats, sample formats, resolutions, channel counts, etc). - * It is build on top op AVOption API. - * Queried capabilities make it possible to set up converters of video or audio - * parameters that fit to the device. - * - * List of capabilities that can be queried: - * - Capabilities valid for both audio and video devices: - * - codec: supported audio/video codecs. - * type: AV_OPT_TYPE_INT (AVCodecID value) - * - Capabilities valid for audio devices: - * - sample_format: supported sample formats. - * type: AV_OPT_TYPE_INT (AVSampleFormat value) - * - sample_rate: supported sample rates. - * type: AV_OPT_TYPE_INT - * - channels: supported number of channels. - * type: AV_OPT_TYPE_INT - * - channel_layout: supported channel layouts. - * type: AV_OPT_TYPE_INT64 - * - Capabilities valid for video devices: - * - pixel_format: supported pixel formats. - * type: AV_OPT_TYPE_INT (AVPixelFormat value) - * - window_size: supported window sizes (describes size of the window size presented to the user). - * type: AV_OPT_TYPE_IMAGE_SIZE - * - frame_size: supported frame sizes (describes size of provided video frames). - * type: AV_OPT_TYPE_IMAGE_SIZE - * - fps: supported fps values - * type: AV_OPT_TYPE_RATIONAL - * - * Value of the capability may be set by user using av_opt_set() function - * and AVDeviceCapabilitiesQuery object. Following queries will - * limit results to the values matching already set capabilities. - * For example, setting a codec may impact number of formats or fps values - * returned during next query. Setting invalid value may limit results to zero. - * - * Example of the usage basing on opengl output device: - * - * @code - * AVFormatContext *oc = NULL; - * AVDeviceCapabilitiesQuery *caps = NULL; - * AVOptionRanges *ranges; - * int ret; - * - * if ((ret = avformat_alloc_output_context2(&oc, NULL, "opengl", NULL)) < 0) - * goto fail; - * if (avdevice_capabilities_create(&caps, oc, NULL) < 0) - * goto fail; - * - * //query codecs - * if (av_opt_query_ranges(&ranges, caps, "codec", AV_OPT_MULTI_COMPONENT_RANGE)) < 0) - * goto fail; - * //pick codec here and set it - * av_opt_set(caps, "codec", AV_CODEC_ID_RAWVIDEO, 0); - * - * //query format - * if (av_opt_query_ranges(&ranges, caps, "pixel_format", AV_OPT_MULTI_COMPONENT_RANGE)) < 0) - * goto fail; - * //pick format here and set it - * av_opt_set(caps, "pixel_format", AV_PIX_FMT_YUV420P, 0); - * - * //query and set more capabilities - * - * fail: - * //clean up code - * avdevice_capabilities_free(&query, oc); - * avformat_free_context(oc); - * @endcode - */ - -/** - * Structure describes device capabilities. - * - * It is used by devices in conjunction with av_device_capabilities AVOption table - * to implement capabilities probing API based on AVOption API. Should not be used directly. - */ -typedef struct AVDeviceCapabilitiesQuery { - const AVClass *av_class; - AVFormatContext *device_context; - enum AVCodecID codec; - enum AVSampleFormat sample_format; - enum AVPixelFormat pixel_format; - int sample_rate; - int channels; - int64_t channel_layout; - int window_width; - int window_height; - int frame_width; - int frame_height; - AVRational fps; -} AVDeviceCapabilitiesQuery; - -/** - * AVOption table used by devices to implement device capabilities API. Should not be used by a user. - */ -attribute_deprecated -extern const AVOption av_device_capabilities[]; - -/** - * Initialize capabilities probing API based on AVOption API. - * - * avdevice_capabilities_free() must be called when query capabilities API is - * not used anymore. - * - * @param[out] caps Device capabilities data. Pointer to a NULL pointer must be passed. - * @param s Context of the device. - * @param device_options An AVDictionary filled with device-private options. - * On return this parameter will be destroyed and replaced with a dict - * containing options that were not found. May be NULL. - * The same options must be passed later to avformat_write_header() for output - * devices or avformat_open_input() for input devices, or at any other place - * that affects device-private options. - * - * @return >= 0 on success, negative otherwise. - */ -attribute_deprecated -int avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s, - AVDictionary **device_options); - -/** - * Free resources created by avdevice_capabilities_create() - * - * @param caps Device capabilities data to be freed. - * @param s Context of the device. - */ -attribute_deprecated -void avdevice_capabilities_free(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s); -#endif - -/** - * Structure describes basic parameters of the device. - */ -typedef struct AVDeviceInfo { - char *device_name; /**< device name, format depends on device */ - char *device_description; /**< human friendly name */ -} AVDeviceInfo; - -/** - * List of devices. - */ -typedef struct AVDeviceInfoList { - AVDeviceInfo **devices; /**< list of autodetected devices */ - int nb_devices; /**< number of autodetected devices */ - int default_device; /**< index of default device or -1 if no default */ -} AVDeviceInfoList; - -/** - * List devices. - * - * Returns available device names and their parameters. - * - * @note: Some devices may accept system-dependent device names that cannot be - * autodetected. The list returned by this function cannot be assumed to - * be always completed. - * - * @param s device context. - * @param[out] device_list list of autodetected devices. - * @return count of autodetected devices, negative on error. - */ -int avdevice_list_devices(struct AVFormatContext *s, AVDeviceInfoList **device_list); - -/** - * Convenient function to free result of avdevice_list_devices(). - * - * @param devices device list to be freed. - */ -void avdevice_free_list_devices(AVDeviceInfoList **device_list); - -/** - * List devices. - * - * Returns available device names and their parameters. - * These are convinient wrappers for avdevice_list_devices(). - * Device context is allocated and deallocated internally. - * - * @param device device format. May be NULL if device name is set. - * @param device_name device name. May be NULL if device format is set. - * @param device_options An AVDictionary filled with device-private options. May be NULL. - * The same options must be passed later to avformat_write_header() for output - * devices or avformat_open_input() for input devices, or at any other place - * that affects device-private options. - * @param[out] device_list list of autodetected devices - * @return count of autodetected devices, negative on error. - * @note device argument takes precedence over device_name when both are set. - */ -int avdevice_list_input_sources(struct AVInputFormat *device, const char *device_name, - AVDictionary *device_options, AVDeviceInfoList **device_list); -int avdevice_list_output_sinks(struct AVOutputFormat *device, const char *device_name, - AVDictionary *device_options, AVDeviceInfoList **device_list); - -/** - * @} - */ - -#endif /* AVDEVICE_AVDEVICE_H */ diff --git a/prebuilts/arm/include/libavdevice/version.h b/prebuilts/arm/include/libavdevice/version.h deleted file mode 100644 index c310c5e..0000000 --- a/prebuilts/arm/include/libavdevice/version.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVDEVICE_VERSION_H -#define AVDEVICE_VERSION_H - -/** - * @file - * @ingroup lavd - * Libavdevice version macros - */ - -#include "libavutil/version.h" - -#define LIBAVDEVICE_VERSION_MAJOR 58 -#define LIBAVDEVICE_VERSION_MINOR 13 -#define LIBAVDEVICE_VERSION_MICRO 100 - -#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \ - LIBAVDEVICE_VERSION_MINOR, \ - LIBAVDEVICE_VERSION_MICRO) -#define LIBAVDEVICE_VERSION AV_VERSION(LIBAVDEVICE_VERSION_MAJOR, \ - LIBAVDEVICE_VERSION_MINOR, \ - LIBAVDEVICE_VERSION_MICRO) -#define LIBAVDEVICE_BUILD LIBAVDEVICE_VERSION_INT - -#define LIBAVDEVICE_IDENT "Lavd" AV_STRINGIFY(LIBAVDEVICE_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ -#ifndef FF_API_DEVICE_CAPABILITIES -#define FF_API_DEVICE_CAPABILITIES (LIBAVDEVICE_VERSION_MAJOR < 60) -#endif - -#endif /* AVDEVICE_VERSION_H */ diff --git a/prebuilts/arm/include/libavfilter/avfilter.h b/prebuilts/arm/include/libavfilter/avfilter.h deleted file mode 100644 index be12424..0000000 --- a/prebuilts/arm/include/libavfilter/avfilter.h +++ /dev/null @@ -1,1178 +0,0 @@ -/* - * filter layer - * Copyright (c) 2007 Bobby Bingham - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_AVFILTER_H -#define AVFILTER_AVFILTER_H - -/** - * @file - * @ingroup lavfi - * Main libavfilter public API header - */ - -/** - * @defgroup lavfi libavfilter - * Graph-based frame editing library. - * - * @{ - */ - -#include - -#include "libavutil/attributes.h" -#include "libavutil/avutil.h" -#include "libavutil/buffer.h" -#include "libavutil/dict.h" -#include "libavutil/frame.h" -#include "libavutil/log.h" -#include "libavutil/samplefmt.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" - -#include "libavfilter/version.h" - -/** - * Return the LIBAVFILTER_VERSION_INT constant. - */ -unsigned avfilter_version(void); - -/** - * Return the libavfilter build-time configuration. - */ -const char *avfilter_configuration(void); - -/** - * Return the libavfilter license. - */ -const char *avfilter_license(void); - -typedef struct AVFilterContext AVFilterContext; -typedef struct AVFilterLink AVFilterLink; -typedef struct AVFilterPad AVFilterPad; -typedef struct AVFilterFormats AVFilterFormats; -typedef struct AVFilterChannelLayouts AVFilterChannelLayouts; - -/** - * Get the number of elements in a NULL-terminated array of AVFilterPads (e.g. - * AVFilter.inputs/outputs). - */ -int avfilter_pad_count(const AVFilterPad *pads); - -/** - * Get the name of an AVFilterPad. - * - * @param pads an array of AVFilterPads - * @param pad_idx index of the pad in the array; it is the caller's - * responsibility to ensure the index is valid - * - * @return name of the pad_idx'th pad in pads - */ -const char *avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx); - -/** - * Get the type of an AVFilterPad. - * - * @param pads an array of AVFilterPads - * @param pad_idx index of the pad in the array; it is the caller's - * responsibility to ensure the index is valid - * - * @return type of the pad_idx'th pad in pads - */ -enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx); - -/** - * The number of the filter inputs is not determined just by AVFilter.inputs. - * The filter might add additional inputs during initialization depending on the - * options supplied to it. - */ -#define AVFILTER_FLAG_DYNAMIC_INPUTS (1 << 0) -/** - * The number of the filter outputs is not determined just by AVFilter.outputs. - * The filter might add additional outputs during initialization depending on - * the options supplied to it. - */ -#define AVFILTER_FLAG_DYNAMIC_OUTPUTS (1 << 1) -/** - * The filter supports multithreading by splitting frames into multiple parts - * and processing them concurrently. - */ -#define AVFILTER_FLAG_SLICE_THREADS (1 << 2) -/** - * Some filters support a generic "enable" expression option that can be used - * to enable or disable a filter in the timeline. Filters supporting this - * option have this flag set. When the enable expression is false, the default - * no-op filter_frame() function is called in place of the filter_frame() - * callback defined on each input pad, thus the frame is passed unchanged to - * the next filters. - */ -#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC (1 << 16) -/** - * Same as AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC, except that the filter will - * have its filter_frame() callback(s) called as usual even when the enable - * expression is false. The filter will disable filtering within the - * filter_frame() callback(s) itself, for example executing code depending on - * the AVFilterContext->is_disabled value. - */ -#define AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL (1 << 17) -/** - * Handy mask to test whether the filter supports or no the timeline feature - * (internally or generically). - */ -#define AVFILTER_FLAG_SUPPORT_TIMELINE (AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL) - -/** - * Filter definition. This defines the pads a filter contains, and all the - * callback functions used to interact with the filter. - */ -typedef struct AVFilter { - /** - * Filter name. Must be non-NULL and unique among filters. - */ - const char *name; - - /** - * A description of the filter. May be NULL. - * - * You should use the NULL_IF_CONFIG_SMALL() macro to define it. - */ - const char *description; - - /** - * List of inputs, terminated by a zeroed element. - * - * NULL if there are no (static) inputs. Instances of filters with - * AVFILTER_FLAG_DYNAMIC_INPUTS set may have more inputs than present in - * this list. - */ - const AVFilterPad *inputs; - /** - * List of outputs, terminated by a zeroed element. - * - * NULL if there are no (static) outputs. Instances of filters with - * AVFILTER_FLAG_DYNAMIC_OUTPUTS set may have more outputs than present in - * this list. - */ - const AVFilterPad *outputs; - - /** - * A class for the private data, used to declare filter private AVOptions. - * This field is NULL for filters that do not declare any options. - * - * If this field is non-NULL, the first member of the filter private data - * must be a pointer to AVClass, which will be set by libavfilter generic - * code to this class. - */ - const AVClass *priv_class; - - /** - * A combination of AVFILTER_FLAG_* - */ - int flags; - - /***************************************************************** - * All fields below this line are not part of the public API. They - * may not be used outside of libavfilter and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * Filter pre-initialization function - * - * This callback will be called immediately after the filter context is - * allocated, to allow allocating and initing sub-objects. - * - * If this callback is not NULL, the uninit callback will be called on - * allocation failure. - * - * @return 0 on success, - * AVERROR code on failure (but the code will be - * dropped and treated as ENOMEM by the calling code) - */ - int (*preinit)(AVFilterContext *ctx); - - /** - * Filter initialization function. - * - * This callback will be called only once during the filter lifetime, after - * all the options have been set, but before links between filters are - * established and format negotiation is done. - * - * Basic filter initialization should be done here. Filters with dynamic - * inputs and/or outputs should create those inputs/outputs here based on - * provided options. No more changes to this filter's inputs/outputs can be - * done after this callback. - * - * This callback must not assume that the filter links exist or frame - * parameters are known. - * - * @ref AVFilter.uninit "uninit" is guaranteed to be called even if - * initialization fails, so this callback does not have to clean up on - * failure. - * - * @return 0 on success, a negative AVERROR on failure - */ - int (*init)(AVFilterContext *ctx); - - /** - * Should be set instead of @ref AVFilter.init "init" by the filters that - * want to pass a dictionary of AVOptions to nested contexts that are - * allocated during init. - * - * On return, the options dict should be freed and replaced with one that - * contains all the options which could not be processed by this filter (or - * with NULL if all the options were processed). - * - * Otherwise the semantics is the same as for @ref AVFilter.init "init". - */ - int (*init_dict)(AVFilterContext *ctx, AVDictionary **options); - - /** - * Filter uninitialization function. - * - * Called only once right before the filter is freed. Should deallocate any - * memory held by the filter, release any buffer references, etc. It does - * not need to deallocate the AVFilterContext.priv memory itself. - * - * This callback may be called even if @ref AVFilter.init "init" was not - * called or failed, so it must be prepared to handle such a situation. - */ - void (*uninit)(AVFilterContext *ctx); - - /** - * Query formats supported by the filter on its inputs and outputs. - * - * This callback is called after the filter is initialized (so the inputs - * and outputs are fixed), shortly before the format negotiation. This - * callback may be called more than once. - * - * This callback must set AVFilterLink.outcfg.formats on every input link and - * AVFilterLink.incfg.formats on every output link to a list of pixel/sample - * formats that the filter supports on that link. For audio links, this - * filter must also set @ref AVFilterLink.incfg.samplerates "in_samplerates" / - * @ref AVFilterLink.outcfg.samplerates "out_samplerates" and - * @ref AVFilterLink.incfg.channel_layouts "in_channel_layouts" / - * @ref AVFilterLink.outcfg.channel_layouts "out_channel_layouts" analogously. - * - * This callback may be NULL for filters with one input, in which case - * libavfilter assumes that it supports all input formats and preserves - * them on output. - * - * @return zero on success, a negative value corresponding to an - * AVERROR code otherwise - */ - int (*query_formats)(AVFilterContext *); - - int priv_size; ///< size of private data to allocate for the filter - - int flags_internal; ///< Additional flags for avfilter internal use only. - -#if FF_API_NEXT - /** - * Used by the filter registration system. Must not be touched by any other - * code. - */ - struct AVFilter *next; -#endif - - /** - * Make the filter instance process a command. - * - * @param cmd the command to process, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param res a buffer with size res_size where the filter(s) can return a response. This must not change when the command is not supported. - * @param flags if AVFILTER_CMD_FLAG_FAST is set and the command would be - * time consuming then a filter should treat it like an unsupported command - * - * @returns >=0 on success otherwise an error code. - * AVERROR(ENOSYS) on unsupported commands - */ - int (*process_command)(AVFilterContext *, const char *cmd, const char *arg, char *res, int res_len, int flags); - - /** - * Filter initialization function, alternative to the init() - * callback. Args contains the user-supplied parameters, opaque is - * used for providing binary data. - */ - int (*init_opaque)(AVFilterContext *ctx, void *opaque); - - /** - * Filter activation function. - * - * Called when any processing is needed from the filter, instead of any - * filter_frame and request_frame on pads. - * - * The function must examine inlinks and outlinks and perform a single - * step of processing. If there is nothing to do, the function must do - * nothing and not return an error. If more steps are or may be - * possible, it must use ff_filter_set_ready() to schedule another - * activation. - */ - int (*activate)(AVFilterContext *ctx); -} AVFilter; - -/** - * Process multiple parts of the frame concurrently. - */ -#define AVFILTER_THREAD_SLICE (1 << 0) - -typedef struct AVFilterInternal AVFilterInternal; - -/** An instance of a filter */ -struct AVFilterContext { - const AVClass *av_class; ///< needed for av_log() and filters common options - - const AVFilter *filter; ///< the AVFilter of which this is an instance - - char *name; ///< name of this filter instance - - AVFilterPad *input_pads; ///< array of input pads - AVFilterLink **inputs; ///< array of pointers to input links - unsigned nb_inputs; ///< number of input pads - - AVFilterPad *output_pads; ///< array of output pads - AVFilterLink **outputs; ///< array of pointers to output links - unsigned nb_outputs; ///< number of output pads - - void *priv; ///< private data for use by the filter - - struct AVFilterGraph *graph; ///< filtergraph this filter belongs to - - /** - * Type of multithreading being allowed/used. A combination of - * AVFILTER_THREAD_* flags. - * - * May be set by the caller before initializing the filter to forbid some - * or all kinds of multithreading for this filter. The default is allowing - * everything. - * - * When the filter is initialized, this field is combined using bit AND with - * AVFilterGraph.thread_type to get the final mask used for determining - * allowed threading types. I.e. a threading type needs to be set in both - * to be allowed. - * - * After the filter is initialized, libavfilter sets this field to the - * threading type that is actually used (0 for no multithreading). - */ - int thread_type; - - /** - * An opaque struct for libavfilter internal use. - */ - AVFilterInternal *internal; - - struct AVFilterCommand *command_queue; - - char *enable_str; ///< enable expression string - void *enable; ///< parsed expression (AVExpr*) - double *var_values; ///< variable values for the enable expression - int is_disabled; ///< the enabled state from the last expression evaluation - - /** - * For filters which will create hardware frames, sets the device the - * filter should create them in. All other filters will ignore this field: - * in particular, a filter which consumes or processes hardware frames will - * instead use the hw_frames_ctx field in AVFilterLink to carry the - * hardware context information. - */ - AVBufferRef *hw_device_ctx; - - /** - * Max number of threads allowed in this filter instance. - * If <= 0, its value is ignored. - * Overrides global number of threads set per filter graph. - */ - int nb_threads; - - /** - * Ready status of the filter. - * A non-0 value means that the filter needs activating; - * a higher value suggests a more urgent activation. - */ - unsigned ready; - - /** - * Sets the number of extra hardware frames which the filter will - * allocate on its output links for use in following filters or by - * the caller. - * - * Some hardware filters require all frames that they will use for - * output to be defined in advance before filtering starts. For such - * filters, any hardware frame pools used for output must therefore be - * of fixed size. The extra frames set here are on top of any number - * that the filter needs internally in order to operate normally. - * - * This field must be set before the graph containing this filter is - * configured. - */ - int extra_hw_frames; -}; - -/** - * Lists of formats / etc. supported by an end of a link. - * - * This structure is directly part of AVFilterLink, in two copies: - * one for the source filter, one for the destination filter. - - * These lists are used for negotiating the format to actually be used, - * which will be loaded into the format and channel_layout members of - * AVFilterLink, when chosen. - */ -typedef struct AVFilterFormatsConfig { - - /** - * List of supported formats (pixel or sample). - */ - AVFilterFormats *formats; - - /** - * Lists of supported sample rates, only for audio. - */ - AVFilterFormats *samplerates; - - /** - * Lists of supported channel layouts, only for audio. - */ - AVFilterChannelLayouts *channel_layouts; - -} AVFilterFormatsConfig; - -/** - * A link between two filters. This contains pointers to the source and - * destination filters between which this link exists, and the indexes of - * the pads involved. In addition, this link also contains the parameters - * which have been negotiated and agreed upon between the filter, such as - * image dimensions, format, etc. - * - * Applications must not normally access the link structure directly. - * Use the buffersrc and buffersink API instead. - * In the future, access to the header may be reserved for filters - * implementation. - */ -struct AVFilterLink { - AVFilterContext *src; ///< source filter - AVFilterPad *srcpad; ///< output pad on the source filter - - AVFilterContext *dst; ///< dest filter - AVFilterPad *dstpad; ///< input pad on the dest filter - - enum AVMediaType type; ///< filter media type - - /* These parameters apply only to video */ - int w; ///< agreed upon image width - int h; ///< agreed upon image height - AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio - /* These parameters apply only to audio */ - uint64_t channel_layout; ///< channel layout of current buffer (see libavutil/channel_layout.h) - int sample_rate; ///< samples per second - - int format; ///< agreed upon media format - - /** - * Define the time base used by the PTS of the frames/samples - * which will pass through this link. - * During the configuration stage, each filter is supposed to - * change only the output timebase, while the timebase of the - * input link is assumed to be an unchangeable property. - */ - AVRational time_base; - - /***************************************************************** - * All fields below this line are not part of the public API. They - * may not be used outside of libavfilter and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * Lists of supported formats / etc. supported by the input filter. - */ - AVFilterFormatsConfig incfg; - - /** - * Lists of supported formats / etc. supported by the output filter. - */ - AVFilterFormatsConfig outcfg; - - /** stage of the initialization of the link properties (dimensions, etc) */ - enum { - AVLINK_UNINIT = 0, ///< not started - AVLINK_STARTINIT, ///< started, but incomplete - AVLINK_INIT ///< complete - } init_state; - - /** - * Graph the filter belongs to. - */ - struct AVFilterGraph *graph; - - /** - * Current timestamp of the link, as defined by the most recent - * frame(s), in link time_base units. - */ - int64_t current_pts; - - /** - * Current timestamp of the link, as defined by the most recent - * frame(s), in AV_TIME_BASE units. - */ - int64_t current_pts_us; - - /** - * Index in the age array. - */ - int age_index; - - /** - * Frame rate of the stream on the link, or 1/0 if unknown or variable; - * if left to 0/0, will be automatically copied from the first input - * of the source filter if it exists. - * - * Sources should set it to the best estimation of the real frame rate. - * If the source frame rate is unknown or variable, set this to 1/0. - * Filters should update it if necessary depending on their function. - * Sinks can use it to set a default output frame rate. - * It is similar to the r_frame_rate field in AVStream. - */ - AVRational frame_rate; - - /** - * Buffer partially filled with samples to achieve a fixed/minimum size. - */ - AVFrame *partial_buf; - - /** - * Size of the partial buffer to allocate. - * Must be between min_samples and max_samples. - */ - int partial_buf_size; - - /** - * Minimum number of samples to filter at once. If filter_frame() is - * called with fewer samples, it will accumulate them in partial_buf. - * This field and the related ones must not be changed after filtering - * has started. - * If 0, all related fields are ignored. - */ - int min_samples; - - /** - * Maximum number of samples to filter at once. If filter_frame() is - * called with more samples, it will split them. - */ - int max_samples; - - /** - * Number of channels. - */ - int channels; - - /** - * Number of past frames sent through the link. - */ - int64_t frame_count_in, frame_count_out; - - /** - * A pointer to a FFFramePool struct. - */ - void *frame_pool; - - /** - * True if a frame is currently wanted on the output of this filter. - * Set when ff_request_frame() is called by the output, - * cleared when a frame is filtered. - */ - int frame_wanted_out; - - /** - * For hwaccel pixel formats, this should be a reference to the - * AVHWFramesContext describing the frames. - */ - AVBufferRef *hw_frames_ctx; - -#ifndef FF_INTERNAL_FIELDS - - /** - * Internal structure members. - * The fields below this limit are internal for libavfilter's use - * and must in no way be accessed by applications. - */ - char reserved[0xF000]; - -#else /* FF_INTERNAL_FIELDS */ - - /** - * Queue of frames waiting to be filtered. - */ - FFFrameQueue fifo; - - /** - * If set, the source filter can not generate a frame as is. - * The goal is to avoid repeatedly calling the request_frame() method on - * the same link. - */ - int frame_blocked_in; - - /** - * Link input status. - * If not zero, all attempts of filter_frame will fail with the - * corresponding code. - */ - int status_in; - - /** - * Timestamp of the input status change. - */ - int64_t status_in_pts; - - /** - * Link output status. - * If not zero, all attempts of request_frame will fail with the - * corresponding code. - */ - int status_out; - -#endif /* FF_INTERNAL_FIELDS */ - -}; - -/** - * Link two filters together. - * - * @param src the source filter - * @param srcpad index of the output pad on the source filter - * @param dst the destination filter - * @param dstpad index of the input pad on the destination filter - * @return zero on success - */ -int avfilter_link(AVFilterContext *src, unsigned srcpad, - AVFilterContext *dst, unsigned dstpad); - -/** - * Free the link in *link, and set its pointer to NULL. - */ -void avfilter_link_free(AVFilterLink **link); - -#if FF_API_FILTER_GET_SET -/** - * Get the number of channels of a link. - * @deprecated Use av_buffersink_get_channels() - */ -attribute_deprecated -int avfilter_link_get_channels(AVFilterLink *link); -#endif -#if FF_API_FILTER_LINK_SET_CLOSED -/** - * Set the closed field of a link. - * @deprecated applications are not supposed to mess with links, they should - * close the sinks. - */ -attribute_deprecated -void avfilter_link_set_closed(AVFilterLink *link, int closed); -#endif -/** - * Negotiate the media format, dimensions, etc of all inputs to a filter. - * - * @param filter the filter to negotiate the properties for its inputs - * @return zero on successful negotiation - */ -int avfilter_config_links(AVFilterContext *filter); - -#define AVFILTER_CMD_FLAG_ONE 1 ///< Stop once a filter understood the command (for target=all for example), fast filters are favored automatically -#define AVFILTER_CMD_FLAG_FAST 2 ///< Only execute command when its fast (like a video out that supports contrast adjustment in hw) - -/** - * Make the filter instance process a command. - * It is recommended to use avfilter_graph_send_command(). - */ -int avfilter_process_command(AVFilterContext *filter, const char *cmd, const char *arg, char *res, int res_len, int flags); - -/** - * Iterate over all registered filters. - * - * @param opaque a pointer where libavfilter will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered filter or NULL when the iteration is - * finished - */ -const AVFilter *av_filter_iterate(void **opaque); - -#if FF_API_NEXT -/** Initialize the filter system. Register all builtin filters. */ -attribute_deprecated -void avfilter_register_all(void); - -/** - * Register a filter. This is only needed if you plan to use - * avfilter_get_by_name later to lookup the AVFilter structure by name. A - * filter can still by instantiated with avfilter_graph_alloc_filter even if it - * is not registered. - * - * @param filter the filter to register - * @return 0 if the registration was successful, a negative value - * otherwise - */ -attribute_deprecated -int avfilter_register(AVFilter *filter); - -/** - * Iterate over all registered filters. - * @return If prev is non-NULL, next registered filter after prev or NULL if - * prev is the last filter. If prev is NULL, return the first registered filter. - */ -attribute_deprecated -const AVFilter *avfilter_next(const AVFilter *prev); -#endif - -/** - * Get a filter definition matching the given name. - * - * @param name the filter name to find - * @return the filter definition, if any matching one is registered. - * NULL if none found. - */ -const AVFilter *avfilter_get_by_name(const char *name); - - -/** - * Initialize a filter with the supplied parameters. - * - * @param ctx uninitialized filter context to initialize - * @param args Options to initialize the filter with. This must be a - * ':'-separated list of options in the 'key=value' form. - * May be NULL if the options have been set directly using the - * AVOptions API or there are no options that need to be set. - * @return 0 on success, a negative AVERROR on failure - */ -int avfilter_init_str(AVFilterContext *ctx, const char *args); - -/** - * Initialize a filter with the supplied dictionary of options. - * - * @param ctx uninitialized filter context to initialize - * @param options An AVDictionary filled with options for this filter. On - * return this parameter will be destroyed and replaced with - * a dict containing options that were not found. This dictionary - * must be freed by the caller. - * May be NULL, then this function is equivalent to - * avfilter_init_str() with the second parameter set to NULL. - * @return 0 on success, a negative AVERROR on failure - * - * @note This function and avfilter_init_str() do essentially the same thing, - * the difference is in manner in which the options are passed. It is up to the - * calling code to choose whichever is more preferable. The two functions also - * behave differently when some of the provided options are not declared as - * supported by the filter. In such a case, avfilter_init_str() will fail, but - * this function will leave those extra options in the options AVDictionary and - * continue as usual. - */ -int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options); - -/** - * Free a filter context. This will also remove the filter from its - * filtergraph's list of filters. - * - * @param filter the filter to free - */ -void avfilter_free(AVFilterContext *filter); - -/** - * Insert a filter in the middle of an existing link. - * - * @param link the link into which the filter should be inserted - * @param filt the filter to be inserted - * @param filt_srcpad_idx the input pad on the filter to connect - * @param filt_dstpad_idx the output pad on the filter to connect - * @return zero on success - */ -int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, - unsigned filt_srcpad_idx, unsigned filt_dstpad_idx); - -/** - * @return AVClass for AVFilterContext. - * - * @see av_opt_find(). - */ -const AVClass *avfilter_get_class(void); - -typedef struct AVFilterGraphInternal AVFilterGraphInternal; - -/** - * A function pointer passed to the @ref AVFilterGraph.execute callback to be - * executed multiple times, possibly in parallel. - * - * @param ctx the filter context the job belongs to - * @param arg an opaque parameter passed through from @ref - * AVFilterGraph.execute - * @param jobnr the index of the job being executed - * @param nb_jobs the total number of jobs - * - * @return 0 on success, a negative AVERROR on error - */ -typedef int (avfilter_action_func)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs); - -/** - * A function executing multiple jobs, possibly in parallel. - * - * @param ctx the filter context to which the jobs belong - * @param func the function to be called multiple times - * @param arg the argument to be passed to func - * @param ret a nb_jobs-sized array to be filled with return values from each - * invocation of func - * @param nb_jobs the number of jobs to execute - * - * @return 0 on success, a negative AVERROR on error - */ -typedef int (avfilter_execute_func)(AVFilterContext *ctx, avfilter_action_func *func, - void *arg, int *ret, int nb_jobs); - -typedef struct AVFilterGraph { - const AVClass *av_class; - AVFilterContext **filters; - unsigned nb_filters; - - char *scale_sws_opts; ///< sws options to use for the auto-inserted scale filters -#if FF_API_LAVR_OPTS - attribute_deprecated char *resample_lavr_opts; ///< libavresample options to use for the auto-inserted resample filters -#endif - - /** - * Type of multithreading allowed for filters in this graph. A combination - * of AVFILTER_THREAD_* flags. - * - * May be set by the caller at any point, the setting will apply to all - * filters initialized after that. The default is allowing everything. - * - * When a filter in this graph is initialized, this field is combined using - * bit AND with AVFilterContext.thread_type to get the final mask used for - * determining allowed threading types. I.e. a threading type needs to be - * set in both to be allowed. - */ - int thread_type; - - /** - * Maximum number of threads used by filters in this graph. May be set by - * the caller before adding any filters to the filtergraph. Zero (the - * default) means that the number of threads is determined automatically. - */ - int nb_threads; - - /** - * Opaque object for libavfilter internal use. - */ - AVFilterGraphInternal *internal; - - /** - * Opaque user data. May be set by the caller to an arbitrary value, e.g. to - * be used from callbacks like @ref AVFilterGraph.execute. - * Libavfilter will not touch this field in any way. - */ - void *opaque; - - /** - * This callback may be set by the caller immediately after allocating the - * graph and before adding any filters to it, to provide a custom - * multithreading implementation. - * - * If set, filters with slice threading capability will call this callback - * to execute multiple jobs in parallel. - * - * If this field is left unset, libavfilter will use its internal - * implementation, which may or may not be multithreaded depending on the - * platform and build options. - */ - avfilter_execute_func *execute; - - char *aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions - - /** - * Private fields - * - * The following fields are for internal use only. - * Their type, offset, number and semantic can change without notice. - */ - - AVFilterLink **sink_links; - int sink_links_count; - - unsigned disable_auto_convert; -} AVFilterGraph; - -/** - * Allocate a filter graph. - * - * @return the allocated filter graph on success or NULL. - */ -AVFilterGraph *avfilter_graph_alloc(void); - -/** - * Create a new filter instance in a filter graph. - * - * @param graph graph in which the new filter will be used - * @param filter the filter to create an instance of - * @param name Name to give to the new instance (will be copied to - * AVFilterContext.name). This may be used by the caller to identify - * different filters, libavfilter itself assigns no semantics to - * this parameter. May be NULL. - * - * @return the context of the newly created filter instance (note that it is - * also retrievable directly through AVFilterGraph.filters or with - * avfilter_graph_get_filter()) on success or NULL on failure. - */ -AVFilterContext *avfilter_graph_alloc_filter(AVFilterGraph *graph, - const AVFilter *filter, - const char *name); - -/** - * Get a filter instance identified by instance name from graph. - * - * @param graph filter graph to search through. - * @param name filter instance name (should be unique in the graph). - * @return the pointer to the found filter instance or NULL if it - * cannot be found. - */ -AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, const char *name); - -/** - * Create and add a filter instance into an existing graph. - * The filter instance is created from the filter filt and inited - * with the parameter args. opaque is currently ignored. - * - * In case of success put in *filt_ctx the pointer to the created - * filter instance, otherwise set *filt_ctx to NULL. - * - * @param name the instance name to give to the created filter instance - * @param graph_ctx the filter graph - * @return a negative AVERROR error code in case of failure, a non - * negative value otherwise - */ -int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt, - const char *name, const char *args, void *opaque, - AVFilterGraph *graph_ctx); - -/** - * Enable or disable automatic format conversion inside the graph. - * - * Note that format conversion can still happen inside explicitly inserted - * scale and aresample filters. - * - * @param flags any of the AVFILTER_AUTO_CONVERT_* constants - */ -void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags); - -enum { - AVFILTER_AUTO_CONVERT_ALL = 0, /**< all automatic conversions enabled */ - AVFILTER_AUTO_CONVERT_NONE = -1, /**< all automatic conversions disabled */ -}; - -/** - * Check validity and configure all the links and formats in the graph. - * - * @param graphctx the filter graph - * @param log_ctx context used for logging - * @return >= 0 in case of success, a negative AVERROR code otherwise - */ -int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx); - -/** - * Free a graph, destroy its links, and set *graph to NULL. - * If *graph is NULL, do nothing. - */ -void avfilter_graph_free(AVFilterGraph **graph); - -/** - * A linked-list of the inputs/outputs of the filter chain. - * - * This is mainly useful for avfilter_graph_parse() / avfilter_graph_parse2(), - * where it is used to communicate open (unlinked) inputs and outputs from and - * to the caller. - * This struct specifies, per each not connected pad contained in the graph, the - * filter context and the pad index required for establishing a link. - */ -typedef struct AVFilterInOut { - /** unique name for this input/output in the list */ - char *name; - - /** filter context associated to this input/output */ - AVFilterContext *filter_ctx; - - /** index of the filt_ctx pad to use for linking */ - int pad_idx; - - /** next input/input in the list, NULL if this is the last */ - struct AVFilterInOut *next; -} AVFilterInOut; - -/** - * Allocate a single AVFilterInOut entry. - * Must be freed with avfilter_inout_free(). - * @return allocated AVFilterInOut on success, NULL on failure. - */ -AVFilterInOut *avfilter_inout_alloc(void); - -/** - * Free the supplied list of AVFilterInOut and set *inout to NULL. - * If *inout is NULL, do nothing. - */ -void avfilter_inout_free(AVFilterInOut **inout); - -/** - * Add a graph described by a string to a graph. - * - * @note The caller must provide the lists of inputs and outputs, - * which therefore must be known before calling the function. - * - * @note The inputs parameter describes inputs of the already existing - * part of the graph; i.e. from the point of view of the newly created - * part, they are outputs. Similarly the outputs parameter describes - * outputs of the already existing filters, which are provided as - * inputs to the parsed filters. - * - * @param graph the filter graph where to link the parsed graph context - * @param filters string to be parsed - * @param inputs linked list to the inputs of the graph - * @param outputs linked list to the outputs of the graph - * @return zero on success, a negative AVERROR code on error - */ -int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, - AVFilterInOut *inputs, AVFilterInOut *outputs, - void *log_ctx); - -/** - * Add a graph described by a string to a graph. - * - * In the graph filters description, if the input label of the first - * filter is not specified, "in" is assumed; if the output label of - * the last filter is not specified, "out" is assumed. - * - * @param graph the filter graph where to link the parsed graph context - * @param filters string to be parsed - * @param inputs pointer to a linked list to the inputs of the graph, may be NULL. - * If non-NULL, *inputs is updated to contain the list of open inputs - * after the parsing, should be freed with avfilter_inout_free(). - * @param outputs pointer to a linked list to the outputs of the graph, may be NULL. - * If non-NULL, *outputs is updated to contain the list of open outputs - * after the parsing, should be freed with avfilter_inout_free(). - * @return non negative on success, a negative AVERROR code on error - */ -int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters, - AVFilterInOut **inputs, AVFilterInOut **outputs, - void *log_ctx); - -/** - * Add a graph described by a string to a graph. - * - * @param[in] graph the filter graph where to link the parsed graph context - * @param[in] filters string to be parsed - * @param[out] inputs a linked list of all free (unlinked) inputs of the - * parsed graph will be returned here. It is to be freed - * by the caller using avfilter_inout_free(). - * @param[out] outputs a linked list of all free (unlinked) outputs of the - * parsed graph will be returned here. It is to be freed by the - * caller using avfilter_inout_free(). - * @return zero on success, a negative AVERROR code on error - * - * @note This function returns the inputs and outputs that are left - * unlinked after parsing the graph and the caller then deals with - * them. - * @note This function makes no reference whatsoever to already - * existing parts of the graph and the inputs parameter will on return - * contain inputs of the newly parsed part of the graph. Analogously - * the outputs parameter will contain outputs of the newly created - * filters. - */ -int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters, - AVFilterInOut **inputs, - AVFilterInOut **outputs); - -/** - * Send a command to one or more filter instances. - * - * @param graph the filter graph - * @param target the filter(s) to which the command should be sent - * "all" sends to all filters - * otherwise it can be a filter or filter instance name - * which will send the command to all matching filters. - * @param cmd the command to send, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param res a buffer with size res_size where the filter(s) can return a response. - * - * @returns >=0 on success otherwise an error code. - * AVERROR(ENOSYS) on unsupported commands - */ -int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags); - -/** - * Queue a command for one or more filter instances. - * - * @param graph the filter graph - * @param target the filter(s) to which the command should be sent - * "all" sends to all filters - * otherwise it can be a filter or filter instance name - * which will send the command to all matching filters. - * @param cmd the command to sent, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param ts time at which the command should be sent to the filter - * - * @note As this executes commands after this function returns, no return code - * from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported. - */ -int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts); - - -/** - * Dump a graph into a human-readable string representation. - * - * @param graph the graph to dump - * @param options formatting options; currently ignored - * @return a string, or NULL in case of memory allocation failure; - * the string must be freed using av_free - */ -char *avfilter_graph_dump(AVFilterGraph *graph, const char *options); - -/** - * Request a frame on the oldest sink link. - * - * If the request returns AVERROR_EOF, try the next. - * - * Note that this function is not meant to be the sole scheduling mechanism - * of a filtergraph, only a convenience function to help drain a filtergraph - * in a balanced way under normal circumstances. - * - * Also note that AVERROR_EOF does not mean that frames did not arrive on - * some of the sinks during the process. - * When there are multiple sink links, in case the requested link - * returns an EOF, this may cause a filter to flush pending frames - * which are sent to another sink link, although unrequested. - * - * @return the return value of ff_request_frame(), - * or AVERROR_EOF if all links returned AVERROR_EOF - */ -int avfilter_graph_request_oldest(AVFilterGraph *graph); - -/** - * @} - */ - -#endif /* AVFILTER_AVFILTER_H */ diff --git a/prebuilts/arm/include/libavfilter/buffersink.h b/prebuilts/arm/include/libavfilter/buffersink.h deleted file mode 100644 index 69ed0f2..0000000 --- a/prebuilts/arm/include/libavfilter/buffersink.h +++ /dev/null @@ -1,205 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_BUFFERSINK_H -#define AVFILTER_BUFFERSINK_H - -/** - * @file - * @ingroup lavfi_buffersink - * memory buffer sink API for audio and video - */ - -#include "avfilter.h" - -/** - * @defgroup lavfi_buffersink Buffer sink API - * @ingroup lavfi - * @{ - * - * The buffersink and abuffersink filters are there to connect filter graphs - * to applications. They have a single input, connected to the graph, and no - * output. Frames must be extracted using av_buffersink_get_frame() or - * av_buffersink_get_samples(). - * - * The format negotiated by the graph during configuration can be obtained - * using the accessor functions: - * - av_buffersink_get_time_base(), - * - av_buffersink_get_format(), - * - av_buffersink_get_frame_rate(), - * - av_buffersink_get_w(), - * - av_buffersink_get_h(), - * - av_buffersink_get_sample_aspect_ratio(), - * - av_buffersink_get_channels(), - * - av_buffersink_get_channel_layout(), - * - av_buffersink_get_sample_rate(). - * - * The format can be constrained by setting options, using av_opt_set() and - * related functions with the AV_OPT_SEARCH_CHILDREN flag. - * - pix_fmts (int list), - * - sample_fmts (int list), - * - sample_rates (int list), - * - channel_layouts (int64_t), - * - channel_counts (int list), - * - all_channel_counts (bool). - * Most of these options are of type binary, and should be set using - * av_opt_set_int_list() or av_opt_set_bin(). If they are not set, all - * corresponding formats are accepted. - * - * As a special case, if neither channel_layouts nor channel_counts is set, - * all valid channel layouts are accepted, but channel counts without a - * layout are not, unless all_channel_counts is set. - * Also, channel_layouts must not contain a channel layout already accepted - * by a value in channel_counts; for example, if channel_counts contains 2, - * then channel_layouts must not contain stereo. - */ - -/** - * Get a frame with filtered data from sink and put it in frame. - * - * @param ctx pointer to a buffersink or abuffersink filter context. - * @param frame pointer to an allocated frame that will be filled with data. - * The data must be freed using av_frame_unref() / av_frame_free() - * @param flags a combination of AV_BUFFERSINK_FLAG_* flags - * - * @return >= 0 in for success, a negative AVERROR code for failure. - */ -int av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags); - -/** - * Tell av_buffersink_get_buffer_ref() to read video/samples buffer - * reference, but not remove it from the buffer. This is useful if you - * need only to read a video/samples buffer, without to fetch it. - */ -#define AV_BUFFERSINK_FLAG_PEEK 1 - -/** - * Tell av_buffersink_get_buffer_ref() not to request a frame from its input. - * If a frame is already buffered, it is read (and removed from the buffer), - * but if no frame is present, return AVERROR(EAGAIN). - */ -#define AV_BUFFERSINK_FLAG_NO_REQUEST 2 - -#if FF_API_BUFFERSINK_ALLOC -/** - * Deprecated and unused struct to use for initializing a buffersink context. - */ -typedef struct AVBufferSinkParams { - const enum AVPixelFormat *pixel_fmts; ///< list of allowed pixel formats, terminated by AV_PIX_FMT_NONE -} AVBufferSinkParams; - -/** - * Create an AVBufferSinkParams structure. - * - * Must be freed with av_free(). - */ -attribute_deprecated -AVBufferSinkParams *av_buffersink_params_alloc(void); - -/** - * Deprecated and unused struct to use for initializing an abuffersink context. - */ -typedef struct AVABufferSinkParams { - const enum AVSampleFormat *sample_fmts; ///< list of allowed sample formats, terminated by AV_SAMPLE_FMT_NONE - const int64_t *channel_layouts; ///< list of allowed channel layouts, terminated by -1 - const int *channel_counts; ///< list of allowed channel counts, terminated by -1 - int all_channel_counts; ///< if not 0, accept any channel count or layout - int *sample_rates; ///< list of allowed sample rates, terminated by -1 -} AVABufferSinkParams; - -/** - * Create an AVABufferSinkParams structure. - * - * Must be freed with av_free(). - */ -attribute_deprecated -AVABufferSinkParams *av_abuffersink_params_alloc(void); -#endif - -/** - * Set the frame size for an audio buffer sink. - * - * All calls to av_buffersink_get_buffer_ref will return a buffer with - * exactly the specified number of samples, or AVERROR(EAGAIN) if there is - * not enough. The last buffer at EOF will be padded with 0. - */ -void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size); - -/** - * @defgroup lavfi_buffersink_accessors Buffer sink accessors - * Get the properties of the stream - * @{ - */ - -enum AVMediaType av_buffersink_get_type (const AVFilterContext *ctx); -AVRational av_buffersink_get_time_base (const AVFilterContext *ctx); -int av_buffersink_get_format (const AVFilterContext *ctx); - -AVRational av_buffersink_get_frame_rate (const AVFilterContext *ctx); -int av_buffersink_get_w (const AVFilterContext *ctx); -int av_buffersink_get_h (const AVFilterContext *ctx); -AVRational av_buffersink_get_sample_aspect_ratio (const AVFilterContext *ctx); - -int av_buffersink_get_channels (const AVFilterContext *ctx); -uint64_t av_buffersink_get_channel_layout (const AVFilterContext *ctx); -int av_buffersink_get_sample_rate (const AVFilterContext *ctx); - -AVBufferRef * av_buffersink_get_hw_frames_ctx (const AVFilterContext *ctx); - -/** @} */ - -/** - * Get a frame with filtered data from sink and put it in frame. - * - * @param ctx pointer to a context of a buffersink or abuffersink AVFilter. - * @param frame pointer to an allocated frame that will be filled with data. - * The data must be freed using av_frame_unref() / av_frame_free() - * - * @return - * - >= 0 if a frame was successfully returned. - * - AVERROR(EAGAIN) if no frames are available at this point; more - * input frames must be added to the filtergraph to get more output. - * - AVERROR_EOF if there will be no more output frames on this sink. - * - A different negative AVERROR code in other failure cases. - */ -int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame); - -/** - * Same as av_buffersink_get_frame(), but with the ability to specify the number - * of samples read. This function is less efficient than - * av_buffersink_get_frame(), because it copies the data around. - * - * @param ctx pointer to a context of the abuffersink AVFilter. - * @param frame pointer to an allocated frame that will be filled with data. - * The data must be freed using av_frame_unref() / av_frame_free() - * frame will contain exactly nb_samples audio samples, except at - * the end of stream, when it can contain less than nb_samples. - * - * @return The return codes have the same meaning as for - * av_buffersink_get_frame(). - * - * @warning do not mix this function with av_buffersink_get_frame(). Use only one or - * the other with a single sink, not both. - */ -int av_buffersink_get_samples(AVFilterContext *ctx, AVFrame *frame, int nb_samples); - -/** - * @} - */ - -#endif /* AVFILTER_BUFFERSINK_H */ diff --git a/prebuilts/arm/include/libavfilter/buffersrc.h b/prebuilts/arm/include/libavfilter/buffersrc.h deleted file mode 100644 index 08fbd18..0000000 --- a/prebuilts/arm/include/libavfilter/buffersrc.h +++ /dev/null @@ -1,209 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_BUFFERSRC_H -#define AVFILTER_BUFFERSRC_H - -/** - * @file - * @ingroup lavfi_buffersrc - * Memory buffer source API. - */ - -#include "avfilter.h" - -/** - * @defgroup lavfi_buffersrc Buffer source API - * @ingroup lavfi - * @{ - */ - -enum { - - /** - * Do not check for format changes. - */ - AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT = 1, - - /** - * Immediately push the frame to the output. - */ - AV_BUFFERSRC_FLAG_PUSH = 4, - - /** - * Keep a reference to the frame. - * If the frame if reference-counted, create a new reference; otherwise - * copy the frame data. - */ - AV_BUFFERSRC_FLAG_KEEP_REF = 8, - -}; - -/** - * Get the number of failed requests. - * - * A failed request is when the request_frame method is called while no - * frame is present in the buffer. - * The number is reset when a frame is added. - */ -unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src); - -/** - * This structure contains the parameters describing the frames that will be - * passed to this filter. - * - * It should be allocated with av_buffersrc_parameters_alloc() and freed with - * av_free(). All the allocated fields in it remain owned by the caller. - */ -typedef struct AVBufferSrcParameters { - /** - * video: the pixel format, value corresponds to enum AVPixelFormat - * audio: the sample format, value corresponds to enum AVSampleFormat - */ - int format; - /** - * The timebase to be used for the timestamps on the input frames. - */ - AVRational time_base; - - /** - * Video only, the display dimensions of the input frames. - */ - int width, height; - - /** - * Video only, the sample (pixel) aspect ratio. - */ - AVRational sample_aspect_ratio; - - /** - * Video only, the frame rate of the input video. This field must only be - * set to a non-zero value if input stream has a known constant framerate - * and should be left at its initial value if the framerate is variable or - * unknown. - */ - AVRational frame_rate; - - /** - * Video with a hwaccel pixel format only. This should be a reference to an - * AVHWFramesContext instance describing the input frames. - */ - AVBufferRef *hw_frames_ctx; - - /** - * Audio only, the audio sampling rate in samples per second. - */ - int sample_rate; - - /** - * Audio only, the audio channel layout - */ - uint64_t channel_layout; -} AVBufferSrcParameters; - -/** - * Allocate a new AVBufferSrcParameters instance. It should be freed by the - * caller with av_free(). - */ -AVBufferSrcParameters *av_buffersrc_parameters_alloc(void); - -/** - * Initialize the buffersrc or abuffersrc filter with the provided parameters. - * This function may be called multiple times, the later calls override the - * previous ones. Some of the parameters may also be set through AVOptions, then - * whatever method is used last takes precedence. - * - * @param ctx an instance of the buffersrc or abuffersrc filter - * @param param the stream parameters. The frames later passed to this filter - * must conform to those parameters. All the allocated fields in - * param remain owned by the caller, libavfilter will make internal - * copies or references when necessary. - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *param); - -/** - * Add a frame to the buffer source. - * - * @param ctx an instance of the buffersrc filter - * @param frame frame to be added. If the frame is reference counted, this - * function will make a new reference to it. Otherwise the frame data will be - * copied. - * - * @return 0 on success, a negative AVERROR on error - * - * This function is equivalent to av_buffersrc_add_frame_flags() with the - * AV_BUFFERSRC_FLAG_KEEP_REF flag. - */ -av_warn_unused_result -int av_buffersrc_write_frame(AVFilterContext *ctx, const AVFrame *frame); - -/** - * Add a frame to the buffer source. - * - * @param ctx an instance of the buffersrc filter - * @param frame frame to be added. If the frame is reference counted, this - * function will take ownership of the reference(s) and reset the frame. - * Otherwise the frame data will be copied. If this function returns an error, - * the input frame is not touched. - * - * @return 0 on success, a negative AVERROR on error. - * - * @note the difference between this function and av_buffersrc_write_frame() is - * that av_buffersrc_write_frame() creates a new reference to the input frame, - * while this function takes ownership of the reference passed to it. - * - * This function is equivalent to av_buffersrc_add_frame_flags() without the - * AV_BUFFERSRC_FLAG_KEEP_REF flag. - */ -av_warn_unused_result -int av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame); - -/** - * Add a frame to the buffer source. - * - * By default, if the frame is reference-counted, this function will take - * ownership of the reference(s) and reset the frame. This can be controlled - * using the flags. - * - * If this function returns an error, the input frame is not touched. - * - * @param buffer_src pointer to a buffer source context - * @param frame a frame, or NULL to mark EOF - * @param flags a combination of AV_BUFFERSRC_FLAG_* - * @return >= 0 in case of success, a negative AVERROR code - * in case of failure - */ -av_warn_unused_result -int av_buffersrc_add_frame_flags(AVFilterContext *buffer_src, - AVFrame *frame, int flags); - -/** - * Close the buffer source after EOF. - * - * This is similar to passing NULL to av_buffersrc_add_frame_flags() - * except it takes the timestamp of the EOF, i.e. the timestamp of the end - * of the last frame. - */ -int av_buffersrc_close(AVFilterContext *ctx, int64_t pts, unsigned flags); - -/** - * @} - */ - -#endif /* AVFILTER_BUFFERSRC_H */ diff --git a/prebuilts/arm/include/libavfilter/version.h b/prebuilts/arm/include/libavfilter/version.h deleted file mode 100644 index 33bb98e..0000000 --- a/prebuilts/arm/include/libavfilter/version.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_VERSION_H -#define AVFILTER_VERSION_H - -/** - * @file - * @ingroup lavfi - * Libavfilter version macros - */ - -#include "libavutil/version.h" - -#define LIBAVFILTER_VERSION_MAJOR 7 -#define LIBAVFILTER_VERSION_MINOR 110 -#define LIBAVFILTER_VERSION_MICRO 100 - - -#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ - LIBAVFILTER_VERSION_MINOR, \ - LIBAVFILTER_VERSION_MICRO) -#define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \ - LIBAVFILTER_VERSION_MINOR, \ - LIBAVFILTER_VERSION_MICRO) -#define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT - -#define LIBAVFILTER_IDENT "Lavfi" AV_STRINGIFY(LIBAVFILTER_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ - -#ifndef FF_API_OLD_FILTER_OPTS_ERROR -#define FF_API_OLD_FILTER_OPTS_ERROR (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_LAVR_OPTS -#define FF_API_LAVR_OPTS (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_FILTER_GET_SET -#define FF_API_FILTER_GET_SET (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_SWS_PARAM_OPTION -#define FF_API_SWS_PARAM_OPTION (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_NEXT -#define FF_API_NEXT (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_FILTER_LINK_SET_CLOSED -#define FF_API_FILTER_LINK_SET_CLOSED (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_BUFFERSINK_ALLOC -#define FF_API_BUFFERSINK_ALLOC (LIBAVFILTER_VERSION_MAJOR < 9) -#endif - -#endif /* AVFILTER_VERSION_H */ diff --git a/prebuilts/arm/include/libavformat/avformat.h b/prebuilts/arm/include/libavformat/avformat.h deleted file mode 100644 index 56708c0..0000000 --- a/prebuilts/arm/include/libavformat/avformat.h +++ /dev/null @@ -1,3012 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFORMAT_AVFORMAT_H -#define AVFORMAT_AVFORMAT_H - -/** - * @file - * @ingroup libavf - * Main libavformat public API header - */ - -/** - * @defgroup libavf libavformat - * I/O and Muxing/Demuxing Library - * - * Libavformat (lavf) is a library for dealing with various media container - * formats. Its main two purposes are demuxing - i.e. splitting a media file - * into component streams, and the reverse process of muxing - writing supplied - * data in a specified container format. It also has an @ref lavf_io - * "I/O module" which supports a number of protocols for accessing the data (e.g. - * file, tcp, http and others). - * Unless you are absolutely sure you won't use libavformat's network - * capabilities, you should also call avformat_network_init(). - * - * A supported input format is described by an AVInputFormat struct, conversely - * an output format is described by AVOutputFormat. You can iterate over all - * input/output formats using the av_demuxer_iterate / av_muxer_iterate() functions. - * The protocols layer is not part of the public API, so you can only get the names - * of supported protocols with the avio_enum_protocols() function. - * - * Main lavf structure used for both muxing and demuxing is AVFormatContext, - * which exports all information about the file being read or written. As with - * most Libavformat structures, its size is not part of public ABI, so it cannot be - * allocated on stack or directly with av_malloc(). To create an - * AVFormatContext, use avformat_alloc_context() (some functions, like - * avformat_open_input() might do that for you). - * - * Most importantly an AVFormatContext contains: - * @li the @ref AVFormatContext.iformat "input" or @ref AVFormatContext.oformat - * "output" format. It is either autodetected or set by user for input; - * always set by user for output. - * @li an @ref AVFormatContext.streams "array" of AVStreams, which describe all - * elementary streams stored in the file. AVStreams are typically referred to - * using their index in this array. - * @li an @ref AVFormatContext.pb "I/O context". It is either opened by lavf or - * set by user for input, always set by user for output (unless you are dealing - * with an AVFMT_NOFILE format). - * - * @section lavf_options Passing options to (de)muxers - * It is possible to configure lavf muxers and demuxers using the @ref avoptions - * mechanism. Generic (format-independent) libavformat options are provided by - * AVFormatContext, they can be examined from a user program by calling - * av_opt_next() / av_opt_find() on an allocated AVFormatContext (or its AVClass - * from avformat_get_class()). Private (format-specific) options are provided by - * AVFormatContext.priv_data if and only if AVInputFormat.priv_class / - * AVOutputFormat.priv_class of the corresponding format struct is non-NULL. - * Further options may be provided by the @ref AVFormatContext.pb "I/O context", - * if its AVClass is non-NULL, and the protocols layer. See the discussion on - * nesting in @ref avoptions documentation to learn how to access those. - * - * @section urls - * URL strings in libavformat are made of a scheme/protocol, a ':', and a - * scheme specific string. URLs without a scheme and ':' used for local files - * are supported but deprecated. "file:" should be used for local files. - * - * It is important that the scheme string is not taken from untrusted - * sources without checks. - * - * Note that some schemes/protocols are quite powerful, allowing access to - * both local and remote files, parts of them, concatenations of them, local - * audio and video devices and so on. - * - * @{ - * - * @defgroup lavf_decoding Demuxing - * @{ - * Demuxers read a media file and split it into chunks of data (@em packets). A - * @ref AVPacket "packet" contains one or more encoded frames which belongs to a - * single elementary stream. In the lavf API this process is represented by the - * avformat_open_input() function for opening a file, av_read_frame() for - * reading a single packet and finally avformat_close_input(), which does the - * cleanup. - * - * @section lavf_decoding_open Opening a media file - * The minimum information required to open a file is its URL, which - * is passed to avformat_open_input(), as in the following code: - * @code - * const char *url = "file:in.mp3"; - * AVFormatContext *s = NULL; - * int ret = avformat_open_input(&s, url, NULL, NULL); - * if (ret < 0) - * abort(); - * @endcode - * The above code attempts to allocate an AVFormatContext, open the - * specified file (autodetecting the format) and read the header, exporting the - * information stored there into s. Some formats do not have a header or do not - * store enough information there, so it is recommended that you call the - * avformat_find_stream_info() function which tries to read and decode a few - * frames to find missing information. - * - * In some cases you might want to preallocate an AVFormatContext yourself with - * avformat_alloc_context() and do some tweaking on it before passing it to - * avformat_open_input(). One such case is when you want to use custom functions - * for reading input data instead of lavf internal I/O layer. - * To do that, create your own AVIOContext with avio_alloc_context(), passing - * your reading callbacks to it. Then set the @em pb field of your - * AVFormatContext to newly created AVIOContext. - * - * Since the format of the opened file is in general not known until after - * avformat_open_input() has returned, it is not possible to set demuxer private - * options on a preallocated context. Instead, the options should be passed to - * avformat_open_input() wrapped in an AVDictionary: - * @code - * AVDictionary *options = NULL; - * av_dict_set(&options, "video_size", "640x480", 0); - * av_dict_set(&options, "pixel_format", "rgb24", 0); - * - * if (avformat_open_input(&s, url, NULL, &options) < 0) - * abort(); - * av_dict_free(&options); - * @endcode - * This code passes the private options 'video_size' and 'pixel_format' to the - * demuxer. They would be necessary for e.g. the rawvideo demuxer, since it - * cannot know how to interpret raw video data otherwise. If the format turns - * out to be something different than raw video, those options will not be - * recognized by the demuxer and therefore will not be applied. Such unrecognized - * options are then returned in the options dictionary (recognized options are - * consumed). The calling program can handle such unrecognized options as it - * wishes, e.g. - * @code - * AVDictionaryEntry *e; - * if (e = av_dict_get(options, "", NULL, AV_DICT_IGNORE_SUFFIX)) { - * fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key); - * abort(); - * } - * @endcode - * - * After you have finished reading the file, you must close it with - * avformat_close_input(). It will free everything associated with the file. - * - * @section lavf_decoding_read Reading from an opened file - * Reading data from an opened AVFormatContext is done by repeatedly calling - * av_read_frame() on it. Each call, if successful, will return an AVPacket - * containing encoded data for one AVStream, identified by - * AVPacket.stream_index. This packet may be passed straight into the libavcodec - * decoding functions avcodec_send_packet() or avcodec_decode_subtitle2() if the - * caller wishes to decode the data. - * - * AVPacket.pts, AVPacket.dts and AVPacket.duration timing information will be - * set if known. They may also be unset (i.e. AV_NOPTS_VALUE for - * pts/dts, 0 for duration) if the stream does not provide them. The timing - * information will be in AVStream.time_base units, i.e. it has to be - * multiplied by the timebase to convert them to seconds. - * - * A packet returned by av_read_frame() is always reference-counted, - * i.e. AVPacket.buf is set and the user may keep it indefinitely. - * The packet must be freed with av_packet_unref() when it is no - * longer needed. - * - * @section lavf_decoding_seek Seeking - * @} - * - * @defgroup lavf_encoding Muxing - * @{ - * Muxers take encoded data in the form of @ref AVPacket "AVPackets" and write - * it into files or other output bytestreams in the specified container format. - * - * The main API functions for muxing are avformat_write_header() for writing the - * file header, av_write_frame() / av_interleaved_write_frame() for writing the - * packets and av_write_trailer() for finalizing the file. - * - * At the beginning of the muxing process, the caller must first call - * avformat_alloc_context() to create a muxing context. The caller then sets up - * the muxer by filling the various fields in this context: - * - * - The @ref AVFormatContext.oformat "oformat" field must be set to select the - * muxer that will be used. - * - Unless the format is of the AVFMT_NOFILE type, the @ref AVFormatContext.pb - * "pb" field must be set to an opened IO context, either returned from - * avio_open2() or a custom one. - * - Unless the format is of the AVFMT_NOSTREAMS type, at least one stream must - * be created with the avformat_new_stream() function. The caller should fill - * the @ref AVStream.codecpar "stream codec parameters" information, such as the - * codec @ref AVCodecParameters.codec_type "type", @ref AVCodecParameters.codec_id - * "id" and other parameters (e.g. width / height, the pixel or sample format, - * etc.) as known. The @ref AVStream.time_base "stream timebase" should - * be set to the timebase that the caller desires to use for this stream (note - * that the timebase actually used by the muxer can be different, as will be - * described later). - * - It is advised to manually initialize only the relevant fields in - * AVCodecParameters, rather than using @ref avcodec_parameters_copy() during - * remuxing: there is no guarantee that the codec context values remain valid - * for both input and output format contexts. - * - The caller may fill in additional information, such as @ref - * AVFormatContext.metadata "global" or @ref AVStream.metadata "per-stream" - * metadata, @ref AVFormatContext.chapters "chapters", @ref - * AVFormatContext.programs "programs", etc. as described in the - * AVFormatContext documentation. Whether such information will actually be - * stored in the output depends on what the container format and the muxer - * support. - * - * When the muxing context is fully set up, the caller must call - * avformat_write_header() to initialize the muxer internals and write the file - * header. Whether anything actually is written to the IO context at this step - * depends on the muxer, but this function must always be called. Any muxer - * private options must be passed in the options parameter to this function. - * - * The data is then sent to the muxer by repeatedly calling av_write_frame() or - * av_interleaved_write_frame() (consult those functions' documentation for - * discussion on the difference between them; only one of them may be used with - * a single muxing context, they should not be mixed). Do note that the timing - * information on the packets sent to the muxer must be in the corresponding - * AVStream's timebase. That timebase is set by the muxer (in the - * avformat_write_header() step) and may be different from the timebase - * requested by the caller. - * - * Once all the data has been written, the caller must call av_write_trailer() - * to flush any buffered packets and finalize the output file, then close the IO - * context (if any) and finally free the muxing context with - * avformat_free_context(). - * @} - * - * @defgroup lavf_io I/O Read/Write - * @{ - * @section lavf_io_dirlist Directory listing - * The directory listing API makes it possible to list files on remote servers. - * - * Some of possible use cases: - * - an "open file" dialog to choose files from a remote location, - * - a recursive media finder providing a player with an ability to play all - * files from a given directory. - * - * @subsection lavf_io_dirlist_open Opening a directory - * At first, a directory needs to be opened by calling avio_open_dir() - * supplied with a URL and, optionally, ::AVDictionary containing - * protocol-specific parameters. The function returns zero or positive - * integer and allocates AVIODirContext on success. - * - * @code - * AVIODirContext *ctx = NULL; - * if (avio_open_dir(&ctx, "smb://example.com/some_dir", NULL) < 0) { - * fprintf(stderr, "Cannot open directory.\n"); - * abort(); - * } - * @endcode - * - * This code tries to open a sample directory using smb protocol without - * any additional parameters. - * - * @subsection lavf_io_dirlist_read Reading entries - * Each directory's entry (i.e. file, another directory, anything else - * within ::AVIODirEntryType) is represented by AVIODirEntry. - * Reading consecutive entries from an opened AVIODirContext is done by - * repeatedly calling avio_read_dir() on it. Each call returns zero or - * positive integer if successful. Reading can be stopped right after the - * NULL entry has been read -- it means there are no entries left to be - * read. The following code reads all entries from a directory associated - * with ctx and prints their names to standard output. - * @code - * AVIODirEntry *entry = NULL; - * for (;;) { - * if (avio_read_dir(ctx, &entry) < 0) { - * fprintf(stderr, "Cannot list directory.\n"); - * abort(); - * } - * if (!entry) - * break; - * printf("%s\n", entry->name); - * avio_free_directory_entry(&entry); - * } - * @endcode - * @} - * - * @defgroup lavf_codec Demuxers - * @{ - * @defgroup lavf_codec_native Native Demuxers - * @{ - * @} - * @defgroup lavf_codec_wrappers External library wrappers - * @{ - * @} - * @} - * @defgroup lavf_protos I/O Protocols - * @{ - * @} - * @defgroup lavf_internal Internal - * @{ - * @} - * @} - */ - -#include -#include /* FILE */ -#include "libavcodec/avcodec.h" -#include "libavutil/dict.h" -#include "libavutil/log.h" - -#include "avio.h" -#include "libavformat/version.h" - -struct AVFormatContext; - -struct AVDeviceInfoList; -struct AVDeviceCapabilitiesQuery; - -/** - * @defgroup metadata_api Public Metadata API - * @{ - * @ingroup libavf - * The metadata API allows libavformat to export metadata tags to a client - * application when demuxing. Conversely it allows a client application to - * set metadata when muxing. - * - * Metadata is exported or set as pairs of key/value strings in the 'metadata' - * fields of the AVFormatContext, AVStream, AVChapter and AVProgram structs - * using the @ref lavu_dict "AVDictionary" API. Like all strings in FFmpeg, - * metadata is assumed to be UTF-8 encoded Unicode. Note that metadata - * exported by demuxers isn't checked to be valid UTF-8 in most cases. - * - * Important concepts to keep in mind: - * - Keys are unique; there can never be 2 tags with the same key. This is - * also meant semantically, i.e., a demuxer should not knowingly produce - * several keys that are literally different but semantically identical. - * E.g., key=Author5, key=Author6. In this example, all authors must be - * placed in the same tag. - * - Metadata is flat, not hierarchical; there are no subtags. If you - * want to store, e.g., the email address of the child of producer Alice - * and actor Bob, that could have key=alice_and_bobs_childs_email_address. - * - Several modifiers can be applied to the tag name. This is done by - * appending a dash character ('-') and the modifier name in the order - * they appear in the list below -- e.g. foo-eng-sort, not foo-sort-eng. - * - language -- a tag whose value is localized for a particular language - * is appended with the ISO 639-2/B 3-letter language code. - * For example: Author-ger=Michael, Author-eng=Mike - * The original/default language is in the unqualified "Author" tag. - * A demuxer should set a default if it sets any translated tag. - * - sorting -- a modified version of a tag that should be used for - * sorting will have '-sort' appended. E.g. artist="The Beatles", - * artist-sort="Beatles, The". - * - Some protocols and demuxers support metadata updates. After a successful - * call to av_read_frame(), AVFormatContext.event_flags or AVStream.event_flags - * will be updated to indicate if metadata changed. In order to detect metadata - * changes on a stream, you need to loop through all streams in the AVFormatContext - * and check their individual event_flags. - * - * - Demuxers attempt to export metadata in a generic format, however tags - * with no generic equivalents are left as they are stored in the container. - * Follows a list of generic tag names: - * - @verbatim - album -- name of the set this work belongs to - album_artist -- main creator of the set/album, if different from artist. - e.g. "Various Artists" for compilation albums. - artist -- main creator of the work - comment -- any additional description of the file. - composer -- who composed the work, if different from artist. - copyright -- name of copyright holder. - creation_time-- date when the file was created, preferably in ISO 8601. - date -- date when the work was created, preferably in ISO 8601. - disc -- number of a subset, e.g. disc in a multi-disc collection. - encoder -- name/settings of the software/hardware that produced the file. - encoded_by -- person/group who created the file. - filename -- original name of the file. - genre -- . - language -- main language in which the work is performed, preferably - in ISO 639-2 format. Multiple languages can be specified by - separating them with commas. - performer -- artist who performed the work, if different from artist. - E.g for "Also sprach Zarathustra", artist would be "Richard - Strauss" and performer "London Philharmonic Orchestra". - publisher -- name of the label/publisher. - service_name -- name of the service in broadcasting (channel name). - service_provider -- name of the service provider in broadcasting. - title -- name of the work. - track -- number of this work in the set, can be in form current/total. - variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of - @endverbatim - * - * Look in the examples section for an application example how to use the Metadata API. - * - * @} - */ - -/* packet functions */ - - -/** - * Allocate and read the payload of a packet and initialize its - * fields with default values. - * - * @param s associated IO context - * @param pkt packet - * @param size desired payload size - * @return >0 (read size) if OK, AVERROR_xxx otherwise - */ -int av_get_packet(AVIOContext *s, AVPacket *pkt, int size); - - -/** - * Read data and append it to the current content of the AVPacket. - * If pkt->size is 0 this is identical to av_get_packet. - * Note that this uses av_grow_packet and thus involves a realloc - * which is inefficient. Thus this function should only be used - * when there is no reasonable way to know (an upper bound of) - * the final size. - * - * @param s associated IO context - * @param pkt packet - * @param size amount of data to read - * @return >0 (read size) if OK, AVERROR_xxx otherwise, previous data - * will not be lost even if an error occurs. - */ -int av_append_packet(AVIOContext *s, AVPacket *pkt, int size); - -/*************************************************/ -/* input/output formats */ - -struct AVCodecTag; - -/** - * This structure contains the data a format has to probe a file. - */ -typedef struct AVProbeData { - const char *filename; - unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */ - int buf_size; /**< Size of buf except extra allocated bytes */ - const char *mime_type; /**< mime_type, when known. */ -} AVProbeData; - -#define AVPROBE_SCORE_RETRY (AVPROBE_SCORE_MAX/4) -#define AVPROBE_SCORE_STREAM_RETRY (AVPROBE_SCORE_MAX/4-1) - -#define AVPROBE_SCORE_EXTENSION 50 ///< score for file extension -#define AVPROBE_SCORE_MIME 75 ///< score for file mime type -#define AVPROBE_SCORE_MAX 100 ///< maximum score - -#define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer - -/// Demuxer will use avio_open, no opened file should be provided by the caller. -#define AVFMT_NOFILE 0x0001 -#define AVFMT_NEEDNUMBER 0x0002 /**< Needs '%d' in filename. */ -#define AVFMT_SHOW_IDS 0x0008 /**< Show format stream IDs numbers. */ -#define AVFMT_GLOBALHEADER 0x0040 /**< Format wants global header. */ -#define AVFMT_NOTIMESTAMPS 0x0080 /**< Format does not need / have any timestamps. */ -#define AVFMT_GENERIC_INDEX 0x0100 /**< Use generic index building code. */ -#define AVFMT_TS_DISCONT 0x0200 /**< Format allows timestamp discontinuities. Note, muxers always require valid (monotone) timestamps */ -#define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */ -#define AVFMT_NODIMENSIONS 0x0800 /**< Format does not need width/height */ -#define AVFMT_NOSTREAMS 0x1000 /**< Format does not require any streams */ -#define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fall back on binary search via read_timestamp */ -#define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fall back on generic search */ -#define AVFMT_NO_BYTE_SEEK 0x8000 /**< Format does not allow seeking by bytes */ -#define AVFMT_ALLOW_FLUSH 0x10000 /**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. */ -#define AVFMT_TS_NONSTRICT 0x20000 /**< Format does not require strictly - increasing timestamps, but they must - still be monotonic */ -#define AVFMT_TS_NEGATIVE 0x40000 /**< Format allows muxing negative - timestamps. If not set the timestamp - will be shifted in av_write_frame and - av_interleaved_write_frame so they - start from 0. - The user or muxer can override this through - AVFormatContext.avoid_negative_ts - */ - -#define AVFMT_SEEK_TO_PTS 0x4000000 /**< Seeking is based on PTS */ - -/** - * @addtogroup lavf_encoding - * @{ - */ -typedef struct AVOutputFormat { - const char *name; - /** - * Descriptive name for the format, meant to be more human-readable - * than name. You should use the NULL_IF_CONFIG_SMALL() macro - * to define it. - */ - const char *long_name; - const char *mime_type; - const char *extensions; /**< comma-separated filename extensions */ - /* output support */ - enum AVCodecID audio_codec; /**< default audio codec */ - enum AVCodecID video_codec; /**< default video codec */ - enum AVCodecID subtitle_codec; /**< default subtitle codec */ - /** - * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, - * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, - * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, - * AVFMT_TS_NONSTRICT, AVFMT_TS_NEGATIVE - */ - int flags; - - /** - * List of supported codec_id-codec_tag pairs, ordered by "better - * choice first". The arrays are all terminated by AV_CODEC_ID_NONE. - */ - const struct AVCodecTag * const *codec_tag; - - - const AVClass *priv_class; ///< AVClass for the private context - - /***************************************************************** - * No fields below this line are 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. - ***************************************************************** - */ - /** - * The ff_const59 define is not part of the public API and will - * be removed without further warning. - */ -#if FF_API_AVIOFORMAT -#define ff_const59 -#else -#define ff_const59 const -#endif -#if FF_API_NEXT - ff_const59 struct AVOutputFormat *next; -#endif - /** - * size of private data so that it can be allocated in the wrapper - */ - int priv_data_size; - - int (*write_header)(struct AVFormatContext *); - /** - * Write a packet. If AVFMT_ALLOW_FLUSH is set in flags, - * pkt can be NULL in order to flush data buffered in the muxer. - * When flushing, return 0 if there still is more data to flush, - * or 1 if everything was flushed and there is no more buffered - * data. - */ - int (*write_packet)(struct AVFormatContext *, AVPacket *pkt); - int (*write_trailer)(struct AVFormatContext *); - /** - * A format-specific function for interleavement. - * If unset, packets will be interleaved by dts. - */ - int (*interleave_packet)(struct AVFormatContext *, AVPacket *out, - AVPacket *in, int flush); - /** - * Test if the given codec can be stored in this container. - * - * @return 1 if the codec is supported, 0 if it is not. - * A negative number if unknown. - * MKTAG('A', 'P', 'I', 'C') if the codec is only supported as AV_DISPOSITION_ATTACHED_PIC - */ - int (*query_codec)(enum AVCodecID id, int std_compliance); - - void (*get_output_timestamp)(struct AVFormatContext *s, int stream, - int64_t *dts, int64_t *wall); - /** - * Allows sending messages from application to device. - */ - int (*control_message)(struct AVFormatContext *s, int type, - void *data, size_t data_size); - - /** - * Write an uncoded AVFrame. - * - * See av_write_uncoded_frame() for details. - * - * The library will free *frame afterwards, but the muxer can prevent it - * by setting the pointer to NULL. - */ - int (*write_uncoded_frame)(struct AVFormatContext *, int stream_index, - AVFrame **frame, unsigned flags); - /** - * Returns device list with it properties. - * @see avdevice_list_devices() for more details. - */ - int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); -#if LIBAVFORMAT_VERSION_MAJOR < 59 - /** - * Initialize device capabilities submodule. - * @see avdevice_capabilities_create() for more details. - */ - int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); - /** - * Free device capabilities submodule. - * @see avdevice_capabilities_free() for more details. - */ - int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); -#endif - enum AVCodecID data_codec; /**< default data codec */ - /** - * Initialize format. May allocate data here, and set any AVFormatContext or - * AVStream parameters that need to be set before packets are sent. - * This method must not write output. - * - * Return 0 if streams were fully configured, 1 if not, negative AVERROR on failure - * - * Any allocations made here must be freed in deinit(). - */ - int (*init)(struct AVFormatContext *); - /** - * Deinitialize format. If present, this is called whenever the muxer is being - * destroyed, regardless of whether or not the header has been written. - * - * If a trailer is being written, this is called after write_trailer(). - * - * This is called if init() fails as well. - */ - void (*deinit)(struct AVFormatContext *); - /** - * Set up any necessary bitstream filtering and extract any extra data needed - * for the global header. - * Return 0 if more packets from this stream must be checked; 1 if not. - */ - int (*check_bitstream)(struct AVFormatContext *, const AVPacket *pkt); -} AVOutputFormat; -/** - * @} - */ - -/** - * @addtogroup lavf_decoding - * @{ - */ -typedef struct AVInputFormat { - /** - * A comma separated list of short names for the format. New names - * may be appended with a minor bump. - */ - const char *name; - - /** - * Descriptive name for the format, meant to be more human-readable - * than name. You should use the NULL_IF_CONFIG_SMALL() macro - * to define it. - */ - const char *long_name; - - /** - * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, - * AVFMT_NOTIMESTAMPS, AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, - * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS. - */ - int flags; - - /** - * If extensions are defined, then no probe is done. You should - * usually not use extension format guessing because it is not - * reliable enough - */ - const char *extensions; - - const struct AVCodecTag * const *codec_tag; - - const AVClass *priv_class; ///< AVClass for the private context - - /** - * Comma-separated list of mime types. - * It is used check for matching mime types while probing. - * @see av_probe_input_format2 - */ - const char *mime_type; - - /***************************************************************** - * No fields below this line are 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. - ***************************************************************** - */ -#if FF_API_NEXT - ff_const59 struct AVInputFormat *next; -#endif - - /** - * Raw demuxers store their codec ID here. - */ - int raw_codec_id; - - /** - * Size of private data so that it can be allocated in the wrapper. - */ - int priv_data_size; - - /** - * Tell if a given file has a chance of being parsed as this format. - * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes - * big so you do not have to check for that unless you need more. - */ - int (*read_probe)(const AVProbeData *); - - /** - * Read the format header and initialize the AVFormatContext - * structure. Return 0 if OK. 'avformat_new_stream' should be - * called to create new streams. - */ - int (*read_header)(struct AVFormatContext *); - - /** - * Read one packet and put it in 'pkt'. pts and flags are also - * set. 'avformat_new_stream' can be called only if the flag - * AVFMTCTX_NOHEADER is used and only in the calling thread (not in a - * background thread). - * @return 0 on success, < 0 on error. - * Upon returning an error, pkt must be unreferenced by the caller. - */ - int (*read_packet)(struct AVFormatContext *, AVPacket *pkt); - - /** - * Close the stream. The AVFormatContext and AVStreams are not - * freed by this function - */ - int (*read_close)(struct AVFormatContext *); - - /** - * Seek to a given timestamp relative to the frames in - * stream component stream_index. - * @param stream_index Must not be -1. - * @param flags Selects which direction should be preferred if no exact - * match is available. - * @return >= 0 on success (but not necessarily the new offset) - */ - int (*read_seek)(struct AVFormatContext *, - int stream_index, int64_t timestamp, int flags); - - /** - * Get the next timestamp in stream[stream_index].time_base units. - * @return the timestamp or AV_NOPTS_VALUE if an error occurred - */ - int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index, - int64_t *pos, int64_t pos_limit); - - /** - * Start/resume playing - only meaningful if using a network-based format - * (RTSP). - */ - int (*read_play)(struct AVFormatContext *); - - /** - * Pause playing - only meaningful if using a network-based format - * (RTSP). - */ - int (*read_pause)(struct AVFormatContext *); - - /** - * Seek to timestamp ts. - * Seeking will be done so that the point from which all active streams - * can be presented successfully will be closest to ts and within min/max_ts. - * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. - */ - int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); - - /** - * Returns device list with it properties. - * @see avdevice_list_devices() for more details. - */ - int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - /** - * Initialize device capabilities submodule. - * @see avdevice_capabilities_create() for more details. - */ - int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); - - /** - * Free device capabilities submodule. - * @see avdevice_capabilities_free() for more details. - */ - int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); -#endif -} AVInputFormat; -/** - * @} - */ - -enum AVStreamParseType { - AVSTREAM_PARSE_NONE, - AVSTREAM_PARSE_FULL, /**< full parsing and repack */ - AVSTREAM_PARSE_HEADERS, /**< Only parse headers, do not repack. */ - AVSTREAM_PARSE_TIMESTAMPS, /**< full parsing and interpolation of timestamps for frames not starting on a packet boundary */ - AVSTREAM_PARSE_FULL_ONCE, /**< full parsing and repack of the first frame only, only implemented for H.264 currently */ - AVSTREAM_PARSE_FULL_RAW, /**< full parsing and repack with timestamp and position generation by parser for raw - this assumes that each packet in the file contains no demuxer level headers and - just codec level data, otherwise position generation would fail */ -}; - -typedef struct AVIndexEntry { - int64_t pos; - int64_t timestamp; /**< - * Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are available - * when seeking to this entry. That means preferable PTS on keyframe based formats. - * But demuxers can choose to store a different timestamp, if it is more convenient for the implementation or nothing better - * is known - */ -#define AVINDEX_KEYFRAME 0x0001 -#define AVINDEX_DISCARD_FRAME 0x0002 /** - * Flag is used to indicate which frame should be discarded after decoding. - */ - int flags:2; - int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment). - int min_distance; /**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. */ -} AVIndexEntry; - -#define AV_DISPOSITION_DEFAULT 0x0001 -#define AV_DISPOSITION_DUB 0x0002 -#define AV_DISPOSITION_ORIGINAL 0x0004 -#define AV_DISPOSITION_COMMENT 0x0008 -#define AV_DISPOSITION_LYRICS 0x0010 -#define AV_DISPOSITION_KARAOKE 0x0020 - -/** - * Track should be used during playback by default. - * Useful for subtitle track that should be displayed - * even when user did not explicitly ask for subtitles. - */ -#define AV_DISPOSITION_FORCED 0x0040 -#define AV_DISPOSITION_HEARING_IMPAIRED 0x0080 /**< stream for hearing impaired audiences */ -#define AV_DISPOSITION_VISUAL_IMPAIRED 0x0100 /**< stream for visual impaired audiences */ -#define AV_DISPOSITION_CLEAN_EFFECTS 0x0200 /**< stream without voice */ -/** - * The stream is stored in the file as an attached picture/"cover art" (e.g. - * APIC frame in ID3v2). The first (usually only) packet associated with it - * will be returned among the first few packets read from the file unless - * seeking takes place. It can also be accessed at any time in - * AVStream.attached_pic. - */ -#define AV_DISPOSITION_ATTACHED_PIC 0x0400 -/** - * The stream is sparse, and contains thumbnail images, often corresponding - * to chapter markers. Only ever used with AV_DISPOSITION_ATTACHED_PIC. - */ -#define AV_DISPOSITION_TIMED_THUMBNAILS 0x0800 - -typedef struct AVStreamInternal AVStreamInternal; - -/** - * To specify text track kind (different from subtitles default). - */ -#define AV_DISPOSITION_CAPTIONS 0x10000 -#define AV_DISPOSITION_DESCRIPTIONS 0x20000 -#define AV_DISPOSITION_METADATA 0x40000 -#define AV_DISPOSITION_DEPENDENT 0x80000 ///< dependent audio stream (mix_type=0 in mpegts) -#define AV_DISPOSITION_STILL_IMAGE 0x100000 ///< still images in video stream (still_picture_flag=1 in mpegts) - -/** - * Options for behavior on timestamp wrap detection. - */ -#define AV_PTS_WRAP_IGNORE 0 ///< ignore the wrap -#define AV_PTS_WRAP_ADD_OFFSET 1 ///< add the format specific offset on wrap detection -#define AV_PTS_WRAP_SUB_OFFSET -1 ///< subtract the format specific offset on wrap detection - -/** - * Stream structure. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVStream) must not be used outside libav*. - */ -typedef struct AVStream { - int index; /**< stream index in AVFormatContext */ - /** - * Format-specific stream ID. - * decoding: set by libavformat - * encoding: set by the user, replaced by libavformat if left unset - */ - int id; -#if FF_API_LAVF_AVCTX - /** - * @deprecated use the codecpar struct instead - */ - attribute_deprecated - AVCodecContext *codec; -#endif - void *priv_data; - - /** - * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. - * - * decoding: set by libavformat - * encoding: May be set by the caller before avformat_write_header() to - * provide a hint to the muxer about the desired timebase. In - * avformat_write_header(), the muxer will overwrite this field - * with the timebase that will actually be used for the timestamps - * written into the file (which may or may not be related to the - * user-provided one, depending on the format). - */ - AVRational time_base; - - /** - * Decoding: pts of the first frame of the stream in presentation order, in stream time base. - * Only set this if you are absolutely 100% sure that the value you set - * it to really is the pts of the first frame. - * This may be undefined (AV_NOPTS_VALUE). - * @note The ASF header does NOT contain a correct start_time the ASF - * demuxer must NOT set this. - */ - int64_t start_time; - - /** - * Decoding: duration of the stream, in stream time base. - * If a source file does not specify a duration, but does specify - * a bitrate, this value will be estimated from bitrate and file size. - * - * Encoding: May be set by the caller before avformat_write_header() to - * provide a hint to the muxer about the estimated duration. - */ - int64_t duration; - - int64_t nb_frames; ///< number of frames in this stream if known or 0 - - int disposition; /**< AV_DISPOSITION_* bit field */ - - enum AVDiscard discard; ///< Selects which packets can be discarded at will and do not need to be demuxed. - - /** - * sample aspect ratio (0 if unknown) - * - encoding: Set by user. - * - decoding: Set by libavformat. - */ - AVRational sample_aspect_ratio; - - AVDictionary *metadata; - - /** - * Average framerate - * - * - demuxing: May be set by libavformat when creating the stream or in - * avformat_find_stream_info(). - * - muxing: May be set by the caller before avformat_write_header(). - */ - AVRational avg_frame_rate; - - /** - * For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet - * will contain the attached picture. - * - * decoding: set by libavformat, must not be modified by the caller. - * encoding: unused - */ - AVPacket attached_pic; - - /** - * An array of side data that applies to the whole stream (i.e. the - * container does not allow it to change between packets). - * - * There may be no overlap between the side data in this array and side data - * in the packets. I.e. a given side data is either exported by the muxer - * (demuxing) / set by the caller (muxing) in this array, then it never - * appears in the packets, or the side data is exported / sent through - * the packets (always in the first packet where the value becomes known or - * changes), then it does not appear in this array. - * - * - demuxing: Set by libavformat when the stream is created. - * - muxing: May be set by the caller before avformat_write_header(). - * - * Freed by libavformat in avformat_free_context(). - * - * @see av_format_inject_global_side_data() - */ - AVPacketSideData *side_data; - /** - * The number of elements in the AVStream.side_data array. - */ - int nb_side_data; - - /** - * Flags indicating events happening on the stream, a combination of - * AVSTREAM_EVENT_FLAG_*. - * - * - demuxing: may be set by the demuxer in avformat_open_input(), - * avformat_find_stream_info() and av_read_frame(). Flags must be cleared - * by the user once the event has been handled. - * - muxing: may be set by the user after avformat_write_header(). to - * indicate a user-triggered event. The muxer will clear the flags for - * events it has handled in av_[interleaved]_write_frame(). - */ - int event_flags; -/** - * - demuxing: the demuxer read new metadata from the file and updated - * AVStream.metadata accordingly - * - muxing: the user updated AVStream.metadata and wishes the muxer to write - * it into the file - */ -#define AVSTREAM_EVENT_FLAG_METADATA_UPDATED 0x0001 -/** - * - demuxing: new packets for this stream were read from the file. This - * event is informational only and does not guarantee that new packets - * for this stream will necessarily be returned from av_read_frame(). - */ -#define AVSTREAM_EVENT_FLAG_NEW_PACKETS (1 << 1) - - /** - * Real base framerate of the stream. - * This is the lowest framerate with which all timestamps can be - * represented accurately (it is the least common multiple of all - * framerates in the stream). Note, this value is just a guess! - * For example, if the time base is 1/90000 and all frames have either - * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. - */ - AVRational r_frame_rate; - -#if FF_API_LAVF_FFSERVER - /** - * String containing pairs of key and values describing recommended encoder configuration. - * Pairs are separated by ','. - * Keys are separated from values by '='. - * - * @deprecated unused - */ - attribute_deprecated - char *recommended_encoder_configuration; -#endif - - /** - * Codec parameters associated with this stream. Allocated and freed by - * libavformat in avformat_new_stream() and avformat_free_context() - * respectively. - * - * - demuxing: filled by libavformat on stream creation or in - * avformat_find_stream_info() - * - muxing: filled by the caller before avformat_write_header() - */ - AVCodecParameters *codecpar; - - /***************************************************************** - * 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. - * Internal note: be aware that physically removing these fields - * will break ABI. Replace removed fields with dummy fields, and - * add new fields to AVStreamInternal. - ***************************************************************** - */ - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - // kept for ABI compatibility only, do not access in any way - void *unused; -#endif - - int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */ - - // Timestamp generation support: - /** - * Timestamp corresponding to the last dts sync point. - * - * Initialized when AVCodecParserContext.dts_sync_point >= 0 and - * a DTS is received from the underlying container. Otherwise set to - * AV_NOPTS_VALUE by default. - */ - int64_t first_dts; - int64_t cur_dts; - int64_t last_IP_pts; - int last_IP_duration; - - /** - * Number of packets to buffer for codec probing - */ - int probe_packets; - - /** - * Number of frames that have been demuxed during avformat_find_stream_info() - */ - int codec_info_nb_frames; - - /* av_read_frame() support */ - enum AVStreamParseType need_parsing; - struct AVCodecParserContext *parser; - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - // kept for ABI compatibility only, do not access in any way - void *unused7; - AVProbeData unused6; - int64_t unused5[16+1]; -#endif - AVIndexEntry *index_entries; /**< Only used if the format does not - support seeking natively. */ - int nb_index_entries; - unsigned int index_entries_allocated_size; - - /** - * Stream Identifier - * This is the MPEG-TS stream identifier +1 - * 0 means unknown - */ - int stream_identifier; - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - // kept for ABI compatibility only, do not access in any way - int unused8; - int unused9; - int unused10; -#endif - - /** - * An opaque field for libavformat internal usage. - * Must not be accessed in any way by callers. - */ - AVStreamInternal *internal; -} AVStream; - -#if FF_API_FORMAT_GET_SET -/** - * Accessors for some AVStream fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -AVRational av_stream_get_r_frame_rate(const AVStream *s); -attribute_deprecated -void av_stream_set_r_frame_rate(AVStream *s, AVRational r); -#if FF_API_LAVF_FFSERVER -attribute_deprecated -char* av_stream_get_recommended_encoder_configuration(const AVStream *s); -attribute_deprecated -void av_stream_set_recommended_encoder_configuration(AVStream *s, char *configuration); -#endif -#endif - -struct AVCodecParserContext *av_stream_get_parser(const AVStream *s); - -/** - * Returns the pts of the last muxed packet + its duration - * - * the retuned value is undefined when used with a demuxer. - */ -int64_t av_stream_get_end_pts(const AVStream *st); - -#define AV_PROGRAM_RUNNING 1 - -/** - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVProgram) must not be used outside libav*. - */ -typedef struct AVProgram { - int id; - int flags; - enum AVDiscard discard; ///< selects which program to discard and which to feed to the caller - unsigned int *stream_index; - unsigned int nb_stream_indexes; - AVDictionary *metadata; - - int program_num; - int pmt_pid; - int pcr_pid; - int pmt_version; - - /***************************************************************** - * 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. - ***************************************************************** - */ - int64_t start_time; - int64_t end_time; - - int64_t pts_wrap_reference; ///< reference dts for wrap detection - int pts_wrap_behavior; ///< behavior on wrap detection -} AVProgram; - -#define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present - (streams are added dynamically) */ -#define AVFMTCTX_UNSEEKABLE 0x0002 /**< signal that the stream is definitely - not seekable, and attempts to call the - seek function will fail. For some - network protocols (e.g. HLS), this can - change dynamically at runtime. */ - -typedef struct AVChapter { -#if FF_API_CHAPTER_ID_INT - int id; ///< unique ID to identify the chapter -#else - int64_t id; ///< unique ID to identify the chapter -#endif - AVRational time_base; ///< time base in which the start/end timestamps are specified - int64_t start, end; ///< chapter start/end time in time_base units - AVDictionary *metadata; -} AVChapter; - - -/** - * Callback used by devices to communicate with application. - */ -typedef int (*av_format_control_message)(struct AVFormatContext *s, int type, - void *data, size_t data_size); - -typedef int (*AVOpenCallback)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, - const AVIOInterruptCB *int_cb, AVDictionary **options); - -/** - * The duration of a video can be estimated through various ways, and this enum can be used - * to know how the duration was estimated. - */ -enum AVDurationEstimationMethod { - AVFMT_DURATION_FROM_PTS, ///< Duration accurately estimated from PTSes - AVFMT_DURATION_FROM_STREAM, ///< Duration estimated from a stream with a known duration - AVFMT_DURATION_FROM_BITRATE ///< Duration estimated from bitrate (less accurate) -}; - -typedef struct AVFormatInternal AVFormatInternal; - -/** - * Format I/O context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVFormatContext) must not be used outside libav*, use - * avformat_alloc_context() to create an AVFormatContext. - * - * Fields can be accessed through AVOptions (av_opt*), - * the name string used matches the associated command line parameter name and - * can be found in libavformat/options_table.h. - * The AVOption/command line parameter names differ in some cases from the C - * structure field names for historic reasons or brevity. - */ -typedef struct AVFormatContext { - /** - * A class for logging and @ref avoptions. Set by avformat_alloc_context(). - * Exports (de)muxer private options if they exist. - */ - const AVClass *av_class; - - /** - * The input container format. - * - * Demuxing only, set by avformat_open_input(). - */ - ff_const59 struct AVInputFormat *iformat; - - /** - * The output container format. - * - * Muxing only, must be set by the caller before avformat_write_header(). - */ - ff_const59 struct AVOutputFormat *oformat; - - /** - * Format private data. This is an AVOptions-enabled struct - * if and only if iformat/oformat.priv_class is not NULL. - * - * - muxing: set by avformat_write_header() - * - demuxing: set by avformat_open_input() - */ - void *priv_data; - - /** - * I/O context. - * - * - demuxing: either set by the user before avformat_open_input() (then - * the user must close it manually) or set by avformat_open_input(). - * - muxing: set by the user before avformat_write_header(). The caller must - * take care of closing / freeing the IO context. - * - * Do NOT set this field if AVFMT_NOFILE flag is set in - * iformat/oformat.flags. In such a case, the (de)muxer will handle - * I/O in some other way and this field will be NULL. - */ - AVIOContext *pb; - - /* stream info */ - /** - * Flags signalling stream properties. A combination of AVFMTCTX_*. - * Set by libavformat. - */ - int ctx_flags; - - /** - * Number of elements in AVFormatContext.streams. - * - * Set by avformat_new_stream(), must not be modified by any other code. - */ - unsigned int nb_streams; - /** - * A list of all streams in the file. New streams are created with - * avformat_new_stream(). - * - * - demuxing: streams are created by libavformat in avformat_open_input(). - * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also - * appear in av_read_frame(). - * - muxing: streams are created by the user before avformat_write_header(). - * - * Freed by libavformat in avformat_free_context(). - */ - AVStream **streams; - -#if FF_API_FORMAT_FILENAME - /** - * input or output filename - * - * - demuxing: set by avformat_open_input() - * - muxing: may be set by the caller before avformat_write_header() - * - * @deprecated Use url instead. - */ - attribute_deprecated - char filename[1024]; -#endif - - /** - * input or output URL. Unlike the old filename field, this field has no - * length restriction. - * - * - demuxing: set by avformat_open_input(), initialized to an empty - * string if url parameter was NULL in avformat_open_input(). - * - muxing: may be set by the caller before calling avformat_write_header() - * (or avformat_init_output() if that is called first) to a string - * which is freeable by av_free(). Set to an empty string if it - * was NULL in avformat_init_output(). - * - * Freed by libavformat in avformat_free_context(). - */ - char *url; - - /** - * Position of the first frame of the component, in - * AV_TIME_BASE fractional seconds. NEVER set this value directly: - * It is deduced from the AVStream values. - * - * Demuxing only, set by libavformat. - */ - int64_t start_time; - - /** - * Duration of the stream, in AV_TIME_BASE fractional - * seconds. Only set this value if you know none of the individual stream - * durations and also do not set any of them. This is deduced from the - * AVStream values if not set. - * - * Demuxing only, set by libavformat. - */ - int64_t duration; - - /** - * Total stream bitrate in bit/s, 0 if not - * available. Never set it directly if the file_size and the - * duration are known as FFmpeg can compute it automatically. - */ - int64_t bit_rate; - - unsigned int packet_size; - int max_delay; - - /** - * Flags modifying the (de)muxer behaviour. A combination of AVFMT_FLAG_*. - * Set by the user before avformat_open_input() / avformat_write_header(). - */ - int flags; -#define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames. -#define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index. -#define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input. -#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS -#define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container -#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled -#define AVFMT_FLAG_NOBUFFER 0x0040 ///< Do not buffer frames when possible -#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it. -#define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted -#define AVFMT_FLAG_FLUSH_PACKETS 0x0200 ///< Flush the AVIOContext every packet. -/** - * When muxing, try to avoid writing any random/volatile data to the output. - * This includes any random IDs, real-time timestamps/dates, muxer version, etc. - * - * This flag is mainly intended for testing. - */ -#define AVFMT_FLAG_BITEXACT 0x0400 -#if FF_API_LAVF_MP4A_LATM -#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Deprecated, does nothing. -#endif -#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down) -#if FF_API_LAVF_PRIV_OPT -#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (deprecated, will do nothing once av_demuxer_open() is removed) -#endif -#if FF_API_LAVF_KEEPSIDE_FLAG -#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Deprecated, does nothing. -#endif -#define AVFMT_FLAG_FAST_SEEK 0x80000 ///< Enable fast, but inaccurate seeks for some formats -#define AVFMT_FLAG_SHORTEST 0x100000 ///< Stop muxing when the shortest stream stops. -#define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Add bitstream filters as requested by the muxer - - /** - * Maximum size of the data read from input for determining - * the input container format. - * Demuxing only, set by the caller before avformat_open_input(). - */ - int64_t probesize; - - /** - * Maximum duration (in AV_TIME_BASE units) of the data read - * from input in avformat_find_stream_info(). - * Demuxing only, set by the caller before avformat_find_stream_info(). - * Can be set to 0 to let avformat choose using a heuristic. - */ - int64_t max_analyze_duration; - - const uint8_t *key; - int keylen; - - unsigned int nb_programs; - AVProgram **programs; - - /** - * Forced video codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID video_codec_id; - - /** - * Forced audio codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID audio_codec_id; - - /** - * Forced subtitle codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID subtitle_codec_id; - - /** - * Maximum amount of memory in bytes to use for the index of each stream. - * If the index exceeds this size, entries will be discarded as - * needed to maintain a smaller size. This can lead to slower or less - * accurate seeking (depends on demuxer). - * Demuxers for which a full in-memory index is mandatory will ignore - * this. - * - muxing: unused - * - demuxing: set by user - */ - unsigned int max_index_size; - - /** - * Maximum amount of memory in bytes to use for buffering frames - * obtained from realtime capture devices. - */ - unsigned int max_picture_buffer; - - /** - * Number of chapters in AVChapter array. - * When muxing, chapters are normally written in the file header, - * so nb_chapters should normally be initialized before write_header - * is called. Some muxers (e.g. mov and mkv) can also write chapters - * in the trailer. To write chapters in the trailer, nb_chapters - * must be zero when write_header is called and non-zero when - * write_trailer is called. - * - muxing: set by user - * - demuxing: set by libavformat - */ - unsigned int nb_chapters; - AVChapter **chapters; - - /** - * Metadata that applies to the whole file. - * - * - demuxing: set by libavformat in avformat_open_input() - * - muxing: may be set by the caller before avformat_write_header() - * - * Freed by libavformat in avformat_free_context(). - */ - AVDictionary *metadata; - - /** - * Start time of the stream in real world time, in microseconds - * since the Unix epoch (00:00 1st January 1970). That is, pts=0 in the - * stream was captured at this real world time. - * - muxing: Set by the caller before avformat_write_header(). If set to - * either 0 or AV_NOPTS_VALUE, then the current wall-time will - * be used. - * - demuxing: Set by libavformat. AV_NOPTS_VALUE if unknown. Note that - * the value may become known after some number of frames - * have been received. - */ - int64_t start_time_realtime; - - /** - * The number of frames used for determining the framerate in - * avformat_find_stream_info(). - * Demuxing only, set by the caller before avformat_find_stream_info(). - */ - int fps_probe_size; - - /** - * Error recognition; higher values will detect more errors but may - * misdetect some more or less valid parts as errors. - * Demuxing only, set by the caller before avformat_open_input(). - */ - int error_recognition; - - /** - * Custom interrupt callbacks for the I/O layer. - * - * demuxing: set by the user before avformat_open_input(). - * muxing: set by the user before avformat_write_header() - * (mainly useful for AVFMT_NOFILE formats). The callback - * should also be passed to avio_open2() if it's used to - * open the file. - */ - AVIOInterruptCB interrupt_callback; - - /** - * Flags to enable debugging. - */ - int debug; -#define FF_FDEBUG_TS 0x0001 - - /** - * Maximum buffering duration for interleaving. - * - * To ensure all the streams are interleaved correctly, - * av_interleaved_write_frame() will wait until it has at least one packet - * for each stream before actually writing any packets to the output file. - * When some streams are "sparse" (i.e. there are large gaps between - * successive packets), this can result in excessive buffering. - * - * This field specifies the maximum difference between the timestamps of the - * first and the last packet in the muxing queue, above which libavformat - * will output a packet regardless of whether it has queued a packet for all - * the streams. - * - * Muxing only, set by the caller before avformat_write_header(). - */ - int64_t max_interleave_delta; - - /** - * Allow non-standard and experimental extension - * @see AVCodecContext.strict_std_compliance - */ - int strict_std_compliance; - - /** - * Flags indicating events happening on the file, a combination of - * AVFMT_EVENT_FLAG_*. - * - * - demuxing: may be set by the demuxer in avformat_open_input(), - * avformat_find_stream_info() and av_read_frame(). Flags must be cleared - * by the user once the event has been handled. - * - muxing: may be set by the user after avformat_write_header() to - * indicate a user-triggered event. The muxer will clear the flags for - * events it has handled in av_[interleaved]_write_frame(). - */ - int event_flags; -/** - * - demuxing: the demuxer read new metadata from the file and updated - * AVFormatContext.metadata accordingly - * - muxing: the user updated AVFormatContext.metadata and wishes the muxer to - * write it into the file - */ -#define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001 - - /** - * Maximum number of packets to read while waiting for the first timestamp. - * Decoding only. - */ - int max_ts_probe; - - /** - * Avoid negative timestamps during muxing. - * Any value of the AVFMT_AVOID_NEG_TS_* constants. - * Note, this only works when using av_interleaved_write_frame. (interleave_packet_per_dts is in use) - * - muxing: Set by user - * - demuxing: unused - */ - int avoid_negative_ts; -#define AVFMT_AVOID_NEG_TS_AUTO -1 ///< Enabled when required by target format -#define AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE 1 ///< Shift timestamps so they are non negative -#define AVFMT_AVOID_NEG_TS_MAKE_ZERO 2 ///< Shift timestamps so that they start at 0 - - /** - * Transport stream id. - * This will be moved into demuxer private options. Thus no API/ABI compatibility - */ - int ts_id; - - /** - * Audio preload in microseconds. - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int audio_preload; - - /** - * Max chunk time in microseconds. - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int max_chunk_duration; - - /** - * Max chunk size in bytes - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int max_chunk_size; - - /** - * forces the use of wallclock timestamps as pts/dts of packets - * This has undefined results in the presence of B frames. - * - encoding: unused - * - decoding: Set by user - */ - int use_wallclock_as_timestamps; - - /** - * avio flags, used to force AVIO_FLAG_DIRECT. - * - encoding: unused - * - decoding: Set by user - */ - int avio_flags; - - /** - * The duration field can be estimated through various ways, and this field can be used - * to know how the duration was estimated. - * - encoding: unused - * - decoding: Read by user - */ - enum AVDurationEstimationMethod duration_estimation_method; - - /** - * Skip initial bytes when opening stream - * - encoding: unused - * - decoding: Set by user - */ - int64_t skip_initial_bytes; - - /** - * Correct single timestamp overflows - * - encoding: unused - * - decoding: Set by user - */ - unsigned int correct_ts_overflow; - - /** - * Force seeking to any (also non key) frames. - * - encoding: unused - * - decoding: Set by user - */ - int seek2any; - - /** - * Flush the I/O context after each packet. - * - encoding: Set by user - * - decoding: unused - */ - int flush_packets; - - /** - * format probing score. - * The maximal score is AVPROBE_SCORE_MAX, its set when the demuxer probes - * the format. - * - encoding: unused - * - decoding: set by avformat, read by user - */ - int probe_score; - - /** - * number of bytes to read maximally to identify format. - * - encoding: unused - * - decoding: set by user - */ - int format_probesize; - - /** - * ',' separated list of allowed decoders. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *codec_whitelist; - - /** - * ',' separated list of allowed demuxers. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *format_whitelist; - - /** - * An opaque field for libavformat internal usage. - * Must not be accessed in any way by callers. - */ - AVFormatInternal *internal; - - /** - * IO repositioned flag. - * This is set by avformat when the underlaying IO context read pointer - * is repositioned, for example when doing byte based seeking. - * Demuxers can use the flag to detect such changes. - */ - int io_repositioned; - - /** - * Forced video codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *video_codec; - - /** - * Forced audio codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *audio_codec; - - /** - * Forced subtitle codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *subtitle_codec; - - /** - * Forced data codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *data_codec; - - /** - * Number of bytes to be written as padding in a metadata header. - * Demuxing: Unused. - * Muxing: Set by user via av_format_set_metadata_header_padding. - */ - int metadata_header_padding; - - /** - * User data. - * This is a place for some private data of the user. - */ - void *opaque; - - /** - * Callback used by devices to communicate with application. - */ - av_format_control_message control_message_cb; - - /** - * Output timestamp offset, in microseconds. - * Muxing: set by user - */ - int64_t output_ts_offset; - - /** - * dump format separator. - * can be ", " or "\n " or anything else - * - muxing: Set by user. - * - demuxing: Set by user. - */ - uint8_t *dump_separator; - - /** - * Forced Data codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID data_codec_id; - -#if FF_API_OLD_OPEN_CALLBACKS - /** - * Called to open further IO contexts when needed for demuxing. - * - * This can be set by the user application to perform security checks on - * the URLs before opening them. - * The function should behave like avio_open2(), AVFormatContext is provided - * as contextual information and to reach AVFormatContext.opaque. - * - * If NULL then some simple checks are used together with avio_open2(). - * - * Must not be accessed directly from outside avformat. - * @See av_format_set_open_cb() - * - * Demuxing: Set by user. - * - * @deprecated Use io_open and io_close. - */ - attribute_deprecated - int (*open_cb)(struct AVFormatContext *s, AVIOContext **p, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options); -#endif - - /** - * ',' separated list of allowed protocols. - * - encoding: unused - * - decoding: set by user - */ - char *protocol_whitelist; - - /** - * A callback for opening new IO streams. - * - * Whenever a muxer or a demuxer needs to open an IO stream (typically from - * avformat_open_input() for demuxers, but for certain formats can happen at - * other times as well), it will call this callback to obtain an IO context. - * - * @param s the format context - * @param pb on success, the newly opened IO context should be returned here - * @param url the url to open - * @param flags a combination of AVIO_FLAG_* - * @param options a dictionary of additional options, with the same - * semantics as in avio_open2() - * @return 0 on success, a negative AVERROR code on failure - * - * @note Certain muxers and demuxers do nesting, i.e. they open one or more - * additional internal format contexts. Thus the AVFormatContext pointer - * passed to this callback may be different from the one facing the caller. - * It will, however, have the same 'opaque' field. - */ - int (*io_open)(struct AVFormatContext *s, AVIOContext **pb, const char *url, - int flags, AVDictionary **options); - - /** - * A callback for closing the streams opened with AVFormatContext.io_open(). - */ - void (*io_close)(struct AVFormatContext *s, AVIOContext *pb); - - /** - * ',' separated list of disallowed protocols. - * - encoding: unused - * - decoding: set by user - */ - char *protocol_blacklist; - - /** - * The maximum number of streams. - * - encoding: unused - * - decoding: set by user - */ - int max_streams; - - /** - * Skip duration calcuation in estimate_timings_from_pts. - * - encoding: unused - * - decoding: set by user - */ - int skip_estimate_duration_from_pts; - - /** - * Maximum number of packets that can be probed - * - encoding: unused - * - decoding: set by user - */ - int max_probe_packets; -} AVFormatContext; - -#if FF_API_FORMAT_GET_SET -/** - * Accessors for some AVFormatContext fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -int av_format_get_probe_score(const AVFormatContext *s); -attribute_deprecated -AVCodec * av_format_get_video_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_video_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -AVCodec * av_format_get_audio_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_audio_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -AVCodec * av_format_get_subtitle_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_subtitle_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -AVCodec * av_format_get_data_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_data_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -int av_format_get_metadata_header_padding(const AVFormatContext *s); -attribute_deprecated -void av_format_set_metadata_header_padding(AVFormatContext *s, int c); -attribute_deprecated -void * av_format_get_opaque(const AVFormatContext *s); -attribute_deprecated -void av_format_set_opaque(AVFormatContext *s, void *opaque); -attribute_deprecated -av_format_control_message av_format_get_control_message_cb(const AVFormatContext *s); -attribute_deprecated -void av_format_set_control_message_cb(AVFormatContext *s, av_format_control_message callback); -#if FF_API_OLD_OPEN_CALLBACKS -attribute_deprecated AVOpenCallback av_format_get_open_cb(const AVFormatContext *s); -attribute_deprecated void av_format_set_open_cb(AVFormatContext *s, AVOpenCallback callback); -#endif -#endif - -/** - * This function will cause global side data to be injected in the next packet - * of each stream as well as after any subsequent seek. - */ -void av_format_inject_global_side_data(AVFormatContext *s); - -/** - * Returns the method used to set ctx->duration. - * - * @return AVFMT_DURATION_FROM_PTS, AVFMT_DURATION_FROM_STREAM, or AVFMT_DURATION_FROM_BITRATE. - */ -enum AVDurationEstimationMethod av_fmt_ctx_get_duration_estimation_method(const AVFormatContext* ctx); - -/** - * @defgroup lavf_core Core functions - * @ingroup libavf - * - * Functions for querying libavformat capabilities, allocating core structures, - * etc. - * @{ - */ - -/** - * Return the LIBAVFORMAT_VERSION_INT constant. - */ -unsigned avformat_version(void); - -/** - * Return the libavformat build-time configuration. - */ -const char *avformat_configuration(void); - -/** - * Return the libavformat license. - */ -const char *avformat_license(void); - -#if FF_API_NEXT -/** - * Initialize libavformat and register all the muxers, demuxers and - * protocols. If you do not call this function, then you can select - * exactly which formats you want to support. - * - * @see av_register_input_format() - * @see av_register_output_format() - */ -attribute_deprecated -void av_register_all(void); - -attribute_deprecated -void av_register_input_format(AVInputFormat *format); -attribute_deprecated -void av_register_output_format(AVOutputFormat *format); -#endif - -/** - * Do global initialization of network libraries. This is optional, - * and not recommended anymore. - * - * This functions only exists to work around thread-safety issues - * with older GnuTLS or OpenSSL libraries. If libavformat is linked - * to newer versions of those libraries, or if you do not use them, - * calling this function is unnecessary. Otherwise, you need to call - * this function before any other threads using them are started. - * - * This function will be deprecated once support for older GnuTLS and - * OpenSSL libraries is removed, and this function has no purpose - * anymore. - */ -int avformat_network_init(void); - -/** - * Undo the initialization done by avformat_network_init. Call it only - * once for each time you called avformat_network_init. - */ -int avformat_network_deinit(void); - -#if FF_API_NEXT -/** - * If f is NULL, returns the first registered input format, - * if f is non-NULL, returns the next registered input format after f - * or NULL if f is the last one. - */ -attribute_deprecated -AVInputFormat *av_iformat_next(const AVInputFormat *f); - -/** - * If f is NULL, returns the first registered output format, - * if f is non-NULL, returns the next registered output format after f - * or NULL if f is the last one. - */ -attribute_deprecated -AVOutputFormat *av_oformat_next(const AVOutputFormat *f); -#endif - -/** - * Iterate over all registered muxers. - * - * @param opaque a pointer where libavformat will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered muxer or NULL when the iteration is - * finished - */ -const AVOutputFormat *av_muxer_iterate(void **opaque); - -/** - * Iterate over all registered demuxers. - * - * @param opaque a pointer where libavformat will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered demuxer or NULL when the iteration is - * finished - */ -const AVInputFormat *av_demuxer_iterate(void **opaque); - -/** - * Allocate an AVFormatContext. - * avformat_free_context() can be used to free the context and everything - * allocated by the framework within it. - */ -AVFormatContext *avformat_alloc_context(void); - -/** - * Free an AVFormatContext and all its streams. - * @param s context to free - */ -void avformat_free_context(AVFormatContext *s); - -/** - * Get the AVClass for AVFormatContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avformat_get_class(void); - -/** - * Add a new stream to a media file. - * - * When demuxing, it is called by the demuxer in read_header(). If the - * flag AVFMTCTX_NOHEADER is set in s.ctx_flags, then it may also - * be called in read_packet(). - * - * When muxing, should be called by the user before avformat_write_header(). - * - * User is required to call avcodec_close() and avformat_free_context() to - * clean up the allocation by avformat_new_stream(). - * - * @param s media file handle - * @param c If non-NULL, the AVCodecContext corresponding to the new stream - * will be initialized to use this codec. This is needed for e.g. codec-specific - * defaults to be set, so codec should be provided if it is known. - * - * @return newly created stream or NULL on error. - */ -AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c); - -/** - * Wrap an existing array as stream side data. - * - * @param st stream - * @param type side information type - * @param data the side data array. It must be allocated with the av_malloc() - * family of functions. The ownership of the data is transferred to - * st. - * @param size side information size - * @return zero on success, a negative AVERROR code on failure. On failure, - * the stream is unchanged and the data remains owned by the caller. - */ -int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type, - uint8_t *data, size_t size); - -/** - * Allocate new information from stream. - * - * @param stream stream - * @param type desired side information type - * @param size side information size - * @return pointer to fresh allocated data or NULL otherwise - */ -uint8_t *av_stream_new_side_data(AVStream *stream, -#if FF_API_BUFFER_SIZE_T - enum AVPacketSideDataType type, int size); -#else - enum AVPacketSideDataType type, size_t size); -#endif -/** - * Get side information from stream. - * - * @param stream stream - * @param type desired side information type - * @param size If supplied, *size will be set to the size of the side data - * or to zero if the desired side data is not present. - * @return pointer to data if present or NULL otherwise - */ -uint8_t *av_stream_get_side_data(const AVStream *stream, -#if FF_API_BUFFER_SIZE_T - enum AVPacketSideDataType type, int *size); -#else - enum AVPacketSideDataType type, size_t *size); -#endif - -AVProgram *av_new_program(AVFormatContext *s, int id); - -/** - * @} - */ - - -/** - * Allocate an AVFormatContext for an output format. - * avformat_free_context() can be used to free the context and - * everything allocated by the framework within it. - * - * @param *ctx is set to the created format context, or to NULL in - * case of failure - * @param oformat format to use for allocating the context, if NULL - * format_name and filename are used instead - * @param format_name the name of output format to use for allocating the - * context, if NULL filename is used instead - * @param filename the name of the filename to use for allocating the - * context, may be NULL - * @return >= 0 in case of success, a negative AVERROR code in case of - * failure - */ -int avformat_alloc_output_context2(AVFormatContext **ctx, ff_const59 AVOutputFormat *oformat, - const char *format_name, const char *filename); - -/** - * @addtogroup lavf_decoding - * @{ - */ - -/** - * Find AVInputFormat based on the short name of the input format. - */ -ff_const59 AVInputFormat *av_find_input_format(const char *short_name); - -/** - * Guess the file format. - * - * @param pd data to be probed - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - */ -ff_const59 AVInputFormat *av_probe_input_format(ff_const59 AVProbeData *pd, int is_opened); - -/** - * Guess the file format. - * - * @param pd data to be probed - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - * @param score_max A probe score larger that this is required to accept a - * detection, the variable is set to the actual detection - * score afterwards. - * If the score is <= AVPROBE_SCORE_MAX / 4 it is recommended - * to retry with a larger probe buffer. - */ -ff_const59 AVInputFormat *av_probe_input_format2(ff_const59 AVProbeData *pd, int is_opened, int *score_max); - -/** - * Guess the file format. - * - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - * @param score_ret The score of the best detection. - */ -ff_const59 AVInputFormat *av_probe_input_format3(ff_const59 AVProbeData *pd, int is_opened, int *score_ret); - -/** - * Probe a bytestream to determine the input format. Each time a probe returns - * with a score that is too low, the probe buffer size is increased and another - * attempt is made. When the maximum probe size is reached, the input format - * with the highest score is returned. - * - * @param pb the bytestream to probe - * @param fmt the input format is put here - * @param url the url of the stream - * @param logctx the log context - * @param offset the offset within the bytestream to probe from - * @param max_probe_size the maximum probe buffer size (zero for default) - * @return the score in case of success, a negative value corresponding to an - * the maximal score is AVPROBE_SCORE_MAX - * AVERROR code otherwise - */ -int av_probe_input_buffer2(AVIOContext *pb, ff_const59 AVInputFormat **fmt, - const char *url, void *logctx, - unsigned int offset, unsigned int max_probe_size); - -/** - * Like av_probe_input_buffer2() but returns 0 on success - */ -int av_probe_input_buffer(AVIOContext *pb, ff_const59 AVInputFormat **fmt, - const char *url, void *logctx, - unsigned int offset, unsigned int max_probe_size); - -/** - * Open an input stream and read the header. The codecs are not opened. - * The stream must be closed with avformat_close_input(). - * - * @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context). - * May be a pointer to NULL, in which case an AVFormatContext is allocated by this - * function and written into ps. - * Note that a user-supplied AVFormatContext will be freed on failure. - * @param url URL of the stream to open. - * @param fmt If non-NULL, this parameter forces a specific input format. - * Otherwise the format is autodetected. - * @param options A dictionary filled with AVFormatContext and demuxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return 0 on success, a negative AVERROR on failure. - * - * @note If you want to use custom IO, preallocate the format context and set its pb field. - */ -int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options); - -#if FF_API_DEMUXER_OPEN -/** - * @deprecated Use an AVDictionary to pass options to a demuxer. - */ -attribute_deprecated -int av_demuxer_open(AVFormatContext *ic); -#endif - -/** - * Read packets of a media file to get stream information. This - * is useful for file formats with no headers such as MPEG. This - * function also computes the real framerate in case of MPEG-2 repeat - * frame mode. - * The logical file position is not changed by this function; - * examined packets may be buffered for later processing. - * - * @param ic media file handle - * @param options If non-NULL, an ic.nb_streams long array of pointers to - * dictionaries, where i-th member contains options for - * codec corresponding to i-th stream. - * On return each dictionary will be filled with options that were not found. - * @return >=0 if OK, AVERROR_xxx on error - * - * @note this function isn't guaranteed to open all the codecs, so - * options being non-empty at return is a perfectly normal behavior. - * - * @todo Let the user decide somehow what information is needed so that - * we do not waste time getting stuff the user does not need. - */ -int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options); - -/** - * Find the programs which belong to a given stream. - * - * @param ic media file handle - * @param last the last found program, the search will start after this - * program, or from the beginning if it is NULL - * @param s stream index - * @return the next program which belongs to s, NULL if no program is found or - * the last program is not among the programs of ic. - */ -AVProgram *av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s); - -void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int idx); - -/** - * Find the "best" stream in the file. - * The best stream is determined according to various heuristics as the most - * likely to be what the user expects. - * If the decoder parameter is non-NULL, av_find_best_stream will find the - * default decoder for the stream's codec; streams for which no decoder can - * be found are ignored. - * - * @param ic media file handle - * @param type stream type: video, audio, subtitles, etc. - * @param wanted_stream_nb user-requested stream number, - * or -1 for automatic selection - * @param related_stream try to find a stream related (eg. in the same - * program) to this one, or -1 if none - * @param decoder_ret if non-NULL, returns the decoder for the - * selected stream - * @param flags flags; none are currently defined - * @return the non-negative stream number in case of success, - * AVERROR_STREAM_NOT_FOUND if no stream with the requested type - * could be found, - * AVERROR_DECODER_NOT_FOUND if streams were found but no decoder - * @note If av_find_best_stream returns successfully and decoder_ret is not - * NULL, then *decoder_ret is guaranteed to be set to a valid AVCodec. - */ -int av_find_best_stream(AVFormatContext *ic, - enum AVMediaType type, - int wanted_stream_nb, - int related_stream, - AVCodec **decoder_ret, - int flags); - -/** - * Return the next frame of a stream. - * This function returns what is stored in the file, and does not validate - * that what is there are valid frames for the decoder. It will split what is - * stored in the file into frames and return one for each call. It will not - * omit invalid data between valid frames so as to give the decoder the maximum - * information possible for decoding. - * - * On success, the returned packet is reference-counted (pkt->buf is set) and - * valid indefinitely. The packet must be freed with av_packet_unref() when - * it is no longer needed. For video, the packet contains exactly one frame. - * For audio, it contains an integer number of frames if each frame has - * a known fixed size (e.g. PCM or ADPCM data). If the audio frames have - * a variable size (e.g. MPEG audio), then it contains one frame. - * - * pkt->pts, pkt->dts and pkt->duration are always set to correct - * values in AVStream.time_base units (and guessed if the format cannot - * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format - * has B-frames, so it is better to rely on pkt->dts if you do not - * decompress the payload. - * - * @return 0 if OK, < 0 on error or end of file. On error, pkt will be blank - * (as if it came from av_packet_alloc()). - * - * @note pkt will be initialized, so it may be uninitialized, but it must not - * contain data that needs to be freed. - */ -int av_read_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Seek to the keyframe at timestamp. - * 'timestamp' in 'stream_index'. - * - * @param s media file handle - * @param stream_index If stream_index is (-1), a default - * stream is selected, and timestamp is automatically converted - * from AV_TIME_BASE units to the stream specific time_base. - * @param timestamp Timestamp in AVStream.time_base units - * or, if no stream is specified, in AV_TIME_BASE units. - * @param flags flags which select direction and seeking mode - * @return >= 0 on success - */ -int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, - int flags); - -/** - * Seek to timestamp ts. - * Seeking will be done so that the point from which all active streams - * can be presented successfully will be closest to ts and within min/max_ts. - * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. - * - * If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in bytes and - * are the file position (this may not be supported by all demuxers). - * If flags contain AVSEEK_FLAG_FRAME, then all timestamps are in frames - * in the stream with stream_index (this may not be supported by all demuxers). - * Otherwise all timestamps are in units of the stream selected by stream_index - * or if stream_index is -1, in AV_TIME_BASE units. - * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as - * keyframes (this may not be supported by all demuxers). - * If flags contain AVSEEK_FLAG_BACKWARD, it is ignored. - * - * @param s media file handle - * @param stream_index index of the stream which is used as time base reference - * @param min_ts smallest acceptable timestamp - * @param ts target timestamp - * @param max_ts largest acceptable timestamp - * @param flags flags - * @return >=0 on success, error code otherwise - * - * @note This is part of the new seek API which is still under construction. - */ -int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); - -/** - * Discard all internally buffered data. This can be useful when dealing with - * discontinuities in the byte stream. Generally works only with formats that - * can resync. This includes headerless formats like MPEG-TS/TS but should also - * work with NUT, Ogg and in a limited way AVI for example. - * - * The set of streams, the detected duration, stream parameters and codecs do - * not change when calling this function. If you want a complete reset, it's - * better to open a new AVFormatContext. - * - * This does not flush the AVIOContext (s->pb). If necessary, call - * avio_flush(s->pb) before calling this function. - * - * @param s media file handle - * @return >=0 on success, error code otherwise - */ -int avformat_flush(AVFormatContext *s); - -/** - * Start playing a network-based stream (e.g. RTSP stream) at the - * current position. - */ -int av_read_play(AVFormatContext *s); - -/** - * Pause a network-based stream (e.g. RTSP stream). - * - * Use av_read_play() to resume it. - */ -int av_read_pause(AVFormatContext *s); - -/** - * Close an opened input AVFormatContext. Free it and all its contents - * and set *s to NULL. - */ -void avformat_close_input(AVFormatContext **s); -/** - * @} - */ - -#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward -#define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes -#define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes -#define AVSEEK_FLAG_FRAME 8 ///< seeking based on frame number - -/** - * @addtogroup lavf_encoding - * @{ - */ - -#define AVSTREAM_INIT_IN_WRITE_HEADER 0 ///< stream parameters initialized in avformat_write_header -#define AVSTREAM_INIT_IN_INIT_OUTPUT 1 ///< stream parameters initialized in avformat_init_output - -/** - * Allocate the stream private data and write the stream header to - * an output media file. - * - * @param s Media file handle, must be allocated with avformat_alloc_context(). - * Its oformat field must be set to the desired output format; - * Its pb field must be set to an already opened AVIOContext. - * @param options An AVDictionary filled with AVFormatContext and muxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return AVSTREAM_INIT_IN_WRITE_HEADER on success if the codec had not already been fully initialized in avformat_init, - * AVSTREAM_INIT_IN_INIT_OUTPUT on success if the codec had already been fully initialized in avformat_init, - * negative AVERROR on failure. - * - * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_init_output. - */ -av_warn_unused_result -int avformat_write_header(AVFormatContext *s, AVDictionary **options); - -/** - * Allocate the stream private data and initialize the codec, but do not write the header. - * May optionally be used before avformat_write_header to initialize stream parameters - * before actually writing the header. - * If using this function, do not pass the same options to avformat_write_header. - * - * @param s Media file handle, must be allocated with avformat_alloc_context(). - * Its oformat field must be set to the desired output format; - * Its pb field must be set to an already opened AVIOContext. - * @param options An AVDictionary filled with AVFormatContext and muxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return AVSTREAM_INIT_IN_WRITE_HEADER on success if the codec requires avformat_write_header to fully initialize, - * AVSTREAM_INIT_IN_INIT_OUTPUT on success if the codec has been fully initialized, - * negative AVERROR on failure. - * - * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_write_header. - */ -av_warn_unused_result -int avformat_init_output(AVFormatContext *s, AVDictionary **options); - -/** - * Write a packet to an output media file. - * - * This function passes the packet directly to the muxer, without any buffering - * or reordering. The caller is responsible for correctly interleaving the - * packets if the format requires it. Callers that want libavformat to handle - * the interleaving should call av_interleaved_write_frame() instead of this - * function. - * - * @param s media file handle - * @param pkt The packet containing the data to be written. Note that unlike - * av_interleaved_write_frame(), this function does not take - * ownership of the packet passed to it (though some muxers may make - * an internal reference to the input packet). - *
- * This parameter can be NULL (at any time, not just at the end), in - * order to immediately flush data buffered within the muxer, for - * muxers that buffer up data internally before writing it to the - * output. - *
- * Packet's @ref AVPacket.stream_index "stream_index" field must be - * set to the index of the corresponding stream in @ref - * AVFormatContext.streams "s->streams". - *
- * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") - * must be set to correct values in the stream's timebase (unless the - * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then - * they can be set to AV_NOPTS_VALUE). - * The dts for subsequent packets passed to this function must be strictly - * increasing when compared in their respective timebases (unless the - * output format is flagged with the AVFMT_TS_NONSTRICT, then they - * merely have to be nondecreasing). @ref AVPacket.duration - * "duration") should also be set if known. - * @return < 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush - * - * @see av_interleaved_write_frame() - */ -int av_write_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Write a packet to an output media file ensuring correct interleaving. - * - * This function will buffer the packets internally as needed to make sure the - * packets in the output file are properly interleaved in the order of - * increasing dts. Callers doing their own interleaving should call - * av_write_frame() instead of this function. - * - * Using this function instead of av_write_frame() can give muxers advance - * knowledge of future packets, improving e.g. the behaviour of the mp4 - * muxer for VFR content in fragmenting mode. - * - * @param s media file handle - * @param pkt The packet containing the data to be written. - *
- * If the packet is reference-counted, this function will take - * ownership of this reference and unreference it later when it sees - * fit. - * The caller must not access the data through this reference after - * this function returns. If the packet is not reference-counted, - * libavformat will make a copy. - *
- * This parameter can be NULL (at any time, not just at the end), to - * flush the interleaving queues. - *
- * Packet's @ref AVPacket.stream_index "stream_index" field must be - * set to the index of the corresponding stream in @ref - * AVFormatContext.streams "s->streams". - *
- * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") - * must be set to correct values in the stream's timebase (unless the - * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then - * they can be set to AV_NOPTS_VALUE). - * The dts for subsequent packets in one stream must be strictly - * increasing (unless the output format is flagged with the - * AVFMT_TS_NONSTRICT, then they merely have to be nondecreasing). - * @ref AVPacket.duration "duration") should also be set if known. - * - * @return 0 on success, a negative AVERROR on error. Libavformat will always - * take care of freeing the packet, even if this function fails. - * - * @see av_write_frame(), AVFormatContext.max_interleave_delta - */ -int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Write an uncoded frame to an output media file. - * - * The frame must be correctly interleaved according to the container - * specification; if not, av_interleaved_write_uncoded_frame() must be used. - * - * See av_interleaved_write_uncoded_frame() for details. - */ -int av_write_uncoded_frame(AVFormatContext *s, int stream_index, - AVFrame *frame); - -/** - * Write an uncoded frame to an output media file. - * - * If the muxer supports it, this function makes it possible to write an AVFrame - * structure directly, without encoding it into a packet. - * It is mostly useful for devices and similar special muxers that use raw - * video or PCM data and will not serialize it into a byte stream. - * - * To test whether it is possible to use it with a given muxer and stream, - * use av_write_uncoded_frame_query(). - * - * The caller gives up ownership of the frame and must not access it - * afterwards. - * - * @return >=0 for success, a negative code on error - */ -int av_interleaved_write_uncoded_frame(AVFormatContext *s, int stream_index, - AVFrame *frame); - -/** - * Test whether a muxer supports uncoded frame. - * - * @return >=0 if an uncoded frame can be written to that muxer and stream, - * <0 if not - */ -int av_write_uncoded_frame_query(AVFormatContext *s, int stream_index); - -/** - * Write the stream trailer to an output media file and free the - * file private data. - * - * May only be called after a successful call to avformat_write_header. - * - * @param s media file handle - * @return 0 if OK, AVERROR_xxx on error - */ -int av_write_trailer(AVFormatContext *s); - -/** - * Return the output format in the list of registered output formats - * which best matches the provided parameters, or return NULL if - * there is no match. - * - * @param short_name if non-NULL checks if short_name matches with the - * names of the registered formats - * @param filename if non-NULL checks if filename terminates with the - * extensions of the registered formats - * @param mime_type if non-NULL checks if mime_type matches with the - * MIME type of the registered formats - */ -ff_const59 AVOutputFormat *av_guess_format(const char *short_name, - const char *filename, - const char *mime_type); - -/** - * Guess the codec ID based upon muxer and filename. - */ -enum AVCodecID av_guess_codec(ff_const59 AVOutputFormat *fmt, const char *short_name, - const char *filename, const char *mime_type, - enum AVMediaType type); - -/** - * Get timing information for the data currently output. - * The exact meaning of "currently output" depends on the format. - * It is mostly relevant for devices that have an internal buffer and/or - * work in real time. - * @param s media file handle - * @param stream stream in the media file - * @param[out] dts DTS of the last packet output for the stream, in stream - * time_base units - * @param[out] wall absolute time when that packet whas output, - * in microsecond - * @return 0 if OK, AVERROR(ENOSYS) if the format does not support it - * Note: some formats or devices may not allow to measure dts and wall - * atomically. - */ -int av_get_output_timestamp(struct AVFormatContext *s, int stream, - int64_t *dts, int64_t *wall); - - -/** - * @} - */ - - -/** - * @defgroup lavf_misc Utility functions - * @ingroup libavf - * @{ - * - * Miscellaneous utility functions related to both muxing and demuxing - * (or neither). - */ - -/** - * Send a nice hexadecimal dump of a buffer to the specified file stream. - * - * @param f The file stream pointer where the dump should be sent to. - * @param buf buffer - * @param size buffer size - * - * @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2 - */ -void av_hex_dump(FILE *f, const uint8_t *buf, int size); - -/** - * Send a nice hexadecimal dump of a buffer to the log. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message, lower values signifying - * higher importance. - * @param buf buffer - * @param size buffer size - * - * @see av_hex_dump, av_pkt_dump2, av_pkt_dump_log2 - */ -void av_hex_dump_log(void *avcl, int level, const uint8_t *buf, int size); - -/** - * Send a nice dump of a packet to the specified file stream. - * - * @param f The file stream pointer where the dump should be sent to. - * @param pkt packet to dump - * @param dump_payload True if the payload must be displayed, too. - * @param st AVStream that the packet belongs to - */ -void av_pkt_dump2(FILE *f, const AVPacket *pkt, int dump_payload, const AVStream *st); - - -/** - * Send a nice dump of a packet to the log. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message, lower values signifying - * higher importance. - * @param pkt packet to dump - * @param dump_payload True if the payload must be displayed, too. - * @param st AVStream that the packet belongs to - */ -void av_pkt_dump_log2(void *avcl, int level, const AVPacket *pkt, int dump_payload, - const AVStream *st); - -/** - * Get the AVCodecID for the given codec tag tag. - * If no codec id is found returns AV_CODEC_ID_NONE. - * - * @param tags list of supported codec_id-codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param tag codec tag to match to a codec ID - */ -enum AVCodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag); - -/** - * Get the codec tag for the given codec id id. - * If no codec tag is found returns 0. - * - * @param tags list of supported codec_id-codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param id codec ID to match to a codec tag - */ -unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum AVCodecID id); - -/** - * Get the codec tag for the given codec id. - * - * @param tags list of supported codec_id - codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param id codec id that should be searched for in the list - * @param tag A pointer to the found tag - * @return 0 if id was not found in tags, > 0 if it was found - */ -int av_codec_get_tag2(const struct AVCodecTag * const *tags, enum AVCodecID id, - unsigned int *tag); - -int av_find_default_stream_index(AVFormatContext *s); - -/** - * Get the index for a specific timestamp. - * - * @param st stream that the timestamp belongs to - * @param timestamp timestamp to retrieve the index for - * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond - * to the timestamp which is <= the requested one, if backward - * is 0, then it will be >= - * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise - * @return < 0 if no such timestamp could be found - */ -int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags); - -/** - * Add an index entry into a sorted list. Update the entry if the list - * already contains it. - * - * @param timestamp timestamp in the time base of the given stream - */ -int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, - int size, int distance, int flags); - - -/** - * Split a URL string into components. - * - * The pointers to buffers for storing individual components may be null, - * in order to ignore that component. Buffers for components not found are - * set to empty strings. If the port is not found, it is set to a negative - * value. - * - * @param proto the buffer for the protocol - * @param proto_size the size of the proto buffer - * @param authorization the buffer for the authorization - * @param authorization_size the size of the authorization buffer - * @param hostname the buffer for the host name - * @param hostname_size the size of the hostname buffer - * @param port_ptr a pointer to store the port number in - * @param path the buffer for the path - * @param path_size the size of the path buffer - * @param url the URL to split - */ -void av_url_split(char *proto, int proto_size, - char *authorization, int authorization_size, - char *hostname, int hostname_size, - int *port_ptr, - char *path, int path_size, - const char *url); - - -/** - * Print detailed information about the input or output format, such as - * duration, bitrate, streams, container, programs, metadata, side data, - * codec and time base. - * - * @param ic the context to analyze - * @param index index of the stream to dump information about - * @param url the URL to print, such as source or destination file - * @param is_output Select whether the specified context is an input(0) or output(1) - */ -void av_dump_format(AVFormatContext *ic, - int index, - const char *url, - int is_output); - - -#define AV_FRAME_FILENAME_FLAGS_MULTIPLE 1 ///< Allow multiple %d - -/** - * Return in 'buf' the path with '%d' replaced by a number. - * - * Also handles the '%0nd' format where 'n' is the total number - * of digits and '%%'. - * - * @param buf destination buffer - * @param buf_size destination buffer size - * @param path numbered sequence string - * @param number frame number - * @param flags AV_FRAME_FILENAME_FLAGS_* - * @return 0 if OK, -1 on format error - */ -int av_get_frame_filename2(char *buf, int buf_size, - const char *path, int number, int flags); - -int av_get_frame_filename(char *buf, int buf_size, - const char *path, int number); - -/** - * Check whether filename actually is a numbered sequence generator. - * - * @param filename possible numbered sequence string - * @return 1 if a valid numbered sequence string, 0 otherwise - */ -int av_filename_number_test(const char *filename); - -/** - * Generate an SDP for an RTP session. - * - * Note, this overwrites the id values of AVStreams in the muxer contexts - * for getting unique dynamic payload types. - * - * @param ac array of AVFormatContexts describing the RTP streams. If the - * array is composed by only one context, such context can contain - * multiple AVStreams (one AVStream per RTP stream). Otherwise, - * all the contexts in the array (an AVCodecContext per RTP stream) - * must contain only one AVStream. - * @param n_files number of AVCodecContexts contained in ac - * @param buf buffer where the SDP will be stored (must be allocated by - * the caller) - * @param size the size of the buffer - * @return 0 if OK, AVERROR_xxx on error - */ -int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size); - -/** - * Return a positive value if the given filename has one of the given - * extensions, 0 otherwise. - * - * @param filename file name to check against the given extensions - * @param extensions a comma-separated list of filename extensions - */ -int av_match_ext(const char *filename, const char *extensions); - -/** - * Test if the given container can store a codec. - * - * @param ofmt container to check for compatibility - * @param codec_id codec to potentially store in container - * @param std_compliance standards compliance level, one of FF_COMPLIANCE_* - * - * @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot. - * A negative number if this information is not available. - */ -int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id, - int std_compliance); - -/** - * @defgroup riff_fourcc RIFF FourCCs - * @{ - * Get the tables mapping RIFF FourCCs to libavcodec AVCodecIDs. 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 - */ -/** - * @return the table mapping RIFF FourCCs for video to libavcodec AVCodecID. - */ -const struct AVCodecTag *avformat_get_riff_video_tags(void); -/** - * @return the table mapping RIFF FourCCs for audio to AVCodecID. - */ -const struct AVCodecTag *avformat_get_riff_audio_tags(void); -/** - * @return the table mapping MOV FourCCs for video to libavcodec AVCodecID. - */ -const struct AVCodecTag *avformat_get_mov_video_tags(void); -/** - * @return the table mapping MOV FourCCs for audio to AVCodecID. - */ -const struct AVCodecTag *avformat_get_mov_audio_tags(void); - -/** - * @} - */ - -/** - * Guess the sample aspect ratio of a frame, based on both the stream and the - * frame aspect ratio. - * - * Since the frame aspect ratio is set by the codec but the stream aspect ratio - * is set by the demuxer, these two may not be equal. This function tries to - * return the value that you should use if you would like to display the frame. - * - * Basic logic is to use the stream aspect ratio if it is set to something sane - * otherwise use the frame aspect ratio. This way a container setting, which is - * usually easy to modify can override the coded value in the frames. - * - * @param format the format context which the stream is part of - * @param stream the stream which the frame is part of - * @param frame the frame with the aspect ratio to be determined - * @return the guessed (valid) sample_aspect_ratio, 0/1 if no idea - */ -AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame); - -/** - * Guess the frame rate, based on both the container and codec information. - * - * @param ctx the format context which the stream is part of - * @param stream the stream which the frame is part of - * @param frame the frame for which the frame rate should be determined, may be NULL - * @return the guessed (valid) frame rate, 0/1 if no idea - */ -AVRational av_guess_frame_rate(AVFormatContext *ctx, AVStream *stream, AVFrame *frame); - -/** - * Check if the stream st contained in s is matched by the stream specifier - * spec. - * - * See the "stream specifiers" chapter in the documentation for the syntax - * of spec. - * - * @return >0 if st is matched by spec; - * 0 if st is not matched by spec; - * AVERROR code if spec is invalid - * - * @note A stream specifier can match several streams in the format. - */ -int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, - const char *spec); - -int avformat_queue_attached_pictures(AVFormatContext *s); - -#if FF_API_OLD_BSF -/** - * Apply a list of bitstream filters to a packet. - * - * @param codec AVCodecContext, usually from an AVStream - * @param pkt the packet to apply filters to. If, on success, the returned - * packet has size == 0 and side_data_elems == 0, it indicates that - * the packet should be dropped - * @param bsfc a NULL-terminated list of filters to apply - * @return >=0 on success; - * AVERROR code on failure - */ -attribute_deprecated -int av_apply_bitstream_filters(AVCodecContext *codec, AVPacket *pkt, - AVBitStreamFilterContext *bsfc); -#endif - -enum AVTimebaseSource { - AVFMT_TBCF_AUTO = -1, - AVFMT_TBCF_DECODER, - AVFMT_TBCF_DEMUXER, -#if FF_API_R_FRAME_RATE - AVFMT_TBCF_R_FRAMERATE, -#endif -}; - -/** - * Transfer internal timing information from one stream to another. - * - * This function is useful when doing stream copy. - * - * @param ofmt target output format for ost - * @param ost output stream which needs timings copy and adjustments - * @param ist reference input stream to copy timings from - * @param copy_tb define from where the stream codec timebase needs to be imported - */ -int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt, - AVStream *ost, const AVStream *ist, - enum AVTimebaseSource copy_tb); - -/** - * Get the internal codec timebase from a stream. - * - * @param st input stream to extract the timebase from - */ -AVRational av_stream_get_codec_timebase(const AVStream *st); - -/** - * @} - */ - -#endif /* AVFORMAT_AVFORMAT_H */ diff --git a/prebuilts/arm/include/libavformat/avio.h b/prebuilts/arm/include/libavformat/avio.h deleted file mode 100644 index d022820..0000000 --- a/prebuilts/arm/include/libavformat/avio.h +++ /dev/null @@ -1,888 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -#ifndef AVFORMAT_AVIO_H -#define AVFORMAT_AVIO_H - -/** - * @file - * @ingroup lavf_io - * Buffered I/O operations - */ - -#include - -#include "libavutil/common.h" -#include "libavutil/dict.h" -#include "libavutil/log.h" - -#include "libavformat/version.h" - -/** - * Seeking works like for a local file. - */ -#define AVIO_SEEKABLE_NORMAL (1 << 0) - -/** - * Seeking by timestamp with avio_seek_time() is possible. - */ -#define AVIO_SEEKABLE_TIME (1 << 1) - -/** - * Callback for checking whether to abort blocking functions. - * AVERROR_EXIT is returned in this case by the interrupted - * function. During blocking operations, callback is called with - * opaque as parameter. If the callback returns 1, the - * blocking operation will be aborted. - * - * No members can be added to this struct without a major bump, if - * new elements have been added after this struct in AVFormatContext - * or AVIOContext. - */ -typedef struct AVIOInterruptCB { - int (*callback)(void*); - void *opaque; -} AVIOInterruptCB; - -/** - * Directory entry types. - */ -enum AVIODirEntryType { - AVIO_ENTRY_UNKNOWN, - AVIO_ENTRY_BLOCK_DEVICE, - AVIO_ENTRY_CHARACTER_DEVICE, - AVIO_ENTRY_DIRECTORY, - AVIO_ENTRY_NAMED_PIPE, - AVIO_ENTRY_SYMBOLIC_LINK, - AVIO_ENTRY_SOCKET, - AVIO_ENTRY_FILE, - AVIO_ENTRY_SERVER, - AVIO_ENTRY_SHARE, - AVIO_ENTRY_WORKGROUP, -}; - -/** - * Describes single entry of the directory. - * - * Only name and type fields are guaranteed be set. - * Rest of fields are protocol or/and platform dependent and might be unknown. - */ -typedef struct AVIODirEntry { - char *name; /**< Filename */ - int type; /**< Type of the entry */ - int utf8; /**< Set to 1 when name is encoded with UTF-8, 0 otherwise. - Name can be encoded with UTF-8 even though 0 is set. */ - int64_t size; /**< File size in bytes, -1 if unknown. */ - int64_t modification_timestamp; /**< Time of last modification in microseconds since unix - epoch, -1 if unknown. */ - int64_t access_timestamp; /**< Time of last access in microseconds since unix epoch, - -1 if unknown. */ - int64_t status_change_timestamp; /**< Time of last status change in microseconds since unix - epoch, -1 if unknown. */ - int64_t user_id; /**< User ID of owner, -1 if unknown. */ - int64_t group_id; /**< Group ID of owner, -1 if unknown. */ - int64_t filemode; /**< Unix file mode, -1 if unknown. */ -} AVIODirEntry; - -typedef struct AVIODirContext { - struct URLContext *url_context; -} AVIODirContext; - -/** - * Different data types that can be returned via the AVIO - * write_data_type callback. - */ -enum AVIODataMarkerType { - /** - * Header data; this needs to be present for the stream to be decodeable. - */ - AVIO_DATA_MARKER_HEADER, - /** - * A point in the output bytestream where a decoder can start decoding - * (i.e. a keyframe). A demuxer/decoder given the data flagged with - * AVIO_DATA_MARKER_HEADER, followed by any AVIO_DATA_MARKER_SYNC_POINT, - * should give decodeable results. - */ - AVIO_DATA_MARKER_SYNC_POINT, - /** - * A point in the output bytestream where a demuxer can start parsing - * (for non self synchronizing bytestream formats). That is, any - * non-keyframe packet start point. - */ - AVIO_DATA_MARKER_BOUNDARY_POINT, - /** - * This is any, unlabelled data. It can either be a muxer not marking - * any positions at all, it can be an actual boundary/sync point - * that the muxer chooses not to mark, or a later part of a packet/fragment - * that is cut into multiple write callbacks due to limited IO buffer size. - */ - AVIO_DATA_MARKER_UNKNOWN, - /** - * Trailer data, which doesn't contain actual content, but only for - * finalizing the output file. - */ - AVIO_DATA_MARKER_TRAILER, - /** - * A point in the output bytestream where the underlying AVIOContext might - * flush the buffer depending on latency or buffering requirements. Typically - * means the end of a packet. - */ - AVIO_DATA_MARKER_FLUSH_POINT, -}; - -/** - * Bytestream IO Context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVIOContext) must not be used outside libav*. - * - * @note None of the function pointers in AVIOContext should be called - * directly, they should only be set by the client application - * when implementing custom I/O. Normally these are set to the - * function pointers specified in avio_alloc_context() - */ -typedef struct AVIOContext { - /** - * A class for private options. - * - * If this AVIOContext is created by avio_open2(), av_class is set and - * passes the options down to protocols. - * - * If this AVIOContext is manually allocated, then av_class may be set by - * the caller. - * - * warning -- this field can be NULL, be sure to not pass this AVIOContext - * to any av_opt_* functions in that case. - */ - const AVClass *av_class; - - /* - * The following shows the relationship between buffer, buf_ptr, - * buf_ptr_max, buf_end, buf_size, and pos, when reading and when writing - * (since AVIOContext is used for both): - * - ********************************************************************************** - * READING - ********************************************************************************** - * - * | buffer_size | - * |---------------------------------------| - * | | - * - * buffer buf_ptr buf_end - * +---------------+-----------------------+ - * |/ / / / / / / /|/ / / / / / /| | - * read buffer: |/ / consumed / | to be read /| | - * |/ / / / / / / /|/ / / / / / /| | - * +---------------+-----------------------+ - * - * pos - * +-------------------------------------------+-----------------+ - * input file: | | | - * +-------------------------------------------+-----------------+ - * - * - ********************************************************************************** - * WRITING - ********************************************************************************** - * - * | buffer_size | - * |--------------------------------------| - * | | - * - * buf_ptr_max - * buffer (buf_ptr) buf_end - * +-----------------------+--------------+ - * |/ / / / / / / / / / / /| | - * write buffer: | / / to be flushed / / | | - * |/ / / / / / / / / / / /| | - * +-----------------------+--------------+ - * buf_ptr can be in this - * due to a backward seek - * - * pos - * +-------------+----------------------------------------------+ - * output file: | | | - * +-------------+----------------------------------------------+ - * - */ - unsigned char *buffer; /**< Start of the buffer. */ - int buffer_size; /**< Maximum buffer size */ - unsigned char *buf_ptr; /**< Current position in the buffer */ - unsigned char *buf_end; /**< End of the data, may be less than - buffer+buffer_size if the read function returned - less data than requested, e.g. for streams where - no more data has been received yet. */ - void *opaque; /**< A private pointer, passed to the read/write/seek/... - functions. */ - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size); - int (*write_packet)(void *opaque, uint8_t *buf, int buf_size); - int64_t (*seek)(void *opaque, int64_t offset, int whence); - int64_t pos; /**< position in the file of the current buffer */ - int eof_reached; /**< true if was unable to read due to error or eof */ - int write_flag; /**< true if open for writing */ - int max_packet_size; - unsigned long checksum; - unsigned char *checksum_ptr; - unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size); - int error; /**< contains the error code or 0 if no error happened */ - /** - * Pause or resume playback for network streaming protocols - e.g. MMS. - */ - int (*read_pause)(void *opaque, int pause); - /** - * Seek to a given timestamp in stream with the specified stream_index. - * Needed for some network streaming protocols which don't support seeking - * to byte position. - */ - int64_t (*read_seek)(void *opaque, int stream_index, - int64_t timestamp, int flags); - /** - * A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. - */ - int seekable; - - /** - * max filesize, used to limit allocations - * This field is internal to libavformat and access from outside is not allowed. - */ - int64_t maxsize; - - /** - * avio_read and avio_write should if possible be satisfied directly - * instead of going through a buffer, and avio_seek will always - * call the underlying seek function directly. - */ - int direct; - - /** - * Bytes read statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int64_t bytes_read; - - /** - * seek statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int seek_count; - - /** - * writeout statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int writeout_count; - - /** - * Original buffer size - * used internally after probing and ensure seekback to reset the buffer size - * This field is internal to libavformat and access from outside is not allowed. - */ - int orig_buffer_size; - - /** - * Threshold to favor readahead over seek. - * This is current internal only, do not use from outside. - */ - int short_seek_threshold; - - /** - * ',' separated list of allowed protocols. - */ - const char *protocol_whitelist; - - /** - * ',' separated list of disallowed protocols. - */ - const char *protocol_blacklist; - - /** - * A callback that is used instead of write_packet. - */ - int (*write_data_type)(void *opaque, uint8_t *buf, int buf_size, - enum AVIODataMarkerType type, int64_t time); - /** - * If set, don't call write_data_type separately for AVIO_DATA_MARKER_BOUNDARY_POINT, - * but ignore them and treat them as AVIO_DATA_MARKER_UNKNOWN (to avoid needlessly - * small chunks of data returned from the callback). - */ - int ignore_boundary_point; - - /** - * Internal, not meant to be used from outside of AVIOContext. - */ - enum AVIODataMarkerType current_type; - int64_t last_time; - - /** - * A callback that is used instead of short_seek_threshold. - * This is current internal only, do not use from outside. - */ - int (*short_seek_get)(void *opaque); - - int64_t written; - - /** - * Maximum reached position before a backward seek in the write buffer, - * used keeping track of already written data for a later flush. - */ - unsigned char *buf_ptr_max; - - /** - * Try to buffer at least this amount of data before flushing it - */ - int min_packet_size; -} AVIOContext; - -/** - * Return the name of the protocol that will handle the passed URL. - * - * NULL is returned if no protocol could be found for the given URL. - * - * @return Name of the protocol or NULL. - */ -const char *avio_find_protocol_name(const char *url); - -/** - * Return AVIO_FLAG_* access flags corresponding to the access permissions - * of the resource in url, or a negative value corresponding to an - * AVERROR code in case of failure. The returned access flags are - * masked by the value in flags. - * - * @note This function is intrinsically unsafe, in the sense that the - * checked resource may change its existence or permission status from - * one call to another. Thus you should not trust the returned value, - * unless you are sure that no other processes are accessing the - * checked resource. - */ -int avio_check(const char *url, int flags); - -/** - * Move or rename a resource. - * - * @note url_src and url_dst should share the same protocol and authority. - * - * @param url_src url to resource to be moved - * @param url_dst new url to resource if the operation succeeded - * @return >=0 on success or negative on error. - */ -int avpriv_io_move(const char *url_src, const char *url_dst); - -/** - * Delete a resource. - * - * @param url resource to be deleted. - * @return >=0 on success or negative on error. - */ -int avpriv_io_delete(const char *url); - -/** - * Open directory for reading. - * - * @param s directory read context. Pointer to a NULL pointer must be passed. - * @param url directory to be listed. - * @param options A dictionary filled with protocol-private options. On return - * this parameter will be destroyed and replaced with a dictionary - * containing options that were not found. May be NULL. - * @return >=0 on success or negative on error. - */ -int avio_open_dir(AVIODirContext **s, const char *url, AVDictionary **options); - -/** - * Get next directory entry. - * - * Returned entry must be freed with avio_free_directory_entry(). In particular - * it may outlive AVIODirContext. - * - * @param s directory read context. - * @param[out] next next entry or NULL when no more entries. - * @return >=0 on success or negative on error. End of list is not considered an - * error. - */ -int avio_read_dir(AVIODirContext *s, AVIODirEntry **next); - -/** - * Close directory. - * - * @note Entries created using avio_read_dir() are not deleted and must be - * freeded with avio_free_directory_entry(). - * - * @param s directory read context. - * @return >=0 on success or negative on error. - */ -int avio_close_dir(AVIODirContext **s); - -/** - * Free entry allocated by avio_read_dir(). - * - * @param entry entry to be freed. - */ -void avio_free_directory_entry(AVIODirEntry **entry); - -/** - * Allocate and initialize an AVIOContext for buffered I/O. It must be later - * freed with avio_context_free(). - * - * @param buffer Memory block for input/output operations via AVIOContext. - * The buffer must be allocated with av_malloc() and friends. - * It may be freed and replaced with a new buffer by libavformat. - * AVIOContext.buffer holds the buffer currently in use, - * which must be later freed with av_free(). - * @param buffer_size The buffer size is very important for performance. - * For protocols with fixed blocksize it should be set to this blocksize. - * For others a typical size is a cache page, e.g. 4kb. - * @param write_flag Set to 1 if the buffer should be writable, 0 otherwise. - * @param opaque An opaque pointer to user-specific data. - * @param read_packet A function for refilling the buffer, may be NULL. - * For stream protocols, must never return 0 but rather - * a proper AVERROR code. - * @param write_packet A function for writing the buffer contents, may be NULL. - * The function may not change the input buffers content. - * @param seek A function for seeking to specified byte position, may be NULL. - * - * @return Allocated AVIOContext or NULL on failure. - */ -AVIOContext *avio_alloc_context( - unsigned char *buffer, - int buffer_size, - int write_flag, - void *opaque, - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), - int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), - int64_t (*seek)(void *opaque, int64_t offset, int whence)); - -/** - * Free the supplied IO context and everything associated with it. - * - * @param s Double pointer to the IO context. This function will write NULL - * into s. - */ -void avio_context_free(AVIOContext **s); - -void avio_w8(AVIOContext *s, int b); -void avio_write(AVIOContext *s, const unsigned char *buf, int size); -void avio_wl64(AVIOContext *s, uint64_t val); -void avio_wb64(AVIOContext *s, uint64_t val); -void avio_wl32(AVIOContext *s, unsigned int val); -void avio_wb32(AVIOContext *s, unsigned int val); -void avio_wl24(AVIOContext *s, unsigned int val); -void avio_wb24(AVIOContext *s, unsigned int val); -void avio_wl16(AVIOContext *s, unsigned int val); -void avio_wb16(AVIOContext *s, unsigned int val); - -/** - * Write a NULL-terminated string. - * @return number of bytes written. - */ -int avio_put_str(AVIOContext *s, const char *str); - -/** - * Convert an UTF-8 string to UTF-16LE and write it. - * @param s the AVIOContext - * @param str NULL-terminated UTF-8 string - * - * @return number of bytes written. - */ -int avio_put_str16le(AVIOContext *s, const char *str); - -/** - * Convert an UTF-8 string to UTF-16BE and write it. - * @param s the AVIOContext - * @param str NULL-terminated UTF-8 string - * - * @return number of bytes written. - */ -int avio_put_str16be(AVIOContext *s, const char *str); - -/** - * Mark the written bytestream as a specific type. - * - * Zero-length ranges are omitted from the output. - * - * @param time the stream time the current bytestream pos corresponds to - * (in AV_TIME_BASE units), or AV_NOPTS_VALUE if unknown or not - * applicable - * @param type the kind of data written starting at the current pos - */ -void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type); - -/** - * ORing this as the "whence" parameter to a seek function causes it to - * return the filesize without seeking anywhere. Supporting this is optional. - * If it is not supported then the seek function will return <0. - */ -#define AVSEEK_SIZE 0x10000 - -/** - * Passing this flag as the "whence" parameter to a seek function causes it to - * seek by any means (like reopening and linear reading) or other normally unreasonable - * means that can be extremely slow. - * This may be ignored by the seek code. - */ -#define AVSEEK_FORCE 0x20000 - -/** - * fseek() equivalent for AVIOContext. - * @return new position or AVERROR. - */ -int64_t avio_seek(AVIOContext *s, int64_t offset, int whence); - -/** - * Skip given number of bytes forward - * @return new position or AVERROR. - */ -int64_t avio_skip(AVIOContext *s, int64_t offset); - -/** - * ftell() equivalent for AVIOContext. - * @return position or AVERROR. - */ -static av_always_inline int64_t avio_tell(AVIOContext *s) -{ - return avio_seek(s, 0, SEEK_CUR); -} - -/** - * Get the filesize. - * @return filesize or AVERROR - */ -int64_t avio_size(AVIOContext *s); - -/** - * Similar to feof() but also returns nonzero on read errors. - * @return non zero if and only if at end of file or a read error happened when reading. - */ -int avio_feof(AVIOContext *s); - -/** - * Writes a formatted string to the context. - * @return number of bytes written, < 0 on error. - */ -int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3); - -/** - * Write a NULL terminated array of strings to the context. - * Usually you don't need to use this function directly but its macro wrapper, - * avio_print. - */ -void avio_print_string_array(AVIOContext *s, const char *strings[]); - -/** - * Write strings (const char *) to the context. - * This is a convenience macro around avio_print_string_array and it - * automatically creates the string array from the variable argument list. - * For simple string concatenations this function is more performant than using - * avio_printf since it does not need a temporary buffer. - */ -#define avio_print(s, ...) \ - avio_print_string_array(s, (const char*[]){__VA_ARGS__, NULL}) - -/** - * Force flushing of buffered data. - * - * For write streams, force the buffered data to be immediately written to the output, - * without to wait to fill the internal buffer. - * - * For read streams, discard all currently buffered data, and advance the - * reported file position to that of the underlying stream. This does not - * read new data, and does not perform any seeks. - */ -void avio_flush(AVIOContext *s); - -/** - * Read size bytes from AVIOContext into buf. - * @return number of bytes read or AVERROR - */ -int avio_read(AVIOContext *s, unsigned char *buf, int size); - -/** - * Read size bytes from AVIOContext into buf. Unlike avio_read(), this is allowed - * to read fewer bytes than requested. The missing bytes can be read in the next - * call. This always tries to read at least 1 byte. - * Useful to reduce latency in certain cases. - * @return number of bytes read or AVERROR - */ -int avio_read_partial(AVIOContext *s, unsigned char *buf, int size); - -/** - * @name Functions for reading from AVIOContext - * @{ - * - * @note return 0 if EOF, so you cannot use it if EOF handling is - * necessary - */ -int avio_r8 (AVIOContext *s); -unsigned int avio_rl16(AVIOContext *s); -unsigned int avio_rl24(AVIOContext *s); -unsigned int avio_rl32(AVIOContext *s); -uint64_t avio_rl64(AVIOContext *s); -unsigned int avio_rb16(AVIOContext *s); -unsigned int avio_rb24(AVIOContext *s); -unsigned int avio_rb32(AVIOContext *s); -uint64_t avio_rb64(AVIOContext *s); -/** - * @} - */ - -/** - * Read a string from pb into buf. The reading will terminate when either - * a NULL character was encountered, maxlen bytes have been read, or nothing - * more can be read from pb. The result is guaranteed to be NULL-terminated, it - * will be truncated if buf is too small. - * Note that the string is not interpreted or validated in any way, it - * might get truncated in the middle of a sequence for multi-byte encodings. - * - * @return number of bytes read (is always <= maxlen). - * If reading ends on EOF or error, the return value will be one more than - * bytes actually read. - */ -int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen); - -/** - * Read a UTF-16 string from pb and convert it to UTF-8. - * The reading will terminate when either a null or invalid character was - * encountered or maxlen bytes have been read. - * @return number of bytes read (is always <= maxlen) - */ -int avio_get_str16le(AVIOContext *pb, int maxlen, char *buf, int buflen); -int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen); - - -/** - * @name URL open modes - * The flags argument to avio_open must be one of the following - * constants, optionally ORed with other flags. - * @{ - */ -#define AVIO_FLAG_READ 1 /**< read-only */ -#define AVIO_FLAG_WRITE 2 /**< write-only */ -#define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) /**< read-write pseudo flag */ -/** - * @} - */ - -/** - * Use non-blocking mode. - * If this flag is set, operations on the context will return - * AVERROR(EAGAIN) if they can not be performed immediately. - * If this flag is not set, operations on the context will never return - * AVERROR(EAGAIN). - * Note that this flag does not affect the opening/connecting of the - * context. Connecting a protocol will always block if necessary (e.g. on - * network protocols) but never hang (e.g. on busy devices). - * Warning: non-blocking protocols is work-in-progress; this flag may be - * silently ignored. - */ -#define AVIO_FLAG_NONBLOCK 8 - -/** - * Use direct mode. - * avio_read and avio_write should if possible be satisfied directly - * instead of going through a buffer, and avio_seek will always - * call the underlying seek function directly. - */ -#define AVIO_FLAG_DIRECT 0x8000 - -/** - * Create and initialize a AVIOContext for accessing the - * resource indicated by url. - * @note When the resource indicated by url has been opened in - * read+write mode, the AVIOContext can be used only for writing. - * - * @param s Used to return the pointer to the created AVIOContext. - * In case of failure the pointed to value is set to NULL. - * @param url resource to access - * @param flags flags which control how the resource indicated by url - * is to be opened - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code in case of failure - */ -int avio_open(AVIOContext **s, const char *url, int flags); - -/** - * Create and initialize a AVIOContext for accessing the - * resource indicated by url. - * @note When the resource indicated by url has been opened in - * read+write mode, the AVIOContext can be used only for writing. - * - * @param s Used to return the pointer to the created AVIOContext. - * In case of failure the pointed to value is set to NULL. - * @param url resource to access - * @param flags flags which control how the resource indicated by url - * is to be opened - * @param int_cb an interrupt callback to be used at the protocols level - * @param options A dictionary filled with protocol-private options. On return - * this parameter will be destroyed and replaced with a dict containing options - * that were not found. May be NULL. - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code in case of failure - */ -int avio_open2(AVIOContext **s, const char *url, int flags, - const AVIOInterruptCB *int_cb, AVDictionary **options); - -/** - * Close the resource accessed by the AVIOContext s and free it. - * This function can only be used if s was opened by avio_open(). - * - * The internal buffer is automatically flushed before closing the - * resource. - * - * @return 0 on success, an AVERROR < 0 on error. - * @see avio_closep - */ -int avio_close(AVIOContext *s); - -/** - * Close the resource accessed by the AVIOContext *s, free it - * and set the pointer pointing to it to NULL. - * This function can only be used if s was opened by avio_open(). - * - * The internal buffer is automatically flushed before closing the - * resource. - * - * @return 0 on success, an AVERROR < 0 on error. - * @see avio_close - */ -int avio_closep(AVIOContext **s); - - -/** - * Open a write only memory stream. - * - * @param s new IO context - * @return zero if no error. - */ -int avio_open_dyn_buf(AVIOContext **s); - -/** - * Return the written size and a pointer to the buffer. - * The AVIOContext stream is left intact. - * The buffer must NOT be freed. - * No padding is added to the buffer. - * - * @param s IO context - * @param pbuffer pointer to a byte buffer - * @return the length of the byte buffer - */ -int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer); - -/** - * Return the written size and a pointer to the buffer. The buffer - * must be freed with av_free(). - * Padding of AV_INPUT_BUFFER_PADDING_SIZE is added to the buffer. - * - * @param s IO context - * @param pbuffer pointer to a byte buffer - * @return the length of the byte buffer - */ -int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer); - -/** - * Iterate through names of available protocols. - * - * @param opaque A private pointer representing current protocol. - * It must be a pointer to NULL on first iteration and will - * be updated by successive calls to avio_enum_protocols. - * @param output If set to 1, iterate over output protocols, - * otherwise over input protocols. - * - * @return A static string containing the name of current protocol or NULL - */ -const char *avio_enum_protocols(void **opaque, int output); - -/** - * Get AVClass by names of available protocols. - * - * @return A AVClass of input protocol name or NULL - */ -const AVClass *avio_protocol_get_class(const char *name); - -/** - * Pause and resume playing - only meaningful if using a network streaming - * protocol (e.g. MMS). - * - * @param h IO context from which to call the read_pause function pointer - * @param pause 1 for pause, 0 for resume - */ -int avio_pause(AVIOContext *h, int pause); - -/** - * Seek to a given timestamp relative to some component stream. - * Only meaningful if using a network streaming protocol (e.g. MMS.). - * - * @param h IO context from which to call the seek function pointers - * @param stream_index The stream index that the timestamp is relative to. - * If stream_index is (-1) the timestamp should be in AV_TIME_BASE - * units from the beginning of the presentation. - * If a stream_index >= 0 is used and the protocol does not support - * seeking based on component streams, the call will fail. - * @param timestamp timestamp in AVStream.time_base units - * or if there is no stream specified then in AV_TIME_BASE units. - * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE - * and AVSEEK_FLAG_ANY. The protocol may silently ignore - * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will - * fail if used and not supported. - * @return >= 0 on success - * @see AVInputFormat::read_seek - */ -int64_t avio_seek_time(AVIOContext *h, int stream_index, - int64_t timestamp, int flags); - -/* Avoid a warning. The header can not be included because it breaks c++. */ -struct AVBPrint; - -/** - * Read contents of h into print buffer, up to max_size bytes, or up to EOF. - * - * @return 0 for success (max_size bytes read or EOF reached), negative error - * code otherwise - */ -int avio_read_to_bprint(AVIOContext *h, struct AVBPrint *pb, size_t max_size); - -/** - * Accept and allocate a client context on a server context. - * @param s the server context - * @param c the client context, must be unallocated - * @return >= 0 on success or a negative value corresponding - * to an AVERROR on failure - */ -int avio_accept(AVIOContext *s, AVIOContext **c); - -/** - * Perform one step of the protocol handshake to accept a new client. - * This function must be called on a client returned by avio_accept() before - * using it as a read/write context. - * It is separate from avio_accept() because it may block. - * A step of the handshake is defined by places where the application may - * decide to change the proceedings. - * For example, on a protocol with a request header and a reply header, each - * one can constitute a step because the application may use the parameters - * from the request to change parameters in the reply; or each individual - * chunk of the request can constitute a step. - * If the handshake is already finished, avio_handshake() does nothing and - * returns 0 immediately. - * - * @param c the client context to perform the handshake on - * @return 0 on a complete and successful handshake - * > 0 if the handshake progressed, but is not complete - * < 0 for an AVERROR code - */ -int avio_handshake(AVIOContext *c); -#endif /* AVFORMAT_AVIO_H */ diff --git a/prebuilts/arm/include/libavformat/version.h b/prebuilts/arm/include/libavformat/version.h deleted file mode 100644 index 46dc51a..0000000 --- a/prebuilts/arm/include/libavformat/version.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFORMAT_VERSION_H -#define AVFORMAT_VERSION_H - -/** - * @file - * @ingroup libavf - * Libavformat version macros - */ - -#include "libavutil/version.h" - -// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) -// Also please add any ticket numbers that you believe might be affected here -#define LIBAVFORMAT_VERSION_MAJOR 58 -#define LIBAVFORMAT_VERSION_MINOR 76 -#define LIBAVFORMAT_VERSION_MICRO 100 - -#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ - LIBAVFORMAT_VERSION_MINOR, \ - LIBAVFORMAT_VERSION_MICRO) -#define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_MAJOR, \ - LIBAVFORMAT_VERSION_MINOR, \ - LIBAVFORMAT_VERSION_MICRO) -#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT - -#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - * - */ -#ifndef FF_API_COMPUTE_PKT_FIELDS2 -#define FF_API_COMPUTE_PKT_FIELDS2 (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_OPEN_CALLBACKS -#define FF_API_OLD_OPEN_CALLBACKS (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_AVCTX -#define FF_API_LAVF_AVCTX (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_HTTP_USER_AGENT -#define FF_API_HTTP_USER_AGENT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_HLS_WRAP -#define FF_API_HLS_WRAP (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_HLS_USE_LOCALTIME -#define FF_API_HLS_USE_LOCALTIME (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_KEEPSIDE_FLAG -#define FF_API_LAVF_KEEPSIDE_FLAG (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_ROTATE_API -#define FF_API_OLD_ROTATE_API (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_FORMAT_GET_SET -#define FF_API_FORMAT_GET_SET (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_AVIO_EOF_0 -#define FF_API_OLD_AVIO_EOF_0 (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_FFSERVER -#define FF_API_LAVF_FFSERVER (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_FORMAT_FILENAME -#define FF_API_FORMAT_FILENAME (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_RTSP_OPTIONS -#define FF_API_OLD_RTSP_OPTIONS (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_NEXT -#define FF_API_NEXT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_DASH_MIN_SEG_DURATION -#define FF_API_DASH_MIN_SEG_DURATION (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_MP4A_LATM -#define FF_API_LAVF_MP4A_LATM (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVIOFORMAT -#define FF_API_AVIOFORMAT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_DEMUXER_OPEN -#define FF_API_DEMUXER_OPEN (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CHAPTER_ID_INT -#define FF_API_CHAPTER_ID_INT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_PRIV_OPT -#define FF_API_LAVF_PRIV_OPT (LIBAVFORMAT_VERSION_MAJOR < 60) -#endif - - -#ifndef FF_API_R_FRAME_RATE -#define FF_API_R_FRAME_RATE 1 -#endif -#endif /* AVFORMAT_VERSION_H */ diff --git a/prebuilts/arm/include/libavutil/adler32.h b/prebuilts/arm/include/libavutil/adler32.h deleted file mode 100644 index e7a8f83..0000000 --- a/prebuilts/arm/include/libavutil/adler32.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * copyright (c) 2006 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_adler32 - * Public header for Adler-32 hash function implementation. - */ - -#ifndef AVUTIL_ADLER32_H -#define AVUTIL_ADLER32_H - -#include -#include -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_adler32 Adler-32 - * @ingroup lavu_hash - * Adler-32 hash function implementation. - * - * @{ - */ - -#if FF_API_CRYPTO_SIZE_T -typedef unsigned long AVAdler; -#else -typedef uint32_t AVAdler; -#endif - -/** - * Calculate the Adler32 checksum of a buffer. - * - * Passing the return value to a subsequent av_adler32_update() call - * allows the checksum of multiple buffers to be calculated as though - * they were concatenated. - * - * @param adler initial checksum value - * @param buf pointer to input buffer - * @param len size of input buffer - * @return updated checksum - */ -AVAdler av_adler32_update(AVAdler adler, const uint8_t *buf, -#if FF_API_CRYPTO_SIZE_T - unsigned int len) av_pure; -#else - size_t len) av_pure; -#endif - -/** - * @} - */ - -#endif /* AVUTIL_ADLER32_H */ diff --git a/prebuilts/arm/include/libavutil/aes.h b/prebuilts/arm/include/libavutil/aes.h deleted file mode 100644 index 09efbda..0000000 --- a/prebuilts/arm/include/libavutil/aes.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * copyright (c) 2007 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AES_H -#define AVUTIL_AES_H - -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_aes AES - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_aes_size; - -struct AVAES; - -/** - * Allocate an AVAES context. - */ -struct AVAES *av_aes_alloc(void); - -/** - * Initialize an AVAES context. - * @param key_bits 128, 192 or 256 - * @param decrypt 0 for encryption, 1 for decryption - */ -int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * @param count number of 16 byte blocks - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_aes_crypt(struct AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_AES_H */ diff --git a/prebuilts/arm/include/libavutil/aes_ctr.h b/prebuilts/arm/include/libavutil/aes_ctr.h deleted file mode 100644 index e4aae12..0000000 --- a/prebuilts/arm/include/libavutil/aes_ctr.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * AES-CTR cipher - * Copyright (c) 2015 Eran Kornblau - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AES_CTR_H -#define AVUTIL_AES_CTR_H - -#include - -#include "attributes.h" -#include "version.h" - -#define AES_CTR_KEY_SIZE (16) -#define AES_CTR_IV_SIZE (8) - -struct AVAESCTR; - -/** - * Allocate an AVAESCTR context. - */ -struct AVAESCTR *av_aes_ctr_alloc(void); - -/** - * Initialize an AVAESCTR context. - * @param key encryption key, must have a length of AES_CTR_KEY_SIZE - */ -int av_aes_ctr_init(struct AVAESCTR *a, const uint8_t *key); - -/** - * Release an AVAESCTR context. - */ -void av_aes_ctr_free(struct AVAESCTR *a); - -/** - * Process a buffer using a previously initialized context. - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param size the size of src and dst - */ -void av_aes_ctr_crypt(struct AVAESCTR *a, uint8_t *dst, const uint8_t *src, int size); - -/** - * Get the current iv - */ -const uint8_t* av_aes_ctr_get_iv(struct AVAESCTR *a); - -/** - * Generate a random iv - */ -void av_aes_ctr_set_random_iv(struct AVAESCTR *a); - -/** - * Forcefully change the 8-byte iv - */ -void av_aes_ctr_set_iv(struct AVAESCTR *a, const uint8_t* iv); - -/** - * Forcefully change the "full" 16-byte iv, including the counter - */ -void av_aes_ctr_set_full_iv(struct AVAESCTR *a, const uint8_t* iv); - -/** - * Increment the top 64 bit of the iv (performed after each frame) - */ -void av_aes_ctr_increment_iv(struct AVAESCTR *a); - -/** - * @} - */ - -#endif /* AVUTIL_AES_CTR_H */ diff --git a/prebuilts/arm/include/libavutil/attributes.h b/prebuilts/arm/include/libavutil/attributes.h deleted file mode 100644 index 5cb9fe3..0000000 --- a/prebuilts/arm/include/libavutil/attributes.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Macro definitions for various function/variable attributes - */ - -#ifndef AVUTIL_ATTRIBUTES_H -#define AVUTIL_ATTRIBUTES_H - -#ifdef __GNUC__ -# define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y)) -# define AV_GCC_VERSION_AT_MOST(x,y) (__GNUC__ < (x) || __GNUC__ == (x) && __GNUC_MINOR__ <= (y)) -#else -# define AV_GCC_VERSION_AT_LEAST(x,y) 0 -# define AV_GCC_VERSION_AT_MOST(x,y) 0 -#endif - -#ifdef __has_builtin -# define AV_HAS_BUILTIN(x) __has_builtin(x) -#else -# define AV_HAS_BUILTIN(x) 0 -#endif - -#ifndef av_always_inline -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_always_inline __attribute__((always_inline)) inline -#elif defined(_MSC_VER) -# define av_always_inline __forceinline -#else -# define av_always_inline inline -#endif -#endif - -#ifndef av_extern_inline -#if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__) -# define av_extern_inline extern inline -#else -# define av_extern_inline inline -#endif -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,4) -# define av_warn_unused_result __attribute__((warn_unused_result)) -#else -# define av_warn_unused_result -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_noinline __attribute__((noinline)) -#elif defined(_MSC_VER) -# define av_noinline __declspec(noinline) -#else -# define av_noinline -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) -# define av_pure __attribute__((pure)) -#else -# define av_pure -#endif - -#if AV_GCC_VERSION_AT_LEAST(2,6) || defined(__clang__) -# define av_const __attribute__((const)) -#else -# define av_const -#endif - -#if AV_GCC_VERSION_AT_LEAST(4,3) || defined(__clang__) -# define av_cold __attribute__((cold)) -#else -# define av_cold -#endif - -#if AV_GCC_VERSION_AT_LEAST(4,1) && !defined(__llvm__) -# define av_flatten __attribute__((flatten)) -#else -# define av_flatten -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define attribute_deprecated __attribute__((deprecated)) -#elif defined(_MSC_VER) -# define attribute_deprecated __declspec(deprecated) -#else -# define attribute_deprecated -#endif - -/** - * Disable warnings about deprecated features - * This is useful for sections of code kept for backward compatibility and - * scheduled for removal. - */ -#ifndef AV_NOWARN_DEPRECATED -#if AV_GCC_VERSION_AT_LEAST(4,6) -# define AV_NOWARN_DEPRECATED(code) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ - code \ - _Pragma("GCC diagnostic pop") -#elif defined(_MSC_VER) -# define AV_NOWARN_DEPRECATED(code) \ - __pragma(warning(push)) \ - __pragma(warning(disable : 4996)) \ - code; \ - __pragma(warning(pop)) -#else -# define AV_NOWARN_DEPRECATED(code) code -#endif -#endif - -#if defined(__GNUC__) || defined(__clang__) -# define av_unused __attribute__((unused)) -#else -# define av_unused -#endif - -/** - * Mark a variable as used and prevent the compiler from optimizing it - * away. This is useful for variables accessed only from inline - * assembler without the compiler being aware. - */ -#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) -# define av_used __attribute__((used)) -#else -# define av_used -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,3) || defined(__clang__) -# define av_alias __attribute__((may_alias)) -#else -# define av_alias -#endif - -#if (defined(__GNUC__) || defined(__clang__)) && !defined(__INTEL_COMPILER) -# define av_uninit(x) x=x -#else -# define av_uninit(x) x -#endif - -#if defined(__GNUC__) || defined(__clang__) -# define av_builtin_constant_p __builtin_constant_p -# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos))) -#else -# define av_builtin_constant_p(x) 0 -# define av_printf_format(fmtpos, attrpos) -#endif - -#if AV_GCC_VERSION_AT_LEAST(2,5) || defined(__clang__) -# define av_noreturn __attribute__((noreturn)) -#else -# define av_noreturn -#endif - -#endif /* AVUTIL_ATTRIBUTES_H */ diff --git a/prebuilts/arm/include/libavutil/audio_fifo.h b/prebuilts/arm/include/libavutil/audio_fifo.h deleted file mode 100644 index d8a9194..0000000 --- a/prebuilts/arm/include/libavutil/audio_fifo.h +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Audio FIFO - * Copyright (c) 2012 Justin Ruggles - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Audio FIFO Buffer - */ - -#ifndef AVUTIL_AUDIO_FIFO_H -#define AVUTIL_AUDIO_FIFO_H - -#include "avutil.h" -#include "fifo.h" -#include "samplefmt.h" - -/** - * @addtogroup lavu_audio - * @{ - * - * @defgroup lavu_audiofifo Audio FIFO Buffer - * @{ - */ - -/** - * Context for an Audio FIFO Buffer. - * - * - Operates at the sample level rather than the byte level. - * - Supports multiple channels with either planar or packed sample format. - * - Automatic reallocation when writing to a full buffer. - */ -typedef struct AVAudioFifo AVAudioFifo; - -/** - * Free an AVAudioFifo. - * - * @param af AVAudioFifo to free - */ -void av_audio_fifo_free(AVAudioFifo *af); - -/** - * Allocate an AVAudioFifo. - * - * @param sample_fmt sample format - * @param channels number of channels - * @param nb_samples initial allocation size, in samples - * @return newly allocated AVAudioFifo, or NULL on error - */ -AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels, - int nb_samples); - -/** - * Reallocate an AVAudioFifo. - * - * @param af AVAudioFifo to reallocate - * @param nb_samples new allocation size, in samples - * @return 0 if OK, or negative AVERROR code on failure - */ -av_warn_unused_result -int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples); - -/** - * Write data to an AVAudioFifo. - * - * The AVAudioFifo will be reallocated automatically if the available space - * is less than nb_samples. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to write to - * @param data audio data plane pointers - * @param nb_samples number of samples to write - * @return number of samples actually written, or negative AVERROR - * code on failure. If successful, the number of samples - * actually written will always be nb_samples. - */ -int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Peek data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to peek - * @return number of samples actually peek, or negative AVERROR code - * on failure. The number of samples actually peek will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Peek data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to peek - * @param offset offset from current read position - * @return number of samples actually peek, or negative AVERROR code - * on failure. The number of samples actually peek will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offset); - -/** - * Read data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to read - * @return number of samples actually read, or negative AVERROR code - * on failure. The number of samples actually read will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Drain data from an AVAudioFifo. - * - * Removes the data without reading it. - * - * @param af AVAudioFifo to drain - * @param nb_samples number of samples to drain - * @return 0 if OK, or negative AVERROR code on failure - */ -int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples); - -/** - * Reset the AVAudioFifo buffer. - * - * This empties all data in the buffer. - * - * @param af AVAudioFifo to reset - */ -void av_audio_fifo_reset(AVAudioFifo *af); - -/** - * Get the current number of samples in the AVAudioFifo available for reading. - * - * @param af the AVAudioFifo to query - * @return number of samples available for reading - */ -int av_audio_fifo_size(AVAudioFifo *af); - -/** - * Get the current number of samples in the AVAudioFifo available for writing. - * - * @param af the AVAudioFifo to query - * @return number of samples available for writing - */ -int av_audio_fifo_space(AVAudioFifo *af); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_AUDIO_FIFO_H */ diff --git a/prebuilts/arm/include/libavutil/avassert.h b/prebuilts/arm/include/libavutil/avassert.h deleted file mode 100644 index 9abeade..0000000 --- a/prebuilts/arm/include/libavutil/avassert.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * copyright (c) 2010 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * simple assert() macros that are a bit more flexible than ISO C assert(). - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_AVASSERT_H -#define AVUTIL_AVASSERT_H - -#include -#include "avutil.h" -#include "log.h" - -/** - * assert() equivalent, that is always enabled. - */ -#define av_assert0(cond) do { \ - if (!(cond)) { \ - av_log(NULL, AV_LOG_PANIC, "Assertion %s failed at %s:%d\n", \ - AV_STRINGIFY(cond), __FILE__, __LINE__); \ - abort(); \ - } \ -} while (0) - - -/** - * assert() equivalent, that does not lie in speed critical code. - * These asserts() thus can be enabled without fearing speed loss. - */ -#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0 -#define av_assert1(cond) av_assert0(cond) -#else -#define av_assert1(cond) ((void)0) -#endif - - -/** - * assert() equivalent, that does lie in speed critical code. - */ -#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 -#define av_assert2(cond) av_assert0(cond) -#define av_assert2_fpu() av_assert0_fpu() -#else -#define av_assert2(cond) ((void)0) -#define av_assert2_fpu() ((void)0) -#endif - -/** - * Assert that floating point operations can be executed. - * - * This will av_assert0() that the cpu is not in MMX state on X86 - */ -void av_assert0_fpu(void); - -#endif /* AVUTIL_AVASSERT_H */ diff --git a/prebuilts/arm/include/libavutil/avconfig.h b/prebuilts/arm/include/libavutil/avconfig.h deleted file mode 100644 index c289fbb..0000000 --- a/prebuilts/arm/include/libavutil/avconfig.h +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated by ffmpeg configure */ -#ifndef AVUTIL_AVCONFIG_H -#define AVUTIL_AVCONFIG_H -#define AV_HAVE_BIGENDIAN 0 -#define AV_HAVE_FAST_UNALIGNED 1 -#endif /* AVUTIL_AVCONFIG_H */ diff --git a/prebuilts/arm/include/libavutil/avstring.h b/prebuilts/arm/include/libavutil/avstring.h deleted file mode 100644 index fae446c..0000000 --- a/prebuilts/arm/include/libavutil/avstring.h +++ /dev/null @@ -1,437 +0,0 @@ -/* - * Copyright (c) 2007 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AVSTRING_H -#define AVUTIL_AVSTRING_H - -#include -#include -#include "attributes.h" -#include "version.h" - -/** - * @addtogroup lavu_string - * @{ - */ - -/** - * Return non-zero if pfx is a prefix of str. If it is, *ptr is set to - * the address of the first character in str after the prefix. - * - * @param str input string - * @param pfx prefix to test - * @param ptr updated if the prefix is matched inside str - * @return non-zero if the prefix matches, zero otherwise - */ -int av_strstart(const char *str, const char *pfx, const char **ptr); - -/** - * Return non-zero if pfx is a prefix of str independent of case. If - * it is, *ptr is set to the address of the first character in str - * after the prefix. - * - * @param str input string - * @param pfx prefix to test - * @param ptr updated if the prefix is matched inside str - * @return non-zero if the prefix matches, zero otherwise - */ -int av_stristart(const char *str, const char *pfx, const char **ptr); - -/** - * Locate the first case-independent occurrence in the string haystack - * of the string needle. A zero-length string needle is considered to - * match at the start of haystack. - * - * This function is a case-insensitive version of the standard strstr(). - * - * @param haystack string to search in - * @param needle string to search for - * @return pointer to the located match within haystack - * or a null pointer if no match - */ -char *av_stristr(const char *haystack, const char *needle); - -/** - * Locate the first occurrence of the string needle in the string haystack - * where not more than hay_length characters are searched. A zero-length - * string needle is considered to match at the start of haystack. - * - * This function is a length-limited version of the standard strstr(). - * - * @param haystack string to search in - * @param needle string to search for - * @param hay_length length of string to search in - * @return pointer to the located match within haystack - * or a null pointer if no match - */ -char *av_strnstr(const char *haystack, const char *needle, size_t hay_length); - -/** - * Copy the string src to dst, but no more than size - 1 bytes, and - * null-terminate dst. - * - * This function is the same as BSD strlcpy(). - * - * @param dst destination buffer - * @param src source string - * @param size size of destination buffer - * @return the length of src - * - * @warning since the return value is the length of src, src absolutely - * _must_ be a properly 0-terminated string, otherwise this will read beyond - * the end of the buffer and possibly crash. - */ -size_t av_strlcpy(char *dst, const char *src, size_t size); - -/** - * Append the string src to the string dst, but to a total length of - * no more than size - 1 bytes, and null-terminate dst. - * - * This function is similar to BSD strlcat(), but differs when - * size <= strlen(dst). - * - * @param dst destination buffer - * @param src source string - * @param size size of destination buffer - * @return the total length of src and dst - * - * @warning since the return value use the length of src and dst, these - * absolutely _must_ be a properly 0-terminated strings, otherwise this - * will read beyond the end of the buffer and possibly crash. - */ -size_t av_strlcat(char *dst, const char *src, size_t size); - -/** - * Append output to a string, according to a format. Never write out of - * the destination buffer, and always put a terminating 0 within - * the buffer. - * @param dst destination buffer (string to which the output is - * appended) - * @param size total size of the destination buffer - * @param fmt printf-compatible format string, specifying how the - * following parameters are used - * @return the length of the string that would have been generated - * if enough space had been available - */ -size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4); - -/** - * Get the count of continuous non zero chars starting from the beginning. - * - * @param len maximum number of characters to check in the string, that - * is the maximum value which is returned by the function - */ -static inline size_t av_strnlen(const char *s, size_t len) -{ - size_t i; - for (i = 0; i < len && s[i]; i++) - ; - return i; -} - -/** - * Print arguments following specified format into a large enough auto - * allocated buffer. It is similar to GNU asprintf(). - * @param fmt printf-compatible format string, specifying how the - * following parameters are used. - * @return the allocated string - * @note You have to free the string yourself with av_free(). - */ -char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2); - -#if FF_API_D2STR -/** - * Convert a number to an av_malloced string. - * @deprecated use av_asprintf() with "%f" or a more specific format - */ -attribute_deprecated -char *av_d2str(double d); -#endif - -/** - * Unescape the given string until a non escaped terminating char, - * and return the token corresponding to the unescaped string. - * - * The normal \ and ' escaping is supported. Leading and trailing - * whitespaces are removed, unless they are escaped with '\' or are - * enclosed between ''. - * - * @param buf the buffer to parse, buf will be updated to point to the - * terminating char - * @param term a 0-terminated list of terminating chars - * @return the malloced unescaped string, which must be av_freed by - * the user, NULL in case of allocation failure - */ -char *av_get_token(const char **buf, const char *term); - -/** - * Split the string into several tokens which can be accessed by - * successive calls to av_strtok(). - * - * A token is defined as a sequence of characters not belonging to the - * set specified in delim. - * - * On the first call to av_strtok(), s should point to the string to - * parse, and the value of saveptr is ignored. In subsequent calls, s - * should be NULL, and saveptr should be unchanged since the previous - * call. - * - * This function is similar to strtok_r() defined in POSIX.1. - * - * @param s the string to parse, may be NULL - * @param delim 0-terminated list of token delimiters, must be non-NULL - * @param saveptr user-provided pointer which points to stored - * information necessary for av_strtok() to continue scanning the same - * string. saveptr is updated to point to the next character after the - * first delimiter found, or to NULL if the string was terminated - * @return the found token, or NULL when no token is found - */ -char *av_strtok(char *s, const char *delim, char **saveptr); - -/** - * Locale-independent conversion of ASCII isdigit. - */ -static inline av_const int av_isdigit(int c) -{ - return c >= '0' && c <= '9'; -} - -/** - * Locale-independent conversion of ASCII isgraph. - */ -static inline av_const int av_isgraph(int c) -{ - return c > 32 && c < 127; -} - -/** - * Locale-independent conversion of ASCII isspace. - */ -static inline av_const int av_isspace(int c) -{ - return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || - c == '\v'; -} - -/** - * Locale-independent conversion of ASCII characters to uppercase. - */ -static inline av_const int av_toupper(int c) -{ - if (c >= 'a' && c <= 'z') - c ^= 0x20; - return c; -} - -/** - * Locale-independent conversion of ASCII characters to lowercase. - */ -static inline av_const int av_tolower(int c) -{ - if (c >= 'A' && c <= 'Z') - c ^= 0x20; - return c; -} - -/** - * Locale-independent conversion of ASCII isxdigit. - */ -static inline av_const int av_isxdigit(int c) -{ - c = av_tolower(c); - return av_isdigit(c) || (c >= 'a' && c <= 'f'); -} - -/** - * Locale-independent case-insensitive compare. - * @note This means only ASCII-range characters are case-insensitive - */ -int av_strcasecmp(const char *a, const char *b); - -/** - * Locale-independent case-insensitive compare. - * @note This means only ASCII-range characters are case-insensitive - */ -int av_strncasecmp(const char *a, const char *b, size_t n); - -/** - * Locale-independent strings replace. - * @note This means only ASCII-range characters are replace - */ -char *av_strireplace(const char *str, const char *from, const char *to); - -/** - * Thread safe basename. - * @param path the string to parse, on DOS both \ and / are considered separators. - * @return pointer to the basename substring. - * If path does not contain a slash, the function returns a copy of path. - * If path is a NULL pointer or points to an empty string, a pointer - * to a string "." is returned. - */ -const char *av_basename(const char *path); - -/** - * Thread safe dirname. - * @param path the string to parse, on DOS both \ and / are considered separators. - * @return A pointer to a string that's the parent directory of path. - * If path is a NULL pointer or points to an empty string, a pointer - * to a string "." is returned. - * @note the function may modify the contents of the path, so copies should be passed. - */ -const char *av_dirname(char *path); - -/** - * Match instances of a name in a comma-separated list of names. - * List entries are checked from the start to the end of the names list, - * the first match ends further processing. If an entry prefixed with '-' - * matches, then 0 is returned. The "ALL" list entry is considered to - * match all names. - * - * @param name Name to look for. - * @param names List of names. - * @return 1 on match, 0 otherwise. - */ -int av_match_name(const char *name, const char *names); - -/** - * Append path component to the existing path. - * Path separator '/' is placed between when needed. - * Resulting string have to be freed with av_free(). - * @param path base path - * @param component component to be appended - * @return new path or NULL on error. - */ -char *av_append_path_component(const char *path, const char *component); - -enum AVEscapeMode { - AV_ESCAPE_MODE_AUTO, ///< Use auto-selected escaping mode. - AV_ESCAPE_MODE_BACKSLASH, ///< Use backslash escaping. - AV_ESCAPE_MODE_QUOTE, ///< Use single-quote escaping. - AV_ESCAPE_MODE_XML, ///< Use XML non-markup character data escaping. -}; - -/** - * Consider spaces special and escape them even in the middle of the - * string. - * - * This is equivalent to adding the whitespace characters to the special - * characters lists, except it is guaranteed to use the exact same list - * of whitespace characters as the rest of libavutil. - */ -#define AV_ESCAPE_FLAG_WHITESPACE (1 << 0) - -/** - * Escape only specified special characters. - * Without this flag, escape also any characters that may be considered - * special by av_get_token(), such as the single quote. - */ -#define AV_ESCAPE_FLAG_STRICT (1 << 1) - -/** - * Within AV_ESCAPE_MODE_XML, additionally escape single quotes for single - * quoted attributes. - */ -#define AV_ESCAPE_FLAG_XML_SINGLE_QUOTES (1 << 2) - -/** - * Within AV_ESCAPE_MODE_XML, additionally escape double quotes for double - * quoted attributes. - */ -#define AV_ESCAPE_FLAG_XML_DOUBLE_QUOTES (1 << 3) - - -/** - * Escape string in src, and put the escaped string in an allocated - * string in *dst, which must be freed with av_free(). - * - * @param dst pointer where an allocated string is put - * @param src string to escape, must be non-NULL - * @param special_chars string containing the special characters which - * need to be escaped, can be NULL - * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. - * Any unknown value for mode will be considered equivalent to - * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without - * notice. - * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_ macros - * @return the length of the allocated string, or a negative error code in case of error - * @see av_bprint_escape() - */ -av_warn_unused_result -int av_escape(char **dst, const char *src, const char *special_chars, - enum AVEscapeMode mode, int flags); - -#define AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES 1 ///< accept codepoints over 0x10FFFF -#define AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS 2 ///< accept non-characters - 0xFFFE and 0xFFFF -#define AV_UTF8_FLAG_ACCEPT_SURROGATES 4 ///< accept UTF-16 surrogates codes -#define AV_UTF8_FLAG_EXCLUDE_XML_INVALID_CONTROL_CODES 8 ///< exclude control codes not accepted by XML - -#define AV_UTF8_FLAG_ACCEPT_ALL \ - AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES|AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS|AV_UTF8_FLAG_ACCEPT_SURROGATES - -/** - * Read and decode a single UTF-8 code point (character) from the - * buffer in *buf, and update *buf to point to the next byte to - * decode. - * - * In case of an invalid byte sequence, the pointer will be updated to - * the next byte after the invalid sequence and the function will - * return an error code. - * - * Depending on the specified flags, the function will also fail in - * case the decoded code point does not belong to a valid range. - * - * @note For speed-relevant code a carefully implemented use of - * GET_UTF8() may be preferred. - * - * @param codep pointer used to return the parsed code in case of success. - * The value in *codep is set even in case the range check fails. - * @param bufp pointer to the address the first byte of the sequence - * to decode, updated by the function to point to the - * byte next after the decoded sequence - * @param buf_end pointer to the end of the buffer, points to the next - * byte past the last in the buffer. This is used to - * avoid buffer overreads (in case of an unfinished - * UTF-8 sequence towards the end of the buffer). - * @param flags a collection of AV_UTF8_FLAG_* flags - * @return >= 0 in case a sequence was successfully read, a negative - * value in case of invalid sequence - */ -av_warn_unused_result -int av_utf8_decode(int32_t *codep, const uint8_t **bufp, const uint8_t *buf_end, - unsigned int flags); - -/** - * Check if a name is in a list. - * @returns 0 if not found, or the 1 based index where it has been found in the - * list. - */ -int av_match_list(const char *name, const char *list, char separator); - -/** - * See libc sscanf manual for more information. - * Locale-independent sscanf implementation. - */ -int av_sscanf(const char *string, const char *format, ...); - -/** - * @} - */ - -#endif /* AVUTIL_AVSTRING_H */ diff --git a/prebuilts/arm/include/libavutil/avutil.h b/prebuilts/arm/include/libavutil/avutil.h deleted file mode 100644 index 4d63315..0000000 --- a/prebuilts/arm/include/libavutil/avutil.h +++ /dev/null @@ -1,365 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AVUTIL_H -#define AVUTIL_AVUTIL_H - -/** - * @file - * @ingroup lavu - * Convenience header that includes @ref lavu "libavutil"'s core. - */ - -/** - * @mainpage - * - * @section ffmpeg_intro Introduction - * - * This document describes the usage of the different libraries - * provided by FFmpeg. - * - * @li @ref libavc "libavcodec" encoding/decoding library - * @li @ref lavfi "libavfilter" graph-based frame editing library - * @li @ref libavf "libavformat" I/O and muxing/demuxing library - * @li @ref lavd "libavdevice" special devices muxing/demuxing library - * @li @ref lavu "libavutil" common utility library - * @li @ref lswr "libswresample" audio resampling, format conversion and mixing - * @li @ref lpp "libpostproc" post processing library - * @li @ref libsws "libswscale" color conversion and scaling library - * - * @section ffmpeg_versioning Versioning and compatibility - * - * Each of the FFmpeg libraries contains a version.h header, which defines a - * major, minor and micro version number with the - * LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO} macros. The major version - * number is incremented with backward incompatible changes - e.g. removing - * parts of the public API, reordering public struct members, etc. The minor - * version number is incremented for backward compatible API changes or major - * new features - e.g. adding a new public function or a new decoder. The micro - * version number is incremented for smaller changes that a calling program - * might still want to check for - e.g. changing behavior in a previously - * unspecified situation. - * - * FFmpeg guarantees backward API and ABI compatibility for each library as long - * as its major version number is unchanged. This means that no public symbols - * will be removed or renamed. Types and names of the public struct members and - * values of public macros and enums will remain the same (unless they were - * explicitly declared as not part of the public API). Documented behavior will - * not change. - * - * In other words, any correct program that works with a given FFmpeg snapshot - * should work just as well without any changes with any later snapshot with the - * same major versions. This applies to both rebuilding the program against new - * FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program - * links against. - * - * However, new public symbols may be added and new members may be appended to - * public structs whose size is not part of public ABI (most public structs in - * FFmpeg). New macros and enum values may be added. Behavior in undocumented - * situations may change slightly (and be documented). All those are accompanied - * by an entry in doc/APIchanges and incrementing either the minor or micro - * version number. - */ - -/** - * @defgroup lavu libavutil - * Common code shared across all FFmpeg libraries. - * - * @note - * libavutil is designed to be modular. In most cases, in order to use the - * functions provided by one component of libavutil you must explicitly include - * the specific header containing that feature. If you are only using - * media-related components, you could simply include libavutil/avutil.h, which - * brings in most of the "core" components. - * - * @{ - * - * @defgroup lavu_crypto Crypto and Hashing - * - * @{ - * @} - * - * @defgroup lavu_math Mathematics - * @{ - * - * @} - * - * @defgroup lavu_string String Manipulation - * - * @{ - * - * @} - * - * @defgroup lavu_mem Memory Management - * - * @{ - * - * @} - * - * @defgroup lavu_data Data Structures - * @{ - * - * @} - * - * @defgroup lavu_video Video related - * - * @{ - * - * @} - * - * @defgroup lavu_audio Audio related - * - * @{ - * - * @} - * - * @defgroup lavu_error Error Codes - * - * @{ - * - * @} - * - * @defgroup lavu_log Logging Facility - * - * @{ - * - * @} - * - * @defgroup lavu_misc Other - * - * @{ - * - * @defgroup preproc_misc Preprocessor String Macros - * - * @{ - * - * @} - * - * @defgroup version_utils Library Version Macros - * - * @{ - * - * @} - */ - - -/** - * @addtogroup lavu_ver - * @{ - */ - -/** - * Return the LIBAVUTIL_VERSION_INT constant. - */ -unsigned avutil_version(void); - -/** - * Return an informative version string. This usually is the actual release - * version number or a git commit description. This string has no fixed format - * and can change any time. It should never be parsed by code. - */ -const char *av_version_info(void); - -/** - * Return the libavutil build-time configuration. - */ -const char *avutil_configuration(void); - -/** - * Return the libavutil license. - */ -const char *avutil_license(void); - -/** - * @} - */ - -/** - * @addtogroup lavu_media Media Type - * @brief Media Type - */ - -enum AVMediaType { - AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA - AVMEDIA_TYPE_VIDEO, - AVMEDIA_TYPE_AUDIO, - AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous - AVMEDIA_TYPE_SUBTITLE, - AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse - AVMEDIA_TYPE_NB -}; - -/** - * Return a string describing the media_type enum, NULL if media_type - * is unknown. - */ -const char *av_get_media_type_string(enum AVMediaType media_type); - -/** - * @defgroup lavu_const Constants - * @{ - * - * @defgroup lavu_enc Encoding specific - * - * @note those definition should move to avcodec - * @{ - */ - -#define FF_LAMBDA_SHIFT 7 -#define FF_LAMBDA_SCALE (1< - -/** - * @defgroup lavu_base64 Base64 - * @ingroup lavu_crypto - * @{ - */ - -/** - * Decode a base64-encoded string. - * - * @param out buffer for decoded data - * @param in null-terminated input string - * @param out_size size in bytes of the out buffer, must be at - * least 3/4 of the length of in, that is AV_BASE64_DECODE_SIZE(strlen(in)) - * @return number of bytes written, or a negative value in case of - * invalid input - */ -int av_base64_decode(uint8_t *out, const char *in, int out_size); - -/** - * Calculate the output size in bytes needed to decode a base64 string - * with length x to a data buffer. - */ -#define AV_BASE64_DECODE_SIZE(x) ((x) * 3LL / 4) - -/** - * Encode data to base64 and null-terminate. - * - * @param out buffer for encoded data - * @param out_size size in bytes of the out buffer (including the - * null terminator), must be at least AV_BASE64_SIZE(in_size) - * @param in input buffer containing the data to encode - * @param in_size size in bytes of the in buffer - * @return out or NULL in case of error - */ -char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size); - -/** - * Calculate the output size needed to base64-encode x bytes to a - * null-terminated string. - */ -#define AV_BASE64_SIZE(x) (((x)+2) / 3 * 4 + 1) - - /** - * @} - */ - -#endif /* AVUTIL_BASE64_H */ diff --git a/prebuilts/arm/include/libavutil/blowfish.h b/prebuilts/arm/include/libavutil/blowfish.h deleted file mode 100644 index 9e289a4..0000000 --- a/prebuilts/arm/include/libavutil/blowfish.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Blowfish algorithm - * Copyright (c) 2012 Samuel Pitoiset - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_BLOWFISH_H -#define AVUTIL_BLOWFISH_H - -#include - -/** - * @defgroup lavu_blowfish Blowfish - * @ingroup lavu_crypto - * @{ - */ - -#define AV_BF_ROUNDS 16 - -typedef struct AVBlowfish { - uint32_t p[AV_BF_ROUNDS + 2]; - uint32_t s[4][256]; -} AVBlowfish; - -/** - * Allocate an AVBlowfish context. - */ -AVBlowfish *av_blowfish_alloc(void); - -/** - * Initialize an AVBlowfish context. - * - * @param ctx an AVBlowfish context - * @param key a key - * @param key_len length of the key - */ -void av_blowfish_init(struct AVBlowfish *ctx, const uint8_t *key, int key_len); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVBlowfish context - * @param xl left four bytes halves of input to be encrypted - * @param xr right four bytes halves of input to be encrypted - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_blowfish_crypt_ecb(struct AVBlowfish *ctx, uint32_t *xl, uint32_t *xr, - int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVBlowfish context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_blowfish_crypt(struct AVBlowfish *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_BLOWFISH_H */ diff --git a/prebuilts/arm/include/libavutil/bprint.h b/prebuilts/arm/include/libavutil/bprint.h deleted file mode 100644 index c09b1ac..0000000 --- a/prebuilts/arm/include/libavutil/bprint.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (c) 2012 Nicolas George - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_BPRINT_H -#define AVUTIL_BPRINT_H - -#include - -#include "attributes.h" -#include "avstring.h" - -/** - * Define a structure with extra padding to a fixed size - * This helps ensuring binary compatibility with future versions. - */ - -#define FF_PAD_STRUCTURE(name, size, ...) \ -struct ff_pad_helper_##name { __VA_ARGS__ }; \ -typedef struct name { \ - __VA_ARGS__ \ - char reserved_padding[size - sizeof(struct ff_pad_helper_##name)]; \ -} name; - -/** - * Buffer to print data progressively - * - * The string buffer grows as necessary and is always 0-terminated. - * The content of the string is never accessed, and thus is - * encoding-agnostic and can even hold binary data. - * - * Small buffers are kept in the structure itself, and thus require no - * memory allocation at all (unless the contents of the buffer is needed - * after the structure goes out of scope). This is almost as lightweight as - * declaring a local "char buf[512]". - * - * The length of the string can go beyond the allocated size: the buffer is - * then truncated, but the functions still keep account of the actual total - * length. - * - * In other words, buf->len can be greater than buf->size and records the - * total length of what would have been to the buffer if there had been - * enough memory. - * - * Append operations do not need to be tested for failure: if a memory - * allocation fails, data stop being appended to the buffer, but the length - * is still updated. This situation can be tested with - * av_bprint_is_complete(). - * - * The size_max field determines several possible behaviours: - * - * size_max = -1 (= UINT_MAX) or any large value will let the buffer be - * reallocated as necessary, with an amortized linear cost. - * - * size_max = 0 prevents writing anything to the buffer: only the total - * length is computed. The write operations can then possibly be repeated in - * a buffer with exactly the necessary size - * (using size_init = size_max = len + 1). - * - * size_max = 1 is automatically replaced by the exact size available in the - * structure itself, thus ensuring no dynamic memory allocation. The - * internal buffer is large enough to hold a reasonable paragraph of text, - * such as the current paragraph. - */ - -FF_PAD_STRUCTURE(AVBPrint, 1024, - char *str; /**< string so far */ - unsigned len; /**< length so far */ - unsigned size; /**< allocated memory */ - unsigned size_max; /**< maximum allocated memory */ - char reserved_internal_buffer[1]; -) - -/** - * Convenience macros for special values for av_bprint_init() size_max - * parameter. - */ -#define AV_BPRINT_SIZE_UNLIMITED ((unsigned)-1) -#define AV_BPRINT_SIZE_AUTOMATIC 1 -#define AV_BPRINT_SIZE_COUNT_ONLY 0 - -/** - * Init a print buffer. - * - * @param buf buffer to init - * @param size_init initial size (including the final 0) - * @param size_max maximum size; - * 0 means do not write anything, just count the length; - * 1 is replaced by the maximum value for automatic storage; - * any large value means that the internal buffer will be - * reallocated as needed up to that limit; -1 is converted to - * UINT_MAX, the largest limit possible. - * Check also AV_BPRINT_SIZE_* macros. - */ -void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max); - -/** - * Init a print buffer using a pre-existing buffer. - * - * The buffer will not be reallocated. - * - * @param buf buffer structure to init - * @param buffer byte buffer to use for the string data - * @param size size of buffer - */ -void av_bprint_init_for_buffer(AVBPrint *buf, char *buffer, unsigned size); - -/** - * Append a formatted string to a print buffer. - */ -void av_bprintf(AVBPrint *buf, const char *fmt, ...) av_printf_format(2, 3); - -/** - * Append a formatted string to a print buffer. - */ -void av_vbprintf(AVBPrint *buf, const char *fmt, va_list vl_arg); - -/** - * Append char c n times to a print buffer. - */ -void av_bprint_chars(AVBPrint *buf, char c, unsigned n); - -/** - * Append data to a print buffer. - * - * param buf bprint buffer to use - * param data pointer to data - * param size size of data - */ -void av_bprint_append_data(AVBPrint *buf, const char *data, unsigned size); - -struct tm; -/** - * Append a formatted date and time to a print buffer. - * - * param buf bprint buffer to use - * param fmt date and time format string, see strftime() - * param tm broken-down time structure to translate - * - * @note due to poor design of the standard strftime function, it may - * produce poor results if the format string expands to a very long text and - * the bprint buffer is near the limit stated by the size_max option. - */ -void av_bprint_strftime(AVBPrint *buf, const char *fmt, const struct tm *tm); - -/** - * Allocate bytes in the buffer for external use. - * - * @param[in] buf buffer structure - * @param[in] size required size - * @param[out] mem pointer to the memory area - * @param[out] actual_size size of the memory area after allocation; - * can be larger or smaller than size - */ -void av_bprint_get_buffer(AVBPrint *buf, unsigned size, - unsigned char **mem, unsigned *actual_size); - -/** - * Reset the string to "" but keep internal allocated data. - */ -void av_bprint_clear(AVBPrint *buf); - -/** - * Test if the print buffer is complete (not truncated). - * - * It may have been truncated due to a memory allocation failure - * or the size_max limit (compare size and size_max if necessary). - */ -static inline int av_bprint_is_complete(const AVBPrint *buf) -{ - return buf->len < buf->size; -} - -/** - * Finalize a print buffer. - * - * The print buffer can no longer be used afterwards, - * but the len and size fields are still valid. - * - * @arg[out] ret_str if not NULL, used to return a permanent copy of the - * buffer contents, or NULL if memory allocation fails; - * if NULL, the buffer is discarded and freed - * @return 0 for success or error code (probably AVERROR(ENOMEM)) - */ -int av_bprint_finalize(AVBPrint *buf, char **ret_str); - -/** - * Escape the content in src and append it to dstbuf. - * - * @param dstbuf already inited destination bprint buffer - * @param src string containing the text to escape - * @param special_chars string containing the special characters which - * need to be escaped, can be NULL - * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. - * Any unknown value for mode will be considered equivalent to - * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without - * notice. - * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_* macros - */ -void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_chars, - enum AVEscapeMode mode, int flags); - -#endif /* AVUTIL_BPRINT_H */ diff --git a/prebuilts/arm/include/libavutil/bswap.h b/prebuilts/arm/include/libavutil/bswap.h deleted file mode 100644 index 91cb795..0000000 --- a/prebuilts/arm/include/libavutil/bswap.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * byte swapping routines - */ - -#ifndef AVUTIL_BSWAP_H -#define AVUTIL_BSWAP_H - -#include -#include "libavutil/avconfig.h" -#include "attributes.h" - -#ifdef HAVE_AV_CONFIG_H - -#include "config.h" - -#if ARCH_AARCH64 -# include "aarch64/bswap.h" -#elif ARCH_ARM -# include "arm/bswap.h" -#elif ARCH_AVR32 -# include "avr32/bswap.h" -#elif ARCH_SH4 -# include "sh4/bswap.h" -#elif ARCH_X86 -# include "x86/bswap.h" -#endif - -#endif /* HAVE_AV_CONFIG_H */ - -#define AV_BSWAP16C(x) (((x) << 8 & 0xff00) | ((x) >> 8 & 0x00ff)) -#define AV_BSWAP32C(x) (AV_BSWAP16C(x) << 16 | AV_BSWAP16C((x) >> 16)) -#define AV_BSWAP64C(x) (AV_BSWAP32C(x) << 32 | AV_BSWAP32C((x) >> 32)) - -#define AV_BSWAPC(s, x) AV_BSWAP##s##C(x) - -#ifndef av_bswap16 -static av_always_inline av_const uint16_t av_bswap16(uint16_t x) -{ - x= (x>>8) | (x<<8); - return x; -} -#endif - -#ifndef av_bswap32 -static av_always_inline av_const uint32_t av_bswap32(uint32_t x) -{ - return AV_BSWAP32C(x); -} -#endif - -#ifndef av_bswap64 -static inline uint64_t av_const av_bswap64(uint64_t x) -{ - return (uint64_t)av_bswap32(x) << 32 | av_bswap32(x >> 32); -} -#endif - -// be2ne ... big-endian to native-endian -// le2ne ... little-endian to native-endian - -#if AV_HAVE_BIGENDIAN -#define av_be2ne16(x) (x) -#define av_be2ne32(x) (x) -#define av_be2ne64(x) (x) -#define av_le2ne16(x) av_bswap16(x) -#define av_le2ne32(x) av_bswap32(x) -#define av_le2ne64(x) av_bswap64(x) -#define AV_BE2NEC(s, x) (x) -#define AV_LE2NEC(s, x) AV_BSWAPC(s, x) -#else -#define av_be2ne16(x) av_bswap16(x) -#define av_be2ne32(x) av_bswap32(x) -#define av_be2ne64(x) av_bswap64(x) -#define av_le2ne16(x) (x) -#define av_le2ne32(x) (x) -#define av_le2ne64(x) (x) -#define AV_BE2NEC(s, x) AV_BSWAPC(s, x) -#define AV_LE2NEC(s, x) (x) -#endif - -#define AV_BE2NE16C(x) AV_BE2NEC(16, x) -#define AV_BE2NE32C(x) AV_BE2NEC(32, x) -#define AV_BE2NE64C(x) AV_BE2NEC(64, x) -#define AV_LE2NE16C(x) AV_LE2NEC(16, x) -#define AV_LE2NE32C(x) AV_LE2NEC(32, x) -#define AV_LE2NE64C(x) AV_LE2NEC(64, x) - -#endif /* AVUTIL_BSWAP_H */ diff --git a/prebuilts/arm/include/libavutil/buffer.h b/prebuilts/arm/include/libavutil/buffer.h deleted file mode 100644 index 241a80e..0000000 --- a/prebuilts/arm/include/libavutil/buffer.h +++ /dev/null @@ -1,353 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_buffer - * refcounted data buffer API - */ - -#ifndef AVUTIL_BUFFER_H -#define AVUTIL_BUFFER_H - -#include -#include - -#include "version.h" - -/** - * @defgroup lavu_buffer AVBuffer - * @ingroup lavu_data - * - * @{ - * AVBuffer is an API for reference-counted data buffers. - * - * There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer - * represents the data buffer itself; it is opaque and not meant to be accessed - * by the caller directly, but only through AVBufferRef. However, the caller may - * e.g. compare two AVBuffer pointers to check whether two different references - * are describing the same data buffer. AVBufferRef represents a single - * reference to an AVBuffer and it is the object that may be manipulated by the - * caller directly. - * - * There are two functions provided for creating a new AVBuffer with a single - * reference -- av_buffer_alloc() to just allocate a new buffer, and - * av_buffer_create() to wrap an existing array in an AVBuffer. From an existing - * reference, additional references may be created with av_buffer_ref(). - * Use av_buffer_unref() to free a reference (this will automatically free the - * data once all the references are freed). - * - * The convention throughout this API and the rest of FFmpeg is such that the - * buffer is considered writable if there exists only one reference to it (and - * it has not been marked as read-only). The av_buffer_is_writable() function is - * provided to check whether this is true and av_buffer_make_writable() will - * automatically create a new writable buffer when necessary. - * Of course nothing prevents the calling code from violating this convention, - * however that is safe only when all the existing references are under its - * control. - * - * @note Referencing and unreferencing the buffers is thread-safe and thus - * may be done from multiple threads simultaneously without any need for - * additional locking. - * - * @note Two different references to the same buffer can point to different - * parts of the buffer (i.e. their AVBufferRef.data will not be equal). - */ - -/** - * A reference counted buffer type. It is opaque and is meant to be used through - * references (AVBufferRef). - */ -typedef struct AVBuffer AVBuffer; - -/** - * A reference to a data buffer. - * - * The size of this struct is not a part of the public ABI and it is not meant - * to be allocated directly. - */ -typedef struct AVBufferRef { - AVBuffer *buffer; - - /** - * The data buffer. It is considered writable if and only if - * this is the only reference to the buffer, in which case - * av_buffer_is_writable() returns 1. - */ - uint8_t *data; - /** - * Size of data in bytes. - */ -#if FF_API_BUFFER_SIZE_T - int size; -#else - size_t size; -#endif -} AVBufferRef; - -/** - * Allocate an AVBuffer of the given size using av_malloc(). - * - * @return an AVBufferRef of given size or NULL when out of memory - */ -#if FF_API_BUFFER_SIZE_T -AVBufferRef *av_buffer_alloc(int size); -#else -AVBufferRef *av_buffer_alloc(size_t size); -#endif - -/** - * Same as av_buffer_alloc(), except the returned buffer will be initialized - * to zero. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferRef *av_buffer_allocz(int size); -#else -AVBufferRef *av_buffer_allocz(size_t size); -#endif - -/** - * Always treat the buffer as read-only, even when it has only one - * reference. - */ -#define AV_BUFFER_FLAG_READONLY (1 << 0) - -/** - * Create an AVBuffer from an existing array. - * - * If this function is successful, data is owned by the AVBuffer. The caller may - * only access data through the returned AVBufferRef and references derived from - * it. - * If this function fails, data is left untouched. - * @param data data array - * @param size size of data in bytes - * @param free a callback for freeing this buffer's data - * @param opaque parameter to be got for processing or passed to free - * @param flags a combination of AV_BUFFER_FLAG_* - * - * @return an AVBufferRef referring to data on success, NULL on failure. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferRef *av_buffer_create(uint8_t *data, int size, -#else -AVBufferRef *av_buffer_create(uint8_t *data, size_t size, -#endif - void (*free)(void *opaque, uint8_t *data), - void *opaque, int flags); - -/** - * Default free callback, which calls av_free() on the buffer data. - * This function is meant to be passed to av_buffer_create(), not called - * directly. - */ -void av_buffer_default_free(void *opaque, uint8_t *data); - -/** - * Create a new reference to an AVBuffer. - * - * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on - * failure. - */ -AVBufferRef *av_buffer_ref(AVBufferRef *buf); - -/** - * Free a given reference and automatically free the buffer if there are no more - * references to it. - * - * @param buf the reference to be freed. The pointer is set to NULL on return. - */ -void av_buffer_unref(AVBufferRef **buf); - -/** - * @return 1 if the caller may write to the data referred to by buf (which is - * true if and only if buf is the only reference to the underlying AVBuffer). - * Return 0 otherwise. - * A positive answer is valid until av_buffer_ref() is called on buf. - */ -int av_buffer_is_writable(const AVBufferRef *buf); - -/** - * @return the opaque parameter set by av_buffer_create. - */ -void *av_buffer_get_opaque(const AVBufferRef *buf); - -int av_buffer_get_ref_count(const AVBufferRef *buf); - -/** - * Create a writable reference from a given buffer reference, avoiding data copy - * if possible. - * - * @param buf buffer reference to make writable. On success, buf is either left - * untouched, or it is unreferenced and a new writable AVBufferRef is - * written in its place. On failure, buf is left untouched. - * @return 0 on success, a negative AVERROR on failure. - */ -int av_buffer_make_writable(AVBufferRef **buf); - -/** - * Reallocate a given buffer. - * - * @param buf a buffer reference to reallocate. On success, buf will be - * unreferenced and a new reference with the required size will be - * written in its place. On failure buf will be left untouched. *buf - * may be NULL, then a new buffer is allocated. - * @param size required new buffer size. - * @return 0 on success, a negative AVERROR on failure. - * - * @note the buffer is actually reallocated with av_realloc() only if it was - * initially allocated through av_buffer_realloc(NULL) and there is only one - * reference to it (i.e. the one passed to this function). In all other cases - * a new buffer is allocated and the data is copied. - */ -#if FF_API_BUFFER_SIZE_T -int av_buffer_realloc(AVBufferRef **buf, int size); -#else -int av_buffer_realloc(AVBufferRef **buf, size_t size); -#endif - -/** - * Ensure dst refers to the same data as src. - * - * When *dst is already equivalent to src, do nothing. Otherwise unreference dst - * and replace it with a new reference to src. - * - * @param dst Pointer to either a valid buffer reference or NULL. On success, - * this will point to a buffer reference equivalent to src. On - * failure, dst will be left untouched. - * @param src A buffer reference to replace dst with. May be NULL, then this - * function is equivalent to av_buffer_unref(dst). - * @return 0 on success - * AVERROR(ENOMEM) on memory allocation failure. - */ -int av_buffer_replace(AVBufferRef **dst, AVBufferRef *src); - -/** - * @} - */ - -/** - * @defgroup lavu_bufferpool AVBufferPool - * @ingroup lavu_data - * - * @{ - * AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers. - * - * Frequently allocating and freeing large buffers may be slow. AVBufferPool is - * meant to solve this in cases when the caller needs a set of buffers of the - * same size (the most obvious use case being buffers for raw video or audio - * frames). - * - * At the beginning, the user must call av_buffer_pool_init() to create the - * buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to - * get a reference to a new buffer, similar to av_buffer_alloc(). This new - * reference works in all aspects the same way as the one created by - * av_buffer_alloc(). However, when the last reference to this buffer is - * unreferenced, it is returned to the pool instead of being freed and will be - * reused for subsequent av_buffer_pool_get() calls. - * - * When the caller is done with the pool and no longer needs to allocate any new - * buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable. - * Once all the buffers are released, it will automatically be freed. - * - * Allocating and releasing buffers with this API is thread-safe as long as - * either the default alloc callback is used, or the user-supplied one is - * thread-safe. - */ - -/** - * The buffer pool. This structure is opaque and not meant to be accessed - * directly. It is allocated with av_buffer_pool_init() and freed with - * av_buffer_pool_uninit(). - */ -typedef struct AVBufferPool AVBufferPool; - -/** - * Allocate and initialize a buffer pool. - * - * @param size size of each buffer in this pool - * @param alloc a function that will be used to allocate new buffers when the - * pool is empty. May be NULL, then the default allocator will be used - * (av_buffer_alloc()). - * @return newly created buffer pool on success, NULL on error. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)); -#else -AVBufferPool *av_buffer_pool_init(size_t size, AVBufferRef* (*alloc)(size_t size)); -#endif - -/** - * Allocate and initialize a buffer pool with a more complex allocator. - * - * @param size size of each buffer in this pool - * @param opaque arbitrary user data used by the allocator - * @param alloc a function that will be used to allocate new buffers when the - * pool is empty. May be NULL, then the default allocator will be - * used (av_buffer_alloc()). - * @param pool_free a function that will be called immediately before the pool - * is freed. I.e. after av_buffer_pool_uninit() is called - * by the caller and all the frames are returned to the pool - * and freed. It is intended to uninitialize the user opaque - * data. May be NULL. - * @return newly created buffer pool on success, NULL on error. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferPool *av_buffer_pool_init2(int size, void *opaque, - AVBufferRef* (*alloc)(void *opaque, int size), -#else -AVBufferPool *av_buffer_pool_init2(size_t size, void *opaque, - AVBufferRef* (*alloc)(void *opaque, size_t size), -#endif - void (*pool_free)(void *opaque)); - -/** - * Mark the pool as being available for freeing. It will actually be freed only - * once all the allocated buffers associated with the pool are released. Thus it - * is safe to call this function while some of the allocated buffers are still - * in use. - * - * @param pool pointer to the pool to be freed. It will be set to NULL. - */ -void av_buffer_pool_uninit(AVBufferPool **pool); - -/** - * Allocate a new AVBuffer, reusing an old buffer from the pool when available. - * This function may be called simultaneously from multiple threads. - * - * @return a reference to the new buffer on success, NULL on error. - */ -AVBufferRef *av_buffer_pool_get(AVBufferPool *pool); - -/** - * Query the original opaque parameter of an allocated buffer in the pool. - * - * @param ref a buffer reference to a buffer returned by av_buffer_pool_get. - * @return the opaque parameter set by the buffer allocator function of the - * buffer pool. - * - * @note the opaque parameter of ref is used by the buffer pool implementation, - * therefore you have to use this function to access the original opaque - * parameter of an allocated buffer. - */ -void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref); - -/** - * @} - */ - -#endif /* AVUTIL_BUFFER_H */ diff --git a/prebuilts/arm/include/libavutil/camellia.h b/prebuilts/arm/include/libavutil/camellia.h deleted file mode 100644 index e674c9b..0000000 --- a/prebuilts/arm/include/libavutil/camellia.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * An implementation of the CAMELLIA algorithm as mentioned in RFC3713 - * Copyright (c) 2014 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CAMELLIA_H -#define AVUTIL_CAMELLIA_H - -#include - - -/** - * @file - * @brief Public header for libavutil CAMELLIA algorithm - * @defgroup lavu_camellia CAMELLIA - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_camellia_size; - -struct AVCAMELLIA; - -/** - * Allocate an AVCAMELLIA context - * To free the struct: av_free(ptr) - */ -struct AVCAMELLIA *av_camellia_alloc(void); - -/** - * Initialize an AVCAMELLIA context. - * - * @param ctx an AVCAMELLIA context - * @param key a key of 16, 24, 32 bytes used for encryption/decryption - * @param key_bits number of keybits: possible are 128, 192, 256 - */ -int av_camellia_init(struct AVCAMELLIA *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVCAMELLIA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 16 byte blocks - * @paran iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_camellia_crypt(struct AVCAMELLIA *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt); - -/** - * @} - */ -#endif /* AVUTIL_CAMELLIA_H */ diff --git a/prebuilts/arm/include/libavutil/cast5.h b/prebuilts/arm/include/libavutil/cast5.h deleted file mode 100644 index ad5b347..0000000 --- a/prebuilts/arm/include/libavutil/cast5.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * An implementation of the CAST128 algorithm as mentioned in RFC2144 - * Copyright (c) 2014 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CAST5_H -#define AVUTIL_CAST5_H - -#include - - -/** - * @file - * @brief Public header for libavutil CAST5 algorithm - * @defgroup lavu_cast5 CAST5 - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_cast5_size; - -struct AVCAST5; - -/** - * Allocate an AVCAST5 context - * To free the struct: av_free(ptr) - */ -struct AVCAST5 *av_cast5_alloc(void); -/** - * Initialize an AVCAST5 context. - * - * @param ctx an AVCAST5 context - * @param key a key of 5,6,...16 bytes used for encryption/decryption - * @param key_bits number of keybits: possible are 40,48,...,128 - * @return 0 on success, less than 0 on failure - */ -int av_cast5_init(struct AVCAST5 *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, ECB mode only - * - * @param ctx an AVCAST5 context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_cast5_crypt(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVCAST5 context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_cast5_crypt2(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); -/** - * @} - */ -#endif /* AVUTIL_CAST5_H */ diff --git a/prebuilts/arm/include/libavutil/channel_layout.h b/prebuilts/arm/include/libavutil/channel_layout.h deleted file mode 100644 index d39ae11..0000000 --- a/prebuilts/arm/include/libavutil/channel_layout.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright (c) 2006 Michael Niedermayer - * Copyright (c) 2008 Peter Ross - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CHANNEL_LAYOUT_H -#define AVUTIL_CHANNEL_LAYOUT_H - -#include - -/** - * @file - * audio channel layout utility functions - */ - -/** - * @addtogroup lavu_audio - * @{ - */ - -/** - * @defgroup channel_masks Audio channel masks - * - * 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. - * - * @{ - */ -#define AV_CH_FRONT_LEFT 0x00000001 -#define AV_CH_FRONT_RIGHT 0x00000002 -#define AV_CH_FRONT_CENTER 0x00000004 -#define AV_CH_LOW_FREQUENCY 0x00000008 -#define AV_CH_BACK_LEFT 0x00000010 -#define AV_CH_BACK_RIGHT 0x00000020 -#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040 -#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080 -#define AV_CH_BACK_CENTER 0x00000100 -#define AV_CH_SIDE_LEFT 0x00000200 -#define AV_CH_SIDE_RIGHT 0x00000400 -#define AV_CH_TOP_CENTER 0x00000800 -#define AV_CH_TOP_FRONT_LEFT 0x00001000 -#define AV_CH_TOP_FRONT_CENTER 0x00002000 -#define AV_CH_TOP_FRONT_RIGHT 0x00004000 -#define AV_CH_TOP_BACK_LEFT 0x00008000 -#define AV_CH_TOP_BACK_CENTER 0x00010000 -#define AV_CH_TOP_BACK_RIGHT 0x00020000 -#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix. -#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT. -#define AV_CH_WIDE_LEFT 0x0000000080000000ULL -#define AV_CH_WIDE_RIGHT 0x0000000100000000ULL -#define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL -#define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL -#define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL -#define AV_CH_TOP_SIDE_LEFT 0x0000001000000000ULL -#define AV_CH_TOP_SIDE_RIGHT 0x0000002000000000ULL -#define AV_CH_BOTTOM_FRONT_CENTER 0x0000004000000000ULL -#define AV_CH_BOTTOM_FRONT_LEFT 0x0000008000000000ULL -#define AV_CH_BOTTOM_FRONT_RIGHT 0x0000010000000000ULL - -/** Channel mask value used for AVCodecContext.request_channel_layout - to indicate that the user requests the channel order of the decoder output - to be the native codec channel order. */ -#define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL - -/** - * @} - * @defgroup channel_mask_c Audio channel layouts - * @{ - * */ -#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT) -#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT0_FRONT (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT0_FRONT (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) -#define 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) -#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT) -#define AV_CH_LAYOUT_22POINT2 (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_BACK_CENTER|AV_CH_LOW_FREQUENCY_2|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_CENTER|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_BOTTOM_FRONT_CENTER|AV_CH_BOTTOM_FRONT_LEFT|AV_CH_BOTTOM_FRONT_RIGHT) - -enum AVMatrixEncoding { - AV_MATRIX_ENCODING_NONE, - AV_MATRIX_ENCODING_DOLBY, - AV_MATRIX_ENCODING_DPLII, - AV_MATRIX_ENCODING_DPLIIX, - AV_MATRIX_ENCODING_DPLIIZ, - AV_MATRIX_ENCODING_DOLBYEX, - AV_MATRIX_ENCODING_DOLBYHEADPHONE, - AV_MATRIX_ENCODING_NB -}; - -/** - * Return a channel layout id that matches name, or 0 if no match is found. - * - * name can be one or several of the following notations, - * separated by '+' or '|': - * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, - * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); - * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, - * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); - * - a number of channels, in decimal, followed by 'c', yielding - * the default channel layout for that number of channels (@see - * av_get_default_channel_layout); - * - a channel layout mask, in hexadecimal starting with "0x" (see the - * AV_CH_* macros). - * - * Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7" - */ -uint64_t av_get_channel_layout(const char *name); - -/** - * Return a channel layout and the number of channels based on the specified name. - * - * This function is similar to (@see av_get_channel_layout), but can also parse - * unknown channel layout specifications. - * - * @param[in] name channel layout specification string - * @param[out] channel_layout parsed channel layout (0 if unknown) - * @param[out] nb_channels number of channels - * - * @return 0 on success, AVERROR(EINVAL) if the parsing fails. - */ -int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, int* nb_channels); - -/** - * Return a description of a channel layout. - * If nb_channels is <= 0, it is guessed from the channel_layout. - * - * @param buf put here the string containing the channel layout - * @param buf_size size in bytes of the buffer - */ -void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout); - -struct AVBPrint; -/** - * Append a description of a channel layout to a bprint buffer. - */ -void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout); - -/** - * Return the number of channels in the channel layout. - */ -int av_get_channel_layout_nb_channels(uint64_t channel_layout); - -/** - * Return default channel layout for a given number of channels. - */ -int64_t av_get_default_channel_layout(int nb_channels); - -/** - * Get the index of a channel in channel_layout. - * - * @param channel a channel layout describing exactly one channel which must be - * present in channel_layout. - * - * @return index of channel in channel_layout on success, a negative AVERROR - * on error. - */ -int av_get_channel_layout_channel_index(uint64_t channel_layout, - uint64_t channel); - -/** - * Get the channel with the given index in channel_layout. - */ -uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index); - -/** - * Get the name of a given channel. - * - * @return channel name on success, NULL on error. - */ -const char *av_get_channel_name(uint64_t channel); - -/** - * Get the description of a given channel. - * - * @param channel a channel layout with a single channel - * @return channel description on success, NULL on error - */ -const char *av_get_channel_description(uint64_t channel); - -/** - * Get the value and name of a standard channel layout. - * - * @param[in] index index in an internal list, starting at 0 - * @param[out] layout channel layout mask - * @param[out] name name of the layout - * @return 0 if the layout exists, - * <0 if index is beyond the limits - */ -int av_get_standard_channel_layout(unsigned index, uint64_t *layout, - const char **name); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_CHANNEL_LAYOUT_H */ diff --git a/prebuilts/arm/include/libavutil/common.h b/prebuilts/arm/include/libavutil/common.h deleted file mode 100644 index aee353d..0000000 --- a/prebuilts/arm/include/libavutil/common.h +++ /dev/null @@ -1,608 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * common internal and external API header - */ - -#ifndef AVUTIL_COMMON_H -#define AVUTIL_COMMON_H - -#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && !defined(UINT64_C) -#error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "attributes.h" -#include "macros.h" -#include "version.h" -#include "libavutil/avconfig.h" - -#if AV_HAVE_BIGENDIAN -# define AV_NE(be, le) (be) -#else -# define AV_NE(be, le) (le) -#endif - -//rounded division & shift -#define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) -/* assume b>0 */ -#define ROUNDED_DIV(a,b) (((a)>=0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) -/* Fast a/(1<=0 and b>=0 */ -#define AV_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \ - : ((a) + (1<<(b)) - 1) >> (b)) -/* Backwards compat. */ -#define FF_CEIL_RSHIFT AV_CEIL_RSHIFT - -#define FFUDIV(a,b) (((a)>0 ?(a):(a)-(b)+1) / (b)) -#define FFUMOD(a,b) ((a)-(b)*FFUDIV(a,b)) - -/** - * Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they - * are not representable as absolute values of their type. This is the same - * as with *abs() - * @see FFNABS() - */ -#define FFABS(a) ((a) >= 0 ? (a) : (-(a))) -#define FFSIGN(a) ((a) > 0 ? 1 : -1) - -/** - * Negative Absolute value. - * this works for all integers of all types. - * As with many macros, this evaluates its argument twice, it thus must not have - * a sideeffect, that is FFNABS(x++) has undefined behavior. - */ -#define FFNABS(a) ((a) <= 0 ? (a) : (-(a))) - -/** - * Unsigned Absolute value. - * This takes the absolute value of a signed int and returns it as a unsigned. - * This also works with INT_MIN which would otherwise not be representable - * As with many macros, this evaluates its argument twice. - */ -#define FFABSU(a) ((a) <= 0 ? -(unsigned)(a) : (unsigned)(a)) -#define FFABS64U(a) ((a) <= 0 ? -(uint64_t)(a) : (uint64_t)(a)) - -/** - * Comparator. - * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 - * if x == y. This is useful for instance in a qsort comparator callback. - * Furthermore, compilers are able to optimize this to branchless code, and - * there is no risk of overflow with signed types. - * As with many macros, this evaluates its argument multiple times, it thus - * must not have a side-effect. - */ -#define FFDIFFSIGN(x,y) (((x)>(y)) - ((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])) - -/* misc math functions */ - -#ifdef HAVE_AV_CONFIG_H -# include "config.h" -# include "intmath.h" -#endif - -#ifndef av_ceil_log2 -# define av_ceil_log2 av_ceil_log2_c -#endif -#ifndef av_clip -# define av_clip av_clip_c -#endif -#ifndef av_clip64 -# define av_clip64 av_clip64_c -#endif -#ifndef av_clip_uint8 -# define av_clip_uint8 av_clip_uint8_c -#endif -#ifndef av_clip_int8 -# define av_clip_int8 av_clip_int8_c -#endif -#ifndef av_clip_uint16 -# define av_clip_uint16 av_clip_uint16_c -#endif -#ifndef av_clip_int16 -# define av_clip_int16 av_clip_int16_c -#endif -#ifndef av_clipl_int32 -# define av_clipl_int32 av_clipl_int32_c -#endif -#ifndef av_clip_intp2 -# define av_clip_intp2 av_clip_intp2_c -#endif -#ifndef av_clip_uintp2 -# define av_clip_uintp2 av_clip_uintp2_c -#endif -#ifndef av_mod_uintp2 -# define av_mod_uintp2 av_mod_uintp2_c -#endif -#ifndef av_sat_add32 -# define av_sat_add32 av_sat_add32_c -#endif -#ifndef av_sat_dadd32 -# define av_sat_dadd32 av_sat_dadd32_c -#endif -#ifndef av_sat_sub32 -# define av_sat_sub32 av_sat_sub32_c -#endif -#ifndef av_sat_dsub32 -# define av_sat_dsub32 av_sat_dsub32_c -#endif -#ifndef av_sat_add64 -# define av_sat_add64 av_sat_add64_c -#endif -#ifndef av_sat_sub64 -# define av_sat_sub64 av_sat_sub64_c -#endif -#ifndef av_clipf -# define av_clipf av_clipf_c -#endif -#ifndef av_clipd -# define av_clipd av_clipd_c -#endif -#ifndef av_popcount -# define av_popcount av_popcount_c -#endif -#ifndef av_popcount64 -# define av_popcount64 av_popcount64_c -#endif -#ifndef av_parity -# define av_parity av_parity_c -#endif - -#ifndef av_log2 -av_const int av_log2(unsigned v); -#endif - -#ifndef av_log2_16bit -av_const int av_log2_16bit(unsigned v); -#endif - -/** - * Clip a signed integer value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const int av_clip_c(int a, int amin, int amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a signed 64bit integer value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a signed integer value into the 0-255 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const uint8_t av_clip_uint8_c(int a) -{ - if (a&(~0xFF)) return (~a)>>31; - else return a; -} - -/** - * Clip a signed integer value into the -128,127 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int8_t av_clip_int8_c(int a) -{ - if ((a+0x80U) & ~0xFF) return (a>>31) ^ 0x7F; - else return a; -} - -/** - * Clip a signed integer value into the 0-65535 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const uint16_t av_clip_uint16_c(int a) -{ - if (a&(~0xFFFF)) return (~a)>>31; - else return a; -} - -/** - * Clip a signed integer value into the -32768,32767 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int16_t av_clip_int16_c(int a) -{ - if ((a+0x8000U) & ~0xFFFF) return (a>>31) ^ 0x7FFF; - else return a; -} - -/** - * Clip a signed 64-bit integer value into the -2147483648,2147483647 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a) -{ - if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF); - else return (int32_t)a; -} - -/** - * Clip a signed integer into the -(2^p),(2^p-1) range. - * @param a value to clip - * @param p bit position to clip at - * @return clipped value - */ -static av_always_inline av_const int av_clip_intp2_c(int a, int p) -{ - if (((unsigned)a + (1 << p)) & ~((2 << p) - 1)) - return (a >> 31) ^ ((1 << p) - 1); - else - return a; -} - -/** - * Clip a signed integer to an unsigned power of two range. - * @param a value to clip - * @param p bit position to clip at - * @return clipped value - */ -static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p) -{ - if (a & ~((1<> 31 & ((1<= 0) - return INT64_MAX ^ (b >> 63); - return s; -#endif -} - -/** - * Subtract two signed 64-bit values with saturation. - * - * @param a one value - * @param b another value - * @return difference with signed saturation - */ -static av_always_inline int64_t av_sat_sub64_c(int64_t a, int64_t b) { -#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_sub_overflow) - int64_t tmp; - return !__builtin_sub_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN); -#else - if (b <= 0 && a >= INT64_MAX + b) - return INT64_MAX; - if (b >= 0 && a <= INT64_MIN + b) - return INT64_MIN; - return a - b; -#endif -} - -/** - * Clip a float value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const float av_clipf_c(float a, float amin, float amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a double value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const double av_clipd_c(double a, double amin, double amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** Compute ceil(log2(x)). - * @param x value used to compute ceil(log2(x)) - * @return computed ceiling of log2(x) - */ -static av_always_inline av_const int av_ceil_log2_c(int x) -{ - return av_log2((x - 1U) << 1); -} - -/** - * Count number of bits set to one in x - * @param x value to count bits of - * @return the number of bits set to one in x - */ -static av_always_inline av_const int av_popcount_c(uint32_t x) -{ - x -= (x >> 1) & 0x55555555; - x = (x & 0x33333333) + ((x >> 2) & 0x33333333); - x = (x + (x >> 4)) & 0x0F0F0F0F; - x += x >> 8; - return (x + (x >> 16)) & 0x3F; -} - -/** - * Count number of bits set to one in x - * @param x value to count bits of - * @return the number of bits set to one in x - */ -static av_always_inline av_const int av_popcount64_c(uint64_t x) -{ - return av_popcount((uint32_t)x) + av_popcount((uint32_t)(x >> 32)); -} - -static av_always_inline av_const int av_parity_c(uint32_t v) -{ - return av_popcount(v) & 1; -} - -#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) -#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) - -/** - * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form. - * - * @param val Output value, must be an lvalue of type uint32_t. - * @param GET_BYTE Expression reading one byte from the input. - * Evaluated up to 7 times (4 for the currently - * assigned Unicode range). With a memory buffer - * input, this could be *ptr++, or if you want to make sure - * that *ptr stops at the end of a NULL terminated string then - * *ptr ? *ptr++ : 0 - * @param ERROR Expression to be evaluated on invalid input, - * typically a goto statement. - * - * @warning ERROR should not contain a loop control statement which - * could interact with the internal while loop, and should force an - * exit from the macro code (e.g. through a goto or a return) in order - * to prevent undefined results. - */ -#define GET_UTF8(val, GET_BYTE, ERROR)\ - val= (GET_BYTE);\ - {\ - uint32_t top = (val & 128) >> 1;\ - if ((val & 0xc0) == 0x80 || val >= 0xFE)\ - {ERROR}\ - while (val & top) {\ - unsigned int tmp = (GET_BYTE) - 128;\ - if(tmp>>6)\ - {ERROR}\ - val= (val<<6) + tmp;\ - top <<= 5;\ - }\ - val &= (top << 1) - 1;\ - } - -/** - * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form. - * - * @param val Output value, must be an lvalue of type uint32_t. - * @param GET_16BIT Expression returning two bytes of UTF-16 data converted - * to native byte order. Evaluated one or two times. - * @param ERROR Expression to be evaluated on invalid input, - * typically a goto statement. - */ -#define GET_UTF16(val, GET_16BIT, ERROR)\ - val = (GET_16BIT);\ - {\ - unsigned int hi = val - 0xD800;\ - if (hi < 0x800) {\ - val = (GET_16BIT) - 0xDC00;\ - if (val > 0x3FFU || hi > 0x3FFU)\ - {ERROR}\ - val += (hi<<10) + 0x10000;\ - }\ - }\ - -/** - * @def PUT_UTF8(val, tmp, PUT_BYTE) - * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long). - * @param val is an input-only argument and should be of type uint32_t. It holds - * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If - * val is given as a function it is executed only once. - * @param tmp is a temporary variable and should be of type uint8_t. It - * represents an intermediate value during conversion that is to be - * output by PUT_BYTE. - * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination. - * It could be a function or a statement, and uses tmp as the input byte. - * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be - * executed up to 4 times for values in the valid UTF-8 range and up to - * 7 times in the general case, depending on the length of the converted - * Unicode character. - */ -#define PUT_UTF8(val, tmp, PUT_BYTE)\ - {\ - int bytes, shift;\ - uint32_t in = val;\ - if (in < 0x80) {\ - tmp = in;\ - PUT_BYTE\ - } else {\ - bytes = (av_log2(in) + 4) / 5;\ - shift = (bytes - 1) * 6;\ - tmp = (256 - (256 >> bytes)) | (in >> shift);\ - PUT_BYTE\ - while (shift >= 6) {\ - shift -= 6;\ - tmp = 0x80 | ((in >> shift) & 0x3f);\ - PUT_BYTE\ - }\ - }\ - } - -/** - * @def PUT_UTF16(val, tmp, PUT_16BIT) - * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes). - * @param val is an input-only argument and should be of type uint32_t. It holds - * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If - * val is given as a function it is executed only once. - * @param tmp is a temporary variable and should be of type uint16_t. It - * represents an intermediate value during conversion that is to be - * output by PUT_16BIT. - * @param PUT_16BIT writes the converted UTF-16 data to any proper destination - * in desired endianness. It could be a function or a statement, and uses tmp - * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;" - * PUT_BYTE will be executed 1 or 2 times depending on input character. - */ -#define PUT_UTF16(val, tmp, PUT_16BIT)\ - {\ - uint32_t in = val;\ - if (in < 0x10000) {\ - tmp = in;\ - PUT_16BIT\ - } else {\ - tmp = 0xD800 | ((in - 0x10000) >> 10);\ - PUT_16BIT\ - tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\ - PUT_16BIT\ - }\ - }\ - - - -#include "mem.h" - -#ifdef HAVE_AV_CONFIG_H -# include "internal.h" -#endif /* HAVE_AV_CONFIG_H */ - -#endif /* AVUTIL_COMMON_H */ diff --git a/prebuilts/arm/include/libavutil/cpu.h b/prebuilts/arm/include/libavutil/cpu.h deleted file mode 100644 index 83099dd..0000000 --- a/prebuilts/arm/include/libavutil/cpu.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 2000, 2001, 2002 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CPU_H -#define AVUTIL_CPU_H - -#include - -#include "attributes.h" - -#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ - - /* lower 16 bits - CPU features */ -#define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX -#define AV_CPU_FLAG_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext -#define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext -#define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW -#define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions -#define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions -#define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster - ///< than regular MMX/SSE (e.g. Core1) -#define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt -#define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions -#define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster - ///< than regular MMX/SSE (e.g. Core1) -#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions -#define AV_CPU_FLAG_SSSE3SLOW 0x4000000 ///< SSSE3 supported, but usually not faster -#define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower -#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions -#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions -#define AV_CPU_FLAG_AESNI 0x80000 ///< Advanced Encryption Standard functions -#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used -#define AV_CPU_FLAG_AVXSLOW 0x8000000 ///< AVX supported, but slow when using YMM registers (e.g. Bulldozer) -#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions -#define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions -#define AV_CPU_FLAG_CMOV 0x1000 ///< supports cmov instruction -#define AV_CPU_FLAG_AVX2 0x8000 ///< AVX2 functions: requires OS support even if YMM registers aren't used -#define AV_CPU_FLAG_FMA3 0x10000 ///< Haswell FMA3 functions -#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1 -#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2 -#define AV_CPU_FLAG_AVX512 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used - -#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard -#define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06 -#define AV_CPU_FLAG_POWER8 0x0004 ///< ISA 2.07 - -#define AV_CPU_FLAG_ARMV5TE (1 << 0) -#define AV_CPU_FLAG_ARMV6 (1 << 1) -#define AV_CPU_FLAG_ARMV6T2 (1 << 2) -#define AV_CPU_FLAG_VFP (1 << 3) -#define AV_CPU_FLAG_VFPV3 (1 << 4) -#define AV_CPU_FLAG_NEON (1 << 5) -#define AV_CPU_FLAG_ARMV8 (1 << 6) -#define AV_CPU_FLAG_VFP_VM (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations -#define AV_CPU_FLAG_SETEND (1 <<16) - -#define AV_CPU_FLAG_MMI (1 << 0) -#define AV_CPU_FLAG_MSA (1 << 1) - -/** - * Return the flags which specify extensions supported by the CPU. - * The returned value is affected by av_force_cpu_flags() if that was used - * before. So av_get_cpu_flags() can easily be used in an application to - * detect the enabled cpu flags. - */ -int av_get_cpu_flags(void); - -/** - * Disables cpu detection and forces the specified flags. - * -1 is a special case that disables forcing of specific flags. - */ -void av_force_cpu_flags(int flags); - -/** - * Set a mask on flags returned by av_get_cpu_flags(). - * This function is mainly useful for testing. - * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible - */ -attribute_deprecated void av_set_cpu_flags_mask(int mask); - -/** - * Parse CPU flags from a string. - * - * The returned flags contain the specified flags as well as related unspecified flags. - * - * This function exists only for compatibility with libav. - * Please use av_parse_cpu_caps() when possible. - * @return a combination of AV_CPU_* flags, negative on error. - */ -attribute_deprecated -int av_parse_cpu_flags(const char *s); - -/** - * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. - * - * @return negative on error. - */ -int av_parse_cpu_caps(unsigned *flags, const char *s); - -/** - * @return the number of logical CPU cores present. - */ -int av_cpu_count(void); - -/** - * Get the maximum data alignment that may be required by FFmpeg. - * - * Note that this is affected by the build configuration and the CPU flags mask, - * so e.g. if the CPU supports AVX, but libavutil has been built with - * --disable-avx or the AV_CPU_FLAG_AVX flag has been disabled through - * av_set_cpu_flags_mask(), then this function will behave as if AVX is not - * present. - */ -size_t av_cpu_max_align(void); - -#endif /* AVUTIL_CPU_H */ diff --git a/prebuilts/arm/include/libavutil/crc.h b/prebuilts/arm/include/libavutil/crc.h deleted file mode 100644 index 47e22b4..0000000 --- a/prebuilts/arm/include/libavutil/crc.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_crc32 - * Public header for CRC hash function implementation. - */ - -#ifndef AVUTIL_CRC_H -#define AVUTIL_CRC_H - -#include -#include -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_crc32 CRC - * @ingroup lavu_hash - * CRC (Cyclic Redundancy Check) hash function implementation. - * - * This module supports numerous CRC polynomials, in addition to the most - * widely used CRC-32-IEEE. See @ref AVCRCId for a list of available - * polynomials. - * - * @{ - */ - -typedef uint32_t AVCRC; - -typedef enum { - AV_CRC_8_ATM, - AV_CRC_16_ANSI, - AV_CRC_16_CCITT, - AV_CRC_32_IEEE, - AV_CRC_32_IEEE_LE, /*< reversed bitorder version of AV_CRC_32_IEEE */ - AV_CRC_16_ANSI_LE, /*< reversed bitorder version of AV_CRC_16_ANSI */ - AV_CRC_24_IEEE, - AV_CRC_8_EBU, - AV_CRC_MAX, /*< Not part of public API! Do not use outside libavutil. */ -}AVCRCId; - -/** - * Initialize a CRC table. - * @param ctx must be an array of size sizeof(AVCRC)*257 or sizeof(AVCRC)*1024 - * @param le If 1, the lowest bit represents the coefficient for the highest - * exponent of the corresponding polynomial (both for poly and - * actual CRC). - * If 0, you must swap the CRC parameter and the result of av_crc - * if you need the standard representation (can be simplified in - * most cases to e.g. bswap16): - * av_bswap32(crc << (32-bits)) - * @param bits number of bits for the CRC - * @param poly generator polynomial without the x**bits coefficient, in the - * representation as specified by le - * @param ctx_size size of ctx in bytes - * @return <0 on failure - */ -int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size); - -/** - * Get an initialized standard CRC table. - * @param crc_id ID of a standard CRC - * @return a pointer to the CRC table or NULL on failure - */ -const AVCRC *av_crc_get_table(AVCRCId crc_id); - -/** - * Calculate the CRC of a block. - * @param crc CRC of previous blocks if any or initial value for CRC - * @return CRC updated with the data from the given block - * - * @see av_crc_init() "le" parameter - */ -uint32_t av_crc(const AVCRC *ctx, uint32_t crc, - const uint8_t *buffer, size_t length) av_pure; - -/** - * @} - */ - -#endif /* AVUTIL_CRC_H */ diff --git a/prebuilts/arm/include/libavutil/des.h b/prebuilts/arm/include/libavutil/des.h deleted file mode 100644 index 4cf11f5..0000000 --- a/prebuilts/arm/include/libavutil/des.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * DES encryption/decryption - * Copyright (c) 2007 Reimar Doeffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_DES_H -#define AVUTIL_DES_H - -#include - -/** - * @defgroup lavu_des DES - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVDES { - uint64_t round_keys[3][16]; - int triple_des; -} AVDES; - -/** - * Allocate an AVDES context. - */ -AVDES *av_des_alloc(void); - -/** - * @brief Initializes an AVDES context. - * - * @param key_bits must be 64 or 192 - * @param decrypt 0 for encryption/CBC-MAC, 1 for decryption - * @return zero on success, negative value otherwise - */ -int av_des_init(struct AVDES *d, const uint8_t *key, int key_bits, int decrypt); - -/** - * @brief Encrypts / decrypts using the DES algorithm. - * - * @param count number of 8 byte blocks - * @param dst destination array, can be equal to src, must be 8-byte aligned - * @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL - * @param iv initialization vector for CBC mode, if NULL then ECB will be used, - * must be 8-byte aligned - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_des_crypt(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @brief Calculates CBC-MAC using the DES algorithm. - * - * @param count number of 8 byte blocks - * @param dst destination array, can be equal to src, must be 8-byte aligned - * @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL - */ -void av_des_mac(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count); - -/** - * @} - */ - -#endif /* AVUTIL_DES_H */ diff --git a/prebuilts/arm/include/libavutil/dict.h b/prebuilts/arm/include/libavutil/dict.h deleted file mode 100644 index 118f1f0..0000000 --- a/prebuilts/arm/include/libavutil/dict.h +++ /dev/null @@ -1,200 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Public dictionary API. - * @deprecated - * AVDictionary is provided for compatibility with libav. It is both in - * implementation as well as API inefficient. It does not scale and is - * extremely slow with large dictionaries. - * It is recommended that new code uses our tree container from tree.c/h - * where applicable, which uses AVL trees to achieve O(log n) performance. - */ - -#ifndef AVUTIL_DICT_H -#define AVUTIL_DICT_H - -#include - -#include "version.h" - -/** - * @addtogroup lavu_dict AVDictionary - * @ingroup lavu_data - * - * @brief Simple key:value store - * - * @{ - * Dictionaries are used for storing key:value pairs. To create - * an AVDictionary, simply pass an address of a NULL pointer to - * av_dict_set(). NULL can be used as an empty dictionary wherever - * a pointer to an AVDictionary is required. - * Use av_dict_get() to retrieve an entry or iterate over all - * entries and finally av_dict_free() to free the dictionary - * and all its contents. - * - @code - AVDictionary *d = NULL; // "create" an empty dictionary - AVDictionaryEntry *t = NULL; - - av_dict_set(&d, "foo", "bar", 0); // add an entry - - char *k = av_strdup("key"); // if your strings are already allocated, - char *v = av_strdup("value"); // you can avoid copying them like this - av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); - - while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) { - <....> // iterate over all entries in d - } - av_dict_free(&d); - @endcode - */ - -#define AV_DICT_MATCH_CASE 1 /**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */ -#define AV_DICT_IGNORE_SUFFIX 2 /**< Return first entry in a dictionary whose first part corresponds to the search key, - ignoring the suffix of the found key string. Only relevant in av_dict_get(). */ -#define AV_DICT_DONT_STRDUP_KEY 4 /**< Take ownership of a key that's been - allocated with av_malloc() or another memory allocation function. */ -#define AV_DICT_DONT_STRDUP_VAL 8 /**< Take ownership of a value that's been - allocated with av_malloc() or another memory allocation function. */ -#define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries. -#define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no - delimiter is added, the strings are simply concatenated. */ -#define AV_DICT_MULTIKEY 64 /**< Allow to store several equal keys in the dictionary */ - -typedef struct AVDictionaryEntry { - char *key; - char *value; -} AVDictionaryEntry; - -typedef struct AVDictionary AVDictionary; - -/** - * Get a dictionary entry with matching key. - * - * The returned entry key or value must not be changed, or it will - * cause undefined behavior. - * - * To iterate through all the dictionary entries, you can set the matching key - * to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag. - * - * @param prev Set to the previous matching element to find the next. - * If set to NULL the first matching element is returned. - * @param key matching key - * @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved - * @return found entry or NULL in case no matching entry was found in the dictionary - */ -AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, - const AVDictionaryEntry *prev, int flags); - -/** - * Get number of entries in dictionary. - * - * @param m dictionary - * @return number of entries in dictionary - */ -int av_dict_count(const AVDictionary *m); - -/** - * Set the given entry in *pm, overwriting an existing entry. - * - * Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set, - * these arguments will be freed on error. - * - * Warning: Adding a new entry to a dictionary invalidates all existing entries - * previously returned with av_dict_get. - * - * @param pm pointer to a pointer to a dictionary struct. If *pm is NULL - * a dictionary struct is allocated and put in *pm. - * @param key entry key to add to *pm (will either be av_strduped or added as a new key depending on flags) - * @param value entry value to add to *pm (will be av_strduped or added as a new key depending on flags). - * Passing a NULL value will cause an existing entry to be deleted. - * @return >= 0 on success otherwise an error code <0 - */ -int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags); - -/** - * Convenience wrapper for av_dict_set that converts the value to a string - * and stores it. - * - * Note: If AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. - */ -int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags); - -/** - * Parse the key/value pairs list and add the parsed entries to a dictionary. - * - * In case of failure, all the successfully set entries are stored in - * *pm. You may need to manually free the created dictionary. - * - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other - * @param flags flags to use when adding to dictionary. - * AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL - * are ignored since the key/value tokens will always - * be duplicated. - * @return 0 on success, negative AVERROR code on failure - */ -int av_dict_parse_string(AVDictionary **pm, const char *str, - const char *key_val_sep, const char *pairs_sep, - int flags); - -/** - * Copy entries from one AVDictionary struct into another. - * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, - * this function will allocate a struct for you and put it in *dst - * @param src pointer to source AVDictionary struct - * @param flags flags to use when setting entries in *dst - * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag - * @return 0 on success, negative AVERROR code on failure. If dst was allocated - * by this function, callers should free the associated memory. - */ -int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags); - -/** - * Free all the memory allocated for an AVDictionary struct - * and all keys and values. - */ -void av_dict_free(AVDictionary **m); - -/** - * Get dictionary entries as a string. - * - * Create a string containing dictionary's entries. - * Such string may be passed back to av_dict_parse_string(). - * @note String is escaped with backslashes ('\'). - * - * @param[in] m dictionary - * @param[out] buffer Pointer to buffer that will be allocated with string containg entries. - * Buffer must be freed by the caller when is no longer needed. - * @param[in] key_val_sep character used to separate key from value - * @param[in] pairs_sep character used to separate two pairs from each other - * @return >= 0 on success, negative on error - * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. - */ -int av_dict_get_string(const AVDictionary *m, char **buffer, - const char key_val_sep, const char pairs_sep); - -/** - * @} - */ - -#endif /* AVUTIL_DICT_H */ diff --git a/prebuilts/arm/include/libavutil/display.h b/prebuilts/arm/include/libavutil/display.h deleted file mode 100644 index 515adad..0000000 --- a/prebuilts/arm/include/libavutil/display.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2014 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Display matrix - */ - -#ifndef AVUTIL_DISPLAY_H -#define AVUTIL_DISPLAY_H - -#include -#include "common.h" - -/** - * @addtogroup lavu_video - * @{ - * - * @defgroup lavu_video_display Display transformation matrix functions - * @{ - */ - -/** - * @addtogroup lavu_video_display - * The display transformation matrix specifies an affine transformation that - * should be applied to video frames for correct presentation. It is compatible - * with the matrices stored in the ISO/IEC 14496-12 container format. - * - * The data is a 3x3 matrix represented as a 9-element array: - * - * @code{.unparsed} - * | a b u | - * (a, b, u, c, d, v, x, y, w) -> | c d v | - * | x y w | - * @endcode - * - * All numbers are stored in native endianness, as 16.16 fixed-point values, - * except for u, v and w, which are stored as 2.30 fixed-point values. - * - * The transformation maps a point (p, q) in the source (pre-transformation) - * frame to the point (p', q') in the destination (post-transformation) frame as - * follows: - * - * @code{.unparsed} - * | a b u | - * (p, q, 1) . | c d v | = z * (p', q', 1) - * | x y w | - * @endcode - * - * The transformation can also be more explicitly written in components as - * follows: - * - * @code{.unparsed} - * p' = (a * p + c * q + x) / z; - * q' = (b * p + d * q + y) / z; - * z = u * p + v * q + w - * @endcode - */ - -/** - * Extract the rotation component of the transformation matrix. - * - * @param matrix the transformation matrix - * @return the angle (in degrees) by which the transformation rotates the frame - * counterclockwise. The angle will be in range [-180.0, 180.0], - * or NaN if the matrix is singular. - * - * @note floating point numbers are inherently inexact, so callers are - * recommended to round the return value to nearest integer before use. - */ -double av_display_rotation_get(const int32_t matrix[9]); - -/** - * Initialize a transformation matrix describing a pure counterclockwise - * rotation by the specified angle (in degrees). - * - * @param matrix an allocated transformation matrix (will be fully overwritten - * by this function) - * @param angle rotation angle in degrees. - */ -void av_display_rotation_set(int32_t matrix[9], double angle); - -/** - * Flip the input matrix horizontally and/or vertically. - * - * @param matrix an allocated transformation matrix - * @param hflip whether the matrix should be flipped horizontally - * @param vflip whether the matrix should be flipped vertically - */ -void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_DISPLAY_H */ diff --git a/prebuilts/arm/include/libavutil/dovi_meta.h b/prebuilts/arm/include/libavutil/dovi_meta.h deleted file mode 100644 index 299911d..0000000 --- a/prebuilts/arm/include/libavutil/dovi_meta.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2020 Vacing Fang - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * DOVI configuration - */ - - -#ifndef AVUTIL_DOVI_META_H -#define AVUTIL_DOVI_META_H - -#include -#include - -/* - * DOVI configuration - * ref: dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2 - dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2 - * @code - * uint8_t dv_version_major, the major version number that the stream complies with - * uint8_t dv_version_minor, the minor version number that the stream complies with - * uint8_t dv_profile, the Dolby Vision profile - * uint8_t dv_level, the Dolby Vision level - * uint8_t rpu_present_flag - * uint8_t el_present_flag - * uint8_t bl_present_flag - * uint8_t dv_bl_signal_compatibility_id - * @endcode - * - * @note The struct must be allocated with av_dovi_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVDOVIDecoderConfigurationRecord { - uint8_t dv_version_major; - uint8_t dv_version_minor; - uint8_t dv_profile; - uint8_t dv_level; - uint8_t rpu_present_flag; - uint8_t el_present_flag; - uint8_t bl_present_flag; - uint8_t dv_bl_signal_compatibility_id; -} AVDOVIDecoderConfigurationRecord; - -/** - * Allocate a AVDOVIDecoderConfigurationRecord structure and initialize its - * fields to default values. - * - * @return the newly allocated struct or NULL on failure - */ -AVDOVIDecoderConfigurationRecord *av_dovi_alloc(size_t *size); - -#endif /* AVUTIL_DOVI_META_H */ diff --git a/prebuilts/arm/include/libavutil/downmix_info.h b/prebuilts/arm/include/libavutil/downmix_info.h deleted file mode 100644 index 221cf5b..0000000 --- a/prebuilts/arm/include/libavutil/downmix_info.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2014 Tim Walker - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_DOWNMIX_INFO_H -#define AVUTIL_DOWNMIX_INFO_H - -#include "frame.h" - -/** - * @file - * audio downmix medatata - */ - -/** - * @addtogroup lavu_audio - * @{ - */ - -/** - * @defgroup downmix_info Audio downmix metadata - * @{ - */ - -/** - * Possible downmix types. - */ -enum AVDownmixType { - AV_DOWNMIX_TYPE_UNKNOWN, /**< Not indicated. */ - AV_DOWNMIX_TYPE_LORO, /**< Lo/Ro 2-channel downmix (Stereo). */ - AV_DOWNMIX_TYPE_LTRT, /**< Lt/Rt 2-channel downmix, Dolby Surround compatible. */ - AV_DOWNMIX_TYPE_DPLII, /**< Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible. */ - AV_DOWNMIX_TYPE_NB /**< Number of downmix types. Not part of ABI. */ -}; - -/** - * This structure describes optional metadata relevant to a downmix procedure. - * - * All fields are set by the decoder to the value indicated in the audio - * bitstream (if present), or to a "sane" default otherwise. - */ -typedef struct AVDownmixInfo { - /** - * Type of downmix preferred by the mastering engineer. - */ - enum AVDownmixType preferred_downmix_type; - - /** - * Absolute scale factor representing the nominal level of the center - * channel during a regular downmix. - */ - double center_mix_level; - - /** - * Absolute scale factor representing the nominal level of the center - * channel during an Lt/Rt compatible downmix. - */ - double center_mix_level_ltrt; - - /** - * Absolute scale factor representing the nominal level of the surround - * channels during a regular downmix. - */ - double surround_mix_level; - - /** - * Absolute scale factor representing the nominal level of the surround - * channels during an Lt/Rt compatible downmix. - */ - double surround_mix_level_ltrt; - - /** - * Absolute scale factor representing the level at which the LFE data is - * mixed into L/R channels during downmixing. - */ - double lfe_mix_level; -} AVDownmixInfo; - -/** - * Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing. - * - * If the side data is absent, it is created and added to the frame. - * - * @param frame the frame for which the side data is to be obtained or created - * - * @return the AVDownmixInfo structure to be edited by the caller, or NULL if - * the structure cannot be allocated. - */ -AVDownmixInfo *av_downmix_info_update_side_data(AVFrame *frame); - -/** - * @} - */ - -/** - * @} - */ - -#endif /* AVUTIL_DOWNMIX_INFO_H */ diff --git a/prebuilts/arm/include/libavutil/encryption_info.h b/prebuilts/arm/include/libavutil/encryption_info.h deleted file mode 100644 index 8fe7ebf..0000000 --- a/prebuilts/arm/include/libavutil/encryption_info.h +++ /dev/null @@ -1,205 +0,0 @@ -/** - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_ENCRYPTION_INFO_H -#define AVUTIL_ENCRYPTION_INFO_H - -#include -#include - -typedef struct AVSubsampleEncryptionInfo { - /** The number of bytes that are clear. */ - unsigned int bytes_of_clear_data; - - /** - * The number of bytes that are protected. If using pattern encryption, - * the pattern applies to only the protected bytes; if not using pattern - * encryption, all these bytes are encrypted. - */ - unsigned int bytes_of_protected_data; -} AVSubsampleEncryptionInfo; - -/** - * This describes encryption info for a packet. This contains frame-specific - * info for how to decrypt the packet before passing it to the decoder. - * - * The size of this struct is not part of the public ABI. - */ -typedef struct AVEncryptionInfo { - /** The fourcc encryption scheme, in big-endian byte order. */ - uint32_t scheme; - - /** - * Only used for pattern encryption. This is the number of 16-byte blocks - * that are encrypted. - */ - uint32_t crypt_byte_block; - - /** - * Only used for pattern encryption. This is the number of 16-byte blocks - * that are clear. - */ - uint32_t skip_byte_block; - - /** - * The ID of the key used to encrypt the packet. This should always be - * 16 bytes long, but may be changed in the future. - */ - uint8_t *key_id; - uint32_t key_id_size; - - /** - * The initialization vector. This may have been zero-filled to be the - * correct block size. This should always be 16 bytes long, but may be - * changed in the future. - */ - uint8_t *iv; - uint32_t iv_size; - - /** - * An array of subsample encryption info specifying how parts of the sample - * are encrypted. If there are no subsamples, then the whole sample is - * encrypted. - */ - AVSubsampleEncryptionInfo *subsamples; - uint32_t subsample_count; -} AVEncryptionInfo; - -/** - * This describes info used to initialize an encryption key system. - * - * The size of this struct is not part of the public ABI. - */ -typedef struct AVEncryptionInitInfo { - /** - * A unique identifier for the key system this is for, can be NULL if it - * is not known. This should always be 16 bytes, but may change in the - * future. - */ - uint8_t* system_id; - uint32_t system_id_size; - - /** - * An array of key IDs this initialization data is for. All IDs are the - * same length. Can be NULL if there are no known key IDs. - */ - uint8_t** key_ids; - /** The number of key IDs. */ - uint32_t num_key_ids; - /** - * The number of bytes in each key ID. This should always be 16, but may - * change in the future. - */ - uint32_t key_id_size; - - /** - * Key-system specific initialization data. This data is copied directly - * from the file and the format depends on the specific key system. This - * can be NULL if there is no initialization data; in that case, there - * will be at least one key ID. - */ - uint8_t* data; - uint32_t data_size; - - /** - * An optional pointer to the next initialization info in the list. - */ - struct AVEncryptionInitInfo *next; -} AVEncryptionInitInfo; - -/** - * Allocates an AVEncryptionInfo structure and sub-pointers to hold the given - * number of subsamples. This will allocate pointers for the key ID, IV, - * and subsample entries, set the size members, and zero-initialize the rest. - * - * @param subsample_count The number of subsamples. - * @param key_id_size The number of bytes in the key ID, should be 16. - * @param iv_size The number of bytes in the IV, should be 16. - * - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_alloc(uint32_t subsample_count, uint32_t key_id_size, uint32_t iv_size); - -/** - * Allocates an AVEncryptionInfo structure with a copy of the given data. - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_clone(const AVEncryptionInfo *info); - -/** - * Frees the given encryption info object. This MUST NOT be used to free the - * side-data data pointer, that should use normal side-data methods. - */ -void av_encryption_info_free(AVEncryptionInfo *info); - -/** - * Creates a copy of the AVEncryptionInfo that is contained in the given side - * data. The resulting object should be passed to av_encryption_info_free() - * when done. - * - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_get_side_data(const uint8_t *side_data, size_t side_data_size); - -/** - * Allocates and initializes side data that holds a copy of the given encryption - * info. The resulting pointer should be either freed using av_free or given - * to av_packet_add_side_data(). - * - * @return The new side-data pointer, or NULL. - */ -uint8_t *av_encryption_info_add_side_data( - const AVEncryptionInfo *info, size_t *side_data_size); - - -/** - * Allocates an AVEncryptionInitInfo structure and sub-pointers to hold the - * given sizes. This will allocate pointers and set all the fields. - * - * @return The new AVEncryptionInitInfo structure, or NULL on error. - */ -AVEncryptionInitInfo *av_encryption_init_info_alloc( - uint32_t system_id_size, uint32_t num_key_ids, uint32_t key_id_size, uint32_t data_size); - -/** - * Frees the given encryption init info object. This MUST NOT be used to free - * the side-data data pointer, that should use normal side-data methods. - */ -void av_encryption_init_info_free(AVEncryptionInitInfo* info); - -/** - * Creates a copy of the AVEncryptionInitInfo that is contained in the given - * side data. The resulting object should be passed to - * av_encryption_init_info_free() when done. - * - * @return The new AVEncryptionInitInfo structure, or NULL on error. - */ -AVEncryptionInitInfo *av_encryption_init_info_get_side_data( - const uint8_t* side_data, size_t side_data_size); - -/** - * Allocates and initializes side data that holds a copy of the given encryption - * init info. The resulting pointer should be either freed using av_free or - * given to av_packet_add_side_data(). - * - * @return The new side-data pointer, or NULL. - */ -uint8_t *av_encryption_init_info_add_side_data( - const AVEncryptionInitInfo *info, size_t *side_data_size); - -#endif /* AVUTIL_ENCRYPTION_INFO_H */ diff --git a/prebuilts/arm/include/libavutil/error.h b/prebuilts/arm/include/libavutil/error.h deleted file mode 100644 index 71df4da..0000000 --- a/prebuilts/arm/include/libavutil/error.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * error code definitions - */ - -#ifndef AVUTIL_ERROR_H -#define AVUTIL_ERROR_H - -#include -#include - -/** - * @addtogroup lavu_error - * - * @{ - */ - - -/* error handling */ -#if EDOM > 0 -#define AVERROR(e) (-(e)) ///< Returns a negative error code from a POSIX error code, to return from library functions. -#define AVUNERROR(e) (-(e)) ///< Returns a POSIX error code from a library function error return value. -#else -/* Some platforms have E* and errno already negated. */ -#define AVERROR(e) (e) -#define AVUNERROR(e) (e) -#endif - -#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d)) - -#define AVERROR_BSF_NOT_FOUND FFERRTAG(0xF8,'B','S','F') ///< Bitstream filter not found -#define AVERROR_BUG FFERRTAG( 'B','U','G','!') ///< Internal bug, also see AVERROR_BUG2 -#define AVERROR_BUFFER_TOO_SMALL FFERRTAG( 'B','U','F','S') ///< Buffer too small -#define AVERROR_DECODER_NOT_FOUND FFERRTAG(0xF8,'D','E','C') ///< Decoder not found -#define AVERROR_DEMUXER_NOT_FOUND FFERRTAG(0xF8,'D','E','M') ///< Demuxer not found -#define AVERROR_ENCODER_NOT_FOUND FFERRTAG(0xF8,'E','N','C') ///< Encoder not found -#define AVERROR_EOF FFERRTAG( 'E','O','F',' ') ///< End of file -#define AVERROR_EXIT FFERRTAG( 'E','X','I','T') ///< Immediate exit was requested; the called function should not be restarted -#define AVERROR_EXTERNAL FFERRTAG( 'E','X','T',' ') ///< Generic error in an external library -#define AVERROR_FILTER_NOT_FOUND FFERRTAG(0xF8,'F','I','L') ///< Filter not found -#define AVERROR_INVALIDDATA FFERRTAG( 'I','N','D','A') ///< Invalid data found when processing input -#define AVERROR_MUXER_NOT_FOUND FFERRTAG(0xF8,'M','U','X') ///< Muxer not found -#define AVERROR_OPTION_NOT_FOUND FFERRTAG(0xF8,'O','P','T') ///< Option not found -#define AVERROR_PATCHWELCOME FFERRTAG( 'P','A','W','E') ///< Not yet implemented in FFmpeg, patches welcome -#define AVERROR_PROTOCOL_NOT_FOUND FFERRTAG(0xF8,'P','R','O') ///< Protocol not found - -#define AVERROR_STREAM_NOT_FOUND FFERRTAG(0xF8,'S','T','R') ///< Stream not found -/** - * This is semantically identical to AVERROR_BUG - * it has been introduced in Libav after our AVERROR_BUG and with a modified value. - */ -#define AVERROR_BUG2 FFERRTAG( 'B','U','G',' ') -#define AVERROR_UNKNOWN FFERRTAG( 'U','N','K','N') ///< Unknown error, typically from an external library -#define AVERROR_EXPERIMENTAL (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it. -#define AVERROR_INPUT_CHANGED (-0x636e6701) ///< Input changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_OUTPUT_CHANGED) -#define AVERROR_OUTPUT_CHANGED (-0x636e6702) ///< Output changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_INPUT_CHANGED) -/* HTTP & RTSP errors */ -#define AVERROR_HTTP_BAD_REQUEST FFERRTAG(0xF8,'4','0','0') -#define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8,'4','0','1') -#define AVERROR_HTTP_FORBIDDEN FFERRTAG(0xF8,'4','0','3') -#define AVERROR_HTTP_NOT_FOUND FFERRTAG(0xF8,'4','0','4') -#define AVERROR_HTTP_OTHER_4XX FFERRTAG(0xF8,'4','X','X') -#define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8,'5','X','X') - -#define AV_ERROR_MAX_STRING_SIZE 64 - -/** - * Put a description of the AVERROR code errnum in errbuf. - * In case of failure the global variable errno is set to indicate the - * error. Even in case of failure av_strerror() will print a generic - * error message indicating the errnum provided to errbuf. - * - * @param errnum error code to describe - * @param errbuf buffer to which description is written - * @param errbuf_size the size in bytes of errbuf - * @return 0 on success, a negative value if a description for errnum - * cannot be found - */ -int av_strerror(int errnum, char *errbuf, size_t errbuf_size); - -/** - * Fill the provided buffer with a string containing an error string - * corresponding to the AVERROR code errnum. - * - * @param errbuf a buffer - * @param errbuf_size size in bytes of errbuf - * @param errnum error code to describe - * @return the buffer in input, filled with the error description - * @see av_strerror() - */ -static inline char *av_make_error_string(char *errbuf, size_t errbuf_size, int errnum) -{ - av_strerror(errnum, errbuf, errbuf_size); - return errbuf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_err2str(errnum) \ - av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum) - -/** - * @} - */ - -#endif /* AVUTIL_ERROR_H */ diff --git a/prebuilts/arm/include/libavutil/eval.h b/prebuilts/arm/include/libavutil/eval.h deleted file mode 100644 index 068c62c..0000000 --- a/prebuilts/arm/include/libavutil/eval.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2002 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * simple arithmetic expression evaluator - */ - -#ifndef AVUTIL_EVAL_H -#define AVUTIL_EVAL_H - -#include "avutil.h" - -typedef struct AVExpr AVExpr; - -/** - * Parse and evaluate an expression. - * Note, this is significantly slower than av_expr_eval(). - * - * @param res a pointer to a double where is put the result value of - * the expression, or NAN in case of error - * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" - * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} - * @param const_values a zero terminated array of values for the identifiers from const_names - * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers - * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 - * @param log_ctx parent logging context - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_expr_parse_and_eval(double *res, const char *s, - const char * const *const_names, const double *const_values, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - void *opaque, int log_offset, void *log_ctx); - -/** - * Parse an expression. - * - * @param expr a pointer where is put an AVExpr containing the parsed - * value in case of successful parsing, or NULL otherwise. - * The pointed to AVExpr must be freed with av_expr_free() by the user - * when it is not needed anymore. - * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" - * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} - * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers - * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments - * @param log_ctx parent logging context - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_expr_parse(AVExpr **expr, const char *s, - const char * const *const_names, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - int log_offset, void *log_ctx); - -/** - * Evaluate a previously parsed expression. - * - * @param const_values a zero terminated array of values for the identifiers from av_expr_parse() const_names - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 - * @return the value of the expression - */ -double av_expr_eval(AVExpr *e, const double *const_values, void *opaque); - -/** - * Track the presence of variables and their number of occurrences in a parsed expression - * - * @param counter a zero-initialized array where the count of each variable will be stored - * @param size size of array - * @return 0 on success, a negative value indicates that no expression or array was passed - * or size was zero - */ -int av_expr_count_vars(AVExpr *e, unsigned *counter, int size); - -/** - * Track the presence of user provided functions and their number of occurrences - * in a parsed expression. - * - * @param counter a zero-initialized array where the count of each function will be stored - * if you passed 5 functions with 2 arguments to av_expr_parse() - * then for arg=2 this will use upto 5 entries. - * @param size size of array - * @param arg number of arguments the counted functions have - * @return 0 on success, a negative value indicates that no expression or array was passed - * or size was zero - */ -int av_expr_count_func(AVExpr *e, unsigned *counter, int size, int arg); - -/** - * Free a parsed expression previously created with av_expr_parse(). - */ -void av_expr_free(AVExpr *e); - -/** - * Parse the string in numstr and return its value as a double. If - * the string is empty, contains only whitespaces, or does not contain - * an initial substring that has the expected syntax for a - * floating-point number, no conversion is performed. In this case, - * returns a value of zero and the value returned in tail is the value - * of numstr. - * - * @param numstr a string representing a number, may contain one of - * the International System number postfixes, for example 'K', 'M', - * 'G'. If 'i' is appended after the postfix, powers of 2 are used - * instead of powers of 10. The 'B' postfix multiplies the value by - * 8, and can be appended after another postfix or used alone. This - * allows using for example 'KB', 'MiB', 'G' and 'B' as postfix. - * @param tail if non-NULL puts here the pointer to the char next - * after the last parsed character - */ -double av_strtod(const char *numstr, char **tail); - -#endif /* AVUTIL_EVAL_H */ diff --git a/prebuilts/arm/include/libavutil/ffversion.h b/prebuilts/arm/include/libavutil/ffversion.h deleted file mode 100644 index 7c7cb88..0000000 --- a/prebuilts/arm/include/libavutil/ffversion.h +++ /dev/null @@ -1,5 +0,0 @@ -/* Automatically generated by version.sh, do not manually edit! */ -#ifndef AVUTIL_FFVERSION_H -#define AVUTIL_FFVERSION_H -#define FFMPEG_VERSION "n4.4.2" -#endif /* AVUTIL_FFVERSION_H */ diff --git a/prebuilts/arm/include/libavutil/fifo.h b/prebuilts/arm/include/libavutil/fifo.h deleted file mode 100644 index dc7bc6f..0000000 --- a/prebuilts/arm/include/libavutil/fifo.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * a very simple circular buffer FIFO implementation - */ - -#ifndef AVUTIL_FIFO_H -#define AVUTIL_FIFO_H - -#include -#include "avutil.h" -#include "attributes.h" - -typedef struct AVFifoBuffer { - uint8_t *buffer; - uint8_t *rptr, *wptr, *end; - uint32_t rndx, wndx; -} AVFifoBuffer; - -/** - * Initialize an AVFifoBuffer. - * @param size of FIFO - * @return AVFifoBuffer or NULL in case of memory allocation failure - */ -AVFifoBuffer *av_fifo_alloc(unsigned int size); - -/** - * Initialize an AVFifoBuffer. - * @param nmemb number of elements - * @param size size of the single element - * @return AVFifoBuffer or NULL in case of memory allocation failure - */ -AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size); - -/** - * Free an AVFifoBuffer. - * @param f AVFifoBuffer to free - */ -void av_fifo_free(AVFifoBuffer *f); - -/** - * Free an AVFifoBuffer and reset pointer to NULL. - * @param f AVFifoBuffer to free - */ -void av_fifo_freep(AVFifoBuffer **f); - -/** - * Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied. - * @param f AVFifoBuffer to reset - */ -void av_fifo_reset(AVFifoBuffer *f); - -/** - * Return the amount of data in bytes in the AVFifoBuffer, that is the - * amount of data you can read from it. - * @param f AVFifoBuffer to read from - * @return size - */ -int av_fifo_size(const AVFifoBuffer *f); - -/** - * Return the amount of space in bytes in the AVFifoBuffer, that is the - * amount of data you can write into it. - * @param f AVFifoBuffer to write into - * @return size - */ -int av_fifo_space(const AVFifoBuffer *f); - -/** - * Feed data at specific position from an AVFifoBuffer to a user-supplied callback. - * Similar as av_fifo_gereric_read but without discarding data. - * @param f AVFifoBuffer to read from - * @param offset offset from current read position - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination - */ -int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_size, void (*func)(void*, void*, int)); - -/** - * Feed data from an AVFifoBuffer to a user-supplied callback. - * Similar as av_fifo_gereric_read but without discarding data. - * @param f AVFifoBuffer to read from - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination - */ -int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); - -/** - * Feed data from an AVFifoBuffer to a user-supplied callback. - * @param f AVFifoBuffer to read from - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination - */ -int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); - -/** - * Feed data from a user-supplied callback to an AVFifoBuffer. - * @param f AVFifoBuffer to write to - * @param src data source; non-const since it may be used as a - * modifiable context by the function defined in func - * @param size number of bytes to write - * @param func generic write function; the first parameter is src, - * the second is dest_buf, the third is dest_buf_size. - * func must return the number of bytes written to dest_buf, or <= 0 to - * indicate no more data available to write. - * If func is NULL, src is interpreted as a simple byte array for source data. - * @return the number of bytes written to the FIFO - */ -int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int)); - -/** - * Resize an AVFifoBuffer. - * In case of reallocation failure, the old FIFO is kept unchanged. - * - * @param f AVFifoBuffer to resize - * @param size new AVFifoBuffer size in bytes - * @return <0 for failure, >=0 otherwise - */ -int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); - -/** - * Enlarge an AVFifoBuffer. - * In case of reallocation failure, the old FIFO is kept unchanged. - * The new fifo size may be larger than the requested size. - * - * @param f AVFifoBuffer to resize - * @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size() - * @return <0 for failure, >=0 otherwise - */ -int av_fifo_grow(AVFifoBuffer *f, unsigned int additional_space); - -/** - * Read and discard the specified amount of data from an AVFifoBuffer. - * @param f AVFifoBuffer to read from - * @param size amount of data to read in bytes - */ -void av_fifo_drain(AVFifoBuffer *f, int size); - -/** - * Return a pointer to the data stored in a FIFO buffer at a certain offset. - * The FIFO buffer is not modified. - * - * @param f AVFifoBuffer to peek at, f must be non-NULL - * @param offs an offset in bytes, its absolute value must be less - * than the used buffer size or the returned pointer will - * point outside to the buffer data. - * The used buffer size can be checked with av_fifo_size(). - */ -static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs) -{ - uint8_t *ptr = f->rptr + offs; - if (ptr >= f->end) - ptr = f->buffer + (ptr - f->end); - else if (ptr < f->buffer) - ptr = f->end - (f->buffer - ptr); - return ptr; -} - -#endif /* AVUTIL_FIFO_H */ diff --git a/prebuilts/arm/include/libavutil/file.h b/prebuilts/arm/include/libavutil/file.h deleted file mode 100644 index 3ef4a60..0000000 --- a/prebuilts/arm/include/libavutil/file.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_FILE_H -#define AVUTIL_FILE_H - -#include - -#include "avutil.h" - -/** - * @file - * Misc file utilities. - */ - -/** - * Read the file with name filename, and put its content in a newly - * allocated buffer or map it with mmap() when available. - * In case of success set *bufptr to the read or mmapped buffer, and - * *size to the size in bytes of the buffer in *bufptr. - * Unlike mmap this function succeeds with zero sized files, in this - * case *bufptr will be set to NULL and *size will be set to 0. - * The returned buffer must be released with av_file_unmap(). - * - * @param log_offset loglevel offset used for logging - * @param log_ctx context used for logging - * @return a non negative number in case of success, a negative value - * corresponding to an AVERROR error code in case of failure - */ -av_warn_unused_result -int av_file_map(const char *filename, uint8_t **bufptr, size_t *size, - int log_offset, void *log_ctx); - -/** - * Unmap or free the buffer bufptr created by av_file_map(). - * - * @param size size in bytes of bufptr, must be the same as returned - * by av_file_map() - */ -void av_file_unmap(uint8_t *bufptr, size_t size); - -/** - * Wrapper to work around the lack of mkstemp() on mingw. - * Also, tries to create file in /tmp first, if possible. - * *prefix can be a character constant; *filename will be allocated internally. - * @return file descriptor of opened file (or negative value corresponding to an - * AVERROR code on error) - * and opened file name in **filename. - * @note On very old libcs it is necessary to set a secure umask before - * calling this, av_tempfile() can't call umask itself as it is used in - * libraries and could interfere with the calling application. - * @deprecated as fd numbers cannot be passed saftely between libs on some platforms - */ -int av_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx); - -#endif /* AVUTIL_FILE_H */ diff --git a/prebuilts/arm/include/libavutil/film_grain_params.h b/prebuilts/arm/include/libavutil/film_grain_params.h deleted file mode 100644 index 7629e3a..0000000 --- a/prebuilts/arm/include/libavutil/film_grain_params.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_FILM_GRAIN_PARAMS_H -#define AVUTIL_FILM_GRAIN_PARAMS_H - -#include "frame.h" - -enum AVFilmGrainParamsType { - AV_FILM_GRAIN_PARAMS_NONE = 0, - - /** - * The union is valid when interpreted as AVFilmGrainAOMParams (codec.aom) - */ - AV_FILM_GRAIN_PARAMS_AV1, -}; - -/** - * This structure describes how to handle film grain synthesis for AOM codecs. - * - * @note The struct must be allocated as part of AVFilmGrainParams using - * av_film_grain_params_alloc(). Its size is not a part of the public ABI. - */ -typedef struct AVFilmGrainAOMParams { - /** - * Number of points, and the scale and value for each point of the - * piecewise linear scaling function for the uma plane. - */ - int num_y_points; - uint8_t y_points[14][2 /* value, scaling */]; - - /** - * Signals whether to derive the chroma scaling function from the luma. - * Not equivalent to copying the luma values and scales. - */ - int chroma_scaling_from_luma; - - /** - * If chroma_scaling_from_luma is set to 0, signals the chroma scaling - * function parameters. - */ - int num_uv_points[2 /* cb, cr */]; - uint8_t uv_points[2 /* cb, cr */][10][2 /* value, scaling */]; - - /** - * Specifies the shift applied to the chroma components. For AV1, its within - * [8; 11] and determines the range and quantization of the film grain. - */ - int scaling_shift; - - /** - * Specifies the auto-regression lag. - */ - int ar_coeff_lag; - - /** - * Luma auto-regression coefficients. The number of coefficients is given by - * 2 * ar_coeff_lag * (ar_coeff_lag + 1). - */ - int8_t ar_coeffs_y[24]; - - /** - * Chroma auto-regression coefficients. The number of coefficients is given by - * 2 * ar_coeff_lag * (ar_coeff_lag + 1) + !!num_y_points. - */ - int8_t ar_coeffs_uv[2 /* cb, cr */][25]; - - /** - * Specifies the range of the auto-regressive coefficients. Values of 6, - * 7, 8 and so on represent a range of [-2, 2), [-1, 1), [-0.5, 0.5) and - * so on. For AV1 must be between 6 and 9. - */ - int ar_coeff_shift; - - /** - * Signals the down shift applied to the generated gaussian numbers during - * synthesis. - */ - int grain_scale_shift; - - /** - * Specifies the luma/chroma multipliers for the index to the component - * scaling function. - */ - int uv_mult[2 /* cb, cr */]; - int uv_mult_luma[2 /* cb, cr */]; - - /** - * Offset used for component scaling function. For AV1 its a 9-bit value - * with a range [-256, 255] - */ - int uv_offset[2 /* cb, cr */]; - - /** - * Signals whether to overlap film grain blocks. - */ - int overlap_flag; - - /** - * Signals to clip to limited color levels after film grain application. - */ - int limit_output_range; -} AVFilmGrainAOMParams; - -/** - * This structure describes how to handle film grain synthesis in video - * for specific codecs. Must be present on every frame where film grain is - * meant to be synthesised for correct presentation. - * - * @note The struct must be allocated with av_film_grain_params_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVFilmGrainParams { - /** - * Specifies the codec for which this structure is valid. - */ - enum AVFilmGrainParamsType type; - - /** - * Seed to use for the synthesis process, if the codec allows for it. - */ - uint64_t seed; - - /** - * Additional fields may be added both here and in any structure included. - * If a codec's film grain structure differs slightly over another - * codec's, fields within may change meaning depending on the type. - */ - union { - AVFilmGrainAOMParams aom; - } codec; -} AVFilmGrainParams; - -/** - * Allocate an AVFilmGrainParams structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * If size is not NULL it will be set to the number of bytes allocated. - * - * @return An AVFilmGrainParams filled with default values or NULL - * on failure. - */ -AVFilmGrainParams *av_film_grain_params_alloc(size_t *size); - -/** - * Allocate a complete AVFilmGrainParams and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVFilmGrainParams structure to be filled by caller. - */ -AVFilmGrainParams *av_film_grain_params_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_FILM_GRAIN_PARAMS_H */ diff --git a/prebuilts/arm/include/libavutil/frame.h b/prebuilts/arm/include/libavutil/frame.h deleted file mode 100644 index 7d1f8e2..0000000 --- a/prebuilts/arm/include/libavutil/frame.h +++ /dev/null @@ -1,997 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_frame - * reference-counted frame API - */ - -#ifndef AVUTIL_FRAME_H -#define AVUTIL_FRAME_H - -#include -#include - -#include "avutil.h" -#include "buffer.h" -#include "dict.h" -#include "rational.h" -#include "samplefmt.h" -#include "pixfmt.h" -#include "version.h" - - -/** - * @defgroup lavu_frame AVFrame - * @ingroup lavu_data - * - * @{ - * AVFrame is an abstraction for reference-counted raw multimedia data. - */ - -enum AVFrameSideDataType { - /** - * The data is the AVPanScan struct defined in libavcodec. - */ - AV_FRAME_DATA_PANSCAN, - /** - * ATSC A53 Part 4 Closed Captions. - * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data. - * The number of bytes of CC data is AVFrameSideData.size. - */ - AV_FRAME_DATA_A53_CC, - /** - * Stereoscopic 3d metadata. - * The data is the AVStereo3D struct defined in libavutil/stereo3d.h. - */ - AV_FRAME_DATA_STEREO3D, - /** - * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h. - */ - AV_FRAME_DATA_MATRIXENCODING, - /** - * Metadata relevant to a downmix procedure. - * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h. - */ - AV_FRAME_DATA_DOWNMIX_INFO, - /** - * ReplayGain information in the form of the AVReplayGain struct. - */ - AV_FRAME_DATA_REPLAYGAIN, - /** - * This side data contains a 3x3 transformation matrix describing an affine - * transformation that needs to be applied to the frame for correct - * presentation. - * - * See libavutil/display.h for a detailed description of the data. - */ - AV_FRAME_DATA_DISPLAYMATRIX, - /** - * Active Format Description data consisting of a single byte as specified - * in ETSI TS 101 154 using AVActiveFormatDescription enum. - */ - AV_FRAME_DATA_AFD, - /** - * Motion vectors exported by some codecs (on demand through the export_mvs - * flag set in the libavcodec AVCodecContext flags2 option). - * The data is the AVMotionVector struct defined in - * libavutil/motion_vector.h. - */ - AV_FRAME_DATA_MOTION_VECTORS, - /** - * Recommmends skipping the specified number of samples. This is exported - * only if the "skip_manual" AVOption is set in libavcodec. - * This has the same format as AV_PKT_DATA_SKIP_SAMPLES. - * @code - * u32le number of samples to skip from start of this packet - * u32le number of samples to skip from end of this packet - * u8 reason for start skip - * u8 reason for end skip (0=padding silence, 1=convergence) - * @endcode - */ - AV_FRAME_DATA_SKIP_SAMPLES, - /** - * This side data must be associated with an audio frame and corresponds to - * enum AVAudioServiceType defined in avcodec.h. - */ - AV_FRAME_DATA_AUDIO_SERVICE_TYPE, - /** - * Mastering display metadata associated with a video frame. The payload is - * an AVMasteringDisplayMetadata type and contains information about the - * mastering display color volume. - */ - AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, - /** - * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. - * This is set on the first frame of a GOP that has a temporal reference of 0. - */ - AV_FRAME_DATA_GOP_TIMECODE, - - /** - * The data represents the AVSphericalMapping structure defined in - * libavutil/spherical.h. - */ - AV_FRAME_DATA_SPHERICAL, - - /** - * Content light level (based on CTA-861.3). This payload contains data in - * the form of the AVContentLightMetadata struct. - */ - AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, - - /** - * The data contains an ICC profile as an opaque octet buffer following the - * format described by ISO 15076-1 with an optional name defined in the - * metadata key entry "name". - */ - AV_FRAME_DATA_ICC_PROFILE, - -#if FF_API_FRAME_QP - /** - * Implementation-specific description of the format of AV_FRAME_QP_TABLE_DATA. - * The contents of this side data are undocumented and internal; use - * av_frame_set_qp_table() and av_frame_get_qp_table() to access this in a - * meaningful way instead. - */ - AV_FRAME_DATA_QP_TABLE_PROPERTIES, - - /** - * Raw QP table data. Its format is described by - * AV_FRAME_DATA_QP_TABLE_PROPERTIES. Use av_frame_set_qp_table() and - * av_frame_get_qp_table() to access this instead. - */ - AV_FRAME_DATA_QP_TABLE_DATA, -#endif - - /** - * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t - * where the first uint32_t describes how many (1-3) of the other timecodes are used. - * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() - * function in libavutil/timecode.h. - */ - AV_FRAME_DATA_S12M_TIMECODE, - - /** - * HDR dynamic metadata associated with a video frame. The payload is - * an AVDynamicHDRPlus type and contains information for color - * volume transform - application 4 of SMPTE 2094-40:2016 standard. - */ - AV_FRAME_DATA_DYNAMIC_HDR_PLUS, - - /** - * Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of - * array element is implied by AVFrameSideData.size / AVRegionOfInterest.self_size. - */ - AV_FRAME_DATA_REGIONS_OF_INTEREST, - - /** - * Encoding parameters for a video frame, as described by AVVideoEncParams. - */ - AV_FRAME_DATA_VIDEO_ENC_PARAMS, - - /** - * User data unregistered metadata associated with a video frame. - * This is the H.26[45] UDU SEI message, and shouldn't be used for any other purpose - * The data is stored as uint8_t in AVFrameSideData.data which is 16 bytes of - * uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of user_data_payload_byte. - */ - AV_FRAME_DATA_SEI_UNREGISTERED, - - /** - * Film grain parameters for a frame, described by AVFilmGrainParams. - * Must be present for every frame which should have film grain applied. - */ - AV_FRAME_DATA_FILM_GRAIN_PARAMS, -}; - -enum AVActiveFormatDescription { - AV_AFD_SAME = 8, - AV_AFD_4_3 = 9, - AV_AFD_16_9 = 10, - AV_AFD_14_9 = 11, - AV_AFD_4_3_SP_14_9 = 13, - AV_AFD_16_9_SP_14_9 = 14, - AV_AFD_SP_4_3 = 15, -}; - - -/** - * Structure to hold side data for an AVFrame. - * - * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added - * to the end with a minor bump. - */ -typedef struct AVFrameSideData { - enum AVFrameSideDataType type; - uint8_t *data; -#if FF_API_BUFFER_SIZE_T - int size; -#else - size_t size; -#endif - AVDictionary *metadata; - AVBufferRef *buf; -} AVFrameSideData; - -/** - * Structure describing a single Region Of Interest. - * - * When multiple regions are defined in a single side-data block, they - * should be ordered from most to least important - some encoders are only - * capable of supporting a limited number of distinct regions, so will have - * to truncate the list. - * - * When overlapping regions are defined, the first region containing a given - * area of the frame applies. - */ -typedef struct AVRegionOfInterest { - /** - * Must be set to the size of this data structure (that is, - * sizeof(AVRegionOfInterest)). - */ - uint32_t self_size; - /** - * Distance in pixels from the top edge of the frame to the top and - * bottom edges and from the left edge of the frame to the left and - * right edges of the rectangle defining this region of interest. - * - * The constraints on a region are encoder dependent, so the region - * actually affected may be slightly larger for alignment or other - * reasons. - */ - int top; - int bottom; - int left; - int right; - /** - * Quantisation offset. - * - * Must be in the range -1 to +1. A value of zero indicates no quality - * change. A negative value asks for better quality (less quantisation), - * while a positive value asks for worse quality (greater quantisation). - * - * The range is calibrated so that the extreme values indicate the - * largest possible offset - if the rest of the frame is encoded with the - * worst possible quality, an offset of -1 indicates that this region - * should be encoded with the best possible quality anyway. Intermediate - * values are then interpolated in some codec-dependent way. - * - * For example, in 10-bit H.264 the quantisation parameter varies between - * -12 and 51. A typical qoffset value of -1/10 therefore indicates that - * this region should be encoded with a QP around one-tenth of the full - * range better than the rest of the frame. So, if most of the frame - * were to be encoded with a QP of around 30, this region would get a QP - * of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3). - * An extreme value of -1 would indicate that this region should be - * encoded with the best possible quality regardless of the treatment of - * the rest of the frame - that is, should be encoded at a QP of -12. - */ - AVRational qoffset; -} AVRegionOfInterest; - -/** - * This structure describes decoded (raw) audio or video data. - * - * AVFrame must be allocated using av_frame_alloc(). Note that this only - * allocates the AVFrame itself, the buffers for the data must be managed - * through other means (see below). - * AVFrame must be freed with av_frame_free(). - * - * AVFrame is typically allocated once and then reused multiple times to hold - * different data (e.g. a single AVFrame to hold frames received from a - * decoder). In such a case, av_frame_unref() will free any references held by - * the frame and reset it to its original clean state before it - * is reused again. - * - * The data described by an AVFrame is usually reference counted through the - * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / - * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at - * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, - * every single data plane must be contained in one of the buffers in - * AVFrame.buf or AVFrame.extended_buf. - * There may be a single buffer for all the data, or one separate buffer for - * each plane, or anything in between. - * - * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added - * to the end with a minor bump. - * - * Fields can be accessed through AVOptions, the name string used, matches the - * C structure field name for fields accessible through AVOptions. The AVClass - * for AVFrame can be obtained from avcodec_get_frame_class() - */ -typedef struct AVFrame { -#define AV_NUM_DATA_POINTERS 8 - /** - * pointer to the picture/channel planes. - * This might be different from the first allocated byte - * - * Some decoders access areas outside 0,0 - width,height, please - * see avcodec_align_dimensions2(). Some filters and swscale can read - * up to 16 bytes beyond the planes, if these filters are to be used, - * then 16 extra bytes must be allocated. - * - * NOTE: Except for hwaccel formats, pointers not needed by the format - * MUST be set to NULL. - */ - uint8_t *data[AV_NUM_DATA_POINTERS]; - - /** - * For video, size in bytes of each picture line. - * For audio, size in bytes of each plane. - * - * For audio, only linesize[0] may be set. For planar audio, each channel - * plane must be the same size. - * - * For video the linesizes should be multiples of the CPUs alignment - * preference, this is 16 or 32 for modern desktop CPUs. - * Some code requires such alignment other code can be slower without - * correct alignment, for yet other it makes no difference. - * - * @note The linesize may be larger than the size of usable data -- there - * may be extra padding present for performance reasons. - */ - int linesize[AV_NUM_DATA_POINTERS]; - - /** - * pointers to the data planes/channels. - * - * For video, this should simply point to data[]. - * - * For planar audio, each channel has a separate data pointer, and - * linesize[0] contains the size of each channel buffer. - * For packed audio, there is just one data pointer, and linesize[0] - * contains the total size of the buffer for all channels. - * - * Note: Both data and extended_data should always be set in a valid frame, - * but for planar audio with more channels that can fit in data, - * extended_data must be used in order to access all channels. - */ - uint8_t **extended_data; - - /** - * @name Video dimensions - * Video frames only. The coded dimensions (in pixels) of the video frame, - * i.e. the size of the rectangle that contains some well-defined values. - * - * @note The part of the frame intended for display/presentation is further - * restricted by the @ref cropping "Cropping rectangle". - * @{ - */ - int width, height; - /** - * @} - */ - - /** - * number of audio samples (per channel) described by this frame - */ - int nb_samples; - - /** - * format of the frame, -1 if unknown or unset - * Values correspond to enum AVPixelFormat for video frames, - * enum AVSampleFormat for audio) - */ - int format; - - /** - * 1 -> keyframe, 0-> not - */ - int key_frame; - - /** - * Picture type of the frame. - */ - enum AVPictureType pict_type; - - /** - * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified. - */ - AVRational sample_aspect_ratio; - - /** - * Presentation timestamp in time_base units (time when frame should be shown to user). - */ - int64_t pts; - -#if FF_API_PKT_PTS - /** - * PTS copied from the AVPacket that was decoded to produce this frame. - * @deprecated use the pts field instead - */ - attribute_deprecated - int64_t pkt_pts; -#endif - - /** - * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used) - * This is also the Presentation time of this AVFrame calculated from - * only AVPacket.dts values without pts values. - */ - int64_t pkt_dts; - - /** - * picture number in bitstream order - */ - int coded_picture_number; - /** - * picture number in display order - */ - int display_picture_number; - - /** - * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) - */ - int quality; - - /** - * for some private data of the user - */ - void *opaque; - -#if FF_API_ERROR_FRAME - /** - * @deprecated unused - */ - attribute_deprecated - uint64_t error[AV_NUM_DATA_POINTERS]; -#endif - - /** - * When decoding, this signals how much the picture must be delayed. - * extra_delay = repeat_pict / (2*fps) - */ - int repeat_pict; - - /** - * The content of the picture is interlaced. - */ - int interlaced_frame; - - /** - * If the content is interlaced, is top field displayed first. - */ - int top_field_first; - - /** - * Tell user application that palette has changed from previous frame. - */ - int palette_has_changed; - - /** - * reordered opaque 64 bits (generally an integer or a double precision float - * PTS but can be anything). - * The user sets AVCodecContext.reordered_opaque to represent the input at - * that time, - * the decoder reorders values as needed and sets AVFrame.reordered_opaque - * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque - */ - int64_t reordered_opaque; - - /** - * Sample rate of the audio data. - */ - int sample_rate; - - /** - * Channel layout of the audio data. - */ - uint64_t channel_layout; - - /** - * AVBuffer references backing the data for this frame. If all elements of - * this array are NULL, then this frame is not reference counted. This array - * must be filled contiguously -- if buf[i] is non-NULL then buf[j] must - * also be non-NULL for all j < i. - * - * There may be at most one AVBuffer per data plane, so for video this array - * always contains all the references. For planar audio with more than - * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in - * this array. Then the extra AVBufferRef pointers are stored in the - * extended_buf array. - */ - AVBufferRef *buf[AV_NUM_DATA_POINTERS]; - - /** - * For planar audio which requires more than AV_NUM_DATA_POINTERS - * AVBufferRef pointers, this array will hold all the references which - * cannot fit into AVFrame.buf. - * - * Note that this is different from AVFrame.extended_data, which always - * contains all the pointers. This array only contains the extra pointers, - * which cannot fit into AVFrame.buf. - * - * This array is always allocated using av_malloc() by whoever constructs - * the frame. It is freed in av_frame_unref(). - */ - AVBufferRef **extended_buf; - /** - * Number of elements in extended_buf. - */ - int nb_extended_buf; - - AVFrameSideData **side_data; - int nb_side_data; - -/** - * @defgroup lavu_frame_flags AV_FRAME_FLAGS - * @ingroup lavu_frame - * Flags describing additional frame properties. - * - * @{ - */ - -/** - * The frame data may be corrupted, e.g. due to decoding errors. - */ -#define AV_FRAME_FLAG_CORRUPT (1 << 0) -/** - * A flag to mark the frames which need to be decoded, but shouldn't be output. - */ -#define AV_FRAME_FLAG_DISCARD (1 << 2) -/** - * @} - */ - - /** - * Frame flags, a combination of @ref lavu_frame_flags - */ - int flags; - - /** - * MPEG vs JPEG YUV range. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorRange color_range; - - enum AVColorPrimaries color_primaries; - - enum AVColorTransferCharacteristic color_trc; - - /** - * YUV colorspace type. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorSpace colorspace; - - enum AVChromaLocation chroma_location; - - /** - * frame timestamp estimated using various heuristics, in stream time base - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int64_t best_effort_timestamp; - - /** - * reordered pos from the last AVPacket that has been input into the decoder - * - encoding: unused - * - decoding: Read by user. - */ - int64_t pkt_pos; - - /** - * duration of the corresponding packet, expressed in - * AVStream->time_base units, 0 if unknown. - * - encoding: unused - * - decoding: Read by user. - */ - int64_t pkt_duration; - - /** - * metadata. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - AVDictionary *metadata; - - /** - * decode error flags of the frame, set to a combination of - * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there - * were errors during the decoding. - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int decode_error_flags; -#define FF_DECODE_ERROR_INVALID_BITSTREAM 1 -#define FF_DECODE_ERROR_MISSING_REFERENCE 2 -#define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4 -#define FF_DECODE_ERROR_DECODE_SLICES 8 - - /** - * number of audio channels, only used for audio. - * - encoding: unused - * - decoding: Read by user. - */ - int channels; - - /** - * size of the corresponding packet containing the compressed - * frame. - * It is set to a negative value if unknown. - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int pkt_size; - -#if FF_API_FRAME_QP - /** - * QP table - */ - attribute_deprecated - int8_t *qscale_table; - /** - * QP store stride - */ - attribute_deprecated - int qstride; - - attribute_deprecated - int qscale_type; - - attribute_deprecated - AVBufferRef *qp_table_buf; -#endif - /** - * For hwaccel-format frames, this should be a reference to the - * AVHWFramesContext describing the frame. - */ - AVBufferRef *hw_frames_ctx; - - /** - * AVBufferRef for free use by the API user. FFmpeg will never check the - * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when - * the frame is unreferenced. av_frame_copy_props() calls create a new - * reference with av_buffer_ref() for the target frame's opaque_ref field. - * - * This is unrelated to the opaque field, although it serves a similar - * purpose. - */ - AVBufferRef *opaque_ref; - - /** - * @anchor cropping - * @name Cropping - * Video frames only. The number of pixels to discard from the the - * top/bottom/left/right border of the frame to obtain the sub-rectangle of - * the frame intended for presentation. - * @{ - */ - size_t crop_top; - size_t crop_bottom; - size_t crop_left; - size_t crop_right; - /** - * @} - */ - - /** - * AVBufferRef for internal use by a single libav* library. - * Must not be used to transfer data between libraries. - * Has to be NULL when ownership of the frame leaves the respective library. - * - * Code outside the FFmpeg libs should never check or change the contents of the buffer ref. - * - * FFmpeg calls av_buffer_unref() on it when the frame is unreferenced. - * av_frame_copy_props() calls create a new reference with av_buffer_ref() - * for the target frame's private_ref field. - */ - AVBufferRef *private_ref; -} AVFrame; - -#if FF_API_FRAME_GET_SET -/** - * Accessors for some AVFrame fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame); -attribute_deprecated -void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val); -attribute_deprecated -int64_t av_frame_get_pkt_duration (const AVFrame *frame); -attribute_deprecated -void av_frame_set_pkt_duration (AVFrame *frame, int64_t val); -attribute_deprecated -int64_t av_frame_get_pkt_pos (const AVFrame *frame); -attribute_deprecated -void av_frame_set_pkt_pos (AVFrame *frame, int64_t val); -attribute_deprecated -int64_t av_frame_get_channel_layout (const AVFrame *frame); -attribute_deprecated -void av_frame_set_channel_layout (AVFrame *frame, int64_t val); -attribute_deprecated -int av_frame_get_channels (const AVFrame *frame); -attribute_deprecated -void av_frame_set_channels (AVFrame *frame, int val); -attribute_deprecated -int av_frame_get_sample_rate (const AVFrame *frame); -attribute_deprecated -void av_frame_set_sample_rate (AVFrame *frame, int val); -attribute_deprecated -AVDictionary *av_frame_get_metadata (const AVFrame *frame); -attribute_deprecated -void av_frame_set_metadata (AVFrame *frame, AVDictionary *val); -attribute_deprecated -int av_frame_get_decode_error_flags (const AVFrame *frame); -attribute_deprecated -void av_frame_set_decode_error_flags (AVFrame *frame, int val); -attribute_deprecated -int av_frame_get_pkt_size(const AVFrame *frame); -attribute_deprecated -void av_frame_set_pkt_size(AVFrame *frame, int val); -#if FF_API_FRAME_QP -attribute_deprecated -int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type); -attribute_deprecated -int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type); -#endif -attribute_deprecated -enum AVColorSpace av_frame_get_colorspace(const AVFrame *frame); -attribute_deprecated -void av_frame_set_colorspace(AVFrame *frame, enum AVColorSpace val); -attribute_deprecated -enum AVColorRange av_frame_get_color_range(const AVFrame *frame); -attribute_deprecated -void av_frame_set_color_range(AVFrame *frame, enum AVColorRange val); -#endif - -/** - * Get the name of a colorspace. - * @return a static string identifying the colorspace; can be NULL. - */ -const char *av_get_colorspace_name(enum AVColorSpace val); - -/** - * Allocate an AVFrame and set its fields to default values. The resulting - * struct must be freed using av_frame_free(). - * - * @return An AVFrame filled with default values or NULL on failure. - * - * @note this only allocates the AVFrame itself, not the data buffers. Those - * must be allocated through other means, e.g. with av_frame_get_buffer() or - * manually. - */ -AVFrame *av_frame_alloc(void); - -/** - * Free the frame and any dynamically allocated objects in it, - * e.g. extended_data. If the frame is reference counted, it will be - * unreferenced first. - * - * @param frame frame to be freed. The pointer will be set to NULL. - */ -void av_frame_free(AVFrame **frame); - -/** - * Set up a new reference to the data described by the source frame. - * - * Copy frame properties from src to dst and create a new reference for each - * AVBufferRef from src. - * - * If src is not reference counted, new buffers are allocated and the data is - * copied. - * - * @warning: dst MUST have been either unreferenced with av_frame_unref(dst), - * or newly allocated with av_frame_alloc() before calling this - * function, or undefined behavior will occur. - * - * @return 0 on success, a negative AVERROR on error - */ -int av_frame_ref(AVFrame *dst, const AVFrame *src); - -/** - * Create a new frame that references the same data as src. - * - * This is a shortcut for av_frame_alloc()+av_frame_ref(). - * - * @return newly created AVFrame on success, NULL on error. - */ -AVFrame *av_frame_clone(const AVFrame *src); - -/** - * Unreference all the buffers referenced by frame and reset the frame fields. - */ -void av_frame_unref(AVFrame *frame); - -/** - * Move everything contained in src to dst and reset src. - * - * @warning: dst is not unreferenced, but directly overwritten without reading - * or deallocating its contents. Call av_frame_unref(dst) manually - * before calling this function to ensure that no memory is leaked. - */ -void av_frame_move_ref(AVFrame *dst, AVFrame *src); - -/** - * Allocate new buffer(s) for audio or video data. - * - * The following fields must be set on frame before calling this function: - * - format (pixel format for video, sample format for audio) - * - width and height for video - * - nb_samples and channel_layout for audio - * - * This function will fill AVFrame.data and AVFrame.buf arrays and, if - * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. - * For planar formats, one buffer will be allocated for each plane. - * - * @warning: if frame already has been allocated, calling this function will - * leak memory. In addition, undefined behavior can occur in certain - * cases. - * - * @param frame frame in which to store the new buffers. - * @param align Required buffer size alignment. If equal to 0, alignment will be - * chosen automatically for the current CPU. It is highly - * recommended to pass 0 here unless you know what you are doing. - * - * @return 0 on success, a negative AVERROR on error. - */ -int av_frame_get_buffer(AVFrame *frame, int align); - -/** - * Check if the frame data is writable. - * - * @return A positive value if the frame data is writable (which is true if and - * only if each of the underlying buffers has only one reference, namely the one - * stored in this frame). Return 0 otherwise. - * - * If 1 is returned the answer is valid until av_buffer_ref() is called on any - * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). - * - * @see av_frame_make_writable(), av_buffer_is_writable() - */ -int av_frame_is_writable(AVFrame *frame); - -/** - * Ensure that the frame data is writable, avoiding data copy if possible. - * - * Do nothing if the frame is writable, allocate new buffers and copy the data - * if it is not. - * - * @return 0 on success, a negative AVERROR on error. - * - * @see av_frame_is_writable(), av_buffer_is_writable(), - * av_buffer_make_writable() - */ -int av_frame_make_writable(AVFrame *frame); - -/** - * Copy the frame data from src to dst. - * - * This function does not allocate anything, dst must be already initialized and - * allocated with the same parameters as src. - * - * This function only copies the frame data (i.e. the contents of the data / - * extended data arrays), not any other properties. - * - * @return >= 0 on success, a negative AVERROR on error. - */ -int av_frame_copy(AVFrame *dst, const AVFrame *src); - -/** - * Copy only "metadata" fields from src to dst. - * - * Metadata for the purpose of this function are those fields that do not affect - * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample - * aspect ratio (for video), but not width/height or channel layout. - * Side data is also copied. - */ -int av_frame_copy_props(AVFrame *dst, const AVFrame *src); - -/** - * Get the buffer reference a given data plane is stored in. - * - * @param plane index of the data plane of interest in frame->extended_data. - * - * @return the buffer reference that contains the plane or NULL if the input - * frame is not valid. - */ -AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane); - -/** - * Add a new side data to a frame. - * - * @param frame a frame to which the side data should be added - * @param type type of the added side data - * @param size size of the side data - * - * @return newly added side data on success, NULL on error - */ -AVFrameSideData *av_frame_new_side_data(AVFrame *frame, - enum AVFrameSideDataType type, -#if FF_API_BUFFER_SIZE_T - int size); -#else - size_t size); -#endif - -/** - * Add a new side data to a frame from an existing AVBufferRef - * - * @param frame a frame to which the side data should be added - * @param type the type of the added side data - * @param buf an AVBufferRef to add as side data. The ownership of - * the reference is transferred to the frame. - * - * @return newly added side data on success, NULL on error. On failure - * the frame is unchanged and the AVBufferRef remains owned by - * the caller. - */ -AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame, - enum AVFrameSideDataType type, - AVBufferRef *buf); - -/** - * @return a pointer to the side data of a given type on success, NULL if there - * is no side data with such type in this frame. - */ -AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, - enum AVFrameSideDataType type); - -/** - * Remove and free all side data instances of the given type. - */ -void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type); - - -/** - * Flags for frame cropping. - */ -enum { - /** - * Apply the maximum possible cropping, even if it requires setting the - * AVFrame.data[] entries to unaligned pointers. Passing unaligned data - * to FFmpeg API is generally not allowed, and causes undefined behavior - * (such as crashes). You can pass unaligned data only to FFmpeg APIs that - * are explicitly documented to accept it. Use this flag only if you - * absolutely know what you are doing. - */ - AV_FRAME_CROP_UNALIGNED = 1 << 0, -}; - -/** - * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/ - * crop_bottom fields. If cropping is successful, the function will adjust the - * data pointers and the width/height fields, and set the crop fields to 0. - * - * In all cases, the cropping boundaries will be rounded to the inherent - * alignment of the pixel format. In some cases, such as for opaque hwaccel - * formats, the left/top cropping is ignored. The crop fields are set to 0 even - * if the cropping was rounded or ignored. - * - * @param frame the frame which should be cropped - * @param flags Some combination of AV_FRAME_CROP_* flags, or 0. - * - * @return >= 0 on success, a negative AVERROR on error. If the cropping fields - * were invalid, AVERROR(ERANGE) is returned, and nothing is changed. - */ -int av_frame_apply_cropping(AVFrame *frame, int flags); - -/** - * @return a string identifying the side data type - */ -const char *av_frame_side_data_name(enum AVFrameSideDataType type); - -/** - * @} - */ - -#endif /* AVUTIL_FRAME_H */ diff --git a/prebuilts/arm/include/libavutil/hash.h b/prebuilts/arm/include/libavutil/hash.h deleted file mode 100644 index af4719e..0000000 --- a/prebuilts/arm/include/libavutil/hash.h +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright (C) 2013 Reimar Döffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_hash_generic - * Generic hashing API - */ - -#ifndef AVUTIL_HASH_H -#define AVUTIL_HASH_H - -#include -#include - -#include "version.h" - -/** - * @defgroup lavu_hash Hash Functions - * @ingroup lavu_crypto - * Hash functions useful in multimedia. - * - * Hash functions are widely used in multimedia, from error checking and - * concealment to internal regression testing. libavutil has efficient - * implementations of a variety of hash functions that may be useful for - * FFmpeg and other multimedia applications. - * - * @{ - * - * @defgroup lavu_hash_generic Generic Hashing API - * An abstraction layer for all hash functions supported by libavutil. - * - * If your application needs to support a wide range of different hash - * functions, then the Generic Hashing API is for you. It provides a generic, - * reusable API for @ref lavu_hash "all hash functions" implemented in libavutil. - * If you just need to use one particular hash function, use the @ref lavu_hash - * "individual hash" directly. - * - * @section Sample Code - * - * A basic template for using the Generic Hashing API follows: - * - * @code - * struct AVHashContext *ctx = NULL; - * const char *hash_name = NULL; - * uint8_t *output_buf = NULL; - * - * // Select from a string returned by av_hash_names() - * hash_name = ...; - * - * // Allocate a hash context - * ret = av_hash_alloc(&ctx, hash_name); - * if (ret < 0) - * return ret; - * - * // Initialize the hash context - * av_hash_init(ctx); - * - * // Update the hash context with data - * while (data_left) { - * av_hash_update(ctx, data, size); - * } - * - * // Now we have no more data, so it is time to finalize the hash and get the - * // output. But we need to first allocate an output buffer. Note that you can - * // use any memory allocation function, including malloc(), not just - * // av_malloc(). - * output_buf = av_malloc(av_hash_get_size(ctx)); - * if (!output_buf) - * return AVERROR(ENOMEM); - * - * // Finalize the hash context. - * // You can use any of the av_hash_final*() functions provided, for other - * // output formats. If you do so, be sure to adjust the memory allocation - * // above. See the function documentation below for the exact amount of extra - * // memory needed. - * av_hash_final(ctx, output_buffer); - * - * // Free the context - * av_hash_freep(&ctx); - * @endcode - * - * @section Hash Function-Specific Information - * If the CRC32 hash is selected, the #AV_CRC_32_IEEE polynomial will be - * used. - * - * If the Murmur3 hash is selected, the default seed will be used. See @ref - * lavu_murmur3_seedinfo "Murmur3" for more information. - * - * @{ - */ - -/** - * @example ffhash.c - * This example is a simple command line application that takes one or more - * arguments. It demonstrates a typical use of the hashing API with allocation, - * initialization, updating, and finalizing. - */ - -struct AVHashContext; - -/** - * Allocate a hash context for the algorithm specified by name. - * - * @return >= 0 for success, a negative error code for failure - * - * @note The context is not initialized after a call to this function; you must - * call av_hash_init() to do so. - */ -int av_hash_alloc(struct AVHashContext **ctx, const char *name); - -/** - * Get the names of available hash algorithms. - * - * This function can be used to enumerate the algorithms. - * - * @param[in] i Index of the hash algorithm, starting from 0 - * @return Pointer to a static string or `NULL` if `i` is out of range - */ -const char *av_hash_names(int i); - -/** - * Get the name of the algorithm corresponding to the given hash context. - */ -const char *av_hash_get_name(const struct AVHashContext *ctx); - -/** - * Maximum value that av_hash_get_size() will currently return. - * - * You can use this if you absolutely want or need to use static allocation for - * the output buffer and are fine with not supporting hashes newly added to - * libavutil without recompilation. - * - * @warning - * Adding new hashes with larger sizes, and increasing the macro while doing - * so, will not be considered an ABI change. To prevent your code from - * overflowing a buffer, either dynamically allocate the output buffer with - * av_hash_get_size(), or limit your use of the Hashing API to hashes that are - * already in FFmpeg during the time of compilation. - */ -#define AV_HASH_MAX_SIZE 64 - -/** - * Get the size of the resulting hash value in bytes. - * - * The maximum value this function will currently return is available as macro - * #AV_HASH_MAX_SIZE. - * - * @param[in] ctx Hash context - * @return Size of the hash value in bytes - */ -int av_hash_get_size(const struct AVHashContext *ctx); - -/** - * Initialize or reset a hash context. - * - * @param[in,out] ctx Hash context - */ -void av_hash_init(struct AVHashContext *ctx); - -/** - * Update a hash context with additional data. - * - * @param[in,out] ctx Hash context - * @param[in] src Data to be added to the hash context - * @param[in] len Size of the additional data - */ -#if FF_API_CRYPTO_SIZE_T -void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, int len); -#else -void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, size_t len); -#endif - -/** - * Finalize a hash context and compute the actual hash value. - * - * The minimum size of `dst` buffer is given by av_hash_get_size() or - * #AV_HASH_MAX_SIZE. The use of the latter macro is discouraged. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * - * @see av_hash_final_bin() provides an alternative API - */ -void av_hash_final(struct AVHashContext *ctx, uint8_t *dst); - -/** - * Finalize a hash context and store the actual hash value in a buffer. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * If `size` is smaller than the hash size (given by av_hash_get_size()), the - * hash is truncated; if size is larger, the buffer is padded with 0. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * @param[in] size Number of bytes to write to `dst` - */ -void av_hash_final_bin(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Finalize a hash context and store the hexadecimal representation of the - * actual hash value as a string. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * The string is always 0-terminated. - * - * If `size` is smaller than `2 * hash_size + 1`, where `hash_size` is the - * value returned by av_hash_get_size(), the string will be truncated. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the string will be stored - * @param[in] size Maximum number of bytes to write to `dst` - */ -void av_hash_final_hex(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Finalize a hash context and store the Base64 representation of the - * actual hash value as a string. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * The string is always 0-terminated. - * - * If `size` is smaller than AV_BASE64_SIZE(hash_size), where `hash_size` is - * the value returned by av_hash_get_size(), the string will be truncated. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * @param[in] size Maximum number of bytes to write to `dst` - */ -void av_hash_final_b64(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Free hash context and set hash context pointer to `NULL`. - * - * @param[in,out] ctx Pointer to hash context - */ -void av_hash_freep(struct AVHashContext **ctx); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_HASH_H */ diff --git a/prebuilts/arm/include/libavutil/hdr_dynamic_metadata.h b/prebuilts/arm/include/libavutil/hdr_dynamic_metadata.h deleted file mode 100644 index 2d72de5..0000000 --- a/prebuilts/arm/include/libavutil/hdr_dynamic_metadata.h +++ /dev/null @@ -1,343 +0,0 @@ -/* - * Copyright (c) 2018 Mohammad Izadi - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HDR_DYNAMIC_METADATA_H -#define AVUTIL_HDR_DYNAMIC_METADATA_H - -#include "frame.h" -#include "rational.h" - -/** - * Option for overlapping elliptical pixel selectors in an image. - */ -enum AVHDRPlusOverlapProcessOption { - AV_HDR_PLUS_OVERLAP_PROCESS_WEIGHTED_AVERAGING = 0, - AV_HDR_PLUS_OVERLAP_PROCESS_LAYERING = 1, -}; - -/** - * Represents the percentile at a specific percentage in - * a distribution. - */ -typedef struct AVHDRPlusPercentile { - /** - * The percentage value corresponding to a specific percentile linearized - * RGB value in the processing window in the scene. The value shall be in - * the range of 0 to100, inclusive. - */ - uint8_t percentage; - - /** - * The linearized maxRGB value at a specific percentile in the processing - * window in the scene. The value shall be in the range of 0 to 1, inclusive - * and in multiples of 0.00001. - */ - AVRational percentile; -} AVHDRPlusPercentile; - -/** - * Color transform parameters at a processing window in a dynamic metadata for - * SMPTE 2094-40. - */ -typedef struct AVHDRPlusColorTransformParams { - /** - * The relative x coordinate of the top left pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(width of Picture - 1). The value 1 corresponds - * to the absolute coordinate of width of Picture - 1. The value for - * first processing window shall be 0. - */ - AVRational window_upper_left_corner_x; - - /** - * The relative y coordinate of the top left pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(height of Picture - 1). The value 1 corresponds - * to the absolute coordinate of height of Picture - 1. The value for - * first processing window shall be 0. - */ - AVRational window_upper_left_corner_y; - - /** - * The relative x coordinate of the bottom right pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(width of Picture - 1). The value 1 corresponds - * to the absolute coordinate of width of Picture - 1. The value for - * first processing window shall be 1. - */ - AVRational window_lower_right_corner_x; - - /** - * The relative y coordinate of the bottom right pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(height of Picture - 1). The value 1 corresponds - * to the absolute coordinate of height of Picture - 1. The value for - * first processing window shall be 1. - */ - AVRational window_lower_right_corner_y; - - /** - * The x coordinate of the center position of the concentric internal and - * external ellipses of the elliptical pixel selector in the processing - * window. The value shall be in the range of 0 to (width of Picture - 1), - * inclusive and in multiples of 1 pixel. - */ - uint16_t center_of_ellipse_x; - - /** - * The y coordinate of the center position of the concentric internal and - * external ellipses of the elliptical pixel selector in the processing - * window. The value shall be in the range of 0 to (height of Picture - 1), - * inclusive and in multiples of 1 pixel. - */ - uint16_t center_of_ellipse_y; - - /** - * The clockwise rotation angle in degree of arc with respect to the - * positive direction of the x-axis of the concentric internal and external - * ellipses of the elliptical pixel selector in the processing window. The - * value shall be in the range of 0 to 180, inclusive and in multiples of 1. - */ - uint8_t rotation_angle; - - /** - * The semi-major axis value of the internal ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value shall be - * in the range of 1 to 65535, inclusive and in multiples of 1 pixel. - */ - uint16_t semimajor_axis_internal_ellipse; - - /** - * The semi-major axis value of the external ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value - * shall not be less than semimajor_axis_internal_ellipse of the current - * processing window. The value shall be in the range of 1 to 65535, - * inclusive and in multiples of 1 pixel. - */ - uint16_t semimajor_axis_external_ellipse; - - /** - * The semi-minor axis value of the external ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value shall be - * in the range of 1 to 65535, inclusive and in multiples of 1 pixel. - */ - uint16_t semiminor_axis_external_ellipse; - - /** - * Overlap process option indicates one of the two methods of combining - * rendered pixels in the processing window in an image with at least one - * elliptical pixel selector. For overlapping elliptical pixel selectors - * in an image, overlap_process_option shall have the same value. - */ - enum AVHDRPlusOverlapProcessOption overlap_process_option; - - /** - * The maximum of the color components of linearized RGB values in the - * processing window in the scene. The values should be in the range of 0 to - * 1, inclusive and in multiples of 0.00001. maxscl[ 0 ], maxscl[ 1 ], and - * maxscl[ 2 ] are corresponding to R, G, B color components respectively. - */ - AVRational maxscl[3]; - - /** - * The average of linearized maxRGB values in the processing window in the - * scene. The value should be in the range of 0 to 1, inclusive and in - * multiples of 0.00001. - */ - AVRational average_maxrgb; - - /** - * The number of linearized maxRGB values at given percentiles in the - * processing window in the scene. The maximum value shall be 15. - */ - uint8_t num_distribution_maxrgb_percentiles; - - /** - * The linearized maxRGB values at given percentiles in the - * processing window in the scene. - */ - AVHDRPlusPercentile distribution_maxrgb[15]; - - /** - * The fraction of selected pixels in the image that contains the brightest - * pixel in the scene. The value shall be in the range of 0 to 1, inclusive - * and in multiples of 0.001. - */ - AVRational fraction_bright_pixels; - - /** - * This flag indicates that the metadata for the tone mapping function in - * the processing window is present (for value of 1). - */ - uint8_t tone_mapping_flag; - - /** - * The x coordinate of the separation point between the linear part and the - * curved part of the tone mapping function. The value shall be in the range - * of 0 to 1, excluding 0 and in multiples of 1/4095. - */ - AVRational knee_point_x; - - /** - * The y coordinate of the separation point between the linear part and the - * curved part of the tone mapping function. The value shall be in the range - * of 0 to 1, excluding 0 and in multiples of 1/4095. - */ - AVRational knee_point_y; - - /** - * The number of the intermediate anchor parameters of the tone mapping - * function in the processing window. The maximum value shall be 15. - */ - uint8_t num_bezier_curve_anchors; - - /** - * The intermediate anchor parameters of the tone mapping function in the - * processing window in the scene. The values should be in the range of 0 - * to 1, inclusive and in multiples of 1/1023. - */ - AVRational bezier_curve_anchors[15]; - - /** - * This flag shall be equal to 0 in bitstreams conforming to this version of - * this Specification. Other values are reserved for future use. - */ - uint8_t color_saturation_mapping_flag; - - /** - * The color saturation gain in the processing window in the scene. The - * value shall be in the range of 0 to 63/8, inclusive and in multiples of - * 1/8. The default value shall be 1. - */ - AVRational color_saturation_weight; -} AVHDRPlusColorTransformParams; - -/** - * This struct represents dynamic metadata for color volume transform - - * application 4 of SMPTE 2094-40:2016 standard. - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with - * av_dynamic_hdr_plus_alloc() and its size is not a part of - * the public ABI. - */ -typedef struct AVDynamicHDRPlus { - /** - * Country code by Rec. ITU-T T.35 Annex A. The value shall be 0xB5. - */ - uint8_t itu_t_t35_country_code; - - /** - * Application version in the application defining document in ST-2094 - * suite. The value shall be set to 0. - */ - uint8_t application_version; - - /** - * The number of processing windows. The value shall be in the range - * of 1 to 3, inclusive. - */ - uint8_t num_windows; - - /** - * The color transform parameters for every processing window. - */ - AVHDRPlusColorTransformParams params[3]; - - /** - * The nominal maximum display luminance of the targeted system display, - * in units of 0.0001 candelas per square metre. The value shall be in - * the range of 0 to 10000, inclusive. - */ - AVRational targeted_system_display_maximum_luminance; - - /** - * This flag shall be equal to 0 in bit streams conforming to this version - * of this Specification. The value 1 is reserved for future use. - */ - uint8_t targeted_system_display_actual_peak_luminance_flag; - - /** - * The number of rows in the targeted system_display_actual_peak_luminance - * array. The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_rows_targeted_system_display_actual_peak_luminance; - - /** - * The number of columns in the - * targeted_system_display_actual_peak_luminance array. The value shall be - * in the range of 2 to 25, inclusive. - */ - uint8_t num_cols_targeted_system_display_actual_peak_luminance; - - /** - * The normalized actual peak luminance of the targeted system display. The - * values should be in the range of 0 to 1, inclusive and in multiples of - * 1/15. - */ - AVRational targeted_system_display_actual_peak_luminance[25][25]; - - /** - * This flag shall be equal to 0 in bitstreams conforming to this version of - * this Specification. The value 1 is reserved for future use. - */ - uint8_t mastering_display_actual_peak_luminance_flag; - - /** - * The number of rows in the mastering_display_actual_peak_luminance array. - * The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_rows_mastering_display_actual_peak_luminance; - - /** - * The number of columns in the mastering_display_actual_peak_luminance - * array. The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_cols_mastering_display_actual_peak_luminance; - - /** - * The normalized actual peak luminance of the mastering display used for - * mastering the image essence. The values should be in the range of 0 to 1, - * inclusive and in multiples of 1/15. - */ - AVRational mastering_display_actual_peak_luminance[25][25]; -} AVDynamicHDRPlus; - -/** - * Allocate an AVDynamicHDRPlus structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVDynamicHDRPlus filled with default values or NULL - * on failure. - */ -AVDynamicHDRPlus *av_dynamic_hdr_plus_alloc(size_t *size); - -/** - * Allocate a complete AVDynamicHDRPlus and add it to the frame. - * @param frame The frame which side data is added to. - * - * @return The AVDynamicHDRPlus structure to be filled by caller or NULL - * on failure. - */ -AVDynamicHDRPlus *av_dynamic_hdr_plus_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_HDR_DYNAMIC_METADATA_H */ diff --git a/prebuilts/arm/include/libavutil/hmac.h b/prebuilts/arm/include/libavutil/hmac.h deleted file mode 100644 index 412e950..0000000 --- a/prebuilts/arm/include/libavutil/hmac.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2012 Martin Storsjo - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HMAC_H -#define AVUTIL_HMAC_H - -#include - -#include "version.h" -/** - * @defgroup lavu_hmac HMAC - * @ingroup lavu_crypto - * @{ - */ - -enum AVHMACType { - AV_HMAC_MD5, - AV_HMAC_SHA1, - AV_HMAC_SHA224, - AV_HMAC_SHA256, - AV_HMAC_SHA384, - AV_HMAC_SHA512, -}; - -typedef struct AVHMAC AVHMAC; - -/** - * Allocate an AVHMAC context. - * @param type The hash function used for the HMAC. - */ -AVHMAC *av_hmac_alloc(enum AVHMACType type); - -/** - * Free an AVHMAC context. - * @param ctx The context to free, may be NULL - */ -void av_hmac_free(AVHMAC *ctx); - -/** - * Initialize an AVHMAC context with an authentication key. - * @param ctx The HMAC context - * @param key The authentication key - * @param keylen The length of the key, in bytes - */ -void av_hmac_init(AVHMAC *ctx, const uint8_t *key, unsigned int keylen); - -/** - * Hash data with the HMAC. - * @param ctx The HMAC context - * @param data The data to hash - * @param len The length of the data, in bytes - */ -void av_hmac_update(AVHMAC *ctx, const uint8_t *data, unsigned int len); - -/** - * Finish hashing and output the HMAC digest. - * @param ctx The HMAC context - * @param out The output buffer to write the digest into - * @param outlen The length of the out buffer, in bytes - * @return The number of bytes written to out, or a negative error code. - */ -int av_hmac_final(AVHMAC *ctx, uint8_t *out, unsigned int outlen); - -/** - * Hash an array of data with a key. - * @param ctx The HMAC context - * @param data The data to hash - * @param len The length of the data, in bytes - * @param key The authentication key - * @param keylen The length of the key, in bytes - * @param out The output buffer to write the digest into - * @param outlen The length of the out buffer, in bytes - * @return The number of bytes written to out, or a negative error code. - */ -int av_hmac_calc(AVHMAC *ctx, const uint8_t *data, unsigned int len, - const uint8_t *key, unsigned int keylen, - uint8_t *out, unsigned int outlen); - -/** - * @} - */ - -#endif /* AVUTIL_HMAC_H */ diff --git a/prebuilts/arm/include/libavutil/hwcontext.h b/prebuilts/arm/include/libavutil/hwcontext.h deleted file mode 100644 index 04d19d8..0000000 --- a/prebuilts/arm/include/libavutil/hwcontext.h +++ /dev/null @@ -1,605 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_H -#define AVUTIL_HWCONTEXT_H - -#include "buffer.h" -#include "frame.h" -#include "log.h" -#include "pixfmt.h" - -enum AVHWDeviceType { - AV_HWDEVICE_TYPE_NONE, - AV_HWDEVICE_TYPE_VDPAU, - AV_HWDEVICE_TYPE_CUDA, - AV_HWDEVICE_TYPE_VAAPI, - AV_HWDEVICE_TYPE_DXVA2, - AV_HWDEVICE_TYPE_QSV, - AV_HWDEVICE_TYPE_VIDEOTOOLBOX, - AV_HWDEVICE_TYPE_D3D11VA, - AV_HWDEVICE_TYPE_DRM, - AV_HWDEVICE_TYPE_OPENCL, - AV_HWDEVICE_TYPE_MEDIACODEC, - AV_HWDEVICE_TYPE_VULKAN, -}; - -typedef struct AVHWDeviceInternal AVHWDeviceInternal; - -/** - * This struct aggregates all the (hardware/vendor-specific) "high-level" state, - * i.e. state that is not tied to a concrete processing configuration. - * E.g., in an API that supports hardware-accelerated encoding and decoding, - * this struct will (if possible) wrap the state that is common to both encoding - * and decoding and from which specific instances of encoders or decoders can be - * derived. - * - * This struct is reference-counted with the AVBuffer mechanism. The - * av_hwdevice_ctx_alloc() constructor yields a reference, whose data field - * points to the actual AVHWDeviceContext. Further objects derived from - * AVHWDeviceContext (such as AVHWFramesContext, describing a frame pool with - * specific properties) will hold an internal reference to it. After all the - * references are released, the AVHWDeviceContext itself will be freed, - * optionally invoking a user-specified callback for uninitializing the hardware - * state. - */ -typedef struct AVHWDeviceContext { - /** - * A class for logging. Set by av_hwdevice_ctx_alloc(). - */ - const AVClass *av_class; - - /** - * Private data used internally by libavutil. Must not be accessed in any - * way by the caller. - */ - AVHWDeviceInternal *internal; - - /** - * This field identifies the underlying API used for hardware access. - * - * This field is set when this struct is allocated and never changed - * afterwards. - */ - enum AVHWDeviceType type; - - /** - * The format-specific data, allocated and freed by libavutil along with - * this context. - * - * Should be cast by the user to the format-specific context defined in the - * corresponding header (hwcontext_*.h) and filled as described in the - * documentation before calling av_hwdevice_ctx_init(). - * - * After calling av_hwdevice_ctx_init() this struct should not be modified - * by the caller. - */ - void *hwctx; - - /** - * This field may be set by the caller before calling av_hwdevice_ctx_init(). - * - * If non-NULL, this callback will be called when the last reference to - * this context is unreferenced, immediately before it is freed. - * - * @note when other objects (e.g an AVHWFramesContext) are derived from this - * struct, this callback will be invoked after all such child objects - * are fully uninitialized and their respective destructors invoked. - */ - void (*free)(struct AVHWDeviceContext *ctx); - - /** - * Arbitrary user data, to be used e.g. by the free() callback. - */ - void *user_opaque; -} AVHWDeviceContext; - -typedef struct AVHWFramesInternal AVHWFramesInternal; - -/** - * This struct describes a set or pool of "hardware" frames (i.e. those with - * data not located in normal system memory). All the frames in the pool are - * assumed to be allocated in the same way and interchangeable. - * - * This struct is reference-counted with the AVBuffer mechanism and tied to a - * given AVHWDeviceContext instance. The av_hwframe_ctx_alloc() constructor - * yields a reference, whose data field points to the actual AVHWFramesContext - * struct. - */ -typedef struct AVHWFramesContext { - /** - * A class for logging. - */ - const AVClass *av_class; - - /** - * Private data used internally by libavutil. Must not be accessed in any - * way by the caller. - */ - AVHWFramesInternal *internal; - - /** - * A reference to the parent AVHWDeviceContext. This reference is owned and - * managed by the enclosing AVHWFramesContext, but the caller may derive - * additional references from it. - */ - AVBufferRef *device_ref; - - /** - * The parent AVHWDeviceContext. This is simply a pointer to - * device_ref->data provided for convenience. - * - * Set by libavutil in av_hwframe_ctx_init(). - */ - AVHWDeviceContext *device_ctx; - - /** - * The format-specific data, allocated and freed automatically along with - * this context. - * - * Should be cast by the user to the format-specific context defined in the - * corresponding header (hwframe_*.h) and filled as described in the - * documentation before calling av_hwframe_ctx_init(). - * - * After any frames using this context are created, the contents of this - * struct should not be modified by the caller. - */ - void *hwctx; - - /** - * This field may be set by the caller before calling av_hwframe_ctx_init(). - * - * If non-NULL, this callback will be called when the last reference to - * this context is unreferenced, immediately before it is freed. - */ - void (*free)(struct AVHWFramesContext *ctx); - - /** - * Arbitrary user data, to be used e.g. by the free() callback. - */ - void *user_opaque; - - /** - * A pool from which the frames are allocated by av_hwframe_get_buffer(). - * This field may be set by the caller before calling av_hwframe_ctx_init(). - * The buffers returned by calling av_buffer_pool_get() on this pool must - * have the properties described in the documentation in the corresponding hw - * type's header (hwcontext_*.h). The pool will be freed strictly before - * this struct's free() callback is invoked. - * - * This field may be NULL, then libavutil will attempt to allocate a pool - * internally. Note that certain device types enforce pools allocated at - * fixed size (frame count), which cannot be extended dynamically. In such a - * case, initial_pool_size must be set appropriately. - */ - AVBufferPool *pool; - - /** - * Initial size of the frame pool. If a device type does not support - * dynamically resizing the pool, then this is also the maximum pool size. - * - * May be set by the caller before calling av_hwframe_ctx_init(). Must be - * set if pool is NULL and the device type does not support dynamic pools. - */ - int initial_pool_size; - - /** - * The pixel format identifying the underlying HW surface type. - * - * Must be a hwaccel format, i.e. the corresponding descriptor must have the - * AV_PIX_FMT_FLAG_HWACCEL flag set. - * - * Must be set by the user before calling av_hwframe_ctx_init(). - */ - enum AVPixelFormat format; - - /** - * The pixel format identifying the actual data layout of the hardware - * frames. - * - * Must be set by the caller before calling av_hwframe_ctx_init(). - * - * @note when the underlying API does not provide the exact data layout, but - * only the colorspace/bit depth, this field should be set to the fully - * planar version of that format (e.g. for 8-bit 420 YUV it should be - * AV_PIX_FMT_YUV420P, not AV_PIX_FMT_NV12 or anything else). - */ - enum AVPixelFormat sw_format; - - /** - * The allocated dimensions of the frames in this pool. - * - * Must be set by the user before calling av_hwframe_ctx_init(). - */ - int width, height; -} AVHWFramesContext; - -/** - * Look up an AVHWDeviceType by name. - * - * @param name String name of the device type (case-insensitive). - * @return The type from enum AVHWDeviceType, or AV_HWDEVICE_TYPE_NONE if - * not found. - */ -enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name); - -/** Get the string name of an AVHWDeviceType. - * - * @param type Type from enum AVHWDeviceType. - * @return Pointer to a static string containing the name, or NULL if the type - * is not valid. - */ -const char *av_hwdevice_get_type_name(enum AVHWDeviceType type); - -/** - * Iterate over supported device types. - * - * @param type AV_HWDEVICE_TYPE_NONE initially, then the previous type - * returned by this function in subsequent iterations. - * @return The next usable device type from enum AVHWDeviceType, or - * AV_HWDEVICE_TYPE_NONE if there are no more. - */ -enum AVHWDeviceType av_hwdevice_iterate_types(enum AVHWDeviceType prev); - -/** - * Allocate an AVHWDeviceContext for a given hardware type. - * - * @param type the type of the hardware device to allocate. - * @return a reference to the newly created AVHWDeviceContext on success or NULL - * on failure. - */ -AVBufferRef *av_hwdevice_ctx_alloc(enum AVHWDeviceType type); - -/** - * Finalize the device context before use. This function must be called after - * the context is filled with all the required information and before it is - * used in any way. - * - * @param ref a reference to the AVHWDeviceContext - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwdevice_ctx_init(AVBufferRef *ref); - -/** - * Open a device of the specified type and create an AVHWDeviceContext for it. - * - * This is a convenience function intended to cover the simple cases. Callers - * who need to fine-tune device creation/management should open the device - * manually and then wrap it in an AVHWDeviceContext using - * av_hwdevice_ctx_alloc()/av_hwdevice_ctx_init(). - * - * The returned context is already initialized and ready for use, the caller - * should not call av_hwdevice_ctx_init() on it. The user_opaque/free fields of - * the created AVHWDeviceContext are set by this function and should not be - * touched by the caller. - * - * @param device_ctx On success, a reference to the newly-created device context - * will be written here. The reference is owned by the caller - * and must be released with av_buffer_unref() when no longer - * needed. On failure, NULL will be written to this pointer. - * @param type The type of the device to create. - * @param device A type-specific string identifying the device to open. - * @param opts A dictionary of additional (type-specific) options to use in - * opening the device. The dictionary remains owned by the caller. - * @param flags currently unused - * - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create(AVBufferRef **device_ctx, enum AVHWDeviceType type, - const char *device, AVDictionary *opts, int flags); - -/** - * Create a new device of the specified type from an existing device. - * - * If the source device is a device of the target type or was originally - * derived from such a device (possibly through one or more intermediate - * devices of other types), then this will return a reference to the - * existing device of the same type as is requested. - * - * Otherwise, it will attempt to derive a new device from the given source - * device. If direct derivation to the new type is not implemented, it will - * attempt the same derivation from each ancestor of the source device in - * turn looking for an implemented derivation method. - * - * @param dst_ctx On success, a reference to the newly-created - * AVHWDeviceContext. - * @param type The type of the new device to create. - * @param src_ctx A reference to an existing AVHWDeviceContext which will be - * used to create the new device. - * @param flags Currently unused; should be set to zero. - * @return Zero on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create_derived(AVBufferRef **dst_ctx, - enum AVHWDeviceType type, - AVBufferRef *src_ctx, int flags); - -/** - * Create a new device of the specified type from an existing device. - * - * This function performs the same action as av_hwdevice_ctx_create_derived, - * however, it is able to set options for the new device to be derived. - * - * @param dst_ctx On success, a reference to the newly-created - * AVHWDeviceContext. - * @param type The type of the new device to create. - * @param src_ctx A reference to an existing AVHWDeviceContext which will be - * used to create the new device. - * @param options Options for the new device to create, same format as in - * av_hwdevice_ctx_create. - * @param flags Currently unused; should be set to zero. - * @return Zero on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create_derived_opts(AVBufferRef **dst_ctx, - enum AVHWDeviceType type, - AVBufferRef *src_ctx, - AVDictionary *options, int flags); - -/** - * Allocate an AVHWFramesContext tied to a given device context. - * - * @param device_ctx a reference to a AVHWDeviceContext. This function will make - * a new reference for internal use, the one passed to the - * function remains owned by the caller. - * @return a reference to the newly created AVHWFramesContext on success or NULL - * on failure. - */ -AVBufferRef *av_hwframe_ctx_alloc(AVBufferRef *device_ctx); - -/** - * Finalize the context before use. This function must be called after the - * context is filled with all the required information and before it is attached - * to any frames. - * - * @param ref a reference to the AVHWFramesContext - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwframe_ctx_init(AVBufferRef *ref); - -/** - * Allocate a new frame attached to the given AVHWFramesContext. - * - * @param hwframe_ctx a reference to an AVHWFramesContext - * @param frame an empty (freshly allocated or unreffed) frame to be filled with - * newly allocated buffers. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwframe_get_buffer(AVBufferRef *hwframe_ctx, AVFrame *frame, int flags); - -/** - * Copy data to or from a hw surface. At least one of dst/src must have an - * AVHWFramesContext attached. - * - * If src has an AVHWFramesContext attached, then the format of dst (if set) - * must use one of the formats returned by av_hwframe_transfer_get_formats(src, - * AV_HWFRAME_TRANSFER_DIRECTION_FROM). - * If dst has an AVHWFramesContext attached, then the format of src must use one - * of the formats returned by av_hwframe_transfer_get_formats(dst, - * AV_HWFRAME_TRANSFER_DIRECTION_TO) - * - * dst may be "clean" (i.e. with data/buf pointers unset), in which case the - * data buffers will be allocated by this function using av_frame_get_buffer(). - * If dst->format is set, then this format will be used, otherwise (when - * dst->format is AV_PIX_FMT_NONE) the first acceptable format will be chosen. - * - * The two frames must have matching allocated dimensions (i.e. equal to - * AVHWFramesContext.width/height), since not all device types support - * transferring a sub-rectangle of the whole surface. The display dimensions - * (i.e. AVFrame.width/height) may be smaller than the allocated dimensions, but - * also have to be equal for both frames. When the display dimensions are - * smaller than the allocated dimensions, the content of the padding in the - * destination frame is unspecified. - * - * @param dst the destination frame. dst is not touched on failure. - * @param src the source frame. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR error code on failure. - */ -int av_hwframe_transfer_data(AVFrame *dst, const AVFrame *src, int flags); - -enum AVHWFrameTransferDirection { - /** - * Transfer the data from the queried hw frame. - */ - AV_HWFRAME_TRANSFER_DIRECTION_FROM, - - /** - * Transfer the data to the queried hw frame. - */ - AV_HWFRAME_TRANSFER_DIRECTION_TO, -}; - -/** - * Get a list of possible source or target formats usable in - * av_hwframe_transfer_data(). - * - * @param hwframe_ctx the frame context to obtain the information for - * @param dir the direction of the transfer - * @param formats the pointer to the output format list will be written here. - * The list is terminated with AV_PIX_FMT_NONE and must be freed - * by the caller when no longer needed using av_free(). - * If this function returns successfully, the format list will - * have at least one item (not counting the terminator). - * On failure, the contents of this pointer are unspecified. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_hwframe_transfer_get_formats(AVBufferRef *hwframe_ctx, - enum AVHWFrameTransferDirection dir, - enum AVPixelFormat **formats, int flags); - - -/** - * This struct describes the constraints on hardware frames attached to - * a given device with a hardware-specific configuration. This is returned - * by av_hwdevice_get_hwframe_constraints() and must be freed by - * av_hwframe_constraints_free() after use. - */ -typedef struct AVHWFramesConstraints { - /** - * A list of possible values for format in the hw_frames_ctx, - * terminated by AV_PIX_FMT_NONE. This member will always be filled. - */ - enum AVPixelFormat *valid_hw_formats; - - /** - * A list of possible values for sw_format in the hw_frames_ctx, - * terminated by AV_PIX_FMT_NONE. Can be NULL if this information is - * not known. - */ - enum AVPixelFormat *valid_sw_formats; - - /** - * The minimum size of frames in this hw_frames_ctx. - * (Zero if not known.) - */ - int min_width; - int min_height; - - /** - * The maximum size of frames in this hw_frames_ctx. - * (INT_MAX if not known / no limit.) - */ - int max_width; - int max_height; -} AVHWFramesConstraints; - -/** - * Allocate a HW-specific configuration structure for a given HW device. - * After use, the user must free all members as required by the specific - * hardware structure being used, then free the structure itself with - * av_free(). - * - * @param device_ctx a reference to the associated AVHWDeviceContext. - * @return The newly created HW-specific configuration structure on - * success or NULL on failure. - */ -void *av_hwdevice_hwconfig_alloc(AVBufferRef *device_ctx); - -/** - * Get the constraints on HW frames given a device and the HW-specific - * configuration to be used with that device. If no HW-specific - * configuration is provided, returns the maximum possible capabilities - * of the device. - * - * @param ref a reference to the associated AVHWDeviceContext. - * @param hwconfig a filled HW-specific configuration structure, or NULL - * to return the maximum possible capabilities of the device. - * @return AVHWFramesConstraints structure describing the constraints - * on the device, or NULL if not available. - */ -AVHWFramesConstraints *av_hwdevice_get_hwframe_constraints(AVBufferRef *ref, - const void *hwconfig); - -/** - * Free an AVHWFrameConstraints structure. - * - * @param constraints The (filled or unfilled) AVHWFrameConstraints structure. - */ -void av_hwframe_constraints_free(AVHWFramesConstraints **constraints); - - -/** - * Flags to apply to frame mappings. - */ -enum { - /** - * The mapping must be readable. - */ - AV_HWFRAME_MAP_READ = 1 << 0, - /** - * The mapping must be writeable. - */ - AV_HWFRAME_MAP_WRITE = 1 << 1, - /** - * The mapped frame will be overwritten completely in subsequent - * operations, so the current frame data need not be loaded. Any values - * which are not overwritten are unspecified. - */ - AV_HWFRAME_MAP_OVERWRITE = 1 << 2, - /** - * The mapping must be direct. That is, there must not be any copying in - * the map or unmap steps. Note that performance of direct mappings may - * be much lower than normal memory. - */ - AV_HWFRAME_MAP_DIRECT = 1 << 3, -}; - -/** - * Map a hardware frame. - * - * This has a number of different possible effects, depending on the format - * and origin of the src and dst frames. On input, src should be a usable - * frame with valid buffers and dst should be blank (typically as just created - * by av_frame_alloc()). src should have an associated hwframe context, and - * dst may optionally have a format and associated hwframe context. - * - * If src was created by mapping a frame from the hwframe context of dst, - * then this function undoes the mapping - dst is replaced by a reference to - * the frame that src was originally mapped from. - * - * If both src and dst have an associated hwframe context, then this function - * attempts to map the src frame from its hardware context to that of dst and - * then fill dst with appropriate data to be usable there. This will only be - * possible if the hwframe contexts and associated devices are compatible - - * given compatible devices, av_hwframe_ctx_create_derived() can be used to - * create a hwframe context for dst in which mapping should be possible. - * - * If src has a hwframe context but dst does not, then the src frame is - * mapped to normal memory and should thereafter be usable as a normal frame. - * If the format is set on dst, then the mapping will attempt to create dst - * with that format and fail if it is not possible. If format is unset (is - * AV_PIX_FMT_NONE) then dst will be mapped with whatever the most appropriate - * format to use is (probably the sw_format of the src hwframe context). - * - * A return value of AVERROR(ENOSYS) indicates that the mapping is not - * possible with the given arguments and hwframe setup, while other return - * values indicate that it failed somehow. - * - * @param dst Destination frame, to contain the mapping. - * @param src Source frame, to be mapped. - * @param flags Some combination of AV_HWFRAME_MAP_* flags. - * @return Zero on success, negative AVERROR code on failure. - */ -int av_hwframe_map(AVFrame *dst, const AVFrame *src, int flags); - - -/** - * Create and initialise an AVHWFramesContext as a mapping of another existing - * AVHWFramesContext on a different device. - * - * av_hwframe_ctx_init() should not be called after this. - * - * @param derived_frame_ctx On success, a reference to the newly created - * AVHWFramesContext. - * @param derived_device_ctx A reference to the device to create the new - * AVHWFramesContext on. - * @param source_frame_ctx A reference to an existing AVHWFramesContext - * which will be mapped to the derived context. - * @param flags Some combination of AV_HWFRAME_MAP_* flags, defining the - * mapping parameters to apply to frames which are allocated - * in the derived device. - * @return Zero on success, negative AVERROR code on failure. - */ -int av_hwframe_ctx_create_derived(AVBufferRef **derived_frame_ctx, - enum AVPixelFormat format, - AVBufferRef *derived_device_ctx, - AVBufferRef *source_frame_ctx, - int flags); - -#endif /* AVUTIL_HWCONTEXT_H */ diff --git a/prebuilts/arm/include/libavutil/hwcontext_cuda.h b/prebuilts/arm/include/libavutil/hwcontext_cuda.h deleted file mode 100644 index cefbe0c..0000000 --- a/prebuilts/arm/include/libavutil/hwcontext_cuda.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#ifndef AVUTIL_HWCONTEXT_CUDA_H -#define AVUTIL_HWCONTEXT_CUDA_H - -#ifndef CUDA_VERSION -#include -#endif - -#include "pixfmt.h" - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_CUDA. - * - * This API supports dynamic frame pools. AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a CUdeviceptr. - */ - -typedef struct AVCUDADeviceContextInternal AVCUDADeviceContextInternal; - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVCUDADeviceContext { - CUcontext cuda_ctx; - CUstream stream; - AVCUDADeviceContextInternal *internal; -} AVCUDADeviceContext; - -/** - * AVHWFramesContext.hwctx is currently not used - */ - -/** - * @defgroup hwcontext_cuda Device context creation flags - * - * Flags for av_hwdevice_ctx_create. - * - * @{ - */ - -/** - * Use primary device context instead of creating a new one. - */ -#define AV_CUDA_USE_PRIMARY_CONTEXT (1 << 0) - -/** - * @} - */ - -#endif /* AVUTIL_HWCONTEXT_CUDA_H */ diff --git a/prebuilts/arm/include/libavutil/hwcontext_d3d11va.h b/prebuilts/arm/include/libavutil/hwcontext_d3d11va.h deleted file mode 100644 index 9f91e9b..0000000 --- a/prebuilts/arm/include/libavutil/hwcontext_d3d11va.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_D3D11VA_H -#define AVUTIL_HWCONTEXT_D3D11VA_H - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_D3D11VA. - * - * The default pool implementation will be fixed-size if initial_pool_size is - * set (and allocate elements from an array texture). Otherwise it will allocate - * individual textures. Be aware that decoding requires a single array texture. - * - * Using sw_format==AV_PIX_FMT_YUV420P has special semantics, and maps to - * DXGI_FORMAT_420_OPAQUE. av_hwframe_transfer_data() is not supported for - * this format. Refer to MSDN for details. - * - * av_hwdevice_ctx_create() for this device type supports a key named "debug" - * for the AVDictionary entry. If this is set to any value, the device creation - * code will try to load various supported D3D debugging layers. - */ - -#include -#include - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVD3D11VADeviceContext { - /** - * Device used for texture creation and access. This can also be used to - * set the libavcodec decoding device. - * - * Must be set by the user. This is the only mandatory field - the other - * device context fields are set from this and are available for convenience. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11Device *device; - - /** - * If unset, this will be set from the device field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11DeviceContext *device_context; - - /** - * If unset, this will be set from the device field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11VideoDevice *video_device; - - /** - * If unset, this will be set from the device_context field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11VideoContext *video_context; - - /** - * Callbacks for locking. They protect accesses to device_context and - * video_context calls. They also protect access to the internal staging - * texture (for av_hwframe_transfer_data() calls). They do NOT protect - * access to hwcontext or decoder state in general. - * - * If unset on init, the hwcontext implementation will set them to use an - * internal mutex. - * - * The underlying lock must be recursive. lock_ctx is for free use by the - * locking implementation. - */ - void (*lock)(void *lock_ctx); - void (*unlock)(void *lock_ctx); - void *lock_ctx; -} AVD3D11VADeviceContext; - -/** - * D3D11 frame descriptor for pool allocation. - * - * In user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer pointing at an object of this type describing the - * planes of the frame. - * - * This has no use outside of custom allocation, and AVFrame AVBufferRef do not - * necessarily point to an instance of this struct. - */ -typedef struct AVD3D11FrameDescriptor { - /** - * The texture in which the frame is located. The reference count is - * managed by the AVBufferRef, and destroying the reference will release - * the interface. - * - * Normally stored in AVFrame.data[0]. - */ - ID3D11Texture2D *texture; - - /** - * The index into the array texture element representing the frame, or 0 - * if the texture is not an array texture. - * - * Normally stored in AVFrame.data[1] (cast from intptr_t). - */ - intptr_t index; -} AVD3D11FrameDescriptor; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVD3D11VAFramesContext { - /** - * The canonical texture used for pool allocation. If this is set to NULL - * on init, the hwframes implementation will allocate and set an array - * texture if initial_pool_size > 0. - * - * The only situation when the API user should set this is: - * - the user wants to do manual pool allocation (setting - * AVHWFramesContext.pool), instead of letting AVHWFramesContext - * allocate the pool - * - of an array texture - * - and wants it to use it for decoding - * - this has to be done before calling av_hwframe_ctx_init() - * - * Deallocating the AVHWFramesContext will always release this interface, - * and it does not matter whether it was user-allocated. - * - * This is in particular used by the libavcodec D3D11VA hwaccel, which - * requires a single array texture. It will create ID3D11VideoDecoderOutputView - * objects for each array texture element on decoder initialization. - */ - ID3D11Texture2D *texture; - - /** - * D3D11_TEXTURE2D_DESC.BindFlags used for texture creation. The user must - * at least set D3D11_BIND_DECODER if the frames context is to be used for - * video decoding. - * This field is ignored/invalid if a user-allocated texture is provided. - */ - UINT BindFlags; - - /** - * D3D11_TEXTURE2D_DESC.MiscFlags used for texture creation. - * This field is ignored/invalid if a user-allocated texture is provided. - */ - UINT MiscFlags; -} AVD3D11VAFramesContext; - -#endif /* AVUTIL_HWCONTEXT_D3D11VA_H */ diff --git a/prebuilts/arm/include/libavutil/hwcontext_drm.h b/prebuilts/arm/include/libavutil/hwcontext_drm.h deleted file mode 100644 index 42709f2..0000000 --- a/prebuilts/arm/include/libavutil/hwcontext_drm.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_DRM_H -#define AVUTIL_HWCONTEXT_DRM_H - -#include -#include - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_DRM. - * - * Internal frame allocation is not currently supported - all frames - * must be allocated by the user. Thus AVHWFramesContext is always - * NULL, though this may change if support for frame allocation is - * added in future. - */ - -enum { - /** - * The maximum number of layers/planes in a DRM frame. - */ - AV_DRM_MAX_PLANES = 4 -}; - -/** - * DRM object descriptor. - * - * Describes a single DRM object, addressing it as a PRIME file - * descriptor. - */ -typedef struct AVDRMObjectDescriptor { - /** - * DRM PRIME fd for the object. - */ - int fd; - /** - * Total size of the object. - * - * (This includes any parts not which do not contain image data.) - */ - size_t size; - /** - * Format modifier applied to the object (DRM_FORMAT_MOD_*). - * - * If the format modifier is unknown then this should be set to - * DRM_FORMAT_MOD_INVALID. - */ - uint64_t format_modifier; -} AVDRMObjectDescriptor; - -/** - * DRM plane descriptor. - * - * Describes a single plane of a layer, which is contained within - * a single object. - */ -typedef struct AVDRMPlaneDescriptor { - /** - * Index of the object containing this plane in the objects - * array of the enclosing frame descriptor. - */ - int object_index; - /** - * Offset within that object of this plane. - */ - ptrdiff_t offset; - /** - * Pitch (linesize) of this plane. - */ - ptrdiff_t pitch; -} AVDRMPlaneDescriptor; - -/** - * DRM layer descriptor. - * - * Describes a single layer within a frame. This has the structure - * defined by its format, and will contain one or more planes. - */ -typedef struct AVDRMLayerDescriptor { - /** - * Format of the layer (DRM_FORMAT_*). - */ - uint32_t format; - /** - * Number of planes in the layer. - * - * This must match the number of planes required by format. - */ - int nb_planes; - /** - * Array of planes in this layer. - */ - AVDRMPlaneDescriptor planes[AV_DRM_MAX_PLANES]; -} AVDRMLayerDescriptor; - -/** - * DRM frame descriptor. - * - * This is used as the data pointer for AV_PIX_FMT_DRM_PRIME frames. - * It is also used by user-allocated frame pools - allocating in - * AVHWFramesContext.pool must return AVBufferRefs which contain - * an object of this type. - * - * The fields of this structure should be set such it can be - * imported directly by EGL using the EGL_EXT_image_dma_buf_import - * and EGL_EXT_image_dma_buf_import_modifiers extensions. - * (Note that the exact layout of a particular format may vary between - * platforms - we only specify that the same platform should be able - * to import it.) - * - * The total number of planes must not exceed AV_DRM_MAX_PLANES, and - * the order of the planes by increasing layer index followed by - * increasing plane index must be the same as the order which would - * be used for the data pointers in the equivalent software format. - */ -typedef struct AVDRMFrameDescriptor { - /** - * Number of DRM objects making up this frame. - */ - int nb_objects; - /** - * Array of objects making up the frame. - */ - AVDRMObjectDescriptor objects[AV_DRM_MAX_PLANES]; - /** - * Number of layers in the frame. - */ - int nb_layers; - /** - * Array of layers in the frame. - */ - AVDRMLayerDescriptor layers[AV_DRM_MAX_PLANES]; -} AVDRMFrameDescriptor; - -/** - * DRM device. - * - * Allocated as AVHWDeviceContext.hwctx. - */ -typedef struct AVDRMDeviceContext { - /** - * File descriptor of DRM device. - * - * This is used as the device to create frames on, and may also be - * used in some derivation and mapping operations. - * - * If no device is required, set to -1. - */ - int fd; -} AVDRMDeviceContext; - -#endif /* AVUTIL_HWCONTEXT_DRM_H */ diff --git a/prebuilts/arm/include/libavutil/hwcontext_dxva2.h b/prebuilts/arm/include/libavutil/hwcontext_dxva2.h deleted file mode 100644 index e1b79bc..0000000 --- a/prebuilts/arm/include/libavutil/hwcontext_dxva2.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#ifndef AVUTIL_HWCONTEXT_DXVA2_H -#define AVUTIL_HWCONTEXT_DXVA2_H - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_DXVA2. - * - * Only fixed-size pools are supported. - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to a pointer to IDirect3DSurface9. - */ - -#include -#include - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVDXVA2DeviceContext { - IDirect3DDeviceManager9 *devmgr; -} AVDXVA2DeviceContext; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVDXVA2FramesContext { - /** - * The surface type (e.g. DXVA2_VideoProcessorRenderTarget or - * DXVA2_VideoDecoderRenderTarget). Must be set by the caller. - */ - DWORD surface_type; - - /** - * The surface pool. When an external pool is not provided by the caller, - * this will be managed (allocated and filled on init, freed on uninit) by - * libavutil. - */ - IDirect3DSurface9 **surfaces; - int nb_surfaces; - - /** - * Certain drivers require the decoder to be destroyed before the surfaces. - * To allow internally managed pools to work properly in such cases, this - * field is provided. - * - * If it is non-NULL, libavutil will call IDirectXVideoDecoder_Release() on - * it just before the internal surface pool is freed. - * - * This is for convenience only. Some code uses other methods to manage the - * decoder reference. - */ - IDirectXVideoDecoder *decoder_to_release; -} AVDXVA2FramesContext; - -#endif /* AVUTIL_HWCONTEXT_DXVA2_H */ diff --git a/prebuilts/arm/include/libavutil/hwcontext_mediacodec.h b/prebuilts/arm/include/libavutil/hwcontext_mediacodec.h deleted file mode 100644 index 101a980..0000000 --- a/prebuilts/arm/include/libavutil/hwcontext_mediacodec.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_MEDIACODEC_H -#define AVUTIL_HWCONTEXT_MEDIACODEC_H - -/** - * MediaCodec details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVMediaCodecDeviceContext { - /** - * android/view/Surface handle, to be filled by the user. - * - * This is the default surface used by decoders on this device. - */ - void *surface; -} AVMediaCodecDeviceContext; - -#endif /* AVUTIL_HWCONTEXT_MEDIACODEC_H */ diff --git a/prebuilts/arm/include/libavutil/hwcontext_opencl.h b/prebuilts/arm/include/libavutil/hwcontext_opencl.h deleted file mode 100644 index ef54486..0000000 --- a/prebuilts/arm/include/libavutil/hwcontext_opencl.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_OPENCL_H -#define AVUTIL_HWCONTEXT_OPENCL_H - -#ifdef __APPLE__ -#include -#else -#include -#endif - -#include "frame.h" - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_OPENCL. - * - * Pools allocated internally are always dynamic, and are primarily intended - * to be used in OpenCL-only cases. If interoperation is required, it is - * typically required to allocate frames in the other API and then map the - * frames context to OpenCL with av_hwframe_ctx_create_derived(). - */ - -/** - * OpenCL frame descriptor for pool allocation. - * - * In user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer pointing at an object of this type describing the - * planes of the frame. - */ -typedef struct AVOpenCLFrameDescriptor { - /** - * Number of planes in the frame. - */ - int nb_planes; - /** - * OpenCL image2d objects for each plane of the frame. - */ - cl_mem planes[AV_NUM_DATA_POINTERS]; -} AVOpenCLFrameDescriptor; - -/** - * OpenCL device details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVOpenCLDeviceContext { - /** - * The primary device ID of the device. If multiple OpenCL devices - * are associated with the context then this is the one which will - * be used for all operations internal to FFmpeg. - */ - cl_device_id device_id; - /** - * The OpenCL context which will contain all operations and frames on - * this device. - */ - cl_context context; - /** - * The default command queue for this device, which will be used by all - * frames contexts which do not have their own command queue. If not - * intialised by the user, a default queue will be created on the - * primary device. - */ - cl_command_queue command_queue; -} AVOpenCLDeviceContext; - -/** - * OpenCL-specific data associated with a frame pool. - * - * Allocated as AVHWFramesContext.hwctx. - */ -typedef struct AVOpenCLFramesContext { - /** - * The command queue used for internal asynchronous operations on this - * device (av_hwframe_transfer_data(), av_hwframe_map()). - * - * If this is not set, the command queue from the associated device is - * used instead. - */ - cl_command_queue command_queue; -} AVOpenCLFramesContext; - -#endif /* AVUTIL_HWCONTEXT_OPENCL_H */ diff --git a/prebuilts/arm/include/libavutil/hwcontext_qsv.h b/prebuilts/arm/include/libavutil/hwcontext_qsv.h deleted file mode 100644 index b98d611..0000000 --- a/prebuilts/arm/include/libavutil/hwcontext_qsv.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_QSV_H -#define AVUTIL_HWCONTEXT_QSV_H - -#include - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_QSV. - * - * This API does not support dynamic frame pools. AVHWFramesContext.pool must - * contain AVBufferRefs whose data pointer points to an mfxFrameSurface1 struct. - */ - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVQSVDeviceContext { - mfxSession session; -} AVQSVDeviceContext; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVQSVFramesContext { - mfxFrameSurface1 *surfaces; - int nb_surfaces; - - /** - * A combination of MFX_MEMTYPE_* describing the frame pool. - */ - int frame_type; -} AVQSVFramesContext; - -#endif /* AVUTIL_HWCONTEXT_QSV_H */ - diff --git a/prebuilts/arm/include/libavutil/hwcontext_vaapi.h b/prebuilts/arm/include/libavutil/hwcontext_vaapi.h deleted file mode 100644 index 0b2e071..0000000 --- a/prebuilts/arm/include/libavutil/hwcontext_vaapi.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VAAPI_H -#define AVUTIL_HWCONTEXT_VAAPI_H - -#include - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_VAAPI. - * - * Dynamic frame pools are supported, but note that any pool used as a render - * target is required to be of fixed size in order to be be usable as an - * argument to vaCreateContext(). - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to a VASurfaceID. - */ - -enum { - /** - * The quirks field has been set by the user and should not be detected - * automatically by av_hwdevice_ctx_init(). - */ - AV_VAAPI_DRIVER_QUIRK_USER_SET = (1 << 0), - /** - * The driver does not destroy parameter buffers when they are used by - * vaRenderPicture(). Additional code will be required to destroy them - * separately afterwards. - */ - AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS = (1 << 1), - - /** - * The driver does not support the VASurfaceAttribMemoryType attribute, - * so the surface allocation code will not try to use it. - */ - AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE = (1 << 2), - - /** - * The driver does not support surface attributes at all. - * The surface allocation code will never pass them to surface allocation, - * and the results of the vaQuerySurfaceAttributes() call will be faked. - */ - AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3), -}; - -/** - * VAAPI connection details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVVAAPIDeviceContext { - /** - * The VADisplay handle, to be filled by the user. - */ - VADisplay display; - /** - * Driver quirks to apply - this is filled by av_hwdevice_ctx_init(), - * with reference to a table of known drivers, unless the - * AV_VAAPI_DRIVER_QUIRK_USER_SET bit is already present. The user - * may need to refer to this field when performing any later - * operations using VAAPI with the same VADisplay. - */ - unsigned int driver_quirks; -} AVVAAPIDeviceContext; - -/** - * VAAPI-specific data associated with a frame pool. - * - * Allocated as AVHWFramesContext.hwctx. - */ -typedef struct AVVAAPIFramesContext { - /** - * Set by the user to apply surface attributes to all surfaces in - * the frame pool. If null, default settings are used. - */ - VASurfaceAttrib *attributes; - int nb_attributes; - /** - * The surfaces IDs of all surfaces in the pool after creation. - * Only valid if AVHWFramesContext.initial_pool_size was positive. - * These are intended to be used as the render_targets arguments to - * vaCreateContext(). - */ - VASurfaceID *surface_ids; - int nb_surfaces; -} AVVAAPIFramesContext; - -/** - * VAAPI hardware pipeline configuration details. - * - * Allocated with av_hwdevice_hwconfig_alloc(). - */ -typedef struct AVVAAPIHWConfig { - /** - * ID of a VAAPI pipeline configuration. - */ - VAConfigID config_id; -} AVVAAPIHWConfig; - -#endif /* AVUTIL_HWCONTEXT_VAAPI_H */ diff --git a/prebuilts/arm/include/libavutil/hwcontext_vdpau.h b/prebuilts/arm/include/libavutil/hwcontext_vdpau.h deleted file mode 100644 index 1b7ea1e..0000000 --- a/prebuilts/arm/include/libavutil/hwcontext_vdpau.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VDPAU_H -#define AVUTIL_HWCONTEXT_VDPAU_H - -#include - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_VDPAU. - * - * This API supports dynamic frame pools. AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a VdpVideoSurface. - */ - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVVDPAUDeviceContext { - VdpDevice device; - VdpGetProcAddress *get_proc_address; -} AVVDPAUDeviceContext; - -/** - * AVHWFramesContext.hwctx is currently not used - */ - -#endif /* AVUTIL_HWCONTEXT_VDPAU_H */ diff --git a/prebuilts/arm/include/libavutil/hwcontext_videotoolbox.h b/prebuilts/arm/include/libavutil/hwcontext_videotoolbox.h deleted file mode 100644 index 5074d79..0000000 --- a/prebuilts/arm/include/libavutil/hwcontext_videotoolbox.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H -#define AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H - -#include - -#include - -#include "pixfmt.h" - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_VIDEOTOOLBOX. - * - * This API currently does not support frame allocation, as the raw VideoToolbox - * API does allocation, and FFmpeg itself never has the need to allocate frames. - * - * If the API user sets a custom pool, AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a CVImageBufferRef or CVPixelBufferRef. - * - * Currently AVHWDeviceContext.hwctx and AVHWFramesContext.hwctx are always - * NULL. - */ - -/** - * Convert a VideoToolbox (actually CoreVideo) format to AVPixelFormat. - * Returns AV_PIX_FMT_NONE if no known equivalent was found. - */ -enum AVPixelFormat av_map_videotoolbox_format_to_pixfmt(uint32_t cv_fmt); - -/** - * Convert an AVPixelFormat to a VideoToolbox (actually CoreVideo) format. - * Returns 0 if no known equivalent was found. - */ -uint32_t av_map_videotoolbox_format_from_pixfmt(enum AVPixelFormat pix_fmt); - -/** - * Same as av_map_videotoolbox_format_from_pixfmt function, but can map and - * return full range pixel formats via a flag. - */ -uint32_t av_map_videotoolbox_format_from_pixfmt2(enum AVPixelFormat pix_fmt, bool full_range); - -#endif /* AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H */ diff --git a/prebuilts/arm/include/libavutil/hwcontext_vulkan.h b/prebuilts/arm/include/libavutil/hwcontext_vulkan.h deleted file mode 100644 index 5cbeb8e..0000000 --- a/prebuilts/arm/include/libavutil/hwcontext_vulkan.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VULKAN_H -#define AVUTIL_HWCONTEXT_VULKAN_H - -#include - -#include "pixfmt.h" -#include "frame.h" - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_VULKAN. - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to an AVVkFrame. - */ - -/** - * Main Vulkan context, allocated as AVHWDeviceContext.hwctx. - * All of these can be set before init to change what the context uses - */ -typedef struct AVVulkanDeviceContext { - /** - * Custom memory allocator, else NULL - */ - const VkAllocationCallbacks *alloc; - /** - * Vulkan instance. Must be at least version 1.1. - */ - VkInstance inst; - /** - * Physical device - */ - VkPhysicalDevice phys_dev; - /** - * Active device - */ - VkDevice act_dev; - /** - * Queue family index for graphics - * @note av_hwdevice_create() will set all 3 queue indices if unset - * If there is no dedicated queue for compute or transfer operations, - * they will be set to the graphics queue index which can handle both. - * nb_graphics_queues indicates how many queues were enabled for the - * graphics queue (must be at least 1) - */ - int queue_family_index; - int nb_graphics_queues; - /** - * Queue family index to use for transfer operations, and the amount of queues - * enabled. In case there is no dedicated transfer queue, nb_tx_queues - * must be 0 and queue_family_tx_index must be the same as either the graphics - * queue or the compute queue, if available. - */ - int queue_family_tx_index; - int nb_tx_queues; - /** - * Queue family index for compute ops, and the amount of queues enabled. - * In case there are no dedicated compute queues, nb_comp_queues must be - * 0 and its queue family index must be set to the graphics queue. - */ - int queue_family_comp_index; - int nb_comp_queues; - /** - * Enabled instance extensions. - * If supplying your own device context, set this to an array of strings, with - * each entry containing the specified Vulkan extension string to enable. - * Duplicates are possible and accepted. - * If no extensions are enabled, set these fields to NULL, and 0 respectively. - */ - const char * const *enabled_inst_extensions; - int nb_enabled_inst_extensions; - /** - * Enabled device extensions. By default, VK_KHR_external_memory_fd, - * VK_EXT_external_memory_dma_buf, VK_EXT_image_drm_format_modifier, - * VK_KHR_external_semaphore_fd and VK_EXT_external_memory_host are enabled if found. - * If supplying your own device context, these fields takes the same format as - * the above fields, with the same conditions that duplicates are possible - * and accepted, and that NULL and 0 respectively means no extensions are enabled. - */ - const char * const *enabled_dev_extensions; - int nb_enabled_dev_extensions; - /** - * This structure should be set to the set of features that present and enabled - * during device creation. When a device is created by FFmpeg, it will default to - * enabling all that are present of the shaderImageGatherExtended, - * fragmentStoresAndAtomics, shaderInt64 and vertexPipelineStoresAndAtomics features. - */ - VkPhysicalDeviceFeatures2 device_features; -} AVVulkanDeviceContext; - -/** - * Allocated as AVHWFramesContext.hwctx, used to set pool-specific options - */ -typedef struct AVVulkanFramesContext { - /** - * Controls the tiling of allocated frames. - */ - VkImageTiling tiling; - /** - * Defines extra usage of output frames. If left as 0, the following bits - * are set: TRANSFER_SRC, TRANSFER_DST. SAMPLED and STORAGE. - */ - VkImageUsageFlagBits usage; - /** - * Extension data for image creation. - */ - void *create_pnext; - /** - * Extension data for memory allocation. Must have as many entries as - * the number of planes of the sw_format. - * This will be chained to VkExportMemoryAllocateInfo, which is used - * to make all pool images exportable to other APIs if the necessary - * extensions are present in enabled_dev_extensions. - */ - void *alloc_pnext[AV_NUM_DATA_POINTERS]; -} AVVulkanFramesContext; - -/* - * Frame structure, the VkFormat of the image will always match - * the pool's sw_format. - * All frames, imported or allocated, will be created with the - * VK_IMAGE_CREATE_ALIAS_BIT flag set, so the memory may be aliased if needed. - * - * If all three queue family indices in the device context are the same, - * images will be created with the EXCLUSIVE sharing mode. Otherwise, all images - * will be created using the CONCURRENT sharing mode. - * - * @note the size of this structure is not part of the ABI, to allocate - * you must use @av_vk_frame_alloc(). - */ -typedef struct AVVkFrame { - /** - * Vulkan images to which the memory is bound to. - */ - VkImage img[AV_NUM_DATA_POINTERS]; - - /** - * The same tiling must be used for all images in the frame. - */ - VkImageTiling tiling; - - /** - * Memory backing the images. Could be less than the amount of images - * if importing from a DRM or VAAPI frame. - */ - VkDeviceMemory mem[AV_NUM_DATA_POINTERS]; - size_t size[AV_NUM_DATA_POINTERS]; - - /** - * OR'd flags for all memory allocated - */ - VkMemoryPropertyFlagBits flags; - - /** - * Updated after every barrier - */ - VkAccessFlagBits access[AV_NUM_DATA_POINTERS]; - VkImageLayout layout[AV_NUM_DATA_POINTERS]; - - /** - * Synchronization semaphores. Must not be freed manually. Must be waited on - * and signalled at every queue submission. - * Could be less than the amount of images: either one per VkDeviceMemory - * or one for the entire frame. All others will be set to VK_NULL_HANDLE. - */ - VkSemaphore sem[AV_NUM_DATA_POINTERS]; - - /** - * Internal data. - */ - struct AVVkFrameInternal *internal; -} AVVkFrame; - -/** - * Allocates a single AVVkFrame and initializes everything as 0. - * @note Must be freed via av_free() - */ -AVVkFrame *av_vk_frame_alloc(void); - -/** - * Returns the format of each image up to the number of planes for a given sw_format. - * Returns NULL on unsupported formats. - */ -const VkFormat *av_vkfmt_from_pixfmt(enum AVPixelFormat p); - -#endif /* AVUTIL_HWCONTEXT_VULKAN_H */ diff --git a/prebuilts/arm/include/libavutil/imgutils.h b/prebuilts/arm/include/libavutil/imgutils.h deleted file mode 100644 index 5eccbf0..0000000 --- a/prebuilts/arm/include/libavutil/imgutils.h +++ /dev/null @@ -1,291 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_IMGUTILS_H -#define AVUTIL_IMGUTILS_H - -/** - * @file - * misc image utilities - * - * @addtogroup lavu_picture - * @{ - */ - -#include "avutil.h" -#include "pixdesc.h" -#include "rational.h" - -/** - * Compute the max pixel step for each plane of an image with a - * format described by pixdesc. - * - * The pixel step is the distance in bytes between the first byte of - * the group of bytes which describe a pixel component and the first - * byte of the successive group in the same plane for the same - * component. - * - * @param max_pixsteps an array which is filled with the max pixel step - * for each plane. Since a plane may contain different pixel - * components, the computed max_pixsteps[plane] is relative to the - * component in the plane with the max pixel step. - * @param max_pixstep_comps an array which is filled with the component - * for each plane which has the max pixel step. May be NULL. - */ -void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4], - const AVPixFmtDescriptor *pixdesc); - -/** - * Compute the size of an image line with format pix_fmt and width - * width for the plane plane. - * - * @return the computed size in bytes - */ -int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane); - -/** - * Fill plane linesizes for an image with pixel format pix_fmt and - * width width. - * - * @param linesizes array to be filled with the linesize for each plane - * @return >= 0 in case of success, a negative error code otherwise - */ -int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width); - -/** - * Fill plane sizes for an image with pixel format pix_fmt and height height. - * - * @param size the array to be filled with the size of each image plane - * @param linesizes the array containing the linesize for each - * plane, should be filled by av_image_fill_linesizes() - * @return >= 0 in case of success, a negative error code otherwise - * - * @note The linesize parameters have the type ptrdiff_t here, while they are - * int for av_image_fill_linesizes(). - */ -int av_image_fill_plane_sizes(size_t size[4], enum AVPixelFormat pix_fmt, - int height, const ptrdiff_t linesizes[4]); - -/** - * Fill plane data pointers for an image with pixel format pix_fmt and - * height height. - * - * @param data pointers array to be filled with the pointer for each image plane - * @param ptr the pointer to a buffer which will contain the image - * @param linesizes the array containing the linesize for each - * plane, should be filled by av_image_fill_linesizes() - * @return the size in bytes required for the image buffer, a negative - * error code in case of failure - */ -int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int height, - uint8_t *ptr, const int linesizes[4]); - -/** - * Allocate an image with size w and h and pixel format pix_fmt, and - * fill pointers and linesizes accordingly. - * The allocated image buffer has to be freed by using - * av_freep(&pointers[0]). - * - * @param align the value to use for buffer size alignment - * @return the size in bytes required for the image buffer, a negative - * error code in case of failure - */ -int av_image_alloc(uint8_t *pointers[4], int linesizes[4], - int w, int h, enum AVPixelFormat pix_fmt, int align); - -/** - * Copy image plane from src to dst. - * That is, copy "height" number of lines of "bytewidth" bytes each. - * The first byte of each successive line is separated by *_linesize - * bytes. - * - * bytewidth must be contained by both absolute values of dst_linesize - * and src_linesize, otherwise the function behavior is undefined. - * - * @param dst_linesize linesize for the image plane in dst - * @param src_linesize linesize for the image plane in src - */ -void av_image_copy_plane(uint8_t *dst, int dst_linesize, - const uint8_t *src, int src_linesize, - int bytewidth, int height); - -/** - * Copy image in src_data to dst_data. - * - * @param dst_linesizes linesizes for the image in dst_data - * @param src_linesizes linesizes for the image in src_data - */ -void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], - const uint8_t *src_data[4], const int src_linesizes[4], - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Copy image data located in uncacheable (e.g. GPU mapped) memory. Where - * available, this function will use special functionality for reading from such - * memory, which may result in greatly improved performance compared to plain - * av_image_copy(). - * - * The data pointers and the linesizes must be aligned to the maximum required - * by the CPU architecture. - * - * @note The linesize parameters have the type ptrdiff_t here, while they are - * int for av_image_copy(). - * @note On x86, the linesizes currently need to be aligned to the cacheline - * size (i.e. 64) to get improved performance. - */ -void av_image_copy_uc_from(uint8_t *dst_data[4], const ptrdiff_t dst_linesizes[4], - const uint8_t *src_data[4], const ptrdiff_t src_linesizes[4], - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Setup the data pointers and linesizes based on the specified image - * parameters and the provided array. - * - * The fields of the given image are filled in by using the src - * address which points to the image data buffer. Depending on the - * specified pixel format, one or multiple image data pointers and - * line sizes will be set. If a planar format is specified, several - * pointers will be set pointing to the different picture planes and - * the line sizes of the different planes will be stored in the - * lines_sizes array. Call with src == NULL to get the required - * size for the src buffer. - * - * To allocate the buffer and fill in the dst_data and dst_linesize in - * one call, use av_image_alloc(). - * - * @param dst_data data pointers to be filled in - * @param dst_linesize linesizes for the image in dst_data to be filled in - * @param src buffer which will contain or contains the actual image data, can be NULL - * @param pix_fmt the pixel format of the image - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @param align the value used in src for linesize alignment - * @return the size in bytes required for src, a negative error code - * in case of failure - */ -int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], - const uint8_t *src, - enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Return the size in bytes of the amount of data required to store an - * image with the given parameters. - * - * @param pix_fmt the pixel format of the image - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @param align the assumed linesize alignment - * @return the buffer size in bytes, a negative error code in case of failure - */ -int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Copy image data from an image into a buffer. - * - * av_image_get_buffer_size() can be used to compute the required size - * for the buffer to fill. - * - * @param dst a buffer into which picture data will be copied - * @param dst_size the size in bytes of dst - * @param src_data pointers containing the source image data - * @param src_linesize linesizes for the image in src_data - * @param pix_fmt the pixel format of the source image - * @param width the width of the source image in pixels - * @param height the height of the source image in pixels - * @param align the assumed linesize alignment for dst - * @return the number of bytes written to dst, or a negative value - * (error code) on error - */ -int av_image_copy_to_buffer(uint8_t *dst, int dst_size, - const uint8_t * const src_data[4], const int src_linesize[4], - enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Check if the given dimension of an image is valid, meaning that all - * bytes of the image can be addressed with a signed int. - * - * @param w the width of the picture - * @param h the height of the picture - * @param log_offset the offset to sum to the log level for logging with log_ctx - * @param log_ctx the parent logging context, it may be NULL - * @return >= 0 if valid, a negative error code otherwise - */ -int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx); - -/** - * Check if the given dimension of an image is valid, meaning that all - * bytes of a plane of an image with the specified pix_fmt can be addressed - * with a signed int. - * - * @param w the width of the picture - * @param h the height of the picture - * @param max_pixels the maximum number of pixels the user wants to accept - * @param pix_fmt the pixel format, can be AV_PIX_FMT_NONE if unknown. - * @param log_offset the offset to sum to the log level for logging with log_ctx - * @param log_ctx the parent logging context, it may be NULL - * @return >= 0 if valid, a negative error code otherwise - */ -int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx); - -/** - * Check if the given sample aspect ratio of an image is valid. - * - * It is considered invalid if the denominator is 0 or if applying the ratio - * to the image size would make the smaller dimension less than 1. If the - * sar numerator is 0, it is considered unknown and will return as valid. - * - * @param w width of the image - * @param h height of the image - * @param sar sample aspect ratio of the image - * @return 0 if valid, a negative AVERROR code otherwise - */ -int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar); - -/** - * Overwrite the image data with black. This is suitable for filling a - * sub-rectangle of an image, meaning the padding between the right most pixel - * and the left most pixel on the next line will not be overwritten. For some - * formats, the image size might be rounded up due to inherent alignment. - * - * If the pixel format has alpha, the alpha is cleared to opaque. - * - * This can return an error if the pixel format is not supported. Normally, all - * non-hwaccel pixel formats should be supported. - * - * Passing NULL for dst_data is allowed. Then the function returns whether the - * operation would have succeeded. (It can return an error if the pix_fmt is - * not supported.) - * - * @param dst_data data pointers to destination image - * @param dst_linesize linesizes for the destination image - * @param pix_fmt the pixel format of the image - * @param range the color range of the image (important for colorspaces such as YUV) - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @return 0 if the image data was cleared, a negative AVERROR code otherwise - */ -int av_image_fill_black(uint8_t *dst_data[4], const ptrdiff_t dst_linesize[4], - enum AVPixelFormat pix_fmt, enum AVColorRange range, - int width, int height); - -/** - * @} - */ - - -#endif /* AVUTIL_IMGUTILS_H */ diff --git a/prebuilts/arm/include/libavutil/intfloat.h b/prebuilts/arm/include/libavutil/intfloat.h deleted file mode 100644 index fe3d7ec..0000000 --- a/prebuilts/arm/include/libavutil/intfloat.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2011 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_INTFLOAT_H -#define AVUTIL_INTFLOAT_H - -#include -#include "attributes.h" - -union av_intfloat32 { - uint32_t i; - float f; -}; - -union av_intfloat64 { - uint64_t i; - double f; -}; - -/** - * Reinterpret a 32-bit integer as a float. - */ -static av_always_inline float av_int2float(uint32_t i) -{ - union av_intfloat32 v; - v.i = i; - return v.f; -} - -/** - * Reinterpret a float as a 32-bit integer. - */ -static av_always_inline uint32_t av_float2int(float f) -{ - union av_intfloat32 v; - v.f = f; - return v.i; -} - -/** - * Reinterpret a 64-bit integer as a double. - */ -static av_always_inline double av_int2double(uint64_t i) -{ - union av_intfloat64 v; - v.i = i; - return v.f; -} - -/** - * Reinterpret a double as a 64-bit integer. - */ -static av_always_inline uint64_t av_double2int(double f) -{ - union av_intfloat64 v; - v.f = f; - return v.i; -} - -#endif /* AVUTIL_INTFLOAT_H */ diff --git a/prebuilts/arm/include/libavutil/intreadwrite.h b/prebuilts/arm/include/libavutil/intreadwrite.h deleted file mode 100644 index 4c8413a..0000000 --- a/prebuilts/arm/include/libavutil/intreadwrite.h +++ /dev/null @@ -1,644 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_INTREADWRITE_H -#define AVUTIL_INTREADWRITE_H - -#include -#include "libavutil/avconfig.h" -#include "attributes.h" -#include "bswap.h" - -typedef union { - uint64_t u64; - uint32_t u32[2]; - uint16_t u16[4]; - uint8_t u8 [8]; - double f64; - float f32[2]; -} av_alias av_alias64; - -typedef union { - uint32_t u32; - uint16_t u16[2]; - uint8_t u8 [4]; - float f32; -} av_alias av_alias32; - -typedef union { - uint16_t u16; - uint8_t u8 [2]; -} av_alias av_alias16; - -/* - * Arch-specific headers can provide any combination of - * AV_[RW][BLN](16|24|32|48|64) and AV_(COPY|SWAP|ZERO)(64|128) macros. - * Preprocessor symbols must be defined, even if these are implemented - * as inline functions. - * - * R/W means read/write, B/L/N means big/little/native endianness. - * The following macros require aligned access, compared to their - * unaligned variants: AV_(COPY|SWAP|ZERO)(64|128), AV_[RW]N[8-64]A. - * Incorrect usage may range from abysmal performance to crash - * depending on the platform. - * - * The unaligned variants are AV_[RW][BLN][8-64] and AV_COPY*U. - */ - -#ifdef HAVE_AV_CONFIG_H - -#include "config.h" - -#if ARCH_ARM -# include "arm/intreadwrite.h" -#elif ARCH_AVR32 -# include "avr32/intreadwrite.h" -#elif ARCH_MIPS -# include "mips/intreadwrite.h" -#elif ARCH_PPC -# include "ppc/intreadwrite.h" -#elif ARCH_TOMI -# include "tomi/intreadwrite.h" -#elif ARCH_X86 -# include "x86/intreadwrite.h" -#endif - -#endif /* HAVE_AV_CONFIG_H */ - -/* - * Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers. - */ - -#if AV_HAVE_BIGENDIAN - -# if defined(AV_RN16) && !defined(AV_RB16) -# define AV_RB16(p) AV_RN16(p) -# elif !defined(AV_RN16) && defined(AV_RB16) -# define AV_RN16(p) AV_RB16(p) -# endif - -# if defined(AV_WN16) && !defined(AV_WB16) -# define AV_WB16(p, v) AV_WN16(p, v) -# elif !defined(AV_WN16) && defined(AV_WB16) -# define AV_WN16(p, v) AV_WB16(p, v) -# endif - -# if defined(AV_RN24) && !defined(AV_RB24) -# define AV_RB24(p) AV_RN24(p) -# elif !defined(AV_RN24) && defined(AV_RB24) -# define AV_RN24(p) AV_RB24(p) -# endif - -# if defined(AV_WN24) && !defined(AV_WB24) -# define AV_WB24(p, v) AV_WN24(p, v) -# elif !defined(AV_WN24) && defined(AV_WB24) -# define AV_WN24(p, v) AV_WB24(p, v) -# endif - -# if defined(AV_RN32) && !defined(AV_RB32) -# define AV_RB32(p) AV_RN32(p) -# elif !defined(AV_RN32) && defined(AV_RB32) -# define AV_RN32(p) AV_RB32(p) -# endif - -# if defined(AV_WN32) && !defined(AV_WB32) -# define AV_WB32(p, v) AV_WN32(p, v) -# elif !defined(AV_WN32) && defined(AV_WB32) -# define AV_WN32(p, v) AV_WB32(p, v) -# endif - -# if defined(AV_RN48) && !defined(AV_RB48) -# define AV_RB48(p) AV_RN48(p) -# elif !defined(AV_RN48) && defined(AV_RB48) -# define AV_RN48(p) AV_RB48(p) -# endif - -# if defined(AV_WN48) && !defined(AV_WB48) -# define AV_WB48(p, v) AV_WN48(p, v) -# elif !defined(AV_WN48) && defined(AV_WB48) -# define AV_WN48(p, v) AV_WB48(p, v) -# endif - -# if defined(AV_RN64) && !defined(AV_RB64) -# define AV_RB64(p) AV_RN64(p) -# elif !defined(AV_RN64) && defined(AV_RB64) -# define AV_RN64(p) AV_RB64(p) -# endif - -# if defined(AV_WN64) && !defined(AV_WB64) -# define AV_WB64(p, v) AV_WN64(p, v) -# elif !defined(AV_WN64) && defined(AV_WB64) -# define AV_WN64(p, v) AV_WB64(p, v) -# endif - -#else /* AV_HAVE_BIGENDIAN */ - -# if defined(AV_RN16) && !defined(AV_RL16) -# define AV_RL16(p) AV_RN16(p) -# elif !defined(AV_RN16) && defined(AV_RL16) -# define AV_RN16(p) AV_RL16(p) -# endif - -# if defined(AV_WN16) && !defined(AV_WL16) -# define AV_WL16(p, v) AV_WN16(p, v) -# elif !defined(AV_WN16) && defined(AV_WL16) -# define AV_WN16(p, v) AV_WL16(p, v) -# endif - -# if defined(AV_RN24) && !defined(AV_RL24) -# define AV_RL24(p) AV_RN24(p) -# elif !defined(AV_RN24) && defined(AV_RL24) -# define AV_RN24(p) AV_RL24(p) -# endif - -# if defined(AV_WN24) && !defined(AV_WL24) -# define AV_WL24(p, v) AV_WN24(p, v) -# elif !defined(AV_WN24) && defined(AV_WL24) -# define AV_WN24(p, v) AV_WL24(p, v) -# endif - -# if defined(AV_RN32) && !defined(AV_RL32) -# define AV_RL32(p) AV_RN32(p) -# elif !defined(AV_RN32) && defined(AV_RL32) -# define AV_RN32(p) AV_RL32(p) -# endif - -# if defined(AV_WN32) && !defined(AV_WL32) -# define AV_WL32(p, v) AV_WN32(p, v) -# elif !defined(AV_WN32) && defined(AV_WL32) -# define AV_WN32(p, v) AV_WL32(p, v) -# endif - -# if defined(AV_RN48) && !defined(AV_RL48) -# define AV_RL48(p) AV_RN48(p) -# elif !defined(AV_RN48) && defined(AV_RL48) -# define AV_RN48(p) AV_RL48(p) -# endif - -# if defined(AV_WN48) && !defined(AV_WL48) -# define AV_WL48(p, v) AV_WN48(p, v) -# elif !defined(AV_WN48) && defined(AV_WL48) -# define AV_WN48(p, v) AV_WL48(p, v) -# endif - -# if defined(AV_RN64) && !defined(AV_RL64) -# define AV_RL64(p) AV_RN64(p) -# elif !defined(AV_RN64) && defined(AV_RL64) -# define AV_RN64(p) AV_RL64(p) -# endif - -# if defined(AV_WN64) && !defined(AV_WL64) -# define AV_WL64(p, v) AV_WN64(p, v) -# elif !defined(AV_WN64) && defined(AV_WL64) -# define AV_WN64(p, v) AV_WL64(p, v) -# endif - -#endif /* !AV_HAVE_BIGENDIAN */ - -/* - * Define AV_[RW]N helper macros to simplify definitions not provided - * by per-arch headers. - */ - -#if defined(__GNUC__) - -union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias; -union unaligned_32 { uint32_t l; } __attribute__((packed)) av_alias; -union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; - -# define AV_RN(s, p) (((const union unaligned_##s *) (p))->l) -# define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v)) - -#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_X64) || defined(_M_ARM64)) && AV_HAVE_FAST_UNALIGNED - -# define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p))) -# define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v)) - -#elif AV_HAVE_FAST_UNALIGNED - -# define AV_RN(s, p) (((const av_alias##s*)(p))->u##s) -# define AV_WN(s, p, v) (((av_alias##s*)(p))->u##s = (v)) - -#else - -#ifndef AV_RB16 -# define AV_RB16(x) \ - ((((const uint8_t*)(x))[0] << 8) | \ - ((const uint8_t*)(x))[1]) -#endif -#ifndef AV_WB16 -# define AV_WB16(p, val) do { \ - uint16_t d = (val); \ - ((uint8_t*)(p))[1] = (d); \ - ((uint8_t*)(p))[0] = (d)>>8; \ - } while(0) -#endif - -#ifndef AV_RL16 -# define AV_RL16(x) \ - ((((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL16 -# define AV_WL16(p, val) do { \ - uint16_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - } while(0) -#endif - -#ifndef AV_RB32 -# define AV_RB32(x) \ - (((uint32_t)((const uint8_t*)(x))[0] << 24) | \ - (((const uint8_t*)(x))[1] << 16) | \ - (((const uint8_t*)(x))[2] << 8) | \ - ((const uint8_t*)(x))[3]) -#endif -#ifndef AV_WB32 -# define AV_WB32(p, val) do { \ - uint32_t d = (val); \ - ((uint8_t*)(p))[3] = (d); \ - ((uint8_t*)(p))[2] = (d)>>8; \ - ((uint8_t*)(p))[1] = (d)>>16; \ - ((uint8_t*)(p))[0] = (d)>>24; \ - } while(0) -#endif - -#ifndef AV_RL32 -# define AV_RL32(x) \ - (((uint32_t)((const uint8_t*)(x))[3] << 24) | \ - (((const uint8_t*)(x))[2] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL32 -# define AV_WL32(p, val) do { \ - uint32_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - } while(0) -#endif - -#ifndef AV_RB64 -# define AV_RB64(x) \ - (((uint64_t)((const uint8_t*)(x))[0] << 56) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 48) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[5] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[6] << 8) | \ - (uint64_t)((const uint8_t*)(x))[7]) -#endif -#ifndef AV_WB64 -# define AV_WB64(p, val) do { \ - uint64_t d = (val); \ - ((uint8_t*)(p))[7] = (d); \ - ((uint8_t*)(p))[6] = (d)>>8; \ - ((uint8_t*)(p))[5] = (d)>>16; \ - ((uint8_t*)(p))[4] = (d)>>24; \ - ((uint8_t*)(p))[3] = (d)>>32; \ - ((uint8_t*)(p))[2] = (d)>>40; \ - ((uint8_t*)(p))[1] = (d)>>48; \ - ((uint8_t*)(p))[0] = (d)>>56; \ - } while(0) -#endif - -#ifndef AV_RL64 -# define AV_RL64(x) \ - (((uint64_t)((const uint8_t*)(x))[7] << 56) | \ - ((uint64_t)((const uint8_t*)(x))[6] << 48) | \ - ((uint64_t)((const uint8_t*)(x))[5] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ - (uint64_t)((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL64 -# define AV_WL64(p, val) do { \ - uint64_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - ((uint8_t*)(p))[4] = (d)>>32; \ - ((uint8_t*)(p))[5] = (d)>>40; \ - ((uint8_t*)(p))[6] = (d)>>48; \ - ((uint8_t*)(p))[7] = (d)>>56; \ - } while(0) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RN(s, p) AV_RB##s(p) -# define AV_WN(s, p, v) AV_WB##s(p, v) -#else -# define AV_RN(s, p) AV_RL##s(p) -# define AV_WN(s, p, v) AV_WL##s(p, v) -#endif - -#endif /* HAVE_FAST_UNALIGNED */ - -#ifndef AV_RN16 -# define AV_RN16(p) AV_RN(16, p) -#endif - -#ifndef AV_RN32 -# define AV_RN32(p) AV_RN(32, p) -#endif - -#ifndef AV_RN64 -# define AV_RN64(p) AV_RN(64, p) -#endif - -#ifndef AV_WN16 -# define AV_WN16(p, v) AV_WN(16, p, v) -#endif - -#ifndef AV_WN32 -# define AV_WN32(p, v) AV_WN(32, p, v) -#endif - -#ifndef AV_WN64 -# define AV_WN64(p, v) AV_WN(64, p, v) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RB(s, p) AV_RN##s(p) -# define AV_WB(s, p, v) AV_WN##s(p, v) -# define AV_RL(s, p) av_bswap##s(AV_RN##s(p)) -# define AV_WL(s, p, v) AV_WN##s(p, av_bswap##s(v)) -#else -# define AV_RB(s, p) av_bswap##s(AV_RN##s(p)) -# define AV_WB(s, p, v) AV_WN##s(p, av_bswap##s(v)) -# define AV_RL(s, p) AV_RN##s(p) -# define AV_WL(s, p, v) AV_WN##s(p, v) -#endif - -#define AV_RB8(x) (((const uint8_t*)(x))[0]) -#define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0) - -#define AV_RL8(x) AV_RB8(x) -#define AV_WL8(p, d) AV_WB8(p, d) - -#ifndef AV_RB16 -# define AV_RB16(p) AV_RB(16, p) -#endif -#ifndef AV_WB16 -# define AV_WB16(p, v) AV_WB(16, p, v) -#endif - -#ifndef AV_RL16 -# define AV_RL16(p) AV_RL(16, p) -#endif -#ifndef AV_WL16 -# define AV_WL16(p, v) AV_WL(16, p, v) -#endif - -#ifndef AV_RB32 -# define AV_RB32(p) AV_RB(32, p) -#endif -#ifndef AV_WB32 -# define AV_WB32(p, v) AV_WB(32, p, v) -#endif - -#ifndef AV_RL32 -# define AV_RL32(p) AV_RL(32, p) -#endif -#ifndef AV_WL32 -# define AV_WL32(p, v) AV_WL(32, p, v) -#endif - -#ifndef AV_RB64 -# define AV_RB64(p) AV_RB(64, p) -#endif -#ifndef AV_WB64 -# define AV_WB64(p, v) AV_WB(64, p, v) -#endif - -#ifndef AV_RL64 -# define AV_RL64(p) AV_RL(64, p) -#endif -#ifndef AV_WL64 -# define AV_WL64(p, v) AV_WL(64, p, v) -#endif - -#ifndef AV_RB24 -# define AV_RB24(x) \ - ((((const uint8_t*)(x))[0] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[2]) -#endif -#ifndef AV_WB24 -# define AV_WB24(p, d) do { \ - ((uint8_t*)(p))[2] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[0] = (d)>>16; \ - } while(0) -#endif - -#ifndef AV_RL24 -# define AV_RL24(x) \ - ((((const uint8_t*)(x))[2] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL24 -# define AV_WL24(p, d) do { \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - } while(0) -#endif - -#ifndef AV_RB48 -# define AV_RB48(x) \ - (((uint64_t)((const uint8_t*)(x))[0] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 8) | \ - (uint64_t)((const uint8_t*)(x))[5]) -#endif -#ifndef AV_WB48 -# define AV_WB48(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[5] = (d); \ - ((uint8_t*)(p))[4] = (d)>>8; \ - ((uint8_t*)(p))[3] = (d)>>16; \ - ((uint8_t*)(p))[2] = (d)>>24; \ - ((uint8_t*)(p))[1] = (d)>>32; \ - ((uint8_t*)(p))[0] = (d)>>40; \ - } while(0) -#endif - -#ifndef AV_RL48 -# define AV_RL48(x) \ - (((uint64_t)((const uint8_t*)(x))[5] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ - (uint64_t)((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL48 -# define AV_WL48(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - ((uint8_t*)(p))[4] = (d)>>32; \ - ((uint8_t*)(p))[5] = (d)>>40; \ - } while(0) -#endif - -/* - * The AV_[RW]NA macros access naturally aligned data - * in a type-safe way. - */ - -#define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s) -#define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v)) - -#ifndef AV_RN16A -# define AV_RN16A(p) AV_RNA(16, p) -#endif - -#ifndef AV_RN32A -# define AV_RN32A(p) AV_RNA(32, p) -#endif - -#ifndef AV_RN64A -# define AV_RN64A(p) AV_RNA(64, p) -#endif - -#ifndef AV_WN16A -# define AV_WN16A(p, v) AV_WNA(16, p, v) -#endif - -#ifndef AV_WN32A -# define AV_WN32A(p, v) AV_WNA(32, p, v) -#endif - -#ifndef AV_WN64A -# define AV_WN64A(p, v) AV_WNA(64, p, v) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RLA(s, p) av_bswap##s(AV_RN##s##A(p)) -# define AV_WLA(s, p, v) AV_WN##s##A(p, av_bswap##s(v)) -#else -# define AV_RLA(s, p) AV_RN##s##A(p) -# define AV_WLA(s, p, v) AV_WN##s##A(p, v) -#endif - -#ifndef AV_RL64A -# define AV_RL64A(p) AV_RLA(64, p) -#endif -#ifndef AV_WL64A -# define AV_WL64A(p, v) AV_WLA(64, p, v) -#endif - -/* - * The AV_COPYxxU macros are suitable for copying data to/from unaligned - * memory locations. - */ - -#define AV_COPYU(n, d, s) AV_WN##n(d, AV_RN##n(s)); - -#ifndef AV_COPY16U -# define AV_COPY16U(d, s) AV_COPYU(16, d, s) -#endif - -#ifndef AV_COPY32U -# define AV_COPY32U(d, s) AV_COPYU(32, d, s) -#endif - -#ifndef AV_COPY64U -# define AV_COPY64U(d, s) AV_COPYU(64, d, s) -#endif - -#ifndef AV_COPY128U -# define AV_COPY128U(d, s) \ - do { \ - AV_COPY64U(d, s); \ - AV_COPY64U((char *)(d) + 8, (const char *)(s) + 8); \ - } while(0) -#endif - -/* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be - * naturally aligned. They may be implemented using MMX, - * so emms_c() must be called before using any float code - * afterwards. - */ - -#define AV_COPY(n, d, s) \ - (((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n) - -#ifndef AV_COPY16 -# define AV_COPY16(d, s) AV_COPY(16, d, s) -#endif - -#ifndef AV_COPY32 -# define AV_COPY32(d, s) AV_COPY(32, d, s) -#endif - -#ifndef AV_COPY64 -# define AV_COPY64(d, s) AV_COPY(64, d, s) -#endif - -#ifndef AV_COPY128 -# define AV_COPY128(d, s) \ - do { \ - AV_COPY64(d, s); \ - AV_COPY64((char*)(d)+8, (char*)(s)+8); \ - } while(0) -#endif - -#define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*)(b)) - -#ifndef AV_SWAP64 -# define AV_SWAP64(a, b) AV_SWAP(64, a, b) -#endif - -#define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0) - -#ifndef AV_ZERO16 -# define AV_ZERO16(d) AV_ZERO(16, d) -#endif - -#ifndef AV_ZERO32 -# define AV_ZERO32(d) AV_ZERO(32, d) -#endif - -#ifndef AV_ZERO64 -# define AV_ZERO64(d) AV_ZERO(64, d) -#endif - -#ifndef AV_ZERO128 -# define AV_ZERO128(d) \ - do { \ - AV_ZERO64(d); \ - AV_ZERO64((char*)(d)+8); \ - } while(0) -#endif - -#endif /* AVUTIL_INTREADWRITE_H */ diff --git a/prebuilts/arm/include/libavutil/lfg.h b/prebuilts/arm/include/libavutil/lfg.h deleted file mode 100644 index 2b66920..0000000 --- a/prebuilts/arm/include/libavutil/lfg.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Lagged Fibonacci PRNG - * Copyright (c) 2008 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LFG_H -#define AVUTIL_LFG_H - -#include - -/** - * Context structure for the Lagged Fibonacci PRNG. - * The exact layout, types and content of this struct may change and should - * not be accessed directly. Only its sizeof() is guranteed to stay the same - * to allow easy instanciation. - */ -typedef struct AVLFG { - unsigned int state[64]; - int index; -} AVLFG; - -void av_lfg_init(AVLFG *c, unsigned int seed); - -/** - * Seed the state of the ALFG using binary data. - * - * Return value: 0 on success, negative value (AVERROR) on failure. - */ -int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length); - -/** - * Get the next random unsigned 32-bit number using an ALFG. - * - * Please also consider a simple LCG like state= state*1664525+1013904223, - * it may be good enough and faster for your specific use case. - */ -static inline unsigned int av_lfg_get(AVLFG *c){ - unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63]; - c->index += 1U; - return a; -} - -/** - * Get the next random unsigned 32-bit number using a MLFG. - * - * Please also consider av_lfg_get() above, it is faster. - */ -static inline unsigned int av_mlfg_get(AVLFG *c){ - unsigned int a= c->state[(c->index-55) & 63]; - unsigned int b= c->state[(c->index-24) & 63]; - a = c->state[c->index & 63] = 2*a*b+a+b; - c->index += 1U; - return a; -} - -/** - * Get the next two numbers generated by a Box-Muller Gaussian - * generator using the random numbers issued by lfg. - * - * @param out array where the two generated numbers are placed - */ -void av_bmg_get(AVLFG *lfg, double out[2]); - -#endif /* AVUTIL_LFG_H */ diff --git a/prebuilts/arm/include/libavutil/log.h b/prebuilts/arm/include/libavutil/log.h deleted file mode 100644 index 8edd6bb..0000000 --- a/prebuilts/arm/include/libavutil/log.h +++ /dev/null @@ -1,401 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LOG_H -#define AVUTIL_LOG_H - -#include -#include "avutil.h" -#include "attributes.h" -#include "version.h" - -typedef enum { - AV_CLASS_CATEGORY_NA = 0, - AV_CLASS_CATEGORY_INPUT, - AV_CLASS_CATEGORY_OUTPUT, - AV_CLASS_CATEGORY_MUXER, - AV_CLASS_CATEGORY_DEMUXER, - AV_CLASS_CATEGORY_ENCODER, - AV_CLASS_CATEGORY_DECODER, - AV_CLASS_CATEGORY_FILTER, - AV_CLASS_CATEGORY_BITSTREAM_FILTER, - AV_CLASS_CATEGORY_SWSCALER, - AV_CLASS_CATEGORY_SWRESAMPLER, - AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT = 40, - AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, - AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, - AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT, - AV_CLASS_CATEGORY_DEVICE_OUTPUT, - AV_CLASS_CATEGORY_DEVICE_INPUT, - AV_CLASS_CATEGORY_NB ///< not part of ABI/API -}AVClassCategory; - -#define AV_IS_INPUT_DEVICE(category) \ - (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_INPUT)) - -#define AV_IS_OUTPUT_DEVICE(category) \ - (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_OUTPUT)) - -struct AVOptionRanges; - -/** - * Describe the class of an AVClass context structure. That is an - * arbitrary struct of which the first field is a pointer to an - * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). - */ -typedef struct AVClass { - /** - * The name of the class; usually it is the same name as the - * context structure type to which the AVClass is associated. - */ - const char* class_name; - - /** - * A pointer to a function which returns the name of a context - * instance ctx associated with the class. - */ - const char* (*item_name)(void* ctx); - - /** - * a pointer to the first option specified in the class if any or NULL - * - * @see av_set_default_options() - */ - const struct AVOption *option; - - /** - * LIBAVUTIL_VERSION with which this structure was created. - * This is used to allow fields to be added without requiring major - * version bumps everywhere. - */ - - int version; - - /** - * Offset in the structure where log_level_offset is stored. - * 0 means there is no such variable - */ - int log_level_offset_offset; - - /** - * Offset in the structure where a pointer to the parent context for - * logging is stored. For example a decoder could pass its AVCodecContext - * to eval as such a parent context, which an av_log() implementation - * could then leverage to display the parent context. - * The offset can be NULL. - */ - int parent_log_context_offset; - - /** - * Return next AVOptions-enabled child or NULL - */ - void* (*child_next)(void *obj, void *prev); - -#if FF_API_CHILD_CLASS_NEXT - /** - * Return an AVClass corresponding to the next potential - * AVOptions-enabled child. - * - * The difference between child_next and this is that - * child_next iterates over _already existing_ objects, while - * child_class_next iterates over _all possible_ children. - */ - attribute_deprecated - const struct AVClass* (*child_class_next)(const struct AVClass *prev); -#endif - - /** - * Category used for visualization (like color) - * This is only set if the category is equal for all objects using this class. - * available since version (51 << 16 | 56 << 8 | 100) - */ - AVClassCategory category; - - /** - * Callback to return the category. - * available since version (51 << 16 | 59 << 8 | 100) - */ - AVClassCategory (*get_category)(void* ctx); - - /** - * Callback to return the supported/allowed ranges. - * available since version (52.12) - */ - int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags); - - /** - * Iterate over the AVClasses corresponding to potential AVOptions-enabled - * children. - * - * @param iter pointer to opaque iteration state. The caller must initialize - * *iter to NULL before the first call. - * @return AVClass for the next AVOptions-enabled child or NULL if there are - * no more such children. - * - * @note The difference between child_next and this is that child_next - * iterates over _already existing_ objects, while child_class_iterate - * iterates over _all possible_ children. - */ - const struct AVClass* (*child_class_iterate)(void **iter); -} AVClass; - -/** - * @addtogroup lavu_log - * - * @{ - * - * @defgroup lavu_log_constants Logging Constants - * - * @{ - */ - -/** - * Print no output. - */ -#define AV_LOG_QUIET -8 - -/** - * Something went really wrong and we will crash now. - */ -#define AV_LOG_PANIC 0 - -/** - * Something went wrong and recovery is not possible. - * For example, no header was found for a format which depends - * on headers or an illegal combination of parameters is used. - */ -#define AV_LOG_FATAL 8 - -/** - * Something went wrong and cannot losslessly be recovered. - * However, not all future data is affected. - */ -#define AV_LOG_ERROR 16 - -/** - * Something somehow does not look correct. This may or may not - * lead to problems. An example would be the use of '-vstrict -2'. - */ -#define AV_LOG_WARNING 24 - -/** - * Standard information. - */ -#define AV_LOG_INFO 32 - -/** - * Detailed information. - */ -#define AV_LOG_VERBOSE 40 - -/** - * Stuff which is only useful for libav* developers. - */ -#define AV_LOG_DEBUG 48 - -/** - * Extremely verbose debugging, useful for libav* development. - */ -#define AV_LOG_TRACE 56 - -#define AV_LOG_MAX_OFFSET (AV_LOG_TRACE - AV_LOG_QUIET) - -/** - * @} - */ - -/** - * Sets additional colors for extended debugging sessions. - * @code - av_log(ctx, AV_LOG_DEBUG|AV_LOG_C(134), "Message in purple\n"); - @endcode - * Requires 256color terminal support. Uses outside debugging is not - * recommended. - */ -#define AV_LOG_C(x) ((x) << 8) - -/** - * Send the specified message to the log if the level is less than or equal - * to the current av_log_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log_set_callback - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct or NULL if general log. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - */ -void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4); - -/** - * Send the specified message to the log once with the initial_level and then with - * the subsequent_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct or NULL if general log. - * @param initial_level importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant" for the first occurance. - * @param subsequent_level importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant" after the first occurance. - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param state a variable to keep trak of if a message has already been printed - * this must be initialized to 0 before the first use. The same state - * must not be accessed by 2 Threads simultaneously. - */ -void av_log_once(void* avcl, int initial_level, int subsequent_level, int *state, const char *fmt, ...) av_printf_format(5, 6); - - -/** - * Send the specified message to the log if the level is less than or equal - * to the current av_log_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log_set_callback - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param vl The arguments referenced by the format string. - */ -void av_vlog(void *avcl, int level, const char *fmt, va_list vl); - -/** - * Get the current log level - * - * @see lavu_log_constants - * - * @return Current log level - */ -int av_log_get_level(void); - -/** - * Set the log level - * - * @see lavu_log_constants - * - * @param level Logging level - */ -void av_log_set_level(int level); - -/** - * Set the logging callback - * - * @note The callback must be thread safe, even if the application does not use - * threads itself as some codecs are multithreaded. - * - * @see av_log_default_callback - * - * @param callback A logging function with a compatible signature. - */ -void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)); - -/** - * Default logging callback - * - * It prints the message to stderr, optionally colorizing it. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param vl The arguments referenced by the format string. - */ -void av_log_default_callback(void *avcl, int level, const char *fmt, - va_list vl); - -/** - * Return the context name - * - * @param ctx The AVClass context - * - * @return The AVClass class_name - */ -const char* av_default_item_name(void* ctx); -AVClassCategory av_default_get_category(void *ptr); - -/** - * Format a line of log the same way as the default callback. - * @param line buffer to receive the formatted line - * @param line_size size of the buffer - * @param print_prefix used to store whether the prefix must be printed; - * must point to a persistent integer initially set to 1 - */ -void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl, - char *line, int line_size, int *print_prefix); - -/** - * Format a line of log the same way as the default callback. - * @param line buffer to receive the formatted line; - * may be NULL if line_size is 0 - * @param line_size size of the buffer; at most line_size-1 characters will - * be written to the buffer, plus one null terminator - * @param print_prefix used to store whether the prefix must be printed; - * must point to a persistent integer initially set to 1 - * @return Returns a negative value if an error occurred, otherwise returns - * the number of characters that would have been written for a - * sufficiently large buffer, not including the terminating null - * character. If the return value is not less than line_size, it means - * that the log message was truncated to fit the buffer. - */ -int av_log_format_line2(void *ptr, int level, const char *fmt, va_list vl, - char *line, int line_size, int *print_prefix); - -/** - * Skip repeated messages, this requires the user app to use av_log() instead of - * (f)printf as the 2 would otherwise interfere and lead to - * "Last message repeated x times" messages below (f)printf messages with some - * bad luck. - * Also to receive the last, "last repeated" line if any, the user app must - * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end - */ -#define AV_LOG_SKIP_REPEATED 1 - -/** - * Include the log severity in messages originating from codecs. - * - * Results in messages such as: - * [rawvideo @ 0xDEADBEEF] [error] encode did not produce valid pts - */ -#define AV_LOG_PRINT_LEVEL 2 - -void av_log_set_flags(int arg); -int av_log_get_flags(void); - -/** - * @} - */ - -#endif /* AVUTIL_LOG_H */ diff --git a/prebuilts/arm/include/libavutil/lzo.h b/prebuilts/arm/include/libavutil/lzo.h deleted file mode 100644 index c034039..0000000 --- a/prebuilts/arm/include/libavutil/lzo.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * LZO 1x decompression - * copyright (c) 2006 Reimar Doeffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LZO_H -#define AVUTIL_LZO_H - -/** - * @defgroup lavu_lzo LZO - * @ingroup lavu_crypto - * - * @{ - */ - -#include - -/** @name Error flags returned by av_lzo1x_decode - * @{ */ -/// end of the input buffer reached before decoding finished -#define AV_LZO_INPUT_DEPLETED 1 -/// decoded data did not fit into output buffer -#define AV_LZO_OUTPUT_FULL 2 -/// a reference to previously decoded data was wrong -#define AV_LZO_INVALID_BACKPTR 4 -/// a non-specific error in the compressed bitstream -#define AV_LZO_ERROR 8 -/** @} */ - -#define AV_LZO_INPUT_PADDING 8 -#define AV_LZO_OUTPUT_PADDING 12 - -/** - * @brief Decodes LZO 1x compressed data. - * @param out output buffer - * @param outlen size of output buffer, number of bytes left are returned here - * @param in input buffer - * @param inlen size of input buffer, number of bytes left are returned here - * @return 0 on success, otherwise a combination of the error flags above - * - * Make sure all buffers are appropriately padded, in must provide - * AV_LZO_INPUT_PADDING, out must provide AV_LZO_OUTPUT_PADDING additional bytes. - */ -int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen); - -/** - * @} - */ - -#endif /* AVUTIL_LZO_H */ diff --git a/prebuilts/arm/include/libavutil/macros.h b/prebuilts/arm/include/libavutil/macros.h deleted file mode 100644 index 2007ee5..0000000 --- a/prebuilts/arm/include/libavutil/macros.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu - * Utility Preprocessor macros - */ - -#ifndef AVUTIL_MACROS_H -#define AVUTIL_MACROS_H - -/** - * @addtogroup preproc_misc Preprocessor String Macros - * - * 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)) - -#endif /* AVUTIL_MACROS_H */ diff --git a/prebuilts/arm/include/libavutil/mastering_display_metadata.h b/prebuilts/arm/include/libavutil/mastering_display_metadata.h deleted file mode 100644 index c23b07c..0000000 --- a/prebuilts/arm/include/libavutil/mastering_display_metadata.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2016 Neil Birkbeck - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MASTERING_DISPLAY_METADATA_H -#define AVUTIL_MASTERING_DISPLAY_METADATA_H - -#include "frame.h" -#include "rational.h" - - -/** - * Mastering display metadata capable of representing the color volume of - * the display used to master the content (SMPTE 2086:2014). - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with av_mastering_display_metadata_alloc() - * and its size is not a part of the public ABI. - */ -typedef struct AVMasteringDisplayMetadata { - /** - * CIE 1931 xy chromaticity coords of color primaries (r, g, b order). - */ - AVRational display_primaries[3][2]; - - /** - * CIE 1931 xy chromaticity coords of white point. - */ - AVRational white_point[2]; - - /** - * Min luminance of mastering display (cd/m^2). - */ - AVRational min_luminance; - - /** - * Max luminance of mastering display (cd/m^2). - */ - AVRational max_luminance; - - /** - * Flag indicating whether the display primaries (and white point) are set. - */ - int has_primaries; - - /** - * Flag indicating whether the luminance (min_ and max_) have been set. - */ - int has_luminance; - -} AVMasteringDisplayMetadata; - -/** - * Allocate an AVMasteringDisplayMetadata structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVMasteringDisplayMetadata filled with default values or NULL - * on failure. - */ -AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void); - -/** - * Allocate a complete AVMasteringDisplayMetadata and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVMasteringDisplayMetadata structure to be filled by caller. - */ -AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFrame *frame); - -/** - * Content light level needed by to transmit HDR over HDMI (CTA-861.3). - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with av_content_light_metadata_alloc() - * and its size is not a part of the public ABI. - */ -typedef struct AVContentLightMetadata { - /** - * Max content light level (cd/m^2). - */ - unsigned MaxCLL; - - /** - * Max average light level per frame (cd/m^2). - */ - unsigned MaxFALL; -} AVContentLightMetadata; - -/** - * Allocate an AVContentLightMetadata structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVContentLightMetadata filled with default values or NULL - * on failure. - */ -AVContentLightMetadata *av_content_light_metadata_alloc(size_t *size); - -/** - * Allocate a complete AVContentLightMetadata and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVContentLightMetadata structure to be filled by caller. - */ -AVContentLightMetadata *av_content_light_metadata_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_MASTERING_DISPLAY_METADATA_H */ diff --git a/prebuilts/arm/include/libavutil/mathematics.h b/prebuilts/arm/include/libavutil/mathematics.h deleted file mode 100644 index 64d4137..0000000 --- a/prebuilts/arm/include/libavutil/mathematics.h +++ /dev/null @@ -1,243 +0,0 @@ -/* - * copyright (c) 2005-2012 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @addtogroup lavu_math - * Mathematical utilities for working with timestamp and time base. - */ - -#ifndef AVUTIL_MATHEMATICS_H -#define AVUTIL_MATHEMATICS_H - -#include -#include -#include "attributes.h" -#include "rational.h" -#include "intfloat.h" - -#ifndef M_E -#define M_E 2.7182818284590452354 /* e */ -#endif -#ifndef M_LN2 -#define M_LN2 0.69314718055994530942 /* log_e 2 */ -#endif -#ifndef M_LN10 -#define M_LN10 2.30258509299404568402 /* log_e 10 */ -#endif -#ifndef M_LOG2_10 -#define M_LOG2_10 3.32192809488736234787 /* log_2 10 */ -#endif -#ifndef M_PHI -#define M_PHI 1.61803398874989484820 /* phi / golden ratio */ -#endif -#ifndef M_PI -#define M_PI 3.14159265358979323846 /* pi */ -#endif -#ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 /* pi/2 */ -#endif -#ifndef M_SQRT1_2 -#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ -#endif -#ifndef M_SQRT2 -#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ -#endif -#ifndef NAN -#define NAN av_int2float(0x7fc00000) -#endif -#ifndef INFINITY -#define INFINITY av_int2float(0x7f800000) -#endif - -/** - * @addtogroup lavu_math - * - * @{ - */ - -/** - * Rounding methods. - */ -enum AVRounding { - AV_ROUND_ZERO = 0, ///< Round toward zero. - AV_ROUND_INF = 1, ///< Round away from zero. - AV_ROUND_DOWN = 2, ///< Round toward -infinity. - AV_ROUND_UP = 3, ///< Round toward +infinity. - AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero. - /** - * Flag telling rescaling functions to pass `INT64_MIN`/`MAX` through - * unchanged, avoiding special cases for #AV_NOPTS_VALUE. - * - * Unlike other values of the enumeration AVRounding, this value is a - * bitmask that must be used in conjunction with another value of the - * enumeration through a bitwise OR, in order to set behavior for normal - * cases. - * - * @code{.c} - * av_rescale_rnd(3, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); - * // Rescaling 3: - * // Calculating 3 * 1 / 2 - * // 3 / 2 is rounded up to 2 - * // => 2 - * - * av_rescale_rnd(AV_NOPTS_VALUE, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); - * // Rescaling AV_NOPTS_VALUE: - * // AV_NOPTS_VALUE == INT64_MIN - * // AV_NOPTS_VALUE is passed through - * // => AV_NOPTS_VALUE - * @endcode - */ - AV_ROUND_PASS_MINMAX = 8192, -}; - -/** - * Compute the greatest common divisor of two integer operands. - * - * @param a,b Operands - * @return GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0; - * if a == 0 and b == 0, returns 0. - */ -int64_t av_const av_gcd(int64_t a, int64_t b); - -/** - * Rescale a 64-bit integer with rounding to nearest. - * - * The operation is mathematically equivalent to `a * b / c`, but writing that - * directly can overflow. - * - * This function is equivalent to av_rescale_rnd() with #AV_ROUND_NEAR_INF. - * - * @see av_rescale_rnd(), av_rescale_q(), av_rescale_q_rnd() - */ -int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const; - -/** - * Rescale a 64-bit integer with specified rounding. - * - * The operation is mathematically equivalent to `a * b / c`, but writing that - * directly can overflow, and does not support different rounding methods. - * If the result is not representable then INT64_MIN is returned. - * - * @see av_rescale(), av_rescale_q(), av_rescale_q_rnd() - */ -int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd) av_const; - -/** - * Rescale a 64-bit integer by 2 rational numbers. - * - * The operation is mathematically equivalent to `a * bq / cq`. - * - * This function is equivalent to av_rescale_q_rnd() with #AV_ROUND_NEAR_INF. - * - * @see av_rescale(), av_rescale_rnd(), av_rescale_q_rnd() - */ -int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; - -/** - * Rescale a 64-bit integer by 2 rational numbers with specified rounding. - * - * The operation is mathematically equivalent to `a * bq / cq`. - * - * @see av_rescale(), av_rescale_rnd(), av_rescale_q() - */ -int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, - enum AVRounding rnd) av_const; - -/** - * Compare two timestamps each in its own time base. - * - * @return One of the following values: - * - -1 if `ts_a` is before `ts_b` - * - 1 if `ts_a` is after `ts_b` - * - 0 if they represent the same position - * - * @warning - * The result of the function is undefined if one of the timestamps is outside - * the `int64_t` range when represented in the other's timebase. - */ -int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b); - -/** - * Compare the remainders of two integer operands divided by a common divisor. - * - * In other words, compare the least significant `log2(mod)` bits of integers - * `a` and `b`. - * - * @code{.c} - * av_compare_mod(0x11, 0x02, 0x10) < 0 // since 0x11 % 0x10 (0x1) < 0x02 % 0x10 (0x2) - * av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) > 0x02 % 0x20 (0x02) - * @endcode - * - * @param a,b Operands - * @param mod Divisor; must be a power of 2 - * @return - * - a negative value if `a % mod < b % mod` - * - a positive value if `a % mod > b % mod` - * - zero if `a % mod == b % mod` - */ -int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod); - -/** - * Rescale a timestamp while preserving known durations. - * - * This function is designed to be called per audio packet to scale the input - * timestamp to a different time base. Compared to a simple av_rescale_q() - * call, this function is robust against possible inconsistent frame durations. - * - * The `last` parameter is a state variable that must be preserved for all - * subsequent calls for the same stream. For the first call, `*last` should be - * initialized to #AV_NOPTS_VALUE. - * - * @param[in] in_tb Input time base - * @param[in] in_ts Input timestamp - * @param[in] fs_tb Duration time base; typically this is finer-grained - * (greater) than `in_tb` and `out_tb` - * @param[in] duration Duration till the next call to this function (i.e. - * duration of the current packet/frame) - * @param[in,out] last Pointer to a timestamp expressed in terms of - * `fs_tb`, acting as a state variable - * @param[in] out_tb Output timebase - * @return Timestamp expressed in terms of `out_tb` - * - * @note In the context of this function, "duration" is in term of samples, not - * seconds. - */ -int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts, AVRational fs_tb, int duration, int64_t *last, AVRational out_tb); - -/** - * Add a value to a timestamp. - * - * This function guarantees that when the same value is repeatly added that - * no accumulation of rounding errors occurs. - * - * @param[in] ts Input timestamp - * @param[in] ts_tb Input timestamp time base - * @param[in] inc Value to be added - * @param[in] inc_tb Time base of `inc` - */ -int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc); - - -/** - * @} - */ - -#endif /* AVUTIL_MATHEMATICS_H */ diff --git a/prebuilts/arm/include/libavutil/md5.h b/prebuilts/arm/include/libavutil/md5.h deleted file mode 100644 index ca72ccb..0000000 --- a/prebuilts/arm/include/libavutil/md5.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_md5 - * Public header for MD5 hash function implementation. - */ - -#ifndef AVUTIL_MD5_H -#define AVUTIL_MD5_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_md5 MD5 - * @ingroup lavu_hash - * MD5 hash function implementation. - * - * @{ - */ - -extern const int av_md5_size; - -struct AVMD5; - -/** - * Allocate an AVMD5 context. - */ -struct AVMD5 *av_md5_alloc(void); - -/** - * Initialize MD5 hashing. - * - * @param ctx pointer to the function context (of size av_md5_size) - */ -void av_md5_init(struct AVMD5 *ctx); - -/** - * Update hash value. - * - * @param ctx hash function context - * @param src input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, int len); -#else -void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param ctx hash function context - * @param dst buffer where output digest value is stored - */ -void av_md5_final(struct AVMD5 *ctx, uint8_t *dst); - -/** - * Hash an array of data. - * - * @param dst The output buffer to write the digest into - * @param src The data to hash - * @param len The length of the data, in bytes - */ -#if FF_API_CRYPTO_SIZE_T -void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len); -#else -void av_md5_sum(uint8_t *dst, const uint8_t *src, size_t len); -#endif - -/** - * @} - */ - -#endif /* AVUTIL_MD5_H */ diff --git a/prebuilts/arm/include/libavutil/mem.h b/prebuilts/arm/include/libavutil/mem.h deleted file mode 100644 index e21a1fe..0000000 --- a/prebuilts/arm/include/libavutil/mem.h +++ /dev/null @@ -1,706 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_mem - * Memory handling functions - */ - -#ifndef AVUTIL_MEM_H -#define AVUTIL_MEM_H - -#include -#include - -#include "attributes.h" -#include "error.h" -#include "avutil.h" -#include "version.h" - -/** - * @addtogroup lavu_mem - * Utilities for manipulating memory. - * - * FFmpeg has several applications of memory that are not required of a typical - * program. For example, the computing-heavy components like video decoding and - * encoding can be sped up significantly through the use of aligned memory. - * - * However, for each of FFmpeg's applications of memory, there might not be a - * recognized or standardized API for that specific use. Memory alignment, for - * instance, varies wildly depending on operating systems, architectures, and - * compilers. Hence, this component of @ref libavutil is created to make - * dealing with memory consistently possible on all platforms. - * - * @{ - */ - -#if FF_API_DECLARE_ALIGNED -/** - * - * @defgroup lavu_mem_macros Alignment Macros - * Helper macros for declaring aligned variables. - * @{ - */ - -/** - * @def DECLARE_ALIGNED(n,t,v) - * Declare a variable that is aligned in memory. - * - * @code{.c} - * DECLARE_ALIGNED(16, uint16_t, aligned_int) = 42; - * DECLARE_ALIGNED(32, uint8_t, aligned_array)[128]; - * - * // The default-alignment equivalent would be - * uint16_t aligned_int = 42; - * uint8_t aligned_array[128]; - * @endcode - * - * @param n Minimum alignment in bytes - * @param t Type of the variable (or array element) - * @param v Name of the variable - */ - -/** - * @def DECLARE_ASM_ALIGNED(n,t,v) - * Declare an aligned variable appropriate for use in inline assembly code. - * - * @code{.c} - * DECLARE_ASM_ALIGNED(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008); - * @endcode - * - * @param n Minimum alignment in bytes - * @param t Type of the variable (or array element) - * @param v Name of the variable - */ - -/** - * @def DECLARE_ASM_CONST(n,t,v) - * Declare a static constant aligned variable appropriate for use in inline - * assembly code. - * - * @code{.c} - * DECLARE_ASM_CONST(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008); - * @endcode - * - * @param n Minimum alignment in bytes - * @param t Type of the variable (or array element) - * @param v Name of the variable - */ - -#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v -#elif defined(__DJGPP__) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (FFMIN(n, 16)))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v - #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v -#elif defined(__GNUC__) || defined(__clang__) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (n))) v - #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v -#elif defined(_MSC_VER) - #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v - #define DECLARE_ASM_ALIGNED(n,t,v) __declspec(align(n)) t v - #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v -#else - #define DECLARE_ALIGNED(n,t,v) t v - #define DECLARE_ASM_ALIGNED(n,t,v) t v - #define DECLARE_ASM_CONST(n,t,v) static const t v -#endif - -/** - * @} - */ -#endif - -/** - * @defgroup lavu_mem_attrs Function Attributes - * Function attributes applicable to memory handling functions. - * - * These function attributes can help compilers emit more useful warnings, or - * generate better code. - * @{ - */ - -/** - * @def av_malloc_attrib - * Function attribute denoting a malloc-like function. - * - * @see Function attribute `malloc` in GCC's documentation - */ - -#if AV_GCC_VERSION_AT_LEAST(3,1) - #define av_malloc_attrib __attribute__((__malloc__)) -#else - #define av_malloc_attrib -#endif - -/** - * @def av_alloc_size(...) - * Function attribute used on a function that allocates memory, whose size is - * given by the specified parameter(s). - * - * @code{.c} - * void *av_malloc(size_t size) av_alloc_size(1); - * void *av_calloc(size_t nmemb, size_t size) av_alloc_size(1, 2); - * @endcode - * - * @param ... One or two parameter indexes, separated by a comma - * - * @see Function attribute `alloc_size` in GCC's documentation - */ - -#if AV_GCC_VERSION_AT_LEAST(4,3) - #define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__))) -#else - #define av_alloc_size(...) -#endif - -/** - * @} - */ - -/** - * @defgroup lavu_mem_funcs Heap Management - * Functions responsible for allocating, freeing, and copying memory. - * - * All memory allocation functions have a built-in upper limit of `INT_MAX` - * bytes. This may be changed with av_max_alloc(), although exercise extreme - * caution when doing so. - * - * @{ - */ - -/** - * Allocate a memory block with alignment suitable for all memory accesses - * (including vectors if available on the CPU). - * - * @param size Size in bytes for the memory block to be allocated - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * @see av_mallocz() - */ -void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1); - -/** - * Allocate a memory block with alignment suitable for all memory accesses - * (including vectors if available on the CPU) and zero all the bytes of the - * block. - * - * @param size Size in bytes for the memory block to be allocated - * @return Pointer to the allocated block, or `NULL` if it cannot be allocated - * @see av_malloc() - */ -void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1); - -/** - * Allocate a memory block for an array with av_malloc(). - * - * The allocated memory will have size `size * nmemb` bytes. - * - * @param nmemb Number of element - * @param size Size of a single element - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * @see av_malloc() - */ -av_alloc_size(1, 2) void *av_malloc_array(size_t nmemb, size_t size); - -/** - * Allocate a memory block for an array with av_mallocz(). - * - * The allocated memory will have size `size * nmemb` bytes. - * - * @param nmemb Number of elements - * @param size Size of the single element - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * - * @see av_mallocz() - * @see av_malloc_array() - */ -av_alloc_size(1, 2) void *av_mallocz_array(size_t nmemb, size_t size); - -/** - * Non-inlined equivalent of av_mallocz_array(). - * - * Created for symmetry with the calloc() C function. - */ -void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib; - -/** - * Allocate, reallocate, or free a block of memory. - * - * If `ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is - * zero, free the memory block pointed to by `ptr`. Otherwise, expand or - * shrink that block of memory according to `size`. - * - * @param ptr Pointer to a memory block already allocated with - * av_realloc() or `NULL` - * @param size Size in bytes of the memory block to be allocated or - * reallocated - * - * @return Pointer to a newly-reallocated block or `NULL` if the block - * cannot be reallocated or the function is used to free the memory block - * - * @warning Unlike av_malloc(), the returned pointer is not guaranteed to be - * correctly aligned. - * @see av_fast_realloc() - * @see av_reallocp() - */ -void *av_realloc(void *ptr, size_t size) av_alloc_size(2); - -/** - * Allocate, reallocate, or free a block of memory through a pointer to a - * pointer. - * - * If `*ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is - * zero, free the memory block pointed to by `*ptr`. Otherwise, expand or - * shrink that block of memory according to `size`. - * - * @param[in,out] ptr Pointer to a pointer to a memory block already allocated - * with av_realloc(), or a pointer to `NULL`. The pointer - * is updated on success, or freed on failure. - * @param[in] size Size in bytes for the memory block to be allocated or - * reallocated - * - * @return Zero on success, an AVERROR error code on failure - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. - */ -av_warn_unused_result -int av_reallocp(void *ptr, size_t size); - -/** - * Allocate, reallocate, or free a block of memory. - * - * This function does the same thing as av_realloc(), except: - * - It takes two size arguments and allocates `nelem * elsize` bytes, - * after checking the result of the multiplication for integer overflow. - * - It frees the input block in case of failure, thus avoiding the memory - * leak with the classic - * @code{.c} - * buf = realloc(buf); - * if (!buf) - * return -1; - * @endcode - * pattern. - */ -void *av_realloc_f(void *ptr, size_t nelem, size_t elsize); - -/** - * Allocate, reallocate, or free an array. - * - * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. If - * `nmemb` is zero, free the memory block pointed to by `ptr`. - * - * @param ptr Pointer to a memory block already allocated with - * av_realloc() or `NULL` - * @param nmemb Number of elements in the array - * @param size Size of the single element of the array - * - * @return Pointer to a newly-reallocated block or NULL if the block - * cannot be reallocated or the function is used to free the memory block - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. - * @see av_reallocp_array() - */ -av_alloc_size(2, 3) void *av_realloc_array(void *ptr, size_t nmemb, size_t size); - -/** - * Allocate, reallocate, or free an array through a pointer to a pointer. - * - * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. If `nmemb` is - * zero, free the memory block pointed to by `*ptr`. - * - * @param[in,out] ptr Pointer to a pointer to a memory block already - * allocated with av_realloc(), or a pointer to `NULL`. - * The pointer is updated on success, or freed on failure. - * @param[in] nmemb Number of elements - * @param[in] size Size of the single element - * - * @return Zero on success, an AVERROR error code on failure - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. - */ -int av_reallocp_array(void *ptr, size_t nmemb, size_t size); - -/** - * Reallocate the given buffer if it is not large enough, otherwise do nothing. - * - * If the given buffer is `NULL`, then a new uninitialized buffer is allocated. - * - * If the given buffer is not large enough, and reallocation fails, `NULL` is - * returned and `*size` is set to 0, but the original buffer is not changed or - * freed. - * - * A typical use pattern follows: - * - * @code{.c} - * uint8_t *buf = ...; - * uint8_t *new_buf = av_fast_realloc(buf, ¤t_size, size_needed); - * if (!new_buf) { - * // Allocation failed; clean up original buffer - * av_freep(&buf); - * return AVERROR(ENOMEM); - * } - * @endcode - * - * @param[in,out] ptr Already allocated buffer, or `NULL` - * @param[in,out] size Pointer to the size of buffer `ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `ptr` - * @return `ptr` if the buffer is large enough, a pointer to newly reallocated - * buffer if the buffer was not large enough, or `NULL` in case of - * error - * @see av_realloc() - * @see av_fast_malloc() - */ -void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Allocate a buffer, reusing the given one if large enough. - * - * Contrary to av_fast_realloc(), the current buffer contents might not be - * preserved and on error the old buffer is freed, thus no special handling to - * avoid memleaks is necessary. - * - * `*ptr` is allowed to be `NULL`, in which case allocation always happens if - * `size_needed` is greater than 0. - * - * @code{.c} - * uint8_t *buf = ...; - * av_fast_malloc(&buf, ¤t_size, size_needed); - * if (!buf) { - * // Allocation failed; buf already freed - * return AVERROR(ENOMEM); - * } - * @endcode - * - * @param[in,out] ptr Pointer to pointer to an already allocated buffer. - * `*ptr` will be overwritten with pointer to new - * buffer on success or `NULL` on failure - * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `*ptr` - * @see av_realloc() - * @see av_fast_mallocz() - */ -void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Allocate and clear a buffer, reusing the given one if large enough. - * - * Like av_fast_malloc(), but all newly allocated space is initially cleared. - * Reused buffer is not cleared. - * - * `*ptr` is allowed to be `NULL`, in which case allocation always happens if - * `size_needed` is greater than 0. - * - * @param[in,out] ptr Pointer to pointer to an already allocated buffer. - * `*ptr` will be overwritten with pointer to new - * buffer on success or `NULL` on failure - * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `*ptr` - * @see av_fast_malloc() - */ -void av_fast_mallocz(void *ptr, unsigned int *size, size_t min_size); - -/** - * Free a memory block which has been allocated with a function of av_malloc() - * or av_realloc() family. - * - * @param ptr Pointer to the memory block which should be freed. - * - * @note `ptr = NULL` is explicitly allowed. - * @note It is recommended that you use av_freep() instead, to prevent leaving - * behind dangling pointers. - * @see av_freep() - */ -void av_free(void *ptr); - -/** - * Free a memory block which has been allocated with a function of av_malloc() - * or av_realloc() family, and set the pointer pointing to it to `NULL`. - * - * @code{.c} - * uint8_t *buf = av_malloc(16); - * av_free(buf); - * // buf now contains a dangling pointer to freed memory, and accidental - * // dereference of buf will result in a use-after-free, which may be a - * // security risk. - * - * uint8_t *buf = av_malloc(16); - * av_freep(&buf); - * // buf is now NULL, and accidental dereference will only result in a - * // NULL-pointer dereference. - * @endcode - * - * @param ptr Pointer to the pointer to the memory block which should be freed - * @note `*ptr = NULL` is safe and leads to no action. - * @see av_free() - */ -void av_freep(void *ptr); - -/** - * Duplicate a string. - * - * @param s String to be duplicated - * @return Pointer to a newly-allocated string containing a - * copy of `s` or `NULL` if the string cannot be allocated - * @see av_strndup() - */ -char *av_strdup(const char *s) av_malloc_attrib; - -/** - * Duplicate a substring of a string. - * - * @param s String to be duplicated - * @param len Maximum length of the resulting string (not counting the - * terminating byte) - * @return Pointer to a newly-allocated string containing a - * substring of `s` or `NULL` if the string cannot be allocated - */ -char *av_strndup(const char *s, size_t len) av_malloc_attrib; - -/** - * Duplicate a buffer with av_malloc(). - * - * @param p Buffer to be duplicated - * @param size Size in bytes of the buffer copied - * @return Pointer to a newly allocated buffer containing a - * copy of `p` or `NULL` if the buffer cannot be allocated - */ -void *av_memdup(const void *p, size_t size); - -/** - * Overlapping memcpy() implementation. - * - * @param dst Destination buffer - * @param back Number of bytes back to start copying (i.e. the initial size of - * the overlapping window); must be > 0 - * @param cnt Number of bytes to copy; must be >= 0 - * - * @note `cnt > back` is valid, this will copy the bytes we just copied, - * thus creating a repeating pattern with a period length of `back`. - */ -void av_memcpy_backptr(uint8_t *dst, int back, int cnt); - -/** - * @} - */ - -/** - * @defgroup lavu_mem_dynarray Dynamic Array - * - * Utilities to make an array grow when needed. - * - * Sometimes, the programmer would want to have an array that can grow when - * needed. The libavutil dynamic array utilities fill that need. - * - * libavutil supports two systems of appending elements onto a dynamically - * allocated array, the first one storing the pointer to the value in the - * array, and the second storing the value directly. In both systems, the - * caller is responsible for maintaining a variable containing the length of - * the array, as well as freeing of the array after use. - * - * The first system stores pointers to values in a block of dynamically - * allocated memory. Since only pointers are stored, the function does not need - * to know the size of the type. Both av_dynarray_add() and - * av_dynarray_add_nofree() implement this system. - * - * @code - * type **array = NULL; //< an array of pointers to values - * int nb = 0; //< a variable to keep track of the length of the array - * - * type to_be_added = ...; - * type to_be_added2 = ...; - * - * av_dynarray_add(&array, &nb, &to_be_added); - * if (nb == 0) - * return AVERROR(ENOMEM); - * - * av_dynarray_add(&array, &nb, &to_be_added2); - * if (nb == 0) - * return AVERROR(ENOMEM); - * - * // Now: - * // nb == 2 - * // &to_be_added == array[0] - * // &to_be_added2 == array[1] - * - * av_freep(&array); - * @endcode - * - * The second system stores the value directly in a block of memory. As a - * result, the function has to know the size of the type. av_dynarray2_add() - * implements this mechanism. - * - * @code - * type *array = NULL; //< an array of values - * int nb = 0; //< a variable to keep track of the length of the array - * - * type to_be_added = ...; - * type to_be_added2 = ...; - * - * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), NULL); - * if (!addr) - * return AVERROR(ENOMEM); - * memcpy(addr, &to_be_added, sizeof(to_be_added)); - * - * // Shortcut of the above. - * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), - * (const void *)&to_be_added2); - * if (!addr) - * return AVERROR(ENOMEM); - * - * // Now: - * // nb == 2 - * // to_be_added == array[0] - * // to_be_added2 == array[1] - * - * av_freep(&array); - * @endcode - * - * @{ - */ - -/** - * Add the pointer to an element to a dynamic array. - * - * The array to grow is supposed to be an array of pointers to - * structures, and the element to add must be a pointer to an already - * allocated structure. - * - * The array is reallocated when its size reaches powers of 2. - * Therefore, the amortized cost of adding an element is constant. - * - * In case of success, the pointer to the array is updated in order to - * point to the new grown array, and the number pointed to by `nb_ptr` - * is incremented. - * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and - * `*nb_ptr` is set to 0. - * - * @param[in,out] tab_ptr Pointer to the array to grow - * @param[in,out] nb_ptr Pointer to the number of elements in the array - * @param[in] elem Element to add - * @see av_dynarray_add_nofree(), av_dynarray2_add() - */ -void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem); - -/** - * Add an element to a dynamic array. - * - * Function has the same functionality as av_dynarray_add(), - * but it doesn't free memory on fails. It returns error code - * instead and leave current buffer untouched. - * - * @return >=0 on success, negative otherwise - * @see av_dynarray_add(), av_dynarray2_add() - */ -av_warn_unused_result -int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem); - -/** - * Add an element of size `elem_size` to a dynamic array. - * - * The array is reallocated when its number of elements reaches powers of 2. - * Therefore, the amortized cost of adding an element is constant. - * - * In case of success, the pointer to the array is updated in order to - * point to the new grown array, and the number pointed to by `nb_ptr` - * is incremented. - * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and - * `*nb_ptr` is set to 0. - * - * @param[in,out] tab_ptr Pointer to the array to grow - * @param[in,out] nb_ptr Pointer to the number of elements in the array - * @param[in] elem_size Size in bytes of an element in the array - * @param[in] elem_data Pointer to the data of the element to add. If - * `NULL`, the space of the newly added element is - * allocated but left uninitialized. - * - * @return Pointer to the data of the element to copy in the newly allocated - * space - * @see av_dynarray_add(), av_dynarray_add_nofree() - */ -void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size, - const uint8_t *elem_data); - -/** - * @} - */ - -/** - * @defgroup lavu_mem_misc Miscellaneous Functions - * - * Other functions related to memory allocation. - * - * @{ - */ - -/** - * Multiply two `size_t` values checking for overflow. - * - * @param[in] a,b Operands of multiplication - * @param[out] r Pointer to the result of the operation - * @return 0 on success, AVERROR(EINVAL) on overflow - */ -static inline int av_size_mult(size_t a, size_t b, size_t *r) -{ - size_t t = a * b; - /* Hack inspired from glibc: don't try the division if nelem and elsize - * are both less than sqrt(SIZE_MAX). */ - if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) - return AVERROR(EINVAL); - *r = t; - return 0; -} - -/** - * Set the maximum size that may be allocated in one block. - * - * The value specified with this function is effective for all libavutil's @ref - * lavu_mem_funcs "heap management functions." - * - * By default, the max value is defined as `INT_MAX`. - * - * @param max Value to be set as the new maximum size - * - * @warning Exercise extreme caution when using this function. Don't touch - * this if you do not understand the full consequence of doing so. - */ -void av_max_alloc(size_t max); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_MEM_H */ diff --git a/prebuilts/arm/include/libavutil/motion_vector.h b/prebuilts/arm/include/libavutil/motion_vector.h deleted file mode 100644 index ec29556..0000000 --- a/prebuilts/arm/include/libavutil/motion_vector.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MOTION_VECTOR_H -#define AVUTIL_MOTION_VECTOR_H - -#include - -typedef struct AVMotionVector { - /** - * Where the current macroblock comes from; negative value when it comes - * from the past, positive value when it comes from the future. - * XXX: set exact relative ref frame reference instead of a +/- 1 "direction". - */ - int32_t source; - /** - * Width and height of the block. - */ - uint8_t w, h; - /** - * Absolute source position. Can be outside the frame area. - */ - int16_t src_x, src_y; - /** - * Absolute destination position. Can be outside the frame area. - */ - int16_t dst_x, dst_y; - /** - * Extra flag information. - * Currently unused. - */ - uint64_t flags; - /** - * Motion vector - * src_x = dst_x + motion_x / motion_scale - * src_y = dst_y + motion_y / motion_scale - */ - int32_t motion_x, motion_y; - uint16_t motion_scale; -} AVMotionVector; - -#endif /* AVUTIL_MOTION_VECTOR_H */ diff --git a/prebuilts/arm/include/libavutil/murmur3.h b/prebuilts/arm/include/libavutil/murmur3.h deleted file mode 100644 index b3b3a07..0000000 --- a/prebuilts/arm/include/libavutil/murmur3.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2013 Reimar Döffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_murmur3 - * Public header for MurmurHash3 hash function implementation. - */ - -#ifndef AVUTIL_MURMUR3_H -#define AVUTIL_MURMUR3_H - -#include -#include - -#include "version.h" - -/** - * @defgroup lavu_murmur3 Murmur3 - * @ingroup lavu_hash - * MurmurHash3 hash function implementation. - * - * MurmurHash3 is a non-cryptographic hash function, of which three - * incompatible versions were created by its inventor Austin Appleby: - * - * - 32-bit output - * - 128-bit output for 32-bit platforms - * - 128-bit output for 64-bit platforms - * - * FFmpeg only implements the last variant: 128-bit output designed for 64-bit - * platforms. Even though the hash function was designed for 64-bit platforms, - * the function in reality works on 32-bit systems too, only with reduced - * performance. - * - * @anchor lavu_murmur3_seedinfo - * By design, MurmurHash3 requires a seed to operate. In response to this, - * libavutil provides two functions for hash initiation, one that requires a - * seed (av_murmur3_init_seeded()) and one that uses a fixed arbitrary integer - * as the seed, and therefore does not (av_murmur3_init()). - * - * To make hashes comparable, you should provide the same seed for all calls to - * this hash function -- if you are supplying one yourself, that is. - * - * @{ - */ - -/** - * Allocate an AVMurMur3 hash context. - * - * @return Uninitialized hash context or `NULL` in case of error - */ -struct AVMurMur3 *av_murmur3_alloc(void); - -/** - * Initialize or reinitialize an AVMurMur3 hash context with a seed. - * - * @param[out] c Hash context - * @param[in] seed Random seed - * - * @see av_murmur3_init() - * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of - * seeds for MurmurHash3. - */ -void av_murmur3_init_seeded(struct AVMurMur3 *c, uint64_t seed); - -/** - * Initialize or reinitialize an AVMurMur3 hash context. - * - * Equivalent to av_murmur3_init_seeded() with a built-in seed. - * - * @param[out] c Hash context - * - * @see av_murmur3_init_seeded() - * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of - * seeds for MurmurHash3. - */ -void av_murmur3_init(struct AVMurMur3 *c); - -/** - * Update hash context with new data. - * - * @param[out] c Hash context - * @param[in] src Input data to update hash with - * @param[in] len Number of bytes to read from `src` - */ -#if FF_API_CRYPTO_SIZE_T -void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, int len); -#else -void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param[in,out] c Hash context - * @param[out] dst Buffer where output digest value is stored - */ -void av_murmur3_final(struct AVMurMur3 *c, uint8_t dst[16]); - -/** - * @} - */ - -#endif /* AVUTIL_MURMUR3_H */ diff --git a/prebuilts/arm/include/libavutil/opt.h b/prebuilts/arm/include/libavutil/opt.h deleted file mode 100644 index 8dc020a..0000000 --- a/prebuilts/arm/include/libavutil/opt.h +++ /dev/null @@ -1,886 +0,0 @@ -/* - * AVOptions - * copyright (c) 2005 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_OPT_H -#define AVUTIL_OPT_H - -/** - * @file - * AVOptions - */ - -#include "rational.h" -#include "avutil.h" -#include "dict.h" -#include "log.h" -#include "pixfmt.h" -#include "samplefmt.h" -#include "version.h" - -/** - * @defgroup avoptions AVOptions - * @ingroup lavu_data - * @{ - * AVOptions provide a generic system to declare options on arbitrary structs - * ("objects"). An option can have a help text, a type and a range of possible - * values. Options may then be enumerated, read and written to. - * - * @section avoptions_implement Implementing AVOptions - * This section describes how to add AVOptions capabilities to a struct. - * - * All AVOptions-related information is stored in an AVClass. Therefore - * the first member of the struct should be a pointer to an AVClass describing it. - * The option field of the AVClass must be set to a NULL-terminated static array - * of AVOptions. Each AVOption must have a non-empty name, a type, a default - * value and for number-type AVOptions also a range of allowed values. It must - * also declare an offset in bytes from the start of the struct, where the field - * associated with this AVOption is located. Other fields in the AVOption struct - * should also be set when applicable, but are not required. - * - * The following example illustrates an AVOptions-enabled struct: - * @code - * typedef struct test_struct { - * const AVClass *class; - * int int_opt; - * char *str_opt; - * uint8_t *bin_opt; - * int bin_len; - * } test_struct; - * - * static const AVOption test_options[] = { - * { "test_int", "This is a test option of int type.", offsetof(test_struct, int_opt), - * AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX }, - * { "test_str", "This is a test option of string type.", offsetof(test_struct, str_opt), - * AV_OPT_TYPE_STRING }, - * { "test_bin", "This is a test option of binary type.", offsetof(test_struct, bin_opt), - * AV_OPT_TYPE_BINARY }, - * { NULL }, - * }; - * - * static const AVClass test_class = { - * .class_name = "test class", - * .item_name = av_default_item_name, - * .option = test_options, - * .version = LIBAVUTIL_VERSION_INT, - * }; - * @endcode - * - * Next, when allocating your struct, you must ensure that the AVClass pointer - * is set to the correct value. Then, av_opt_set_defaults() can be called to - * initialize defaults. After that the struct is ready to be used with the - * AVOptions API. - * - * When cleaning up, you may use the av_opt_free() function to automatically - * free all the allocated string and binary options. - * - * Continuing with the above example: - * - * @code - * test_struct *alloc_test_struct(void) - * { - * test_struct *ret = av_mallocz(sizeof(*ret)); - * ret->class = &test_class; - * av_opt_set_defaults(ret); - * return ret; - * } - * void free_test_struct(test_struct **foo) - * { - * av_opt_free(*foo); - * av_freep(foo); - * } - * @endcode - * - * @subsection avoptions_implement_nesting Nesting - * It may happen that an AVOptions-enabled struct contains another - * AVOptions-enabled struct as a member (e.g. AVCodecContext in - * libavcodec exports generic options, while its priv_data field exports - * codec-specific options). In such a case, it is possible to set up the - * parent struct to export a child's options. To do that, simply - * implement AVClass.child_next() and AVClass.child_class_iterate() in the - * parent struct's AVClass. - * Assuming that the test_struct from above now also contains a - * child_struct field: - * - * @code - * typedef struct child_struct { - * AVClass *class; - * int flags_opt; - * } child_struct; - * static const AVOption child_opts[] = { - * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX }, - * { NULL }, - * }; - * static const AVClass child_class = { - * .class_name = "child class", - * .item_name = av_default_item_name, - * .option = child_opts, - * .version = LIBAVUTIL_VERSION_INT, - * }; - * - * void *child_next(void *obj, void *prev) - * { - * test_struct *t = obj; - * if (!prev && t->child_struct) - * return t->child_struct; - * return NULL - * } - * const AVClass child_class_iterate(void **iter) - * { - * const AVClass *c = *iter ? NULL : &child_class; - * *iter = (void*)(uintptr_t)c; - * return c; - * } - * @endcode - * Putting child_next() and child_class_iterate() as defined above into - * test_class will now make child_struct's options accessible through - * test_struct (again, proper setup as described above needs to be done on - * child_struct right after it is created). - * - * From the above example it might not be clear why both child_next() - * and child_class_iterate() are needed. The distinction is that child_next() - * iterates over actually existing objects, while child_class_iterate() - * iterates over all possible child classes. E.g. if an AVCodecContext - * was initialized to use a codec which has private options, then its - * child_next() will return AVCodecContext.priv_data and finish - * iterating. OTOH child_class_iterate() on AVCodecContext.av_class will - * iterate over all available codecs with private options. - * - * @subsection avoptions_implement_named_constants Named constants - * It is possible to create named constants for options. Simply set the unit - * field of the option the constants should apply to a string and - * create the constants themselves as options of type AV_OPT_TYPE_CONST - * with their unit field set to the same string. - * Their default_val field should contain the value of the named - * constant. - * For example, to add some named constants for the test_flags option - * above, put the following into the child_opts array: - * @code - * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, "test_unit" }, - * { "flag1", "This is a flag with value 16", 0, AV_OPT_TYPE_CONST, { .i64 = 16 }, 0, 0, "test_unit" }, - * @endcode - * - * @section avoptions_use Using AVOptions - * This section deals with accessing options in an AVOptions-enabled struct. - * Such structs in FFmpeg are e.g. AVCodecContext in libavcodec or - * AVFormatContext in libavformat. - * - * @subsection avoptions_use_examine Examining AVOptions - * The basic functions for examining options are av_opt_next(), which iterates - * over all options defined for one object, and av_opt_find(), which searches - * for an option with the given name. - * - * The situation is more complicated with nesting. An AVOptions-enabled struct - * may have AVOptions-enabled children. Passing the AV_OPT_SEARCH_CHILDREN flag - * to av_opt_find() will make the function search children recursively. - * - * For enumerating there are basically two cases. The first is when you want to - * get all options that may potentially exist on the struct and its children - * (e.g. when constructing documentation). In that case you should call - * av_opt_child_class_iterate() recursively on the parent struct's AVClass. The - * second case is when you have an already initialized struct with all its - * children and you want to get all options that can be actually written or read - * from it. In that case you should call av_opt_child_next() recursively (and - * av_opt_next() on each result). - * - * @subsection avoptions_use_get_set Reading and writing AVOptions - * When setting options, you often have a string read directly from the - * user. In such a case, simply passing it to av_opt_set() is enough. For - * non-string type options, av_opt_set() will parse the string according to the - * option type. - * - * Similarly av_opt_get() will read any option type and convert it to a string - * which will be returned. Do not forget that the string is allocated, so you - * have to free it with av_free(). - * - * In some cases it may be more convenient to put all options into an - * AVDictionary and call av_opt_set_dict() on it. A specific case of this - * are the format/codec open functions in lavf/lavc which take a dictionary - * filled with option as a parameter. This makes it possible to set some options - * that cannot be set otherwise, since e.g. the input file format is not known - * before the file is actually opened. - */ - -enum AVOptionType{ - AV_OPT_TYPE_FLAGS, - AV_OPT_TYPE_INT, - AV_OPT_TYPE_INT64, - AV_OPT_TYPE_DOUBLE, - AV_OPT_TYPE_FLOAT, - AV_OPT_TYPE_STRING, - AV_OPT_TYPE_RATIONAL, - AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length - AV_OPT_TYPE_DICT, - AV_OPT_TYPE_UINT64, - AV_OPT_TYPE_CONST, - AV_OPT_TYPE_IMAGE_SIZE, ///< offset must point to two consecutive integers - AV_OPT_TYPE_PIXEL_FMT, - AV_OPT_TYPE_SAMPLE_FMT, - AV_OPT_TYPE_VIDEO_RATE, ///< offset must point to AVRational - AV_OPT_TYPE_DURATION, - AV_OPT_TYPE_COLOR, - AV_OPT_TYPE_CHANNEL_LAYOUT, - AV_OPT_TYPE_BOOL, -}; - -/** - * AVOption - */ -typedef struct AVOption { - const char *name; - - /** - * short English help text - * @todo What about other languages? - */ - const char *help; - - /** - * The offset relative to the context structure where the option - * value is stored. It should be 0 for named constants. - */ - int offset; - enum AVOptionType type; - - /** - * the default value for scalar options - */ - union { - int64_t i64; - double dbl; - const char *str; - /* TODO those are unused now */ - AVRational q; - } default_val; - double min; ///< minimum valid value for the option - double max; ///< maximum valid value for the option - - int flags; -#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding -#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding -#define AV_OPT_FLAG_AUDIO_PARAM 8 -#define AV_OPT_FLAG_VIDEO_PARAM 16 -#define AV_OPT_FLAG_SUBTITLE_PARAM 32 -/** - * The option is intended for exporting values to the caller. - */ -#define AV_OPT_FLAG_EXPORT 64 -/** - * The option may not be set through the AVOptions API, only read. - * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set. - */ -#define AV_OPT_FLAG_READONLY 128 -#define AV_OPT_FLAG_BSF_PARAM (1<<8) ///< a generic parameter which can be set by the user for bit stream filtering -#define AV_OPT_FLAG_RUNTIME_PARAM (1<<15) ///< a generic parameter which can be set by the user at runtime -#define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering -#define AV_OPT_FLAG_DEPRECATED (1<<17) ///< set if option is deprecated, users should refer to AVOption.help text for more information -#define AV_OPT_FLAG_CHILD_CONSTS (1<<18) ///< set if option constants can also reside in child objects -//FIXME think about enc-audio, ... style flags - - /** - * The logical unit to which the option belongs. Non-constant - * options and corresponding named constants share the same - * unit. May be NULL. - */ - const char *unit; -} AVOption; - -/** - * A single allowed range of values, or a single allowed value. - */ -typedef struct AVOptionRange { - const char *str; - /** - * Value range. - * For string ranges this represents the min/max length. - * For dimensions this represents the min/max pixel count or width/height in multi-component case. - */ - double value_min, value_max; - /** - * Value's component range. - * For string this represents the unicode range for chars, 0-127 limits to ASCII. - */ - double component_min, component_max; - /** - * Range flag. - * If set to 1 the struct encodes a range, if set to 0 a single value. - */ - int is_range; -} AVOptionRange; - -/** - * List of AVOptionRange structs. - */ -typedef struct AVOptionRanges { - /** - * Array of option ranges. - * - * Most of option types use just one component. - * Following describes multi-component option types: - * - * AV_OPT_TYPE_IMAGE_SIZE: - * component index 0: range of pixel count (width * height). - * component index 1: range of width. - * component index 2: range of height. - * - * @note To obtain multi-component version of this structure, user must - * provide AV_OPT_MULTI_COMPONENT_RANGE to av_opt_query_ranges or - * av_opt_query_ranges_default function. - * - * Multi-component range can be read as in following example: - * - * @code - * int range_index, component_index; - * AVOptionRanges *ranges; - * AVOptionRange *range[3]; //may require more than 3 in the future. - * av_opt_query_ranges(&ranges, obj, key, AV_OPT_MULTI_COMPONENT_RANGE); - * for (range_index = 0; range_index < ranges->nb_ranges; range_index++) { - * for (component_index = 0; component_index < ranges->nb_components; component_index++) - * range[component_index] = ranges->range[ranges->nb_ranges * component_index + range_index]; - * //do something with range here. - * } - * av_opt_freep_ranges(&ranges); - * @endcode - */ - AVOptionRange **range; - /** - * Number of ranges per component. - */ - int nb_ranges; - /** - * Number of componentes. - */ - int nb_components; -} AVOptionRanges; - -/** - * Show the obj options. - * - * @param req_flags requested flags for the options to show. Show only the - * options for which it is opt->flags & req_flags. - * @param rej_flags rejected flags for the options to show. Show only the - * options for which it is !(opt->flags & req_flags). - * @param av_log_obj log context to use for showing the options - */ -int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags); - -/** - * Set the values of all AVOption fields to their default values. - * - * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) - */ -void av_opt_set_defaults(void *s); - -/** - * Set the values of all AVOption fields to their default values. Only these - * AVOption fields for which (opt->flags & mask) == flags will have their - * default applied to s. - * - * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) - * @param mask combination of AV_OPT_FLAG_* - * @param flags combination of AV_OPT_FLAG_* - */ -void av_opt_set_defaults2(void *s, int mask, int flags); - -/** - * Parse the key/value pairs list in opts. For each key/value pair - * found, stores the value in the field in ctx that is named like the - * key. ctx must be an AVClass context, storing is done using - * AVOptions. - * - * @param opts options string to parse, may be NULL - * @param key_val_sep a 0-terminated list of characters used to - * separate key from value - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other - * @return the number of successfully set key/value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_opt_set() if a key/value pair - * cannot be set - */ -int av_set_options_string(void *ctx, const char *opts, - const char *key_val_sep, const char *pairs_sep); - -/** - * Parse the key-value pairs list in opts. For each key=value pair found, - * set the value of the corresponding option in ctx. - * - * @param ctx the AVClass object to set options on - * @param opts the options string, key-value pairs separated by a - * delimiter - * @param shorthand a NULL-terminated array of options names for shorthand - * notation: if the first field in opts has no key part, - * the key is taken from the first element of shorthand; - * then again for the second, etc., until either opts is - * finished, shorthand is finished or a named option is - * found; after that, all options must be named - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @return the number of successfully set key=value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_set_string3() if a key/value pair - * cannot be set - * - * Options names must use only the following characters: a-z A-Z 0-9 - . / _ - * Separators must use characters distinct from option names and from each - * other. - */ -int av_opt_set_from_string(void *ctx, const char *opts, - const char *const *shorthand, - const char *key_val_sep, const char *pairs_sep); -/** - * Free all allocated objects in obj. - */ -void av_opt_free(void *obj); - -/** - * Check whether a particular flag is set in a flags field. - * - * @param field_name the name of the flag field option - * @param flag_name the name of the flag to check - * @return non-zero if the flag is set, zero if the flag isn't set, - * isn't of the right type, or the flags field doesn't exist. - */ -int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name); - -/** - * Set all the options from a given dictionary on an object. - * - * @param obj a struct whose first element is a pointer to AVClass - * @param options options to process. This dictionary will be freed and replaced - * by a new one containing all options not found in obj. - * Of course this new dictionary needs to be freed by caller - * with av_dict_free(). - * - * @return 0 on success, a negative AVERROR if some option was found in obj, - * but could not be set. - * - * @see av_dict_copy() - */ -int av_opt_set_dict(void *obj, struct AVDictionary **options); - - -/** - * Set all the options from a given dictionary on an object. - * - * @param obj a struct whose first element is a pointer to AVClass - * @param options options to process. This dictionary will be freed and replaced - * by a new one containing all options not found in obj. - * Of course this new dictionary needs to be freed by caller - * with av_dict_free(). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * - * @return 0 on success, a negative AVERROR if some option was found in obj, - * but could not be set. - * - * @see av_dict_copy() - */ -int av_opt_set_dict2(void *obj, struct AVDictionary **options, int search_flags); - -/** - * Extract a key-value pair from the beginning of a string. - * - * @param ropts pointer to the options string, will be updated to - * point to the rest of the string (one of the pairs_sep - * or the final NUL) - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @param flags flags; see the AV_OPT_FLAG_* values below - * @param rkey parsed key; must be freed using av_free() - * @param rval parsed value; must be freed using av_free() - * - * @return >=0 for success, or a negative value corresponding to an - * AVERROR code in case of error; in particular: - * AVERROR(EINVAL) if no key is present - * - */ -int av_opt_get_key_value(const char **ropts, - const char *key_val_sep, const char *pairs_sep, - unsigned flags, - char **rkey, char **rval); - -enum { - - /** - * Accept to parse a value without a key; the key will then be returned - * as NULL. - */ - AV_OPT_FLAG_IMPLICIT_KEY = 1, -}; - -/** - * @defgroup opt_eval_funcs Evaluating option strings - * @{ - * This group of functions can be used to evaluate option strings - * and get numbers out of them. They do the same thing as av_opt_set(), - * except the result is written into the caller-supplied pointer. - * - * @param obj a struct whose first element is a pointer to AVClass. - * @param o an option for which the string is to be evaluated. - * @param val string to be evaluated. - * @param *_out value of the string will be written here. - * - * @return 0 on success, a negative number on failure. - */ -int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out); -int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out); -int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out); -int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out); -int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out); -int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out); -/** - * @} - */ - -#define AV_OPT_SEARCH_CHILDREN (1 << 0) /**< Search in possible children of the - given object first. */ -/** - * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass - * instead of a required pointer to a struct containing AVClass. This is - * useful for searching for options without needing to allocate the corresponding - * object. - */ -#define AV_OPT_SEARCH_FAKE_OBJ (1 << 1) - -/** - * In av_opt_get, return NULL if the option has a pointer type and is set to NULL, - * rather than returning an empty string. - */ -#define AV_OPT_ALLOW_NULL (1 << 2) - -/** - * Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than - * one component for certain option types. - * @see AVOptionRanges for details. - */ -#define AV_OPT_MULTI_COMPONENT_RANGE (1 << 12) - -/** - * Look for an option in an object. Consider only options which - * have all the specified flags set. - * - * @param[in] obj A pointer to a struct whose first element is a - * pointer to an AVClass. - * Alternatively a double pointer to an AVClass, if - * AV_OPT_SEARCH_FAKE_OBJ search flag is set. - * @param[in] name The name of the option to look for. - * @param[in] unit When searching for named constants, name of the unit - * it belongs to. - * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * - * @return A pointer to the option found, or NULL if no option - * was found. - * - * @note Options found with AV_OPT_SEARCH_CHILDREN flag may not be settable - * directly with av_opt_set(). Use special calls which take an options - * AVDictionary (e.g. avformat_open_input()) to set options found with this - * flag. - */ -const AVOption *av_opt_find(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags); - -/** - * Look for an option in an object. Consider only options which - * have all the specified flags set. - * - * @param[in] obj A pointer to a struct whose first element is a - * pointer to an AVClass. - * Alternatively a double pointer to an AVClass, if - * AV_OPT_SEARCH_FAKE_OBJ search flag is set. - * @param[in] name The name of the option to look for. - * @param[in] unit When searching for named constants, name of the unit - * it belongs to. - * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * @param[out] target_obj if non-NULL, an object to which the option belongs will be - * written here. It may be different from obj if AV_OPT_SEARCH_CHILDREN is present - * in search_flags. This parameter is ignored if search_flags contain - * AV_OPT_SEARCH_FAKE_OBJ. - * - * @return A pointer to the option found, or NULL if no option - * was found. - */ -const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags, void **target_obj); - -/** - * Iterate over all AVOptions belonging to obj. - * - * @param obj an AVOptions-enabled struct or a double pointer to an - * AVClass describing it. - * @param prev result of the previous call to av_opt_next() on this object - * or NULL - * @return next AVOption or NULL - */ -const AVOption *av_opt_next(const void *obj, const AVOption *prev); - -/** - * Iterate over AVOptions-enabled children of obj. - * - * @param prev result of a previous call to this function or NULL - * @return next AVOptions-enabled child or NULL - */ -void *av_opt_child_next(void *obj, void *prev); - -#if FF_API_CHILD_CLASS_NEXT -/** - * Iterate over potential AVOptions-enabled children of parent. - * - * @param prev result of a previous call to this function or NULL - * @return AVClass corresponding to next potential child or NULL - * - * @deprecated use av_opt_child_class_iterate - */ -attribute_deprecated -const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev); -#endif - -/** - * Iterate over potential AVOptions-enabled children of parent. - * - * @param iter a pointer where iteration state is stored. - * @return AVClass corresponding to next potential child or NULL - */ -const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter); - -/** - * @defgroup opt_set_funcs Option setting functions - * @{ - * Those functions set the field of obj with the given name to value. - * - * @param[in] obj A struct whose first element is a pointer to an AVClass. - * @param[in] name the name of the field to set - * @param[in] val The value to set. In case of av_opt_set() if the field is not - * of a string type, then the given string is parsed. - * SI postfixes and some named scalars are supported. - * If the field is of a numeric type, it has to be a numeric or named - * scalar. Behavior with more than one scalar and +- infix operators - * is undefined. - * If the field is of a flags type, it has to be a sequence of numeric - * scalars or named flags separated by '+' or '-'. Prefixing a flag - * with '+' causes it to be set without affecting the other flags; - * similarly, '-' unsets a flag. - * If the field is of a dictionary type, it has to be a ':' separated list of - * key=value parameters. Values containing ':' special characters must be - * escaped. - * @param search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN - * is passed here, then the option may be set on a child of obj. - * - * @return 0 if the value has been set, or an AVERROR code in case of - * error: - * AVERROR_OPTION_NOT_FOUND if no matching option exists - * AVERROR(ERANGE) if the value is out of range - * AVERROR(EINVAL) if the value is not valid - */ -int av_opt_set (void *obj, const char *name, const char *val, int search_flags); -int av_opt_set_int (void *obj, const char *name, int64_t val, int search_flags); -int av_opt_set_double (void *obj, const char *name, double val, int search_flags); -int av_opt_set_q (void *obj, const char *name, AVRational val, int search_flags); -int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, int search_flags); -int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags); -int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags); -int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags); -int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags); -int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch_layout, int search_flags); -/** - * @note Any old dictionary present is discarded and replaced with a copy of the new one. The - * caller still owns val is and responsible for freeing it. - */ -int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags); - -/** - * Set a binary option to an integer list. - * - * @param obj AVClass object to set options on - * @param name name of the binary option - * @param val pointer to an integer list (must have the correct type with - * regard to the contents of the list) - * @param term list terminator (usually 0 or -1) - * @param flags search flags - */ -#define av_opt_set_int_list(obj, name, val, term, flags) \ - (av_int_list_length(val, term) > INT_MAX / sizeof(*(val)) ? \ - AVERROR(EINVAL) : \ - av_opt_set_bin(obj, name, (const uint8_t *)(val), \ - av_int_list_length(val, term) * sizeof(*(val)), flags)) - -/** - * @} - */ - -/** - * @defgroup opt_get_funcs Option getting functions - * @{ - * Those functions get a value of the option with the given name from an object. - * - * @param[in] obj a struct whose first element is a pointer to an AVClass. - * @param[in] name name of the option to get. - * @param[in] search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN - * is passed here, then the option may be found in a child of obj. - * @param[out] out_val value of the option will be written here - * @return >=0 on success, a negative error code otherwise - */ -/** - * @note the returned string will be av_malloc()ed and must be av_free()ed by the caller - * - * @note if AV_OPT_ALLOW_NULL is set in search_flags in av_opt_get, and the - * option is of type AV_OPT_TYPE_STRING, AV_OPT_TYPE_BINARY or AV_OPT_TYPE_DICT - * and is set to NULL, *out_val will be set to NULL instead of an allocated - * empty string. - */ -int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val); -int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val); -int av_opt_get_double (void *obj, const char *name, int search_flags, double *out_val); -int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational *out_val); -int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out); -int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt); -int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt); -int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val); -int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *ch_layout); -/** - * @param[out] out_val The returned dictionary is a copy of the actual value and must - * be freed with av_dict_free() by the caller - */ -int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val); -/** - * @} - */ -/** - * Gets a pointer to the requested field in a struct. - * This function allows accessing a struct even when its fields are moved or - * renamed since the application making the access has been compiled, - * - * @returns a pointer to the field, it can be cast to the correct type and read - * or written to. - */ -void *av_opt_ptr(const AVClass *avclass, void *obj, const char *name); - -/** - * Free an AVOptionRanges struct and set it to NULL. - */ -void av_opt_freep_ranges(AVOptionRanges **ranges); - -/** - * Get a list of allowed ranges for the given option. - * - * The returned list may depend on other fields in obj like for example profile. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges - * - * The result must be freed with av_opt_freep_ranges. - * - * @return number of compontents returned on success, a negative errro code otherwise - */ -int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags); - -/** - * Copy options from src object into dest object. - * - * Options that require memory allocation (e.g. string or binary) are malloc'ed in dest object. - * Original memory allocated for such options is freed unless both src and dest options points to the same memory. - * - * @param dest Object to copy from - * @param src Object to copy into - * @return 0 on success, negative on error - */ -int av_opt_copy(void *dest, const void *src); - -/** - * Get a default list of allowed ranges for the given option. - * - * This list is constructed without using the AVClass.query_ranges() callback - * and can be used as fallback from within the callback. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges - * - * The result must be freed with av_opt_free_ranges. - * - * @return number of compontents returned on success, a negative errro code otherwise - */ -int av_opt_query_ranges_default(AVOptionRanges **, void *obj, const char *key, int flags); - -/** - * Check if given option is set to its default value. - * - * Options o must belong to the obj. This function must not be called to check child's options state. - * @see av_opt_is_set_to_default_by_name(). - * - * @param obj AVClass object to check option on - * @param o option to be checked - * @return >0 when option is set to its default, - * 0 when option is not set its default, - * <0 on error - */ -int av_opt_is_set_to_default(void *obj, const AVOption *o); - -/** - * Check if given option is set to its default value. - * - * @param obj AVClass object to check option on - * @param name option name - * @param search_flags combination of AV_OPT_SEARCH_* - * @return >0 when option is set to its default, - * 0 when option is not set its default, - * <0 on error - */ -int av_opt_is_set_to_default_by_name(void *obj, const char *name, int search_flags); - - -#define AV_OPT_SERIALIZE_SKIP_DEFAULTS 0x00000001 ///< Serialize options that are not set to default values only. -#define AV_OPT_SERIALIZE_OPT_FLAGS_EXACT 0x00000002 ///< Serialize options that exactly match opt_flags only. - -/** - * Serialize object's options. - * - * Create a string containing object's serialized options. - * Such string may be passed back to av_opt_set_from_string() in order to restore option values. - * A key/value or pairs separator occurring in the serialized value or - * name string are escaped through the av_escape() function. - * - * @param[in] obj AVClass object to serialize - * @param[in] opt_flags serialize options with all the specified flags set (AV_OPT_FLAG) - * @param[in] flags combination of AV_OPT_SERIALIZE_* flags - * @param[out] buffer Pointer to buffer that will be allocated with string containg serialized options. - * Buffer must be freed by the caller when is no longer needed. - * @param[in] key_val_sep character used to separate key from value - * @param[in] pairs_sep character used to separate two pairs from each other - * @return >= 0 on success, negative on error - * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. - */ -int av_opt_serialize(void *obj, int opt_flags, int flags, char **buffer, - const char key_val_sep, const char pairs_sep); -/** - * @} - */ - -#endif /* AVUTIL_OPT_H */ diff --git a/prebuilts/arm/include/libavutil/parseutils.h b/prebuilts/arm/include/libavutil/parseutils.h deleted file mode 100644 index e66d24b..0000000 --- a/prebuilts/arm/include/libavutil/parseutils.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PARSEUTILS_H -#define AVUTIL_PARSEUTILS_H - -#include - -#include "rational.h" - -/** - * @file - * misc parsing utilities - */ - -/** - * Parse str and store the parsed ratio in q. - * - * Note that a ratio with infinite (1/0) or negative value is - * considered valid, so you should check on the returned value if you - * want to exclude those values. - * - * The undefined value can be expressed using the "0:0" string. - * - * @param[in,out] q pointer to the AVRational which will contain the ratio - * @param[in] str the string to parse: it has to be a string in the format - * num:den, a float number or an expression - * @param[in] max the maximum allowed numerator and denominator - * @param[in] log_offset log level offset which is applied to the log - * level of log_ctx - * @param[in] log_ctx parent logging context - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_ratio(AVRational *q, const char *str, int max, - int log_offset, void *log_ctx); - -#define av_parse_ratio_quiet(rate, str, max) \ - av_parse_ratio(rate, str, max, AV_LOG_MAX_OFFSET, NULL) - -/** - * Parse str and put in width_ptr and height_ptr the detected values. - * - * @param[in,out] width_ptr pointer to the variable which will contain the detected - * width value - * @param[in,out] height_ptr pointer to the variable which will contain the detected - * height value - * @param[in] str the string to parse: it has to be a string in the format - * width x height or a valid video size abbreviation. - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str); - -/** - * Parse str and store the detected values in *rate. - * - * @param[in,out] rate pointer to the AVRational which will contain the detected - * frame rate - * @param[in] str the string to parse: it has to be a string in the format - * rate_num / rate_den, a float number or a valid video rate abbreviation - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_video_rate(AVRational *rate, const char *str); - -/** - * Put the RGBA values that correspond to color_string in rgba_color. - * - * @param color_string a string specifying a color. It can be the name of - * a color (case insensitive match) or a [0x|#]RRGGBB[AA] sequence, - * possibly followed by "@" and a string representing the alpha - * component. - * The alpha component may be a string composed by "0x" followed by an - * hexadecimal number or a decimal number between 0.0 and 1.0, which - * represents the opacity value (0x00/0.0 means completely transparent, - * 0xff/1.0 completely opaque). - * If the alpha component is not specified then 0xff is assumed. - * The string "random" will result in a random color. - * @param slen length of the initial part of color_string containing the - * color. It can be set to -1 if color_string is a null terminated string - * containing nothing else than the color. - * @return >= 0 in case of success, a negative value in case of - * failure (for example if color_string cannot be parsed). - */ -int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen, - void *log_ctx); - -/** - * Get the name of a color from the internal table of hard-coded named - * colors. - * - * This function is meant to enumerate the color names recognized by - * av_parse_color(). - * - * @param color_idx index of the requested color, starting from 0 - * @param rgbp if not NULL, will point to a 3-elements array with the color value in RGB - * @return the color name string or NULL if color_idx is not in the array - */ -const char *av_get_known_color_name(int color_idx, const uint8_t **rgb); - -/** - * Parse timestr and return in *time a corresponding number of - * microseconds. - * - * @param timeval puts here the number of microseconds corresponding - * to the string in timestr. If the string represents a duration, it - * is the number of microseconds contained in the time interval. If - * the string is a date, is the number of microseconds since 1st of - * January, 1970 up to the time of the parsed date. If timestr cannot - * be successfully parsed, set *time to INT64_MIN. - - * @param timestr a string representing a date or a duration. - * - If a date the syntax is: - * @code - * [{YYYY-MM-DD|YYYYMMDD}[T|t| ]]{{HH:MM:SS[.m...]]]}|{HHMMSS[.m...]]]}}[Z] - * now - * @endcode - * If the value is "now" it takes the current time. - * Time is local time unless Z is appended, in which case it is - * interpreted as UTC. - * If the year-month-day part is not specified it takes the current - * year-month-day. - * - If a duration the syntax is: - * @code - * [-][HH:]MM:SS[.m...] - * [-]S+[.m...] - * @endcode - * @param duration flag which tells how to interpret timestr, if not - * zero timestr is interpreted as a duration, otherwise as a date - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_parse_time(int64_t *timeval, const char *timestr, int duration); - -/** - * Attempt to find a specific tag in a URL. - * - * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done. - * Return 1 if found. - */ -int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info); - -/** - * Simplified version of strptime - * - * Parse the input string p according to the format string fmt and - * store its results in the structure dt. - * This implementation supports only a subset of the formats supported - * by the standard strptime(). - * - * The supported input field descriptors are listed below. - * - %H: the hour as a decimal number, using a 24-hour clock, in the - * range '00' through '23' - * - %J: hours as a decimal number, in the range '0' through INT_MAX - * - %M: the minute as a decimal number, using a 24-hour clock, in the - * range '00' through '59' - * - %S: the second as a decimal number, using a 24-hour clock, in the - * range '00' through '59' - * - %Y: the year as a decimal number, using the Gregorian calendar - * - %m: the month as a decimal number, in the range '1' through '12' - * - %d: the day of the month as a decimal number, in the range '1' - * through '31' - * - %T: alias for '%H:%M:%S' - * - %%: a literal '%' - * - * @return a pointer to the first character not processed in this function - * call. In case the input string contains more characters than - * required by the format string the return value points right after - * the last consumed input character. In case the whole input string - * is consumed the return value points to the null byte at the end of - * the string. On failure NULL is returned. - */ -char *av_small_strptime(const char *p, const char *fmt, struct tm *dt); - -/** - * Convert the decomposed UTC time in tm to a time_t value. - */ -time_t av_timegm(struct tm *tm); - -#endif /* AVUTIL_PARSEUTILS_H */ diff --git a/prebuilts/arm/include/libavutil/pixdesc.h b/prebuilts/arm/include/libavutil/pixdesc.h deleted file mode 100644 index 9b9d386..0000000 --- a/prebuilts/arm/include/libavutil/pixdesc.h +++ /dev/null @@ -1,442 +0,0 @@ -/* - * pixel format descriptor - * Copyright (c) 2009 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXDESC_H -#define AVUTIL_PIXDESC_H - -#include - -#include "attributes.h" -#include "pixfmt.h" -#include "version.h" - -typedef struct AVComponentDescriptor { - /** - * Which of the 4 planes contains the component. - */ - int plane; - - /** - * Number of elements between 2 horizontally consecutive pixels. - * Elements are bits for bitstream formats, bytes otherwise. - */ - int step; - - /** - * Number of elements before the component of the first pixel. - * Elements are bits for bitstream formats, bytes otherwise. - */ - int offset; - - /** - * Number of least significant bits that must be shifted away - * to get the value. - */ - int shift; - - /** - * Number of bits in the component. - */ - int depth; - -#if FF_API_PLUS1_MINUS1 - /** deprecated, use step instead */ - attribute_deprecated int step_minus1; - - /** deprecated, use depth instead */ - attribute_deprecated int depth_minus1; - - /** deprecated, use offset instead */ - attribute_deprecated int offset_plus1; -#endif -} AVComponentDescriptor; - -/** - * Descriptor that unambiguously describes how the bits of a pixel are - * stored in the up to 4 data planes of an image. It also stores the - * subsampling factors and number of components. - * - * @note This is separate of the colorspace (RGB, YCbCr, YPbPr, JPEG-style YUV - * and all the YUV variants) AVPixFmtDescriptor just stores how values - * are stored not what these values represent. - */ -typedef struct AVPixFmtDescriptor { - const char *name; - uint8_t nb_components; ///< The number of components each pixel has, (1-4) - - /** - * Amount to shift the luma width right to find the chroma width. - * For YV12 this is 1 for example. - * chroma_width = AV_CEIL_RSHIFT(luma_width, log2_chroma_w) - * The note above is needed to ensure rounding up. - * This value only refers to the chroma components. - */ - uint8_t log2_chroma_w; - - /** - * Amount to shift the luma height right to find the chroma height. - * For YV12 this is 1 for example. - * chroma_height= AV_CEIL_RSHIFT(luma_height, log2_chroma_h) - * The note above is needed to ensure rounding up. - * This value only refers to the chroma components. - */ - uint8_t log2_chroma_h; - - /** - * Combination of AV_PIX_FMT_FLAG_... flags. - */ - uint64_t flags; - - /** - * Parameters that describe how pixels are packed. - * If the format has 1 or 2 components, then luma is 0. - * If the format has 3 or 4 components: - * if the RGB flag is set then 0 is red, 1 is green and 2 is blue; - * otherwise 0 is luma, 1 is chroma-U and 2 is chroma-V. - * - * If present, the Alpha channel is always the last component. - */ - AVComponentDescriptor comp[4]; - - /** - * Alternative comma-separated names. - */ - const char *alias; -} AVPixFmtDescriptor; - -/** - * Pixel format is big-endian. - */ -#define AV_PIX_FMT_FLAG_BE (1 << 0) -/** - * Pixel format has a palette in data[1], values are indexes in this palette. - */ -#define AV_PIX_FMT_FLAG_PAL (1 << 1) -/** - * All values of a component are bit-wise packed end to end. - */ -#define AV_PIX_FMT_FLAG_BITSTREAM (1 << 2) -/** - * Pixel format is an HW accelerated format. - */ -#define AV_PIX_FMT_FLAG_HWACCEL (1 << 3) -/** - * At least one pixel component is not in the first data plane. - */ -#define AV_PIX_FMT_FLAG_PLANAR (1 << 4) -/** - * The pixel format contains RGB-like data (as opposed to YUV/grayscale). - */ -#define AV_PIX_FMT_FLAG_RGB (1 << 5) - -#if FF_API_PSEUDOPAL -/** - * The pixel format is "pseudo-paletted". This means that it contains a - * fixed palette in the 2nd plane but the palette is fixed/constant for each - * PIX_FMT. This allows interpreting the data as if it was PAL8, which can - * in some cases be simpler. Or the data can be interpreted purely based on - * the pixel format without using the palette. - * An example of a pseudo-paletted format is AV_PIX_FMT_GRAY8 - * - * @deprecated This flag is deprecated, and will be removed. When it is removed, - * the extra palette allocation in AVFrame.data[1] is removed as well. Only - * actual paletted formats (as indicated by AV_PIX_FMT_FLAG_PAL) will have a - * palette. Starting with FFmpeg versions which have this flag deprecated, the - * extra "pseudo" palette is already ignored, and API users are not required to - * allocate a palette for AV_PIX_FMT_FLAG_PSEUDOPAL formats (it was required - * before the deprecation, though). - */ -#define AV_PIX_FMT_FLAG_PSEUDOPAL (1 << 6) -#endif - -/** - * The pixel format has an alpha channel. This is set on all formats that - * support alpha in some way, including AV_PIX_FMT_PAL8. The alpha is always - * straight, never pre-multiplied. - * - * If a codec or a filter does not support alpha, it should set all alpha to - * opaque, or use the equivalent pixel formats without alpha component, e.g. - * AV_PIX_FMT_RGB0 (or AV_PIX_FMT_RGB24 etc.) instead of AV_PIX_FMT_RGBA. - */ -#define AV_PIX_FMT_FLAG_ALPHA (1 << 7) - -/** - * The pixel format is following a Bayer pattern - */ -#define AV_PIX_FMT_FLAG_BAYER (1 << 8) - -/** - * The pixel format contains IEEE-754 floating point values. Precision (double, - * single, or half) should be determined by the pixel size (64, 32, or 16 bits). - */ -#define AV_PIX_FMT_FLAG_FLOAT (1 << 9) - -/** - * Return the number of bits per pixel used by the pixel format - * described by pixdesc. Note that this is not the same as the number - * of bits per sample. - * - * The returned number of bits refers to the number of bits actually - * used for storing the pixel information, that is padding bits are - * not counted. - */ -int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); - -/** - * Return the number of bits per pixel for the pixel format - * described by pixdesc, including any padding or unused bits. - */ -int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); - -/** - * @return a pixel format descriptor for provided pixel format or NULL if - * this pixel format is unknown. - */ -const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt); - -/** - * Iterate over all pixel format descriptors known to libavutil. - * - * @param prev previous descriptor. NULL to get the first descriptor. - * - * @return next descriptor or NULL after the last descriptor - */ -const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev); - -/** - * @return an AVPixelFormat id described by desc, or AV_PIX_FMT_NONE if desc - * is not a valid pointer to a pixel format descriptor. - */ -enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc); - -/** - * Utility function to access log2_chroma_w log2_chroma_h from - * the pixel format AVPixFmtDescriptor. - * - * @param[in] pix_fmt the pixel format - * @param[out] h_shift store log2_chroma_w (horizontal/width shift) - * @param[out] v_shift store log2_chroma_h (vertical/height shift) - * - * @return 0 on success, AVERROR(ENOSYS) on invalid or unknown pixel format - */ -int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, - int *h_shift, int *v_shift); - -/** - * @return number of planes in pix_fmt, a negative AVERROR if pix_fmt is not a - * valid pixel format. - */ -int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt); - -/** - * @return the name for provided color range or NULL if unknown. - */ -const char *av_color_range_name(enum AVColorRange range); - -/** - * @return the AVColorRange value for name or an AVError if not found. - */ -int av_color_range_from_name(const char *name); - -/** - * @return the name for provided color primaries or NULL if unknown. - */ -const char *av_color_primaries_name(enum AVColorPrimaries primaries); - -/** - * @return the AVColorPrimaries value for name or an AVError if not found. - */ -int av_color_primaries_from_name(const char *name); - -/** - * @return the name for provided color transfer or NULL if unknown. - */ -const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer); - -/** - * @return the AVColorTransferCharacteristic value for name or an AVError if not found. - */ -int av_color_transfer_from_name(const char *name); - -/** - * @return the name for provided color space or NULL if unknown. - */ -const char *av_color_space_name(enum AVColorSpace space); - -/** - * @return the AVColorSpace value for name or an AVError if not found. - */ -int av_color_space_from_name(const char *name); - -/** - * @return the name for provided chroma location or NULL if unknown. - */ -const char *av_chroma_location_name(enum AVChromaLocation location); - -/** - * @return the AVChromaLocation value for name or an AVError if not found. - */ -int av_chroma_location_from_name(const char *name); - -/** - * Return the pixel format corresponding to name. - * - * If there is no pixel format with name name, then looks for a - * pixel format with the name corresponding to the native endian - * format of name. - * For example in a little-endian system, first looks for "gray16", - * then for "gray16le". - * - * Finally if no pixel format has been found, returns AV_PIX_FMT_NONE. - */ -enum AVPixelFormat av_get_pix_fmt(const char *name); - -/** - * Return the short name for a pixel format, NULL in case pix_fmt is - * unknown. - * - * @see av_get_pix_fmt(), av_get_pix_fmt_string() - */ -const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt); - -/** - * Print in buf the string corresponding to the pixel format with - * number pix_fmt, or a header if pix_fmt is negative. - * - * @param buf the buffer where to write the string - * @param buf_size the size of buf - * @param pix_fmt the number of the pixel format to print the - * corresponding info string, or a negative value to print the - * corresponding header. - */ -char *av_get_pix_fmt_string(char *buf, int buf_size, - enum AVPixelFormat pix_fmt); - -/** - * Read a line from an image, and write the values of the - * pixel format component c to dst. - * - * @param data the array containing the pointers to the planes of the image - * @param linesize the array containing the linesizes of the image - * @param desc the pixel format descriptor for the image - * @param x the horizontal coordinate of the first pixel to read - * @param y the vertical coordinate of the first pixel to read - * @param w the width of the line to read, that is the number of - * values to write to dst - * @param read_pal_component if not zero and the format is a paletted - * format writes the values corresponding to the palette - * component c in data[1] to dst, rather than the palette indexes in - * data[0]. The behavior is undefined if the format is not paletted. - * @param dst_element_size size of elements in dst array (2 or 4 byte) - */ -void av_read_image_line2(void *dst, const uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int read_pal_component, - int dst_element_size); - -void av_read_image_line(uint16_t *dst, const uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int read_pal_component); - -/** - * Write the values from src to the pixel format component c of an - * image line. - * - * @param src array containing the values to write - * @param data the array containing the pointers to the planes of the - * image to write into. It is supposed to be zeroed. - * @param linesize the array containing the linesizes of the image - * @param desc the pixel format descriptor for the image - * @param x the horizontal coordinate of the first pixel to write - * @param y the vertical coordinate of the first pixel to write - * @param w the width of the line to write, that is the number of - * values to write to the image line - * @param src_element_size size of elements in src array (2 or 4 byte) - */ -void av_write_image_line2(const void *src, uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int src_element_size); - -void av_write_image_line(const uint16_t *src, uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w); - -/** - * Utility function to swap the endianness of a pixel format. - * - * @param[in] pix_fmt the pixel format - * - * @return pixel format with swapped endianness if it exists, - * otherwise AV_PIX_FMT_NONE - */ -enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt); - -#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ -#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ -#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ -#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ -#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ -#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ - -/** - * Compute what kind of losses will occur when converting from one specific - * pixel format to another. - * When converting from one pixel format to another, information loss may occur. - * For example, when converting from RGB24 to GRAY, the color information will - * be lost. Similarly, other losses occur when converting from some formats to - * other formats. These losses can involve loss of chroma, but also loss of - * resolution, loss of color depth, loss due to the color space conversion, loss - * of the alpha bits or loss due to color quantization. - * av_get_fix_fmt_loss() informs you about the various types of losses - * which will occur when converting from one pixel format to another. - * - * @param[in] dst_pix_fmt destination pixel format - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @return Combination of flags informing you what kind of losses will occur - * (maximum loss for an invalid dst_pix_fmt). - */ -int av_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, - enum AVPixelFormat src_pix_fmt, - int has_alpha); - -/** - * Compute what kind of losses will occur when converting from one specific - * pixel format to another. - * When converting from one pixel format to another, information loss may occur. - * For example, when converting from RGB24 to GRAY, the color information will - * be lost. Similarly, other losses occur when converting from some formats to - * other formats. These losses can involve loss of chroma, but also loss of - * resolution, loss of color depth, loss due to the color space conversion, loss - * of the alpha bits or loss due to color quantization. - * av_get_fix_fmt_loss() informs you about the various types of losses - * which will occur when converting from one pixel format to another. - * - * @param[in] dst_pix_fmt destination pixel format - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @return Combination of flags informing you what kind of losses will occur - * (maximum loss for an invalid dst_pix_fmt). - */ -enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); - -#endif /* AVUTIL_PIXDESC_H */ diff --git a/prebuilts/arm/include/libavutil/pixelutils.h b/prebuilts/arm/include/libavutil/pixelutils.h deleted file mode 100644 index a8dbc15..0000000 --- a/prebuilts/arm/include/libavutil/pixelutils.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXELUTILS_H -#define AVUTIL_PIXELUTILS_H - -#include -#include -#include "common.h" - -/** - * Sum of abs(src1[x] - src2[x]) - */ -typedef int (*av_pixelutils_sad_fn)(const uint8_t *src1, ptrdiff_t stride1, - const uint8_t *src2, ptrdiff_t stride2); - -/** - * Get a potentially optimized pointer to a Sum-of-absolute-differences - * function (see the av_pixelutils_sad_fn prototype). - * - * @param w_bits 1< - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXFMT_H -#define AVUTIL_PIXFMT_H - -/** - * @file - * pixel format definitions - */ - -#include "libavutil/avconfig.h" -#include "version.h" - -#define AVPALETTE_SIZE 1024 -#define AVPALETTE_COUNT 256 - -/** - * Pixel format. - * - * @note - * AV_PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA - * color is put together as: - * (A << 24) | (R << 16) | (G << 8) | B - * This is stored as BGRA on little-endian CPU architectures and ARGB on - * big-endian CPUs. - * - * @note - * If the resolution is not a multiple of the chroma subsampling factor - * then the chroma plane resolution must be rounded up. - * - * @par - * When the pixel format is palettized RGB32 (AV_PIX_FMT_PAL8), the palettized - * image data is stored in AVFrame.data[0]. The palette is transported in - * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is - * formatted the same as in AV_PIX_FMT_RGB32 described above (i.e., it is - * also endian-specific). Note also that the individual RGB32 palette - * components stored in AVFrame.data[1] should be in the range 0..255. - * This is important as many custom PAL8 video codecs that were designed - * to run on the IBM VGA graphics adapter use 6-bit palette components. - * - * @par - * For all the 8 bits per pixel formats, an RGB32 palette is in data[1] like - * for pal8. This palette is filled in automatically by the function - * allocating the picture. - */ -enum AVPixelFormat { - AV_PIX_FMT_NONE = -1, - AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) - AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr - AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... - AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... - AV_PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - AV_PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) - AV_PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) - AV_PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) - AV_PIX_FMT_GRAY8, ///< Y , 8bpp - AV_PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb - AV_PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb - AV_PIX_FMT_PAL8, ///< 8 bits with AV_PIX_FMT_RGB32 palette - AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range - AV_PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range - AV_PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range - AV_PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 - AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 - AV_PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) - AV_PIX_FMT_BGR4, ///< 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 - AV_PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) - AV_PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) - AV_PIX_FMT_RGB4, ///< 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 - AV_PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) - AV_PIX_FMT_NV12, ///< 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) - AV_PIX_FMT_NV21, ///< as above, but U and V bytes are swapped - - AV_PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... - AV_PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... - AV_PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... - AV_PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... - - AV_PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian - AV_PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian - AV_PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) - AV_PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range - AV_PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) - AV_PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian - AV_PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian - - AV_PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian - AV_PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian - AV_PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined - AV_PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined - - AV_PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian - AV_PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian - AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined - AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined - -#if FF_API_VAAPI - /** @name Deprecated pixel formats */ - /**@{*/ - AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers - AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers - AV_PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a VASurfaceID - /**@}*/ - AV_PIX_FMT_VAAPI = AV_PIX_FMT_VAAPI_VLD, -#else - /** - * Hardware acceleration through VA-API, data[3] contains a - * VASurfaceID. - */ - AV_PIX_FMT_VAAPI, -#endif - - AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer - - AV_PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_YA8, ///< 8 bits gray, 8 bits alpha - - AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 - AV_PIX_FMT_GRAY8A= AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 - - AV_PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian - AV_PIX_FMT_BGR48LE, ///< 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. - */ - AV_PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp - AV_PIX_FMT_GBR24P = AV_PIX_FMT_GBRP, // alias for #AV_PIX_FMT_GBRP - AV_PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big-endian - AV_PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little-endian - AV_PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big-endian - AV_PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little-endian - AV_PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big-endian - AV_PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little-endian - AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) - AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) - AV_PIX_FMT_YUVA420P9BE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian - AV_PIX_FMT_YUVA420P9LE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian - AV_PIX_FMT_YUVA422P9BE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian - AV_PIX_FMT_YUVA422P9LE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian - AV_PIX_FMT_YUVA444P9BE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian - AV_PIX_FMT_YUVA444P9LE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian - AV_PIX_FMT_YUVA420P10BE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - AV_PIX_FMT_YUVA420P10LE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - AV_PIX_FMT_YUVA422P10BE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA422P10LE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA444P10BE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA444P10LE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA420P16BE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - AV_PIX_FMT_YUVA420P16LE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - AV_PIX_FMT_YUVA422P16BE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA422P16LE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - - AV_PIX_FMT_VDPAU, ///< HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface - - AV_PIX_FMT_XYZ12LE, ///< 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 - AV_PIX_FMT_XYZ12BE, ///< 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 - AV_PIX_FMT_NV16, ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - AV_PIX_FMT_NV20LE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_NV20BE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - - AV_PIX_FMT_RGBA64BE, ///< 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 - AV_PIX_FMT_RGBA64LE, ///< 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 - AV_PIX_FMT_BGRA64BE, ///< 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 - AV_PIX_FMT_BGRA64LE, ///< 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 - - AV_PIX_FMT_YVYU422, ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb - - AV_PIX_FMT_YA16BE, ///< 16 bits gray, 16 bits alpha (big-endian) - AV_PIX_FMT_YA16LE, ///< 16 bits gray, 16 bits alpha (little-endian) - - AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp - AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian - AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian - /** - * HW acceleration through QSV, data[3] contains a pointer to the - * mfxFrameSurface1 structure. - */ - AV_PIX_FMT_QSV, - /** - * HW acceleration though MMAL, data[3] contains a pointer to the - * MMAL_BUFFER_HEADER_T structure. - */ - AV_PIX_FMT_MMAL, - - AV_PIX_FMT_D3D11VA_VLD, ///< 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. - */ - AV_PIX_FMT_CUDA, - - AV_PIX_FMT_0RGB, ///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined - AV_PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined - AV_PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined - AV_PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined - - AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big-endian - AV_PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little-endian - AV_PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big-endian - AV_PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little-endian - AV_PIX_FMT_YUVJ411P, ///< 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 - - AV_PIX_FMT_BAYER_BGGR8, ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples - AV_PIX_FMT_BAYER_RGGB8, ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples - AV_PIX_FMT_BAYER_GBRG8, ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples - AV_PIX_FMT_BAYER_GRBG8, ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples - AV_PIX_FMT_BAYER_BGGR16LE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_BGGR16BE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_RGGB16LE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_RGGB16BE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_GBRG16LE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_GBRG16BE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian - - AV_PIX_FMT_XVMC,///< XVideo Motion Acceleration via common packet passing - - AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian - AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian - AV_PIX_FMT_YUV440P12LE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian - AV_PIX_FMT_YUV440P12BE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian - AV_PIX_FMT_AYUV64LE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian - AV_PIX_FMT_AYUV64BE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian - - AV_PIX_FMT_VIDEOTOOLBOX, ///< hardware decoding through Videotoolbox - - AV_PIX_FMT_P010LE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian - AV_PIX_FMT_P010BE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian - - AV_PIX_FMT_GBRAP12BE, ///< planar GBR 4:4:4:4 48bpp, big-endian - AV_PIX_FMT_GBRAP12LE, ///< planar GBR 4:4:4:4 48bpp, little-endian - - AV_PIX_FMT_GBRAP10BE, ///< planar GBR 4:4:4:4 40bpp, big-endian - AV_PIX_FMT_GBRAP10LE, ///< planar GBR 4:4:4:4 40bpp, little-endian - - AV_PIX_FMT_MEDIACODEC, ///< hardware decoding through MediaCodec - - AV_PIX_FMT_GRAY12BE, ///< Y , 12bpp, big-endian - AV_PIX_FMT_GRAY12LE, ///< Y , 12bpp, little-endian - AV_PIX_FMT_GRAY10BE, ///< Y , 10bpp, big-endian - AV_PIX_FMT_GRAY10LE, ///< Y , 10bpp, little-endian - - AV_PIX_FMT_P016LE, ///< like NV12, with 16bpp per component, little-endian - AV_PIX_FMT_P016BE, ///< 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). - */ - AV_PIX_FMT_D3D11, - - AV_PIX_FMT_GRAY9BE, ///< Y , 9bpp, big-endian - AV_PIX_FMT_GRAY9LE, ///< Y , 9bpp, little-endian - - AV_PIX_FMT_GBRPF32BE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, big-endian - AV_PIX_FMT_GBRPF32LE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, little-endian - AV_PIX_FMT_GBRAPF32BE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, big-endian - AV_PIX_FMT_GBRAPF32LE, ///< 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. - */ - AV_PIX_FMT_DRM_PRIME, - /** - * 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. - */ - AV_PIX_FMT_OPENCL, - - AV_PIX_FMT_GRAY14BE, ///< Y , 14bpp, big-endian - AV_PIX_FMT_GRAY14LE, ///< Y , 14bpp, little-endian - - AV_PIX_FMT_GRAYF32BE, ///< IEEE-754 single precision Y, 32bpp, big-endian - AV_PIX_FMT_GRAYF32LE, ///< IEEE-754 single precision Y, 32bpp, little-endian - - AV_PIX_FMT_YUVA422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, big-endian - AV_PIX_FMT_YUVA422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, little-endian - AV_PIX_FMT_YUVA444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, big-endian - AV_PIX_FMT_YUVA444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, little-endian - - AV_PIX_FMT_NV24, ///< 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) - AV_PIX_FMT_NV42, ///< as above, but U and V bytes are swapped - - /** - * Vulkan hardware images. - * - * data[0] points to an AVVkFrame - */ - AV_PIX_FMT_VULKAN, - - AV_PIX_FMT_Y210BE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, big-endian - AV_PIX_FMT_Y210LE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, little-endian - - AV_PIX_FMT_X2RGB10LE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_X2RGB10BE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions -}; - -#if AV_HAVE_BIGENDIAN -# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##be -#else -# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##le -#endif - -#define AV_PIX_FMT_RGB32 AV_PIX_FMT_NE(ARGB, BGRA) -#define AV_PIX_FMT_RGB32_1 AV_PIX_FMT_NE(RGBA, ABGR) -#define AV_PIX_FMT_BGR32 AV_PIX_FMT_NE(ABGR, RGBA) -#define AV_PIX_FMT_BGR32_1 AV_PIX_FMT_NE(BGRA, ARGB) -#define AV_PIX_FMT_0RGB32 AV_PIX_FMT_NE(0RGB, BGR0) -#define AV_PIX_FMT_0BGR32 AV_PIX_FMT_NE(0BGR, RGB0) - -#define AV_PIX_FMT_GRAY9 AV_PIX_FMT_NE(GRAY9BE, GRAY9LE) -#define AV_PIX_FMT_GRAY10 AV_PIX_FMT_NE(GRAY10BE, GRAY10LE) -#define AV_PIX_FMT_GRAY12 AV_PIX_FMT_NE(GRAY12BE, GRAY12LE) -#define AV_PIX_FMT_GRAY14 AV_PIX_FMT_NE(GRAY14BE, GRAY14LE) -#define AV_PIX_FMT_GRAY16 AV_PIX_FMT_NE(GRAY16BE, GRAY16LE) -#define AV_PIX_FMT_YA16 AV_PIX_FMT_NE(YA16BE, YA16LE) -#define AV_PIX_FMT_RGB48 AV_PIX_FMT_NE(RGB48BE, RGB48LE) -#define AV_PIX_FMT_RGB565 AV_PIX_FMT_NE(RGB565BE, RGB565LE) -#define AV_PIX_FMT_RGB555 AV_PIX_FMT_NE(RGB555BE, RGB555LE) -#define AV_PIX_FMT_RGB444 AV_PIX_FMT_NE(RGB444BE, RGB444LE) -#define AV_PIX_FMT_RGBA64 AV_PIX_FMT_NE(RGBA64BE, RGBA64LE) -#define AV_PIX_FMT_BGR48 AV_PIX_FMT_NE(BGR48BE, BGR48LE) -#define AV_PIX_FMT_BGR565 AV_PIX_FMT_NE(BGR565BE, BGR565LE) -#define AV_PIX_FMT_BGR555 AV_PIX_FMT_NE(BGR555BE, BGR555LE) -#define AV_PIX_FMT_BGR444 AV_PIX_FMT_NE(BGR444BE, BGR444LE) -#define AV_PIX_FMT_BGRA64 AV_PIX_FMT_NE(BGRA64BE, BGRA64LE) - -#define AV_PIX_FMT_YUV420P9 AV_PIX_FMT_NE(YUV420P9BE , YUV420P9LE) -#define AV_PIX_FMT_YUV422P9 AV_PIX_FMT_NE(YUV422P9BE , YUV422P9LE) -#define AV_PIX_FMT_YUV444P9 AV_PIX_FMT_NE(YUV444P9BE , YUV444P9LE) -#define AV_PIX_FMT_YUV420P10 AV_PIX_FMT_NE(YUV420P10BE, YUV420P10LE) -#define AV_PIX_FMT_YUV422P10 AV_PIX_FMT_NE(YUV422P10BE, YUV422P10LE) -#define AV_PIX_FMT_YUV440P10 AV_PIX_FMT_NE(YUV440P10BE, YUV440P10LE) -#define AV_PIX_FMT_YUV444P10 AV_PIX_FMT_NE(YUV444P10BE, YUV444P10LE) -#define AV_PIX_FMT_YUV420P12 AV_PIX_FMT_NE(YUV420P12BE, YUV420P12LE) -#define AV_PIX_FMT_YUV422P12 AV_PIX_FMT_NE(YUV422P12BE, YUV422P12LE) -#define AV_PIX_FMT_YUV440P12 AV_PIX_FMT_NE(YUV440P12BE, YUV440P12LE) -#define AV_PIX_FMT_YUV444P12 AV_PIX_FMT_NE(YUV444P12BE, YUV444P12LE) -#define AV_PIX_FMT_YUV420P14 AV_PIX_FMT_NE(YUV420P14BE, YUV420P14LE) -#define AV_PIX_FMT_YUV422P14 AV_PIX_FMT_NE(YUV422P14BE, YUV422P14LE) -#define AV_PIX_FMT_YUV444P14 AV_PIX_FMT_NE(YUV444P14BE, YUV444P14LE) -#define AV_PIX_FMT_YUV420P16 AV_PIX_FMT_NE(YUV420P16BE, YUV420P16LE) -#define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE) -#define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE) - -#define AV_PIX_FMT_GBRP9 AV_PIX_FMT_NE(GBRP9BE , GBRP9LE) -#define AV_PIX_FMT_GBRP10 AV_PIX_FMT_NE(GBRP10BE, GBRP10LE) -#define AV_PIX_FMT_GBRP12 AV_PIX_FMT_NE(GBRP12BE, GBRP12LE) -#define AV_PIX_FMT_GBRP14 AV_PIX_FMT_NE(GBRP14BE, GBRP14LE) -#define AV_PIX_FMT_GBRP16 AV_PIX_FMT_NE(GBRP16BE, GBRP16LE) -#define AV_PIX_FMT_GBRAP10 AV_PIX_FMT_NE(GBRAP10BE, GBRAP10LE) -#define AV_PIX_FMT_GBRAP12 AV_PIX_FMT_NE(GBRAP12BE, GBRAP12LE) -#define AV_PIX_FMT_GBRAP16 AV_PIX_FMT_NE(GBRAP16BE, GBRAP16LE) - -#define AV_PIX_FMT_BAYER_BGGR16 AV_PIX_FMT_NE(BAYER_BGGR16BE, BAYER_BGGR16LE) -#define AV_PIX_FMT_BAYER_RGGB16 AV_PIX_FMT_NE(BAYER_RGGB16BE, BAYER_RGGB16LE) -#define AV_PIX_FMT_BAYER_GBRG16 AV_PIX_FMT_NE(BAYER_GBRG16BE, BAYER_GBRG16LE) -#define AV_PIX_FMT_BAYER_GRBG16 AV_PIX_FMT_NE(BAYER_GRBG16BE, BAYER_GRBG16LE) - -#define AV_PIX_FMT_GBRPF32 AV_PIX_FMT_NE(GBRPF32BE, GBRPF32LE) -#define AV_PIX_FMT_GBRAPF32 AV_PIX_FMT_NE(GBRAPF32BE, GBRAPF32LE) - -#define AV_PIX_FMT_GRAYF32 AV_PIX_FMT_NE(GRAYF32BE, GRAYF32LE) - -#define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE , YUVA420P9LE) -#define AV_PIX_FMT_YUVA422P9 AV_PIX_FMT_NE(YUVA422P9BE , YUVA422P9LE) -#define AV_PIX_FMT_YUVA444P9 AV_PIX_FMT_NE(YUVA444P9BE , YUVA444P9LE) -#define AV_PIX_FMT_YUVA420P10 AV_PIX_FMT_NE(YUVA420P10BE, YUVA420P10LE) -#define AV_PIX_FMT_YUVA422P10 AV_PIX_FMT_NE(YUVA422P10BE, YUVA422P10LE) -#define AV_PIX_FMT_YUVA444P10 AV_PIX_FMT_NE(YUVA444P10BE, YUVA444P10LE) -#define AV_PIX_FMT_YUVA422P12 AV_PIX_FMT_NE(YUVA422P12BE, YUVA422P12LE) -#define AV_PIX_FMT_YUVA444P12 AV_PIX_FMT_NE(YUVA444P12BE, YUVA444P12LE) -#define AV_PIX_FMT_YUVA420P16 AV_PIX_FMT_NE(YUVA420P16BE, YUVA420P16LE) -#define AV_PIX_FMT_YUVA422P16 AV_PIX_FMT_NE(YUVA422P16BE, YUVA422P16LE) -#define AV_PIX_FMT_YUVA444P16 AV_PIX_FMT_NE(YUVA444P16BE, YUVA444P16LE) - -#define AV_PIX_FMT_XYZ12 AV_PIX_FMT_NE(XYZ12BE, XYZ12LE) -#define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE) -#define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE) -#define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE) -#define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE) - -#define AV_PIX_FMT_Y210 AV_PIX_FMT_NE(Y210BE, Y210LE) -#define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE) - -/** - * Chromaticity coordinates of the source primaries. - * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.1. - */ -enum AVColorPrimaries { - AVCOL_PRI_RESERVED0 = 0, - AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B - AVCOL_PRI_UNSPECIFIED = 2, - AVCOL_PRI_RESERVED = 3, - AVCOL_PRI_BT470M = 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - - AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM - AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC - AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above - AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C - AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 - AVCOL_PRI_SMPTE428 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) - AVCOL_PRI_SMPTEST428_1 = AVCOL_PRI_SMPTE428, - AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3 - AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3 - AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E / JEDEC P22 phosphors - AVCOL_PRI_JEDEC_P22 = AVCOL_PRI_EBU3213, - AVCOL_PRI_NB ///< Not part of ABI -}; - -/** - * Color Transfer Characteristic. - * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.2. - */ -enum AVColorTransferCharacteristic { - AVCOL_TRC_RESERVED0 = 0, - AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 - AVCOL_TRC_UNSPECIFIED = 2, - AVCOL_TRC_RESERVED = 3, - AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM - AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG - AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC - AVCOL_TRC_SMPTE240M = 7, - AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics" - AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)" - AVCOL_TRC_LOG_SQRT = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)" - AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 - AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut - AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) - AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10-bit system - AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12-bit system - AVCOL_TRC_SMPTE2084 = 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems - AVCOL_TRC_SMPTEST2084 = AVCOL_TRC_SMPTE2084, - AVCOL_TRC_SMPTE428 = 17, ///< SMPTE ST 428-1 - AVCOL_TRC_SMPTEST428_1 = AVCOL_TRC_SMPTE428, - AVCOL_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" - AVCOL_TRC_NB ///< Not part of ABI -}; - -/** - * YUV colorspace type. - * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.3. - */ -enum AVColorSpace { - AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB) - AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B - AVCOL_SPC_UNSPECIFIED = 2, - AVCOL_SPC_RESERVED = 3, - AVCOL_SPC_FCC = 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 - AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC - AVCOL_SPC_SMPTE240M = 7, ///< functionally identical to above - AVCOL_SPC_YCGCO = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 - AVCOL_SPC_YCOCG = AVCOL_SPC_YCGCO, - AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system - AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system - AVCOL_SPC_SMPTE2085 = 11, ///< SMPTE 2085, Y'D'zD'x - AVCOL_SPC_CHROMA_DERIVED_NCL = 12, ///< Chromaticity-derived non-constant luminance system - AVCOL_SPC_CHROMA_DERIVED_CL = 13, ///< Chromaticity-derived constant luminance system - AVCOL_SPC_ICTCP = 14, ///< ITU-R BT.2100-0, ICtCp - AVCOL_SPC_NB ///< Not part of ABI -}; - -/** - * Visual content value range. - * - * These values are based on definitions that can be found in multiple - * specifications, such as ITU-T BT.709 (3.4 - Quantization of RGB, luminance - * and colour-difference signals), ITU-T BT.2020 (Table 5 - Digital - * Representation) as well as ITU-T BT.2100 (Table 9 - Digital 10- and 12-bit - * integer representation). At the time of writing, the BT.2100 one is - * recommended, as it also defines the full range representation. - * - * Common definitions: - * - For RGB and luminance planes such as Y in YCbCr and I in ICtCp, - * 'E' is the original value in range of 0.0 to 1.0. - * - For chrominance planes such as Cb,Cr and Ct,Cp, 'E' is the original - * value in range of -0.5 to 0.5. - * - 'n' is the output bit depth. - * - For additional definitions such as rounding and clipping to valid n - * bit unsigned integer range, please refer to BT.2100 (Table 9). - */ -enum AVColorRange { - AVCOL_RANGE_UNSPECIFIED = 0, - - /** - * Narrow or limited range content. - * - * - For luminance planes: - * - * (219 * E + 16) * 2^(n-8) - * - * F.ex. the range of 16-235 for 8 bits - * - * - For chrominance planes: - * - * (224 * E + 128) * 2^(n-8) - * - * F.ex. the range of 16-240 for 8 bits - */ - AVCOL_RANGE_MPEG = 1, - - /** - * Full range content. - * - * - For RGB and luminance planes: - * - * (2^n - 1) * E - * - * F.ex. the range of 0-255 for 8 bits - * - * - For chrominance planes: - * - * (2^n - 1) * E + 2^(n - 1) - * - * F.ex. the range of 1-255 for 8 bits - */ - AVCOL_RANGE_JPEG = 2, - AVCOL_RANGE_NB ///< Not part of ABI -}; - -/** - * Location of chroma samples. - * - * Illustration showing the location of the first (top left) chroma sample of the - * image, the left shows only luma, the right - * shows the location of the chroma sample, the 2 could be imagined to overlay - * each other but are drawn separately due to limitations of ASCII - * - * 1st 2nd 1st 2nd horizontal luma sample positions - * v v v v - * ______ ______ - *1st luma line > |X X ... |3 4 X ... X are luma samples, - * | |1 2 1-6 are possible chroma positions - *2nd luma line > |X X ... |5 6 X ... 0 is undefined/unknown position - */ -enum AVChromaLocation { - AVCHROMA_LOC_UNSPECIFIED = 0, - AVCHROMA_LOC_LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0 - AVCHROMA_LOC_CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0 - AVCHROMA_LOC_TOPLEFT = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 - AVCHROMA_LOC_TOP = 4, - AVCHROMA_LOC_BOTTOMLEFT = 5, - AVCHROMA_LOC_BOTTOM = 6, - AVCHROMA_LOC_NB ///< Not part of ABI -}; - -#endif /* AVUTIL_PIXFMT_H */ diff --git a/prebuilts/arm/include/libavutil/random_seed.h b/prebuilts/arm/include/libavutil/random_seed.h deleted file mode 100644 index 0462a04..0000000 --- a/prebuilts/arm/include/libavutil/random_seed.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2009 Baptiste Coudurier - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_RANDOM_SEED_H -#define AVUTIL_RANDOM_SEED_H - -#include -/** - * @addtogroup lavu_crypto - * @{ - */ - -/** - * Get a seed to use in conjunction with random functions. - * This function tries to provide a good seed at a best effort bases. - * Its possible to call this function multiple times if more bits are needed. - * It can be quite slow, which is why it should only be used as seed for a faster - * PRNG. The quality of the seed depends on the platform. - */ -uint32_t av_get_random_seed(void); - -/** - * @} - */ - -#endif /* AVUTIL_RANDOM_SEED_H */ diff --git a/prebuilts/arm/include/libavutil/rational.h b/prebuilts/arm/include/libavutil/rational.h deleted file mode 100644 index cbb08a0..0000000 --- a/prebuilts/arm/include/libavutil/rational.h +++ /dev/null @@ -1,220 +0,0 @@ -/* - * rational numbers - * Copyright (c) 2003 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_math_rational - * Utilties for rational number calculation. - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_RATIONAL_H -#define AVUTIL_RATIONAL_H - -#include -#include -#include "attributes.h" - -/** - * @defgroup lavu_math_rational AVRational - * @ingroup lavu_math - * Rational number calculation. - * - * While rational numbers can be expressed as floating-point numbers, the - * conversion process is a lossy one, so are floating-point operations. On the - * other hand, the nature of FFmpeg demands highly accurate calculation of - * timestamps. This set of rational number utilities serves as a generic - * interface for manipulating rational numbers as pairs of numerators and - * denominators. - * - * Many of the functions that operate on AVRational's have the suffix `_q`, in - * reference to the mathematical symbol "ℚ" (Q) which denotes the set of all - * rational numbers. - * - * @{ - */ - -/** - * Rational number (pair of numerator and denominator). - */ -typedef struct AVRational{ - int num; ///< Numerator - int den; ///< Denominator -} AVRational; - -/** - * Create an AVRational. - * - * Useful for compilers that do not support compound literals. - * - * @note The return value is not reduced. - * @see av_reduce() - */ -static inline AVRational av_make_q(int num, int den) -{ - AVRational r = { num, den }; - return r; -} - -/** - * Compare two rationals. - * - * @param a First rational - * @param b Second rational - * - * @return One of the following values: - * - 0 if `a == b` - * - 1 if `a > b` - * - -1 if `a < b` - * - `INT_MIN` if one of the values is of the form `0 / 0` - */ -static inline int av_cmp_q(AVRational a, AVRational b){ - const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den; - - if(tmp) return (int)((tmp ^ a.den ^ b.den)>>63)|1; - else if(b.den && a.den) return 0; - else if(a.num && b.num) return (a.num>>31) - (b.num>>31); - else return INT_MIN; -} - -/** - * Convert an AVRational to a `double`. - * @param a AVRational to convert - * @return `a` in floating-point form - * @see av_d2q() - */ -static inline double av_q2d(AVRational a){ - return a.num / (double) a.den; -} - -/** - * Reduce a fraction. - * - * This is useful for framerate calculations. - * - * @param[out] dst_num Destination numerator - * @param[out] dst_den Destination denominator - * @param[in] num Source numerator - * @param[in] den Source denominator - * @param[in] max Maximum allowed values for `dst_num` & `dst_den` - * @return 1 if the operation is exact, 0 otherwise - */ -int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max); - -/** - * Multiply two rationals. - * @param b First rational - * @param c Second rational - * @return b*c - */ -AVRational av_mul_q(AVRational b, AVRational c) av_const; - -/** - * Divide one rational by another. - * @param b First rational - * @param c Second rational - * @return b/c - */ -AVRational av_div_q(AVRational b, AVRational c) av_const; - -/** - * Add two rationals. - * @param b First rational - * @param c Second rational - * @return b+c - */ -AVRational av_add_q(AVRational b, AVRational c) av_const; - -/** - * Subtract one rational from another. - * @param b First rational - * @param c Second rational - * @return b-c - */ -AVRational av_sub_q(AVRational b, AVRational c) av_const; - -/** - * Invert a rational. - * @param q value - * @return 1 / q - */ -static av_always_inline AVRational av_inv_q(AVRational q) -{ - AVRational r = { q.den, q.num }; - return r; -} - -/** - * Convert a double precision floating point number to a rational. - * - * In case of infinity, the returned value is expressed as `{1, 0}` or - * `{-1, 0}` depending on the sign. - * - * @param d `double` to convert - * @param max Maximum allowed numerator and denominator - * @return `d` in AVRational form - * @see av_q2d() - */ -AVRational av_d2q(double d, int max) av_const; - -/** - * Find which of the two rationals is closer to another rational. - * - * @param q Rational to be compared against - * @param q1,q2 Rationals to be tested - * @return One of the following values: - * - 1 if `q1` is nearer to `q` than `q2` - * - -1 if `q2` is nearer to `q` than `q1` - * - 0 if they have the same distance - */ -int av_nearer_q(AVRational q, AVRational q1, AVRational q2); - -/** - * Find the value in a list of rationals nearest a given reference rational. - * - * @param q Reference rational - * @param q_list Array of rationals terminated by `{0, 0}` - * @return Index of the nearest value found in the array - */ -int av_find_nearest_q_idx(AVRational q, const AVRational* q_list); - -/** - * Convert an AVRational to a IEEE 32-bit `float` expressed in fixed-point - * format. - * - * @param q Rational to be converted - * @return Equivalent floating-point value, expressed as an unsigned 32-bit - * integer. - * @note The returned value is platform-indepedant. - */ -uint32_t av_q2intfloat(AVRational q); - -/** - * Return the best rational so that a and b are multiple of it. - * If the resulting denominator is larger than max_den, return def. - */ -AVRational av_gcd_q(AVRational a, AVRational b, int max_den, AVRational def); - -/** - * @} - */ - -#endif /* AVUTIL_RATIONAL_H */ diff --git a/prebuilts/arm/include/libavutil/rc4.h b/prebuilts/arm/include/libavutil/rc4.h deleted file mode 100644 index 029cd2a..0000000 --- a/prebuilts/arm/include/libavutil/rc4.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * RC4 encryption/decryption/pseudo-random number generator - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_RC4_H -#define AVUTIL_RC4_H - -#include - -/** - * @defgroup lavu_rc4 RC4 - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVRC4 { - uint8_t state[256]; - int x, y; -} AVRC4; - -/** - * Allocate an AVRC4 context. - */ -AVRC4 *av_rc4_alloc(void); - -/** - * @brief Initializes an AVRC4 context. - * - * @param key_bits must be a multiple of 8 - * @param decrypt 0 for encryption, 1 for decryption, currently has no effect - * @return zero on success, negative value otherwise - */ -int av_rc4_init(struct AVRC4 *d, const uint8_t *key, int key_bits, int decrypt); - -/** - * @brief Encrypts / decrypts using the RC4 algorithm. - * - * @param count number of bytes - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst, may be NULL - * @param iv not (yet) used for RC4, should be NULL - * @param decrypt 0 for encryption, 1 for decryption, not (yet) used - */ -void av_rc4_crypt(struct AVRC4 *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_RC4_H */ diff --git a/prebuilts/arm/include/libavutil/replaygain.h b/prebuilts/arm/include/libavutil/replaygain.h deleted file mode 100644 index b49bf1a..0000000 --- a/prebuilts/arm/include/libavutil/replaygain.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_REPLAYGAIN_H -#define AVUTIL_REPLAYGAIN_H - -#include - -/** - * ReplayGain information (see - * http://wiki.hydrogenaudio.org/index.php?title=ReplayGain_1.0_specification). - * The size of this struct is a part of the public ABI. - */ -typedef struct AVReplayGain { - /** - * Track replay gain in microbels (divide by 100000 to get the value in dB). - * Should be set to INT32_MIN when unknown. - */ - int32_t track_gain; - /** - * Peak track amplitude, with 100000 representing full scale (but values - * may overflow). 0 when unknown. - */ - uint32_t track_peak; - /** - * Same as track_gain, but for the whole album. - */ - int32_t album_gain; - /** - * Same as track_peak, but for the whole album, - */ - uint32_t album_peak; -} AVReplayGain; - -#endif /* AVUTIL_REPLAYGAIN_H */ diff --git a/prebuilts/arm/include/libavutil/ripemd.h b/prebuilts/arm/include/libavutil/ripemd.h deleted file mode 100644 index 921aa66..0000000 --- a/prebuilts/arm/include/libavutil/ripemd.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * Copyright (C) 2013 James Almer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_ripemd - * Public header for RIPEMD hash function implementation. - */ - -#ifndef AVUTIL_RIPEMD_H -#define AVUTIL_RIPEMD_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_ripemd RIPEMD - * @ingroup lavu_hash - * RIPEMD hash function implementation. - * - * @{ - */ - -extern const int av_ripemd_size; - -struct AVRIPEMD; - -/** - * Allocate an AVRIPEMD context. - */ -struct AVRIPEMD *av_ripemd_alloc(void); - -/** - * Initialize RIPEMD hashing. - * - * @param context pointer to the function context (of size av_ripemd_size) - * @param bits number of bits in digest (128, 160, 256 or 320 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_ripemd_init(struct AVRIPEMD* context, int bits); - -/** - * Update hash value. - * - * @param context hash function context - * @param data input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, unsigned int len); -#else -void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_ripemd_final(struct AVRIPEMD* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_RIPEMD_H */ diff --git a/prebuilts/arm/include/libavutil/samplefmt.h b/prebuilts/arm/include/libavutil/samplefmt.h deleted file mode 100644 index 8cd43ae..0000000 --- a/prebuilts/arm/include/libavutil/samplefmt.h +++ /dev/null @@ -1,272 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_SAMPLEFMT_H -#define AVUTIL_SAMPLEFMT_H - -#include - -#include "avutil.h" -#include "attributes.h" - -/** - * @addtogroup lavu_audio - * @{ - * - * @defgroup lavu_sampfmts Audio sample formats - * - * Audio sample format enumeration and related convenience functions. - * @{ - */ - -/** - * Audio sample formats - * - * - The data described by the sample format is always in native-endian order. - * Sample values can be expressed by native C types, hence the lack of a signed - * 24-bit sample format even though it is a common raw audio data format. - * - * - The floating-point formats are based on full volume being in the range - * [-1.0, 1.0]. Any values outside this range are beyond full volume level. - * - * - The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg - * (such as AVFrame in libavcodec) is as follows: - * - * @par - * For planar sample formats, each audio channel is in a separate data plane, - * and linesize is the buffer size, in bytes, for a single plane. All data - * planes must be the same size. For packed sample formats, only the first data - * plane is used, and samples for each channel are interleaved. In this case, - * linesize is the buffer size, in bytes, for the 1 plane. - * - */ -enum AVSampleFormat { - AV_SAMPLE_FMT_NONE = -1, - AV_SAMPLE_FMT_U8, ///< unsigned 8 bits - AV_SAMPLE_FMT_S16, ///< signed 16 bits - AV_SAMPLE_FMT_S32, ///< signed 32 bits - AV_SAMPLE_FMT_FLT, ///< float - AV_SAMPLE_FMT_DBL, ///< double - - AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar - AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar - AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar - AV_SAMPLE_FMT_FLTP, ///< float, planar - AV_SAMPLE_FMT_DBLP, ///< double, planar - AV_SAMPLE_FMT_S64, ///< signed 64 bits - AV_SAMPLE_FMT_S64P, ///< signed 64 bits, planar - - AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking dynamically -}; - -/** - * Return the name of sample_fmt, or NULL if sample_fmt is not - * recognized. - */ -const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt); - -/** - * Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE - * on error. - */ -enum AVSampleFormat av_get_sample_fmt(const char *name); - -/** - * Return the planar<->packed alternative form of the given sample format, or - * AV_SAMPLE_FMT_NONE on error. If the passed sample_fmt is already in the - * requested planar/packed format, the format returned is the same as the - * input. - */ -enum AVSampleFormat av_get_alt_sample_fmt(enum AVSampleFormat sample_fmt, int planar); - -/** - * Get the packed alternative form of the given sample format. - * - * If the passed sample_fmt is already in packed format, the format returned is - * the same as the input. - * - * @return the packed alternative form of the given sample format or - AV_SAMPLE_FMT_NONE on error. - */ -enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt); - -/** - * Get the planar alternative form of the given sample format. - * - * If the passed sample_fmt is already in planar format, the format returned is - * the same as the input. - * - * @return the planar alternative form of the given sample format or - AV_SAMPLE_FMT_NONE on error. - */ -enum AVSampleFormat av_get_planar_sample_fmt(enum AVSampleFormat sample_fmt); - -/** - * Generate a string corresponding to the sample format with - * sample_fmt, or a header if sample_fmt is negative. - * - * @param buf the buffer where to write the string - * @param buf_size the size of buf - * @param sample_fmt the number of the sample format to print the - * corresponding info string, or a negative value to print the - * corresponding header. - * @return the pointer to the filled buffer or NULL if sample_fmt is - * unknown or in case of other errors - */ -char *av_get_sample_fmt_string(char *buf, int buf_size, enum AVSampleFormat sample_fmt); - -/** - * Return number of bytes per sample. - * - * @param sample_fmt the sample format - * @return number of bytes per sample or zero if unknown for the given - * sample format - */ -int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt); - -/** - * Check if the sample format is planar. - * - * @param sample_fmt the sample format to inspect - * @return 1 if the sample format is planar, 0 if it is interleaved - */ -int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt); - -/** - * Get the required buffer size for the given audio parameters. - * - * @param[out] linesize calculated linesize, may be NULL - * @param nb_channels the number of channels - * @param nb_samples the number of samples in a single channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return required buffer size, or negative error code on failure - */ -int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, - enum AVSampleFormat sample_fmt, int align); - -/** - * @} - * - * @defgroup lavu_sampmanip Samples manipulation - * - * Functions that manipulate audio samples - * @{ - */ - -/** - * Fill plane data pointers and linesize for samples with sample - * format sample_fmt. - * - * The audio_data array is filled with the pointers to the samples data planes: - * for planar, set the start point of each channel's data within the buffer, - * for packed, set the start point of the entire buffer only. - * - * The value pointed to by linesize is set to the aligned size of each - * channel's data buffer for planar layout, or to the aligned size of the - * buffer for all channels for packed layout. - * - * The buffer in buf must be big enough to contain all the samples - * (use av_samples_get_buffer_size() to compute its minimum size), - * otherwise the audio_data pointers will point to invalid data. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize calculated linesize, may be NULL - * @param buf the pointer to a buffer containing the samples - * @param nb_channels the number of channels - * @param nb_samples the number of samples in a single channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return >=0 on success or a negative error code on failure - * @todo return minimum size in bytes required for the buffer in case - * of success at the next bump - */ -int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, - const uint8_t *buf, - int nb_channels, int nb_samples, - enum AVSampleFormat sample_fmt, int align); - -/** - * Allocate a samples buffer for nb_samples samples, and fill data pointers and - * linesize accordingly. - * The allocated samples buffer can be freed by using av_freep(&audio_data[0]) - * Allocated data will be initialized to silence. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize aligned size for audio buffer(s), may be NULL - * @param nb_channels number of audio channels - * @param nb_samples number of samples per channel - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return >=0 on success or a negative error code on failure - * @todo return the size of the allocated buffer in case of success at the next bump - * @see av_samples_fill_arrays() - * @see av_samples_alloc_array_and_samples() - */ -int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels, - int nb_samples, enum AVSampleFormat sample_fmt, int align); - -/** - * Allocate a data pointers array, samples buffer for nb_samples - * samples, and fill data pointers and linesize accordingly. - * - * This is the same as av_samples_alloc(), but also allocates the data - * pointers array. - * - * @see av_samples_alloc() - */ -int av_samples_alloc_array_and_samples(uint8_t ***audio_data, int *linesize, int nb_channels, - int nb_samples, enum AVSampleFormat sample_fmt, int align); - -/** - * Copy samples from src to dst. - * - * @param dst destination array of pointers to data planes - * @param src source array of pointers to data planes - * @param dst_offset offset in samples at which the data will be written to dst - * @param src_offset offset in samples at which the data will be read from src - * @param nb_samples number of samples to be copied - * @param nb_channels number of audio channels - * @param sample_fmt audio sample format - */ -int av_samples_copy(uint8_t **dst, uint8_t * const *src, int dst_offset, - int src_offset, int nb_samples, int nb_channels, - enum AVSampleFormat sample_fmt); - -/** - * Fill an audio buffer with silence. - * - * @param audio_data array of pointers to data planes - * @param offset offset in samples at which to start filling - * @param nb_samples number of samples to fill - * @param nb_channels number of audio channels - * @param sample_fmt audio sample format - */ -int av_samples_set_silence(uint8_t **audio_data, int offset, int nb_samples, - int nb_channels, enum AVSampleFormat sample_fmt); - -/** - * @} - * @} - */ -#endif /* AVUTIL_SAMPLEFMT_H */ diff --git a/prebuilts/arm/include/libavutil/sha.h b/prebuilts/arm/include/libavutil/sha.h deleted file mode 100644 index c0180e5..0000000 --- a/prebuilts/arm/include/libavutil/sha.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_sha - * Public header for SHA-1 & SHA-256 hash function implementations. - */ - -#ifndef AVUTIL_SHA_H -#define AVUTIL_SHA_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_sha SHA - * @ingroup lavu_hash - * SHA-1 and SHA-256 (Secure Hash Algorithm) hash function implementations. - * - * This module supports the following SHA hash functions: - * - * - SHA-1: 160 bits - * - SHA-224: 224 bits, as a variant of SHA-2 - * - SHA-256: 256 bits, as a variant of SHA-2 - * - * @see For SHA-384, SHA-512, and variants thereof, see @ref lavu_sha512. - * - * @{ - */ - -extern const int av_sha_size; - -struct AVSHA; - -/** - * Allocate an AVSHA context. - */ -struct AVSHA *av_sha_alloc(void); - -/** - * Initialize SHA-1 or SHA-2 hashing. - * - * @param context pointer to the function context (of size av_sha_size) - * @param bits number of bits in digest (SHA-1 - 160 bits, SHA-2 224 or 256 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_sha_init(struct AVSHA* context, int bits); - -/** - * Update hash value. - * - * @param ctx hash function context - * @param data input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_sha_update(struct AVSHA *ctx, const uint8_t *data, unsigned int len); -#else -void av_sha_update(struct AVSHA *ctx, const uint8_t *data, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_sha_final(struct AVSHA* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_SHA_H */ diff --git a/prebuilts/arm/include/libavutil/sha512.h b/prebuilts/arm/include/libavutil/sha512.h deleted file mode 100644 index bef714b..0000000 --- a/prebuilts/arm/include/libavutil/sha512.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * Copyright (C) 2013 James Almer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_sha512 - * Public header for SHA-512 implementation. - */ - -#ifndef AVUTIL_SHA512_H -#define AVUTIL_SHA512_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_sha512 SHA-512 - * @ingroup lavu_hash - * SHA-512 (Secure Hash Algorithm) hash function implementations. - * - * This module supports the following SHA-2 hash functions: - * - * - SHA-512/224: 224 bits - * - SHA-512/256: 256 bits - * - SHA-384: 384 bits - * - SHA-512: 512 bits - * - * @see For SHA-1, SHA-256, and variants thereof, see @ref lavu_sha. - * - * @{ - */ - -extern const int av_sha512_size; - -struct AVSHA512; - -/** - * Allocate an AVSHA512 context. - */ -struct AVSHA512 *av_sha512_alloc(void); - -/** - * Initialize SHA-2 512 hashing. - * - * @param context pointer to the function context (of size av_sha512_size) - * @param bits number of bits in digest (224, 256, 384 or 512 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_sha512_init(struct AVSHA512* context, int bits); - -/** - * Update hash value. - * - * @param context hash function context - * @param data input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_sha512_update(struct AVSHA512* context, const uint8_t* data, unsigned int len); -#else -void av_sha512_update(struct AVSHA512* context, const uint8_t* data, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_sha512_final(struct AVSHA512* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_SHA512_H */ diff --git a/prebuilts/arm/include/libavutil/spherical.h b/prebuilts/arm/include/libavutil/spherical.h deleted file mode 100644 index cef759c..0000000 --- a/prebuilts/arm/include/libavutil/spherical.h +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (c) 2016 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Spherical video - */ - -#ifndef AVUTIL_SPHERICAL_H -#define AVUTIL_SPHERICAL_H - -#include -#include - -/** - * @addtogroup lavu_video - * @{ - * - * @defgroup lavu_video_spherical Spherical video mapping - * @{ - */ - -/** - * @addtogroup lavu_video_spherical - * A spherical video file contains surfaces that need to be mapped onto a - * sphere. Depending on how the frame was converted, a different distortion - * transformation or surface recomposition function needs to be applied before - * the video should be mapped and displayed. - */ - -/** - * Projection of the video surface(s) on a sphere. - */ -enum AVSphericalProjection { - /** - * Video represents a sphere mapped on a flat surface using - * equirectangular projection. - */ - AV_SPHERICAL_EQUIRECTANGULAR, - - /** - * Video frame is split into 6 faces of a cube, and arranged on a - * 3x2 layout. Faces are oriented upwards for the front, left, right, - * and back faces. The up face is oriented so the top of the face is - * forwards and the down face is oriented so the top of the face is - * to the back. - */ - AV_SPHERICAL_CUBEMAP, - - /** - * Video represents a portion of a sphere mapped on a flat surface - * using equirectangular projection. The @ref bounding fields indicate - * the position of the current video in a larger surface. - */ - AV_SPHERICAL_EQUIRECTANGULAR_TILE, -}; - -/** - * This structure describes how to handle spherical videos, outlining - * information about projection, initial layout, and any other view modifier. - * - * @note The struct must be allocated with av_spherical_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVSphericalMapping { - /** - * Projection type. - */ - enum AVSphericalProjection projection; - - /** - * @name Initial orientation - * @{ - * There fields describe additional rotations applied to the sphere after - * the video frame is mapped onto it. The sphere is rotated around the - * viewer, who remains stationary. The order of transformation is always - * yaw, followed by pitch, and finally by roll. - * - * The coordinate system matches the one defined in OpenGL, where the - * forward vector (z) is coming out of screen, and it is equivalent to - * a rotation matrix of R = r_y(yaw) * r_x(pitch) * r_z(roll). - * - * A positive yaw rotates the portion of the sphere in front of the viewer - * toward their right. A positive pitch rotates the portion of the sphere - * in front of the viewer upwards. A positive roll tilts the portion of - * the sphere in front of the viewer to the viewer's right. - * - * These values are exported as 16.16 fixed point. - * - * See this equirectangular projection as example: - * - * @code{.unparsed} - * Yaw - * -180 0 180 - * 90 +-------------+-------------+ 180 - * | | | up - * P | | | y| forward - * i | ^ | | /z - * t 0 +-------------X-------------+ 0 Roll | / - * c | | | | / - * h | | | 0|/_____right - * | | | x - * -90 +-------------+-------------+ -180 - * - * X - the default camera center - * ^ - the default up vector - * @endcode - */ - int32_t yaw; ///< Rotation around the up vector [-180, 180]. - int32_t pitch; ///< Rotation around the right vector [-90, 90]. - int32_t roll; ///< Rotation around the forward vector [-180, 180]. - /** - * @} - */ - - /** - * @name Bounding rectangle - * @anchor bounding - * @{ - * These fields indicate the location of the current tile, and where - * it should be mapped relative to the original surface. They are - * exported as 0.32 fixed point, and can be converted to classic - * pixel values with av_spherical_bounds(). - * - * @code{.unparsed} - * +----------------+----------+ - * | |bound_top | - * | +--------+ | - * | bound_left |tile | | - * +<---------->| |<--->+bound_right - * | +--------+ | - * | | | - * | bound_bottom| | - * +----------------+----------+ - * @endcode - * - * If needed, the original video surface dimensions can be derived - * by adding the current stream or frame size to the related bounds, - * like in the following example: - * - * @code{c} - * original_width = tile->width + bound_left + bound_right; - * original_height = tile->height + bound_top + bound_bottom; - * @endcode - * - * @note These values are valid only for the tiled equirectangular - * projection type (@ref AV_SPHERICAL_EQUIRECTANGULAR_TILE), - * and should be ignored in all other cases. - */ - uint32_t bound_left; ///< Distance from the left edge - uint32_t bound_top; ///< Distance from the top edge - uint32_t bound_right; ///< Distance from the right edge - uint32_t bound_bottom; ///< Distance from the bottom edge - /** - * @} - */ - - /** - * Number of pixels to pad from the edge of each cube face. - * - * @note This value is valid for only for the cubemap projection type - * (@ref AV_SPHERICAL_CUBEMAP), and should be ignored in all other - * cases. - */ - uint32_t padding; -} AVSphericalMapping; - -/** - * Allocate a AVSphericalVideo structure and initialize its fields to default - * values. - * - * @return the newly allocated struct or NULL on failure - */ -AVSphericalMapping *av_spherical_alloc(size_t *size); - -/** - * Convert the @ref bounding fields from an AVSphericalVideo - * from 0.32 fixed point to pixels. - * - * @param map The AVSphericalVideo map to read bound values from. - * @param width Width of the current frame or stream. - * @param height Height of the current frame or stream. - * @param left Pixels from the left edge. - * @param top Pixels from the top edge. - * @param right Pixels from the right edge. - * @param bottom Pixels from the bottom edge. - */ -void av_spherical_tile_bounds(const AVSphericalMapping *map, - size_t width, size_t height, - size_t *left, size_t *top, - size_t *right, size_t *bottom); - -/** - * Provide a human-readable name of a given AVSphericalProjection. - * - * @param projection The input AVSphericalProjection. - * - * @return The name of the AVSphericalProjection, or "unknown". - */ -const char *av_spherical_projection_name(enum AVSphericalProjection projection); - -/** - * Get the AVSphericalProjection form a human-readable name. - * - * @param name The input string. - * - * @return The AVSphericalProjection value, or -1 if not found. - */ -int av_spherical_from_name(const char *name); -/** - * @} - * @} - */ - -#endif /* AVUTIL_SPHERICAL_H */ diff --git a/prebuilts/arm/include/libavutil/stereo3d.h b/prebuilts/arm/include/libavutil/stereo3d.h deleted file mode 100644 index d421aac..0000000 --- a/prebuilts/arm/include/libavutil/stereo3d.h +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (c) 2013 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Stereoscopic video - */ - -#ifndef AVUTIL_STEREO3D_H -#define AVUTIL_STEREO3D_H - -#include - -#include "frame.h" - -/** - * @addtogroup lavu_video - * @{ - * - * @defgroup lavu_video_stereo3d Stereo3D types and functions - * @{ - */ - -/** - * @addtogroup lavu_video_stereo3d - * A stereoscopic video file consists in multiple views embedded in a single - * frame, usually describing two views of a scene. This file describes all - * possible codec-independent view arrangements. - * */ - -/** - * List of possible 3D Types - */ -enum AVStereo3DType { - /** - * Video is not stereoscopic (and metadata has to be there). - */ - AV_STEREO3D_2D, - - /** - * Views are next to each other. - * - * @code{.unparsed} - * LLLLRRRR - * LLLLRRRR - * LLLLRRRR - * ... - * @endcode - */ - AV_STEREO3D_SIDEBYSIDE, - - /** - * Views are on top of each other. - * - * @code{.unparsed} - * LLLLLLLL - * LLLLLLLL - * RRRRRRRR - * RRRRRRRR - * @endcode - */ - AV_STEREO3D_TOPBOTTOM, - - /** - * Views are alternated temporally. - * - * @code{.unparsed} - * frame0 frame1 frame2 ... - * LLLLLLLL RRRRRRRR LLLLLLLL - * LLLLLLLL RRRRRRRR LLLLLLLL - * LLLLLLLL RRRRRRRR LLLLLLLL - * ... ... ... - * @endcode - */ - AV_STEREO3D_FRAMESEQUENCE, - - /** - * Views are packed in a checkerboard-like structure per pixel. - * - * @code{.unparsed} - * LRLRLRLR - * RLRLRLRL - * LRLRLRLR - * ... - * @endcode - */ - AV_STEREO3D_CHECKERBOARD, - - /** - * Views are next to each other, but when upscaling - * apply a checkerboard pattern. - * - * @code{.unparsed} - * LLLLRRRR L L L L R R R R - * LLLLRRRR => L L L L R R R R - * LLLLRRRR L L L L R R R R - * LLLLRRRR L L L L R R R R - * @endcode - */ - AV_STEREO3D_SIDEBYSIDE_QUINCUNX, - - /** - * Views are packed per line, as if interlaced. - * - * @code{.unparsed} - * LLLLLLLL - * RRRRRRRR - * LLLLLLLL - * ... - * @endcode - */ - AV_STEREO3D_LINES, - - /** - * Views are packed per column. - * - * @code{.unparsed} - * LRLRLRLR - * LRLRLRLR - * LRLRLRLR - * ... - * @endcode - */ - AV_STEREO3D_COLUMNS, -}; - -/** - * List of possible view types. - */ -enum AVStereo3DView { - /** - * Frame contains two packed views. - */ - AV_STEREO3D_VIEW_PACKED, - - /** - * Frame contains only the left view. - */ - AV_STEREO3D_VIEW_LEFT, - - /** - * Frame contains only the right view. - */ - AV_STEREO3D_VIEW_RIGHT, -}; - -/** - * Inverted views, Right/Bottom represents the left view. - */ -#define AV_STEREO3D_FLAG_INVERT (1 << 0) - -/** - * Stereo 3D type: this structure describes how two videos are packed - * within a single video surface, with additional information as needed. - * - * @note The struct must be allocated with av_stereo3d_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVStereo3D { - /** - * How views are packed within the video. - */ - enum AVStereo3DType type; - - /** - * Additional information about the frame packing. - */ - int flags; - - /** - * Determines which views are packed. - */ - enum AVStereo3DView view; -} AVStereo3D; - -/** - * Allocate an AVStereo3D structure and set its fields to default values. - * The resulting struct can be freed using av_freep(). - * - * @return An AVStereo3D filled with default values or NULL on failure. - */ -AVStereo3D *av_stereo3d_alloc(void); - -/** - * Allocate a complete AVFrameSideData and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVStereo3D structure to be filled by caller. - */ -AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame); - -/** - * Provide a human-readable name of a given stereo3d type. - * - * @param type The input stereo3d type value. - * - * @return The name of the stereo3d value, or "unknown". - */ -const char *av_stereo3d_type_name(unsigned int type); - -/** - * Get the AVStereo3DType form a human-readable name. - * - * @param name The input string. - * - * @return The AVStereo3DType value, or -1 if not found. - */ -int av_stereo3d_from_name(const char *name); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_STEREO3D_H */ diff --git a/prebuilts/arm/include/libavutil/tea.h b/prebuilts/arm/include/libavutil/tea.h deleted file mode 100644 index dd929bd..0000000 --- a/prebuilts/arm/include/libavutil/tea.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * A 32-bit implementation of the TEA algorithm - * Copyright (c) 2015 Vesselin Bontchev - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TEA_H -#define AVUTIL_TEA_H - -#include - -/** - * @file - * @brief Public header for libavutil TEA algorithm - * @defgroup lavu_tea TEA - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_tea_size; - -struct AVTEA; - -/** - * Allocate an AVTEA context - * To free the struct: av_free(ptr) - */ -struct AVTEA *av_tea_alloc(void); - -/** - * Initialize an AVTEA context. - * - * @param ctx an AVTEA context - * @param key a key of 16 bytes used for encryption/decryption - * @param rounds the number of rounds in TEA (64 is the "standard") - */ -void av_tea_init(struct AVTEA *ctx, const uint8_t key[16], int rounds); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_tea_crypt(struct AVTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_TEA_H */ diff --git a/prebuilts/arm/include/libavutil/threadmessage.h b/prebuilts/arm/include/libavutil/threadmessage.h deleted file mode 100644 index 42ce655..0000000 --- a/prebuilts/arm/include/libavutil/threadmessage.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with FFmpeg; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_THREADMESSAGE_H -#define AVUTIL_THREADMESSAGE_H - -typedef struct AVThreadMessageQueue AVThreadMessageQueue; - -typedef enum AVThreadMessageFlags { - - /** - * Perform non-blocking operation. - * If this flag is set, send and recv operations are non-blocking and - * return AVERROR(EAGAIN) immediately if they can not proceed. - */ - AV_THREAD_MESSAGE_NONBLOCK = 1, - -} AVThreadMessageFlags; - -/** - * Allocate a new message queue. - * - * @param mq pointer to the message queue - * @param nelem maximum number of elements in the queue - * @param elsize size of each element in the queue - * @return >=0 for success; <0 for error, in particular AVERROR(ENOSYS) if - * lavu was built without thread support - */ -int av_thread_message_queue_alloc(AVThreadMessageQueue **mq, - unsigned nelem, - unsigned elsize); - -/** - * Free a message queue. - * - * The message queue must no longer be in use by another thread. - */ -void av_thread_message_queue_free(AVThreadMessageQueue **mq); - -/** - * Send a message on the queue. - */ -int av_thread_message_queue_send(AVThreadMessageQueue *mq, - void *msg, - unsigned flags); - -/** - * Receive a message from the queue. - */ -int av_thread_message_queue_recv(AVThreadMessageQueue *mq, - void *msg, - unsigned flags); - -/** - * Set the sending error code. - * - * If the error code is set to non-zero, av_thread_message_queue_send() will - * return it immediately. Conventional values, such as AVERROR_EOF or - * AVERROR(EAGAIN), can be used to cause the sending thread to stop or - * suspend its operation. - */ -void av_thread_message_queue_set_err_send(AVThreadMessageQueue *mq, - int err); - -/** - * Set the receiving error code. - * - * If the error code is set to non-zero, av_thread_message_queue_recv() will - * return it immediately when there are no longer available messages. - * Conventional values, such as AVERROR_EOF or AVERROR(EAGAIN), can be used - * to cause the receiving thread to stop or suspend its operation. - */ -void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq, - int err); - -/** - * Set the optional free message callback function which will be called if an - * operation is removing messages from the queue. - */ -void av_thread_message_queue_set_free_func(AVThreadMessageQueue *mq, - void (*free_func)(void *msg)); - -/** - * Return the current number of messages in the queue. - * - * @return the current number of messages or AVERROR(ENOSYS) if lavu was built - * without thread support - */ -int av_thread_message_queue_nb_elems(AVThreadMessageQueue *mq); - -/** - * Flush the message queue - * - * This function is mostly equivalent to reading and free-ing every message - * except that it will be done in a single operation (no lock/unlock between - * reads). - */ -void av_thread_message_flush(AVThreadMessageQueue *mq); - -#endif /* AVUTIL_THREADMESSAGE_H */ diff --git a/prebuilts/arm/include/libavutil/time.h b/prebuilts/arm/include/libavutil/time.h deleted file mode 100644 index dc169b0..0000000 --- a/prebuilts/arm/include/libavutil/time.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2000-2003 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TIME_H -#define AVUTIL_TIME_H - -#include - -/** - * Get the current time in microseconds. - */ -int64_t av_gettime(void); - -/** - * Get the current time in microseconds since some unspecified starting point. - * On platforms that support it, the time comes from a monotonic clock - * This property makes this time source ideal for measuring relative time. - * The returned values may not be monotonic on platforms where a monotonic - * clock is not available. - */ -int64_t av_gettime_relative(void); - -/** - * Indicates with a boolean result if the av_gettime_relative() time source - * is monotonic. - */ -int av_gettime_relative_is_monotonic(void); - -/** - * Sleep for a period of time. Although the duration is expressed in - * microseconds, the actual delay may be rounded to the precision of the - * system timer. - * - * @param usec Number of microseconds to sleep. - * @return zero on success or (negative) error code. - */ -int av_usleep(unsigned usec); - -#endif /* AVUTIL_TIME_H */ diff --git a/prebuilts/arm/include/libavutil/timecode.h b/prebuilts/arm/include/libavutil/timecode.h deleted file mode 100644 index 060574a..0000000 --- a/prebuilts/arm/include/libavutil/timecode.h +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (c) 2006 Smartjog S.A.S, Baptiste Coudurier - * Copyright (c) 2011-2012 Smartjog S.A.S, Clément Bœsch - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Timecode helpers header - */ - -#ifndef AVUTIL_TIMECODE_H -#define AVUTIL_TIMECODE_H - -#include -#include "rational.h" - -#define AV_TIMECODE_STR_SIZE 23 - -enum AVTimecodeFlag { - AV_TIMECODE_FLAG_DROPFRAME = 1<<0, ///< timecode is drop frame - AV_TIMECODE_FLAG_24HOURSMAX = 1<<1, ///< timecode wraps after 24 hours - AV_TIMECODE_FLAG_ALLOWNEGATIVE = 1<<2, ///< negative time values are allowed -}; - -typedef struct { - int start; ///< timecode frame start (first base frame number) - uint32_t flags; ///< flags such as drop frame, +24 hours support, ... - AVRational rate; ///< frame rate in rational form - unsigned fps; ///< frame per second; must be consistent with the rate field -} AVTimecode; - -/** - * Adjust frame number for NTSC drop frame time code. - * - * @param framenum frame number to adjust - * @param fps frame per second, multiples of 30 - * @return adjusted frame number - * @warning adjustment is only valid for multiples of NTSC 29.97 - */ -int av_timecode_adjust_ntsc_framenum2(int framenum, int fps); - -/** - * Convert frame number to SMPTE 12M binary representation. - * - * @param tc timecode data correctly initialized - * @param framenum frame number - * @return the SMPTE binary representation - * - * See SMPTE ST 314M-2005 Sec 4.4.2.2.1 "Time code pack (TC)" - * the format description as follows: - * bits 0-5: hours, in BCD(6bits) - * bits 6: BGF1 - * bits 7: BGF2 (NTSC) or FIELD (PAL) - * bits 8-14: minutes, in BCD(7bits) - * bits 15: BGF0 (NTSC) or BGF2 (PAL) - * bits 16-22: seconds, in BCD(7bits) - * bits 23: FIELD (NTSC) or BGF0 (PAL) - * bits 24-29: frames, in BCD(6bits) - * bits 30: drop frame flag (0: non drop, 1: drop) - * bits 31: color frame flag (0: unsync mode, 1: sync mode) - * @note BCD numbers (6 or 7 bits): 4 or 5 lower bits for units, 2 higher bits for tens. - * @note Frame number adjustment is automatically done in case of drop timecode, - * you do NOT have to call av_timecode_adjust_ntsc_framenum2(). - * @note The frame number is relative to tc->start. - * @note Color frame (CF) and binary group flags (BGF) bits are set to zero. - */ -uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum); - -/** - * Convert sei info to SMPTE 12M binary representation. - * - * @param rate frame rate in rational form - * @param drop drop flag - * @param hh hour - * @param mm minute - * @param ss second - * @param ff frame number - * @return the SMPTE binary representation - */ -uint32_t av_timecode_get_smpte(AVRational rate, int drop, int hh, int mm, int ss, int ff); - -/** - * Load timecode string in buf. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tc timecode data correctly initialized - * @param framenum frame number - * @return the buf parameter - * - * @note Timecode representation can be a negative timecode and have more than - * 24 hours, but will only be honored if the flags are correctly set. - * @note The frame number is relative to tc->start. - */ -char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum); - -/** - * Get the timecode string from the SMPTE timecode format. - * - * In contrast to av_timecode_make_smpte_tc_string this function supports 50/60 - * fps timecodes by using the field bit. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param rate frame rate of the timecode - * @param tcsmpte the 32-bit SMPTE timecode - * @param prevent_df prevent the use of a drop flag when it is known the DF bit - * is arbitrary - * @param skip_field prevent the use of a field flag when it is known the field - * bit is arbitrary (e.g. because it is used as PC flag) - * @return the buf parameter - */ -char *av_timecode_make_smpte_tc_string2(char *buf, AVRational rate, uint32_t tcsmpte, int prevent_df, int skip_field); - -/** - * Get the timecode string from the SMPTE timecode format. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tcsmpte the 32-bit SMPTE timecode - * @param prevent_df prevent the use of a drop flag when it is known the DF bit - * is arbitrary - * @return the buf parameter - */ -char *av_timecode_make_smpte_tc_string(char *buf, uint32_t tcsmpte, int prevent_df); - -/** - * Get the timecode string from the 25-bit timecode format (MPEG GOP format). - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tc25bit the 25-bits timecode - * @return the buf parameter - */ -char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit); - -/** - * Init a timecode struct with the passed parameters. - * - * @param log_ctx a pointer to an arbitrary struct of which the first field - * is a pointer to an AVClass struct (used for av_log) - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param flags miscellaneous flags such as drop frame, +24 hours, ... - * (see AVTimecodeFlag) - * @param frame_start the first frame number - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx); - -/** - * Init a timecode struct from the passed timecode components. - * - * @param log_ctx a pointer to an arbitrary struct of which the first field - * is a pointer to an AVClass struct (used for av_log) - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param flags miscellaneous flags such as drop frame, +24 hours, ... - * (see AVTimecodeFlag) - * @param hh hours - * @param mm minutes - * @param ss seconds - * @param ff frames - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init_from_components(AVTimecode *tc, AVRational rate, int flags, int hh, int mm, int ss, int ff, void *log_ctx); - -/** - * Parse timecode representation (hh:mm:ss[:;.]ff). - * - * @param log_ctx a pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct (used for av_log). - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param str timecode string which will determine the frame start - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx); - -/** - * Check if the timecode feature is available for the given frame rate - * - * @return 0 if supported, <0 otherwise - */ -int av_timecode_check_frame_rate(AVRational rate); - -#endif /* AVUTIL_TIMECODE_H */ diff --git a/prebuilts/arm/include/libavutil/timestamp.h b/prebuilts/arm/include/libavutil/timestamp.h deleted file mode 100644 index e082f01..0000000 --- a/prebuilts/arm/include/libavutil/timestamp.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * timestamp utils, mostly useful for debugging/logging purposes - */ - -#ifndef AVUTIL_TIMESTAMP_H -#define AVUTIL_TIMESTAMP_H - -#include "common.h" - -#if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS) && !defined(PRId64) -#error missing -D__STDC_FORMAT_MACROS / #define __STDC_FORMAT_MACROS -#endif - -#define AV_TS_MAX_STRING_SIZE 32 - -/** - * Fill the provided buffer with a string containing a timestamp - * representation. - * - * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE - * @param ts the timestamp to represent - * @return the buffer in input - */ -static inline char *av_ts_make_string(char *buf, int64_t ts) -{ - if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); - else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%" PRId64, ts); - return buf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_ts2str(ts) av_ts_make_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts) - -/** - * Fill the provided buffer with a string containing a timestamp time - * representation. - * - * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE - * @param ts the timestamp to represent - * @param tb the timebase of the timestamp - * @return the buffer in input - */ -static inline char *av_ts_make_time_string(char *buf, int64_t ts, AVRational *tb) -{ - if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); - else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%.6g", av_q2d(*tb) * ts); - return buf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_ts2timestr(ts, tb) av_ts_make_time_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts, tb) - -#endif /* AVUTIL_TIMESTAMP_H */ diff --git a/prebuilts/arm/include/libavutil/tree.h b/prebuilts/arm/include/libavutil/tree.h deleted file mode 100644 index d5e0aeb..0000000 --- a/prebuilts/arm/include/libavutil/tree.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * A tree container. - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_TREE_H -#define AVUTIL_TREE_H - -#include "attributes.h" -#include "version.h" - -/** - * @addtogroup lavu_tree AVTree - * @ingroup lavu_data - * - * Low-complexity tree container - * - * Insertion, removal, finding equal, largest which is smaller than and - * smallest which is larger than, all have O(log n) worst-case complexity. - * @{ - */ - - -struct AVTreeNode; -extern const int av_tree_node_size; - -/** - * Allocate an AVTreeNode. - */ -struct AVTreeNode *av_tree_node_alloc(void); - -/** - * Find an element. - * @param root a pointer to the root node of the tree - * @param next If next is not NULL, then next[0] will contain the previous - * element and next[1] the next element. If either does not exist, - * then the corresponding entry in next is unchanged. - * @param cmp compare function used to compare elements in the tree, - * API identical to that of Standard C's qsort - * It is guaranteed that the first and only the first argument to cmp() - * will be the key parameter to av_tree_find(), thus it could if the - * user wants, be a different type (like an opaque context). - * @return An element with cmp(key, elem) == 0 or NULL if no such element - * exists in the tree. - */ -void *av_tree_find(const struct AVTreeNode *root, void *key, - int (*cmp)(const void *key, const void *b), void *next[2]); - -/** - * Insert or remove an element. - * - * If *next is NULL, then the supplied element will be removed if it exists. - * If *next is non-NULL, then the supplied element will be inserted, unless - * it already exists in the tree. - * - * @param rootp A pointer to a pointer to the root node of the tree; note that - * the root node can change during insertions, this is required - * to keep the tree balanced. - * @param key pointer to the element key to insert in the tree - * @param next Used to allocate and free AVTreeNodes. For insertion the user - * must set it to an allocated and zeroed object of at least - * av_tree_node_size bytes size. av_tree_insert() will set it to - * NULL if it has been consumed. - * For deleting elements *next is set to NULL by the user and - * av_tree_insert() will set it to the AVTreeNode which was - * used for the removed element. - * This allows the use of flat arrays, which have - * lower overhead compared to many malloced elements. - * You might want to define a function like: - * @code - * void *tree_insert(struct AVTreeNode **rootp, void *key, - * int (*cmp)(void *key, const void *b), - * AVTreeNode **next) - * { - * if (!*next) - * *next = av_mallocz(av_tree_node_size); - * return av_tree_insert(rootp, key, cmp, next); - * } - * void *tree_remove(struct AVTreeNode **rootp, void *key, - * int (*cmp)(void *key, const void *b, AVTreeNode **next)) - * { - * av_freep(next); - * return av_tree_insert(rootp, key, cmp, next); - * } - * @endcode - * @param cmp compare function used to compare elements in the tree, API identical - * to that of Standard C's qsort - * @return If no insertion happened, the found element; if an insertion or - * removal happened, then either key or NULL will be returned. - * Which one it is depends on the tree state and the implementation. You - * should make no assumptions that it's one or the other in the code. - */ -void *av_tree_insert(struct AVTreeNode **rootp, void *key, - int (*cmp)(const void *key, const void *b), - struct AVTreeNode **next); - -void av_tree_destroy(struct AVTreeNode *t); - -/** - * Apply enu(opaque, &elem) to all the elements in the tree in a given range. - * - * @param cmp a comparison function that returns < 0 for an element below the - * range, > 0 for an element above the range and == 0 for an - * element inside the range - * - * @note The cmp function should use the same ordering used to construct the - * tree. - */ -void av_tree_enumerate(struct AVTreeNode *t, void *opaque, - int (*cmp)(void *opaque, void *elem), - int (*enu)(void *opaque, void *elem)); - -/** - * @} - */ - -#endif /* AVUTIL_TREE_H */ diff --git a/prebuilts/arm/include/libavutil/twofish.h b/prebuilts/arm/include/libavutil/twofish.h deleted file mode 100644 index 813cfec..0000000 --- a/prebuilts/arm/include/libavutil/twofish.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * An implementation of the TwoFish algorithm - * Copyright (c) 2015 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TWOFISH_H -#define AVUTIL_TWOFISH_H - -#include - - -/** - * @file - * @brief Public header for libavutil TWOFISH algorithm - * @defgroup lavu_twofish TWOFISH - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_twofish_size; - -struct AVTWOFISH; - -/** - * Allocate an AVTWOFISH context - * To free the struct: av_free(ptr) - */ -struct AVTWOFISH *av_twofish_alloc(void); - -/** - * Initialize an AVTWOFISH context. - * - * @param ctx an AVTWOFISH context - * @param key a key of size ranging from 1 to 32 bytes used for encryption/decryption - * @param key_bits number of keybits: 128, 192, 256 If less than the required, padded with zeroes to nearest valid value; return value is 0 if key_bits is 128/192/256, -1 if less than 0, 1 otherwise - */ -int av_twofish_init(struct AVTWOFISH *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVTWOFISH context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 16 byte blocks - * @paran iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_twofish_crypt(struct AVTWOFISH *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt); - -/** - * @} - */ -#endif /* AVUTIL_TWOFISH_H */ diff --git a/prebuilts/arm/include/libavutil/tx.h b/prebuilts/arm/include/libavutil/tx.h deleted file mode 100644 index bfc0c7f..0000000 --- a/prebuilts/arm/include/libavutil/tx.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TX_H -#define AVUTIL_TX_H - -#include -#include - -typedef struct AVTXContext AVTXContext; - -typedef struct AVComplexFloat { - float re, im; -} AVComplexFloat; - -typedef struct AVComplexDouble { - double re, im; -} AVComplexDouble; - -typedef struct AVComplexInt32 { - int32_t re, im; -} AVComplexInt32; - -enum AVTXType { - /** - * Standard complex to complex FFT with sample data type AVComplexFloat. - * Output is not 1/len normalized. Scaling currently unsupported. - * The stride parameter is ignored. - */ - AV_TX_FLOAT_FFT = 0, - - /** - * Standard MDCT with sample data type of float and a scale type of - * float. Length is the frame size, not the window size (which is 2x frame) - * For forward transforms, the stride specifies the spacing between each - * sample in the output array in bytes. The input must be a flat array. - * For inverse transforms, the stride specifies the spacing between each - * sample in the input array in bytes. The output will be a flat array. - * Stride must be a non-zero multiple of sizeof(float). - * NOTE: the inverse transform is half-length, meaning the output will not - * contain redundant data. This is what most codecs work with. - */ - AV_TX_FLOAT_MDCT = 1, - - /** - * Same as AV_TX_FLOAT_FFT with a data type of AVComplexDouble. - */ - AV_TX_DOUBLE_FFT = 2, - - /** - * Same as AV_TX_FLOAT_MDCT with data and scale type of double. - * Stride must be a non-zero multiple of sizeof(double). - */ - AV_TX_DOUBLE_MDCT = 3, - - /** - * Same as AV_TX_FLOAT_FFT with a data type of AVComplexInt32. - */ - AV_TX_INT32_FFT = 4, - - /** - * Same as AV_TX_FLOAT_MDCT with data type of int32_t and scale type of float. - * Only scale values less than or equal to 1.0 are supported. - * Stride must be a non-zero multiple of sizeof(int32_t). - */ - AV_TX_INT32_MDCT = 5, -}; - -/** - * Function pointer to a function to perform the transform. - * - * @note Using a different context than the one allocated during av_tx_init() - * is not allowed. - * - * @param s the transform context - * @param out the output array - * @param in the input array - * @param stride the input or output stride in bytes - * - * The out and in arrays must be aligned to the maximum required by the CPU - * architecture. - * The stride must follow the constraints the transform type has specified. - */ -typedef void (*av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride); - -/** - * Flags for av_tx_init() - */ -enum AVTXFlags { - /** - * Performs an in-place transformation on the input. The output argument - * of av_tn_fn() MUST match the input. May be unsupported or slower for some - * transform types. - */ - AV_TX_INPLACE = 1ULL << 0, -}; - -/** - * Initialize a transform context with the given configuration - * (i)MDCTs with an odd length are currently not supported. - * - * @param ctx the context to allocate, will be NULL on error - * @param tx pointer to the transform function pointer to set - * @param type type the type of transform - * @param inv whether to do an inverse or a forward transform - * @param len the size of the transform in samples - * @param scale pointer to the value to scale the output if supported by type - * @param flags a bitmask of AVTXFlags or 0 - * - * @return 0 on success, negative error code on failure - */ -int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type, - int inv, int len, const void *scale, uint64_t flags); - -/** - * Frees a context and sets ctx to NULL, does nothing when ctx == NULL - */ -void av_tx_uninit(AVTXContext **ctx); - -#endif /* AVUTIL_TX_H */ diff --git a/prebuilts/arm/include/libavutil/version.h b/prebuilts/arm/include/libavutil/version.h deleted file mode 100644 index f888dbb..0000000 --- a/prebuilts/arm/include/libavutil/version.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * copyright (c) 2003 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu - * Libavutil version macros - */ - -#ifndef AVUTIL_VERSION_H -#define AVUTIL_VERSION_H - -#include "macros.h" - -/** - * @addtogroup version_utils - * - * Useful to check and match library version in order to maintain - * backward compatibility. - * - * The FFmpeg libraries follow a versioning sheme very similar to - * Semantic Versioning (http://semver.org/) - * The difference is that the component called PATCH is called MICRO in FFmpeg - * and its value is reset to 100 instead of 0 to keep it above or equal to 100. - * Also we do not increase MICRO for every bugfix or change in git master. - * - * Prior to FFmpeg 3.2 point releases did not change any lib version number to - * avoid aliassing different git master checkouts. - * Starting with FFmpeg 3.2, the released library versions will occupy - * a separate MAJOR.MINOR that is not used on the master development branch. - * That is if we branch a release of master 55.10.123 we will bump to 55.11.100 - * for the release and master will continue at 55.12.100 after it. Each new - * point release will then bump the MICRO improving the usefulness of the lib - * versions. - * - * @{ - */ - -#define AV_VERSION_INT(a, b, c) ((a)<<16 | (b)<<8 | (c)) -#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c -#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) - -/** - * Extract version components from the full ::AV_VERSION_INT int as returned - * by functions like ::avformat_version() and ::avcodec_version() - */ -#define AV_VERSION_MAJOR(a) ((a) >> 16) -#define AV_VERSION_MINOR(a) (((a) & 0x00FF00) >> 8) -#define AV_VERSION_MICRO(a) ((a) & 0xFF) - -/** - * @} - */ - -/** - * @defgroup lavu_ver Version and Build diagnostics - * - * Macros and function useful to check at compiletime and at runtime - * which version of libavutil is in use. - * - * @{ - */ - -#define LIBAVUTIL_VERSION_MAJOR 56 -#define LIBAVUTIL_VERSION_MINOR 70 -#define LIBAVUTIL_VERSION_MICRO 100 - -#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT - -#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) - -/** - * @defgroup lavu_depr_guards Deprecation Guards - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - * - * @{ - */ - -#ifndef FF_API_VAAPI -#define FF_API_VAAPI (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_FRAME_QP -#define FF_API_FRAME_QP (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_PLUS1_MINUS1 -#define FF_API_PLUS1_MINUS1 (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_ERROR_FRAME -#define FF_API_ERROR_FRAME (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_PKT_PTS -#define FF_API_PKT_PTS (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_CRYPTO_SIZE_T -#define FF_API_CRYPTO_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_FRAME_GET_SET -#define FF_API_FRAME_GET_SET (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_PSEUDOPAL -#define FF_API_PSEUDOPAL (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_CHILD_CLASS_NEXT -#define FF_API_CHILD_CLASS_NEXT (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_BUFFER_SIZE_T -#define FF_API_BUFFER_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_D2STR -#define FF_API_D2STR (LIBAVUTIL_VERSION_MAJOR < 58) -#endif -#ifndef FF_API_DECLARE_ALIGNED -#define FF_API_DECLARE_ALIGNED (LIBAVUTIL_VERSION_MAJOR < 58) -#endif - -/** - * @} - * @} - */ - -#endif /* AVUTIL_VERSION_H */ diff --git a/prebuilts/arm/include/libavutil/video_enc_params.h b/prebuilts/arm/include/libavutil/video_enc_params.h deleted file mode 100644 index fc0c3bc..0000000 --- a/prebuilts/arm/include/libavutil/video_enc_params.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_VIDEO_ENC_PARAMS_H -#define AVUTIL_VIDEO_ENC_PARAMS_H - -#include -#include - -#include "libavutil/avassert.h" -#include "libavutil/frame.h" - -enum AVVideoEncParamsType { - AV_VIDEO_ENC_PARAMS_NONE = -1, - /** - * VP9 stores: - * - per-frame base (luma AC) quantizer index, exported as AVVideoEncParams.qp - * - deltas for luma DC, chroma AC and chroma DC, exported in the - * corresponding entries in AVVideoEncParams.delta_qp - * - per-segment delta, exported as for each block as AVVideoBlockParams.delta_qp - * - * To compute the resulting quantizer index for a block: - * - for luma AC, add the base qp and the per-block delta_qp, saturating to - * unsigned 8-bit. - * - for luma DC and chroma AC/DC, add the corresponding - * AVVideoBlockParams.delta_qp to the luma AC index, again saturating to - * unsigned 8-bit. - */ - AV_VIDEO_ENC_PARAMS_VP9, - - /** - * H.264 stores: - * - in PPS (per-picture): - * * initial QP_Y (luma) value, exported as AVVideoEncParams.qp - * * delta(s) for chroma QP values (same for both, or each separately), - * exported as in the corresponding entries in AVVideoEncParams.delta_qp - * - per-slice QP delta, not exported directly, added to the per-MB value - * - per-MB delta; not exported directly; the final per-MB quantizer - * parameter - QP_Y - minus the value in AVVideoEncParams.qp is exported - * as AVVideoBlockParams.qp_delta. - */ - AV_VIDEO_ENC_PARAMS_H264, - - /* - * MPEG-2-compatible quantizer. - * - * Summing the frame-level qp with the per-block delta_qp gives the - * resulting quantizer for the block. - */ - AV_VIDEO_ENC_PARAMS_MPEG2, -}; - -/** - * Video encoding parameters for a given frame. This struct is allocated along - * with an optional array of per-block AVVideoBlockParams descriptors. - * Must be allocated with av_video_enc_params_alloc(). - */ -typedef struct AVVideoEncParams { - /** - * Number of blocks in the array. - * - * May be 0, in which case no per-block information is present. In this case - * the values of blocks_offset / block_size are unspecified and should not - * be accessed. - */ - unsigned int nb_blocks; - /** - * Offset in bytes from the beginning of this structure at which the array - * of blocks starts. - */ - size_t blocks_offset; - /* - * Size of each block in bytes. May not match sizeof(AVVideoBlockParams). - */ - size_t block_size; - - /** - * Type of the parameters (the codec they are used with). - */ - enum AVVideoEncParamsType type; - - /** - * Base quantisation parameter for the frame. The final quantiser for a - * given block in a given plane is obtained from this value, possibly - * combined with {@code delta_qp} and the per-block delta in a manner - * documented for each type. - */ - int32_t qp; - - /** - * Quantisation parameter offset from the base (per-frame) qp for a given - * plane (first index) and AC/DC coefficients (second index). - */ - int32_t delta_qp[4][2]; -} AVVideoEncParams; - -/** - * Data structure for storing block-level encoding information. - * It is allocated as a part of AVVideoEncParams and should be retrieved with - * av_video_enc_params_block(). - * - * sizeof(AVVideoBlockParams) is not a part of the ABI and new fields may be - * added to it. - */ -typedef struct AVVideoBlockParams { - /** - * Distance in luma pixels from the top-left corner of the visible frame - * to the top-left corner of the block. - * Can be negative if top/right padding is present on the coded frame. - */ - int src_x, src_y; - /** - * Width and height of the block in luma pixels. - */ - int w, h; - - /** - * Difference between this block's final quantization parameter and the - * corresponding per-frame value. - */ - int32_t delta_qp; -} AVVideoBlockParams; - -/* - * Get the block at the specified {@code idx}. Must be between 0 and nb_blocks. - */ -static av_always_inline AVVideoBlockParams* -av_video_enc_params_block(AVVideoEncParams *par, unsigned int idx) -{ - av_assert0(idx < par->nb_blocks); - return (AVVideoBlockParams *)((uint8_t *)par + par->blocks_offset + - idx * par->block_size); -} - -/** - * Allocates memory for AVVideoEncParams of the given type, plus an array of - * {@code nb_blocks} AVVideoBlockParams and initializes the variables. Can be - * freed with a normal av_free() call. - * - * @param out_size if non-NULL, the size in bytes of the resulting data array is - * written here. - */ -AVVideoEncParams *av_video_enc_params_alloc(enum AVVideoEncParamsType type, - unsigned int nb_blocks, size_t *out_size); - -/** - * Allocates memory for AVEncodeInfoFrame plus an array of - * {@code nb_blocks} AVEncodeInfoBlock in the given AVFrame {@code frame} - * as AVFrameSideData of type AV_FRAME_DATA_VIDEO_ENC_PARAMS - * and initializes the variables. - */ -AVVideoEncParams* -av_video_enc_params_create_side_data(AVFrame *frame, enum AVVideoEncParamsType type, - unsigned int nb_blocks); - -#endif /* AVUTIL_VIDEO_ENC_PARAMS_H */ diff --git a/prebuilts/arm/include/libavutil/xtea.h b/prebuilts/arm/include/libavutil/xtea.h deleted file mode 100644 index 735427c..0000000 --- a/prebuilts/arm/include/libavutil/xtea.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * A 32-bit implementation of the XTEA algorithm - * Copyright (c) 2012 Samuel Pitoiset - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_XTEA_H -#define AVUTIL_XTEA_H - -#include - -/** - * @file - * @brief Public header for libavutil XTEA algorithm - * @defgroup lavu_xtea XTEA - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVXTEA { - uint32_t key[16]; -} AVXTEA; - -/** - * Allocate an AVXTEA context. - */ -AVXTEA *av_xtea_alloc(void); - -/** - * Initialize an AVXTEA context. - * - * @param ctx an AVXTEA context - * @param key a key of 16 bytes used for encryption/decryption, - * interpreted as big endian 32 bit numbers - */ -void av_xtea_init(struct AVXTEA *ctx, const uint8_t key[16]); - -/** - * Initialize an AVXTEA context. - * - * @param ctx an AVXTEA context - * @param key a key of 16 bytes used for encryption/decryption, - * interpreted as little endian 32 bit numbers - */ -void av_xtea_le_init(struct AVXTEA *ctx, const uint8_t key[16]); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, - * in big endian format. - * - * @param ctx an AVXTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_xtea_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, - * in little endian format. - * - * @param ctx an AVXTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_xtea_le_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_XTEA_H */ diff --git a/prebuilts/arm/include/libdrm/amdgpu.h b/prebuilts/arm/include/libdrm/amdgpu.h deleted file mode 100644 index 5ef2524..0000000 --- a/prebuilts/arm/include/libdrm/amdgpu.h +++ /dev/null @@ -1,1876 +0,0 @@ -/* - * Copyright 2014 Advanced Micro Devices, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - */ - -/** - * \file amdgpu.h - * - * Declare public libdrm_amdgpu API - * - * This file define API exposed by libdrm_amdgpu library. - * User wanted to use libdrm_amdgpu functionality must include - * this file. - * - */ -#ifndef _AMDGPU_H_ -#define _AMDGPU_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct drm_amdgpu_info_hw_ip; -struct drm_amdgpu_bo_list_entry; - -/*--------------------------------------------------------------------------*/ -/* --------------------------- Defines ------------------------------------ */ -/*--------------------------------------------------------------------------*/ - -/** - * Define max. number of Command Buffers (IB) which could be sent to the single - * hardware IP to accommodate CE/DE requirements - * - * \sa amdgpu_cs_ib_info -*/ -#define AMDGPU_CS_MAX_IBS_PER_SUBMIT 4 - -/** - * Special timeout value meaning that the timeout is infinite. - */ -#define AMDGPU_TIMEOUT_INFINITE 0xffffffffffffffffull - -/** - * Used in amdgpu_cs_query_fence_status(), meaning that the given timeout - * is absolute. - */ -#define AMDGPU_QUERY_FENCE_TIMEOUT_IS_ABSOLUTE (1 << 0) - -/*--------------------------------------------------------------------------*/ -/* ----------------------------- Enums ------------------------------------ */ -/*--------------------------------------------------------------------------*/ - -/** - * Enum describing possible handle types - * - * \sa amdgpu_bo_import, amdgpu_bo_export - * -*/ -enum amdgpu_bo_handle_type { - /** GEM flink name (needs DRM authentication, used by DRI2) */ - amdgpu_bo_handle_type_gem_flink_name = 0, - - /** KMS handle which is used by all driver ioctls */ - amdgpu_bo_handle_type_kms = 1, - - /** DMA-buf fd handle */ - amdgpu_bo_handle_type_dma_buf_fd = 2, - - /** Deprecated in favour of and same behaviour as - * amdgpu_bo_handle_type_kms, use that instead of this - */ - amdgpu_bo_handle_type_kms_noimport = 3, -}; - -/** Define known types of GPU VM VA ranges */ -enum amdgpu_gpu_va_range -{ - /** Allocate from "normal"/general range */ - amdgpu_gpu_va_range_general = 0 -}; - -enum amdgpu_sw_info { - amdgpu_sw_info_address32_hi = 0, -}; - -/*--------------------------------------------------------------------------*/ -/* -------------------------- Datatypes ----------------------------------- */ -/*--------------------------------------------------------------------------*/ - -/** - * Define opaque pointer to context associated with fd. - * This context will be returned as the result of - * "initialize" function and should be pass as the first - * parameter to any API call - */ -typedef struct amdgpu_device *amdgpu_device_handle; - -/** - * Define GPU Context type as pointer to opaque structure - * Example of GPU Context is the "rendering" context associated - * with OpenGL context (glCreateContext) - */ -typedef struct amdgpu_context *amdgpu_context_handle; - -/** - * Define handle for amdgpu resources: buffer, GDS, etc. - */ -typedef struct amdgpu_bo *amdgpu_bo_handle; - -/** - * Define handle for list of BOs - */ -typedef struct amdgpu_bo_list *amdgpu_bo_list_handle; - -/** - * Define handle to be used to work with VA allocated ranges - */ -typedef struct amdgpu_va *amdgpu_va_handle; - -/** - * Define handle for semaphore - */ -typedef struct amdgpu_semaphore *amdgpu_semaphore_handle; - -/*--------------------------------------------------------------------------*/ -/* -------------------------- Structures ---------------------------------- */ -/*--------------------------------------------------------------------------*/ - -/** - * Structure describing memory allocation request - * - * \sa amdgpu_bo_alloc() - * -*/ -struct amdgpu_bo_alloc_request { - /** Allocation request. It must be aligned correctly. */ - uint64_t alloc_size; - - /** - * It may be required to have some specific alignment requirements - * for physical back-up storage (e.g. for displayable surface). - * If 0 there is no special alignment requirement - */ - uint64_t phys_alignment; - - /** - * UMD should specify where to allocate memory and how it - * will be accessed by the CPU. - */ - uint32_t preferred_heap; - - /** Additional flags passed on allocation */ - uint64_t flags; -}; - -/** - * Special UMD specific information associated with buffer. - * - * It may be need to pass some buffer charactersitic as part - * of buffer sharing. Such information are defined UMD and - * opaque for libdrm_amdgpu as well for kernel driver. - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_query_info, - * amdgpu_bo_import(), amdgpu_bo_export - * -*/ -struct amdgpu_bo_metadata { - /** Special flag associated with surface */ - uint64_t flags; - - /** - * ASIC-specific tiling information (also used by DCE). - * The encoding is defined by the AMDGPU_TILING_* definitions. - */ - uint64_t tiling_info; - - /** Size of metadata associated with the buffer, in bytes. */ - uint32_t size_metadata; - - /** UMD specific metadata. Opaque for kernel */ - uint32_t umd_metadata[64]; -}; - -/** - * Structure describing allocated buffer. Client may need - * to query such information as part of 'sharing' buffers mechanism - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_query_info(), - * amdgpu_bo_import(), amdgpu_bo_export() -*/ -struct amdgpu_bo_info { - /** Allocated memory size */ - uint64_t alloc_size; - - /** - * It may be required to have some specific alignment requirements - * for physical back-up storage. - */ - uint64_t phys_alignment; - - /** Heap where to allocate memory. */ - uint32_t preferred_heap; - - /** Additional allocation flags. */ - uint64_t alloc_flags; - - /** Metadata associated with buffer if any. */ - struct amdgpu_bo_metadata metadata; -}; - -/** - * Structure with information about "imported" buffer - * - * \sa amdgpu_bo_import() - * - */ -struct amdgpu_bo_import_result { - /** Handle of memory/buffer to use */ - amdgpu_bo_handle buf_handle; - - /** Buffer size */ - uint64_t alloc_size; -}; - -/** - * - * Structure to describe GDS partitioning information. - * \note OA and GWS resources are asscoiated with GDS partition - * - * \sa amdgpu_gpu_resource_query_gds_info - * -*/ -struct amdgpu_gds_resource_info { - uint32_t gds_gfx_partition_size; - uint32_t compute_partition_size; - uint32_t gds_total_size; - uint32_t gws_per_gfx_partition; - uint32_t gws_per_compute_partition; - uint32_t oa_per_gfx_partition; - uint32_t oa_per_compute_partition; -}; - -/** - * Structure describing CS fence - * - * \sa amdgpu_cs_query_fence_status(), amdgpu_cs_request, amdgpu_cs_submit() - * -*/ -struct amdgpu_cs_fence { - - /** In which context IB was sent to execution */ - amdgpu_context_handle context; - - /** To which HW IP type the fence belongs */ - uint32_t ip_type; - - /** IP instance index if there are several IPs of the same type. */ - uint32_t ip_instance; - - /** Ring index of the HW IP */ - uint32_t ring; - - /** Specify fence for which we need to check submission status.*/ - uint64_t fence; -}; - -/** - * Structure describing IB - * - * \sa amdgpu_cs_request, amdgpu_cs_submit() - * -*/ -struct amdgpu_cs_ib_info { - /** Special flags */ - uint64_t flags; - - /** Virtual MC address of the command buffer */ - uint64_t ib_mc_address; - - /** - * Size of Command Buffer to be submitted. - * - The size is in units of dwords (4 bytes). - * - Could be 0 - */ - uint32_t size; -}; - -/** - * Structure describing fence information - * - * \sa amdgpu_cs_request, amdgpu_cs_query_fence, - * amdgpu_cs_submit(), amdgpu_cs_query_fence_status() -*/ -struct amdgpu_cs_fence_info { - /** buffer object for the fence */ - amdgpu_bo_handle handle; - - /** fence offset in the unit of sizeof(uint64_t) */ - uint64_t offset; -}; - -/** - * Structure describing submission request - * - * \note We could have several IBs as packet. e.g. CE, CE, DE case for gfx - * - * \sa amdgpu_cs_submit() -*/ -struct amdgpu_cs_request { - /** Specify flags with additional information */ - uint64_t flags; - - /** Specify HW IP block type to which to send the IB. */ - unsigned ip_type; - - /** IP instance index if there are several IPs of the same type. */ - unsigned ip_instance; - - /** - * Specify ring index of the IP. We could have several rings - * in the same IP. E.g. 0 for SDMA0 and 1 for SDMA1. - */ - uint32_t ring; - - /** - * List handle with resources used by this request. - */ - amdgpu_bo_list_handle resources; - - /** - * Number of dependencies this Command submission needs to - * wait for before starting execution. - */ - uint32_t number_of_dependencies; - - /** - * Array of dependencies which need to be met before - * execution can start. - */ - struct amdgpu_cs_fence *dependencies; - - /** Number of IBs to submit in the field ibs. */ - uint32_t number_of_ibs; - - /** - * IBs to submit. Those IBs will be submit together as single entity - */ - struct amdgpu_cs_ib_info *ibs; - - /** - * The returned sequence number for the command submission - */ - uint64_t seq_no; - - /** - * The fence information - */ - struct amdgpu_cs_fence_info fence_info; -}; - -/** - * Structure which provide information about GPU VM MC Address space - * alignments requirements - * - * \sa amdgpu_query_buffer_size_alignment - */ -struct amdgpu_buffer_size_alignments { - /** Size alignment requirement for allocation in - * local memory */ - uint64_t size_local; - - /** - * Size alignment requirement for allocation in remote memory - */ - uint64_t size_remote; -}; - -/** - * Structure which provide information about heap - * - * \sa amdgpu_query_heap_info() - * - */ -struct amdgpu_heap_info { - /** Theoretical max. available memory in the given heap */ - uint64_t heap_size; - - /** - * Number of bytes allocated in the heap. This includes all processes - * and private allocations in the kernel. It changes when new buffers - * are allocated, freed, and moved. It cannot be larger than - * heap_size. - */ - uint64_t heap_usage; - - /** - * Theoretical possible max. size of buffer which - * could be allocated in the given heap - */ - uint64_t max_allocation; -}; - -/** - * Describe GPU h/w info needed for UMD correct initialization - * - * \sa amdgpu_query_gpu_info() -*/ -struct amdgpu_gpu_info { - /** Asic id */ - uint32_t asic_id; - /** Chip revision */ - uint32_t chip_rev; - /** Chip external revision */ - uint32_t chip_external_rev; - /** Family ID */ - uint32_t family_id; - /** Special flags */ - uint64_t ids_flags; - /** max engine clock*/ - uint64_t max_engine_clk; - /** max memory clock */ - uint64_t max_memory_clk; - /** number of shader engines */ - uint32_t num_shader_engines; - /** number of shader arrays per engine */ - uint32_t num_shader_arrays_per_engine; - /** Number of available good shader pipes */ - uint32_t avail_quad_shader_pipes; - /** Max. number of shader pipes.(including good and bad pipes */ - uint32_t max_quad_shader_pipes; - /** Number of parameter cache entries per shader quad pipe */ - uint32_t cache_entries_per_quad_pipe; - /** Number of available graphics context */ - uint32_t num_hw_gfx_contexts; - /** Number of render backend pipes */ - uint32_t rb_pipes; - /** Enabled render backend pipe mask */ - uint32_t enabled_rb_pipes_mask; - /** Frequency of GPU Counter */ - uint32_t gpu_counter_freq; - /** CC_RB_BACKEND_DISABLE.BACKEND_DISABLE per SE */ - uint32_t backend_disable[4]; - /** Value of MC_ARB_RAMCFG register*/ - uint32_t mc_arb_ramcfg; - /** Value of GB_ADDR_CONFIG */ - uint32_t gb_addr_cfg; - /** Values of the GB_TILE_MODE0..31 registers */ - uint32_t gb_tile_mode[32]; - /** Values of GB_MACROTILE_MODE0..15 registers */ - uint32_t gb_macro_tile_mode[16]; - /** Value of PA_SC_RASTER_CONFIG register per SE */ - uint32_t pa_sc_raster_cfg[4]; - /** Value of PA_SC_RASTER_CONFIG_1 register per SE */ - uint32_t pa_sc_raster_cfg1[4]; - /* CU info */ - uint32_t cu_active_number; - uint32_t cu_ao_mask; - uint32_t cu_bitmap[4][4]; - /* video memory type info*/ - uint32_t vram_type; - /* video memory bit width*/ - uint32_t vram_bit_width; - /** constant engine ram size*/ - uint32_t ce_ram_size; - /* vce harvesting instance */ - uint32_t vce_harvest_config; - /* PCI revision ID */ - uint32_t pci_rev_id; -}; - - -/*--------------------------------------------------------------------------*/ -/*------------------------- Functions --------------------------------------*/ -/*--------------------------------------------------------------------------*/ - -/* - * Initialization / Cleanup - * -*/ - -/** - * - * \param fd - \c [in] File descriptor for AMD GPU device - * received previously as the result of - * e.g. drmOpen() call. - * For legacy fd type, the DRI2/DRI3 - * authentication should be done before - * calling this function. - * \param major_version - \c [out] Major version of library. It is assumed - * that adding new functionality will cause - * increase in major version - * \param minor_version - \c [out] Minor version of library - * \param device_handle - \c [out] Pointer to opaque context which should - * be passed as the first parameter on each - * API call - * - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * - * \sa amdgpu_device_deinitialize() -*/ -int amdgpu_device_initialize(int fd, - uint32_t *major_version, - uint32_t *minor_version, - amdgpu_device_handle *device_handle); - -/** - * - * When access to such library does not needed any more the special - * function must be call giving opportunity to clean up any - * resources if needed. - * - * \param device_handle - \c [in] Context associated with file - * descriptor for AMD GPU device - * received previously as the - * result e.g. of drmOpen() call. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_device_initialize() - * -*/ -int amdgpu_device_deinitialize(amdgpu_device_handle device_handle); - -/** - * - * /param device_handle - \c [in] Device handle. - * See #amdgpu_device_initialize() - * - * \return Returns the drm fd used for operations on this - * device. This is still owned by the library and hence - * should not be closed. Guaranteed to be valid until - * #amdgpu_device_deinitialize gets called. - * -*/ -int amdgpu_device_get_fd(amdgpu_device_handle device_handle); - -/* - * Memory Management - * -*/ - -/** - * Allocate memory to be used by UMD for GPU related operations - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param alloc_buffer - \c [in] Pointer to the structure describing an - * allocation request - * \param buf_handle - \c [out] Allocated buffer handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_free() -*/ -int amdgpu_bo_alloc(amdgpu_device_handle dev, - struct amdgpu_bo_alloc_request *alloc_buffer, - amdgpu_bo_handle *buf_handle); - -/** - * Associate opaque data with buffer to be queried by another UMD - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle - * \param info - \c [in] Metadata to associated with buffer - * - * \return 0 on success\n - * <0 - Negative POSIX Error code -*/ -int amdgpu_bo_set_metadata(amdgpu_bo_handle buf_handle, - struct amdgpu_bo_metadata *info); - -/** - * Query buffer information including metadata previusly associated with - * buffer. - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle - * \param info - \c [out] Structure describing buffer - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_alloc() -*/ -int amdgpu_bo_query_info(amdgpu_bo_handle buf_handle, - struct amdgpu_bo_info *info); - -/** - * Allow others to get access to buffer - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle - * \param type - \c [in] Type of handle requested - * \param shared_handle - \c [out] Special "shared" handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_import() - * -*/ -int amdgpu_bo_export(amdgpu_bo_handle buf_handle, - enum amdgpu_bo_handle_type type, - uint32_t *shared_handle); - -/** - * Request access to "shared" buffer - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param type - \c [in] Type of handle requested - * \param shared_handle - \c [in] Shared handle received as result "import" - * operation - * \param output - \c [out] Pointer to structure with information - * about imported buffer - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note Buffer must be "imported" only using new "fd" (different from - * one used by "exporter"). - * - * \sa amdgpu_bo_export() - * -*/ -int amdgpu_bo_import(amdgpu_device_handle dev, - enum amdgpu_bo_handle_type type, - uint32_t shared_handle, - struct amdgpu_bo_import_result *output); - -/** - * Request GPU access to user allocated memory e.g. via "malloc" - * - * \param dev - [in] Device handle. See #amdgpu_device_initialize() - * \param cpu - [in] CPU address of user allocated memory which we - * want to map to GPU address space (make GPU accessible) - * (This address must be correctly aligned). - * \param size - [in] Size of allocation (must be correctly aligned) - * \param buf_handle - [out] Buffer handle for the userptr memory - * resource on submission and be used in other operations. - * - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note - * This call doesn't guarantee that such memory will be persistently - * "locked" / make non-pageable. The purpose of this call is to provide - * opportunity for GPU get access to this resource during submission. - * - * The maximum amount of memory which could be mapped in this call depends - * if overcommit is disabled or not. If overcommit is disabled than the max. - * amount of memory to be pinned will be limited by left "free" size in total - * amount of memory which could be locked simultaneously ("GART" size). - * - * Supported (theoretical) max. size of mapping is restricted only by - * "GART" size. - * - * It is responsibility of caller to correctly specify access rights - * on VA assignment. -*/ -int amdgpu_create_bo_from_user_mem(amdgpu_device_handle dev, - void *cpu, uint64_t size, - amdgpu_bo_handle *buf_handle); - -/** - * Validate if the user memory comes from BO - * - * \param dev - [in] Device handle. See #amdgpu_device_initialize() - * \param cpu - [in] CPU address of user allocated memory which we - * want to map to GPU address space (make GPU accessible) - * (This address must be correctly aligned). - * \param size - [in] Size of allocation (must be correctly aligned) - * \param buf_handle - [out] Buffer handle for the userptr memory - * if the user memory is not from BO, the buf_handle will be NULL. - * \param offset_in_bo - [out] offset in this BO for this user memory - * - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_find_bo_by_cpu_mapping(amdgpu_device_handle dev, - void *cpu, - uint64_t size, - amdgpu_bo_handle *buf_handle, - uint64_t *offset_in_bo); - -/** - * Free previously allocated memory - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle to free - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note In the case of memory shared between different applications all - * resources will be “physically” freed only all such applications - * will be terminated - * \note If is UMD responsibility to ‘free’ buffer only when there is no - * more GPU access - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_alloc() - * -*/ -int amdgpu_bo_free(amdgpu_bo_handle buf_handle); - -/** - * Increase the reference count of a buffer object - * - * \param bo - \c [in] Buffer object handle to increase the reference count - * - * \sa amdgpu_bo_alloc(), amdgpu_bo_free() - * -*/ -void amdgpu_bo_inc_ref(amdgpu_bo_handle bo); - -/** - * Request CPU access to GPU accessible memory - * - * \param buf_handle - \c [in] Buffer handle - * \param cpu - \c [out] CPU address to be used for access - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_cpu_unmap() - * -*/ -int amdgpu_bo_cpu_map(amdgpu_bo_handle buf_handle, void **cpu); - -/** - * Release CPU access to GPU memory - * - * \param buf_handle - \c [in] Buffer handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_cpu_map() - * -*/ -int amdgpu_bo_cpu_unmap(amdgpu_bo_handle buf_handle); - -/** - * Wait until a buffer is not used by the device. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle. - * \param timeout_ns - Timeout in nanoseconds. - * \param buffer_busy - 0 if buffer is idle, all GPU access was completed - * and no GPU access is scheduled. - * 1 GPU access is in fly or scheduled - * - * \return 0 - on success - * <0 - Negative POSIX Error code - */ -int amdgpu_bo_wait_for_idle(amdgpu_bo_handle buf_handle, - uint64_t timeout_ns, - bool *buffer_busy); - -/** - * Creates a BO list handle for command submission. - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param number_of_buffers - \c [in] Number of BOs in the list - * \param buffers - \c [in] List of BO handles - * \param result - \c [out] Created BO list handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_destroy_raw(), amdgpu_cs_submit_raw2() -*/ -int amdgpu_bo_list_create_raw(amdgpu_device_handle dev, - uint32_t number_of_buffers, - struct drm_amdgpu_bo_list_entry *buffers, - uint32_t *result); - -/** - * Destroys a BO list handle. - * - * \param bo_list - \c [in] BO list handle. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_create_raw(), amdgpu_cs_submit_raw2() -*/ -int amdgpu_bo_list_destroy_raw(amdgpu_device_handle dev, uint32_t bo_list); - -/** - * Creates a BO list handle for command submission. - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param number_of_resources - \c [in] Number of BOs in the list - * \param resources - \c [in] List of BO handles - * \param resource_prios - \c [in] Optional priority for each handle - * \param result - \c [out] Created BO list handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_destroy() -*/ -int amdgpu_bo_list_create(amdgpu_device_handle dev, - uint32_t number_of_resources, - amdgpu_bo_handle *resources, - uint8_t *resource_prios, - amdgpu_bo_list_handle *result); - -/** - * Destroys a BO list handle. - * - * \param handle - \c [in] BO list handle. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_create() -*/ -int amdgpu_bo_list_destroy(amdgpu_bo_list_handle handle); - -/** - * Update resources for existing BO list - * - * \param handle - \c [in] BO list handle - * \param number_of_resources - \c [in] Number of BOs in the list - * \param resources - \c [in] List of BO handles - * \param resource_prios - \c [in] Optional priority for each handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_update() -*/ -int amdgpu_bo_list_update(amdgpu_bo_list_handle handle, - uint32_t number_of_resources, - amdgpu_bo_handle *resources, - uint8_t *resource_prios); - -/* - * GPU Execution context - * -*/ - -/** - * Create GPU execution Context - * - * For the purpose of GPU Scheduler and GPU Robustness extensions it is - * necessary to have information/identify rendering/compute contexts. - * It also may be needed to associate some specific requirements with such - * contexts. Kernel driver will guarantee that submission from the same - * context will always be executed in order (first come, first serve). - * - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param priority - \c [in] Context creation flags. See AMDGPU_CTX_PRIORITY_* - * \param context - \c [out] GPU Context handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_free() - * -*/ -int amdgpu_cs_ctx_create2(amdgpu_device_handle dev, - uint32_t priority, - amdgpu_context_handle *context); -/** - * Create GPU execution Context - * - * Refer to amdgpu_cs_ctx_create2 for full documentation. This call - * is missing the priority parameter. - * - * \sa amdgpu_cs_ctx_create2() - * -*/ -int amdgpu_cs_ctx_create(amdgpu_device_handle dev, - amdgpu_context_handle *context); - -/** - * - * Destroy GPU execution context when not needed any more - * - * \param context - \c [in] GPU Context handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_create() - * -*/ -int amdgpu_cs_ctx_free(amdgpu_context_handle context); - -/** - * Override the submission priority for the given context using a master fd. - * - * \param dev - \c [in] device handle - * \param context - \c [in] context handle for context id - * \param master_fd - \c [in] The master fd to authorize the override. - * \param priority - \c [in] The priority to assign to the context. - * - * \return 0 on success or a a negative Posix error code on failure. - */ -int amdgpu_cs_ctx_override_priority(amdgpu_device_handle dev, - amdgpu_context_handle context, - int master_fd, - unsigned priority); - -/** - * Set or query the stable power state for GPU profiling. - * - * \param dev - \c [in] device handle - * \param op - \c [in] AMDGPU_CTX_OP_{GET,SET}_STABLE_PSTATE - * \param flags - \c [in] AMDGPU_CTX_STABLE_PSTATE_* - * \param out_flags - \c [out] output current stable pstate - * - * \return 0 on success otherwise POSIX Error code. - */ -int amdgpu_cs_ctx_stable_pstate(amdgpu_context_handle context, - uint32_t op, - uint32_t flags, - uint32_t *out_flags); - -/** - * Query reset state for the specific GPU Context - * - * \param context - \c [in] GPU Context handle - * \param state - \c [out] One of AMDGPU_CTX_*_RESET - * \param hangs - \c [out] Number of hangs caused by the context. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_create() - * -*/ -int amdgpu_cs_query_reset_state(amdgpu_context_handle context, - uint32_t *state, uint32_t *hangs); - -/** - * Query reset state for the specific GPU Context. - * - * \param context - \c [in] GPU Context handle - * \param flags - \c [out] A combination of AMDGPU_CTX_QUERY2_FLAGS_* - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_create() - * -*/ -int amdgpu_cs_query_reset_state2(amdgpu_context_handle context, - uint64_t *flags); - -/* - * Command Buffers Management - * -*/ - -/** - * Send request to submit command buffers to hardware. - * - * Kernel driver could use GPU Scheduler to make decision when physically - * sent this request to the hardware. Accordingly this request could be put - * in queue and sent for execution later. The only guarantee is that request - * from the same GPU context to the same ip:ip_instance:ring will be executed in - * order. - * - * The caller can specify the user fence buffer/location with the fence_info in the - * cs_request.The sequence number is returned via the 'seq_no' parameter - * in ibs_request structure. - * - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param context - \c [in] GPU Context - * \param flags - \c [in] Global submission flags - * \param ibs_request - \c [in/out] Pointer to submission requests. - * We could submit to the several - * engines/rings simulteniously as - * 'atomic' operation - * \param number_of_requests - \c [in] Number of submission requests - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note It is required to pass correct resource list with buffer handles - * which will be accessible by command buffers from submission - * This will allow kernel driver to correctly implement "paging". - * Failure to do so will have unpredictable results. - * - * \sa amdgpu_command_buffer_alloc(), amdgpu_command_buffer_free(), - * amdgpu_cs_query_fence_status() - * -*/ -int amdgpu_cs_submit(amdgpu_context_handle context, - uint64_t flags, - struct amdgpu_cs_request *ibs_request, - uint32_t number_of_requests); - -/** - * Query status of Command Buffer Submission - * - * \param fence - \c [in] Structure describing fence to query - * \param timeout_ns - \c [in] Timeout value to wait - * \param flags - \c [in] Flags for the query - * \param expired - \c [out] If fence expired or not.\n - * 0 – if fence is not expired\n - * !0 - otherwise - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note If UMD wants only to check operation status and returned immediately - * then timeout value as 0 must be passed. In this case success will be - * returned in the case if submission was completed or timeout error - * code. - * - * \sa amdgpu_cs_submit() -*/ -int amdgpu_cs_query_fence_status(struct amdgpu_cs_fence *fence, - uint64_t timeout_ns, - uint64_t flags, - uint32_t *expired); - -/** - * Wait for multiple fences - * - * \param fences - \c [in] The fence array to wait - * \param fence_count - \c [in] The fence count - * \param wait_all - \c [in] If true, wait all fences to be signaled, - * otherwise, wait at least one fence - * \param timeout_ns - \c [in] The timeout to wait, in nanoseconds - * \param status - \c [out] '1' for signaled, '0' for timeout - * \param first - \c [out] the index of the first signaled fence from @fences - * - * \return 0 on success - * <0 - Negative POSIX Error code - * - * \note Currently it supports only one amdgpu_device. All fences come from - * the same amdgpu_device with the same fd. -*/ -int amdgpu_cs_wait_fences(struct amdgpu_cs_fence *fences, - uint32_t fence_count, - bool wait_all, - uint64_t timeout_ns, - uint32_t *status, uint32_t *first); - -/* - * Query / Info API - * -*/ - -/** - * Query allocation size alignments - * - * UMD should query information about GPU VM MC size alignments requirements - * to be able correctly choose required allocation size and implement - * internal optimization if needed. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param info - \c [out] Pointer to structure to get size alignment - * requirements - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_buffer_size_alignment(amdgpu_device_handle dev, - struct amdgpu_buffer_size_alignments - *info); - -/** - * Query firmware versions - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param fw_type - \c [in] AMDGPU_INFO_FW_* - * \param ip_instance - \c [in] Index of the IP block of the same type. - * \param index - \c [in] Index of the engine. (for SDMA and MEC) - * \param version - \c [out] Pointer to to the "version" return value - * \param feature - \c [out] Pointer to to the "feature" return value - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_firmware_version(amdgpu_device_handle dev, unsigned fw_type, - unsigned ip_instance, unsigned index, - uint32_t *version, uint32_t *feature); - -/** - * Query the number of HW IP instances of a certain type. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param count - \c [out] Pointer to structure to get information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code -*/ -int amdgpu_query_hw_ip_count(amdgpu_device_handle dev, unsigned type, - uint32_t *count); - -/** - * Query engine information - * - * This query allows UMD to query information different engines and their - * capabilities. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param ip_instance - \c [in] Index of the IP block of the same type. - * \param info - \c [out] Pointer to structure to get information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code -*/ -int amdgpu_query_hw_ip_info(amdgpu_device_handle dev, unsigned type, - unsigned ip_instance, - struct drm_amdgpu_info_hw_ip *info); - -/** - * Query heap information - * - * This query allows UMD to query potentially available memory resources and - * adjust their logic if necessary. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param heap - \c [in] Heap type - * \param info - \c [in] Pointer to structure to get needed information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_heap_info(amdgpu_device_handle dev, uint32_t heap, - uint32_t flags, struct amdgpu_heap_info *info); - -/** - * Get the CRTC ID from the mode object ID - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param id - \c [in] Mode object ID - * \param result - \c [in] Pointer to the CRTC ID - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_crtc_from_id(amdgpu_device_handle dev, unsigned id, - int32_t *result); - -/** - * Query GPU H/w Info - * - * Query hardware specific information - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param heap - \c [in] Heap type - * \param info - \c [in] Pointer to structure to get needed information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_gpu_info(amdgpu_device_handle dev, - struct amdgpu_gpu_info *info); - -/** - * Query hardware or driver information. - * - * The return size is query-specific and depends on the "info_id" parameter. - * No more than "size" bytes is returned. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param info_id - \c [in] AMDGPU_INFO_* - * \param size - \c [in] Size of the returned value. - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX error code - * -*/ -int amdgpu_query_info(amdgpu_device_handle dev, unsigned info_id, - unsigned size, void *value); - -/** - * Query hardware or driver information. - * - * The return size is query-specific and depends on the "info_id" parameter. - * No more than "size" bytes is returned. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param info - \c [in] amdgpu_sw_info_* - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX error code - * -*/ -int amdgpu_query_sw_info(amdgpu_device_handle dev, enum amdgpu_sw_info info, - void *value); - -/** - * Query information about GDS - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param gds_info - \c [out] Pointer to structure to get GDS information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_gds_info(amdgpu_device_handle dev, - struct amdgpu_gds_resource_info *gds_info); - -/** - * Query information about sensor. - * - * The return size is query-specific and depends on the "sensor_type" - * parameter. No more than "size" bytes is returned. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param sensor_type - \c [in] AMDGPU_INFO_SENSOR_* - * \param size - \c [in] Size of the returned value. - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_sensor_info(amdgpu_device_handle dev, unsigned sensor_type, - unsigned size, void *value); - -/** - * Query information about video capabilities - * - * The return sizeof(struct drm_amdgpu_info_video_caps) - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param caps_type - \c [in] AMDGPU_INFO_VIDEO_CAPS_DECODE(ENCODE) - * \param size - \c [in] Size of the returned value. - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_video_caps_info(amdgpu_device_handle dev, unsigned cap_type, - unsigned size, void *value); - -/** - * Read a set of consecutive memory-mapped registers. - * Not all registers are allowed to be read by userspace. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize( - * \param dword_offset - \c [in] Register offset in dwords - * \param count - \c [in] The number of registers to read starting - * from the offset - * \param instance - \c [in] GRBM_GFX_INDEX selector. It may have other - * uses. Set it to 0xffffffff if unsure. - * \param flags - \c [in] Flags with additional information. - * \param values - \c [out] The pointer to return values. - * - * \return 0 on success\n - * <0 - Negative POSIX error code - * -*/ -int amdgpu_read_mm_registers(amdgpu_device_handle dev, unsigned dword_offset, - unsigned count, uint32_t instance, uint32_t flags, - uint32_t *values); - -/** - * Flag to request VA address range in the 32bit address space -*/ -#define AMDGPU_VA_RANGE_32_BIT 0x1 -#define AMDGPU_VA_RANGE_HIGH 0x2 -#define AMDGPU_VA_RANGE_REPLAYABLE 0x4 - -/** - * Allocate virtual address range - * - * \param dev - [in] Device handle. See #amdgpu_device_initialize() - * \param va_range_type - \c [in] Type of MC va range from which to allocate - * \param size - \c [in] Size of range. Size must be correctly* aligned. - * It is client responsibility to correctly aligned size based on the future - * usage of allocated range. - * \param va_base_alignment - \c [in] Overwrite base address alignment - * requirement for GPU VM MC virtual - * address assignment. Must be multiple of size alignments received as - * 'amdgpu_buffer_size_alignments'. - * If 0 use the default one. - * \param va_base_required - \c [in] Specified required va base address. - * If 0 then library choose available one. - * If !0 value will be passed and those value already "in use" then - * corresponding error status will be returned. - * \param va_base_allocated - \c [out] On return: Allocated VA base to be used - * by client. - * \param va_range_handle - \c [out] On return: Handle assigned to allocation - * \param flags - \c [in] flags for special VA range - * - * \return 0 on success\n - * >0 - AMD specific error code\n - * <0 - Negative POSIX Error code - * - * \notes \n - * It is client responsibility to correctly handle VA assignments and usage. - * Neither kernel driver nor libdrm_amdpgu are able to prevent and - * detect wrong va assignment. - * - * It is client responsibility to correctly handle multi-GPU cases and to pass - * the corresponding arrays of all devices handles where corresponding VA will - * be used. - * -*/ -int amdgpu_va_range_alloc(amdgpu_device_handle dev, - enum amdgpu_gpu_va_range va_range_type, - uint64_t size, - uint64_t va_base_alignment, - uint64_t va_base_required, - uint64_t *va_base_allocated, - amdgpu_va_handle *va_range_handle, - uint64_t flags); - -/** - * Free previously allocated virtual address range - * - * - * \param va_range_handle - \c [in] Handle assigned to VA allocation - * - * \return 0 on success\n - * >0 - AMD specific error code\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_va_range_free(amdgpu_va_handle va_range_handle); - -/** -* Query virtual address range -* -* UMD can query GPU VM range supported by each device -* to initialize its own VAM accordingly. -* -* \param dev - [in] Device handle. See #amdgpu_device_initialize() -* \param type - \c [in] Type of virtual address range -* \param offset - \c [out] Start offset of virtual address range -* \param size - \c [out] Size of virtual address range -* -* \return 0 on success\n -* <0 - Negative POSIX Error code -* -*/ - -int amdgpu_va_range_query(amdgpu_device_handle dev, - enum amdgpu_gpu_va_range type, - uint64_t *start, - uint64_t *end); - -/** - * VA mapping/unmapping for the buffer object - * - * \param bo - \c [in] BO handle - * \param offset - \c [in] Start offset to map - * \param size - \c [in] Size to map - * \param addr - \c [in] Start virtual address. - * \param flags - \c [in] Supported flags for mapping/unmapping - * \param ops - \c [in] AMDGPU_VA_OP_MAP or AMDGPU_VA_OP_UNMAP - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ - -int amdgpu_bo_va_op(amdgpu_bo_handle bo, - uint64_t offset, - uint64_t size, - uint64_t addr, - uint64_t flags, - uint32_t ops); - -/** - * VA mapping/unmapping for a buffer object or PRT region. - * - * This is not a simple drop-in extension for amdgpu_bo_va_op; instead, all - * parameters are treated "raw", i.e. size is not automatically aligned, and - * all flags must be specified explicitly. - * - * \param dev - \c [in] device handle - * \param bo - \c [in] BO handle (may be NULL) - * \param offset - \c [in] Start offset to map - * \param size - \c [in] Size to map - * \param addr - \c [in] Start virtual address. - * \param flags - \c [in] Supported flags for mapping/unmapping - * \param ops - \c [in] AMDGPU_VA_OP_MAP or AMDGPU_VA_OP_UNMAP - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ - -int amdgpu_bo_va_op_raw(amdgpu_device_handle dev, - amdgpu_bo_handle bo, - uint64_t offset, - uint64_t size, - uint64_t addr, - uint64_t flags, - uint32_t ops); - -/** - * create semaphore - * - * \param sem - \c [out] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_create_semaphore(amdgpu_semaphore_handle *sem); - -/** - * signal semaphore - * - * \param context - \c [in] GPU Context - * \param ip_type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param ip_instance - \c [in] Index of the IP block of the same type - * \param ring - \c [in] Specify ring index of the IP - * \param sem - \c [in] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_signal_semaphore(amdgpu_context_handle ctx, - uint32_t ip_type, - uint32_t ip_instance, - uint32_t ring, - amdgpu_semaphore_handle sem); - -/** - * wait semaphore - * - * \param context - \c [in] GPU Context - * \param ip_type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param ip_instance - \c [in] Index of the IP block of the same type - * \param ring - \c [in] Specify ring index of the IP - * \param sem - \c [in] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_wait_semaphore(amdgpu_context_handle ctx, - uint32_t ip_type, - uint32_t ip_instance, - uint32_t ring, - amdgpu_semaphore_handle sem); - -/** - * destroy semaphore - * - * \param sem - \c [in] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_destroy_semaphore(amdgpu_semaphore_handle sem); - -/** - * Get the ASIC marketing name - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * - * \return the constant string of the marketing name - * "NULL" means the ASIC is not found -*/ -const char *amdgpu_get_marketing_name(amdgpu_device_handle dev); - -/** - * Create kernel sync object - * - * \param dev - \c [in] device handle - * \param flags - \c [in] flags that affect creation - * \param syncobj - \c [out] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_create_syncobj2(amdgpu_device_handle dev, - uint32_t flags, - uint32_t *syncobj); - -/** - * Create kernel sync object - * - * \param dev - \c [in] device handle - * \param syncobj - \c [out] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_create_syncobj(amdgpu_device_handle dev, - uint32_t *syncobj); -/** - * Destroy kernel sync object - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_destroy_syncobj(amdgpu_device_handle dev, - uint32_t syncobj); - -/** - * Reset kernel sync objects to unsignalled state. - * - * \param dev - \c [in] device handle - * \param syncobjs - \c [in] array of sync object handles - * \param syncobj_count - \c [in] number of handles in syncobjs - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_syncobj_reset(amdgpu_device_handle dev, - const uint32_t *syncobjs, uint32_t syncobj_count); - -/** - * Signal kernel sync objects. - * - * \param dev - \c [in] device handle - * \param syncobjs - \c [in] array of sync object handles - * \param syncobj_count - \c [in] number of handles in syncobjs - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_syncobj_signal(amdgpu_device_handle dev, - const uint32_t *syncobjs, uint32_t syncobj_count); - -/** - * Signal kernel timeline sync objects. - * - * \param dev - \c [in] device handle - * \param syncobjs - \c [in] array of sync object handles - * \param points - \c [in] array of timeline points - * \param syncobj_count - \c [in] number of handles in syncobjs - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_syncobj_timeline_signal(amdgpu_device_handle dev, - const uint32_t *syncobjs, - uint64_t *points, - uint32_t syncobj_count); - -/** - * Wait for one or all sync objects to signal. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param num_handles - \c [in] self-explanatory - * \param timeout_nsec - \c [in] self-explanatory - * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_WAIT_FLAGS_* - * \param first_signaled - \c [in] self-explanatory - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_wait(amdgpu_device_handle dev, - uint32_t *handles, unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); - -/** - * Wait for one or all sync objects on their points to signal. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param points - \c [in] array of sync points to wait - * \param num_handles - \c [in] self-explanatory - * \param timeout_nsec - \c [in] self-explanatory - * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_WAIT_FLAGS_* - * \param first_signaled - \c [in] self-explanatory - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_timeline_wait(amdgpu_device_handle dev, - uint32_t *handles, uint64_t *points, - unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); -/** - * Query sync objects payloads. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param points - \c [out] array of sync points returned, which presents - * syncobj payload. - * \param num_handles - \c [in] self-explanatory - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_query(amdgpu_device_handle dev, - uint32_t *handles, uint64_t *points, - unsigned num_handles); -/** - * Query sync objects last signaled or submitted point. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param points - \c [out] array of sync points returned, which presents - * syncobj payload. - * \param num_handles - \c [in] self-explanatory - * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_QUERY_FLAGS_* - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_query2(amdgpu_device_handle dev, - uint32_t *handles, uint64_t *points, - unsigned num_handles, uint32_t flags); - -/** - * Export kernel sync object to shareable fd. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param shared_fd - \c [out] shared file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_export_syncobj(amdgpu_device_handle dev, - uint32_t syncobj, - int *shared_fd); -/** - * Import kernel sync object from shareable fd. - * - * \param dev - \c [in] device handle - * \param shared_fd - \c [in] shared file descriptor. - * \param syncobj - \c [out] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_import_syncobj(amdgpu_device_handle dev, - int shared_fd, - uint32_t *syncobj); - -/** - * Export kernel sync object to a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param sync_file_fd - \c [out] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_export_sync_file(amdgpu_device_handle dev, - uint32_t syncobj, - int *sync_file_fd); - -/** - * Import kernel sync object from a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param sync_file_fd - \c [in] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_import_sync_file(amdgpu_device_handle dev, - uint32_t syncobj, - int sync_file_fd); -/** - * Export kernel timeline sync object to a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param point - \c [in] timeline point - * \param flags - \c [in] flags - * \param sync_file_fd - \c [out] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_export_sync_file2(amdgpu_device_handle dev, - uint32_t syncobj, - uint64_t point, - uint32_t flags, - int *sync_file_fd); - -/** - * Import kernel timeline sync object from a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param point - \c [in] timeline point - * \param sync_file_fd - \c [in] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_import_sync_file2(amdgpu_device_handle dev, - uint32_t syncobj, - uint64_t point, - int sync_file_fd); - -/** - * transfer between syncbojs. - * - * \param dev - \c [in] device handle - * \param dst_handle - \c [in] sync object handle - * \param dst_point - \c [in] timeline point, 0 presents dst is binary - * \param src_handle - \c [in] sync object handle - * \param src_point - \c [in] timeline point, 0 presents src is binary - * \param flags - \c [in] flags - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_transfer(amdgpu_device_handle dev, - uint32_t dst_handle, - uint64_t dst_point, - uint32_t src_handle, - uint64_t src_point, - uint32_t flags); - -/** - * Export an amdgpu fence as a handle (syncobj or fd). - * - * \param what AMDGPU_FENCE_TO_HANDLE_GET_{SYNCOBJ, FD} - * \param out_handle returned handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - */ -int amdgpu_cs_fence_to_handle(amdgpu_device_handle dev, - struct amdgpu_cs_fence *fence, - uint32_t what, - uint32_t *out_handle); - -/** - * Submit raw command submission to kernel - * - * \param dev - \c [in] device handle - * \param context - \c [in] context handle for context id - * \param bo_list_handle - \c [in] request bo list handle (0 for none) - * \param num_chunks - \c [in] number of CS chunks to submit - * \param chunks - \c [in] array of CS chunks - * \param seq_no - \c [out] output sequence number for submission. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -struct drm_amdgpu_cs_chunk; -struct drm_amdgpu_cs_chunk_dep; -struct drm_amdgpu_cs_chunk_data; - -int amdgpu_cs_submit_raw(amdgpu_device_handle dev, - amdgpu_context_handle context, - amdgpu_bo_list_handle bo_list_handle, - int num_chunks, - struct drm_amdgpu_cs_chunk *chunks, - uint64_t *seq_no); - -/** - * Submit raw command submission to the kernel with a raw BO list handle. - * - * \param dev - \c [in] device handle - * \param context - \c [in] context handle for context id - * \param bo_list_handle - \c [in] raw bo list handle (0 for none) - * \param num_chunks - \c [in] number of CS chunks to submit - * \param chunks - \c [in] array of CS chunks - * \param seq_no - \c [out] output sequence number for submission. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_create_raw(), amdgpu_bo_list_destroy_raw() - */ -int amdgpu_cs_submit_raw2(amdgpu_device_handle dev, - amdgpu_context_handle context, - uint32_t bo_list_handle, - int num_chunks, - struct drm_amdgpu_cs_chunk *chunks, - uint64_t *seq_no); - -void amdgpu_cs_chunk_fence_to_dep(struct amdgpu_cs_fence *fence, - struct drm_amdgpu_cs_chunk_dep *dep); -void amdgpu_cs_chunk_fence_info_to_data(struct amdgpu_cs_fence_info *fence_info, - struct drm_amdgpu_cs_chunk_data *data); - -/** - * Reserve VMID - * \param context - \c [in] GPU Context - * \param flags - \c [in] TBD - * - * \return 0 on success otherwise POSIX Error code -*/ -int amdgpu_vm_reserve_vmid(amdgpu_device_handle dev, uint32_t flags); - -/** - * Free reserved VMID - * \param context - \c [in] GPU Context - * \param flags - \c [in] TBD - * - * \return 0 on success otherwise POSIX Error code -*/ -int amdgpu_vm_unreserve_vmid(amdgpu_device_handle dev, uint32_t flags); - -#ifdef __cplusplus -} -#endif -#endif /* #ifdef _AMDGPU_H_ */ diff --git a/prebuilts/arm/include/libdrm/amdgpu_drm.h b/prebuilts/arm/include/libdrm/amdgpu_drm.h deleted file mode 100644 index 7f01f98..0000000 --- a/prebuilts/arm/include/libdrm/amdgpu_drm.h +++ /dev/null @@ -1,1157 +0,0 @@ -/* amdgpu_drm.h -- Public header for the amdgpu driver -*- linux-c -*- - * - * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Fremont, California. - * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. - * Copyright 2014 Advanced Micro Devices, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Kevin E. Martin - * Gareth Hughes - * Keith Whitwell - */ - -#ifndef __AMDGPU_DRM_H__ -#define __AMDGPU_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_AMDGPU_GEM_CREATE 0x00 -#define DRM_AMDGPU_GEM_MMAP 0x01 -#define DRM_AMDGPU_CTX 0x02 -#define DRM_AMDGPU_BO_LIST 0x03 -#define DRM_AMDGPU_CS 0x04 -#define DRM_AMDGPU_INFO 0x05 -#define DRM_AMDGPU_GEM_METADATA 0x06 -#define DRM_AMDGPU_GEM_WAIT_IDLE 0x07 -#define DRM_AMDGPU_GEM_VA 0x08 -#define DRM_AMDGPU_WAIT_CS 0x09 -#define DRM_AMDGPU_GEM_OP 0x10 -#define DRM_AMDGPU_GEM_USERPTR 0x11 -#define DRM_AMDGPU_WAIT_FENCES 0x12 -#define DRM_AMDGPU_VM 0x13 -#define DRM_AMDGPU_FENCE_TO_HANDLE 0x14 -#define DRM_AMDGPU_SCHED 0x15 - -#define DRM_IOCTL_AMDGPU_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_CREATE, union drm_amdgpu_gem_create) -#define DRM_IOCTL_AMDGPU_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_MMAP, union drm_amdgpu_gem_mmap) -#define DRM_IOCTL_AMDGPU_CTX DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_CTX, union drm_amdgpu_ctx) -#define DRM_IOCTL_AMDGPU_BO_LIST DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_BO_LIST, union drm_amdgpu_bo_list) -#define DRM_IOCTL_AMDGPU_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_CS, union drm_amdgpu_cs) -#define DRM_IOCTL_AMDGPU_INFO DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_INFO, struct drm_amdgpu_info) -#define DRM_IOCTL_AMDGPU_GEM_METADATA DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_METADATA, struct drm_amdgpu_gem_metadata) -#define DRM_IOCTL_AMDGPU_GEM_WAIT_IDLE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_WAIT_IDLE, union drm_amdgpu_gem_wait_idle) -#define DRM_IOCTL_AMDGPU_GEM_VA DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_VA, struct drm_amdgpu_gem_va) -#define DRM_IOCTL_AMDGPU_WAIT_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_WAIT_CS, union drm_amdgpu_wait_cs) -#define DRM_IOCTL_AMDGPU_GEM_OP DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_OP, struct drm_amdgpu_gem_op) -#define DRM_IOCTL_AMDGPU_GEM_USERPTR DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_USERPTR, struct drm_amdgpu_gem_userptr) -#define DRM_IOCTL_AMDGPU_WAIT_FENCES DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_WAIT_FENCES, union drm_amdgpu_wait_fences) -#define DRM_IOCTL_AMDGPU_VM DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_VM, union drm_amdgpu_vm) -#define DRM_IOCTL_AMDGPU_FENCE_TO_HANDLE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_FENCE_TO_HANDLE, union drm_amdgpu_fence_to_handle) -#define DRM_IOCTL_AMDGPU_SCHED DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_SCHED, union drm_amdgpu_sched) - -/** - * DOC: memory domains - * - * %AMDGPU_GEM_DOMAIN_CPU System memory that is not GPU accessible. - * Memory in this pool could be swapped out to disk if there is pressure. - * - * %AMDGPU_GEM_DOMAIN_GTT GPU accessible system memory, mapped into the - * GPU's virtual address space via gart. Gart memory linearizes non-contiguous - * pages of system memory, allows GPU access system memory in a linearized - * fashion. - * - * %AMDGPU_GEM_DOMAIN_VRAM Local video memory. For APUs, it is memory - * carved out by the BIOS. - * - * %AMDGPU_GEM_DOMAIN_GDS Global on-chip data storage used to share data - * across shader threads. - * - * %AMDGPU_GEM_DOMAIN_GWS Global wave sync, used to synchronize the - * execution of all the waves on a device. - * - * %AMDGPU_GEM_DOMAIN_OA Ordered append, used by 3D or Compute engines - * for appending data. - */ -#define AMDGPU_GEM_DOMAIN_CPU 0x1 -#define AMDGPU_GEM_DOMAIN_GTT 0x2 -#define AMDGPU_GEM_DOMAIN_VRAM 0x4 -#define AMDGPU_GEM_DOMAIN_GDS 0x8 -#define AMDGPU_GEM_DOMAIN_GWS 0x10 -#define AMDGPU_GEM_DOMAIN_OA 0x20 -#define AMDGPU_GEM_DOMAIN_MASK (AMDGPU_GEM_DOMAIN_CPU | \ - AMDGPU_GEM_DOMAIN_GTT | \ - AMDGPU_GEM_DOMAIN_VRAM | \ - AMDGPU_GEM_DOMAIN_GDS | \ - AMDGPU_GEM_DOMAIN_GWS | \ - AMDGPU_GEM_DOMAIN_OA) - -/* Flag that CPU access will be required for the case of VRAM domain */ -#define AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED (1 << 0) -/* Flag that CPU access will not work, this VRAM domain is invisible */ -#define AMDGPU_GEM_CREATE_NO_CPU_ACCESS (1 << 1) -/* Flag that USWC attributes should be used for GTT */ -#define AMDGPU_GEM_CREATE_CPU_GTT_USWC (1 << 2) -/* Flag that the memory should be in VRAM and cleared */ -#define AMDGPU_GEM_CREATE_VRAM_CLEARED (1 << 3) -/* Flag that allocating the BO should use linear VRAM */ -#define AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS (1 << 5) -/* Flag that BO is always valid in this VM */ -#define AMDGPU_GEM_CREATE_VM_ALWAYS_VALID (1 << 6) -/* Flag that BO sharing will be explicitly synchronized */ -#define AMDGPU_GEM_CREATE_EXPLICIT_SYNC (1 << 7) -/* Flag that indicates allocating MQD gart on GFX9, where the mtype - * for the second page onward should be set to NC. It should never - * be used by user space applications. - */ -#define AMDGPU_GEM_CREATE_CP_MQD_GFX9 (1 << 8) -/* Flag that BO may contain sensitive data that must be wiped before - * releasing the memory - */ -#define AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE (1 << 9) -/* Flag that BO will be encrypted and that the TMZ bit should be - * set in the PTEs when mapping this buffer via GPUVM or - * accessing it with various hw blocks - */ -#define AMDGPU_GEM_CREATE_ENCRYPTED (1 << 10) -/* Flag that BO will be used only in preemptible context, which does - * not require GTT memory accounting - */ -#define AMDGPU_GEM_CREATE_PREEMPTIBLE (1 << 11) - -struct drm_amdgpu_gem_create_in { - /** the requested memory size */ - __u64 bo_size; - /** physical start_addr alignment in bytes for some HW requirements */ - __u64 alignment; - /** the requested memory domains */ - __u64 domains; - /** allocation flags */ - __u64 domain_flags; -}; - -struct drm_amdgpu_gem_create_out { - /** returned GEM object handle */ - __u32 handle; - __u32 _pad; -}; - -union drm_amdgpu_gem_create { - struct drm_amdgpu_gem_create_in in; - struct drm_amdgpu_gem_create_out out; -}; - -/** Opcode to create new residency list. */ -#define AMDGPU_BO_LIST_OP_CREATE 0 -/** Opcode to destroy previously created residency list */ -#define AMDGPU_BO_LIST_OP_DESTROY 1 -/** Opcode to update resource information in the list */ -#define AMDGPU_BO_LIST_OP_UPDATE 2 - -struct drm_amdgpu_bo_list_in { - /** Type of operation */ - __u32 operation; - /** Handle of list or 0 if we want to create one */ - __u32 list_handle; - /** Number of BOs in list */ - __u32 bo_number; - /** Size of each element describing BO */ - __u32 bo_info_size; - /** Pointer to array describing BOs */ - __u64 bo_info_ptr; -}; - -struct drm_amdgpu_bo_list_entry { - /** Handle of BO */ - __u32 bo_handle; - /** New (if specified) BO priority to be used during migration */ - __u32 bo_priority; -}; - -struct drm_amdgpu_bo_list_out { - /** Handle of resource list */ - __u32 list_handle; - __u32 _pad; -}; - -union drm_amdgpu_bo_list { - struct drm_amdgpu_bo_list_in in; - struct drm_amdgpu_bo_list_out out; -}; - -/* context related */ -#define AMDGPU_CTX_OP_ALLOC_CTX 1 -#define AMDGPU_CTX_OP_FREE_CTX 2 -#define AMDGPU_CTX_OP_QUERY_STATE 3 -#define AMDGPU_CTX_OP_QUERY_STATE2 4 -#define AMDGPU_CTX_OP_GET_STABLE_PSTATE 5 -#define AMDGPU_CTX_OP_SET_STABLE_PSTATE 6 - -/* GPU reset status */ -#define AMDGPU_CTX_NO_RESET 0 -/* this the context caused it */ -#define AMDGPU_CTX_GUILTY_RESET 1 -/* some other context caused it */ -#define AMDGPU_CTX_INNOCENT_RESET 2 -/* unknown cause */ -#define AMDGPU_CTX_UNKNOWN_RESET 3 - -/* indicate gpu reset occured after ctx created */ -#define AMDGPU_CTX_QUERY2_FLAGS_RESET (1<<0) -/* indicate vram lost occured after ctx created */ -#define AMDGPU_CTX_QUERY2_FLAGS_VRAMLOST (1<<1) -/* indicate some job from this context once cause gpu hang */ -#define AMDGPU_CTX_QUERY2_FLAGS_GUILTY (1<<2) -/* indicate some errors are detected by RAS */ -#define AMDGPU_CTX_QUERY2_FLAGS_RAS_CE (1<<3) -#define AMDGPU_CTX_QUERY2_FLAGS_RAS_UE (1<<4) - -/* Context priority level */ -#define AMDGPU_CTX_PRIORITY_UNSET -2048 -#define AMDGPU_CTX_PRIORITY_VERY_LOW -1023 -#define AMDGPU_CTX_PRIORITY_LOW -512 -#define AMDGPU_CTX_PRIORITY_NORMAL 0 -/* - * When used in struct drm_amdgpu_ctx_in, a priority above NORMAL requires - * CAP_SYS_NICE or DRM_MASTER -*/ -#define AMDGPU_CTX_PRIORITY_HIGH 512 -#define AMDGPU_CTX_PRIORITY_VERY_HIGH 1023 - -/* select a stable profiling pstate for perfmon tools */ -#define AMDGPU_CTX_STABLE_PSTATE_FLAGS_MASK 0xf -#define AMDGPU_CTX_STABLE_PSTATE_NONE 0 -#define AMDGPU_CTX_STABLE_PSTATE_STANDARD 1 -#define AMDGPU_CTX_STABLE_PSTATE_MIN_SCLK 2 -#define AMDGPU_CTX_STABLE_PSTATE_MIN_MCLK 3 -#define AMDGPU_CTX_STABLE_PSTATE_PEAK 4 - -struct drm_amdgpu_ctx_in { - /** AMDGPU_CTX_OP_* */ - __u32 op; - /** Flags */ - __u32 flags; - __u32 ctx_id; - /** AMDGPU_CTX_PRIORITY_* */ - __s32 priority; -}; - -union drm_amdgpu_ctx_out { - struct { - __u32 ctx_id; - __u32 _pad; - } alloc; - - struct { - /** For future use, no flags defined so far */ - __u64 flags; - /** Number of resets caused by this context so far. */ - __u32 hangs; - /** Reset status since the last call of the ioctl. */ - __u32 reset_status; - } state; - - struct { - __u32 flags; - __u32 _pad; - } pstate; -}; - -union drm_amdgpu_ctx { - struct drm_amdgpu_ctx_in in; - union drm_amdgpu_ctx_out out; -}; - -/* vm ioctl */ -#define AMDGPU_VM_OP_RESERVE_VMID 1 -#define AMDGPU_VM_OP_UNRESERVE_VMID 2 - -struct drm_amdgpu_vm_in { - /** AMDGPU_VM_OP_* */ - __u32 op; - __u32 flags; -}; - -struct drm_amdgpu_vm_out { - /** For future use, no flags defined so far */ - __u64 flags; -}; - -union drm_amdgpu_vm { - struct drm_amdgpu_vm_in in; - struct drm_amdgpu_vm_out out; -}; - -/* sched ioctl */ -#define AMDGPU_SCHED_OP_PROCESS_PRIORITY_OVERRIDE 1 -#define AMDGPU_SCHED_OP_CONTEXT_PRIORITY_OVERRIDE 2 - -struct drm_amdgpu_sched_in { - /* AMDGPU_SCHED_OP_* */ - __u32 op; - __u32 fd; - /** AMDGPU_CTX_PRIORITY_* */ - __s32 priority; - __u32 ctx_id; -}; - -union drm_amdgpu_sched { - struct drm_amdgpu_sched_in in; -}; - -/* - * This is not a reliable API and you should expect it to fail for any - * number of reasons and have fallback path that do not use userptr to - * perform any operation. - */ -#define AMDGPU_GEM_USERPTR_READONLY (1 << 0) -#define AMDGPU_GEM_USERPTR_ANONONLY (1 << 1) -#define AMDGPU_GEM_USERPTR_VALIDATE (1 << 2) -#define AMDGPU_GEM_USERPTR_REGISTER (1 << 3) - -struct drm_amdgpu_gem_userptr { - __u64 addr; - __u64 size; - /* AMDGPU_GEM_USERPTR_* */ - __u32 flags; - /* Resulting GEM handle */ - __u32 handle; -}; - -/* SI-CI-VI: */ -/* same meaning as the GB_TILE_MODE and GL_MACRO_TILE_MODE fields */ -#define AMDGPU_TILING_ARRAY_MODE_SHIFT 0 -#define AMDGPU_TILING_ARRAY_MODE_MASK 0xf -#define AMDGPU_TILING_PIPE_CONFIG_SHIFT 4 -#define AMDGPU_TILING_PIPE_CONFIG_MASK 0x1f -#define AMDGPU_TILING_TILE_SPLIT_SHIFT 9 -#define AMDGPU_TILING_TILE_SPLIT_MASK 0x7 -#define AMDGPU_TILING_MICRO_TILE_MODE_SHIFT 12 -#define AMDGPU_TILING_MICRO_TILE_MODE_MASK 0x7 -#define AMDGPU_TILING_BANK_WIDTH_SHIFT 15 -#define AMDGPU_TILING_BANK_WIDTH_MASK 0x3 -#define AMDGPU_TILING_BANK_HEIGHT_SHIFT 17 -#define AMDGPU_TILING_BANK_HEIGHT_MASK 0x3 -#define AMDGPU_TILING_MACRO_TILE_ASPECT_SHIFT 19 -#define AMDGPU_TILING_MACRO_TILE_ASPECT_MASK 0x3 -#define AMDGPU_TILING_NUM_BANKS_SHIFT 21 -#define AMDGPU_TILING_NUM_BANKS_MASK 0x3 - -/* GFX9 and later: */ -#define AMDGPU_TILING_SWIZZLE_MODE_SHIFT 0 -#define AMDGPU_TILING_SWIZZLE_MODE_MASK 0x1f -#define AMDGPU_TILING_DCC_OFFSET_256B_SHIFT 5 -#define AMDGPU_TILING_DCC_OFFSET_256B_MASK 0xFFFFFF -#define AMDGPU_TILING_DCC_PITCH_MAX_SHIFT 29 -#define AMDGPU_TILING_DCC_PITCH_MAX_MASK 0x3FFF -#define AMDGPU_TILING_DCC_INDEPENDENT_64B_SHIFT 43 -#define AMDGPU_TILING_DCC_INDEPENDENT_64B_MASK 0x1 -#define AMDGPU_TILING_DCC_INDEPENDENT_128B_SHIFT 44 -#define AMDGPU_TILING_DCC_INDEPENDENT_128B_MASK 0x1 -#define AMDGPU_TILING_SCANOUT_SHIFT 63 -#define AMDGPU_TILING_SCANOUT_MASK 0x1 - -/* Set/Get helpers for tiling flags. */ -#define AMDGPU_TILING_SET(field, value) \ - (((__u64)(value) & AMDGPU_TILING_##field##_MASK) << AMDGPU_TILING_##field##_SHIFT) -#define AMDGPU_TILING_GET(value, field) \ - (((__u64)(value) >> AMDGPU_TILING_##field##_SHIFT) & AMDGPU_TILING_##field##_MASK) - -#define AMDGPU_GEM_METADATA_OP_SET_METADATA 1 -#define AMDGPU_GEM_METADATA_OP_GET_METADATA 2 - -/** The same structure is shared for input/output */ -struct drm_amdgpu_gem_metadata { - /** GEM Object handle */ - __u32 handle; - /** Do we want get or set metadata */ - __u32 op; - struct { - /** For future use, no flags defined so far */ - __u64 flags; - /** family specific tiling info */ - __u64 tiling_info; - __u32 data_size_bytes; - __u32 data[64]; - } data; -}; - -struct drm_amdgpu_gem_mmap_in { - /** the GEM object handle */ - __u32 handle; - __u32 _pad; -}; - -struct drm_amdgpu_gem_mmap_out { - /** mmap offset from the vma offset manager */ - __u64 addr_ptr; -}; - -union drm_amdgpu_gem_mmap { - struct drm_amdgpu_gem_mmap_in in; - struct drm_amdgpu_gem_mmap_out out; -}; - -struct drm_amdgpu_gem_wait_idle_in { - /** GEM object handle */ - __u32 handle; - /** For future use, no flags defined so far */ - __u32 flags; - /** Absolute timeout to wait */ - __u64 timeout; -}; - -struct drm_amdgpu_gem_wait_idle_out { - /** BO status: 0 - BO is idle, 1 - BO is busy */ - __u32 status; - /** Returned current memory domain */ - __u32 domain; -}; - -union drm_amdgpu_gem_wait_idle { - struct drm_amdgpu_gem_wait_idle_in in; - struct drm_amdgpu_gem_wait_idle_out out; -}; - -struct drm_amdgpu_wait_cs_in { - /* Command submission handle - * handle equals 0 means none to wait for - * handle equals ~0ull means wait for the latest sequence number - */ - __u64 handle; - /** Absolute timeout to wait */ - __u64 timeout; - __u32 ip_type; - __u32 ip_instance; - __u32 ring; - __u32 ctx_id; -}; - -struct drm_amdgpu_wait_cs_out { - /** CS status: 0 - CS completed, 1 - CS still busy */ - __u64 status; -}; - -union drm_amdgpu_wait_cs { - struct drm_amdgpu_wait_cs_in in; - struct drm_amdgpu_wait_cs_out out; -}; - -struct drm_amdgpu_fence { - __u32 ctx_id; - __u32 ip_type; - __u32 ip_instance; - __u32 ring; - __u64 seq_no; -}; - -struct drm_amdgpu_wait_fences_in { - /** This points to uint64_t * which points to fences */ - __u64 fences; - __u32 fence_count; - __u32 wait_all; - __u64 timeout_ns; -}; - -struct drm_amdgpu_wait_fences_out { - __u32 status; - __u32 first_signaled; -}; - -union drm_amdgpu_wait_fences { - struct drm_amdgpu_wait_fences_in in; - struct drm_amdgpu_wait_fences_out out; -}; - -#define AMDGPU_GEM_OP_GET_GEM_CREATE_INFO 0 -#define AMDGPU_GEM_OP_SET_PLACEMENT 1 - -/* Sets or returns a value associated with a buffer. */ -struct drm_amdgpu_gem_op { - /** GEM object handle */ - __u32 handle; - /** AMDGPU_GEM_OP_* */ - __u32 op; - /** Input or return value */ - __u64 value; -}; - -#define AMDGPU_VA_OP_MAP 1 -#define AMDGPU_VA_OP_UNMAP 2 -#define AMDGPU_VA_OP_CLEAR 3 -#define AMDGPU_VA_OP_REPLACE 4 - -/* Delay the page table update till the next CS */ -#define AMDGPU_VM_DELAY_UPDATE (1 << 0) - -/* Mapping flags */ -/* readable mapping */ -#define AMDGPU_VM_PAGE_READABLE (1 << 1) -/* writable mapping */ -#define AMDGPU_VM_PAGE_WRITEABLE (1 << 2) -/* executable mapping, new for VI */ -#define AMDGPU_VM_PAGE_EXECUTABLE (1 << 3) -/* partially resident texture */ -#define AMDGPU_VM_PAGE_PRT (1 << 4) -/* MTYPE flags use bit 5 to 8 */ -#define AMDGPU_VM_MTYPE_MASK (0xf << 5) -/* Default MTYPE. Pre-AI must use this. Recommended for newer ASICs. */ -#define AMDGPU_VM_MTYPE_DEFAULT (0 << 5) -/* Use Non Coherent MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_NC (1 << 5) -/* Use Write Combine MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_WC (2 << 5) -/* Use Cache Coherent MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_CC (3 << 5) -/* Use UnCached MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_UC (4 << 5) -/* Use Read Write MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_RW (5 << 5) - -struct drm_amdgpu_gem_va { - /** GEM object handle */ - __u32 handle; - __u32 _pad; - /** AMDGPU_VA_OP_* */ - __u32 operation; - /** AMDGPU_VM_PAGE_* */ - __u32 flags; - /** va address to assign . Must be correctly aligned.*/ - __u64 va_address; - /** Specify offset inside of BO to assign. Must be correctly aligned.*/ - __u64 offset_in_bo; - /** Specify mapping size. Must be correctly aligned. */ - __u64 map_size; -}; - -#define AMDGPU_HW_IP_GFX 0 -#define AMDGPU_HW_IP_COMPUTE 1 -#define AMDGPU_HW_IP_DMA 2 -#define AMDGPU_HW_IP_UVD 3 -#define AMDGPU_HW_IP_VCE 4 -#define AMDGPU_HW_IP_UVD_ENC 5 -#define AMDGPU_HW_IP_VCN_DEC 6 -#define AMDGPU_HW_IP_VCN_ENC 7 -#define AMDGPU_HW_IP_VCN_JPEG 8 -#define AMDGPU_HW_IP_NUM 9 - -#define AMDGPU_HW_IP_INSTANCE_MAX_COUNT 1 - -#define AMDGPU_CHUNK_ID_IB 0x01 -#define AMDGPU_CHUNK_ID_FENCE 0x02 -#define AMDGPU_CHUNK_ID_DEPENDENCIES 0x03 -#define AMDGPU_CHUNK_ID_SYNCOBJ_IN 0x04 -#define AMDGPU_CHUNK_ID_SYNCOBJ_OUT 0x05 -#define AMDGPU_CHUNK_ID_BO_HANDLES 0x06 -#define AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES 0x07 -#define AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_WAIT 0x08 -#define AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_SIGNAL 0x09 - -struct drm_amdgpu_cs_chunk { - __u32 chunk_id; - __u32 length_dw; - __u64 chunk_data; -}; - -struct drm_amdgpu_cs_in { - /** Rendering context id */ - __u32 ctx_id; - /** Handle of resource list associated with CS */ - __u32 bo_list_handle; - __u32 num_chunks; - __u32 flags; - /** this points to __u64 * which point to cs chunks */ - __u64 chunks; -}; - -struct drm_amdgpu_cs_out { - __u64 handle; -}; - -union drm_amdgpu_cs { - struct drm_amdgpu_cs_in in; - struct drm_amdgpu_cs_out out; -}; - -/* Specify flags to be used for IB */ - -/* This IB should be submitted to CE */ -#define AMDGPU_IB_FLAG_CE (1<<0) - -/* Preamble flag, which means the IB could be dropped if no context switch */ -#define AMDGPU_IB_FLAG_PREAMBLE (1<<1) - -/* Preempt flag, IB should set Pre_enb bit if PREEMPT flag detected */ -#define AMDGPU_IB_FLAG_PREEMPT (1<<2) - -/* The IB fence should do the L2 writeback but not invalidate any shader - * caches (L2/vL1/sL1/I$). */ -#define AMDGPU_IB_FLAG_TC_WB_NOT_INVALIDATE (1 << 3) - -/* Set GDS_COMPUTE_MAX_WAVE_ID = DEFAULT before PACKET3_INDIRECT_BUFFER. - * This will reset wave ID counters for the IB. - */ -#define AMDGPU_IB_FLAG_RESET_GDS_MAX_WAVE_ID (1 << 4) - -/* Flag the IB as secure (TMZ) - */ -#define AMDGPU_IB_FLAGS_SECURE (1 << 5) - -/* Tell KMD to flush and invalidate caches - */ -#define AMDGPU_IB_FLAG_EMIT_MEM_SYNC (1 << 6) - -struct drm_amdgpu_cs_chunk_ib { - __u32 _pad; - /** AMDGPU_IB_FLAG_* */ - __u32 flags; - /** Virtual address to begin IB execution */ - __u64 va_start; - /** Size of submission */ - __u32 ib_bytes; - /** HW IP to submit to */ - __u32 ip_type; - /** HW IP index of the same type to submit to */ - __u32 ip_instance; - /** Ring index to submit to */ - __u32 ring; -}; - -struct drm_amdgpu_cs_chunk_dep { - __u32 ip_type; - __u32 ip_instance; - __u32 ring; - __u32 ctx_id; - __u64 handle; -}; - -struct drm_amdgpu_cs_chunk_fence { - __u32 handle; - __u32 offset; -}; - -struct drm_amdgpu_cs_chunk_sem { - __u32 handle; -}; - -struct drm_amdgpu_cs_chunk_syncobj { - __u32 handle; - __u32 flags; - __u64 point; -}; - -#define AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ 0 -#define AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ_FD 1 -#define AMDGPU_FENCE_TO_HANDLE_GET_SYNC_FILE_FD 2 - -union drm_amdgpu_fence_to_handle { - struct { - struct drm_amdgpu_fence fence; - __u32 what; - __u32 pad; - } in; - struct { - __u32 handle; - } out; -}; - -struct drm_amdgpu_cs_chunk_data { - union { - struct drm_amdgpu_cs_chunk_ib ib_data; - struct drm_amdgpu_cs_chunk_fence fence_data; - }; -}; - -/* - * Query h/w info: Flag that this is integrated (a.h.a. fusion) GPU - * - */ -#define AMDGPU_IDS_FLAGS_FUSION 0x1 -#define AMDGPU_IDS_FLAGS_PREEMPTION 0x2 -#define AMDGPU_IDS_FLAGS_TMZ 0x4 - -/* indicate if acceleration can be working */ -#define AMDGPU_INFO_ACCEL_WORKING 0x00 -/* get the crtc_id from the mode object id? */ -#define AMDGPU_INFO_CRTC_FROM_ID 0x01 -/* query hw IP info */ -#define AMDGPU_INFO_HW_IP_INFO 0x02 -/* query hw IP instance count for the specified type */ -#define AMDGPU_INFO_HW_IP_COUNT 0x03 -/* timestamp for GL_ARB_timer_query */ -#define AMDGPU_INFO_TIMESTAMP 0x05 -/* Query the firmware version */ -#define AMDGPU_INFO_FW_VERSION 0x0e - /* Subquery id: Query VCE firmware version */ - #define AMDGPU_INFO_FW_VCE 0x1 - /* Subquery id: Query UVD firmware version */ - #define AMDGPU_INFO_FW_UVD 0x2 - /* Subquery id: Query GMC firmware version */ - #define AMDGPU_INFO_FW_GMC 0x03 - /* Subquery id: Query GFX ME firmware version */ - #define AMDGPU_INFO_FW_GFX_ME 0x04 - /* Subquery id: Query GFX PFP firmware version */ - #define AMDGPU_INFO_FW_GFX_PFP 0x05 - /* Subquery id: Query GFX CE firmware version */ - #define AMDGPU_INFO_FW_GFX_CE 0x06 - /* Subquery id: Query GFX RLC firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC 0x07 - /* Subquery id: Query GFX MEC firmware version */ - #define AMDGPU_INFO_FW_GFX_MEC 0x08 - /* Subquery id: Query SMC firmware version */ - #define AMDGPU_INFO_FW_SMC 0x0a - /* Subquery id: Query SDMA firmware version */ - #define AMDGPU_INFO_FW_SDMA 0x0b - /* Subquery id: Query PSP SOS firmware version */ - #define AMDGPU_INFO_FW_SOS 0x0c - /* Subquery id: Query PSP ASD firmware version */ - #define AMDGPU_INFO_FW_ASD 0x0d - /* Subquery id: Query VCN firmware version */ - #define AMDGPU_INFO_FW_VCN 0x0e - /* Subquery id: Query GFX RLC SRLC firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_CNTL 0x0f - /* Subquery id: Query GFX RLC SRLG firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_GPM_MEM 0x10 - /* Subquery id: Query GFX RLC SRLS firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_SRM_MEM 0x11 - /* Subquery id: Query DMCU firmware version */ - #define AMDGPU_INFO_FW_DMCU 0x12 - #define AMDGPU_INFO_FW_TA 0x13 - /* Subquery id: Query DMCUB firmware version */ - #define AMDGPU_INFO_FW_DMCUB 0x14 - /* Subquery id: Query TOC firmware version */ - #define AMDGPU_INFO_FW_TOC 0x15 - -/* number of bytes moved for TTM migration */ -#define AMDGPU_INFO_NUM_BYTES_MOVED 0x0f -/* the used VRAM size */ -#define AMDGPU_INFO_VRAM_USAGE 0x10 -/* the used GTT size */ -#define AMDGPU_INFO_GTT_USAGE 0x11 -/* Information about GDS, etc. resource configuration */ -#define AMDGPU_INFO_GDS_CONFIG 0x13 -/* Query information about VRAM and GTT domains */ -#define AMDGPU_INFO_VRAM_GTT 0x14 -/* Query information about register in MMR address space*/ -#define AMDGPU_INFO_READ_MMR_REG 0x15 -/* Query information about device: rev id, family, etc. */ -#define AMDGPU_INFO_DEV_INFO 0x16 -/* visible vram usage */ -#define AMDGPU_INFO_VIS_VRAM_USAGE 0x17 -/* number of TTM buffer evictions */ -#define AMDGPU_INFO_NUM_EVICTIONS 0x18 -/* Query memory about VRAM and GTT domains */ -#define AMDGPU_INFO_MEMORY 0x19 -/* Query vce clock table */ -#define AMDGPU_INFO_VCE_CLOCK_TABLE 0x1A -/* Query vbios related information */ -#define AMDGPU_INFO_VBIOS 0x1B - /* Subquery id: Query vbios size */ - #define AMDGPU_INFO_VBIOS_SIZE 0x1 - /* Subquery id: Query vbios image */ - #define AMDGPU_INFO_VBIOS_IMAGE 0x2 - /* Subquery id: Query vbios info */ - #define AMDGPU_INFO_VBIOS_INFO 0x3 -/* Query UVD handles */ -#define AMDGPU_INFO_NUM_HANDLES 0x1C -/* Query sensor related information */ -#define AMDGPU_INFO_SENSOR 0x1D - /* Subquery id: Query GPU shader clock */ - #define AMDGPU_INFO_SENSOR_GFX_SCLK 0x1 - /* Subquery id: Query GPU memory clock */ - #define AMDGPU_INFO_SENSOR_GFX_MCLK 0x2 - /* Subquery id: Query GPU temperature */ - #define AMDGPU_INFO_SENSOR_GPU_TEMP 0x3 - /* Subquery id: Query GPU load */ - #define AMDGPU_INFO_SENSOR_GPU_LOAD 0x4 - /* Subquery id: Query average GPU power */ - #define AMDGPU_INFO_SENSOR_GPU_AVG_POWER 0x5 - /* Subquery id: Query northbridge voltage */ - #define AMDGPU_INFO_SENSOR_VDDNB 0x6 - /* Subquery id: Query graphics voltage */ - #define AMDGPU_INFO_SENSOR_VDDGFX 0x7 - /* Subquery id: Query GPU stable pstate shader clock */ - #define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_SCLK 0x8 - /* Subquery id: Query GPU stable pstate memory clock */ - #define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_MCLK 0x9 -/* Number of VRAM page faults on CPU access. */ -#define AMDGPU_INFO_NUM_VRAM_CPU_PAGE_FAULTS 0x1E -#define AMDGPU_INFO_VRAM_LOST_COUNTER 0x1F -/* query ras mask of enabled features*/ -#define AMDGPU_INFO_RAS_ENABLED_FEATURES 0x20 -/* RAS MASK: UMC (VRAM) */ -#define AMDGPU_INFO_RAS_ENABLED_UMC (1 << 0) -/* RAS MASK: SDMA */ -#define AMDGPU_INFO_RAS_ENABLED_SDMA (1 << 1) -/* RAS MASK: GFX */ -#define AMDGPU_INFO_RAS_ENABLED_GFX (1 << 2) -/* RAS MASK: MMHUB */ -#define AMDGPU_INFO_RAS_ENABLED_MMHUB (1 << 3) -/* RAS MASK: ATHUB */ -#define AMDGPU_INFO_RAS_ENABLED_ATHUB (1 << 4) -/* RAS MASK: PCIE */ -#define AMDGPU_INFO_RAS_ENABLED_PCIE (1 << 5) -/* RAS MASK: HDP */ -#define AMDGPU_INFO_RAS_ENABLED_HDP (1 << 6) -/* RAS MASK: XGMI */ -#define AMDGPU_INFO_RAS_ENABLED_XGMI (1 << 7) -/* RAS MASK: DF */ -#define AMDGPU_INFO_RAS_ENABLED_DF (1 << 8) -/* RAS MASK: SMN */ -#define AMDGPU_INFO_RAS_ENABLED_SMN (1 << 9) -/* RAS MASK: SEM */ -#define AMDGPU_INFO_RAS_ENABLED_SEM (1 << 10) -/* RAS MASK: MP0 */ -#define AMDGPU_INFO_RAS_ENABLED_MP0 (1 << 11) -/* RAS MASK: MP1 */ -#define AMDGPU_INFO_RAS_ENABLED_MP1 (1 << 12) -/* RAS MASK: FUSE */ -#define AMDGPU_INFO_RAS_ENABLED_FUSE (1 << 13) -/* query video encode/decode caps */ -#define AMDGPU_INFO_VIDEO_CAPS 0x21 - /* Subquery id: Decode */ - #define AMDGPU_INFO_VIDEO_CAPS_DECODE 0 - /* Subquery id: Encode */ - #define AMDGPU_INFO_VIDEO_CAPS_ENCODE 1 - -#define AMDGPU_INFO_MMR_SE_INDEX_SHIFT 0 -#define AMDGPU_INFO_MMR_SE_INDEX_MASK 0xff -#define AMDGPU_INFO_MMR_SH_INDEX_SHIFT 8 -#define AMDGPU_INFO_MMR_SH_INDEX_MASK 0xff - -struct drm_amdgpu_query_fw { - /** AMDGPU_INFO_FW_* */ - __u32 fw_type; - /** - * Index of the IP if there are more IPs of - * the same type. - */ - __u32 ip_instance; - /** - * Index of the engine. Whether this is used depends - * on the firmware type. (e.g. MEC, SDMA) - */ - __u32 index; - __u32 _pad; -}; - -/* Input structure for the INFO ioctl */ -struct drm_amdgpu_info { - /* Where the return value will be stored */ - __u64 return_pointer; - /* The size of the return value. Just like "size" in "snprintf", - * it limits how many bytes the kernel can write. */ - __u32 return_size; - /* The query request id. */ - __u32 query; - - union { - struct { - __u32 id; - __u32 _pad; - } mode_crtc; - - struct { - /** AMDGPU_HW_IP_* */ - __u32 type; - /** - * Index of the IP if there are more IPs of the same - * type. Ignored by AMDGPU_INFO_HW_IP_COUNT. - */ - __u32 ip_instance; - } query_hw_ip; - - struct { - __u32 dword_offset; - /** number of registers to read */ - __u32 count; - __u32 instance; - /** For future use, no flags defined so far */ - __u32 flags; - } read_mmr_reg; - - struct drm_amdgpu_query_fw query_fw; - - struct { - __u32 type; - __u32 offset; - } vbios_info; - - struct { - __u32 type; - } sensor_info; - - struct { - __u32 type; - } video_cap; - }; -}; - -struct drm_amdgpu_info_gds { - /** GDS GFX partition size */ - __u32 gds_gfx_partition_size; - /** GDS compute partition size */ - __u32 compute_partition_size; - /** total GDS memory size */ - __u32 gds_total_size; - /** GWS size per GFX partition */ - __u32 gws_per_gfx_partition; - /** GSW size per compute partition */ - __u32 gws_per_compute_partition; - /** OA size per GFX partition */ - __u32 oa_per_gfx_partition; - /** OA size per compute partition */ - __u32 oa_per_compute_partition; - __u32 _pad; -}; - -struct drm_amdgpu_info_vram_gtt { - __u64 vram_size; - __u64 vram_cpu_accessible_size; - __u64 gtt_size; -}; - -struct drm_amdgpu_heap_info { - /** max. physical memory */ - __u64 total_heap_size; - - /** Theoretical max. available memory in the given heap */ - __u64 usable_heap_size; - - /** - * Number of bytes allocated in the heap. This includes all processes - * and private allocations in the kernel. It changes when new buffers - * are allocated, freed, and moved. It cannot be larger than - * heap_size. - */ - __u64 heap_usage; - - /** - * Theoretical possible max. size of buffer which - * could be allocated in the given heap - */ - __u64 max_allocation; -}; - -struct drm_amdgpu_memory_info { - struct drm_amdgpu_heap_info vram; - struct drm_amdgpu_heap_info cpu_accessible_vram; - struct drm_amdgpu_heap_info gtt; -}; - -struct drm_amdgpu_info_firmware { - __u32 ver; - __u32 feature; -}; - -struct drm_amdgpu_info_vbios { - __u8 name[64]; - __u8 vbios_pn[64]; - __u32 version; - __u32 pad; - __u8 vbios_ver_str[32]; - __u8 date[32]; -}; - -#define AMDGPU_VRAM_TYPE_UNKNOWN 0 -#define AMDGPU_VRAM_TYPE_GDDR1 1 -#define AMDGPU_VRAM_TYPE_DDR2 2 -#define AMDGPU_VRAM_TYPE_GDDR3 3 -#define AMDGPU_VRAM_TYPE_GDDR4 4 -#define AMDGPU_VRAM_TYPE_GDDR5 5 -#define AMDGPU_VRAM_TYPE_HBM 6 -#define AMDGPU_VRAM_TYPE_DDR3 7 -#define AMDGPU_VRAM_TYPE_DDR4 8 -#define AMDGPU_VRAM_TYPE_GDDR6 9 -#define AMDGPU_VRAM_TYPE_DDR5 10 - -struct drm_amdgpu_info_device { - /** PCI Device ID */ - __u32 device_id; - /** Internal chip revision: A0, A1, etc.) */ - __u32 chip_rev; - __u32 external_rev; - /** Revision id in PCI Config space */ - __u32 pci_rev; - __u32 family; - __u32 num_shader_engines; - __u32 num_shader_arrays_per_engine; - /* in KHz */ - __u32 gpu_counter_freq; - __u64 max_engine_clock; - __u64 max_memory_clock; - /* cu information */ - __u32 cu_active_number; - /* NOTE: cu_ao_mask is INVALID, DON'T use it */ - __u32 cu_ao_mask; - __u32 cu_bitmap[4][4]; - /** Render backend pipe mask. One render backend is CB+DB. */ - __u32 enabled_rb_pipes_mask; - __u32 num_rb_pipes; - __u32 num_hw_gfx_contexts; - __u32 _pad; - __u64 ids_flags; - /** Starting virtual address for UMDs. */ - __u64 virtual_address_offset; - /** The maximum virtual address */ - __u64 virtual_address_max; - /** Required alignment of virtual addresses. */ - __u32 virtual_address_alignment; - /** Page table entry - fragment size */ - __u32 pte_fragment_size; - __u32 gart_page_size; - /** constant engine ram size*/ - __u32 ce_ram_size; - /** video memory type info*/ - __u32 vram_type; - /** video memory bit width*/ - __u32 vram_bit_width; - /* vce harvesting instance */ - __u32 vce_harvest_config; - /* gfx double offchip LDS buffers */ - __u32 gc_double_offchip_lds_buf; - /* NGG Primitive Buffer */ - __u64 prim_buf_gpu_addr; - /* NGG Position Buffer */ - __u64 pos_buf_gpu_addr; - /* NGG Control Sideband */ - __u64 cntl_sb_buf_gpu_addr; - /* NGG Parameter Cache */ - __u64 param_buf_gpu_addr; - __u32 prim_buf_size; - __u32 pos_buf_size; - __u32 cntl_sb_buf_size; - __u32 param_buf_size; - /* wavefront size*/ - __u32 wave_front_size; - /* shader visible vgprs*/ - __u32 num_shader_visible_vgprs; - /* CU per shader array*/ - __u32 num_cu_per_sh; - /* number of tcc blocks*/ - __u32 num_tcc_blocks; - /* gs vgt table depth*/ - __u32 gs_vgt_table_depth; - /* gs primitive buffer depth*/ - __u32 gs_prim_buffer_depth; - /* max gs wavefront per vgt*/ - __u32 max_gs_waves_per_vgt; - __u32 _pad1; - /* always on cu bitmap */ - __u32 cu_ao_bitmap[4][4]; - /** Starting high virtual address for UMDs. */ - __u64 high_va_offset; - /** The maximum high virtual address */ - __u64 high_va_max; - /* gfx10 pa_sc_tile_steering_override */ - __u32 pa_sc_tile_steering_override; - /* disabled TCCs */ - __u64 tcc_disabled_mask; -}; - -struct drm_amdgpu_info_hw_ip { - /** Version of h/w IP */ - __u32 hw_ip_version_major; - __u32 hw_ip_version_minor; - /** Capabilities */ - __u64 capabilities_flags; - /** command buffer address start alignment*/ - __u32 ib_start_alignment; - /** command buffer size alignment*/ - __u32 ib_size_alignment; - /** Bitmask of available rings. Bit 0 means ring 0, etc. */ - __u32 available_rings; - __u32 _pad; -}; - -struct drm_amdgpu_info_num_handles { - /** Max handles as supported by firmware for UVD */ - __u32 uvd_max_handles; - /** Handles currently in use for UVD */ - __u32 uvd_used_handles; -}; - -#define AMDGPU_VCE_CLOCK_TABLE_ENTRIES 6 - -struct drm_amdgpu_info_vce_clock_table_entry { - /** System clock */ - __u32 sclk; - /** Memory clock */ - __u32 mclk; - /** VCE clock */ - __u32 eclk; - __u32 pad; -}; - -struct drm_amdgpu_info_vce_clock_table { - struct drm_amdgpu_info_vce_clock_table_entry entries[AMDGPU_VCE_CLOCK_TABLE_ENTRIES]; - __u32 num_valid_entries; - __u32 pad; -}; - -/* query video encode/decode caps */ -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 0 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 1 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 2 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC 3 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC 4 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG 5 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 6 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1 7 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_COUNT 8 - -struct drm_amdgpu_info_video_codec_info { - __u32 valid; - __u32 max_width; - __u32 max_height; - __u32 max_pixels_per_frame; - __u32 max_level; - __u32 pad; -}; - -struct drm_amdgpu_info_video_caps { - struct drm_amdgpu_info_video_codec_info codec_info[AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_COUNT]; -}; - -/* - * Supported GPU families - */ -#define AMDGPU_FAMILY_UNKNOWN 0 -#define AMDGPU_FAMILY_SI 110 /* Hainan, Oland, Verde, Pitcairn, Tahiti */ -#define AMDGPU_FAMILY_CI 120 /* Bonaire, Hawaii */ -#define AMDGPU_FAMILY_KV 125 /* Kaveri, Kabini, Mullins */ -#define AMDGPU_FAMILY_VI 130 /* Iceland, Tonga */ -#define AMDGPU_FAMILY_CZ 135 /* Carrizo, Stoney */ -#define AMDGPU_FAMILY_AI 141 /* Vega10 */ -#define AMDGPU_FAMILY_RV 142 /* Raven */ -#define AMDGPU_FAMILY_NV 143 /* Navi10 */ -#define AMDGPU_FAMILY_VGH 144 /* Van Gogh */ -#define AMDGPU_FAMILY_YC 146 /* Yellow Carp */ - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/arm/include/libdrm/android/gralloc_handle.h b/prebuilts/arm/include/libdrm/android/gralloc_handle.h deleted file mode 100644 index d3d975e..0000000 --- a/prebuilts/arm/include/libdrm/android/gralloc_handle.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2010-2011 Chia-I Wu - * Copyright (C) 2010-2011 LunarG Inc. - * Copyright (C) 2016 Linaro, Ltd., Rob Herring - * Copyright (C) 2018 Collabora, Robert Foss - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#ifndef __ANDROID_GRALLOC_HANDLE_H__ -#define __ANDROID_GRALLOC_HANDLE_H__ - -#include -#include - -/* support users of drm_gralloc/gbm_gralloc */ -#define gralloc_gbm_handle_t gralloc_handle_t -#define gralloc_drm_handle_t gralloc_handle_t - -struct gralloc_handle_t { - native_handle_t base; - - /* dma-buf file descriptor - * Must be located first since, native_handle_t is allocated - * using native_handle_create(), which allocates space for - * sizeof(native_handle_t) + sizeof(int) * (numFds + numInts) - * numFds = GRALLOC_HANDLE_NUM_FDS - * numInts = GRALLOC_HANDLE_NUM_INTS - * Where numFds represents the number of FDs and - * numInts represents the space needed for the - * remainder of this struct. - * And the FDs are expected to be found first following - * native_handle_t. - */ - int prime_fd; - - /* api variables */ - uint32_t magic; /* differentiate between allocator impls */ - uint32_t version; /* api version */ - - uint32_t width; /* width of buffer in pixels */ - uint32_t height; /* height of buffer in pixels */ - uint32_t format; /* pixel format (Android) */ - uint32_t usage; /* android libhardware usage flags */ - - uint32_t stride; /* the stride in bytes */ - int data_owner; /* owner of data (for validation) */ - uint64_t modifier __attribute__((aligned(8))); /* buffer modifiers */ - - union { - void *data; /* pointer to struct gralloc_gbm_bo_t */ - uint64_t reserved; - } __attribute__((aligned(8))); -}; - -#define GRALLOC_HANDLE_VERSION 4 -#define GRALLOC_HANDLE_MAGIC 0x60585350 -#define GRALLOC_HANDLE_NUM_FDS 1 -#define GRALLOC_HANDLE_NUM_INTS ( \ - ((sizeof(struct gralloc_handle_t) - sizeof(native_handle_t))/sizeof(int)) \ - - GRALLOC_HANDLE_NUM_FDS) - -static inline struct gralloc_handle_t *gralloc_handle(buffer_handle_t handle) -{ - return (struct gralloc_handle_t *)handle; -} - -/** - * Create a buffer handle. - */ -static inline native_handle_t *gralloc_handle_create(int32_t width, - int32_t height, - int32_t hal_format, - int32_t usage) -{ - struct gralloc_handle_t *handle; - native_handle_t *nhandle = native_handle_create(GRALLOC_HANDLE_NUM_FDS, - GRALLOC_HANDLE_NUM_INTS); - - if (!nhandle) - return NULL; - - handle = gralloc_handle(nhandle); - handle->magic = GRALLOC_HANDLE_MAGIC; - handle->version = GRALLOC_HANDLE_VERSION; - handle->width = width; - handle->height = height; - handle->format = hal_format; - handle->usage = usage; - handle->prime_fd = -1; - - return nhandle; -} - -#endif diff --git a/prebuilts/arm/include/libdrm/drm.h b/prebuilts/arm/include/libdrm/drm.h deleted file mode 100644 index 398c396..0000000 --- a/prebuilts/arm/include/libdrm/drm.h +++ /dev/null @@ -1,1183 +0,0 @@ -/* - * Header for the Direct Rendering Manager - * - * Author: Rickard E. (Rik) Faith - * - * Acknowledgments: - * Dec 1999, Richard Henderson , move to generic cmpxchg. - */ - -/* - * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef _DRM_H_ -#define _DRM_H_ - -#if defined(__linux__) - -#include -#include -typedef unsigned int drm_handle_t; - -#else /* One of the BSDs */ - -#include -#include -#include -typedef int8_t __s8; -typedef uint8_t __u8; -typedef int16_t __s16; -typedef uint16_t __u16; -typedef int32_t __s32; -typedef uint32_t __u32; -typedef int64_t __s64; -typedef uint64_t __u64; -typedef size_t __kernel_size_t; -typedef unsigned long drm_handle_t; - -#endif - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_NAME "drm" /**< Name in kernel, /dev, and /proc */ -#define DRM_MIN_ORDER 5 /**< At least 2^5 bytes = 32 bytes */ -#define DRM_MAX_ORDER 22 /**< Up to 2^22 bytes = 4MB */ -#define DRM_RAM_PERCENT 10 /**< How much system ram can we lock? */ - -#define _DRM_LOCK_HELD 0x80000000U /**< Hardware lock is held */ -#define _DRM_LOCK_CONT 0x40000000U /**< Hardware lock is contended */ -#define _DRM_LOCK_IS_HELD(lock) ((lock) & _DRM_LOCK_HELD) -#define _DRM_LOCK_IS_CONT(lock) ((lock) & _DRM_LOCK_CONT) -#define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT)) - -typedef unsigned int drm_context_t; -typedef unsigned int drm_drawable_t; -typedef unsigned int drm_magic_t; - -/* - * Cliprect. - * - * \warning: If you change this structure, make sure you change - * XF86DRIClipRectRec in the server as well - * - * \note KW: Actually it's illegal to change either for - * backwards-compatibility reasons. - */ -struct drm_clip_rect { - unsigned short x1; - unsigned short y1; - unsigned short x2; - unsigned short y2; -}; - -/* - * Drawable information. - */ -struct drm_drawable_info { - unsigned int num_rects; - struct drm_clip_rect *rects; -}; - -/* - * Texture region, - */ -struct drm_tex_region { - unsigned char next; - unsigned char prev; - unsigned char in_use; - unsigned char padding; - unsigned int age; -}; - -/* - * Hardware lock. - * - * The lock structure is a simple cache-line aligned integer. To avoid - * processor bus contention on a multiprocessor system, there should not be any - * other data stored in the same cache line. - */ -struct drm_hw_lock { - __volatile__ unsigned int lock; /**< lock variable */ - char padding[60]; /**< Pad to cache line */ -}; - -/* - * DRM_IOCTL_VERSION ioctl argument type. - * - * \sa drmGetVersion(). - */ -struct drm_version { - int version_major; /**< Major version */ - int version_minor; /**< Minor version */ - int version_patchlevel; /**< Patch level */ - __kernel_size_t name_len; /**< Length of name buffer */ - char *name; /**< Name of driver */ - __kernel_size_t date_len; /**< Length of date buffer */ - char *date; /**< User-space buffer to hold date */ - __kernel_size_t desc_len; /**< Length of desc buffer */ - char *desc; /**< User-space buffer to hold desc */ -}; - -/* - * DRM_IOCTL_GET_UNIQUE ioctl argument type. - * - * \sa drmGetBusid() and drmSetBusId(). - */ -struct drm_unique { - __kernel_size_t unique_len; /**< Length of unique */ - char *unique; /**< Unique name for driver instantiation */ -}; - -struct drm_list { - int count; /**< Length of user-space structures */ - struct drm_version *version; -}; - -struct drm_block { - int unused; -}; - -/* - * DRM_IOCTL_CONTROL ioctl argument type. - * - * \sa drmCtlInstHandler() and drmCtlUninstHandler(). - */ -struct drm_control { - enum { - DRM_ADD_COMMAND, - DRM_RM_COMMAND, - DRM_INST_HANDLER, - DRM_UNINST_HANDLER - } func; - int irq; -}; - -/* - * Type of memory to map. - */ -enum drm_map_type { - _DRM_FRAME_BUFFER = 0, /**< WC (no caching), no core dump */ - _DRM_REGISTERS = 1, /**< no caching, no core dump */ - _DRM_SHM = 2, /**< shared, cached */ - _DRM_AGP = 3, /**< AGP/GART */ - _DRM_SCATTER_GATHER = 4, /**< Scatter/gather memory for PCI DMA */ - _DRM_CONSISTENT = 5 /**< Consistent memory for PCI DMA */ -}; - -/* - * Memory mapping flags. - */ -enum drm_map_flags { - _DRM_RESTRICTED = 0x01, /**< Cannot be mapped to user-virtual */ - _DRM_READ_ONLY = 0x02, - _DRM_LOCKED = 0x04, /**< shared, cached, locked */ - _DRM_KERNEL = 0x08, /**< kernel requires access */ - _DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */ - _DRM_CONTAINS_LOCK = 0x20, /**< SHM page that contains lock */ - _DRM_REMOVABLE = 0x40, /**< Removable mapping */ - _DRM_DRIVER = 0x80 /**< Managed by driver */ -}; - -struct drm_ctx_priv_map { - unsigned int ctx_id; /**< Context requesting private mapping */ - void *handle; /**< Handle of map */ -}; - -/* - * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls - * argument type. - * - * \sa drmAddMap(). - */ -struct drm_map { - unsigned long offset; /**< Requested physical address (0 for SAREA)*/ - unsigned long size; /**< Requested physical size (bytes) */ - enum drm_map_type type; /**< Type of memory to map */ - enum drm_map_flags flags; /**< Flags */ - void *handle; /**< User-space: "Handle" to pass to mmap() */ - /**< Kernel-space: kernel-virtual address */ - int mtrr; /**< MTRR slot used */ - /* Private data */ -}; - -/* - * DRM_IOCTL_GET_CLIENT ioctl argument type. - */ -struct drm_client { - int idx; /**< Which client desired? */ - int auth; /**< Is client authenticated? */ - unsigned long pid; /**< Process ID */ - unsigned long uid; /**< User ID */ - unsigned long magic; /**< Magic */ - unsigned long iocs; /**< Ioctl count */ -}; - -enum drm_stat_type { - _DRM_STAT_LOCK, - _DRM_STAT_OPENS, - _DRM_STAT_CLOSES, - _DRM_STAT_IOCTLS, - _DRM_STAT_LOCKS, - _DRM_STAT_UNLOCKS, - _DRM_STAT_VALUE, /**< Generic value */ - _DRM_STAT_BYTE, /**< Generic byte counter (1024bytes/K) */ - _DRM_STAT_COUNT, /**< Generic non-byte counter (1000/k) */ - - _DRM_STAT_IRQ, /**< IRQ */ - _DRM_STAT_PRIMARY, /**< Primary DMA bytes */ - _DRM_STAT_SECONDARY, /**< Secondary DMA bytes */ - _DRM_STAT_DMA, /**< DMA */ - _DRM_STAT_SPECIAL, /**< Special DMA (e.g., priority or polled) */ - _DRM_STAT_MISSED /**< Missed DMA opportunity */ - /* Add to the *END* of the list */ -}; - -/* - * DRM_IOCTL_GET_STATS ioctl argument type. - */ -struct drm_stats { - unsigned long count; - struct { - unsigned long value; - enum drm_stat_type type; - } data[15]; -}; - -/* - * Hardware locking flags. - */ -enum drm_lock_flags { - _DRM_LOCK_READY = 0x01, /**< Wait until hardware is ready for DMA */ - _DRM_LOCK_QUIESCENT = 0x02, /**< Wait until hardware quiescent */ - _DRM_LOCK_FLUSH = 0x04, /**< Flush this context's DMA queue first */ - _DRM_LOCK_FLUSH_ALL = 0x08, /**< Flush all DMA queues first */ - /* These *HALT* flags aren't supported yet - -- they will be used to support the - full-screen DGA-like mode. */ - _DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */ - _DRM_HALT_CUR_QUEUES = 0x20 /**< Halt all current queues */ -}; - -/* - * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type. - * - * \sa drmGetLock() and drmUnlock(). - */ -struct drm_lock { - int context; - enum drm_lock_flags flags; -}; - -/* - * DMA flags - * - * \warning - * These values \e must match xf86drm.h. - * - * \sa drm_dma. - */ -enum drm_dma_flags { - /* Flags for DMA buffer dispatch */ - _DRM_DMA_BLOCK = 0x01, /**< - * Block until buffer dispatched. - * - * \note The buffer may not yet have - * been processed by the hardware -- - * getting a hardware lock with the - * hardware quiescent will ensure - * that the buffer has been - * processed. - */ - _DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */ - _DRM_DMA_PRIORITY = 0x04, /**< High priority dispatch */ - - /* Flags for DMA buffer request */ - _DRM_DMA_WAIT = 0x10, /**< Wait for free buffers */ - _DRM_DMA_SMALLER_OK = 0x20, /**< Smaller-than-requested buffers OK */ - _DRM_DMA_LARGER_OK = 0x40 /**< Larger-than-requested buffers OK */ -}; - -/* - * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type. - * - * \sa drmAddBufs(). - */ -struct drm_buf_desc { - int count; /**< Number of buffers of this size */ - int size; /**< Size in bytes */ - int low_mark; /**< Low water mark */ - int high_mark; /**< High water mark */ - enum { - _DRM_PAGE_ALIGN = 0x01, /**< Align on page boundaries for DMA */ - _DRM_AGP_BUFFER = 0x02, /**< Buffer is in AGP space */ - _DRM_SG_BUFFER = 0x04, /**< Scatter/gather memory buffer */ - _DRM_FB_BUFFER = 0x08, /**< Buffer is in frame buffer */ - _DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */ - } flags; - unsigned long agp_start; /**< - * Start address of where the AGP buffers are - * in the AGP aperture - */ -}; - -/* - * DRM_IOCTL_INFO_BUFS ioctl argument type. - */ -struct drm_buf_info { - int count; /**< Entries in list */ - struct drm_buf_desc *list; -}; - -/* - * DRM_IOCTL_FREE_BUFS ioctl argument type. - */ -struct drm_buf_free { - int count; - int *list; -}; - -/* - * Buffer information - * - * \sa drm_buf_map. - */ -struct drm_buf_pub { - int idx; /**< Index into the master buffer list */ - int total; /**< Buffer size */ - int used; /**< Amount of buffer in use (for DMA) */ - void *address; /**< Address of buffer */ -}; - -/* - * DRM_IOCTL_MAP_BUFS ioctl argument type. - */ -struct drm_buf_map { - int count; /**< Length of the buffer list */ -#ifdef __cplusplus - void *virt; -#else - void *virtual; /**< Mmap'd area in user-virtual */ -#endif - struct drm_buf_pub *list; /**< Buffer information */ -}; - -/* - * DRM_IOCTL_DMA ioctl argument type. - * - * Indices here refer to the offset into the buffer list in drm_buf_get. - * - * \sa drmDMA(). - */ -struct drm_dma { - int context; /**< Context handle */ - int send_count; /**< Number of buffers to send */ - int *send_indices; /**< List of handles to buffers */ - int *send_sizes; /**< Lengths of data to send */ - enum drm_dma_flags flags; /**< Flags */ - int request_count; /**< Number of buffers requested */ - int request_size; /**< Desired size for buffers */ - int *request_indices; /**< Buffer information */ - int *request_sizes; - int granted_count; /**< Number of buffers granted */ -}; - -enum drm_ctx_flags { - _DRM_CONTEXT_PRESERVED = 0x01, - _DRM_CONTEXT_2DONLY = 0x02 -}; - -/* - * DRM_IOCTL_ADD_CTX ioctl argument type. - * - * \sa drmCreateContext() and drmDestroyContext(). - */ -struct drm_ctx { - drm_context_t handle; - enum drm_ctx_flags flags; -}; - -/* - * DRM_IOCTL_RES_CTX ioctl argument type. - */ -struct drm_ctx_res { - int count; - struct drm_ctx *contexts; -}; - -/* - * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type. - */ -struct drm_draw { - drm_drawable_t handle; -}; - -/* - * DRM_IOCTL_UPDATE_DRAW ioctl argument type. - */ -typedef enum { - DRM_DRAWABLE_CLIPRECTS -} drm_drawable_info_type_t; - -struct drm_update_draw { - drm_drawable_t handle; - unsigned int type; - unsigned int num; - unsigned long long data; -}; - -/* - * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type. - */ -struct drm_auth { - drm_magic_t magic; -}; - -/* - * DRM_IOCTL_IRQ_BUSID ioctl argument type. - * - * \sa drmGetInterruptFromBusID(). - */ -struct drm_irq_busid { - int irq; /**< IRQ number */ - int busnum; /**< bus number */ - int devnum; /**< device number */ - int funcnum; /**< function number */ -}; - -enum drm_vblank_seq_type { - _DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */ - _DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */ - /* bits 1-6 are reserved for high crtcs */ - _DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e, - _DRM_VBLANK_EVENT = 0x4000000, /**< Send event instead of blocking */ - _DRM_VBLANK_FLIP = 0x8000000, /**< Scheduled buffer swap should flip */ - _DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */ - _DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */ - _DRM_VBLANK_SIGNAL = 0x40000000 /**< Send signal instead of blocking, unsupported */ -}; -#define _DRM_VBLANK_HIGH_CRTC_SHIFT 1 - -#define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE) -#define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_EVENT | _DRM_VBLANK_SIGNAL | \ - _DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS) - -struct drm_wait_vblank_request { - enum drm_vblank_seq_type type; - unsigned int sequence; - unsigned long signal; -}; - -struct drm_wait_vblank_reply { - enum drm_vblank_seq_type type; - unsigned int sequence; - long tval_sec; - long tval_usec; -}; - -/* - * DRM_IOCTL_WAIT_VBLANK ioctl argument type. - * - * \sa drmWaitVBlank(). - */ -union drm_wait_vblank { - struct drm_wait_vblank_request request; - struct drm_wait_vblank_reply reply; -}; - -#define _DRM_PRE_MODESET 1 -#define _DRM_POST_MODESET 2 - -/* - * DRM_IOCTL_MODESET_CTL ioctl argument type - * - * \sa drmModesetCtl(). - */ -struct drm_modeset_ctl { - __u32 crtc; - __u32 cmd; -}; - -/* - * DRM_IOCTL_AGP_ENABLE ioctl argument type. - * - * \sa drmAgpEnable(). - */ -struct drm_agp_mode { - unsigned long mode; /**< AGP mode */ -}; - -/* - * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type. - * - * \sa drmAgpAlloc() and drmAgpFree(). - */ -struct drm_agp_buffer { - unsigned long size; /**< In bytes -- will round to page boundary */ - unsigned long handle; /**< Used for binding / unbinding */ - unsigned long type; /**< Type of memory to allocate */ - unsigned long physical; /**< Physical used by i810 */ -}; - -/* - * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type. - * - * \sa drmAgpBind() and drmAgpUnbind(). - */ -struct drm_agp_binding { - unsigned long handle; /**< From drm_agp_buffer */ - unsigned long offset; /**< In bytes -- will round to page boundary */ -}; - -/* - * DRM_IOCTL_AGP_INFO ioctl argument type. - * - * \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(), - * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(), - * drmAgpVendorId() and drmAgpDeviceId(). - */ -struct drm_agp_info { - int agp_version_major; - int agp_version_minor; - unsigned long mode; - unsigned long aperture_base; /* physical address */ - unsigned long aperture_size; /* bytes */ - unsigned long memory_allowed; /* bytes */ - unsigned long memory_used; - - /* PCI information */ - unsigned short id_vendor; - unsigned short id_device; -}; - -/* - * DRM_IOCTL_SG_ALLOC ioctl argument type. - */ -struct drm_scatter_gather { - unsigned long size; /**< In bytes -- will round to page boundary */ - unsigned long handle; /**< Used for mapping / unmapping */ -}; - -/* - * DRM_IOCTL_SET_VERSION ioctl argument type. - */ -struct drm_set_version { - int drm_di_major; - int drm_di_minor; - int drm_dd_major; - int drm_dd_minor; -}; - -/* DRM_IOCTL_GEM_CLOSE ioctl argument type */ -struct drm_gem_close { - /** Handle of the object to be closed. */ - __u32 handle; - __u32 pad; -}; - -/* DRM_IOCTL_GEM_FLINK ioctl argument type */ -struct drm_gem_flink { - /** Handle for the object being named */ - __u32 handle; - - /** Returned global name */ - __u32 name; -}; - -/* DRM_IOCTL_GEM_OPEN ioctl argument type */ -struct drm_gem_open { - /** Name of object being opened */ - __u32 name; - - /** Returned handle for the object */ - __u32 handle; - - /** Returned size of the object */ - __u64 size; -}; - -/** - * DRM_CAP_DUMB_BUFFER - * - * If set to 1, the driver supports creating dumb buffers via the - * &DRM_IOCTL_MODE_CREATE_DUMB ioctl. - */ -#define DRM_CAP_DUMB_BUFFER 0x1 -/** - * DRM_CAP_VBLANK_HIGH_CRTC - * - * If set to 1, the kernel supports specifying a CRTC index in the high bits of - * &drm_wait_vblank_request.type. - * - * Starting kernel version 2.6.39, this capability is always set to 1. - */ -#define DRM_CAP_VBLANK_HIGH_CRTC 0x2 -/** - * DRM_CAP_DUMB_PREFERRED_DEPTH - * - * The preferred bit depth for dumb buffers. - * - * The bit depth is the number of bits used to indicate the color of a single - * pixel excluding any padding. This is different from the number of bits per - * pixel. For instance, XRGB8888 has a bit depth of 24 but has 32 bits per - * pixel. - * - * Note that this preference only applies to dumb buffers, it's irrelevant for - * other types of buffers. - */ -#define DRM_CAP_DUMB_PREFERRED_DEPTH 0x3 -/** - * DRM_CAP_DUMB_PREFER_SHADOW - * - * If set to 1, the driver prefers userspace to render to a shadow buffer - * instead of directly rendering to a dumb buffer. For best speed, userspace - * should do streaming ordered memory copies into the dumb buffer and never - * read from it. - * - * Note that this preference only applies to dumb buffers, it's irrelevant for - * other types of buffers. - */ -#define DRM_CAP_DUMB_PREFER_SHADOW 0x4 -/** - * DRM_CAP_PRIME - * - * Bitfield of supported PRIME sharing capabilities. See &DRM_PRIME_CAP_IMPORT - * and &DRM_PRIME_CAP_EXPORT. - * - * PRIME buffers are exposed as dma-buf file descriptors. See - * Documentation/gpu/drm-mm.rst, section "PRIME Buffer Sharing". - */ -#define DRM_CAP_PRIME 0x5 -/** - * DRM_PRIME_CAP_IMPORT - * - * If this bit is set in &DRM_CAP_PRIME, the driver supports importing PRIME - * buffers via the &DRM_IOCTL_PRIME_FD_TO_HANDLE ioctl. - */ -#define DRM_PRIME_CAP_IMPORT 0x1 -/** - * DRM_PRIME_CAP_EXPORT - * - * If this bit is set in &DRM_CAP_PRIME, the driver supports exporting PRIME - * buffers via the &DRM_IOCTL_PRIME_HANDLE_TO_FD ioctl. - */ -#define DRM_PRIME_CAP_EXPORT 0x2 -/** - * DRM_CAP_TIMESTAMP_MONOTONIC - * - * If set to 0, the kernel will report timestamps with ``CLOCK_REALTIME`` in - * struct drm_event_vblank. If set to 1, the kernel will report timestamps with - * ``CLOCK_MONOTONIC``. See ``clock_gettime(2)`` for the definition of these - * clocks. - * - * Starting from kernel version 2.6.39, the default value for this capability - * is 1. Starting kernel version 4.15, this capability is always set to 1. - */ -#define DRM_CAP_TIMESTAMP_MONOTONIC 0x6 -/** - * DRM_CAP_ASYNC_PAGE_FLIP - * - * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC. - */ -#define DRM_CAP_ASYNC_PAGE_FLIP 0x7 -/** - * DRM_CAP_CURSOR_WIDTH - * - * The ``CURSOR_WIDTH`` and ``CURSOR_HEIGHT`` capabilities return a valid - * width x height combination for the hardware cursor. The intention is that a - * hardware agnostic userspace can query a cursor plane size to use. - * - * Note that the cross-driver contract is to merely return a valid size; - * drivers are free to attach another meaning on top, eg. i915 returns the - * maximum plane size. - */ -#define DRM_CAP_CURSOR_WIDTH 0x8 -/** - * DRM_CAP_CURSOR_HEIGHT - * - * See &DRM_CAP_CURSOR_WIDTH. - */ -#define DRM_CAP_CURSOR_HEIGHT 0x9 -/** - * DRM_CAP_ADDFB2_MODIFIERS - * - * If set to 1, the driver supports supplying modifiers in the - * &DRM_IOCTL_MODE_ADDFB2 ioctl. - */ -#define DRM_CAP_ADDFB2_MODIFIERS 0x10 -/** - * DRM_CAP_PAGE_FLIP_TARGET - * - * If set to 1, the driver supports the &DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE and - * &DRM_MODE_PAGE_FLIP_TARGET_RELATIVE flags in - * &drm_mode_crtc_page_flip_target.flags for the &DRM_IOCTL_MODE_PAGE_FLIP - * ioctl. - */ -#define DRM_CAP_PAGE_FLIP_TARGET 0x11 -/** - * DRM_CAP_CRTC_IN_VBLANK_EVENT - * - * If set to 1, the kernel supports reporting the CRTC ID in - * &drm_event_vblank.crtc_id for the &DRM_EVENT_VBLANK and - * &DRM_EVENT_FLIP_COMPLETE events. - * - * Starting kernel version 4.12, this capability is always set to 1. - */ -#define DRM_CAP_CRTC_IN_VBLANK_EVENT 0x12 -/** - * DRM_CAP_SYNCOBJ - * - * If set to 1, the driver supports sync objects. See - * Documentation/gpu/drm-mm.rst, section "DRM Sync Objects". - */ -#define DRM_CAP_SYNCOBJ 0x13 -/** - * DRM_CAP_SYNCOBJ_TIMELINE - * - * If set to 1, the driver supports timeline operations on sync objects. See - * Documentation/gpu/drm-mm.rst, section "DRM Sync Objects". - */ -#define DRM_CAP_SYNCOBJ_TIMELINE 0x14 - -/* DRM_IOCTL_GET_CAP ioctl argument type */ -struct drm_get_cap { - __u64 capability; - __u64 value; -}; - -/** - * DRM_CLIENT_CAP_STEREO_3D - * - * If set to 1, the DRM core will expose the stereo 3D capabilities of the - * monitor by advertising the supported 3D layouts in the flags of struct - * drm_mode_modeinfo. See ``DRM_MODE_FLAG_3D_*``. - * - * This capability is always supported for all drivers starting from kernel - * version 3.13. - */ -#define DRM_CLIENT_CAP_STEREO_3D 1 - -/** - * DRM_CLIENT_CAP_UNIVERSAL_PLANES - * - * If set to 1, the DRM core will expose all planes (overlay, primary, and - * cursor) to userspace. - * - * This capability has been introduced in kernel version 3.15. Starting from - * kernel version 3.17, this capability is always supported for all drivers. - */ -#define DRM_CLIENT_CAP_UNIVERSAL_PLANES 2 - -/** - * DRM_CLIENT_CAP_ATOMIC - * - * If set to 1, the DRM core will expose atomic properties to userspace. This - * implicitly enables &DRM_CLIENT_CAP_UNIVERSAL_PLANES and - * &DRM_CLIENT_CAP_ASPECT_RATIO. - * - * If the driver doesn't support atomic mode-setting, enabling this capability - * will fail with -EOPNOTSUPP. - * - * This capability has been introduced in kernel version 4.0. Starting from - * kernel version 4.2, this capability is always supported for atomic-capable - * drivers. - */ -#define DRM_CLIENT_CAP_ATOMIC 3 - -/** - * DRM_CLIENT_CAP_ASPECT_RATIO - * - * If set to 1, the DRM core will provide aspect ratio information in modes. - * See ``DRM_MODE_FLAG_PIC_AR_*``. - * - * This capability is always supported for all drivers starting from kernel - * version 4.18. - */ -#define DRM_CLIENT_CAP_ASPECT_RATIO 4 - -/** - * DRM_CLIENT_CAP_WRITEBACK_CONNECTORS - * - * If set to 1, the DRM core will expose special connectors to be used for - * writing back to memory the scene setup in the commit. The client must enable - * &DRM_CLIENT_CAP_ATOMIC first. - * - * This capability is always supported for atomic-capable drivers starting from - * kernel version 4.19. - */ -#define DRM_CLIENT_CAP_WRITEBACK_CONNECTORS 5 - -/* DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */ -struct drm_set_client_cap { - __u64 capability; - __u64 value; -}; - -#define DRM_RDWR O_RDWR -#define DRM_CLOEXEC O_CLOEXEC -struct drm_prime_handle { - __u32 handle; - - /** Flags.. only applicable for handle->fd */ - __u32 flags; - - /** Returned dmabuf file descriptor */ - __s32 fd; -}; - -struct drm_syncobj_create { - __u32 handle; -#define DRM_SYNCOBJ_CREATE_SIGNALED (1 << 0) - __u32 flags; -}; - -struct drm_syncobj_destroy { - __u32 handle; - __u32 pad; -}; - -#define DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE (1 << 0) -#define DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE (1 << 0) -struct drm_syncobj_handle { - __u32 handle; - __u32 flags; - - __s32 fd; - __u32 pad; -}; - -struct drm_syncobj_transfer { - __u32 src_handle; - __u32 dst_handle; - __u64 src_point; - __u64 dst_point; - __u32 flags; - __u32 pad; -}; - -#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0) -#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1) -#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE (1 << 2) /* wait for time point to become available */ -struct drm_syncobj_wait { - __u64 handles; - /* absolute timeout */ - __s64 timeout_nsec; - __u32 count_handles; - __u32 flags; - __u32 first_signaled; /* only valid when not waiting all */ - __u32 pad; -}; - -struct drm_syncobj_timeline_wait { - __u64 handles; - /* wait on specific timeline point for every handles*/ - __u64 points; - /* absolute timeout */ - __s64 timeout_nsec; - __u32 count_handles; - __u32 flags; - __u32 first_signaled; /* only valid when not waiting all */ - __u32 pad; -}; - - -struct drm_syncobj_array { - __u64 handles; - __u32 count_handles; - __u32 pad; -}; - -#define DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED (1 << 0) /* last available point on timeline syncobj */ -struct drm_syncobj_timeline_array { - __u64 handles; - __u64 points; - __u32 count_handles; - __u32 flags; -}; - - -/* Query current scanout sequence number */ -struct drm_crtc_get_sequence { - __u32 crtc_id; /* requested crtc_id */ - __u32 active; /* return: crtc output is active */ - __u64 sequence; /* return: most recent vblank sequence */ - __s64 sequence_ns; /* return: most recent time of first pixel out */ -}; - -/* Queue event to be delivered at specified sequence. Time stamp marks - * when the first pixel of the refresh cycle leaves the display engine - * for the display - */ -#define DRM_CRTC_SEQUENCE_RELATIVE 0x00000001 /* sequence is relative to current */ -#define DRM_CRTC_SEQUENCE_NEXT_ON_MISS 0x00000002 /* Use next sequence if we've missed */ - -struct drm_crtc_queue_sequence { - __u32 crtc_id; - __u32 flags; - __u64 sequence; /* on input, target sequence. on output, actual sequence */ - __u64 user_data; /* user data passed to event */ -}; - -#if defined(__cplusplus) -} -#endif - -#include "drm_mode.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_IOCTL_BASE 'd' -#define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr) -#define DRM_IOR(nr,type) _IOR(DRM_IOCTL_BASE,nr,type) -#define DRM_IOW(nr,type) _IOW(DRM_IOCTL_BASE,nr,type) -#define DRM_IOWR(nr,type) _IOWR(DRM_IOCTL_BASE,nr,type) - -#define DRM_IOCTL_VERSION DRM_IOWR(0x00, struct drm_version) -#define DRM_IOCTL_GET_UNIQUE DRM_IOWR(0x01, struct drm_unique) -#define DRM_IOCTL_GET_MAGIC DRM_IOR( 0x02, struct drm_auth) -#define DRM_IOCTL_IRQ_BUSID DRM_IOWR(0x03, struct drm_irq_busid) -#define DRM_IOCTL_GET_MAP DRM_IOWR(0x04, struct drm_map) -#define DRM_IOCTL_GET_CLIENT DRM_IOWR(0x05, struct drm_client) -#define DRM_IOCTL_GET_STATS DRM_IOR( 0x06, struct drm_stats) -#define DRM_IOCTL_SET_VERSION DRM_IOWR(0x07, struct drm_set_version) -#define DRM_IOCTL_MODESET_CTL DRM_IOW(0x08, struct drm_modeset_ctl) -#define DRM_IOCTL_GEM_CLOSE DRM_IOW (0x09, struct drm_gem_close) -#define DRM_IOCTL_GEM_FLINK DRM_IOWR(0x0a, struct drm_gem_flink) -#define DRM_IOCTL_GEM_OPEN DRM_IOWR(0x0b, struct drm_gem_open) -#define DRM_IOCTL_GET_CAP DRM_IOWR(0x0c, struct drm_get_cap) -#define DRM_IOCTL_SET_CLIENT_CAP DRM_IOW( 0x0d, struct drm_set_client_cap) - -#define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, struct drm_unique) -#define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, struct drm_auth) -#define DRM_IOCTL_BLOCK DRM_IOWR(0x12, struct drm_block) -#define DRM_IOCTL_UNBLOCK DRM_IOWR(0x13, struct drm_block) -#define DRM_IOCTL_CONTROL DRM_IOW( 0x14, struct drm_control) -#define DRM_IOCTL_ADD_MAP DRM_IOWR(0x15, struct drm_map) -#define DRM_IOCTL_ADD_BUFS DRM_IOWR(0x16, struct drm_buf_desc) -#define DRM_IOCTL_MARK_BUFS DRM_IOW( 0x17, struct drm_buf_desc) -#define DRM_IOCTL_INFO_BUFS DRM_IOWR(0x18, struct drm_buf_info) -#define DRM_IOCTL_MAP_BUFS DRM_IOWR(0x19, struct drm_buf_map) -#define DRM_IOCTL_FREE_BUFS DRM_IOW( 0x1a, struct drm_buf_free) - -#define DRM_IOCTL_RM_MAP DRM_IOW( 0x1b, struct drm_map) - -#define DRM_IOCTL_SET_SAREA_CTX DRM_IOW( 0x1c, struct drm_ctx_priv_map) -#define DRM_IOCTL_GET_SAREA_CTX DRM_IOWR(0x1d, struct drm_ctx_priv_map) - -#define DRM_IOCTL_SET_MASTER DRM_IO(0x1e) -#define DRM_IOCTL_DROP_MASTER DRM_IO(0x1f) - -#define DRM_IOCTL_ADD_CTX DRM_IOWR(0x20, struct drm_ctx) -#define DRM_IOCTL_RM_CTX DRM_IOWR(0x21, struct drm_ctx) -#define DRM_IOCTL_MOD_CTX DRM_IOW( 0x22, struct drm_ctx) -#define DRM_IOCTL_GET_CTX DRM_IOWR(0x23, struct drm_ctx) -#define DRM_IOCTL_SWITCH_CTX DRM_IOW( 0x24, struct drm_ctx) -#define DRM_IOCTL_NEW_CTX DRM_IOW( 0x25, struct drm_ctx) -#define DRM_IOCTL_RES_CTX DRM_IOWR(0x26, struct drm_ctx_res) -#define DRM_IOCTL_ADD_DRAW DRM_IOWR(0x27, struct drm_draw) -#define DRM_IOCTL_RM_DRAW DRM_IOWR(0x28, struct drm_draw) -#define DRM_IOCTL_DMA DRM_IOWR(0x29, struct drm_dma) -#define DRM_IOCTL_LOCK DRM_IOW( 0x2a, struct drm_lock) -#define DRM_IOCTL_UNLOCK DRM_IOW( 0x2b, struct drm_lock) -#define DRM_IOCTL_FINISH DRM_IOW( 0x2c, struct drm_lock) - -#define DRM_IOCTL_PRIME_HANDLE_TO_FD DRM_IOWR(0x2d, struct drm_prime_handle) -#define DRM_IOCTL_PRIME_FD_TO_HANDLE DRM_IOWR(0x2e, struct drm_prime_handle) - -#define DRM_IOCTL_AGP_ACQUIRE DRM_IO( 0x30) -#define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31) -#define DRM_IOCTL_AGP_ENABLE DRM_IOW( 0x32, struct drm_agp_mode) -#define DRM_IOCTL_AGP_INFO DRM_IOR( 0x33, struct drm_agp_info) -#define DRM_IOCTL_AGP_ALLOC DRM_IOWR(0x34, struct drm_agp_buffer) -#define DRM_IOCTL_AGP_FREE DRM_IOW( 0x35, struct drm_agp_buffer) -#define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding) -#define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding) - -#define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather) -#define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather) - -#define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank) - -#define DRM_IOCTL_CRTC_GET_SEQUENCE DRM_IOWR(0x3b, struct drm_crtc_get_sequence) -#define DRM_IOCTL_CRTC_QUEUE_SEQUENCE DRM_IOWR(0x3c, struct drm_crtc_queue_sequence) - -#define DRM_IOCTL_UPDATE_DRAW DRM_IOW(0x3f, struct drm_update_draw) - -#define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res) -#define DRM_IOCTL_MODE_GETCRTC DRM_IOWR(0xA1, struct drm_mode_crtc) -#define DRM_IOCTL_MODE_SETCRTC DRM_IOWR(0xA2, struct drm_mode_crtc) -#define DRM_IOCTL_MODE_CURSOR DRM_IOWR(0xA3, struct drm_mode_cursor) -#define DRM_IOCTL_MODE_GETGAMMA DRM_IOWR(0xA4, struct drm_mode_crtc_lut) -#define DRM_IOCTL_MODE_SETGAMMA DRM_IOWR(0xA5, struct drm_mode_crtc_lut) -#define DRM_IOCTL_MODE_GETENCODER DRM_IOWR(0xA6, struct drm_mode_get_encoder) -#define DRM_IOCTL_MODE_GETCONNECTOR DRM_IOWR(0xA7, struct drm_mode_get_connector) -#define DRM_IOCTL_MODE_ATTACHMODE DRM_IOWR(0xA8, struct drm_mode_mode_cmd) /* deprecated (never worked) */ -#define DRM_IOCTL_MODE_DETACHMODE DRM_IOWR(0xA9, struct drm_mode_mode_cmd) /* deprecated (never worked) */ - -#define DRM_IOCTL_MODE_GETPROPERTY DRM_IOWR(0xAA, struct drm_mode_get_property) -#define DRM_IOCTL_MODE_SETPROPERTY DRM_IOWR(0xAB, struct drm_mode_connector_set_property) -#define DRM_IOCTL_MODE_GETPROPBLOB DRM_IOWR(0xAC, struct drm_mode_get_blob) -#define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd) -#define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd) -#define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int) -#define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOWR(0xB0, struct drm_mode_crtc_page_flip) -#define DRM_IOCTL_MODE_DIRTYFB DRM_IOWR(0xB1, struct drm_mode_fb_dirty_cmd) - -#define DRM_IOCTL_MODE_CREATE_DUMB DRM_IOWR(0xB2, struct drm_mode_create_dumb) -#define DRM_IOCTL_MODE_MAP_DUMB DRM_IOWR(0xB3, struct drm_mode_map_dumb) -#define DRM_IOCTL_MODE_DESTROY_DUMB DRM_IOWR(0xB4, struct drm_mode_destroy_dumb) -#define DRM_IOCTL_MODE_GETPLANERESOURCES DRM_IOWR(0xB5, struct drm_mode_get_plane_res) -#define DRM_IOCTL_MODE_GETPLANE DRM_IOWR(0xB6, struct drm_mode_get_plane) -#define DRM_IOCTL_MODE_SETPLANE DRM_IOWR(0xB7, struct drm_mode_set_plane) -#define DRM_IOCTL_MODE_ADDFB2 DRM_IOWR(0xB8, struct drm_mode_fb_cmd2) -#define DRM_IOCTL_MODE_OBJ_GETPROPERTIES DRM_IOWR(0xB9, struct drm_mode_obj_get_properties) -#define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct drm_mode_obj_set_property) -#define DRM_IOCTL_MODE_CURSOR2 DRM_IOWR(0xBB, struct drm_mode_cursor2) -#define DRM_IOCTL_MODE_ATOMIC DRM_IOWR(0xBC, struct drm_mode_atomic) -#define DRM_IOCTL_MODE_CREATEPROPBLOB DRM_IOWR(0xBD, struct drm_mode_create_blob) -#define DRM_IOCTL_MODE_DESTROYPROPBLOB DRM_IOWR(0xBE, struct drm_mode_destroy_blob) - -#define DRM_IOCTL_SYNCOBJ_CREATE DRM_IOWR(0xBF, struct drm_syncobj_create) -#define DRM_IOCTL_SYNCOBJ_DESTROY DRM_IOWR(0xC0, struct drm_syncobj_destroy) -#define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD DRM_IOWR(0xC1, struct drm_syncobj_handle) -#define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE DRM_IOWR(0xC2, struct drm_syncobj_handle) -#define DRM_IOCTL_SYNCOBJ_WAIT DRM_IOWR(0xC3, struct drm_syncobj_wait) -#define DRM_IOCTL_SYNCOBJ_RESET DRM_IOWR(0xC4, struct drm_syncobj_array) -#define DRM_IOCTL_SYNCOBJ_SIGNAL DRM_IOWR(0xC5, struct drm_syncobj_array) - -#define DRM_IOCTL_MODE_CREATE_LEASE DRM_IOWR(0xC6, struct drm_mode_create_lease) -#define DRM_IOCTL_MODE_LIST_LESSEES DRM_IOWR(0xC7, struct drm_mode_list_lessees) -#define DRM_IOCTL_MODE_GET_LEASE DRM_IOWR(0xC8, struct drm_mode_get_lease) -#define DRM_IOCTL_MODE_REVOKE_LEASE DRM_IOWR(0xC9, struct drm_mode_revoke_lease) - -#define DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT DRM_IOWR(0xCA, struct drm_syncobj_timeline_wait) -#define DRM_IOCTL_SYNCOBJ_QUERY DRM_IOWR(0xCB, struct drm_syncobj_timeline_array) -#define DRM_IOCTL_SYNCOBJ_TRANSFER DRM_IOWR(0xCC, struct drm_syncobj_transfer) -#define DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL DRM_IOWR(0xCD, struct drm_syncobj_timeline_array) - -#define DRM_IOCTL_MODE_GETFB2 DRM_IOWR(0xCE, struct drm_mode_fb_cmd2) - -/* - * Device specific ioctls should only be in their respective headers - * The device specific ioctl range is from 0x40 to 0x9f. - * Generic IOCTLS restart at 0xA0. - * - * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and - * drmCommandReadWrite(). - */ -#define DRM_COMMAND_BASE 0x40 -#define DRM_COMMAND_END 0xA0 - -/* - * Header for events written back to userspace on the drm fd. The - * type defines the type of event, the length specifies the total - * length of the event (including the header), and user_data is - * typically a 64 bit value passed with the ioctl that triggered the - * event. A read on the drm fd will always only return complete - * events, that is, if for example the read buffer is 100 bytes, and - * there are two 64 byte events pending, only one will be returned. - * - * Event types 0 - 0x7fffffff are generic drm events, 0x80000000 and - * up are chipset specific. - */ -struct drm_event { - __u32 type; - __u32 length; -}; - -#define DRM_EVENT_VBLANK 0x01 -#define DRM_EVENT_FLIP_COMPLETE 0x02 -#define DRM_EVENT_CRTC_SEQUENCE 0x03 - -struct drm_event_vblank { - struct drm_event base; - __u64 user_data; - __u32 tv_sec; - __u32 tv_usec; - __u32 sequence; - __u32 crtc_id; /* 0 on older kernels that do not support this */ -}; - -/* Event delivered at sequence. Time stamp marks when the first pixel - * of the refresh cycle leaves the display engine for the display - */ -struct drm_event_crtc_sequence { - struct drm_event base; - __u64 user_data; - __s64 time_ns; - __u64 sequence; -}; - -/* typedef area */ -typedef struct drm_clip_rect drm_clip_rect_t; -typedef struct drm_drawable_info drm_drawable_info_t; -typedef struct drm_tex_region drm_tex_region_t; -typedef struct drm_hw_lock drm_hw_lock_t; -typedef struct drm_version drm_version_t; -typedef struct drm_unique drm_unique_t; -typedef struct drm_list drm_list_t; -typedef struct drm_block drm_block_t; -typedef struct drm_control drm_control_t; -typedef enum drm_map_type drm_map_type_t; -typedef enum drm_map_flags drm_map_flags_t; -typedef struct drm_ctx_priv_map drm_ctx_priv_map_t; -typedef struct drm_map drm_map_t; -typedef struct drm_client drm_client_t; -typedef enum drm_stat_type drm_stat_type_t; -typedef struct drm_stats drm_stats_t; -typedef enum drm_lock_flags drm_lock_flags_t; -typedef struct drm_lock drm_lock_t; -typedef enum drm_dma_flags drm_dma_flags_t; -typedef struct drm_buf_desc drm_buf_desc_t; -typedef struct drm_buf_info drm_buf_info_t; -typedef struct drm_buf_free drm_buf_free_t; -typedef struct drm_buf_pub drm_buf_pub_t; -typedef struct drm_buf_map drm_buf_map_t; -typedef struct drm_dma drm_dma_t; -typedef union drm_wait_vblank drm_wait_vblank_t; -typedef struct drm_agp_mode drm_agp_mode_t; -typedef enum drm_ctx_flags drm_ctx_flags_t; -typedef struct drm_ctx drm_ctx_t; -typedef struct drm_ctx_res drm_ctx_res_t; -typedef struct drm_draw drm_draw_t; -typedef struct drm_update_draw drm_update_draw_t; -typedef struct drm_auth drm_auth_t; -typedef struct drm_irq_busid drm_irq_busid_t; -typedef enum drm_vblank_seq_type drm_vblank_seq_type_t; - -typedef struct drm_agp_buffer drm_agp_buffer_t; -typedef struct drm_agp_binding drm_agp_binding_t; -typedef struct drm_agp_info drm_agp_info_t; -typedef struct drm_scatter_gather drm_scatter_gather_t; -typedef struct drm_set_version drm_set_version_t; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/arm/include/libdrm/drm_fourcc.h b/prebuilts/arm/include/libdrm/drm_fourcc.h deleted file mode 100644 index 957c7be..0000000 --- a/prebuilts/arm/include/libdrm/drm_fourcc.h +++ /dev/null @@ -1,1365 +0,0 @@ -/* - * Copyright 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef DRM_FOURCC_H -#define DRM_FOURCC_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/** - * DOC: overview - * - * In the DRM subsystem, framebuffer pixel formats are described using the - * fourcc codes defined in `include/uapi/drm/drm_fourcc.h`. In addition to the - * fourcc code, a Format Modifier may optionally be provided, in order to - * further describe the buffer's format - for example tiling or compression. - * - * Format Modifiers - * ---------------- - * - * Format modifiers are used in conjunction with a fourcc code, forming a - * unique fourcc:modifier pair. This format:modifier pair must fully define the - * format and data layout of the buffer, and should be the only way to describe - * that particular buffer. - * - * Having multiple fourcc:modifier pairs which describe the same layout should - * be avoided, as such aliases run the risk of different drivers exposing - * different names for the same data format, forcing userspace to understand - * that they are aliases. - * - * Format modifiers may change any property of the buffer, including the number - * of planes and/or the required allocation size. Format modifiers are - * vendor-namespaced, and as such the relationship between a fourcc code and a - * modifier is specific to the modifer being used. For example, some modifiers - * may preserve meaning - such as number of planes - from the fourcc code, - * whereas others may not. - * - * Modifiers must uniquely encode buffer layout. In other words, a buffer must - * match only a single modifier. A modifier must not be a subset of layouts of - * another modifier. For instance, it's incorrect to encode pitch alignment in - * a modifier: a buffer may match a 64-pixel aligned modifier and a 32-pixel - * aligned modifier. That said, modifiers can have implicit minimal - * requirements. - * - * For modifiers where the combination of fourcc code and modifier can alias, - * a canonical pair needs to be defined and used by all drivers. Preferred - * combinations are also encouraged where all combinations might lead to - * confusion and unnecessarily reduced interoperability. An example for the - * latter is AFBC, where the ABGR layouts are preferred over ARGB layouts. - * - * There are two kinds of modifier users: - * - * - Kernel and user-space drivers: for drivers it's important that modifiers - * don't alias, otherwise two drivers might support the same format but use - * different aliases, preventing them from sharing buffers in an efficient - * format. - * - Higher-level programs interfacing with KMS/GBM/EGL/Vulkan/etc: these users - * see modifiers as opaque tokens they can check for equality and intersect. - * These users musn't need to know to reason about the modifier value - * (i.e. they are not expected to extract information out of the modifier). - * - * Vendors should document their modifier usage in as much detail as - * possible, to ensure maximum compatibility across devices, drivers and - * applications. - * - * The authoritative list of format modifier codes is found in - * `include/uapi/drm/drm_fourcc.h` - */ - -#define fourcc_code(a, b, c, d) ((__u32)(a) | ((__u32)(b) << 8) | \ - ((__u32)(c) << 16) | ((__u32)(d) << 24)) - -#define DRM_FORMAT_BIG_ENDIAN (1U<<31) /* format is big endian instead of little endian */ - -/* Reserve 0 for the invalid format specifier */ -#define DRM_FORMAT_INVALID 0 - -/* color index */ -#define DRM_FORMAT_C8 fourcc_code('C', '8', ' ', ' ') /* [7:0] C */ - -/* 8 bpp Red */ -#define DRM_FORMAT_R8 fourcc_code('R', '8', ' ', ' ') /* [7:0] R */ - -/* 16 bpp Red */ -#define DRM_FORMAT_R16 fourcc_code('R', '1', '6', ' ') /* [15:0] R little endian */ - -/* 16 bpp RG */ -#define DRM_FORMAT_RG88 fourcc_code('R', 'G', '8', '8') /* [15:0] R:G 8:8 little endian */ -#define DRM_FORMAT_GR88 fourcc_code('G', 'R', '8', '8') /* [15:0] G:R 8:8 little endian */ - -/* 32 bpp RG */ -#define DRM_FORMAT_RG1616 fourcc_code('R', 'G', '3', '2') /* [31:0] R:G 16:16 little endian */ -#define DRM_FORMAT_GR1616 fourcc_code('G', 'R', '3', '2') /* [31:0] G:R 16:16 little endian */ - -/* 8 bpp RGB */ -#define DRM_FORMAT_RGB332 fourcc_code('R', 'G', 'B', '8') /* [7:0] R:G:B 3:3:2 */ -#define DRM_FORMAT_BGR233 fourcc_code('B', 'G', 'R', '8') /* [7:0] B:G:R 2:3:3 */ - -/* 16 bpp RGB */ -#define DRM_FORMAT_XRGB4444 fourcc_code('X', 'R', '1', '2') /* [15:0] x:R:G:B 4:4:4:4 little endian */ -#define DRM_FORMAT_XBGR4444 fourcc_code('X', 'B', '1', '2') /* [15:0] x:B:G:R 4:4:4:4 little endian */ -#define DRM_FORMAT_RGBX4444 fourcc_code('R', 'X', '1', '2') /* [15:0] R:G:B:x 4:4:4:4 little endian */ -#define DRM_FORMAT_BGRX4444 fourcc_code('B', 'X', '1', '2') /* [15:0] B:G:R:x 4:4:4:4 little endian */ - -#define DRM_FORMAT_ARGB4444 fourcc_code('A', 'R', '1', '2') /* [15:0] A:R:G:B 4:4:4:4 little endian */ -#define DRM_FORMAT_ABGR4444 fourcc_code('A', 'B', '1', '2') /* [15:0] A:B:G:R 4:4:4:4 little endian */ -#define DRM_FORMAT_RGBA4444 fourcc_code('R', 'A', '1', '2') /* [15:0] R:G:B:A 4:4:4:4 little endian */ -#define DRM_FORMAT_BGRA4444 fourcc_code('B', 'A', '1', '2') /* [15:0] B:G:R:A 4:4:4:4 little endian */ - -#define DRM_FORMAT_XRGB1555 fourcc_code('X', 'R', '1', '5') /* [15:0] x:R:G:B 1:5:5:5 little endian */ -#define DRM_FORMAT_XBGR1555 fourcc_code('X', 'B', '1', '5') /* [15:0] x:B:G:R 1:5:5:5 little endian */ -#define DRM_FORMAT_RGBX5551 fourcc_code('R', 'X', '1', '5') /* [15:0] R:G:B:x 5:5:5:1 little endian */ -#define DRM_FORMAT_BGRX5551 fourcc_code('B', 'X', '1', '5') /* [15:0] B:G:R:x 5:5:5:1 little endian */ - -#define DRM_FORMAT_ARGB1555 fourcc_code('A', 'R', '1', '5') /* [15:0] A:R:G:B 1:5:5:5 little endian */ -#define DRM_FORMAT_ABGR1555 fourcc_code('A', 'B', '1', '5') /* [15:0] A:B:G:R 1:5:5:5 little endian */ -#define DRM_FORMAT_RGBA5551 fourcc_code('R', 'A', '1', '5') /* [15:0] R:G:B:A 5:5:5:1 little endian */ -#define DRM_FORMAT_BGRA5551 fourcc_code('B', 'A', '1', '5') /* [15:0] B:G:R:A 5:5:5:1 little endian */ - -#define DRM_FORMAT_RGB565 fourcc_code('R', 'G', '1', '6') /* [15:0] R:G:B 5:6:5 little endian */ -#define DRM_FORMAT_BGR565 fourcc_code('B', 'G', '1', '6') /* [15:0] B:G:R 5:6:5 little endian */ - -/* 24 bpp RGB */ -#define DRM_FORMAT_RGB888 fourcc_code('R', 'G', '2', '4') /* [23:0] R:G:B little endian */ -#define DRM_FORMAT_BGR888 fourcc_code('B', 'G', '2', '4') /* [23:0] B:G:R little endian */ - -/* 32 bpp RGB */ -#define DRM_FORMAT_XRGB8888 fourcc_code('X', 'R', '2', '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */ -#define DRM_FORMAT_XBGR8888 fourcc_code('X', 'B', '2', '4') /* [31:0] x:B:G:R 8:8:8:8 little endian */ -#define DRM_FORMAT_RGBX8888 fourcc_code('R', 'X', '2', '4') /* [31:0] R:G:B:x 8:8:8:8 little endian */ -#define DRM_FORMAT_BGRX8888 fourcc_code('B', 'X', '2', '4') /* [31:0] B:G:R:x 8:8:8:8 little endian */ - -#define DRM_FORMAT_ARGB8888 fourcc_code('A', 'R', '2', '4') /* [31:0] A:R:G:B 8:8:8:8 little endian */ -#define DRM_FORMAT_ABGR8888 fourcc_code('A', 'B', '2', '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */ -#define DRM_FORMAT_RGBA8888 fourcc_code('R', 'A', '2', '4') /* [31:0] R:G:B:A 8:8:8:8 little endian */ -#define DRM_FORMAT_BGRA8888 fourcc_code('B', 'A', '2', '4') /* [31:0] B:G:R:A 8:8:8:8 little endian */ - -#define DRM_FORMAT_XRGB2101010 fourcc_code('X', 'R', '3', '0') /* [31:0] x:R:G:B 2:10:10:10 little endian */ -#define DRM_FORMAT_XBGR2101010 fourcc_code('X', 'B', '3', '0') /* [31:0] x:B:G:R 2:10:10:10 little endian */ -#define DRM_FORMAT_RGBX1010102 fourcc_code('R', 'X', '3', '0') /* [31:0] R:G:B:x 10:10:10:2 little endian */ -#define DRM_FORMAT_BGRX1010102 fourcc_code('B', 'X', '3', '0') /* [31:0] B:G:R:x 10:10:10:2 little endian */ - -#define DRM_FORMAT_ARGB2101010 fourcc_code('A', 'R', '3', '0') /* [31:0] A:R:G:B 2:10:10:10 little endian */ -#define DRM_FORMAT_ABGR2101010 fourcc_code('A', 'B', '3', '0') /* [31:0] A:B:G:R 2:10:10:10 little endian */ -#define DRM_FORMAT_RGBA1010102 fourcc_code('R', 'A', '3', '0') /* [31:0] R:G:B:A 10:10:10:2 little endian */ -#define DRM_FORMAT_BGRA1010102 fourcc_code('B', 'A', '3', '0') /* [31:0] B:G:R:A 10:10:10:2 little endian */ - -/* 64 bpp RGB */ -#define DRM_FORMAT_XRGB16161616 fourcc_code('X', 'R', '4', '8') /* [63:0] x:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_XBGR16161616 fourcc_code('X', 'B', '4', '8') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define DRM_FORMAT_ARGB16161616 fourcc_code('A', 'R', '4', '8') /* [63:0] A:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_ABGR16161616 fourcc_code('A', 'B', '4', '8') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* - * Floating point 64bpp RGB - * IEEE 754-2008 binary16 half-precision float - * [15:0] sign:exponent:mantissa 1:5:10 - */ -#define DRM_FORMAT_XRGB16161616F fourcc_code('X', 'R', '4', 'H') /* [63:0] x:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_XBGR16161616F fourcc_code('X', 'B', '4', 'H') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define DRM_FORMAT_ARGB16161616F fourcc_code('A', 'R', '4', 'H') /* [63:0] A:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_ABGR16161616F fourcc_code('A', 'B', '4', 'H') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* - * RGBA format with 10-bit components packed in 64-bit per pixel, with 6 bits - * of unused padding per component: - */ -#define DRM_FORMAT_AXBXGXRX106106106106 fourcc_code('A', 'B', '1', '0') /* [63:0] A:x:B:x:G:x:R:x 10:6:10:6:10:6:10:6 little endian */ - -/* packed YCbCr */ -#define DRM_FORMAT_YUYV fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */ -#define DRM_FORMAT_YVYU fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */ -#define DRM_FORMAT_UYVY fourcc_code('U', 'Y', 'V', 'Y') /* [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian */ -#define DRM_FORMAT_VYUY fourcc_code('V', 'Y', 'U', 'Y') /* [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian */ - -#define DRM_FORMAT_AYUV fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */ -#define DRM_FORMAT_XYUV8888 fourcc_code('X', 'Y', 'U', 'V') /* [31:0] X:Y:Cb:Cr 8:8:8:8 little endian */ -#define DRM_FORMAT_VUY888 fourcc_code('V', 'U', '2', '4') /* [23:0] Cr:Cb:Y 8:8:8 little endian */ -#define DRM_FORMAT_VUY101010 fourcc_code('V', 'U', '3', '0') /* Y followed by U then V, 10:10:10. Non-linear modifier only */ - -/* - * packed Y2xx indicate for each component, xx valid data occupy msb - * 16-xx padding occupy lsb - */ -#define DRM_FORMAT_Y210 fourcc_code('Y', '2', '1', '0') /* [63:0] Cr0:0:Y1:0:Cb0:0:Y0:0 10:6:10:6:10:6:10:6 little endian per 2 Y pixels */ -#define DRM_FORMAT_Y212 fourcc_code('Y', '2', '1', '2') /* [63:0] Cr0:0:Y1:0:Cb0:0:Y0:0 12:4:12:4:12:4:12:4 little endian per 2 Y pixels */ -#define DRM_FORMAT_Y216 fourcc_code('Y', '2', '1', '6') /* [63:0] Cr0:Y1:Cb0:Y0 16:16:16:16 little endian per 2 Y pixels */ - -/* - * packed Y4xx indicate for each component, xx valid data occupy msb - * 16-xx padding occupy lsb except Y410 - */ -#define DRM_FORMAT_Y410 fourcc_code('Y', '4', '1', '0') /* [31:0] A:Cr:Y:Cb 2:10:10:10 little endian */ -#define DRM_FORMAT_Y412 fourcc_code('Y', '4', '1', '2') /* [63:0] A:0:Cr:0:Y:0:Cb:0 12:4:12:4:12:4:12:4 little endian */ -#define DRM_FORMAT_Y416 fourcc_code('Y', '4', '1', '6') /* [63:0] A:Cr:Y:Cb 16:16:16:16 little endian */ - -#define DRM_FORMAT_XVYU2101010 fourcc_code('X', 'V', '3', '0') /* [31:0] X:Cr:Y:Cb 2:10:10:10 little endian */ -#define DRM_FORMAT_XVYU12_16161616 fourcc_code('X', 'V', '3', '6') /* [63:0] X:0:Cr:0:Y:0:Cb:0 12:4:12:4:12:4:12:4 little endian */ -#define DRM_FORMAT_XVYU16161616 fourcc_code('X', 'V', '4', '8') /* [63:0] X:Cr:Y:Cb 16:16:16:16 little endian */ - -/* - * packed YCbCr420 2x2 tiled formats - * first 64 bits will contain Y,Cb,Cr components for a 2x2 tile - */ -/* [63:0] A3:A2:Y3:0:Cr0:0:Y2:0:A1:A0:Y1:0:Cb0:0:Y0:0 1:1:8:2:8:2:8:2:1:1:8:2:8:2:8:2 little endian */ -#define DRM_FORMAT_Y0L0 fourcc_code('Y', '0', 'L', '0') -/* [63:0] X3:X2:Y3:0:Cr0:0:Y2:0:X1:X0:Y1:0:Cb0:0:Y0:0 1:1:8:2:8:2:8:2:1:1:8:2:8:2:8:2 little endian */ -#define DRM_FORMAT_X0L0 fourcc_code('X', '0', 'L', '0') - -/* [63:0] A3:A2:Y3:Cr0:Y2:A1:A0:Y1:Cb0:Y0 1:1:10:10:10:1:1:10:10:10 little endian */ -#define DRM_FORMAT_Y0L2 fourcc_code('Y', '0', 'L', '2') -/* [63:0] X3:X2:Y3:Cr0:Y2:X1:X0:Y1:Cb0:Y0 1:1:10:10:10:1:1:10:10:10 little endian */ -#define DRM_FORMAT_X0L2 fourcc_code('X', '0', 'L', '2') - -/* - * 1-plane YUV 4:2:0 - * In these formats, the component ordering is specified (Y, followed by U - * then V), but the exact Linear layout is undefined. - * These formats can only be used with a non-Linear modifier. - */ -#define DRM_FORMAT_YUV420_8BIT fourcc_code('Y', 'U', '0', '8') -#define DRM_FORMAT_YUV420_10BIT fourcc_code('Y', 'U', '1', '0') - -/* - * 2 plane RGB + A - * index 0 = RGB plane, same format as the corresponding non _A8 format has - * index 1 = A plane, [7:0] A - */ -#define DRM_FORMAT_XRGB8888_A8 fourcc_code('X', 'R', 'A', '8') -#define DRM_FORMAT_XBGR8888_A8 fourcc_code('X', 'B', 'A', '8') -#define DRM_FORMAT_RGBX8888_A8 fourcc_code('R', 'X', 'A', '8') -#define DRM_FORMAT_BGRX8888_A8 fourcc_code('B', 'X', 'A', '8') -#define DRM_FORMAT_RGB888_A8 fourcc_code('R', '8', 'A', '8') -#define DRM_FORMAT_BGR888_A8 fourcc_code('B', '8', 'A', '8') -#define DRM_FORMAT_RGB565_A8 fourcc_code('R', '5', 'A', '8') -#define DRM_FORMAT_BGR565_A8 fourcc_code('B', '5', 'A', '8') - -/* - * 2 plane YCbCr - * index 0 = Y plane, [7:0] Y - * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian - * or - * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian - */ -#define DRM_FORMAT_NV12 fourcc_code('N', 'V', '1', '2') /* 2x2 subsampled Cr:Cb plane */ -#define DRM_FORMAT_NV21 fourcc_code('N', 'V', '2', '1') /* 2x2 subsampled Cb:Cr plane */ -#define DRM_FORMAT_NV16 fourcc_code('N', 'V', '1', '6') /* 2x1 subsampled Cr:Cb plane */ -#define DRM_FORMAT_NV61 fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */ -#define DRM_FORMAT_NV24 fourcc_code('N', 'V', '2', '4') /* non-subsampled Cr:Cb plane */ -#define DRM_FORMAT_NV42 fourcc_code('N', 'V', '4', '2') /* non-subsampled Cb:Cr plane */ -/* - * 2 plane YCbCr - * index 0 = Y plane, [39:0] Y3:Y2:Y1:Y0 little endian - * index 1 = Cr:Cb plane, [39:0] Cr1:Cb1:Cr0:Cb0 little endian - */ -#define DRM_FORMAT_NV15 fourcc_code('N', 'V', '1', '5') /* 2x2 subsampled Cr:Cb plane */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y:x [10:6] little endian - * index 1 = Cr:Cb plane, [31:0] Cr:x:Cb:x [10:6:10:6] little endian - */ -#define DRM_FORMAT_P210 fourcc_code('P', '2', '1', '0') /* 2x1 subsampled Cr:Cb plane, 10 bit per channel */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y:x [10:6] little endian - * index 1 = Cr:Cb plane, [31:0] Cr:x:Cb:x [10:6:10:6] little endian - */ -#define DRM_FORMAT_P010 fourcc_code('P', '0', '1', '0') /* 2x2 subsampled Cr:Cb plane 10 bits per channel */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y:x [12:4] little endian - * index 1 = Cr:Cb plane, [31:0] Cr:x:Cb:x [12:4:12:4] little endian - */ -#define DRM_FORMAT_P012 fourcc_code('P', '0', '1', '2') /* 2x2 subsampled Cr:Cb plane 12 bits per channel */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y little endian - * index 1 = Cr:Cb plane, [31:0] Cr:Cb [16:16] little endian - */ -#define DRM_FORMAT_P016 fourcc_code('P', '0', '1', '6') /* 2x2 subsampled Cr:Cb plane 16 bits per channel */ - -/* 3 plane non-subsampled (444) YCbCr - * 16 bits per component, but only 10 bits are used and 6 bits are padded - * index 0: Y plane, [15:0] Y:x [10:6] little endian - * index 1: Cb plane, [15:0] Cb:x [10:6] little endian - * index 2: Cr plane, [15:0] Cr:x [10:6] little endian - */ -#define DRM_FORMAT_Q410 fourcc_code('Q', '4', '1', '0') - -/* 3 plane non-subsampled (444) YCrCb - * 16 bits per component, but only 10 bits are used and 6 bits are padded - * index 0: Y plane, [15:0] Y:x [10:6] little endian - * index 1: Cr plane, [15:0] Cr:x [10:6] little endian - * index 2: Cb plane, [15:0] Cb:x [10:6] little endian - */ -#define DRM_FORMAT_Q401 fourcc_code('Q', '4', '0', '1') - -/* - * 3 plane YCbCr - * index 0: Y plane, [7:0] Y - * index 1: Cb plane, [7:0] Cb - * index 2: Cr plane, [7:0] Cr - * or - * index 1: Cr plane, [7:0] Cr - * index 2: Cb plane, [7:0] Cb - */ -#define DRM_FORMAT_YUV410 fourcc_code('Y', 'U', 'V', '9') /* 4x4 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU410 fourcc_code('Y', 'V', 'U', '9') /* 4x4 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV411 fourcc_code('Y', 'U', '1', '1') /* 4x1 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU411 fourcc_code('Y', 'V', '1', '1') /* 4x1 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV420 fourcc_code('Y', 'U', '1', '2') /* 2x2 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU420 fourcc_code('Y', 'V', '1', '2') /* 2x2 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV422 fourcc_code('Y', 'U', '1', '6') /* 2x1 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU422 fourcc_code('Y', 'V', '1', '6') /* 2x1 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV444 fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU444 fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */ - - -/* - * Format Modifiers: - * - * Format modifiers describe, typically, a re-ordering or modification - * of the data in a plane of an FB. This can be used to express tiled/ - * swizzled formats, or compression, or a combination of the two. - * - * The upper 8 bits of the format modifier are a vendor-id as assigned - * below. The lower 56 bits are assigned as vendor sees fit. - */ - -/* Vendor Ids: */ -#define DRM_FORMAT_MOD_VENDOR_NONE 0 -#define DRM_FORMAT_MOD_VENDOR_INTEL 0x01 -#define DRM_FORMAT_MOD_VENDOR_AMD 0x02 -#define DRM_FORMAT_MOD_VENDOR_NVIDIA 0x03 -#define DRM_FORMAT_MOD_VENDOR_SAMSUNG 0x04 -#define DRM_FORMAT_MOD_VENDOR_QCOM 0x05 -#define DRM_FORMAT_MOD_VENDOR_VIVANTE 0x06 -#define DRM_FORMAT_MOD_VENDOR_BROADCOM 0x07 -#define DRM_FORMAT_MOD_VENDOR_ARM 0x08 -#define DRM_FORMAT_MOD_VENDOR_ALLWINNER 0x09 -#define DRM_FORMAT_MOD_VENDOR_AMLOGIC 0x0a - -/* add more to the end as needed */ - -#define DRM_FORMAT_RESERVED ((1ULL << 56) - 1) - -#define fourcc_mod_code(vendor, val) \ - ((((__u64)DRM_FORMAT_MOD_VENDOR_## vendor) << 56) | ((val) & 0x00ffffffffffffffULL)) - -/* - * Format Modifier tokens: - * - * When adding a new token please document the layout with a code comment, - * similar to the fourcc codes above. drm_fourcc.h is considered the - * authoritative source for all of these. - * - * Generic modifier names: - * - * DRM_FORMAT_MOD_GENERIC_* definitions are used to provide vendor-neutral names - * for layouts which are common across multiple vendors. To preserve - * compatibility, in cases where a vendor-specific definition already exists and - * a generic name for it is desired, the common name is a purely symbolic alias - * and must use the same numerical value as the original definition. - * - * Note that generic names should only be used for modifiers which describe - * generic layouts (such as pixel re-ordering), which may have - * independently-developed support across multiple vendors. - * - * In future cases where a generic layout is identified before merging with a - * vendor-specific modifier, a new 'GENERIC' vendor or modifier using vendor - * 'NONE' could be considered. This should only be for obvious, exceptional - * cases to avoid polluting the 'GENERIC' namespace with modifiers which only - * apply to a single vendor. - * - * Generic names should not be used for cases where multiple hardware vendors - * have implementations of the same standardised compression scheme (such as - * AFBC). In those cases, all implementations should use the same format - * modifier(s), reflecting the vendor of the standard. - */ - -#define DRM_FORMAT_MOD_GENERIC_16_16_TILE DRM_FORMAT_MOD_SAMSUNG_16_16_TILE - -/* - * Invalid Modifier - * - * This modifier can be used as a sentinel to terminate the format modifiers - * list, or to initialize a variable with an invalid modifier. It might also be - * used to report an error back to userspace for certain APIs. - */ -#define DRM_FORMAT_MOD_INVALID fourcc_mod_code(NONE, DRM_FORMAT_RESERVED) - -/* - * Linear Layout - * - * Just plain linear layout. Note that this is different from no specifying any - * modifier (e.g. not setting DRM_MODE_FB_MODIFIERS in the DRM_ADDFB2 ioctl), - * which tells the driver to also take driver-internal information into account - * and so might actually result in a tiled framebuffer. - */ -#define DRM_FORMAT_MOD_LINEAR fourcc_mod_code(NONE, 0) - -/* - * Deprecated: use DRM_FORMAT_MOD_LINEAR instead - * - * The "none" format modifier doesn't actually mean that the modifier is - * implicit, instead it means that the layout is linear. Whether modifiers are - * used is out-of-band information carried in an API-specific way (e.g. in a - * flag for drm_mode_fb_cmd2). - */ -#define DRM_FORMAT_MOD_NONE 0 - -/* Intel framebuffer modifiers */ - -/* - * Intel X-tiling layout - * - * This is a tiled layout using 4Kb tiles (except on gen2 where the tiles 2Kb) - * in row-major layout. Within the tile bytes are laid out row-major, with - * a platform-dependent stride. On top of that the memory can apply - * platform-depending swizzling of some higher address bits into bit6. - * - * Note that this layout is only accurate on intel gen 8+ or valleyview chipsets. - * On earlier platforms the is highly platforms specific and not useful for - * cross-driver sharing. It exists since on a given platform it does uniquely - * identify the layout in a simple way for i915-specific userspace, which - * facilitated conversion of userspace to modifiers. Additionally the exact - * format on some really old platforms is not known. - */ -#define I915_FORMAT_MOD_X_TILED fourcc_mod_code(INTEL, 1) - -/* - * Intel Y-tiling layout - * - * This is a tiled layout using 4Kb tiles (except on gen2 where the tiles 2Kb) - * in row-major layout. Within the tile bytes are laid out in OWORD (16 bytes) - * chunks column-major, with a platform-dependent height. On top of that the - * memory can apply platform-depending swizzling of some higher address bits - * into bit6. - * - * Note that this layout is only accurate on intel gen 8+ or valleyview chipsets. - * On earlier platforms the is highly platforms specific and not useful for - * cross-driver sharing. It exists since on a given platform it does uniquely - * identify the layout in a simple way for i915-specific userspace, which - * facilitated conversion of userspace to modifiers. Additionally the exact - * format on some really old platforms is not known. - */ -#define I915_FORMAT_MOD_Y_TILED fourcc_mod_code(INTEL, 2) - -/* - * Intel Yf-tiling layout - * - * This is a tiled layout using 4Kb tiles in row-major layout. - * Within the tile pixels are laid out in 16 256 byte units / sub-tiles which - * are arranged in four groups (two wide, two high) with column-major layout. - * Each group therefore consits out of four 256 byte units, which are also laid - * out as 2x2 column-major. - * 256 byte units are made out of four 64 byte blocks of pixels, producing - * either a square block or a 2:1 unit. - * 64 byte blocks of pixels contain four pixel rows of 16 bytes, where the width - * in pixel depends on the pixel depth. - */ -#define I915_FORMAT_MOD_Yf_TILED fourcc_mod_code(INTEL, 3) - -/* - * Intel color control surface (CCS) for render compression - * - * The framebuffer format must be one of the 8:8:8:8 RGB formats. - * The main surface will be plane index 0 and must be Y/Yf-tiled, - * the CCS will be plane index 1. - * - * Each CCS tile matches a 1024x512 pixel area of the main surface. - * To match certain aspects of the 3D hardware the CCS is - * considered to be made up of normal 128Bx32 Y tiles, Thus - * the CCS pitch must be specified in multiples of 128 bytes. - * - * In reality the CCS tile appears to be a 64Bx64 Y tile, composed - * of QWORD (8 bytes) chunks instead of OWORD (16 bytes) chunks. - * But that fact is not relevant unless the memory is accessed - * directly. - */ -#define I915_FORMAT_MOD_Y_TILED_CCS fourcc_mod_code(INTEL, 4) -#define I915_FORMAT_MOD_Yf_TILED_CCS fourcc_mod_code(INTEL, 5) - -/* - * Intel color control surfaces (CCS) for Gen-12 render compression. - * - * The main surface is Y-tiled and at plane index 0, the CCS is linear and - * at index 1. A 64B CCS cache line corresponds to an area of 4x1 tiles in - * main surface. In other words, 4 bits in CCS map to a main surface cache - * line pair. The main surface pitch is required to be a multiple of four - * Y-tile widths. - */ -#define I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS fourcc_mod_code(INTEL, 6) - -/* - * Intel color control surfaces (CCS) for Gen-12 media compression - * - * The main surface is Y-tiled and at plane index 0, the CCS is linear and - * at index 1. A 64B CCS cache line corresponds to an area of 4x1 tiles in - * main surface. In other words, 4 bits in CCS map to a main surface cache - * line pair. The main surface pitch is required to be a multiple of four - * Y-tile widths. For semi-planar formats like NV12, CCS planes follow the - * Y and UV planes i.e., planes 0 and 1 are used for Y and UV surfaces, - * planes 2 and 3 for the respective CCS. - */ -#define I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS fourcc_mod_code(INTEL, 7) - -/* - * Intel Color Control Surface with Clear Color (CCS) for Gen-12 render - * compression. - * - * The main surface is Y-tiled and is at plane index 0 whereas CCS is linear - * and at index 1. The clear color is stored at index 2, and the pitch should - * be ignored. The clear color structure is 256 bits. The first 128 bits - * represents Raw Clear Color Red, Green, Blue and Alpha color each represented - * by 32 bits. The raw clear color is consumed by the 3d engine and generates - * the converted clear color of size 64 bits. The first 32 bits store the Lower - * Converted Clear Color value and the next 32 bits store the Higher Converted - * Clear Color value when applicable. The Converted Clear Color values are - * consumed by the DE. The last 64 bits are used to store Color Discard Enable - * and Depth Clear Value Valid which are ignored by the DE. A CCS cache line - * corresponds to an area of 4x1 tiles in the main surface. The main surface - * pitch is required to be a multiple of 4 tile widths. - */ -#define I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC fourcc_mod_code(INTEL, 8) - -/* - * Tiled, NV12MT, grouped in 64 (pixels) x 32 (lines) -sized macroblocks - * - * Macroblocks are laid in a Z-shape, and each pixel data is following the - * standard NV12 style. - * As for NV12, an image is the result of two frame buffers: one for Y, - * one for the interleaved Cb/Cr components (1/2 the height of the Y buffer). - * Alignment requirements are (for each buffer): - * - multiple of 128 pixels for the width - * - multiple of 32 pixels for the height - * - * For more information: see https://linuxtv.org/downloads/v4l-dvb-apis/re32.html - */ -#define DRM_FORMAT_MOD_SAMSUNG_64_32_TILE fourcc_mod_code(SAMSUNG, 1) - -/* - * Tiled, 16 (pixels) x 16 (lines) - sized macroblocks - * - * This is a simple tiled layout using tiles of 16x16 pixels in a row-major - * layout. For YCbCr formats Cb/Cr components are taken in such a way that - * they correspond to their 16x16 luma block. - */ -#define DRM_FORMAT_MOD_SAMSUNG_16_16_TILE fourcc_mod_code(SAMSUNG, 2) - -/* - * Qualcomm Compressed Format - * - * Refers to a compressed variant of the base format that is compressed. - * Implementation may be platform and base-format specific. - * - * Each macrotile consists of m x n (mostly 4 x 4) tiles. - * Pixel data pitch/stride is aligned with macrotile width. - * Pixel data height is aligned with macrotile height. - * Entire pixel data buffer is aligned with 4k(bytes). - */ -#define DRM_FORMAT_MOD_QCOM_COMPRESSED fourcc_mod_code(QCOM, 1) - -/* Vivante framebuffer modifiers */ - -/* - * Vivante 4x4 tiling layout - * - * This is a simple tiled layout using tiles of 4x4 pixels in a row-major - * layout. - */ -#define DRM_FORMAT_MOD_VIVANTE_TILED fourcc_mod_code(VIVANTE, 1) - -/* - * Vivante 64x64 super-tiling layout - * - * This is a tiled layout using 64x64 pixel super-tiles, where each super-tile - * contains 8x4 groups of 2x4 tiles of 4x4 pixels (like above) each, all in row- - * major layout. - * - * For more information: see - * https://github.com/etnaviv/etna_viv/blob/master/doc/hardware.md#texture-tiling - */ -#define DRM_FORMAT_MOD_VIVANTE_SUPER_TILED fourcc_mod_code(VIVANTE, 2) - -/* - * Vivante 4x4 tiling layout for dual-pipe - * - * Same as the 4x4 tiling layout, except every second 4x4 pixel tile starts at a - * different base address. Offsets from the base addresses are therefore halved - * compared to the non-split tiled layout. - */ -#define DRM_FORMAT_MOD_VIVANTE_SPLIT_TILED fourcc_mod_code(VIVANTE, 3) - -/* - * Vivante 64x64 super-tiling layout for dual-pipe - * - * Same as the 64x64 super-tiling layout, except every second 4x4 pixel tile - * starts at a different base address. Offsets from the base addresses are - * therefore halved compared to the non-split super-tiled layout. - */ -#define DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED fourcc_mod_code(VIVANTE, 4) - -/* NVIDIA frame buffer modifiers */ - -/* - * Tegra Tiled Layout, used by Tegra 2, 3 and 4. - * - * Pixels are arranged in simple tiles of 16 x 16 bytes. - */ -#define DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED fourcc_mod_code(NVIDIA, 1) - -/* - * Generalized Block Linear layout, used by desktop GPUs starting with NV50/G80, - * and Tegra GPUs starting with Tegra K1. - * - * Pixels are arranged in Groups of Bytes (GOBs). GOB size and layout varies - * based on the architecture generation. GOBs themselves are then arranged in - * 3D blocks, with the block dimensions (in terms of GOBs) always being a power - * of two, and hence expressible as their log2 equivalent (E.g., "2" represents - * a block depth or height of "4"). - * - * Chapter 20 "Pixel Memory Formats" of the Tegra X1 TRM describes this format - * in full detail. - * - * Macro - * Bits Param Description - * ---- ----- ----------------------------------------------------------------- - * - * 3:0 h log2(height) of each block, in GOBs. Placed here for - * compatibility with the existing - * DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK()-based modifiers. - * - * 4:4 - Must be 1, to indicate block-linear layout. Necessary for - * compatibility with the existing - * DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK()-based modifiers. - * - * 8:5 - Reserved (To support 3D-surfaces with variable log2(depth) block - * size). Must be zero. - * - * Note there is no log2(width) parameter. Some portions of the - * hardware support a block width of two gobs, but it is impractical - * to use due to lack of support elsewhere, and has no known - * benefits. - * - * 11:9 - Reserved (To support 2D-array textures with variable array stride - * in blocks, specified via log2(tile width in blocks)). Must be - * zero. - * - * 19:12 k Page Kind. This value directly maps to a field in the page - * tables of all GPUs >= NV50. It affects the exact layout of bits - * in memory and can be derived from the tuple - * - * (format, GPU model, compression type, samples per pixel) - * - * Where compression type is defined below. If GPU model were - * implied by the format modifier, format, or memory buffer, page - * kind would not need to be included in the modifier itself, but - * since the modifier should define the layout of the associated - * memory buffer independent from any device or other context, it - * must be included here. - * - * 21:20 g GOB Height and Page Kind Generation. The height of a GOB changed - * starting with Fermi GPUs. Additionally, the mapping between page - * kind and bit layout has changed at various points. - * - * 0 = Gob Height 8, Fermi - Volta, Tegra K1+ Page Kind mapping - * 1 = Gob Height 4, G80 - GT2XX Page Kind mapping - * 2 = Gob Height 8, Turing+ Page Kind mapping - * 3 = Reserved for future use. - * - * 22:22 s Sector layout. On Tegra GPUs prior to Xavier, there is a further - * bit remapping step that occurs at an even lower level than the - * page kind and block linear swizzles. This causes the layout of - * surfaces mapped in those SOC's GPUs to be incompatible with the - * equivalent mapping on other GPUs in the same system. - * - * 0 = Tegra K1 - Tegra Parker/TX2 Layout. - * 1 = Desktop GPU and Tegra Xavier+ Layout - * - * 25:23 c Lossless Framebuffer Compression type. - * - * 0 = none - * 1 = ROP/3D, layout 1, exact compression format implied by Page - * Kind field - * 2 = ROP/3D, layout 2, exact compression format implied by Page - * Kind field - * 3 = CDE horizontal - * 4 = CDE vertical - * 5 = Reserved for future use - * 6 = Reserved for future use - * 7 = Reserved for future use - * - * 55:25 - Reserved for future use. Must be zero. - */ -#define DRM_FORMAT_MOD_NVIDIA_BLOCK_LINEAR_2D(c, s, g, k, h) \ - fourcc_mod_code(NVIDIA, (0x10 | \ - ((h) & 0xf) | \ - (((k) & 0xff) << 12) | \ - (((g) & 0x3) << 20) | \ - (((s) & 0x1) << 22) | \ - (((c) & 0x7) << 23))) - -/* To grandfather in prior block linear format modifiers to the above layout, - * the page kind "0", which corresponds to "pitch/linear" and hence is unusable - * with block-linear layouts, is remapped within drivers to the value 0xfe, - * which corresponds to the "generic" kind used for simple single-sample - * uncompressed color formats on Fermi - Volta GPUs. - */ -static __inline__ __u64 -drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier) -{ - if (!(modifier & 0x10) || (modifier & (0xff << 12))) - return modifier; - else - return modifier | (0xfe << 12); -} - -/* - * 16Bx2 Block Linear layout, used by Tegra K1 and later - * - * Pixels are arranged in 64x8 Groups Of Bytes (GOBs). GOBs are then stacked - * vertically by a power of 2 (1 to 32 GOBs) to form a block. - * - * Within a GOB, data is ordered as 16B x 2 lines sectors laid in Z-shape. - * - * Parameter 'v' is the log2 encoding of the number of GOBs stacked vertically. - * Valid values are: - * - * 0 == ONE_GOB - * 1 == TWO_GOBS - * 2 == FOUR_GOBS - * 3 == EIGHT_GOBS - * 4 == SIXTEEN_GOBS - * 5 == THIRTYTWO_GOBS - * - * Chapter 20 "Pixel Memory Formats" of the Tegra X1 TRM describes this format - * in full detail. - */ -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(v) \ - DRM_FORMAT_MOD_NVIDIA_BLOCK_LINEAR_2D(0, 0, 0, 0, (v)) - -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(0) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(1) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(2) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(3) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(4) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(5) - -/* - * Some Broadcom modifiers take parameters, for example the number of - * vertical lines in the image. Reserve the lower 32 bits for modifier - * type, and the next 24 bits for parameters. Top 8 bits are the - * vendor code. - */ -#define __fourcc_mod_broadcom_param_shift 8 -#define __fourcc_mod_broadcom_param_bits 48 -#define fourcc_mod_broadcom_code(val, params) \ - fourcc_mod_code(BROADCOM, ((((__u64)params) << __fourcc_mod_broadcom_param_shift) | val)) -#define fourcc_mod_broadcom_param(m) \ - ((int)(((m) >> __fourcc_mod_broadcom_param_shift) & \ - ((1ULL << __fourcc_mod_broadcom_param_bits) - 1))) -#define fourcc_mod_broadcom_mod(m) \ - ((m) & ~(((1ULL << __fourcc_mod_broadcom_param_bits) - 1) << \ - __fourcc_mod_broadcom_param_shift)) - -/* - * Broadcom VC4 "T" format - * - * This is the primary layout that the V3D GPU can texture from (it - * can't do linear). The T format has: - * - * - 64b utiles of pixels in a raster-order grid according to cpp. It's 4x4 - * pixels at 32 bit depth. - * - * - 1k subtiles made of a 4x4 raster-order grid of 64b utiles (so usually - * 16x16 pixels). - * - * - 4k tiles made of a 2x2 grid of 1k subtiles (so usually 32x32 pixels). On - * even 4k tile rows, they're arranged as (BL, TL, TR, BR), and on odd rows - * they're (TR, BR, BL, TL), where bottom left is start of memory. - * - * - an image made of 4k tiles in rows either left-to-right (even rows of 4k - * tiles) or right-to-left (odd rows of 4k tiles). - */ -#define DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED fourcc_mod_code(BROADCOM, 1) - -/* - * Broadcom SAND format - * - * This is the native format that the H.264 codec block uses. For VC4 - * HVS, it is only valid for H.264 (NV12/21) and RGBA modes. - * - * The image can be considered to be split into columns, and the - * columns are placed consecutively into memory. The width of those - * columns can be either 32, 64, 128, or 256 pixels, but in practice - * only 128 pixel columns are used. - * - * The pitch between the start of each column is set to optimally - * switch between SDRAM banks. This is passed as the number of lines - * of column width in the modifier (we can't use the stride value due - * to various core checks that look at it , so you should set the - * stride to width*cpp). - * - * Note that the column height for this format modifier is the same - * for all of the planes, assuming that each column contains both Y - * and UV. Some SAND-using hardware stores UV in a separate tiled - * image from Y to reduce the column height, which is not supported - * with these modifiers. - */ - -#define DRM_FORMAT_MOD_BROADCOM_SAND32_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(2, v) -#define DRM_FORMAT_MOD_BROADCOM_SAND64_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(3, v) -#define DRM_FORMAT_MOD_BROADCOM_SAND128_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(4, v) -#define DRM_FORMAT_MOD_BROADCOM_SAND256_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(5, v) - -#define DRM_FORMAT_MOD_BROADCOM_SAND32 \ - DRM_FORMAT_MOD_BROADCOM_SAND32_COL_HEIGHT(0) -#define DRM_FORMAT_MOD_BROADCOM_SAND64 \ - DRM_FORMAT_MOD_BROADCOM_SAND64_COL_HEIGHT(0) -#define DRM_FORMAT_MOD_BROADCOM_SAND128 \ - DRM_FORMAT_MOD_BROADCOM_SAND128_COL_HEIGHT(0) -#define DRM_FORMAT_MOD_BROADCOM_SAND256 \ - DRM_FORMAT_MOD_BROADCOM_SAND256_COL_HEIGHT(0) - -/* Broadcom UIF format - * - * This is the common format for the current Broadcom multimedia - * blocks, including V3D 3.x and newer, newer video codecs, and - * displays. - * - * The image consists of utiles (64b blocks), UIF blocks (2x2 utiles), - * and macroblocks (4x4 UIF blocks). Those 4x4 UIF block groups are - * stored in columns, with padding between the columns to ensure that - * moving from one column to the next doesn't hit the same SDRAM page - * bank. - * - * To calculate the padding, it is assumed that each hardware block - * and the software driving it knows the platform's SDRAM page size, - * number of banks, and XOR address, and that it's identical between - * all blocks using the format. This tiling modifier will use XOR as - * necessary to reduce the padding. If a hardware block can't do XOR, - * the assumption is that a no-XOR tiling modifier will be created. - */ -#define DRM_FORMAT_MOD_BROADCOM_UIF fourcc_mod_code(BROADCOM, 6) - -/* - * Arm Framebuffer Compression (AFBC) modifiers - * - * AFBC is a proprietary lossless image compression protocol and format. - * It provides fine-grained random access and minimizes the amount of data - * transferred between IP blocks. - * - * AFBC has several features which may be supported and/or used, which are - * represented using bits in the modifier. Not all combinations are valid, - * and different devices or use-cases may support different combinations. - * - * Further information on the use of AFBC modifiers can be found in - * Documentation/gpu/afbc.rst - */ - -/* - * The top 4 bits (out of the 56 bits alloted for specifying vendor specific - * modifiers) denote the category for modifiers. Currently we have three - * categories of modifiers ie AFBC, MISC and AFRC. We can have a maximum of - * sixteen different categories. - */ -#define DRM_FORMAT_MOD_ARM_CODE(__type, __val) \ - fourcc_mod_code(ARM, ((__u64)(__type) << 52) | ((__val) & 0x000fffffffffffffULL)) - -#define DRM_FORMAT_MOD_ARM_TYPE_AFBC 0x00 -#define DRM_FORMAT_MOD_ARM_TYPE_MISC 0x01 - -#define DRM_FORMAT_MOD_ARM_AFBC(__afbc_mode) \ - DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_AFBC, __afbc_mode) - -/* - * AFBC superblock size - * - * Indicates the superblock size(s) used for the AFBC buffer. The buffer - * size (in pixels) must be aligned to a multiple of the superblock size. - * Four lowest significant bits(LSBs) are reserved for block size. - * - * Where one superblock size is specified, it applies to all planes of the - * buffer (e.g. 16x16, 32x8). When multiple superblock sizes are specified, - * the first applies to the Luma plane and the second applies to the Chroma - * plane(s). e.g. (32x8_64x4 means 32x8 Luma, with 64x4 Chroma). - * Multiple superblock sizes are only valid for multi-plane YCbCr formats. - */ -#define AFBC_FORMAT_MOD_BLOCK_SIZE_MASK 0xf -#define AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 (1ULL) -#define AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 (2ULL) -#define AFBC_FORMAT_MOD_BLOCK_SIZE_64x4 (3ULL) -#define AFBC_FORMAT_MOD_BLOCK_SIZE_32x8_64x4 (4ULL) - -/* - * AFBC lossless colorspace transform - * - * Indicates that the buffer makes use of the AFBC lossless colorspace - * transform. - */ -#define AFBC_FORMAT_MOD_YTR (1ULL << 4) - -/* - * AFBC block-split - * - * Indicates that the payload of each superblock is split. The second - * half of the payload is positioned at a predefined offset from the start - * of the superblock payload. - */ -#define AFBC_FORMAT_MOD_SPLIT (1ULL << 5) - -/* - * AFBC sparse layout - * - * This flag indicates that the payload of each superblock must be stored at a - * predefined position relative to the other superblocks in the same AFBC - * buffer. This order is the same order used by the header buffer. In this mode - * each superblock is given the same amount of space as an uncompressed - * superblock of the particular format would require, rounding up to the next - * multiple of 128 bytes in size. - */ -#define AFBC_FORMAT_MOD_SPARSE (1ULL << 6) - -/* - * AFBC copy-block restrict - * - * Buffers with this flag must obey the copy-block restriction. The restriction - * is such that there are no copy-blocks referring across the border of 8x8 - * blocks. For the subsampled data the 8x8 limitation is also subsampled. - */ -#define AFBC_FORMAT_MOD_CBR (1ULL << 7) - -/* - * AFBC tiled layout - * - * The tiled layout groups superblocks in 8x8 or 4x4 tiles, where all - * superblocks inside a tile are stored together in memory. 8x8 tiles are used - * for pixel formats up to and including 32 bpp while 4x4 tiles are used for - * larger bpp formats. The order between the tiles is scan line. - * When the tiled layout is used, the buffer size (in pixels) must be aligned - * to the tile size. - */ -#define AFBC_FORMAT_MOD_TILED (1ULL << 8) - -/* - * AFBC solid color blocks - * - * Indicates that the buffer makes use of solid-color blocks, whereby bandwidth - * can be reduced if a whole superblock is a single color. - */ -#define AFBC_FORMAT_MOD_SC (1ULL << 9) - -/* - * AFBC double-buffer - * - * Indicates that the buffer is allocated in a layout safe for front-buffer - * rendering. - */ -#define AFBC_FORMAT_MOD_DB (1ULL << 10) - -/* - * AFBC buffer content hints - * - * Indicates that the buffer includes per-superblock content hints. - */ -#define AFBC_FORMAT_MOD_BCH (1ULL << 11) - -/* AFBC uncompressed storage mode - * - * Indicates that the buffer is using AFBC uncompressed storage mode. - * In this mode all superblock payloads in the buffer use the uncompressed - * storage mode, which is usually only used for data which cannot be compressed. - * The buffer layout is the same as for AFBC buffers without USM set, this only - * affects the storage mode of the individual superblocks. Note that even a - * buffer without USM set may use uncompressed storage mode for some or all - * superblocks, USM just guarantees it for all. - */ -#define AFBC_FORMAT_MOD_USM (1ULL << 12) - -/* - * Arm Fixed-Rate Compression (AFRC) modifiers - * - * AFRC is a proprietary fixed rate image compression protocol and format, - * designed to provide guaranteed bandwidth and memory footprint - * reductions in graphics and media use-cases. - * - * AFRC buffers consist of one or more planes, with the same components - * and meaning as an uncompressed buffer using the same pixel format. - * - * Within each plane, the pixel/luma/chroma values are grouped into - * "coding unit" blocks which are individually compressed to a - * fixed size (in bytes). All coding units within a given plane of a buffer - * store the same number of values, and have the same compressed size. - * - * The coding unit size is configurable, allowing different rates of compression. - * - * The start of each AFRC buffer plane must be aligned to an alignment granule which - * depends on the coding unit size. - * - * Coding Unit Size Plane Alignment - * ---------------- --------------- - * 16 bytes 1024 bytes - * 24 bytes 512 bytes - * 32 bytes 2048 bytes - * - * Coding units are grouped into paging tiles. AFRC buffer dimensions must be aligned - * to a multiple of the paging tile dimensions. - * The dimensions of each paging tile depend on whether the buffer is optimised for - * scanline (SCAN layout) or rotated (ROT layout) access. - * - * Layout Paging Tile Width Paging Tile Height - * ------ ----------------- ------------------ - * SCAN 16 coding units 4 coding units - * ROT 8 coding units 8 coding units - * - * The dimensions of each coding unit depend on the number of components - * in the compressed plane and whether the buffer is optimised for - * scanline (SCAN layout) or rotated (ROT layout) access. - * - * Number of Components in Plane Layout Coding Unit Width Coding Unit Height - * ----------------------------- --------- ----------------- ------------------ - * 1 SCAN 16 samples 4 samples - * Example: 16x4 luma samples in a 'Y' plane - * 16x4 chroma 'V' values, in the 'V' plane of a fully-planar YUV buffer - * ----------------------------- --------- ----------------- ------------------ - * 1 ROT 8 samples 8 samples - * Example: 8x8 luma samples in a 'Y' plane - * 8x8 chroma 'V' values, in the 'V' plane of a fully-planar YUV buffer - * ----------------------------- --------- ----------------- ------------------ - * 2 DONT CARE 8 samples 4 samples - * Example: 8x4 chroma pairs in the 'UV' plane of a semi-planar YUV buffer - * ----------------------------- --------- ----------------- ------------------ - * 3 DONT CARE 4 samples 4 samples - * Example: 4x4 pixels in an RGB buffer without alpha - * ----------------------------- --------- ----------------- ------------------ - * 4 DONT CARE 4 samples 4 samples - * Example: 4x4 pixels in an RGB buffer with alpha - */ - -#define DRM_FORMAT_MOD_ARM_TYPE_AFRC 0x02 - -#define DRM_FORMAT_MOD_ARM_AFRC(__afrc_mode) \ - DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_AFRC, __afrc_mode) - -/* - * AFRC coding unit size modifier. - * - * Indicates the number of bytes used to store each compressed coding unit for - * one or more planes in an AFRC encoded buffer. The coding unit size for chrominance - * is the same for both Cb and Cr, which may be stored in separate planes. - * - * AFRC_FORMAT_MOD_CU_SIZE_P0 indicates the number of bytes used to store - * each compressed coding unit in the first plane of the buffer. For RGBA buffers - * this is the only plane, while for semi-planar and fully-planar YUV buffers, - * this corresponds to the luma plane. - * - * AFRC_FORMAT_MOD_CU_SIZE_P12 indicates the number of bytes used to store - * each compressed coding unit in the second and third planes in the buffer. - * For semi-planar and fully-planar YUV buffers, this corresponds to the chroma plane(s). - * - * For single-plane buffers, AFRC_FORMAT_MOD_CU_SIZE_P0 must be specified - * and AFRC_FORMAT_MOD_CU_SIZE_P12 must be zero. - * For semi-planar and fully-planar buffers, both AFRC_FORMAT_MOD_CU_SIZE_P0 and - * AFRC_FORMAT_MOD_CU_SIZE_P12 must be specified. - */ -#define AFRC_FORMAT_MOD_CU_SIZE_MASK 0xf -#define AFRC_FORMAT_MOD_CU_SIZE_16 (1ULL) -#define AFRC_FORMAT_MOD_CU_SIZE_24 (2ULL) -#define AFRC_FORMAT_MOD_CU_SIZE_32 (3ULL) - -#define AFRC_FORMAT_MOD_CU_SIZE_P0(__afrc_cu_size) (__afrc_cu_size) -#define AFRC_FORMAT_MOD_CU_SIZE_P12(__afrc_cu_size) ((__afrc_cu_size) << 4) - -/* - * AFRC scanline memory layout. - * - * Indicates if the buffer uses the scanline-optimised layout - * for an AFRC encoded buffer, otherwise, it uses the rotation-optimised layout. - * The memory layout is the same for all planes. - */ -#define AFRC_FORMAT_MOD_LAYOUT_SCAN (1ULL << 8) - -/* - * Arm 16x16 Block U-Interleaved modifier - * - * This is used by Arm Mali Utgard and Midgard GPUs. It divides the image - * into 16x16 pixel blocks. Blocks are stored linearly in order, but pixels - * in the block are reordered. - */ -#define DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED \ - DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_MISC, 1ULL) - -/* - * Allwinner tiled modifier - * - * This tiling mode is implemented by the VPU found on all Allwinner platforms, - * codenamed sunxi. It is associated with a YUV format that uses either 2 or 3 - * planes. - * - * With this tiling, the luminance samples are disposed in tiles representing - * 32x32 pixels and the chrominance samples in tiles representing 32x64 pixels. - * The pixel order in each tile is linear and the tiles are disposed linearly, - * both in row-major order. - */ -#define DRM_FORMAT_MOD_ALLWINNER_TILED fourcc_mod_code(ALLWINNER, 1) - -/* - * Amlogic Video Framebuffer Compression modifiers - * - * Amlogic uses a proprietary lossless image compression protocol and format - * for their hardware video codec accelerators, either video decoders or - * video input encoders. - * - * It considerably reduces memory bandwidth while writing and reading - * frames in memory. - * - * The underlying storage is considered to be 3 components, 8bit or 10-bit - * per component YCbCr 420, single plane : - * - DRM_FORMAT_YUV420_8BIT - * - DRM_FORMAT_YUV420_10BIT - * - * The first 8 bits of the mode defines the layout, then the following 8 bits - * defines the options changing the layout. - * - * Not all combinations are valid, and different SoCs may support different - * combinations of layout and options. - */ -#define __fourcc_mod_amlogic_layout_mask 0xff -#define __fourcc_mod_amlogic_options_shift 8 -#define __fourcc_mod_amlogic_options_mask 0xff - -#define DRM_FORMAT_MOD_AMLOGIC_FBC(__layout, __options) \ - fourcc_mod_code(AMLOGIC, \ - ((__layout) & __fourcc_mod_amlogic_layout_mask) | \ - (((__options) & __fourcc_mod_amlogic_options_mask) \ - << __fourcc_mod_amlogic_options_shift)) - -/* Amlogic FBC Layouts */ - -/* - * Amlogic FBC Basic Layout - * - * The basic layout is composed of: - * - a body content organized in 64x32 superblocks with 4096 bytes per - * superblock in default mode. - * - a 32 bytes per 128x64 header block - * - * This layout is transferrable between Amlogic SoCs supporting this modifier. - */ -#define AMLOGIC_FBC_LAYOUT_BASIC (1ULL) - -/* - * Amlogic FBC Scatter Memory layout - * - * Indicates the header contains IOMMU references to the compressed - * frames content to optimize memory access and layout. - * - * In this mode, only the header memory address is needed, thus the - * content memory organization is tied to the current producer - * execution and cannot be saved/dumped neither transferrable between - * Amlogic SoCs supporting this modifier. - * - * Due to the nature of the layout, these buffers are not expected to - * be accessible by the user-space clients, but only accessible by the - * hardware producers and consumers. - * - * The user-space clients should expect a failure while trying to mmap - * the DMA-BUF handle returned by the producer. - */ -#define AMLOGIC_FBC_LAYOUT_SCATTER (2ULL) - -/* Amlogic FBC Layout Options Bit Mask */ - -/* - * Amlogic FBC Memory Saving mode - * - * Indicates the storage is packed when pixel size is multiple of word - * boudaries, i.e. 8bit should be stored in this mode to save allocation - * memory. - * - * This mode reduces body layout to 3072 bytes per 64x32 superblock with - * the basic layout and 3200 bytes per 64x32 superblock combined with - * the scatter layout. - */ -#define AMLOGIC_FBC_OPTION_MEM_SAVING (1ULL << 0) - -/* - * AMD modifiers - * - * Memory layout: - * - * without DCC: - * - main surface - * - * with DCC & without DCC_RETILE: - * - main surface in plane 0 - * - DCC surface in plane 1 (RB-aligned, pipe-aligned if DCC_PIPE_ALIGN is set) - * - * with DCC & DCC_RETILE: - * - main surface in plane 0 - * - displayable DCC surface in plane 1 (not RB-aligned & not pipe-aligned) - * - pipe-aligned DCC surface in plane 2 (RB-aligned & pipe-aligned) - * - * For multi-plane formats the above surfaces get merged into one plane for - * each format plane, based on the required alignment only. - * - * Bits Parameter Notes - * ----- ------------------------ --------------------------------------------- - * - * 7:0 TILE_VERSION Values are AMD_FMT_MOD_TILE_VER_* - * 12:8 TILE Values are AMD_FMT_MOD_TILE__* - * 13 DCC - * 14 DCC_RETILE - * 15 DCC_PIPE_ALIGN - * 16 DCC_INDEPENDENT_64B - * 17 DCC_INDEPENDENT_128B - * 19:18 DCC_MAX_COMPRESSED_BLOCK Values are AMD_FMT_MOD_DCC_BLOCK_* - * 20 DCC_CONSTANT_ENCODE - * 23:21 PIPE_XOR_BITS Only for some chips - * 26:24 BANK_XOR_BITS Only for some chips - * 29:27 PACKERS Only for some chips - * 32:30 RB Only for some chips - * 35:33 PIPE Only for some chips - * 55:36 - Reserved for future use, must be zero - */ -#define AMD_FMT_MOD fourcc_mod_code(AMD, 0) - -#define IS_AMD_FMT_MOD(val) (((val) >> 56) == DRM_FORMAT_MOD_VENDOR_AMD) - -/* Reserve 0 for GFX8 and older */ -#define AMD_FMT_MOD_TILE_VER_GFX9 1 -#define AMD_FMT_MOD_TILE_VER_GFX10 2 -#define AMD_FMT_MOD_TILE_VER_GFX10_RBPLUS 3 - -/* - * 64K_S is the same for GFX9/GFX10/GFX10_RBPLUS and hence has GFX9 as canonical - * version. - */ -#define AMD_FMT_MOD_TILE_GFX9_64K_S 9 - -/* - * 64K_D for non-32 bpp is the same for GFX9/GFX10/GFX10_RBPLUS and hence has - * GFX9 as canonical version. - */ -#define AMD_FMT_MOD_TILE_GFX9_64K_D 10 -#define AMD_FMT_MOD_TILE_GFX9_64K_S_X 25 -#define AMD_FMT_MOD_TILE_GFX9_64K_D_X 26 -#define AMD_FMT_MOD_TILE_GFX9_64K_R_X 27 - -#define AMD_FMT_MOD_DCC_BLOCK_64B 0 -#define AMD_FMT_MOD_DCC_BLOCK_128B 1 -#define AMD_FMT_MOD_DCC_BLOCK_256B 2 - -#define AMD_FMT_MOD_TILE_VERSION_SHIFT 0 -#define AMD_FMT_MOD_TILE_VERSION_MASK 0xFF -#define AMD_FMT_MOD_TILE_SHIFT 8 -#define AMD_FMT_MOD_TILE_MASK 0x1F - -/* Whether DCC compression is enabled. */ -#define AMD_FMT_MOD_DCC_SHIFT 13 -#define AMD_FMT_MOD_DCC_MASK 0x1 - -/* - * Whether to include two DCC surfaces, one which is rb & pipe aligned, and - * one which is not-aligned. - */ -#define AMD_FMT_MOD_DCC_RETILE_SHIFT 14 -#define AMD_FMT_MOD_DCC_RETILE_MASK 0x1 - -/* Only set if DCC_RETILE = false */ -#define AMD_FMT_MOD_DCC_PIPE_ALIGN_SHIFT 15 -#define AMD_FMT_MOD_DCC_PIPE_ALIGN_MASK 0x1 - -#define AMD_FMT_MOD_DCC_INDEPENDENT_64B_SHIFT 16 -#define AMD_FMT_MOD_DCC_INDEPENDENT_64B_MASK 0x1 -#define AMD_FMT_MOD_DCC_INDEPENDENT_128B_SHIFT 17 -#define AMD_FMT_MOD_DCC_INDEPENDENT_128B_MASK 0x1 -#define AMD_FMT_MOD_DCC_MAX_COMPRESSED_BLOCK_SHIFT 18 -#define AMD_FMT_MOD_DCC_MAX_COMPRESSED_BLOCK_MASK 0x3 - -/* - * DCC supports embedding some clear colors directly in the DCC surface. - * However, on older GPUs the rendering HW ignores the embedded clear color - * and prefers the driver provided color. This necessitates doing a fastclear - * eliminate operation before a process transfers control. - * - * If this bit is set that means the fastclear eliminate is not needed for these - * embeddable colors. - */ -#define AMD_FMT_MOD_DCC_CONSTANT_ENCODE_SHIFT 20 -#define AMD_FMT_MOD_DCC_CONSTANT_ENCODE_MASK 0x1 - -/* - * The below fields are for accounting for per GPU differences. These are only - * relevant for GFX9 and later and if the tile field is *_X/_T. - * - * PIPE_XOR_BITS = always needed - * BANK_XOR_BITS = only for TILE_VER_GFX9 - * PACKERS = only for TILE_VER_GFX10_RBPLUS - * RB = only for TILE_VER_GFX9 & DCC - * PIPE = only for TILE_VER_GFX9 & DCC & (DCC_RETILE | DCC_PIPE_ALIGN) - */ -#define AMD_FMT_MOD_PIPE_XOR_BITS_SHIFT 21 -#define AMD_FMT_MOD_PIPE_XOR_BITS_MASK 0x7 -#define AMD_FMT_MOD_BANK_XOR_BITS_SHIFT 24 -#define AMD_FMT_MOD_BANK_XOR_BITS_MASK 0x7 -#define AMD_FMT_MOD_PACKERS_SHIFT 27 -#define AMD_FMT_MOD_PACKERS_MASK 0x7 -#define AMD_FMT_MOD_RB_SHIFT 30 -#define AMD_FMT_MOD_RB_MASK 0x7 -#define AMD_FMT_MOD_PIPE_SHIFT 33 -#define AMD_FMT_MOD_PIPE_MASK 0x7 - -#define AMD_FMT_MOD_SET(field, value) \ - ((uint64_t)(value) << AMD_FMT_MOD_##field##_SHIFT) -#define AMD_FMT_MOD_GET(field, value) \ - (((value) >> AMD_FMT_MOD_##field##_SHIFT) & AMD_FMT_MOD_##field##_MASK) -#define AMD_FMT_MOD_CLEAR(field) \ - (~((uint64_t)AMD_FMT_MOD_##field##_MASK << AMD_FMT_MOD_##field##_SHIFT)) - -#if defined(__cplusplus) -} -#endif - -#endif /* DRM_FOURCC_H */ diff --git a/prebuilts/arm/include/libdrm/drm_mode.h b/prebuilts/arm/include/libdrm/drm_mode.h deleted file mode 100644 index 9b6722d..0000000 --- a/prebuilts/arm/include/libdrm/drm_mode.h +++ /dev/null @@ -1,1129 +0,0 @@ -/* - * Copyright (c) 2007 Dave Airlie - * Copyright (c) 2007 Jakob Bornecrantz - * Copyright (c) 2008 Red Hat Inc. - * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA - * Copyright (c) 2007-2008 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef _DRM_MODE_H -#define _DRM_MODE_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/** - * DOC: overview - * - * DRM exposes many UAPI and structure definition to have a consistent - * and standardized interface with user. - * Userspace can refer to these structure definitions and UAPI formats - * to communicate to driver - */ - -#define DRM_CONNECTOR_NAME_LEN 32 -#define DRM_DISPLAY_MODE_LEN 32 -#define DRM_PROP_NAME_LEN 32 - -#define DRM_MODE_TYPE_BUILTIN (1<<0) /* deprecated */ -#define DRM_MODE_TYPE_CLOCK_C ((1<<1) | DRM_MODE_TYPE_BUILTIN) /* deprecated */ -#define DRM_MODE_TYPE_CRTC_C ((1<<2) | DRM_MODE_TYPE_BUILTIN) /* deprecated */ -#define DRM_MODE_TYPE_PREFERRED (1<<3) -#define DRM_MODE_TYPE_DEFAULT (1<<4) /* deprecated */ -#define DRM_MODE_TYPE_USERDEF (1<<5) -#define DRM_MODE_TYPE_DRIVER (1<<6) - -#define DRM_MODE_TYPE_ALL (DRM_MODE_TYPE_PREFERRED | \ - DRM_MODE_TYPE_USERDEF | \ - DRM_MODE_TYPE_DRIVER) - -/* Video mode flags */ -/* bit compatible with the xrandr RR_ definitions (bits 0-13) - * - * ABI warning: Existing userspace really expects - * the mode flags to match the xrandr definitions. Any - * changes that don't match the xrandr definitions will - * likely need a new client cap or some other mechanism - * to avoid breaking existing userspace. This includes - * allocating new flags in the previously unused bits! - */ -#define DRM_MODE_FLAG_PHSYNC (1<<0) -#define DRM_MODE_FLAG_NHSYNC (1<<1) -#define DRM_MODE_FLAG_PVSYNC (1<<2) -#define DRM_MODE_FLAG_NVSYNC (1<<3) -#define DRM_MODE_FLAG_INTERLACE (1<<4) -#define DRM_MODE_FLAG_DBLSCAN (1<<5) -#define DRM_MODE_FLAG_CSYNC (1<<6) -#define DRM_MODE_FLAG_PCSYNC (1<<7) -#define DRM_MODE_FLAG_NCSYNC (1<<8) -#define DRM_MODE_FLAG_HSKEW (1<<9) /* hskew provided */ -#define DRM_MODE_FLAG_BCAST (1<<10) /* deprecated */ -#define DRM_MODE_FLAG_PIXMUX (1<<11) /* deprecated */ -#define DRM_MODE_FLAG_DBLCLK (1<<12) -#define DRM_MODE_FLAG_CLKDIV2 (1<<13) - /* - * When adding a new stereo mode don't forget to adjust DRM_MODE_FLAGS_3D_MAX - * (define not exposed to user space). - */ -#define DRM_MODE_FLAG_3D_MASK (0x1f<<14) -#define DRM_MODE_FLAG_3D_NONE (0<<14) -#define DRM_MODE_FLAG_3D_FRAME_PACKING (1<<14) -#define DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE (2<<14) -#define DRM_MODE_FLAG_3D_LINE_ALTERNATIVE (3<<14) -#define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL (4<<14) -#define DRM_MODE_FLAG_3D_L_DEPTH (5<<14) -#define DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH (6<<14) -#define DRM_MODE_FLAG_3D_TOP_AND_BOTTOM (7<<14) -#define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF (8<<14) - -/* Picture aspect ratio options */ -#define DRM_MODE_PICTURE_ASPECT_NONE 0 -#define DRM_MODE_PICTURE_ASPECT_4_3 1 -#define DRM_MODE_PICTURE_ASPECT_16_9 2 -#define DRM_MODE_PICTURE_ASPECT_64_27 3 -#define DRM_MODE_PICTURE_ASPECT_256_135 4 - -/* Content type options */ -#define DRM_MODE_CONTENT_TYPE_NO_DATA 0 -#define DRM_MODE_CONTENT_TYPE_GRAPHICS 1 -#define DRM_MODE_CONTENT_TYPE_PHOTO 2 -#define DRM_MODE_CONTENT_TYPE_CINEMA 3 -#define DRM_MODE_CONTENT_TYPE_GAME 4 - -/* Aspect ratio flag bitmask (4 bits 22:19) */ -#define DRM_MODE_FLAG_PIC_AR_MASK (0x0F<<19) -#define DRM_MODE_FLAG_PIC_AR_NONE \ - (DRM_MODE_PICTURE_ASPECT_NONE<<19) -#define DRM_MODE_FLAG_PIC_AR_4_3 \ - (DRM_MODE_PICTURE_ASPECT_4_3<<19) -#define DRM_MODE_FLAG_PIC_AR_16_9 \ - (DRM_MODE_PICTURE_ASPECT_16_9<<19) -#define DRM_MODE_FLAG_PIC_AR_64_27 \ - (DRM_MODE_PICTURE_ASPECT_64_27<<19) -#define DRM_MODE_FLAG_PIC_AR_256_135 \ - (DRM_MODE_PICTURE_ASPECT_256_135<<19) - -#define DRM_MODE_FLAG_ALL (DRM_MODE_FLAG_PHSYNC | \ - DRM_MODE_FLAG_NHSYNC | \ - DRM_MODE_FLAG_PVSYNC | \ - DRM_MODE_FLAG_NVSYNC | \ - DRM_MODE_FLAG_INTERLACE | \ - DRM_MODE_FLAG_DBLSCAN | \ - DRM_MODE_FLAG_CSYNC | \ - DRM_MODE_FLAG_PCSYNC | \ - DRM_MODE_FLAG_NCSYNC | \ - DRM_MODE_FLAG_HSKEW | \ - DRM_MODE_FLAG_DBLCLK | \ - DRM_MODE_FLAG_CLKDIV2 | \ - DRM_MODE_FLAG_3D_MASK) - -/* DPMS flags */ -/* bit compatible with the xorg definitions. */ -#define DRM_MODE_DPMS_ON 0 -#define DRM_MODE_DPMS_STANDBY 1 -#define DRM_MODE_DPMS_SUSPEND 2 -#define DRM_MODE_DPMS_OFF 3 - -/* Scaling mode options */ -#define DRM_MODE_SCALE_NONE 0 /* Unmodified timing (display or - software can still scale) */ -#define DRM_MODE_SCALE_FULLSCREEN 1 /* Full screen, ignore aspect */ -#define DRM_MODE_SCALE_CENTER 2 /* Centered, no scaling */ -#define DRM_MODE_SCALE_ASPECT 3 /* Full screen, preserve aspect */ - -/* Dithering mode options */ -#define DRM_MODE_DITHERING_OFF 0 -#define DRM_MODE_DITHERING_ON 1 -#define DRM_MODE_DITHERING_AUTO 2 - -/* Dirty info options */ -#define DRM_MODE_DIRTY_OFF 0 -#define DRM_MODE_DIRTY_ON 1 -#define DRM_MODE_DIRTY_ANNOTATE 2 - -/* Link Status options */ -#define DRM_MODE_LINK_STATUS_GOOD 0 -#define DRM_MODE_LINK_STATUS_BAD 1 - -/* - * DRM_MODE_ROTATE_ - * - * Signals that a drm plane is been rotated degrees in counter - * clockwise direction. - * - * This define is provided as a convenience, looking up the property id - * using the name->prop id lookup is the preferred method. - */ -#define DRM_MODE_ROTATE_0 (1<<0) -#define DRM_MODE_ROTATE_90 (1<<1) -#define DRM_MODE_ROTATE_180 (1<<2) -#define DRM_MODE_ROTATE_270 (1<<3) - -/* - * DRM_MODE_ROTATE_MASK - * - * Bitmask used to look for drm plane rotations. - */ -#define DRM_MODE_ROTATE_MASK (\ - DRM_MODE_ROTATE_0 | \ - DRM_MODE_ROTATE_90 | \ - DRM_MODE_ROTATE_180 | \ - DRM_MODE_ROTATE_270) - -/* - * DRM_MODE_REFLECT_ - * - * Signals that the contents of a drm plane is reflected along the axis, - * in the same way as mirroring. - * See kerneldoc chapter "Plane Composition Properties" for more details. - * - * This define is provided as a convenience, looking up the property id - * using the name->prop id lookup is the preferred method. - */ -#define DRM_MODE_REFLECT_X (1<<4) -#define DRM_MODE_REFLECT_Y (1<<5) - -/* - * DRM_MODE_REFLECT_MASK - * - * Bitmask used to look for drm plane reflections. - */ -#define DRM_MODE_REFLECT_MASK (\ - DRM_MODE_REFLECT_X | \ - DRM_MODE_REFLECT_Y) - -/* Content Protection Flags */ -#define DRM_MODE_CONTENT_PROTECTION_UNDESIRED 0 -#define DRM_MODE_CONTENT_PROTECTION_DESIRED 1 -#define DRM_MODE_CONTENT_PROTECTION_ENABLED 2 - -/** - * struct drm_mode_modeinfo - Display mode information. - * @clock: pixel clock in kHz - * @hdisplay: horizontal display size - * @hsync_start: horizontal sync start - * @hsync_end: horizontal sync end - * @htotal: horizontal total size - * @hskew: horizontal skew - * @vdisplay: vertical display size - * @vsync_start: vertical sync start - * @vsync_end: vertical sync end - * @vtotal: vertical total size - * @vscan: vertical scan - * @vrefresh: approximate vertical refresh rate in Hz - * @flags: bitmask of misc. flags, see DRM_MODE_FLAG_* defines - * @type: bitmask of type flags, see DRM_MODE_TYPE_* defines - * @name: string describing the mode resolution - * - * This is the user-space API display mode information structure. For the - * kernel version see struct drm_display_mode. - */ -struct drm_mode_modeinfo { - __u32 clock; - __u16 hdisplay; - __u16 hsync_start; - __u16 hsync_end; - __u16 htotal; - __u16 hskew; - __u16 vdisplay; - __u16 vsync_start; - __u16 vsync_end; - __u16 vtotal; - __u16 vscan; - - __u32 vrefresh; - - __u32 flags; - __u32 type; - char name[DRM_DISPLAY_MODE_LEN]; -}; - -struct drm_mode_card_res { - __u64 fb_id_ptr; - __u64 crtc_id_ptr; - __u64 connector_id_ptr; - __u64 encoder_id_ptr; - __u32 count_fbs; - __u32 count_crtcs; - __u32 count_connectors; - __u32 count_encoders; - __u32 min_width; - __u32 max_width; - __u32 min_height; - __u32 max_height; -}; - -struct drm_mode_crtc { - __u64 set_connectors_ptr; - __u32 count_connectors; - - __u32 crtc_id; /**< Id */ - __u32 fb_id; /**< Id of framebuffer */ - - __u32 x; /**< x Position on the framebuffer */ - __u32 y; /**< y Position on the framebuffer */ - - __u32 gamma_size; - __u32 mode_valid; - struct drm_mode_modeinfo mode; -}; - -#define DRM_MODE_PRESENT_TOP_FIELD (1<<0) -#define DRM_MODE_PRESENT_BOTTOM_FIELD (1<<1) - -/* Planes blend with or override other bits on the CRTC */ -struct drm_mode_set_plane { - __u32 plane_id; - __u32 crtc_id; - __u32 fb_id; /* fb object contains surface format type */ - __u32 flags; /* see above flags */ - - /* Signed dest location allows it to be partially off screen */ - __s32 crtc_x; - __s32 crtc_y; - __u32 crtc_w; - __u32 crtc_h; - - /* Source values are 16.16 fixed point */ - __u32 src_x; - __u32 src_y; - __u32 src_h; - __u32 src_w; -}; - -struct drm_mode_get_plane { - __u32 plane_id; - - __u32 crtc_id; - __u32 fb_id; - - __u32 possible_crtcs; - __u32 gamma_size; - - __u32 count_format_types; - __u64 format_type_ptr; -}; - -struct drm_mode_get_plane_res { - __u64 plane_id_ptr; - __u32 count_planes; -}; - -#define DRM_MODE_ENCODER_NONE 0 -#define DRM_MODE_ENCODER_DAC 1 -#define DRM_MODE_ENCODER_TMDS 2 -#define DRM_MODE_ENCODER_LVDS 3 -#define DRM_MODE_ENCODER_TVDAC 4 -#define DRM_MODE_ENCODER_VIRTUAL 5 -#define DRM_MODE_ENCODER_DSI 6 -#define DRM_MODE_ENCODER_DPMST 7 -#define DRM_MODE_ENCODER_DPI 8 - -struct drm_mode_get_encoder { - __u32 encoder_id; - __u32 encoder_type; - - __u32 crtc_id; /**< Id of crtc */ - - __u32 possible_crtcs; - __u32 possible_clones; -}; - -/* This is for connectors with multiple signal types. */ -/* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */ -enum drm_mode_subconnector { - DRM_MODE_SUBCONNECTOR_Automatic = 0, /* DVI-I, TV */ - DRM_MODE_SUBCONNECTOR_Unknown = 0, /* DVI-I, TV, DP */ - DRM_MODE_SUBCONNECTOR_VGA = 1, /* DP */ - DRM_MODE_SUBCONNECTOR_DVID = 3, /* DVI-I DP */ - DRM_MODE_SUBCONNECTOR_DVIA = 4, /* DVI-I */ - DRM_MODE_SUBCONNECTOR_Composite = 5, /* TV */ - DRM_MODE_SUBCONNECTOR_SVIDEO = 6, /* TV */ - DRM_MODE_SUBCONNECTOR_Component = 8, /* TV */ - DRM_MODE_SUBCONNECTOR_SCART = 9, /* TV */ - DRM_MODE_SUBCONNECTOR_DisplayPort = 10, /* DP */ - DRM_MODE_SUBCONNECTOR_HDMIA = 11, /* DP */ - DRM_MODE_SUBCONNECTOR_Native = 15, /* DP */ - DRM_MODE_SUBCONNECTOR_Wireless = 18, /* DP */ -}; - -#define DRM_MODE_CONNECTOR_Unknown 0 -#define DRM_MODE_CONNECTOR_VGA 1 -#define DRM_MODE_CONNECTOR_DVII 2 -#define DRM_MODE_CONNECTOR_DVID 3 -#define DRM_MODE_CONNECTOR_DVIA 4 -#define DRM_MODE_CONNECTOR_Composite 5 -#define DRM_MODE_CONNECTOR_SVIDEO 6 -#define DRM_MODE_CONNECTOR_LVDS 7 -#define DRM_MODE_CONNECTOR_Component 8 -#define DRM_MODE_CONNECTOR_9PinDIN 9 -#define DRM_MODE_CONNECTOR_DisplayPort 10 -#define DRM_MODE_CONNECTOR_HDMIA 11 -#define DRM_MODE_CONNECTOR_HDMIB 12 -#define DRM_MODE_CONNECTOR_TV 13 -#define DRM_MODE_CONNECTOR_eDP 14 -#define DRM_MODE_CONNECTOR_VIRTUAL 15 -#define DRM_MODE_CONNECTOR_DSI 16 -#define DRM_MODE_CONNECTOR_DPI 17 -#define DRM_MODE_CONNECTOR_WRITEBACK 18 -#define DRM_MODE_CONNECTOR_SPI 19 -#define DRM_MODE_CONNECTOR_USB 20 - -/** - * struct drm_mode_get_connector - Get connector metadata. - * - * User-space can perform a GETCONNECTOR ioctl to retrieve information about a - * connector. User-space is expected to retrieve encoders, modes and properties - * by performing this ioctl at least twice: the first time to retrieve the - * number of elements, the second time to retrieve the elements themselves. - * - * To retrieve the number of elements, set @count_props and @count_encoders to - * zero, set @count_modes to 1, and set @modes_ptr to a temporary struct - * drm_mode_modeinfo element. - * - * To retrieve the elements, allocate arrays for @encoders_ptr, @modes_ptr, - * @props_ptr and @prop_values_ptr, then set @count_modes, @count_props and - * @count_encoders to their capacity. - * - * Performing the ioctl only twice may be racy: the number of elements may have - * changed with a hotplug event in-between the two ioctls. User-space is - * expected to retry the last ioctl until the number of elements stabilizes. - * The kernel won't fill any array which doesn't have the expected length. - * - * **Force-probing a connector** - * - * If the @count_modes field is set to zero and the DRM client is the current - * DRM master, the kernel will perform a forced probe on the connector to - * refresh the connector status, modes and EDID. A forced-probe can be slow, - * might cause flickering and the ioctl will block. - * - * User-space needs to force-probe connectors to ensure their metadata is - * up-to-date at startup and after receiving a hot-plug event. User-space - * may perform a forced-probe when the user explicitly requests it. User-space - * shouldn't perform a forced-probe in other situations. - */ -struct drm_mode_get_connector { - /** @encoders_ptr: Pointer to ``__u32`` array of object IDs. */ - __u64 encoders_ptr; - /** @modes_ptr: Pointer to struct drm_mode_modeinfo array. */ - __u64 modes_ptr; - /** @props_ptr: Pointer to ``__u32`` array of property IDs. */ - __u64 props_ptr; - /** @prop_values_ptr: Pointer to ``__u64`` array of property values. */ - __u64 prop_values_ptr; - - /** @count_modes: Number of modes. */ - __u32 count_modes; - /** @count_props: Number of properties. */ - __u32 count_props; - /** @count_encoders: Number of encoders. */ - __u32 count_encoders; - - /** @encoder_id: Object ID of the current encoder. */ - __u32 encoder_id; - /** @connector_id: Object ID of the connector. */ - __u32 connector_id; - /** - * @connector_type: Type of the connector. - * - * See DRM_MODE_CONNECTOR_* defines. - */ - __u32 connector_type; - /** - * @connector_type_id: Type-specific connector number. - * - * This is not an object ID. This is a per-type connector number. Each - * (type, type_id) combination is unique across all connectors of a DRM - * device. - */ - __u32 connector_type_id; - - /** - * @connection: Status of the connector. - * - * See enum drm_connector_status. - */ - __u32 connection; - /** @mm_width: Width of the connected sink in millimeters. */ - __u32 mm_width; - /** @mm_height: Height of the connected sink in millimeters. */ - __u32 mm_height; - /** - * @subpixel: Subpixel order of the connected sink. - * - * See enum subpixel_order. - */ - __u32 subpixel; - - /** @pad: Padding, must be zero. */ - __u32 pad; -}; - -#define DRM_MODE_PROP_PENDING (1<<0) /* deprecated, do not use */ -#define DRM_MODE_PROP_RANGE (1<<1) -#define DRM_MODE_PROP_IMMUTABLE (1<<2) -#define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */ -#define DRM_MODE_PROP_BLOB (1<<4) -#define DRM_MODE_PROP_BITMASK (1<<5) /* bitmask of enumerated types */ - -/* non-extended types: legacy bitmask, one bit per type: */ -#define DRM_MODE_PROP_LEGACY_TYPE ( \ - DRM_MODE_PROP_RANGE | \ - DRM_MODE_PROP_ENUM | \ - DRM_MODE_PROP_BLOB | \ - DRM_MODE_PROP_BITMASK) - -/* extended-types: rather than continue to consume a bit per type, - * grab a chunk of the bits to use as integer type id. - */ -#define DRM_MODE_PROP_EXTENDED_TYPE 0x0000ffc0 -#define DRM_MODE_PROP_TYPE(n) ((n) << 6) -#define DRM_MODE_PROP_OBJECT DRM_MODE_PROP_TYPE(1) -#define DRM_MODE_PROP_SIGNED_RANGE DRM_MODE_PROP_TYPE(2) - -/* the PROP_ATOMIC flag is used to hide properties from userspace that - * is not aware of atomic properties. This is mostly to work around - * older userspace (DDX drivers) that read/write each prop they find, - * witout being aware that this could be triggering a lengthy modeset. - */ -#define DRM_MODE_PROP_ATOMIC 0x80000000 - -struct drm_mode_property_enum { - __u64 value; - char name[DRM_PROP_NAME_LEN]; -}; - -struct drm_mode_get_property { - __u64 values_ptr; /* values and blob lengths */ - __u64 enum_blob_ptr; /* enum and blob id ptrs */ - - __u32 prop_id; - __u32 flags; - char name[DRM_PROP_NAME_LEN]; - - __u32 count_values; - /* This is only used to count enum values, not blobs. The _blobs is - * simply because of a historical reason, i.e. backwards compat. */ - __u32 count_enum_blobs; -}; - -struct drm_mode_connector_set_property { - __u64 value; - __u32 prop_id; - __u32 connector_id; -}; - -#define DRM_MODE_OBJECT_CRTC 0xcccccccc -#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0 -#define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0 -#define DRM_MODE_OBJECT_MODE 0xdededede -#define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0 -#define DRM_MODE_OBJECT_FB 0xfbfbfbfb -#define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb -#define DRM_MODE_OBJECT_PLANE 0xeeeeeeee -#define DRM_MODE_OBJECT_ANY 0 - -struct drm_mode_obj_get_properties { - __u64 props_ptr; - __u64 prop_values_ptr; - __u32 count_props; - __u32 obj_id; - __u32 obj_type; -}; - -struct drm_mode_obj_set_property { - __u64 value; - __u32 prop_id; - __u32 obj_id; - __u32 obj_type; -}; - -struct drm_mode_get_blob { - __u32 blob_id; - __u32 length; - __u64 data; -}; - -struct drm_mode_fb_cmd { - __u32 fb_id; - __u32 width; - __u32 height; - __u32 pitch; - __u32 bpp; - __u32 depth; - /* driver specific handle */ - __u32 handle; -}; - -#define DRM_MODE_FB_INTERLACED (1<<0) /* for interlaced framebuffers */ -#define DRM_MODE_FB_MODIFIERS (1<<1) /* enables ->modifer[] */ - -struct drm_mode_fb_cmd2 { - __u32 fb_id; - __u32 width; - __u32 height; - __u32 pixel_format; /* fourcc code from drm_fourcc.h */ - __u32 flags; /* see above flags */ - - /* - * In case of planar formats, this ioctl allows up to 4 - * buffer objects with offsets and pitches per plane. - * The pitch and offset order is dictated by the fourcc, - * e.g. NV12 (https://fourcc.org/yuv.php#NV12) is described as: - * - * YUV 4:2:0 image with a plane of 8 bit Y samples - * followed by an interleaved U/V plane containing - * 8 bit 2x2 subsampled colour difference samples. - * - * So it would consist of Y as offsets[0] and UV as - * offsets[1]. Note that offsets[0] will generally - * be 0 (but this is not required). - * - * To accommodate tiled, compressed, etc formats, a - * modifier can be specified. The default value of zero - * indicates "native" format as specified by the fourcc. - * Vendor specific modifier token. Note that even though - * it looks like we have a modifier per-plane, we in fact - * do not. The modifier for each plane must be identical. - * Thus all combinations of different data layouts for - * multi plane formats must be enumerated as separate - * modifiers. - */ - __u32 handles[4]; - __u32 pitches[4]; /* pitch for each plane */ - __u32 offsets[4]; /* offset of each plane */ - __u64 modifier[4]; /* ie, tiling, compress */ -}; - -#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01 -#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02 -#define DRM_MODE_FB_DIRTY_FLAGS 0x03 - -#define DRM_MODE_FB_DIRTY_MAX_CLIPS 256 - -/* - * Mark a region of a framebuffer as dirty. - * - * Some hardware does not automatically update display contents - * as a hardware or software draw to a framebuffer. This ioctl - * allows userspace to tell the kernel and the hardware what - * regions of the framebuffer have changed. - * - * The kernel or hardware is free to update more then just the - * region specified by the clip rects. The kernel or hardware - * may also delay and/or coalesce several calls to dirty into a - * single update. - * - * Userspace may annotate the updates, the annotates are a - * promise made by the caller that the change is either a copy - * of pixels or a fill of a single color in the region specified. - * - * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then - * the number of updated regions are half of num_clips given, - * where the clip rects are paired in src and dst. The width and - * height of each one of the pairs must match. - * - * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller - * promises that the region specified of the clip rects is filled - * completely with a single color as given in the color argument. - */ - -struct drm_mode_fb_dirty_cmd { - __u32 fb_id; - __u32 flags; - __u32 color; - __u32 num_clips; - __u64 clips_ptr; -}; - -struct drm_mode_mode_cmd { - __u32 connector_id; - struct drm_mode_modeinfo mode; -}; - -#define DRM_MODE_CURSOR_BO 0x01 -#define DRM_MODE_CURSOR_MOVE 0x02 -#define DRM_MODE_CURSOR_FLAGS 0x03 - -/* - * depending on the value in flags different members are used. - * - * CURSOR_BO uses - * crtc_id - * width - * height - * handle - if 0 turns the cursor off - * - * CURSOR_MOVE uses - * crtc_id - * x - * y - */ -struct drm_mode_cursor { - __u32 flags; - __u32 crtc_id; - __s32 x; - __s32 y; - __u32 width; - __u32 height; - /* driver specific handle */ - __u32 handle; -}; - -struct drm_mode_cursor2 { - __u32 flags; - __u32 crtc_id; - __s32 x; - __s32 y; - __u32 width; - __u32 height; - /* driver specific handle */ - __u32 handle; - __s32 hot_x; - __s32 hot_y; -}; - -struct drm_mode_crtc_lut { - __u32 crtc_id; - __u32 gamma_size; - - /* pointers to arrays */ - __u64 red; - __u64 green; - __u64 blue; -}; - -struct drm_color_ctm { - /* - * Conversion matrix in S31.32 sign-magnitude - * (not two's complement!) format. - */ - __u64 matrix[9]; -}; - -struct drm_color_lut { - /* - * Values are mapped linearly to 0.0 - 1.0 range, with 0x0 == 0.0 and - * 0xffff == 1.0. - */ - __u16 red; - __u16 green; - __u16 blue; - __u16 reserved; -}; - -/** - * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data. - * - * HDR Metadata Infoframe as per CTA 861.G spec. This is expected - * to match exactly with the spec. - * - * Userspace is expected to pass the metadata information as per - * the format described in this structure. - */ -struct hdr_metadata_infoframe { - /** - * @eotf: Electro-Optical Transfer Function (EOTF) - * used in the stream. - */ - __u8 eotf; - /** - * @metadata_type: Static_Metadata_Descriptor_ID. - */ - __u8 metadata_type; - /** - * @display_primaries: Color Primaries of the Data. - * These are coded as unsigned 16-bit values in units of - * 0.00002, where 0x0000 represents zero and 0xC350 - * represents 1.0000. - * @display_primaries.x: X cordinate of color primary. - * @display_primaries.y: Y cordinate of color primary. - */ - struct { - __u16 x, y; - } display_primaries[3]; - /** - * @white_point: White Point of Colorspace Data. - * These are coded as unsigned 16-bit values in units of - * 0.00002, where 0x0000 represents zero and 0xC350 - * represents 1.0000. - * @white_point.x: X cordinate of whitepoint of color primary. - * @white_point.y: Y cordinate of whitepoint of color primary. - */ - struct { - __u16 x, y; - } white_point; - /** - * @max_display_mastering_luminance: Max Mastering Display Luminance. - * This value is coded as an unsigned 16-bit value in units of 1 cd/m2, - * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2. - */ - __u16 max_display_mastering_luminance; - /** - * @min_display_mastering_luminance: Min Mastering Display Luminance. - * This value is coded as an unsigned 16-bit value in units of - * 0.0001 cd/m2, where 0x0001 represents 0.0001 cd/m2 and 0xFFFF - * represents 6.5535 cd/m2. - */ - __u16 min_display_mastering_luminance; - /** - * @max_cll: Max Content Light Level. - * This value is coded as an unsigned 16-bit value in units of 1 cd/m2, - * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2. - */ - __u16 max_cll; - /** - * @max_fall: Max Frame Average Light Level. - * This value is coded as an unsigned 16-bit value in units of 1 cd/m2, - * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2. - */ - __u16 max_fall; -}; - -/** - * struct hdr_output_metadata - HDR output metadata - * - * Metadata Information to be passed from userspace - */ -struct hdr_output_metadata { - /** - * @metadata_type: Static_Metadata_Descriptor_ID. - */ - __u32 metadata_type; - /** - * @hdmi_metadata_type1: HDR Metadata Infoframe. - */ - union { - struct hdr_metadata_infoframe hdmi_metadata_type1; - }; -}; - -#define DRM_MODE_PAGE_FLIP_EVENT 0x01 -#define DRM_MODE_PAGE_FLIP_ASYNC 0x02 -#define DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE 0x4 -#define DRM_MODE_PAGE_FLIP_TARGET_RELATIVE 0x8 -#define DRM_MODE_PAGE_FLIP_TARGET (DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE | \ - DRM_MODE_PAGE_FLIP_TARGET_RELATIVE) -#define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT | \ - DRM_MODE_PAGE_FLIP_ASYNC | \ - DRM_MODE_PAGE_FLIP_TARGET) - -/* - * Request a page flip on the specified crtc. - * - * This ioctl will ask KMS to schedule a page flip for the specified - * crtc. Once any pending rendering targeting the specified fb (as of - * ioctl time) has completed, the crtc will be reprogrammed to display - * that fb after the next vertical refresh. The ioctl returns - * immediately, but subsequent rendering to the current fb will block - * in the execbuffer ioctl until the page flip happens. If a page - * flip is already pending as the ioctl is called, EBUSY will be - * returned. - * - * Flag DRM_MODE_PAGE_FLIP_EVENT requests that drm sends back a vblank - * event (see drm.h: struct drm_event_vblank) when the page flip is - * done. The user_data field passed in with this ioctl will be - * returned as the user_data field in the vblank event struct. - * - * Flag DRM_MODE_PAGE_FLIP_ASYNC requests that the flip happen - * 'as soon as possible', meaning that it not delay waiting for vblank. - * This may cause tearing on the screen. - * - * The reserved field must be zero. - */ - -struct drm_mode_crtc_page_flip { - __u32 crtc_id; - __u32 fb_id; - __u32 flags; - __u32 reserved; - __u64 user_data; -}; - -/* - * Request a page flip on the specified crtc. - * - * Same as struct drm_mode_crtc_page_flip, but supports new flags and - * re-purposes the reserved field: - * - * The sequence field must be zero unless either of the - * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is specified. When - * the ABSOLUTE flag is specified, the sequence field denotes the absolute - * vblank sequence when the flip should take effect. When the RELATIVE - * flag is specified, the sequence field denotes the relative (to the - * current one when the ioctl is called) vblank sequence when the flip - * should take effect. NOTE: DRM_IOCTL_WAIT_VBLANK must still be used to - * make sure the vblank sequence before the target one has passed before - * calling this ioctl. The purpose of the - * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is merely to clarify - * the target for when code dealing with a page flip runs during a - * vertical blank period. - */ - -struct drm_mode_crtc_page_flip_target { - __u32 crtc_id; - __u32 fb_id; - __u32 flags; - __u32 sequence; - __u64 user_data; -}; - -/* create a dumb scanout buffer */ -struct drm_mode_create_dumb { - __u32 height; - __u32 width; - __u32 bpp; - __u32 flags; - /* handle, pitch, size will be returned */ - __u32 handle; - __u32 pitch; - __u64 size; -}; - -/* set up for mmap of a dumb scanout buffer */ -struct drm_mode_map_dumb { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 pad; - /** - * Fake offset to use for subsequent mmap call - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 offset; -}; - -struct drm_mode_destroy_dumb { - __u32 handle; -}; - -/* page-flip flags are valid, plus: */ -#define DRM_MODE_ATOMIC_TEST_ONLY 0x0100 -#define DRM_MODE_ATOMIC_NONBLOCK 0x0200 -#define DRM_MODE_ATOMIC_ALLOW_MODESET 0x0400 - -#define DRM_MODE_ATOMIC_FLAGS (\ - DRM_MODE_PAGE_FLIP_EVENT |\ - DRM_MODE_PAGE_FLIP_ASYNC |\ - DRM_MODE_ATOMIC_TEST_ONLY |\ - DRM_MODE_ATOMIC_NONBLOCK |\ - DRM_MODE_ATOMIC_ALLOW_MODESET) - -struct drm_mode_atomic { - __u32 flags; - __u32 count_objs; - __u64 objs_ptr; - __u64 count_props_ptr; - __u64 props_ptr; - __u64 prop_values_ptr; - __u64 reserved; - __u64 user_data; -}; - -struct drm_format_modifier_blob { -#define FORMAT_BLOB_CURRENT 1 - /* Version of this blob format */ - __u32 version; - - /* Flags */ - __u32 flags; - - /* Number of fourcc formats supported */ - __u32 count_formats; - - /* Where in this blob the formats exist (in bytes) */ - __u32 formats_offset; - - /* Number of drm_format_modifiers */ - __u32 count_modifiers; - - /* Where in this blob the modifiers exist (in bytes) */ - __u32 modifiers_offset; - - /* __u32 formats[] */ - /* struct drm_format_modifier modifiers[] */ -}; - -struct drm_format_modifier { - /* Bitmask of formats in get_plane format list this info applies to. The - * offset allows a sliding window of which 64 formats (bits). - * - * Some examples: - * In today's world with < 65 formats, and formats 0, and 2 are - * supported - * 0x0000000000000005 - * ^-offset = 0, formats = 5 - * - * If the number formats grew to 128, and formats 98-102 are - * supported with the modifier: - * - * 0x0000007c00000000 0000000000000000 - * ^ - * |__offset = 64, formats = 0x7c00000000 - * - */ - __u64 formats; - __u32 offset; - __u32 pad; - - /* The modifier that applies to the >get_plane format list bitmask. */ - __u64 modifier; -}; - -/** - * struct drm_mode_create_blob - Create New blob property - * - * Create a new 'blob' data property, copying length bytes from data pointer, - * and returning new blob ID. - */ -struct drm_mode_create_blob { - /** @data: Pointer to data to copy. */ - __u64 data; - /** @length: Length of data to copy. */ - __u32 length; - /** @blob_id: Return: new property ID. */ - __u32 blob_id; -}; - -/** - * struct drm_mode_destroy_blob - Destroy user blob - * @blob_id: blob_id to destroy - * - * Destroy a user-created blob property. - * - * User-space can release blobs as soon as they do not need to refer to them by - * their blob object ID. For instance, if you are using a MODE_ID blob in an - * atomic commit and you will not make another commit re-using the same ID, you - * can destroy the blob as soon as the commit has been issued, without waiting - * for it to complete. - */ -struct drm_mode_destroy_blob { - __u32 blob_id; -}; - -/** - * struct drm_mode_create_lease - Create lease - * - * Lease mode resources, creating another drm_master. - */ -struct drm_mode_create_lease { - /** @object_ids: Pointer to array of object ids (__u32) */ - __u64 object_ids; - /** @object_count: Number of object ids */ - __u32 object_count; - /** @flags: flags for new FD (O_CLOEXEC, etc) */ - __u32 flags; - - /** @lessee_id: Return: unique identifier for lessee. */ - __u32 lessee_id; - /** @fd: Return: file descriptor to new drm_master file */ - __u32 fd; -}; - -/** - * struct drm_mode_list_lessees - List lessees - * - * List lesses from a drm_master. - */ -struct drm_mode_list_lessees { - /** - * @count_lessees: Number of lessees. - * - * On input, provides length of the array. - * On output, provides total number. No - * more than the input number will be written - * back, so two calls can be used to get - * the size and then the data. - */ - __u32 count_lessees; - /** @pad: Padding. */ - __u32 pad; - - /** - * @lessees_ptr: Pointer to lessees. - * - * Pointer to __u64 array of lessee ids - */ - __u64 lessees_ptr; -}; - -/** - * struct drm_mode_get_lease - Get Lease - * - * Get leased objects. - */ -struct drm_mode_get_lease { - /** - * @count_objects: Number of leased objects. - * - * On input, provides length of the array. - * On output, provides total number. No - * more than the input number will be written - * back, so two calls can be used to get - * the size and then the data. - */ - __u32 count_objects; - /** @pad: Padding. */ - __u32 pad; - - /** - * @objects_ptr: Pointer to objects. - * - * Pointer to __u32 array of object ids. - */ - __u64 objects_ptr; -}; - -/** - * struct drm_mode_revoke_lease - Revoke lease - */ -struct drm_mode_revoke_lease { - /** @lessee_id: Unique ID of lessee */ - __u32 lessee_id; -}; - -/** - * struct drm_mode_rect - Two dimensional rectangle. - * @x1: Horizontal starting coordinate (inclusive). - * @y1: Vertical starting coordinate (inclusive). - * @x2: Horizontal ending coordinate (exclusive). - * @y2: Vertical ending coordinate (exclusive). - * - * With drm subsystem using struct drm_rect to manage rectangular area this - * export it to user-space. - * - * Currently used by drm_mode_atomic blob property FB_DAMAGE_CLIPS. - */ -struct drm_mode_rect { - __s32 x1; - __s32 y1; - __s32 x2; - __s32 y2; -}; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/arm/include/libdrm/drm_sarea.h b/prebuilts/arm/include/libdrm/drm_sarea.h deleted file mode 100644 index 93025be..0000000 --- a/prebuilts/arm/include/libdrm/drm_sarea.h +++ /dev/null @@ -1,92 +0,0 @@ -/** - * \file drm_sarea.h - * \brief SAREA definitions - * - * \author Michel Dänzer - */ - -/* - * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef _DRM_SAREA_H_ -#define _DRM_SAREA_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* SAREA area needs to be at least a page */ -#if defined(__alpha__) -#define SAREA_MAX 0x2000U -#elif defined(__mips__) -#define SAREA_MAX 0x4000U -#elif defined(__ia64__) -#define SAREA_MAX 0x10000U /* 64kB */ -#else -/* Intel 830M driver needs at least 8k SAREA */ -#define SAREA_MAX 0x2000U -#endif - -/** Maximum number of drawables in the SAREA */ -#define SAREA_MAX_DRAWABLES 256 - -#define SAREA_DRAWABLE_CLAIMED_ENTRY 0x80000000 - -/** SAREA drawable */ -struct drm_sarea_drawable { - unsigned int stamp; - unsigned int flags; -}; - -/** SAREA frame */ -struct drm_sarea_frame { - unsigned int x; - unsigned int y; - unsigned int width; - unsigned int height; - unsigned int fullscreen; -}; - -/** SAREA */ -struct drm_sarea { - /** first thing is always the DRM locking structure */ - struct drm_hw_lock lock; - /** \todo Use readers/writer lock for drm_sarea::drawable_lock */ - struct drm_hw_lock drawable_lock; - struct drm_sarea_drawable drawableTable[SAREA_MAX_DRAWABLES]; /**< drawables */ - struct drm_sarea_frame frame; /**< frame */ - drm_context_t dummy_context; -}; - -typedef struct drm_sarea_drawable drm_sarea_drawable_t; -typedef struct drm_sarea_frame drm_sarea_frame_t; -typedef struct drm_sarea drm_sarea_t; - -#if defined(__cplusplus) -} -#endif - -#endif /* _DRM_SAREA_H_ */ diff --git a/prebuilts/arm/include/libdrm/i915_drm.h b/prebuilts/arm/include/libdrm/i915_drm.h deleted file mode 100644 index 72afd94..0000000 --- a/prebuilts/arm/include/libdrm/i915_drm.h +++ /dev/null @@ -1,1915 +0,0 @@ -/* - * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ - -#ifndef _I915_DRM_H_ -#define _I915_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints. - */ - -/** - * DOC: uevents generated by i915 on it's device node - * - * I915_L3_PARITY_UEVENT - Generated when the driver receives a parity mismatch - * event from the gpu l3 cache. Additional information supplied is ROW, - * BANK, SUBBANK, SLICE of the affected cacheline. Userspace should keep - * track of these events and if a specific cache-line seems to have a - * persistent error remap it with the l3 remapping tool supplied in - * intel-gpu-tools. The value supplied with the event is always 1. - * - * I915_ERROR_UEVENT - Generated upon error detection, currently only via - * hangcheck. The error detection event is a good indicator of when things - * began to go badly. The value supplied with the event is a 1 upon error - * detection, and a 0 upon reset completion, signifying no more error - * exists. NOTE: Disabling hangcheck or reset via module parameter will - * cause the related events to not be seen. - * - * I915_RESET_UEVENT - Event is generated just before an attempt to reset the - * the GPU. The value supplied with the event is always 1. NOTE: Disable - * reset via module parameter will cause this event to not be seen. - */ -#define I915_L3_PARITY_UEVENT "L3_PARITY_ERROR" -#define I915_ERROR_UEVENT "ERROR" -#define I915_RESET_UEVENT "RESET" - -/* - * i915_user_extension: Base class for defining a chain of extensions - * - * Many interfaces need to grow over time. In most cases we can simply - * extend the struct and have userspace pass in more data. Another option, - * as demonstrated by Vulkan's approach to providing extensions for forward - * and backward compatibility, is to use a list of optional structs to - * provide those extra details. - * - * The key advantage to using an extension chain is that it allows us to - * redefine the interface more easily than an ever growing struct of - * increasing complexity, and for large parts of that interface to be - * entirely optional. The downside is more pointer chasing; chasing across - * the boundary with pointers encapsulated inside u64. - */ -struct i915_user_extension { - __u64 next_extension; - __u32 name; - __u32 flags; /* All undefined bits must be zero. */ - __u32 rsvd[4]; /* Reserved for future use; must be zero. */ -}; - -/* - * MOCS indexes used for GPU surfaces, defining the cacheability of the - * surface data and the coherency for this data wrt. CPU vs. GPU accesses. - */ -enum i915_mocs_table_index { - /* - * Not cached anywhere, coherency between CPU and GPU accesses is - * guaranteed. - */ - I915_MOCS_UNCACHED, - /* - * Cacheability and coherency controlled by the kernel automatically - * based on the DRM_I915_GEM_SET_CACHING IOCTL setting and the current - * usage of the surface (used for display scanout or not). - */ - I915_MOCS_PTE, - /* - * Cached in all GPU caches available on the platform. - * Coherency between CPU and GPU accesses to the surface is not - * guaranteed without extra synchronization. - */ - I915_MOCS_CACHED, -}; - -/* - * Different engines serve different roles, and there may be more than one - * engine serving each role. enum drm_i915_gem_engine_class provides a - * classification of the role of the engine, which may be used when requesting - * operations to be performed on a certain subset of engines, or for providing - * information about that group. - */ -enum drm_i915_gem_engine_class { - I915_ENGINE_CLASS_RENDER = 0, - I915_ENGINE_CLASS_COPY = 1, - I915_ENGINE_CLASS_VIDEO = 2, - I915_ENGINE_CLASS_VIDEO_ENHANCE = 3, - - /* should be kept compact */ - - I915_ENGINE_CLASS_INVALID = -1 -}; - -/** - * DOC: perf_events exposed by i915 through /sys/bus/event_sources/drivers/i915 - * - */ - -enum drm_i915_pmu_engine_sample { - I915_SAMPLE_BUSY = 0, - I915_SAMPLE_WAIT = 1, - I915_SAMPLE_SEMA = 2 -}; - -#define I915_PMU_SAMPLE_BITS (4) -#define I915_PMU_SAMPLE_MASK (0xf) -#define I915_PMU_SAMPLE_INSTANCE_BITS (8) -#define I915_PMU_CLASS_SHIFT \ - (I915_PMU_SAMPLE_BITS + I915_PMU_SAMPLE_INSTANCE_BITS) - -#define __I915_PMU_ENGINE(class, instance, sample) \ - ((class) << I915_PMU_CLASS_SHIFT | \ - (instance) << I915_PMU_SAMPLE_BITS | \ - (sample)) - -#define I915_PMU_ENGINE_BUSY(class, instance) \ - __I915_PMU_ENGINE(class, instance, I915_SAMPLE_BUSY) - -#define I915_PMU_ENGINE_WAIT(class, instance) \ - __I915_PMU_ENGINE(class, instance, I915_SAMPLE_WAIT) - -#define I915_PMU_ENGINE_SEMA(class, instance) \ - __I915_PMU_ENGINE(class, instance, I915_SAMPLE_SEMA) - -#define __I915_PMU_OTHER(x) (__I915_PMU_ENGINE(0xff, 0xff, 0xf) + 1 + (x)) - -#define I915_PMU_ACTUAL_FREQUENCY __I915_PMU_OTHER(0) -#define I915_PMU_REQUESTED_FREQUENCY __I915_PMU_OTHER(1) -#define I915_PMU_INTERRUPTS __I915_PMU_OTHER(2) -#define I915_PMU_RC6_RESIDENCY __I915_PMU_OTHER(3) - -#define I915_PMU_LAST I915_PMU_RC6_RESIDENCY - -/* Each region is a minimum of 16k, and there are at most 255 of them. - */ -#define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use - * of chars for next/prev indices */ -#define I915_LOG_MIN_TEX_REGION_SIZE 14 - -typedef struct _drm_i915_init { - enum { - I915_INIT_DMA = 0x01, - I915_CLEANUP_DMA = 0x02, - I915_RESUME_DMA = 0x03 - } func; - unsigned int mmio_offset; - int sarea_priv_offset; - unsigned int ring_start; - unsigned int ring_end; - unsigned int ring_size; - unsigned int front_offset; - unsigned int back_offset; - unsigned int depth_offset; - unsigned int w; - unsigned int h; - unsigned int pitch; - unsigned int pitch_bits; - unsigned int back_pitch; - unsigned int depth_pitch; - unsigned int cpp; - unsigned int chipset; -} drm_i915_init_t; - -typedef struct _drm_i915_sarea { - struct drm_tex_region texList[I915_NR_TEX_REGIONS + 1]; - int last_upload; /* last time texture was uploaded */ - int last_enqueue; /* last time a buffer was enqueued */ - int last_dispatch; /* age of the most recently dispatched buffer */ - int ctxOwner; /* last context to upload state */ - int texAge; - int pf_enabled; /* is pageflipping allowed? */ - int pf_active; - int pf_current_page; /* which buffer is being displayed? */ - int perf_boxes; /* performance boxes to be displayed */ - int width, height; /* screen size in pixels */ - - drm_handle_t front_handle; - int front_offset; - int front_size; - - drm_handle_t back_handle; - int back_offset; - int back_size; - - drm_handle_t depth_handle; - int depth_offset; - int depth_size; - - drm_handle_t tex_handle; - int tex_offset; - int tex_size; - int log_tex_granularity; - int pitch; - int rotation; /* 0, 90, 180 or 270 */ - int rotated_offset; - int rotated_size; - int rotated_pitch; - int virtualX, virtualY; - - unsigned int front_tiled; - unsigned int back_tiled; - unsigned int depth_tiled; - unsigned int rotated_tiled; - unsigned int rotated2_tiled; - - int pipeA_x; - int pipeA_y; - int pipeA_w; - int pipeA_h; - int pipeB_x; - int pipeB_y; - int pipeB_w; - int pipeB_h; - - /* fill out some space for old userspace triple buffer */ - drm_handle_t unused_handle; - __u32 unused1, unused2, unused3; - - /* buffer object handles for static buffers. May change - * over the lifetime of the client. - */ - __u32 front_bo_handle; - __u32 back_bo_handle; - __u32 unused_bo_handle; - __u32 depth_bo_handle; - -} drm_i915_sarea_t; - -/* due to userspace building against these headers we need some compat here */ -#define planeA_x pipeA_x -#define planeA_y pipeA_y -#define planeA_w pipeA_w -#define planeA_h pipeA_h -#define planeB_x pipeB_x -#define planeB_y pipeB_y -#define planeB_w pipeB_w -#define planeB_h pipeB_h - -/* Flags for perf_boxes - */ -#define I915_BOX_RING_EMPTY 0x1 -#define I915_BOX_FLIP 0x2 -#define I915_BOX_WAIT 0x4 -#define I915_BOX_TEXTURE_LOAD 0x8 -#define I915_BOX_LOST_CONTEXT 0x10 - -/* - * i915 specific ioctls. - * - * The device specific ioctl range is [DRM_COMMAND_BASE, DRM_COMMAND_END) ie - * [0x40, 0xa0) (a0 is excluded). The numbers below are defined as offset - * against DRM_COMMAND_BASE and should be between [0x0, 0x60). - */ -#define DRM_I915_INIT 0x00 -#define DRM_I915_FLUSH 0x01 -#define DRM_I915_FLIP 0x02 -#define DRM_I915_BATCHBUFFER 0x03 -#define DRM_I915_IRQ_EMIT 0x04 -#define DRM_I915_IRQ_WAIT 0x05 -#define DRM_I915_GETPARAM 0x06 -#define DRM_I915_SETPARAM 0x07 -#define DRM_I915_ALLOC 0x08 -#define DRM_I915_FREE 0x09 -#define DRM_I915_INIT_HEAP 0x0a -#define DRM_I915_CMDBUFFER 0x0b -#define DRM_I915_DESTROY_HEAP 0x0c -#define DRM_I915_SET_VBLANK_PIPE 0x0d -#define DRM_I915_GET_VBLANK_PIPE 0x0e -#define DRM_I915_VBLANK_SWAP 0x0f -#define DRM_I915_HWS_ADDR 0x11 -#define DRM_I915_GEM_INIT 0x13 -#define DRM_I915_GEM_EXECBUFFER 0x14 -#define DRM_I915_GEM_PIN 0x15 -#define DRM_I915_GEM_UNPIN 0x16 -#define DRM_I915_GEM_BUSY 0x17 -#define DRM_I915_GEM_THROTTLE 0x18 -#define DRM_I915_GEM_ENTERVT 0x19 -#define DRM_I915_GEM_LEAVEVT 0x1a -#define DRM_I915_GEM_CREATE 0x1b -#define DRM_I915_GEM_PREAD 0x1c -#define DRM_I915_GEM_PWRITE 0x1d -#define DRM_I915_GEM_MMAP 0x1e -#define DRM_I915_GEM_SET_DOMAIN 0x1f -#define DRM_I915_GEM_SW_FINISH 0x20 -#define DRM_I915_GEM_SET_TILING 0x21 -#define DRM_I915_GEM_GET_TILING 0x22 -#define DRM_I915_GEM_GET_APERTURE 0x23 -#define DRM_I915_GEM_MMAP_GTT 0x24 -#define DRM_I915_GET_PIPE_FROM_CRTC_ID 0x25 -#define DRM_I915_GEM_MADVISE 0x26 -#define DRM_I915_OVERLAY_PUT_IMAGE 0x27 -#define DRM_I915_OVERLAY_ATTRS 0x28 -#define DRM_I915_GEM_EXECBUFFER2 0x29 -#define DRM_I915_GEM_EXECBUFFER2_WR DRM_I915_GEM_EXECBUFFER2 -#define DRM_I915_GET_SPRITE_COLORKEY 0x2a -#define DRM_I915_SET_SPRITE_COLORKEY 0x2b -#define DRM_I915_GEM_WAIT 0x2c -#define DRM_I915_GEM_CONTEXT_CREATE 0x2d -#define DRM_I915_GEM_CONTEXT_DESTROY 0x2e -#define DRM_I915_GEM_SET_CACHING 0x2f -#define DRM_I915_GEM_GET_CACHING 0x30 -#define DRM_I915_REG_READ 0x31 -#define DRM_I915_GET_RESET_STATS 0x32 -#define DRM_I915_GEM_USERPTR 0x33 -#define DRM_I915_GEM_CONTEXT_GETPARAM 0x34 -#define DRM_I915_GEM_CONTEXT_SETPARAM 0x35 -#define DRM_I915_PERF_OPEN 0x36 -#define DRM_I915_PERF_ADD_CONFIG 0x37 -#define DRM_I915_PERF_REMOVE_CONFIG 0x38 -#define DRM_I915_QUERY 0x39 -/* Must be kept compact -- no holes */ - -#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t) -#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) -#define DRM_IOCTL_I915_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP) -#define DRM_IOCTL_I915_BATCHBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t) -#define DRM_IOCTL_I915_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t) -#define DRM_IOCTL_I915_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t) -#define DRM_IOCTL_I915_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t) -#define DRM_IOCTL_I915_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t) -#define DRM_IOCTL_I915_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t) -#define DRM_IOCTL_I915_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t) -#define DRM_IOCTL_I915_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t) -#define DRM_IOCTL_I915_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t) -#define DRM_IOCTL_I915_DESTROY_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_DESTROY_HEAP, drm_i915_mem_destroy_heap_t) -#define DRM_IOCTL_I915_SET_VBLANK_PIPE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t) -#define DRM_IOCTL_I915_GET_VBLANK_PIPE DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t) -#define DRM_IOCTL_I915_VBLANK_SWAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t) -#define DRM_IOCTL_I915_HWS_ADDR DRM_IOW(DRM_COMMAND_BASE + DRM_I915_HWS_ADDR, struct drm_i915_gem_init) -#define DRM_IOCTL_I915_GEM_INIT DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_INIT, struct drm_i915_gem_init) -#define DRM_IOCTL_I915_GEM_EXECBUFFER DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER, struct drm_i915_gem_execbuffer) -#define DRM_IOCTL_I915_GEM_EXECBUFFER2 DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2, struct drm_i915_gem_execbuffer2) -#define DRM_IOCTL_I915_GEM_EXECBUFFER2_WR DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2_WR, struct drm_i915_gem_execbuffer2) -#define DRM_IOCTL_I915_GEM_PIN DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_PIN, struct drm_i915_gem_pin) -#define DRM_IOCTL_I915_GEM_UNPIN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_UNPIN, struct drm_i915_gem_unpin) -#define DRM_IOCTL_I915_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_BUSY, struct drm_i915_gem_busy) -#define DRM_IOCTL_I915_GEM_SET_CACHING DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_SET_CACHING, struct drm_i915_gem_caching) -#define DRM_IOCTL_I915_GEM_GET_CACHING DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_GET_CACHING, struct drm_i915_gem_caching) -#define DRM_IOCTL_I915_GEM_THROTTLE DRM_IO ( DRM_COMMAND_BASE + DRM_I915_GEM_THROTTLE) -#define DRM_IOCTL_I915_GEM_ENTERVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT) -#define DRM_IOCTL_I915_GEM_LEAVEVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT) -#define DRM_IOCTL_I915_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE, struct drm_i915_gem_create) -#define DRM_IOCTL_I915_GEM_PREAD DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PREAD, struct drm_i915_gem_pread) -#define DRM_IOCTL_I915_GEM_PWRITE DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite) -#define DRM_IOCTL_I915_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap) -#define DRM_IOCTL_I915_GEM_MMAP_GTT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP_GTT, struct drm_i915_gem_mmap_gtt) -#define DRM_IOCTL_I915_GEM_SET_DOMAIN DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SET_DOMAIN, struct drm_i915_gem_set_domain) -#define DRM_IOCTL_I915_GEM_SW_FINISH DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SW_FINISH, struct drm_i915_gem_sw_finish) -#define DRM_IOCTL_I915_GEM_SET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling) -#define DRM_IOCTL_I915_GEM_GET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling) -#define DRM_IOCTL_I915_GEM_GET_APERTURE DRM_IOR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture) -#define DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_PIPE_FROM_CRTC_ID, struct drm_i915_get_pipe_from_crtc_id) -#define DRM_IOCTL_I915_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MADVISE, struct drm_i915_gem_madvise) -#define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE DRM_IOW(DRM_COMMAND_BASE + DRM_I915_OVERLAY_PUT_IMAGE, struct drm_intel_overlay_put_image) -#define DRM_IOCTL_I915_OVERLAY_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_OVERLAY_ATTRS, struct drm_intel_overlay_attrs) -#define DRM_IOCTL_I915_SET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_SET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey) -#define DRM_IOCTL_I915_GET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey) -#define DRM_IOCTL_I915_GEM_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_WAIT, struct drm_i915_gem_wait) -#define DRM_IOCTL_I915_GEM_CONTEXT_CREATE DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create) -#define DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create_ext) -#define DRM_IOCTL_I915_GEM_CONTEXT_DESTROY DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_DESTROY, struct drm_i915_gem_context_destroy) -#define DRM_IOCTL_I915_REG_READ DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_REG_READ, struct drm_i915_reg_read) -#define DRM_IOCTL_I915_GET_RESET_STATS DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GET_RESET_STATS, struct drm_i915_reset_stats) -#define DRM_IOCTL_I915_GEM_USERPTR DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_USERPTR, struct drm_i915_gem_userptr) -#define DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_GETPARAM, struct drm_i915_gem_context_param) -#define DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_SETPARAM, struct drm_i915_gem_context_param) -#define DRM_IOCTL_I915_PERF_OPEN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_OPEN, struct drm_i915_perf_open_param) -#define DRM_IOCTL_I915_PERF_ADD_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config) -#define DRM_IOCTL_I915_PERF_REMOVE_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64) -#define DRM_IOCTL_I915_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_QUERY, struct drm_i915_query) - -/* Allow drivers to submit batchbuffers directly to hardware, relying - * on the security mechanisms provided by hardware. - */ -typedef struct drm_i915_batchbuffer { - int start; /* agp offset */ - int used; /* nr bytes in use */ - int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ - int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ - int num_cliprects; /* mulitpass with multiple cliprects? */ - struct drm_clip_rect *cliprects; /* pointer to userspace cliprects */ -} drm_i915_batchbuffer_t; - -/* As above, but pass a pointer to userspace buffer which can be - * validated by the kernel prior to sending to hardware. - */ -typedef struct _drm_i915_cmdbuffer { - char *buf; /* pointer to userspace command buffer */ - int sz; /* nr bytes in buf */ - int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ - int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ - int num_cliprects; /* mulitpass with multiple cliprects? */ - struct drm_clip_rect *cliprects; /* pointer to userspace cliprects */ -} drm_i915_cmdbuffer_t; - -/* Userspace can request & wait on irq's: - */ -typedef struct drm_i915_irq_emit { - int *irq_seq; -} drm_i915_irq_emit_t; - -typedef struct drm_i915_irq_wait { - int irq_seq; -} drm_i915_irq_wait_t; - -/* - * Different modes of per-process Graphics Translation Table, - * see I915_PARAM_HAS_ALIASING_PPGTT - */ -#define I915_GEM_PPGTT_NONE 0 -#define I915_GEM_PPGTT_ALIASING 1 -#define I915_GEM_PPGTT_FULL 2 - -/* Ioctl to query kernel params: - */ -#define I915_PARAM_IRQ_ACTIVE 1 -#define I915_PARAM_ALLOW_BATCHBUFFER 2 -#define I915_PARAM_LAST_DISPATCH 3 -#define I915_PARAM_CHIPSET_ID 4 -#define I915_PARAM_HAS_GEM 5 -#define I915_PARAM_NUM_FENCES_AVAIL 6 -#define I915_PARAM_HAS_OVERLAY 7 -#define I915_PARAM_HAS_PAGEFLIPPING 8 -#define I915_PARAM_HAS_EXECBUF2 9 -#define I915_PARAM_HAS_BSD 10 -#define I915_PARAM_HAS_BLT 11 -#define I915_PARAM_HAS_RELAXED_FENCING 12 -#define I915_PARAM_HAS_COHERENT_RINGS 13 -#define I915_PARAM_HAS_EXEC_CONSTANTS 14 -#define I915_PARAM_HAS_RELAXED_DELTA 15 -#define I915_PARAM_HAS_GEN7_SOL_RESET 16 -#define I915_PARAM_HAS_LLC 17 -#define I915_PARAM_HAS_ALIASING_PPGTT 18 -#define I915_PARAM_HAS_WAIT_TIMEOUT 19 -#define I915_PARAM_HAS_SEMAPHORES 20 -#define I915_PARAM_HAS_PRIME_VMAP_FLUSH 21 -#define I915_PARAM_HAS_VEBOX 22 -#define I915_PARAM_HAS_SECURE_BATCHES 23 -#define I915_PARAM_HAS_PINNED_BATCHES 24 -#define I915_PARAM_HAS_EXEC_NO_RELOC 25 -#define I915_PARAM_HAS_EXEC_HANDLE_LUT 26 -#define I915_PARAM_HAS_WT 27 -#define I915_PARAM_CMD_PARSER_VERSION 28 -#define I915_PARAM_HAS_COHERENT_PHYS_GTT 29 -#define I915_PARAM_MMAP_VERSION 30 -#define I915_PARAM_HAS_BSD2 31 -#define I915_PARAM_REVISION 32 -#define I915_PARAM_SUBSLICE_TOTAL 33 -#define I915_PARAM_EU_TOTAL 34 -#define I915_PARAM_HAS_GPU_RESET 35 -#define I915_PARAM_HAS_RESOURCE_STREAMER 36 -#define I915_PARAM_HAS_EXEC_SOFTPIN 37 -#define I915_PARAM_HAS_POOLED_EU 38 -#define I915_PARAM_MIN_EU_IN_POOL 39 -#define I915_PARAM_MMAP_GTT_VERSION 40 - -/* - * Query whether DRM_I915_GEM_EXECBUFFER2 supports user defined execution - * priorities and the driver will attempt to execute batches in priority order. - * The param returns a capability bitmask, nonzero implies that the scheduler - * is enabled, with different features present according to the mask. - * - * The initial priority for each batch is supplied by the context and is - * controlled via I915_CONTEXT_PARAM_PRIORITY. - */ -#define I915_PARAM_HAS_SCHEDULER 41 -#define I915_SCHEDULER_CAP_ENABLED (1ul << 0) -#define I915_SCHEDULER_CAP_PRIORITY (1ul << 1) -#define I915_SCHEDULER_CAP_PREEMPTION (1ul << 2) -#define I915_SCHEDULER_CAP_SEMAPHORES (1ul << 3) - -#define I915_PARAM_HUC_STATUS 42 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to opt-out of - * synchronisation with implicit fencing on individual objects. - * See EXEC_OBJECT_ASYNC. - */ -#define I915_PARAM_HAS_EXEC_ASYNC 43 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports explicit fence support - - * both being able to pass in a sync_file fd to wait upon before executing, - * and being able to return a new sync_file fd that is signaled when the - * current request is complete. See I915_EXEC_FENCE_IN and I915_EXEC_FENCE_OUT. - */ -#define I915_PARAM_HAS_EXEC_FENCE 44 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to capture - * user specified buffers for post-mortem debugging of GPU hangs. See - * EXEC_OBJECT_CAPTURE. - */ -#define I915_PARAM_HAS_EXEC_CAPTURE 45 - -#define I915_PARAM_SLICE_MASK 46 - -/* Assuming it's uniform for each slice, this queries the mask of subslices - * per-slice for this system. - */ -#define I915_PARAM_SUBSLICE_MASK 47 - -/* - * Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying the batch buffer - * as the first execobject as opposed to the last. See I915_EXEC_BATCH_FIRST. - */ -#define I915_PARAM_HAS_EXEC_BATCH_FIRST 48 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying an array of - * drm_i915_gem_exec_fence structures. See I915_EXEC_FENCE_ARRAY. - */ -#define I915_PARAM_HAS_EXEC_FENCE_ARRAY 49 - -/* - * Query whether every context (both per-file default and user created) is - * isolated (insofar as HW supports). If this parameter is not true, then - * freshly created contexts may inherit values from an existing context, - * rather than default HW values. If true, it also ensures (insofar as HW - * supports) that all state set by this context will not leak to any other - * context. - * - * As not every engine across every gen support contexts, the returned - * value reports the support of context isolation for individual engines by - * returning a bitmask of each engine class set to true if that class supports - * isolation. - */ -#define I915_PARAM_HAS_CONTEXT_ISOLATION 50 - -/* Frequency of the command streamer timestamps given by the *_TIMESTAMP - * registers. This used to be fixed per platform but from CNL onwards, this - * might vary depending on the parts. - */ -#define I915_PARAM_CS_TIMESTAMP_FREQUENCY 51 - -/* - * Once upon a time we supposed that writes through the GGTT would be - * immediately in physical memory (once flushed out of the CPU path). However, - * on a few different processors and chipsets, this is not necessarily the case - * as the writes appear to be buffered internally. Thus a read of the backing - * storage (physical memory) via a different path (with different physical tags - * to the indirect write via the GGTT) will see stale values from before - * the GGTT write. Inside the kernel, we can for the most part keep track of - * the different read/write domains in use (e.g. set-domain), but the assumption - * of coherency is baked into the ABI, hence reporting its true state in this - * parameter. - * - * Reports true when writes via mmap_gtt are immediately visible following an - * lfence to flush the WCB. - * - * Reports false when writes via mmap_gtt are indeterminately delayed in an in - * internal buffer and are _not_ immediately visible to third parties accessing - * directly via mmap_cpu/mmap_wc. Use of mmap_gtt as part of an IPC - * communications channel when reporting false is strongly disadvised. - */ -#define I915_PARAM_MMAP_GTT_COHERENT 52 - -/* Must be kept compact -- no holes and well documented */ - -typedef struct drm_i915_getparam { - __s32 param; - /* - * WARNING: Using pointers instead of fixed-size u64 means we need to write - * compat32 code. Don't repeat this mistake. - */ - int *value; -} drm_i915_getparam_t; - -/* Ioctl to set kernel params: - */ -#define I915_SETPARAM_USE_MI_BATCHBUFFER_START 1 -#define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY 2 -#define I915_SETPARAM_ALLOW_BATCHBUFFER 3 -#define I915_SETPARAM_NUM_USED_FENCES 4 -/* Must be kept compact -- no holes */ - -typedef struct drm_i915_setparam { - int param; - int value; -} drm_i915_setparam_t; - -/* A memory manager for regions of shared memory: - */ -#define I915_MEM_REGION_AGP 1 - -typedef struct drm_i915_mem_alloc { - int region; - int alignment; - int size; - int *region_offset; /* offset from start of fb or agp */ -} drm_i915_mem_alloc_t; - -typedef struct drm_i915_mem_free { - int region; - int region_offset; -} drm_i915_mem_free_t; - -typedef struct drm_i915_mem_init_heap { - int region; - int size; - int start; -} drm_i915_mem_init_heap_t; - -/* Allow memory manager to be torn down and re-initialized (eg on - * rotate): - */ -typedef struct drm_i915_mem_destroy_heap { - int region; -} drm_i915_mem_destroy_heap_t; - -/* Allow X server to configure which pipes to monitor for vblank signals - */ -#define DRM_I915_VBLANK_PIPE_A 1 -#define DRM_I915_VBLANK_PIPE_B 2 - -typedef struct drm_i915_vblank_pipe { - int pipe; -} drm_i915_vblank_pipe_t; - -/* Schedule buffer swap at given vertical blank: - */ -typedef struct drm_i915_vblank_swap { - drm_drawable_t drawable; - enum drm_vblank_seq_type seqtype; - unsigned int sequence; -} drm_i915_vblank_swap_t; - -typedef struct drm_i915_hws_addr { - __u64 addr; -} drm_i915_hws_addr_t; - -struct drm_i915_gem_init { - /** - * Beginning offset in the GTT to be managed by the DRM memory - * manager. - */ - __u64 gtt_start; - /** - * Ending offset in the GTT to be managed by the DRM memory - * manager. - */ - __u64 gtt_end; -}; - -struct drm_i915_gem_create { - /** - * Requested size for the object. - * - * The (page-aligned) allocated size for the object will be returned. - */ - __u64 size; - /** - * Returned handle for the object. - * - * Object handles are nonzero. - */ - __u32 handle; - __u32 pad; -}; - -struct drm_i915_gem_pread { - /** Handle for the object being read. */ - __u32 handle; - __u32 pad; - /** Offset into the object to read from */ - __u64 offset; - /** Length of data to read */ - __u64 size; - /** - * Pointer to write the data into. - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 data_ptr; -}; - -struct drm_i915_gem_pwrite { - /** Handle for the object being written to. */ - __u32 handle; - __u32 pad; - /** Offset into the object to write to */ - __u64 offset; - /** Length of data to write */ - __u64 size; - /** - * Pointer to read the data from. - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 data_ptr; -}; - -struct drm_i915_gem_mmap { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 pad; - /** Offset in the object to map. */ - __u64 offset; - /** - * Length of data to map. - * - * The value will be page-aligned. - */ - __u64 size; - /** - * Returned pointer the data was mapped at. - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 addr_ptr; - - /** - * Flags for extended behaviour. - * - * Added in version 2. - */ - __u64 flags; -#define I915_MMAP_WC 0x1 -}; - -struct drm_i915_gem_mmap_gtt { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 pad; - /** - * Fake offset to use for subsequent mmap call - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 offset; -}; - -struct drm_i915_gem_set_domain { - /** Handle for the object */ - __u32 handle; - - /** New read domains */ - __u32 read_domains; - - /** New write domain */ - __u32 write_domain; -}; - -struct drm_i915_gem_sw_finish { - /** Handle for the object */ - __u32 handle; -}; - -struct drm_i915_gem_relocation_entry { - /** - * Handle of the buffer being pointed to by this relocation entry. - * - * It's appealing to make this be an index into the mm_validate_entry - * list to refer to the buffer, but this allows the driver to create - * a relocation list for state buffers and not re-write it per - * exec using the buffer. - */ - __u32 target_handle; - - /** - * Value to be added to the offset of the target buffer to make up - * the relocation entry. - */ - __u32 delta; - - /** Offset in the buffer the relocation entry will be written into */ - __u64 offset; - - /** - * Offset value of the target buffer that the relocation entry was last - * written as. - * - * If the buffer has the same offset as last time, we can skip syncing - * and writing the relocation. This value is written back out by - * the execbuffer ioctl when the relocation is written. - */ - __u64 presumed_offset; - - /** - * Target memory domains read by this operation. - */ - __u32 read_domains; - - /** - * Target memory domains written by this operation. - * - * Note that only one domain may be written by the whole - * execbuffer operation, so that where there are conflicts, - * the application will get -EINVAL back. - */ - __u32 write_domain; -}; - -/** @{ - * Intel memory domains - * - * Most of these just align with the various caches in - * the system and are used to flush and invalidate as - * objects end up cached in different domains. - */ -/** CPU cache */ -#define I915_GEM_DOMAIN_CPU 0x00000001 -/** Render cache, used by 2D and 3D drawing */ -#define I915_GEM_DOMAIN_RENDER 0x00000002 -/** Sampler cache, used by texture engine */ -#define I915_GEM_DOMAIN_SAMPLER 0x00000004 -/** Command queue, used to load batch buffers */ -#define I915_GEM_DOMAIN_COMMAND 0x00000008 -/** Instruction cache, used by shader programs */ -#define I915_GEM_DOMAIN_INSTRUCTION 0x00000010 -/** Vertex address cache */ -#define I915_GEM_DOMAIN_VERTEX 0x00000020 -/** GTT domain - aperture and scanout */ -#define I915_GEM_DOMAIN_GTT 0x00000040 -/** WC domain - uncached access */ -#define I915_GEM_DOMAIN_WC 0x00000080 -/** @} */ - -struct drm_i915_gem_exec_object { - /** - * User's handle for a buffer to be bound into the GTT for this - * operation. - */ - __u32 handle; - - /** Number of relocations to be performed on this buffer */ - __u32 relocation_count; - /** - * Pointer to array of struct drm_i915_gem_relocation_entry containing - * the relocations to be performed in this buffer. - */ - __u64 relocs_ptr; - - /** Required alignment in graphics aperture */ - __u64 alignment; - - /** - * Returned value of the updated offset of the object, for future - * presumed_offset writes. - */ - __u64 offset; -}; - -struct drm_i915_gem_execbuffer { - /** - * List of buffers to be validated with their relocations to be - * performend on them. - * - * This is a pointer to an array of struct drm_i915_gem_validate_entry. - * - * These buffers must be listed in an order such that all relocations - * a buffer is performing refer to buffers that have already appeared - * in the validate list. - */ - __u64 buffers_ptr; - __u32 buffer_count; - - /** Offset in the batchbuffer to start execution from. */ - __u32 batch_start_offset; - /** Bytes used in batchbuffer from batch_start_offset */ - __u32 batch_len; - __u32 DR1; - __u32 DR4; - __u32 num_cliprects; - /** This is a struct drm_clip_rect *cliprects */ - __u64 cliprects_ptr; -}; - -struct drm_i915_gem_exec_object2 { - /** - * User's handle for a buffer to be bound into the GTT for this - * operation. - */ - __u32 handle; - - /** Number of relocations to be performed on this buffer */ - __u32 relocation_count; - /** - * Pointer to array of struct drm_i915_gem_relocation_entry containing - * the relocations to be performed in this buffer. - */ - __u64 relocs_ptr; - - /** Required alignment in graphics aperture */ - __u64 alignment; - - /** - * When the EXEC_OBJECT_PINNED flag is specified this is populated by - * the user with the GTT offset at which this object will be pinned. - * When the I915_EXEC_NO_RELOC flag is specified this must contain the - * presumed_offset of the object. - * During execbuffer2 the kernel populates it with the value of the - * current GTT offset of the object, for future presumed_offset writes. - */ - __u64 offset; - -#define EXEC_OBJECT_NEEDS_FENCE (1<<0) -#define EXEC_OBJECT_NEEDS_GTT (1<<1) -#define EXEC_OBJECT_WRITE (1<<2) -#define EXEC_OBJECT_SUPPORTS_48B_ADDRESS (1<<3) -#define EXEC_OBJECT_PINNED (1<<4) -#define EXEC_OBJECT_PAD_TO_SIZE (1<<5) -/* The kernel implicitly tracks GPU activity on all GEM objects, and - * synchronises operations with outstanding rendering. This includes - * rendering on other devices if exported via dma-buf. However, sometimes - * this tracking is too coarse and the user knows better. For example, - * if the object is split into non-overlapping ranges shared between different - * clients or engines (i.e. suballocating objects), the implicit tracking - * by kernel assumes that each operation affects the whole object rather - * than an individual range, causing needless synchronisation between clients. - * The kernel will also forgo any CPU cache flushes prior to rendering from - * the object as the client is expected to be also handling such domain - * tracking. - * - * The kernel maintains the implicit tracking in order to manage resources - * used by the GPU - this flag only disables the synchronisation prior to - * rendering with this object in this execbuf. - * - * Opting out of implicit synhronisation requires the user to do its own - * explicit tracking to avoid rendering corruption. See, for example, - * I915_PARAM_HAS_EXEC_FENCE to order execbufs and execute them asynchronously. - */ -#define EXEC_OBJECT_ASYNC (1<<6) -/* Request that the contents of this execobject be copied into the error - * state upon a GPU hang involving this batch for post-mortem debugging. - * These buffers are recorded in no particular order as "user" in - * /sys/class/drm/cardN/error. Query I915_PARAM_HAS_EXEC_CAPTURE to see - * if the kernel supports this flag. - */ -#define EXEC_OBJECT_CAPTURE (1<<7) -/* All remaining bits are MBZ and RESERVED FOR FUTURE USE */ -#define __EXEC_OBJECT_UNKNOWN_FLAGS -(EXEC_OBJECT_CAPTURE<<1) - __u64 flags; - - union { - __u64 rsvd1; - __u64 pad_to_size; - }; - __u64 rsvd2; -}; - -struct drm_i915_gem_exec_fence { - /** - * User's handle for a drm_syncobj to wait on or signal. - */ - __u32 handle; - -#define I915_EXEC_FENCE_WAIT (1<<0) -#define I915_EXEC_FENCE_SIGNAL (1<<1) -#define __I915_EXEC_FENCE_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SIGNAL << 1)) - __u32 flags; -}; - -struct drm_i915_gem_execbuffer2 { - /** - * List of gem_exec_object2 structs - */ - __u64 buffers_ptr; - __u32 buffer_count; - - /** Offset in the batchbuffer to start execution from. */ - __u32 batch_start_offset; - /** Bytes used in batchbuffer from batch_start_offset */ - __u32 batch_len; - __u32 DR1; - __u32 DR4; - __u32 num_cliprects; - /** - * This is a struct drm_clip_rect *cliprects if I915_EXEC_FENCE_ARRAY - * is not set. If I915_EXEC_FENCE_ARRAY is set, then this is a - * struct drm_i915_gem_exec_fence *fences. - */ - __u64 cliprects_ptr; -#define I915_EXEC_RING_MASK (0x3f) -#define I915_EXEC_DEFAULT (0<<0) -#define I915_EXEC_RENDER (1<<0) -#define I915_EXEC_BSD (2<<0) -#define I915_EXEC_BLT (3<<0) -#define I915_EXEC_VEBOX (4<<0) - -/* Used for switching the constants addressing mode on gen4+ RENDER ring. - * Gen6+ only supports relative addressing to dynamic state (default) and - * absolute addressing. - * - * These flags are ignored for the BSD and BLT rings. - */ -#define I915_EXEC_CONSTANTS_MASK (3<<6) -#define I915_EXEC_CONSTANTS_REL_GENERAL (0<<6) /* default */ -#define I915_EXEC_CONSTANTS_ABSOLUTE (1<<6) -#define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) /* gen4/5 only */ - __u64 flags; - __u64 rsvd1; /* now used for context info */ - __u64 rsvd2; -}; - -/** Resets the SO write offset registers for transform feedback on gen7. */ -#define I915_EXEC_GEN7_SOL_RESET (1<<8) - -/** Request a privileged ("secure") batch buffer. Note only available for - * DRM_ROOT_ONLY | DRM_MASTER processes. - */ -#define I915_EXEC_SECURE (1<<9) - -/** Inform the kernel that the batch is and will always be pinned. This - * negates the requirement for a workaround to be performed to avoid - * an incoherent CS (such as can be found on 830/845). If this flag is - * not passed, the kernel will endeavour to make sure the batch is - * coherent with the CS before execution. If this flag is passed, - * userspace assumes the responsibility for ensuring the same. - */ -#define I915_EXEC_IS_PINNED (1<<10) - -/** Provide a hint to the kernel that the command stream and auxiliary - * state buffers already holds the correct presumed addresses and so the - * relocation process may be skipped if no buffers need to be moved in - * preparation for the execbuffer. - */ -#define I915_EXEC_NO_RELOC (1<<11) - -/** Use the reloc.handle as an index into the exec object array rather - * than as the per-file handle. - */ -#define I915_EXEC_HANDLE_LUT (1<<12) - -/** Used for switching BSD rings on the platforms with two BSD rings */ -#define I915_EXEC_BSD_SHIFT (13) -#define I915_EXEC_BSD_MASK (3 << I915_EXEC_BSD_SHIFT) -/* default ping-pong mode */ -#define I915_EXEC_BSD_DEFAULT (0 << I915_EXEC_BSD_SHIFT) -#define I915_EXEC_BSD_RING1 (1 << I915_EXEC_BSD_SHIFT) -#define I915_EXEC_BSD_RING2 (2 << I915_EXEC_BSD_SHIFT) - -/** Tell the kernel that the batchbuffer is processed by - * the resource streamer. - */ -#define I915_EXEC_RESOURCE_STREAMER (1<<15) - -/* Setting I915_EXEC_FENCE_IN implies that lower_32_bits(rsvd2) represent - * a sync_file fd to wait upon (in a nonblocking manner) prior to executing - * the batch. - * - * Returns -EINVAL if the sync_file fd cannot be found. - */ -#define I915_EXEC_FENCE_IN (1<<16) - -/* Setting I915_EXEC_FENCE_OUT causes the ioctl to return a sync_file fd - * in the upper_32_bits(rsvd2) upon success. Ownership of the fd is given - * to the caller, and it should be close() after use. (The fd is a regular - * file descriptor and will be cleaned up on process termination. It holds - * a reference to the request, but nothing else.) - * - * The sync_file fd can be combined with other sync_file and passed either - * to execbuf using I915_EXEC_FENCE_IN, to atomic KMS ioctls (so that a flip - * will only occur after this request completes), or to other devices. - * - * Using I915_EXEC_FENCE_OUT requires use of - * DRM_IOCTL_I915_GEM_EXECBUFFER2_WR ioctl so that the result is written - * back to userspace. Failure to do so will cause the out-fence to always - * be reported as zero, and the real fence fd to be leaked. - */ -#define I915_EXEC_FENCE_OUT (1<<17) - -/* - * Traditionally the execbuf ioctl has only considered the final element in - * the execobject[] to be the executable batch. Often though, the client - * will known the batch object prior to construction and being able to place - * it into the execobject[] array first can simplify the relocation tracking. - * Setting I915_EXEC_BATCH_FIRST tells execbuf to use element 0 of the - * execobject[] as the * batch instead (the default is to use the last - * element). - */ -#define I915_EXEC_BATCH_FIRST (1<<18) - -/* Setting I915_FENCE_ARRAY implies that num_cliprects and cliprects_ptr - * define an array of i915_gem_exec_fence structures which specify a set of - * dma fences to wait upon or signal. - */ -#define I915_EXEC_FENCE_ARRAY (1<<19) - -#define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_ARRAY<<1)) - -#define I915_EXEC_CONTEXT_ID_MASK (0xffffffff) -#define i915_execbuffer2_set_context_id(eb2, context) \ - (eb2).rsvd1 = context & I915_EXEC_CONTEXT_ID_MASK -#define i915_execbuffer2_get_context_id(eb2) \ - ((eb2).rsvd1 & I915_EXEC_CONTEXT_ID_MASK) - -struct drm_i915_gem_pin { - /** Handle of the buffer to be pinned. */ - __u32 handle; - __u32 pad; - - /** alignment required within the aperture */ - __u64 alignment; - - /** Returned GTT offset of the buffer. */ - __u64 offset; -}; - -struct drm_i915_gem_unpin { - /** Handle of the buffer to be unpinned. */ - __u32 handle; - __u32 pad; -}; - -struct drm_i915_gem_busy { - /** Handle of the buffer to check for busy */ - __u32 handle; - - /** Return busy status - * - * A return of 0 implies that the object is idle (after - * having flushed any pending activity), and a non-zero return that - * the object is still in-flight on the GPU. (The GPU has not yet - * signaled completion for all pending requests that reference the - * object.) An object is guaranteed to become idle eventually (so - * long as no new GPU commands are executed upon it). Due to the - * asynchronous nature of the hardware, an object reported - * as busy may become idle before the ioctl is completed. - * - * Furthermore, if the object is busy, which engine is busy is only - * provided as a guide and only indirectly by reporting its class - * (there may be more than one engine in each class). There are race - * conditions which prevent the report of which engines are busy from - * being always accurate. However, the converse is not true. If the - * object is idle, the result of the ioctl, that all engines are idle, - * is accurate. - * - * The returned dword is split into two fields to indicate both - * the engine classess on which the object is being read, and the - * engine class on which it is currently being written (if any). - * - * The low word (bits 0:15) indicate if the object is being written - * to by any engine (there can only be one, as the GEM implicit - * synchronisation rules force writes to be serialised). Only the - * engine class (offset by 1, I915_ENGINE_CLASS_RENDER is reported as - * 1 not 0 etc) for the last write is reported. - * - * The high word (bits 16:31) are a bitmask of which engines classes - * are currently reading from the object. Multiple engines may be - * reading from the object simultaneously. - * - * The value of each engine class is the same as specified in the - * I915_CONTEXT_SET_ENGINES parameter and via perf, i.e. - * I915_ENGINE_CLASS_RENDER, I915_ENGINE_CLASS_COPY, etc. - * reported as active itself. Some hardware may have parallel - * execution engines, e.g. multiple media engines, which are - * mapped to the same class identifier and so are not separately - * reported for busyness. - * - * Caveat emptor: - * Only the boolean result of this query is reliable; that is whether - * the object is idle or busy. The report of which engines are busy - * should be only used as a heuristic. - */ - __u32 busy; -}; - -/** - * I915_CACHING_NONE - * - * GPU access is not coherent with cpu caches. Default for machines without an - * LLC. - */ -#define I915_CACHING_NONE 0 -/** - * I915_CACHING_CACHED - * - * GPU access is coherent with cpu caches and furthermore the data is cached in - * last-level caches shared between cpu cores and the gpu GT. Default on - * machines with HAS_LLC. - */ -#define I915_CACHING_CACHED 1 -/** - * I915_CACHING_DISPLAY - * - * Special GPU caching mode which is coherent with the scanout engines. - * Transparently falls back to I915_CACHING_NONE on platforms where no special - * cache mode (like write-through or gfdt flushing) is available. The kernel - * automatically sets this mode when using a buffer as a scanout target. - * Userspace can manually set this mode to avoid a costly stall and clflush in - * the hotpath of drawing the first frame. - */ -#define I915_CACHING_DISPLAY 2 - -struct drm_i915_gem_caching { - /** - * Handle of the buffer to set/get the caching level of. */ - __u32 handle; - - /** - * Caching level to apply or return value - * - * bits0-15 are for generic caching control (i.e. the above defined - * values). bits16-31 are reserved for platform-specific variations - * (e.g. l3$ caching on gen7). */ - __u32 caching; -}; - -#define I915_TILING_NONE 0 -#define I915_TILING_X 1 -#define I915_TILING_Y 2 -#define I915_TILING_LAST I915_TILING_Y - -#define I915_BIT_6_SWIZZLE_NONE 0 -#define I915_BIT_6_SWIZZLE_9 1 -#define I915_BIT_6_SWIZZLE_9_10 2 -#define I915_BIT_6_SWIZZLE_9_11 3 -#define I915_BIT_6_SWIZZLE_9_10_11 4 -/* Not seen by userland */ -#define I915_BIT_6_SWIZZLE_UNKNOWN 5 -/* Seen by userland. */ -#define I915_BIT_6_SWIZZLE_9_17 6 -#define I915_BIT_6_SWIZZLE_9_10_17 7 - -struct drm_i915_gem_set_tiling { - /** Handle of the buffer to have its tiling state updated */ - __u32 handle; - - /** - * Tiling mode for the object (I915_TILING_NONE, I915_TILING_X, - * I915_TILING_Y). - * - * This value is to be set on request, and will be updated by the - * kernel on successful return with the actual chosen tiling layout. - * - * The tiling mode may be demoted to I915_TILING_NONE when the system - * has bit 6 swizzling that can't be managed correctly by GEM. - * - * Buffer contents become undefined when changing tiling_mode. - */ - __u32 tiling_mode; - - /** - * Stride in bytes for the object when in I915_TILING_X or - * I915_TILING_Y. - */ - __u32 stride; - - /** - * Returned address bit 6 swizzling required for CPU access through - * mmap mapping. - */ - __u32 swizzle_mode; -}; - -struct drm_i915_gem_get_tiling { - /** Handle of the buffer to get tiling state for. */ - __u32 handle; - - /** - * Current tiling mode for the object (I915_TILING_NONE, I915_TILING_X, - * I915_TILING_Y). - */ - __u32 tiling_mode; - - /** - * Returned address bit 6 swizzling required for CPU access through - * mmap mapping. - */ - __u32 swizzle_mode; - - /** - * Returned address bit 6 swizzling required for CPU access through - * mmap mapping whilst bound. - */ - __u32 phys_swizzle_mode; -}; - -struct drm_i915_gem_get_aperture { - /** Total size of the aperture used by i915_gem_execbuffer, in bytes */ - __u64 aper_size; - - /** - * Available space in the aperture used by i915_gem_execbuffer, in - * bytes - */ - __u64 aper_available_size; -}; - -struct drm_i915_get_pipe_from_crtc_id { - /** ID of CRTC being requested **/ - __u32 crtc_id; - - /** pipe of requested CRTC **/ - __u32 pipe; -}; - -#define I915_MADV_WILLNEED 0 -#define I915_MADV_DONTNEED 1 -#define __I915_MADV_PURGED 2 /* internal state */ - -struct drm_i915_gem_madvise { - /** Handle of the buffer to change the backing store advice */ - __u32 handle; - - /* Advice: either the buffer will be needed again in the near future, - * or wont be and could be discarded under memory pressure. - */ - __u32 madv; - - /** Whether the backing store still exists. */ - __u32 retained; -}; - -/* flags */ -#define I915_OVERLAY_TYPE_MASK 0xff -#define I915_OVERLAY_YUV_PLANAR 0x01 -#define I915_OVERLAY_YUV_PACKED 0x02 -#define I915_OVERLAY_RGB 0x03 - -#define I915_OVERLAY_DEPTH_MASK 0xff00 -#define I915_OVERLAY_RGB24 0x1000 -#define I915_OVERLAY_RGB16 0x2000 -#define I915_OVERLAY_RGB15 0x3000 -#define I915_OVERLAY_YUV422 0x0100 -#define I915_OVERLAY_YUV411 0x0200 -#define I915_OVERLAY_YUV420 0x0300 -#define I915_OVERLAY_YUV410 0x0400 - -#define I915_OVERLAY_SWAP_MASK 0xff0000 -#define I915_OVERLAY_NO_SWAP 0x000000 -#define I915_OVERLAY_UV_SWAP 0x010000 -#define I915_OVERLAY_Y_SWAP 0x020000 -#define I915_OVERLAY_Y_AND_UV_SWAP 0x030000 - -#define I915_OVERLAY_FLAGS_MASK 0xff000000 -#define I915_OVERLAY_ENABLE 0x01000000 - -struct drm_intel_overlay_put_image { - /* various flags and src format description */ - __u32 flags; - /* source picture description */ - __u32 bo_handle; - /* stride values and offsets are in bytes, buffer relative */ - __u16 stride_Y; /* stride for packed formats */ - __u16 stride_UV; - __u32 offset_Y; /* offset for packet formats */ - __u32 offset_U; - __u32 offset_V; - /* in pixels */ - __u16 src_width; - __u16 src_height; - /* to compensate the scaling factors for partially covered surfaces */ - __u16 src_scan_width; - __u16 src_scan_height; - /* output crtc description */ - __u32 crtc_id; - __u16 dst_x; - __u16 dst_y; - __u16 dst_width; - __u16 dst_height; -}; - -/* flags */ -#define I915_OVERLAY_UPDATE_ATTRS (1<<0) -#define I915_OVERLAY_UPDATE_GAMMA (1<<1) -#define I915_OVERLAY_DISABLE_DEST_COLORKEY (1<<2) -struct drm_intel_overlay_attrs { - __u32 flags; - __u32 color_key; - __s32 brightness; - __u32 contrast; - __u32 saturation; - __u32 gamma0; - __u32 gamma1; - __u32 gamma2; - __u32 gamma3; - __u32 gamma4; - __u32 gamma5; -}; - -/* - * Intel sprite handling - * - * Color keying works with a min/mask/max tuple. Both source and destination - * color keying is allowed. - * - * Source keying: - * Sprite pixels within the min & max values, masked against the color channels - * specified in the mask field, will be transparent. All other pixels will - * be displayed on top of the primary plane. For RGB surfaces, only the min - * and mask fields will be used; ranged compares are not allowed. - * - * Destination keying: - * Primary plane pixels that match the min value, masked against the color - * channels specified in the mask field, will be replaced by corresponding - * pixels from the sprite plane. - * - * Note that source & destination keying are exclusive; only one can be - * active on a given plane. - */ - -#define I915_SET_COLORKEY_NONE (1<<0) /* Deprecated. Instead set - * flags==0 to disable colorkeying. - */ -#define I915_SET_COLORKEY_DESTINATION (1<<1) -#define I915_SET_COLORKEY_SOURCE (1<<2) -struct drm_intel_sprite_colorkey { - __u32 plane_id; - __u32 min_value; - __u32 channel_mask; - __u32 max_value; - __u32 flags; -}; - -struct drm_i915_gem_wait { - /** Handle of BO we shall wait on */ - __u32 bo_handle; - __u32 flags; - /** Number of nanoseconds to wait, Returns time remaining. */ - __s64 timeout_ns; -}; - -struct drm_i915_gem_context_create { - __u32 ctx_id; /* output: id of new context*/ - __u32 pad; -}; - -struct drm_i915_gem_context_create_ext { - __u32 ctx_id; /* output: id of new context*/ - __u32 flags; -#define I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS (1u << 0) -#define I915_CONTEXT_CREATE_FLAGS_UNKNOWN \ - (-(I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS << 1)) - __u64 extensions; -}; - -struct drm_i915_gem_context_param { - __u32 ctx_id; - __u32 size; - __u64 param; -#define I915_CONTEXT_PARAM_BAN_PERIOD 0x1 -#define I915_CONTEXT_PARAM_NO_ZEROMAP 0x2 -#define I915_CONTEXT_PARAM_GTT_SIZE 0x3 -#define I915_CONTEXT_PARAM_NO_ERROR_CAPTURE 0x4 -#define I915_CONTEXT_PARAM_BANNABLE 0x5 -#define I915_CONTEXT_PARAM_PRIORITY 0x6 -#define I915_CONTEXT_MAX_USER_PRIORITY 1023 /* inclusive */ -#define I915_CONTEXT_DEFAULT_PRIORITY 0 -#define I915_CONTEXT_MIN_USER_PRIORITY -1023 /* inclusive */ - /* - * When using the following param, value should be a pointer to - * drm_i915_gem_context_param_sseu. - */ -#define I915_CONTEXT_PARAM_SSEU 0x7 - -/* - * Not all clients may want to attempt automatic recover of a context after - * a hang (for example, some clients may only submit very small incremental - * batches relying on known logical state of previous batches which will never - * recover correctly and each attempt will hang), and so would prefer that - * the context is forever banned instead. - * - * If set to false (0), after a reset, subsequent (and in flight) rendering - * from this context is discarded, and the client will need to create a new - * context to use instead. - * - * If set to true (1), the kernel will automatically attempt to recover the - * context by skipping the hanging batch and executing the next batch starting - * from the default context state (discarding the incomplete logical context - * state lost due to the reset). - * - * On creation, all new contexts are marked as recoverable. - */ -#define I915_CONTEXT_PARAM_RECOVERABLE 0x8 -/* Must be kept compact -- no holes and well documented */ - - __u64 value; -}; - -/** - * Context SSEU programming - * - * It may be necessary for either functional or performance reason to configure - * a context to run with a reduced number of SSEU (where SSEU stands for Slice/ - * Sub-slice/EU). - * - * This is done by configuring SSEU configuration using the below - * @struct drm_i915_gem_context_param_sseu for every supported engine which - * userspace intends to use. - * - * Not all GPUs or engines support this functionality in which case an error - * code -ENODEV will be returned. - * - * Also, flexibility of possible SSEU configuration permutations varies between - * GPU generations and software imposed limitations. Requesting such a - * combination will return an error code of -EINVAL. - * - * NOTE: When perf/OA is active the context's SSEU configuration is ignored in - * favour of a single global setting. - */ -struct drm_i915_gem_context_param_sseu { - /* - * Engine class & instance to be configured or queried. - */ - __u16 engine_class; - __u16 engine_instance; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 flags; - - /* - * Mask of slices to enable for the context. Valid values are a subset - * of the bitmask value returned for I915_PARAM_SLICE_MASK. - */ - __u64 slice_mask; - - /* - * Mask of subslices to enable for the context. Valid values are a - * subset of the bitmask value return by I915_PARAM_SUBSLICE_MASK. - */ - __u64 subslice_mask; - - /* - * Minimum/Maximum number of EUs to enable per subslice for the - * context. min_eus_per_subslice must be inferior or equal to - * max_eus_per_subslice. - */ - __u16 min_eus_per_subslice; - __u16 max_eus_per_subslice; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 rsvd; -}; - -struct drm_i915_gem_context_create_ext_setparam { -#define I915_CONTEXT_CREATE_EXT_SETPARAM 0 - struct i915_user_extension base; - struct drm_i915_gem_context_param param; -}; - -struct drm_i915_gem_context_destroy { - __u32 ctx_id; - __u32 pad; -}; - -/* - * DRM_I915_GEM_VM_CREATE - - * - * Create a new virtual memory address space (ppGTT) for use within a context - * on the same file. Extensions can be provided to configure exactly how the - * address space is setup upon creation. - * - * The id of new VM (bound to the fd) for use with I915_CONTEXT_PARAM_VM is - * returned in the outparam @id. - * - * No flags are defined, with all bits reserved and must be zero. - * - * An extension chain maybe provided, starting with @extensions, and terminated - * by the @next_extension being 0. Currently, no extensions are defined. - * - * DRM_I915_GEM_VM_DESTROY - - * - * Destroys a previously created VM id, specified in @id. - * - * No extensions or flags are allowed currently, and so must be zero. - */ -struct drm_i915_gem_vm_control { - __u64 extensions; - __u32 flags; - __u32 vm_id; -}; - -struct drm_i915_reg_read { - /* - * Register offset. - * For 64bit wide registers where the upper 32bits don't immediately - * follow the lower 32bits, the offset of the lower 32bits must - * be specified - */ - __u64 offset; -#define I915_REG_READ_8B_WA (1ul << 0) - - __u64 val; /* Return value */ -}; - -/* Known registers: - * - * Render engine timestamp - 0x2358 + 64bit - gen7+ - * - Note this register returns an invalid value if using the default - * single instruction 8byte read, in order to workaround that pass - * flag I915_REG_READ_8B_WA in offset field. - * - */ - -struct drm_i915_reset_stats { - __u32 ctx_id; - __u32 flags; - - /* All resets since boot/module reload, for all contexts */ - __u32 reset_count; - - /* Number of batches lost when active in GPU, for this context */ - __u32 batch_active; - - /* Number of batches lost pending for execution, for this context */ - __u32 batch_pending; - - __u32 pad; -}; - -struct drm_i915_gem_userptr { - __u64 user_ptr; - __u64 user_size; - __u32 flags; -#define I915_USERPTR_READ_ONLY 0x1 -#define I915_USERPTR_UNSYNCHRONIZED 0x80000000 - /** - * Returned handle for the object. - * - * Object handles are nonzero. - */ - __u32 handle; -}; - -enum drm_i915_oa_format { - I915_OA_FORMAT_A13 = 1, /* HSW only */ - I915_OA_FORMAT_A29, /* HSW only */ - I915_OA_FORMAT_A13_B8_C8, /* HSW only */ - I915_OA_FORMAT_B4_C8, /* HSW only */ - I915_OA_FORMAT_A45_B8_C8, /* HSW only */ - I915_OA_FORMAT_B4_C8_A16, /* HSW only */ - I915_OA_FORMAT_C4_B8, /* HSW+ */ - - /* Gen8+ */ - I915_OA_FORMAT_A12, - I915_OA_FORMAT_A12_B8_C8, - I915_OA_FORMAT_A32u40_A4u32_B8_C8, - - I915_OA_FORMAT_MAX /* non-ABI */ -}; - -enum drm_i915_perf_property_id { - /** - * Open the stream for a specific context handle (as used with - * execbuffer2). A stream opened for a specific context this way - * won't typically require root privileges. - */ - DRM_I915_PERF_PROP_CTX_HANDLE = 1, - - /** - * A value of 1 requests the inclusion of raw OA unit reports as - * part of stream samples. - */ - DRM_I915_PERF_PROP_SAMPLE_OA, - - /** - * The value specifies which set of OA unit metrics should be - * be configured, defining the contents of any OA unit reports. - */ - DRM_I915_PERF_PROP_OA_METRICS_SET, - - /** - * The value specifies the size and layout of OA unit reports. - */ - DRM_I915_PERF_PROP_OA_FORMAT, - - /** - * Specifying this property implicitly requests periodic OA unit - * sampling and (at least on Haswell) the sampling frequency is derived - * from this exponent as follows: - * - * 80ns * 2^(period_exponent + 1) - */ - DRM_I915_PERF_PROP_OA_EXPONENT, - - DRM_I915_PERF_PROP_MAX /* non-ABI */ -}; - -struct drm_i915_perf_open_param { - __u32 flags; -#define I915_PERF_FLAG_FD_CLOEXEC (1<<0) -#define I915_PERF_FLAG_FD_NONBLOCK (1<<1) -#define I915_PERF_FLAG_DISABLED (1<<2) - - /** The number of u64 (id, value) pairs */ - __u32 num_properties; - - /** - * Pointer to array of u64 (id, value) pairs configuring the stream - * to open. - */ - __u64 properties_ptr; -}; - -/** - * Enable data capture for a stream that was either opened in a disabled state - * via I915_PERF_FLAG_DISABLED or was later disabled via - * I915_PERF_IOCTL_DISABLE. - * - * It is intended to be cheaper to disable and enable a stream than it may be - * to close and re-open a stream with the same configuration. - * - * It's undefined whether any pending data for the stream will be lost. - */ -#define I915_PERF_IOCTL_ENABLE _IO('i', 0x0) - -/** - * Disable data capture for a stream. - * - * It is an error to try and read a stream that is disabled. - */ -#define I915_PERF_IOCTL_DISABLE _IO('i', 0x1) - -/** - * Common to all i915 perf records - */ -struct drm_i915_perf_record_header { - __u32 type; - __u16 pad; - __u16 size; -}; - -enum drm_i915_perf_record_type { - - /** - * Samples are the work horse record type whose contents are extensible - * and defined when opening an i915 perf stream based on the given - * properties. - * - * Boolean properties following the naming convention - * DRM_I915_PERF_SAMPLE_xyz_PROP request the inclusion of 'xyz' data in - * every sample. - * - * The order of these sample properties given by userspace has no - * affect on the ordering of data within a sample. The order is - * documented here. - * - * struct { - * struct drm_i915_perf_record_header header; - * - * { u32 oa_report[]; } && DRM_I915_PERF_PROP_SAMPLE_OA - * }; - */ - DRM_I915_PERF_RECORD_SAMPLE = 1, - - /* - * Indicates that one or more OA reports were not written by the - * hardware. This can happen for example if an MI_REPORT_PERF_COUNT - * command collides with periodic sampling - which would be more likely - * at higher sampling frequencies. - */ - DRM_I915_PERF_RECORD_OA_REPORT_LOST = 2, - - /** - * An error occurred that resulted in all pending OA reports being lost. - */ - DRM_I915_PERF_RECORD_OA_BUFFER_LOST = 3, - - DRM_I915_PERF_RECORD_MAX /* non-ABI */ -}; - -/** - * Structure to upload perf dynamic configuration into the kernel. - */ -struct drm_i915_perf_oa_config { - /** String formatted like "%08x-%04x-%04x-%04x-%012x" */ - char uuid[36]; - - __u32 n_mux_regs; - __u32 n_boolean_regs; - __u32 n_flex_regs; - - /* - * These fields are pointers to tuples of u32 values (register address, - * value). For example the expected length of the buffer pointed by - * mux_regs_ptr is (2 * sizeof(u32) * n_mux_regs). - */ - __u64 mux_regs_ptr; - __u64 boolean_regs_ptr; - __u64 flex_regs_ptr; -}; - -struct drm_i915_query_item { - __u64 query_id; -#define DRM_I915_QUERY_TOPOLOGY_INFO 1 -/* Must be kept compact -- no holes and well documented */ - - /* - * When set to zero by userspace, this is filled with the size of the - * data to be written at the data_ptr pointer. The kernel sets this - * value to a negative value to signal an error on a particular query - * item. - */ - __s32 length; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 flags; - - /* - * Data will be written at the location pointed by data_ptr when the - * value of length matches the length of the data to be written by the - * kernel. - */ - __u64 data_ptr; -}; - -struct drm_i915_query { - __u32 num_items; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 flags; - - /* - * This points to an array of num_items drm_i915_query_item structures. - */ - __u64 items_ptr; -}; - -/* - * Data written by the kernel with query DRM_I915_QUERY_TOPOLOGY_INFO : - * - * data: contains the 3 pieces of information : - * - * - the slice mask with one bit per slice telling whether a slice is - * available. The availability of slice X can be queried with the following - * formula : - * - * (data[X / 8] >> (X % 8)) & 1 - * - * - the subslice mask for each slice with one bit per subslice telling - * whether a subslice is available. The availability of subslice Y in slice - * X can be queried with the following formula : - * - * (data[subslice_offset + - * X * subslice_stride + - * Y / 8] >> (Y % 8)) & 1 - * - * - the EU mask for each subslice in each slice with one bit per EU telling - * whether an EU is available. The availability of EU Z in subslice Y in - * slice X can be queried with the following formula : - * - * (data[eu_offset + - * (X * max_subslices + Y) * eu_stride + - * Z / 8] >> (Z % 8)) & 1 - */ -struct drm_i915_query_topology_info { - /* - * Unused for now. Must be cleared to zero. - */ - __u16 flags; - - __u16 max_slices; - __u16 max_subslices; - __u16 max_eus_per_subslice; - - /* - * Offset in data[] at which the subslice masks are stored. - */ - __u16 subslice_offset; - - /* - * Stride at which each of the subslice masks for each slice are - * stored. - */ - __u16 subslice_stride; - - /* - * Offset in data[] at which the EU masks are stored. - */ - __u16 eu_offset; - - /* - * Stride at which each of the EU masks for each subslice are stored. - */ - __u16 eu_stride; - - __u8 data[]; -}; - -#if defined(__cplusplus) -} -#endif - -#endif /* _I915_DRM_H_ */ diff --git a/prebuilts/arm/include/libdrm/mach64_drm.h b/prebuilts/arm/include/libdrm/mach64_drm.h deleted file mode 100644 index 1f5fd84..0000000 --- a/prebuilts/arm/include/libdrm/mach64_drm.h +++ /dev/null @@ -1,256 +0,0 @@ -/* mach64_drm.h -- Public header for the mach64 driver -*- linux-c -*- - * Created: Thu Nov 30 20:04:32 2000 by gareth@valinux.com - */ -/* - * Copyright 2000 Gareth Hughes - * Copyright 2002 Frank C. Earl - * Copyright 2002-2003 Leif Delgass - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT OWNER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Gareth Hughes - * Frank C. Earl - * Leif Delgass - */ - -#ifndef __MACH64_DRM_H__ -#define __MACH64_DRM_H__ - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (mach64_sarea.h) - */ -#ifndef __MACH64_SAREA_DEFINES__ -#define __MACH64_SAREA_DEFINES__ - -/* What needs to be changed for the current vertex buffer? - * GH: We're going to be pedantic about this. We want the card to do as - * little as possible, so let's avoid having it fetch a whole bunch of - * register values that don't change all that often, if at all. - */ -#define MACH64_UPLOAD_DST_OFF_PITCH 0x0001 -#define MACH64_UPLOAD_Z_OFF_PITCH 0x0002 -#define MACH64_UPLOAD_Z_ALPHA_CNTL 0x0004 -#define MACH64_UPLOAD_SCALE_3D_CNTL 0x0008 -#define MACH64_UPLOAD_DP_FOG_CLR 0x0010 -#define MACH64_UPLOAD_DP_WRITE_MASK 0x0020 -#define MACH64_UPLOAD_DP_PIX_WIDTH 0x0040 -#define MACH64_UPLOAD_SETUP_CNTL 0x0080 -#define MACH64_UPLOAD_MISC 0x0100 -#define MACH64_UPLOAD_TEXTURE 0x0200 -#define MACH64_UPLOAD_TEX0IMAGE 0x0400 -#define MACH64_UPLOAD_TEX1IMAGE 0x0800 -#define MACH64_UPLOAD_CLIPRECTS 0x1000 /* handled client-side */ -#define MACH64_UPLOAD_CONTEXT 0x00ff -#define MACH64_UPLOAD_ALL 0x1fff - -/* DMA buffer size - */ -#define MACH64_BUFFER_SIZE 16384 - -/* Max number of swaps allowed on the ring - * before the client must wait - */ -#define MACH64_MAX_QUEUED_FRAMES 3U - -/* Byte offsets for host blit buffer data - */ -#define MACH64_HOSTDATA_BLIT_OFFSET 104 - -/* Keep these small for testing. - */ -#define MACH64_NR_SAREA_CLIPRECTS 8 - -#define MACH64_CARD_HEAP 0 -#define MACH64_AGP_HEAP 1 -#define MACH64_NR_TEX_HEAPS 2 -#define MACH64_NR_TEX_REGIONS 64 -#define MACH64_LOG_TEX_GRANULARITY 16 - -#define MACH64_TEX_MAXLEVELS 1 - -#define MACH64_NR_CONTEXT_REGS 15 -#define MACH64_NR_TEXTURE_REGS 4 - -#endif /* __MACH64_SAREA_DEFINES__ */ - -typedef struct { - unsigned int dst_off_pitch; - - unsigned int z_off_pitch; - unsigned int z_cntl; - unsigned int alpha_tst_cntl; - - unsigned int scale_3d_cntl; - - unsigned int sc_left_right; - unsigned int sc_top_bottom; - - unsigned int dp_fog_clr; - unsigned int dp_write_mask; - unsigned int dp_pix_width; - unsigned int dp_mix; - unsigned int dp_src; - - unsigned int clr_cmp_cntl; - unsigned int gui_traj_cntl; - - unsigned int setup_cntl; - - unsigned int tex_size_pitch; - unsigned int tex_cntl; - unsigned int secondary_tex_off; - unsigned int tex_offset; -} drm_mach64_context_regs_t; - -typedef struct drm_mach64_sarea { - /* The channel for communication of state information to the kernel - * on firing a vertex dma buffer. - */ - drm_mach64_context_regs_t context_state; - unsigned int dirty; - unsigned int vertsize; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[MACH64_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Counters for client-side throttling of rendering clients. - */ - unsigned int frames_queued; - - /* Texture memory LRU. - */ - struct drm_tex_region tex_list[MACH64_NR_TEX_HEAPS][MACH64_NR_TEX_REGIONS + - 1]; - unsigned int tex_age[MACH64_NR_TEX_HEAPS]; - int ctx_owner; -} drm_mach64_sarea_t; - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (mach64_common.h) - */ - -/* Mach64 specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ - -#define DRM_MACH64_INIT 0x00 -#define DRM_MACH64_IDLE 0x01 -#define DRM_MACH64_RESET 0x02 -#define DRM_MACH64_SWAP 0x03 -#define DRM_MACH64_CLEAR 0x04 -#define DRM_MACH64_VERTEX 0x05 -#define DRM_MACH64_BLIT 0x06 -#define DRM_MACH64_FLUSH 0x07 -#define DRM_MACH64_GETPARAM 0x08 - -#define DRM_IOCTL_MACH64_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_INIT, drm_mach64_init_t) -#define DRM_IOCTL_MACH64_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_IDLE ) -#define DRM_IOCTL_MACH64_RESET DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_RESET ) -#define DRM_IOCTL_MACH64_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_SWAP ) -#define DRM_IOCTL_MACH64_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_CLEAR, drm_mach64_clear_t) -#define DRM_IOCTL_MACH64_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_VERTEX, drm_mach64_vertex_t) -#define DRM_IOCTL_MACH64_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_BLIT, drm_mach64_blit_t) -#define DRM_IOCTL_MACH64_FLUSH DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_FLUSH ) -#define DRM_IOCTL_MACH64_GETPARAM DRM_IOWR( DRM_COMMAND_BASE + DRM_MACH64_GETPARAM, drm_mach64_getparam_t) - -/* Buffer flags for clears - */ -#define MACH64_FRONT 0x1 -#define MACH64_BACK 0x2 -#define MACH64_DEPTH 0x4 - -/* Primitive types for vertex buffers - */ -#define MACH64_PRIM_POINTS 0x00000000 -#define MACH64_PRIM_LINES 0x00000001 -#define MACH64_PRIM_LINE_LOOP 0x00000002 -#define MACH64_PRIM_LINE_STRIP 0x00000003 -#define MACH64_PRIM_TRIANGLES 0x00000004 -#define MACH64_PRIM_TRIANGLE_STRIP 0x00000005 -#define MACH64_PRIM_TRIANGLE_FAN 0x00000006 -#define MACH64_PRIM_QUADS 0x00000007 -#define MACH64_PRIM_QUAD_STRIP 0x00000008 -#define MACH64_PRIM_POLYGON 0x00000009 - -typedef enum _drm_mach64_dma_mode_t { - MACH64_MODE_DMA_ASYNC, - MACH64_MODE_DMA_SYNC, - MACH64_MODE_MMIO -} drm_mach64_dma_mode_t; - -typedef struct drm_mach64_init { - enum { - DRM_MACH64_INIT_DMA = 0x01, - DRM_MACH64_CLEANUP_DMA = 0x02 - } func; - - unsigned long sarea_priv_offset; - int is_pci; - drm_mach64_dma_mode_t dma_mode; - - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long ring_offset; - unsigned long buffers_offset; - unsigned long agp_textures_offset; -} drm_mach64_init_t; - -typedef struct drm_mach64_clear { - unsigned int flags; - int x, y, w, h; - unsigned int clear_color; - unsigned int clear_depth; -} drm_mach64_clear_t; - -typedef struct drm_mach64_vertex { - int prim; - void *buf; /* Address of vertex buffer */ - unsigned long used; /* Number of bytes in buffer */ - int discard; /* Client finished with buffer? */ -} drm_mach64_vertex_t; - -typedef struct drm_mach64_blit { - void *buf; - int pitch; - int offset; - int format; - unsigned short x, y; - unsigned short width, height; -} drm_mach64_blit_t; - -typedef struct drm_mach64_getparam { - enum { - MACH64_PARAM_FRAMES_QUEUED = 0x01, - MACH64_PARAM_IRQ_NR = 0x02 - } param; - void *value; -} drm_mach64_getparam_t; - -#endif diff --git a/prebuilts/arm/include/libdrm/mga_drm.h b/prebuilts/arm/include/libdrm/mga_drm.h deleted file mode 100644 index 7930011..0000000 --- a/prebuilts/arm/include/libdrm/mga_drm.h +++ /dev/null @@ -1,427 +0,0 @@ -/* mga_drm.h -- Public header for the Matrox g200/g400 driver -*- linux-c -*- - * Created: Tue Jan 25 01:50:01 1999 by jhartmann@precisioninsight.com - * - * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Jeff Hartmann - * Keith Whitwell - * - * Rewritten by: - * Gareth Hughes - */ - -#ifndef __MGA_DRM_H__ -#define __MGA_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (mga_sarea.h) - */ - -#ifndef __MGA_SAREA_DEFINES__ -#define __MGA_SAREA_DEFINES__ - -/* WARP pipe flags - */ -#define MGA_F 0x1 /* fog */ -#define MGA_A 0x2 /* alpha */ -#define MGA_S 0x4 /* specular */ -#define MGA_T2 0x8 /* multitexture */ - -#define MGA_WARP_TGZ 0 -#define MGA_WARP_TGZF (MGA_F) -#define MGA_WARP_TGZA (MGA_A) -#define MGA_WARP_TGZAF (MGA_F|MGA_A) -#define MGA_WARP_TGZS (MGA_S) -#define MGA_WARP_TGZSF (MGA_S|MGA_F) -#define MGA_WARP_TGZSA (MGA_S|MGA_A) -#define MGA_WARP_TGZSAF (MGA_S|MGA_F|MGA_A) -#define MGA_WARP_T2GZ (MGA_T2) -#define MGA_WARP_T2GZF (MGA_T2|MGA_F) -#define MGA_WARP_T2GZA (MGA_T2|MGA_A) -#define MGA_WARP_T2GZAF (MGA_T2|MGA_A|MGA_F) -#define MGA_WARP_T2GZS (MGA_T2|MGA_S) -#define MGA_WARP_T2GZSF (MGA_T2|MGA_S|MGA_F) -#define MGA_WARP_T2GZSA (MGA_T2|MGA_S|MGA_A) -#define MGA_WARP_T2GZSAF (MGA_T2|MGA_S|MGA_F|MGA_A) - -#define MGA_MAX_G200_PIPES 8 /* no multitex */ -#define MGA_MAX_G400_PIPES 16 -#define MGA_MAX_WARP_PIPES MGA_MAX_G400_PIPES -#define MGA_WARP_UCODE_SIZE 32768 /* in bytes */ - -#define MGA_CARD_TYPE_G200 1 -#define MGA_CARD_TYPE_G400 2 -#define MGA_CARD_TYPE_G450 3 /* not currently used */ -#define MGA_CARD_TYPE_G550 4 - -#define MGA_FRONT 0x1 -#define MGA_BACK 0x2 -#define MGA_DEPTH 0x4 - -/* What needs to be changed for the current vertex dma buffer? - */ -#define MGA_UPLOAD_CONTEXT 0x1 -#define MGA_UPLOAD_TEX0 0x2 -#define MGA_UPLOAD_TEX1 0x4 -#define MGA_UPLOAD_PIPE 0x8 -#define MGA_UPLOAD_TEX0IMAGE 0x10 /* handled client-side */ -#define MGA_UPLOAD_TEX1IMAGE 0x20 /* handled client-side */ -#define MGA_UPLOAD_2D 0x40 -#define MGA_WAIT_AGE 0x80 /* handled client-side */ -#define MGA_UPLOAD_CLIPRECTS 0x100 /* handled client-side */ -#if 0 -#define MGA_DMA_FLUSH 0x200 /* set when someone gets the lock - quiescent */ -#endif - -/* 32 buffers of 64k each, total 2 meg. - */ -#define MGA_BUFFER_SIZE (1 << 16) -#define MGA_NUM_BUFFERS 128 - -/* Keep these small for testing. - */ -#define MGA_NR_SAREA_CLIPRECTS 8 - -/* 2 heaps (1 for card, 1 for agp), each divided into up to 128 - * regions, subject to a minimum region size of (1<<16) == 64k. - * - * Clients may subdivide regions internally, but when sharing between - * clients, the region size is the minimum granularity. - */ - -#define MGA_CARD_HEAP 0 -#define MGA_AGP_HEAP 1 -#define MGA_NR_TEX_HEAPS 2 -#define MGA_NR_TEX_REGIONS 16 -#define MGA_LOG_MIN_TEX_REGION_SIZE 16 - -#define DRM_MGA_IDLE_RETRY 2048 - -#endif /* __MGA_SAREA_DEFINES__ */ - -/* Setup registers for 3D context - */ -typedef struct { - unsigned int dstorg; - unsigned int maccess; - unsigned int plnwt; - unsigned int dwgctl; - unsigned int alphactrl; - unsigned int fogcolor; - unsigned int wflag; - unsigned int tdualstage0; - unsigned int tdualstage1; - unsigned int fcol; - unsigned int stencil; - unsigned int stencilctl; -} drm_mga_context_regs_t; - -/* Setup registers for 2D, X server - */ -typedef struct { - unsigned int pitch; -} drm_mga_server_regs_t; - -/* Setup registers for each texture unit - */ -typedef struct { - unsigned int texctl; - unsigned int texctl2; - unsigned int texfilter; - unsigned int texbordercol; - unsigned int texorg; - unsigned int texwidth; - unsigned int texheight; - unsigned int texorg1; - unsigned int texorg2; - unsigned int texorg3; - unsigned int texorg4; -} drm_mga_texture_regs_t; - -/* General aging mechanism - */ -typedef struct { - unsigned int head; /* Position of head pointer */ - unsigned int wrap; /* Primary DMA wrap count */ -} drm_mga_age_t; - -typedef struct _drm_mga_sarea { - /* The channel for communication of state information to the kernel - * on firing a vertex dma buffer. - */ - drm_mga_context_regs_t context_state; - drm_mga_server_regs_t server_state; - drm_mga_texture_regs_t tex_state[2]; - unsigned int warp_pipe; - unsigned int dirty; - unsigned int vertsize; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[MGA_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Information about the most recently used 3d drawable. The - * client fills in the req_* fields, the server fills in the - * exported_ fields and puts the cliprects into boxes, above. - * - * The client clears the exported_drawable field before - * clobbering the boxes data. - */ - unsigned int req_drawable; /* the X drawable id */ - unsigned int req_draw_buffer; /* MGA_FRONT or MGA_BACK */ - - unsigned int exported_drawable; - unsigned int exported_index; - unsigned int exported_stamp; - unsigned int exported_buffers; - unsigned int exported_nfront; - unsigned int exported_nback; - int exported_back_x, exported_front_x, exported_w; - int exported_back_y, exported_front_y, exported_h; - struct drm_clip_rect exported_boxes[MGA_NR_SAREA_CLIPRECTS]; - - /* Counters for aging textures and for client-side throttling. - */ - unsigned int status[4]; - unsigned int last_wrap; - - drm_mga_age_t last_frame; - unsigned int last_enqueue; /* last time a buffer was enqueued */ - unsigned int last_dispatch; /* age of the most recently dispatched buffer */ - unsigned int last_quiescent; /* */ - - /* LRU lists for texture memory in agp space and on the card. - */ - struct drm_tex_region texList[MGA_NR_TEX_HEAPS][MGA_NR_TEX_REGIONS + 1]; - unsigned int texAge[MGA_NR_TEX_HEAPS]; - - /* Mechanism to validate card state. - */ - int ctxOwner; -} drm_mga_sarea_t; - -/* MGA specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ -#define DRM_MGA_INIT 0x00 -#define DRM_MGA_FLUSH 0x01 -#define DRM_MGA_RESET 0x02 -#define DRM_MGA_SWAP 0x03 -#define DRM_MGA_CLEAR 0x04 -#define DRM_MGA_VERTEX 0x05 -#define DRM_MGA_INDICES 0x06 -#define DRM_MGA_ILOAD 0x07 -#define DRM_MGA_BLIT 0x08 -#define DRM_MGA_GETPARAM 0x09 - -/* 3.2: - * ioctls for operating on fences. - */ -#define DRM_MGA_SET_FENCE 0x0a -#define DRM_MGA_WAIT_FENCE 0x0b -#define DRM_MGA_DMA_BOOTSTRAP 0x0c - -#define DRM_IOCTL_MGA_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INIT, drm_mga_init_t) -#define DRM_IOCTL_MGA_FLUSH DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_FLUSH, struct drm_lock) -#define DRM_IOCTL_MGA_RESET DRM_IO( DRM_COMMAND_BASE + DRM_MGA_RESET) -#define DRM_IOCTL_MGA_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_MGA_SWAP) -#define DRM_IOCTL_MGA_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_CLEAR, drm_mga_clear_t) -#define DRM_IOCTL_MGA_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_VERTEX, drm_mga_vertex_t) -#define DRM_IOCTL_MGA_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INDICES, drm_mga_indices_t) -#define DRM_IOCTL_MGA_ILOAD DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_ILOAD, drm_mga_iload_t) -#define DRM_IOCTL_MGA_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_BLIT, drm_mga_blit_t) -#define DRM_IOCTL_MGA_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_GETPARAM, drm_mga_getparam_t) -#define DRM_IOCTL_MGA_SET_FENCE DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_SET_FENCE, __u32) -#define DRM_IOCTL_MGA_WAIT_FENCE DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_WAIT_FENCE, __u32) -#define DRM_IOCTL_MGA_DMA_BOOTSTRAP DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_DMA_BOOTSTRAP, drm_mga_dma_bootstrap_t) - -typedef struct _drm_mga_warp_index { - int installed; - unsigned long phys_addr; - int size; -} drm_mga_warp_index_t; - -typedef struct drm_mga_init { - enum { - MGA_INIT_DMA = 0x01, - MGA_CLEANUP_DMA = 0x02 - } func; - - unsigned long sarea_priv_offset; - - int chipset; - int sgram; - - unsigned int maccess; - - unsigned int fb_cpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - - unsigned int depth_cpp; - unsigned int depth_offset, depth_pitch; - - unsigned int texture_offset[MGA_NR_TEX_HEAPS]; - unsigned int texture_size[MGA_NR_TEX_HEAPS]; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long status_offset; - unsigned long warp_offset; - unsigned long primary_offset; - unsigned long buffers_offset; -} drm_mga_init_t; - -typedef struct drm_mga_dma_bootstrap { - /** - * \name AGP texture region - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, these fields will - * be filled in with the actual AGP texture settings. - * - * \warning - * If these fields are non-zero, but dma_mga_dma_bootstrap::agp_mode - * is zero, it means that PCI memory (most likely through the use of - * an IOMMU) is being used for "AGP" textures. - */ - /*@{ */ - unsigned long texture_handle; /**< Handle used to map AGP textures. */ - __u32 texture_size; /**< Size of the AGP texture region. */ - /*@} */ - - /** - * Requested size of the primary DMA region. - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be - * filled in with the actual AGP mode. If AGP was not available - */ - __u32 primary_size; - - /** - * Requested number of secondary DMA buffers. - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be - * filled in with the actual number of secondary DMA buffers - * allocated. Particularly when PCI DMA is used, this may be - * (subtantially) less than the number requested. - */ - __u32 secondary_bin_count; - - /** - * Requested size of each secondary DMA buffer. - * - * While the kernel \b is free to reduce - * dma_mga_dma_bootstrap::secondary_bin_count, it is \b not allowed - * to reduce dma_mga_dma_bootstrap::secondary_bin_size. - */ - __u32 secondary_bin_size; - - /** - * Bit-wise mask of AGPSTAT2_* values. Currently only \c AGPSTAT2_1X, - * \c AGPSTAT2_2X, and \c AGPSTAT2_4X are supported. If this value is - * zero, it means that PCI DMA should be used, even if AGP is - * possible. - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be - * filled in with the actual AGP mode. If AGP was not available - * (i.e., PCI DMA was used), this value will be zero. - */ - __u32 agp_mode; - - /** - * Desired AGP GART size, measured in megabytes. - */ - __u8 agp_size; -} drm_mga_dma_bootstrap_t; - -typedef struct drm_mga_clear { - unsigned int flags; - unsigned int clear_color; - unsigned int clear_depth; - unsigned int color_mask; - unsigned int depth_mask; -} drm_mga_clear_t; - -typedef struct drm_mga_vertex { - int idx; /* buffer to queue */ - int used; /* bytes in use */ - int discard; /* client finished with buffer? */ -} drm_mga_vertex_t; - -typedef struct drm_mga_indices { - int idx; /* buffer to queue */ - unsigned int start; - unsigned int end; - int discard; /* client finished with buffer? */ -} drm_mga_indices_t; - -typedef struct drm_mga_iload { - int idx; - unsigned int dstorg; - unsigned int length; -} drm_mga_iload_t; - -typedef struct _drm_mga_blit { - unsigned int planemask; - unsigned int srcorg; - unsigned int dstorg; - int src_pitch, dst_pitch; - int delta_sx, delta_sy; - int delta_dx, delta_dy; - int height, ydir; /* flip image vertically */ - int source_pitch, dest_pitch; -} drm_mga_blit_t; - -/* 3.1: An ioctl to get parameters that aren't available to the 3d - * client any other way. - */ -#define MGA_PARAM_IRQ_NR 1 - -/* 3.2: Query the actual card type. The DDX only distinguishes between - * G200 chips and non-G200 chips, which it calls G400. It turns out that - * there are some very sublte differences between the G4x0 chips and the G550 - * chips. Using this parameter query, a client-side driver can detect the - * difference between a G4x0 and a G550. - */ -#define MGA_PARAM_CARD_TYPE 2 - -typedef struct drm_mga_getparam { - int param; - void *value; -} drm_mga_getparam_t; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/arm/include/libdrm/msm_drm.h b/prebuilts/arm/include/libdrm/msm_drm.h deleted file mode 100644 index c06d0a5..0000000 --- a/prebuilts/arm/include/libdrm/msm_drm.h +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat - * Author: Rob Clark - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __MSM_DRM_H__ -#define __MSM_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints: - * 1) Do not use pointers, use __u64 instead for 32 bit / 64 bit - * user/kernel compatibility - * 2) Keep fields aligned to their size - * 3) Because of how drm_ioctl() works, we can add new fields at - * the end of an ioctl if some care is taken: drm_ioctl() will - * zero out the new fields at the tail of the ioctl, so a zero - * value should have a backwards compatible meaning. And for - * output params, userspace won't see the newly added output - * fields.. so that has to be somehow ok. - */ - -#define MSM_PIPE_NONE 0x00 -#define MSM_PIPE_2D0 0x01 -#define MSM_PIPE_2D1 0x02 -#define MSM_PIPE_3D0 0x10 - -/* The pipe-id just uses the lower bits, so can be OR'd with flags in - * the upper 16 bits (which could be extended further, if needed, maybe - * we extend/overload the pipe-id some day to deal with multiple rings, - * but even then I don't think we need the full lower 16 bits). - */ -#define MSM_PIPE_ID_MASK 0xffff -#define MSM_PIPE_ID(x) ((x) & MSM_PIPE_ID_MASK) -#define MSM_PIPE_FLAGS(x) ((x) & ~MSM_PIPE_ID_MASK) - -/* timeouts are specified in clock-monotonic absolute times (to simplify - * restarting interrupted ioctls). The following struct is logically the - * same as 'struct timespec' but 32/64b ABI safe. - */ -struct drm_msm_timespec { - __s64 tv_sec; /* seconds */ - __s64 tv_nsec; /* nanoseconds */ -}; - -#define MSM_PARAM_GPU_ID 0x01 -#define MSM_PARAM_GMEM_SIZE 0x02 -#define MSM_PARAM_CHIP_ID 0x03 -#define MSM_PARAM_MAX_FREQ 0x04 -#define MSM_PARAM_TIMESTAMP 0x05 -#define MSM_PARAM_GMEM_BASE 0x06 -#define MSM_PARAM_NR_RINGS 0x07 - -struct drm_msm_param { - __u32 pipe; /* in, MSM_PIPE_x */ - __u32 param; /* in, MSM_PARAM_x */ - __u64 value; /* out (get_param) or in (set_param) */ -}; - -/* - * GEM buffers: - */ - -#define MSM_BO_SCANOUT 0x00000001 /* scanout capable */ -#define MSM_BO_GPU_READONLY 0x00000002 -#define MSM_BO_CACHE_MASK 0x000f0000 -/* cache modes */ -#define MSM_BO_CACHED 0x00010000 -#define MSM_BO_WC 0x00020000 -#define MSM_BO_UNCACHED 0x00040000 - -#define MSM_BO_FLAGS (MSM_BO_SCANOUT | \ - MSM_BO_GPU_READONLY | \ - MSM_BO_CACHED | \ - MSM_BO_WC | \ - MSM_BO_UNCACHED) - -struct drm_msm_gem_new { - __u64 size; /* in */ - __u32 flags; /* in, mask of MSM_BO_x */ - __u32 handle; /* out */ -}; - -#define MSM_INFO_IOVA 0x01 - -#define MSM_INFO_FLAGS (MSM_INFO_IOVA) - -struct drm_msm_gem_info { - __u32 handle; /* in */ - __u32 flags; /* in - combination of MSM_INFO_* flags */ - __u64 offset; /* out, mmap() offset or iova */ -}; - -#define MSM_PREP_READ 0x01 -#define MSM_PREP_WRITE 0x02 -#define MSM_PREP_NOSYNC 0x04 - -#define MSM_PREP_FLAGS (MSM_PREP_READ | MSM_PREP_WRITE | MSM_PREP_NOSYNC) - -struct drm_msm_gem_cpu_prep { - __u32 handle; /* in */ - __u32 op; /* in, mask of MSM_PREP_x */ - struct drm_msm_timespec timeout; /* in */ -}; - -struct drm_msm_gem_cpu_fini { - __u32 handle; /* in */ -}; - -/* - * Cmdstream Submission: - */ - -/* The value written into the cmdstream is logically: - * - * ((relocbuf->gpuaddr + reloc_offset) << shift) | or - * - * When we have GPU's w/ >32bit ptrs, it should be possible to deal - * with this by emit'ing two reloc entries with appropriate shift - * values. Or a new MSM_SUBMIT_CMD_x type would also be an option. - * - * NOTE that reloc's must be sorted by order of increasing submit_offset, - * otherwise EINVAL. - */ -struct drm_msm_gem_submit_reloc { - __u32 submit_offset; /* in, offset from submit_bo */ - __u32 or; /* in, value OR'd with result */ - __s32 shift; /* in, amount of left shift (can be negative) */ - __u32 reloc_idx; /* in, index of reloc_bo buffer */ - __u64 reloc_offset; /* in, offset from start of reloc_bo */ -}; - -/* submit-types: - * BUF - this cmd buffer is executed normally. - * IB_TARGET_BUF - this cmd buffer is an IB target. Reloc's are - * processed normally, but the kernel does not setup an IB to - * this buffer in the first-level ringbuffer - * CTX_RESTORE_BUF - only executed if there has been a GPU context - * switch since the last SUBMIT ioctl - */ -#define MSM_SUBMIT_CMD_BUF 0x0001 -#define MSM_SUBMIT_CMD_IB_TARGET_BUF 0x0002 -#define MSM_SUBMIT_CMD_CTX_RESTORE_BUF 0x0003 -struct drm_msm_gem_submit_cmd { - __u32 type; /* in, one of MSM_SUBMIT_CMD_x */ - __u32 submit_idx; /* in, index of submit_bo cmdstream buffer */ - __u32 submit_offset; /* in, offset into submit_bo */ - __u32 size; /* in, cmdstream size */ - __u32 pad; - __u32 nr_relocs; /* in, number of submit_reloc's */ - __u64 relocs; /* in, ptr to array of submit_reloc's */ -}; - -/* Each buffer referenced elsewhere in the cmdstream submit (ie. the - * cmdstream buffer(s) themselves or reloc entries) has one (and only - * one) entry in the submit->bos[] table. - * - * As a optimization, the current buffer (gpu virtual address) can be - * passed back through the 'presumed' field. If on a subsequent reloc, - * userspace passes back a 'presumed' address that is still valid, - * then patching the cmdstream for this entry is skipped. This can - * avoid kernel needing to map/access the cmdstream bo in the common - * case. - */ -#define MSM_SUBMIT_BO_READ 0x0001 -#define MSM_SUBMIT_BO_WRITE 0x0002 - -#define MSM_SUBMIT_BO_FLAGS (MSM_SUBMIT_BO_READ | MSM_SUBMIT_BO_WRITE) - -struct drm_msm_gem_submit_bo { - __u32 flags; /* in, mask of MSM_SUBMIT_BO_x */ - __u32 handle; /* in, GEM handle */ - __u64 presumed; /* in/out, presumed buffer address */ -}; - -/* Valid submit ioctl flags: */ -#define MSM_SUBMIT_NO_IMPLICIT 0x80000000 /* disable implicit sync */ -#define MSM_SUBMIT_FENCE_FD_IN 0x40000000 /* enable input fence_fd */ -#define MSM_SUBMIT_FENCE_FD_OUT 0x20000000 /* enable output fence_fd */ -#define MSM_SUBMIT_SUDO 0x10000000 /* run submitted cmds from RB */ -#define MSM_SUBMIT_FLAGS ( \ - MSM_SUBMIT_NO_IMPLICIT | \ - MSM_SUBMIT_FENCE_FD_IN | \ - MSM_SUBMIT_FENCE_FD_OUT | \ - MSM_SUBMIT_SUDO | \ - 0) - -/* Each cmdstream submit consists of a table of buffers involved, and - * one or more cmdstream buffers. This allows for conditional execution - * (context-restore), and IB buffers needed for per tile/bin draw cmds. - */ -struct drm_msm_gem_submit { - __u32 flags; /* MSM_PIPE_x | MSM_SUBMIT_x */ - __u32 fence; /* out */ - __u32 nr_bos; /* in, number of submit_bo's */ - __u32 nr_cmds; /* in, number of submit_cmd's */ - __u64 bos; /* in, ptr to array of submit_bo's */ - __u64 cmds; /* in, ptr to array of submit_cmd's */ - __s32 fence_fd; /* in/out fence fd (see MSM_SUBMIT_FENCE_FD_IN/OUT) */ - __u32 queueid; /* in, submitqueue id */ -}; - -/* The normal way to synchronize with the GPU is just to CPU_PREP on - * a buffer if you need to access it from the CPU (other cmdstream - * submission from same or other contexts, PAGE_FLIP ioctl, etc, all - * handle the required synchronization under the hood). This ioctl - * mainly just exists as a way to implement the gallium pipe_fence - * APIs without requiring a dummy bo to synchronize on. - */ -struct drm_msm_wait_fence { - __u32 fence; /* in */ - __u32 pad; - struct drm_msm_timespec timeout; /* in */ - __u32 queueid; /* in, submitqueue id */ -}; - -/* madvise provides a way to tell the kernel in case a buffers contents - * can be discarded under memory pressure, which is useful for userspace - * bo cache where we want to optimistically hold on to buffer allocate - * and potential mmap, but allow the pages to be discarded under memory - * pressure. - * - * Typical usage would involve madvise(DONTNEED) when buffer enters BO - * cache, and madvise(WILLNEED) if trying to recycle buffer from BO cache. - * In the WILLNEED case, 'retained' indicates to userspace whether the - * backing pages still exist. - */ -#define MSM_MADV_WILLNEED 0 /* backing pages are needed, status returned in 'retained' */ -#define MSM_MADV_DONTNEED 1 /* backing pages not needed */ -#define __MSM_MADV_PURGED 2 /* internal state */ - -struct drm_msm_gem_madvise { - __u32 handle; /* in, GEM handle */ - __u32 madv; /* in, MSM_MADV_x */ - __u32 retained; /* out, whether backing store still exists */ -}; - -/* - * Draw queues allow the user to set specific submission parameter. Command - * submissions specify a specific submitqueue to use. ID 0 is reserved for - * backwards compatibility as a "default" submitqueue - */ - -#define MSM_SUBMITQUEUE_FLAGS (0) - -struct drm_msm_submitqueue { - __u32 flags; /* in, MSM_SUBMITQUEUE_x */ - __u32 prio; /* in, Priority level */ - __u32 id; /* out, identifier */ -}; - -#define DRM_MSM_GET_PARAM 0x00 -/* placeholder: -#define DRM_MSM_SET_PARAM 0x01 - */ -#define DRM_MSM_GEM_NEW 0x02 -#define DRM_MSM_GEM_INFO 0x03 -#define DRM_MSM_GEM_CPU_PREP 0x04 -#define DRM_MSM_GEM_CPU_FINI 0x05 -#define DRM_MSM_GEM_SUBMIT 0x06 -#define DRM_MSM_WAIT_FENCE 0x07 -#define DRM_MSM_GEM_MADVISE 0x08 -/* placeholder: -#define DRM_MSM_GEM_SVM_NEW 0x09 - */ -#define DRM_MSM_SUBMITQUEUE_NEW 0x0A -#define DRM_MSM_SUBMITQUEUE_CLOSE 0x0B - -#define DRM_IOCTL_MSM_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GET_PARAM, struct drm_msm_param) -#define DRM_IOCTL_MSM_GEM_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_NEW, struct drm_msm_gem_new) -#define DRM_IOCTL_MSM_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_INFO, struct drm_msm_gem_info) -#define DRM_IOCTL_MSM_GEM_CPU_PREP DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_GEM_CPU_PREP, struct drm_msm_gem_cpu_prep) -#define DRM_IOCTL_MSM_GEM_CPU_FINI DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_GEM_CPU_FINI, struct drm_msm_gem_cpu_fini) -#define DRM_IOCTL_MSM_GEM_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_SUBMIT, struct drm_msm_gem_submit) -#define DRM_IOCTL_MSM_WAIT_FENCE DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_WAIT_FENCE, struct drm_msm_wait_fence) -#define DRM_IOCTL_MSM_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_MADVISE, struct drm_msm_gem_madvise) -#define DRM_IOCTL_MSM_SUBMITQUEUE_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_SUBMITQUEUE_NEW, struct drm_msm_submitqueue) -#define DRM_IOCTL_MSM_SUBMITQUEUE_CLOSE DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_SUBMITQUEUE_CLOSE, __u32) - -#if defined(__cplusplus) -} -#endif - -#endif /* __MSM_DRM_H__ */ diff --git a/prebuilts/arm/include/libdrm/nouveau/nouveau.h b/prebuilts/arm/include/libdrm/nouveau/nouveau.h deleted file mode 100644 index 0c632fe..0000000 --- a/prebuilts/arm/include/libdrm/nouveau/nouveau.h +++ /dev/null @@ -1,280 +0,0 @@ -#ifndef __NOUVEAU_H__ -#define __NOUVEAU_H__ - -#include -#include - -/* Supported class information, provided by the kernel */ -struct nouveau_sclass { - int32_t oclass; - int minver; - int maxver; -}; - -/* Client-provided array describing class versions that are desired. - * - * These are used to match against the kernel's list of supported classes. - */ -struct nouveau_mclass { - int32_t oclass; - int version; - void *data; -}; - -struct nouveau_object { - struct nouveau_object *parent; - uint64_t handle; - uint32_t oclass; - uint32_t length; /* deprecated */ - void *data; /* deprecated */ -}; - -int nouveau_object_new(struct nouveau_object *parent, uint64_t handle, - uint32_t oclass, void *data, uint32_t length, - struct nouveau_object **); -void nouveau_object_del(struct nouveau_object **); -int nouveau_object_mthd(struct nouveau_object *, uint32_t mthd, - void *data, uint32_t size); -int nouveau_object_sclass_get(struct nouveau_object *, - struct nouveau_sclass **); -void nouveau_object_sclass_put(struct nouveau_sclass **); -int nouveau_object_mclass(struct nouveau_object *, - const struct nouveau_mclass *); - -struct nouveau_drm { - struct nouveau_object client; - int fd; - uint32_t version; - bool nvif; -}; - -static inline struct nouveau_drm * -nouveau_drm(struct nouveau_object *obj) -{ - while (obj && obj->parent) - obj = obj->parent; - return (struct nouveau_drm *)obj; -} - -int nouveau_drm_new(int fd, struct nouveau_drm **); -void nouveau_drm_del(struct nouveau_drm **); - -struct nouveau_device { - struct nouveau_object object; - int fd; /* deprecated */ - uint32_t lib_version; /* deprecated */ - uint32_t drm_version; /* deprecated */ - uint32_t chipset; - uint64_t vram_size; - uint64_t gart_size; - uint64_t vram_limit; - uint64_t gart_limit; -}; - -int nouveau_device_new(struct nouveau_object *parent, int32_t oclass, - void *data, uint32_t size, struct nouveau_device **); -void nouveau_device_del(struct nouveau_device **); - -int nouveau_getparam(struct nouveau_device *, uint64_t param, uint64_t *value); -int nouveau_setparam(struct nouveau_device *, uint64_t param, uint64_t value); - -/* deprecated */ -int nouveau_device_wrap(int fd, int close, struct nouveau_device **); -int nouveau_device_open(const char *busid, struct nouveau_device **); - -struct nouveau_client { - struct nouveau_device *device; - int id; -}; - -int nouveau_client_new(struct nouveau_device *, struct nouveau_client **); -void nouveau_client_del(struct nouveau_client **); - -union nouveau_bo_config { - struct { -#define NV04_BO_16BPP 0x00000001 -#define NV04_BO_32BPP 0x00000002 -#define NV04_BO_ZETA 0x00000004 - uint32_t surf_flags; - uint32_t surf_pitch; - } nv04; - struct { - uint32_t memtype; - uint32_t tile_mode; - } nv50; - struct { - uint32_t memtype; - uint32_t tile_mode; - } nvc0; - uint32_t data[8]; -}; - -#define NOUVEAU_BO_VRAM 0x00000001 -#define NOUVEAU_BO_GART 0x00000002 -#define NOUVEAU_BO_APER (NOUVEAU_BO_VRAM | NOUVEAU_BO_GART) -#define NOUVEAU_BO_RD 0x00000100 -#define NOUVEAU_BO_WR 0x00000200 -#define NOUVEAU_BO_RDWR (NOUVEAU_BO_RD | NOUVEAU_BO_WR) -#define NOUVEAU_BO_NOBLOCK 0x00000400 -#define NOUVEAU_BO_LOW 0x00001000 -#define NOUVEAU_BO_HIGH 0x00002000 -#define NOUVEAU_BO_OR 0x00004000 -#define NOUVEAU_BO_MAP 0x80000000 -#define NOUVEAU_BO_CONTIG 0x40000000 -#define NOUVEAU_BO_NOSNOOP 0x20000000 -#define NOUVEAU_BO_COHERENT 0x10000000 - -struct nouveau_bo { - struct nouveau_device *device; - uint32_t handle; - uint64_t size; - uint32_t flags; - uint64_t offset; - void *map; - union nouveau_bo_config config; -}; - -int nouveau_bo_new(struct nouveau_device *, uint32_t flags, uint32_t align, - uint64_t size, union nouveau_bo_config *, - struct nouveau_bo **); -int nouveau_bo_wrap(struct nouveau_device *, uint32_t handle, - struct nouveau_bo **); -int nouveau_bo_name_ref(struct nouveau_device *v, uint32_t name, - struct nouveau_bo **); -int nouveau_bo_name_get(struct nouveau_bo *, uint32_t *name); -void nouveau_bo_ref(struct nouveau_bo *, struct nouveau_bo **); -int nouveau_bo_map(struct nouveau_bo *, uint32_t access, - struct nouveau_client *); -int nouveau_bo_wait(struct nouveau_bo *, uint32_t access, - struct nouveau_client *); -int nouveau_bo_prime_handle_ref(struct nouveau_device *, int prime_fd, - struct nouveau_bo **); -int nouveau_bo_set_prime(struct nouveau_bo *, int *prime_fd); - -struct nouveau_list { - struct nouveau_list *prev; - struct nouveau_list *next; -}; - -struct nouveau_bufref { - struct nouveau_list thead; - struct nouveau_bo *bo; - uint32_t packet; - uint32_t flags; - uint32_t data; - uint32_t vor; - uint32_t tor; - uint32_t priv_data; - void *priv; -}; - -struct nouveau_bufctx { - struct nouveau_client *client; - struct nouveau_list head; - struct nouveau_list pending; - struct nouveau_list current; - int relocs; -}; - -int nouveau_bufctx_new(struct nouveau_client *, int bins, - struct nouveau_bufctx **); -void nouveau_bufctx_del(struct nouveau_bufctx **); -struct nouveau_bufref * -nouveau_bufctx_refn(struct nouveau_bufctx *, int bin, - struct nouveau_bo *, uint32_t flags); -struct nouveau_bufref * -nouveau_bufctx_mthd(struct nouveau_bufctx *, int bin, uint32_t packet, - struct nouveau_bo *, uint64_t data, uint32_t flags, - uint32_t vor, uint32_t tor); -void nouveau_bufctx_reset(struct nouveau_bufctx *, int bin); - -struct nouveau_pushbuf_krec; -struct nouveau_pushbuf { - struct nouveau_client *client; - struct nouveau_object *channel; - struct nouveau_bufctx *bufctx; - void (*kick_notify)(struct nouveau_pushbuf *); - void *user_priv; - uint32_t rsvd_kick; - uint32_t flags; - uint32_t *cur; - uint32_t *end; -}; - -struct nouveau_pushbuf_refn { - struct nouveau_bo *bo; - uint32_t flags; -}; - -int nouveau_pushbuf_new(struct nouveau_client *, struct nouveau_object *chan, - int nr, uint32_t size, bool immediate, - struct nouveau_pushbuf **); -void nouveau_pushbuf_del(struct nouveau_pushbuf **); -int nouveau_pushbuf_space(struct nouveau_pushbuf *, uint32_t dwords, - uint32_t relocs, uint32_t pushes); -void nouveau_pushbuf_data(struct nouveau_pushbuf *, struct nouveau_bo *, - uint64_t offset, uint64_t length); -int nouveau_pushbuf_refn(struct nouveau_pushbuf *, - struct nouveau_pushbuf_refn *, int nr); -/* Emits a reloc into the push buffer at the current position, you *must* - * have previously added the referenced buffer to a buffer context, and - * validated it against the current push buffer. - */ -void nouveau_pushbuf_reloc(struct nouveau_pushbuf *, struct nouveau_bo *, - uint32_t data, uint32_t flags, - uint32_t vor, uint32_t tor); -int nouveau_pushbuf_validate(struct nouveau_pushbuf *); -uint32_t nouveau_pushbuf_refd(struct nouveau_pushbuf *, struct nouveau_bo *); -int nouveau_pushbuf_kick(struct nouveau_pushbuf *, struct nouveau_object *chan); -struct nouveau_bufctx * -nouveau_pushbuf_bufctx(struct nouveau_pushbuf *, struct nouveau_bufctx *); - -#define NOUVEAU_DEVICE_CLASS 0x80000000 -#define NOUVEAU_FIFO_CHANNEL_CLASS 0x80000001 -#define NOUVEAU_NOTIFIER_CLASS 0x80000002 - -struct nouveau_fifo { - struct nouveau_object *object; - uint32_t channel; - uint32_t pushbuf; - uint64_t unused1[3]; -}; - -struct nv04_fifo { - struct nouveau_fifo base; - uint32_t vram; - uint32_t gart; - uint32_t notify; -}; - -struct nvc0_fifo { - struct nouveau_fifo base; - uint32_t notify; -}; - -#define NVE0_FIFO_ENGINE_GR 0x00000001 -#define NVE0_FIFO_ENGINE_VP 0x00000002 -#define NVE0_FIFO_ENGINE_PPP 0x00000004 -#define NVE0_FIFO_ENGINE_BSP 0x00000008 -#define NVE0_FIFO_ENGINE_CE0 0x00000010 -#define NVE0_FIFO_ENGINE_CE1 0x00000020 -#define NVE0_FIFO_ENGINE_ENC 0x00000040 - -struct nve0_fifo { - struct { - struct nouveau_fifo base; - uint32_t notify; - }; - uint32_t engine; -}; - -struct nv04_notify { - struct nouveau_object *object; - uint32_t offset; - uint32_t length; -}; - -bool -nouveau_check_dead_channel(struct nouveau_drm *, struct nouveau_object *chan); - -#endif diff --git a/prebuilts/arm/include/libdrm/nouveau/nvif/cl0080.h b/prebuilts/arm/include/libdrm/nouveau/nvif/cl0080.h deleted file mode 100644 index 331620a..0000000 --- a/prebuilts/arm/include/libdrm/nouveau/nvif/cl0080.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef __NVIF_CL0080_H__ -#define __NVIF_CL0080_H__ - -struct nv_device_v0 { - __u8 version; - __u8 pad01[7]; - __u64 device; /* device identifier, ~0 for client default */ -}; - -#define NV_DEVICE_V0_INFO 0x00 -#define NV_DEVICE_V0_TIME 0x01 - -struct nv_device_info_v0 { - __u8 version; -#define NV_DEVICE_INFO_V0_IGP 0x00 -#define NV_DEVICE_INFO_V0_PCI 0x01 -#define NV_DEVICE_INFO_V0_AGP 0x02 -#define NV_DEVICE_INFO_V0_PCIE 0x03 -#define NV_DEVICE_INFO_V0_SOC 0x04 - __u8 platform; - __u16 chipset; /* from NV_PMC_BOOT_0 */ - __u8 revision; /* from NV_PMC_BOOT_0 */ -#define NV_DEVICE_INFO_V0_TNT 0x01 -#define NV_DEVICE_INFO_V0_CELSIUS 0x02 -#define NV_DEVICE_INFO_V0_KELVIN 0x03 -#define NV_DEVICE_INFO_V0_RANKINE 0x04 -#define NV_DEVICE_INFO_V0_CURIE 0x05 -#define NV_DEVICE_INFO_V0_TESLA 0x06 -#define NV_DEVICE_INFO_V0_FERMI 0x07 -#define NV_DEVICE_INFO_V0_KEPLER 0x08 -#define NV_DEVICE_INFO_V0_MAXWELL 0x09 - __u8 family; - __u8 pad06[2]; - __u64 ram_size; - __u64 ram_user; - char chip[16]; - char name[64]; -}; - -struct nv_device_time_v0 { - __u8 version; - __u8 pad01[7]; - __u64 time; -}; -#endif diff --git a/prebuilts/arm/include/libdrm/nouveau/nvif/cl9097.h b/prebuilts/arm/include/libdrm/nouveau/nvif/cl9097.h deleted file mode 100644 index 4057676..0000000 --- a/prebuilts/arm/include/libdrm/nouveau/nvif/cl9097.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef __NVIF_CL9097_H__ -#define __NVIF_CL9097_H__ - -#define FERMI_A_ZBC_COLOR 0x00 -#define FERMI_A_ZBC_DEPTH 0x01 - -struct fermi_a_zbc_color_v0 { - __u8 version; -#define FERMI_A_ZBC_COLOR_V0_FMT_ZERO 0x01 -#define FERMI_A_ZBC_COLOR_V0_FMT_UNORM_ONE 0x02 -#define FERMI_A_ZBC_COLOR_V0_FMT_RF32_GF32_BF32_AF32 0x04 -#define FERMI_A_ZBC_COLOR_V0_FMT_R16_G16_B16_A16 0x08 -#define FERMI_A_ZBC_COLOR_V0_FMT_RN16_GN16_BN16_AN16 0x0c -#define FERMI_A_ZBC_COLOR_V0_FMT_RS16_GS16_BS16_AS16 0x10 -#define FERMI_A_ZBC_COLOR_V0_FMT_RU16_GU16_BU16_AU16 0x14 -#define FERMI_A_ZBC_COLOR_V0_FMT_RF16_GF16_BF16_AF16 0x16 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8R8G8B8 0x18 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8RL8GL8BL8 0x1c -#define FERMI_A_ZBC_COLOR_V0_FMT_A2B10G10R10 0x20 -#define FERMI_A_ZBC_COLOR_V0_FMT_AU2BU10GU10RU10 0x24 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8B8G8R8 0x28 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8BL8GL8RL8 0x2c -#define FERMI_A_ZBC_COLOR_V0_FMT_AN8BN8GN8RN8 0x30 -#define FERMI_A_ZBC_COLOR_V0_FMT_AS8BS8GS8RS8 0x34 -#define FERMI_A_ZBC_COLOR_V0_FMT_AU8BU8GU8RU8 0x38 -#define FERMI_A_ZBC_COLOR_V0_FMT_A2R10G10B10 0x3c -#define FERMI_A_ZBC_COLOR_V0_FMT_BF10GF11RF11 0x40 - __u8 format; - __u8 index; - __u8 pad03[5]; - __u32 ds[4]; - __u32 l2[4]; -}; - -struct fermi_a_zbc_depth_v0 { - __u8 version; -#define FERMI_A_ZBC_DEPTH_V0_FMT_FP32 0x01 - __u8 format; - __u8 index; - __u8 pad03[5]; - __u32 ds; - __u32 l2; -}; -#endif diff --git a/prebuilts/arm/include/libdrm/nouveau/nvif/class.h b/prebuilts/arm/include/libdrm/nouveau/nvif/class.h deleted file mode 100644 index 4179cd6..0000000 --- a/prebuilts/arm/include/libdrm/nouveau/nvif/class.h +++ /dev/null @@ -1,141 +0,0 @@ -#ifndef __NVIF_CLASS_H__ -#define __NVIF_CLASS_H__ - -/* these class numbers are made up by us, and not nvidia-assigned */ -#define NVIF_CLASS_CONTROL /* if0001.h */ -1 -#define NVIF_CLASS_PERFMON /* if0002.h */ -2 -#define NVIF_CLASS_PERFDOM /* if0003.h */ -3 -#define NVIF_CLASS_SW_NV04 /* if0004.h */ -4 -#define NVIF_CLASS_SW_NV10 /* if0005.h */ -5 -#define NVIF_CLASS_SW_NV50 /* if0005.h */ -6 -#define NVIF_CLASS_SW_GF100 /* if0005.h */ -7 - -/* the below match nvidia-assigned (either in hw, or sw) class numbers */ -#define NV_DEVICE /* cl0080.h */ 0x00000080 - -#define NV_DMA_FROM_MEMORY /* cl0002.h */ 0x00000002 -#define NV_DMA_TO_MEMORY /* cl0002.h */ 0x00000003 -#define NV_DMA_IN_MEMORY /* cl0002.h */ 0x0000003d - -#define FERMI_TWOD_A 0x0000902d - -#define FERMI_MEMORY_TO_MEMORY_FORMAT_A 0x00009039 - -#define KEPLER_INLINE_TO_MEMORY_A 0x0000a040 -#define KEPLER_INLINE_TO_MEMORY_B 0x0000a140 - -#define NV04_DISP /* cl0046.h */ 0x00000046 - -#define NV03_CHANNEL_DMA /* cl506b.h */ 0x0000006b -#define NV10_CHANNEL_DMA /* cl506b.h */ 0x0000006e -#define NV17_CHANNEL_DMA /* cl506b.h */ 0x0000176e -#define NV40_CHANNEL_DMA /* cl506b.h */ 0x0000406e -#define NV50_CHANNEL_DMA /* cl506e.h */ 0x0000506e -#define G82_CHANNEL_DMA /* cl826e.h */ 0x0000826e - -#define NV50_CHANNEL_GPFIFO /* cl506f.h */ 0x0000506f -#define G82_CHANNEL_GPFIFO /* cl826f.h */ 0x0000826f -#define FERMI_CHANNEL_GPFIFO /* cl906f.h */ 0x0000906f -#define KEPLER_CHANNEL_GPFIFO_A /* cla06f.h */ 0x0000a06f -#define MAXWELL_CHANNEL_GPFIFO_A /* cla06f.h */ 0x0000b06f - -#define NV50_DISP /* cl5070.h */ 0x00005070 -#define G82_DISP /* cl5070.h */ 0x00008270 -#define GT200_DISP /* cl5070.h */ 0x00008370 -#define GT214_DISP /* cl5070.h */ 0x00008570 -#define GT206_DISP /* cl5070.h */ 0x00008870 -#define GF110_DISP /* cl5070.h */ 0x00009070 -#define GK104_DISP /* cl5070.h */ 0x00009170 -#define GK110_DISP /* cl5070.h */ 0x00009270 -#define GM107_DISP /* cl5070.h */ 0x00009470 -#define GM204_DISP /* cl5070.h */ 0x00009570 - -#define NV31_MPEG 0x00003174 -#define G82_MPEG 0x00008274 - -#define NV74_VP2 0x00007476 - -#define NV50_DISP_CURSOR /* cl507a.h */ 0x0000507a -#define G82_DISP_CURSOR /* cl507a.h */ 0x0000827a -#define GT214_DISP_CURSOR /* cl507a.h */ 0x0000857a -#define GF110_DISP_CURSOR /* cl507a.h */ 0x0000907a -#define GK104_DISP_CURSOR /* cl507a.h */ 0x0000917a - -#define NV50_DISP_OVERLAY /* cl507b.h */ 0x0000507b -#define G82_DISP_OVERLAY /* cl507b.h */ 0x0000827b -#define GT214_DISP_OVERLAY /* cl507b.h */ 0x0000857b -#define GF110_DISP_OVERLAY /* cl507b.h */ 0x0000907b -#define GK104_DISP_OVERLAY /* cl507b.h */ 0x0000917b - -#define NV50_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000507c -#define G82_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000827c -#define GT200_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000837c -#define GT214_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000857c -#define GF110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000907c -#define GK104_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000917c -#define GK110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000927c - -#define NV50_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000507d -#define G82_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000827d -#define GT200_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000837d -#define GT214_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000857d -#define GT206_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000887d -#define GF110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000907d -#define GK104_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000917d -#define GK110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000927d -#define GM107_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000947d -#define GM204_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000957d - -#define NV50_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000507e -#define G82_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000827e -#define GT200_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000837e -#define GT214_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000857e -#define GF110_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ 0x0000907e -#define GK104_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ 0x0000917e - -#define FERMI_A /* cl9097.h */ 0x00009097 -#define FERMI_B /* cl9097.h */ 0x00009197 -#define FERMI_C /* cl9097.h */ 0x00009297 - -#define KEPLER_A /* cl9097.h */ 0x0000a097 -#define KEPLER_B /* cl9097.h */ 0x0000a197 -#define KEPLER_C /* cl9097.h */ 0x0000a297 - -#define MAXWELL_A /* cl9097.h */ 0x0000b097 -#define MAXWELL_B /* cl9097.h */ 0x0000b197 - -#define NV74_BSP 0x000074b0 - -#define GT212_MSVLD 0x000085b1 -#define IGT21A_MSVLD 0x000086b1 -#define G98_MSVLD 0x000088b1 -#define GF100_MSVLD 0x000090b1 -#define GK104_MSVLD 0x000095b1 - -#define GT212_MSPDEC 0x000085b2 -#define G98_MSPDEC 0x000088b2 -#define GF100_MSPDEC 0x000090b2 -#define GK104_MSPDEC 0x000095b2 - -#define GT212_MSPPP 0x000085b3 -#define G98_MSPPP 0x000088b3 -#define GF100_MSPPP 0x000090b3 - -#define G98_SEC 0x000088b4 - -#define GT212_DMA 0x000085b5 -#define FERMI_DMA 0x000090b5 -#define KEPLER_DMA_COPY_A 0x0000a0b5 -#define MAXWELL_DMA_COPY_A 0x0000b0b5 - -#define FERMI_DECOMPRESS 0x000090b8 - -#define FERMI_COMPUTE_A 0x000090c0 -#define FERMI_COMPUTE_B 0x000091c0 -#define KEPLER_COMPUTE_A 0x0000a0c0 -#define KEPLER_COMPUTE_B 0x0000a1c0 -#define MAXWELL_COMPUTE_A 0x0000b0c0 -#define MAXWELL_COMPUTE_B 0x0000b1c0 - -#define NV74_CIPHER 0x000074c1 -#endif diff --git a/prebuilts/arm/include/libdrm/nouveau/nvif/if0002.h b/prebuilts/arm/include/libdrm/nouveau/nvif/if0002.h deleted file mode 100644 index c04c91d..0000000 --- a/prebuilts/arm/include/libdrm/nouveau/nvif/if0002.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef __NVIF_IF0002_H__ -#define __NVIF_IF0002_H__ - -#define NVIF_PERFMON_V0_QUERY_DOMAIN 0x00 -#define NVIF_PERFMON_V0_QUERY_SIGNAL 0x01 -#define NVIF_PERFMON_V0_QUERY_SOURCE 0x02 - -struct nvif_perfmon_query_domain_v0 { - __u8 version; - __u8 id; - __u8 counter_nr; - __u8 iter; - __u16 signal_nr; - __u8 pad05[2]; - char name[64]; -}; - -struct nvif_perfmon_query_signal_v0 { - __u8 version; - __u8 domain; - __u16 iter; - __u8 signal; - __u8 source_nr; - __u8 pad05[2]; - char name[64]; -}; - -struct nvif_perfmon_query_source_v0 { - __u8 version; - __u8 domain; - __u8 signal; - __u8 iter; - __u8 pad04[4]; - __u32 source; - __u32 mask; - char name[64]; -}; -#endif diff --git a/prebuilts/arm/include/libdrm/nouveau/nvif/if0003.h b/prebuilts/arm/include/libdrm/nouveau/nvif/if0003.h deleted file mode 100644 index 0cd03ef..0000000 --- a/prebuilts/arm/include/libdrm/nouveau/nvif/if0003.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __NVIF_IF0003_H__ -#define __NVIF_IF0003_H__ - -struct nvif_perfdom_v0 { - __u8 version; - __u8 domain; - __u8 mode; - __u8 pad03[1]; - struct { - __u8 signal[4]; - __u64 source[4][8]; - __u16 logic_op; - } ctr[4]; -}; - -#define NVIF_PERFDOM_V0_INIT 0x00 -#define NVIF_PERFDOM_V0_SAMPLE 0x01 -#define NVIF_PERFDOM_V0_READ 0x02 - -struct nvif_perfdom_init { -}; - -struct nvif_perfdom_sample { -}; - -struct nvif_perfdom_read_v0 { - __u8 version; - __u8 pad01[7]; - __u32 ctr[4]; - __u32 clk; - __u8 pad04[4]; -}; -#endif diff --git a/prebuilts/arm/include/libdrm/nouveau/nvif/ioctl.h b/prebuilts/arm/include/libdrm/nouveau/nvif/ioctl.h deleted file mode 100644 index c5f5eb8..0000000 --- a/prebuilts/arm/include/libdrm/nouveau/nvif/ioctl.h +++ /dev/null @@ -1,132 +0,0 @@ -#ifndef __NVIF_IOCTL_H__ -#define __NVIF_IOCTL_H__ - -#define NVIF_VERSION_LATEST 0x0000000000000000ULL - -struct nvif_ioctl_v0 { - __u8 version; -#define NVIF_IOCTL_V0_NOP 0x00 -#define NVIF_IOCTL_V0_SCLASS 0x01 -#define NVIF_IOCTL_V0_NEW 0x02 -#define NVIF_IOCTL_V0_DEL 0x03 -#define NVIF_IOCTL_V0_MTHD 0x04 -#define NVIF_IOCTL_V0_RD 0x05 -#define NVIF_IOCTL_V0_WR 0x06 -#define NVIF_IOCTL_V0_MAP 0x07 -#define NVIF_IOCTL_V0_UNMAP 0x08 -#define NVIF_IOCTL_V0_NTFY_NEW 0x09 -#define NVIF_IOCTL_V0_NTFY_DEL 0x0a -#define NVIF_IOCTL_V0_NTFY_GET 0x0b -#define NVIF_IOCTL_V0_NTFY_PUT 0x0c - __u8 type; - __u8 pad02[4]; -#define NVIF_IOCTL_V0_OWNER_NVIF 0x00 -#define NVIF_IOCTL_V0_OWNER_ANY 0xff - __u8 owner; -#define NVIF_IOCTL_V0_ROUTE_NVIF 0x00 -#define NVIF_IOCTL_V0_ROUTE_HIDDEN 0xff - __u8 route; - __u64 token; - __u64 object; - __u8 data[]; /* ioctl data (below) */ -}; - -struct nvif_ioctl_nop_v0 { - __u64 version; -}; - -struct nvif_ioctl_sclass_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 count; - __u8 pad02[6]; - struct nvif_ioctl_sclass_oclass_v0 { - __s32 oclass; - __s16 minver; - __s16 maxver; - } oclass[]; -}; - -struct nvif_ioctl_new_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 pad01[6]; - __u8 route; - __u64 token; - __u64 object; - __u32 handle; - __s32 oclass; - __u8 data[]; /* class data (class.h) */ -}; - -struct nvif_ioctl_del { -}; - -struct nvif_ioctl_rd_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 size; - __u8 pad02[2]; - __u32 data; - __u64 addr; -}; - -struct nvif_ioctl_wr_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 size; - __u8 pad02[2]; - __u32 data; - __u64 addr; -}; - -struct nvif_ioctl_map_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 pad01[3]; - __u32 length; - __u64 handle; -}; - -struct nvif_ioctl_unmap { -}; - -struct nvif_ioctl_ntfy_new_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 event; - __u8 index; - __u8 pad03[5]; - __u8 data[]; /* event request data (event.h) */ -}; - -struct nvif_ioctl_ntfy_del_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 index; - __u8 pad02[6]; -}; - -struct nvif_ioctl_ntfy_get_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 index; - __u8 pad02[6]; -}; - -struct nvif_ioctl_ntfy_put_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 index; - __u8 pad02[6]; -}; - -struct nvif_ioctl_mthd_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 method; - __u8 pad02[6]; - __u8 data[]; /* method data (class.h) */ -}; - -#endif diff --git a/prebuilts/arm/include/libdrm/nouveau/nvif/unpack.h b/prebuilts/arm/include/libdrm/nouveau/nvif/unpack.h deleted file mode 100644 index 751bcf4..0000000 --- a/prebuilts/arm/include/libdrm/nouveau/nvif/unpack.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __NVIF_UNPACK_H__ -#define __NVIF_UNPACK_H__ - -#define nvif_unvers(r,d,s,m) ({ \ - void **_data = (d); __u32 *_size = (s); int _ret = (r); \ - if (_ret == -ENOSYS && *_size == sizeof(m)) { \ - *_data = NULL; \ - *_size = _ret = 0; \ - } \ - _ret; \ -}) - -#define nvif_unpack(r,d,s,m,vl,vh,x) ({ \ - void **_data = (d); __u32 *_size = (s); \ - int _ret = (r), _vl = (vl), _vh = (vh); \ - if (_ret == -ENOSYS && *_size >= sizeof(m) && \ - (m).version >= _vl && (m).version <= _vh) { \ - *_data = (__u8 *)*_data + sizeof(m); \ - *_size = *_size - sizeof(m); \ - if (_ret = 0, !(x)) { \ - _ret = *_size ? -E2BIG : 0; \ - *_data = NULL; \ - *_size = 0; \ - } \ - } \ - _ret; \ -}) -#endif diff --git a/prebuilts/arm/include/libdrm/nouveau_drm.h b/prebuilts/arm/include/libdrm/nouveau_drm.h deleted file mode 100644 index 4f94148..0000000 --- a/prebuilts/arm/include/libdrm/nouveau_drm.h +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright 2005 Stephane Marchesin. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef __NOUVEAU_DRM_H__ -#define __NOUVEAU_DRM_H__ - -#define NOUVEAU_DRM_HEADER_PATCHLEVEL 16 - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -struct drm_nouveau_channel_alloc { - uint32_t fb_ctxdma_handle; - uint32_t tt_ctxdma_handle; - - int channel; - uint32_t pushbuf_domains; - - /* Notifier memory */ - uint32_t notifier_handle; - - /* DRM-enforced subchannel assignments */ - struct { - uint32_t handle; - uint32_t grclass; - } subchan[8]; - uint32_t nr_subchan; -}; - -struct drm_nouveau_channel_free { - int channel; -}; - -struct drm_nouveau_grobj_alloc { - int channel; - uint32_t handle; - int class; -}; - -struct drm_nouveau_notifierobj_alloc { - uint32_t channel; - uint32_t handle; - uint32_t size; - uint32_t offset; -}; - -struct drm_nouveau_gpuobj_free { - int channel; - uint32_t handle; -}; - -#define NOUVEAU_GETPARAM_PCI_VENDOR 3 -#define NOUVEAU_GETPARAM_PCI_DEVICE 4 -#define NOUVEAU_GETPARAM_BUS_TYPE 5 -#define NOUVEAU_GETPARAM_FB_SIZE 8 -#define NOUVEAU_GETPARAM_AGP_SIZE 9 -#define NOUVEAU_GETPARAM_CHIPSET_ID 11 -#define NOUVEAU_GETPARAM_VM_VRAM_BASE 12 -#define NOUVEAU_GETPARAM_GRAPH_UNITS 13 -#define NOUVEAU_GETPARAM_PTIMER_TIME 14 -#define NOUVEAU_GETPARAM_HAS_BO_USAGE 15 -#define NOUVEAU_GETPARAM_HAS_PAGEFLIP 16 -struct drm_nouveau_getparam { - uint64_t param; - uint64_t value; -}; - -struct drm_nouveau_setparam { - uint64_t param; - uint64_t value; -}; - -#define NOUVEAU_GEM_DOMAIN_CPU (1 << 0) -#define NOUVEAU_GEM_DOMAIN_VRAM (1 << 1) -#define NOUVEAU_GEM_DOMAIN_GART (1 << 2) -#define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3) -#define NOUVEAU_GEM_DOMAIN_COHERENT (1 << 4) - -#define NOUVEAU_GEM_TILE_COMP 0x00030000 /* nv50-only */ -#define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00 -#define NOUVEAU_GEM_TILE_16BPP 0x00000001 -#define NOUVEAU_GEM_TILE_32BPP 0x00000002 -#define NOUVEAU_GEM_TILE_ZETA 0x00000004 -#define NOUVEAU_GEM_TILE_NONCONTIG 0x00000008 - -struct drm_nouveau_gem_info { - __u32 handle; - __u32 domain; - __u64 size; - __u64 offset; - __u64 map_handle; - __u32 tile_mode; - __u32 tile_flags; -}; - -struct drm_nouveau_gem_new { - struct drm_nouveau_gem_info info; - __u32 channel_hint; - __u32 align; -}; - -#define NOUVEAU_GEM_MAX_BUFFERS 1024 -struct drm_nouveau_gem_pushbuf_bo_presumed { - __u32 valid; - __u32 domain; - __u64 offset; -}; - -struct drm_nouveau_gem_pushbuf_bo { - __u64 user_priv; - __u32 handle; - __u32 read_domains; - __u32 write_domains; - __u32 valid_domains; - struct drm_nouveau_gem_pushbuf_bo_presumed presumed; -}; - -#define NOUVEAU_GEM_RELOC_LOW (1 << 0) -#define NOUVEAU_GEM_RELOC_HIGH (1 << 1) -#define NOUVEAU_GEM_RELOC_OR (1 << 2) -#define NOUVEAU_GEM_MAX_RELOCS 1024 -struct drm_nouveau_gem_pushbuf_reloc { - __u32 reloc_bo_index; - __u32 reloc_bo_offset; - __u32 bo_index; - __u32 flags; - __u32 data; - __u32 vor; - __u32 tor; -}; - -#define NOUVEAU_GEM_MAX_PUSH 512 -struct drm_nouveau_gem_pushbuf_push { - __u32 bo_index; - __u32 pad; - __u64 offset; - __u64 length; -}; - -struct drm_nouveau_gem_pushbuf { - __u32 channel; - __u32 nr_buffers; - __u64 buffers; - __u32 nr_relocs; - __u32 nr_push; - __u64 relocs; - __u64 push; - __u32 suffix0; - __u32 suffix1; -#define NOUVEAU_GEM_PUSHBUF_SYNC (1ULL << 0) - __u64 vram_available; - __u64 gart_available; -}; - -#define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001 -#define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004 -struct drm_nouveau_gem_cpu_prep { - __u32 handle; - __u32 flags; -}; - -struct drm_nouveau_gem_cpu_fini { - __u32 handle; -}; - -#define DRM_NOUVEAU_GETPARAM 0x00 /* deprecated */ -#define DRM_NOUVEAU_SETPARAM 0x01 /* deprecated */ -#define DRM_NOUVEAU_CHANNEL_ALLOC 0x02 /* deprecated */ -#define DRM_NOUVEAU_CHANNEL_FREE 0x03 /* deprecated */ -#define DRM_NOUVEAU_GROBJ_ALLOC 0x04 /* deprecated */ -#define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC 0x05 /* deprecated */ -#define DRM_NOUVEAU_GPUOBJ_FREE 0x06 /* deprecated */ -#define DRM_NOUVEAU_NVIF 0x07 -#define DRM_NOUVEAU_SVM_INIT 0x08 -#define DRM_NOUVEAU_SVM_BIND 0x09 -#define DRM_NOUVEAU_GEM_NEW 0x40 -#define DRM_NOUVEAU_GEM_PUSHBUF 0x41 -#define DRM_NOUVEAU_GEM_CPU_PREP 0x42 -#define DRM_NOUVEAU_GEM_CPU_FINI 0x43 -#define DRM_NOUVEAU_GEM_INFO 0x44 - -struct drm_nouveau_svm_init { - __u64 unmanaged_addr; - __u64 unmanaged_size; -}; - -struct drm_nouveau_svm_bind { - __u64 header; - __u64 va_start; - __u64 va_end; - __u64 npages; - __u64 stride; - __u64 result; - __u64 reserved0; - __u64 reserved1; -}; - -#define NOUVEAU_SVM_BIND_COMMAND_SHIFT 0 -#define NOUVEAU_SVM_BIND_COMMAND_BITS 8 -#define NOUVEAU_SVM_BIND_COMMAND_MASK ((1 << 8) - 1) -#define NOUVEAU_SVM_BIND_PRIORITY_SHIFT 8 -#define NOUVEAU_SVM_BIND_PRIORITY_BITS 8 -#define NOUVEAU_SVM_BIND_PRIORITY_MASK ((1 << 8) - 1) -#define NOUVEAU_SVM_BIND_TARGET_SHIFT 16 -#define NOUVEAU_SVM_BIND_TARGET_BITS 32 -#define NOUVEAU_SVM_BIND_TARGET_MASK 0xffffffff - -/* - * Below is use to validate ioctl argument, userspace can also use it to make - * sure that no bit are set beyond known fields for a given kernel version. - */ -#define NOUVEAU_SVM_BIND_VALID_BITS 48 -#define NOUVEAU_SVM_BIND_VALID_MASK ((1ULL << NOUVEAU_SVM_BIND_VALID_BITS) - 1) - - -/* - * NOUVEAU_BIND_COMMAND__MIGRATE: synchronous migrate to target memory. - * result: number of page successfuly migrate to the target memory. - */ -#define NOUVEAU_SVM_BIND_COMMAND__MIGRATE 0 - -/* - * NOUVEAU_SVM_BIND_HEADER_TARGET__GPU_VRAM: target the GPU VRAM memory. - */ -#define NOUVEAU_SVM_BIND_TARGET__GPU_VRAM (1UL << 31) - - -#if defined(__cplusplus) -} -#endif - -#endif /* __NOUVEAU_DRM_H__ */ diff --git a/prebuilts/arm/include/libdrm/qxl_drm.h b/prebuilts/arm/include/libdrm/qxl_drm.h deleted file mode 100644 index 880999d..0000000 --- a/prebuilts/arm/include/libdrm/qxl_drm.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright 2013 Red Hat - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef QXL_DRM_H -#define QXL_DRM_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints. - * - * Do not use pointers, use __u64 instead for 32 bit / 64 bit user/kernel - * compatibility Keep fields aligned to their size - */ - -#define QXL_GEM_DOMAIN_CPU 0 -#define QXL_GEM_DOMAIN_VRAM 1 -#define QXL_GEM_DOMAIN_SURFACE 2 - -#define DRM_QXL_ALLOC 0x00 -#define DRM_QXL_MAP 0x01 -#define DRM_QXL_EXECBUFFER 0x02 -#define DRM_QXL_UPDATE_AREA 0x03 -#define DRM_QXL_GETPARAM 0x04 -#define DRM_QXL_CLIENTCAP 0x05 - -#define DRM_QXL_ALLOC_SURF 0x06 - -struct drm_qxl_alloc { - __u32 size; - __u32 handle; /* 0 is an invalid handle */ -}; - -struct drm_qxl_map { - __u64 offset; /* use for mmap system call */ - __u32 handle; - __u32 pad; -}; - -/* - * dest is the bo we are writing the relocation into - * src is bo we are relocating. - * *(dest_handle.base_addr + dest_offset) = physical_address(src_handle.addr + - * src_offset) - */ -#define QXL_RELOC_TYPE_BO 1 -#define QXL_RELOC_TYPE_SURF 2 - -struct drm_qxl_reloc { - __u64 src_offset; /* offset into src_handle or src buffer */ - __u64 dst_offset; /* offset in dest handle */ - __u32 src_handle; /* dest handle to compute address from */ - __u32 dst_handle; /* 0 if to command buffer */ - __u32 reloc_type; - __u32 pad; -}; - -struct drm_qxl_command { - __u64 command; /* void* */ - __u64 relocs; /* struct drm_qxl_reloc* */ - __u32 type; - __u32 command_size; - __u32 relocs_num; - __u32 pad; -}; - -struct drm_qxl_execbuffer { - __u32 flags; /* for future use */ - __u32 commands_num; - __u64 commands; /* struct drm_qxl_command* */ -}; - -struct drm_qxl_update_area { - __u32 handle; - __u32 top; - __u32 left; - __u32 bottom; - __u32 right; - __u32 pad; -}; - -#define QXL_PARAM_NUM_SURFACES 1 /* rom->n_surfaces */ -#define QXL_PARAM_MAX_RELOCS 2 -struct drm_qxl_getparam { - __u64 param; - __u64 value; -}; - -/* these are one bit values */ -struct drm_qxl_clientcap { - __u32 index; - __u32 pad; -}; - -struct drm_qxl_alloc_surf { - __u32 format; - __u32 width; - __u32 height; - __s32 stride; - __u32 handle; - __u32 pad; -}; - -#define DRM_IOCTL_QXL_ALLOC \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_ALLOC, struct drm_qxl_alloc) - -#define DRM_IOCTL_QXL_MAP \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_MAP, struct drm_qxl_map) - -#define DRM_IOCTL_QXL_EXECBUFFER \ - DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_EXECBUFFER,\ - struct drm_qxl_execbuffer) - -#define DRM_IOCTL_QXL_UPDATE_AREA \ - DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_UPDATE_AREA,\ - struct drm_qxl_update_area) - -#define DRM_IOCTL_QXL_GETPARAM \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_GETPARAM,\ - struct drm_qxl_getparam) - -#define DRM_IOCTL_QXL_CLIENTCAP \ - DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_CLIENTCAP,\ - struct drm_qxl_clientcap) - -#define DRM_IOCTL_QXL_ALLOC_SURF \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_ALLOC_SURF,\ - struct drm_qxl_alloc_surf) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/arm/include/libdrm/r128_drm.h b/prebuilts/arm/include/libdrm/r128_drm.h deleted file mode 100644 index bf431a0..0000000 --- a/prebuilts/arm/include/libdrm/r128_drm.h +++ /dev/null @@ -1,336 +0,0 @@ -/* r128_drm.h -- Public header for the r128 driver -*- linux-c -*- - * Created: Wed Apr 5 19:24:19 2000 by kevin@precisioninsight.com - */ -/* - * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Gareth Hughes - * Kevin E. Martin - */ - -#ifndef __R128_DRM_H__ -#define __R128_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the X server file (r128_sarea.h) - */ -#ifndef __R128_SAREA_DEFINES__ -#define __R128_SAREA_DEFINES__ - -/* What needs to be changed for the current vertex buffer? - */ -#define R128_UPLOAD_CONTEXT 0x001 -#define R128_UPLOAD_SETUP 0x002 -#define R128_UPLOAD_TEX0 0x004 -#define R128_UPLOAD_TEX1 0x008 -#define R128_UPLOAD_TEX0IMAGES 0x010 -#define R128_UPLOAD_TEX1IMAGES 0x020 -#define R128_UPLOAD_CORE 0x040 -#define R128_UPLOAD_MASKS 0x080 -#define R128_UPLOAD_WINDOW 0x100 -#define R128_UPLOAD_CLIPRECTS 0x200 /* handled client-side */ -#define R128_REQUIRE_QUIESCENCE 0x400 -#define R128_UPLOAD_ALL 0x7ff - -#define R128_FRONT 0x1 -#define R128_BACK 0x2 -#define R128_DEPTH 0x4 - -/* Primitive types - */ -#define R128_POINTS 0x1 -#define R128_LINES 0x2 -#define R128_LINE_STRIP 0x3 -#define R128_TRIANGLES 0x4 -#define R128_TRIANGLE_FAN 0x5 -#define R128_TRIANGLE_STRIP 0x6 - -/* Vertex/indirect buffer size - */ -#define R128_BUFFER_SIZE 16384 - -/* Byte offsets for indirect buffer data - */ -#define R128_INDEX_PRIM_OFFSET 20 -#define R128_HOSTDATA_BLIT_OFFSET 32 - -/* Keep these small for testing. - */ -#define R128_NR_SAREA_CLIPRECTS 12 - -/* There are 2 heaps (local/AGP). Each region within a heap is a - * minimum of 64k, and there are at most 64 of them per heap. - */ -#define R128_LOCAL_TEX_HEAP 0 -#define R128_AGP_TEX_HEAP 1 -#define R128_NR_TEX_HEAPS 2 -#define R128_NR_TEX_REGIONS 64 -#define R128_LOG_TEX_GRANULARITY 16 - -#define R128_NR_CONTEXT_REGS 12 - -#define R128_MAX_TEXTURE_LEVELS 11 -#define R128_MAX_TEXTURE_UNITS 2 - -#endif /* __R128_SAREA_DEFINES__ */ - -typedef struct { - /* Context state - can be written in one large chunk */ - unsigned int dst_pitch_offset_c; - unsigned int dp_gui_master_cntl_c; - unsigned int sc_top_left_c; - unsigned int sc_bottom_right_c; - unsigned int z_offset_c; - unsigned int z_pitch_c; - unsigned int z_sten_cntl_c; - unsigned int tex_cntl_c; - unsigned int misc_3d_state_cntl_reg; - unsigned int texture_clr_cmp_clr_c; - unsigned int texture_clr_cmp_msk_c; - unsigned int fog_color_c; - - /* Texture state */ - unsigned int tex_size_pitch_c; - unsigned int constant_color_c; - - /* Setup state */ - unsigned int pm4_vc_fpu_setup; - unsigned int setup_cntl; - - /* Mask state */ - unsigned int dp_write_mask; - unsigned int sten_ref_mask_c; - unsigned int plane_3d_mask_c; - - /* Window state */ - unsigned int window_xy_offset; - - /* Core state */ - unsigned int scale_3d_cntl; -} drm_r128_context_regs_t; - -/* Setup registers for each texture unit - */ -typedef struct { - unsigned int tex_cntl; - unsigned int tex_combine_cntl; - unsigned int tex_size_pitch; - unsigned int tex_offset[R128_MAX_TEXTURE_LEVELS]; - unsigned int tex_border_color; -} drm_r128_texture_regs_t; - -typedef struct drm_r128_sarea { - /* The channel for communication of state information to the kernel - * on firing a vertex buffer. - */ - drm_r128_context_regs_t context_state; - drm_r128_texture_regs_t tex_state[R128_MAX_TEXTURE_UNITS]; - unsigned int dirty; - unsigned int vertsize; - unsigned int vc_format; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[R128_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Counters for client-side throttling of rendering clients. - */ - unsigned int last_frame; - unsigned int last_dispatch; - - struct drm_tex_region tex_list[R128_NR_TEX_HEAPS][R128_NR_TEX_REGIONS + 1]; - unsigned int tex_age[R128_NR_TEX_HEAPS]; - int ctx_owner; - int pfAllowPageFlip; /* number of 3d windows (0,1,2 or more) */ - int pfCurrentPage; /* which buffer is being displayed? */ -} drm_r128_sarea_t; - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (xf86drmR128.h) - */ - -/* Rage 128 specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ -#define DRM_R128_INIT 0x00 -#define DRM_R128_CCE_START 0x01 -#define DRM_R128_CCE_STOP 0x02 -#define DRM_R128_CCE_RESET 0x03 -#define DRM_R128_CCE_IDLE 0x04 -/* 0x05 not used */ -#define DRM_R128_RESET 0x06 -#define DRM_R128_SWAP 0x07 -#define DRM_R128_CLEAR 0x08 -#define DRM_R128_VERTEX 0x09 -#define DRM_R128_INDICES 0x0a -#define DRM_R128_BLIT 0x0b -#define DRM_R128_DEPTH 0x0c -#define DRM_R128_STIPPLE 0x0d -/* 0x0e not used */ -#define DRM_R128_INDIRECT 0x0f -#define DRM_R128_FULLSCREEN 0x10 -#define DRM_R128_CLEAR2 0x11 -#define DRM_R128_GETPARAM 0x12 -#define DRM_R128_FLIP 0x13 - -#define DRM_IOCTL_R128_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INIT, drm_r128_init_t) -#define DRM_IOCTL_R128_CCE_START DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_START) -#define DRM_IOCTL_R128_CCE_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CCE_STOP, drm_r128_cce_stop_t) -#define DRM_IOCTL_R128_CCE_RESET DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_RESET) -#define DRM_IOCTL_R128_CCE_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_IDLE) -/* 0x05 not used */ -#define DRM_IOCTL_R128_RESET DRM_IO( DRM_COMMAND_BASE + DRM_R128_RESET) -#define DRM_IOCTL_R128_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_R128_SWAP) -#define DRM_IOCTL_R128_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR, drm_r128_clear_t) -#define DRM_IOCTL_R128_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_R128_VERTEX, drm_r128_vertex_t) -#define DRM_IOCTL_R128_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INDICES, drm_r128_indices_t) -#define DRM_IOCTL_R128_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_R128_BLIT, drm_r128_blit_t) -#define DRM_IOCTL_R128_DEPTH DRM_IOW( DRM_COMMAND_BASE + DRM_R128_DEPTH, drm_r128_depth_t) -#define DRM_IOCTL_R128_STIPPLE DRM_IOW( DRM_COMMAND_BASE + DRM_R128_STIPPLE, drm_r128_stipple_t) -/* 0x0e not used */ -#define DRM_IOCTL_R128_INDIRECT DRM_IOWR(DRM_COMMAND_BASE + DRM_R128_INDIRECT, drm_r128_indirect_t) -#define DRM_IOCTL_R128_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_R128_FULLSCREEN, drm_r128_fullscreen_t) -#define DRM_IOCTL_R128_CLEAR2 DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR2, drm_r128_clear2_t) -#define DRM_IOCTL_R128_GETPARAM DRM_IOWR( DRM_COMMAND_BASE + DRM_R128_GETPARAM, drm_r128_getparam_t) -#define DRM_IOCTL_R128_FLIP DRM_IO( DRM_COMMAND_BASE + DRM_R128_FLIP) - -typedef struct drm_r128_init { - enum { - R128_INIT_CCE = 0x01, - R128_CLEANUP_CCE = 0x02 - } func; - unsigned long sarea_priv_offset; - int is_pci; - int cce_mode; - int cce_secure; - int ring_size; - int usec_timeout; - - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - unsigned int span_offset; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long ring_offset; - unsigned long ring_rptr_offset; - unsigned long buffers_offset; - unsigned long agp_textures_offset; -} drm_r128_init_t; - -typedef struct drm_r128_cce_stop { - int flush; - int idle; -} drm_r128_cce_stop_t; - -typedef struct drm_r128_clear { - unsigned int flags; - unsigned int clear_color; - unsigned int clear_depth; - unsigned int color_mask; - unsigned int depth_mask; -} drm_r128_clear_t; - -typedef struct drm_r128_vertex { - int prim; - int idx; /* Index of vertex buffer */ - int count; /* Number of vertices in buffer */ - int discard; /* Client finished with buffer? */ -} drm_r128_vertex_t; - -typedef struct drm_r128_indices { - int prim; - int idx; - int start; - int end; - int discard; /* Client finished with buffer? */ -} drm_r128_indices_t; - -typedef struct drm_r128_blit { - int idx; - int pitch; - int offset; - int format; - unsigned short x, y; - unsigned short width, height; -} drm_r128_blit_t; - -typedef struct drm_r128_depth { - enum { - R128_WRITE_SPAN = 0x01, - R128_WRITE_PIXELS = 0x02, - R128_READ_SPAN = 0x03, - R128_READ_PIXELS = 0x04 - } func; - int n; - int *x; - int *y; - unsigned int *buffer; - unsigned char *mask; -} drm_r128_depth_t; - -typedef struct drm_r128_stipple { - unsigned int *mask; -} drm_r128_stipple_t; - -typedef struct drm_r128_indirect { - int idx; - int start; - int end; - int discard; -} drm_r128_indirect_t; - -typedef struct drm_r128_fullscreen { - enum { - R128_INIT_FULLSCREEN = 0x01, - R128_CLEANUP_FULLSCREEN = 0x02 - } func; -} drm_r128_fullscreen_t; - -/* 2.3: An ioctl to get parameters that aren't available to the 3d - * client any other way. - */ -#define R128_PARAM_IRQ_NR 1 - -typedef struct drm_r128_getparam { - int param; - void *value; -} drm_r128_getparam_t; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/arm/include/libdrm/r600_pci_ids.h b/prebuilts/arm/include/libdrm/r600_pci_ids.h deleted file mode 100644 index a3b2eac..0000000 --- a/prebuilts/arm/include/libdrm/r600_pci_ids.h +++ /dev/null @@ -1,487 +0,0 @@ -CHIPSET(0x9400, R600_9400, R600) -CHIPSET(0x9401, R600_9401, R600) -CHIPSET(0x9402, R600_9402, R600) -CHIPSET(0x9403, R600_9403, R600) -CHIPSET(0x9405, R600_9405, R600) -CHIPSET(0x940A, R600_940A, R600) -CHIPSET(0x940B, R600_940B, R600) -CHIPSET(0x940F, R600_940F, R600) - -CHIPSET(0x94C0, RV610_94C0, RV610) -CHIPSET(0x94C1, RV610_94C1, RV610) -CHIPSET(0x94C3, RV610_94C3, RV610) -CHIPSET(0x94C4, RV610_94C4, RV610) -CHIPSET(0x94C5, RV610_94C5, RV610) -CHIPSET(0x94C6, RV610_94C6, RV610) -CHIPSET(0x94C7, RV610_94C7, RV610) -CHIPSET(0x94C8, RV610_94C8, RV610) -CHIPSET(0x94C9, RV610_94C9, RV610) -CHIPSET(0x94CB, RV610_94CB, RV610) -CHIPSET(0x94CC, RV610_94CC, RV610) -CHIPSET(0x94CD, RV610_94CD, RV610) - -CHIPSET(0x9580, RV630_9580, RV630) -CHIPSET(0x9581, RV630_9581, RV630) -CHIPSET(0x9583, RV630_9583, RV630) -CHIPSET(0x9586, RV630_9586, RV630) -CHIPSET(0x9587, RV630_9587, RV630) -CHIPSET(0x9588, RV630_9588, RV630) -CHIPSET(0x9589, RV630_9589, RV630) -CHIPSET(0x958A, RV630_958A, RV630) -CHIPSET(0x958B, RV630_958B, RV630) -CHIPSET(0x958C, RV630_958C, RV630) -CHIPSET(0x958D, RV630_958D, RV630) -CHIPSET(0x958E, RV630_958E, RV630) -CHIPSET(0x958F, RV630_958F, RV630) - -CHIPSET(0x9500, RV670_9500, RV670) -CHIPSET(0x9501, RV670_9501, RV670) -CHIPSET(0x9504, RV670_9504, RV670) -CHIPSET(0x9505, RV670_9505, RV670) -CHIPSET(0x9506, RV670_9506, RV670) -CHIPSET(0x9507, RV670_9507, RV670) -CHIPSET(0x9508, RV670_9508, RV670) -CHIPSET(0x9509, RV670_9509, RV670) -CHIPSET(0x950F, RV670_950F, RV670) -CHIPSET(0x9511, RV670_9511, RV670) -CHIPSET(0x9515, RV670_9515, RV670) -CHIPSET(0x9517, RV670_9517, RV670) -CHIPSET(0x9519, RV670_9519, RV670) - -CHIPSET(0x95C0, RV620_95C0, RV620) -CHIPSET(0x95C2, RV620_95C2, RV620) -CHIPSET(0x95C4, RV620_95C4, RV620) -CHIPSET(0x95C5, RV620_95C5, RV620) -CHIPSET(0x95C6, RV620_95C6, RV620) -CHIPSET(0x95C7, RV620_95C7, RV620) -CHIPSET(0x95C9, RV620_95C9, RV620) -CHIPSET(0x95CC, RV620_95CC, RV620) -CHIPSET(0x95CD, RV620_95CD, RV620) -CHIPSET(0x95CE, RV620_95CE, RV620) -CHIPSET(0x95CF, RV620_95CF, RV620) - -CHIPSET(0x9590, RV635_9590, RV635) -CHIPSET(0x9591, RV635_9591, RV635) -CHIPSET(0x9593, RV635_9593, RV635) -CHIPSET(0x9595, RV635_9595, RV635) -CHIPSET(0x9596, RV635_9596, RV635) -CHIPSET(0x9597, RV635_9597, RV635) -CHIPSET(0x9598, RV635_9598, RV635) -CHIPSET(0x9599, RV635_9599, RV635) -CHIPSET(0x959B, RV635_959B, RV635) - -CHIPSET(0x9610, RS780_9610, RS780) -CHIPSET(0x9611, RS780_9611, RS780) -CHIPSET(0x9612, RS780_9612, RS780) -CHIPSET(0x9613, RS780_9613, RS780) -CHIPSET(0x9614, RS780_9614, RS780) -CHIPSET(0x9615, RS780_9615, RS780) -CHIPSET(0x9616, RS780_9616, RS780) - -CHIPSET(0x9710, RS880_9710, RS880) -CHIPSET(0x9711, RS880_9711, RS880) -CHIPSET(0x9712, RS880_9712, RS880) -CHIPSET(0x9713, RS880_9713, RS880) -CHIPSET(0x9714, RS880_9714, RS880) -CHIPSET(0x9715, RS880_9715, RS880) - -CHIPSET(0x9440, RV770_9440, RV770) -CHIPSET(0x9441, RV770_9441, RV770) -CHIPSET(0x9442, RV770_9442, RV770) -CHIPSET(0x9443, RV770_9443, RV770) -CHIPSET(0x9444, RV770_9444, RV770) -CHIPSET(0x9446, RV770_9446, RV770) -CHIPSET(0x944A, RV770_944A, RV770) -CHIPSET(0x944B, RV770_944B, RV770) -CHIPSET(0x944C, RV770_944C, RV770) -CHIPSET(0x944E, RV770_944E, RV770) -CHIPSET(0x9450, RV770_9450, RV770) -CHIPSET(0x9452, RV770_9452, RV770) -CHIPSET(0x9456, RV770_9456, RV770) -CHIPSET(0x945A, RV770_945A, RV770) -CHIPSET(0x945B, RV770_945B, RV770) -CHIPSET(0x945E, RV770_945E, RV770) -CHIPSET(0x9460, RV790_9460, RV770) -CHIPSET(0x9462, RV790_9462, RV770) -CHIPSET(0x946A, RV770_946A, RV770) -CHIPSET(0x946B, RV770_946B, RV770) -CHIPSET(0x947A, RV770_947A, RV770) -CHIPSET(0x947B, RV770_947B, RV770) - -CHIPSET(0x9480, RV730_9480, RV730) -CHIPSET(0x9487, RV730_9487, RV730) -CHIPSET(0x9488, RV730_9488, RV730) -CHIPSET(0x9489, RV730_9489, RV730) -CHIPSET(0x948A, RV730_948A, RV730) -CHIPSET(0x948F, RV730_948F, RV730) -CHIPSET(0x9490, RV730_9490, RV730) -CHIPSET(0x9491, RV730_9491, RV730) -CHIPSET(0x9495, RV730_9495, RV730) -CHIPSET(0x9498, RV730_9498, RV730) -CHIPSET(0x949C, RV730_949C, RV730) -CHIPSET(0x949E, RV730_949E, RV730) -CHIPSET(0x949F, RV730_949F, RV730) - -CHIPSET(0x9540, RV710_9540, RV710) -CHIPSET(0x9541, RV710_9541, RV710) -CHIPSET(0x9542, RV710_9542, RV710) -CHIPSET(0x954E, RV710_954E, RV710) -CHIPSET(0x954F, RV710_954F, RV710) -CHIPSET(0x9552, RV710_9552, RV710) -CHIPSET(0x9553, RV710_9553, RV710) -CHIPSET(0x9555, RV710_9555, RV710) -CHIPSET(0x9557, RV710_9557, RV710) -CHIPSET(0x955F, RV710_955F, RV710) - -CHIPSET(0x94A0, RV740_94A0, RV740) -CHIPSET(0x94A1, RV740_94A1, RV740) -CHIPSET(0x94A3, RV740_94A3, RV740) -CHIPSET(0x94B1, RV740_94B1, RV740) -CHIPSET(0x94B3, RV740_94B3, RV740) -CHIPSET(0x94B4, RV740_94B4, RV740) -CHIPSET(0x94B5, RV740_94B5, RV740) -CHIPSET(0x94B9, RV740_94B9, RV740) - -CHIPSET(0x68E0, CEDAR_68E0, CEDAR) -CHIPSET(0x68E1, CEDAR_68E1, CEDAR) -CHIPSET(0x68E4, CEDAR_68E4, CEDAR) -CHIPSET(0x68E5, CEDAR_68E5, CEDAR) -CHIPSET(0x68E8, CEDAR_68E8, CEDAR) -CHIPSET(0x68E9, CEDAR_68E9, CEDAR) -CHIPSET(0x68F1, CEDAR_68F1, CEDAR) -CHIPSET(0x68F2, CEDAR_68F2, CEDAR) -CHIPSET(0x68F8, CEDAR_68F8, CEDAR) -CHIPSET(0x68F9, CEDAR_68F9, CEDAR) -CHIPSET(0x68FA, CEDAR_68FA, CEDAR) -CHIPSET(0x68FE, CEDAR_68FE, CEDAR) - -CHIPSET(0x68C0, REDWOOD_68C0, REDWOOD) -CHIPSET(0x68C1, REDWOOD_68C1, REDWOOD) -CHIPSET(0x68C7, REDWOOD_68C7, REDWOOD) -CHIPSET(0x68C8, REDWOOD_68C8, REDWOOD) -CHIPSET(0x68C9, REDWOOD_68C9, REDWOOD) -CHIPSET(0x68D8, REDWOOD_68D8, REDWOOD) -CHIPSET(0x68D9, REDWOOD_68D9, REDWOOD) -CHIPSET(0x68DA, REDWOOD_68DA, REDWOOD) -CHIPSET(0x68DE, REDWOOD_68DE, REDWOOD) - -CHIPSET(0x68A0, JUNIPER_68A0, JUNIPER) -CHIPSET(0x68A1, JUNIPER_68A1, JUNIPER) -CHIPSET(0x68A8, JUNIPER_68A8, JUNIPER) -CHIPSET(0x68A9, JUNIPER_68A9, JUNIPER) -CHIPSET(0x68B0, JUNIPER_68B0, JUNIPER) -CHIPSET(0x68B8, JUNIPER_68B8, JUNIPER) -CHIPSET(0x68B9, JUNIPER_68B9, JUNIPER) -CHIPSET(0x68BA, JUNIPER_68BA, JUNIPER) -CHIPSET(0x68BE, JUNIPER_68BE, JUNIPER) -CHIPSET(0x68BF, JUNIPER_68BF, JUNIPER) - -CHIPSET(0x6880, CYPRESS_6880, CYPRESS) -CHIPSET(0x6888, CYPRESS_6888, CYPRESS) -CHIPSET(0x6889, CYPRESS_6889, CYPRESS) -CHIPSET(0x688A, CYPRESS_688A, CYPRESS) -CHIPSET(0x688C, CYPRESS_688C, CYPRESS) -CHIPSET(0x688D, CYPRESS_688D, CYPRESS) -CHIPSET(0x6898, CYPRESS_6898, CYPRESS) -CHIPSET(0x6899, CYPRESS_6899, CYPRESS) -CHIPSET(0x689B, CYPRESS_689B, CYPRESS) -CHIPSET(0x689E, CYPRESS_689E, CYPRESS) - -CHIPSET(0x689C, HEMLOCK_689C, HEMLOCK) -CHIPSET(0x689D, HEMLOCK_689D, HEMLOCK) - -CHIPSET(0x9802, PALM_9802, PALM) -CHIPSET(0x9803, PALM_9803, PALM) -CHIPSET(0x9804, PALM_9804, PALM) -CHIPSET(0x9805, PALM_9805, PALM) -CHIPSET(0x9806, PALM_9806, PALM) -CHIPSET(0x9807, PALM_9807, PALM) -CHIPSET(0x9808, PALM_9808, PALM) -CHIPSET(0x9809, PALM_9809, PALM) -CHIPSET(0x980A, PALM_980A, PALM) - -CHIPSET(0x9640, SUMO_9640, SUMO) -CHIPSET(0x9641, SUMO_9641, SUMO) -CHIPSET(0x9642, SUMO2_9642, SUMO2) -CHIPSET(0x9643, SUMO2_9643, SUMO2) -CHIPSET(0x9644, SUMO2_9644, SUMO2) -CHIPSET(0x9645, SUMO2_9645, SUMO2) -CHIPSET(0x9647, SUMO_9647, SUMO) -CHIPSET(0x9648, SUMO_9648, SUMO) -CHIPSET(0x9649, SUMO2_9649, SUMO2) -CHIPSET(0x964a, SUMO_964A, SUMO) -CHIPSET(0x964b, SUMO_964B, SUMO) -CHIPSET(0x964c, SUMO_964C, SUMO) -CHIPSET(0x964e, SUMO_964E, SUMO) -CHIPSET(0x964f, SUMO_964F, SUMO) - -CHIPSET(0x6700, CAYMAN_6700, CAYMAN) -CHIPSET(0x6701, CAYMAN_6701, CAYMAN) -CHIPSET(0x6702, CAYMAN_6702, CAYMAN) -CHIPSET(0x6703, CAYMAN_6703, CAYMAN) -CHIPSET(0x6704, CAYMAN_6704, CAYMAN) -CHIPSET(0x6705, CAYMAN_6705, CAYMAN) -CHIPSET(0x6706, CAYMAN_6706, CAYMAN) -CHIPSET(0x6707, CAYMAN_6707, CAYMAN) -CHIPSET(0x6708, CAYMAN_6708, CAYMAN) -CHIPSET(0x6709, CAYMAN_6709, CAYMAN) -CHIPSET(0x6718, CAYMAN_6718, CAYMAN) -CHIPSET(0x6719, CAYMAN_6719, CAYMAN) -CHIPSET(0x671C, CAYMAN_671C, CAYMAN) -CHIPSET(0x671D, CAYMAN_671D, CAYMAN) -CHIPSET(0x671F, CAYMAN_671F, CAYMAN) - -CHIPSET(0x6720, BARTS_6720, BARTS) -CHIPSET(0x6721, BARTS_6721, BARTS) -CHIPSET(0x6722, BARTS_6722, BARTS) -CHIPSET(0x6723, BARTS_6723, BARTS) -CHIPSET(0x6724, BARTS_6724, BARTS) -CHIPSET(0x6725, BARTS_6725, BARTS) -CHIPSET(0x6726, BARTS_6726, BARTS) -CHIPSET(0x6727, BARTS_6727, BARTS) -CHIPSET(0x6728, BARTS_6728, BARTS) -CHIPSET(0x6729, BARTS_6729, BARTS) -CHIPSET(0x6738, BARTS_6738, BARTS) -CHIPSET(0x6739, BARTS_6739, BARTS) -CHIPSET(0x673E, BARTS_673E, BARTS) - -CHIPSET(0x6740, TURKS_6740, TURKS) -CHIPSET(0x6741, TURKS_6741, TURKS) -CHIPSET(0x6742, TURKS_6742, TURKS) -CHIPSET(0x6743, TURKS_6743, TURKS) -CHIPSET(0x6744, TURKS_6744, TURKS) -CHIPSET(0x6745, TURKS_6745, TURKS) -CHIPSET(0x6746, TURKS_6746, TURKS) -CHIPSET(0x6747, TURKS_6747, TURKS) -CHIPSET(0x6748, TURKS_6748, TURKS) -CHIPSET(0x6749, TURKS_6749, TURKS) -CHIPSET(0x674A, TURKS_674A, TURKS) -CHIPSET(0x6750, TURKS_6750, TURKS) -CHIPSET(0x6751, TURKS_6751, TURKS) -CHIPSET(0x6758, TURKS_6758, TURKS) -CHIPSET(0x6759, TURKS_6759, TURKS) -CHIPSET(0x675B, TURKS_675B, TURKS) -CHIPSET(0x675D, TURKS_675D, TURKS) -CHIPSET(0x675F, TURKS_675F, TURKS) -CHIPSET(0x6840, TURKS_6840, TURKS) -CHIPSET(0x6841, TURKS_6841, TURKS) -CHIPSET(0x6842, TURKS_6842, TURKS) -CHIPSET(0x6843, TURKS_6843, TURKS) -CHIPSET(0x6849, TURKS_6849, TURKS) -CHIPSET(0x6850, TURKS_6850, TURKS) -CHIPSET(0x6858, TURKS_6858, TURKS) -CHIPSET(0x6859, TURKS_6859, TURKS) - -CHIPSET(0x6760, CAICOS_6760, CAICOS) -CHIPSET(0x6761, CAICOS_6761, CAICOS) -CHIPSET(0x6762, CAICOS_6762, CAICOS) -CHIPSET(0x6763, CAICOS_6763, CAICOS) -CHIPSET(0x6764, CAICOS_6764, CAICOS) -CHIPSET(0x6765, CAICOS_6765, CAICOS) -CHIPSET(0x6766, CAICOS_6766, CAICOS) -CHIPSET(0x6767, CAICOS_6767, CAICOS) -CHIPSET(0x6768, CAICOS_6768, CAICOS) -CHIPSET(0x6770, CAICOS_6770, CAICOS) -CHIPSET(0x6771, CAICOS_6771, CAICOS) -CHIPSET(0x6772, CAICOS_6772, CAICOS) -CHIPSET(0x6778, CAICOS_6778, CAICOS) -CHIPSET(0x6779, CAICOS_6779, CAICOS) -CHIPSET(0x677B, CAICOS_677B, CAICOS) - -CHIPSET(0x9900, ARUBA_9900, ARUBA) -CHIPSET(0x9901, ARUBA_9901, ARUBA) -CHIPSET(0x9903, ARUBA_9903, ARUBA) -CHIPSET(0x9904, ARUBA_9904, ARUBA) -CHIPSET(0x9905, ARUBA_9905, ARUBA) -CHIPSET(0x9906, ARUBA_9906, ARUBA) -CHIPSET(0x9907, ARUBA_9907, ARUBA) -CHIPSET(0x9908, ARUBA_9908, ARUBA) -CHIPSET(0x9909, ARUBA_9909, ARUBA) -CHIPSET(0x990A, ARUBA_990A, ARUBA) -CHIPSET(0x990B, ARUBA_990B, ARUBA) -CHIPSET(0x990C, ARUBA_990C, ARUBA) -CHIPSET(0x990D, ARUBA_990D, ARUBA) -CHIPSET(0x990E, ARUBA_990E, ARUBA) -CHIPSET(0x990F, ARUBA_990F, ARUBA) -CHIPSET(0x9910, ARUBA_9910, ARUBA) -CHIPSET(0x9913, ARUBA_9913, ARUBA) -CHIPSET(0x9917, ARUBA_9917, ARUBA) -CHIPSET(0x9918, ARUBA_9918, ARUBA) -CHIPSET(0x9919, ARUBA_9919, ARUBA) -CHIPSET(0x9990, ARUBA_9990, ARUBA) -CHIPSET(0x9991, ARUBA_9991, ARUBA) -CHIPSET(0x9992, ARUBA_9992, ARUBA) -CHIPSET(0x9993, ARUBA_9993, ARUBA) -CHIPSET(0x9994, ARUBA_9994, ARUBA) -CHIPSET(0x9995, ARUBA_9995, ARUBA) -CHIPSET(0x9996, ARUBA_9996, ARUBA) -CHIPSET(0x9997, ARUBA_9997, ARUBA) -CHIPSET(0x9998, ARUBA_9998, ARUBA) -CHIPSET(0x9999, ARUBA_9999, ARUBA) -CHIPSET(0x999A, ARUBA_999A, ARUBA) -CHIPSET(0x999B, ARUBA_999B, ARUBA) -CHIPSET(0x999C, ARUBA_999C, ARUBA) -CHIPSET(0x999D, ARUBA_999D, ARUBA) -CHIPSET(0x99A0, ARUBA_99A0, ARUBA) -CHIPSET(0x99A2, ARUBA_99A2, ARUBA) -CHIPSET(0x99A4, ARUBA_99A4, ARUBA) - -CHIPSET(0x6780, TAHITI_6780, TAHITI) -CHIPSET(0x6784, TAHITI_6784, TAHITI) -CHIPSET(0x6788, TAHITI_6788, TAHITI) -CHIPSET(0x678A, TAHITI_678A, TAHITI) -CHIPSET(0x6790, TAHITI_6790, TAHITI) -CHIPSET(0x6791, TAHITI_6791, TAHITI) -CHIPSET(0x6792, TAHITI_6792, TAHITI) -CHIPSET(0x6798, TAHITI_6798, TAHITI) -CHIPSET(0x6799, TAHITI_6799, TAHITI) -CHIPSET(0x679A, TAHITI_679A, TAHITI) -CHIPSET(0x679B, TAHITI_679B, TAHITI) -CHIPSET(0x679E, TAHITI_679E, TAHITI) -CHIPSET(0x679F, TAHITI_679F, TAHITI) - -CHIPSET(0x6800, PITCAIRN_6800, PITCAIRN) -CHIPSET(0x6801, PITCAIRN_6801, PITCAIRN) -CHIPSET(0x6802, PITCAIRN_6802, PITCAIRN) -CHIPSET(0x6806, PITCAIRN_6806, PITCAIRN) -CHIPSET(0x6808, PITCAIRN_6808, PITCAIRN) -CHIPSET(0x6809, PITCAIRN_6809, PITCAIRN) -CHIPSET(0x6810, PITCAIRN_6810, PITCAIRN) -CHIPSET(0x6811, PITCAIRN_6811, PITCAIRN) -CHIPSET(0x6816, PITCAIRN_6816, PITCAIRN) -CHIPSET(0x6817, PITCAIRN_6817, PITCAIRN) -CHIPSET(0x6818, PITCAIRN_6818, PITCAIRN) -CHIPSET(0x6819, PITCAIRN_6819, PITCAIRN) -CHIPSET(0x684C, PITCAIRN_684C, PITCAIRN) - -CHIPSET(0x6820, VERDE_6820, VERDE) -CHIPSET(0x6821, VERDE_6821, VERDE) -CHIPSET(0x6822, VERDE_6822, VERDE) -CHIPSET(0x6823, VERDE_6823, VERDE) -CHIPSET(0x6824, VERDE_6824, VERDE) -CHIPSET(0x6825, VERDE_6825, VERDE) -CHIPSET(0x6826, VERDE_6826, VERDE) -CHIPSET(0x6827, VERDE_6827, VERDE) -CHIPSET(0x6828, VERDE_6828, VERDE) -CHIPSET(0x6829, VERDE_6829, VERDE) -CHIPSET(0x682A, VERDE_682A, VERDE) -CHIPSET(0x682B, VERDE_682B, VERDE) -CHIPSET(0x682C, VERDE_682C, VERDE) -CHIPSET(0x682D, VERDE_682D, VERDE) -CHIPSET(0x682F, VERDE_682F, VERDE) -CHIPSET(0x6830, VERDE_6830, VERDE) -CHIPSET(0x6831, VERDE_6831, VERDE) -CHIPSET(0x6835, VERDE_6835, VERDE) -CHIPSET(0x6837, VERDE_6837, VERDE) -CHIPSET(0x6838, VERDE_6838, VERDE) -CHIPSET(0x6839, VERDE_6839, VERDE) -CHIPSET(0x683B, VERDE_683B, VERDE) -CHIPSET(0x683D, VERDE_683D, VERDE) -CHIPSET(0x683F, VERDE_683F, VERDE) - -CHIPSET(0x6600, OLAND_6600, OLAND) -CHIPSET(0x6601, OLAND_6601, OLAND) -CHIPSET(0x6602, OLAND_6602, OLAND) -CHIPSET(0x6603, OLAND_6603, OLAND) -CHIPSET(0x6604, OLAND_6604, OLAND) -CHIPSET(0x6605, OLAND_6605, OLAND) -CHIPSET(0x6606, OLAND_6606, OLAND) -CHIPSET(0x6607, OLAND_6607, OLAND) -CHIPSET(0x6608, OLAND_6608, OLAND) -CHIPSET(0x6610, OLAND_6610, OLAND) -CHIPSET(0x6611, OLAND_6611, OLAND) -CHIPSET(0x6613, OLAND_6613, OLAND) -CHIPSET(0x6617, OLAND_6617, OLAND) -CHIPSET(0x6620, OLAND_6620, OLAND) -CHIPSET(0x6621, OLAND_6621, OLAND) -CHIPSET(0x6623, OLAND_6623, OLAND) -CHIPSET(0x6631, OLAND_6631, OLAND) - -CHIPSET(0x6660, HAINAN_6660, HAINAN) -CHIPSET(0x6663, HAINAN_6663, HAINAN) -CHIPSET(0x6664, HAINAN_6664, HAINAN) -CHIPSET(0x6665, HAINAN_6665, HAINAN) -CHIPSET(0x6667, HAINAN_6667, HAINAN) -CHIPSET(0x666F, HAINAN_666F, HAINAN) - -CHIPSET(0x6640, BONAIRE_6640, BONAIRE) -CHIPSET(0x6641, BONAIRE_6641, BONAIRE) -CHIPSET(0x6646, BONAIRE_6646, BONAIRE) -CHIPSET(0x6647, BONAIRE_6647, BONAIRE) -CHIPSET(0x6649, BONAIRE_6649, BONAIRE) -CHIPSET(0x6650, BONAIRE_6650, BONAIRE) -CHIPSET(0x6651, BONAIRE_6651, BONAIRE) -CHIPSET(0x6658, BONAIRE_6658, BONAIRE) -CHIPSET(0x665C, BONAIRE_665C, BONAIRE) -CHIPSET(0x665D, BONAIRE_665D, BONAIRE) -CHIPSET(0x665F, BONAIRE_665F, BONAIRE) - -CHIPSET(0x9830, KABINI_9830, KABINI) -CHIPSET(0x9831, KABINI_9831, KABINI) -CHIPSET(0x9832, KABINI_9832, KABINI) -CHIPSET(0x9833, KABINI_9833, KABINI) -CHIPSET(0x9834, KABINI_9834, KABINI) -CHIPSET(0x9835, KABINI_9835, KABINI) -CHIPSET(0x9836, KABINI_9836, KABINI) -CHIPSET(0x9837, KABINI_9837, KABINI) -CHIPSET(0x9838, KABINI_9838, KABINI) -CHIPSET(0x9839, KABINI_9839, KABINI) -CHIPSET(0x983A, KABINI_983A, KABINI) -CHIPSET(0x983B, KABINI_983B, KABINI) -CHIPSET(0x983C, KABINI_983C, KABINI) -CHIPSET(0x983D, KABINI_983D, KABINI) -CHIPSET(0x983E, KABINI_983E, KABINI) -CHIPSET(0x983F, KABINI_983F, KABINI) - -CHIPSET(0x9850, MULLINS_9850, MULLINS) -CHIPSET(0x9851, MULLINS_9851, MULLINS) -CHIPSET(0x9852, MULLINS_9852, MULLINS) -CHIPSET(0x9853, MULLINS_9853, MULLINS) -CHIPSET(0x9854, MULLINS_9854, MULLINS) -CHIPSET(0x9855, MULLINS_9855, MULLINS) -CHIPSET(0x9856, MULLINS_9856, MULLINS) -CHIPSET(0x9857, MULLINS_9857, MULLINS) -CHIPSET(0x9858, MULLINS_9858, MULLINS) -CHIPSET(0x9859, MULLINS_9859, MULLINS) -CHIPSET(0x985A, MULLINS_985A, MULLINS) -CHIPSET(0x985B, MULLINS_985B, MULLINS) -CHIPSET(0x985C, MULLINS_985C, MULLINS) -CHIPSET(0x985D, MULLINS_985D, MULLINS) -CHIPSET(0x985E, MULLINS_985E, MULLINS) -CHIPSET(0x985F, MULLINS_985F, MULLINS) - -CHIPSET(0x1304, KAVERI_1304, KAVERI) -CHIPSET(0x1305, KAVERI_1305, KAVERI) -CHIPSET(0x1306, KAVERI_1306, KAVERI) -CHIPSET(0x1307, KAVERI_1307, KAVERI) -CHIPSET(0x1309, KAVERI_1309, KAVERI) -CHIPSET(0x130A, KAVERI_130A, KAVERI) -CHIPSET(0x130B, KAVERI_130B, KAVERI) -CHIPSET(0x130C, KAVERI_130C, KAVERI) -CHIPSET(0x130D, KAVERI_130D, KAVERI) -CHIPSET(0x130E, KAVERI_130E, KAVERI) -CHIPSET(0x130F, KAVERI_130F, KAVERI) -CHIPSET(0x1310, KAVERI_1310, KAVERI) -CHIPSET(0x1311, KAVERI_1311, KAVERI) -CHIPSET(0x1312, KAVERI_1312, KAVERI) -CHIPSET(0x1313, KAVERI_1313, KAVERI) -CHIPSET(0x1315, KAVERI_1315, KAVERI) -CHIPSET(0x1316, KAVERI_1316, KAVERI) -CHIPSET(0x1317, KAVERI_1317, KAVERI) -CHIPSET(0x1318, KAVERI_1318, KAVERI) -CHIPSET(0x131B, KAVERI_131B, KAVERI) -CHIPSET(0x131C, KAVERI_131C, KAVERI) -CHIPSET(0x131D, KAVERI_131D, KAVERI) - -CHIPSET(0x67A0, HAWAII_67A0, HAWAII) -CHIPSET(0x67A1, HAWAII_67A1, HAWAII) -CHIPSET(0x67A2, HAWAII_67A2, HAWAII) -CHIPSET(0x67A8, HAWAII_67A8, HAWAII) -CHIPSET(0x67A9, HAWAII_67A9, HAWAII) -CHIPSET(0x67AA, HAWAII_67AA, HAWAII) -CHIPSET(0x67B0, HAWAII_67B0, HAWAII) -CHIPSET(0x67B1, HAWAII_67B1, HAWAII) -CHIPSET(0x67B8, HAWAII_67B8, HAWAII) -CHIPSET(0x67B9, HAWAII_67B9, HAWAII) -CHIPSET(0x67BA, HAWAII_67BA, HAWAII) -CHIPSET(0x67BE, HAWAII_67BE, HAWAII) diff --git a/prebuilts/arm/include/libdrm/radeon_bo.h b/prebuilts/arm/include/libdrm/radeon_bo.h deleted file mode 100644 index 6e20c6c..0000000 --- a/prebuilts/arm/include/libdrm/radeon_bo.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Jérôme Glisse - */ -#ifndef RADEON_BO_H -#define RADEON_BO_H - -#include -#include - -/* bo object */ -#define RADEON_BO_FLAGS_MACRO_TILE 1 -#define RADEON_BO_FLAGS_MICRO_TILE 2 -#define RADEON_BO_FLAGS_MICRO_TILE_SQUARE 0x20 - -struct radeon_bo_manager; -struct radeon_cs; - -struct radeon_bo { - void *ptr; - uint32_t flags; - uint32_t handle; - uint32_t size; -}; - - -void radeon_bo_debug(struct radeon_bo *bo, const char *op); - -struct radeon_bo *radeon_bo_open(struct radeon_bo_manager *bom, - uint32_t handle, - uint32_t size, - uint32_t alignment, - uint32_t domains, - uint32_t flags); - -void radeon_bo_ref(struct radeon_bo *bo); -struct radeon_bo *radeon_bo_unref(struct radeon_bo *bo); -int radeon_bo_map(struct radeon_bo *bo, int write); -int radeon_bo_unmap(struct radeon_bo *bo); -int radeon_bo_wait(struct radeon_bo *bo); -int radeon_bo_is_busy(struct radeon_bo *bo, uint32_t *domain); -int radeon_bo_set_tiling(struct radeon_bo *bo, uint32_t tiling_flags, uint32_t pitch); -int radeon_bo_get_tiling(struct radeon_bo *bo, uint32_t *tiling_flags, uint32_t *pitch); -int radeon_bo_is_static(struct radeon_bo *bo); -int radeon_bo_is_referenced_by_cs(struct radeon_bo *bo, struct radeon_cs *cs); -uint32_t radeon_bo_get_handle(struct radeon_bo *bo); -uint32_t radeon_bo_get_src_domain(struct radeon_bo *bo); -#endif diff --git a/prebuilts/arm/include/libdrm/radeon_bo_gem.h b/prebuilts/arm/include/libdrm/radeon_bo_gem.h deleted file mode 100644 index 08965f3..0000000 --- a/prebuilts/arm/include/libdrm/radeon_bo_gem.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2008 Dave Airlie - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Dave Airlie - * Jérôme Glisse - */ -#ifndef RADEON_BO_GEM_H -#define RADEON_BO_GEM_H - -#include "radeon_bo.h" - -struct radeon_bo_manager *radeon_bo_manager_gem_ctor(int fd); -void radeon_bo_manager_gem_dtor(struct radeon_bo_manager *bom); - -uint32_t radeon_gem_name_bo(struct radeon_bo *bo); -void *radeon_gem_get_reloc_in_cs(struct radeon_bo *bo); -int radeon_gem_set_domain(struct radeon_bo *bo, uint32_t read_domains, uint32_t write_domain); -int radeon_gem_get_kernel_name(struct radeon_bo *bo, uint32_t *name); -int radeon_gem_prime_share_bo(struct radeon_bo *bo, int *handle); -struct radeon_bo *radeon_gem_bo_open_prime(struct radeon_bo_manager *bom, - int fd_handle, - uint32_t size); -#endif diff --git a/prebuilts/arm/include/libdrm/radeon_bo_int.h b/prebuilts/arm/include/libdrm/radeon_bo_int.h deleted file mode 100644 index de981b0..0000000 --- a/prebuilts/arm/include/libdrm/radeon_bo_int.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef RADEON_BO_INT -#define RADEON_BO_INT - -struct radeon_bo_manager { - const struct radeon_bo_funcs *funcs; - int fd; -}; - -struct radeon_bo_int { - void *ptr; - uint32_t flags; - uint32_t handle; - uint32_t size; - /* private members */ - uint32_t alignment; - uint32_t domains; - unsigned cref; - struct radeon_bo_manager *bom; - uint32_t space_accounted; - uint32_t referenced_in_cs; -}; - -/* bo functions */ -struct radeon_bo_funcs { - struct radeon_bo *(*bo_open)(struct radeon_bo_manager *bom, - uint32_t handle, - uint32_t size, - uint32_t alignment, - uint32_t domains, - uint32_t flags); - void (*bo_ref)(struct radeon_bo_int *bo); - struct radeon_bo *(*bo_unref)(struct radeon_bo_int *bo); - int (*bo_map)(struct radeon_bo_int *bo, int write); - int (*bo_unmap)(struct radeon_bo_int *bo); - int (*bo_wait)(struct radeon_bo_int *bo); - int (*bo_is_static)(struct radeon_bo_int *bo); - int (*bo_set_tiling)(struct radeon_bo_int *bo, uint32_t tiling_flags, - uint32_t pitch); - int (*bo_get_tiling)(struct radeon_bo_int *bo, uint32_t *tiling_flags, - uint32_t *pitch); - int (*bo_is_busy)(struct radeon_bo_int *bo, uint32_t *domain); - int (*bo_is_referenced_by_cs)(struct radeon_bo_int *bo, struct radeon_cs *cs); -}; - -#endif diff --git a/prebuilts/arm/include/libdrm/radeon_cs.h b/prebuilts/arm/include/libdrm/radeon_cs.h deleted file mode 100644 index f68a624..0000000 --- a/prebuilts/arm/include/libdrm/radeon_cs.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright © 2008 Nicolai Haehnle - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Aapo Tahkola - * Nicolai Haehnle - * Jérôme Glisse - */ -#ifndef RADEON_CS_H -#define RADEON_CS_H - -#include -#include -#include "drm.h" -#include "radeon_drm.h" -#include "radeon_bo.h" - -struct radeon_cs_reloc { - struct radeon_bo *bo; - uint32_t read_domain; - uint32_t write_domain; - uint32_t flags; -}; - - -#define RADEON_CS_SPACE_OK 0 -#define RADEON_CS_SPACE_OP_TO_BIG 1 -#define RADEON_CS_SPACE_FLUSH 2 - -struct radeon_cs { - uint32_t *packets; - unsigned cdw; - unsigned ndw; - unsigned section_ndw; - unsigned section_cdw; -}; - -#define MAX_SPACE_BOS (32) - -struct radeon_cs_manager; - -extern struct radeon_cs *radeon_cs_create(struct radeon_cs_manager *csm, - uint32_t ndw); - -extern int radeon_cs_begin(struct radeon_cs *cs, - uint32_t ndw, - const char *file, - const char *func, int line); -extern int radeon_cs_end(struct radeon_cs *cs, - const char *file, - const char *func, - int line); -extern int radeon_cs_emit(struct radeon_cs *cs); -extern int radeon_cs_destroy(struct radeon_cs *cs); -extern int radeon_cs_erase(struct radeon_cs *cs); -extern int radeon_cs_need_flush(struct radeon_cs *cs); -extern void radeon_cs_print(struct radeon_cs *cs, FILE *file); -extern void radeon_cs_set_limit(struct radeon_cs *cs, uint32_t domain, uint32_t limit); -extern void radeon_cs_space_set_flush(struct radeon_cs *cs, void (*fn)(void *), void *data); -extern int radeon_cs_write_reloc(struct radeon_cs *cs, - struct radeon_bo *bo, - uint32_t read_domain, - uint32_t write_domain, - uint32_t flags); -extern uint32_t radeon_cs_get_id(struct radeon_cs *cs); -/* - * add a persistent BO to the list - * a persistent BO is one that will be referenced across flushes, - * i.e. colorbuffer, textures etc. - * They get reset when a new "operation" happens, where an operation - * is a state emission with a color/textures etc followed by a bunch of vertices. - */ -void radeon_cs_space_add_persistent_bo(struct radeon_cs *cs, - struct radeon_bo *bo, - uint32_t read_domains, - uint32_t write_domain); - -/* reset the persistent BO list */ -void radeon_cs_space_reset_bos(struct radeon_cs *cs); - -/* do a space check with the current persistent BO list */ -int radeon_cs_space_check(struct radeon_cs *cs); - -/* do a space check with the current persistent BO list and a temporary BO - * a temporary BO is like a DMA buffer, which gets flushed with the - * command buffer */ -int radeon_cs_space_check_with_bo(struct radeon_cs *cs, - struct radeon_bo *bo, - uint32_t read_domains, - uint32_t write_domain); - -static inline void radeon_cs_write_dword(struct radeon_cs *cs, uint32_t dword) -{ - cs->packets[cs->cdw++] = dword; - if (cs->section_ndw) { - cs->section_cdw++; - } -} - -static inline void radeon_cs_write_qword(struct radeon_cs *cs, uint64_t qword) -{ - memcpy(cs->packets + cs->cdw, &qword, sizeof(uint64_t)); - cs->cdw += 2; - if (cs->section_ndw) { - cs->section_cdw += 2; - } -} - -static inline void radeon_cs_write_table(struct radeon_cs *cs, - const void *data, uint32_t size) -{ - memcpy(cs->packets + cs->cdw, data, size * 4); - cs->cdw += size; - if (cs->section_ndw) { - cs->section_cdw += size; - } -} -#endif diff --git a/prebuilts/arm/include/libdrm/radeon_cs_gem.h b/prebuilts/arm/include/libdrm/radeon_cs_gem.h deleted file mode 100644 index 5dea38a..0000000 --- a/prebuilts/arm/include/libdrm/radeon_cs_gem.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright © 2008 Nicolai Haehnle - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Aapo Tahkola - * Nicolai Haehnle - * Jérôme Glisse - */ -#ifndef RADEON_CS_GEM_H -#define RADEON_CS_GEM_H - -#include "radeon_cs.h" - -struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd); -void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm); - -#endif diff --git a/prebuilts/arm/include/libdrm/radeon_cs_int.h b/prebuilts/arm/include/libdrm/radeon_cs_int.h deleted file mode 100644 index d906ad4..0000000 --- a/prebuilts/arm/include/libdrm/radeon_cs_int.h +++ /dev/null @@ -1,67 +0,0 @@ - -#ifndef _RADEON_CS_INT_H_ -#define _RADEON_CS_INT_H_ - -struct radeon_cs_space_check { - struct radeon_bo_int *bo; - uint32_t read_domains; - uint32_t write_domain; - uint32_t new_accounted; -}; - -struct radeon_cs_int { - /* keep first two in same place */ - uint32_t *packets; - unsigned cdw; - unsigned ndw; - unsigned section_ndw; - unsigned section_cdw; - /* private members */ - struct radeon_cs_manager *csm; - void *relocs; - unsigned crelocs; - unsigned relocs_total_size; - const char *section_file; - const char *section_func; - int section_line; - struct radeon_cs_space_check bos[MAX_SPACE_BOS]; - int bo_count; - void (*space_flush_fn)(void *); - void *space_flush_data; - uint32_t id; -}; - -/* cs functions */ -struct radeon_cs_funcs { - struct radeon_cs_int *(*cs_create)(struct radeon_cs_manager *csm, - uint32_t ndw); - int (*cs_write_reloc)(struct radeon_cs_int *cs, - struct radeon_bo *bo, - uint32_t read_domain, - uint32_t write_domain, - uint32_t flags); - int (*cs_begin)(struct radeon_cs_int *cs, - uint32_t ndw, - const char *file, - const char *func, - int line); - int (*cs_end)(struct radeon_cs_int *cs, - const char *file, const char *func, - int line); - - - int (*cs_emit)(struct radeon_cs_int *cs); - int (*cs_destroy)(struct radeon_cs_int *cs); - int (*cs_erase)(struct radeon_cs_int *cs); - int (*cs_need_flush)(struct radeon_cs_int *cs); - void (*cs_print)(struct radeon_cs_int *cs, FILE *file); -}; - -struct radeon_cs_manager { - const struct radeon_cs_funcs *funcs; - int fd; - int32_t vram_limit, gart_limit; - int32_t vram_write_used, gart_write_used; - int32_t read_used; -}; -#endif diff --git a/prebuilts/arm/include/libdrm/radeon_drm.h b/prebuilts/arm/include/libdrm/radeon_drm.h deleted file mode 100644 index a1e385d..0000000 --- a/prebuilts/arm/include/libdrm/radeon_drm.h +++ /dev/null @@ -1,1079 +0,0 @@ -/* radeon_drm.h -- Public header for the radeon driver -*- linux-c -*- - * - * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Fremont, California. - * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Kevin E. Martin - * Gareth Hughes - * Keith Whitwell - */ - -#ifndef __RADEON_DRM_H__ -#define __RADEON_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the X server file (radeon_sarea.h) - */ -#ifndef __RADEON_SAREA_DEFINES__ -#define __RADEON_SAREA_DEFINES__ - -/* Old style state flags, required for sarea interface (1.1 and 1.2 - * clears) and 1.2 drm_vertex2 ioctl. - */ -#define RADEON_UPLOAD_CONTEXT 0x00000001 -#define RADEON_UPLOAD_VERTFMT 0x00000002 -#define RADEON_UPLOAD_LINE 0x00000004 -#define RADEON_UPLOAD_BUMPMAP 0x00000008 -#define RADEON_UPLOAD_MASKS 0x00000010 -#define RADEON_UPLOAD_VIEWPORT 0x00000020 -#define RADEON_UPLOAD_SETUP 0x00000040 -#define RADEON_UPLOAD_TCL 0x00000080 -#define RADEON_UPLOAD_MISC 0x00000100 -#define RADEON_UPLOAD_TEX0 0x00000200 -#define RADEON_UPLOAD_TEX1 0x00000400 -#define RADEON_UPLOAD_TEX2 0x00000800 -#define RADEON_UPLOAD_TEX0IMAGES 0x00001000 -#define RADEON_UPLOAD_TEX1IMAGES 0x00002000 -#define RADEON_UPLOAD_TEX2IMAGES 0x00004000 -#define RADEON_UPLOAD_CLIPRECTS 0x00008000 /* handled client-side */ -#define RADEON_REQUIRE_QUIESCENCE 0x00010000 -#define RADEON_UPLOAD_ZBIAS 0x00020000 /* version 1.2 and newer */ -#define RADEON_UPLOAD_ALL 0x003effff -#define RADEON_UPLOAD_CONTEXT_ALL 0x003e01ff - -/* New style per-packet identifiers for use in cmd_buffer ioctl with - * the RADEON_EMIT_PACKET command. Comments relate new packets to old - * state bits and the packet size: - */ -#define RADEON_EMIT_PP_MISC 0 /* context/7 */ -#define RADEON_EMIT_PP_CNTL 1 /* context/3 */ -#define RADEON_EMIT_RB3D_COLORPITCH 2 /* context/1 */ -#define RADEON_EMIT_RE_LINE_PATTERN 3 /* line/2 */ -#define RADEON_EMIT_SE_LINE_WIDTH 4 /* line/1 */ -#define RADEON_EMIT_PP_LUM_MATRIX 5 /* bumpmap/1 */ -#define RADEON_EMIT_PP_ROT_MATRIX_0 6 /* bumpmap/2 */ -#define RADEON_EMIT_RB3D_STENCILREFMASK 7 /* masks/3 */ -#define RADEON_EMIT_SE_VPORT_XSCALE 8 /* viewport/6 */ -#define RADEON_EMIT_SE_CNTL 9 /* setup/2 */ -#define RADEON_EMIT_SE_CNTL_STATUS 10 /* setup/1 */ -#define RADEON_EMIT_RE_MISC 11 /* misc/1 */ -#define RADEON_EMIT_PP_TXFILTER_0 12 /* tex0/6 */ -#define RADEON_EMIT_PP_BORDER_COLOR_0 13 /* tex0/1 */ -#define RADEON_EMIT_PP_TXFILTER_1 14 /* tex1/6 */ -#define RADEON_EMIT_PP_BORDER_COLOR_1 15 /* tex1/1 */ -#define RADEON_EMIT_PP_TXFILTER_2 16 /* tex2/6 */ -#define RADEON_EMIT_PP_BORDER_COLOR_2 17 /* tex2/1 */ -#define RADEON_EMIT_SE_ZBIAS_FACTOR 18 /* zbias/2 */ -#define RADEON_EMIT_SE_TCL_OUTPUT_VTX_FMT 19 /* tcl/11 */ -#define RADEON_EMIT_SE_TCL_MATERIAL_EMMISSIVE_RED 20 /* material/17 */ -#define R200_EMIT_PP_TXCBLEND_0 21 /* tex0/4 */ -#define R200_EMIT_PP_TXCBLEND_1 22 /* tex1/4 */ -#define R200_EMIT_PP_TXCBLEND_2 23 /* tex2/4 */ -#define R200_EMIT_PP_TXCBLEND_3 24 /* tex3/4 */ -#define R200_EMIT_PP_TXCBLEND_4 25 /* tex4/4 */ -#define R200_EMIT_PP_TXCBLEND_5 26 /* tex5/4 */ -#define R200_EMIT_PP_TXCBLEND_6 27 /* /4 */ -#define R200_EMIT_PP_TXCBLEND_7 28 /* /4 */ -#define R200_EMIT_TCL_LIGHT_MODEL_CTL_0 29 /* tcl/7 */ -#define R200_EMIT_TFACTOR_0 30 /* tf/7 */ -#define R200_EMIT_VTX_FMT_0 31 /* vtx/5 */ -#define R200_EMIT_VAP_CTL 32 /* vap/1 */ -#define R200_EMIT_MATRIX_SELECT_0 33 /* msl/5 */ -#define R200_EMIT_TEX_PROC_CTL_2 34 /* tcg/5 */ -#define R200_EMIT_TCL_UCP_VERT_BLEND_CTL 35 /* tcl/1 */ -#define R200_EMIT_PP_TXFILTER_0 36 /* tex0/6 */ -#define R200_EMIT_PP_TXFILTER_1 37 /* tex1/6 */ -#define R200_EMIT_PP_TXFILTER_2 38 /* tex2/6 */ -#define R200_EMIT_PP_TXFILTER_3 39 /* tex3/6 */ -#define R200_EMIT_PP_TXFILTER_4 40 /* tex4/6 */ -#define R200_EMIT_PP_TXFILTER_5 41 /* tex5/6 */ -#define R200_EMIT_PP_TXOFFSET_0 42 /* tex0/1 */ -#define R200_EMIT_PP_TXOFFSET_1 43 /* tex1/1 */ -#define R200_EMIT_PP_TXOFFSET_2 44 /* tex2/1 */ -#define R200_EMIT_PP_TXOFFSET_3 45 /* tex3/1 */ -#define R200_EMIT_PP_TXOFFSET_4 46 /* tex4/1 */ -#define R200_EMIT_PP_TXOFFSET_5 47 /* tex5/1 */ -#define R200_EMIT_VTE_CNTL 48 /* vte/1 */ -#define R200_EMIT_OUTPUT_VTX_COMP_SEL 49 /* vtx/1 */ -#define R200_EMIT_PP_TAM_DEBUG3 50 /* tam/1 */ -#define R200_EMIT_PP_CNTL_X 51 /* cst/1 */ -#define R200_EMIT_RB3D_DEPTHXY_OFFSET 52 /* cst/1 */ -#define R200_EMIT_RE_AUX_SCISSOR_CNTL 53 /* cst/1 */ -#define R200_EMIT_RE_SCISSOR_TL_0 54 /* cst/2 */ -#define R200_EMIT_RE_SCISSOR_TL_1 55 /* cst/2 */ -#define R200_EMIT_RE_SCISSOR_TL_2 56 /* cst/2 */ -#define R200_EMIT_SE_VAP_CNTL_STATUS 57 /* cst/1 */ -#define R200_EMIT_SE_VTX_STATE_CNTL 58 /* cst/1 */ -#define R200_EMIT_RE_POINTSIZE 59 /* cst/1 */ -#define R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0 60 /* cst/4 */ -#define R200_EMIT_PP_CUBIC_FACES_0 61 -#define R200_EMIT_PP_CUBIC_OFFSETS_0 62 -#define R200_EMIT_PP_CUBIC_FACES_1 63 -#define R200_EMIT_PP_CUBIC_OFFSETS_1 64 -#define R200_EMIT_PP_CUBIC_FACES_2 65 -#define R200_EMIT_PP_CUBIC_OFFSETS_2 66 -#define R200_EMIT_PP_CUBIC_FACES_3 67 -#define R200_EMIT_PP_CUBIC_OFFSETS_3 68 -#define R200_EMIT_PP_CUBIC_FACES_4 69 -#define R200_EMIT_PP_CUBIC_OFFSETS_4 70 -#define R200_EMIT_PP_CUBIC_FACES_5 71 -#define R200_EMIT_PP_CUBIC_OFFSETS_5 72 -#define RADEON_EMIT_PP_TEX_SIZE_0 73 -#define RADEON_EMIT_PP_TEX_SIZE_1 74 -#define RADEON_EMIT_PP_TEX_SIZE_2 75 -#define R200_EMIT_RB3D_BLENDCOLOR 76 -#define R200_EMIT_TCL_POINT_SPRITE_CNTL 77 -#define RADEON_EMIT_PP_CUBIC_FACES_0 78 -#define RADEON_EMIT_PP_CUBIC_OFFSETS_T0 79 -#define RADEON_EMIT_PP_CUBIC_FACES_1 80 -#define RADEON_EMIT_PP_CUBIC_OFFSETS_T1 81 -#define RADEON_EMIT_PP_CUBIC_FACES_2 82 -#define RADEON_EMIT_PP_CUBIC_OFFSETS_T2 83 -#define R200_EMIT_PP_TRI_PERF_CNTL 84 -#define R200_EMIT_PP_AFS_0 85 -#define R200_EMIT_PP_AFS_1 86 -#define R200_EMIT_ATF_TFACTOR 87 -#define R200_EMIT_PP_TXCTLALL_0 88 -#define R200_EMIT_PP_TXCTLALL_1 89 -#define R200_EMIT_PP_TXCTLALL_2 90 -#define R200_EMIT_PP_TXCTLALL_3 91 -#define R200_EMIT_PP_TXCTLALL_4 92 -#define R200_EMIT_PP_TXCTLALL_5 93 -#define R200_EMIT_VAP_PVS_CNTL 94 -#define RADEON_MAX_STATE_PACKETS 95 - -/* Commands understood by cmd_buffer ioctl. More can be added but - * obviously these can't be removed or changed: - */ -#define RADEON_CMD_PACKET 1 /* emit one of the register packets above */ -#define RADEON_CMD_SCALARS 2 /* emit scalar data */ -#define RADEON_CMD_VECTORS 3 /* emit vector data */ -#define RADEON_CMD_DMA_DISCARD 4 /* discard current dma buf */ -#define RADEON_CMD_PACKET3 5 /* emit hw packet */ -#define RADEON_CMD_PACKET3_CLIP 6 /* emit hw packet wrapped in cliprects */ -#define RADEON_CMD_SCALARS2 7 /* r200 stopgap */ -#define RADEON_CMD_WAIT 8 /* emit hw wait commands -- note: - * doesn't make the cpu wait, just - * the graphics hardware */ -#define RADEON_CMD_VECLINEAR 9 /* another r200 stopgap */ - -typedef union { - int i; - struct { - unsigned char cmd_type, pad0, pad1, pad2; - } header; - struct { - unsigned char cmd_type, packet_id, pad0, pad1; - } packet; - struct { - unsigned char cmd_type, offset, stride, count; - } scalars; - struct { - unsigned char cmd_type, offset, stride, count; - } vectors; - struct { - unsigned char cmd_type, addr_lo, addr_hi, count; - } veclinear; - struct { - unsigned char cmd_type, buf_idx, pad0, pad1; - } dma; - struct { - unsigned char cmd_type, flags, pad0, pad1; - } wait; -} drm_radeon_cmd_header_t; - -#define RADEON_WAIT_2D 0x1 -#define RADEON_WAIT_3D 0x2 - -/* Allowed parameters for R300_CMD_PACKET3 - */ -#define R300_CMD_PACKET3_CLEAR 0 -#define R300_CMD_PACKET3_RAW 1 - -/* Commands understood by cmd_buffer ioctl for R300. - * The interface has not been stabilized, so some of these may be removed - * and eventually reordered before stabilization. - */ -#define R300_CMD_PACKET0 1 -#define R300_CMD_VPU 2 /* emit vertex program upload */ -#define R300_CMD_PACKET3 3 /* emit a packet3 */ -#define R300_CMD_END3D 4 /* emit sequence ending 3d rendering */ -#define R300_CMD_CP_DELAY 5 -#define R300_CMD_DMA_DISCARD 6 -#define R300_CMD_WAIT 7 -# define R300_WAIT_2D 0x1 -# define R300_WAIT_3D 0x2 -/* these two defines are DOING IT WRONG - however - * we have userspace which relies on using these. - * The wait interface is backwards compat new - * code should use the NEW_WAIT defines below - * THESE ARE NOT BIT FIELDS - */ -# define R300_WAIT_2D_CLEAN 0x3 -# define R300_WAIT_3D_CLEAN 0x4 - -# define R300_NEW_WAIT_2D_3D 0x3 -# define R300_NEW_WAIT_2D_2D_CLEAN 0x4 -# define R300_NEW_WAIT_3D_3D_CLEAN 0x6 -# define R300_NEW_WAIT_2D_2D_CLEAN_3D_3D_CLEAN 0x8 - -#define R300_CMD_SCRATCH 8 -#define R300_CMD_R500FP 9 - -typedef union { - unsigned int u; - struct { - unsigned char cmd_type, pad0, pad1, pad2; - } header; - struct { - unsigned char cmd_type, count, reglo, reghi; - } packet0; - struct { - unsigned char cmd_type, count, adrlo, adrhi; - } vpu; - struct { - unsigned char cmd_type, packet, pad0, pad1; - } packet3; - struct { - unsigned char cmd_type, packet; - unsigned short count; /* amount of packet2 to emit */ - } delay; - struct { - unsigned char cmd_type, buf_idx, pad0, pad1; - } dma; - struct { - unsigned char cmd_type, flags, pad0, pad1; - } wait; - struct { - unsigned char cmd_type, reg, n_bufs, flags; - } scratch; - struct { - unsigned char cmd_type, count, adrlo, adrhi_flags; - } r500fp; -} drm_r300_cmd_header_t; - -#define RADEON_FRONT 0x1 -#define RADEON_BACK 0x2 -#define RADEON_DEPTH 0x4 -#define RADEON_STENCIL 0x8 -#define RADEON_CLEAR_FASTZ 0x80000000 -#define RADEON_USE_HIERZ 0x40000000 -#define RADEON_USE_COMP_ZBUF 0x20000000 - -#define R500FP_CONSTANT_TYPE (1 << 1) -#define R500FP_CONSTANT_CLAMP (1 << 2) - -/* Primitive types - */ -#define RADEON_POINTS 0x1 -#define RADEON_LINES 0x2 -#define RADEON_LINE_STRIP 0x3 -#define RADEON_TRIANGLES 0x4 -#define RADEON_TRIANGLE_FAN 0x5 -#define RADEON_TRIANGLE_STRIP 0x6 - -/* Vertex/indirect buffer size - */ -#define RADEON_BUFFER_SIZE 65536 - -/* Byte offsets for indirect buffer data - */ -#define RADEON_INDEX_PRIM_OFFSET 20 - -#define RADEON_SCRATCH_REG_OFFSET 32 - -#define R600_SCRATCH_REG_OFFSET 256 - -#define RADEON_NR_SAREA_CLIPRECTS 12 - -/* There are 2 heaps (local/GART). Each region within a heap is a - * minimum of 64k, and there are at most 64 of them per heap. - */ -#define RADEON_LOCAL_TEX_HEAP 0 -#define RADEON_GART_TEX_HEAP 1 -#define RADEON_NR_TEX_HEAPS 2 -#define RADEON_NR_TEX_REGIONS 64 -#define RADEON_LOG_TEX_GRANULARITY 16 - -#define RADEON_MAX_TEXTURE_LEVELS 12 -#define RADEON_MAX_TEXTURE_UNITS 3 - -#define RADEON_MAX_SURFACES 8 - -/* Blits have strict offset rules. All blit offset must be aligned on - * a 1K-byte boundary. - */ -#define RADEON_OFFSET_SHIFT 10 -#define RADEON_OFFSET_ALIGN (1 << RADEON_OFFSET_SHIFT) -#define RADEON_OFFSET_MASK (RADEON_OFFSET_ALIGN - 1) - -#endif /* __RADEON_SAREA_DEFINES__ */ - -typedef struct { - unsigned int red; - unsigned int green; - unsigned int blue; - unsigned int alpha; -} radeon_color_regs_t; - -typedef struct { - /* Context state */ - unsigned int pp_misc; /* 0x1c14 */ - unsigned int pp_fog_color; - unsigned int re_solid_color; - unsigned int rb3d_blendcntl; - unsigned int rb3d_depthoffset; - unsigned int rb3d_depthpitch; - unsigned int rb3d_zstencilcntl; - - unsigned int pp_cntl; /* 0x1c38 */ - unsigned int rb3d_cntl; - unsigned int rb3d_coloroffset; - unsigned int re_width_height; - unsigned int rb3d_colorpitch; - unsigned int se_cntl; - - /* Vertex format state */ - unsigned int se_coord_fmt; /* 0x1c50 */ - - /* Line state */ - unsigned int re_line_pattern; /* 0x1cd0 */ - unsigned int re_line_state; - - unsigned int se_line_width; /* 0x1db8 */ - - /* Bumpmap state */ - unsigned int pp_lum_matrix; /* 0x1d00 */ - - unsigned int pp_rot_matrix_0; /* 0x1d58 */ - unsigned int pp_rot_matrix_1; - - /* Mask state */ - unsigned int rb3d_stencilrefmask; /* 0x1d7c */ - unsigned int rb3d_ropcntl; - unsigned int rb3d_planemask; - - /* Viewport state */ - unsigned int se_vport_xscale; /* 0x1d98 */ - unsigned int se_vport_xoffset; - unsigned int se_vport_yscale; - unsigned int se_vport_yoffset; - unsigned int se_vport_zscale; - unsigned int se_vport_zoffset; - - /* Setup state */ - unsigned int se_cntl_status; /* 0x2140 */ - - /* Misc state */ - unsigned int re_top_left; /* 0x26c0 */ - unsigned int re_misc; -} drm_radeon_context_regs_t; - -typedef struct { - /* Zbias state */ - unsigned int se_zbias_factor; /* 0x1dac */ - unsigned int se_zbias_constant; -} drm_radeon_context2_regs_t; - -/* Setup registers for each texture unit - */ -typedef struct { - unsigned int pp_txfilter; - unsigned int pp_txformat; - unsigned int pp_txoffset; - unsigned int pp_txcblend; - unsigned int pp_txablend; - unsigned int pp_tfactor; - unsigned int pp_border_color; -} drm_radeon_texture_regs_t; - -typedef struct { - unsigned int start; - unsigned int finish; - unsigned int prim:8; - unsigned int stateidx:8; - unsigned int numverts:16; /* overloaded as offset/64 for elt prims */ - unsigned int vc_format; /* vertex format */ -} drm_radeon_prim_t; - -typedef struct { - drm_radeon_context_regs_t context; - drm_radeon_texture_regs_t tex[RADEON_MAX_TEXTURE_UNITS]; - drm_radeon_context2_regs_t context2; - unsigned int dirty; -} drm_radeon_state_t; - -typedef struct { - /* The channel for communication of state information to the - * kernel on firing a vertex buffer with either of the - * obsoleted vertex/index ioctls. - */ - drm_radeon_context_regs_t context_state; - drm_radeon_texture_regs_t tex_state[RADEON_MAX_TEXTURE_UNITS]; - unsigned int dirty; - unsigned int vertsize; - unsigned int vc_format; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[RADEON_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Counters for client-side throttling of rendering clients. - */ - unsigned int last_frame; - unsigned int last_dispatch; - unsigned int last_clear; - - struct drm_tex_region tex_list[RADEON_NR_TEX_HEAPS][RADEON_NR_TEX_REGIONS + - 1]; - unsigned int tex_age[RADEON_NR_TEX_HEAPS]; - int ctx_owner; - int pfState; /* number of 3d windows (0,1,2ormore) */ - int pfCurrentPage; /* which buffer is being displayed? */ - int crtc2_base; /* CRTC2 frame offset */ - int tiling_enabled; /* set by drm, read by 2d + 3d clients */ -} drm_radeon_sarea_t; - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (xf86drmRadeon.h) - * - * KW: actually it's illegal to change any of this (backwards compatibility). - */ - -/* Radeon specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ -#define DRM_RADEON_CP_INIT 0x00 -#define DRM_RADEON_CP_START 0x01 -#define DRM_RADEON_CP_STOP 0x02 -#define DRM_RADEON_CP_RESET 0x03 -#define DRM_RADEON_CP_IDLE 0x04 -#define DRM_RADEON_RESET 0x05 -#define DRM_RADEON_FULLSCREEN 0x06 -#define DRM_RADEON_SWAP 0x07 -#define DRM_RADEON_CLEAR 0x08 -#define DRM_RADEON_VERTEX 0x09 -#define DRM_RADEON_INDICES 0x0A -#define DRM_RADEON_NOT_USED -#define DRM_RADEON_STIPPLE 0x0C -#define DRM_RADEON_INDIRECT 0x0D -#define DRM_RADEON_TEXTURE 0x0E -#define DRM_RADEON_VERTEX2 0x0F -#define DRM_RADEON_CMDBUF 0x10 -#define DRM_RADEON_GETPARAM 0x11 -#define DRM_RADEON_FLIP 0x12 -#define DRM_RADEON_ALLOC 0x13 -#define DRM_RADEON_FREE 0x14 -#define DRM_RADEON_INIT_HEAP 0x15 -#define DRM_RADEON_IRQ_EMIT 0x16 -#define DRM_RADEON_IRQ_WAIT 0x17 -#define DRM_RADEON_CP_RESUME 0x18 -#define DRM_RADEON_SETPARAM 0x19 -#define DRM_RADEON_SURF_ALLOC 0x1a -#define DRM_RADEON_SURF_FREE 0x1b -/* KMS ioctl */ -#define DRM_RADEON_GEM_INFO 0x1c -#define DRM_RADEON_GEM_CREATE 0x1d -#define DRM_RADEON_GEM_MMAP 0x1e -#define DRM_RADEON_GEM_PREAD 0x21 -#define DRM_RADEON_GEM_PWRITE 0x22 -#define DRM_RADEON_GEM_SET_DOMAIN 0x23 -#define DRM_RADEON_GEM_WAIT_IDLE 0x24 -#define DRM_RADEON_CS 0x26 -#define DRM_RADEON_INFO 0x27 -#define DRM_RADEON_GEM_SET_TILING 0x28 -#define DRM_RADEON_GEM_GET_TILING 0x29 -#define DRM_RADEON_GEM_BUSY 0x2a -#define DRM_RADEON_GEM_VA 0x2b -#define DRM_RADEON_GEM_OP 0x2c -#define DRM_RADEON_GEM_USERPTR 0x2d - -#define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t) -#define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START) -#define DRM_IOCTL_RADEON_CP_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_STOP, drm_radeon_cp_stop_t) -#define DRM_IOCTL_RADEON_CP_RESET DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_RESET) -#define DRM_IOCTL_RADEON_CP_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_IDLE) -#define DRM_IOCTL_RADEON_RESET DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_RESET) -#define DRM_IOCTL_RADEON_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FULLSCREEN, drm_radeon_fullscreen_t) -#define DRM_IOCTL_RADEON_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_SWAP) -#define DRM_IOCTL_RADEON_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CLEAR, drm_radeon_clear_t) -#define DRM_IOCTL_RADEON_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX, drm_radeon_vertex_t) -#define DRM_IOCTL_RADEON_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INDICES, drm_radeon_indices_t) -#define DRM_IOCTL_RADEON_STIPPLE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_STIPPLE, drm_radeon_stipple_t) -#define DRM_IOCTL_RADEON_INDIRECT DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INDIRECT, drm_radeon_indirect_t) -#define DRM_IOCTL_RADEON_TEXTURE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_TEXTURE, drm_radeon_texture_t) -#define DRM_IOCTL_RADEON_VERTEX2 DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX2, drm_radeon_vertex2_t) -#define DRM_IOCTL_RADEON_CMDBUF DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CMDBUF, drm_radeon_cmd_buffer_t) -#define DRM_IOCTL_RADEON_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GETPARAM, drm_radeon_getparam_t) -#define DRM_IOCTL_RADEON_FLIP DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_FLIP) -#define DRM_IOCTL_RADEON_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_ALLOC, drm_radeon_mem_alloc_t) -#define DRM_IOCTL_RADEON_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FREE, drm_radeon_mem_free_t) -#define DRM_IOCTL_RADEON_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INIT_HEAP, drm_radeon_mem_init_heap_t) -#define DRM_IOCTL_RADEON_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_IRQ_EMIT, drm_radeon_irq_emit_t) -#define DRM_IOCTL_RADEON_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_IRQ_WAIT, drm_radeon_irq_wait_t) -#define DRM_IOCTL_RADEON_CP_RESUME DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_RESUME) -#define DRM_IOCTL_RADEON_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SETPARAM, drm_radeon_setparam_t) -#define DRM_IOCTL_RADEON_SURF_ALLOC DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_ALLOC, drm_radeon_surface_alloc_t) -#define DRM_IOCTL_RADEON_SURF_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_FREE, drm_radeon_surface_free_t) -/* KMS */ -#define DRM_IOCTL_RADEON_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_INFO, struct drm_radeon_gem_info) -#define DRM_IOCTL_RADEON_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_CREATE, struct drm_radeon_gem_create) -#define DRM_IOCTL_RADEON_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_MMAP, struct drm_radeon_gem_mmap) -#define DRM_IOCTL_RADEON_GEM_PREAD DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PREAD, struct drm_radeon_gem_pread) -#define DRM_IOCTL_RADEON_GEM_PWRITE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PWRITE, struct drm_radeon_gem_pwrite) -#define DRM_IOCTL_RADEON_GEM_SET_DOMAIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_DOMAIN, struct drm_radeon_gem_set_domain) -#define DRM_IOCTL_RADEON_GEM_WAIT_IDLE DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_GEM_WAIT_IDLE, struct drm_radeon_gem_wait_idle) -#define DRM_IOCTL_RADEON_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_CS, struct drm_radeon_cs) -#define DRM_IOCTL_RADEON_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INFO, struct drm_radeon_info) -#define DRM_IOCTL_RADEON_GEM_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_TILING, struct drm_radeon_gem_set_tiling) -#define DRM_IOCTL_RADEON_GEM_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_GET_TILING, struct drm_radeon_gem_get_tiling) -#define DRM_IOCTL_RADEON_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_BUSY, struct drm_radeon_gem_busy) -#define DRM_IOCTL_RADEON_GEM_VA DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_VA, struct drm_radeon_gem_va) -#define DRM_IOCTL_RADEON_GEM_OP DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_OP, struct drm_radeon_gem_op) -#define DRM_IOCTL_RADEON_GEM_USERPTR DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_USERPTR, struct drm_radeon_gem_userptr) - -typedef struct drm_radeon_init { - enum { - RADEON_INIT_CP = 0x01, - RADEON_CLEANUP_CP = 0x02, - RADEON_INIT_R200_CP = 0x03, - RADEON_INIT_R300_CP = 0x04, - RADEON_INIT_R600_CP = 0x05 - } func; - unsigned long sarea_priv_offset; - int is_pci; - int cp_mode; - int gart_size; - int ring_size; - int usec_timeout; - - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long ring_offset; - unsigned long ring_rptr_offset; - unsigned long buffers_offset; - unsigned long gart_textures_offset; -} drm_radeon_init_t; - -typedef struct drm_radeon_cp_stop { - int flush; - int idle; -} drm_radeon_cp_stop_t; - -typedef struct drm_radeon_fullscreen { - enum { - RADEON_INIT_FULLSCREEN = 0x01, - RADEON_CLEANUP_FULLSCREEN = 0x02 - } func; -} drm_radeon_fullscreen_t; - -#define CLEAR_X1 0 -#define CLEAR_Y1 1 -#define CLEAR_X2 2 -#define CLEAR_Y2 3 -#define CLEAR_DEPTH 4 - -typedef union drm_radeon_clear_rect { - float f[5]; - unsigned int ui[5]; -} drm_radeon_clear_rect_t; - -typedef struct drm_radeon_clear { - unsigned int flags; - unsigned int clear_color; - unsigned int clear_depth; - unsigned int color_mask; - unsigned int depth_mask; /* misnamed field: should be stencil */ - drm_radeon_clear_rect_t *depth_boxes; -} drm_radeon_clear_t; - -typedef struct drm_radeon_vertex { - int prim; - int idx; /* Index of vertex buffer */ - int count; /* Number of vertices in buffer */ - int discard; /* Client finished with buffer? */ -} drm_radeon_vertex_t; - -typedef struct drm_radeon_indices { - int prim; - int idx; - int start; - int end; - int discard; /* Client finished with buffer? */ -} drm_radeon_indices_t; - -/* v1.2 - obsoletes drm_radeon_vertex and drm_radeon_indices - * - allows multiple primitives and state changes in a single ioctl - * - supports driver change to emit native primitives - */ -typedef struct drm_radeon_vertex2 { - int idx; /* Index of vertex buffer */ - int discard; /* Client finished with buffer? */ - int nr_states; - drm_radeon_state_t *state; - int nr_prims; - drm_radeon_prim_t *prim; -} drm_radeon_vertex2_t; - -/* v1.3 - obsoletes drm_radeon_vertex2 - * - allows arbitrarily large cliprect list - * - allows updating of tcl packet, vector and scalar state - * - allows memory-efficient description of state updates - * - allows state to be emitted without a primitive - * (for clears, ctx switches) - * - allows more than one dma buffer to be referenced per ioctl - * - supports tcl driver - * - may be extended in future versions with new cmd types, packets - */ -typedef struct drm_radeon_cmd_buffer { - int bufsz; - char *buf; - int nbox; - struct drm_clip_rect *boxes; -} drm_radeon_cmd_buffer_t; - -typedef struct drm_radeon_tex_image { - unsigned int x, y; /* Blit coordinates */ - unsigned int width, height; - const void *data; -} drm_radeon_tex_image_t; - -typedef struct drm_radeon_texture { - unsigned int offset; - int pitch; - int format; - int width; /* Texture image coordinates */ - int height; - drm_radeon_tex_image_t *image; -} drm_radeon_texture_t; - -typedef struct drm_radeon_stipple { - unsigned int *mask; -} drm_radeon_stipple_t; - -typedef struct drm_radeon_indirect { - int idx; - int start; - int end; - int discard; -} drm_radeon_indirect_t; - -/* enum for card type parameters */ -#define RADEON_CARD_PCI 0 -#define RADEON_CARD_AGP 1 -#define RADEON_CARD_PCIE 2 - -/* 1.3: An ioctl to get parameters that aren't available to the 3d - * client any other way. - */ -#define RADEON_PARAM_GART_BUFFER_OFFSET 1 /* card offset of 1st GART buffer */ -#define RADEON_PARAM_LAST_FRAME 2 -#define RADEON_PARAM_LAST_DISPATCH 3 -#define RADEON_PARAM_LAST_CLEAR 4 -/* Added with DRM version 1.6. */ -#define RADEON_PARAM_IRQ_NR 5 -#define RADEON_PARAM_GART_BASE 6 /* card offset of GART base */ -/* Added with DRM version 1.8. */ -#define RADEON_PARAM_REGISTER_HANDLE 7 /* for drmMap() */ -#define RADEON_PARAM_STATUS_HANDLE 8 -#define RADEON_PARAM_SAREA_HANDLE 9 -#define RADEON_PARAM_GART_TEX_HANDLE 10 -#define RADEON_PARAM_SCRATCH_OFFSET 11 -#define RADEON_PARAM_CARD_TYPE 12 -#define RADEON_PARAM_VBLANK_CRTC 13 /* VBLANK CRTC */ -#define RADEON_PARAM_FB_LOCATION 14 /* FB location */ -#define RADEON_PARAM_NUM_GB_PIPES 15 /* num GB pipes */ -#define RADEON_PARAM_DEVICE_ID 16 -#define RADEON_PARAM_NUM_Z_PIPES 17 /* num Z pipes */ - -typedef struct drm_radeon_getparam { - int param; - void *value; -} drm_radeon_getparam_t; - -/* 1.6: Set up a memory manager for regions of shared memory: - */ -#define RADEON_MEM_REGION_GART 1 -#define RADEON_MEM_REGION_FB 2 - -typedef struct drm_radeon_mem_alloc { - int region; - int alignment; - int size; - int *region_offset; /* offset from start of fb or GART */ -} drm_radeon_mem_alloc_t; - -typedef struct drm_radeon_mem_free { - int region; - int region_offset; -} drm_radeon_mem_free_t; - -typedef struct drm_radeon_mem_init_heap { - int region; - int size; - int start; -} drm_radeon_mem_init_heap_t; - -/* 1.6: Userspace can request & wait on irq's: - */ -typedef struct drm_radeon_irq_emit { - int *irq_seq; -} drm_radeon_irq_emit_t; - -typedef struct drm_radeon_irq_wait { - int irq_seq; -} drm_radeon_irq_wait_t; - -/* 1.10: Clients tell the DRM where they think the framebuffer is located in - * the card's address space, via a new generic ioctl to set parameters - */ - -typedef struct drm_radeon_setparam { - unsigned int param; - __s64 value; -} drm_radeon_setparam_t; - -#define RADEON_SETPARAM_FB_LOCATION 1 /* determined framebuffer location */ -#define RADEON_SETPARAM_SWITCH_TILING 2 /* enable/disable color tiling */ -#define RADEON_SETPARAM_PCIGART_LOCATION 3 /* PCI Gart Location */ -#define RADEON_SETPARAM_NEW_MEMMAP 4 /* Use new memory map */ -#define RADEON_SETPARAM_PCIGART_TABLE_SIZE 5 /* PCI GART Table Size */ -#define RADEON_SETPARAM_VBLANK_CRTC 6 /* VBLANK CRTC */ -/* 1.14: Clients can allocate/free a surface - */ -typedef struct drm_radeon_surface_alloc { - unsigned int address; - unsigned int size; - unsigned int flags; -} drm_radeon_surface_alloc_t; - -typedef struct drm_radeon_surface_free { - unsigned int address; -} drm_radeon_surface_free_t; - -#define DRM_RADEON_VBLANK_CRTC1 1 -#define DRM_RADEON_VBLANK_CRTC2 2 - -/* - * Kernel modesetting world below. - */ -#define RADEON_GEM_DOMAIN_CPU 0x1 -#define RADEON_GEM_DOMAIN_GTT 0x2 -#define RADEON_GEM_DOMAIN_VRAM 0x4 - -struct drm_radeon_gem_info { - __u64 gart_size; - __u64 vram_size; - __u64 vram_visible; -}; - -#define RADEON_GEM_NO_BACKING_STORE (1 << 0) -#define RADEON_GEM_GTT_UC (1 << 1) -#define RADEON_GEM_GTT_WC (1 << 2) -/* BO is expected to be accessed by the CPU */ -#define RADEON_GEM_CPU_ACCESS (1 << 3) -/* CPU access is not expected to work for this BO */ -#define RADEON_GEM_NO_CPU_ACCESS (1 << 4) - -struct drm_radeon_gem_create { - __u64 size; - __u64 alignment; - __u32 handle; - __u32 initial_domain; - __u32 flags; -}; - -/* - * This is not a reliable API and you should expect it to fail for any - * number of reasons and have fallback path that do not use userptr to - * perform any operation. - */ -#define RADEON_GEM_USERPTR_READONLY (1 << 0) -#define RADEON_GEM_USERPTR_ANONONLY (1 << 1) -#define RADEON_GEM_USERPTR_VALIDATE (1 << 2) -#define RADEON_GEM_USERPTR_REGISTER (1 << 3) - -struct drm_radeon_gem_userptr { - __u64 addr; - __u64 size; - __u32 flags; - __u32 handle; -}; - -#define RADEON_TILING_MACRO 0x1 -#define RADEON_TILING_MICRO 0x2 -#define RADEON_TILING_SWAP_16BIT 0x4 -#define RADEON_TILING_R600_NO_SCANOUT RADEON_TILING_SWAP_16BIT -#define RADEON_TILING_SWAP_32BIT 0x8 -/* this object requires a surface when mapped - i.e. front buffer */ -#define RADEON_TILING_SURFACE 0x10 -#define RADEON_TILING_MICRO_SQUARE 0x20 -#define RADEON_TILING_EG_BANKW_SHIFT 8 -#define RADEON_TILING_EG_BANKW_MASK 0xf -#define RADEON_TILING_EG_BANKH_SHIFT 12 -#define RADEON_TILING_EG_BANKH_MASK 0xf -#define RADEON_TILING_EG_MACRO_TILE_ASPECT_SHIFT 16 -#define RADEON_TILING_EG_MACRO_TILE_ASPECT_MASK 0xf -#define RADEON_TILING_EG_TILE_SPLIT_SHIFT 24 -#define RADEON_TILING_EG_TILE_SPLIT_MASK 0xf -#define RADEON_TILING_EG_STENCIL_TILE_SPLIT_SHIFT 28 -#define RADEON_TILING_EG_STENCIL_TILE_SPLIT_MASK 0xf - -struct drm_radeon_gem_set_tiling { - __u32 handle; - __u32 tiling_flags; - __u32 pitch; -}; - -struct drm_radeon_gem_get_tiling { - __u32 handle; - __u32 tiling_flags; - __u32 pitch; -}; - -struct drm_radeon_gem_mmap { - __u32 handle; - __u32 pad; - __u64 offset; - __u64 size; - __u64 addr_ptr; -}; - -struct drm_radeon_gem_set_domain { - __u32 handle; - __u32 read_domains; - __u32 write_domain; -}; - -struct drm_radeon_gem_wait_idle { - __u32 handle; - __u32 pad; -}; - -struct drm_radeon_gem_busy { - __u32 handle; - __u32 domain; -}; - -struct drm_radeon_gem_pread { - /** Handle for the object being read. */ - __u32 handle; - __u32 pad; - /** Offset into the object to read from */ - __u64 offset; - /** Length of data to read */ - __u64 size; - /** Pointer to write the data into. */ - /* void *, but pointers are not 32/64 compatible */ - __u64 data_ptr; -}; - -struct drm_radeon_gem_pwrite { - /** Handle for the object being written to. */ - __u32 handle; - __u32 pad; - /** Offset into the object to write to */ - __u64 offset; - /** Length of data to write */ - __u64 size; - /** Pointer to read the data from. */ - /* void *, but pointers are not 32/64 compatible */ - __u64 data_ptr; -}; - -/* Sets or returns a value associated with a buffer. */ -struct drm_radeon_gem_op { - __u32 handle; /* buffer */ - __u32 op; /* RADEON_GEM_OP_* */ - __u64 value; /* input or return value */ -}; - -#define RADEON_GEM_OP_GET_INITIAL_DOMAIN 0 -#define RADEON_GEM_OP_SET_INITIAL_DOMAIN 1 - -#define RADEON_VA_MAP 1 -#define RADEON_VA_UNMAP 2 - -#define RADEON_VA_RESULT_OK 0 -#define RADEON_VA_RESULT_ERROR 1 -#define RADEON_VA_RESULT_VA_EXIST 2 - -#define RADEON_VM_PAGE_VALID (1 << 0) -#define RADEON_VM_PAGE_READABLE (1 << 1) -#define RADEON_VM_PAGE_WRITEABLE (1 << 2) -#define RADEON_VM_PAGE_SYSTEM (1 << 3) -#define RADEON_VM_PAGE_SNOOPED (1 << 4) - -struct drm_radeon_gem_va { - __u32 handle; - __u32 operation; - __u32 vm_id; - __u32 flags; - __u64 offset; -}; - -#define RADEON_CHUNK_ID_RELOCS 0x01 -#define RADEON_CHUNK_ID_IB 0x02 -#define RADEON_CHUNK_ID_FLAGS 0x03 -#define RADEON_CHUNK_ID_CONST_IB 0x04 - -/* The first dword of RADEON_CHUNK_ID_FLAGS is a uint32 of these flags: */ -#define RADEON_CS_KEEP_TILING_FLAGS 0x01 -#define RADEON_CS_USE_VM 0x02 -#define RADEON_CS_END_OF_FRAME 0x04 /* a hint from userspace which CS is the last one */ -/* The second dword of RADEON_CHUNK_ID_FLAGS is a uint32 that sets the ring type */ -#define RADEON_CS_RING_GFX 0 -#define RADEON_CS_RING_COMPUTE 1 -#define RADEON_CS_RING_DMA 2 -#define RADEON_CS_RING_UVD 3 -#define RADEON_CS_RING_VCE 4 -/* The third dword of RADEON_CHUNK_ID_FLAGS is a sint32 that sets the priority */ -/* 0 = normal, + = higher priority, - = lower priority */ - -struct drm_radeon_cs_chunk { - __u32 chunk_id; - __u32 length_dw; - __u64 chunk_data; -}; - -/* drm_radeon_cs_reloc.flags */ -#define RADEON_RELOC_PRIO_MASK (0xf << 0) - -struct drm_radeon_cs_reloc { - __u32 handle; - __u32 read_domains; - __u32 write_domain; - __u32 flags; -}; - -struct drm_radeon_cs { - __u32 num_chunks; - __u32 cs_id; - /* this points to __u64 * which point to cs chunks */ - __u64 chunks; - /* updates to the limits after this CS ioctl */ - __u64 gart_limit; - __u64 vram_limit; -}; - -#define RADEON_INFO_DEVICE_ID 0x00 -#define RADEON_INFO_NUM_GB_PIPES 0x01 -#define RADEON_INFO_NUM_Z_PIPES 0x02 -#define RADEON_INFO_ACCEL_WORKING 0x03 -#define RADEON_INFO_CRTC_FROM_ID 0x04 -#define RADEON_INFO_ACCEL_WORKING2 0x05 -#define RADEON_INFO_TILING_CONFIG 0x06 -#define RADEON_INFO_WANT_HYPERZ 0x07 -#define RADEON_INFO_WANT_CMASK 0x08 /* get access to CMASK on r300 */ -#define RADEON_INFO_CLOCK_CRYSTAL_FREQ 0x09 /* clock crystal frequency */ -#define RADEON_INFO_NUM_BACKENDS 0x0a /* DB/backends for r600+ - need for OQ */ -#define RADEON_INFO_NUM_TILE_PIPES 0x0b /* tile pipes for r600+ */ -#define RADEON_INFO_FUSION_GART_WORKING 0x0c /* fusion writes to GTT were broken before this */ -#define RADEON_INFO_BACKEND_MAP 0x0d /* pipe to backend map, needed by mesa */ -/* virtual address start, va < start are reserved by the kernel */ -#define RADEON_INFO_VA_START 0x0e -/* maximum size of ib using the virtual memory cs */ -#define RADEON_INFO_IB_VM_MAX_SIZE 0x0f -/* max pipes - needed for compute shaders */ -#define RADEON_INFO_MAX_PIPES 0x10 -/* timestamp for GL_ARB_timer_query (OpenGL), returns the current GPU clock */ -#define RADEON_INFO_TIMESTAMP 0x11 -/* max shader engines (SE) - needed for geometry shaders, etc. */ -#define RADEON_INFO_MAX_SE 0x12 -/* max SH per SE */ -#define RADEON_INFO_MAX_SH_PER_SE 0x13 -/* fast fb access is enabled */ -#define RADEON_INFO_FASTFB_WORKING 0x14 -/* query if a RADEON_CS_RING_* submission is supported */ -#define RADEON_INFO_RING_WORKING 0x15 -/* SI tile mode array */ -#define RADEON_INFO_SI_TILE_MODE_ARRAY 0x16 -/* query if CP DMA is supported on the compute ring */ -#define RADEON_INFO_SI_CP_DMA_COMPUTE 0x17 -/* CIK macrotile mode array */ -#define RADEON_INFO_CIK_MACROTILE_MODE_ARRAY 0x18 -/* query the number of render backends */ -#define RADEON_INFO_SI_BACKEND_ENABLED_MASK 0x19 -/* max engine clock - needed for OpenCL */ -#define RADEON_INFO_MAX_SCLK 0x1a -/* version of VCE firmware */ -#define RADEON_INFO_VCE_FW_VERSION 0x1b -/* version of VCE feedback */ -#define RADEON_INFO_VCE_FB_VERSION 0x1c -#define RADEON_INFO_NUM_BYTES_MOVED 0x1d -#define RADEON_INFO_VRAM_USAGE 0x1e -#define RADEON_INFO_GTT_USAGE 0x1f -#define RADEON_INFO_ACTIVE_CU_COUNT 0x20 -#define RADEON_INFO_CURRENT_GPU_TEMP 0x21 -#define RADEON_INFO_CURRENT_GPU_SCLK 0x22 -#define RADEON_INFO_CURRENT_GPU_MCLK 0x23 -#define RADEON_INFO_READ_REG 0x24 -#define RADEON_INFO_VA_UNMAP_WORKING 0x25 -#define RADEON_INFO_GPU_RESET_COUNTER 0x26 - -struct drm_radeon_info { - __u32 request; - __u32 pad; - __u64 value; -}; - -/* Those correspond to the tile index to use, this is to explicitly state - * the API that is implicitly defined by the tile mode array. - */ -#define SI_TILE_MODE_COLOR_LINEAR_ALIGNED 8 -#define SI_TILE_MODE_COLOR_1D 13 -#define SI_TILE_MODE_COLOR_1D_SCANOUT 9 -#define SI_TILE_MODE_COLOR_2D_8BPP 14 -#define SI_TILE_MODE_COLOR_2D_16BPP 15 -#define SI_TILE_MODE_COLOR_2D_32BPP 16 -#define SI_TILE_MODE_COLOR_2D_64BPP 17 -#define SI_TILE_MODE_COLOR_2D_SCANOUT_16BPP 11 -#define SI_TILE_MODE_COLOR_2D_SCANOUT_32BPP 12 -#define SI_TILE_MODE_DEPTH_STENCIL_1D 4 -#define SI_TILE_MODE_DEPTH_STENCIL_2D 0 -#define SI_TILE_MODE_DEPTH_STENCIL_2D_2AA 3 -#define SI_TILE_MODE_DEPTH_STENCIL_2D_4AA 3 -#define SI_TILE_MODE_DEPTH_STENCIL_2D_8AA 2 - -#define CIK_TILE_MODE_DEPTH_STENCIL_1D 5 - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/arm/include/libdrm/radeon_surface.h b/prebuilts/arm/include/libdrm/radeon_surface.h deleted file mode 100644 index af7cab6..0000000 --- a/prebuilts/arm/include/libdrm/radeon_surface.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright © 2011 Red Hat All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Jérôme Glisse - */ -#ifndef RADEON_SURFACE_H -#define RADEON_SURFACE_H - -/* Note : - * - * For texture array, the n layer are stored one after the other within each - * mipmap level. 0 value for field than can be hint is always valid. - */ - -#define RADEON_SURF_MAX_LEVEL 32 - -#define RADEON_SURF_TYPE_MASK 0xFF -#define RADEON_SURF_TYPE_SHIFT 0 -#define RADEON_SURF_TYPE_1D 0 -#define RADEON_SURF_TYPE_2D 1 -#define RADEON_SURF_TYPE_3D 2 -#define RADEON_SURF_TYPE_CUBEMAP 3 -#define RADEON_SURF_TYPE_1D_ARRAY 4 -#define RADEON_SURF_TYPE_2D_ARRAY 5 -#define RADEON_SURF_MODE_MASK 0xFF -#define RADEON_SURF_MODE_SHIFT 8 -#define RADEON_SURF_MODE_LINEAR 0 -#define RADEON_SURF_MODE_LINEAR_ALIGNED 1 -#define RADEON_SURF_MODE_1D 2 -#define RADEON_SURF_MODE_2D 3 -#define RADEON_SURF_SCANOUT (1 << 16) -#define RADEON_SURF_ZBUFFER (1 << 17) -#define RADEON_SURF_SBUFFER (1 << 18) -#define RADEON_SURF_Z_OR_SBUFFER (RADEON_SURF_ZBUFFER | RADEON_SURF_SBUFFER) -#define RADEON_SURF_HAS_SBUFFER_MIPTREE (1 << 19) -#define RADEON_SURF_HAS_TILE_MODE_INDEX (1 << 20) -#define RADEON_SURF_FMASK (1 << 21) - -#define RADEON_SURF_GET(v, field) (((v) >> RADEON_SURF_ ## field ## _SHIFT) & RADEON_SURF_ ## field ## _MASK) -#define RADEON_SURF_SET(v, field) (((v) & RADEON_SURF_ ## field ## _MASK) << RADEON_SURF_ ## field ## _SHIFT) -#define RADEON_SURF_CLR(v, field) ((v) & ~(RADEON_SURF_ ## field ## _MASK << RADEON_SURF_ ## field ## _SHIFT)) - -/* first field up to mode need to match r6 struct so that we can reuse - * same function for linear & linear aligned - */ -struct radeon_surface_level { - uint64_t offset; - uint64_t slice_size; - uint32_t npix_x; - uint32_t npix_y; - uint32_t npix_z; - uint32_t nblk_x; - uint32_t nblk_y; - uint32_t nblk_z; - uint32_t pitch_bytes; - uint32_t mode; -}; - -enum si_tiling_mode { - SI_TILING_AUTO = 0, - - SI_TILING_COLOR_1D, - SI_TILING_COLOR_1D_SCANOUT, - SI_TILING_COLOR_2D_8BPP, - SI_TILING_COLOR_2D_16BPP, - SI_TILING_COLOR_2D_32BPP, - SI_TILING_COLOR_2D_64BPP, - SI_TILING_COLOR_2D_SCANOUT_16BPP, - SI_TILING_COLOR_2D_SCANOUT_32BPP, - SI_TILING_COLOR_LINEAR, - - SI_TILING_STENCIL_1D, - SI_TILING_STENCIL_2D, - SI_TILING_STENCIL_2D_2AA, - SI_TILING_STENCIL_2D_4AA, - SI_TILING_STENCIL_2D_8AA, - - SI_TILING_DEPTH_1D, - SI_TILING_DEPTH_2D, - SI_TILING_DEPTH_2D_2AA, - SI_TILING_DEPTH_2D_4AA, - SI_TILING_DEPTH_2D_8AA, - - SI_TILING_LAST_MODE, -}; - -struct radeon_surface { - uint32_t npix_x; - uint32_t npix_y; - uint32_t npix_z; - uint32_t blk_w; - uint32_t blk_h; - uint32_t blk_d; - uint32_t array_size; - uint32_t last_level; - uint32_t bpe; - uint32_t nsamples; - uint32_t flags; - /* Following is updated/fill by the allocator. It's allowed to - * set some of the value but they are use as hint and can be - * overridden (things lile bankw/bankh on evergreen for - * instance). - */ - uint64_t bo_size; - uint64_t bo_alignment; - /* apply to eg */ - uint32_t bankw; - uint32_t bankh; - uint32_t mtilea; - uint32_t tile_split; - uint32_t stencil_tile_split; - uint64_t stencil_offset; - struct radeon_surface_level level[RADEON_SURF_MAX_LEVEL]; - struct radeon_surface_level stencil_level[RADEON_SURF_MAX_LEVEL]; - uint32_t tiling_index[RADEON_SURF_MAX_LEVEL]; - uint32_t stencil_tiling_index[RADEON_SURF_MAX_LEVEL]; -}; - -struct radeon_surface_manager *radeon_surface_manager_new(int fd); -void radeon_surface_manager_free(struct radeon_surface_manager *surf_man); -int radeon_surface_init(struct radeon_surface_manager *surf_man, - struct radeon_surface *surf); -int radeon_surface_best(struct radeon_surface_manager *surf_man, - struct radeon_surface *surf); - -#endif diff --git a/prebuilts/arm/include/libdrm/savage_drm.h b/prebuilts/arm/include/libdrm/savage_drm.h deleted file mode 100644 index 1a91234..0000000 --- a/prebuilts/arm/include/libdrm/savage_drm.h +++ /dev/null @@ -1,220 +0,0 @@ -/* savage_drm.h -- Public header for the savage driver - * - * Copyright 2004 Felix Kuehling - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sub license, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL FELIX KUEHLING BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef __SAVAGE_DRM_H__ -#define __SAVAGE_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef __SAVAGE_SAREA_DEFINES__ -#define __SAVAGE_SAREA_DEFINES__ - -/* 2 heaps (1 for card, 1 for agp), each divided into up to 128 - * regions, subject to a minimum region size of (1<<16) == 64k. - * - * Clients may subdivide regions internally, but when sharing between - * clients, the region size is the minimum granularity. - */ - -#define SAVAGE_CARD_HEAP 0 -#define SAVAGE_AGP_HEAP 1 -#define SAVAGE_NR_TEX_HEAPS 2 -#define SAVAGE_NR_TEX_REGIONS 16 -#define SAVAGE_LOG_MIN_TEX_REGION_SIZE 16 - -#endif /* __SAVAGE_SAREA_DEFINES__ */ - -typedef struct _drm_savage_sarea { - /* LRU lists for texture memory in agp space and on the card. - */ - struct drm_tex_region texList[SAVAGE_NR_TEX_HEAPS][SAVAGE_NR_TEX_REGIONS + - 1]; - unsigned int texAge[SAVAGE_NR_TEX_HEAPS]; - - /* Mechanism to validate card state. - */ - int ctxOwner; -} drm_savage_sarea_t, *drm_savage_sarea_ptr; - -/* Savage-specific ioctls - */ -#define DRM_SAVAGE_BCI_INIT 0x00 -#define DRM_SAVAGE_BCI_CMDBUF 0x01 -#define DRM_SAVAGE_BCI_EVENT_EMIT 0x02 -#define DRM_SAVAGE_BCI_EVENT_WAIT 0x03 - -#define DRM_IOCTL_SAVAGE_BCI_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_INIT, drm_savage_init_t) -#define DRM_IOCTL_SAVAGE_BCI_CMDBUF DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_CMDBUF, drm_savage_cmdbuf_t) -#define DRM_IOCTL_SAVAGE_BCI_EVENT_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_SAVAGE_BCI_EVENT_EMIT, drm_savage_event_emit_t) -#define DRM_IOCTL_SAVAGE_BCI_EVENT_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_EVENT_WAIT, drm_savage_event_wait_t) - -#define SAVAGE_DMA_PCI 1 -#define SAVAGE_DMA_AGP 3 -typedef struct drm_savage_init { - enum { - SAVAGE_INIT_BCI = 1, - SAVAGE_CLEANUP_BCI = 2 - } func; - unsigned int sarea_priv_offset; - - /* some parameters */ - unsigned int cob_size; - unsigned int bci_threshold_lo, bci_threshold_hi; - unsigned int dma_type; - - /* frame buffer layout */ - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - - /* local textures */ - unsigned int texture_offset; - unsigned int texture_size; - - /* physical locations of non-permanent maps */ - unsigned long status_offset; - unsigned long buffers_offset; - unsigned long agp_textures_offset; - unsigned long cmd_dma_offset; -} drm_savage_init_t; - -typedef union drm_savage_cmd_header drm_savage_cmd_header_t; -typedef struct drm_savage_cmdbuf { - /* command buffer in client's address space */ - drm_savage_cmd_header_t *cmd_addr; - unsigned int size; /* size of the command buffer in 64bit units */ - - unsigned int dma_idx; /* DMA buffer index to use */ - int discard; /* discard DMA buffer when done */ - /* vertex buffer in client's address space */ - unsigned int *vb_addr; - unsigned int vb_size; /* size of client vertex buffer in bytes */ - unsigned int vb_stride; /* stride of vertices in 32bit words */ - /* boxes in client's address space */ - struct drm_clip_rect *box_addr; - unsigned int nbox; /* number of clipping boxes */ -} drm_savage_cmdbuf_t; - -#define SAVAGE_WAIT_2D 0x1 /* wait for 2D idle before updating event tag */ -#define SAVAGE_WAIT_3D 0x2 /* wait for 3D idle before updating event tag */ -#define SAVAGE_WAIT_IRQ 0x4 /* emit or wait for IRQ, not implemented yet */ -typedef struct drm_savage_event { - unsigned int count; - unsigned int flags; -} drm_savage_event_emit_t, drm_savage_event_wait_t; - -/* Commands for the cmdbuf ioctl - */ -#define SAVAGE_CMD_STATE 0 /* a range of state registers */ -#define SAVAGE_CMD_DMA_PRIM 1 /* vertices from DMA buffer */ -#define SAVAGE_CMD_VB_PRIM 2 /* vertices from client vertex buffer */ -#define SAVAGE_CMD_DMA_IDX 3 /* indexed vertices from DMA buffer */ -#define SAVAGE_CMD_VB_IDX 4 /* indexed vertices client vertex buffer */ -#define SAVAGE_CMD_CLEAR 5 /* clear buffers */ -#define SAVAGE_CMD_SWAP 6 /* swap buffers */ - -/* Primitive types -*/ -#define SAVAGE_PRIM_TRILIST 0 /* triangle list */ -#define SAVAGE_PRIM_TRISTRIP 1 /* triangle strip */ -#define SAVAGE_PRIM_TRIFAN 2 /* triangle fan */ -#define SAVAGE_PRIM_TRILIST_201 3 /* reorder verts for correct flat - * shading on s3d */ - -/* Skip flags (vertex format) - */ -#define SAVAGE_SKIP_Z 0x01 -#define SAVAGE_SKIP_W 0x02 -#define SAVAGE_SKIP_C0 0x04 -#define SAVAGE_SKIP_C1 0x08 -#define SAVAGE_SKIP_S0 0x10 -#define SAVAGE_SKIP_T0 0x20 -#define SAVAGE_SKIP_ST0 0x30 -#define SAVAGE_SKIP_S1 0x40 -#define SAVAGE_SKIP_T1 0x80 -#define SAVAGE_SKIP_ST1 0xc0 -#define SAVAGE_SKIP_ALL_S3D 0x3f -#define SAVAGE_SKIP_ALL_S4 0xff - -/* Buffer names for clear command - */ -#define SAVAGE_FRONT 0x1 -#define SAVAGE_BACK 0x2 -#define SAVAGE_DEPTH 0x4 - -/* 64-bit command header - */ -union drm_savage_cmd_header { - struct { - unsigned char cmd; /* command */ - unsigned char pad0; - unsigned short pad1; - unsigned short pad2; - unsigned short pad3; - } cmd; /* generic */ - struct { - unsigned char cmd; - unsigned char global; /* need idle engine? */ - unsigned short count; /* number of consecutive registers */ - unsigned short start; /* first register */ - unsigned short pad3; - } state; /* SAVAGE_CMD_STATE */ - struct { - unsigned char cmd; - unsigned char prim; /* primitive type */ - unsigned short skip; /* vertex format (skip flags) */ - unsigned short count; /* number of vertices */ - unsigned short start; /* first vertex in DMA/vertex buffer */ - } prim; /* SAVAGE_CMD_DMA_PRIM, SAVAGE_CMD_VB_PRIM */ - struct { - unsigned char cmd; - unsigned char prim; - unsigned short skip; - unsigned short count; /* number of indices that follow */ - unsigned short pad3; - } idx; /* SAVAGE_CMD_DMA_IDX, SAVAGE_CMD_VB_IDX */ - struct { - unsigned char cmd; - unsigned char pad0; - unsigned short pad1; - unsigned int flags; - } clear0; /* SAVAGE_CMD_CLEAR */ - struct { - unsigned int mask; - unsigned int value; - } clear1; /* SAVAGE_CMD_CLEAR data */ -}; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/arm/include/libdrm/sis_drm.h b/prebuilts/arm/include/libdrm/sis_drm.h deleted file mode 100644 index 8e51bb9..0000000 --- a/prebuilts/arm/include/libdrm/sis_drm.h +++ /dev/null @@ -1,77 +0,0 @@ -/* sis_drv.h -- Private header for sis driver -*- linux-c -*- */ -/* - * Copyright 2005 Eric Anholt - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - */ - -#ifndef __SIS_DRM_H__ -#define __SIS_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* SiS specific ioctls */ -#define NOT_USED_0_3 -#define DRM_SIS_FB_ALLOC 0x04 -#define DRM_SIS_FB_FREE 0x05 -#define NOT_USED_6_12 -#define DRM_SIS_AGP_INIT 0x13 -#define DRM_SIS_AGP_ALLOC 0x14 -#define DRM_SIS_AGP_FREE 0x15 -#define DRM_SIS_FB_INIT 0x16 - -#define DRM_IOCTL_SIS_FB_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_FB_ALLOC, drm_sis_mem_t) -#define DRM_IOCTL_SIS_FB_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_FB_FREE, drm_sis_mem_t) -#define DRM_IOCTL_SIS_AGP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_AGP_INIT, drm_sis_agp_t) -#define DRM_IOCTL_SIS_AGP_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_AGP_ALLOC, drm_sis_mem_t) -#define DRM_IOCTL_SIS_AGP_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_AGP_FREE, drm_sis_mem_t) -#define DRM_IOCTL_SIS_FB_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_FB_INIT, drm_sis_fb_t) -/* -#define DRM_IOCTL_SIS_FLIP DRM_IOW( 0x48, drm_sis_flip_t) -#define DRM_IOCTL_SIS_FLIP_INIT DRM_IO( 0x49) -#define DRM_IOCTL_SIS_FLIP_FINAL DRM_IO( 0x50) -*/ - -typedef struct { - int context; - unsigned int offset; - unsigned int size; - unsigned long free; -} drm_sis_mem_t; - -typedef struct { - unsigned int offset, size; -} drm_sis_agp_t; - -typedef struct { - unsigned int offset, size; -} drm_sis_fb_t; - -#if defined(__cplusplus) -} -#endif - -#endif /* __SIS_DRM_H__ */ diff --git a/prebuilts/arm/include/libdrm/tegra_drm.h b/prebuilts/arm/include/libdrm/tegra_drm.h deleted file mode 100644 index 94cfc30..0000000 --- a/prebuilts/arm/include/libdrm/tegra_drm.h +++ /dev/null @@ -1,1060 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/* Copyright (c) 2012-2020 NVIDIA Corporation */ - -#ifndef _UAPI_TEGRA_DRM_H_ -#define _UAPI_TEGRA_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Tegra DRM legacy UAPI. Only enabled with STAGING */ - -#define DRM_TEGRA_GEM_CREATE_TILED (1 << 0) -#define DRM_TEGRA_GEM_CREATE_BOTTOM_UP (1 << 1) - -/** - * struct drm_tegra_gem_create - parameters for the GEM object creation IOCTL - */ -struct drm_tegra_gem_create { - /** - * @size: - * - * The size, in bytes, of the buffer object to be created. - */ - __u64 size; - - /** - * @flags: - * - * A bitmask of flags that influence the creation of GEM objects: - * - * DRM_TEGRA_GEM_CREATE_TILED - * Use the 16x16 tiling format for this buffer. - * - * DRM_TEGRA_GEM_CREATE_BOTTOM_UP - * The buffer has a bottom-up layout. - */ - __u32 flags; - - /** - * @handle: - * - * The handle of the created GEM object. Set by the kernel upon - * successful completion of the IOCTL. - */ - __u32 handle; -}; - -/** - * struct drm_tegra_gem_mmap - parameters for the GEM mmap IOCTL - */ -struct drm_tegra_gem_mmap { - /** - * @handle: - * - * Handle of the GEM object to obtain an mmap offset for. - */ - __u32 handle; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; - - /** - * @offset: - * - * The mmap offset for the given GEM object. Set by the kernel upon - * successful completion of the IOCTL. - */ - __u64 offset; -}; - -/** - * struct drm_tegra_syncpt_read - parameters for the read syncpoint IOCTL - */ -struct drm_tegra_syncpt_read { - /** - * @id: - * - * ID of the syncpoint to read the current value from. - */ - __u32 id; - - /** - * @value: - * - * The current syncpoint value. Set by the kernel upon successful - * completion of the IOCTL. - */ - __u32 value; -}; - -/** - * struct drm_tegra_syncpt_incr - parameters for the increment syncpoint IOCTL - */ -struct drm_tegra_syncpt_incr { - /** - * @id: - * - * ID of the syncpoint to increment. - */ - __u32 id; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_syncpt_wait - parameters for the wait syncpoint IOCTL - */ -struct drm_tegra_syncpt_wait { - /** - * @id: - * - * ID of the syncpoint to wait on. - */ - __u32 id; - - /** - * @thresh: - * - * Threshold value for which to wait. - */ - __u32 thresh; - - /** - * @timeout: - * - * Timeout, in milliseconds, to wait. - */ - __u32 timeout; - - /** - * @value: - * - * The new syncpoint value after the wait. Set by the kernel upon - * successful completion of the IOCTL. - */ - __u32 value; -}; - -#define DRM_TEGRA_NO_TIMEOUT (0xffffffff) - -/** - * struct drm_tegra_open_channel - parameters for the open channel IOCTL - */ -struct drm_tegra_open_channel { - /** - * @client: - * - * The client ID for this channel. - */ - __u32 client; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; - - /** - * @context: - * - * The application context of this channel. Set by the kernel upon - * successful completion of the IOCTL. This context needs to be passed - * to the DRM_TEGRA_CHANNEL_CLOSE or the DRM_TEGRA_SUBMIT IOCTLs. - */ - __u64 context; -}; - -/** - * struct drm_tegra_close_channel - parameters for the close channel IOCTL - */ -struct drm_tegra_close_channel { - /** - * @context: - * - * The application context of this channel. This is obtained from the - * DRM_TEGRA_OPEN_CHANNEL IOCTL. - */ - __u64 context; -}; - -/** - * struct drm_tegra_get_syncpt - parameters for the get syncpoint IOCTL - */ -struct drm_tegra_get_syncpt { - /** - * @context: - * - * The application context identifying the channel for which to obtain - * the syncpoint ID. - */ - __u64 context; - - /** - * @index: - * - * Index of the client syncpoint for which to obtain the ID. - */ - __u32 index; - - /** - * @id: - * - * The ID of the given syncpoint. Set by the kernel upon successful - * completion of the IOCTL. - */ - __u32 id; -}; - -/** - * struct drm_tegra_get_syncpt_base - parameters for the get wait base IOCTL - */ -struct drm_tegra_get_syncpt_base { - /** - * @context: - * - * The application context identifying for which channel to obtain the - * wait base. - */ - __u64 context; - - /** - * @syncpt: - * - * ID of the syncpoint for which to obtain the wait base. - */ - __u32 syncpt; - - /** - * @id: - * - * The ID of the wait base corresponding to the client syncpoint. Set - * by the kernel upon successful completion of the IOCTL. - */ - __u32 id; -}; - -/** - * struct drm_tegra_syncpt - syncpoint increment operation - */ -struct drm_tegra_syncpt { - /** - * @id: - * - * ID of the syncpoint to operate on. - */ - __u32 id; - - /** - * @incrs: - * - * Number of increments to perform for the syncpoint. - */ - __u32 incrs; -}; - -/** - * struct drm_tegra_cmdbuf - structure describing a command buffer - */ -struct drm_tegra_cmdbuf { - /** - * @handle: - * - * Handle to a GEM object containing the command buffer. - */ - __u32 handle; - - /** - * @offset: - * - * Offset, in bytes, into the GEM object identified by @handle at - * which the command buffer starts. - */ - __u32 offset; - - /** - * @words: - * - * Number of 32-bit words in this command buffer. - */ - __u32 words; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_reloc - GEM object relocation structure - */ -struct drm_tegra_reloc { - struct { - /** - * @cmdbuf.handle: - * - * Handle to the GEM object containing the command buffer for - * which to perform this GEM object relocation. - */ - __u32 handle; - - /** - * @cmdbuf.offset: - * - * Offset, in bytes, into the command buffer at which to - * insert the relocated address. - */ - __u32 offset; - } cmdbuf; - struct { - /** - * @target.handle: - * - * Handle to the GEM object to be relocated. - */ - __u32 handle; - - /** - * @target.offset: - * - * Offset, in bytes, into the target GEM object at which the - * relocated data starts. - */ - __u32 offset; - } target; - - /** - * @shift: - * - * The number of bits by which to shift relocated addresses. - */ - __u32 shift; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_waitchk - wait check structure - */ -struct drm_tegra_waitchk { - /** - * @handle: - * - * Handle to the GEM object containing a command stream on which to - * perform the wait check. - */ - __u32 handle; - - /** - * @offset: - * - * Offset, in bytes, of the location in the command stream to perform - * the wait check on. - */ - __u32 offset; - - /** - * @syncpt: - * - * ID of the syncpoint to wait check. - */ - __u32 syncpt; - - /** - * @thresh: - * - * Threshold value for which to check. - */ - __u32 thresh; -}; - -/** - * struct drm_tegra_submit - job submission structure - */ -struct drm_tegra_submit { - /** - * @context: - * - * The application context identifying the channel to use for the - * execution of this job. - */ - __u64 context; - - /** - * @num_syncpts: - * - * The number of syncpoints operated on by this job. This defines the - * length of the array pointed to by @syncpts. - */ - __u32 num_syncpts; - - /** - * @num_cmdbufs: - * - * The number of command buffers to execute as part of this job. This - * defines the length of the array pointed to by @cmdbufs. - */ - __u32 num_cmdbufs; - - /** - * @num_relocs: - * - * The number of relocations to perform before executing this job. - * This defines the length of the array pointed to by @relocs. - */ - __u32 num_relocs; - - /** - * @num_waitchks: - * - * The number of wait checks to perform as part of this job. This - * defines the length of the array pointed to by @waitchks. - */ - __u32 num_waitchks; - - /** - * @waitchk_mask: - * - * Bitmask of valid wait checks. - */ - __u32 waitchk_mask; - - /** - * @timeout: - * - * Timeout, in milliseconds, before this job is cancelled. - */ - __u32 timeout; - - /** - * @syncpts: - * - * A pointer to an array of &struct drm_tegra_syncpt structures that - * specify the syncpoint operations performed as part of this job. - * The number of elements in the array must be equal to the value - * given by @num_syncpts. - */ - __u64 syncpts; - - /** - * @cmdbufs: - * - * A pointer to an array of &struct drm_tegra_cmdbuf structures that - * define the command buffers to execute as part of this job. The - * number of elements in the array must be equal to the value given - * by @num_syncpts. - */ - __u64 cmdbufs; - - /** - * @relocs: - * - * A pointer to an array of &struct drm_tegra_reloc structures that - * specify the relocations that need to be performed before executing - * this job. The number of elements in the array must be equal to the - * value given by @num_relocs. - */ - __u64 relocs; - - /** - * @waitchks: - * - * A pointer to an array of &struct drm_tegra_waitchk structures that - * specify the wait checks to be performed while executing this job. - * The number of elements in the array must be equal to the value - * given by @num_waitchks. - */ - __u64 waitchks; - - /** - * @fence: - * - * The threshold of the syncpoint associated with this job after it - * has been completed. Set by the kernel upon successful completion of - * the IOCTL. This can be used with the DRM_TEGRA_SYNCPT_WAIT IOCTL to - * wait for this job to be finished. - */ - __u32 fence; - - /** - * @reserved: - * - * This field is reserved for future use. Must be 0. - */ - __u32 reserved[5]; -}; - -#define DRM_TEGRA_GEM_TILING_MODE_PITCH 0 -#define DRM_TEGRA_GEM_TILING_MODE_TILED 1 -#define DRM_TEGRA_GEM_TILING_MODE_BLOCK 2 - -/** - * struct drm_tegra_gem_set_tiling - parameters for the set tiling IOCTL - */ -struct drm_tegra_gem_set_tiling { - /** - * @handle: - * - * Handle to the GEM object for which to set the tiling parameters. - */ - __u32 handle; - - /** - * @mode: - * - * The tiling mode to set. Must be one of: - * - * DRM_TEGRA_GEM_TILING_MODE_PITCH - * pitch linear format - * - * DRM_TEGRA_GEM_TILING_MODE_TILED - * 16x16 tiling format - * - * DRM_TEGRA_GEM_TILING_MODE_BLOCK - * 16Bx2 tiling format - */ - __u32 mode; - - /** - * @value: - * - * The value to set for the tiling mode parameter. - */ - __u32 value; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_gem_get_tiling - parameters for the get tiling IOCTL - */ -struct drm_tegra_gem_get_tiling { - /** - * @handle: - * - * Handle to the GEM object for which to query the tiling parameters. - */ - __u32 handle; - - /** - * @mode: - * - * The tiling mode currently associated with the GEM object. Set by - * the kernel upon successful completion of the IOCTL. - */ - __u32 mode; - - /** - * @value: - * - * The tiling mode parameter currently associated with the GEM object. - * Set by the kernel upon successful completion of the IOCTL. - */ - __u32 value; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -#define DRM_TEGRA_GEM_BOTTOM_UP (1 << 0) -#define DRM_TEGRA_GEM_FLAGS (DRM_TEGRA_GEM_BOTTOM_UP) - -/** - * struct drm_tegra_gem_set_flags - parameters for the set flags IOCTL - */ -struct drm_tegra_gem_set_flags { - /** - * @handle: - * - * Handle to the GEM object for which to set the flags. - */ - __u32 handle; - - /** - * @flags: - * - * The flags to set for the GEM object. - */ - __u32 flags; -}; - -/** - * struct drm_tegra_gem_get_flags - parameters for the get flags IOCTL - */ -struct drm_tegra_gem_get_flags { - /** - * @handle: - * - * Handle to the GEM object for which to query the flags. - */ - __u32 handle; - - /** - * @flags: - * - * The flags currently associated with the GEM object. Set by the - * kernel upon successful completion of the IOCTL. - */ - __u32 flags; -}; - -#define DRM_TEGRA_GEM_CREATE 0x00 -#define DRM_TEGRA_GEM_MMAP 0x01 -#define DRM_TEGRA_SYNCPT_READ 0x02 -#define DRM_TEGRA_SYNCPT_INCR 0x03 -#define DRM_TEGRA_SYNCPT_WAIT 0x04 -#define DRM_TEGRA_OPEN_CHANNEL 0x05 -#define DRM_TEGRA_CLOSE_CHANNEL 0x06 -#define DRM_TEGRA_GET_SYNCPT 0x07 -#define DRM_TEGRA_SUBMIT 0x08 -#define DRM_TEGRA_GET_SYNCPT_BASE 0x09 -#define DRM_TEGRA_GEM_SET_TILING 0x0a -#define DRM_TEGRA_GEM_GET_TILING 0x0b -#define DRM_TEGRA_GEM_SET_FLAGS 0x0c -#define DRM_TEGRA_GEM_GET_FLAGS 0x0d - -#define DRM_IOCTL_TEGRA_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_CREATE, struct drm_tegra_gem_create) -#define DRM_IOCTL_TEGRA_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_MMAP, struct drm_tegra_gem_mmap) -#define DRM_IOCTL_TEGRA_SYNCPT_READ DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_READ, struct drm_tegra_syncpt_read) -#define DRM_IOCTL_TEGRA_SYNCPT_INCR DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_INCR, struct drm_tegra_syncpt_incr) -#define DRM_IOCTL_TEGRA_SYNCPT_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_WAIT, struct drm_tegra_syncpt_wait) -#define DRM_IOCTL_TEGRA_OPEN_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_OPEN_CHANNEL, struct drm_tegra_open_channel) -#define DRM_IOCTL_TEGRA_CLOSE_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_CLOSE_CHANNEL, struct drm_tegra_close_channel) -#define DRM_IOCTL_TEGRA_GET_SYNCPT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT, struct drm_tegra_get_syncpt) -#define DRM_IOCTL_TEGRA_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SUBMIT, struct drm_tegra_submit) -#define DRM_IOCTL_TEGRA_GET_SYNCPT_BASE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT_BASE, struct drm_tegra_get_syncpt_base) -#define DRM_IOCTL_TEGRA_GEM_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_TILING, struct drm_tegra_gem_set_tiling) -#define DRM_IOCTL_TEGRA_GEM_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_TILING, struct drm_tegra_gem_get_tiling) -#define DRM_IOCTL_TEGRA_GEM_SET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_FLAGS, struct drm_tegra_gem_set_flags) -#define DRM_IOCTL_TEGRA_GEM_GET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_FLAGS, struct drm_tegra_gem_get_flags) - -/* New Tegra DRM UAPI */ - -/* - * Reported by the driver in the `capabilities` field. - * - * DRM_TEGRA_CHANNEL_CAP_CACHE_COHERENT: If set, the engine is cache coherent - * with regard to the system memory. - */ -#define DRM_TEGRA_CHANNEL_CAP_CACHE_COHERENT (1 << 0) - -struct drm_tegra_channel_open { - /** - * @host1x_class: [in] - * - * Host1x class of the engine that will be programmed using this - * channel. - */ - __u32 host1x_class; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * @context: [out] - * - * Opaque identifier corresponding to the opened channel. - */ - __u32 context; - - /** - * @version: [out] - * - * Version of the engine hardware. This can be used by userspace - * to determine how the engine needs to be programmed. - */ - __u32 version; - - /** - * @capabilities: [out] - * - * Flags describing the hardware capabilities. - */ - __u32 capabilities; - __u32 padding; -}; - -struct drm_tegra_channel_close { - /** - * @context: [in] - * - * Identifier of the channel to close. - */ - __u32 context; - __u32 padding; -}; - -/* - * Mapping flags that can be used to influence how the mapping is created. - * - * DRM_TEGRA_CHANNEL_MAP_READ: create mapping that allows HW read access - * DRM_TEGRA_CHANNEL_MAP_WRITE: create mapping that allows HW write access - */ -#define DRM_TEGRA_CHANNEL_MAP_READ (1 << 0) -#define DRM_TEGRA_CHANNEL_MAP_WRITE (1 << 1) -#define DRM_TEGRA_CHANNEL_MAP_READ_WRITE (DRM_TEGRA_CHANNEL_MAP_READ | \ - DRM_TEGRA_CHANNEL_MAP_WRITE) - -struct drm_tegra_channel_map { - /** - * @context: [in] - * - * Identifier of the channel to which make memory available for. - */ - __u32 context; - - /** - * @handle: [in] - * - * GEM handle of the memory to map. - */ - __u32 handle; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * @mapping: [out] - * - * Identifier corresponding to the mapping, to be used for - * relocations or unmapping later. - */ - __u32 mapping; -}; - -struct drm_tegra_channel_unmap { - /** - * @context: [in] - * - * Channel identifier of the channel to unmap memory from. - */ - __u32 context; - - /** - * @mapping: [in] - * - * Mapping identifier of the memory mapping to unmap. - */ - __u32 mapping; -}; - -/* Submission */ - -/** - * Specify that bit 39 of the patched-in address should be set to switch - * swizzling between Tegra and non-Tegra sector layout on systems that store - * surfaces in system memory in non-Tegra sector layout. - */ -#define DRM_TEGRA_SUBMIT_RELOC_SECTOR_LAYOUT (1 << 0) - -struct drm_tegra_submit_buf { - /** - * @mapping: [in] - * - * Identifier of the mapping to use in the submission. - */ - __u32 mapping; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * Information for relocation patching. - */ - struct { - /** - * @target_offset: [in] - * - * Offset from the start of the mapping of the data whose - * address is to be patched into the gather. - */ - __u64 target_offset; - - /** - * @gather_offset_words: [in] - * - * Offset in words from the start of the gather data to - * where the address should be patched into. - */ - __u32 gather_offset_words; - - /** - * @shift: [in] - * - * Number of bits the address should be shifted right before - * patching in. - */ - __u32 shift; - } reloc; -}; - -/** - * Execute `words` words of Host1x opcodes specified in the `gather_data_ptr` - * buffer. Each GATHER_UPTR command uses successive words from the buffer. - */ -#define DRM_TEGRA_SUBMIT_CMD_GATHER_UPTR 0 -/** - * Wait for a syncpoint to reach a value before continuing with further - * commands. - */ -#define DRM_TEGRA_SUBMIT_CMD_WAIT_SYNCPT 1 -/** - * Wait for a syncpoint to reach a value before continuing with further - * commands. The threshold is calculated relative to the start of the job. - */ -#define DRM_TEGRA_SUBMIT_CMD_WAIT_SYNCPT_RELATIVE 2 - -struct drm_tegra_submit_cmd_gather_uptr { - __u32 words; - __u32 reserved[3]; -}; - -struct drm_tegra_submit_cmd_wait_syncpt { - __u32 id; - __u32 value; - __u32 reserved[2]; -}; - -struct drm_tegra_submit_cmd { - /** - * @type: [in] - * - * Command type to execute. One of the DRM_TEGRA_SUBMIT_CMD* - * defines. - */ - __u32 type; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - union { - struct drm_tegra_submit_cmd_gather_uptr gather_uptr; - struct drm_tegra_submit_cmd_wait_syncpt wait_syncpt; - __u32 reserved[4]; - }; -}; - -struct drm_tegra_submit_syncpt { - /** - * @id: [in] - * - * ID of the syncpoint that the job will increment. - */ - __u32 id; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * @increments: [in] - * - * Number of times the job will increment this syncpoint. - */ - __u32 increments; - - /** - * @value: [out] - * - * Value the syncpoint will have once the job has completed all - * its specified syncpoint increments. - * - * Note that the kernel may increment the syncpoint before or after - * the job. These increments are not reflected in this field. - * - * If the job hangs or times out, not all of the increments may - * get executed. - */ - __u32 value; -}; - -struct drm_tegra_channel_submit { - /** - * @context: [in] - * - * Identifier of the channel to submit this job to. - */ - __u32 context; - - /** - * @num_bufs: [in] - * - * Number of elements in the `bufs_ptr` array. - */ - __u32 num_bufs; - - /** - * @num_cmds: [in] - * - * Number of elements in the `cmds_ptr` array. - */ - __u32 num_cmds; - - /** - * @gather_data_words: [in] - * - * Number of 32-bit words in the `gather_data_ptr` array. - */ - __u32 gather_data_words; - - /** - * @bufs_ptr: [in] - * - * Pointer to an array of drm_tegra_submit_buf structures. - */ - __u64 bufs_ptr; - - /** - * @cmds_ptr: [in] - * - * Pointer to an array of drm_tegra_submit_cmd structures. - */ - __u64 cmds_ptr; - - /** - * @gather_data_ptr: [in] - * - * Pointer to an array of Host1x opcodes to be used by GATHER_UPTR - * commands. - */ - __u64 gather_data_ptr; - - /** - * @syncobj_in: [in] - * - * Handle for DRM syncobj that will be waited before submission. - * Ignored if zero. - */ - __u32 syncobj_in; - - /** - * @syncobj_out: [in] - * - * Handle for DRM syncobj that will have its fence replaced with - * the job's completion fence. Ignored if zero. - */ - __u32 syncobj_out; - - /** - * @syncpt_incr: [in,out] - * - * Information about the syncpoint the job will increment. - */ - struct drm_tegra_submit_syncpt syncpt; -}; - -struct drm_tegra_syncpoint_allocate { - /** - * @id: [out] - * - * ID of allocated syncpoint. - */ - __u32 id; - __u32 padding; -}; - -struct drm_tegra_syncpoint_free { - /** - * @id: [in] - * - * ID of syncpoint to free. - */ - __u32 id; - __u32 padding; -}; - -struct drm_tegra_syncpoint_wait { - /** - * @timeout: [in] - * - * Absolute timestamp at which the wait will time out. - */ - __s64 timeout_ns; - - /** - * @id: [in] - * - * ID of syncpoint to wait on. - */ - __u32 id; - - /** - * @threshold: [in] - * - * Threshold to wait for. - */ - __u32 threshold; - - /** - * @value: [out] - * - * Value of the syncpoint upon wait completion. - */ - __u32 value; - - __u32 padding; -}; - -#define DRM_IOCTL_TEGRA_CHANNEL_OPEN DRM_IOWR(DRM_COMMAND_BASE + 0x10, struct drm_tegra_channel_open) -#define DRM_IOCTL_TEGRA_CHANNEL_CLOSE DRM_IOWR(DRM_COMMAND_BASE + 0x11, struct drm_tegra_channel_close) -#define DRM_IOCTL_TEGRA_CHANNEL_MAP DRM_IOWR(DRM_COMMAND_BASE + 0x12, struct drm_tegra_channel_map) -#define DRM_IOCTL_TEGRA_CHANNEL_UNMAP DRM_IOWR(DRM_COMMAND_BASE + 0x13, struct drm_tegra_channel_unmap) -#define DRM_IOCTL_TEGRA_CHANNEL_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + 0x14, struct drm_tegra_channel_submit) - -#define DRM_IOCTL_TEGRA_SYNCPOINT_ALLOCATE DRM_IOWR(DRM_COMMAND_BASE + 0x20, struct drm_tegra_syncpoint_allocate) -#define DRM_IOCTL_TEGRA_SYNCPOINT_FREE DRM_IOWR(DRM_COMMAND_BASE + 0x21, struct drm_tegra_syncpoint_free) -#define DRM_IOCTL_TEGRA_SYNCPOINT_WAIT DRM_IOWR(DRM_COMMAND_BASE + 0x22, struct drm_tegra_syncpoint_wait) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/arm/include/libdrm/vc4_drm.h b/prebuilts/arm/include/libdrm/vc4_drm.h deleted file mode 100644 index 31f50de..0000000 --- a/prebuilts/arm/include/libdrm/vc4_drm.h +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright © 2014-2015 Broadcom - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef _VC4_DRM_H_ -#define _VC4_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_VC4_SUBMIT_CL 0x00 -#define DRM_VC4_WAIT_SEQNO 0x01 -#define DRM_VC4_WAIT_BO 0x02 -#define DRM_VC4_CREATE_BO 0x03 -#define DRM_VC4_MMAP_BO 0x04 -#define DRM_VC4_CREATE_SHADER_BO 0x05 -#define DRM_VC4_GET_HANG_STATE 0x06 -#define DRM_VC4_GET_PARAM 0x07 -#define DRM_VC4_SET_TILING 0x08 -#define DRM_VC4_GET_TILING 0x09 -#define DRM_VC4_LABEL_BO 0x0a -#define DRM_VC4_GEM_MADVISE 0x0b -#define DRM_VC4_PERFMON_CREATE 0x0c -#define DRM_VC4_PERFMON_DESTROY 0x0d -#define DRM_VC4_PERFMON_GET_VALUES 0x0e - -#define DRM_IOCTL_VC4_SUBMIT_CL DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SUBMIT_CL, struct drm_vc4_submit_cl) -#define DRM_IOCTL_VC4_WAIT_SEQNO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_SEQNO, struct drm_vc4_wait_seqno) -#define DRM_IOCTL_VC4_WAIT_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_BO, struct drm_vc4_wait_bo) -#define DRM_IOCTL_VC4_CREATE_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_CREATE_BO, struct drm_vc4_create_bo) -#define DRM_IOCTL_VC4_MMAP_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_MMAP_BO, struct drm_vc4_mmap_bo) -#define DRM_IOCTL_VC4_CREATE_SHADER_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_CREATE_SHADER_BO, struct drm_vc4_create_shader_bo) -#define DRM_IOCTL_VC4_GET_HANG_STATE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_HANG_STATE, struct drm_vc4_get_hang_state) -#define DRM_IOCTL_VC4_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_PARAM, struct drm_vc4_get_param) -#define DRM_IOCTL_VC4_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SET_TILING, struct drm_vc4_set_tiling) -#define DRM_IOCTL_VC4_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_TILING, struct drm_vc4_get_tiling) -#define DRM_IOCTL_VC4_LABEL_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_LABEL_BO, struct drm_vc4_label_bo) -#define DRM_IOCTL_VC4_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GEM_MADVISE, struct drm_vc4_gem_madvise) -#define DRM_IOCTL_VC4_PERFMON_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_CREATE, struct drm_vc4_perfmon_create) -#define DRM_IOCTL_VC4_PERFMON_DESTROY DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_DESTROY, struct drm_vc4_perfmon_destroy) -#define DRM_IOCTL_VC4_PERFMON_GET_VALUES DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_GET_VALUES, struct drm_vc4_perfmon_get_values) - -struct drm_vc4_submit_rcl_surface { - __u32 hindex; /* Handle index, or ~0 if not present. */ - __u32 offset; /* Offset to start of buffer. */ - /* - * Bits for either render config (color_write) or load/store packet. - * Bits should all be 0 for MSAA load/stores. - */ - __u16 bits; - -#define VC4_SUBMIT_RCL_SURFACE_READ_IS_FULL_RES (1 << 0) - __u16 flags; -}; - -/** - * struct drm_vc4_submit_cl - ioctl argument for submitting commands to the 3D - * engine. - * - * Drivers typically use GPU BOs to store batchbuffers / command lists and - * their associated state. However, because the VC4 lacks an MMU, we have to - * do validation of memory accesses by the GPU commands. If we were to store - * our commands in BOs, we'd need to do uncached readback from them to do the - * validation process, which is too expensive. Instead, userspace accumulates - * commands and associated state in plain memory, then the kernel copies the - * data to its own address space, and then validates and stores it in a GPU - * BO. - */ -struct drm_vc4_submit_cl { - /* Pointer to the binner command list. - * - * This is the first set of commands executed, which runs the - * coordinate shader to determine where primitives land on the screen, - * then writes out the state updates and draw calls necessary per tile - * to the tile allocation BO. - */ - __u64 bin_cl; - - /* Pointer to the shader records. - * - * Shader records are the structures read by the hardware that contain - * pointers to uniforms, shaders, and vertex attributes. The - * reference to the shader record has enough information to determine - * how many pointers are necessary (fixed number for shaders/uniforms, - * and an attribute count), so those BO indices into bo_handles are - * just stored as __u32s before each shader record passed in. - */ - __u64 shader_rec; - - /* Pointer to uniform data and texture handles for the textures - * referenced by the shader. - * - * For each shader state record, there is a set of uniform data in the - * order referenced by the record (FS, VS, then CS). Each set of - * uniform data has a __u32 index into bo_handles per texture - * sample operation, in the order the QPU_W_TMUn_S writes appear in - * the program. Following the texture BO handle indices is the actual - * uniform data. - * - * The individual uniform state blocks don't have sizes passed in, - * because the kernel has to determine the sizes anyway during shader - * code validation. - */ - __u64 uniforms; - __u64 bo_handles; - - /* Size in bytes of the binner command list. */ - __u32 bin_cl_size; - /* Size in bytes of the set of shader records. */ - __u32 shader_rec_size; - /* Number of shader records. - * - * This could just be computed from the contents of shader_records and - * the address bits of references to them from the bin CL, but it - * keeps the kernel from having to resize some allocations it makes. - */ - __u32 shader_rec_count; - /* Size in bytes of the uniform state. */ - __u32 uniforms_size; - - /* Number of BO handles passed in (size is that times 4). */ - __u32 bo_handle_count; - - /* RCL setup: */ - __u16 width; - __u16 height; - __u8 min_x_tile; - __u8 min_y_tile; - __u8 max_x_tile; - __u8 max_y_tile; - struct drm_vc4_submit_rcl_surface color_read; - struct drm_vc4_submit_rcl_surface color_write; - struct drm_vc4_submit_rcl_surface zs_read; - struct drm_vc4_submit_rcl_surface zs_write; - struct drm_vc4_submit_rcl_surface msaa_color_write; - struct drm_vc4_submit_rcl_surface msaa_zs_write; - __u32 clear_color[2]; - __u32 clear_z; - __u8 clear_s; - - __u32 pad:24; - -#define VC4_SUBMIT_CL_USE_CLEAR_COLOR (1 << 0) -/* By default, the kernel gets to choose the order that the tiles are - * rendered in. If this is set, then the tiles will be rendered in a - * raster order, with the right-to-left vs left-to-right and - * top-to-bottom vs bottom-to-top dictated by - * VC4_SUBMIT_CL_RCL_ORDER_INCREASING_*. This allows overlapping - * blits to be implemented using the 3D engine. - */ -#define VC4_SUBMIT_CL_FIXED_RCL_ORDER (1 << 1) -#define VC4_SUBMIT_CL_RCL_ORDER_INCREASING_X (1 << 2) -#define VC4_SUBMIT_CL_RCL_ORDER_INCREASING_Y (1 << 3) - __u32 flags; - - /* Returned value of the seqno of this render job (for the - * wait ioctl). - */ - __u64 seqno; - - /* ID of the perfmon to attach to this job. 0 means no perfmon. */ - __u32 perfmonid; - - /* Syncobj handle to wait on. If set, processing of this render job - * will not start until the syncobj is signaled. 0 means ignore. - */ - __u32 in_sync; - - /* Syncobj handle to export fence to. If set, the fence in the syncobj - * will be replaced with a fence that signals upon completion of this - * render job. 0 means ignore. - */ - __u32 out_sync; - - __u32 pad2; -}; - -/** - * struct drm_vc4_wait_seqno - ioctl argument for waiting for - * DRM_VC4_SUBMIT_CL completion using its returned seqno. - * - * timeout_ns is the timeout in nanoseconds, where "0" means "don't - * block, just return the status." - */ -struct drm_vc4_wait_seqno { - __u64 seqno; - __u64 timeout_ns; -}; - -/** - * struct drm_vc4_wait_bo - ioctl argument for waiting for - * completion of the last DRM_VC4_SUBMIT_CL on a BO. - * - * This is useful for cases where multiple processes might be - * rendering to a BO and you want to wait for all rendering to be - * completed. - */ -struct drm_vc4_wait_bo { - __u32 handle; - __u32 pad; - __u64 timeout_ns; -}; - -/** - * struct drm_vc4_create_bo - ioctl argument for creating VC4 BOs. - * - * There are currently no values for the flags argument, but it may be - * used in a future extension. - */ -struct drm_vc4_create_bo { - __u32 size; - __u32 flags; - /** Returned GEM handle for the BO. */ - __u32 handle; - __u32 pad; -}; - -/** - * struct drm_vc4_mmap_bo - ioctl argument for mapping VC4 BOs. - * - * This doesn't actually perform an mmap. Instead, it returns the - * offset you need to use in an mmap on the DRM device node. This - * means that tools like valgrind end up knowing about the mapped - * memory. - * - * There are currently no values for the flags argument, but it may be - * used in a future extension. - */ -struct drm_vc4_mmap_bo { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 flags; - /** offset into the drm node to use for subsequent mmap call. */ - __u64 offset; -}; - -/** - * struct drm_vc4_create_shader_bo - ioctl argument for creating VC4 - * shader BOs. - * - * Since allowing a shader to be overwritten while it's also being - * executed from would allow privlege escalation, shaders must be - * created using this ioctl, and they can't be mmapped later. - */ -struct drm_vc4_create_shader_bo { - /* Size of the data argument. */ - __u32 size; - /* Flags, currently must be 0. */ - __u32 flags; - - /* Pointer to the data. */ - __u64 data; - - /** Returned GEM handle for the BO. */ - __u32 handle; - /* Pad, must be 0. */ - __u32 pad; -}; - -struct drm_vc4_get_hang_state_bo { - __u32 handle; - __u32 paddr; - __u32 size; - __u32 pad; -}; - -/** - * struct drm_vc4_hang_state - ioctl argument for collecting state - * from a GPU hang for analysis. -*/ -struct drm_vc4_get_hang_state { - /** Pointer to array of struct drm_vc4_get_hang_state_bo. */ - __u64 bo; - /** - * On input, the size of the bo array. Output is the number - * of bos to be returned. - */ - __u32 bo_count; - - __u32 start_bin, start_render; - - __u32 ct0ca, ct0ea; - __u32 ct1ca, ct1ea; - __u32 ct0cs, ct1cs; - __u32 ct0ra0, ct1ra0; - - __u32 bpca, bpcs; - __u32 bpoa, bpos; - - __u32 vpmbase; - - __u32 dbge; - __u32 fdbgo; - __u32 fdbgb; - __u32 fdbgr; - __u32 fdbgs; - __u32 errstat; - - /* Pad that we may save more registers into in the future. */ - __u32 pad[16]; -}; - -#define DRM_VC4_PARAM_V3D_IDENT0 0 -#define DRM_VC4_PARAM_V3D_IDENT1 1 -#define DRM_VC4_PARAM_V3D_IDENT2 2 -#define DRM_VC4_PARAM_SUPPORTS_BRANCHES 3 -#define DRM_VC4_PARAM_SUPPORTS_ETC1 4 -#define DRM_VC4_PARAM_SUPPORTS_THREADED_FS 5 -#define DRM_VC4_PARAM_SUPPORTS_FIXED_RCL_ORDER 6 -#define DRM_VC4_PARAM_SUPPORTS_MADVISE 7 -#define DRM_VC4_PARAM_SUPPORTS_PERFMON 8 - -struct drm_vc4_get_param { - __u32 param; - __u32 pad; - __u64 value; -}; - -struct drm_vc4_get_tiling { - __u32 handle; - __u32 flags; - __u64 modifier; -}; - -struct drm_vc4_set_tiling { - __u32 handle; - __u32 flags; - __u64 modifier; -}; - -/** - * struct drm_vc4_label_bo - Attach a name to a BO for debug purposes. - */ -struct drm_vc4_label_bo { - __u32 handle; - __u32 len; - __u64 name; -}; - -/* - * States prefixed with '__' are internal states and cannot be passed to the - * DRM_IOCTL_VC4_GEM_MADVISE ioctl. - */ -#define VC4_MADV_WILLNEED 0 -#define VC4_MADV_DONTNEED 1 -#define __VC4_MADV_PURGED 2 -#define __VC4_MADV_NOTSUPP 3 - -struct drm_vc4_gem_madvise { - __u32 handle; - __u32 madv; - __u32 retained; - __u32 pad; -}; - -enum { - VC4_PERFCNT_FEP_VALID_PRIMS_NO_RENDER, - VC4_PERFCNT_FEP_VALID_PRIMS_RENDER, - VC4_PERFCNT_FEP_CLIPPED_QUADS, - VC4_PERFCNT_FEP_VALID_QUADS, - VC4_PERFCNT_TLB_QUADS_NOT_PASSING_STENCIL, - VC4_PERFCNT_TLB_QUADS_NOT_PASSING_Z_AND_STENCIL, - VC4_PERFCNT_TLB_QUADS_PASSING_Z_AND_STENCIL, - VC4_PERFCNT_TLB_QUADS_ZERO_COVERAGE, - VC4_PERFCNT_TLB_QUADS_NON_ZERO_COVERAGE, - VC4_PERFCNT_TLB_QUADS_WRITTEN_TO_COLOR_BUF, - VC4_PERFCNT_PLB_PRIMS_OUTSIDE_VIEWPORT, - VC4_PERFCNT_PLB_PRIMS_NEED_CLIPPING, - VC4_PERFCNT_PSE_PRIMS_REVERSED, - VC4_PERFCNT_QPU_TOTAL_IDLE_CYCLES, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_VERTEX_COORD_SHADING, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_FRAGMENT_SHADING, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_EXEC_VALID_INST, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_TMUS, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_SCOREBOARD, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_VARYINGS, - VC4_PERFCNT_QPU_TOTAL_INST_CACHE_HIT, - VC4_PERFCNT_QPU_TOTAL_INST_CACHE_MISS, - VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_HIT, - VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_MISS, - VC4_PERFCNT_TMU_TOTAL_TEXT_QUADS_PROCESSED, - VC4_PERFCNT_TMU_TOTAL_TEXT_CACHE_MISS, - VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VDW_STALLED, - VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VCD_STALLED, - VC4_PERFCNT_L2C_TOTAL_L2_CACHE_HIT, - VC4_PERFCNT_L2C_TOTAL_L2_CACHE_MISS, - VC4_PERFCNT_NUM_EVENTS, -}; - -#define DRM_VC4_MAX_PERF_COUNTERS 16 - -struct drm_vc4_perfmon_create { - __u32 id; - __u32 ncounters; - __u8 events[DRM_VC4_MAX_PERF_COUNTERS]; -}; - -struct drm_vc4_perfmon_destroy { - __u32 id; -}; - -/* - * Returns the values of the performance counters tracked by this - * perfmon (as an array of ncounters u64 values). - * - * No implicit synchronization is performed, so the user has to - * guarantee that any jobs using this perfmon have already been - * completed (probably by blocking on the seqno returned by the - * last exec that used the perfmon). - */ -struct drm_vc4_perfmon_get_values { - __u32 id; - __u64 values_ptr; -}; - -#if defined(__cplusplus) -} -#endif - -#endif /* _VC4_DRM_H_ */ diff --git a/prebuilts/arm/include/libdrm/vc4_packet.h b/prebuilts/arm/include/libdrm/vc4_packet.h deleted file mode 100644 index e18e0bd..0000000 --- a/prebuilts/arm/include/libdrm/vc4_packet.h +++ /dev/null @@ -1,397 +0,0 @@ -/* - * Copyright © 2014 Broadcom - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef VC4_PACKET_H -#define VC4_PACKET_H - -enum vc4_packet { - VC4_PACKET_HALT = 0, - VC4_PACKET_NOP = 1, - - VC4_PACKET_FLUSH = 4, - VC4_PACKET_FLUSH_ALL = 5, - VC4_PACKET_START_TILE_BINNING = 6, - VC4_PACKET_INCREMENT_SEMAPHORE = 7, - VC4_PACKET_WAIT_ON_SEMAPHORE = 8, - - VC4_PACKET_BRANCH = 16, - VC4_PACKET_BRANCH_TO_SUB_LIST = 17, - VC4_PACKET_RETURN_FROM_SUB_LIST = 18, - - VC4_PACKET_STORE_MS_TILE_BUFFER = 24, - VC4_PACKET_STORE_MS_TILE_BUFFER_AND_EOF = 25, - VC4_PACKET_STORE_FULL_RES_TILE_BUFFER = 26, - VC4_PACKET_LOAD_FULL_RES_TILE_BUFFER = 27, - VC4_PACKET_STORE_TILE_BUFFER_GENERAL = 28, - VC4_PACKET_LOAD_TILE_BUFFER_GENERAL = 29, - - VC4_PACKET_GL_INDEXED_PRIMITIVE = 32, - VC4_PACKET_GL_ARRAY_PRIMITIVE = 33, - - VC4_PACKET_COMPRESSED_PRIMITIVE = 48, - VC4_PACKET_CLIPPED_COMPRESSED_PRIMITIVE = 49, - - VC4_PACKET_PRIMITIVE_LIST_FORMAT = 56, - - VC4_PACKET_GL_SHADER_STATE = 64, - VC4_PACKET_NV_SHADER_STATE = 65, - VC4_PACKET_VG_SHADER_STATE = 66, - - VC4_PACKET_CONFIGURATION_BITS = 96, - VC4_PACKET_FLAT_SHADE_FLAGS = 97, - VC4_PACKET_POINT_SIZE = 98, - VC4_PACKET_LINE_WIDTH = 99, - VC4_PACKET_RHT_X_BOUNDARY = 100, - VC4_PACKET_DEPTH_OFFSET = 101, - VC4_PACKET_CLIP_WINDOW = 102, - VC4_PACKET_VIEWPORT_OFFSET = 103, - VC4_PACKET_Z_CLIPPING = 104, - VC4_PACKET_CLIPPER_XY_SCALING = 105, - VC4_PACKET_CLIPPER_Z_SCALING = 106, - - VC4_PACKET_TILE_BINNING_MODE_CONFIG = 112, - VC4_PACKET_TILE_RENDERING_MODE_CONFIG = 113, - VC4_PACKET_CLEAR_COLORS = 114, - VC4_PACKET_TILE_COORDINATES = 115, - - /* Not an actual hardware packet -- this is what we use to put - * references to GEM bos in the command stream, since we need the u32 - * int the actual address packet in order to store the offset from the - * start of the BO. - */ - VC4_PACKET_GEM_HANDLES = 254, -} __attribute__ ((__packed__)); - -#define VC4_PACKET_HALT_SIZE 1 -#define VC4_PACKET_NOP_SIZE 1 -#define VC4_PACKET_FLUSH_SIZE 1 -#define VC4_PACKET_FLUSH_ALL_SIZE 1 -#define VC4_PACKET_START_TILE_BINNING_SIZE 1 -#define VC4_PACKET_INCREMENT_SEMAPHORE_SIZE 1 -#define VC4_PACKET_WAIT_ON_SEMAPHORE_SIZE 1 -#define VC4_PACKET_BRANCH_SIZE 5 -#define VC4_PACKET_BRANCH_TO_SUB_LIST_SIZE 5 -#define VC4_PACKET_RETURN_FROM_SUB_LIST_SIZE 1 -#define VC4_PACKET_STORE_MS_TILE_BUFFER_SIZE 1 -#define VC4_PACKET_STORE_MS_TILE_BUFFER_AND_EOF_SIZE 1 -#define VC4_PACKET_STORE_FULL_RES_TILE_BUFFER_SIZE 5 -#define VC4_PACKET_LOAD_FULL_RES_TILE_BUFFER_SIZE 5 -#define VC4_PACKET_STORE_TILE_BUFFER_GENERAL_SIZE 7 -#define VC4_PACKET_LOAD_TILE_BUFFER_GENERAL_SIZE 7 -#define VC4_PACKET_GL_INDEXED_PRIMITIVE_SIZE 14 -#define VC4_PACKET_GL_ARRAY_PRIMITIVE_SIZE 10 -#define VC4_PACKET_COMPRESSED_PRIMITIVE_SIZE 1 -#define VC4_PACKET_CLIPPED_COMPRESSED_PRIMITIVE_SIZE 1 -#define VC4_PACKET_PRIMITIVE_LIST_FORMAT_SIZE 2 -#define VC4_PACKET_GL_SHADER_STATE_SIZE 5 -#define VC4_PACKET_NV_SHADER_STATE_SIZE 5 -#define VC4_PACKET_VG_SHADER_STATE_SIZE 5 -#define VC4_PACKET_CONFIGURATION_BITS_SIZE 4 -#define VC4_PACKET_FLAT_SHADE_FLAGS_SIZE 5 -#define VC4_PACKET_POINT_SIZE_SIZE 5 -#define VC4_PACKET_LINE_WIDTH_SIZE 5 -#define VC4_PACKET_RHT_X_BOUNDARY_SIZE 3 -#define VC4_PACKET_DEPTH_OFFSET_SIZE 5 -#define VC4_PACKET_CLIP_WINDOW_SIZE 9 -#define VC4_PACKET_VIEWPORT_OFFSET_SIZE 5 -#define VC4_PACKET_Z_CLIPPING_SIZE 9 -#define VC4_PACKET_CLIPPER_XY_SCALING_SIZE 9 -#define VC4_PACKET_CLIPPER_Z_SCALING_SIZE 9 -#define VC4_PACKET_TILE_BINNING_MODE_CONFIG_SIZE 16 -#define VC4_PACKET_TILE_RENDERING_MODE_CONFIG_SIZE 11 -#define VC4_PACKET_CLEAR_COLORS_SIZE 14 -#define VC4_PACKET_TILE_COORDINATES_SIZE 3 -#define VC4_PACKET_GEM_HANDLES_SIZE 9 - -#define VC4_MASK(high, low) (((1 << ((high) - (low) + 1)) - 1) << (low)) -/* Using the GNU statement expression extension */ -#define VC4_SET_FIELD(value, field) \ - ({ \ - uint32_t fieldval = (value) << field ## _SHIFT; \ - assert((fieldval & ~ field ## _MASK) == 0); \ - fieldval & field ## _MASK; \ - }) - -#define VC4_GET_FIELD(word, field) (((word) & field ## _MASK) >> field ## _SHIFT) - -/** @{ - * Bits used by packets like VC4_PACKET_STORE_TILE_BUFFER_GENERAL and - * VC4_PACKET_TILE_RENDERING_MODE_CONFIG. -*/ -#define VC4_TILING_FORMAT_LINEAR 0 -#define VC4_TILING_FORMAT_T 1 -#define VC4_TILING_FORMAT_LT 2 -/** @} */ - -/** @{ - * - * low bits of VC4_PACKET_STORE_FULL_RES_TILE_BUFFER and - * VC4_PACKET_LOAD_FULL_RES_TILE_BUFFER. - */ -#define VC4_LOADSTORE_FULL_RES_EOF (1 << 3) -#define VC4_LOADSTORE_FULL_RES_DISABLE_CLEAR_ALL (1 << 2) -#define VC4_LOADSTORE_FULL_RES_DISABLE_ZS (1 << 1) -#define VC4_LOADSTORE_FULL_RES_DISABLE_COLOR (1 << 0) - -/** @{ - * - * byte 2 of VC4_PACKET_STORE_TILE_BUFFER_GENERAL and - * VC4_PACKET_LOAD_TILE_BUFFER_GENERAL (low bits of the address) - */ - -#define VC4_LOADSTORE_TILE_BUFFER_EOF (1 << 3) -#define VC4_LOADSTORE_TILE_BUFFER_DISABLE_FULL_VG_MASK (1 << 2) -#define VC4_LOADSTORE_TILE_BUFFER_DISABLE_FULL_ZS (1 << 1) -#define VC4_LOADSTORE_TILE_BUFFER_DISABLE_FULL_COLOR (1 << 0) - -/** @} */ - -/** @{ - * - * byte 0-1 of VC4_PACKET_STORE_TILE_BUFFER_GENERAL and - * VC4_PACKET_LOAD_TILE_BUFFER_GENERAL - */ -#define VC4_STORE_TILE_BUFFER_DISABLE_VG_MASK_CLEAR (1 << 15) -#define VC4_STORE_TILE_BUFFER_DISABLE_ZS_CLEAR (1 << 14) -#define VC4_STORE_TILE_BUFFER_DISABLE_COLOR_CLEAR (1 << 13) -#define VC4_STORE_TILE_BUFFER_DISABLE_SWAP (1 << 12) - -#define VC4_LOADSTORE_TILE_BUFFER_FORMAT_MASK VC4_MASK(9, 8) -#define VC4_LOADSTORE_TILE_BUFFER_FORMAT_SHIFT 8 -#define VC4_LOADSTORE_TILE_BUFFER_RGBA8888 0 -#define VC4_LOADSTORE_TILE_BUFFER_BGR565_DITHER 1 -#define VC4_LOADSTORE_TILE_BUFFER_BGR565 2 -/** @} */ - -/** @{ - * - * byte 0 of VC4_PACKET_STORE_TILE_BUFFER_GENERAL and - * VC4_PACKET_LOAD_TILE_BUFFER_GENERAL - */ -#define VC4_STORE_TILE_BUFFER_MODE_MASK VC4_MASK(7, 6) -#define VC4_STORE_TILE_BUFFER_MODE_SHIFT 6 -#define VC4_STORE_TILE_BUFFER_MODE_SAMPLE0 (0 << 6) -#define VC4_STORE_TILE_BUFFER_MODE_DECIMATE_X4 (1 << 6) -#define VC4_STORE_TILE_BUFFER_MODE_DECIMATE_X16 (2 << 6) - -/** The values of the field are VC4_TILING_FORMAT_* */ -#define VC4_LOADSTORE_TILE_BUFFER_TILING_MASK VC4_MASK(5, 4) -#define VC4_LOADSTORE_TILE_BUFFER_TILING_SHIFT 4 - -#define VC4_LOADSTORE_TILE_BUFFER_BUFFER_MASK VC4_MASK(2, 0) -#define VC4_LOADSTORE_TILE_BUFFER_BUFFER_SHIFT 0 -#define VC4_LOADSTORE_TILE_BUFFER_NONE 0 -#define VC4_LOADSTORE_TILE_BUFFER_COLOR 1 -#define VC4_LOADSTORE_TILE_BUFFER_ZS 2 -#define VC4_LOADSTORE_TILE_BUFFER_Z 3 -#define VC4_LOADSTORE_TILE_BUFFER_VG_MASK 4 -#define VC4_LOADSTORE_TILE_BUFFER_FULL 5 -/** @} */ - -#define VC4_INDEX_BUFFER_U8 (0 << 4) -#define VC4_INDEX_BUFFER_U16 (1 << 4) - -/* This flag is only present in NV shader state. */ -#define VC4_SHADER_FLAG_SHADED_CLIP_COORDS (1 << 3) -#define VC4_SHADER_FLAG_ENABLE_CLIPPING (1 << 2) -#define VC4_SHADER_FLAG_VS_POINT_SIZE (1 << 1) -#define VC4_SHADER_FLAG_FS_SINGLE_THREAD (1 << 0) - -/** @{ byte 2 of config bits. */ -#define VC4_CONFIG_BITS_EARLY_Z_UPDATE (1 << 1) -#define VC4_CONFIG_BITS_EARLY_Z (1 << 0) -/** @} */ - -/** @{ byte 1 of config bits. */ -#define VC4_CONFIG_BITS_Z_UPDATE (1 << 7) -/** same values in this 3-bit field as PIPE_FUNC_* */ -#define VC4_CONFIG_BITS_DEPTH_FUNC_SHIFT 4 -#define VC4_CONFIG_BITS_COVERAGE_READ_LEAVE (1 << 3) - -#define VC4_CONFIG_BITS_COVERAGE_UPDATE_NONZERO (0 << 1) -#define VC4_CONFIG_BITS_COVERAGE_UPDATE_ODD (1 << 1) -#define VC4_CONFIG_BITS_COVERAGE_UPDATE_OR (2 << 1) -#define VC4_CONFIG_BITS_COVERAGE_UPDATE_ZERO (3 << 1) - -#define VC4_CONFIG_BITS_COVERAGE_PIPE_SELECT (1 << 0) -/** @} */ - -/** @{ byte 0 of config bits. */ -#define VC4_CONFIG_BITS_RASTERIZER_OVERSAMPLE_NONE (0 << 6) -#define VC4_CONFIG_BITS_RASTERIZER_OVERSAMPLE_4X (1 << 6) -#define VC4_CONFIG_BITS_RASTERIZER_OVERSAMPLE_16X (2 << 6) -#define VC4_CONFIG_BITS_RASTERIZER_OVERSAMPLE_MASK (3 << 6) - -#define VC4_CONFIG_BITS_AA_POINTS_AND_LINES (1 << 4) -#define VC4_CONFIG_BITS_ENABLE_DEPTH_OFFSET (1 << 3) -#define VC4_CONFIG_BITS_CW_PRIMITIVES (1 << 2) -#define VC4_CONFIG_BITS_ENABLE_PRIM_BACK (1 << 1) -#define VC4_CONFIG_BITS_ENABLE_PRIM_FRONT (1 << 0) -/** @} */ - -/** @{ bits in the last u8 of VC4_PACKET_TILE_BINNING_MODE_CONFIG */ -#define VC4_BIN_CONFIG_DB_NON_MS (1 << 7) - -#define VC4_BIN_CONFIG_ALLOC_BLOCK_SIZE_MASK VC4_MASK(6, 5) -#define VC4_BIN_CONFIG_ALLOC_BLOCK_SIZE_SHIFT 5 -#define VC4_BIN_CONFIG_ALLOC_BLOCK_SIZE_32 0 -#define VC4_BIN_CONFIG_ALLOC_BLOCK_SIZE_64 1 -#define VC4_BIN_CONFIG_ALLOC_BLOCK_SIZE_128 2 -#define VC4_BIN_CONFIG_ALLOC_BLOCK_SIZE_256 3 - -#define VC4_BIN_CONFIG_ALLOC_INIT_BLOCK_SIZE_MASK VC4_MASK(4, 3) -#define VC4_BIN_CONFIG_ALLOC_INIT_BLOCK_SIZE_SHIFT 3 -#define VC4_BIN_CONFIG_ALLOC_INIT_BLOCK_SIZE_32 0 -#define VC4_BIN_CONFIG_ALLOC_INIT_BLOCK_SIZE_64 1 -#define VC4_BIN_CONFIG_ALLOC_INIT_BLOCK_SIZE_128 2 -#define VC4_BIN_CONFIG_ALLOC_INIT_BLOCK_SIZE_256 3 - -#define VC4_BIN_CONFIG_AUTO_INIT_TSDA (1 << 2) -#define VC4_BIN_CONFIG_TILE_BUFFER_64BIT (1 << 1) -#define VC4_BIN_CONFIG_MS_MODE_4X (1 << 0) -/** @} */ - -/** @{ bits in the last u16 of VC4_PACKET_TILE_RENDERING_MODE_CONFIG */ -#define VC4_RENDER_CONFIG_DB_NON_MS (1 << 12) -#define VC4_RENDER_CONFIG_EARLY_Z_COVERAGE_DISABLE (1 << 11) -#define VC4_RENDER_CONFIG_EARLY_Z_DIRECTION_G (1 << 10) -#define VC4_RENDER_CONFIG_COVERAGE_MODE (1 << 9) -#define VC4_RENDER_CONFIG_ENABLE_VG_MASK (1 << 8) - -/** The values of the field are VC4_TILING_FORMAT_* */ -#define VC4_RENDER_CONFIG_MEMORY_FORMAT_MASK VC4_MASK(7, 6) -#define VC4_RENDER_CONFIG_MEMORY_FORMAT_SHIFT 6 - -#define VC4_RENDER_CONFIG_DECIMATE_MODE_1X (0 << 4) -#define VC4_RENDER_CONFIG_DECIMATE_MODE_4X (1 << 4) -#define VC4_RENDER_CONFIG_DECIMATE_MODE_16X (2 << 4) -#define VC4_RENDER_CONFIG_DECIMATE_MODE_MASK (3 << 4) - -#define VC4_RENDER_CONFIG_FORMAT_MASK VC4_MASK(3, 2) -#define VC4_RENDER_CONFIG_FORMAT_SHIFT 2 -#define VC4_RENDER_CONFIG_FORMAT_BGR565_DITHERED 0 -#define VC4_RENDER_CONFIG_FORMAT_RGBA8888 1 -#define VC4_RENDER_CONFIG_FORMAT_BGR565 2 - -#define VC4_RENDER_CONFIG_TILE_BUFFER_64BIT (1 << 1) -#define VC4_RENDER_CONFIG_MS_MODE_4X (1 << 0) - -#define VC4_PRIMITIVE_LIST_FORMAT_16_INDEX (1 << 4) -#define VC4_PRIMITIVE_LIST_FORMAT_32_XY (3 << 4) -#define VC4_PRIMITIVE_LIST_FORMAT_TYPE_POINTS (0 << 0) -#define VC4_PRIMITIVE_LIST_FORMAT_TYPE_LINES (1 << 0) -#define VC4_PRIMITIVE_LIST_FORMAT_TYPE_TRIANGLES (2 << 0) -#define VC4_PRIMITIVE_LIST_FORMAT_TYPE_RHT (3 << 0) - -enum vc4_texture_data_type { - VC4_TEXTURE_TYPE_RGBA8888 = 0, - VC4_TEXTURE_TYPE_RGBX8888 = 1, - VC4_TEXTURE_TYPE_RGBA4444 = 2, - VC4_TEXTURE_TYPE_RGBA5551 = 3, - VC4_TEXTURE_TYPE_RGB565 = 4, - VC4_TEXTURE_TYPE_LUMINANCE = 5, - VC4_TEXTURE_TYPE_ALPHA = 6, - VC4_TEXTURE_TYPE_LUMALPHA = 7, - VC4_TEXTURE_TYPE_ETC1 = 8, - VC4_TEXTURE_TYPE_S16F = 9, - VC4_TEXTURE_TYPE_S8 = 10, - VC4_TEXTURE_TYPE_S16 = 11, - VC4_TEXTURE_TYPE_BW1 = 12, - VC4_TEXTURE_TYPE_A4 = 13, - VC4_TEXTURE_TYPE_A1 = 14, - VC4_TEXTURE_TYPE_RGBA64 = 15, - VC4_TEXTURE_TYPE_RGBA32R = 16, - VC4_TEXTURE_TYPE_YUV422R = 17, -}; - -#define VC4_TEX_P0_OFFSET_MASK VC4_MASK(31, 12) -#define VC4_TEX_P0_OFFSET_SHIFT 12 -#define VC4_TEX_P0_CSWIZ_MASK VC4_MASK(11, 10) -#define VC4_TEX_P0_CSWIZ_SHIFT 10 -#define VC4_TEX_P0_CMMODE_MASK VC4_MASK(9, 9) -#define VC4_TEX_P0_CMMODE_SHIFT 9 -#define VC4_TEX_P0_FLIPY_MASK VC4_MASK(8, 8) -#define VC4_TEX_P0_FLIPY_SHIFT 8 -#define VC4_TEX_P0_TYPE_MASK VC4_MASK(7, 4) -#define VC4_TEX_P0_TYPE_SHIFT 4 -#define VC4_TEX_P0_MIPLVLS_MASK VC4_MASK(3, 0) -#define VC4_TEX_P0_MIPLVLS_SHIFT 0 - -#define VC4_TEX_P1_TYPE4_MASK VC4_MASK(31, 31) -#define VC4_TEX_P1_TYPE4_SHIFT 31 -#define VC4_TEX_P1_HEIGHT_MASK VC4_MASK(30, 20) -#define VC4_TEX_P1_HEIGHT_SHIFT 20 -#define VC4_TEX_P1_ETCFLIP_MASK VC4_MASK(19, 19) -#define VC4_TEX_P1_ETCFLIP_SHIFT 19 -#define VC4_TEX_P1_WIDTH_MASK VC4_MASK(18, 8) -#define VC4_TEX_P1_WIDTH_SHIFT 8 - -#define VC4_TEX_P1_MAGFILT_MASK VC4_MASK(7, 7) -#define VC4_TEX_P1_MAGFILT_SHIFT 7 -# define VC4_TEX_P1_MAGFILT_LINEAR 0 -# define VC4_TEX_P1_MAGFILT_NEAREST 1 - -#define VC4_TEX_P1_MINFILT_MASK VC4_MASK(6, 4) -#define VC4_TEX_P1_MINFILT_SHIFT 4 -# define VC4_TEX_P1_MINFILT_LINEAR 0 -# define VC4_TEX_P1_MINFILT_NEAREST 1 -# define VC4_TEX_P1_MINFILT_NEAR_MIP_NEAR 2 -# define VC4_TEX_P1_MINFILT_NEAR_MIP_LIN 3 -# define VC4_TEX_P1_MINFILT_LIN_MIP_NEAR 4 -# define VC4_TEX_P1_MINFILT_LIN_MIP_LIN 5 - -#define VC4_TEX_P1_WRAP_T_MASK VC4_MASK(3, 2) -#define VC4_TEX_P1_WRAP_T_SHIFT 2 -#define VC4_TEX_P1_WRAP_S_MASK VC4_MASK(1, 0) -#define VC4_TEX_P1_WRAP_S_SHIFT 0 -# define VC4_TEX_P1_WRAP_REPEAT 0 -# define VC4_TEX_P1_WRAP_CLAMP 1 -# define VC4_TEX_P1_WRAP_MIRROR 2 -# define VC4_TEX_P1_WRAP_BORDER 3 - -#define VC4_TEX_P2_PTYPE_MASK VC4_MASK(31, 30) -#define VC4_TEX_P2_PTYPE_SHIFT 30 -# define VC4_TEX_P2_PTYPE_IGNORED 0 -# define VC4_TEX_P2_PTYPE_CUBE_MAP_STRIDE 1 -# define VC4_TEX_P2_PTYPE_CHILD_IMAGE_DIMENSIONS 2 -# define VC4_TEX_P2_PTYPE_CHILD_IMAGE_OFFSETS 3 - -/* VC4_TEX_P2_PTYPE_CUBE_MAP_STRIDE bits */ -#define VC4_TEX_P2_CMST_MASK VC4_MASK(29, 12) -#define VC4_TEX_P2_CMST_SHIFT 12 -#define VC4_TEX_P2_BSLOD_MASK VC4_MASK(0, 0) -#define VC4_TEX_P2_BSLOD_SHIFT 0 - -/* VC4_TEX_P2_PTYPE_CHILD_IMAGE_DIMENSIONS */ -#define VC4_TEX_P2_CHEIGHT_MASK VC4_MASK(22, 12) -#define VC4_TEX_P2_CHEIGHT_SHIFT 12 -#define VC4_TEX_P2_CWIDTH_MASK VC4_MASK(10, 0) -#define VC4_TEX_P2_CWIDTH_SHIFT 0 - -/* VC4_TEX_P2_PTYPE_CHILD_IMAGE_OFFSETS */ -#define VC4_TEX_P2_CYOFF_MASK VC4_MASK(22, 12) -#define VC4_TEX_P2_CYOFF_SHIFT 12 -#define VC4_TEX_P2_CXOFF_MASK VC4_MASK(10, 0) -#define VC4_TEX_P2_CXOFF_SHIFT 0 - -#endif /* VC4_PACKET_H */ diff --git a/prebuilts/arm/include/libdrm/vc4_qpu_defines.h b/prebuilts/arm/include/libdrm/vc4_qpu_defines.h deleted file mode 100644 index 26fcf50..0000000 --- a/prebuilts/arm/include/libdrm/vc4_qpu_defines.h +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright © 2014 Broadcom - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef VC4_QPU_DEFINES_H -#define VC4_QPU_DEFINES_H - -enum qpu_op_add { - QPU_A_NOP, - QPU_A_FADD, - QPU_A_FSUB, - QPU_A_FMIN, - QPU_A_FMAX, - QPU_A_FMINABS, - QPU_A_FMAXABS, - QPU_A_FTOI, - QPU_A_ITOF, - QPU_A_ADD = 12, - QPU_A_SUB, - QPU_A_SHR, - QPU_A_ASR, - QPU_A_ROR, - QPU_A_SHL, - QPU_A_MIN, - QPU_A_MAX, - QPU_A_AND, - QPU_A_OR, - QPU_A_XOR, - QPU_A_NOT, - QPU_A_CLZ, - QPU_A_V8ADDS = 30, - QPU_A_V8SUBS = 31, -}; - -enum qpu_op_mul { - QPU_M_NOP, - QPU_M_FMUL, - QPU_M_MUL24, - QPU_M_V8MULD, - QPU_M_V8MIN, - QPU_M_V8MAX, - QPU_M_V8ADDS, - QPU_M_V8SUBS, -}; - -enum qpu_raddr { - QPU_R_FRAG_PAYLOAD_ZW = 15, /* W for A file, Z for B file */ - /* 0-31 are the plain regfile a or b fields */ - QPU_R_UNIF = 32, - QPU_R_VARY = 35, - QPU_R_ELEM_QPU = 38, - QPU_R_NOP, - QPU_R_XY_PIXEL_COORD = 41, - QPU_R_MS_REV_FLAGS = 42, - QPU_R_VPM = 48, - QPU_R_VPM_LD_BUSY, - QPU_R_VPM_LD_WAIT, - QPU_R_MUTEX_ACQUIRE, -}; - -enum qpu_waddr { - /* 0-31 are the plain regfile a or b fields */ - QPU_W_ACC0 = 32, /* aka r0 */ - QPU_W_ACC1, - QPU_W_ACC2, - QPU_W_ACC3, - QPU_W_TMU_NOSWAP, - QPU_W_ACC5, - QPU_W_HOST_INT, - QPU_W_NOP, - QPU_W_UNIFORMS_ADDRESS, - QPU_W_QUAD_XY, /* X for regfile a, Y for regfile b */ - QPU_W_MS_FLAGS = 42, - QPU_W_REV_FLAG = 42, - QPU_W_TLB_STENCIL_SETUP = 43, - QPU_W_TLB_Z, - QPU_W_TLB_COLOR_MS, - QPU_W_TLB_COLOR_ALL, - QPU_W_TLB_ALPHA_MASK, - QPU_W_VPM, - QPU_W_VPMVCD_SETUP, /* LD for regfile a, ST for regfile b */ - QPU_W_VPM_ADDR, /* LD for regfile a, ST for regfile b */ - QPU_W_MUTEX_RELEASE, - QPU_W_SFU_RECIP, - QPU_W_SFU_RECIPSQRT, - QPU_W_SFU_EXP, - QPU_W_SFU_LOG, - QPU_W_TMU0_S, - QPU_W_TMU0_T, - QPU_W_TMU0_R, - QPU_W_TMU0_B, - QPU_W_TMU1_S, - QPU_W_TMU1_T, - QPU_W_TMU1_R, - QPU_W_TMU1_B, -}; - -enum qpu_sig_bits { - QPU_SIG_SW_BREAKPOINT, - QPU_SIG_NONE, - QPU_SIG_THREAD_SWITCH, - QPU_SIG_PROG_END, - QPU_SIG_WAIT_FOR_SCOREBOARD, - QPU_SIG_SCOREBOARD_UNLOCK, - QPU_SIG_LAST_THREAD_SWITCH, - QPU_SIG_COVERAGE_LOAD, - QPU_SIG_COLOR_LOAD, - QPU_SIG_COLOR_LOAD_END, - QPU_SIG_LOAD_TMU0, - QPU_SIG_LOAD_TMU1, - QPU_SIG_ALPHA_MASK_LOAD, - QPU_SIG_SMALL_IMM, - QPU_SIG_LOAD_IMM, - QPU_SIG_BRANCH -}; - -enum qpu_mux { - /* hardware mux values */ - QPU_MUX_R0, - QPU_MUX_R1, - QPU_MUX_R2, - QPU_MUX_R3, - QPU_MUX_R4, - QPU_MUX_R5, - QPU_MUX_A, - QPU_MUX_B, - - /** - * Non-hardware mux value, stores a small immediate field to be - * programmed into raddr_b in the qpu_reg.index. - */ - QPU_MUX_SMALL_IMM, -}; - -enum qpu_cond { - QPU_COND_NEVER, - QPU_COND_ALWAYS, - QPU_COND_ZS, - QPU_COND_ZC, - QPU_COND_NS, - QPU_COND_NC, - QPU_COND_CS, - QPU_COND_CC, -}; - -enum qpu_pack_mul { - QPU_PACK_MUL_NOP, - QPU_PACK_MUL_8888 = 3, /* replicated to each 8 bits of the 32-bit dst. */ - QPU_PACK_MUL_8A, - QPU_PACK_MUL_8B, - QPU_PACK_MUL_8C, - QPU_PACK_MUL_8D, -}; - -enum qpu_pack_a { - QPU_PACK_A_NOP, - /* convert to 16 bit float if float input, or to int16. */ - QPU_PACK_A_16A, - QPU_PACK_A_16B, - /* replicated to each 8 bits of the 32-bit dst. */ - QPU_PACK_A_8888, - /* Convert to 8-bit unsigned int. */ - QPU_PACK_A_8A, - QPU_PACK_A_8B, - QPU_PACK_A_8C, - QPU_PACK_A_8D, - - /* Saturating variants of the previous instructions. */ - QPU_PACK_A_32_SAT, /* int-only */ - QPU_PACK_A_16A_SAT, /* int or float */ - QPU_PACK_A_16B_SAT, - QPU_PACK_A_8888_SAT, - QPU_PACK_A_8A_SAT, - QPU_PACK_A_8B_SAT, - QPU_PACK_A_8C_SAT, - QPU_PACK_A_8D_SAT, -}; - -enum qpu_unpack { - QPU_UNPACK_NOP, - QPU_UNPACK_16A, - QPU_UNPACK_16B, - QPU_UNPACK_8D_REP, - QPU_UNPACK_8A, - QPU_UNPACK_8B, - QPU_UNPACK_8C, - QPU_UNPACK_8D, -}; - -#define QPU_MASK(high, low) ((((uint64_t)1<<((high)-(low)+1))-1)<<(low)) -/* Using the GNU statement expression extension */ -#define QPU_SET_FIELD(value, field) \ - ({ \ - uint64_t fieldval = (uint64_t)(value) << field ## _SHIFT; \ - assert((fieldval & ~ field ## _MASK) == 0); \ - fieldval & field ## _MASK; \ - }) - -#define QPU_GET_FIELD(word, field) ((uint32_t)(((word) & field ## _MASK) >> field ## _SHIFT)) - -#define QPU_UPDATE_FIELD(inst, value, field) \ - (((inst) & ~(field ## _MASK)) | QPU_SET_FIELD(value, field)) - -#define QPU_SIG_SHIFT 60 -#define QPU_SIG_MASK QPU_MASK(63, 60) - -#define QPU_UNPACK_SHIFT 57 -#define QPU_UNPACK_MASK QPU_MASK(59, 57) - -/** - * If set, the pack field means PACK_MUL or R4 packing, instead of normal - * regfile a packing. - */ -#define QPU_PM ((uint64_t)1 << 56) - -#define QPU_PACK_SHIFT 52 -#define QPU_PACK_MASK QPU_MASK(55, 52) - -#define QPU_COND_ADD_SHIFT 49 -#define QPU_COND_ADD_MASK QPU_MASK(51, 49) -#define QPU_COND_MUL_SHIFT 46 -#define QPU_COND_MUL_MASK QPU_MASK(48, 46) - -#define QPU_SF ((uint64_t)1 << 45) - -#define QPU_WADDR_ADD_SHIFT 38 -#define QPU_WADDR_ADD_MASK QPU_MASK(43, 38) -#define QPU_WADDR_MUL_SHIFT 32 -#define QPU_WADDR_MUL_MASK QPU_MASK(37, 32) - -#define QPU_OP_MUL_SHIFT 29 -#define QPU_OP_MUL_MASK QPU_MASK(31, 29) - -#define QPU_RADDR_A_SHIFT 18 -#define QPU_RADDR_A_MASK QPU_MASK(23, 18) -#define QPU_RADDR_B_SHIFT 12 -#define QPU_RADDR_B_MASK QPU_MASK(17, 12) -#define QPU_SMALL_IMM_SHIFT 12 -#define QPU_SMALL_IMM_MASK QPU_MASK(17, 12) - -#define QPU_ADD_A_SHIFT 9 -#define QPU_ADD_A_MASK QPU_MASK(11, 9) -#define QPU_ADD_B_SHIFT 6 -#define QPU_ADD_B_MASK QPU_MASK(8, 6) -#define QPU_MUL_A_SHIFT 3 -#define QPU_MUL_A_MASK QPU_MASK(5, 3) -#define QPU_MUL_B_SHIFT 0 -#define QPU_MUL_B_MASK QPU_MASK(2, 0) - -#define QPU_WS ((uint64_t)1 << 44) - -#define QPU_OP_ADD_SHIFT 24 -#define QPU_OP_ADD_MASK QPU_MASK(28, 24) - -#endif /* VC4_QPU_DEFINES_H */ diff --git a/prebuilts/arm/include/libdrm/via_drm.h b/prebuilts/arm/include/libdrm/via_drm.h deleted file mode 100644 index 8b69e81..0000000 --- a/prebuilts/arm/include/libdrm/via_drm.h +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. - * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sub license, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ -#ifndef _VIA_DRM_H_ -#define _VIA_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: These defines must be the same as what the Xserver uses. - * if you change them, you must change the defines in the Xserver. - */ - -#ifndef _VIA_DEFINES_ -#define _VIA_DEFINES_ - -#include "via_drmclient.h" - -#define VIA_NR_SAREA_CLIPRECTS 8 -#define VIA_NR_XVMC_PORTS 10 -#define VIA_NR_XVMC_LOCKS 5 -#define VIA_MAX_CACHELINE_SIZE 64 -#define XVMCLOCKPTR(saPriv,lockNo) \ - ((__volatile__ struct drm_hw_lock *)(((((unsigned long) (saPriv)->XvMCLockArea) + \ - (VIA_MAX_CACHELINE_SIZE - 1)) & \ - ~(VIA_MAX_CACHELINE_SIZE - 1)) + \ - VIA_MAX_CACHELINE_SIZE*(lockNo))) - -/* Each region is a minimum of 64k, and there are at most 64 of them. - */ -#define VIA_NR_TEX_REGIONS 64 -#define VIA_LOG_MIN_TEX_REGION_SIZE 16 -#endif - -#define VIA_UPLOAD_TEX0IMAGE 0x1 /* handled clientside */ -#define VIA_UPLOAD_TEX1IMAGE 0x2 /* handled clientside */ -#define VIA_UPLOAD_CTX 0x4 -#define VIA_UPLOAD_BUFFERS 0x8 -#define VIA_UPLOAD_TEX0 0x10 -#define VIA_UPLOAD_TEX1 0x20 -#define VIA_UPLOAD_CLIPRECTS 0x40 -#define VIA_UPLOAD_ALL 0xff - -/* VIA specific ioctls */ -#define DRM_VIA_ALLOCMEM 0x00 -#define DRM_VIA_FREEMEM 0x01 -#define DRM_VIA_AGP_INIT 0x02 -#define DRM_VIA_FB_INIT 0x03 -#define DRM_VIA_MAP_INIT 0x04 -#define DRM_VIA_DEC_FUTEX 0x05 -#define NOT_USED -#define DRM_VIA_DMA_INIT 0x07 -#define DRM_VIA_CMDBUFFER 0x08 -#define DRM_VIA_FLUSH 0x09 -#define DRM_VIA_PCICMD 0x0a -#define DRM_VIA_CMDBUF_SIZE 0x0b -#define NOT_USED -#define DRM_VIA_WAIT_IRQ 0x0d -#define DRM_VIA_DMA_BLIT 0x0e -#define DRM_VIA_BLIT_SYNC 0x0f - -#define DRM_IOCTL_VIA_ALLOCMEM DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_ALLOCMEM, drm_via_mem_t) -#define DRM_IOCTL_VIA_FREEMEM DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_FREEMEM, drm_via_mem_t) -#define DRM_IOCTL_VIA_AGP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_AGP_INIT, drm_via_agp_t) -#define DRM_IOCTL_VIA_FB_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_FB_INIT, drm_via_fb_t) -#define DRM_IOCTL_VIA_MAP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_MAP_INIT, drm_via_init_t) -#define DRM_IOCTL_VIA_DEC_FUTEX DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_DEC_FUTEX, drm_via_futex_t) -#define DRM_IOCTL_VIA_DMA_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_DMA_INIT, drm_via_dma_init_t) -#define DRM_IOCTL_VIA_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_CMDBUFFER, drm_via_cmdbuffer_t) -#define DRM_IOCTL_VIA_FLUSH DRM_IO( DRM_COMMAND_BASE + DRM_VIA_FLUSH) -#define DRM_IOCTL_VIA_PCICMD DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_PCICMD, drm_via_cmdbuffer_t) -#define DRM_IOCTL_VIA_CMDBUF_SIZE DRM_IOWR( DRM_COMMAND_BASE + DRM_VIA_CMDBUF_SIZE, \ - drm_via_cmdbuf_size_t) -#define DRM_IOCTL_VIA_WAIT_IRQ DRM_IOWR( DRM_COMMAND_BASE + DRM_VIA_WAIT_IRQ, drm_via_irqwait_t) -#define DRM_IOCTL_VIA_DMA_BLIT DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_DMA_BLIT, drm_via_dmablit_t) -#define DRM_IOCTL_VIA_BLIT_SYNC DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_BLIT_SYNC, drm_via_blitsync_t) - -/* Indices into buf.Setup where various bits of state are mirrored per - * context and per buffer. These can be fired at the card as a unit, - * or in a piecewise fashion as required. - */ - -#define VIA_TEX_SETUP_SIZE 8 - -/* Flags for clear ioctl - */ -#define VIA_FRONT 0x1 -#define VIA_BACK 0x2 -#define VIA_DEPTH 0x4 -#define VIA_STENCIL 0x8 -#define VIA_MEM_VIDEO 0 /* matches drm constant */ -#define VIA_MEM_AGP 1 /* matches drm constant */ -#define VIA_MEM_SYSTEM 2 -#define VIA_MEM_MIXED 3 -#define VIA_MEM_UNKNOWN 4 - -typedef struct { - __u32 offset; - __u32 size; -} drm_via_agp_t; - -typedef struct { - __u32 offset; - __u32 size; -} drm_via_fb_t; - -typedef struct { - __u32 context; - __u32 type; - __u32 size; - unsigned long index; - unsigned long offset; -} drm_via_mem_t; - -typedef struct _drm_via_init { - enum { - VIA_INIT_MAP = 0x01, - VIA_CLEANUP_MAP = 0x02 - } func; - - unsigned long sarea_priv_offset; - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long agpAddr; -} drm_via_init_t; - -typedef struct _drm_via_futex { - enum { - VIA_FUTEX_WAIT = 0x00, - VIA_FUTEX_WAKE = 0X01 - } func; - __u32 ms; - __u32 lock; - __u32 val; -} drm_via_futex_t; - -typedef struct _drm_via_dma_init { - enum { - VIA_INIT_DMA = 0x01, - VIA_CLEANUP_DMA = 0x02, - VIA_DMA_INITIALIZED = 0x03 - } func; - - unsigned long offset; - unsigned long size; - unsigned long reg_pause_addr; -} drm_via_dma_init_t; - -typedef struct _drm_via_cmdbuffer { - char *buf; - unsigned long size; -} drm_via_cmdbuffer_t; - -/* Warning: If you change the SAREA structure you must change the Xserver - * structure as well */ - -typedef struct _drm_via_tex_region { - unsigned char next, prev; /* indices to form a circular LRU */ - unsigned char inUse; /* owned by a client, or free? */ - int age; /* tracked by clients to update local LRU's */ -} drm_via_tex_region_t; - -typedef struct _drm_via_sarea { - unsigned int dirty; - unsigned int nbox; - struct drm_clip_rect boxes[VIA_NR_SAREA_CLIPRECTS]; - drm_via_tex_region_t texList[VIA_NR_TEX_REGIONS + 1]; - int texAge; /* last time texture was uploaded */ - int ctxOwner; /* last context to upload state */ - int vertexPrim; - - /* - * Below is for XvMC. - * We want the lock integers alone on, and aligned to, a cache line. - * Therefore this somewhat strange construct. - */ - - char XvMCLockArea[VIA_MAX_CACHELINE_SIZE * (VIA_NR_XVMC_LOCKS + 1)]; - - unsigned int XvMCDisplaying[VIA_NR_XVMC_PORTS]; - unsigned int XvMCSubPicOn[VIA_NR_XVMC_PORTS]; - unsigned int XvMCCtxNoGrabbed; /* Last context to hold decoder */ - - /* Used by the 3d driver only at this point, for pageflipping: - */ - unsigned int pfCurrentOffset; -} drm_via_sarea_t; - -typedef struct _drm_via_cmdbuf_size { - enum { - VIA_CMDBUF_SPACE = 0x01, - VIA_CMDBUF_LAG = 0x02 - } func; - int wait; - __u32 size; -} drm_via_cmdbuf_size_t; - -typedef enum { - VIA_IRQ_ABSOLUTE = 0x0, - VIA_IRQ_RELATIVE = 0x1, - VIA_IRQ_SIGNAL = 0x10000000, - VIA_IRQ_FORCE_SEQUENCE = 0x20000000 -} via_irq_seq_type_t; - -#define VIA_IRQ_FLAGS_MASK 0xF0000000 - -enum drm_via_irqs { - drm_via_irq_hqv0 = 0, - drm_via_irq_hqv1, - drm_via_irq_dma0_dd, - drm_via_irq_dma0_td, - drm_via_irq_dma1_dd, - drm_via_irq_dma1_td, - drm_via_irq_num -}; - -struct drm_via_wait_irq_request { - unsigned irq; - via_irq_seq_type_t type; - __u32 sequence; - __u32 signal; -}; - -typedef union drm_via_irqwait { - struct drm_via_wait_irq_request request; - struct drm_wait_vblank_reply reply; -} drm_via_irqwait_t; - -typedef struct drm_via_blitsync { - __u32 sync_handle; - unsigned engine; -} drm_via_blitsync_t; - -/* - * Below,"flags" is currently unused but will be used for possible future - * extensions like kernel space bounce buffers for bad alignments and - * blit engine busy-wait polling for better latency in the absence of - * interrupts. - */ - -typedef struct drm_via_dmablit { - __u32 num_lines; - __u32 line_length; - - __u32 fb_addr; - __u32 fb_stride; - - unsigned char *mem_addr; - __u32 mem_stride; - - __u32 flags; - int to_fb; - - drm_via_blitsync_t sync; -} drm_via_dmablit_t; - -#if defined(__cplusplus) -} -#endif - -#endif /* _VIA_DRM_H_ */ diff --git a/prebuilts/arm/include/libdrm/virtgpu_drm.h b/prebuilts/arm/include/libdrm/virtgpu_drm.h deleted file mode 100644 index f06a789..0000000 --- a/prebuilts/arm/include/libdrm/virtgpu_drm.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright 2013 Red Hat - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef VIRTGPU_DRM_H -#define VIRTGPU_DRM_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints. - * - * Do not use pointers, use __u64 instead for 32 bit / 64 bit user/kernel - * compatibility Keep fields aligned to their size - */ - -#define DRM_VIRTGPU_MAP 0x01 -#define DRM_VIRTGPU_EXECBUFFER 0x02 -#define DRM_VIRTGPU_GETPARAM 0x03 -#define DRM_VIRTGPU_RESOURCE_CREATE 0x04 -#define DRM_VIRTGPU_RESOURCE_INFO 0x05 -#define DRM_VIRTGPU_TRANSFER_FROM_HOST 0x06 -#define DRM_VIRTGPU_TRANSFER_TO_HOST 0x07 -#define DRM_VIRTGPU_WAIT 0x08 -#define DRM_VIRTGPU_GET_CAPS 0x09 - -#define VIRTGPU_EXECBUF_FENCE_FD_IN 0x01 -#define VIRTGPU_EXECBUF_FENCE_FD_OUT 0x02 -#define VIRTGPU_EXECBUF_FLAGS (\ - VIRTGPU_EXECBUF_FENCE_FD_IN |\ - VIRTGPU_EXECBUF_FENCE_FD_OUT |\ - 0) - -struct drm_virtgpu_map { - __u64 offset; /* use for mmap system call */ - __u32 handle; - __u32 pad; -}; - -struct drm_virtgpu_execbuffer { - __u32 flags; - __u32 size; - __u64 command; /* void* */ - __u64 bo_handles; - __u32 num_bo_handles; - __s32 fence_fd; /* in/out fence fd (see VIRTGPU_EXECBUF_FENCE_FD_IN/OUT) */ -}; - -#define VIRTGPU_PARAM_3D_FEATURES 1 /* do we have 3D features in the hw */ -#define VIRTGPU_PARAM_CAPSET_QUERY_FIX 2 /* do we have the capset fix */ - -struct drm_virtgpu_getparam { - __u64 param; - __u64 value; -}; - -/* NO_BO flags? NO resource flag? */ -/* resource flag for y_0_top */ -struct drm_virtgpu_resource_create { - __u32 target; - __u32 format; - __u32 bind; - __u32 width; - __u32 height; - __u32 depth; - __u32 array_size; - __u32 last_level; - __u32 nr_samples; - __u32 flags; - __u32 bo_handle; /* if this is set - recreate a new resource attached to this bo ? */ - __u32 res_handle; /* returned by kernel */ - __u32 size; /* validate transfer in the host */ - __u32 stride; /* validate transfer in the host */ -}; - -struct drm_virtgpu_resource_info { - __u32 bo_handle; - __u32 res_handle; - __u32 size; - __u32 stride; -}; - -struct drm_virtgpu_3d_box { - __u32 x; - __u32 y; - __u32 z; - __u32 w; - __u32 h; - __u32 d; -}; - -struct drm_virtgpu_3d_transfer_to_host { - __u32 bo_handle; - struct drm_virtgpu_3d_box box; - __u32 level; - __u32 offset; -}; - -struct drm_virtgpu_3d_transfer_from_host { - __u32 bo_handle; - struct drm_virtgpu_3d_box box; - __u32 level; - __u32 offset; -}; - -#define VIRTGPU_WAIT_NOWAIT 1 /* like it */ -struct drm_virtgpu_3d_wait { - __u32 handle; /* 0 is an invalid handle */ - __u32 flags; -}; - -struct drm_virtgpu_get_caps { - __u32 cap_set_id; - __u32 cap_set_ver; - __u64 addr; - __u32 size; - __u32 pad; -}; - -#define DRM_IOCTL_VIRTGPU_MAP \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_MAP, struct drm_virtgpu_map) - -#define DRM_IOCTL_VIRTGPU_EXECBUFFER \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_EXECBUFFER,\ - struct drm_virtgpu_execbuffer) - -#define DRM_IOCTL_VIRTGPU_GETPARAM \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GETPARAM,\ - struct drm_virtgpu_getparam) - -#define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE, \ - struct drm_virtgpu_resource_create) - -#define DRM_IOCTL_VIRTGPU_RESOURCE_INFO \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_INFO, \ - struct drm_virtgpu_resource_info) - -#define DRM_IOCTL_VIRTGPU_TRANSFER_FROM_HOST \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_TRANSFER_FROM_HOST, \ - struct drm_virtgpu_3d_transfer_from_host) - -#define DRM_IOCTL_VIRTGPU_TRANSFER_TO_HOST \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_TRANSFER_TO_HOST, \ - struct drm_virtgpu_3d_transfer_to_host) - -#define DRM_IOCTL_VIRTGPU_WAIT \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_WAIT, \ - struct drm_virtgpu_3d_wait) - -#define DRM_IOCTL_VIRTGPU_GET_CAPS \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GET_CAPS, \ - struct drm_virtgpu_get_caps) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/arm/include/libdrm/vmwgfx_drm.h b/prebuilts/arm/include/libdrm/vmwgfx_drm.h deleted file mode 100644 index 2b8d47e..0000000 --- a/prebuilts/arm/include/libdrm/vmwgfx_drm.h +++ /dev/null @@ -1,1128 +0,0 @@ -/************************************************************************** - * - * Copyright © 2009-2015 VMware, Inc., Palo Alto, CA., USA - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **************************************************************************/ - -#ifndef __VMWGFX_DRM_H__ -#define __VMWGFX_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_VMW_MAX_SURFACE_FACES 6 -#define DRM_VMW_MAX_MIP_LEVELS 24 - - -#define DRM_VMW_GET_PARAM 0 -#define DRM_VMW_ALLOC_DMABUF 1 -#define DRM_VMW_UNREF_DMABUF 2 -#define DRM_VMW_HANDLE_CLOSE 2 -#define DRM_VMW_CURSOR_BYPASS 3 -/* guarded by DRM_VMW_PARAM_NUM_STREAMS != 0*/ -#define DRM_VMW_CONTROL_STREAM 4 -#define DRM_VMW_CLAIM_STREAM 5 -#define DRM_VMW_UNREF_STREAM 6 -/* guarded by DRM_VMW_PARAM_3D == 1 */ -#define DRM_VMW_CREATE_CONTEXT 7 -#define DRM_VMW_UNREF_CONTEXT 8 -#define DRM_VMW_CREATE_SURFACE 9 -#define DRM_VMW_UNREF_SURFACE 10 -#define DRM_VMW_REF_SURFACE 11 -#define DRM_VMW_EXECBUF 12 -#define DRM_VMW_GET_3D_CAP 13 -#define DRM_VMW_FENCE_WAIT 14 -#define DRM_VMW_FENCE_SIGNALED 15 -#define DRM_VMW_FENCE_UNREF 16 -#define DRM_VMW_FENCE_EVENT 17 -#define DRM_VMW_PRESENT 18 -#define DRM_VMW_PRESENT_READBACK 19 -#define DRM_VMW_UPDATE_LAYOUT 20 -#define DRM_VMW_CREATE_SHADER 21 -#define DRM_VMW_UNREF_SHADER 22 -#define DRM_VMW_GB_SURFACE_CREATE 23 -#define DRM_VMW_GB_SURFACE_REF 24 -#define DRM_VMW_SYNCCPU 25 -#define DRM_VMW_CREATE_EXTENDED_CONTEXT 26 - -/*************************************************************************/ -/** - * DRM_VMW_GET_PARAM - get device information. - * - * DRM_VMW_PARAM_FIFO_OFFSET: - * Offset to use to map the first page of the FIFO read-only. - * The fifo is mapped using the mmap() system call on the drm device. - * - * DRM_VMW_PARAM_OVERLAY_IOCTL: - * Does the driver support the overlay ioctl. - */ - -#define DRM_VMW_PARAM_NUM_STREAMS 0 -#define DRM_VMW_PARAM_NUM_FREE_STREAMS 1 -#define DRM_VMW_PARAM_3D 2 -#define DRM_VMW_PARAM_HW_CAPS 3 -#define DRM_VMW_PARAM_FIFO_CAPS 4 -#define DRM_VMW_PARAM_MAX_FB_SIZE 5 -#define DRM_VMW_PARAM_FIFO_HW_VERSION 6 -#define DRM_VMW_PARAM_MAX_SURF_MEMORY 7 -#define DRM_VMW_PARAM_3D_CAPS_SIZE 8 -#define DRM_VMW_PARAM_MAX_MOB_MEMORY 9 -#define DRM_VMW_PARAM_MAX_MOB_SIZE 10 -#define DRM_VMW_PARAM_SCREEN_TARGET 11 -#define DRM_VMW_PARAM_DX 12 - -/** - * enum drm_vmw_handle_type - handle type for ref ioctls - * - */ -enum drm_vmw_handle_type { - DRM_VMW_HANDLE_LEGACY = 0, - DRM_VMW_HANDLE_PRIME = 1 -}; - -/** - * struct drm_vmw_getparam_arg - * - * @value: Returned value. //Out - * @param: Parameter to query. //In. - * - * Argument to the DRM_VMW_GET_PARAM Ioctl. - */ - -struct drm_vmw_getparam_arg { - __u64 value; - __u32 param; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_CONTEXT - Create a host context. - * - * Allocates a device unique context id, and queues a create context command - * for the host. Does not wait for host completion. - */ - -/** - * struct drm_vmw_context_arg - * - * @cid: Device unique context ID. - * - * Output argument to the DRM_VMW_CREATE_CONTEXT Ioctl. - * Input argument to the DRM_VMW_UNREF_CONTEXT Ioctl. - */ - -struct drm_vmw_context_arg { - __s32 cid; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_CONTEXT - Create a host context. - * - * Frees a global context id, and queues a destroy host command for the host. - * Does not wait for host completion. The context ID can be used directly - * in the command stream and shows up as the same context ID on the host. - */ - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_SURFACE - Create a host suface. - * - * Allocates a device unique surface id, and queues a create surface command - * for the host. Does not wait for host completion. The surface ID can be - * used directly in the command stream and shows up as the same surface - * ID on the host. - */ - -/** - * struct drm_wmv_surface_create_req - * - * @flags: Surface flags as understood by the host. - * @format: Surface format as understood by the host. - * @mip_levels: Number of mip levels for each face. - * An unused face should have 0 encoded. - * @size_addr: Address of a user-space array of sruct drm_vmw_size - * cast to an __u64 for 32-64 bit compatibility. - * The size of the array should equal the total number of mipmap levels. - * @shareable: Boolean whether other clients (as identified by file descriptors) - * may reference this surface. - * @scanout: Boolean whether the surface is intended to be used as a - * scanout. - * - * Input data to the DRM_VMW_CREATE_SURFACE Ioctl. - * Output data from the DRM_VMW_REF_SURFACE Ioctl. - */ - -struct drm_vmw_surface_create_req { - __u32 flags; - __u32 format; - __u32 mip_levels[DRM_VMW_MAX_SURFACE_FACES]; - __u64 size_addr; - __s32 shareable; - __s32 scanout; -}; - -/** - * struct drm_wmv_surface_arg - * - * @sid: Surface id of created surface or surface to destroy or reference. - * @handle_type: Handle type for DRM_VMW_REF_SURFACE Ioctl. - * - * Output data from the DRM_VMW_CREATE_SURFACE Ioctl. - * Input argument to the DRM_VMW_UNREF_SURFACE Ioctl. - * Input argument to the DRM_VMW_REF_SURFACE Ioctl. - */ - -struct drm_vmw_surface_arg { - __s32 sid; - enum drm_vmw_handle_type handle_type; -}; - -/** - * struct drm_vmw_size ioctl. - * - * @width - mip level width - * @height - mip level height - * @depth - mip level depth - * - * Description of a mip level. - * Input data to the DRM_WMW_CREATE_SURFACE Ioctl. - */ - -struct drm_vmw_size { - __u32 width; - __u32 height; - __u32 depth; - __u32 pad64; -}; - -/** - * union drm_vmw_surface_create_arg - * - * @rep: Output data as described above. - * @req: Input data as described above. - * - * Argument to the DRM_VMW_CREATE_SURFACE Ioctl. - */ - -union drm_vmw_surface_create_arg { - struct drm_vmw_surface_arg rep; - struct drm_vmw_surface_create_req req; -}; - -/*************************************************************************/ -/** - * DRM_VMW_REF_SURFACE - Reference a host surface. - * - * Puts a reference on a host surface with a give sid, as previously - * returned by the DRM_VMW_CREATE_SURFACE ioctl. - * A reference will make sure the surface isn't destroyed while we hold - * it and will allow the calling client to use the surface ID in the command - * stream. - * - * On successful return, the Ioctl returns the surface information given - * in the DRM_VMW_CREATE_SURFACE ioctl. - */ - -/** - * union drm_vmw_surface_reference_arg - * - * @rep: Output data as described above. - * @req: Input data as described above. - * - * Argument to the DRM_VMW_REF_SURFACE Ioctl. - */ - -union drm_vmw_surface_reference_arg { - struct drm_vmw_surface_create_req rep; - struct drm_vmw_surface_arg req; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_SURFACE - Unreference a host surface. - * - * Clear a reference previously put on a host surface. - * When all references are gone, including the one implicitly placed - * on creation, - * a destroy surface command will be queued for the host. - * Does not wait for completion. - */ - -/*************************************************************************/ -/** - * DRM_VMW_EXECBUF - * - * Submit a command buffer for execution on the host, and return a - * fence seqno that when signaled, indicates that the command buffer has - * executed. - */ - -/** - * struct drm_vmw_execbuf_arg - * - * @commands: User-space address of a command buffer cast to an __u64. - * @command-size: Size in bytes of the command buffer. - * @throttle-us: Sleep until software is less than @throttle_us - * microseconds ahead of hardware. The driver may round this value - * to the nearest kernel tick. - * @fence_rep: User-space address of a struct drm_vmw_fence_rep cast to an - * __u64. - * @version: Allows expanding the execbuf ioctl parameters without breaking - * backwards compatibility, since user-space will always tell the kernel - * which version it uses. - * @flags: Execbuf flags. - * @imported_fence_fd: FD for a fence imported from another device - * - * Argument to the DRM_VMW_EXECBUF Ioctl. - */ - -#define DRM_VMW_EXECBUF_VERSION 2 - -#define DRM_VMW_EXECBUF_FLAG_IMPORT_FENCE_FD (1 << 0) -#define DRM_VMW_EXECBUF_FLAG_EXPORT_FENCE_FD (1 << 1) - -struct drm_vmw_execbuf_arg { - __u64 commands; - __u32 command_size; - __u32 throttle_us; - __u64 fence_rep; - __u32 version; - __u32 flags; - __u32 context_handle; - __s32 imported_fence_fd; -}; - -/** - * struct drm_vmw_fence_rep - * - * @handle: Fence object handle for fence associated with a command submission. - * @mask: Fence flags relevant for this fence object. - * @seqno: Fence sequence number in fifo. A fence object with a lower - * seqno will signal the EXEC flag before a fence object with a higher - * seqno. This can be used by user-space to avoid kernel calls to determine - * whether a fence has signaled the EXEC flag. Note that @seqno will - * wrap at 32-bit. - * @passed_seqno: The highest seqno number processed by the hardware - * so far. This can be used to mark user-space fence objects as signaled, and - * to determine whether a fence seqno might be stale. - * @fd: FD associated with the fence, -1 if not exported - * @error: This member should've been set to -EFAULT on submission. - * The following actions should be take on completion: - * error == -EFAULT: Fence communication failed. The host is synchronized. - * Use the last fence id read from the FIFO fence register. - * error != 0 && error != -EFAULT: - * Fence submission failed. The host is synchronized. Use the fence_seq member. - * error == 0: All is OK, The host may not be synchronized. - * Use the fence_seq member. - * - * Input / Output data to the DRM_VMW_EXECBUF Ioctl. - */ - -struct drm_vmw_fence_rep { - __u32 handle; - __u32 mask; - __u32 seqno; - __u32 passed_seqno; - __s32 fd; - __s32 error; -}; - -/*************************************************************************/ -/** - * DRM_VMW_ALLOC_DMABUF - * - * Allocate a DMA buffer that is visible also to the host. - * NOTE: The buffer is - * identified by a handle and an offset, which are private to the guest, but - * usable in the command stream. The guest kernel may translate these - * and patch up the command stream accordingly. In the future, the offset may - * be zero at all times, or it may disappear from the interface before it is - * fixed. - * - * The DMA buffer may stay user-space mapped in the guest at all times, - * and is thus suitable for sub-allocation. - * - * DMA buffers are mapped using the mmap() syscall on the drm device. - */ - -/** - * struct drm_vmw_alloc_dmabuf_req - * - * @size: Required minimum size of the buffer. - * - * Input data to the DRM_VMW_ALLOC_DMABUF Ioctl. - */ - -struct drm_vmw_alloc_dmabuf_req { - __u32 size; - __u32 pad64; -}; - -/** - * struct drm_vmw_dmabuf_rep - * - * @map_handle: Offset to use in the mmap() call used to map the buffer. - * @handle: Handle unique to this buffer. Used for unreferencing. - * @cur_gmr_id: GMR id to use in the command stream when this buffer is - * referenced. See not above. - * @cur_gmr_offset: Offset to use in the command stream when this buffer is - * referenced. See note above. - * - * Output data from the DRM_VMW_ALLOC_DMABUF Ioctl. - */ - -struct drm_vmw_dmabuf_rep { - __u64 map_handle; - __u32 handle; - __u32 cur_gmr_id; - __u32 cur_gmr_offset; - __u32 pad64; -}; - -/** - * union drm_vmw_dmabuf_arg - * - * @req: Input data as described above. - * @rep: Output data as described above. - * - * Argument to the DRM_VMW_ALLOC_DMABUF Ioctl. - */ - -union drm_vmw_alloc_dmabuf_arg { - struct drm_vmw_alloc_dmabuf_req req; - struct drm_vmw_dmabuf_rep rep; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_DMABUF - Free a DMA buffer. - * - */ - -/** - * struct drm_vmw_unref_dmabuf_arg - * - * @handle: Handle indicating what buffer to free. Obtained from the - * DRM_VMW_ALLOC_DMABUF Ioctl. - * - * Argument to the DRM_VMW_UNREF_DMABUF Ioctl. - */ - -struct drm_vmw_unref_dmabuf_arg { - __u32 handle; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CONTROL_STREAM - Control overlays, aka streams. - * - * This IOCTL controls the overlay units of the svga device. - * The SVGA overlay units does not work like regular hardware units in - * that they do not automatically read back the contents of the given dma - * buffer. But instead only read back for each call to this ioctl, and - * at any point between this call being made and a following call that - * either changes the buffer or disables the stream. - */ - -/** - * struct drm_vmw_rect - * - * Defines a rectangle. Used in the overlay ioctl to define - * source and destination rectangle. - */ - -struct drm_vmw_rect { - __s32 x; - __s32 y; - __u32 w; - __u32 h; -}; - -/** - * struct drm_vmw_control_stream_arg - * - * @stream_id: Stearm to control - * @enabled: If false all following arguments are ignored. - * @handle: Handle to buffer for getting data from. - * @format: Format of the overlay as understood by the host. - * @width: Width of the overlay. - * @height: Height of the overlay. - * @size: Size of the overlay in bytes. - * @pitch: Array of pitches, the two last are only used for YUV12 formats. - * @offset: Offset from start of dma buffer to overlay. - * @src: Source rect, must be within the defined area above. - * @dst: Destination rect, x and y may be negative. - * - * Argument to the DRM_VMW_CONTROL_STREAM Ioctl. - */ - -struct drm_vmw_control_stream_arg { - __u32 stream_id; - __u32 enabled; - - __u32 flags; - __u32 color_key; - - __u32 handle; - __u32 offset; - __s32 format; - __u32 size; - __u32 width; - __u32 height; - __u32 pitch[3]; - - __u32 pad64; - struct drm_vmw_rect src; - struct drm_vmw_rect dst; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CURSOR_BYPASS - Give extra information about cursor bypass. - * - */ - -#define DRM_VMW_CURSOR_BYPASS_ALL (1 << 0) -#define DRM_VMW_CURSOR_BYPASS_FLAGS (1) - -/** - * struct drm_vmw_cursor_bypass_arg - * - * @flags: Flags. - * @crtc_id: Crtc id, only used if DMR_CURSOR_BYPASS_ALL isn't passed. - * @xpos: X position of cursor. - * @ypos: Y position of cursor. - * @xhot: X hotspot. - * @yhot: Y hotspot. - * - * Argument to the DRM_VMW_CURSOR_BYPASS Ioctl. - */ - -struct drm_vmw_cursor_bypass_arg { - __u32 flags; - __u32 crtc_id; - __s32 xpos; - __s32 ypos; - __s32 xhot; - __s32 yhot; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CLAIM_STREAM - Claim a single stream. - */ - -/** - * struct drm_vmw_context_arg - * - * @stream_id: Device unique context ID. - * - * Output argument to the DRM_VMW_CREATE_CONTEXT Ioctl. - * Input argument to the DRM_VMW_UNREF_CONTEXT Ioctl. - */ - -struct drm_vmw_stream_arg { - __u32 stream_id; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_STREAM - Unclaim a stream. - * - * Return a single stream that was claimed by this process. Also makes - * sure that the stream has been stopped. - */ - -/*************************************************************************/ -/** - * DRM_VMW_GET_3D_CAP - * - * Read 3D capabilities from the FIFO - * - */ - -/** - * struct drm_vmw_get_3d_cap_arg - * - * @buffer: Pointer to a buffer for capability data, cast to an __u64 - * @size: Max size to copy - * - * Input argument to the DRM_VMW_GET_3D_CAP_IOCTL - * ioctls. - */ - -struct drm_vmw_get_3d_cap_arg { - __u64 buffer; - __u32 max_size; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_WAIT - * - * Waits for a fence object to signal. The wait is interruptible, so that - * signals may be delivered during the interrupt. The wait may timeout, - * in which case the calls returns -EBUSY. If the wait is restarted, - * that is restarting without resetting @cookie_valid to zero, - * the timeout is computed from the first call. - * - * The flags argument to the DRM_VMW_FENCE_WAIT ioctl indicates what to wait - * on: - * DRM_VMW_FENCE_FLAG_EXEC: All commands ahead of the fence in the command - * stream - * have executed. - * DRM_VMW_FENCE_FLAG_QUERY: All query results resulting from query finish - * commands - * in the buffer given to the EXECBUF ioctl returning the fence object handle - * are available to user-space. - * - * DRM_VMW_WAIT_OPTION_UNREF: If this wait option is given, and the - * fenc wait ioctl returns 0, the fence object has been unreferenced after - * the wait. - */ - -#define DRM_VMW_FENCE_FLAG_EXEC (1 << 0) -#define DRM_VMW_FENCE_FLAG_QUERY (1 << 1) - -#define DRM_VMW_WAIT_OPTION_UNREF (1 << 0) - -/** - * struct drm_vmw_fence_wait_arg - * - * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. - * @cookie_valid: Must be reset to 0 on first call. Left alone on restart. - * @kernel_cookie: Set to 0 on first call. Left alone on restart. - * @timeout_us: Wait timeout in microseconds. 0 for indefinite timeout. - * @lazy: Set to 1 if timing is not critical. Allow more than a kernel tick - * before returning. - * @flags: Fence flags to wait on. - * @wait_options: Options that control the behaviour of the wait ioctl. - * - * Input argument to the DRM_VMW_FENCE_WAIT ioctl. - */ - -struct drm_vmw_fence_wait_arg { - __u32 handle; - __s32 cookie_valid; - __u64 kernel_cookie; - __u64 timeout_us; - __s32 lazy; - __s32 flags; - __s32 wait_options; - __s32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_SIGNALED - * - * Checks if a fence object is signaled.. - */ - -/** - * struct drm_vmw_fence_signaled_arg - * - * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. - * @flags: Fence object flags input to DRM_VMW_FENCE_SIGNALED ioctl - * @signaled: Out: Flags signaled. - * @sequence: Out: Highest sequence passed so far. Can be used to signal the - * EXEC flag of user-space fence objects. - * - * Input/Output argument to the DRM_VMW_FENCE_SIGNALED and DRM_VMW_FENCE_UNREF - * ioctls. - */ - -struct drm_vmw_fence_signaled_arg { - __u32 handle; - __u32 flags; - __s32 signaled; - __u32 passed_seqno; - __u32 signaled_flags; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_UNREF - * - * Unreferences a fence object, and causes it to be destroyed if there are no - * other references to it. - * - */ - -/** - * struct drm_vmw_fence_arg - * - * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. - * - * Input/Output argument to the DRM_VMW_FENCE_UNREF ioctl.. - */ - -struct drm_vmw_fence_arg { - __u32 handle; - __u32 pad64; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_EVENT - * - * Queues an event on a fence to be delivered on the drm character device - * when the fence has signaled the DRM_VMW_FENCE_FLAG_EXEC flag. - * Optionally the approximate time when the fence signaled is - * given by the event. - */ - -/* - * The event type - */ -#define DRM_VMW_EVENT_FENCE_SIGNALED 0x80000000 - -struct drm_vmw_event_fence { - struct drm_event base; - __u64 user_data; - __u32 tv_sec; - __u32 tv_usec; -}; - -/* - * Flags that may be given to the command. - */ -/* Request fence signaled time on the event. */ -#define DRM_VMW_FE_FLAG_REQ_TIME (1 << 0) - -/** - * struct drm_vmw_fence_event_arg - * - * @fence_rep: Pointer to fence_rep structure cast to __u64 or 0 if - * the fence is not supposed to be referenced by user-space. - * @user_info: Info to be delivered with the event. - * @handle: Attach the event to this fence only. - * @flags: A set of flags as defined above. - */ -struct drm_vmw_fence_event_arg { - __u64 fence_rep; - __u64 user_data; - __u32 handle; - __u32 flags; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_PRESENT - * - * Executes an SVGA present on a given fb for a given surface. The surface - * is placed on the framebuffer. Cliprects are given relative to the given - * point (the point disignated by dest_{x|y}). - * - */ - -/** - * struct drm_vmw_present_arg - * @fb_id: framebuffer id to present / read back from. - * @sid: Surface id to present from. - * @dest_x: X placement coordinate for surface. - * @dest_y: Y placement coordinate for surface. - * @clips_ptr: Pointer to an array of clip rects cast to an __u64. - * @num_clips: Number of cliprects given relative to the framebuffer origin, - * in the same coordinate space as the frame buffer. - * @pad64: Unused 64-bit padding. - * - * Input argument to the DRM_VMW_PRESENT ioctl. - */ - -struct drm_vmw_present_arg { - __u32 fb_id; - __u32 sid; - __s32 dest_x; - __s32 dest_y; - __u64 clips_ptr; - __u32 num_clips; - __u32 pad64; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_PRESENT_READBACK - * - * Executes an SVGA present readback from a given fb to the dma buffer - * currently bound as the fb. If there is no dma buffer bound to the fb, - * an error will be returned. - * - */ - -/** - * struct drm_vmw_present_arg - * @fb_id: fb_id to present / read back from. - * @num_clips: Number of cliprects. - * @clips_ptr: Pointer to an array of clip rects cast to an __u64. - * @fence_rep: Pointer to a struct drm_vmw_fence_rep, cast to an __u64. - * If this member is NULL, then the ioctl should not return a fence. - */ - -struct drm_vmw_present_readback_arg { - __u32 fb_id; - __u32 num_clips; - __u64 clips_ptr; - __u64 fence_rep; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UPDATE_LAYOUT - Update layout - * - * Updates the preferred modes and connection status for connectors. The - * command consists of one drm_vmw_update_layout_arg pointing to an array - * of num_outputs drm_vmw_rect's. - */ - -/** - * struct drm_vmw_update_layout_arg - * - * @num_outputs: number of active connectors - * @rects: pointer to array of drm_vmw_rect cast to an __u64 - * - * Input argument to the DRM_VMW_UPDATE_LAYOUT Ioctl. - */ -struct drm_vmw_update_layout_arg { - __u32 num_outputs; - __u32 pad64; - __u64 rects; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_SHADER - Create shader - * - * Creates a shader and optionally binds it to a dma buffer containing - * the shader byte-code. - */ - -/** - * enum drm_vmw_shader_type - Shader types - */ -enum drm_vmw_shader_type { - drm_vmw_shader_type_vs = 0, - drm_vmw_shader_type_ps, -}; - - -/** - * struct drm_vmw_shader_create_arg - * - * @shader_type: Shader type of the shader to create. - * @size: Size of the byte-code in bytes. - * where the shader byte-code starts - * @buffer_handle: Buffer handle identifying the buffer containing the - * shader byte-code - * @shader_handle: On successful completion contains a handle that - * can be used to subsequently identify the shader. - * @offset: Offset in bytes into the buffer given by @buffer_handle, - * - * Input / Output argument to the DRM_VMW_CREATE_SHADER Ioctl. - */ -struct drm_vmw_shader_create_arg { - enum drm_vmw_shader_type shader_type; - __u32 size; - __u32 buffer_handle; - __u32 shader_handle; - __u64 offset; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_SHADER - Unreferences a shader - * - * Destroys a user-space reference to a shader, optionally destroying - * it. - */ - -/** - * struct drm_vmw_shader_arg - * - * @handle: Handle identifying the shader to destroy. - * - * Input argument to the DRM_VMW_UNREF_SHADER ioctl. - */ -struct drm_vmw_shader_arg { - __u32 handle; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_GB_SURFACE_CREATE - Create a host guest-backed surface. - * - * Allocates a surface handle and queues a create surface command - * for the host on the first use of the surface. The surface ID can - * be used as the surface ID in commands referencing the surface. - */ - -/** - * enum drm_vmw_surface_flags - * - * @drm_vmw_surface_flag_shareable: Whether the surface is shareable - * @drm_vmw_surface_flag_scanout: Whether the surface is a scanout - * surface. - * @drm_vmw_surface_flag_create_buffer: Create a backup buffer if none is - * given. - */ -enum drm_vmw_surface_flags { - drm_vmw_surface_flag_shareable = (1 << 0), - drm_vmw_surface_flag_scanout = (1 << 1), - drm_vmw_surface_flag_create_buffer = (1 << 2) -}; - -/** - * struct drm_vmw_gb_surface_create_req - * - * @svga3d_flags: SVGA3d surface flags for the device. - * @format: SVGA3d format. - * @mip_level: Number of mip levels for all faces. - * @drm_surface_flags Flags as described above. - * @multisample_count Future use. Set to 0. - * @autogen_filter Future use. Set to 0. - * @buffer_handle Buffer handle of backup buffer. SVGA3D_INVALID_ID - * if none. - * @base_size Size of the base mip level for all faces. - * @array_size Must be zero for non-DX hardware, and if non-zero - * svga3d_flags must have proper bind flags setup. - * - * Input argument to the DRM_VMW_GB_SURFACE_CREATE Ioctl. - * Part of output argument for the DRM_VMW_GB_SURFACE_REF Ioctl. - */ -struct drm_vmw_gb_surface_create_req { - __u32 svga3d_flags; - __u32 format; - __u32 mip_levels; - enum drm_vmw_surface_flags drm_surface_flags; - __u32 multisample_count; - __u32 autogen_filter; - __u32 buffer_handle; - __u32 array_size; - struct drm_vmw_size base_size; -}; - -/** - * struct drm_vmw_gb_surface_create_rep - * - * @handle: Surface handle. - * @backup_size: Size of backup buffers for this surface. - * @buffer_handle: Handle of backup buffer. SVGA3D_INVALID_ID if none. - * @buffer_size: Actual size of the buffer identified by - * @buffer_handle - * @buffer_map_handle: Offset into device address space for the buffer - * identified by @buffer_handle. - * - * Part of output argument for the DRM_VMW_GB_SURFACE_REF ioctl. - * Output argument for the DRM_VMW_GB_SURFACE_CREATE ioctl. - */ -struct drm_vmw_gb_surface_create_rep { - __u32 handle; - __u32 backup_size; - __u32 buffer_handle; - __u32 buffer_size; - __u64 buffer_map_handle; -}; - -/** - * union drm_vmw_gb_surface_create_arg - * - * @req: Input argument as described above. - * @rep: Output argument as described above. - * - * Argument to the DRM_VMW_GB_SURFACE_CREATE ioctl. - */ -union drm_vmw_gb_surface_create_arg { - struct drm_vmw_gb_surface_create_rep rep; - struct drm_vmw_gb_surface_create_req req; -}; - -/*************************************************************************/ -/** - * DRM_VMW_GB_SURFACE_REF - Reference a host surface. - * - * Puts a reference on a host surface with a given handle, as previously - * returned by the DRM_VMW_GB_SURFACE_CREATE ioctl. - * A reference will make sure the surface isn't destroyed while we hold - * it and will allow the calling client to use the surface handle in - * the command stream. - * - * On successful return, the Ioctl returns the surface information given - * to and returned from the DRM_VMW_GB_SURFACE_CREATE ioctl. - */ - -/** - * struct drm_vmw_gb_surface_reference_arg - * - * @creq: The data used as input when the surface was created, as described - * above at "struct drm_vmw_gb_surface_create_req" - * @crep: Additional data output when the surface was created, as described - * above at "struct drm_vmw_gb_surface_create_rep" - * - * Output Argument to the DRM_VMW_GB_SURFACE_REF ioctl. - */ -struct drm_vmw_gb_surface_ref_rep { - struct drm_vmw_gb_surface_create_req creq; - struct drm_vmw_gb_surface_create_rep crep; -}; - -/** - * union drm_vmw_gb_surface_reference_arg - * - * @req: Input data as described above at "struct drm_vmw_surface_arg" - * @rep: Output data as described above at "struct drm_vmw_gb_surface_ref_rep" - * - * Argument to the DRM_VMW_GB_SURFACE_REF Ioctl. - */ -union drm_vmw_gb_surface_reference_arg { - struct drm_vmw_gb_surface_ref_rep rep; - struct drm_vmw_surface_arg req; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_SYNCCPU - Sync a DMA buffer / MOB for CPU access. - * - * Idles any previously submitted GPU operations on the buffer and - * by default blocks command submissions that reference the buffer. - * If the file descriptor used to grab a blocking CPU sync is closed, the - * cpu sync is released. - * The flags argument indicates how the grab / release operation should be - * performed: - */ - -/** - * enum drm_vmw_synccpu_flags - Synccpu flags: - * - * @drm_vmw_synccpu_read: Sync for read. If sync is done for read only, it's a - * hint to the kernel to allow command submissions that references the buffer - * for read-only. - * @drm_vmw_synccpu_write: Sync for write. Block all command submissions - * referencing this buffer. - * @drm_vmw_synccpu_dontblock: Don't wait for GPU idle, but rather return - * -EBUSY should the buffer be busy. - * @drm_vmw_synccpu_allow_cs: Allow command submission that touches the buffer - * while the buffer is synced for CPU. This is similar to the GEM bo idle - * behavior. - */ -enum drm_vmw_synccpu_flags { - drm_vmw_synccpu_read = (1 << 0), - drm_vmw_synccpu_write = (1 << 1), - drm_vmw_synccpu_dontblock = (1 << 2), - drm_vmw_synccpu_allow_cs = (1 << 3) -}; - -/** - * enum drm_vmw_synccpu_op - Synccpu operations: - * - * @drm_vmw_synccpu_grab: Grab the buffer for CPU operations - * @drm_vmw_synccpu_release: Release a previous grab. - */ -enum drm_vmw_synccpu_op { - drm_vmw_synccpu_grab, - drm_vmw_synccpu_release -}; - -/** - * struct drm_vmw_synccpu_arg - * - * @op: The synccpu operation as described above. - * @handle: Handle identifying the buffer object. - * @flags: Flags as described above. - */ -struct drm_vmw_synccpu_arg { - enum drm_vmw_synccpu_op op; - enum drm_vmw_synccpu_flags flags; - __u32 handle; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_EXTENDED_CONTEXT - Create a host context. - * - * Allocates a device unique context id, and queues a create context command - * for the host. Does not wait for host completion. - */ -enum drm_vmw_extended_context { - drm_vmw_context_legacy, - drm_vmw_context_dx -}; - -/** - * union drm_vmw_extended_context_arg - * - * @req: Context type. - * @rep: Context identifier. - * - * Argument to the DRM_VMW_CREATE_EXTENDED_CONTEXT Ioctl. - */ -union drm_vmw_extended_context_arg { - enum drm_vmw_extended_context req; - struct drm_vmw_context_arg rep; -}; - -/*************************************************************************/ -/* - * DRM_VMW_HANDLE_CLOSE - Close a user-space handle and release its - * underlying resource. - * - * Note that this ioctl is overlaid on the DRM_VMW_UNREF_DMABUF Ioctl. - * The ioctl arguments therefore need to be identical in layout. - * - */ - -/** - * struct drm_vmw_handle_close_arg - * - * @handle: Handle to close. - * - * Argument to the DRM_VMW_HANDLE_CLOSE Ioctl. - */ -struct drm_vmw_handle_close_arg { - __u32 handle; - __u32 pad64; -}; - - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/arm/include/libpostproc/postprocess.h b/prebuilts/arm/include/libpostproc/postprocess.h deleted file mode 100644 index 348ee7c..0000000 --- a/prebuilts/arm/include/libpostproc/postprocess.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2001-2003 Michael Niedermayer (michaelni@gmx.at) - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef POSTPROC_POSTPROCESS_H -#define POSTPROC_POSTPROCESS_H - -/** - * @file - * @ingroup lpp - * external API header - */ - -/** - * @defgroup lpp libpostproc - * Video postprocessing library. - * - * @{ - */ - -#include "libpostproc/version.h" - -/** - * Return the LIBPOSTPROC_VERSION_INT constant. - */ -unsigned postproc_version(void); - -/** - * Return the libpostproc build-time configuration. - */ -const char *postproc_configuration(void); - -/** - * Return the libpostproc license. - */ -const char *postproc_license(void); - -#define PP_QUALITY_MAX 6 - -#include - -typedef void pp_context; -typedef void pp_mode; - -#if LIBPOSTPROC_VERSION_INT < (52<<16) -typedef pp_context pp_context_t; -typedef pp_mode pp_mode_t; -extern const char *const pp_help; ///< a simple help text -#else -extern const char pp_help[]; ///< a simple help text -#endif - -void pp_postprocess(const uint8_t * src[3], const int srcStride[3], - uint8_t * dst[3], const int dstStride[3], - int horizontalSize, int verticalSize, - const int8_t *QP_store, int QP_stride, - pp_mode *mode, pp_context *ppContext, int pict_type); - - -/** - * Return a pp_mode or NULL if an error occurred. - * - * @param name the string after "-pp" on the command line - * @param quality a number from 0 to PP_QUALITY_MAX - */ -pp_mode *pp_get_mode_by_name_and_quality(const char *name, int quality); -void pp_free_mode(pp_mode *mode); - -pp_context *pp_get_context(int width, int height, int flags); -void pp_free_context(pp_context *ppContext); - -#define PP_CPU_CAPS_MMX 0x80000000 -#define PP_CPU_CAPS_MMX2 0x20000000 -#define PP_CPU_CAPS_3DNOW 0x40000000 -#define PP_CPU_CAPS_ALTIVEC 0x10000000 -#define PP_CPU_CAPS_AUTO 0x00080000 - -#define PP_FORMAT 0x00000008 -#define PP_FORMAT_420 (0x00000011|PP_FORMAT) -#define PP_FORMAT_422 (0x00000001|PP_FORMAT) -#define PP_FORMAT_411 (0x00000002|PP_FORMAT) -#define PP_FORMAT_444 (0x00000000|PP_FORMAT) -#define PP_FORMAT_440 (0x00000010|PP_FORMAT) - -#define PP_PICT_TYPE_QP2 0x00000010 ///< MPEG2 style QScale - -/** - * @} - */ - -#endif /* POSTPROC_POSTPROCESS_H */ diff --git a/prebuilts/arm/include/libpostproc/version.h b/prebuilts/arm/include/libpostproc/version.h deleted file mode 100644 index 812f8e0..0000000 --- a/prebuilts/arm/include/libpostproc/version.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef POSTPROC_VERSION_H -#define POSTPROC_VERSION_H - -/** - * @file - * Libpostproc version macros - */ - -#include "libavutil/avutil.h" - -#define LIBPOSTPROC_VERSION_MAJOR 55 -#define LIBPOSTPROC_VERSION_MINOR 9 -#define LIBPOSTPROC_VERSION_MICRO 100 - -#define LIBPOSTPROC_VERSION_INT AV_VERSION_INT(LIBPOSTPROC_VERSION_MAJOR, \ - LIBPOSTPROC_VERSION_MINOR, \ - LIBPOSTPROC_VERSION_MICRO) -#define LIBPOSTPROC_VERSION AV_VERSION(LIBPOSTPROC_VERSION_MAJOR, \ - LIBPOSTPROC_VERSION_MINOR, \ - LIBPOSTPROC_VERSION_MICRO) -#define LIBPOSTPROC_BUILD LIBPOSTPROC_VERSION_INT - -#define LIBPOSTPROC_IDENT "postproc" AV_STRINGIFY(LIBPOSTPROC_VERSION) - -#endif /* POSTPROC_VERSION_H */ diff --git a/prebuilts/arm/include/libswresample/swresample.h b/prebuilts/arm/include/libswresample/swresample.h deleted file mode 100644 index c7b84fb..0000000 --- a/prebuilts/arm/include/libswresample/swresample.h +++ /dev/null @@ -1,579 +0,0 @@ -/* - * Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at) - * - * This file is part of libswresample - * - * libswresample is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * libswresample is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with libswresample; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWRESAMPLE_SWRESAMPLE_H -#define SWRESAMPLE_SWRESAMPLE_H - -/** - * @file - * @ingroup lswr - * libswresample public header - */ - -/** - * @defgroup lswr libswresample - * @{ - * - * Audio resampling, sample format conversion and mixing library. - * - * Interaction with lswr is done through SwrContext, which is - * allocated with swr_alloc() or swr_alloc_set_opts(). It is opaque, so all parameters - * must be set with the @ref avoptions API. - * - * The first thing you will need to do in order to use lswr is to allocate - * SwrContext. This can be done with swr_alloc() or swr_alloc_set_opts(). If you - * are using the former, you must set options through the @ref avoptions API. - * The latter function provides the same feature, but it allows you to set some - * common options in the same statement. - * - * For example the following code will setup conversion from planar float sample - * format to interleaved signed 16-bit integer, downsampling from 48kHz to - * 44.1kHz and downmixing from 5.1 channels to stereo (using the default mixing - * matrix). This is using the swr_alloc() function. - * @code - * SwrContext *swr = swr_alloc(); - * av_opt_set_channel_layout(swr, "in_channel_layout", AV_CH_LAYOUT_5POINT1, 0); - * av_opt_set_channel_layout(swr, "out_channel_layout", AV_CH_LAYOUT_STEREO, 0); - * av_opt_set_int(swr, "in_sample_rate", 48000, 0); - * av_opt_set_int(swr, "out_sample_rate", 44100, 0); - * av_opt_set_sample_fmt(swr, "in_sample_fmt", AV_SAMPLE_FMT_FLTP, 0); - * av_opt_set_sample_fmt(swr, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0); - * @endcode - * - * The same job can be done using swr_alloc_set_opts() as well: - * @code - * SwrContext *swr = swr_alloc_set_opts(NULL, // we're allocating a new context - * AV_CH_LAYOUT_STEREO, // out_ch_layout - * AV_SAMPLE_FMT_S16, // out_sample_fmt - * 44100, // out_sample_rate - * AV_CH_LAYOUT_5POINT1, // in_ch_layout - * AV_SAMPLE_FMT_FLTP, // in_sample_fmt - * 48000, // in_sample_rate - * 0, // log_offset - * NULL); // log_ctx - * @endcode - * - * Once all values have been set, it must be initialized with swr_init(). If - * you need to change the conversion parameters, you can change the parameters - * using @ref AVOptions, as described above in the first example; or by using - * swr_alloc_set_opts(), but with the first argument the allocated context. - * You must then call swr_init() again. - * - * The conversion itself is done by repeatedly calling swr_convert(). - * Note that the samples may get buffered in swr if you provide insufficient - * output space or if sample rate conversion is done, which requires "future" - * samples. Samples that do not require future input can be retrieved at any - * time by using swr_convert() (in_count can be set to 0). - * At the end of conversion the resampling buffer can be flushed by calling - * swr_convert() with NULL in and 0 in_count. - * - * The samples used in the conversion process can be managed with the libavutil - * @ref lavu_sampmanip "samples manipulation" API, including av_samples_alloc() - * function used in the following example. - * - * The delay between input and output, can at any time be found by using - * swr_get_delay(). - * - * The following code demonstrates the conversion loop assuming the parameters - * from above and caller-defined functions get_input() and handle_output(): - * @code - * uint8_t **input; - * int in_samples; - * - * while (get_input(&input, &in_samples)) { - * uint8_t *output; - * int out_samples = av_rescale_rnd(swr_get_delay(swr, 48000) + - * in_samples, 44100, 48000, AV_ROUND_UP); - * av_samples_alloc(&output, NULL, 2, out_samples, - * AV_SAMPLE_FMT_S16, 0); - * out_samples = swr_convert(swr, &output, out_samples, - * input, in_samples); - * handle_output(output, out_samples); - * av_freep(&output); - * } - * @endcode - * - * When the conversion is finished, the conversion - * context and everything associated with it must be freed with swr_free(). - * A swr_close() function is also available, but it exists mainly for - * compatibility with libavresample, and is not required to be called. - * - * There will be no memory leak if the data is not completely flushed before - * swr_free(). - */ - -#include -#include "libavutil/channel_layout.h" -#include "libavutil/frame.h" -#include "libavutil/samplefmt.h" - -#include "libswresample/version.h" - -/** - * @name Option constants - * These constants are used for the @ref avoptions interface for lswr. - * @{ - * - */ - -#define SWR_FLAG_RESAMPLE 1 ///< Force resampling even if equal sample rate -//TODO use int resample ? -//long term TODO can we enable this dynamically? - -/** Dithering algorithms */ -enum SwrDitherType { - SWR_DITHER_NONE = 0, - SWR_DITHER_RECTANGULAR, - SWR_DITHER_TRIANGULAR, - SWR_DITHER_TRIANGULAR_HIGHPASS, - - SWR_DITHER_NS = 64, ///< not part of API/ABI - SWR_DITHER_NS_LIPSHITZ, - SWR_DITHER_NS_F_WEIGHTED, - SWR_DITHER_NS_MODIFIED_E_WEIGHTED, - SWR_DITHER_NS_IMPROVED_E_WEIGHTED, - SWR_DITHER_NS_SHIBATA, - SWR_DITHER_NS_LOW_SHIBATA, - SWR_DITHER_NS_HIGH_SHIBATA, - SWR_DITHER_NB, ///< not part of API/ABI -}; - -/** Resampling Engines */ -enum SwrEngine { - SWR_ENGINE_SWR, /**< SW Resampler */ - SWR_ENGINE_SOXR, /**< SoX Resampler */ - SWR_ENGINE_NB, ///< not part of API/ABI -}; - -/** Resampling Filter Types */ -enum SwrFilterType { - SWR_FILTER_TYPE_CUBIC, /**< Cubic */ - SWR_FILTER_TYPE_BLACKMAN_NUTTALL, /**< Blackman Nuttall windowed sinc */ - SWR_FILTER_TYPE_KAISER, /**< Kaiser windowed sinc */ -}; - -/** - * @} - */ - -/** - * The libswresample context. Unlike libavcodec and libavformat, this structure - * is opaque. This means that if you would like to set options, you must use - * the @ref avoptions API and cannot directly set values to members of the - * structure. - */ -typedef struct SwrContext SwrContext; - -/** - * Get the AVClass for SwrContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - * @return the AVClass of SwrContext - */ -const AVClass *swr_get_class(void); - -/** - * @name SwrContext constructor functions - * @{ - */ - -/** - * Allocate SwrContext. - * - * If you use this function you will need to set the parameters (manually or - * with swr_alloc_set_opts()) before calling swr_init(). - * - * @see swr_alloc_set_opts(), swr_init(), swr_free() - * @return NULL on error, allocated context otherwise - */ -struct SwrContext *swr_alloc(void); - -/** - * Initialize context after user parameters have been set. - * @note The context must be configured using the AVOption API. - * - * @see av_opt_set_int() - * @see av_opt_set_dict() - * - * @param[in,out] s Swr context to initialize - * @return AVERROR error code in case of failure. - */ -int swr_init(struct SwrContext *s); - -/** - * Check whether an swr context has been initialized or not. - * - * @param[in] s Swr context to check - * @see swr_init() - * @return positive if it has been initialized, 0 if not initialized - */ -int swr_is_initialized(struct SwrContext *s); - -/** - * Allocate SwrContext if needed and set/reset common parameters. - * - * This function does not require s to be allocated with swr_alloc(). On the - * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters - * on the allocated context. - * - * @param s existing Swr context if available, or NULL if not - * @param out_ch_layout output channel layout (AV_CH_LAYOUT_*) - * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*). - * @param out_sample_rate output sample rate (frequency in Hz) - * @param in_ch_layout input channel layout (AV_CH_LAYOUT_*) - * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*). - * @param in_sample_rate input sample rate (frequency in Hz) - * @param log_offset logging level offset - * @param log_ctx parent logging context, can be NULL - * - * @see swr_init(), swr_free() - * @return NULL on error, allocated context otherwise - */ -struct SwrContext *swr_alloc_set_opts(struct SwrContext *s, - int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate, - int64_t in_ch_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate, - int log_offset, void *log_ctx); - -/** - * @} - * - * @name SwrContext destructor functions - * @{ - */ - -/** - * Free the given SwrContext and set the pointer to NULL. - * - * @param[in] s a pointer to a pointer to Swr context - */ -void swr_free(struct SwrContext **s); - -/** - * Closes the context so that swr_is_initialized() returns 0. - * - * The context can be brought back to life by running swr_init(), - * swr_init() can also be used without swr_close(). - * This function is mainly provided for simplifying the usecase - * where one tries to support libavresample and libswresample. - * - * @param[in,out] s Swr context to be closed - */ -void swr_close(struct SwrContext *s); - -/** - * @} - * - * @name Core conversion functions - * @{ - */ - -/** Convert audio. - * - * in and in_count can be set to 0 to flush the last few samples out at the - * end. - * - * If more input is provided than output space, then the input will be buffered. - * You can avoid this buffering by using swr_get_out_samples() to retrieve an - * upper bound on the required number of output samples for the given number of - * input samples. Conversion will run directly without copying whenever possible. - * - * @param s allocated Swr context, with parameters set - * @param out output buffers, only the first one need be set in case of packed audio - * @param out_count amount of space available for output in samples per channel - * @param in input buffers, only the first one need to be set in case of packed audio - * @param in_count number of input samples available in one channel - * - * @return number of samples output per channel, negative value on error - */ -int swr_convert(struct SwrContext *s, uint8_t **out, int out_count, - const uint8_t **in , int in_count); - -/** - * Convert the next timestamp from input to output - * timestamps are in 1/(in_sample_rate * out_sample_rate) units. - * - * @note There are 2 slightly differently behaving modes. - * @li When automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) - * in this case timestamps will be passed through with delays compensated - * @li When automatic timestamp compensation is used, (min_compensation < FLT_MAX) - * in this case the output timestamps will match output sample numbers. - * See ffmpeg-resampler(1) for the two modes of compensation. - * - * @param s[in] initialized Swr context - * @param pts[in] timestamp for the next input sample, INT64_MIN if unknown - * @see swr_set_compensation(), swr_drop_output(), and swr_inject_silence() are - * function used internally for timestamp compensation. - * @return the output timestamp for the next output sample - */ -int64_t swr_next_pts(struct SwrContext *s, int64_t pts); - -/** - * @} - * - * @name Low-level option setting functions - * These functons provide a means to set low-level options that is not possible - * with the AVOption API. - * @{ - */ - -/** - * Activate resampling compensation ("soft" compensation). This function is - * internally called when needed in swr_next_pts(). - * - * @param[in,out] s allocated Swr context. If it is not initialized, - * or SWR_FLAG_RESAMPLE is not set, swr_init() is - * called with the flag set. - * @param[in] sample_delta delta in PTS per sample - * @param[in] compensation_distance number of samples to compensate for - * @return >= 0 on success, AVERROR error codes if: - * @li @c s is NULL, - * @li @c compensation_distance is less than 0, - * @li @c compensation_distance is 0 but sample_delta is not, - * @li compensation unsupported by resampler, or - * @li swr_init() fails when called. - */ -int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensation_distance); - -/** - * Set a customized input channel mapping. - * - * @param[in,out] s allocated Swr context, not yet initialized - * @param[in] channel_map customized input channel mapping (array of channel - * indexes, -1 for a muted channel) - * @return >= 0 on success, or AVERROR error code in case of failure. - */ -int swr_set_channel_mapping(struct SwrContext *s, const int *channel_map); - -/** - * Generate a channel mixing matrix. - * - * This function is the one used internally by libswresample for building the - * default mixing matrix. It is made public just as a utility function for - * building custom matrices. - * - * @param in_layout input channel layout - * @param out_layout output channel layout - * @param center_mix_level mix level for the center channel - * @param surround_mix_level mix level for the surround channel(s) - * @param lfe_mix_level mix level for the low-frequency effects channel - * @param rematrix_maxval if 1.0, coefficients will be normalized to prevent - * overflow. if INT_MAX, coefficients will not be - * normalized. - * @param[out] matrix mixing coefficients; matrix[i + stride * o] is - * the weight of input channel i in output channel o. - * @param stride distance between adjacent input channels in the - * matrix array - * @param matrix_encoding matrixed stereo downmix mode (e.g. dplii) - * @param log_ctx parent logging context, can be NULL - * @return 0 on success, negative AVERROR code on failure - */ -int swr_build_matrix(uint64_t in_layout, uint64_t out_layout, - double center_mix_level, double surround_mix_level, - double lfe_mix_level, double rematrix_maxval, - double rematrix_volume, double *matrix, - int stride, enum AVMatrixEncoding matrix_encoding, - void *log_ctx); - -/** - * Set a customized remix matrix. - * - * @param s allocated Swr context, not yet initialized - * @param matrix remix coefficients; matrix[i + stride * o] is - * the weight of input channel i in output channel o - * @param stride offset between lines of the matrix - * @return >= 0 on success, or AVERROR error code in case of failure. - */ -int swr_set_matrix(struct SwrContext *s, const double *matrix, int stride); - -/** - * @} - * - * @name Sample handling functions - * @{ - */ - -/** - * Drops the specified number of output samples. - * - * This function, along with swr_inject_silence(), is called by swr_next_pts() - * if needed for "hard" compensation. - * - * @param s allocated Swr context - * @param count number of samples to be dropped - * - * @return >= 0 on success, or a negative AVERROR code on failure - */ -int swr_drop_output(struct SwrContext *s, int count); - -/** - * Injects the specified number of silence samples. - * - * This function, along with swr_drop_output(), is called by swr_next_pts() - * if needed for "hard" compensation. - * - * @param s allocated Swr context - * @param count number of samples to be dropped - * - * @return >= 0 on success, or a negative AVERROR code on failure - */ -int swr_inject_silence(struct SwrContext *s, int count); - -/** - * Gets the delay the next input sample will experience relative to the next output sample. - * - * Swresample can buffer data if more input has been provided than available - * output space, also converting between sample rates needs a delay. - * This function returns the sum of all such delays. - * The exact delay is not necessarily an integer value in either input or - * output sample rate. Especially when downsampling by a large value, the - * output sample rate may be a poor choice to represent the delay, similarly - * for upsampling and the input sample rate. - * - * @param s swr context - * @param base timebase in which the returned delay will be: - * @li if it's set to 1 the returned delay is in seconds - * @li if it's set to 1000 the returned delay is in milliseconds - * @li if it's set to the input sample rate then the returned - * delay is in input samples - * @li if it's set to the output sample rate then the returned - * delay is in output samples - * @li if it's the least common multiple of in_sample_rate and - * out_sample_rate then an exact rounding-free delay will be - * returned - * @returns the delay in 1 / @c base units. - */ -int64_t swr_get_delay(struct SwrContext *s, int64_t base); - -/** - * Find an upper bound on the number of samples that the next swr_convert - * call will output, if called with in_samples of input samples. This - * depends on the internal state, and anything changing the internal state - * (like further swr_convert() calls) will may change the number of samples - * swr_get_out_samples() returns for the same number of input samples. - * - * @param in_samples number of input samples. - * @note any call to swr_inject_silence(), swr_convert(), swr_next_pts() - * or swr_set_compensation() invalidates this limit - * @note it is recommended to pass the correct available buffer size - * to all functions like swr_convert() even if swr_get_out_samples() - * indicates that less would be used. - * @returns an upper bound on the number of samples that the next swr_convert - * will output or a negative value to indicate an error - */ -int swr_get_out_samples(struct SwrContext *s, int in_samples); - -/** - * @} - * - * @name Configuration accessors - * @{ - */ - -/** - * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. - * - * This is useful to check if the build-time libswresample has the same version - * as the run-time one. - * - * @returns the unsigned int-typed version - */ -unsigned swresample_version(void); - -/** - * Return the swr build-time configuration. - * - * @returns the build-time @c ./configure flags - */ -const char *swresample_configuration(void); - -/** - * Return the swr license. - * - * @returns the license of libswresample, determined at build-time - */ -const char *swresample_license(void); - -/** - * @} - * - * @name AVFrame based API - * @{ - */ - -/** - * Convert the samples in the input AVFrame and write them to the output AVFrame. - * - * Input and output AVFrames must have channel_layout, sample_rate and format set. - * - * If the output AVFrame does not have the data pointers allocated the nb_samples - * field will be set using av_frame_get_buffer() - * is called to allocate the frame. - * - * The output AVFrame can be NULL or have fewer allocated samples than required. - * In this case, any remaining samples not written to the output will be added - * to an internal FIFO buffer, to be returned at the next call to this function - * or to swr_convert(). - * - * If converting sample rate, there may be data remaining in the internal - * resampling delay buffer. swr_get_delay() tells the number of - * remaining samples. To get this data as output, call this function or - * swr_convert() with NULL input. - * - * If the SwrContext configuration does not match the output and - * input AVFrame settings the conversion does not take place and depending on - * which AVFrame is not matching AVERROR_OUTPUT_CHANGED, AVERROR_INPUT_CHANGED - * or the result of a bitwise-OR of them is returned. - * - * @see swr_delay() - * @see swr_convert() - * @see swr_get_delay() - * - * @param swr audio resample context - * @param output output AVFrame - * @param input input AVFrame - * @return 0 on success, AVERROR on failure or nonmatching - * configuration. - */ -int swr_convert_frame(SwrContext *swr, - AVFrame *output, const AVFrame *input); - -/** - * Configure or reconfigure the SwrContext using the information - * provided by the AVFrames. - * - * The original resampling context is reset even on failure. - * The function calls swr_close() internally if the context is open. - * - * @see swr_close(); - * - * @param swr audio resample context - * @param output output AVFrame - * @param input input AVFrame - * @return 0 on success, AVERROR on failure. - */ -int swr_config_frame(SwrContext *swr, const AVFrame *out, const AVFrame *in); - -/** - * @} - * @} - */ - -#endif /* SWRESAMPLE_SWRESAMPLE_H */ diff --git a/prebuilts/arm/include/libswresample/version.h b/prebuilts/arm/include/libswresample/version.h deleted file mode 100644 index 0a99e0f..0000000 --- a/prebuilts/arm/include/libswresample/version.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Version macros. - * - * This file is part of libswresample - * - * libswresample is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * libswresample is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with libswresample; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWRESAMPLE_VERSION_H -#define SWRESAMPLE_VERSION_H - -/** - * @file - * Libswresample version macros - */ - -#include "libavutil/avutil.h" - -#define LIBSWRESAMPLE_VERSION_MAJOR 3 -#define LIBSWRESAMPLE_VERSION_MINOR 9 -#define LIBSWRESAMPLE_VERSION_MICRO 100 - -#define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ - LIBSWRESAMPLE_VERSION_MINOR, \ - LIBSWRESAMPLE_VERSION_MICRO) -#define LIBSWRESAMPLE_VERSION AV_VERSION(LIBSWRESAMPLE_VERSION_MAJOR, \ - LIBSWRESAMPLE_VERSION_MINOR, \ - LIBSWRESAMPLE_VERSION_MICRO) -#define LIBSWRESAMPLE_BUILD LIBSWRESAMPLE_VERSION_INT - -#define LIBSWRESAMPLE_IDENT "SwR" AV_STRINGIFY(LIBSWRESAMPLE_VERSION) - -#endif /* SWRESAMPLE_VERSION_H */ diff --git a/prebuilts/arm/include/libswscale/swscale.h b/prebuilts/arm/include/libswscale/swscale.h deleted file mode 100644 index 7713f51..0000000 --- a/prebuilts/arm/include/libswscale/swscale.h +++ /dev/null @@ -1,336 +0,0 @@ -/* - * Copyright (C) 2001-2011 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_SWSCALE_H -#define SWSCALE_SWSCALE_H - -/** - * @file - * @ingroup libsws - * external API header - */ - -#include - -#include "libavutil/avutil.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "version.h" - -/** - * @defgroup libsws libswscale - * Color conversion and scaling library. - * - * @{ - * - * Return the LIBSWSCALE_VERSION_INT constant. - */ -unsigned swscale_version(void); - -/** - * Return the libswscale build-time configuration. - */ -const char *swscale_configuration(void); - -/** - * Return the libswscale license. - */ -const char *swscale_license(void); - -/* values for the flags, the stuff on the command line is different */ -#define SWS_FAST_BILINEAR 1 -#define SWS_BILINEAR 2 -#define SWS_BICUBIC 4 -#define SWS_X 8 -#define SWS_POINT 0x10 -#define SWS_AREA 0x20 -#define SWS_BICUBLIN 0x40 -#define SWS_GAUSS 0x80 -#define SWS_SINC 0x100 -#define SWS_LANCZOS 0x200 -#define SWS_SPLINE 0x400 - -#define SWS_SRC_V_CHR_DROP_MASK 0x30000 -#define SWS_SRC_V_CHR_DROP_SHIFT 16 - -#define SWS_PARAM_DEFAULT 123456 - -#define SWS_PRINT_INFO 0x1000 - -//the following 3 flags are not completely implemented -//internal chrominance subsampling info -#define SWS_FULL_CHR_H_INT 0x2000 -//input subsampling info -#define SWS_FULL_CHR_H_INP 0x4000 -#define SWS_DIRECT_BGR 0x8000 -#define SWS_ACCURATE_RND 0x40000 -#define SWS_BITEXACT 0x80000 -#define SWS_ERROR_DIFFUSION 0x800000 - -#define SWS_MAX_REDUCE_CUTOFF 0.002 - -#define SWS_CS_ITU709 1 -#define SWS_CS_FCC 4 -#define SWS_CS_ITU601 5 -#define SWS_CS_ITU624 5 -#define SWS_CS_SMPTE170M 5 -#define SWS_CS_SMPTE240M 7 -#define SWS_CS_DEFAULT 5 -#define SWS_CS_BT2020 9 - -/** - * Return a pointer to yuv<->rgb coefficients for the given colorspace - * suitable for sws_setColorspaceDetails(). - * - * @param colorspace One of the SWS_CS_* macros. If invalid, - * SWS_CS_DEFAULT is used. - */ -const int *sws_getCoefficients(int colorspace); - -// when used for filters they must have an odd number of elements -// coeffs cannot be shared between vectors -typedef struct SwsVector { - double *coeff; ///< pointer to the list of coefficients - int length; ///< number of coefficients in the vector -} SwsVector; - -// vectors can be shared -typedef struct SwsFilter { - SwsVector *lumH; - SwsVector *lumV; - SwsVector *chrH; - SwsVector *chrV; -} SwsFilter; - -struct SwsContext; - -/** - * Return a positive value if pix_fmt is a supported input format, 0 - * otherwise. - */ -int sws_isSupportedInput(enum AVPixelFormat pix_fmt); - -/** - * Return a positive value if pix_fmt is a supported output format, 0 - * otherwise. - */ -int sws_isSupportedOutput(enum AVPixelFormat pix_fmt); - -/** - * @param[in] pix_fmt the pixel format - * @return a positive value if an endianness conversion for pix_fmt is - * supported, 0 otherwise. - */ -int sws_isSupportedEndiannessConversion(enum AVPixelFormat pix_fmt); - -/** - * Allocate an empty SwsContext. This must be filled and passed to - * sws_init_context(). For filling see AVOptions, options.c and - * sws_setColorspaceDetails(). - */ -struct SwsContext *sws_alloc_context(void); - -/** - * Initialize the swscaler context sws_context. - * - * @return zero or positive value on success, a negative value on - * error - */ -av_warn_unused_result -int sws_init_context(struct SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter); - -/** - * Free the swscaler context swsContext. - * If swsContext is NULL, then does nothing. - */ -void sws_freeContext(struct SwsContext *swsContext); - -/** - * Allocate and return an SwsContext. You need it to perform - * scaling/conversion operations using sws_scale(). - * - * @param srcW the width of the source image - * @param srcH the height of the source image - * @param srcFormat the source image format - * @param dstW the width of the destination image - * @param dstH the height of the destination image - * @param dstFormat the destination image format - * @param flags specify which algorithm and options to use for rescaling - * @param param extra parameters to tune the used scaler - * For SWS_BICUBIC param[0] and [1] tune the shape of the basis - * function, param[0] tunes f(1) and param[1] f´(1) - * For SWS_GAUSS param[0] tunes the exponent and thus cutoff - * frequency - * For SWS_LANCZOS param[0] tunes the width of the window function - * @return a pointer to an allocated context, or NULL in case of error - * @note this function is to be removed after a saner alternative is - * written - */ -struct SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat, - int dstW, int dstH, enum AVPixelFormat dstFormat, - int flags, SwsFilter *srcFilter, - SwsFilter *dstFilter, const double *param); - -/** - * Scale the image slice in srcSlice and put the resulting scaled - * slice in the image in dst. A slice is a sequence of consecutive - * rows in an image. - * - * Slices have to be provided in sequential order, either in - * top-bottom or bottom-top order. If slices are provided in - * non-sequential order the behavior of the function is undefined. - * - * @param c the scaling context previously created with - * sws_getContext() - * @param srcSlice the array containing the pointers to the planes of - * the source slice - * @param srcStride the array containing the strides for each plane of - * the source image - * @param srcSliceY the position in the source image of the slice to - * process, that is the number (counted starting from - * zero) in the image of the first row of the slice - * @param srcSliceH the height of the source slice, that is the number - * of rows in the slice - * @param dst the array containing the pointers to the planes of - * the destination image - * @param dstStride the array containing the strides for each plane of - * the destination image - * @return the height of the output slice - */ -int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], - const int srcStride[], int srcSliceY, int srcSliceH, - uint8_t *const dst[], const int dstStride[]); - -/** - * @param dstRange flag indicating the while-black range of the output (1=jpeg / 0=mpeg) - * @param srcRange flag indicating the while-black range of the input (1=jpeg / 0=mpeg) - * @param table the yuv2rgb coefficients describing the output yuv space, normally ff_yuv2rgb_coeffs[x] - * @param inv_table the yuv2rgb coefficients describing the input yuv space, normally ff_yuv2rgb_coeffs[x] - * @param brightness 16.16 fixed point brightness correction - * @param contrast 16.16 fixed point contrast correction - * @param saturation 16.16 fixed point saturation correction - * @return -1 if not supported - */ -int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], - int srcRange, const int table[4], int dstRange, - int brightness, int contrast, int saturation); - -/** - * @return -1 if not supported - */ -int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, - int *srcRange, int **table, int *dstRange, - int *brightness, int *contrast, int *saturation); - -/** - * Allocate and return an uninitialized vector with length coefficients. - */ -SwsVector *sws_allocVec(int length); - -/** - * Return a normalized Gaussian curve used to filter stuff - * quality = 3 is high quality, lower is lower quality. - */ -SwsVector *sws_getGaussianVec(double variance, double quality); - -/** - * Scale all the coefficients of a by the scalar value. - */ -void sws_scaleVec(SwsVector *a, double scalar); - -/** - * Scale all the coefficients of a so that their sum equals height. - */ -void sws_normalizeVec(SwsVector *a, double height); - -#if FF_API_SWS_VECTOR -attribute_deprecated SwsVector *sws_getConstVec(double c, int length); -attribute_deprecated SwsVector *sws_getIdentityVec(void); -attribute_deprecated void sws_convVec(SwsVector *a, SwsVector *b); -attribute_deprecated void sws_addVec(SwsVector *a, SwsVector *b); -attribute_deprecated void sws_subVec(SwsVector *a, SwsVector *b); -attribute_deprecated void sws_shiftVec(SwsVector *a, int shift); -attribute_deprecated SwsVector *sws_cloneVec(SwsVector *a); -attribute_deprecated void sws_printVec2(SwsVector *a, AVClass *log_ctx, int log_level); -#endif - -void sws_freeVec(SwsVector *a); - -SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, - float lumaSharpen, float chromaSharpen, - float chromaHShift, float chromaVShift, - int verbose); -void sws_freeFilter(SwsFilter *filter); - -/** - * Check if context can be reused, otherwise reallocate a new one. - * - * If context is NULL, just calls sws_getContext() to get a new - * context. Otherwise, checks if the parameters are the ones already - * saved in context. If that is the case, returns the current - * context. Otherwise, frees context and gets a new context with - * the new parameters. - * - * Be warned that srcFilter and dstFilter are not checked, they - * are assumed to remain the same. - */ -struct SwsContext *sws_getCachedContext(struct SwsContext *context, - int srcW, int srcH, enum AVPixelFormat srcFormat, - int dstW, int dstH, enum AVPixelFormat dstFormat, - int flags, SwsFilter *srcFilter, - SwsFilter *dstFilter, const double *param); - -/** - * Convert an 8-bit paletted frame into a frame with a color depth of 32 bits. - * - * The output frame will have the same packed format as the palette. - * - * @param src source frame buffer - * @param dst destination frame buffer - * @param num_pixels number of pixels to convert - * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src - */ -void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); - -/** - * Convert an 8-bit paletted frame into a frame with a color depth of 24 bits. - * - * With the palette format "ABCD", the destination frame ends up with the format "ABC". - * - * @param src source frame buffer - * @param dst destination frame buffer - * @param num_pixels number of pixels to convert - * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src - */ -void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); - -/** - * Get the AVClass for swsContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *sws_get_class(void); - -/** - * @} - */ - -#endif /* SWSCALE_SWSCALE_H */ diff --git a/prebuilts/arm/include/libswscale/version.h b/prebuilts/arm/include/libswscale/version.h deleted file mode 100644 index bc61201..0000000 --- a/prebuilts/arm/include/libswscale/version.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_VERSION_H -#define SWSCALE_VERSION_H - -/** - * @file - * swscale version macros - */ - -#include "libavutil/version.h" - -#define LIBSWSCALE_VERSION_MAJOR 5 -#define LIBSWSCALE_VERSION_MINOR 9 -#define LIBSWSCALE_VERSION_MICRO 100 - -#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_VERSION AV_VERSION(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_BUILD LIBSWSCALE_VERSION_INT - -#define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ - -#ifndef FF_API_SWS_VECTOR -#define FF_API_SWS_VECTOR (LIBSWSCALE_VERSION_MAJOR < 6) -#endif - -#endif /* SWSCALE_VERSION_H */ diff --git a/prebuilts/arm/include/va/va.h b/prebuilts/arm/include/va/va.h deleted file mode 100644 index 957dc53..0000000 --- a/prebuilts/arm/include/va/va.h +++ /dev/null @@ -1,5269 +0,0 @@ -/* - * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -/* - * Video Acceleration (VA) API Specification - * - * Rev. 0.30 - * - * - * Revision History: - * rev 0.10 (12/10/2006 Jonathan Bian) - Initial draft - * rev 0.11 (12/15/2006 Jonathan Bian) - Fixed some errors - * rev 0.12 (02/05/2007 Jonathan Bian) - Added VC-1 data structures for slice level decode - * rev 0.13 (02/28/2007 Jonathan Bian) - Added GetDisplay() - * rev 0.14 (04/13/2007 Jonathan Bian) - Fixed MPEG-2 PictureParameter structure, cleaned up a few funcs. - * rev 0.15 (04/20/2007 Jonathan Bian) - Overhauled buffer management - * rev 0.16 (05/02/2007 Jonathan Bian) - Added error codes and fixed some issues with configuration - * rev 0.17 (05/07/2007 Jonathan Bian) - Added H.264/AVC data structures for slice level decode. - * rev 0.18 (05/14/2007 Jonathan Bian) - Added data structures for MPEG-4 slice level decode - * and MPEG-2 motion compensation. - * rev 0.19 (08/06/2007 Jonathan Bian) - Removed extra type for bitplane data. - * rev 0.20 (08/08/2007 Jonathan Bian) - Added missing fields to VC-1 PictureParameter structure. - * rev 0.21 (08/20/2007 Jonathan Bian) - Added image and subpicture support. - * rev 0.22 (08/27/2007 Jonathan Bian) - Added support for chroma-keying and global alpha. - * rev 0.23 (09/11/2007 Jonathan Bian) - Fixed some issues with images and subpictures. - * rev 0.24 (09/18/2007 Jonathan Bian) - Added display attributes. - * rev 0.25 (10/18/2007 Jonathan Bian) - Changed to use IDs only for some types. - * rev 0.26 (11/07/2007 Waldo Bastian) - Change vaCreateBuffer semantics - * rev 0.27 (11/19/2007 Matt Sottek) - Added DeriveImage - * rev 0.28 (12/06/2007 Jonathan Bian) - Added new versions of PutImage and AssociateSubpicture - * to enable scaling - * rev 0.29 (02/07/2008 Jonathan Bian) - VC1 parameter fixes, - * added VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED - * rev 0.30 (03/01/2009 Jonathan Bian) - Added encoding support for H.264 BP and MPEG-4 SP and fixes - * for ISO C conformance. - * rev 0.31 (09/02/2009 Gwenole Beauchesne) - VC-1/H264 fields change for VDPAU and XvBA backend - * Application needs to relink with the new library. - * - * rev 0.31.1 (03/29/2009) - Data structure for JPEG encode - * rev 0.31.2 (01/13/2011 Anthony Pabon)- Added a flag to indicate Subpicture coordinates are screen - * screen relative rather than source video relative. - * rev 0.32.0 (01/13/2011 Xiang Haihao) - Add profile into VAPictureParameterBufferVC1 - * update VAAPI to 0.32.0 - * - * Acknowledgements: - * Some concepts borrowed from XvMC and XvImage. - * Waldo Bastian (Intel), Matt Sottek (Intel), Austin Yuan (Intel), and Gwenole Beauchesne (SDS) - * contributed to various aspects of the API. - */ - -/** - * \file va.h - * \brief The Core API - * - * This file contains the \ref api_core "Core API". - */ - -#ifndef _VA_H_ -#define _VA_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(__GNUC__) && !defined(__COVERITY__) -#define va_deprecated __attribute__((deprecated)) -#if __GNUC__ >= 6 -#define va_deprecated_enum va_deprecated -#else -#define va_deprecated_enum -#endif -#else -#define va_deprecated -#define va_deprecated_enum -#endif - -/** - * \mainpage Video Acceleration (VA) API - * - * \section intro Introduction - * - * The main motivation for VA-API (Video Acceleration API) is to - * enable hardware accelerated video decode and encode at various - * entry-points (VLD, IDCT, Motion Compensation etc.) for the - * prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 - * AVC/H.264, VC-1/VMW3, and JPEG, HEVC/H265, VP8, VP9) and video pre/post - * processing - * - * VA-API is split into several modules: - * - \ref api_core - * - Encoder (H264, HEVC, JPEG, MPEG2, VP8, VP9) - * - \ref api_enc_h264 - * - \ref api_enc_hevc - * - \ref api_enc_jpeg - * - \ref api_enc_mpeg2 - * - \ref api_enc_vp8 - * - \ref api_enc_vp9 - * - \ref api_enc_av1 - * - Decoder (HEVC, JPEG, VP8, VP9, AV1) - * - \ref api_dec_hevc - * - \ref api_dec_jpeg - * - \ref api_dec_vp8 - * - \ref api_dec_vp9 - * - \ref api_dec_av1 - * - \ref api_vpp - * - \ref api_prot - * - FEI (H264, HEVC) - * - \ref api_fei - * - \ref api_fei_h264 - * - \ref api_fei_hevc - * - * \section threading Multithreading Guide - * All VAAPI functions implemented in libva are thread-safe. For any VAAPI - * function that requires the implementation of a backend (e.g. hardware driver), - * the backend must ensure that its implementation is also thread-safe. If the - * backend implementation of a VAAPI function is not thread-safe then this should - * be considered as a bug against the backend implementation. - * - * It is assumed that none of the VAAPI functions will be called from signal - * handlers. - * - * Thread-safety in this context means that when VAAPI is being called by multiple - * concurrent threads, it will not crash or hang the OS, and VAAPI internal - * data structures will not be corrupted. When multiple threads are operating on - * the same VAAPI objects, it is the application's responsibility to synchronize - * these operations in order to generate the expected results. For example, using - * a single VAContext from multiple threads may generate unexpected results. - * - * Following pseudo code illustrates a multithreaded transcoding scenario, where - * one thread is handling the decoding operation and another thread is handling - * the encoding operation, while synchronizing the use of a common pool of - * surfaces. - * - * \code - * // Initialization - * dpy = vaGetDisplayDRM(fd); - * vaInitialize(dpy, ...); - * - * // Create surfaces required for decoding and subsequence encoding - * vaCreateSurfaces(dpy, VA_RT_FORMAT_YUV420, width, height, &surfaces[0], ...); - * - * // Set up a queue for the surfaces shared between decode and encode threads - * surface_queue = queue_create(); - * - * // Create decode_thread - * pthread_create(&decode_thread, NULL, decode, ...); - * - * // Create encode_thread - * pthread_create(&encode_thread, NULL, encode, ...); - * - * // Decode thread function - * decode() { - * // Find the decode entrypoint for H.264 - * vaQueryConfigEntrypoints(dpy, h264_profile, entrypoints, ...); - * - * // Create a config for H.264 decode - * vaCreateConfig(dpy, h264_profile, VAEntrypointVLD, ...); - * - * // Create a context for decode - * vaCreateContext(dpy, config, width, height, VA_PROGRESSIVE, surfaces, - * num_surfaces, &decode_context); - * - * // Decode frames in the bitstream - * for (;;) { - * // Parse one frame and decode - * vaBeginPicture(dpy, decode_context, surfaces[surface_index]); - * vaRenderPicture(dpy, decode_context, buf, ...); - * vaEndPicture(dpy, decode_context); - * // Poll the decoding status and enqueue the surface in display order after - * // decoding is complete - * vaQuerySurfaceStatus(); - * enqueue(surface_queue, surface_index); - * } - * } - * - * // Encode thread function - * encode() { - * // Find the encode entrypoint for HEVC - * vaQueryConfigEntrypoints(dpy, hevc_profile, entrypoints, ...); - * - * // Create a config for HEVC encode - * vaCreateConfig(dpy, hevc_profile, VAEntrypointEncSlice, ...); - * - * // Create a context for encode - * vaCreateContext(dpy, config, width, height, VA_PROGRESSIVE, surfaces, - * num_surfaces, &encode_context); - * - * // Encode frames produced by the decoder - * for (;;) { - * // Dequeue the surface enqueued by the decoder - * surface_index = dequeue(surface_queue); - * // Encode using this surface as the source - * vaBeginPicture(dpy, encode_context, surfaces[surface_index]); - * vaRenderPicture(dpy, encode_context, buf, ...); - * vaEndPicture(dpy, encode_context); - * } - * } - * \endcode - */ - -/** - * \defgroup api_core Core API - * - * @{ - */ - -/** -Overview - -The VA API is intended to provide an interface between a video decode/encode/processing -application (client) and a hardware accelerator (server), to off-load -video decode/encode/processing operations from the host to the hardware accelerator at various -entry-points. - -The basic operation steps are: - -- Negotiate a mutually acceptable configuration with the server to lock - down profile, entrypoints, and other attributes that will not change on - a frame-by-frame basis. -- Create a video decode, encode or processing context which represents a - "virtualized" hardware device -- Get and fill the render buffers with the corresponding data (depending on - profiles and entrypoints) -- Pass the render buffers to the server to handle the current frame - -Initialization & Configuration Management - -- Find out supported profiles -- Find out entrypoints for a given profile -- Find out configuration attributes for a given profile/entrypoint pair -- Create a configuration for use by the application - -*/ - -typedef void* VADisplay; /* window system dependent */ - -typedef int VAStatus; /** Return status type from functions */ -/** Values for the return status */ -#define VA_STATUS_SUCCESS 0x00000000 -#define VA_STATUS_ERROR_OPERATION_FAILED 0x00000001 -#define VA_STATUS_ERROR_ALLOCATION_FAILED 0x00000002 -#define VA_STATUS_ERROR_INVALID_DISPLAY 0x00000003 -#define VA_STATUS_ERROR_INVALID_CONFIG 0x00000004 -#define VA_STATUS_ERROR_INVALID_CONTEXT 0x00000005 -#define VA_STATUS_ERROR_INVALID_SURFACE 0x00000006 -#define VA_STATUS_ERROR_INVALID_BUFFER 0x00000007 -#define VA_STATUS_ERROR_INVALID_IMAGE 0x00000008 -#define VA_STATUS_ERROR_INVALID_SUBPICTURE 0x00000009 -#define VA_STATUS_ERROR_ATTR_NOT_SUPPORTED 0x0000000a -#define VA_STATUS_ERROR_MAX_NUM_EXCEEDED 0x0000000b -#define VA_STATUS_ERROR_UNSUPPORTED_PROFILE 0x0000000c -#define VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT 0x0000000d -#define VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT 0x0000000e -#define VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE 0x0000000f -#define VA_STATUS_ERROR_SURFACE_BUSY 0x00000010 -#define VA_STATUS_ERROR_FLAG_NOT_SUPPORTED 0x00000011 -#define VA_STATUS_ERROR_INVALID_PARAMETER 0x00000012 -#define VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 0x00000013 -#define VA_STATUS_ERROR_UNIMPLEMENTED 0x00000014 -#define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING 0x00000015 -#define VA_STATUS_ERROR_INVALID_IMAGE_FORMAT 0x00000016 -#define VA_STATUS_ERROR_DECODING_ERROR 0x00000017 -#define VA_STATUS_ERROR_ENCODING_ERROR 0x00000018 -/** - * \brief An invalid/unsupported value was supplied. - * - * This is a catch-all error code for invalid or unsupported values. - * e.g. value exceeding the valid range, invalid type in the context - * of generic attribute values. - */ -#define VA_STATUS_ERROR_INVALID_VALUE 0x00000019 -/** \brief An unsupported filter was supplied. */ -#define VA_STATUS_ERROR_UNSUPPORTED_FILTER 0x00000020 -/** \brief An invalid filter chain was supplied. */ -#define VA_STATUS_ERROR_INVALID_FILTER_CHAIN 0x00000021 -/** \brief Indicate HW busy (e.g. run multiple encoding simultaneously). */ -#define VA_STATUS_ERROR_HW_BUSY 0x00000022 -/** \brief An unsupported memory type was supplied. */ -#define VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE 0x00000024 -/** \brief Indicate allocated buffer size is not enough for input or output. */ -#define VA_STATUS_ERROR_NOT_ENOUGH_BUFFER 0x00000025 -/** \brief Indicate an operation isn't completed because time-out interval elapsed. */ -#define VA_STATUS_ERROR_TIMEDOUT 0x00000026 -#define VA_STATUS_ERROR_UNKNOWN 0xFFFFFFFF - -/** - * 1. De-interlacing flags for vaPutSurface() - * 2. Surface sample type for input/output surface flag - * - Progressive: VA_FRAME_PICTURE - * - Interleaved: VA_TOP_FIELD_FIRST, VA_BOTTOM_FIELD_FIRST - * - Field: VA_TOP_FIELD, VA_BOTTOM_FIELD -*/ -#define VA_FRAME_PICTURE 0x00000000 -#define VA_TOP_FIELD 0x00000001 -#define VA_BOTTOM_FIELD 0x00000002 -#define VA_TOP_FIELD_FIRST 0x00000004 -#define VA_BOTTOM_FIELD_FIRST 0x00000008 - -/** - * Enabled the positioning/cropping/blending feature: - * 1, specify the video playback position in the isurface - * 2, specify the cropping info for video playback - * 3, encoded video will blend with background color - */ -#define VA_ENABLE_BLEND 0x00000004 /* video area blend with the constant color */ - -/** - * Clears the drawable with background color. - * for hardware overlay based implementation this flag - * can be used to turn off the overlay - */ -#define VA_CLEAR_DRAWABLE 0x00000008 - -/** Color space conversion flags for vaPutSurface() */ -#define VA_SRC_COLOR_MASK 0x000000f0 -#define VA_SRC_BT601 0x00000010 -#define VA_SRC_BT709 0x00000020 -#define VA_SRC_SMPTE_240 0x00000040 - -/** Scaling flags for vaPutSurface() */ -#define VA_FILTER_SCALING_DEFAULT 0x00000000 -#define VA_FILTER_SCALING_FAST 0x00000100 -#define VA_FILTER_SCALING_HQ 0x00000200 -#define VA_FILTER_SCALING_NL_ANAMORPHIC 0x00000300 -#define VA_FILTER_SCALING_MASK 0x00000f00 - -/** Interpolation method for scaling */ -#define VA_FILTER_INTERPOLATION_DEFAULT 0x00000000 -#define VA_FILTER_INTERPOLATION_NEAREST_NEIGHBOR 0x00001000 -#define VA_FILTER_INTERPOLATION_BILINEAR 0x00002000 -#define VA_FILTER_INTERPOLATION_ADVANCED 0x00003000 -#define VA_FILTER_INTERPOLATION_MASK 0x0000f000 - -/** Padding size in 4-bytes */ -#define VA_PADDING_LOW 4 -#define VA_PADDING_MEDIUM 8 -#define VA_PADDING_HIGH 16 -#define VA_PADDING_LARGE 32 - -/** operation options */ -/** synchronization, block call, output should be ready after execution function return*/ -#define VA_EXEC_SYNC 0x0 -/** asynchronization,application should call additonal sync operation to access output */ -#define VA_EXEC_ASYNC 0x1 - -/** operation mode */ -#define VA_EXEC_MODE_DEFAULT 0x0 -#define VA_EXEC_MODE_POWER_SAVING 0x1 -#define VA_EXEC_MODE_PERFORMANCE 0x2 - -/* Values used to describe device features. */ -/** The feature is not supported by the device. - * - * Any corresponding feature flag must not be set. - */ -#define VA_FEATURE_NOT_SUPPORTED 0 -/** The feature is supported by the device. - * - * The user may decide whether or not to use this feature. - * - * Note that support for a feature only indicates that the hardware - * is able to use it; whether it is actually a positive change to - * enable it in a given situation will depend on other factors - * including the input provided by the user. - */ -#define VA_FEATURE_SUPPORTED 1 -/** The feature is required by the device. - * - * The device does not support not enabling this feature, so any - * corresponding feature flag must be set and any additional - * configuration needed by the feature must be supplied. - */ -#define VA_FEATURE_REQUIRED 2 - -/** - * Returns a short english description of error_status - */ -const char *vaErrorStr(VAStatus error_status); - -typedef struct _VARectangle { - int16_t x; - int16_t y; - uint16_t width; - uint16_t height; -} VARectangle; - -/** \brief Generic motion vector data structure. */ -typedef struct _VAMotionVector { - /** \mv0[0]: horizontal motion vector for past reference */ - /** \mv0[1]: vertical motion vector for past reference */ - /** \mv1[0]: horizontal motion vector for future reference */ - /** \mv1[1]: vertical motion vector for future reference */ - int16_t mv0[2]; /* past reference */ - int16_t mv1[2]; /* future reference */ -} VAMotionVector; - -/** Type of a message callback, used for both error and info log. */ -typedef void (*VAMessageCallback)(void *user_context, const char *message); - -/** - * Set the callback for error messages, or NULL for no logging. - * Returns the previous one, or NULL if it was disabled. - */ -VAMessageCallback vaSetErrorCallback(VADisplay dpy, VAMessageCallback callback, void *user_context); - -/** - * Set the callback for info messages, or NULL for no logging. - * Returns the previous one, or NULL if it was disabled. - */ -VAMessageCallback vaSetInfoCallback(VADisplay dpy, VAMessageCallback callback, void *user_context); - -/** - * Initialization: - * A display must be obtained by calling vaGetDisplay() before calling - * vaInitialize() and other functions. This connects the API to the - * native window system. - * For X Windows, native_dpy would be from XOpenDisplay() - */ -typedef void* VANativeDisplay; /* window system dependent */ - -int vaDisplayIsValid(VADisplay dpy); - -/** - * Set the override driver name instead of queried driver driver. - */ -VAStatus vaSetDriverName(VADisplay dpy, - char *driver_name - ); - -/** - * Initialize the library - */ -VAStatus vaInitialize( - VADisplay dpy, - int *major_version, /* out */ - int *minor_version /* out */ -); - -/** - * After this call, all library internal resources will be cleaned up - */ -VAStatus vaTerminate( - VADisplay dpy -); - -/** - * vaQueryVendorString returns a pointer to a zero-terminated string - * describing some aspects of the VA implemenation on a specific - * hardware accelerator. The format of the returned string is vendor - * specific and at the discretion of the implementer. - * e.g. for the Intel GMA500 implementation, an example would be: - * "Intel GMA500 - 2.0.0.32L.0005" - */ -const char *vaQueryVendorString( - VADisplay dpy -); - -typedef int (*VAPrivFunc)(void); - -/** - * Return a function pointer given a function name in the library. - * This allows private interfaces into the library - */ -VAPrivFunc vaGetLibFunc( - VADisplay dpy, - const char *func -); - -/** Currently defined profiles */ -typedef enum { - /** \brief Profile ID used for video processing. */ - VAProfileNone = -1, - VAProfileMPEG2Simple = 0, - VAProfileMPEG2Main = 1, - VAProfileMPEG4Simple = 2, - VAProfileMPEG4AdvancedSimple = 3, - VAProfileMPEG4Main = 4, - VAProfileH264Baseline va_deprecated_enum = 5, - VAProfileH264Main = 6, - VAProfileH264High = 7, - VAProfileVC1Simple = 8, - VAProfileVC1Main = 9, - VAProfileVC1Advanced = 10, - VAProfileH263Baseline = 11, - VAProfileJPEGBaseline = 12, - VAProfileH264ConstrainedBaseline = 13, - VAProfileVP8Version0_3 = 14, - VAProfileH264MultiviewHigh = 15, - VAProfileH264StereoHigh = 16, - VAProfileHEVCMain = 17, - VAProfileHEVCMain10 = 18, - VAProfileVP9Profile0 = 19, - VAProfileVP9Profile1 = 20, - VAProfileVP9Profile2 = 21, - VAProfileVP9Profile3 = 22, - VAProfileHEVCMain12 = 23, - VAProfileHEVCMain422_10 = 24, - VAProfileHEVCMain422_12 = 25, - VAProfileHEVCMain444 = 26, - VAProfileHEVCMain444_10 = 27, - VAProfileHEVCMain444_12 = 28, - VAProfileHEVCSccMain = 29, - VAProfileHEVCSccMain10 = 30, - VAProfileHEVCSccMain444 = 31, - VAProfileAV1Profile0 = 32, - VAProfileAV1Profile1 = 33, - VAProfileHEVCSccMain444_10 = 34, - /** \brief Profile ID used for protected video playback. */ - VAProfileProtected = 35 -} VAProfile; - -/** - * Currently defined entrypoints - */ -typedef enum { - VAEntrypointVLD = 1, - VAEntrypointIZZ = 2, - VAEntrypointIDCT = 3, - VAEntrypointMoComp = 4, - VAEntrypointDeblocking = 5, - VAEntrypointEncSlice = 6, /* slice level encode */ - VAEntrypointEncPicture = 7, /* pictuer encode, JPEG, etc */ - /* - * For an implementation that supports a low power/high performance variant - * for slice level encode, it can choose to expose the - * VAEntrypointEncSliceLP entrypoint. Certain encoding tools may not be - * available with this entrypoint (e.g. interlace, MBAFF) and the - * application can query the encoding configuration attributes to find - * out more details if this entrypoint is supported. - */ - VAEntrypointEncSliceLP = 8, - VAEntrypointVideoProc = 10, /**< Video pre/post-processing. */ - /** - * \brief VAEntrypointFEI - * - * The purpose of FEI (Flexible Encoding Infrastructure) is to allow applications to - * have more controls and trade off quality for speed with their own IPs. - * The application can optionally provide input to ENC for extra encode control - * and get the output from ENC. Application can chose to modify the ENC - * output/PAK input during encoding, but the performance impact is significant. - * - * On top of the existing buffers for normal encode, there will be - * one extra input buffer (VAEncMiscParameterFEIFrameControl) and - * three extra output buffers (VAEncFEIMVBufferType, VAEncFEIMBModeBufferType - * and VAEncFEIDistortionBufferType) for VAEntrypointFEI entry function. - * If separate PAK is set, two extra input buffers - * (VAEncFEIMVBufferType, VAEncFEIMBModeBufferType) are needed for PAK input. - **/ - VAEntrypointFEI = 11, - /** - * \brief VAEntrypointStats - * - * A pre-processing function for getting some statistics and motion vectors is added, - * and some extra controls for Encode pipeline are provided. The application can - * optionally call the statistics function to get motion vectors and statistics like - * variances, distortions before calling Encode function via this entry point. - * - * Checking whether Statistics is supported can be performed with vaQueryConfigEntrypoints(). - * If Statistics entry point is supported, then the list of returned entry-points will - * include #VAEntrypointStats. Supported pixel format, maximum resolution and statistics - * specific attributes can be obtained via normal attribute query. One input buffer - * (VAStatsStatisticsParameterBufferType) and one or two output buffers - * (VAStatsStatisticsBufferType, VAStatsStatisticsBottomFieldBufferType (for interlace only) - * and VAStatsMVBufferType) are needed for this entry point. - **/ - VAEntrypointStats = 12, - /** - * \brief VAEntrypointProtectedTEEComm - * - * A function for communicating with TEE (Trusted Execution Environment). - **/ - VAEntrypointProtectedTEEComm = 13, - /** - * \brief VAEntrypointProtectedContent - * - * A function for protected content to decrypt encrypted content. - **/ - VAEntrypointProtectedContent = 14, -} VAEntrypoint; - -/** Currently defined configuration attribute types */ -typedef enum { - VAConfigAttribRTFormat = 0, - VAConfigAttribSpatialResidual = 1, - VAConfigAttribSpatialClipping = 2, - VAConfigAttribIntraResidual = 3, - VAConfigAttribEncryption = 4, - VAConfigAttribRateControl = 5, - - /** @name Attributes for decoding */ - /**@{*/ - /** - * \brief Slice Decoding mode. Read/write. - * - * This attribute determines what mode the driver supports for slice - * decoding, through vaGetConfigAttributes(); and what mode the user - * will be providing to the driver, through vaCreateConfig(), if the - * driver supports those. If this attribute is not set by the user then - * it is assumed that VA_DEC_SLICE_MODE_NORMAL mode is used. - * - * See \c VA_DEC_SLICE_MODE_xxx for the list of slice decoding modes. - */ - VAConfigAttribDecSliceMode = 6, - /** - * \brief JPEG decoding attribute. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * JPEG implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValDecJPEG union. - */ - VAConfigAttribDecJPEG = 7, - /** - * \brief Decode processing support. Read/write. - * - * This attribute determines if the driver supports video processing - * with decoding using the decoding context in a single call, through - * vaGetConfigAttributes(); and if the user may use this feature, - * through vaCreateConfig(), if the driver supports the user scenario. - * The user will essentially create a regular decode VAContext. Therefore, - * the parameters of vaCreateContext() such as picture_width, picture_height - * and render_targets are in relation to the decode output parameters - * (not processing output parameters) as normal. - * If this attribute is not set by the user then it is assumed that no - * extra processing is done after decoding for this decode context. - * - * Since essentially the application is creating a decoder config and context, - * all function calls that take in the config (e.g. vaQuerySurfaceAttributes()) - * or context are in relation to the decoder, except those video processing - * function specified in the next paragraph. - * - * Once the decode config and context are created, the user must further - * query the supported processing filters using vaQueryVideoProcFilters(), - * vaQueryVideoProcFilterCaps(), vaQueryVideoProcPipelineCaps() by specifying - * the created decode context. The user must provide processing information - * and extra processing output surfaces as "additional_outputs" to the driver - * through VAProcPipelineParameterBufferType. The render_target specified - * at vaBeginPicture() time refers to the decode output surface. The - * target surface for the output of processing needs to be a different - * surface since the decode process requires the original reconstructed buffer. - * The “surface” member of VAProcPipelineParameterBuffer should be set to the - * same as “render_target” set in vaBeginPicture(), but the driver may choose - * to ignore this parameter. - */ - VAConfigAttribDecProcessing = 8, - /** @name Attributes for encoding */ - /**@{*/ - /** - * \brief Packed headers mode. Read/write. - * - * This attribute determines what packed headers the driver supports, - * through vaGetConfigAttributes(); and what packed headers the user - * will be providing to the driver, through vaCreateConfig(), if the - * driver supports those. - * - * See \c VA_ENC_PACKED_HEADER_xxx for the list of packed headers. - */ - VAConfigAttribEncPackedHeaders = 10, - /** - * \brief Interlaced mode. Read/write. - * - * This attribute determines what kind of interlaced encoding mode - * the driver supports. - * - * See \c VA_ENC_INTERLACED_xxx for the list of interlaced modes. - */ - VAConfigAttribEncInterlaced = 11, - /** - * \brief Maximum number of reference frames. Read-only. - * - * This attribute determines the maximum number of reference - * frames supported for encoding. - * - * Note: for H.264 encoding, the value represents the maximum number - * of reference frames for both the reference picture list 0 (bottom - * 16 bits) and the reference picture list 1 (top 16 bits). - */ - VAConfigAttribEncMaxRefFrames = 13, - /** - * \brief Maximum number of slices per frame. Read-only. - * - * This attribute determines the maximum number of slices the - * driver can support to encode a single frame. - */ - VAConfigAttribEncMaxSlices = 14, - /** - * \brief Slice structure. Read-only. - * - * This attribute determines slice structures supported by the - * driver for encoding. This attribute is a hint to the user so - * that he can choose a suitable surface size and how to arrange - * the encoding process of multiple slices per frame. - * - * More specifically, for H.264 encoding, this attribute - * determines the range of accepted values to - * VAEncSliceParameterBufferH264::macroblock_address and - * VAEncSliceParameterBufferH264::num_macroblocks. - * - * See \c VA_ENC_SLICE_STRUCTURE_xxx for the supported slice - * structure types. - */ - VAConfigAttribEncSliceStructure = 15, - /** - * \brief Macroblock information. Read-only. - * - * This attribute determines whether the driver supports extra - * encoding information per-macroblock. e.g. QP. - * - * More specifically, for H.264 encoding, if the driver returns a non-zero - * value for this attribute, this means the application can create - * additional #VAEncMacroblockParameterBufferH264 buffers referenced - * through VAEncSliceParameterBufferH264::macroblock_info. - */ - VAConfigAttribEncMacroblockInfo = 16, - /** - * \brief Maximum picture width. Read-only. - * - * This attribute determines the maximum picture width the driver supports - * for a given configuration. - */ - VAConfigAttribMaxPictureWidth = 18, - /** - * \brief Maximum picture height. Read-only. - * - * This attribute determines the maximum picture height the driver supports - * for a given configuration. - */ - VAConfigAttribMaxPictureHeight = 19, - /** - * \brief JPEG encoding attribute. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * JPEG implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncJPEG union. - */ - VAConfigAttribEncJPEG = 20, - /** - * \brief Encoding quality range attribute. Read-only. - * - * This attribute conveys whether the driver supports different quality level settings - * for encoding. A value less than or equal to 1 means that the encoder only has a single - * quality setting, and a value greater than 1 represents the number of quality levels - * that can be configured. e.g. a value of 2 means there are two distinct quality levels. - */ - VAConfigAttribEncQualityRange = 21, - /** - * \brief Encoding quantization attribute. Read-only. - * - * This attribute conveys whether the driver supports certain types of quantization methods - * for encoding (e.g. trellis). See \c VA_ENC_QUANTIZATION_xxx for the list of quantization methods - */ - VAConfigAttribEncQuantization = 22, - /** - * \brief Encoding intra refresh attribute. Read-only. - * - * This attribute conveys whether the driver supports certain types of intra refresh methods - * for encoding (e.g. adaptive intra refresh or rolling intra refresh). - * See \c VA_ENC_INTRA_REFRESH_xxx for intra refresh methods - */ - VAConfigAttribEncIntraRefresh = 23, - /** - * \brief Encoding skip frame attribute. Read-only. - * - * This attribute conveys whether the driver supports sending skip frame parameters - * (VAEncMiscParameterTypeSkipFrame) to the encoder's rate control, when the user has - * externally skipped frames. - */ - VAConfigAttribEncSkipFrame = 24, - /** - * \brief Encoding region-of-interest (ROI) attribute. Read-only. - * - * This attribute conveys whether the driver supports region-of-interest (ROI) encoding, - * based on user provided ROI rectangles. The attribute value is partitioned into fields - * as defined in the VAConfigAttribValEncROI union. - * - * If ROI encoding is supported, the ROI information is passed to the driver using - * VAEncMiscParameterTypeROI. - */ - VAConfigAttribEncROI = 25, - /** - * \brief Encoding extended rate control attribute. Read-only. - * - * This attribute conveys whether the driver supports any extended rate control features - * The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncRateControlExt union. - */ - VAConfigAttribEncRateControlExt = 26, - /** - * \brief Processing rate reporting attribute. Read-only. - * - * This attribute conveys whether the driver supports reporting of - * encode/decode processing rate based on certain set of parameters - * (i.e. levels, I frame internvals) for a given configuration. - * If this is supported, vaQueryProcessingRate() can be used to get - * encode or decode processing rate. - * See \c VA_PROCESSING_RATE_xxx for encode/decode processing rate - */ - VAConfigAttribProcessingRate = 27, - /** - * \brief Encoding dirty rectangle. Read-only. - * - * This attribute conveys whether the driver supports dirty rectangle. - * encoding, based on user provided ROI rectangles which indicate the rectangular areas - * where the content has changed as compared to the previous picture. The regions of the - * picture that are not covered by dirty rect rectangles are assumed to have not changed - * compared to the previous picture. The encoder may do some optimizations based on - * this information. The attribute value returned indicates the number of regions that - * are supported. e.g. A value of 0 means dirty rect encoding is not supported. If dirty - * rect encoding is supported, the ROI information is passed to the driver using - * VAEncMiscParameterTypeDirtyRect. - */ - VAConfigAttribEncDirtyRect = 28, - /** - * \brief Parallel Rate Control (hierachical B) attribute. Read-only. - * - * This attribute conveys whether the encoder supports parallel rate control. - * It is a integer value 0 - unsupported, > 0 - maximum layer supported. - * This is the way when hireachical B frames are encoded, multiple independent B frames - * on the same layer may be processed at same time. If supported, app may enable it by - * setting enable_parallel_brc in VAEncMiscParameterRateControl,and the number of B frames - * per layer per GOP will be passed to driver through VAEncMiscParameterParallelRateControl - * structure.Currently three layers are defined. - */ - VAConfigAttribEncParallelRateControl = 29, - /** - * \brief Dynamic Scaling Attribute. Read-only. - * - * This attribute conveys whether encoder is capable to determine dynamic frame - * resolutions adaptive to bandwidth utilization and processing power, etc. - * It is a boolean value 0 - unsupported, 1 - supported. - * If it is supported,for VP9, suggested frame resolution can be retrieved from VACodedBufferVP9Status. - */ - VAConfigAttribEncDynamicScaling = 30, - /** - * \brief frame size tolerance support - * it indicates the tolerance of frame size - */ - VAConfigAttribFrameSizeToleranceSupport = 31, - /** - * \brief Encode function type for FEI. - * - * This attribute conveys whether the driver supports different function types for encode. - * It can be VA_FEI_FUNCTION_ENC, VA_FEI_FUNCTION_PAK, or VA_FEI_FUNCTION_ENC_PAK. Currently - * it is for FEI entry point only. - * Default is VA_FEI_FUNCTION_ENC_PAK. - */ - VAConfigAttribFEIFunctionType = 32, - /** - * \brief Maximum number of FEI MV predictors. Read-only. - * - * This attribute determines the maximum number of MV predictors the driver - * can support to encode a single frame. 0 means no MV predictor is supported. - * Currently it is for FEI entry point only. - */ - VAConfigAttribFEIMVPredictors = 33, - /** - * \brief Statistics attribute. Read-only. - * - * This attribute exposes a number of capabilities of the VAEntrypointStats entry - * point. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValStats union. Currently it is for VAEntrypointStats only. - */ - VAConfigAttribStats = 34, - /** - * \brief Tile Support Attribute. Read-only. - * - * This attribute conveys whether encoder is capable to support tiles. - * If not supported, the tile related parameters sent to encoder, such as - * tiling structure, should be ignored. 0 - unsupported, 1 - supported. - */ - VAConfigAttribEncTileSupport = 35, - /** - * \brief whether accept rouding setting from application. Read-only. - * This attribute is for encode quality, if it is report, - * application can change the rounding setting by VAEncMiscParameterTypeCustomRoundingControl - */ - VAConfigAttribCustomRoundingControl = 36, - /** - * \brief Encoding QP info block size attribute. Read-only. - * This attribute conveys the block sizes that underlying driver - * support for QP info for buffer #VAEncQpBuffer. - */ - VAConfigAttribQPBlockSize = 37, - /** - * \brief encode max frame size attribute. Read-only - * attribute value \c VAConfigAttribValMaxFrameSize represent max frame size support - */ - VAConfigAttribMaxFrameSize = 38, - /** \brief inter frame prediction directrion attribute. Read-only. - * this attribute conveys the prediction direction (backward or forword) for specific config - * the value could be VA_PREDICTION_DIRECTION_XXXX. it can be combined with VAConfigAttribEncMaxRefFrames - * to describe reference list , and the prediction direction. if this attrib is not present,both direction - * should be supported, no restriction. - * for example: normal HEVC encoding , maximum reference frame number in reflist 0 and reflist 1 is deduced - * by VAConfigAttribEncMaxRefFrames. so there are typical P frame, B frame, - * if VAConfigAttribPredictionDirection is also present. it will stipulate prediction direction in both - * reference list. if only one prediction direction present(such as PREVIOUS),all reference frame should be - * previous frame (PoC < current). - */ - VAConfigAttribPredictionDirection = 39, - /** \brief combined submission of multiple frames from different streams, it is optimization for different HW - * implementation, multiple frames encode/decode can improve HW concurrency - */ - VAConfigAttribMultipleFrame = 40, - /** \brief priority setting for the context. Read-Write - * attribute value is \c VAConfigAttribValContextPriority - * this setting also could be update by \c VAContextParameterUpdateBuffer - */ - VAConfigAttribContextPriority = 41, - /** \brief AV1 decoding features. Read-only. - * - * This attribute describes the supported features of an - * AV1 decoder configuration. The value returned uses the - * VAConfigAttribValDecAV1Features type. - */ - VAConfigAttribDecAV1Features = 42, - /** \brief TEE could be any HW secure device. Read-only */ - VAConfigAttribTEEType = 43, - /** \brief TEE type client is a specific module supporting specific functions in TEE. Read-only*/ - VAConfigAttribTEETypeClient = 44, - /** - * \brief Cipher algorithm of the protected content session. - * - * This attribute specifies the cipher algorithm of the protected content session. It - * could be \c VA_PC_CIPHER_AES, etc.... - */ - VAConfigAttribProtectedContentCipherAlgorithm = 45, - /** - * \brief Cipher block size of the protected content session. - * - * This attribute specifies the block size of the protected content session. It could be - * \c VA_PC_BLOCK_SIZE_128, \c VA_PC_BLOCK_SIZE_192, or \c VA_PC_BLOCK_SIZE_256, etc.... - */ - VAConfigAttribProtectedContentCipherBlockSize = 46, - /** - * \brief Cipher mode of the protected content session. - * - * This attribute specifies the cipher mode of the protected content session. It could - * be \c VA_PC_CIPHER_MODE_ECB, \c VA_PC_CIPHER_MODE_CBC, \c VA_PC_CIPHER_MODE_CTR, etc... - */ - VAConfigAttribProtectedContentCipherMode = 47, - /** - * \brief Decryption sample type of the protected content session. - * - * This attribute specifies the decryption sample type of the protected content session. - * It could be \c VA_PC_SAMPLE_TYPE_FULLSAMPLE or \c VA_PC_SAMPLE_TYPE_SUBSAMPLE. - */ - VAConfigAttribProtectedContentCipherSampleType = 48, - /** - * \brief Special usage attribute of the protected session. - * - * The attribute specifies the flow for the protected session could be used. For - * example, it could be \c VA_PC_USAGE_DEFAULT, \c VA_PC_USAGE_WIDEVINE, etc.... - */ - VAConfigAttribProtectedContentUsage = 49, - - /** \brief HEVC/H.265 encoding features. Read-only. - * - * This attribute describes the supported features of an - * HEVC/H.265 encoder configuration. The value returned uses the - * VAConfigAttribValEncHEVCFeatures type. - * - * If this attribute is supported by a driver then it must also - * support the VAConfigAttribEncHEVCBlockSizes attribute. - */ - VAConfigAttribEncHEVCFeatures = 50, - /** \brief HEVC/H.265 encoding block sizes. Read-only. - * - * This attribute describes the supported coding tree and transform - * block sizes of an HEVC/H.265 encoder configuration. The value - * returned uses the VAConfigAttribValEncHEVCBlockSizes type. - * - * If this attribute is supported by a driver then it must also - * support the VAConfigAttribEncHEVCFeatures attribute. - */ - VAConfigAttribEncHEVCBlockSizes = 51, - /** - * \brief AV1 encoding attribute. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * AV1 implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncAV1 union. - */ - VAConfigAttribEncAV1 = 52, - /** - * \brief AV1 encoding attribute extend1. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * AV1 implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncAV1Ext1 union. - */ - VAConfigAttribEncAV1Ext1 = 53, - /** - * \brief AV1 encoding attribute extend2. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * AV1 implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncAV1Ext2 union. - */ - VAConfigAttribEncAV1Ext2 = 54, - /** \brief Settings per block attribute for Encoding. Read-only. - * - * This attribute describes whether to support delta qp per block, - * the supported size of delta qp block and the size of delta QP in bytes. - * The value returned uses the VAConfigAttribValEncPerBlockControl type. - */ - VAConfigAttribEncPerBlockControl = 55, - /**@}*/ - VAConfigAttribTypeMax -} VAConfigAttribType; - -/** - * Configuration attributes - * If there is more than one value for an attribute, a default - * value will be assigned to the attribute if the client does not - * specify the attribute when creating a configuration - */ -typedef struct _VAConfigAttrib { - VAConfigAttribType type; - uint32_t value; /* OR'd flags (bits) for this attribute */ -} VAConfigAttrib; - -/* Attribute values for VAConfigAttribRTFormat. */ - -#define VA_RT_FORMAT_YUV420 0x00000001 ///< YUV 4:2:0 8-bit. -#define VA_RT_FORMAT_YUV422 0x00000002 ///< YUV 4:2:2 8-bit. -#define VA_RT_FORMAT_YUV444 0x00000004 ///< YUV 4:4:4 8-bit. -#define VA_RT_FORMAT_YUV411 0x00000008 ///< YUV 4:1:1 8-bit. -#define VA_RT_FORMAT_YUV400 0x00000010 ///< Greyscale 8-bit. -#define VA_RT_FORMAT_YUV420_10 0x00000100 ///< YUV 4:2:0 10-bit. -#define VA_RT_FORMAT_YUV422_10 0x00000200 ///< YUV 4:2:2 10-bit. -#define VA_RT_FORMAT_YUV444_10 0x00000400 ///< YUV 4:4:4 10-bit. -#define VA_RT_FORMAT_YUV420_12 0x00001000 ///< YUV 4:2:0 12-bit. -#define VA_RT_FORMAT_YUV422_12 0x00002000 ///< YUV 4:2:2 12-bit. -#define VA_RT_FORMAT_YUV444_12 0x00004000 ///< YUV 4:4:4 12-bit. - -#define VA_RT_FORMAT_RGB16 0x00010000 ///< Packed RGB, 16 bits per pixel. -#define VA_RT_FORMAT_RGB32 0x00020000 ///< Packed RGB, 32 bits per pixel, 8 bits per colour sample. -#define VA_RT_FORMAT_RGBP 0x00100000 ///< Planar RGB, 8 bits per sample. -#define VA_RT_FORMAT_RGB32_10 0x00200000 ///< Packed RGB, 32 bits per pixel, 10 bits per colour sample. - -#define VA_RT_FORMAT_PROTECTED 0x80000000 - -#define VA_RT_FORMAT_RGB32_10BPP VA_RT_FORMAT_RGB32_10 ///< @deprecated use VA_RT_FORMAT_RGB32_10 instead. -#define VA_RT_FORMAT_YUV420_10BPP VA_RT_FORMAT_YUV420_10 ///< @deprecated use VA_RT_FORMAT_YUV420_10 instead. - -/** @name Attribute values for VAConfigAttribRateControl */ -/**@{*/ -/** \brief Driver does not support any form of rate control. */ -#define VA_RC_NONE 0x00000001 -/** \brief Constant bitrate. */ -#define VA_RC_CBR 0x00000002 -/** \brief Variable bitrate. */ -#define VA_RC_VBR 0x00000004 -/** \brief Video conference mode. */ -#define VA_RC_VCM 0x00000008 -/** \brief Constant QP. */ -#define VA_RC_CQP 0x00000010 -/** \brief Variable bitrate with peak rate higher than average bitrate. */ -#define VA_RC_VBR_CONSTRAINED 0x00000020 -/** \brief Intelligent Constant Quality. Provided an initial ICQ_quality_factor, - * adjusts QP at a frame and MB level based on motion to improve subjective quality. */ -#define VA_RC_ICQ 0x00000040 -/** \brief Macroblock based rate control. Per MB control is decided - * internally in the encoder. It may be combined with other RC modes, except CQP. */ -#define VA_RC_MB 0x00000080 -/** \brief Constant Frame Size, it is used for small tolerent */ -#define VA_RC_CFS 0x00000100 -/** \brief Parallel BRC, for hierachical B. - * - * For hierachical B, B frames can be refered by other B frames. - * Currently three layers of hierachy are defined: - * B0 - regular B, no reference to other B frames. - * B1 - reference to only I, P and regular B0 frames. - * B2 - reference to any other frames, including B1. - * In Hierachical B structure, B frames on the same layer can be processed - * simultaneously. And BRC would adjust accordingly. This is so called - * Parallel BRC. */ -#define VA_RC_PARALLEL 0x00000200 -/** \brief Quality defined VBR - * Use Quality factor to determine the good enough QP for each MB such that - * good enough quality can be obtained without waste of bits - * for this BRC mode, you must set all legacy VBR parameters - * and reuse quality_factor in \c VAEncMiscParameterRateControl - * */ -#define VA_RC_QVBR 0x00000400 -/** \brief Average VBR - * Average variable bitrate control algorithm focuses on overall encoding - * quality while meeting the specified target bitrate, within the accuracy - * range, after a convergence period. - * bits_per_second in VAEncMiscParameterRateControl is target bitrate for AVBR. - * Convergence is specified in the unit of frame. - * window_size in VAEncMiscParameterRateControl is equal to convergence for AVBR. - * Accuracy is in the range of [1,100], 1 means one percent, and so on. - * target_percentage in VAEncMiscParameterRateControl is equal to accuracy for AVBR. - * */ -#define VA_RC_AVBR 0x00000800 -/** \brief Transport Controlled BRC - * Specific bitrate control for real time streaming. - * TCBRC can instantly react to channel change to remove or significantly reduce the delay. - * Application (transport) provides channel feedback to driver through TargetFrameSize. - * When channel condition is very good (almost no constraint on instant frame size), - * the app should set target frame size as zero. Otherwise, channel capacity divided by fps - * should be used. - * */ -#define VA_RC_TCBRC 0x00001000 - -/**@}*/ - -/** @name Attribute values for VAConfigAttribDecSliceMode */ -/**@{*/ -/** \brief Driver supports normal mode for slice decoding */ -#define VA_DEC_SLICE_MODE_NORMAL 0x00000001 -/** \brief Driver supports base mode for slice decoding */ -#define VA_DEC_SLICE_MODE_BASE 0x00000002 - -/** @name Attribute values for VAConfigAttribDecJPEG */ -/**@{*/ -typedef union _VAConfigAttribValDecJPEG { - struct { - /** \brief Set to (1 << VA_ROTATION_xxx) for supported rotation angles. */ - uint32_t rotation : 4; - /** \brief Reserved for future use. */ - uint32_t reserved : 28; - } bits; - uint32_t value; -} VAConfigAttribValDecJPEG; -/** @name Attribute values for VAConfigAttribDecProcessing */ -/**@{*/ -/** \brief No decoding + processing in a single decoding call. */ -#define VA_DEC_PROCESSING_NONE 0x00000000 -/** \brief Decode + processing in a single decoding call. */ -#define VA_DEC_PROCESSING 0x00000001 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncPackedHeaders */ -/**@{*/ -/** \brief Driver does not support any packed headers mode. */ -#define VA_ENC_PACKED_HEADER_NONE 0x00000000 -/** - * \brief Driver supports packed sequence headers. e.g. SPS for H.264. - * - * Application must provide it to driver once this flag is returned through - * vaGetConfigAttributes() - */ -#define VA_ENC_PACKED_HEADER_SEQUENCE 0x00000001 -/** - * \brief Driver supports packed picture headers. e.g. PPS for H.264. - * - * Application must provide it to driver once this falg is returned through - * vaGetConfigAttributes() - */ -#define VA_ENC_PACKED_HEADER_PICTURE 0x00000002 -/** - * \brief Driver supports packed slice headers. e.g. slice_header() for H.264. - * - * Application must provide it to driver once this flag is returned through - * vaGetConfigAttributes() - */ -#define VA_ENC_PACKED_HEADER_SLICE 0x00000004 -/** - * \brief Driver supports misc packed headers. e.g. SEI for H.264. - * - * @deprecated - * This is a deprecated packed header flag, All applications can use - * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed - * header data buffer to the driver - */ -#define VA_ENC_PACKED_HEADER_MISC 0x00000008 -/** \brief Driver supports raw packed header, see VAEncPackedHeaderRawData */ -#define VA_ENC_PACKED_HEADER_RAW_DATA 0x00000010 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncInterlaced */ -/**@{*/ -/** \brief Driver does not support interlaced coding. */ -#define VA_ENC_INTERLACED_NONE 0x00000000 -/** \brief Driver supports interlaced frame coding. */ -#define VA_ENC_INTERLACED_FRAME 0x00000001 -/** \brief Driver supports interlaced field coding. */ -#define VA_ENC_INTERLACED_FIELD 0x00000002 -/** \brief Driver supports macroblock adaptive frame field coding. */ -#define VA_ENC_INTERLACED_MBAFF 0x00000004 -/** \brief Driver supports picture adaptive frame field coding. */ -#define VA_ENC_INTERLACED_PAFF 0x00000008 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncSliceStructure */ -/**@{*/ -/** \brief Driver supports a power-of-two number of rows per slice. */ -#define VA_ENC_SLICE_STRUCTURE_POWER_OF_TWO_ROWS 0x00000001 -/** \brief Driver supports an arbitrary number of macroblocks per slice. */ -#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS 0x00000002 -/** \brief Driver support 1 row per slice */ -#define VA_ENC_SLICE_STRUCTURE_EQUAL_ROWS 0x00000004 -/** \brief Driver support max encoded slice size per slice */ -#define VA_ENC_SLICE_STRUCTURE_MAX_SLICE_SIZE 0x00000008 -/** \brief Driver supports an arbitrary number of rows per slice. */ -#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_ROWS 0x00000010 -/** \brief Driver supports any number of rows per slice but they must be the same -* for all slices except for the last one, which must be equal or smaller -* to the previous slices. */ -#define VA_ENC_SLICE_STRUCTURE_EQUAL_MULTI_ROWS 0x00000020 -/**@}*/ - -/** \brief Attribute value for VAConfigAttribMaxFrameSize */ -typedef union _VAConfigAttribValMaxFrameSize { - struct { - /** \brief support max frame size - * if max_frame_size == 1, VAEncMiscParameterTypeMaxFrameSize/VAEncMiscParameterBufferMaxFrameSize - * could be used to set the frame size, if multiple_pass also equal 1, VAEncMiscParameterTypeMultiPassFrameSize - * VAEncMiscParameterBufferMultiPassFrameSize could be used to set frame size and pass information - */ - uint32_t max_frame_size : 1; - /** \brief multiple_pass support */ - uint32_t multiple_pass : 1; - /** \brief reserved bits for future, must be zero*/ - uint32_t reserved : 30; - } bits; - uint32_t value; -} VAConfigAttribValMaxFrameSize; - -/** \brief Attribute value for VAConfigAttribEncJPEG */ -typedef union _VAConfigAttribValEncJPEG { - struct { - /** \brief set to 1 for arithmatic coding. */ - uint32_t arithmatic_coding_mode : 1; - /** \brief set to 1 for progressive dct. */ - uint32_t progressive_dct_mode : 1; - /** \brief set to 1 for non-interleaved. */ - uint32_t non_interleaved_mode : 1; - /** \brief set to 1 for differential. */ - uint32_t differential_mode : 1; - uint32_t max_num_components : 3; - uint32_t max_num_scans : 4; - uint32_t max_num_huffman_tables : 3; - uint32_t max_num_quantization_tables : 3; - } bits; - uint32_t value; -} VAConfigAttribValEncJPEG; - -/** @name Attribute values for VAConfigAttribEncQuantization */ -/**@{*/ -/** \brief Driver does not support special types of quantization */ -#define VA_ENC_QUANTIZATION_NONE 0x00000000 -/** \brief Driver supports trellis quantization */ -#define VA_ENC_QUANTIZATION_TRELLIS_SUPPORTED 0x00000001 -/**@}*/ - -/** @name Attribute values for VAConfigAttribPredictionDirection */ -/**@{*/ -/** \brief Driver support forward reference frame (inter frame for vpx, P frame for H26x MPEG) - * can work with the VAConfigAttribEncMaxRefFrames. for example: low delay B frame of HEVC. - * these value can be OR'd together. typical value should be VA_PREDICTION_DIRECTION_PREVIOUS - * or VA_PREDICTION_DIRECTION_PREVIOUS | VA_PREDICTION_DIRECTION_FUTURE, theoretically, there - * are no stream only include future reference frame. - */ -#define VA_PREDICTION_DIRECTION_PREVIOUS 0x00000001 -/** \brief Driver support backward prediction frame/slice */ -#define VA_PREDICTION_DIRECTION_FUTURE 0x00000002 -/** \brief Dirver require both reference list must be not empty for inter frame */ -#define VA_PREDICTION_DIRECTION_BI_NOT_EMPTY 0x00000004 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncIntraRefresh */ -/**@{*/ -/** \brief Driver does not support intra refresh */ -#define VA_ENC_INTRA_REFRESH_NONE 0x00000000 -/** \brief Driver supports column based rolling intra refresh */ -#define VA_ENC_INTRA_REFRESH_ROLLING_COLUMN 0x00000001 -/** \brief Driver supports row based rolling intra refresh */ -#define VA_ENC_INTRA_REFRESH_ROLLING_ROW 0x00000002 -/** \brief Driver supports adaptive intra refresh */ -#define VA_ENC_INTRA_REFRESH_ADAPTIVE 0x00000010 -/** \brief Driver supports cyclic intra refresh */ -#define VA_ENC_INTRA_REFRESH_CYCLIC 0x00000020 -/** \brief Driver supports intra refresh of P frame*/ -#define VA_ENC_INTRA_REFRESH_P_FRAME 0x00010000 -/** \brief Driver supports intra refresh of B frame */ -#define VA_ENC_INTRA_REFRESH_B_FRAME 0x00020000 -/** \brief Driver supports intra refresh of multiple reference encoder */ -#define VA_ENC_INTRA_REFRESH_MULTI_REF 0x00040000 - -/**@}*/ - -/** \brief Attribute value for VAConfigAttribEncROI */ -typedef union _VAConfigAttribValEncROI { - struct { - /** \brief The number of ROI regions supported, 0 if ROI is not supported. */ - uint32_t num_roi_regions : 8; - /** - * \brief A flag indicates whether ROI priority is supported - * - * \ref roi_rc_priority_support equal to 1 specifies the underlying driver supports - * ROI priority when VAConfigAttribRateControl != VA_RC_CQP, user can use \c roi_value - * in #VAEncROI to set ROI priority. \ref roi_rc_priority_support equal to 0 specifies - * the underlying driver doesn't support ROI priority. - * - * User should ignore \ref roi_rc_priority_support when VAConfigAttribRateControl == VA_RC_CQP - * because ROI delta QP is always required when VAConfigAttribRateControl == VA_RC_CQP. - */ - uint32_t roi_rc_priority_support : 1; - /** - * \brief A flag indicates whether ROI delta QP is supported - * - * \ref roi_rc_qp_delta_support equal to 1 specifies the underlying driver supports - * ROI delta QP when VAConfigAttribRateControl != VA_RC_CQP, user can use \c roi_value - * in #VAEncROI to set ROI delta QP. \ref roi_rc_qp_delta_support equal to 0 specifies - * the underlying driver doesn't support ROI delta QP. - * - * User should ignore \ref roi_rc_qp_delta_support when VAConfigAttribRateControl == VA_RC_CQP - * because ROI delta QP is always required when VAConfigAttribRateControl == VA_RC_CQP. - */ - uint32_t roi_rc_qp_delta_support : 1; - uint32_t reserved : 22; - } bits; - uint32_t value; -} VAConfigAttribValEncROI; - -/** \brief Attribute value for VAConfigAttribEncRateControlExt */ -typedef union _VAConfigAttribValEncRateControlExt { - struct { - /** - * \brief The maximum number of temporal layers minus 1 - * - * \ref max_num_temporal_layers_minus1 plus 1 specifies the maximum number of temporal - * layers that supported by the underlying driver. \ref max_num_temporal_layers_minus1 - * equal to 0 implies the underlying driver doesn't support encoding with temporal layer. - */ - uint32_t max_num_temporal_layers_minus1 : 8; - - /** - * /brief support temporal layer bit-rate control flag - * - * \ref temporal_layer_bitrate_control_flag equal to 1 specifies the underlying driver - * can support bit-rate control per temporal layer when (#VAConfigAttribRateControl == #VA_RC_CBR || - * #VAConfigAttribRateControl == #VA_RC_VBR). - * - * The underlying driver must set \ref temporal_layer_bitrate_control_flag to 0 when - * \c max_num_temporal_layers_minus1 is equal to 0 - * - * To use bit-rate control per temporal layer, an application must send the right layer - * structure via #VAEncMiscParameterTemporalLayerStructure at the beginning of a coded sequence - * and then followed by #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate structures - * for each layer, using the \c temporal_id field as the layer identifier. Otherwise - * the driver doesn't use bitrate control per temporal layer if an application doesn't send the - * layer structure via #VAEncMiscParameterTemporalLayerStructure to the driver. The driver returns - * VA_STATUS_ERROR_INVALID_PARAMETER if an application sends a wrong layer structure or doesn't send - * #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate for each layer. - * - * The driver will ignore #VAEncMiscParameterTemporalLayerStructure and the \c temporal_id field - * in #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate if - * \ref temporal_layer_bitrate_control_flag is equal to 0 or #VAConfigAttribRateControl == #VA_RC_CQP - */ - uint32_t temporal_layer_bitrate_control_flag : 1; - uint32_t reserved : 23; - } bits; - uint32_t value; -} VAConfigAttribValEncRateControlExt; - -/** \brief Attribute value for VAConfigAttribMultipleFrame*/ -typedef union _VAConfigAttribValMultipleFrame { - struct { - /** \brief max num of concurrent frames from different stream */ - uint32_t max_num_concurrent_frames : 8; - /** \brief indicate whether all stream must support same quality level - * if mixed_quality_level == 0, same quality level setting for multple streams is required - * if mixed_quality_level == 1, different stream can have different quality level*/ - uint32_t mixed_quality_level : 1; - /** \brief reserved bit for future, must be zero */ - uint32_t reserved : 23; - } bits; - uint32_t value; -} VAConfigAttribValMultipleFrame; - -/** brief Attribute value VAConfigAttribValContextPriority */ -typedef union _VAConfigAttribValContextPriority { - struct { - /** \brief the priority , for the Query operation (read) it represents highest priority - * for the set operation (write), value should be [0~highest priority] , 0 is lowest priority*/ - uint32_t priority : 16; - /** \brief reserved bits for future, must be zero*/ - uint32_t reserved : 16; - } bits; - uint32_t value; -} VAConfigAttribValContextPriority; - -/** brief Attribute value VAConfigAttribEncPerBlockControl */ -typedef union _VAConfigAttribValEncPerBlockControl { - struct { - /** \brief whether to support dela qp per block */ - uint32_t delta_qp_support : 1; - /** \brief supported size of delta qp block */ - uint32_t log2_delta_qp_block_size : 4; - /** \brief size of delta qp per block in bytes*/ - uint32_t delta_qp_size_in_bytes : 3; - /** \brief reserved bit for future, must be zero */ - uint32_t reserved : 24; - } bits; - uint32_t value; -} VAConfigAttribValEncPerBlockControl; - -/** @name Attribute values for VAConfigAttribProtectedContentCipherAlgorithm */ -/** \brief AES cipher */ -#define VA_PC_CIPHER_AES 0x00000001 - -/** @name Attribute values for VAConfigAttribProtectedContentCipherBlockSize */ -/** \brief 128 bits block size */ -#define VA_PC_BLOCK_SIZE_128 0x00000001 -/** \brief 192 bits block size */ -#define VA_PC_BLOCK_SIZE_192 0x00000002 -/** \brief 256 bits block size */ -#define VA_PC_BLOCK_SIZE_256 0x00000004 - -/** @name Attribute values for VAConfigAttribProtectedContentCipherMode */ -/** \brief AES ECB */ -#define VA_PC_CIPHER_MODE_ECB 0x00000001 -/** \brief AES CBC */ -#define VA_PC_CIPHER_MODE_CBC 0x00000002 -/** \brief AES CTR */ -#define VA_PC_CIPHER_MODE_CTR 0x00000004 - -/** @name Attribute values for VAConfigAttribProtectedContentCipherSampleType */ -/** \brief Full sample */ -#define VA_PC_SAMPLE_TYPE_FULLSAMPLE 0x00000001 -/** \brief Sub sample */ -#define VA_PC_SAMPLE_TYPE_SUBSAMPLE 0x00000002 - -/** @name Attribute values for VAConfigAttribProtectedContentUsage */ -/** \brief Default usage */ -#define VA_PC_USAGE_DEFAULT 0x00000000 -/** \brief Widevine */ -#define VA_PC_USAGE_WIDEVINE 0x00000001 - -/** @name Attribute values for VAConfigAttribProcessingRate. */ -/**@{*/ -/** \brief Driver does not support processing rate report */ -#define VA_PROCESSING_RATE_NONE 0x00000000 -/** \brief Driver supports encode processing rate report */ -#define VA_PROCESSING_RATE_ENCODE 0x00000001 -/** \brief Driver supports decode processing rate report */ -#define VA_PROCESSING_RATE_DECODE 0x00000002 -/**@}*/ -/** - * if an attribute is not applicable for a given - * profile/entrypoint pair, then set the value to the following - */ -#define VA_ATTRIB_NOT_SUPPORTED 0x80000000 - -/** Get maximum number of profiles supported by the implementation */ -int vaMaxNumProfiles( - VADisplay dpy -); - -/** Get maximum number of entrypoints supported by the implementation */ -int vaMaxNumEntrypoints( - VADisplay dpy -); - -/** Get maximum number of attributs supported by the implementation */ -int vaMaxNumConfigAttributes( - VADisplay dpy -); - -/** - * Query supported profiles - * The caller must provide a "profile_list" array that can hold at - * least vaMaxNumProfile() entries. The actual number of profiles - * returned in "profile_list" is returned in "num_profile". - */ -VAStatus vaQueryConfigProfiles( - VADisplay dpy, - VAProfile *profile_list, /* out */ - int *num_profiles /* out */ -); - -/** - * Query supported entrypoints for a given profile - * The caller must provide an "entrypoint_list" array that can hold at - * least vaMaxNumEntrypoints() entries. The actual number of entrypoints - * returned in "entrypoint_list" is returned in "num_entrypoints". - */ -VAStatus vaQueryConfigEntrypoints( - VADisplay dpy, - VAProfile profile, - VAEntrypoint *entrypoint_list, /* out */ - int *num_entrypoints /* out */ -); - -/** - * Get attributes for a given profile/entrypoint pair - * The caller must provide an "attrib_list" with all attributes to be - * retrieved. Upon return, the attributes in "attrib_list" have been - * updated with their value. Unknown attributes or attributes that are - * not supported for the given profile/entrypoint pair will have their - * value set to VA_ATTRIB_NOT_SUPPORTED - */ -VAStatus vaGetConfigAttributes( - VADisplay dpy, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, /* in/out */ - int num_attribs -); - -/** Generic ID type, can be re-typed for specific implementation */ -typedef unsigned int VAGenericID; - -typedef VAGenericID VAConfigID; - -/** - * Create a configuration for the video decode/encode/processing pipeline - * it passes in the attribute list that specifies the attributes it cares - * about, with the rest taking default values. - */ -VAStatus vaCreateConfig( - VADisplay dpy, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, - int num_attribs, - VAConfigID *config_id /* out */ -); - -/** - * Free resources associdated with a given config - */ -VAStatus vaDestroyConfig( - VADisplay dpy, - VAConfigID config_id -); - -/** - * Query all attributes for a given configuration - * The profile of the configuration is returned in "profile" - * The entrypoint of the configuration is returned in "entrypoint" - * The caller must provide an "attrib_list" array that can hold at least - * vaMaxNumConfigAttributes() entries. The actual number of attributes - * returned in "attrib_list" is returned in "num_attribs" - */ -VAStatus vaQueryConfigAttributes( - VADisplay dpy, - VAConfigID config_id, - VAProfile *profile, /* out */ - VAEntrypoint *entrypoint, /* out */ - VAConfigAttrib *attrib_list,/* out */ - int *num_attribs /* out */ -); - - -/** - * Contexts and Surfaces - * - * Context represents a "virtual" video decode, encode or video processing - * pipeline. Surfaces are render targets for a given context. The data in the - * surfaces are not accessible to the client except if derived image is supported - * and the internal data format of the surface is implementation specific. - * - * Surfaces are provided as a hint of what surfaces will be used when the context - * is created through vaCreateContext(). A surface may be used by different contexts - * at the same time as soon as application can make sure the operations are synchronized - * between different contexts, e.g. a surface is used as the output of a decode context - * and the input of a video process context. Surfaces can only be destroyed after all - * contexts using these surfaces have been destroyed. - * - * Both contexts and surfaces are identified by unique IDs and its - * implementation specific internals are kept opaque to the clients - */ - -typedef VAGenericID VAContextID; - -typedef VAGenericID VASurfaceID; - -#define VA_INVALID_ID 0xffffffff -#define VA_INVALID_SURFACE VA_INVALID_ID - -/** \brief Generic value types. */ -typedef enum { - VAGenericValueTypeInteger = 1, /**< 32-bit signed integer. */ - VAGenericValueTypeFloat, /**< 32-bit floating-point value. */ - VAGenericValueTypePointer, /**< Generic pointer type */ - VAGenericValueTypeFunc /**< Pointer to function */ -} VAGenericValueType; - -/** \brief Generic function type. */ -typedef void (*VAGenericFunc)(void); - -/** \brief Generic value. */ -typedef struct _VAGenericValue { - /** \brief Value type. See #VAGenericValueType. */ - VAGenericValueType type; - /** \brief Value holder. */ - union { - /** \brief 32-bit signed integer. */ - int32_t i; - /** \brief 32-bit float. */ - float f; - /** \brief Generic pointer. */ - void *p; - /** \brief Pointer to function. */ - VAGenericFunc fn; - } value; -} VAGenericValue; - -/** @name Surface attribute flags */ -/**@{*/ -/** \brief Surface attribute is not supported. */ -#define VA_SURFACE_ATTRIB_NOT_SUPPORTED 0x00000000 -/** \brief Surface attribute can be got through vaQuerySurfaceAttributes(). */ -#define VA_SURFACE_ATTRIB_GETTABLE 0x00000001 -/** \brief Surface attribute can be set through vaCreateSurfaces(). */ -#define VA_SURFACE_ATTRIB_SETTABLE 0x00000002 -/**@}*/ - -/** \brief Surface attribute types. */ -typedef enum { - VASurfaceAttribNone = 0, - /** - * \brief Pixel format as a FOURCC (int, read/write). - * - * When vaQuerySurfaceAttributes() is called, the driver will return one - * PixelFormat attribute per supported pixel format. - * - * When provided as an input to vaCreateSurfaces(), the driver will - * allocate a surface with the provided pixel format. - */ - VASurfaceAttribPixelFormat, - /** \brief Minimal width in pixels (int, read-only). */ - VASurfaceAttribMinWidth, - /** \brief Maximal width in pixels (int, read-only). */ - VASurfaceAttribMaxWidth, - /** \brief Minimal height in pixels (int, read-only). */ - VASurfaceAttribMinHeight, - /** \brief Maximal height in pixels (int, read-only). */ - VASurfaceAttribMaxHeight, - /** \brief Surface memory type expressed in bit fields (int, read/write). */ - VASurfaceAttribMemoryType, - /** \brief External buffer descriptor (pointer, write). - * - * Refer to the documentation for the memory type being created to - * determine what descriptor structure to pass here. If not otherwise - * stated, the common VASurfaceAttribExternalBuffers should be used. - */ - VASurfaceAttribExternalBufferDescriptor, - /** \brief Surface usage hint, gives the driver a hint of intended usage - * to optimize allocation (e.g. tiling) (int, read/write). */ - VASurfaceAttribUsageHint, - /** \brief List of possible DRM format modifiers (pointer, write). - * - * The value must be a pointer to a VADRMFormatModifierList. This can only - * be used when allocating a new buffer, it's invalid to use this attribute - * when importing an existing buffer. - */ - VASurfaceAttribDRMFormatModifiers, - /** \brief Number of surface attributes. */ - VASurfaceAttribCount -} VASurfaceAttribType; - -/** \brief Surface attribute. */ -typedef struct _VASurfaceAttrib { - /** \brief Type. */ - VASurfaceAttribType type; - /** \brief Flags. See "Surface attribute flags". */ - uint32_t flags; - /** \brief Value. See "Surface attribute types" for the expected types. */ - VAGenericValue value; -} VASurfaceAttrib; - -/** - * @name VASurfaceAttribMemoryType values in bit fields. - * Bit 0:7 are reserved for generic types, Bit 31:28 are reserved for - * Linux DRM, Bit 23:20 are reserved for Android. DRM and Android specific - * types are defined in DRM and Android header files. - */ -/**@{*/ -/** \brief VA memory type (default) is supported. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_VA 0x00000001 -/** \brief V4L2 buffer memory type is supported. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_V4L2 0x00000002 -/** \brief User pointer memory type is supported. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_USER_PTR 0x00000004 -/**@}*/ - -/** - * \brief VASurfaceAttribExternalBuffers structure for - * the VASurfaceAttribExternalBufferDescriptor attribute. - */ -typedef struct _VASurfaceAttribExternalBuffers { - /** \brief pixel format in fourcc. */ - uint32_t pixel_format; - /** \brief width in pixels. */ - uint32_t width; - /** \brief height in pixels. */ - uint32_t height; - /** \brief total size of the buffer in bytes. */ - uint32_t data_size; - /** \brief number of planes for planar layout */ - uint32_t num_planes; - /** \brief pitch for each plane in bytes */ - uint32_t pitches[4]; - /** \brief offset for each plane in bytes */ - uint32_t offsets[4]; - /** \brief buffer handles or user pointers */ - uintptr_t *buffers; - /** \brief number of elements in the "buffers" array */ - uint32_t num_buffers; - /** \brief flags. See "Surface external buffer descriptor flags". */ - uint32_t flags; - /** \brief reserved for passing private data */ - void *private_data; -} VASurfaceAttribExternalBuffers; - -/** @name VASurfaceAttribExternalBuffers flags */ -/**@{*/ -/** \brief Enable memory tiling */ -#define VA_SURFACE_EXTBUF_DESC_ENABLE_TILING 0x00000001 -/** \brief Memory is cacheable */ -#define VA_SURFACE_EXTBUF_DESC_CACHED 0x00000002 -/** \brief Memory is non-cacheable */ -#define VA_SURFACE_EXTBUF_DESC_UNCACHED 0x00000004 -/** \brief Memory is write-combined */ -#define VA_SURFACE_EXTBUF_DESC_WC 0x00000008 -/** \brief Memory is protected */ -#define VA_SURFACE_EXTBUF_DESC_PROTECTED 0x80000000 - -/** @name VASurfaceAttribUsageHint attribute usage hint flags */ -/**@{*/ -/** \brief Surface usage not indicated. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_GENERIC 0x00000000 -/** \brief Surface used by video decoder. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_DECODER 0x00000001 -/** \brief Surface used by video encoder. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_ENCODER 0x00000002 -/** \brief Surface read by video post-processing. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_VPP_READ 0x00000004 -/** \brief Surface written by video post-processing. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_VPP_WRITE 0x00000008 -/** \brief Surface used for display. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_DISPLAY 0x00000010 -/** \brief Surface used for export to third-party APIs, e.g. via - * vaExportSurfaceHandle(). */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_EXPORT 0x00000020 - -/**@}*/ - -/** - * \brief Queries surface attributes for the supplied config. - * - * This function queries for all supported attributes for the - * supplied VA @config. In particular, if the underlying hardware - * supports the creation of VA surfaces in various formats, then - * this function will enumerate all pixel formats that are supported. - * - * The \c attrib_list array is allocated by the user and \c - * num_attribs shall be initialized to the number of allocated - * elements in that array. Upon successful return, the actual number - * of attributes will be overwritten into \c num_attribs. Otherwise, - * \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and \c num_attribs - * is adjusted to the number of elements that would be returned if - * enough space was available. - * - * Note: it is perfectly valid to pass NULL to the \c attrib_list - * argument when vaQuerySurfaceAttributes() is used to determine the - * actual number of elements that need to be allocated. - * - * @param[in] dpy the VA display - * @param[in] config the config identifying a codec or a video - * processing pipeline - * @param[out] attrib_list the output array of #VASurfaceAttrib elements - * @param[in,out] num_attribs the number of elements allocated on - * input, the number of elements actually filled in output - */ -VAStatus -vaQuerySurfaceAttributes( - VADisplay dpy, - VAConfigID config, - VASurfaceAttrib *attrib_list, - unsigned int *num_attribs -); - -/** - * \brief Creates an array of surfaces - * - * Creates an array of surfaces. The optional list of attributes shall - * be constructed based on what the underlying hardware could expose - * through vaQuerySurfaceAttributes(). - * - * @param[in] dpy the VA display - * @param[in] format the desired surface format. See \c VA_RT_FORMAT_* - * @param[in] width the surface width - * @param[in] height the surface height - * @param[out] surfaces the array of newly created surfaces - * @param[in] num_surfaces the number of surfaces to create - * @param[in] attrib_list the list of (optional) attributes, or \c NULL - * @param[in] num_attribs the number of attributes supplied in - * \c attrib_list, or zero - */ -VAStatus -vaCreateSurfaces( - VADisplay dpy, - unsigned int format, - unsigned int width, - unsigned int height, - VASurfaceID *surfaces, - unsigned int num_surfaces, - VASurfaceAttrib *attrib_list, - unsigned int num_attribs -); - -/** - * vaDestroySurfaces - Destroy resources associated with surfaces. - * Surfaces can only be destroyed after all contexts using these surfaces have been - * destroyed. - * dpy: display - * surfaces: array of surfaces to destroy - * num_surfaces: number of surfaces in the array to be destroyed. - */ -VAStatus vaDestroySurfaces( - VADisplay dpy, - VASurfaceID *surfaces, - int num_surfaces -); - -#define VA_PROGRESSIVE 0x1 -/** - * vaCreateContext - Create a context - * dpy: display - * config_id: configuration for the context - * picture_width: coded picture width - * picture_height: coded picture height - * flag: any combination of the following: - * VA_PROGRESSIVE (only progressive frame pictures in the sequence when set) - * render_targets: a hint for render targets (surfaces) tied to the context - * num_render_targets: number of render targets in the above array - * context: created context id upon return - */ -VAStatus vaCreateContext( - VADisplay dpy, - VAConfigID config_id, - int picture_width, - int picture_height, - int flag, - VASurfaceID *render_targets, - int num_render_targets, - VAContextID *context /* out */ -); - -/** - * vaDestroyContext - Destroy a context - * dpy: display - * context: context to be destroyed - */ -VAStatus vaDestroyContext( - VADisplay dpy, - VAContextID context -); - -//Multi-frame context -typedef VAGenericID VAMFContextID; -/** - * vaCreateMFContext - Create a multi-frame context - * interface encapsulating common for all streams memory objects and structures - * required for single GPU task submission from several VAContextID's. - * Allocation: This call only creates an instance, doesn't allocate any additional memory. - * Support identification: Application can identify multi-frame feature support by ability - * to create multi-frame context. If driver supports multi-frame - call successful, - * mf_context != NULL and VAStatus = VA_STATUS_SUCCESS, otherwise if multi-frame processing - * not supported driver returns VA_STATUS_ERROR_UNIMPLEMENTED and mf_context = NULL. - * return values: - * VA_STATUS_SUCCESS - operation successful. - * VA_STATUS_ERROR_UNIMPLEMENTED - no support for multi-frame. - * dpy: display adapter. - * mf_context: Multi-Frame context encapsulating all associated context - * for multi-frame submission. - */ -VAStatus vaCreateMFContext( - VADisplay dpy, - VAMFContextID *mf_context /* out */ -); - -/** - * vaMFAddContext - Provide ability to associate each context used for - * Multi-Frame submission and common Multi-Frame context. - * Try to add context to understand if it is supported. - * Allocation: this call allocates and/or reallocates all memory objects - * common for all contexts associated with particular Multi-Frame context. - * All memory required for each context(pixel buffers, internal driver - * buffers required for processing) allocated during standard vaCreateContext call for each context. - * Runtime dependency - if current implementation doesn't allow to run different entry points/profile, - * first context added will set entry point/profile for whole Multi-Frame context, - * all other entry points and profiles can be rejected to be added. - * Return values: - * VA_STATUS_SUCCESS - operation successful, context was added. - * VA_STATUS_ERROR_OPERATION_FAILED - something unexpected happened - application have to close - * current mf_context and associated contexts and start working with new ones. - * VA_STATUS_ERROR_INVALID_CONTEXT - ContextID is invalid, means: - * 1 - mf_context is not valid context or - * 2 - driver can't suport different VAEntrypoint or VAProfile simultaneosly - * and current context contradicts with previously added, application can continue with current mf_context - * and other contexts passed this call, rejected context can continue work in stand-alone - * mode or other mf_context. - * VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT - particular context being added was created with with - * unsupported VAEntrypoint. Application can continue with current mf_context - * and other contexts passed this call, rejected context can continue work in stand-alone - * mode. - * VA_STATUS_ERROR_UNSUPPORTED_PROFILE - Current context with Particular VAEntrypoint is supported - * but VAProfile is not supported. Application can continue with current mf_context - * and other contexts passed this call, rejected context can continue work in stand-alone - * mode. - * dpy: display adapter. - * context: context being associated with Multi-Frame context. - * mf_context: - multi-frame context used to associate contexts for multi-frame submission. - */ -VAStatus vaMFAddContext( - VADisplay dpy, - VAMFContextID mf_context, - VAContextID context -); - -/** - * vaMFReleaseContext - Removes context from multi-frame and - * association with multi-frame context. - * After association removed vaEndPicture will submit tasks, but not vaMFSubmit. - * Return values: - * VA_STATUS_SUCCESS - operation successful, context was removed. - * VA_STATUS_ERROR_OPERATION_FAILED - something unexpected happened. - * application need to destroy this VAMFContextID and all assotiated VAContextID - * dpy: display - * mf_context: VAMFContextID where context is added - * context: VAContextID to be added - */ -VAStatus vaMFReleaseContext( - VADisplay dpy, - VAMFContextID mf_context, - VAContextID context -); - -/** - * Buffers - * Buffers are used to pass various types of data from the - * client to the server. The server maintains a data store - * for each buffer created, and the client idenfies a buffer - * through a unique buffer id assigned by the server. - */ - -typedef VAGenericID VABufferID; - -typedef enum { - VAPictureParameterBufferType = 0, - VAIQMatrixBufferType = 1, - VABitPlaneBufferType = 2, - VASliceGroupMapBufferType = 3, - VASliceParameterBufferType = 4, - VASliceDataBufferType = 5, - VAMacroblockParameterBufferType = 6, - VAResidualDataBufferType = 7, - VADeblockingParameterBufferType = 8, - VAImageBufferType = 9, - VAProtectedSliceDataBufferType = 10, - VAQMatrixBufferType = 11, - VAHuffmanTableBufferType = 12, - VAProbabilityBufferType = 13, - - /* Following are encode buffer types */ - VAEncCodedBufferType = 21, - VAEncSequenceParameterBufferType = 22, - VAEncPictureParameterBufferType = 23, - VAEncSliceParameterBufferType = 24, - VAEncPackedHeaderParameterBufferType = 25, - VAEncPackedHeaderDataBufferType = 26, - VAEncMiscParameterBufferType = 27, - VAEncMacroblockParameterBufferType = 28, - VAEncMacroblockMapBufferType = 29, - - /** - * \brief Encoding QP buffer - * - * This buffer contains QP per MB for encoding. Currently - * VAEncQPBufferH264 is defined for H.264 encoding, see - * #VAEncQPBufferH264 for details - */ - VAEncQPBufferType = 30, - /* Following are video processing buffer types */ - /** - * \brief Video processing pipeline parameter buffer. - * - * This buffer describes the video processing pipeline. See - * #VAProcPipelineParameterBuffer for details. - */ - VAProcPipelineParameterBufferType = 41, - /** - * \brief Video filter parameter buffer. - * - * This buffer describes the video filter parameters. All buffers - * inherit from #VAProcFilterParameterBufferBase, thus including - * a unique filter buffer type. - * - * The default buffer used by most filters is #VAProcFilterParameterBuffer. - * Filters requiring advanced parameters include, but are not limited to, - * deinterlacing (#VAProcFilterParameterBufferDeinterlacing), - * color balance (#VAProcFilterParameterBufferColorBalance), etc. - */ - VAProcFilterParameterBufferType = 42, - /** - * \brief FEI specific buffer types - */ - VAEncFEIMVBufferType = 43, - VAEncFEIMBCodeBufferType = 44, - VAEncFEIDistortionBufferType = 45, - VAEncFEIMBControlBufferType = 46, - VAEncFEIMVPredictorBufferType = 47, - VAStatsStatisticsParameterBufferType = 48, - /** \brief Statistics output for VAEntrypointStats progressive and top field of interlaced case*/ - VAStatsStatisticsBufferType = 49, - /** \brief Statistics output for VAEntrypointStats bottom field of interlaced case*/ - VAStatsStatisticsBottomFieldBufferType = 50, - VAStatsMVBufferType = 51, - VAStatsMVPredictorBufferType = 52, - /** Force MB's to be non skip for encode.it's per-mb control buffer, The width of the MB map - * Surface is (width of the Picture in MB unit) * 1 byte, multiple of 64 bytes. - * The height is (height of the picture in MB unit). The picture is either - * frame or non-interleaved top or bottom field. If the application provides this - *surface, it will override the "skipCheckDisable" setting in VAEncMiscParameterEncQuality. - */ - VAEncMacroblockDisableSkipMapBufferType = 53, - /** - * \brief HEVC FEI CTB level cmd buffer - * it is CTB level information for future usage. - */ - VAEncFEICTBCmdBufferType = 54, - /** - * \brief HEVC FEI CU level data buffer - * it's CTB level information for future usage - */ - VAEncFEICURecordBufferType = 55, - /** decode stream out buffer, intermedia data of decode, it may include MV, MB mode etc. - * it can be used to detect motion and analyze the frame contain */ - VADecodeStreamoutBufferType = 56, - - /** \brief HEVC Decoding Subset Parameter buffer type - * - * The subsets parameter buffer is concatenation with one or multiple - * subset entry point offsets. All the offset values are layed out one - * by one according to slice order with first slice segment first, second - * slice segment second, etc... The entry number is indicated by parameter - * \ref num_entry_point_offsets. And the first entry position of the entry - * point offsets for any slice segment is indicated by parameter - * entry_offset_to_subset_array in VAPictureParameterBufferHEVC data structure. - */ - VASubsetsParameterBufferType = 57, - /** \brief adjust context parameters dynamically - * - * this parameter is used to update context parameters, detail parameter is in - * \c VAContextParameterUpdateBuffer - */ - VAContextParameterUpdateBufferType = 58, - /** - * \brief Protected session execution buffer type - * - * It's for TEE execution usage (vaProtectedSessionExecute()). The buffer structure is in - * \c VAProtectedSessionExecuteBuffer - */ - VAProtectedSessionExecuteBufferType = 59, - - /** \brief Encryption parameters buffer for protected content session. - * - * Refer to \c VAEncryptionParameters - */ - VAEncryptionParameterBufferType = 60, - - /** - * \brief Encoding delta QP per block buffer - * - * This buffer only could be created and accepted - * when \c VAConfigAttribValEncPerBlockControl delta_qp_support == 1. - * This input buffer contains delta QP per block for encoding. - * The supported size of delta QP block and the size of delta QP - * must be quried from \c VAConfigAttribValEncPerBlockControl. - */ - VAEncDeltaQpPerBlockBufferType = 61, - - VABufferTypeMax -} VABufferType; - -/** \brief update the context parameter - * this structure is used to update context parameters, such as priority of the context - * backend driver should keep the parameter unchanged if there no new - * parameter updated. - */ -typedef struct _VAContextParameterUpdateBuffer { - union { - struct { - /** \brief indicate whether context priority changed */ - uint32_t context_priority_update : 1; - /** \brief Reserved bits for future use, must be zero */ - uint32_t reserved : 31; - } bits; - uint32_t value; - } flags; - /** \brief task/context priority */ - VAConfigAttribValContextPriority context_priority; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved[VA_PADDING_MEDIUM]; -} VAContextParameterUpdateBuffer; - -/** - * These ENCRYPTION_TYPEs are used for the attribute values for - * \c VAConfigAttribEncryption and for encryption_type in - * VAEncryptionParameters. - * - * When used for \c VAConfigAttribEncryption, it be used via - * vaQueryConfigEntrypoints to check which type are supported for specific - * profile or not. - * - * When used for encryption_type in VAEncryptionParameters, it tells driver - * the parameters in VAEncryptionParameters are used for which encryption type. - */ -#define VA_ENCRYPTION_TYPE_FULLSAMPLE_CTR 0x00000001 /* AES CTR fullsample */ -#define VA_ENCRYPTION_TYPE_FULLSAMPLE_CBC 0x00000002 /* AES CBC fullsample */ -#define VA_ENCRYPTION_TYPE_SUBSAMPLE_CTR 0x00000004 /* AES CTR fullsample */ -#define VA_ENCRYPTION_TYPE_SUBSAMPLE_CBC 0x00000008 /* AES CBC fullsample */ - -/** \brief structure for encrypted segment info. */ -typedef struct _VAEncryptionSegmentInfo { - /** \brief The offset relative to the start of the bitstream input in - * bytes of the start of the segment */ - uint32_t segment_start_offset; - /** \brief The length of the segments in bytes */ - uint32_t segment_length; - /** \brief The length in bytes of the remainder of an incomplete block - * from a previous segment*/ - uint32_t partial_aes_block_size; - /** \brief The length in bytes of the initial clear data */ - uint32_t init_byte_length; - /** \brief This will be AES counter for secure decode and secure encode - * when numSegments equals 1, valid size is specified by - * \c key_blob_size */ - uint8_t aes_cbc_iv_or_ctr[64]; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAEncryptionSegmentInfo; - -/** \brief Encryption parameters buffer for VAEncryptionParameterBufferType */ -typedef struct _VAEncryptionParameters { - /** \brief Encryption type, refer to \c VA_ENCRYPTION_TYPE_FULLSAMPLE_CTR, - * \c VA_ENCRYPTION_TYPE_FULLSAMPLE_CBC, \c VA_ENCRYPTION_TYPE_SUBSAMPLE_CTR, - * or \c VA_ENCRYPTION_TYPE_SUBSAMPLE_CBC */ - uint32_t encryption_type; - /** \brief The number of sengments */ - uint32_t num_segments; - /** \brief Pointer of segments */ - VAEncryptionSegmentInfo *segment_info; - /** \brief The status report index reserved for CENC fullsample workload. - * The related structures and definitions are vendor specific. - */ - uint32_t status_report_index; - /** \brief CENC counter length */ - uint32_t size_of_length; - /** \brief Wrapped decrypt blob (Snd)kb, valid size is specified by - * \c key_blob_size */ - uint8_t wrapped_decrypt_blob[64]; - /** \brief Wrapped Key blob info (Sne)kb, valid size is specified by - * \c key_blob_size */ - uint8_t wrapped_encrypt_blob[64]; - /** \brief key blob size - * It could be \c VA_PC_BLOCK_SIZE_128, \c VA_PC_BLOCK_SIZE_192, or - * \c VA_PC_BLOCK_SIZE_256 - */ - uint32_t key_blob_size; - /** \brief Indicates the number of 16-byte BLOCKS that are encrypted in any - * given encrypted region of segments. - * If this value is zero: - * 1. All bytes in encrypted region of segments are encrypted, i.e. the - * CENC or CBC1 scheme is being used - * 2. blocks_stripe_clear must also be zero. - * If this value is non-zero, blocks_stripe_clear must also be non-zero. - */ - uint32_t blocks_stripe_encrypted; - /** \brief Indicates the number of 16-byte BLOCKS that are clear in any given - * encrypted region of segments, as defined by the CENS and CBCS schemes in - * the common encryption spec. - * If this value is zero, all bytes in encrypted region of segments are - * encrypted, i.e. the CENC or CBC1 scheme is being used. - */ - uint32_t blocks_stripe_clear; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAEncryptionParameters; - -/** - * Processing rate parameter for encode. - */ -typedef struct _VAProcessingRateParameterEnc { - /** \brief Profile level */ - uint8_t level_idc; - uint8_t reserved[3]; - /** \brief quality level. When set to 0, default quality - * level is used. - */ - uint32_t quality_level; - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; -} VAProcessingRateParameterEnc; - -/** - * Processing rate parameter for decode. - */ -typedef struct _VAProcessingRateParameterDec { - /** \brief Profile level */ - uint8_t level_idc; - uint8_t reserved0[3]; - uint32_t reserved; -} VAProcessingRateParameterDec; - -typedef struct _VAProcessingRateParameter { - union { - VAProcessingRateParameterEnc proc_buf_enc; - VAProcessingRateParameterDec proc_buf_dec; - }; -} VAProcessingRateParameter; - -/** - * \brief Queries processing rate for the supplied config. - * - * This function queries the processing rate based on parameters in - * \c proc_buf for the given \c config. Upon successful return, the processing - * rate value will be stored in \c processing_rate. Processing rate is - * specified as the number of macroblocks/CTU per second. - * - * If NULL is passed to the \c proc_buf, the default processing rate for the - * given configuration will be returned. - * - * @param[in] dpy the VA display - * @param[in] config the config identifying a codec or a video - * processing pipeline - * @param[in] proc_buf the buffer that contains the parameters for - either the encode or decode processing rate - * @param[out] processing_rate processing rate in number of macroblocks per - second constrained by parameters specified in proc_buf - * - */ -VAStatus -vaQueryProcessingRate( - VADisplay dpy, - VAConfigID config, - VAProcessingRateParameter *proc_buf, - unsigned int *processing_rate -); - -typedef enum { - VAEncMiscParameterTypeFrameRate = 0, - VAEncMiscParameterTypeRateControl = 1, - VAEncMiscParameterTypeMaxSliceSize = 2, - VAEncMiscParameterTypeAIR = 3, - /** \brief Buffer type used to express a maximum frame size (in bits). */ - VAEncMiscParameterTypeMaxFrameSize = 4, - /** \brief Buffer type used for HRD parameters. */ - VAEncMiscParameterTypeHRD = 5, - VAEncMiscParameterTypeQualityLevel = 6, - /** \brief Buffer type used for Rolling intra refresh */ - VAEncMiscParameterTypeRIR = 7, - /** \brief Buffer type used for quantization parameters, it's per-sequence parameter*/ - VAEncMiscParameterTypeQuantization = 8, - /** \brief Buffer type used for sending skip frame parameters to the encoder's - * rate control, when the user has externally skipped frames. */ - VAEncMiscParameterTypeSkipFrame = 9, - /** \brief Buffer type used for region-of-interest (ROI) parameters. */ - VAEncMiscParameterTypeROI = 10, - /** \brief Buffer type used to express a maximum frame size (in bytes) settings for multiple pass. */ - VAEncMiscParameterTypeMultiPassFrameSize = 11, - /** \brief Buffer type used for temporal layer structure */ - VAEncMiscParameterTypeTemporalLayerStructure = 12, - /** \brief Buffer type used for dirty region-of-interest (ROI) parameters. */ - VAEncMiscParameterTypeDirtyRect = 13, - /** \brief Buffer type used for parallel BRC parameters. */ - VAEncMiscParameterTypeParallelBRC = 14, - /** \brief Set MB partion mode mask and Half-pel/Quant-pel motion search */ - VAEncMiscParameterTypeSubMbPartPel = 15, - /** \brief set encode quality tuning */ - VAEncMiscParameterTypeEncQuality = 16, - /** \brief Buffer type used for encoder rounding offset parameters. */ - VAEncMiscParameterTypeCustomRoundingControl = 17, - /** \brief Buffer type used for FEI input frame level parameters */ - VAEncMiscParameterTypeFEIFrameControl = 18, - /** \brief encode extension buffer, ect. MPEG2 Sequence extenstion data */ - VAEncMiscParameterTypeExtensionData = 19 -} VAEncMiscParameterType; - -/** \brief Packed header type. */ -typedef enum { - /** \brief Packed sequence header. */ - VAEncPackedHeaderSequence = 1, - /** \brief Packed picture header. */ - VAEncPackedHeaderPicture = 2, - /** \brief Packed slice header. */ - VAEncPackedHeaderSlice = 3, - /** - * \brief Packed raw header. - * - * Packed raw data header can be used by the client to insert a header - * into the bitstream data buffer at the point it is passed, the driver - * will handle the raw packed header based on "has_emulation_bytes" field - * in the packed header parameter structure. - */ - VAEncPackedHeaderRawData = 4, - /** - * \brief Misc packed header. See codec-specific definitions. - * - * @deprecated - * This is a deprecated packed header type. All applications can use - * \c VAEncPackedHeaderRawData to insert a codec-specific packed header - */ - VAEncPackedHeaderMiscMask va_deprecated_enum = 0x80000000, -} VAEncPackedHeaderType; - -/** \brief Packed header parameter. */ -typedef struct _VAEncPackedHeaderParameterBuffer { - /** Type of the packed header buffer. See #VAEncPackedHeaderType. */ - uint32_t type; - /** \brief Size of the #VAEncPackedHeaderDataBuffer in bits. */ - uint32_t bit_length; - /** \brief Flag: buffer contains start code emulation prevention bytes? */ - uint8_t has_emulation_bytes; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPackedHeaderParameterBuffer; - -/** - * For application, e.g. set a new bitrate - * VABufferID buf_id; - * VAEncMiscParameterBuffer *misc_param; - * VAEncMiscParameterRateControl *misc_rate_ctrl; - * - * vaCreateBuffer(dpy, context, VAEncMiscParameterBufferType, - * sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParameterRateControl), - * 1, NULL, &buf_id); - * - * vaMapBuffer(dpy,buf_id,(void **)&misc_param); - * misc_param->type = VAEncMiscParameterTypeRateControl; - * misc_rate_ctrl= (VAEncMiscParameterRateControl *)misc_param->data; - * misc_rate_ctrl->bits_per_second = 6400000; - * vaUnmapBuffer(dpy, buf_id); - * vaRenderPicture(dpy, context, &buf_id, 1); - */ -typedef struct _VAEncMiscParameterBuffer { - VAEncMiscParameterType type; - uint32_t data[]; -} VAEncMiscParameterBuffer; - -/** \brief Temporal layer Structure*/ -typedef struct _VAEncMiscParameterTemporalLayerStructure { - /** \brief The number of temporal layers */ - uint32_t number_of_layers; - /** \brief The length of the array defining frame layer membership. Should be 1-32 */ - uint32_t periodicity; - /** - * \brief The array indicating the layer id for each frame - * - * The layer id for the first frame in a coded sequence is always 0, so layer_id[] specifies the layer - * ids for frames starting from the 2nd frame. - */ - uint32_t layer_id[32]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterTemporalLayerStructure; - - -/** \brief Rate control parameters */ -typedef struct _VAEncMiscParameterRateControl { - /** The maximum bit-rate which the the rate controller should generate. */ - uint32_t bits_per_second; - /** The target bit-rate which the rate controller should generate, as a percentage of the - * maximum bit-rate. - * - * In CBR mode this value is ignored (treated as 100%). - */ - uint32_t target_percentage; - /** Rate control window size in milliseconds. - * - * The rate controller will attempt to guarantee that the target and maximum bit-rates are - * correct over this window. - */ - uint32_t window_size; - /** Initial quantiser value used at the start of the stream. - * - * Ignored if set to zero. - */ - uint32_t initial_qp; - /** Minimum quantiser value to use. - * - * The quantiser will not go below the value - if this limit is hit, the output bitrate may - * be lower than the target. Ignored if set to zero. - */ - uint32_t min_qp; - /** Basic unit size. - * - * Only used by some drivers - see driver documentation for details. Set to zero if unused. - */ - uint32_t basic_unit_size; - union { - struct { - /** Force rate controller reset. - * - * The next frame will be treated as the start of a new stream, with all rate - * controller state reset to its initial values. - */ - uint32_t reset : 1; - /** Disable frame skip in rate control mode. */ - uint32_t disable_frame_skip : 1; - /** Disable bit stuffing in rate control mode. */ - uint32_t disable_bit_stuffing : 1; - /** Macroblock-level rate control. - * - * 0: use default, 1: always enable, 2: always disable, other: reserved. - * - * This feature is only available if VAConfigAttribRateControl has the - * \ref VA_RC_MB bit set. - */ - uint32_t mb_rate_control : 4; - /** The temporal layer that these rate control parameters apply to. */ - uint32_t temporal_id : 8; - /** Ensure that intra frames also conform to the constant frame size. */ - uint32_t cfs_I_frames : 1; - /** Enable parallel rate control for hierarchical B frames. - * - * See \ref VA_RC_PARALLEL. - */ - uint32_t enable_parallel_brc : 1; - uint32_t enable_dynamic_scaling : 1; - /** Frame tolerance mode. - * - * Indicates the tolerance the application has to variations in the frame size. - * For example, wireless display scenarios may require very steady bit rate to - * reduce buffering time. It affects the rate control algorithm used, - * but may or may not have an effect based on the combination of other BRC - * parameters. Only valid when the driver reports support for - * #VAConfigAttribFrameSizeToleranceSupport. - * - * equals 0 -- normal mode; - * equals 1 -- maps to sliding window; - * equals 2 -- maps to low delay mode; - * other -- invalid. - */ - uint32_t frame_tolerance_mode : 2; - /** Reserved for future use, must be zero. */ - uint32_t reserved : 12; - } bits; - uint32_t value; - } rc_flags; - /** Initial quality factor used in ICQ mode. - * - * This value must be between 1 and 51. - * this value will be deprecated in future, to use quality_factor instead of it. - */ - uint32_t ICQ_quality_factor; - /** Maximum quantiser value to use. - * - * The quantiser will not go above this value - if this limit is hit, the output bitrate - * may exceed the target. Ignored if set to zero. - */ - uint32_t max_qp; - /** Quality factor - * - * the range will be different for different codec - */ - uint32_t quality_factor; - /** Target frame size - * - * Desired frame size in bytes. - * This parameter can be used in some RC modes (like Transport Controlled BRC) - * where feedback from the app is required. - * Zero value means no limits. - * - */ - uint32_t target_frame_size; - /** Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterRateControl; - -/** Encode framerate parameters. - * - * Sets the encode framerate used by the rate controller. This should be - * provided in all modes using a bitrate target (variable framerate is not - * supported). - */ -typedef struct _VAEncMiscParameterFrameRate { - /** Encode framerate. - * - * The framerate is specified as a number of frames per second, as a - * fraction. The denominator of the fraction is given in the top half - * (the high two bytes) of the framerate field, and the numerator is - * given in the bottom half (the low two bytes). - * - * That is: - * denominator = framerate >> 16 & 0xffff; - * numerator = framerate & 0xffff; - * fps = numerator / denominator; - * - * For example, if framerate is set to (100 << 16 | 750), this is - * 750 / 100, hence 7.5fps. - * - * If the denominator is zero (the high two bytes are both zero) then - * it takes the value one instead, so the framerate is just the integer - * in the low 2 bytes. - */ - uint32_t framerate; - union { - struct { - /** The temporal layer that these framerate parameters apply to. */ - uint32_t temporal_id : 8; - /** Reserved for future use, must be zero. */ - uint32_t reserved : 24; - } bits; - uint32_t value; - } framerate_flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterFrameRate; - -/** - * Allow a maximum slice size to be specified (in bits). - * The encoder will attempt to make sure that individual slices do not exceed this size - * Or to signal applicate if the slice size exceed this size, see "status" of VACodedBufferSegment - */ -typedef struct _VAEncMiscParameterMaxSliceSize { - uint32_t max_slice_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterMaxSliceSize; - -typedef struct _VAEncMiscParameterAIR { - uint32_t air_num_mbs; - uint32_t air_threshold; - uint32_t air_auto; /* if set to 1 then hardware auto-tune the AIR threshold */ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterAIR; - -/* - * \brief Rolling intra refresh data structure for encoding. - */ -typedef struct _VAEncMiscParameterRIR { - union { - struct - /** - * \brief Indicate if intra refresh is enabled in column/row. - * - * App should query VAConfigAttribEncIntraRefresh to confirm RIR support - * by the driver before sending this structure. - */ - { - /* \brief enable RIR in column */ - uint32_t enable_rir_column : 1; - /* \brief enable RIR in row */ - uint32_t enable_rir_row : 1; - uint32_t reserved : 30; - } bits; - uint32_t value; - } rir_flags; - /** - * \brief Indicates the column or row location in MB. It is ignored if - * rir_flags is 0. - */ - uint16_t intra_insertion_location; - /** - * \brief Indicates the number of columns or rows in MB. It is ignored if - * rir_flags is 0. - */ - uint16_t intra_insert_size; - /** - * \brief indicates the Qp difference for inserted intra columns or rows. - * App can use this to adjust intra Qp based on bitrate & max frame size. - */ - uint8_t qp_delta_for_inserted_intra; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterRIR; - -/** HRD / VBV buffering parameters for encoding. - * - * This sets the HRD / VBV parameters which will be used by the rate - * controller for encoding. It should be specified in modes using a bitrate - * target when the buffering of the output stream needs to be constrained. - * - * If not provided, the encoder may use arbitrary amounts of buffering. - */ -typedef struct _VAEncMiscParameterHRD { - /** The initial fullness of the HRD coded picture buffer, in bits. - * - * This sets how full the CPB is when encoding begins - that is, how much - * buffering will happen on the decoder side before the first frame. - * The CPB fullness will be reset to this value after any rate control - * reset (a change in parameters or an explicit reset). - * - * For H.264, it should match the value of initial_cpb_removal_delay in - * buffering_period SEI messages. - */ - uint32_t initial_buffer_fullness; - /** The HRD coded picture buffer size, in bits. - * - * For H.264, it should match the value of cpb_size_value_minus1 in the VUI - * parameters. - */ - uint32_t buffer_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterHRD; - -/** - * \brief Defines a maximum frame size (in bits). - * - * This misc parameter buffer defines the maximum size of a frame (in - * bits). The encoder will try to make sure that each frame does not - * exceed this size. Otherwise, if the frame size exceeds this size, - * the \c status flag of #VACodedBufferSegment will contain - * #VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW. - */ -typedef struct _VAEncMiscParameterBufferMaxFrameSize { - /** \brief Type. Shall be set to #VAEncMiscParameterTypeMaxFrameSize. */ - /** duplicated with VAEncMiscParameterBuffer, should be deprecated*/ - va_deprecated VAEncMiscParameterType type; - /** \brief Maximum size of a frame (in bits). */ - uint32_t max_frame_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferMaxFrameSize; - -/** - * \brief Maximum frame size (in bytes) settings for multiple pass. - * - * This misc parameter buffer defines the maximum size of a frame (in - * bytes) settings for multiple pass. currently only AVC encoder can - * support this settings in multiple pass case. If the frame size exceeds - * this size, the encoder will do more pak passes to adjust the QP value - * to control the frame size. - */ -typedef struct _VAEncMiscParameterBufferMultiPassFrameSize { - /** \brief Type. Shall be set to #VAEncMiscParameterTypeMultiPassMaxFrameSize. */ - /** duplicated with VAEncMiscParameterBuffer, should be deprecated*/ - va_deprecated VAEncMiscParameterType type; - /** \brief Maximum size of a frame (in byte) */ - uint32_t max_frame_size; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved; - /** \brief number of passes, every pass has different QP, currently AVC encoder can support up to 4 passes */ - uint8_t num_passes; - /** \brief delta QP list for every pass */ - uint8_t *delta_qp; - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferMultiPassFrameSize; - -/** - * \brief Encoding quality level. - * - * The encoding quality could be set through this structure, if the implementation - * supports multiple quality levels. The quality level set through this structure is - * persistent over the entire coded sequence, or until a new structure is being sent. - * The quality level range can be queried through the VAConfigAttribEncQualityRange - * attribute. A lower value means higher quality, and a value of 1 represents the highest - * quality. The quality level setting is used as a trade-off between quality and speed/power - * consumption, with higher quality corresponds to lower speed and higher power consumption. - */ -typedef struct _VAEncMiscParameterBufferQualityLevel { - /** \brief Encoding quality level setting. When set to 0, default quality - * level is used. - */ - uint32_t quality_level; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferQualityLevel; - -/** - * \brief Quantization settings for encoding. - * - * Some encoders support special types of quantization such as trellis, and this structure - * can be used by the app to control these special types of quantization by the encoder. - */ -typedef struct _VAEncMiscParameterQuantization { - union { - /* if no flags is set then quantization is determined by the driver */ - struct { - /* \brief disable trellis for all frames/fields */ - uint32_t disable_trellis : 1; - /* \brief enable trellis for I frames/fields */ - uint32_t enable_trellis_I : 1; - /* \brief enable trellis for P frames/fields */ - uint32_t enable_trellis_P : 1; - /* \brief enable trellis for B frames/fields */ - uint32_t enable_trellis_B : 1; - uint32_t reserved : 28; - } bits; - uint32_t value; - } quantization_flags; - uint32_t va_reserved; -} VAEncMiscParameterQuantization; - -/** - * \brief Encoding skip frame. - * - * The application may choose to skip frames externally to the encoder (e.g. drop completely or - * code as all skip's). For rate control purposes the encoder will need to know the size and number - * of skipped frames. Skip frame(s) indicated through this structure is applicable only to the - * current frame. It is allowed for the application to still send in packed headers for the driver to - * pack, although no frame will be encoded (e.g. for HW to encrypt the frame). - */ -typedef struct _VAEncMiscParameterSkipFrame { - /** \brief Indicates skip frames as below. - * 0: Encode as normal, no skip. - * 1: One or more frames were skipped prior to the current frame, encode the current frame as normal. - * 2: The current frame is to be skipped, do not encode it but pack/encrypt the packed header contents - * (all except VAEncPackedHeaderSlice) which could contain actual frame contents (e.g. pack the frame - * in VAEncPackedHeaderPicture). */ - uint8_t skip_frame_flag; - /** \brief The number of frames skipped prior to the current frame. Valid when skip_frame_flag = 1. */ - uint8_t num_skip_frames; - /** \brief When skip_frame_flag = 1, the size of the skipped frames in bits. When skip_frame_flag = 2, - * the size of the current skipped frame that is to be packed/encrypted in bits. */ - uint32_t size_skip_frames; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterSkipFrame; - -/** - * \brief Encoding region-of-interest (ROI). - * - * The encoding ROI can be set through VAEncMiscParameterBufferROI, if the implementation - * supports ROI input. The ROI set through this structure is applicable only to the - * current frame or field, so must be sent every frame or field to be applied. The number of - * supported ROIs can be queried through the VAConfigAttribEncROI. The encoder will use the - * ROI information to adjust the QP values of the MB's that fall within the ROIs. - */ -typedef struct _VAEncROI { - /** \brief Defines the ROI boundary in pixels, the driver will map it to appropriate - * codec coding units. It is relative to frame coordinates for the frame case and - * to field coordinates for the field case. */ - VARectangle roi_rectangle; - /** - * \brief ROI value - * - * \ref roi_value specifies ROI delta QP or ROI priority. - * -- ROI delta QP is the value that will be added on top of the frame level QP. - * -- ROI priority specifies the priority of a region, it can be positive (more important) - * or negative (less important) values and is compared with non-ROI region (taken as value 0), - * E.g. ROI region with \ref roi_value -3 is less important than the non-ROI region (\ref roi_value - * implied to be 0) which is less important than ROI region with roi_value +2. For overlapping - * regions, the roi_value that is first in the ROI array will have priority. - * - * \ref roi_value always specifes ROI delta QP when VAConfigAttribRateControl == VA_RC_CQP, no matter - * the value of \c roi_value_is_qp_delta in #VAEncMiscParameterBufferROI. - * - * \ref roi_value depends on \c roi_value_is_qp_delta in #VAEncMiscParameterBufferROI when - * VAConfigAttribRateControl != VA_RC_CQP. \ref roi_value specifies ROI_delta QP if \c roi_value_is_qp_delta - * in VAEncMiscParameterBufferROI is 1, otherwise \ref roi_value specifies ROI priority. - */ - int8_t roi_value; -} VAEncROI; - -typedef struct _VAEncMiscParameterBufferROI { - /** \brief Number of ROIs being sent.*/ - uint32_t num_roi; - - /** \brief Valid when VAConfigAttribRateControl != VA_RC_CQP, then the encoder's - * rate control will determine actual delta QPs. Specifies the max/min allowed delta - * QPs. */ - int8_t max_delta_qp; - int8_t min_delta_qp; - - /** \brief Pointer to a VAEncROI array with num_roi elements. It is relative to frame - * coordinates for the frame case and to field coordinates for the field case.*/ - VAEncROI *roi; - union { - struct { - /** - * \brief An indication for roi value. - * - * \ref roi_value_is_qp_delta equal to 1 indicates \c roi_value in #VAEncROI should - * be used as ROI delta QP. \ref roi_value_is_qp_delta equal to 0 indicates \c roi_value - * in #VAEncROI should be used as ROI priority. - * - * \ref roi_value_is_qp_delta is only available when VAConfigAttribRateControl != VA_RC_CQP, - * the setting must comply with \c roi_rc_priority_support and \c roi_rc_qp_delta_support in - * #VAConfigAttribValEncROI. The underlying driver should ignore this field - * when VAConfigAttribRateControl == VA_RC_CQP. - */ - uint32_t roi_value_is_qp_delta : 1; - uint32_t reserved : 31; - } bits; - uint32_t value; - } roi_flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferROI; -/* - * \brief Dirty rectangle data structure for encoding. - * - * The encoding dirty rect can be set through VAEncMiscParameterBufferDirtyRect, if the - * implementation supports dirty rect input. The rect set through this structure is applicable - * only to the current frame or field, so must be sent every frame or field to be applied. - * The number of supported rects can be queried through the VAConfigAttribEncDirtyRect. The - * encoder will use the rect information to know those rectangle areas have changed while the - * areas not covered by dirty rect rectangles are assumed to have not changed compared to the - * previous picture. The encoder may do some internal optimizations. - */ -typedef struct _VAEncMiscParameterBufferDirtyRect { - /** \brief Number of Rectangle being sent.*/ - uint32_t num_roi_rectangle; - - /** \brief Pointer to a VARectangle array with num_roi_rectangle elements.*/ - VARectangle *roi_rectangle; -} VAEncMiscParameterBufferDirtyRect; - -/** \brief Attribute value for VAConfigAttribEncParallelRateControl */ -typedef struct _VAEncMiscParameterParallelRateControl { - /** brief Number of layers*/ - uint32_t num_layers; - /** brief Number of B frames per layer per GOP. - * - * it should be allocated by application, and the is num_layers. - * num_b_in_gop[0] is the number of regular B which refers to only I or P frames. */ - uint32_t *num_b_in_gop; -} VAEncMiscParameterParallelRateControl; - -/** per frame encoder quality controls, once set they will persist for all future frames - *till it is updated again. */ -typedef struct _VAEncMiscParameterEncQuality { - union { - struct { - /** Use raw frames for reference instead of reconstructed frames. - * it only impact motion estimation (ME) stage, and will not impact MC stage - * so the reconstruct picture will can match with decode side */ - uint32_t useRawPicForRef : 1; - /** Disables skip check for ME stage, it will increase the bistream size - * but will improve the qulity */ - uint32_t skipCheckDisable : 1; - /** Indicates app will override default driver FTQ settings using FTQEnable. - * FTQ is forward transform quantization */ - uint32_t FTQOverride : 1; - /** Enables/disables FTQ. */ - uint32_t FTQEnable : 1; - /** Indicates the app will provide the Skip Threshold LUT to use when FTQ is - * enabled (FTQSkipThresholdLUT), else default driver thresholds will be used. */ - uint32_t FTQSkipThresholdLUTInput : 1; - /** Indicates the app will provide the Skip Threshold LUT to use when FTQ is - * disabled (NonFTQSkipThresholdLUT), else default driver thresholds will be used. */ - uint32_t NonFTQSkipThresholdLUTInput : 1; - uint32_t ReservedBit : 1; - /** Control to enable the ME mode decision algorithm to bias to fewer B Direct/Skip types. - * Applies only to B frames, all other frames will ignore this setting. */ - uint32_t directBiasAdjustmentEnable : 1; - /** Enables global motion bias. global motion also is called HME (Heirarchical Motion Estimation ) - * HME is used to handle large motions and avoiding local minima in the video encoding process - * down scaled the input and reference picture, then do ME. the result will be a predictor to next level HME or ME - * current interface divide the HME to 3 level. UltraHME , SuperHME, and HME, result of UltraHME will be input of SurperHME, - * result of superHME will be a input for HME. HME result will be input of ME. it is a switch for HMEMVCostScalingFactor - * can change the HME bias inside RDO stage*/ - uint32_t globalMotionBiasAdjustmentEnable : 1; - /** MV cost scaling ratio for HME ( predictors. It is used when - * globalMotionBiasAdjustmentEnable == 1, else it is ignored. Values are: - * 0: set MV cost to be 0 for HME predictor. - * 1: scale MV cost to be 1/2 of the default value for HME predictor. - * 2: scale MV cost to be 1/4 of the default value for HME predictor. - * 3: scale MV cost to be 1/8 of the default value for HME predictor. */ - uint32_t HMEMVCostScalingFactor : 2; - /**disable HME, if it is disabled. Super*ultraHME should also be disabled */ - uint32_t HMEDisable : 1; - /**disable Super HME, if it is disabled, ultraHME should be disabled */ - uint32_t SuperHMEDisable : 1; - /** disable Ultra HME */ - uint32_t UltraHMEDisable : 1; - /** disable panic mode. Panic mode happened when there are extreme BRC (bit rate control) requirement - * frame size cant achieve the target of BRC. when Panic mode is triggered, Coefficients will - * be set to zero. disable panic mode will improve quality but will impact BRC */ - uint32_t PanicModeDisable : 1; - /** Force RepartitionCheck - * 0: DEFAULT - follow driver default settings. - * 1: FORCE_ENABLE - enable this feature totally for all cases. - * 2: FORCE_DISABLE - disable this feature totally for all cases. */ - uint32_t ForceRepartitionCheck : 2; - - }; - uint32_t encControls; - }; - - /** Maps QP to skip thresholds when FTQ is enabled. Valid range is 0-255. */ - uint8_t FTQSkipThresholdLUT[52]; - /** Maps QP to skip thresholds when FTQ is disabled. Valid range is 0-65535. */ - uint16_t NonFTQSkipThresholdLUT[52]; - - uint32_t reserved[VA_PADDING_HIGH]; // Reserved for future use. - -} VAEncMiscParameterEncQuality; - -/** - * \brief Custom Encoder Rounding Offset Control. - * Application may use this structure to set customized rounding - * offset parameters for quantization. - * Valid when \c VAConfigAttribCustomRoundingControl equals 1. - */ -typedef struct _VAEncMiscParameterCustomRoundingControl { - union { - struct { - /** \brief Enable customized rounding offset for intra blocks. - * If 0, default value would be taken by driver for intra - * rounding offset. - */ - uint32_t enable_custom_rouding_intra : 1 ; - - /** \brief Intra rounding offset - * Ignored if \c enable_custom_rouding_intra equals 0. - */ - uint32_t rounding_offset_intra : 7; - - /** \brief Enable customized rounding offset for inter blocks. - * If 0, default value would be taken by driver for inter - * rounding offset. - */ - uint32_t enable_custom_rounding_inter : 1 ; - - /** \brief Inter rounding offset - * Ignored if \c enable_custom_rouding_inter equals 0. - */ - uint32_t rounding_offset_inter : 7; - - /* Reserved */ - uint32_t reserved : 16; - } bits; - uint32_t value; - } rounding_offset_setting; -} VAEncMiscParameterCustomRoundingControl; - -/** - * There will be cases where the bitstream buffer will not have enough room to hold - * the data for the entire slice, and the following flags will be used in the slice - * parameter to signal to the server for the possible cases. - * If a slice parameter buffer and slice data buffer pair is sent to the server with - * the slice data partially in the slice data buffer (BEGIN and MIDDLE cases below), - * then a slice parameter and data buffer needs to be sent again to complete this slice. - */ -#define VA_SLICE_DATA_FLAG_ALL 0x00 /* whole slice is in the buffer */ -#define VA_SLICE_DATA_FLAG_BEGIN 0x01 /* The beginning of the slice is in the buffer but the end if not */ -#define VA_SLICE_DATA_FLAG_MIDDLE 0x02 /* Neither beginning nor end of the slice is in the buffer */ -#define VA_SLICE_DATA_FLAG_END 0x04 /* end of the slice is in the buffer */ - -/* Codec-independent Slice Parameter Buffer base */ -typedef struct _VASliceParameterBufferBase { - uint32_t slice_data_size; /* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset; /* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX definitions */ -} VASliceParameterBufferBase; - -/********************************** - * JPEG common data structures - **********************************/ -/** - * \brief Huffman table for JPEG decoding. - * - * This structure holds the complete Huffman tables. This is an - * aggregation of all Huffman table (DHT) segments maintained by the - * application. i.e. up to 2 Huffman tables are stored in there for - * baseline profile. - * - * The #load_huffman_table array can be used as a hint to notify the - * VA driver implementation about which table(s) actually changed - * since the last submission of this buffer. - */ -typedef struct _VAHuffmanTableBufferJPEGBaseline { - /** \brief Specifies which #huffman_table is valid. */ - uint8_t load_huffman_table[2]; - /** \brief Huffman tables indexed by table identifier (Th). */ - struct { - /** @name DC table (up to 12 categories) */ - /**@{*/ - /** \brief Number of Huffman codes of length i + 1 (Li). */ - uint8_t num_dc_codes[16]; - /** \brief Value associated with each Huffman code (Vij). */ - uint8_t dc_values[12]; - /**@}*/ - /** @name AC table (2 special codes + up to 16 * 10 codes) */ - /**@{*/ - /** \brief Number of Huffman codes of length i + 1 (Li). */ - uint8_t num_ac_codes[16]; - /** \brief Value associated with each Huffman code (Vij). */ - uint8_t ac_values[162]; - /** \brief Padding to 4-byte boundaries. Must be set to zero. */ - uint8_t pad[2]; - /**@}*/ - } huffman_table[2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAHuffmanTableBufferJPEGBaseline; - -/**************************** - * MPEG-2 data structures - ****************************/ - -/* MPEG-2 Picture Parameter Buffer */ -/* - * For each frame or field, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferMPEG2 { - uint16_t horizontal_size; - uint16_t vertical_size; - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - /* meanings of the following fields are the same as in the standard */ - int32_t picture_coding_type; - int32_t f_code; /* pack all four fcode into this */ - union { - struct { - uint32_t intra_dc_precision : 2; - uint32_t picture_structure : 2; - uint32_t top_field_first : 1; - uint32_t frame_pred_frame_dct : 1; - uint32_t concealment_motion_vectors : 1; - uint32_t q_scale_type : 1; - uint32_t intra_vlc_format : 1; - uint32_t alternate_scan : 1; - uint32_t repeat_first_field : 1; - uint32_t progressive_frame : 1; - uint32_t is_first_field : 1; /* indicate whether the current field - * is the first field for field picture - */ - } bits; - uint32_t value; - } picture_coding_extension; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureParameterBufferMPEG2; - -/** MPEG-2 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferMPEG2 { - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_intra_quantiser_matrix; - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_non_intra_quantiser_matrix; - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_chroma_intra_quantiser_matrix; - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_chroma_non_intra_quantiser_matrix; - /** \brief Luminance intra matrix, in zig-zag scan order. */ - uint8_t intra_quantiser_matrix[64]; - /** \brief Luminance non-intra matrix, in zig-zag scan order. */ - uint8_t non_intra_quantiser_matrix[64]; - /** \brief Chroma intra matrix, in zig-zag scan order. */ - uint8_t chroma_intra_quantiser_matrix[64]; - /** \brief Chroma non-intra matrix, in zig-zag scan order. */ - uint8_t chroma_non_intra_quantiser_matrix[64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferMPEG2; - -/** MPEG-2 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferMPEG2 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset;/* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - uint32_t slice_horizontal_position; - uint32_t slice_vertical_position; - int32_t quantiser_scale_code; - int32_t intra_slice_flag; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferMPEG2; - -/** MPEG-2 Macroblock Parameter Buffer */ -typedef struct _VAMacroblockParameterBufferMPEG2 { - uint16_t macroblock_address; - /* - * macroblock_address (in raster scan order) - * top-left: 0 - * bottom-right: picture-height-in-mb*picture-width-in-mb - 1 - */ - uint8_t macroblock_type; /* see definition below */ - union { - struct { - uint32_t frame_motion_type : 2; - uint32_t field_motion_type : 2; - uint32_t dct_type : 1; - } bits; - uint32_t value; - } macroblock_modes; - uint8_t motion_vertical_field_select; - /* - * motion_vertical_field_select: - * see section 6.3.17.2 in the spec - * only the lower 4 bits are used - * bit 0: first vector forward - * bit 1: first vector backward - * bit 2: second vector forward - * bit 3: second vector backward - */ - int16_t PMV[2][2][2]; /* see Table 7-7 in the spec */ - uint16_t coded_block_pattern; - /* - * The bitplanes for coded_block_pattern are described - * in Figure 6.10-12 in the spec - */ - - /* Number of skipped macroblocks after this macroblock */ - uint16_t num_skipped_macroblocks; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAMacroblockParameterBufferMPEG2; - -/* - * OR'd flags for macroblock_type (section 6.3.17.1 in the spec) - */ -#define VA_MB_TYPE_MOTION_FORWARD 0x02 -#define VA_MB_TYPE_MOTION_BACKWARD 0x04 -#define VA_MB_TYPE_MOTION_PATTERN 0x08 -#define VA_MB_TYPE_MOTION_INTRA 0x10 - -/** - * MPEG-2 Residual Data Buffer - * For each macroblock, there wil be 64 shorts (16-bit) in the - * residual data buffer - */ - -/**************************** - * MPEG-4 Part 2 data structures - ****************************/ - -/* MPEG-4 Picture Parameter Buffer */ -/* - * For each frame or field, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferMPEG4 { - uint16_t vop_width; - uint16_t vop_height; - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - union { - struct { - uint32_t short_video_header : 1; - uint32_t chroma_format : 2; - uint32_t interlaced : 1; - uint32_t obmc_disable : 1; - uint32_t sprite_enable : 2; - uint32_t sprite_warping_accuracy : 2; - uint32_t quant_type : 1; - uint32_t quarter_sample : 1; - uint32_t data_partitioned : 1; - uint32_t reversible_vlc : 1; - uint32_t resync_marker_disable : 1; - } bits; - uint32_t value; - } vol_fields; - uint8_t no_of_sprite_warping_points; - int16_t sprite_trajectory_du[3]; - int16_t sprite_trajectory_dv[3]; - uint8_t quant_precision; - union { - struct { - uint32_t vop_coding_type : 2; - uint32_t backward_reference_vop_coding_type : 2; - uint32_t vop_rounding_type : 1; - uint32_t intra_dc_vlc_thr : 3; - uint32_t top_field_first : 1; - uint32_t alternate_vertical_scan_flag : 1; - } bits; - uint32_t value; - } vop_fields; - uint8_t vop_fcode_forward; - uint8_t vop_fcode_backward; - uint16_t vop_time_increment_resolution; - /* short header related */ - uint8_t num_gobs_in_vop; - uint8_t num_macroblocks_in_gob; - /* for direct mode prediction */ - int16_t TRB; - int16_t TRD; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureParameterBufferMPEG4; - -/** MPEG-4 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferMPEG4 { - /** Same as the MPEG-4:2 bitstream syntax element. */ - int32_t load_intra_quant_mat; - /** Same as the MPEG-4:2 bitstream syntax element. */ - int32_t load_non_intra_quant_mat; - /** The matrix for intra blocks, in zig-zag scan order. */ - uint8_t intra_quant_mat[64]; - /** The matrix for non-intra blocks, in zig-zag scan order. */ - uint8_t non_intra_quant_mat[64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferMPEG4; - -/** MPEG-4 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferMPEG4 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset;/* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - uint32_t macroblock_number; - int32_t quant_scale; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferMPEG4; - -/** - VC-1 data structures -*/ - -typedef enum /* see 7.1.1.32 */ -{ - VAMvMode1Mv = 0, - VAMvMode1MvHalfPel = 1, - VAMvMode1MvHalfPelBilinear = 2, - VAMvModeMixedMv = 3, - VAMvModeIntensityCompensation = 4 -} VAMvModeVC1; - -/** VC-1 Picture Parameter Buffer */ -/* - * For each picture, and before any slice data, a picture parameter - * buffer must be send. Multiple picture parameter buffers may be - * sent for a single picture. In that case picture parameters will - * apply to all slice data that follow it until a new picture - * parameter buffer is sent. - * - * Notes: - * pic_quantizer_type should be set to the applicable quantizer - * type as defined by QUANTIZER (J.1.19) and either - * PQUANTIZER (7.1.1.8) or PQINDEX (7.1.1.6) - */ -typedef struct _VAPictureParameterBufferVC1 { - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - /* if out-of-loop post-processing is done on the render - target, then we need to keep the in-loop decoded - picture as a reference picture */ - VASurfaceID inloop_decoded_picture; - - /* sequence layer for AP or meta data for SP and MP */ - union { - struct { - uint32_t pulldown : 1; /* SEQUENCE_LAYER::PULLDOWN */ - uint32_t interlace : 1; /* SEQUENCE_LAYER::INTERLACE */ - uint32_t tfcntrflag : 1; /* SEQUENCE_LAYER::TFCNTRFLAG */ - uint32_t finterpflag : 1; /* SEQUENCE_LAYER::FINTERPFLAG */ - uint32_t psf : 1; /* SEQUENCE_LAYER::PSF */ - uint32_t multires : 1; /* METADATA::MULTIRES */ - uint32_t overlap : 1; /* METADATA::OVERLAP */ - uint32_t syncmarker : 1; /* METADATA::SYNCMARKER */ - uint32_t rangered : 1; /* METADATA::RANGERED */ - uint32_t max_b_frames : 3; /* METADATA::MAXBFRAMES */ - uint32_t profile : 2; /* SEQUENCE_LAYER::PROFILE or The MSB of METADATA::PROFILE */ - } bits; - uint32_t value; - } sequence_fields; - - uint16_t coded_width; /* ENTRY_POINT_LAYER::CODED_WIDTH */ - uint16_t coded_height; /* ENTRY_POINT_LAYER::CODED_HEIGHT */ - union { - struct { - uint32_t broken_link : 1; /* ENTRY_POINT_LAYER::BROKEN_LINK */ - uint32_t closed_entry : 1; /* ENTRY_POINT_LAYER::CLOSED_ENTRY */ - uint32_t panscan_flag : 1; /* ENTRY_POINT_LAYER::PANSCAN_FLAG */ - uint32_t loopfilter : 1; /* ENTRY_POINT_LAYER::LOOPFILTER */ - } bits; - uint32_t value; - } entrypoint_fields; - uint8_t conditional_overlap_flag; /* ENTRY_POINT_LAYER::CONDOVER */ - uint8_t fast_uvmc_flag; /* ENTRY_POINT_LAYER::FASTUVMC */ - union { - struct { - uint32_t luma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPY_FLAG */ - uint32_t luma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPY */ - uint32_t chroma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPUV_FLAG */ - uint32_t chroma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPUV */ - } bits; - uint32_t value; - } range_mapping_fields; - - uint8_t b_picture_fraction; /* Index for PICTURE_LAYER::BFRACTION value in Table 40 (7.1.1.14) */ - uint8_t cbp_table; /* PICTURE_LAYER::CBPTAB/ICBPTAB */ - uint8_t mb_mode_table; /* PICTURE_LAYER::MBMODETAB */ - uint8_t range_reduction_frame;/* PICTURE_LAYER::RANGEREDFRM */ - uint8_t rounding_control; /* PICTURE_LAYER::RNDCTRL */ - uint8_t post_processing; /* PICTURE_LAYER::POSTPROC */ - uint8_t picture_resolution_index; /* PICTURE_LAYER::RESPIC */ - uint8_t luma_scale; /* PICTURE_LAYER::LUMSCALE */ - uint8_t luma_shift; /* PICTURE_LAYER::LUMSHIFT */ - - union { - struct { - uint32_t picture_type : 3; /* PICTURE_LAYER::PTYPE */ - uint32_t frame_coding_mode : 3; /* PICTURE_LAYER::FCM */ - uint32_t top_field_first : 1; /* PICTURE_LAYER::TFF */ - uint32_t is_first_field : 1; /* set to 1 if it is the first field */ - uint32_t intensity_compensation : 1; /* PICTURE_LAYER::INTCOMP */ - } bits; - uint32_t value; - } picture_fields; - union { - struct { - uint32_t mv_type_mb : 1; /* PICTURE::MVTYPEMB */ - uint32_t direct_mb : 1; /* PICTURE::DIRECTMB */ - uint32_t skip_mb : 1; /* PICTURE::SKIPMB */ - uint32_t field_tx : 1; /* PICTURE::FIELDTX */ - uint32_t forward_mb : 1; /* PICTURE::FORWARDMB */ - uint32_t ac_pred : 1; /* PICTURE::ACPRED */ - uint32_t overflags : 1; /* PICTURE::OVERFLAGS */ - } flags; - uint32_t value; - } raw_coding; - union { - struct { - uint32_t bp_mv_type_mb : 1; /* PICTURE::MVTYPEMB */ - uint32_t bp_direct_mb : 1; /* PICTURE::DIRECTMB */ - uint32_t bp_skip_mb : 1; /* PICTURE::SKIPMB */ - uint32_t bp_field_tx : 1; /* PICTURE::FIELDTX */ - uint32_t bp_forward_mb : 1; /* PICTURE::FORWARDMB */ - uint32_t bp_ac_pred : 1; /* PICTURE::ACPRED */ - uint32_t bp_overflags : 1; /* PICTURE::OVERFLAGS */ - } flags; - uint32_t value; - } bitplane_present; /* signal what bitplane is being passed via the bitplane buffer */ - union { - struct { - uint32_t reference_distance_flag : 1;/* PICTURE_LAYER::REFDIST_FLAG */ - uint32_t reference_distance : 5;/* PICTURE_LAYER::REFDIST */ - uint32_t num_reference_pictures: 1;/* PICTURE_LAYER::NUMREF */ - uint32_t reference_field_pic_indicator : 1;/* PICTURE_LAYER::REFFIELD */ - } bits; - uint32_t value; - } reference_fields; - union { - struct { - uint32_t mv_mode : 3; /* PICTURE_LAYER::MVMODE */ - uint32_t mv_mode2 : 3; /* PICTURE_LAYER::MVMODE2 */ - uint32_t mv_table : 3; /* PICTURE_LAYER::MVTAB/IMVTAB */ - uint32_t two_mv_block_pattern_table: 2; /* PICTURE_LAYER::2MVBPTAB */ - uint32_t four_mv_switch : 1; /* PICTURE_LAYER::4MVSWITCH */ - uint32_t four_mv_block_pattern_table : 2; /* PICTURE_LAYER::4MVBPTAB */ - uint32_t extended_mv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_MV */ - uint32_t extended_mv_range : 2; /* PICTURE_LAYER::MVRANGE */ - uint32_t extended_dmv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_DMV */ - uint32_t extended_dmv_range : 2; /* PICTURE_LAYER::DMVRANGE */ - } bits; - uint32_t value; - } mv_fields; - union { - struct { - uint32_t dquant : 2; /* ENTRY_POINT_LAYER::DQUANT */ - uint32_t quantizer : 2; /* ENTRY_POINT_LAYER::QUANTIZER */ - uint32_t half_qp : 1; /* PICTURE_LAYER::HALFQP */ - uint32_t pic_quantizer_scale : 5;/* PICTURE_LAYER::PQUANT */ - uint32_t pic_quantizer_type : 1;/* PICTURE_LAYER::PQUANTIZER */ - uint32_t dq_frame : 1; /* VOPDQUANT::DQUANTFRM */ - uint32_t dq_profile : 2; /* VOPDQUANT::DQPROFILE */ - uint32_t dq_sb_edge : 2; /* VOPDQUANT::DQSBEDGE */ - uint32_t dq_db_edge : 2; /* VOPDQUANT::DQDBEDGE */ - uint32_t dq_binary_level : 1; /* VOPDQUANT::DQBILEVEL */ - uint32_t alt_pic_quantizer : 5;/* VOPDQUANT::ALTPQUANT */ - } bits; - uint32_t value; - } pic_quantizer_fields; - union { - struct { - uint32_t variable_sized_transform_flag : 1;/* ENTRY_POINT_LAYER::VSTRANSFORM */ - uint32_t mb_level_transform_type_flag : 1;/* PICTURE_LAYER::TTMBF */ - uint32_t frame_level_transform_type : 2;/* PICTURE_LAYER::TTFRM */ - uint32_t transform_ac_codingset_idx1 : 2;/* PICTURE_LAYER::TRANSACFRM */ - uint32_t transform_ac_codingset_idx2 : 2;/* PICTURE_LAYER::TRANSACFRM2 */ - uint32_t intra_transform_dc_table : 1;/* PICTURE_LAYER::TRANSDCTAB */ - } bits; - uint32_t value; - } transform_fields; - - uint8_t luma_scale2; /* PICTURE_LAYER::LUMSCALE2 */ - uint8_t luma_shift2; /* PICTURE_LAYER::LUMSHIFT2 */ - uint8_t intensity_compensation_field; /* Index for PICTURE_LAYER::INTCOMPFIELD value in Table 109 (9.1.1.48) */ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 1]; -} VAPictureParameterBufferVC1; - -/** VC-1 Bitplane Buffer -There will be at most three bitplanes coded in any picture header. To send -the bitplane data more efficiently, each byte is divided in two nibbles, with -each nibble carrying three bitplanes for one macroblock. The following table -shows the bitplane data arrangement within each nibble based on the picture -type. - -Picture Type Bit3 Bit2 Bit1 Bit0 -I or BI OVERFLAGS ACPRED FIELDTX -P MYTYPEMB SKIPMB DIRECTMB -B FORWARDMB SKIPMB DIRECTMB - -Within each byte, the lower nibble is for the first MB and the upper nibble is -for the second MB. E.g. the lower nibble of the first byte in the bitplane -buffer is for Macroblock #1 and the upper nibble of the first byte is for -Macroblock #2 in the first row. -*/ - -/* VC-1 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferVC1 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset;/* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - uint32_t slice_vertical_position; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferVC1; - -/* VC-1 Slice Data Buffer */ -/* -This is simplely a buffer containing raw bit-stream bytes -*/ - -/**************************** - * H.264/AVC data structures - ****************************/ - -typedef struct _VAPictureH264 { - VASurfaceID picture_id; - uint32_t frame_idx; - uint32_t flags; - int32_t TopFieldOrderCnt; - int32_t BottomFieldOrderCnt; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureH264; -/* flags in VAPictureH264 could be OR of the following */ -#define VA_PICTURE_H264_INVALID 0x00000001 -#define VA_PICTURE_H264_TOP_FIELD 0x00000002 -#define VA_PICTURE_H264_BOTTOM_FIELD 0x00000004 -#define VA_PICTURE_H264_SHORT_TERM_REFERENCE 0x00000008 -#define VA_PICTURE_H264_LONG_TERM_REFERENCE 0x00000010 - -/** H.264 Picture Parameter Buffer */ -/* - * For each picture, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferH264 { - VAPictureH264 CurrPic; - VAPictureH264 ReferenceFrames[16]; /* in DPB */ - uint16_t picture_width_in_mbs_minus1; - uint16_t picture_height_in_mbs_minus1; - uint8_t bit_depth_luma_minus8; - uint8_t bit_depth_chroma_minus8; - uint8_t num_ref_frames; - union { - struct { - uint32_t chroma_format_idc : 2; - uint32_t residual_colour_transform_flag : 1; /* Renamed to separate_colour_plane_flag in newer standard versions. */ - uint32_t gaps_in_frame_num_value_allowed_flag : 1; - uint32_t frame_mbs_only_flag : 1; - uint32_t mb_adaptive_frame_field_flag : 1; - uint32_t direct_8x8_inference_flag : 1; - uint32_t MinLumaBiPredSize8x8 : 1; /* see A.3.3.2 */ - uint32_t log2_max_frame_num_minus4 : 4; - uint32_t pic_order_cnt_type : 2; - uint32_t log2_max_pic_order_cnt_lsb_minus4 : 4; - uint32_t delta_pic_order_always_zero_flag : 1; - } bits; - uint32_t value; - } seq_fields; - // FMO is not supported. - va_deprecated uint8_t num_slice_groups_minus1; - va_deprecated uint8_t slice_group_map_type; - va_deprecated uint16_t slice_group_change_rate_minus1; - int8_t pic_init_qp_minus26; - int8_t pic_init_qs_minus26; - int8_t chroma_qp_index_offset; - int8_t second_chroma_qp_index_offset; - union { - struct { - uint32_t entropy_coding_mode_flag : 1; - uint32_t weighted_pred_flag : 1; - uint32_t weighted_bipred_idc : 2; - uint32_t transform_8x8_mode_flag : 1; - uint32_t field_pic_flag : 1; - uint32_t constrained_intra_pred_flag : 1; - uint32_t pic_order_present_flag : 1; /* Renamed to bottom_field_pic_order_in_frame_present_flag in newer standard versions. */ - uint32_t deblocking_filter_control_present_flag : 1; - uint32_t redundant_pic_cnt_present_flag : 1; - uint32_t reference_pic_flag : 1; /* nal_ref_idc != 0 */ - } bits; - uint32_t value; - } pic_fields; - uint16_t frame_num; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAPictureParameterBufferH264; - -/** H.264 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferH264 { - /** \brief 4x4 scaling list, in raster scan order. */ - uint8_t ScalingList4x4[6][16]; - /** \brief 8x8 scaling list, in raster scan order. */ - uint8_t ScalingList8x8[2][64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferH264; - -/** H.264 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferH264 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - /** \brief Byte offset to the NAL Header Unit for this slice. */ - uint32_t slice_data_offset; - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - /** - * \brief Bit offset from NAL Header Unit to the begining of slice_data(). - * - * This bit offset is relative to and includes the NAL unit byte - * and represents the number of bits parsed in the slice_header() - * after the removal of any emulation prevention bytes in - * there. However, the slice data buffer passed to the hardware is - * the original bitstream, thus including any emulation prevention - * bytes. - */ - uint16_t slice_data_bit_offset; - uint16_t first_mb_in_slice; - uint8_t slice_type; - uint8_t direct_spatial_mv_pred_flag; - /** - * H264/AVC syntax element - * - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l0_default_active_minus1. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** - * H264/AVC syntax element - * - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l1_default_active_minus1. - */ - uint8_t num_ref_idx_l1_active_minus1; - uint8_t cabac_init_idc; - int8_t slice_qp_delta; - uint8_t disable_deblocking_filter_idc; - int8_t slice_alpha_c0_offset_div2; - int8_t slice_beta_offset_div2; - VAPictureH264 RefPicList0[32]; /* See 8.2.4.2 */ - VAPictureH264 RefPicList1[32]; /* See 8.2.4.2 */ - uint8_t luma_log2_weight_denom; - uint8_t chroma_log2_weight_denom; - uint8_t luma_weight_l0_flag; - int16_t luma_weight_l0[32]; - int16_t luma_offset_l0[32]; - uint8_t chroma_weight_l0_flag; - int16_t chroma_weight_l0[32][2]; - int16_t chroma_offset_l0[32][2]; - uint8_t luma_weight_l1_flag; - int16_t luma_weight_l1[32]; - int16_t luma_offset_l1[32]; - uint8_t chroma_weight_l1_flag; - int16_t chroma_weight_l1[32][2]; - int16_t chroma_offset_l1[32][2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferH264; - -/**************************** - * Common encode data structures - ****************************/ -typedef enum { - VAEncPictureTypeIntra = 0, - VAEncPictureTypePredictive = 1, - VAEncPictureTypeBidirectional = 2, -} VAEncPictureType; - -/** - * \brief Encode Slice Parameter Buffer. - * - * @deprecated - * This is a deprecated encode slice parameter buffer, All applications - * \c can use VAEncSliceParameterBufferXXX (XXX = MPEG2, HEVC, H264, JPEG) - */ -typedef struct _VAEncSliceParameterBuffer { - uint32_t start_row_number; /* starting MB row number for this slice */ - uint32_t slice_height; /* slice height measured in MB */ - union { - struct { - uint32_t is_intra : 1; - uint32_t disable_deblocking_filter_idc : 2; - uint32_t uses_long_term_ref : 1; - uint32_t is_long_term_ref : 1; - } bits; - uint32_t value; - } slice_flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSliceParameterBuffer; - - -/**************************** - * H.263 specific encode data structures - ****************************/ - -typedef struct _VAEncSequenceParameterBufferH263 { - uint32_t intra_period; - uint32_t bits_per_second; - uint32_t frame_rate; - uint32_t initial_qp; - uint32_t min_qp; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferH263; - -typedef struct _VAEncPictureParameterBufferH263 { - VASurfaceID reference_picture; - VASurfaceID reconstructed_picture; - VABufferID coded_buf; - uint16_t picture_width; - uint16_t picture_height; - VAEncPictureType picture_type; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferH263; - -/**************************** - * MPEG-4 specific encode data structures - ****************************/ - -typedef struct _VAEncSequenceParameterBufferMPEG4 { - uint8_t profile_and_level_indication; - uint32_t intra_period; - uint32_t video_object_layer_width; - uint32_t video_object_layer_height; - uint32_t vop_time_increment_resolution; - uint32_t fixed_vop_rate; - uint32_t fixed_vop_time_increment; - uint32_t bits_per_second; - uint32_t frame_rate; - uint32_t initial_qp; - uint32_t min_qp; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferMPEG4; - -typedef struct _VAEncPictureParameterBufferMPEG4 { - VASurfaceID reference_picture; - VASurfaceID reconstructed_picture; - VABufferID coded_buf; - uint16_t picture_width; - uint16_t picture_height; - uint32_t modulo_time_base; /* number of 1s */ - uint32_t vop_time_increment; - VAEncPictureType picture_type; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferMPEG4; - - - -/** Buffer functions */ - -/** - * Creates a buffer for "num_elements" elements of "size" bytes and - * initalize with "data". - * if "data" is null, then the contents of the buffer data store - * are undefined. - * Basically there are two ways to get buffer data to the server side. One is - * to call vaCreateBuffer() with a non-null "data", which results the data being - * copied to the data store on the server side. A different method that - * eliminates this copy is to pass null as "data" when calling vaCreateBuffer(), - * and then use vaMapBuffer() to map the data store from the server side to the - * client address space for access. - * The user must call vaDestroyBuffer() to destroy a buffer. - * Note: image buffers are created by the library, not the client. Please see - * vaCreateImage on how image buffers are managed. - */ -VAStatus vaCreateBuffer( - VADisplay dpy, - VAContextID context, - VABufferType type, /* in */ - unsigned int size, /* in */ - unsigned int num_elements, /* in */ - void *data, /* in */ - VABufferID *buf_id /* out */ -); - -/** - * Create a buffer for given width & height get unit_size, pitch, buf_id for 2D buffer - * for permb qp buffer, it will return unit_size for one MB or LCU and the pitch for alignments - * can call vaMapBuffer with this Buffer ID to get virtual address. - * e.g. AVC 1080P encode, 1920x1088, the size in MB is 120x68,but inside driver, - * maybe it should align with 256, and one byte present one Qp.so, call the function. - * then get unit_size = 1, pitch = 256. call vaMapBuffer to get the virtual address (pBuf). - * then read write the memory like 2D. the size is 256x68, application can only use 120x68 - * pBuf + 256 is the start of next line. - * different driver implementation maybe return different unit_size and pitch - */ -VAStatus vaCreateBuffer2( - VADisplay dpy, - VAContextID context, - VABufferType type, - unsigned int width, - unsigned int height, - unsigned int *unit_size, - unsigned int *pitch, - VABufferID *buf_id -); - -/** - * Convey to the server how many valid elements are in the buffer. - * e.g. if multiple slice parameters are being held in a single buffer, - * this will communicate to the server the number of slice parameters - * that are valid in the buffer. - */ -VAStatus vaBufferSetNumElements( - VADisplay dpy, - VABufferID buf_id, /* in */ - unsigned int num_elements /* in */ -); - - -/** - * device independent data structure for codedbuffer - */ - -/* - * FICTURE_AVE_QP(bit7-0): The average Qp value used during this frame - * LARGE_SLICE(bit8):At least one slice in the current frame was large - * enough for the encoder to attempt to limit its size. - * SLICE_OVERFLOW(bit9): At least one slice in the current frame has - * exceeded the maximum slice size specified. - * BITRATE_OVERFLOW(bit10): The peak bitrate was exceeded for this frame. - * BITRATE_HIGH(bit11): The frame size got within the safety margin of the maximum size (VCM only) - * AIR_MB_OVER_THRESHOLD: the number of MBs adapted to Intra MB - */ -#define VA_CODED_BUF_STATUS_PICTURE_AVE_QP_MASK 0xff -#define VA_CODED_BUF_STATUS_LARGE_SLICE_MASK 0x100 -#define VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK 0x200 -#define VA_CODED_BUF_STATUS_BITRATE_OVERFLOW 0x400 -#define VA_CODED_BUF_STATUS_BITRATE_HIGH 0x800 -/** - * \brief The frame has exceeded the maximum requested size. - * - * This flag indicates that the encoded frame size exceeds the value - * specified through a misc parameter buffer of type - * #VAEncMiscParameterTypeMaxFrameSize. - */ -#define VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW 0x1000 -/** - * \brief the bitstream is bad or corrupt. - */ -#define VA_CODED_BUF_STATUS_BAD_BITSTREAM 0x8000 -#define VA_CODED_BUF_STATUS_AIR_MB_OVER_THRESHOLD 0xff0000 - -/** - * \brief The coded buffer segment status contains frame encoding passes number - * - * This is the mask to get the number of encoding passes from the coded - * buffer segment status. - * NUMBER_PASS(bit24~bit27): the number for encoding passes executed for the coded frame. - * - */ -#define VA_CODED_BUF_STATUS_NUMBER_PASSES_MASK 0xf000000 - -/** - * \brief The coded buffer segment contains a single NAL unit. - * - * This flag indicates that the coded buffer segment contains a - * single NAL unit. This flag might be useful to the user for - * processing the coded buffer. - */ -#define VA_CODED_BUF_STATUS_SINGLE_NALU 0x10000000 - -/** - * \brief Coded buffer segment. - * - * #VACodedBufferSegment is an element of a linked list describing - * some information on the coded buffer. The coded buffer segment - * could contain either a single NAL unit, or more than one NAL unit. - * It is recommended (but not required) to return a single NAL unit - * in a coded buffer segment, and the implementation should set the - * VA_CODED_BUF_STATUS_SINGLE_NALU status flag if that is the case. - */ -typedef struct _VACodedBufferSegment { - /** - * \brief Size of the data buffer in this segment (in bytes). - */ - uint32_t size; - /** \brief Bit offset into the data buffer where the video data starts. */ - uint32_t bit_offset; - /** \brief Status set by the driver. See \c VA_CODED_BUF_STATUS_*. */ - uint32_t status; - /** \brief Reserved for future use. */ - uint32_t reserved; - /** \brief Pointer to the start of the data buffer. */ - void *buf; - /** - * \brief Pointer to the next #VACodedBufferSegment element, - * or \c NULL if there is none. - */ - void *next; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VACodedBufferSegment; - -/** - * Map data store of the buffer into the client's address space - * vaCreateBuffer() needs to be called with "data" set to NULL before - * calling vaMapBuffer() - * - * if buffer type is VAEncCodedBufferType, pbuf points to link-list of - * VACodedBufferSegment, and the list is terminated if "next" is NULL - */ -VAStatus vaMapBuffer( - VADisplay dpy, - VABufferID buf_id, /* in */ - void **pbuf /* out */ -); - -/** - * After client making changes to a mapped data store, it needs to - * "Unmap" it to let the server know that the data is ready to be - * consumed by the server - */ -VAStatus vaUnmapBuffer( - VADisplay dpy, - VABufferID buf_id /* in */ -); - -/** - * After this call, the buffer is deleted and this buffer_id is no longer valid - * - * A buffer can be re-used and sent to the server by another Begin/Render/End - * sequence if vaDestroyBuffer() is not called with this buffer. - * - * Note re-using a shared buffer (e.g. a slice data buffer) between the host and the - * hardware accelerator can result in performance dropping. - */ -VAStatus vaDestroyBuffer( - VADisplay dpy, - VABufferID buffer_id -); - -/** \brief VA buffer information */ -typedef struct { - /** \brief Buffer handle */ - uintptr_t handle; - /** \brief Buffer type (See \ref VABufferType). */ - uint32_t type; - /** - * \brief Buffer memory type (See \ref VASurfaceAttribMemoryType). - * - * On input to vaAcquireBufferHandle(), this field can serve as a hint - * to specify the set of memory types the caller is interested in. - * On successful return from vaAcquireBufferHandle(), the field is - * updated with the best matching memory type. - */ - uint32_t mem_type; - /** \brief Size of the underlying buffer. */ - size_t mem_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VABufferInfo; - -/** - * \brief Acquires buffer handle for external API usage - * - * Locks the VA buffer object \ref buf_id for external API usage like - * EGL or OpenCL (OCL). This function is a synchronization point. This - * means that any pending operation is guaranteed to be completed - * prior to returning from the function. - * - * If the referenced VA buffer object is the backing store of a VA - * surface, then this function acts as if vaSyncSurface() on the - * parent surface was called first. - * - * The \ref VABufferInfo argument shall be zero'ed on input. On - * successful output, the data structure is filled in with all the - * necessary buffer level implementation details like handle, type, - * memory type and memory size. - * - * Note: the external API implementation, or the application, can - * express the memory types it is interested in by filling in the \ref - * mem_type field accordingly. On successful output, the memory type - * that fits best the request and that was used is updated in the \ref - * VABufferInfo data structure. If none of the supplied memory types - * is supported, then a \ref VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE - * error is returned. - * - * The \ref VABufferInfo data is valid until vaReleaseBufferHandle() - * is called. Besides, no additional operation is allowed on any of - * the buffer parent object until vaReleaseBufferHandle() is called. - * e.g. decoding into a VA surface backed with the supplied VA buffer - * object \ref buf_id would fail with a \ref VA_STATUS_ERROR_SURFACE_BUSY - * error. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied - * - \ref VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation - * does not support exporting buffers of the specified type - * - \ref VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE: none of the requested - * memory types in \ref VABufferInfo.mem_type was supported - * - * @param[in] dpy the VA display - * @param[in] buf_id the VA buffer - * @param[in,out] buf_info the associated VA buffer information - * @return VA_STATUS_SUCCESS if successful - */ -VAStatus -vaAcquireBufferHandle(VADisplay dpy, VABufferID buf_id, VABufferInfo *buf_info); - -/** - * \brief Releases buffer after usage from external API - * - * Unlocks the VA buffer object \ref buf_id from external API usage like - * EGL or OpenCL (OCL). This function is a synchronization point. This - * means that any pending operation is guaranteed to be completed - * prior to returning from the function. - * - * The \ref VABufferInfo argument shall point to the original data - * structure that was obtained from vaAcquireBufferHandle(), unaltered. - * This is necessary so that the VA driver implementation could - * deallocate any resources that were needed. - * - * In any case, returning from this function invalidates any contents - * in \ref VABufferInfo. i.e. the underlyng buffer handle is no longer - * valid. Therefore, VA driver implementations are free to reset this - * data structure to safe defaults. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied - * - \ref VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation - * does not support exporting buffers of the specified type - * - * @param[in] dpy the VA display - * @param[in] buf_id the VA buffer - * @return VA_STATUS_SUCCESS if successful - */ -VAStatus -vaReleaseBufferHandle(VADisplay dpy, VABufferID buf_id); - -/** @name vaExportSurfaceHandle() flags - * - * @{ - */ -/** Export surface to be read by external API. */ -#define VA_EXPORT_SURFACE_READ_ONLY 0x0001 -/** Export surface to be written by external API. */ -#define VA_EXPORT_SURFACE_WRITE_ONLY 0x0002 -/** Export surface to be both read and written by external API. */ -#define VA_EXPORT_SURFACE_READ_WRITE 0x0003 -/** Export surface with separate layers. - * - * For example, NV12 surfaces should be exported as two separate - * planes for luma and chroma. - */ -#define VA_EXPORT_SURFACE_SEPARATE_LAYERS 0x0004 -/** Export surface with composed layers. - * - * For example, NV12 surfaces should be exported as a single NV12 - * composed object. - */ -#define VA_EXPORT_SURFACE_COMPOSED_LAYERS 0x0008 - -/** @} */ - -/** - * \brief Export a handle to a surface for use with an external API - * - * The exported handles are owned by the caller, and the caller is - * responsible for freeing them when no longer needed (e.g. by closing - * DRM PRIME file descriptors). - * - * This does not perform any synchronisation. If the contents of the - * surface will be read, vaSyncSurface() must be called before doing so. - * If the contents of the surface are written, then all operations must - * be completed externally before using the surface again by via VA-API - * functions. - * - * @param[in] dpy VA display. - * @param[in] surface_id Surface to export. - * @param[in] mem_type Memory type to export to. - * @param[in] flags Combination of flags to apply - * (VA_EXPORT_SURFACE_*). - * @param[out] descriptor Pointer to the descriptor structure to fill - * with the handle details. The type of this structure depends on - * the value of mem_type. - * - * @return Status code: - * - VA_STATUS_SUCCESS: Success. - * - VA_STATUS_ERROR_INVALID_DISPLAY: The display is not valid. - * - VA_STATUS_ERROR_UNIMPLEMENTED: The driver does not implement - * this interface. - * - VA_STATUS_ERROR_INVALID_SURFACE: The surface is not valid, or - * the surface is not exportable in the specified way. - * - VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE: The driver does not - * support exporting surfaces to the specified memory type. - */ -VAStatus vaExportSurfaceHandle(VADisplay dpy, - VASurfaceID surface_id, - uint32_t mem_type, uint32_t flags, - void *descriptor); - -/** - * Render (Video Decode/Encode/Processing) Pictures - * - * A picture represents either a frame or a field. - * - * The Begin/Render/End sequence sends the video decode/encode/processing buffers - * to the server - */ - -/** - * Get ready for a video pipeline - * - decode a picture to a target surface - * - encode a picture from a target surface - * - process a picture to a target surface - */ -VAStatus vaBeginPicture( - VADisplay dpy, - VAContextID context, - VASurfaceID render_target -); - -/** - * Send video decode, encode or processing buffers to the server. - */ -VAStatus vaRenderPicture( - VADisplay dpy, - VAContextID context, - VABufferID *buffers, - int num_buffers -); - -/** - * Make the end of rendering for a picture. - * The server should start processing all pending operations for this - * surface. This call is non-blocking. The client can start another - * Begin/Render/End sequence on a different render target. - * if VAContextID used in this function previously successfully passed - * vaMFAddContext call, real processing will be started during vaMFSubmit - */ -VAStatus vaEndPicture( - VADisplay dpy, - VAContextID context -); - -/** - * Make the end of rendering for a pictures in contexts passed with submission. - * The server should start processing all pending operations for contexts. - * All contexts passed should be associated through vaMFAddContext - * and call sequence Begin/Render/End performed. - * This call is non-blocking. The client can start another - * Begin/Render/End/vaMFSubmit sequence on a different render targets. - * Return values: - * VA_STATUS_SUCCESS - operation successful, context was removed. - * VA_STATUS_ERROR_INVALID_CONTEXT - mf_context or one of contexts are invalid - * due to mf_context not created or one of contexts not assotiated with mf_context - * through vaAddContext. - * VA_STATUS_ERROR_INVALID_PARAMETER - one of context has not submitted it's frame - * through vaBeginPicture vaRenderPicture vaEndPicture call sequence. - * dpy: display - * mf_context: Multi-Frame context - * contexts: list of contexts submitting their tasks for multi-frame operation. - * num_contexts: number of passed contexts. - */ -VAStatus vaMFSubmit( - VADisplay dpy, - VAMFContextID mf_context, - VAContextID * contexts, - int num_contexts -); - -/* - -Synchronization - -*/ - -/** - * This function blocks until all pending operations on the render target - * have been completed. Upon return it is safe to use the render target for a - * different picture. - */ -VAStatus vaSyncSurface( - VADisplay dpy, - VASurfaceID render_target -); - -/** \brief Indicates an infinite timeout. */ -#define VA_TIMEOUT_INFINITE 0xFFFFFFFFFFFFFFFF - -/** - * \brief Synchronizes pending operations associated with the supplied surface. - * - * This function blocks during specified timeout (in nanoseconds) until - * all pending operations on the render target have been completed. - * If timeout is zero, the function returns immediately. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_SURFACE: an invalid surface was supplied - * - \ref VA_STATUS_ERROR_TIMEDOUT: synchronization is still in progress, - * client should call the function again to complete synchronization - * - * @param[in] dpy the VA display - * @param[in] surface the surface for which synchronization is performed - * @param[in] timeout_ns the timeout in nanoseconds - * - */ -VAStatus vaSyncSurface2( - VADisplay dpy, - VASurfaceID surface, - uint64_t timeout_ns -); - -typedef enum { - VASurfaceRendering = 1, /* Rendering in progress */ - VASurfaceDisplaying = 2, /* Displaying in progress (not safe to render into it) */ - /* this status is useful if surface is used as the source */ - /* of an overlay */ - VASurfaceReady = 4, /* not being rendered or displayed */ - VASurfaceSkipped = 8 /* Indicate a skipped frame during encode */ -} VASurfaceStatus; - -/** - * Find out any pending ops on the render target - */ -VAStatus vaQuerySurfaceStatus( - VADisplay dpy, - VASurfaceID render_target, - VASurfaceStatus *status /* out */ -); - -typedef enum { - VADecodeSliceMissing = 0, - VADecodeMBError = 1, -} VADecodeErrorType; - -/** - * Client calls vaQuerySurfaceError with VA_STATUS_ERROR_DECODING_ERROR, server side returns - * an array of structure VASurfaceDecodeMBErrors, and the array is terminated by setting status=-1 -*/ -typedef struct _VASurfaceDecodeMBErrors { - int32_t status; /* 1 if hardware has returned detailed info below, -1 means this record is invalid */ - uint32_t start_mb; /* start mb address with errors */ - uint32_t end_mb; /* end mb address with errors */ - VADecodeErrorType decode_error_type; - uint32_t num_mb; /* number of mbs with errors */ - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW - 1]; -} VASurfaceDecodeMBErrors; - -/** - * After the application gets VA_STATUS_ERROR_DECODING_ERROR after calling vaSyncSurface(), - * it can call vaQuerySurfaceError to find out further details on the particular error. - * VA_STATUS_ERROR_DECODING_ERROR should be passed in as "error_status", - * upon the return, error_info will point to an array of _VASurfaceDecodeMBErrors structure, - * which is allocated and filled by libVA with detailed information on the missing or error macroblocks. - * The array is terminated if "status==-1" is detected. - */ -VAStatus vaQuerySurfaceError( - VADisplay dpy, - VASurfaceID surface, - VAStatus error_status, - void **error_info -); - -/** - * \brief Synchronizes pending operations associated with the supplied buffer. - * - * This function blocks during specified timeout (in nanoseconds) until - * all pending operations on the supplied buffer have been completed. - * If timeout is zero, the function returns immediately. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied - * - \ref VA_STATUS_ERROR_TIMEDOUT: synchronization is still in progress, - * client should call the function again to complete synchronization - * - * @param[in] dpy the VA display - * @param[in] buf_id the buffer for which synchronization is performed - * @param[in] timeout_ns the timeout in nanoseconds - * - */ -VAStatus vaSyncBuffer( - VADisplay dpy, - VABufferID buf_id, - uint64_t timeout_ns -); - -/** - * Notes about synchronization interfaces: - * vaSyncSurface: - * 1. Allows to synchronize output surface (i.e. from decoding or VP) - * 2. Allows to synchronize all bitstreams being encoded from the given input surface (1->N pipelines). - * - * vaSyncSurface2: - * 1. The same as vaSyncSurface but allows to specify a timeout - * - * vaSyncBuffer: - * 1. Allows to synchronize output buffer (e.g. bitstream from encoding). - * Comparing to vaSyncSurface this function synchronizes given bitstream only. - */ - -/** - * Images and Subpictures - * VAImage is used to either get the surface data to client memory, or - * to copy image data in client memory to a surface. - * Both images, subpictures and surfaces follow the same 2D coordinate system where origin - * is at the upper left corner with positive X to the right and positive Y down - */ -#define VA_FOURCC(ch0, ch1, ch2, ch3) \ - ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \ - ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigned char) (ch3) << 24 )) - -/* Pre-defined fourcc codes. */ - -/** NV12: two-plane 8-bit YUV 4:2:0. - * The first plane contains Y, the second plane contains U and V in pairs of bytes. - */ -#define VA_FOURCC_NV12 0x3231564E -/** NV21: two-plane 8-bit YUV 4:2:0. - * Same as NV12, but with U and V swapped. - */ -#define VA_FOURCC_NV21 0x3132564E - -/** AI44: packed 4-bit YA. - * - * The bottom half of each byte contains luma, the top half contains alpha. - */ -#define VA_FOURCC_AI44 0x34344149 - -/** RGBA: packed 8-bit RGBA. - * - * Four bytes per pixel: red, green, blue, alpha. - */ -#define VA_FOURCC_RGBA 0x41424752 -/** RGBX: packed 8-bit RGB. - * - * Four bytes per pixel: red, green, blue, unspecified. - */ -#define VA_FOURCC_RGBX 0x58424752 -/** BGRA: packed 8-bit RGBA. - * - * Four bytes per pixel: blue, green, red, alpha. - */ -#define VA_FOURCC_BGRA 0x41524742 -/** BGRX: packed 8-bit RGB. - * - * Four bytes per pixel: blue, green, red, unspecified. - */ -#define VA_FOURCC_BGRX 0x58524742 -/** ARGB: packed 8-bit RGBA. - * - * Four bytes per pixel: alpha, red, green, blue. - */ -#define VA_FOURCC_ARGB 0x42475241 -/** XRGB: packed 8-bit RGB. - * - * Four bytes per pixel: unspecified, red, green, blue. - */ -#define VA_FOURCC_XRGB 0x42475258 -/** ABGR: packed 8-bit RGBA. - * - * Four bytes per pixel: alpha, blue, green, red. - */ -#define VA_FOURCC_ABGR 0x52474241 -/** XBGR: packed 8-bit RGB. - * - * Four bytes per pixel: unspecified, blue, green, red. - */ -#define VA_FOURCC_XBGR 0x52474258 - -/** UYUV: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: U, Y, U, V. - */ -#define VA_FOURCC_UYVY 0x59565955 -/** YUY2: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: Y, U, Y, V. - */ -#define VA_FOURCC_YUY2 0x32595559 -/** AYUV: packed 8-bit YUVA 4:4:4. - * - * Four bytes per pixel: A, Y, U, V. - */ -#define VA_FOURCC_AYUV 0x56555941 -/** NV11: two-plane 8-bit YUV 4:1:1. - * - * The first plane contains Y, the second plane contains U and V in pairs of bytes. - */ -#define VA_FOURCC_NV11 0x3131564e -/** YV12: three-plane 8-bit YUV 4:2:0. - * - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_YV12 0x32315659 -/** P208: two-plane 8-bit YUV 4:2:2. - * - * The first plane contains Y, the second plane contains U and V in pairs of bytes. - */ -#define VA_FOURCC_P208 0x38303250 -/** I420: three-plane 8-bit YUV 4:2:0. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_I420 0x30323449 -/** YV24: three-plane 8-bit YUV 4:4:4. - * - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_YV24 0x34325659 -/** YV32: four-plane 8-bit YUVA 4:4:4 - * - * The four planes contain Y, V, U and A respectively. - */ -#define VA_FOURCC_YV32 0x32335659 -/** Y800: 8-bit greyscale. - */ -#define VA_FOURCC_Y800 0x30303859 -/** IMC3: three-plane 8-bit YUV 4:2:0. - * - * Equivalent to YV12, but with the additional constraint that the pitch of all three planes - * must be the same. - */ -#define VA_FOURCC_IMC3 0x33434D49 -/** 411P: three-plane 8-bit YUV 4:1:1. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_411P 0x50313134 -/** 411R: three-plane 8-bit YUV. - * - * The subsampling is the transpose of 4:1:1 - full chroma appears on every fourth line. - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_411R 0x52313134 -/** 422H: three-plane 8-bit YUV 4:2:2. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_422H 0x48323234 -/** 422V: three-plane 8-bit YUV 4:4:0. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_422V 0x56323234 -/** 444P: three-plane 8-bit YUV 4:4:4. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_444P 0x50343434 - -/** RGBP: three-plane 8-bit RGB. - * - * The three planes contain red, green and blue respectively. - */ -#define VA_FOURCC_RGBP 0x50424752 -/** BGRP: three-plane 8-bit RGB. - * - * The three planes contain blue, green and red respectively. - */ -#define VA_FOURCC_BGRP 0x50524742 -/** RG16: packed 5/6-bit RGB. - * - * Each pixel is a two-byte little-endian value. - * Red, green and blue are found in bits 15:11, 10:5, 4:0 respectively. - */ -#define VA_FOURCC_RGB565 0x36314752 -/** BG16: packed 5/6-bit RGB. - * - * Each pixel is a two-byte little-endian value. - * Blue, green and red are found in bits 15:11, 10:5, 4:0 respectively. - */ -#define VA_FOURCC_BGR565 0x36314742 - -/** Y210: packed 10-bit YUV 4:2:2. - * - * Eight bytes represent a pair of pixels. Each sample is a two-byte little-endian value, - * with the bottom six bits ignored. The samples are in the order Y, U, Y, V. - */ -#define VA_FOURCC_Y210 0x30313259 -/** Y212: packed 12-bit YUV 4:2:2. - * - * Eight bytes represent a pair of pixels. Each sample is a two-byte little-endian value. - * The samples are in the order Y, U, Y, V. - */ -#define VA_FOURCC_Y212 0x32313259 -/** Y216: packed 16-bit YUV 4:2:2. - * - * Eight bytes represent a pair of pixels. Each sample is a two-byte little-endian value. - * The samples are in the order Y, U, Y, V. - */ -#define VA_FOURCC_Y216 0x36313259 -/** Y410: packed 10-bit YUVA 4:4:4. - * - * Each pixel is a four-byte little-endian value. - * A, V, Y, U are found in bits 31:30, 29:20, 19:10, 9:0 respectively. - */ -#define VA_FOURCC_Y410 0x30313459 -/** Y412 packed 12-bit YUVA 4:4:4. - * - * Each pixel is a set of four samples, each of which is a two-byte little-endian value. - * The samples are in the order A, V, Y, U. - */ -#define VA_FOURCC_Y412 0x32313459 -/** Y416: packed 16-bit YUVA 4:4:4. - * - * Each pixel is a set of four samples, each of which is a two-byte little-endian value. - * The samples are in the order A, V, Y, U. - */ -#define VA_FOURCC_Y416 0x36313459 - -/** YV16: three-plane 8-bit YUV 4:2:2. - * - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_YV16 0x36315659 -/** P010: two-plane 10-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value with the bottom six bits ignored. - * The first plane contains Y, the second plane contains U and V in pairs of samples. - */ -#define VA_FOURCC_P010 0x30313050 -/** P012: two-plane 12-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value with the bottom four bits ignored. - * The first plane contains Y, the second plane contains U and V in pairs of samples. - */ -#define VA_FOURCC_P012 0x32313050 -/** P016: two-plane 16-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value. The first plane contains Y, the second - * plane contains U and V in pairs of samples. - */ -#define VA_FOURCC_P016 0x36313050 - -/** I010: three-plane 10-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value with the top six bits ignored. - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_I010 0x30313049 - -/** IYUV: three-plane 8-bit YUV 4:2:0. - * - * @deprecated Use I420 instead. - */ -#define VA_FOURCC_IYUV 0x56555949 -/** - * 10-bit Pixel RGB formats. - */ -#define VA_FOURCC_A2R10G10B10 0x30335241 /* VA_FOURCC('A','R','3','0') */ -/** - * 10-bit Pixel BGR formats. - */ -#define VA_FOURCC_A2B10G10R10 0x30334241 /* VA_FOURCC('A','B','3','0') */ -/** - * 10-bit Pixel RGB formats without alpha. - */ -#define VA_FOURCC_X2R10G10B10 0x30335258 /* VA_FOURCC('X','R','3','0') */ -/** - * 10-bit Pixel BGR formats without alpha. - */ -#define VA_FOURCC_X2B10G10R10 0x30334258 /* VA_FOURCC('X','B','3','0') */ - -/** Y8: 8-bit greyscale. - * - * Only a single sample, 8 bit Y plane for monochrome images - */ -#define VA_FOURCC_Y8 0x20203859 -/** Y16: 16-bit greyscale. - * - * Only a single sample, 16 bit Y plane for monochrome images - */ -#define VA_FOURCC_Y16 0x20363159 -/** VYUV: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: V, Y, U, V. - */ -#define VA_FOURCC_VYUY 0x59555956 -/** YVYU: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: Y, V, Y, U. - */ -#define VA_FOURCC_YVYU 0x55595659 -/** AGRB64: three-plane 16-bit ARGB 16:16:16:16 - * - * The four planes contain: alpha, red, green, blue respectively. - */ -#define VA_FOURCC_ARGB64 0x34475241 -/** ABGR64: three-plane 16-bit ABGR 16:16:16:16 - * - * The four planes contain: alpha, blue, green, red respectively. - */ -#define VA_FOURCC_ABGR64 0x34474241 -/** XYUV: packed 8-bit YUVX 4:4:4. - * - * Four bytes per pixel: X, Y, U, V. - */ -#define VA_FOURCC_XYUV 0x56555958 - -/* byte order */ -#define VA_LSB_FIRST 1 -#define VA_MSB_FIRST 2 - -typedef struct _VAImageFormat { - uint32_t fourcc; - uint32_t byte_order; /* VA_LSB_FIRST, VA_MSB_FIRST */ - uint32_t bits_per_pixel; - /* for RGB formats */ - uint32_t depth; /* significant bits per pixel */ - uint32_t red_mask; - uint32_t green_mask; - uint32_t blue_mask; - uint32_t alpha_mask; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAImageFormat; - -typedef VAGenericID VAImageID; - -typedef struct _VAImage { - VAImageID image_id; /* uniquely identify this image */ - VAImageFormat format; - VABufferID buf; /* image data buffer */ - /* - * Image data will be stored in a buffer of type VAImageBufferType to facilitate - * data store on the server side for optimal performance. The buffer will be - * created by the CreateImage function, and proper storage allocated based on the image - * size and format. This buffer is managed by the library implementation, and - * accessed by the client through the buffer Map/Unmap functions. - */ - uint16_t width; - uint16_t height; - uint32_t data_size; - uint32_t num_planes; /* can not be greater than 3 */ - /* - * An array indicating the scanline pitch in bytes for each plane. - * Each plane may have a different pitch. Maximum 3 planes for planar formats - */ - uint32_t pitches[3]; - /* - * An array indicating the byte offset from the beginning of the image data - * to the start of each plane. - */ - uint32_t offsets[3]; - - /* The following fields are only needed for paletted formats */ - int32_t num_palette_entries; /* set to zero for non-palette images */ - /* - * Each component is one byte and entry_bytes indicates the number of components in - * each entry (eg. 3 for YUV palette entries). set to zero for non-palette images - */ - int32_t entry_bytes; - /* - * An array of ascii characters describing the order of the components within the bytes. - * Only entry_bytes characters of the string are used. - */ - int8_t component_order[4]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAImage; - -/** Get maximum number of image formats supported by the implementation */ -int vaMaxNumImageFormats( - VADisplay dpy -); - -/** - * Query supported image formats - * The caller must provide a "format_list" array that can hold at - * least vaMaxNumImageFormats() entries. The actual number of formats - * returned in "format_list" is returned in "num_formats". - */ -VAStatus vaQueryImageFormats( - VADisplay dpy, - VAImageFormat *format_list, /* out */ - int *num_formats /* out */ -); - -/** - * Create a VAImage structure - * The width and height fields returned in the VAImage structure may get - * enlarged for some YUV formats. Upon return from this function, - * image->buf has been created and proper storage allocated by the library. - * The client can access the image through the Map/Unmap calls. - */ -VAStatus vaCreateImage( - VADisplay dpy, - VAImageFormat *format, - int width, - int height, - VAImage *image /* out */ -); - -/** - * Should call DestroyImage before destroying the surface it is bound to - */ -VAStatus vaDestroyImage( - VADisplay dpy, - VAImageID image -); - -VAStatus vaSetImagePalette( - VADisplay dpy, - VAImageID image, - /* - * pointer to an array holding the palette data. The size of the array is - * num_palette_entries * entry_bytes in size. The order of the components - * in the palette is described by the component_order in VAImage struct - */ - unsigned char *palette -); - -/** - * Retrive surface data into a VAImage - * Image must be in a format supported by the implementation - */ -VAStatus vaGetImage( - VADisplay dpy, - VASurfaceID surface, - int x, /* coordinates of the upper left source pixel */ - int y, - unsigned int width, /* width and height of the region */ - unsigned int height, - VAImageID image -); - -/** - * Copy data from a VAImage to a surface - * Image must be in a format supported by the implementation - * Returns a VA_STATUS_ERROR_SURFACE_BUSY if the surface - * shouldn't be rendered into when this is called - */ -VAStatus vaPutImage( - VADisplay dpy, - VASurfaceID surface, - VAImageID image, - int src_x, - int src_y, - unsigned int src_width, - unsigned int src_height, - int dest_x, - int dest_y, - unsigned int dest_width, - unsigned int dest_height -); - -/** - * Derive an VAImage from an existing surface. - * This interface will derive a VAImage and corresponding image buffer from - * an existing VA Surface. The image buffer can then be mapped/unmapped for - * direct CPU access. This operation is only possible on implementations with - * direct rendering capabilities and internal surface formats that can be - * represented with a VAImage. When the operation is not possible this interface - * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back - * to using vaCreateImage + vaPutImage to accomplish the same task in an - * indirect manner. - * - * Implementations should only return success when the resulting image buffer - * would be useable with vaMap/Unmap. - * - * When directly accessing a surface special care must be taken to insure - * proper synchronization with the graphics hardware. Clients should call - * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent - * rendering or currently being displayed by an overlay. - * - * Additionally nothing about the contents of a surface should be assumed - * following a vaPutSurface. Implementations are free to modify the surface for - * scaling or subpicture blending within a call to vaPutImage. - * - * Calls to vaPutImage or vaGetImage using the same surface from which the image - * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or - * vaGetImage with other surfaces is supported. - * - * An image created with vaDeriveImage should be freed with vaDestroyImage. The - * image and image buffer structures will be destroyed; however, the underlying - * surface will remain unchanged until freed with vaDestroySurfaces. - */ -VAStatus vaDeriveImage( - VADisplay dpy, - VASurfaceID surface, - VAImage *image /* out */ -); - -/** - * Subpictures - * Subpicture is a special type of image that can be blended - * with a surface during vaPutSurface(). Subpicture can be used to render - * DVD sub-titles or closed captioning text etc. - */ - -typedef VAGenericID VASubpictureID; - -/** Get maximum number of subpicture formats supported by the implementation */ -int vaMaxNumSubpictureFormats( - VADisplay dpy -); - -/** flags for subpictures */ -#define VA_SUBPICTURE_CHROMA_KEYING 0x0001 -#define VA_SUBPICTURE_GLOBAL_ALPHA 0x0002 -#define VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD 0x0004 -/** - * Query supported subpicture formats - * The caller must provide a "format_list" array that can hold at - * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag - * for each format to indicate additional capabilities for that format. The actual - * number of formats returned in "format_list" is returned in "num_formats". - * flags: returned value to indicate addtional capabilities - * VA_SUBPICTURE_CHROMA_KEYING - supports chroma-keying - * VA_SUBPICTURE_GLOBAL_ALPHA - supports global alpha - * VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD - supports unscaled screen relative subpictures for On Screen Display - */ - -VAStatus vaQuerySubpictureFormats( - VADisplay dpy, - VAImageFormat *format_list, /* out */ - unsigned int *flags, /* out */ - unsigned int *num_formats /* out */ -); - -/** - * Subpictures are created with an image associated. - */ -VAStatus vaCreateSubpicture( - VADisplay dpy, - VAImageID image, - VASubpictureID *subpicture /* out */ -); - -/** - * Destroy the subpicture before destroying the image it is assocated to - */ -VAStatus vaDestroySubpicture( - VADisplay dpy, - VASubpictureID subpicture -); - -/** - * Bind an image to the subpicture. This image will now be associated with - * the subpicture instead of the one at creation. - */ -VAStatus vaSetSubpictureImage( - VADisplay dpy, - VASubpictureID subpicture, - VAImageID image -); - -/** - * If chromakey is enabled, then the area where the source value falls within - * the chromakey [min, max] range is transparent - * The chromakey component format is the following: - * For RGB: [0:7] Red [8:15] Blue [16:23] Green - * For YUV: [0:7] V [8:15] U [16:23] Y - * The chromakey mask can be used to mask out certain components for chromakey - * comparision - */ -VAStatus vaSetSubpictureChromakey( - VADisplay dpy, - VASubpictureID subpicture, - unsigned int chromakey_min, - unsigned int chromakey_max, - unsigned int chromakey_mask -); - -/** - * Global alpha value is between 0 and 1. A value of 1 means fully opaque and - * a value of 0 means fully transparent. If per-pixel alpha is also specified then - * the overall alpha is per-pixel alpha multiplied by the global alpha - */ -VAStatus vaSetSubpictureGlobalAlpha( - VADisplay dpy, - VASubpictureID subpicture, - float global_alpha -); - -/** - * vaAssociateSubpicture associates the subpicture with target_surfaces. - * It defines the region mapping between the subpicture and the target - * surfaces through source and destination rectangles (with the same width and height). - * Both will be displayed at the next call to vaPutSurface. Additional - * associations before the call to vaPutSurface simply overrides the association. - */ -VAStatus vaAssociateSubpicture( - VADisplay dpy, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces, - int16_t src_x, /* upper left offset in subpicture */ - int16_t src_y, - uint16_t src_width, - uint16_t src_height, - int16_t dest_x, /* upper left offset in surface */ - int16_t dest_y, - uint16_t dest_width, - uint16_t dest_height, - /* - * whether to enable chroma-keying, global-alpha, or screen relative mode - * see VA_SUBPICTURE_XXX values - */ - uint32_t flags -); - -/** - * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces. - */ -VAStatus vaDeassociateSubpicture( - VADisplay dpy, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces -); - -/** - * Display attributes - * Display attributes are used to control things such as contrast, hue, saturation, - * brightness etc. in the rendering process. The application can query what - * attributes are supported by the driver, and then set the appropriate attributes - * before calling vaPutSurface() - * - * Display attributes can also be used to query/set platform or display adaptor (vaDisplay) - * related information. These attributes do not depend on vaConfig, and could not be used - * for vaPutSurface. Application can use vaQueryDisplayAttributes/vaGetDisplayAttributes - * at anytime after vaInitialize, but (for settable attributes) vaSetDisplayAttributes should be - * called after vaInitialize and before any other function call. - * - * To distinguish these two types of display attributes, display adaptor related attributes - * should be marked as "HW attribute" in the description. - */ - -/* PowerVR IEP Lite attributes */ -typedef enum { - VADISPLAYATTRIB_BLE_OFF = 0x00, - VADISPLAYATTRIB_BLE_LOW, - VADISPLAYATTRIB_BLE_MEDIUM, - VADISPLAYATTRIB_BLE_HIGH, - VADISPLAYATTRIB_BLE_NONE, -} VADisplayAttribBLEMode; - -/** attribute value for VADisplayAttribRotation */ -#define VA_ROTATION_NONE 0x00000000 -#define VA_ROTATION_90 0x00000001 -#define VA_ROTATION_180 0x00000002 -#define VA_ROTATION_270 0x00000003 -/**@}*/ - -/** - * @name Mirroring directions - * - * Those values could be used for VADisplayAttribMirror attribute or - * VAProcPipelineParameterBuffer::mirror_state. - - */ -/**@{*/ -/** \brief No Mirroring. */ -#define VA_MIRROR_NONE 0x00000000 -/** \brief Horizontal Mirroring. */ -#define VA_MIRROR_HORIZONTAL 0x00000001 -/** \brief Vertical Mirroring. */ -#define VA_MIRROR_VERTICAL 0x00000002 -/**@}*/ - -/** attribute value for VADisplayAttribOutOfLoopDeblock */ -#define VA_OOL_DEBLOCKING_FALSE 0x00000000 -#define VA_OOL_DEBLOCKING_TRUE 0x00000001 - -/** Render mode */ -#define VA_RENDER_MODE_UNDEFINED 0 -#define VA_RENDER_MODE_LOCAL_OVERLAY 1 -#define VA_RENDER_MODE_LOCAL_GPU 2 -#define VA_RENDER_MODE_EXTERNAL_OVERLAY 4 -#define VA_RENDER_MODE_EXTERNAL_GPU 8 - -/** Render device */ -#define VA_RENDER_DEVICE_UNDEFINED 0 -#define VA_RENDER_DEVICE_LOCAL 1 -#define VA_RENDER_DEVICE_EXTERNAL 2 - -/**\brief sub device info - * Sub-device is the concept basing on the "device" behind "vaDisplay". - * If a device could be divided to several sub devices, the task of - * decode/encode/vpp could be assigned on one sub-device. So, application - * could choose the sub device before any other operations. After that, - * all of the task execution/resource allocation will be dispatched to - * the sub device. If application does not choose the sub device, driver - * will assign one as default. - * - * If the value == VA_ATTRIB_NOT_SUPPORTED, it mean that the attribute - * is unsupport or UNKNOWN. - */ - -typedef union _VADisplayAttribValSubDevice { - struct { - /** \brief current sub device index, read - write */ - uint32_t current_sub_device : 4; - /** \brief sub devices count, read - only */ - uint32_t sub_device_count : 4; - /** \brief reserved bits for future, must be zero*/ - uint32_t reserved : 8; - /** \brief bit mask to indicate which sub_device is available, read only - * \code - * VADisplayAttribValSubDevice reg; - * VADisplayAttribute reg_attr; - * reg_attr.type = VADisplayAttribSubDevice; - * vaGetDisplayAttributes(dpy, ®_attr, 1); - * reg.value = reg_attr.value; - * - * for(int i = 0; i < reg.bits.sub_device_count; i ++ ){ - * if((1< -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_H_ */ diff --git a/prebuilts/arm/include/va/va_android.h b/prebuilts/arm/include/va/va_android.h deleted file mode 100644 index dfed8fd..0000000 --- a/prebuilts/arm/include/va/va_android.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef _VA_ANDROID_H_ -#define _VA_ANDROID_H_ - -#include - -/** \brief Android Gralloc buffer memory type. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_ANDROID_GRALLOC 0x00100000 -/** \brief Android ION buffer memory type. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_ANDROID_ION 0x00200000 - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Returns a suitable VADisplay for VA API - */ -VADisplay vaGetDisplay( - void *android_dpy -); - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_ANDROID_H_ */ diff --git a/prebuilts/arm/include/va/va_backend.h b/prebuilts/arm/include/va/va_backend.h deleted file mode 100644 index 149b6a3..0000000 --- a/prebuilts/arm/include/va/va_backend.h +++ /dev/null @@ -1,695 +0,0 @@ -/* - * Copyright (c) 2007 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * Video Decode Acceleration -Backend API - */ - -#ifndef _VA_BACKEND_H_ -#define _VA_BACKEND_H_ - -#include - -typedef struct VADriverContext *VADriverContextP; -typedef struct VADisplayContext *VADisplayContextP; - -/** \brief VA display types. */ -enum { - /** \brief Mask to major identifier for VA display type. */ - VA_DISPLAY_MAJOR_MASK = 0xf0, - - /** \brief VA/X11 API is used, through vaGetDisplay() entry-point. */ - VA_DISPLAY_X11 = 0x10, - /** \brief VA/GLX API is used, through vaGetDisplayGLX() entry-point. */ - VA_DISPLAY_GLX = (VA_DISPLAY_X11 | (1 << 0)), - /** \brief VA/Android API is used, through vaGetDisplay() entry-point. */ - VA_DISPLAY_ANDROID = 0x20, - /** \brief VA/DRM API is used, through vaGetDisplayDRM() entry-point. */ - VA_DISPLAY_DRM = 0x30, - /** \brief VA/DRM API is used, with a render-node device path */ - VA_DISPLAY_DRM_RENDERNODES = (VA_DISPLAY_DRM | (1 << 0)), - /** \brief VA/Wayland API is used, through vaGetDisplayWl() entry-point. */ - VA_DISPLAY_WAYLAND = 0x40, -}; - -struct VADriverVTable { - VAStatus(*vaTerminate)(VADriverContextP ctx); - - VAStatus(*vaQueryConfigProfiles)( - VADriverContextP ctx, - VAProfile *profile_list, /* out */ - int *num_profiles /* out */ - ); - - VAStatus(*vaQueryConfigEntrypoints)( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint *entrypoint_list, /* out */ - int *num_entrypoints /* out */ - ); - - VAStatus(*vaGetConfigAttributes)( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, /* in/out */ - int num_attribs - ); - - VAStatus(*vaCreateConfig)( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, - int num_attribs, - VAConfigID *config_id /* out */ - ); - - VAStatus(*vaDestroyConfig)( - VADriverContextP ctx, - VAConfigID config_id - ); - - VAStatus(*vaQueryConfigAttributes)( - VADriverContextP ctx, - VAConfigID config_id, - VAProfile *profile, /* out */ - VAEntrypoint *entrypoint, /* out */ - VAConfigAttrib *attrib_list, /* out */ - int *num_attribs /* out */ - ); - - VAStatus(*vaCreateSurfaces)( - VADriverContextP ctx, - int width, - int height, - int format, - int num_surfaces, - VASurfaceID *surfaces /* out */ - ); - - VAStatus(*vaDestroySurfaces)( - VADriverContextP ctx, - VASurfaceID *surface_list, - int num_surfaces - ); - - VAStatus(*vaCreateContext)( - VADriverContextP ctx, - VAConfigID config_id, - int picture_width, - int picture_height, - int flag, - VASurfaceID *render_targets, - int num_render_targets, - VAContextID *context /* out */ - ); - - VAStatus(*vaDestroyContext)( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus(*vaCreateBuffer)( - VADriverContextP ctx, - VAContextID context, /* in */ - VABufferType type, /* in */ - unsigned int size, /* in */ - unsigned int num_elements, /* in */ - void *data, /* in */ - VABufferID *buf_id - ); - - VAStatus(*vaBufferSetNumElements)( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - unsigned int num_elements /* in */ - ); - - VAStatus(*vaMapBuffer)( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - void **pbuf /* out */ - ); - - VAStatus(*vaUnmapBuffer)( - VADriverContextP ctx, - VABufferID buf_id /* in */ - ); - - VAStatus(*vaDestroyBuffer)( - VADriverContextP ctx, - VABufferID buffer_id - ); - - VAStatus(*vaBeginPicture)( - VADriverContextP ctx, - VAContextID context, - VASurfaceID render_target - ); - - VAStatus(*vaRenderPicture)( - VADriverContextP ctx, - VAContextID context, - VABufferID *buffers, - int num_buffers - ); - - VAStatus(*vaEndPicture)( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus(*vaSyncSurface)( - VADriverContextP ctx, - VASurfaceID render_target - ); - - VAStatus(*vaQuerySurfaceStatus)( - VADriverContextP ctx, - VASurfaceID render_target, - VASurfaceStatus *status /* out */ - ); - - VAStatus(*vaQuerySurfaceError)( - VADriverContextP ctx, - VASurfaceID render_target, - VAStatus error_status, - void **error_info /*out*/ - ); - - VAStatus(*vaPutSurface)( - VADriverContextP ctx, - VASurfaceID surface, - void* draw, /* Drawable of window system */ - short srcx, - short srcy, - unsigned short srcw, - unsigned short srch, - short destx, - short desty, - unsigned short destw, - unsigned short desth, - VARectangle *cliprects, /* client supplied clip list */ - unsigned int number_cliprects, /* number of clip rects in the clip list */ - unsigned int flags /* de-interlacing flags */ - ); - - VAStatus(*vaQueryImageFormats)( - VADriverContextP ctx, - VAImageFormat *format_list, /* out */ - int *num_formats /* out */ - ); - - VAStatus(*vaCreateImage)( - VADriverContextP ctx, - VAImageFormat *format, - int width, - int height, - VAImage *image /* out */ - ); - - VAStatus(*vaDeriveImage)( - VADriverContextP ctx, - VASurfaceID surface, - VAImage *image /* out */ - ); - - VAStatus(*vaDestroyImage)( - VADriverContextP ctx, - VAImageID image - ); - - VAStatus(*vaSetImagePalette)( - VADriverContextP ctx, - VAImageID image, - /* - * pointer to an array holding the palette data. The size of the array is - * num_palette_entries * entry_bytes in size. The order of the components - * in the palette is described by the component_order in VAImage struct - */ - unsigned char *palette - ); - - VAStatus(*vaGetImage)( - VADriverContextP ctx, - VASurfaceID surface, - int x, /* coordinates of the upper left source pixel */ - int y, - unsigned int width, /* width and height of the region */ - unsigned int height, - VAImageID image - ); - - VAStatus(*vaPutImage)( - VADriverContextP ctx, - VASurfaceID surface, - VAImageID image, - int src_x, - int src_y, - unsigned int src_width, - unsigned int src_height, - int dest_x, - int dest_y, - unsigned int dest_width, - unsigned int dest_height - ); - - VAStatus(*vaQuerySubpictureFormats)( - VADriverContextP ctx, - VAImageFormat *format_list, /* out */ - unsigned int *flags, /* out */ - unsigned int *num_formats /* out */ - ); - - VAStatus(*vaCreateSubpicture)( - VADriverContextP ctx, - VAImageID image, - VASubpictureID *subpicture /* out */ - ); - - VAStatus(*vaDestroySubpicture)( - VADriverContextP ctx, - VASubpictureID subpicture - ); - - VAStatus(*vaSetSubpictureImage)( - VADriverContextP ctx, - VASubpictureID subpicture, - VAImageID image - ); - - VAStatus(*vaSetSubpictureChromakey)( - VADriverContextP ctx, - VASubpictureID subpicture, - unsigned int chromakey_min, - unsigned int chromakey_max, - unsigned int chromakey_mask - ); - - VAStatus(*vaSetSubpictureGlobalAlpha)( - VADriverContextP ctx, - VASubpictureID subpicture, - float global_alpha - ); - - VAStatus(*vaAssociateSubpicture)( - VADriverContextP ctx, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces, - short src_x, /* upper left offset in subpicture */ - short src_y, - unsigned short src_width, - unsigned short src_height, - short dest_x, /* upper left offset in surface */ - short dest_y, - unsigned short dest_width, - unsigned short dest_height, - /* - * whether to enable chroma-keying or global-alpha - * see VA_SUBPICTURE_XXX values - */ - unsigned int flags - ); - - VAStatus(*vaDeassociateSubpicture)( - VADriverContextP ctx, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces - ); - - VAStatus(*vaQueryDisplayAttributes)( - VADriverContextP ctx, - VADisplayAttribute *attr_list, /* out */ - int *num_attributes /* out */ - ); - - VAStatus(*vaGetDisplayAttributes)( - VADriverContextP ctx, - VADisplayAttribute *attr_list, /* in/out */ - int num_attributes - ); - - VAStatus(*vaSetDisplayAttributes)( - VADriverContextP ctx, - VADisplayAttribute *attr_list, - int num_attributes - ); - - /* used by va trace */ - VAStatus(*vaBufferInfo)( - VADriverContextP ctx, /* in */ - VABufferID buf_id, /* in */ - VABufferType *type, /* out */ - unsigned int *size, /* out */ - unsigned int *num_elements /* out */ - ); - - /* lock/unlock surface for external access */ - VAStatus(*vaLockSurface)( - VADriverContextP ctx, - VASurfaceID surface, - unsigned int *fourcc, /* out for follow argument */ - unsigned int *luma_stride, - unsigned int *chroma_u_stride, - unsigned int *chroma_v_stride, - unsigned int *luma_offset, - unsigned int *chroma_u_offset, - unsigned int *chroma_v_offset, - unsigned int *buffer_name, /* if it is not NULL, assign the low lever - * surface buffer name - */ - void **buffer /* if it is not NULL, map the surface buffer for - * CPU access - */ - ); - - VAStatus(*vaUnlockSurface)( - VADriverContextP ctx, - VASurfaceID surface - ); - - /* DEPRECATED */ - VAStatus - (*vaGetSurfaceAttributes)( - VADriverContextP dpy, - VAConfigID config, - VASurfaceAttrib *attrib_list, - unsigned int num_attribs - ); - - VAStatus - (*vaCreateSurfaces2)( - VADriverContextP ctx, - unsigned int format, - unsigned int width, - unsigned int height, - VASurfaceID *surfaces, - unsigned int num_surfaces, - VASurfaceAttrib *attrib_list, - unsigned int num_attribs - ); - - VAStatus - (*vaQuerySurfaceAttributes)( - VADriverContextP dpy, - VAConfigID config, - VASurfaceAttrib *attrib_list, - unsigned int *num_attribs - ); - - VAStatus - (*vaAcquireBufferHandle)( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - VABufferInfo * buf_info /* in/out */ - ); - - VAStatus - (*vaReleaseBufferHandle)( - VADriverContextP ctx, - VABufferID buf_id /* in */ - ); - - VAStatus(*vaCreateMFContext)( - VADriverContextP ctx, - VAMFContextID *mfe_context /* out */ - ); - - VAStatus(*vaMFAddContext)( - VADriverContextP ctx, - VAMFContextID mf_context, - VAContextID context - ); - - VAStatus(*vaMFReleaseContext)( - VADriverContextP ctx, - VAMFContextID mf_context, - VAContextID context - ); - - VAStatus(*vaMFSubmit)( - VADriverContextP ctx, - VAMFContextID mf_context, - VAContextID *contexts, - int num_contexts - ); - VAStatus(*vaCreateBuffer2)( - VADriverContextP ctx, - VAContextID context, /* in */ - VABufferType type, /* in */ - unsigned int width, /* in */ - unsigned int height, /* in */ - unsigned int *unit_size, /* out */ - unsigned int *pitch, /* out */ - VABufferID *buf_id /* out */ - ); - - VAStatus(*vaQueryProcessingRate)( - VADriverContextP ctx, /* in */ - VAConfigID config_id, /* in */ - VAProcessingRateParameter *proc_buf,/* in */ - unsigned int *processing_rate /* out */ - ); - - VAStatus - (*vaExportSurfaceHandle)( - VADriverContextP ctx, - VASurfaceID surface_id, /* in */ - uint32_t mem_type, /* in */ - uint32_t flags, /* in */ - void *descriptor /* out */ - ); - VAStatus(*vaSyncSurface2)( - VADriverContextP ctx, - VASurfaceID surface, - uint64_t timeout_ns - ); - - VAStatus(*vaSyncBuffer)( - VADriverContextP ctx, - VABufferID buf_id, - uint64_t timeout_ns - ); - - VAStatus - (*vaCopy)( - VADriverContextP ctx, /* in */ - VACopyObject *dst, /* in */ - VACopyObject *src, /* in */ - VACopyOption option /* in */ - ); - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[54]; -}; - -struct VADriverContext { - void *pDriverData; - - /** - * The core VA implementation hooks. - * - * This structure is allocated from libva with calloc(). - */ - struct VADriverVTable *vtable; - - /** - * The VA/GLX implementation hooks. - * - * This structure is intended for drivers that implement the - * VA/GLX API. The driver implementation is responsible for the - * allocation and deallocation of this structure. - */ - struct VADriverVTableGLX *vtable_glx; - - /** - * The VA/EGL implementation hooks. - * - * This structure is intended for drivers that implement the - * VA/EGL API. The driver implementation is responsible for the - * allocation and deallocation of this structure. - */ - struct VADriverVTableEGL *vtable_egl; - - /** - * The third-party/private implementation hooks. - * - * This structure is intended for drivers that implement the - * private API. The driver implementation is responsible for the - * allocation and deallocation of this structure. - */ - void *vtable_tpi; - - void *native_dpy; - int x11_screen; - int version_major; - int version_minor; - int max_profiles; - int max_entrypoints; - int max_attributes; - int max_image_formats; - int max_subpic_formats; - int max_display_attributes; - const char *str_vendor; - - void *handle; /* dlopen handle */ - - /** - * \brief DRM state. - * - * This field holds driver specific data for DRM-based - * drivers. This structure is allocated from libva with - * calloc(). Do not deallocate from within VA driver - * implementations. - * - * All structures shall be derived from struct drm_state. So, for - * instance, this field holds a dri_state structure for VA/X11 - * drivers that use the DRM protocol. - */ - void *drm_state; - - void *glx; /* opaque for GLX code */ - - /** \brief VA display type. */ - unsigned long display_type; - - /** - * The VA/Wayland implementation hooks. - * - * This structure is intended for drivers that implement the - * VA/Wayland API. libVA allocates this structure with calloc() - * and owns the resulting memory. - */ - struct VADriverVTableWayland *vtable_wayland; - - /** - * \brief The VA/VPP implementation hooks. - * - * This structure is allocated from libva with calloc(). - */ - struct VADriverVTableVPP *vtable_vpp; - - char *override_driver_name; - - void *pDisplayContext; - - /** - * Error callback. - * - * This is set by libva when the driver is opened, and will not be - * changed thereafter. The driver can call it with an error message, - * which will be propagated to the API user through their error - * callbacks, or sent to a default output if no callback is available. - * - * It is expected that end users will always be able to see these - * messages, so it should be called only for serious errors. For - * example, hardware problems or fatal configuration errors. - * - * @param pDriverContext Pointer to the driver context structure - * being used by the current driver. - * @param message Message to send to the API user. This must be a - * null-terminated string. - */ - void (*error_callback)(VADriverContextP pDriverContext, - const char *message); - /** - * Info callback. - * - * This has the same behaviour as the error callback, but has its - * own set of callbacks to the API user. - * - * It should be used for informational messages which may be useful - * for an application programmer or for debugging. For example, minor - * configuration errors, or information about the reason when another - * API call generates an error return. It is not expected that end - * users will see these messages. - * - * @param pDriverContext Pointer to the driver context structure - * being used by the current driver. - * @param message Message to send to the API user. This must be a - * null-terminated string. - */ - void (*info_callback)(VADriverContextP pDriverContext, - const char *message); - - /** - * \brief The VA/Protected implementation hooks. - * - * This structure is allocated from libva with calloc(). - */ - struct VADriverVTableProt *vtable_prot; - - unsigned long reserved[37]; /* reserve for future add-ins, decrease the subscript accordingly */ -}; - -#define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */ -struct VADisplayContext { - int vadpy_magic; - - VADisplayContextP pNext; - VADriverContextP pDriverContext; - - int (*vaIsValid)( - VADisplayContextP ctx - ); - - void (*vaDestroy)( - VADisplayContextP ctx - ); - - VAStatus(*vaGetDriverName)( - VADisplayContextP ctx, - char **driver_name - ); - - void *opaque; /* opaque for display extensions (e.g. GLX) */ - void *vatrace; /* opaque for VA trace context */ - void *vafool; /* opaque for VA fool context */ - - VAMessageCallback error_callback; - void *error_callback_user_context; - VAMessageCallback info_callback; - void *info_callback_user_context; - VAStatus(*vaGetNumCandidates)( - VADisplayContextP ctx, - int * num_candidates - ); - - VAStatus(*vaGetDriverNameByIndex)( - VADisplayContextP ctx, - char **driver_name, - int candidate_index - ); - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[30]; -}; - -typedef VAStatus(*VADriverInit)( - VADriverContextP driver_context -); - -#endif /* _VA_BACKEND_H_ */ diff --git a/prebuilts/arm/include/va/va_backend_prot.h b/prebuilts/arm/include/va/va_backend_prot.h deleted file mode 100644 index 93447e1..0000000 --- a/prebuilts/arm/include/va/va_backend_prot.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2020 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_BACKEND_PROT_H -#define VA_BACKEND_PROT_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \brief VTable version for VA/PROTECTION hooks. */ -#define VA_DRIVER_VTABLE_PROT_VERSION 1 - -struct VADriverVTableProt { - unsigned int version; - - VAStatus - (*vaCreateProtectedSession)( - VADriverContextP ctx, - VAConfigID config_id, - VAProtectedSessionID *protected_session - ); - - VAStatus - (*vaDestroyProtectedSession)( - VADriverContextP ctx, - VAProtectedSessionID protected_session - ); - - VAStatus - (*vaAttachProtectedSession)( - VADriverContextP ctx, - VAContextID context, - VAProtectedSessionID protected_session - ); - - VAStatus - (*vaDetachProtectedSession)( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus - (*vaProtectedSessionExecute)( - VADriverContextP ctx, - VAProtectedSessionID protected_session, - VABufferID buf_id - ); - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[VA_PADDING_MEDIUM]; -}; - -#ifdef __cplusplus -} -#endif - -#endif /* VA_BACKEND_PROT_H */ diff --git a/prebuilts/arm/include/va/va_backend_vpp.h b/prebuilts/arm/include/va/va_backend_vpp.h deleted file mode 100644 index 8ed10d5..0000000 --- a/prebuilts/arm/include/va/va_backend_vpp.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_BACKEND_VPP_H -#define VA_BACKEND_VPP_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \brief VTable version for VA/VPP hooks. */ -#define VA_DRIVER_VTABLE_VPP_VERSION 1 - -struct VADriverVTableVPP { - unsigned int version; - - VAStatus - (*vaQueryVideoProcFilters)( - VADriverContextP ctx, - VAContextID context, - VAProcFilterType *filters, - unsigned int *num_filters - ); - - VAStatus - (*vaQueryVideoProcFilterCaps)( - VADriverContextP ctx, - VAContextID context, - VAProcFilterType type, - void *filter_caps, - unsigned int *num_filter_caps - ); - - VAStatus - (*vaQueryVideoProcPipelineCaps)( - VADriverContextP ctx, - VAContextID context, - VABufferID *filters, - unsigned int num_filters, - VAProcPipelineCaps *pipeline_caps - ); - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[16]; -}; - -#ifdef __cplusplus -} -#endif - -#endif /* VA_BACKEND_VPP_H */ diff --git a/prebuilts/arm/include/va/va_compat.h b/prebuilts/arm/include/va/va_compat.h deleted file mode 100644 index 41a3f73..0000000 --- a/prebuilts/arm/include/va/va_compat.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_compat.h - * \brief The Compatibility API - * - * This file contains the \ref api_compat "Compatibility API". - */ - -#ifndef VA_COMPAT_H -#define VA_COMPAT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_compat Compatibility API - * - * The Compatibility API allows older programs that are not ported to - * the current API to still build and run correctly. In particular, - * this exposes older API to allow for backwards source compatibility. - * - * @{ - */ - -/** - * Makes a string literal out of the macro argument - */ -#define VA_CPP_HELPER_STRINGIFY(x) \ - VA_CPP_HELPER_STRINGIFY_(x) -#define VA_CPP_HELPER_STRINGIFY_(x) \ - #x - -/** - * Concatenates two macro arguments at preprocessing time. - */ -#define VA_CPP_HELPER_CONCAT(a, b) \ - VA_CPP_HELPER_CONCAT_(a, b) -#define VA_CPP_HELPER_CONCAT_(a, b) \ - a ## b - -/** - * Generates the number of macro arguments at preprocessing time. - * - * - * Note: this doesn't work for macros with no arguments - */ -#define VA_CPP_HELPER_N_ARGS(...) \ - VA_CPP_HELPER_N_ARGS_(__VA_ARGS__, VA_CPP_HELPER_N_ARGS_LIST_REV()) -#define VA_CPP_HELPER_N_ARGS_(...) \ - VA_CPP_HELPER_N_ARGS_LIST(__VA_ARGS__) -#define VA_CPP_HELPER_N_ARGS_LIST(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a12, a13, a14, a15, a16, N, ...) N -#define VA_CPP_HELPER_N_ARGS_LIST_REV() \ - 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 - -/** - * Generates a versioned function alias. - * - * VA_CPP_HELPER_ALIAS(vaSomeFunction, 0,32,0) will generate - * .symber vaSomeFunction_0_32_0, vaSomeFunction@VA_API_0.32.0 - */ -#define VA_CPP_HELPER_ALIAS(func, major, minor, micro) \ - VA_CPP_HELPER_ALIAS_(func, major, minor, micro, "@") -#define VA_CPP_HELPER_ALIAS_DEFAULT(func, major, minor, micro) \ - VA_CPP_HELPER_ALIAS_(func, major, minor, micro, "@@") -#define VA_CPP_HELPER_ALIAS_(func, major, minor, micro, binding) \ - asm(".symver " #func "_" #major "_" #minor "_" #micro ", " \ - #func binding "VA_API_" #major "." #minor "." #micro) - -/* vaCreateSurfaces() */ - -#ifndef VA_COMPAT_DISABLED -#define vaCreateSurfaces(dpy, ...) \ - VA_CPP_HELPER_CONCAT(vaCreateSurfaces, \ - VA_CPP_HELPER_N_ARGS(dpy, __VA_ARGS__)) \ - (dpy, __VA_ARGS__) -#endif - -#define vaCreateSurfaces6(dpy, width, height, format, num_surfaces, surfaces) \ - (vaCreateSurfaces)(dpy, format, width, height, surfaces, num_surfaces, \ - NULL, 0) - -#define vaCreateSurfaces8(dpy, format, width, height, surfaces, num_surfaces, attribs, num_attribs) \ - (vaCreateSurfaces)(dpy, format, width, height, surfaces, num_surfaces, \ - attribs, num_attribs) - -/*@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_COMPAT_H */ diff --git a/prebuilts/arm/include/va/va_dec_av1.h b/prebuilts/arm/include/va/va_dec_av1.h deleted file mode 100644 index c195538..0000000 --- a/prebuilts/arm/include/va/va_dec_av1.h +++ /dev/null @@ -1,695 +0,0 @@ -/* - * Copyright (c) 2019 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_av1.h - * \brief The AV1 decoding API - * - * This file contains the \ref api_dec_av1 "AV1 decoding API". - */ - -#ifndef VA_DEC_AV1_H -#define VA_DEC_AV1_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_dec_av1 AV1 decoding API - * - * This AV1 decoding API supports 8-bit/10bit 420 format only. - * - * @{ - */ - -/** Attribute value for VAConfigAttribDecAV1Features. - * - * This attribute decribes the supported features of a AV1 - * decoder configuration. - * - */ -typedef union VAConfigAttribValDecAV1Features { - struct { - /** large scale tile - * - * This conveys whether AV1 large scale tile is supported by HW. - * 0 - unsupported, 1 - supported. - */ - uint32_t lst_support : 2; - /* Reserved for future use. */ - uint32_t reserved : 30; - } bits; - uint32_t value; -} VAConfigAttribValDecAV1Features; - -/** - * \brief AV1 Decoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * App should send a surface with this data structure down to VAAPI once - * per frame. - * - */ - -/** \brief Segmentation Information - */ -typedef struct _VASegmentationStructAV1 { - union { - struct { - /** Indicates whether segmentation map related syntax elements - * are present or not for current frame. If equal to 0, - * the segmentation map related syntax elements are - * not present for the current frame and the control flags of - * segmentation map related tables feature_data[][], and - * feature_mask[] are not valid and shall be ignored by accelerator. - */ - uint32_t enabled : 1; - /** Value 1 indicates that the segmentation map are updated - * during the decoding of this frame. - * Value 0 means that the segmentation map from the previous - * frame is used. - */ - uint32_t update_map : 1; - /** Value 1 indicates that the updates to the segmentation map - * are coded relative to the existing segmentation map. - * Value 0 indicates that the new segmentation map is coded - * without reference to the existing segmentation map. - */ - uint32_t temporal_update : 1; - /** Value 1 indicates that new parameters are about to be - * specified for each segment. - * Value 0 indicates that the segmentation parameters - * should keep their existing values. - */ - uint32_t update_data : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 28; - } bits; - uint32_t value; - } segment_info_fields; - - /** \brief Segmentation parameters for current frame. - * feature_data[segment_id][feature_id] - * where segment_id has value range [0..7] indicating the segment id. - * and feature_id is defined as - typedef enum { - SEG_LVL_ALT_Q, // Use alternate Quantizer .... - SEG_LVL_ALT_LF_Y_V, // Use alternate loop filter value on y plane vertical - SEG_LVL_ALT_LF_Y_H, // Use alternate loop filter value on y plane horizontal - SEG_LVL_ALT_LF_U, // Use alternate loop filter value on u plane - SEG_LVL_ALT_LF_V, // Use alternate loop filter value on v plane - SEG_LVL_REF_FRAME, // Optional Segment reference frame - SEG_LVL_SKIP, // Optional Segment (0,0) + skip mode - SEG_LVL_GLOBALMV, - SEG_LVL_MAX - } SEG_LVL_FEATURES; - * feature_data[][] is equivalent to variable FeatureData[][] in spec, - * which is after clip3() operation. - * Clip3(x, y, z) = (z < x)? x : ((z > y)? y : z); - * The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = { - * 255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, 7, 0, 0 } - */ - int16_t feature_data[8][8]; - - /** \brief indicates if a feature is enabled or not. - * Each bit field itself is the feature_id. Index is segment_id. - * feature_mask[segment_id] & (1 << feature_id) equal to 1 specify that the feature of - * feature_id for segment of segment_id is enabled, otherwise disabled. - */ - uint8_t feature_mask[8]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VASegmentationStructAV1; - -/** \brief Film Grain Information - */ -typedef struct _VAFilmGrainStructAV1 { - union { - struct { - /** \brief Specify whether or not film grain is applied on current frame. - * If set to 0, all the rest parameters should be set to zero - * and ignored. - */ - uint32_t apply_grain : 1; - uint32_t chroma_scaling_from_luma : 1; - uint32_t grain_scaling_minus_8 : 2; - uint32_t ar_coeff_lag : 2; - uint32_t ar_coeff_shift_minus_6 : 2; - uint32_t grain_scale_shift : 2; - uint32_t overlap_flag : 1; - uint32_t clip_to_restricted_range : 1; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 20; - } bits; - uint32_t value; - } film_grain_info_fields; - - uint16_t grain_seed; - /* value range [0..14] */ - uint8_t num_y_points; - uint8_t point_y_value[14]; - uint8_t point_y_scaling[14]; - /* value range [0..10] */ - uint8_t num_cb_points; - uint8_t point_cb_value[10]; - uint8_t point_cb_scaling[10]; - /* value range [0..10] */ - uint8_t num_cr_points; - uint8_t point_cr_value[10]; - uint8_t point_cr_scaling[10]; - /* value range [-128..127] */ - int8_t ar_coeffs_y[24]; - int8_t ar_coeffs_cb[25]; - int8_t ar_coeffs_cr[25]; - uint8_t cb_mult; - uint8_t cb_luma_mult; - uint16_t cb_offset; - uint8_t cr_mult; - uint8_t cr_luma_mult; - uint16_t cr_offset; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VAFilmGrainStructAV1; - -typedef enum { - /** identity transformation, 0-parameter */ - VAAV1TransformationIdentity = 0, - /** translational motion, 2-parameter */ - VAAV1TransformationTranslation = 1, - /** simplified affine with rotation + zoom only, 4-parameter */ - VAAV1TransformationRotzoom = 2, - /** affine, 6-parameter */ - VAAV1TransformationAffine = 3, - /** transformation count */ - VAAV1TransformationCount -} VAAV1TransformationType; - -typedef struct _VAWarpedMotionParamsAV1 { - - /** \brief Specify the type of warped motion */ - VAAV1TransformationType wmtype; - - /** \brief Specify warp motion parameters - * wm.wmmat[] corresponds to gm_params[][] in spec. - * Details in AV1 spec section 5.9.24 or refer to libaom code - * https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c - */ - int32_t wmmat[8]; - - /* valid or invalid on affine set */ - uint8_t invalid; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VAWarpedMotionParamsAV1; - -/** - * \brief AV1 Decoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters and should be sent once - * per frame. - * - */ -typedef struct _VADecPictureParameterBufferAV1 { - /**@{*/ - - /** \brief sequence level information - */ - - /** \brief AV1 bit stream profile - */ - uint8_t profile; - - uint8_t order_hint_bits_minus_1; - - /** \brief bit depth index - * value range [0..2] - * 0 - bit depth 8; - * 1 - bit depth 10; - * 2 - bit depth 12; - */ - uint8_t bit_depth_idx; - - /** \brief corresponds to AV1 spec variable of the same name. */ - uint8_t matrix_coefficients; - - union { - struct { - uint32_t still_picture : 1; - uint32_t use_128x128_superblock : 1; - uint32_t enable_filter_intra : 1; - uint32_t enable_intra_edge_filter : 1; - - /** read_compound_tools */ - uint32_t enable_interintra_compound : 1; - uint32_t enable_masked_compound : 1; - - uint32_t enable_dual_filter : 1; - uint32_t enable_order_hint : 1; - uint32_t enable_jnt_comp : 1; - uint32_t enable_cdef : 1; - uint32_t mono_chrome : 1; - uint32_t color_range : 1; - uint32_t subsampling_x : 1; - uint32_t subsampling_y : 1; - va_deprecated uint32_t chroma_sample_position : 1; - uint32_t film_grain_params_present : 1; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 16; - } fields; - uint32_t value; - } seq_info_fields; - - /** \brief Picture level information - */ - - /** \brief buffer description of decoded current picture - */ - VASurfaceID current_frame; - - /** \brief display buffer of current picture - * Used for film grain applied decoded picture. - * Valid only when apply_grain equals 1. - */ - VASurfaceID current_display_picture; - - /** \brief number of anchor frames for large scale tile - * This parameter gives the number of entries of anchor_frames_list[]. - * Value range [0..128]. - */ - uint8_t anchor_frames_num; - - /** \brief anchor frame list for large scale tile - * For large scale tile applications, the anchor frames could come from - * previously decoded frames in current sequence (aka. internal), or - * from external sources. - * For external anchor frames, application should call API - * vaCreateBuffer() to generate frame buffers and populate them with - * pixel frames. And this process may happen multiple times. - * The array anchor_frames_list[] is used to register all the available - * anchor frames from both external and internal, up to the current - * frame instance. If a previously registerred anchor frame is no longer - * needed, it should be removed from the list. But it does not prevent - * applications from relacing the frame buffer with new anchor frames. - * Please note that the internal anchor frames may not still be present - * in the current DPB buffer. But if it is in the anchor_frames_list[], - * it should not be replaced with other frames or removed from memory - * until it is not shown in the list. - * This number of entries of the list is given by parameter anchor_frames_num. - */ - VASurfaceID *anchor_frames_list; - - /** \brief Picture resolution minus 1 - * Picture original resolution. If SuperRes is enabled, - * this is the upscaled resolution. - * value range [0..65535] - */ - uint16_t frame_width_minus1; - uint16_t frame_height_minus1; - - /** \brief Output frame buffer size in unit of tiles - * Valid only when large_scale_tile equals 1. - * value range [0..65535] - */ - uint16_t output_frame_width_in_tiles_minus_1; - uint16_t output_frame_height_in_tiles_minus_1; - - /** \brief Surface indices of reference frames in DPB. - * - * Contains a list of uncompressed frame buffer surface indices as references. - * Application needs to make sure all the entries point to valid frames - * except for intra frames by checking ref_frame_id[]. If missing frame - * is identified, application may choose to perform error recovery by - * pointing problematic index to an alternative frame buffer. - * Driver is not responsible to validate reference frames' id. - */ - VASurfaceID ref_frame_map[8]; - - /** \brief Reference frame indices. - * - * Contains a list of indices into ref_frame_map[8]. - * It specifies the reference frame correspondence. - * The indices of the array are defined as [LAST_FRAME – LAST_FRAME, - * LAST2_FRAME – LAST_FRAME, …, ALTREF_FRAME – LAST_FRAME], where each - * symbol is defined as: - * enum{INTRA_FRAME = 0, LAST_FRAME, LAST2_FRAME, LAST3_FRAME, GOLDEN_FRAME, - * BWDREF_FRAME, ALTREF2_FRAME, ALTREF_FRAME}; - */ - uint8_t ref_frame_idx[7]; - - /** \brief primary reference frame index - * Index into ref_frame_idx[], specifying which reference frame contains - * propagated info that should be loaded at the start of the frame. - * When value equals PRIMARY_REF_NONE (7), it indicates there is - * no primary reference frame. - * value range [0..7] - */ - uint8_t primary_ref_frame; - - uint8_t order_hint; - - VASegmentationStructAV1 seg_info; - VAFilmGrainStructAV1 film_grain_info; - - /** \brief tile structure - * When uniform_tile_spacing_flag == 1, width_in_sbs_minus_1[] and - * height_in_sbs_minus_1[] should be ignored, which will be generated - * by driver based on tile_cols and tile_rows. - */ - uint8_t tile_cols; - uint8_t tile_rows; - - /* The width/height of a tile minus 1 in units of superblocks. Though the - * maximum number of tiles is 64, since ones of the last tile are computed - * from ones of the other tiles and frame_width/height, they are not - * necessarily specified. - */ - uint16_t width_in_sbs_minus_1[63]; - uint16_t height_in_sbs_minus_1[63]; - - /** \brief number of tiles minus 1 in large scale tile list - * Same as AV1 semantic element. - * Valid only when large_scale_tiles == 1. - */ - uint16_t tile_count_minus_1; - - /* specify the tile index for context updating */ - uint16_t context_update_tile_id; - - union { - struct { - /** \brief flags for current picture - * same syntax and semantic as those in AV1 code - */ - - /** \brief Frame Type - * 0: KEY_FRAME; - * 1: INTER_FRAME; - * 2: INTRA_ONLY_FRAME; - * 3: SWITCH_FRAME - * For SWITCH_FRAME, application shall set error_resilient_mode = 1, - * refresh_frame_flags, etc. appropriately. And driver will convert it - * to INTER_FRAME. - */ - uint32_t frame_type : 2; - uint32_t show_frame : 1; - uint32_t showable_frame : 1; - uint32_t error_resilient_mode : 1; - uint32_t disable_cdf_update : 1; - uint32_t allow_screen_content_tools : 1; - uint32_t force_integer_mv : 1; - uint32_t allow_intrabc : 1; - uint32_t use_superres : 1; - uint32_t allow_high_precision_mv : 1; - uint32_t is_motion_mode_switchable : 1; - uint32_t use_ref_frame_mvs : 1; - /* disable_frame_end_update_cdf is coded as refresh_frame_context. */ - uint32_t disable_frame_end_update_cdf : 1; - uint32_t uniform_tile_spacing_flag : 1; - uint32_t allow_warped_motion : 1; - /** \brief indicate if current frame in large scale tile mode */ - uint32_t large_scale_tile : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 15; - } bits; - uint32_t value; - } pic_info_fields; - - /** \brief Supper resolution scale denominator. - * When use_superres=1, superres_scale_denominator must be in the range [9..16]. - * When use_superres=0, superres_scale_denominator must be 8. - */ - uint8_t superres_scale_denominator; - - /** \brief Interpolation filter. - * value range [0..4] - */ - uint8_t interp_filter; - - /** \brief luma loop filter levels. - * value range [0..63]. - */ - uint8_t filter_level[2]; - - /** \brief chroma loop filter levels. - * value range [0..63]. - */ - uint8_t filter_level_u; - uint8_t filter_level_v; - - union { - struct { - /** \brief flags for reference pictures - * same syntax and semantic as those in AV1 code - */ - uint8_t sharpness_level : 3; - uint8_t mode_ref_delta_enabled : 1; - uint8_t mode_ref_delta_update : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint8_t reserved : 3; - } bits; - uint8_t value; - } loop_filter_info_fields; - - /** \brief The adjustment needed for the filter level based on - * the chosen reference frame. - * value range [-64..63]. - */ - int8_t ref_deltas[8]; - - /** \brief The adjustment needed for the filter level based on - * the chosen mode. - * value range [-64..63]. - */ - int8_t mode_deltas[2]; - - /** \brief quantization - */ - /** \brief Y AC index - * value range [0..255] - */ - uint8_t base_qindex; - /** \brief Y DC delta from Y AC - * value range [-64..63] - */ - int8_t y_dc_delta_q; - /** \brief U DC delta from Y AC - * value range [-64..63] - */ - int8_t u_dc_delta_q; - /** \brief U AC delta from Y AC - * value range [-64..63] - */ - int8_t u_ac_delta_q; - /** \brief V DC delta from Y AC - * value range [-64..63] - */ - int8_t v_dc_delta_q; - /** \brief V AC delta from Y AC - * value range [-64..63] - */ - int8_t v_ac_delta_q; - - /** \brief quantization_matrix - */ - union { - struct { - uint16_t using_qmatrix : 1; - /** \brief qm level - * value range [0..15] - * Invalid if using_qmatrix equals 0. - */ - uint16_t qm_y : 4; - uint16_t qm_u : 4; - uint16_t qm_v : 4; - - /** \brief Reserved bytes for future use, must be zero */ - uint16_t reserved : 3; - } bits; - uint16_t value; - } qmatrix_fields; - - union { - struct { - /** \brief delta_q parameters - */ - uint32_t delta_q_present_flag : 1; - uint32_t log2_delta_q_res : 2; - - /** \brief delta_lf parameters - */ - uint32_t delta_lf_present_flag : 1; - uint32_t log2_delta_lf_res : 2; - - /** \brief CONFIG_LOOPFILTER_LEVEL - */ - uint32_t delta_lf_multi : 1; - - /** \brief read_tx_mode - * value range [0..2] - */ - uint32_t tx_mode : 2; - - /* AV1 frame reference mode semantic */ - uint32_t reference_select : 1; - - uint32_t reduced_tx_set_used : 1; - - uint32_t skip_mode_present : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 20; - } bits; - uint32_t value; - } mode_control_fields; - - /** \brief CDEF parameters - */ - /* value range [0..3] */ - uint8_t cdef_damping_minus_3; - /* value range [0..3] */ - uint8_t cdef_bits; - - /** Encode cdef strength: - * - * The cdef_y_strengths[] and cdef_uv_strengths[] are expected to be packed - * with both primary and secondary strength. The secondary strength is - * given in the lower two bits and the primary strength is given in the next - * four bits. - * - * cdef_y_strengths[] & cdef_uv_strengths[] should be derived as: - * (cdef_y_strengths[]) = (cdef_y_pri_strength[] << 2) | (cdef_y_sec_strength[] & 0x03) - * (cdef_uv_strengths[]) = (cdef_uv_pri_strength[] << 2) | (cdef_uv_sec_strength[] & 0x03) - * In which, cdef_y_pri_strength[]/cdef_y_sec_strength[]/cdef_uv_pri_strength[]/cdef_uv_sec_strength[] - * are variables defined in AV1 Spec 5.9.19. The cdef_y_strengths[] & cdef_uv_strengths[] - * are corresponding to LIBAOM variables cm->cdef_strengths[] & cm->cdef_uv_strengths[] respectively. - */ - /* value range [0..63] */ - uint8_t cdef_y_strengths[8]; - /* value range [0..63] */ - uint8_t cdef_uv_strengths[8]; - - /** \brief loop restoration parameters - */ - union { - struct { - uint16_t yframe_restoration_type : 2; - uint16_t cbframe_restoration_type : 2; - uint16_t crframe_restoration_type : 2; - uint16_t lr_unit_shift : 2; - uint16_t lr_uv_shift : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint16_t reserved : 7; - } bits; - uint16_t value; - } loop_restoration_fields; - - /** \brief global motion - */ - VAWarpedMotionParamsAV1 wm[7]; - - /**@}*/ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VADecPictureParameterBufferAV1; - - -/** - * \brief AV1 Slice Parameter Buffer Structure - * - * This structure conveys parameters related to bit stream data and should be - * sent once per tile. - * - * It uses the name VASliceParameterBufferAV1 to be consistent with other codec, - * but actually means VATileParameterBufferAV1. - * - * Slice data buffer of VASliceDataBufferType is used - * to send the bitstream. - * - * Please note that host decoder is responsible to parse out the - * per tile information. And the bit stream in sent to driver in per - * tile granularity. - */ -typedef struct _VASliceParameterBufferAV1 { - /**@{*/ - /** \brief The byte count of current tile in the bitstream buffer, - * starting from first byte of the buffer. - * It uses the name slice_data_size to be consistent with other codec, - * but actually means tile_data_size. - */ - uint32_t slice_data_size; - /** - * offset to the first byte of the data buffer. - */ - uint32_t slice_data_offset; - /** - * see VA_SLICE_DATA_FLAG_XXX definitions - */ - uint32_t slice_data_flag; - - uint16_t tile_row; - uint16_t tile_column; - - va_deprecated uint16_t tg_start; - va_deprecated uint16_t tg_end; - /** \brief anchor frame index for large scale tile. - * index into an array AnchorFrames of the frames that the tile uses - * for prediction. - * valid only when large_scale_tile equals 1. - */ - uint8_t anchor_frame_idx; - - /** \brief tile index in the tile list. - * Valid only when large_scale_tile is enabled. - * Driver uses this field to decide the tile output location. - */ - uint16_t tile_idx_in_tile_list; - - /**@}*/ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferAV1; - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_AV1_H */ diff --git a/prebuilts/arm/include/va/va_dec_hevc.h b/prebuilts/arm/include/va/va_dec_hevc.h deleted file mode 100644 index eef0530..0000000 --- a/prebuilts/arm/include/va/va_dec_hevc.h +++ /dev/null @@ -1,616 +0,0 @@ -/* - * Copyright (c) 2014 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_hevc.h - * \brief The HEVC decoding API - * - * This file contains the \ref api_dec_hevc "HEVC decoding API". - */ - -#ifndef VA_DEC_HEVC_H -#define VA_DEC_HEVC_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_dec_hevc HEVC decoding API - * - * This HEVC decoding API supports Main and Main Still Picture profiles. - * And it supports both short slice format and long slice format. - * - * @{ - */ - -/** - * \brief HEVC Decoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters and should be sent once - * per frame. - * - */ -typedef struct _VAPictureParameterBufferHEVC { - /** \brief buffer description of decoded current picture - * only VA_PICTURE_HEVC_FIELD_PIC and VA_PICTURE_HEVC_BOTTOM_FIELD - * of "flags" fields are meaningful. - */ - VAPictureHEVC CurrPic; - /** \brief buffer description of reference frames in DPB */ - VAPictureHEVC ReferenceFrames[15]; - /** \brief picture width, shall be integer multiple of minimum CB size. */ - uint16_t pic_width_in_luma_samples; - /** \brief picture height, shall be integer multiple of minimum CB size. */ - uint16_t pic_height_in_luma_samples; - - - union { - struct { - /** following flags have same syntax and semantic as those in HEVC spec */ - uint32_t chroma_format_idc : 2; - uint32_t separate_colour_plane_flag : 1; - uint32_t pcm_enabled_flag : 1; - uint32_t scaling_list_enabled_flag : 1; - uint32_t transform_skip_enabled_flag : 1; - uint32_t amp_enabled_flag : 1; - uint32_t strong_intra_smoothing_enabled_flag : 1; - uint32_t sign_data_hiding_enabled_flag : 1; - uint32_t constrained_intra_pred_flag : 1; - uint32_t cu_qp_delta_enabled_flag : 1; - uint32_t weighted_pred_flag : 1; - uint32_t weighted_bipred_flag : 1; - uint32_t transquant_bypass_enabled_flag : 1; - uint32_t tiles_enabled_flag : 1; - uint32_t entropy_coding_sync_enabled_flag : 1; - uint32_t pps_loop_filter_across_slices_enabled_flag : 1; - uint32_t loop_filter_across_tiles_enabled_flag : 1; - uint32_t pcm_loop_filter_disabled_flag : 1; - /** set based on sps_max_num_reorder_pics of current temporal layer. */ - uint32_t NoPicReorderingFlag : 1; - /** picture has no B slices */ - uint32_t NoBiPredFlag : 1; - - uint32_t ReservedBits : 11; - } bits; - uint32_t value; - } pic_fields; - - /** following parameters have same syntax with those in HEVC spec */ - /** \brief DPB size for current temporal layer */ - uint8_t sps_max_dec_pic_buffering_minus1; - uint8_t bit_depth_luma_minus8; - uint8_t bit_depth_chroma_minus8; - uint8_t pcm_sample_bit_depth_luma_minus1; - uint8_t pcm_sample_bit_depth_chroma_minus1; - uint8_t log2_min_luma_coding_block_size_minus3; - uint8_t log2_diff_max_min_luma_coding_block_size; - uint8_t log2_min_transform_block_size_minus2; - uint8_t log2_diff_max_min_transform_block_size; - uint8_t log2_min_pcm_luma_coding_block_size_minus3; - uint8_t log2_diff_max_min_pcm_luma_coding_block_size; - uint8_t max_transform_hierarchy_depth_intra; - uint8_t max_transform_hierarchy_depth_inter; - int8_t init_qp_minus26; - uint8_t diff_cu_qp_delta_depth; - int8_t pps_cb_qp_offset; - int8_t pps_cr_qp_offset; - uint8_t log2_parallel_merge_level_minus2; - uint8_t num_tile_columns_minus1; - uint8_t num_tile_rows_minus1; - /** - * when uniform_spacing_flag equals 1, application should populate - * column_width_minus[], and row_height_minus1[] with approperiate values. - */ - uint16_t column_width_minus1[19]; - uint16_t row_height_minus1[21]; - - /** - * The Following Parameters are needed for Short Slice Format Only. - * Only format decoding can ignore them. - */ - - /** - * \brief Parameters needed for parsing slice segment headers - */ - union { - struct { - /** following parameters have same syntax with those in HEVC spec */ - uint32_t lists_modification_present_flag : 1; - uint32_t long_term_ref_pics_present_flag : 1; - uint32_t sps_temporal_mvp_enabled_flag : 1; - uint32_t cabac_init_present_flag : 1; - uint32_t output_flag_present_flag : 1; - uint32_t dependent_slice_segments_enabled_flag : 1; - uint32_t pps_slice_chroma_qp_offsets_present_flag : 1; - uint32_t sample_adaptive_offset_enabled_flag : 1; - uint32_t deblocking_filter_override_enabled_flag : 1; - uint32_t pps_disable_deblocking_filter_flag : 1; - uint32_t slice_segment_header_extension_present_flag : 1; - - /** current picture with NUT between 16 and 21 inclusive */ - uint32_t RapPicFlag : 1; - /** current picture with NUT between 19 and 20 inclusive */ - uint32_t IdrPicFlag : 1; - /** current picture has only intra slices */ - uint32_t IntraPicFlag : 1; - - uint32_t ReservedBits : 18; - } bits; - uint32_t value; - } slice_parsing_fields; - - /** following parameters have same syntax with those in HEVC spec */ - uint8_t log2_max_pic_order_cnt_lsb_minus4; - uint8_t num_short_term_ref_pic_sets; - uint8_t num_long_term_ref_pic_sps; - uint8_t num_ref_idx_l0_default_active_minus1; - uint8_t num_ref_idx_l1_default_active_minus1; - int8_t pps_beta_offset_div2; - int8_t pps_tc_offset_div2; - uint8_t num_extra_slice_header_bits; - - /** - * \brief number of bits that structure - * short_term_ref_pic_set( num_short_term_ref_pic_sets ) takes in slice - * segment header when short_term_ref_pic_set_sps_flag equals 0. - * if short_term_ref_pic_set_sps_flag equals 1, the value should be 0. - * the bit count is calculated after emulation prevention bytes are removed - * from bit streams. - * This variable is used for accelorater to skip parsing the - * short_term_ref_pic_set( num_short_term_ref_pic_sets ) structure. - */ - uint32_t st_rps_bits; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAPictureParameterBufferHEVC; - -/** - * \brief HEVC Decoding Picture Parameter Buffer Structure for Range Extension - * - * This structure conveys picture level HEVC Range Extension parameters - * and should be sent once per frame. This data structure should be sent - * together with VAPictureParameterBufferHEVC in a single buffer of - * \ref VAPictureParameterBufferHEVCExtension since each frame - * of HEVC range extension contains both picture level parameters and picture - * level range extension parameters. They should be parsed together. The buffer - * type is same as \ref VAPictureParameterBufferHEVC. - * - */ -typedef struct _VAPictureParameterBufferHEVCRext { - union { - struct { - /** \brief HEVC range extension flags - * The following flags bears the same syntax and semantics as - * those defined in HEVC bit stream spec. - */ - uint32_t transform_skip_rotation_enabled_flag : 1; - uint32_t transform_skip_context_enabled_flag : 1; - uint32_t implicit_rdpcm_enabled_flag : 1; - uint32_t explicit_rdpcm_enabled_flag : 1; - uint32_t extended_precision_processing_flag : 1; - uint32_t intra_smoothing_disabled_flag : 1; - uint32_t high_precision_offsets_enabled_flag : 1; - uint32_t persistent_rice_adaptation_enabled_flag : 1; - uint32_t cabac_bypass_alignment_enabled_flag : 1; - uint32_t cross_component_prediction_enabled_flag : 1; - uint32_t chroma_qp_offset_list_enabled_flag : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 21; - } bits; - uint32_t value; - } range_extension_pic_fields; - - /** \brief HEVC range extension flags - * The following flags bears the same syntax and semantics as - * those defined in HEVC bit stream spec. - */ - uint8_t diff_cu_chroma_qp_offset_depth; - uint8_t chroma_qp_offset_list_len_minus1; - uint8_t log2_sao_offset_scale_luma; - uint8_t log2_sao_offset_scale_chroma; - uint8_t log2_max_transform_skip_block_size_minus2; - int8_t cb_qp_offset_list[6]; - int8_t cr_qp_offset_list[6]; -} VAPictureParameterBufferHEVCRext; - -/** - *\brief HEVC Decoding Picture Parameter Buffer Structure for - *Screen Content extension - * - *This structure conveys picture level HEVC Scc parameters - *and should be sent once per frame. This data structure should be sent - *together with VAPictureParameterBufferHEVC and VAPictureParameterBufferHEVCRext - *in a single buffer of \ref VAPictureParameterBufferHEVCExtension since each - *frame of HEVC SCC contains picture level parameters, picture level range - *extension parameters and picture level Scc parameters. They should be parsed - *together and the buffer type is same as \ref VAPictureParameterBufferHEVC. - * - */ -typedef struct _VAPictureParameterBufferHEVCScc { - union { - struct { - /** \brief HEVC Scc extension flags - * The following flags bears the same syntax and semantics as - * those defined in HEVC bit stream spec. - */ - /* indicates if intra block copy (IBC) is enabled or not. */ - uint32_t pps_curr_pic_ref_enabled_flag : 1; - /* indicates if Palette Mode is enabled or not. */ - uint32_t palette_mode_enabled_flag : 1; - /* controls the presence and inference of the use_integer_mv_flag syntax - * in slice segment header that specifies the resolution of motion - * vectors for inter prediction. - */ - uint32_t motion_vector_resolution_control_idc : 2; - /* specifies that the intra boundary filtering process is - * disabled or not for intra prediction. - */ - uint32_t intra_boundary_filtering_disabled_flag : 1; - /* specifies that an adaptive colour transform may be applied - * to the residual in the decoding process. - */ - uint32_t residual_adaptive_colour_transform_enabled_flag : 1; - - /* specifies that slice_act_y_qp_offset, slice_act_cb_qp_offset, - * slice_act_cr_qp_offset are present in the slice header - */ - uint32_t pps_slice_act_qp_offsets_present_flag : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 25; - } bits; - uint32_t value; - } screen_content_pic_fields; - - /* specifies the maximum allowed palette size. */ - uint8_t palette_max_size; - /* Correspond to HEVC syntax elements of the same names. - * It specifies the difference between the maximum allowed palette - * predictor size and the maximum allowed palette size. - * App needs to enforce that the variable PaletteMaxPredictorSize, - * which is derived as follows: - * PaletteMaxPredictorSize = palette_max_size + delta_palette_max_predictor_size - * should have a value range of [0..128]. - */ - uint8_t delta_palette_max_predictor_size; - /** \brief Size of initial palette predictor. - * It is derived from pps_num_palette_predictor_initializer or - * sps_num_palette_predictor_initializer_minus1. - * Details in HEVC SCC spec section 9.3.2.3. - */ - uint8_t predictor_palette_size; - /** \brief Palette predictor initializer. - * It is derived from pps_palette_predictor_initializers[][] - * or sps_palette_predictor_initializers[][]. - * Details in HEVC SCC spec section 9.3.2.3. - */ - uint16_t predictor_palette_entries[3][128]; - /* are used to determine the offsets that are applied to the - * quantization parameter values for the luma, Cb and Cr - * components, respectively. - */ - int8_t pps_act_y_qp_offset_plus5; - int8_t pps_act_cb_qp_offset_plus5; - int8_t pps_act_cr_qp_offset_plus3; -} VAPictureParameterBufferHEVCScc; - -/** - * \brief HEVC Decoding Picture Parameter Buffer Structure including Extensions - * - * This structure conveys picture level HEVC parameters including basic version 1 - * and range extension and screen content extension. - * The data buffer should be sent once per frame. - * - */ -typedef struct _VAPictureParameterBufferHEVCExtension { - /** \brief basic HEVC picture parameters data structure - */ - VAPictureParameterBufferHEVC base; - - /** \brief HEVC range extension picture parameters data structure - */ - VAPictureParameterBufferHEVCRext rext; - - /** \brief HEVC screen content picture parameters data structure - */ - VAPictureParameterBufferHEVCScc scc; -} VAPictureParameterBufferHEVCExtension; - -/** - * \brief HEVC Slice Parameter Buffer Structure For Long Format - * - * VASliceParameterBufferHEVC structure should be accompanied by a - * slice data buffer, which holds the whole raw slice NAL unit bit streams - * including start code prefix and emulation prevention bytes not removed. - * - * This structure conveys parameters related to slice segment header and should - * be sent once per slice. - * - * For short format, this data structure is not sent by application. - * - */ -typedef struct _VASliceParameterBufferHEVC { - /** @name Codec-independent Slice Parameter Buffer base. */ - - /**@{*/ - - /** \brief Number of bytes in the slice data buffer for this slice - * counting from and including NAL unit header. - */ - uint32_t slice_data_size; - /** \brief The offset to the NAL unit header for this slice */ - uint32_t slice_data_offset; - /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_XXX. */ - uint32_t slice_data_flag; - /** - * \brief Byte offset from NAL unit header to the begining of slice_data(). - * - * This byte offset is relative to and includes the NAL unit header - * and represents the number of bytes parsed in the slice_header() - * after the removal of any emulation prevention bytes in - * there. However, the slice data buffer passed to the hardware is - * the original bitstream, thus including any emulation prevention - * bytes. - */ - uint32_t slice_data_byte_offset; - /** HEVC syntax element. */ - uint32_t slice_segment_address; - /** \brief index into ReferenceFrames[] - * RefPicList[0][] corresponds to RefPicList0[] of HEVC variable. - * RefPicList[1][] corresponds to RefPicList1[] of HEVC variable. - * value range [0..14, 0xFF], where 0xFF indicates invalid entry. - */ - uint8_t RefPicList[2][15]; - union { - uint32_t value; - struct { - /** current slice is last slice of picture. */ - uint32_t LastSliceOfPic : 1; - /** HEVC syntax element. */ - uint32_t dependent_slice_segment_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_type : 2; - /** HEVC syntax element. */ - uint32_t color_plane_id : 2; - /** HEVC syntax element. */ - uint32_t slice_sao_luma_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_sao_chroma_flag : 1; - /** HEVC syntax element. */ - uint32_t mvd_l1_zero_flag : 1; - /** HEVC syntax element. */ - uint32_t cabac_init_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_temporal_mvp_enabled_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_deblocking_filter_disabled_flag : 1; - /** HEVC syntax element. */ - uint32_t collocated_from_l0_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_loop_filter_across_slices_enabled_flag : 1; - uint32_t reserved : 18; - } fields; - } LongSliceFlags; - - /** HEVC syntax element. Collocated Reference Picture Index. - * index to RefPicList[0][] or RefPicList[1][]. - * when slice_temporal_mvp_enabled_flag equals 0, it should take value 0xFF. - * value range [0..14, 0xFF]. - */ - uint8_t collocated_ref_idx; - /** HEVC syntax element. - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l0_default_active_minus1. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** HEVC syntax element. - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l1_default_active_minus1. - */ - uint8_t num_ref_idx_l1_active_minus1; - /** HEVC syntax element. */ - int8_t slice_qp_delta; - /** HEVC syntax element. */ - int8_t slice_cb_qp_offset; - /** HEVC syntax element. */ - int8_t slice_cr_qp_offset; - /** HEVC syntax element. */ - int8_t slice_beta_offset_div2; - /** HEVC syntax element. */ - int8_t slice_tc_offset_div2; - /** HEVC syntax element. */ - uint8_t luma_log2_weight_denom; - /** HEVC syntax element. */ - int8_t delta_chroma_log2_weight_denom; - /** HEVC syntax element. */ - int8_t delta_luma_weight_l0[15]; - /** HEVC syntax element. */ - int8_t luma_offset_l0[15]; - /** HEVC syntax element. */ - int8_t delta_chroma_weight_l0[15][2]; - /** corresponds to HEVC spec variable of the same name. */ - int8_t ChromaOffsetL0[15][2]; - /** HEVC syntax element. */ - int8_t delta_luma_weight_l1[15]; - /** HEVC syntax element. */ - int8_t luma_offset_l1[15]; - /** HEVC syntax element. */ - int8_t delta_chroma_weight_l1[15][2]; - /** corresponds to HEVC spec variable of the same name. */ - int8_t ChromaOffsetL1[15][2]; - /** HEVC syntax element. */ - uint8_t five_minus_max_num_merge_cand; - /** HEVC syntax element. */ - uint16_t num_entry_point_offsets; - /** HEVC syntax element. */ - uint16_t entry_offset_to_subset_array; - /** \brief Number of emulation prevention bytes in slice header. */ - uint16_t slice_data_num_emu_prevn_bytes; - /**@}*/ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW - 2]; -} VASliceParameterBufferHEVC; - -/** - * \brief HEVC Extented Slice Parameter Buffer Structure For Long Format - * - * This data structure contains extension profiles (range extension and screen content). - * - * VASliceParameterBufferHEVCRext structure should be accompanied by a - * slice data buffer, which holds the whole raw slice NAL unit bit streams - * including start code prefix and emulation prevention bytes not removed. - * - * This structure conveys parameters related to slice segment header and should - * be sent once per slice with VASliceParameterBufferHEVC in a single buffer of - * \ref VASliceParameterBufferHEVCExtension and the buffer type is same as \ref - * VASliceParameterBufferHEVC. - * - * For short format, this data structure is not sent by application. - * - */ -typedef struct _VASliceParameterBufferHEVCRext { - /* below four parameters are used to replace data types of the - * corresponding parameters of those in \# VASliceParameterBufferHEVC. - */ - int16_t luma_offset_l0[15]; - int16_t ChromaOffsetL0[15][2]; - int16_t luma_offset_l1[15]; - int16_t ChromaOffsetL1[15][2]; - - union { - struct { - uint32_t cu_chroma_qp_offset_enabled_flag : 1; - uint32_t use_integer_mv_flag : 1; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 30; - } bits; - uint32_t value; - } slice_ext_flags; - - /** \brief Screen Content Extension parameters. - * data range [-12..12] - */ - int8_t slice_act_y_qp_offset; - int8_t slice_act_cb_qp_offset; - int8_t slice_act_cr_qp_offset; -} VASliceParameterBufferHEVCRext; - -/** - * \brief HEVC Decoding Slice Parameter Buffer Structure For Long Format including Extensions - * - * This data structure contains both baseline HEVC profiles (main, main10) - * and extension profiles (range extension and screen content). - * - * VASliceParameterBufferHEVCExtension structure should be accompanied by a - * slice data buffer, which holds the whole raw slice NAL unit bit streams - * including start code prefix and emulation prevention bytes not removed. - * - * This structure conveys parameters related to slice segment header and should - * be sent once per slice. For HEVC range extension and HEVC Scc decoding, - * application should parse both basic slice parameters and extented slice - * parameters into this buffer structure and sent it. - * - * For short format, this data structure is not sent by application. - * - */ -typedef struct _VASliceParameterBufferHEVCExtension { - /** \brief baseline HEVC slice parameters data structure */ - VASliceParameterBufferHEVC base; - - /** \brief extented HEVC slice parameters data structure */ - VASliceParameterBufferHEVCRext rext; -} VASliceParameterBufferHEVCExtension; - -/** - * \brief HEVC Inverse Quantization Matrix Buffer Structure - * - * This structure is sent once per frame, - * and only when scaling_list_enabled_flag = 1. - * When sps_scaling_list_data_present_flag = 0, app still - * needs to send in this structure with default matrix values. - * - * Matrix entries are in raster scan order which follows HEVC spec. - */ -typedef struct _VAIQMatrixBufferHEVC { - /** - * \brief scaling lists, - * corresponds to same HEVC spec syntax element - * ScalingList[ i ][ MatrixID ][ j ]. - * - * \brief 4x4 scaling, - * correspongs i = 0, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 15, inclusive. - */ - uint8_t ScalingList4x4[6][16]; - /** - * \brief 8x8 scaling, - * correspongs i = 1, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t ScalingList8x8[6][64]; - /** - * \brief 16x16 scaling, - * correspongs i = 2, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t ScalingList16x16[6][64]; - /** - * \brief 32x32 scaling, - * correspongs i = 3, MatrixID is in the range of 0 to 1, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t ScalingList32x32[2][64]; - /** - * \brief DC values of the 16x16 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 2 and matrixID in the range of 0 to 5, inclusive. - */ - uint8_t ScalingListDC16x16[6]; - /** - * \brief DC values of the 32x32 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 3 and matrixID in the range of 0 to 1, inclusive. - */ - uint8_t ScalingListDC32x32[2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferHEVC; - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_HEVC_H */ diff --git a/prebuilts/arm/include/va/va_dec_jpeg.h b/prebuilts/arm/include/va/va_dec_jpeg.h deleted file mode 100644 index 7bb26c2..0000000 --- a/prebuilts/arm/include/va/va_dec_jpeg.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_jpeg.h - * \brief The JPEG decoding API - * - * This file contains the \ref api_dec_jpeg "JPEG decoding API". - */ - -#ifndef VA_DEC_JPEG_H -#define VA_DEC_JPEG_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_dec_jpeg JPEG decoding API - * - * This JPEG decoding API supports Baseline profile only. - * - * @{ - */ - -/** - * \brief Picture parameter for JPEG decoding. - * - * This structure holds information from the frame header, along with - * definitions from additional segments. - */ -typedef struct _VAPictureParameterBufferJPEGBaseline { - /** \brief Picture width in pixels. */ - uint16_t picture_width; - /** \brief Picture height in pixels. */ - uint16_t picture_height; - - struct { - /** \brief Component identifier (Ci). */ - uint8_t component_id; - /** \brief Horizontal sampling factor (Hi). */ - uint8_t h_sampling_factor; - /** \brief Vertical sampling factor (Vi). */ - uint8_t v_sampling_factor; - /* \brief Quantization table selector (Tqi). */ - uint8_t quantiser_table_selector; - } components[255]; - /** \brief Number of components in frame (Nf). */ - uint8_t num_components; - - /** \brief Input color space 0: YUV, 1: RGB, 2: BGR, others: reserved */ - uint8_t color_space; - /** \brief Set to VA_ROTATION_* for a single rotation angle reported by VAConfigAttribDecJPEG. */ - uint32_t rotation; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 1]; -} VAPictureParameterBufferJPEGBaseline; - -/** - * \brief Quantization table for JPEG decoding. - * - * This structure holds the complete quantization tables. This is an - * aggregation of all quantization table (DQT) segments maintained by - * the application. i.e. up to 4 quantization tables are stored in - * there for baseline profile. - * - * The #load_quantization_table array can be used as a hint to notify - * the VA driver implementation about which table(s) actually changed - * since the last submission of this buffer. - * - * The #quantiser_table values are specified in zig-zag scan order. - */ -typedef struct _VAIQMatrixBufferJPEGBaseline { - /** \brief Specifies which #quantiser_table is valid. */ - uint8_t load_quantiser_table[4]; - /** \brief Quanziation tables indexed by table identifier (Tqi). */ - uint8_t quantiser_table[4][64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferJPEGBaseline; - -/** - * \brief Slice parameter for JPEG decoding. - * - * This structure holds information from the scan header, along with - * definitions from additional segments. The associated slice data - * buffer holds all entropy coded segments (ECS) in the scan. - */ -typedef struct _VASliceParameterBufferJPEGBaseline { - /** @name Codec-independent Slice Parameter Buffer base. */ - /**@{*/ - /** \brief Number of bytes in the slice data buffer for this slice. */ - uint32_t slice_data_size; - /** \brief The offset to the first byte of the first MCU. */ - uint32_t slice_data_offset; - /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_xxx. */ - uint32_t slice_data_flag; - /**@}*/ - - /** \brief Scan horizontal position. */ - uint32_t slice_horizontal_position; - /** \brief Scan vertical position. */ - uint32_t slice_vertical_position; - - struct { - /** \brief Scan component selector (Csj). */ - uint8_t component_selector; - /** \brief DC entropy coding table selector (Tdj). */ - uint8_t dc_table_selector; - /** \brief AC entropy coding table selector (Taj). */ - uint8_t ac_table_selector; - } components[4]; - /** \brief Number of components in scan (Ns). */ - uint8_t num_components; - - /** \brief Restart interval definition (Ri). */ - uint16_t restart_interval; - /** \brief Number of MCUs in a scan. */ - uint32_t num_mcus; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferJPEGBaseline; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_JPEG_H */ diff --git a/prebuilts/arm/include/va/va_dec_vp8.h b/prebuilts/arm/include/va/va_dec_vp8.h deleted file mode 100644 index 8004f7d..0000000 --- a/prebuilts/arm/include/va/va_dec_vp8.h +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_vp.h - * \brief VP8 decoding API - * - * This file contains the \ref api_dec_vp8 "VP8 decoding API". - */ - -#ifndef VA_DEC_VP8_H -#define VA_DEC_VP8_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_dec_vp8 VP8 decoding API - * - * @{ - */ - -/** - * \brief VPX Bool Coder Context structure - * - * This common structure is defined for potential sharing by other VP formats - * - */ -typedef struct _VABoolCoderContextVPX { - /* partition 0 "range" */ - uint8_t range; - /* partition 0 "value" */ - uint8_t value; - /* - * 'partition 0 number of shifts before an output byte is available' - * it is the number of remaining bits in 'value' for decoding, range [0, 7]. - */ - - uint8_t count; -} VABoolCoderContextVPX; - -/** - * \brief VP8 Decoding Picture Parameter Buffer Structure - * - * This structure conveys frame level parameters and should be sent once - * per frame. - * - */ -typedef struct _VAPictureParameterBufferVP8 { - /* frame width in pixels */ - uint32_t frame_width; - /* frame height in pixels */ - uint32_t frame_height; - - /* specifies the "last" reference frame */ - VASurfaceID last_ref_frame; - /* specifies the "golden" reference frame */ - VASurfaceID golden_ref_frame; - /* specifies the "alternate" referrence frame */ - VASurfaceID alt_ref_frame; - /* specifies the out-of-loop deblocked frame, not used currently */ - VASurfaceID out_of_loop_frame; - - union { - struct { - /* same as key_frame in bitstream syntax, 0 means a key frame */ - uint32_t key_frame : 1; - /* same as version in bitstream syntax */ - uint32_t version : 3; - /* same as segmentation_enabled in bitstream syntax */ - uint32_t segmentation_enabled : 1; - /* same as update_mb_segmentation_map in bitstream syntax */ - uint32_t update_mb_segmentation_map : 1; - /* same as update_segment_feature_data in bitstream syntax */ - uint32_t update_segment_feature_data : 1; - /* same as filter_type in bitstream syntax */ - uint32_t filter_type : 1; - /* same as sharpness_level in bitstream syntax */ - uint32_t sharpness_level : 3; - /* same as loop_filter_adj_enable in bitstream syntax */ - uint32_t loop_filter_adj_enable : 1; - /* same as mode_ref_lf_delta_update in bitstream syntax */ - uint32_t mode_ref_lf_delta_update : 1; - /* same as sign_bias_golden in bitstream syntax */ - uint32_t sign_bias_golden : 1; - /* same as sign_bias_alternate in bitstream syntax */ - uint32_t sign_bias_alternate : 1; - /* same as mb_no_coeff_skip in bitstream syntax */ - uint32_t mb_no_coeff_skip : 1; - /* flag to indicate that loop filter should be disabled */ - uint32_t loop_filter_disable : 1; - } bits; - uint32_t value; - } pic_fields; - - /* - * probabilities of the segment_id decoding tree and same as - * mb_segment_tree_probs in the spec. - */ - uint8_t mb_segment_tree_probs[3]; - - /* Post-adjustment loop filter levels for the 4 segments */ - uint8_t loop_filter_level[4]; - /* loop filter deltas for reference frame based MB level adjustment */ - int8_t loop_filter_deltas_ref_frame[4]; - /* loop filter deltas for coding mode based MB level adjustment */ - int8_t loop_filter_deltas_mode[4]; - - /* same as prob_skip_false in bitstream syntax */ - uint8_t prob_skip_false; - /* same as prob_intra in bitstream syntax */ - uint8_t prob_intra; - /* same as prob_last in bitstream syntax */ - uint8_t prob_last; - /* same as prob_gf in bitstream syntax */ - uint8_t prob_gf; - - /* - * list of 4 probabilities of the luma intra prediction mode decoding - * tree and same as y_mode_probs in frame header - */ - uint8_t y_mode_probs[4]; - /* - * list of 3 probabilities of the chroma intra prediction mode decoding - * tree and same as uv_mode_probs in frame header - */ - uint8_t uv_mode_probs[3]; - /* - * updated mv decoding probabilities and same as mv_probs in - * frame header - */ - uint8_t mv_probs[2][19]; - - VABoolCoderContextVPX bool_coder_ctx; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureParameterBufferVP8; - -/** - * \brief VP8 Slice Parameter Buffer Structure - * - * This structure conveys parameters related to data partitions and should be - * sent once per frame. Slice data buffer of VASliceDataBufferType is used - * to send the partition data. - * - */ -typedef struct _VASliceParameterBufferVP8 { - /* - * number of bytes in the slice data buffer for the partitions - */ - uint32_t slice_data_size; - /* - * offset to the first byte of partition data (control partition) - */ - uint32_t slice_data_offset; - /* - * see VA_SLICE_DATA_FLAG_XXX definitions - */ - uint32_t slice_data_flag; - /* - * offset to the first bit of MB from the first byte of partition data(slice_data_offset) - */ - uint32_t macroblock_offset; - - /* - * Partitions - * (1<lvl[seg][ref][mode] in VP9 code, - * where m is [ref], and n is [mode] in FilterLevel[m][n]. - */ - uint8_t filter_level[4][2]; - /** \brief Specifies per segment Luma AC quantization scale. - * Corresponding to y_dequant[qindex][1] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t luma_ac_quant_scale; - /** \brief Specifies per segment Luma DC quantization scale. - * Corresponding to y_dequant[qindex][0] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t luma_dc_quant_scale; - /** \brief Specifies per segment Chroma AC quantization scale. - * Corresponding to uv_dequant[qindex][1] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t chroma_ac_quant_scale; - /** \brief Specifies per segment Chroma DC quantization scale. - * Corresponding to uv_dequant[qindex][0] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t chroma_dc_quant_scale; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VASegmentParameterVP9; - - - -/** - * \brief VP9 Slice Parameter Buffer Structure - * - * This structure conveys parameters related to segmentation data and should be - * sent once per frame. - * - * When segmentation is disabled, only SegParam[0] has valid values, - * all other entries should be populated with 0. - * Otherwise, all eight entries should be valid. - * - * Slice data buffer of VASliceDataBufferType is used - * to send the bitstream which should include whole or part of partition 0 - * (at least compressed header) to the end of frame. - * - */ -typedef struct _VASliceParameterBufferVP9 { - /** \brief The byte count of current frame in the bitstream buffer, - * starting from first byte of the buffer. - * It uses the name slice_data_size to be consitent with other codec, - * but actually means frame_data_size. - */ - uint32_t slice_data_size; - /** - * offset to the first byte of partition data (control partition) - */ - uint32_t slice_data_offset; - /** - * see VA_SLICE_DATA_FLAG_XXX definitions - */ - uint32_t slice_data_flag; - - /** - * \brief per segment information - */ - VASegmentParameterVP9 seg_param[8]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VASliceParameterBufferVP9; - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_VP9_H */ diff --git a/prebuilts/arm/include/va/va_drm.h b/prebuilts/arm/include/va/va_drm.h deleted file mode 100644 index a39c5a2..0000000 --- a/prebuilts/arm/include/va/va_drm.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * va_drm.h - Raw DRM API - * - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_DRM_H -#define VA_DRM_H - -#include - -/** - * \file va_drm.h - * \brief The raw DRM API - * - * This file contains the \ref api_drm "Raw DRM API". - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Returns a VA display derived from the specified DRM connection. - * - * This function returns a (possibly cached) VA display from the - * specified DRM connection @fd. - * - * @param[in] fd the DRM connection descriptor - * @return the VA display - */ -VADisplay -vaGetDisplayDRM(int fd); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DRM_H */ diff --git a/prebuilts/arm/include/va/va_drmcommon.h b/prebuilts/arm/include/va/va_drmcommon.h deleted file mode 100644 index 0bda458..0000000 --- a/prebuilts/arm/include/va/va_drmcommon.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - * va_drmcommon.h - Common utilities for DRM-based drivers - * - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_DRM_COMMON_H -#define VA_DRM_COMMON_H - -#include - - -/** \brief DRM authentication type. */ -enum { - /** \brief Disconnected. */ - VA_DRM_AUTH_NONE = 0, - /** - * \brief Connected. Authenticated with DRI1 protocol. - * - * @deprecated - * This is a deprecated authentication type. All DRI-based drivers have - * been migrated to use the DRI2 protocol. Newly written drivers shall - * use DRI2 protocol only, or a custom authentication means. e.g. opt - * for authenticating on the VA driver side, instead of libva side. - */ - VA_DRM_AUTH_DRI1 = 1, - /** - * \brief Connected. Authenticated with DRI2 protocol. - * - * This is only useful to VA/X11 drivers. The libva-x11 library provides - * a helper function VA_DRI2Authenticate() for authenticating the - * connection. However, DRI2 conformant drivers don't need to call that - * function since authentication happens on the libva side, implicitly. - */ - VA_DRM_AUTH_DRI2 = 2, - /** - * \brief Connected. Authenticated with some alternate raw protocol. - * - * This authentication mode is mainly used in non-VA/X11 drivers. - * Authentication happens through some alternative method, at the - * discretion of the VA driver implementation. - */ - VA_DRM_AUTH_CUSTOM = 3 -}; - -/** \brief Base DRM state. */ -struct drm_state { - /** \brief DRM connection descriptor. */ - int fd; - /** \brief DRM authentication type. */ - int auth_type; - /** \brief Reserved bytes for future use, must be zero */ - int va_reserved[8]; -}; - -/** \brief Kernel DRM buffer memory type. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM 0x10000000 -/** \brief DRM PRIME memory type (old version) - * - * This supports only single objects with restricted memory layout. - * Used with VASurfaceAttribExternalBuffers. - */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME 0x20000000 -/** \brief DRM PRIME memory type - * - * Used with VADRMPRIMESurfaceDescriptor. - */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 0x40000000 - -/** - * \brief External buffer descriptor for a DRM PRIME surface. - * - * For export, call vaExportSurfaceHandle() with mem_type set to - * VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 and pass a pointer to an - * instance of this structure to fill. - * If VA_EXPORT_SURFACE_SEPARATE_LAYERS is specified on export, each - * layer will contain exactly one plane. For example, an NV12 - * surface will be exported as two layers, one of DRM_FORMAT_R8 and - * one of DRM_FORMAT_GR88. - * If VA_EXPORT_SURFACE_COMPOSED_LAYERS is specified on export, - * there will be exactly one layer. - * - * For import, call vaCreateSurfaces() with the MemoryType attribute - * set to VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 and the - * ExternalBufferDescriptor attribute set to point to an array of - * num_surfaces instances of this structure. - * The number of planes which need to be provided for a given layer - * is dependent on both the format and the format modifier used for - * the objects containing it. For example, the format DRM_FORMAT_RGBA - * normally requires one plane, but with the format modifier - * I915_FORMAT_MOD_Y_TILED_CCS it requires two planes - the first - * being the main data plane and the second containing the color - * control surface. - * Note that a given driver may only support a subset of possible - * representations of a particular format. For example, it may only - * support NV12 surfaces when they are contained within a single DRM - * object, and therefore fail to create such surfaces if the two - * planes are in different DRM objects. - * Note that backend driver will retrieve the resource represent by fd, - * and a valid surface ID is generated. Backend driver will not close - * the file descriptor. Application should handle the release of the fd. - * releasing the fd will not impact the existence of the surface. - */ -typedef struct _VADRMPRIMESurfaceDescriptor { - /** Pixel format fourcc of the whole surface (VA_FOURCC_*). */ - uint32_t fourcc; - /** Width of the surface in pixels. */ - uint32_t width; - /** Height of the surface in pixels. */ - uint32_t height; - /** Number of distinct DRM objects making up the surface. */ - uint32_t num_objects; - /** Description of each object. */ - struct { - /** DRM PRIME file descriptor for this object. */ - int fd; - /** Total size of this object (may include regions which are - * not part of the surface). */ - uint32_t size; - /** Format modifier applied to this object. */ - uint64_t drm_format_modifier; - } objects[4]; - /** Number of layers making up the surface. */ - uint32_t num_layers; - /** Description of each layer in the surface. */ - struct { - /** DRM format fourcc of this layer (DRM_FOURCC_*). */ - uint32_t drm_format; - /** Number of planes in this layer. */ - uint32_t num_planes; - /** Index in the objects array of the object containing each - * plane. */ - uint32_t object_index[4]; - /** Offset within the object of each plane. */ - uint32_t offset[4]; - /** Pitch of each plane. */ - uint32_t pitch[4]; - } layers[4]; -} VADRMPRIMESurfaceDescriptor; - -/** - * \brief List of DRM format modifiers. - * - * To allocate surfaces with one of the modifiers specified in the array, call - * vaCreateSurfaces() with the VASurfaceAttribDRMFormatModifiers attribute set - * to point to an array of num_surfaces instances of this structure. The driver - * will select the optimal modifier in the list. - * - * DRM format modifiers are defined in drm_fourcc.h in the Linux kernel. - */ -typedef struct _VADRMFormatModifierList { - /** Number of modifiers. */ - uint32_t num_modifiers; - /** Array of modifiers. */ - uint64_t *modifiers; -} VADRMFormatModifierList; - - -#endif /* VA_DRM_COMMON_H */ diff --git a/prebuilts/arm/include/va/va_egl.h b/prebuilts/arm/include/va/va_egl.h deleted file mode 100644 index d6acb7d..0000000 --- a/prebuilts/arm/include/va/va_egl.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2007 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef _VA_EGL_H_ -#define _VA_EGL_H_ - -#warning The APIs / data structures included in this file are deprecated - -#endif /* _VA_EGL_H_ */ diff --git a/prebuilts/arm/include/va/va_enc_av1.h b/prebuilts/arm/include/va/va_enc_av1.h deleted file mode 100644 index 6a845b7..0000000 --- a/prebuilts/arm/include/va/va_enc_av1.h +++ /dev/null @@ -1,995 +0,0 @@ -/* - * Copyright (c) 2021 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_av1.h - * \brief AV1 encoding API - * - * This file contains the \ref api_enc_av1 "AV1 encoding API". - * - */ - -#ifndef VA_ENC_AV1_H -#define VA_ENC_AV1_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_enc_av1 AV1 encoding API - * - * This AV1 encoding API supports 8-bit/10bit 420 format only. - * - * @{ - */ - -/** \brief Attribute value for VAConfigAttribEncAV1. - * - * This attribute decribes the supported features of an AV1 - * encoder configuration. - * - * All of the field values in this attribute are VA_FEATURE_* values, - * indicating support for the corresponding feature. - * - */ -typedef union _VAConfigAttribValEncAV1 { - struct { - /** - * \brief Use 128x128 superblock. - * - * Allows setting use_128x128_superblock in the SPS. - */ - uint32_t support_128x128_superblock : 2; - /** - * \brief Intra filter. - * Allows setting enable_filter_intra in the SPS. - */ - uint32_t support_filter_intra : 2; - /** - * \brief Intra edge filter. - * Allows setting enable_intra_edge_filter in the SPS. - */ - uint32_t support_intra_edge_filter : 2; - /** - * \brief Interintra compound. - * Allows setting enable_interintra_compound in the SPS. - */ - uint32_t support_interintra_compound : 2; - /** - * \brief Masked compound. - * Allows setting enable_masked_compound in the SPS. - */ - uint32_t support_masked_compound : 2; - /** - * \brief Warped motion. - * Allows setting enable_warped_motion in the SPS. - */ - uint32_t support_warped_motion : 2; - /** - * \brief Palette mode. - * Allows setting palette_mode in the PPS. - */ - uint32_t support_palette_mode : 2; - /** - * \brief Dual filter. - * Allows setting enable_dual_filter in the SPS. - */ - uint32_t support_dual_filter : 2; - /** - * \brief Jnt compound. - * Allows setting enable_jnt_comp in the SPS. - */ - uint32_t support_jnt_comp : 2; - /** - * \brief Refrence frame mvs. - * Allows setting enable_ref_frame_mvs in the SPS. - */ - uint32_t support_ref_frame_mvs : 2; - /** - * \brief Super resolution. - * Allows setting enable_superres in the SPS. - */ - uint32_t support_superres : 2; - /** - * \brief Restoration. - * Allows setting enable_restoration in the SPS. - */ - uint32_t support_restoration : 2; - /** - * \brief Allow intraBC. - * Allows setting allow_intrabc in the PPS. - */ - uint32_t support_allow_intrabc : 2; - /** - * \brief Cdef channel strength. - * Allows setting cdef_y_strengths and cdef_uv_strengths in PPS. - */ - uint32_t support_cdef_channel_strength : 2; - /** \brief Reserved bits for future, must be zero. */ - uint32_t reserved : 4; - } bits; - uint32_t value; -} VAConfigAttribValEncAV1; - -/** \brief Attribute value for VAConfigAttribEncAV1Ext1. */ -typedef union _VAConfigAttribValEncAV1Ext1 { - struct { - /** - * \brief Fields indicate which types of interpolation filter are supported. - * (interpolation_filter & 0x01) == 1: eight_tap filter is supported, 0: not. - * (interpolation_filter & 0x02) == 1: eight_tap_smooth filter is supported, 0: not. - * (interpolation_filter & 0x04) == 1: eight_sharp filter is supported, 0: not. - * (interpolation_filter & 0x08) == 1: bilinear filter is supported, 0: not. - * (interpolation_filter & 0x10) == 1: switchable filter is supported, 0: not. - */ - uint32_t interpolation_filter : 5; - /** - * \brief Min segmentId block size accepted. - * Application need to send seg_id_block_size in PPS equal or larger than this value. - */ - uint32_t min_segid_block_size_accepted : 8; - /** - * \brief Type of segment feature supported. - * (segment_feature_support & 0x01) == 1: SEG_LVL_ALT_Q is supported, 0: not. - * (segment_feature_support & 0x02) == 1: SEG_LVL_ALT_LF_Y_V is supported, 0: not. - * (segment_feature_support & 0x04) == 1: SEG_LVL_ALT_LF_Y_H is supported, 0: not. - * (segment_feature_support & 0x08) == 1: SEG_LVL_ALT_LF_U is supported, 0: not. - * (segment_feature_support & 0x10) == 1: SEG_LVL_ALT_LF_V is supported, 0: not. - * (segment_feature_support & 0x20) == 1: SEG_LVL_REF_FRAME is supported, 0: not. - * (segment_feature_support & 0x40) == 1: SEG_LVL_SKIP is supported, 0: not. - * (segment_feature_support & 0x80) == 1: SEG_LVL_GLOBALMV is supported, 0: not. - */ - uint32_t segment_feature_support : 8; - /** \brief Reserved bits for future, must be zero. */ - uint32_t reserved : 11; - } bits; - uint32_t value; -} VAConfigAttribValEncAV1Ext1; - -/** \brief Attribute value for VAConfigAttribEncAV1Ext2. */ -typedef union _VAConfigAttribValEncAV1Ext2 { - struct { - /** - * \brief Tile size bytes minus1. - * Specify the number of bytes needed to code tile size supported. - * This value need to be set in frame header obu. - */ - uint32_t tile_size_bytes_minus1 : 2; - /** - * \brief Tile size bytes minus1. - * Specify the fixed number of bytes needed to code syntax obu_size. - */ - uint32_t obu_size_bytes_minus1 : 2; - /** - * \brief tx_mode supported. - * (tx_mode_support & 0x01) == 1: ONLY_4X4 is supported, 0: not. - * (tx_mode_support & 0x02) == 1: TX_MODE_LARGEST is supported, 0: not. - * (tx_mode_support & 0x04) == 1: TX_MODE_SELECT is supported, 0: not. - */ - uint32_t tx_mode_support : 3; - /** - * \brief Max tile num minus1. - * Specify the max number of tile supported by driver. - */ - uint32_t max_tile_num_minus1 : 13; - /** \brief Reserved bits for future, must be zero. */ - uint32_t reserved : 12; - } bits; - uint32_t value; -} VAConfigAttribValEncAV1Ext2; - -/** - * \brief Packed header types specific to AV1 encoding. - * - * Types of packed headers generally used for AV1 encoding. - * - */ -typedef enum { - /** - * \brief Packed Sequence Parameter Set (SPS). - * - * The corresponding packed header data buffer shall contain the - * complete sequence_header_obu() syntax element. - * - */ - VAEncPackedHeaderAV1_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - * The corresponding packed header data buffer shall contain the - * complete frame_header_obu() syntax element. - * - */ - VAEncPackedHeaderAV1_PPS = VAEncPackedHeaderPicture, -} VAEncPackedHeaderTypeAV1; - -/** - * \brief AV1 Encoding Sequence Parameter Buffer Structure. - * - * This structure conveys sequence level parameters. - * - */ -typedef struct _VAEncSequenceParameterBufferAV1 { - /** \brief AV1 profile setting. - * value range [0..2]. - */ - uint8_t seq_profile; - - /** \brief Level Setting of current operation point. - * value range [0..23]. - */ - uint8_t seq_level_idx; - - /** \brief Tier Setting of current operation point. - * value range [0..1]. - */ - uint8_t seq_tier; - - uint8_t reserved8b; - - /** \brief Period between intra_only frames. */ - uint32_t intra_period; - - /** \brief Period between I/P frames. - * For hierarchical structure, this is the anchor frame distance. - */ - uint32_t ip_period; - - /* \brief RC related fields. RC modes are set with VAConfigAttribRateControl. */ - /* For AV1, CBR implies HRD conformance and VBR implies no HRD conformance. */ - - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for CBR mode or - * initial max bitrate value for VBR mode in this sequence. - * i.e. if the encoder pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - - union { - struct { - /** \brief Still picture encoding, no inter frame referencing. */ - uint32_t still_picture : 1; - /** \brief Force using 128x128 or 64x64 Supper block */ - uint32_t use_128x128_superblock : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_filter_intra : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_intra_edge_filter : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_interintra_compound : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_masked_compound : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_warped_motion : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_dual_filter : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_order_hint : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_jnt_comp : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_ref_frame_mvs : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_superres : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_cdef : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_restoration : 1; - /** \brief Sepcify number of bits for every channel(Y, U or V). */ - uint32_t bit_depth_minus8 : 3; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t subsampling_x : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t subsampling_y : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t reserved_bits : 13; - } bits; - uint32_t value; - } seq_fields; - - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..7]. - */ - uint8_t order_hint_bits_minus_1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAEncSequenceParameterBufferAV1; - -#define VA_AV1_MAX_SEGMENTS 8 -#define VA_AV1_SEG_LVL_MAX 8 - -/** - * \brief Segment parameters - */ -typedef struct _VAEncSegParamAV1 { - union { - struct { - /** \brief Indicates if segmentation is enabled in the current frame. - * If disabled, all the below parameters in the structure should - * be set to 0, and ignored by driver. - */ - uint8_t segmentation_enabled : 1; - - /** - * When segmentation_enabled equals 1 and segment_number > 0, - * this parameter equals 1 indicates the segmentation map may - * come from application, and that "Segment map data buffer" - * should be provided with populated segment_id. If equals 0, - * segmentation map should be inherited from a reference frame - * (specified by \c primary_ref_frame). When segmentation_enabled or - * segment_number equals 0, this parameter should be set to 0 - * and ignored by driver. - */ - uint8_t segmentation_update_map : 1; - /** - * When segmentation_update_map equals 1, this parameter equaling 1 - * indicates segment id per block will be determined either from - * reference frame or from app. Equaling 0 means segment id per block - * will come from app. When segmentation_temporal_update equals 0, - * this parameter should be set to 0 and ignored by driver. - */ - uint8_t segmentation_temporal_update : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint8_t reserved : 5; - - } bits; - uint8_t value; - } seg_flags; - - /** - * If segmentation_enabled equals 1, this parameter indicates - * the number of segments conveyed through VAAPI. In this case, - * if segment_number equals 0, it will force the driver to determine - * how many segments would be created as well as the segmentation map - * to be generated. Also the driver shall write the segmentation_params() - * syntax in the uncompressed header at \c bit_offset_segmentation (back-annotation). - * In application, the rest parameters in this structure should be all - * set to 0 and ignored by driver. And app should NOT send the - * "Segment map data buffer". In packed uncompressed header - * bitstream, app should write syntax element segmentation_enabled - * as 0 and segmentation_params() should be only 1-bit-long. - * If segment_number > 0, and segmentation_update_map = 1, app should provide - * the "Segment map data buffer" and populate the rest of the - * current data structure. And that underline encoder would honor - * the segmentation parameters feature_data[0..segment_number-1][] - * and feature_mask[0..segment_number-1], etc. - * Value range [0..8]. - */ - uint8_t segment_number; - - /** \brief segment parameters. - * feature_data[][] is equivalent to variable FeatureData[][] in spec, - * which is after clip3() operation. - * Clip3(x, y, z) = (z y)? y : z); - * The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = { - * 255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, - * MAX_LOOP_FILTER, 7, 0, 0 } - */ - int16_t feature_data[VA_AV1_MAX_SEGMENTS][VA_AV1_SEG_LVL_MAX]; - - /** \brief Bit field to indicate each feature is enabled or not per - * segment_id. Each bit is the feature_id. - */ - uint8_t feature_mask[VA_AV1_MAX_SEGMENTS]; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSegParamAV1; - -/** - * \brief Segment map data buffer. - * - * This buffer is optional depending on the value of av1_segments.segmentation_enabled. - * If av1_segments.segmentation_enabled in the picture parameters equals 1, - * and RateControlMethod is not CQP and this surface is not provided by App, - * the encoder will determine the per block segmentation map. In this case, - * App should not provide the segmentation parameter data structure - * in frame header as well. If av1_segments.segmentation_enabled equals 1 - * and the segmentation map buffer is provided, app should embed the - * segmentation info in frame header, populate the VAEncSegParamAV1 structure with - * #VAEncMacroblockMapBufferType and the driver as well as the underline encoder - * should honor what is given by the app. - */ -typedef struct _VAEncSegMapBufferAV1 { - /** \brief Segment map data size. */ - uint32_t segmentMapDataSize; - - /** - * \brief Segment map. - * Size of this map is indicated by \ref segmentMapDataSize and each element - * in this map contains the segment id of a particular block. - * The element is indexed by raster scan order. - * The value of each entry should be in the range [0..7], inclusive. - */ - uint8_t *pSegmentMap; -} VAEncSegMapBufferAV1; - -typedef enum { - /** \brief Identity transformation, 0-parameter. */ - VAAV1EncTransformationIdentity = 0, - /** \brief Translational motion, 2-parameter. */ - VAAV1EncTransformationTranslation = 1, - /** \brief Simplified affine with rotation + zoom only, 4-parameter. */ - VAAV1EncTransformationRotzoom = 2, - /** \brief Affine, 6-parameter. */ - VAAV1EncTransformationAffine = 3, - /** \brief Transformation count. */ - VAAV1EncTransformationCount -} VAEncTransformationTypeAV1; - -typedef struct _VAEncWarpedMotionParamsAV1{ - - /** \brief Specify the type of warped motion. */ - VAEncTransformationTypeAV1 wmtype; - - /** \brief Specify warp motion parameters. - * wm.wmmat[] corresponds to gm_params[][] in spec. - * Details in AV1 spec section 5.9.24 or refer to libaom code - * https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c. - */ - int32_t wmmat[8]; - - /** \brief Valid or invalid on affine set. */ - uint8_t invalid; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VAEncWarpedMotionParamsAV1; - -/** - * \brief Reference frame control. - * - * Suggest which frame to be used as reference along with preferred search order. - * - * search_idx#: index into ref_frame_idx[] to indicate that frame will be included - * in the reference list if value in range [1..7]. Invalid when value is 0. - * The order of the search_idx# indicates the preferred search order. - * - */ -typedef union { - struct - { - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx0 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx1 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx2 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx3 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx4 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx5 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx6 : 3; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t Reserved : 11; - } fields; - uint32_t value; -} VARefFrameCtrlAV1; - -/** - * \brief AV1 Encoding Picture Parameter Buffer Structure. - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferAV1 -{ - /** \brief AV1 encoder may support SupRes and dynamic scaling function. - * For SupRes, underline encoder is responsible to do downscaling. - * For dynamic scaling, app should provide the scaled raw source. - */ - /** \brief Raw source frame width in pixels. */ - uint16_t frame_width_minus_1; - /** \brief Raw source frame height in pixels. */ - uint16_t frame_height_minus_1; - - /** \brief Surface to store reconstructed frame, not used for enc only case. */ - VASurfaceID reconstructed_frame; - - /** \brief Buffer to store coded data. */ - VABufferID coded_buf; - - /** \brief Reference frame buffers. - * Each entry of the array specifies the surface index of the picture - * that is referred by current picture or will be referred by any future - * picture. The valid entries take value from 0 to 127, inclusive. - * Non-valid entries, those do not point to pictures which are referred - * by current picture or future pictures, should take value 0xFF. - * Other values are not allowed. - * - * Application should update this array based on the refreshing - * information expected. - */ - VASurfaceID reference_frames[8]; - - /** \brief Reference index list. - * Contains a list of indices into refernce_frames[]. - * Indice with refernce frames range: [LAST_FRAME - LAST_FRAME, - * LAST2_FRAME - LAST_FRAME, ..., ALTREF2_FRAME - LAST_FRAME]. - * #define LAST_FRAME 1 - * #define LAST2_FRAME 2 - * #define LAST3_FRAME 3 - * #define GOLDEN_FRAME 4 - * #define BWDREF_FRAME 5 - * #define ALTREF_FRAME 6 - * #define ALTREF2_FRAME 7 - * value range [0..7]. - */ - uint8_t ref_frame_idx[7]; - - uint8_t reserved8bits0; - - /** \brief primary reference frame. - * Index into reference_frames[] - * segment id map, context table, etc. come from the reference - * frame pointed by this index. - * value range [0..7]. - */ - uint8_t primary_ref_frame; - - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint8_t order_hint; - - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint8_t refresh_frame_flags; - - uint8_t reserved8bits1; - - /** \brief Suggest which frames to be used as references. - * see struct #VARefFrameCtrl for details. - */ - VARefFrameCtrlAV1 ref_frame_ctrl_l0; - VARefFrameCtrlAV1 ref_frame_ctrl_l1; - - union { - struct { - /** \brief frame type. - * 0: key_frame. - * 1: inter_frame. - * 2: intra_only frame. - * 3: switch_frame (app needs to set error_resilient_mode = 1, - * refresh_frame_flags, etc approperately.). - */ - uint32_t frame_type : 2; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t error_resilient_mode : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t disable_cdf_update : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t use_superres : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t allow_high_precision_mv : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t use_ref_frame_mvs : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t disable_frame_end_update_cdf : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t reduced_tx_set : 1; - - /** \brief For single tile group, app may choose to use one frame obu - * to replace one frame header obu + one tile group obu. - * Invalid if num_tile_groups_minus1 > 0. - */ - uint32_t enable_frame_obu : 1; - - /** \brief Indicate the current frame will be used as a long term reference. */ - uint32_t long_term_reference : 1; - /** \brief If the encoded frame will not be referred by other frames, - * its recon may not be generated in order to save memory bandwidth. - */ - uint32_t disable_frame_recon : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t allow_intrabc : 1; - /** \brief Equal to 1 indicates that intra blocks may use palette encoding. - * Otherwise disable palette encoding. - */ - uint32_t palette_mode_enable : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t reserved : 18; - } bits; - uint32_t value; - } picture_flags; - - /** \brief Block size for each Segment ID in Segment Map. - * 0: 16x16 block size, default value; - * 1: 32x32 block size; - * 2: 64x64 block size; - * 3: 8x8 block size. - */ - uint8_t seg_id_block_size; - - /** \brief Number of tile groups minus 1. - * value range [0..255]. - */ - uint8_t num_tile_groups_minus1; - - /** \brief Temporal id of the frame.*/ - uint8_t temporal_id; - - /** \brief Deblock filter parameters. - * value range [0..63]. - */ - uint8_t filter_level[2]; - uint8_t filter_level_u; - uint8_t filter_level_v; - - union { - struct { - /** \brief Sharpness level for deblock filter. - * value range [0..7]. - */ - uint8_t sharpness_level : 3; - uint8_t mode_ref_delta_enabled : 1; - uint8_t mode_ref_delta_update : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint8_t reserved : 3; - } bits; - uint8_t value; - } loop_filter_flags; - - /** \brief Super resolution scale denominator. - * value range [9..16]. - */ - uint8_t superres_scale_denominator; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint8_t interpolation_filter; - - /** \brief Loop filter ref deltas. - * value range [-63..63]. - */ - int8_t ref_deltas[8]; - - /** \brief Loop filter mode deltas. - * value range [-63..63]. - */ - int8_t mode_deltas[2]; - - /** \brief Quantization params. */ - uint8_t base_qindex; - int8_t y_dc_delta_q; - int8_t u_dc_delta_q; - int8_t u_ac_delta_q; - int8_t v_dc_delta_q; - int8_t v_ac_delta_q; - - /** \brief Min value for base q index for BRC. - * value range [1..255]. - */ - uint8_t min_base_qindex; - - /** \brief Max value for base q index for BRC. - * value range [1..255]. - */ - uint8_t max_base_qindex; - - /** \brief Quantization matrix. */ - union { - struct { - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint16_t using_qmatrix : 1; - /** \brief Following parameters only valid when using_qmatrix == 1. */ - uint16_t qm_y : 4; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint16_t qm_u : 4; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint16_t qm_v : 4; - /** \brief Reserved bytes for future use, must be zero. */ - uint16_t reserved : 3; - } bits; - uint16_t value; - } qmatrix_flags; - - uint16_t reserved16bits1; - - union { - struct { - /** \brief Specify whether quantizer index delta values are present. - * value range [0..1]. */ - uint32_t delta_q_present : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. */ - uint32_t delta_q_res : 2; - - /** \brief Specify whether loop filter delta values are present. - * value range [0..1]. */ - uint32_t delta_lf_present : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. */ - uint32_t delta_lf_res : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. */ - uint32_t delta_lf_multi : 1; - - /** \brief Corresponds to AV1 syntax element of the same name. - * 0: ONLY_4X4; - * 1: TX_MODE_LARGEST; - * 2: TX_MODE_SELECT; - * 3: Invalid. - */ - uint32_t tx_mode : 2; - - /** \brief Indicates whether to use single or compound reference prediction. - * 0: SINGLE_REFERENCE; - * 1: COMPOUND_REFERENCE; - * 2: REFERENCE_MODE_SELECT. - * 3: Invalid. - * - * Value 2 means driver make decision to use single reference or compound reference. - */ - uint32_t reference_mode : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint32_t skip_mode_present : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t reserved : 20; - } bits; - uint32_t value; - } mode_control_flags; - - /** \brief Segmentation parameters. */ - VAEncSegParamAV1 segments; - - /** \brief Number of tile columns. */ - uint8_t tile_cols; - /** \brief Number of tile rows. */ - uint8_t tile_rows; - - uint16_t reserved16bits2; - - /** \brief The last tile column or row size needs to be derived. */ - uint16_t width_in_sbs_minus_1[63]; - uint16_t height_in_sbs_minus_1[63]; - - /** \brief specify which tile to use for the CDF update. - * value range [0..127]*/ - uint16_t context_update_tile_id; - - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. - */ - uint8_t cdef_damping_minus_3; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. - */ - uint8_t cdef_bits; - /** \brief CDEF Y strengths. - * value range [0..63]*/ - uint8_t cdef_y_strengths[8]; - /** \brief CDEF UV strengths. - * value range [0..63]*/ - uint8_t cdef_uv_strengths[8]; - - union { - struct { - /** \brief Restoration type for Y frame. - * value range [0..3]. - */ - uint16_t yframe_restoration_type : 2; - /** \brief Restoration type for Cb frame. - * value range [0..3]. - */ - uint16_t cbframe_restoration_type : 2; - /** \brief Restoration type for Cr frame. - * value range [0..3]. - */ - uint16_t crframe_restoration_type : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..2]. - */ - uint16_t lr_unit_shift : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint16_t lr_uv_shift : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint16_t reserved : 7; - } bits; - uint16_t value; - } loop_restoration_flags; - - /** \brief Global motion. */ - VAEncWarpedMotionParamsAV1 wm[7]; - - /** - * Offset in bits for syntax base_q_idx in packed frame header bit stream - * from the start of the packed header data. - * In BRC mode, this parameter should be set and driver will update base_q_idx in - * uncompressed header according to this offset. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_qindex; - /** - * Offset in bits for syntax segmentation_enabled of frame header OBU - * in packed frame header bit stream from the start of the packed header data. - * Valid only in auto segmentation mode. Other than that, this parameter - * should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_segmentation; - /** - * Offset in bits for syntax loop_filter_params() in packed frame - * header bit stream from the start of the packed header data. - * In BRC mode, this parameter should be set and driver will update filter params - * in packed frame header according to this offset. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_loopfilter_params; - /** - * In BRC mode, underline encoder should generate the approperiate - * CDEF values and write back into uncompressed header. And app - * should provide default CDEF values in packed header. This parameter - * should point to the starting bit of cdef_params() syntax structure - * in packed header. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_cdef_params; - /** - * In BRC mode, this parameter indicates the actual bit usage of - * cdef_params() syntax structure in packed uncompressed header. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t size_in_bits_cdef_params; - - /** - * Offset in bytes for syntax obu_size of frame header OBU in packed - * frame header bit stream from the start of the packed header. The frame - * header OBU size depends on the encoded tile sizes. It applies to both - * Frame Header OBU and Frame OBU if obu_size needs to be updated by - * underline encoder. Otherwise, app can set it to 0 and ignored by driver. - * - * In BRC mode, obu_size needs to be updated and this parameter should be set. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t byte_offset_frame_hdr_obu_size; - - /** - * Frame header OBU bit stream size in bits. The frame header obu packed bit - * stream contains an obu header, a 4-byte long obu_size field, frame_header_obu() - * syntax chain, and a trailing bit if not inside a frame obu. If \c enable_frame_obu == 1, - * the value should include and up to the last bit of frame_header_obu() and - * excluding the bits generated by byte_alignment(). If \c enable_frame_obu == 0, - * the value should include and up to the trailing bit at the end of the frame - * header obu. The size will be used by encoder to calculate the final frame - * header size after bit shifting due to auto segmentation. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t size_in_bits_frame_hdr_obu; - - /** \brief Tile Group OBU header */ - union { - struct { - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint8_t obu_extension_flag : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint8_t obu_has_size_field : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..7]. - */ - uint8_t temporal_id : 3; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..2]. - */ - uint8_t spatial_id : 2; - /** \brief Reserved bytes for future use, must be zero. */ - uint8_t reserved : 1; - } bits; - uint8_t value; - } tile_group_obu_hdr_info; - - /** \brief The number of frames skipped prior to the current frame. - * It includes only the skipped frames that were not counted before. - * App may generate the "show_existing_frame" short frame header OBUs - * and send to driver with the next frame. Default value 0. - */ - uint8_t number_skip_frames; - - uint16_t reserved16bits3; - - /** \brief Indicates the application forced frame size change in bytes. - * When the value is positive, the frame size is reduced. Otherwise, the frame - * size increases. The parameter can be used when application skips frames with - * setting of NumSkipFrames. And application can also use it for other scenarios - * such as inserting "show_existing_frame" at very end of the sequence. - */ - int32_t skip_frames_reduced_size; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAEncPictureParameterBufferAV1; - -/** - * \brief Tile Group Buffer. - */ -typedef struct _VAEncTileGroupBufferAV1 { - /** \brief Tile group start location. - * The position of the first tile in current tile group - * in raster scan order across the frame. - * value range [0..127]. - */ - uint8_t tg_start; - /** \brief Tile group end location. - * The position of the last tile in current tile group - * in raster scan order across the frame. - * value range [0..127]. - */ - uint8_t tg_end; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncTileGroupBufferAV1; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_AV1_H */ diff --git a/prebuilts/arm/include/va/va_enc_h264.h b/prebuilts/arm/include/va/va_enc_h264.h deleted file mode 100644 index 46a6704..0000000 --- a/prebuilts/arm/include/va/va_enc_h264.h +++ /dev/null @@ -1,659 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_h264.h - * \brief The H.264 encoding API - * - * This file contains the \ref api_enc_h264 "H.264 encoding API". - */ - -#ifndef VA_ENC_H264_H -#define VA_ENC_H264_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_h264 H.264 encoding API - * - * @{ - */ - -/** - * @name Picture flags - * - * Those flags flags are meant to signal when a picture marks the end - * of a sequence, a stream, or even both at once. - * - * @{ - */ -/** - * \brief Marks the last picture in the sequence. - * - * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame. - */ -#define H264_LAST_PICTURE_EOSEQ 0x01 -/** - * \brief Marks the last picture in the stream. - * - * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame. - */ -#define H264_LAST_PICTURE_EOSTREAM 0x02 -/**@}*/ - -/** - * \brief Packed header types specific to H.264 encoding. - * - * Types of packed headers generally used for H.264 encoding. Each - * associated packed header data buffer shall contain the start code - * prefix 0x000001 followed by the complete NAL unit, thus also - * including the \c nal_unit_type. - * - * Note: the start code prefix can contain an arbitrary number of leading - * zeros. The driver will skip them for emulation prevention bytes insertion, - * if necessary. - */ -typedef enum { - /** - * \brief Packed Sequence Parameter Set (SPS). - * - * The corresponding packed header data buffer shall contain the - * complete seq_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 7. - */ - VAEncPackedHeaderH264_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - * The corresponding packed header data buffer shall contain the - * complete pic_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 8. - */ - VAEncPackedHeaderH264_PPS = VAEncPackedHeaderPicture, - /** - * \brief Packed slice header. - * - * The corresponding packed header data buffer shall contain the - * \c slice_header() syntax element only, along with any start - * code prefix and NAL unit type preceeding it. i.e. this means - * that the buffer does not contain any of the \c slice_data() or - * the \c rbsp_slice_trailing_bits(). - * - * Note: packed \c nal_unit_type shall be equal to 1 (non-IDR - * picture), or 5 (IDR picture). - */ - VAEncPackedHeaderH264_Slice = VAEncPackedHeaderSlice, - /** - * \brief Packed Supplemental Enhancement Information (SEI). - * - * The corresponding packed header data buffer shall contain the - * complete sei_rbsp() syntax element, thus including several - * sei_message() elements if necessary. - * - * Note: packed \c nal_unit_type shall be equal to 6. - * - * @deprecated - * This is a deprecated packed header flag, All applications can use - * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed - * SEI header data buffer to the driver - */ - VAEncPackedHeaderH264_SEI va_deprecated_enum = (0x80000000 | 1), -} VAEncPackedHeaderTypeH264; - -/** - * \brief Sequence parameter for H.264 encoding in baseline, main & high - * profiles. - * - * This structure holds information for \c seq_parameter_set_data() as - * defined by the H.264 specification. - * - * If packed sequence headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c seq_scaling_matrix_present_flag is set to \c 1, then a - * #VAIQMatrixBufferH264 buffer shall also be provided within the same - * \c vaRenderPicture() call as this sequence parameter buffer. - */ -typedef struct _VAEncSequenceParameterBufferH264 { - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t seq_parameter_set_id; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t level_idc; - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between IDR frames. */ - uint32_t intra_idr_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t max_num_ref_frames; - /** \brief Picture width in macroblocks. */ - uint16_t picture_width_in_mbs; - /** \brief Picture height in macroblocks. */ - uint16_t picture_height_in_mbs; - - union { - struct { - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t chroma_format_idc : 2; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_mbs_only_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t mb_adaptive_frame_field_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t seq_scaling_matrix_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t direct_8x8_inference_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t log2_max_frame_num_minus4 : 4; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t pic_order_cnt_type : 2; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t log2_max_pic_order_cnt_lsb_minus4 : 4; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t delta_pic_order_always_zero_flag : 1; - } bits; - uint32_t value; - } seq_fields; - - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t bit_depth_luma_minus8; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t bit_depth_chroma_minus8; - - /** if pic_order_cnt_type == 1 */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t num_ref_frames_in_pic_order_cnt_cycle; - /** \brief Same as the H.264 bitstream syntax element. */ - int32_t offset_for_non_ref_pic; - /** \brief Same as the H.264 bitstream syntax element. */ - int32_t offset_for_top_to_bottom_field; - /** \brief Same as the H.264 bitstream syntax element. */ - int32_t offset_for_ref_frame[256]; - /**@}*/ - - /** @name Cropping (optional) */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t frame_cropping_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_left_offset; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_right_offset; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_top_offset; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_bottom_offset; - /**@}*/ - - /** @name VUI parameters (optional) */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t vui_parameters_present_flag; - union { - struct { - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t aspect_ratio_info_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t timing_info_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t bitstream_restriction_flag : 1; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_horizontal : 5; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_vertical : 5; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t fixed_frame_rate_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t low_delay_hrd_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t motion_vectors_over_pic_boundaries_flag: 1; - /** \brief Reserved for future use, must be zero */ - uint32_t reserved : 16; - } bits; - uint32_t value; - } vui_fields; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t aspect_ratio_idc; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t sar_width; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t sar_height; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t num_units_in_tick; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t time_scale; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - /**@}*/ -} VAEncSequenceParameterBufferH264; - -/** - * \brief Picture parameter for H.264 encoding in baseline, main & high - * profiles. - * - * This structure holds information for \c pic_parameter_set_rbsp() as - * defined by the H.264 specification. - * - * If packed picture headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c pic_scaling_matrix_present_flag is set to \c 1, then a - * #VAIQMatrixBufferH264 buffer shall also be provided within the same - * \c vaRenderPicture() call as this picture parameter buffer. - */ -typedef struct _VAEncPictureParameterBufferH264 { - /** - * \brief Information about the picture to be encoded. - * - * See #VAPictureH264 for further description of each field. - * Note that CurrPic.picture_id represents the reconstructed - * (decoded) picture. User provides a scratch VA surface ID here. - */ - VAPictureH264 CurrPic; - /** - * \brief Decoded Picture Buffer (DPB). - * - * This array represents the list of reconstructed (decoded) - * frames used as reference. It is important to keep track of - * reconstructed frames so that they can be used later on as - * reference for P or B-frames encoding. - */ - VAPictureH264 ReferenceFrames[16]; - /** - * \brief Output encoded bitstream. - * - * \ref coded_buf has type #VAEncCodedBufferType. It should be - * large enough to hold the compressed NAL slice and possibly SPS - * and PPS NAL units. - */ - VABufferID coded_buf; - - /** \brief The picture parameter set referred to in the slice header. */ - uint8_t pic_parameter_set_id; - /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */ - uint8_t seq_parameter_set_id; - - /** - * \brief OR'd flags describing whether the picture is the last one or not. - * - * This fields holds 0 if the picture to be encoded is not the last - * one in the stream or sequence. Otherwise, it is a combination of - * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM. - */ - uint8_t last_picture; - - /** \brief The picture identifier. - * Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive. - */ - uint16_t frame_num; - - /** \brief \c pic_init_qp_minus26 + 26. */ - uint8_t pic_init_qp; - /** \brief Maximum reference index for reference picture list 0. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** \brief Maximum reference index for reference picture list 1. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l1_active_minus1; - - /** \brief Range: -12 to 12, inclusive. */ - int8_t chroma_qp_index_offset; - /** \brief Range: -12 to 12, inclusive. */ - int8_t second_chroma_qp_index_offset; - - union { - struct { - /** \brief Is picture an IDR picture? */ - uint32_t idr_pic_flag : 1; - /** \brief Is picture a reference picture? */ - uint32_t reference_pic_flag : 2; - /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */ - uint32_t entropy_coding_mode_flag : 1; - /** \brief Is weighted prediction applied to P slices? */ - uint32_t weighted_pred_flag : 1; - /** \brief Range: 0 to 2, inclusive. */ - uint32_t weighted_bipred_idc : 2; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t constrained_intra_pred_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t transform_8x8_mode_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t deblocking_filter_control_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t redundant_pic_cnt_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t pic_order_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t pic_scaling_matrix_present_flag : 1; - } bits; - uint32_t value; - } pic_fields; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferH264; - -typedef struct _VAEncQPBufferH264 { - /* - * \brief This structure holds QP per 16x16 macroblock. Buffer size shall be - * sufficient to fit the slice or frame to be encoded depending on if it is a - * slice level or frame level encoding. - */ - uint8_t qp; -} VAEncQPBufferH264; - -/** - * \brief Slice parameter for H.264 encoding in baseline, main & high profiles. - * - * This structure holds information for \c - * slice_layer_without_partitioning_rbsp() as defined by the H.264 - * specification. - * - * If packed slice headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSlice ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If per-macroblock encoder configuration is needed, \c macroblock_info - * references a buffer of type #VAEncMacroblockParameterBufferH264. This - * buffer is not passed to vaRenderPicture() and it can be re-used - * without re-allocating the whole buffer. - */ -typedef struct _VAEncSliceParameterBufferH264 { - /** \brief Starting MB address for this slice. */ - uint32_t macroblock_address; - /** \brief Number of macroblocks in this slice. */ - uint32_t num_macroblocks; - /** - * \brief Per-MB encoder configuration buffer, or \c VA_INVALID_ID. - * - * If per-MB encoder configuration is needed, then \ref macroblock_info - * references a buffer of type #VAEncMacroblockParameterBufferH264 - * (\c VAEncMacroblockParameterBufferType). Otherwise, buffer id - * is set to \c VA_INVALID_ID and per-MB configuration is derived - * from this slice parameter. - * - * The \c macroblock_info buffer must hold \ref num_macroblocks - * elements. - */ - VABufferID macroblock_info; - /** \brief Slice type. - * Range: 0..2, 5..7, i.e. no switching slices. - */ - uint8_t slice_type; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t pic_parameter_set_id; - /** \brief Same as the H.264 bitstream syntax element. */ - uint16_t idr_pic_id; - - /** @name If pic_order_cnt_type == 0 */ - /**@{*/ - /** \brief The picture order count modulo MaxPicOrderCntLsb. */ - uint16_t pic_order_cnt_lsb; - /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */ - int32_t delta_pic_order_cnt_bottom; - /**@}*/ - /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */ - /**@{*/ - /** \brief [0]: top, [1]: bottom. */ - int32_t delta_pic_order_cnt[2]; - /**@}*/ - - /** @name If slice_type == B */ - /**@{*/ - uint8_t direct_spatial_mv_pred_flag; - /**@}*/ - - /** @name If slice_type == P */ - /**@{*/ - /** \brief Specifies if - * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or - * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are - * overriden by the values for this slice. - */ - uint8_t num_ref_idx_active_override_flag; - /** \brief Maximum reference index for reference picture list 0. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** \brief Maximum reference index for reference picture list 1. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l1_active_minus1; - /** \brief Reference picture list 0 (for P slices). */ - VAPictureH264 RefPicList0[32]; - /** \brief Reference picture list 1 (for B slices). */ - VAPictureH264 RefPicList1[32]; - /**@}*/ - - /** @name pred_weight_table() */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t luma_log2_weight_denom; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t chroma_log2_weight_denom; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t luma_weight_l0_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_weight_l0[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_offset_l0[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t chroma_weight_l0_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_weight_l0[32][2]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_offset_l0[32][2]; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t luma_weight_l1_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_weight_l1[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_offset_l1[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t chroma_weight_l1_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_weight_l1[32][2]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_offset_l1[32][2]; - /**@}*/ - - /** \brief Range: 0 to 2, inclusive. */ - uint8_t cabac_init_idc; - /** \brief Same as the H.264 bitstream syntax element. */ - int8_t slice_qp_delta; - /** @name If deblocking_filter_control_present_flag */ - /**@{*/ - /** \brief Range: 0 to 2, inclusive. */ - uint8_t disable_deblocking_filter_idc; - /** \brief Same as the H.264 bitstream syntax element. */ - int8_t slice_alpha_c0_offset_div2; - /** \brief Same as the H.264 bitstream syntax element. */ - int8_t slice_beta_offset_div2; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - /**@}*/ -} VAEncSliceParameterBufferH264; - -/** - * @name Macroblock neighbour availability bits - * - * \anchor api_enc_h264_mb_pred_avail_bits - * Definitions for macroblock neighbour availability bits used in - * intra prediction mode (non MBAFF only). - * - * @{ - */ -/** \brief References macroblock in the top-left corner. */ -#define VA_MB_PRED_AVAIL_TOP_LEFT (1 << 2) -/** \brief References macroblock above the current macroblock. */ -#define VA_MB_PRED_AVAIL_TOP (1 << 4) -/** \brief References macroblock in the top-right corner. */ -#define VA_MB_PRED_AVAIL_TOP_RIGHT (1 << 3) -/** \brief References macroblock on the left of the current macroblock. */ -#define VA_MB_PRED_AVAIL_LEFT (1 << 6) -/**@}*/ - -/** - * \brief Macroblock parameter for H.264 encoding in baseline, main & high - * profiles. - * - * This structure holds per-macroblock information. The buffer must be - * allocated with as many elements (macroblocks) as necessary to fit - * the slice to be encoded. Besides, the per-macroblock records must - * be written in a strict raster order and with no gap. i.e. every - * macroblock, regardless of its type, shall have an entry. - */ -typedef struct _VAEncMacroblockParameterBufferH264 { - /** - * \brief Quantization parameter. - * - * Requested quantization parameter. Range: 0 to 51, inclusive. - * If \ref qp is set to 0xff, then the actual value is derived - * from the slice-level value: \c pic_init_qp + \c slice_qp_delta. - */ - uint8_t qp; - - union { - /** @name Data for intra macroblock */ - /**@{*/ - union { - struct { - /** - * \brief Flag specified to override MB neighbour - * availability bits from VME stage. - * - * This flag specifies that macroblock neighbour - * availability bits from the VME stage are overriden - * by the \ref pred_avail_flags hereunder. - */ - uint32_t pred_avail_override_flag : 1; - /** - * \brief Bitwise representation of which macroblocks - * are available for intra prediction. - * - * If the slice is intra-coded, this field represents - * the macroblocks available for intra prediction. - * See \ref api_enc_h264_mb_pred_avail_bits - * "macroblock neighbour availability" bit definitions. - */ - uint32_t pred_avail_flags : 8; - } bits; - uint32_t value; - } intra_fields; - /**@}*/ - - /** @name Data for inter macroblock */ - /**@{*/ - union { - struct { - uint32_t reserved; - } bits; - uint32_t value; - } inter_fields; - /**@}*/ - } info; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMacroblockParameterBufferH264; - -/** - * \brief MB partition modes and 1/2 1/4 motion search configuration - * - * Specifies MB partition modes that are disabled. Specifies Half-pel - * mode and Quarter-pel mode searching - */ -typedef struct _VAEncMiscParameterSubMbPartPelH264 { - uint32_t disable_inter_sub_mb_partition; - union { - struct { - uint32_t disable_16x16_inter_mb_partition : 1; - uint32_t disable_16x8_inter_mb_partition : 1; - uint32_t disable_8x16_inter_mb_partition : 1; - uint32_t disable_8x8_inter_mb_partition : 1; - uint32_t disable_8x4_inter_mb_partition : 1; - uint32_t disable_4x8_inter_mb_partition : 1; - uint32_t disable_4x4_inter_mb_partition : 1; - uint32_t reserved : 1; - } bits; - uint8_t value; - } inter_sub_mb_partition_mask; - - /** - * \brief Precison of motion search - * 0:Integer mode searching - * 1:Half-pel mode searching - * 2:Reserved - * 3:Quarter-pel mode searching - */ - uint32_t enable_sub_pel_mode; - uint8_t sub_pel_mode; - uint8_t reserved[3]; -} VAEncMiscParameterSubMbPartPelH264; -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_H264_H */ diff --git a/prebuilts/arm/include/va/va_enc_hevc.h b/prebuilts/arm/include/va/va_enc_hevc.h deleted file mode 100644 index 96b5ae5..0000000 --- a/prebuilts/arm/include/va/va_enc_hevc.h +++ /dev/null @@ -1,958 +0,0 @@ -/* - * Copyright (c) 2007-2014 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_hevc.h - * \brief The HEVC encoding API - * - * This file contains the \ref api_enc_hevc "HEVC encoding API". - * - */ - -#ifndef VA_ENC_HEVC_H -#define VA_ENC_HEVC_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_enc_hevc HEVC encoding API - * - * @{ - */ - -/** Attribute value for VAConfigAttribEncHEVCFeatures. - * - * This attribute decribes the supported features of an HEVC/H.265 - * encoder configuration. - * - * All of the field values in this attribute are VA_FEATURE_* values, - * indicating support for the corresponding feature. - */ -typedef union VAConfigAttribValEncHEVCFeatures { - struct { - /** Separate colour planes. - * - * Allows setting separate_colour_plane_flag in the SPS. - */ - uint32_t separate_colour_planes : 2; - /** Scaling lists. - * - * Allows scaling_list() elements to be present in both the SPS - * and the PPS. The decoded form of the scaling lists must also - * be supplied in a VAQMatrixBufferHEVC buffer when scaling lists - * are enabled. - */ - uint32_t scaling_lists : 2; - /** Asymmetric motion partitions. - * - * Allows setting amp_enabled_flag in the SPS. - */ - uint32_t amp : 2; - /** Sample adaptive offset filter. - * - * Allows setting slice_sao_luma_flag and slice_sao_chroma_flag - * in slice headers. - */ - uint32_t sao : 2; - /** PCM sample blocks. - * - * Allows setting pcm_enabled_flag in the SPS. When enabled - * PCM parameters must be supplied with the sequence parameters, - * including block sizes which may be further constrained as - * noted in the VAConfigAttribEncHEVCBlockSizes attribute. - */ - uint32_t pcm : 2; - /** Temporal motion vector Prediction. - * - * Allows setting slice_temporal_mvp_enabled_flag in slice - * headers. - */ - uint32_t temporal_mvp : 2; - /** Strong intra smoothing. - * - * Allows setting strong_intra_smoothing_enabled_flag in the SPS. - */ - uint32_t strong_intra_smoothing : 2; - /** Dependent slices. - * - * Allows setting dependent_slice_segment_flag in slice headers. - */ - uint32_t dependent_slices : 2; - /** Sign data hiding. - * - * Allows setting sign_data_hiding_enable_flag in the PPS. - */ - uint32_t sign_data_hiding : 2; - /** Constrained intra prediction. - * - * Allows setting constrained_intra_pred_flag in the PPS. - */ - uint32_t constrained_intra_pred : 2; - /** Transform skipping. - * - * Allows setting transform_skip_enabled_flag in the PPS. - */ - uint32_t transform_skip : 2; - /** QP delta within coding units. - * - * Allows setting cu_qp_delta_enabled_flag in the PPS. - */ - uint32_t cu_qp_delta : 2; - /** Weighted prediction. - * - * Allows setting weighted_pred_flag and weighted_bipred_flag in - * the PPS. The pred_weight_table() data must be supplied with - * every slice header when weighted prediction is enabled. - */ - uint32_t weighted_prediction : 2; - /** Transform and quantisation bypass. - * - * Allows setting transquant_bypass_enabled_flag in the PPS. - */ - uint32_t transquant_bypass : 2; - /** Deblocking filter disable. - * - * Allows setting slice_deblocking_filter_disabled_flag. - */ - uint32_t deblocking_filter_disable : 2; - /* Reserved,should not be used, avoid conflict with VA_ATTRIB_NOT_SUPPORTED. */ - uint32_t reserved : 2; - } bits; - uint32_t value; -} VAConfigAttribValEncHEVCFeatures; - -/** Attribute value for VAConfigAttribEncHEVCBlockSizes. - * - * This attribute describes the supported coding tree and transform block - * sizes of an HEVC/H.265 encoder configuration - */ -typedef union VAConfigAttribValEncHEVCBlockSizes { - struct { - /** Largest supported size of coding tree blocks. - * - * CtbLog2SizeY must not be larger than this. - */ - uint32_t log2_max_coding_tree_block_size_minus3 : 2; - /** Smallest supported size of coding tree blocks. - * - * CtbLog2SizeY must not be smaller than this. - * - * This may be the same as the maximum size, indicating that only - * one CTB size is supported. - */ - uint32_t log2_min_coding_tree_block_size_minus3 : 2; - - /** Smallest supported size of luma coding blocks. - * - * MinCbLog2SizeY must not be smaller than this. - */ - uint32_t log2_min_luma_coding_block_size_minus3 : 2; - - /** Largest supported size of luma transform blocks. - * - * MaxTbLog2SizeY must not be larger than this. - */ - uint32_t log2_max_luma_transform_block_size_minus2 : 2; - /** Smallest supported size of luma transform blocks. - * - * MinTbLog2SizeY must not be smaller than this. - */ - uint32_t log2_min_luma_transform_block_size_minus2 : 2; - - /** Largest supported transform hierarchy depth in inter - * coding units. - * - * max_transform_hierarchy_depth_inter must not be larger - * than this. - */ - uint32_t max_max_transform_hierarchy_depth_inter : 2; - /** Smallest supported transform hierarchy depth in inter - * coding units. - * - * max_transform_hierarchy_depth_inter must not be smaller - * than this. - */ - uint32_t min_max_transform_hierarchy_depth_inter : 2; - - /** Largest supported transform hierarchy depth in intra - * coding units. - * - * max_transform_hierarchy_depth_intra must not be larger - * than this. - */ - uint32_t max_max_transform_hierarchy_depth_intra : 2; - /** Smallest supported transform hierarchy depth in intra - * coding units. - * - * max_transform_hierarchy_depth_intra must not be smaller - * than this. - */ - uint32_t min_max_transform_hierarchy_depth_intra : 2; - - /** Largest supported size of PCM coding blocks. - * - * Log2MaxIpcmCbSizeY must not be larger than this. - */ - uint32_t log2_max_pcm_coding_block_size_minus3 : 2; - /** Smallest supported size of PCM coding blocks. - * - * Log2MinIpcmCbSizeY must not be smaller than this. - */ - uint32_t log2_min_pcm_coding_block_size_minus3 : 2; - - /** Reserved for future use. */ - uint32_t reserved : 10; - } bits; - uint32_t value; -} VAConfigAttribValEncHEVCBlockSizes; - -/** - * @name Picture flags - * - * Those flags flags are meant to signal when a picture marks the end - * of a sequence, a stream, or even both at once. - * - * @{ - */ -/** - * \brief Marks the last picture in the sequence. - * - * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame. - */ -#define HEVC_LAST_PICTURE_EOSEQ 0x01 -/** - * \brief Marks the last picture in the stream. - * - * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame. - */ -#define HEVC_LAST_PICTURE_EOSTREAM 0x02 -/**@}*/ - -/** - * \brief Packed header types specific to HEVC encoding. - * - * Types of packed headers generally used for HEVC encoding. Each - * associated packed header data buffer shall contain the start code - * prefix 0x000001 followed by the complete NAL unit, thus also - * including the \c nal_unit_type. - * - * Note: the start code prefix can contain an arbitrary number of leading - * zeros. The driver will skip them for emulation prevention bytes insertion, - * if necessary. - */ -typedef enum { - /** - * \brief Packed Video Parameter Set (VPS). - * - * The corresponding packed header data buffer shall contain the - * complete video_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 32. - */ - VAEncPackedHeaderHEVC_VPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Sequence Parameter Set (SPS). - * - * The corresponding packed header data buffer shall contain the - * complete seq_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 33. - */ - VAEncPackedHeaderHEVC_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - * The corresponding packed header data buffer shall contain the - * complete pic_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 34. - */ - VAEncPackedHeaderHEVC_PPS = VAEncPackedHeaderPicture, - /** - * \brief Packed slice header. - * - * The corresponding packed header data buffer shall contain the - * \c slice_header() syntax element only, along with any start - * code prefix and NAL unit type preceeding it. i.e. this means - * that the buffer does not contain any of the \c slice_data() or - * the \c rbsp_slice_trailing_bits(). - * - * Note: packed \c nal_unit_type shall be equal to 0 to 9 (non-IRAP - * picture), or 16 to 21 (IRAP picture). - */ - VAEncPackedHeaderHEVC_Slice = VAEncPackedHeaderSlice, - /** - * \brief Packed Supplemental Enhancement Information (SEI). - * - * The corresponding packed header data buffer shall contain the - * complete sei_rbsp() syntax element, thus including several - * sei_message() elements if necessary. - * - * Note: packed \c nal_unit_type shall be equal to 39 or 40. - * - * @deprecated - * This is a deprecated packed header flag, All applications can use - * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed - * SEI header data buffer to the driver - */ - VAEncPackedHeaderHEVC_SEI va_deprecated_enum = (0x80000000 | 1), -} VAEncPackedHeaderTypeHEVC; - -/** - * \brief Sequence parameter for HEVC encoding in main & main 10 - * profiles. - * - * This structure holds information for \c seq_parameter_set_data() as - * defined by the HEVC specification. - * - * If packed sequence headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c seq_scaling_matrix_present_flag is set to \c 1, then a - * #VAQMatrixBufferHEVC buffer shall also be provided within the same - * \c vaRenderPicture() call as this sequence parameter buffer. - */ -typedef struct _VAEncSequenceParameterBufferHEVC { - /** \brief Same as the HEVC bitstream syntax element. - * value range [1..2]. - */ - uint8_t general_profile_idc; - /** \brief Same as the HEVC bitstream syntax element. - * general_level_idc shall be set equal to a value of 30 times the level - * numbers allowed [1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 5.2, 6, 6.1, 6.2] - */ - uint8_t general_level_idc; - /** \brief Same as the HEVC bitstream syntax element. - * Only value 0 is allowed for level value below 4, exclusive. - */ - uint8_t general_tier_flag; - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between IDR frames. */ - uint32_t intra_idr_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - /** \brief Picture width in pixel samples. - * Its value must be multiple of min CU size. - */ - uint16_t pic_width_in_luma_samples; - /** \brief Picture height in pixel samples. - * Its value must be multiple of min CU size. - */ - uint16_t pic_height_in_luma_samples; - - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t chroma_format_idc : 2; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t separate_colour_plane_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t bit_depth_luma_minus8 : 3; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t bit_depth_chroma_minus8 : 3; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t scaling_list_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t strong_intra_smoothing_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t amp_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sample_adaptive_offset_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_loop_filter_disabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sps_temporal_mvp_enabled_flag : 1; - /** \brief Indicates whether or not the encoding is in low delay mode. - * 0 normal sequence - * 1 no random access B will be coded . and the coding type could be only I, P or LDB - * this flag only indicates the frame coding type of the sequence. - */ - uint32_t low_delay_seq : 1; - /** \brief Indicates whether or not the encoding is in dyadic hierarchical GOP structure - * the default value 0, BRC would treat is as flat structure. if HierachicalFlag == 1, - * application would enable Qp Modulation - */ - uint32_t hierachical_flag : 1; - /** \brief keep for future , should be set to 0 */ - uint32_t reserved_bits : 14; - } bits; - uint32_t value; - } seq_fields; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [0..3] - */ - uint8_t log2_min_luma_coding_block_size_minus3; - - /** \brief Same as the HEVC bitstream syntax element. - */ - uint8_t log2_diff_max_min_luma_coding_block_size; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [0..3] - */ - uint8_t log2_min_transform_block_size_minus2; - - /** \brief Same as the HEVC bitstream syntax element. - */ - uint8_t log2_diff_max_min_transform_block_size; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [2] - */ - uint8_t max_transform_hierarchy_depth_inter; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [2] - */ - uint8_t max_transform_hierarchy_depth_intra; - - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_sample_bit_depth_luma_minus1; - - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_sample_bit_depth_chroma_minus1; - - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t log2_min_pcm_luma_coding_block_size_minus3; - - /** \brief Derived from the HEVC bitstream syntax element. - * log2_min_pcm_luma_coding_block_size_minus3 + - * log2_diff_max_min_pcm_luma_coding_block_size - */ - uint32_t log2_max_pcm_luma_coding_block_size_minus3; - - /** @name VUI parameters (optional) */ - /**@{*/ - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t vui_parameters_present_flag; - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t aspect_ratio_info_present_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t neutral_chroma_indication_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t field_seq_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t vui_timing_info_present_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t bitstream_restriction_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t tiles_fixed_structure_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t motion_vectors_over_pic_boundaries_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t restricted_ref_pic_lists_flag : 1; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_horizontal : 5; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_vertical : 5; - } bits; - uint32_t value; - } vui_fields; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t aspect_ratio_idc; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sar_width; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sar_height; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t vui_num_units_in_tick; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t vui_time_scale; - /** \brief Same as the HEVC bitstream syntax element. */ - uint16_t min_spatial_segmentation_idc; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t max_bytes_per_pic_denom; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t max_bits_per_min_cu_denom; - - /** \brief SCC flags to enable/disable features, including IBC and palette mode at present.*/ - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t palette_mode_enabled_flag : 1; - /** \brief Reserved bits for future use, must be zero */ - uint32_t reserved : 31; - } bits; - uint32_t value; - } scc_fields; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 1]; - /**@}*/ -} VAEncSequenceParameterBufferHEVC; - -/**************************** - * HEVC data structures - ****************************/ -/** - * \brief Picture parameter for HEVC encoding in main & main 10 - * profiles. - * - * This structure holds information for \c pic_parameter_set_rbsp() as - * defined by the HEVC specification. - * - * If packed picture headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c pic_scaling_matrix_present_flag is set to \c 1, then a - * #VAQMatrixBufferHEVC buffer shall also be provided within the same - * \c vaRenderPicture() call as this picture parameter buffer. - */ -typedef struct _VAEncPictureParameterBufferHEVC { - /** - * \brief Information about the picture to be encoded. - * - * See #VAPictureHEVC for further description of each field. - * Note that decoded_curr_pic.picture_id represents the reconstructed - * (decoded) picture. User provides a scratch VA surface ID here. - * Long term reference and RPS related fields should be set to 0 - * and ignored. - */ - VAPictureHEVC decoded_curr_pic; - /** - * \brief Decoded Picture Buffer (DPB). - * - * This array represents the list of reconstructed (decoded) - * frames used as reference. It is important to keep track of - * reconstructed frames so that they can be used later on as - * reference for P or B-frames encoding. - */ - VAPictureHEVC reference_frames[15]; - /** - * \brief Output encoded bitstream. - * - * \ref coded_buf has type #VAEncCodedBufferType. It should be - * large enough to hold the compressed NAL slice and possibly VPS, SPS - * and PPS NAL units, and other NAL units such as SEI. - */ - VABufferID coded_buf; - - /** \brief collocated reference picture buffer index of ReferenceFrames[]. - * Please note it is different from HEVC syntac element collocated_ref_idx. - * When the HEVC syntax element slice_temporal_mvp_enable_flag takes value 0, - * collocated_ref_pic_index should take value 0xFF. . - * Range: [0..14, 0xFF] - */ - uint8_t collocated_ref_pic_index; - - /** - * \brief OR'd flags describing whether the picture is the last one or not. - * - * This fields holds 0 if the picture to be encoded is not the last - * one in the stream or sequence. Otherwise, it is a combination of - * \ref HEVC_LAST_PICTURE_EOSEQ or \ref HEVC_LAST_PICTURE_EOSTREAM. - */ - uint8_t last_picture; - - /** \brief \c init_qp_minus26 + 26. */ - uint8_t pic_init_qp; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t diff_cu_qp_delta_depth; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - int8_t pps_cb_qp_offset; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - int8_t pps_cr_qp_offset; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t num_tile_columns_minus1; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t num_tile_rows_minus1; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t column_width_minus1[19]; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t row_height_minus1[21]; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t log2_parallel_merge_level_minus2; - - /** \brief Application may set the CTU bit size limit based on - * spec requirement (A.3.2), or other value for special purpose. - * If the value is set 0, no bit size limit is checked. - */ - uint8_t ctu_max_bitsize_allowed; - - /** \brief Maximum reference index for reference picture list 0. - * value range: [0..14]. - */ - uint8_t num_ref_idx_l0_default_active_minus1; - - /** \brief Maximum reference index for reference picture list 1. - * value range: [0..14]. - */ - uint8_t num_ref_idx_l1_default_active_minus1; - - /** \brief PPS header - * Used by GPU to generate new slice headers in slice size control. - * value range: [0..63]. - */ - uint8_t slice_pic_parameter_set_id; - - /** \brief NAL unit type - * Used by GPU to generate new slice headers in slice size control. - * value range: [0..63]. - */ - uint8_t nal_unit_type; - - union { - struct { - /** \brief Is picture an IDR picture? */ - uint32_t idr_pic_flag : 1; - /** \brief Picture type. - * I - 1; - * P - 2; - * B - 3; - * B1 - 4; - * B2 - 5; - * B1 and B2 are frame types for hierachical B, explanation - * can refer to num_b_in_gop[]. - */ - uint32_t coding_type : 3; - /** \brief Is picture a reference picture? */ - uint32_t reference_pic_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t dependent_slice_segments_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t sign_data_hiding_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t constrained_intra_pred_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t transform_skip_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t cu_qp_delta_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t weighted_pred_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t weighted_bipred_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t transquant_bypass_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t tiles_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t entropy_coding_sync_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t loop_filter_across_tiles_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t pps_loop_filter_across_slices_enabled_flag : 1; - /** \brief A combination of HEVC syntax element of - * sps_scaling_list_data_present_flag and - * pps_scaling_list_data_present_flag - * when scaling_list_enable_flag is 0, it must be 0. - */ - uint32_t scaling_list_data_present_flag : 1; - /** \brief indicate the current picture contains significant - * screen contents (text, characters, etc.) or animated image. - * GPU may want to treat them differently from normal video. - * For example, encoder may choose a small transform unit size - * and may use transform skip mode. - */ - uint32_t screen_content_flag : 1; - /** - * When either weighted_pred_flag or weighted_bipred_flag is - * turned on, the flag enable_gpu_weighted_prediction requests - * GPU to determine weighted prediction factors. In this case, - * the following parameters in slice control data structure - * shall be ignored: - * luma_log2_weight_denom, delta_chroma_log2_weight_denom, - * luma_offset_l0[15], luma_offset_l1[15], - * delta_luma_weight_l0[15], delta_luma_weight_l1[15], - * chroma_offset_l0[15][2], chroma_offset_l1[15][2], - * and delta_chroma_weight_l0[15][2], delta_chroma_weight_l1[15][2]. - */ - uint32_t enable_gpu_weighted_prediction : 1; - /** \brief HEVC syntax element in slice segment header - * GPU uses it to generate new slice headers in slice size control. - */ - uint32_t no_output_of_prior_pics_flag : 1; - uint32_t reserved : 11; - } bits; - uint32_t value; - } pic_fields; - - /** \brief When hierachical_level_plus1 > 0, hierachical_level_plus1-1 indicates - *the current frame's level.when it > 0. B1, B2 setting in CodingType can be treated as B, - *hirachical level is determined by this variable.When hierachical_level_plus1 == 0, - *hierarchical level information still comes from coding_type. - */ - uint8_t hierarchical_level_plus1; - /** \brief Reserved bytes for future use, must be zero */ - uint8_t va_byte_reserved; - /** \brief SCC flags to enable/disable feature, only IBC at present.*/ - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint16_t pps_curr_pic_ref_enabled_flag : 1; - /** \brief Reserved bits for future use, must be zero */ - uint16_t reserved : 15; - } bits; - uint16_t value; - } scc_fields; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH - 1]; -} VAEncPictureParameterBufferHEVC; - -/** - * \brief Slice parameter for HEVC encoding in main & main 10 profiles. - * - * This structure holds information for \c - * slice_segment_layer_rbsp() as defined by the HEVC - * specification. - * - * If packed slice headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSlice ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - */ -typedef struct _VAEncSliceParameterBufferHEVC { - /** \brief Starting CTU address for this slice. */ - uint32_t slice_segment_address; - /** \brief Number of CTUs in this slice. */ - uint32_t num_ctu_in_slice; - - /** \brief Slice type. - * Corresponds to HEVC syntax element of the same name. - */ - uint8_t slice_type; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t slice_pic_parameter_set_id; - - /** \brief Maximum reference index for reference picture list 0. - * Range: 0 to 14, inclusive. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** \brief Maximum reference index for reference picture list 1. - * Range: 0 to 14, inclusive. - */ - uint8_t num_ref_idx_l1_active_minus1; - /** \brief Reference picture list 0 (for P slices). */ - VAPictureHEVC ref_pic_list0[15]; - /** \brief Reference picture list 1 (for B slices). */ - VAPictureHEVC ref_pic_list1[15]; - /**@}*/ - - /** @name pred_weight_table() */ - /**@{*/ - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t luma_log2_weight_denom; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_chroma_log2_weight_denom; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_luma_weight_l0[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t luma_offset_l0[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_chroma_weight_l0[15][2]; - /** \brief Same as the HEVC spec variable ChromaOffsetL0[]. */ - int8_t chroma_offset_l0[15][2]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_luma_weight_l1[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t luma_offset_l1[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_chroma_weight_l1[15][2]; - /** \brief Same as the HEVC spec variable ChromaOffsetL1[]. */ - int8_t chroma_offset_l1[15][2]; - /**@}*/ - - /** \brief Corresponds to HEVC spec variable MaxNumMergeCand. - * Range: [1..5]. - */ - uint8_t max_num_merge_cand; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_qp_delta; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_cb_qp_offset; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_cr_qp_offset; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_beta_offset_div2; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_tc_offset_div2; - - union { - struct { - /** \brief Indicates if current slice is the last one in picture */ - uint32_t last_slice_of_pic_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name */ - uint32_t dependent_slice_segment_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name */ - uint32_t colour_plane_id : 2; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_temporal_mvp_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_sao_luma_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_sao_chroma_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. - * if this flag is set to 0, num_ref_idx_l0_active_minus1 should be - * equal to num_ref_idx_l0_default_active_minus1 - * as well as for that for l1. - */ - uint32_t num_ref_idx_active_override_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t mvd_l1_zero_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t cabac_init_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_deblocking_filter_disabled_flag : 2; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_loop_filter_across_slices_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t collocated_from_l0_flag : 1; - } bits; - uint32_t value; - } slice_fields; - - - /** - * \brief bit offset of syntax element pred_weight_table() in slice segment header. - * It aligns with the starting position of the current packed slice header. - * It is used when encoder prefers to override the weighted prediction parameters passed in - * from application. - * Please refer to enable_gpu_weighted_prediction in VAEncPictureParameterBufferHEVC. - */ - uint32_t pred_weight_table_bit_offset; - /** - * \brief bit length of syntax element pred_weight_table() in slice segment header. - * It is used when encoder prefers to override the weighted prediction parameters passed in - * from application. - * Please refer to enable_gpu_weighted_prediction in VAEncPictureParameterBufferHEVC. - */ - uint32_t pred_weight_table_bit_length; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 2]; - /**@}*/ -} VAEncSliceParameterBufferHEVC; - -/** - * \brief HEVC Quantization Matrix Buffer Structure - * - * This structure is sent once per frame, - * and only when scaling_list_enabled_flag = 1 and scaling_list_data_present_flag = 1. - * Only when scaling_list_data_present_flag = 1, app still - * needs to send in this structure. When scaling_list_enabled_flag = 1 and - * scaling_list_data_present_flag = 0, driver is responsible to generate - * the default scaling list values. - * - * Matrix entries are in raster scan order which follows HEVC spec. - */ -typedef struct _VAQMatrixBufferHEVC { - /** - * \brief scaling lists, - * corresponds to same HEVC spec syntax element - * ScalingList[ i ][ MatrixID ][ j ]. - * - * \brief 4x4 scaling, - */ - uint8_t scaling_lists_4x4[3][2][16]; - /** - * \brief 8x8 scaling, - */ - uint8_t scaling_lists_8x8[3][2][64]; - /** - * \brief 16x16 scaling, - * correspongs i = 2, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t scaling_lists_16x16[3][2][64]; - /** - * \brief 32x32 scaling, - * correspongs i = 3, MatrixID is in the range of 0 to 1, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t scaling_lists_32x32[2][64]; - /** - * \brief DC values of the 16x16 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 2 and matrixID in the range of 0 to 5, inclusive. - */ - uint8_t scaling_list_dc_16x16[3][2]; - /** - * \brief DC values of the 32x32 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 3 and matrixID in the range of 0 to 1, inclusive. - */ - uint8_t scaling_list_dc_32x32[2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAQMatrixBufferHEVC; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_HEVC_H */ diff --git a/prebuilts/arm/include/va/va_enc_jpeg.h b/prebuilts/arm/include/va/va_enc_jpeg.h deleted file mode 100644 index ec02191..0000000 --- a/prebuilts/arm/include/va/va_enc_jpeg.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (c) 2007-2013 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_jpeg.h - * \brief JPEG encoding API - * - * This file contains the \ref api_enc_jpeg "JPEG encoding API". - */ - -#ifndef VA_ENC_JPEG_H -#define VA_ENC_JPEG_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_jpeg JPEG encoding API - * - * @{ - */ - -/** - * \brief JPEG Encoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferJPEG { - /** \brief holds reconstructed picture. */ - VASurfaceID reconstructed_picture; - /** \brief picture width. */ - uint16_t picture_width; - /** \brief picture height. */ - uint16_t picture_height; - /** \brief holds coded data. */ - VABufferID coded_buf; - - /** - * \brief pic_flags - * - */ - union { - struct { - /** - * \brief profile: - * 0 - Baseline, 1 - Extended, 2 - Lossless, 3 - Hierarchical - */ - uint32_t profile : 2; - /** - * \brief progressive: - * 0 - sequential, 1 - extended, 2 - progressive - */ - uint32_t progressive : 1; - /** - * \brief huffman: - * 0 - arithmetic, 1 - huffman - */ - uint32_t huffman : 1; - /** - * \brief interleaved: - * 0 - non interleaved, 1 - interleaved - */ - uint32_t interleaved : 1; - /** - * \brief differential: - * 0 - non differential, 1 - differential - */ - uint32_t differential : 1; - } bits; - uint32_t value; - } pic_flags; - - /** \brief number of bits per sample. */ - uint8_t sample_bit_depth; - /** \brief total number of scans in image. */ - uint8_t num_scan; - /** \brief number of image components in frame. */ - uint16_t num_components; - /** \brief Component identifier (Ci). */ - uint8_t component_id[4]; - /** \brief Quantization table selector (Tqi). */ - uint8_t quantiser_table_selector[4]; - /** \brief number from 1 to 100 that specifies quality of image. */ - uint8_t quality; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferJPEG; - - -/** - * \brief Slice parameter for JPEG encoding. - * - * This structure conveys slice (scan) level parameters. - * - */ -typedef struct _VAEncSliceParameterBufferJPEG { - /** \brief Restart interval definition (Ri). */ - uint16_t restart_interval; - /** \brief number of image components in a scan. */ - uint16_t num_components; - struct { - /** \brief Scan component selector (Csj). */ - uint8_t component_selector; - /** \brief DC entropy coding table selector (Tdj). */ - uint8_t dc_table_selector; - /** \brief AC entropy coding table selector (Taj). */ - uint8_t ac_table_selector; - } components[4]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSliceParameterBufferJPEG; - -/** - * \brief Quantization table for JPEG encoding. - * - */ -typedef struct _VAQMatrixBufferJPEG { - /** \brief load luma quantization table. */ - int32_t load_lum_quantiser_matrix; - /** \brief load chroma quantization table. */ - int32_t load_chroma_quantiser_matrix; - /** \brief luma quantization table. */ - uint8_t lum_quantiser_matrix[64]; - /** \brief chroma quantization table. */ - uint8_t chroma_quantiser_matrix[64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAQMatrixBufferJPEG; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_JPEG_H */ diff --git a/prebuilts/arm/include/va/va_enc_mpeg2.h b/prebuilts/arm/include/va/va_enc_mpeg2.h deleted file mode 100644 index 669df03..0000000 --- a/prebuilts/arm/include/va/va_enc_mpeg2.h +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_mpeg2.h - * \brief The MPEG-2 encoding API - * - * This file contains the \ref api_enc_mpeg2 "MPEG-2 encoding API". - */ - -#ifndef _VA_ENC_MPEG2_H_ -#define _VA_ENC_MPEG2_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_mpeg2 MPEG-2 encoding API - * - * @{ - */ - -/** - * \brief MPEG-2 Quantization Matrix Buffer - * - */ -typedef VAIQMatrixBufferMPEG2 VAQMatrixBufferMPEG2; - -/** - * \brief Packed header types specific to MPEG-2 encoding. - * - * Types of packed headers generally used for MPEG-2 encoding. - */ -typedef enum { - /** - * \brief Packed Sequence Parameter Set (SPS). - * - */ - VAEncPackedHeaderMPEG2_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - */ - VAEncPackedHeaderMPEG2_PPS = VAEncPackedHeaderPicture, - /** - * \brief Packed slice header. - * - */ - VAEncPackedHeaderMPEG2_Slice = VAEncPackedHeaderSlice, -} VAEncPackedHeaderTypeMPEG2; - -/** - * \brief Sequence parameter for MPEG-2 encoding - * - * This structure holds information for \c sequence_header() and - * sequence_extension(). - * - * If packed sequence headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - */ -typedef struct _VAEncSequenceParameterBufferMPEG2 { - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; - /** \brief Picture width. - * - * A 14bits unsigned inter, the lower 12bits - * is horizontal_size_value, and the upper - * 2bits is \c horizontal_size_extension - * - */ - uint16_t picture_width; - /** \brief Picture height. - * - * A 14bits unsigned inter, the lower 12bits - * is vertical_size_value, and the upper 2bits is - * vertical_size_size_extension - * - */ - uint16_t picture_height; - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * bits_per_second may be derived from bit_rate. - * - */ - uint32_t bits_per_second; - /** - * \brief Frame rate - * - * Derived from frame_rate_value, frame_rate_extension_n and - * frame_rate_extension_d - * - */ - float frame_rate; - /** \brief Same as the element in sequence_header() */ - uint16_t aspect_ratio_information; - /** \brief Define the size of VBV */ - uint32_t vbv_buffer_size; - - union { - struct { - /** \brief Same as the element in Sequence extension() */ - uint32_t profile_and_level_indication : 8; - /** \brief Same as the element in Sequence extension() */ - uint32_t progressive_sequence : 1; - /** \brief Same as the element in Sequence extension() */ - uint32_t chroma_format : 2; - /** \brief Same as the element in Sequence extension() */ - uint32_t low_delay : 1; - /** \brief Same as the element in Sequence extension() */ - uint32_t frame_rate_extension_n : 2; - /** \brief Same as the element in Sequence extension() */ - uint32_t frame_rate_extension_d : 5; - } bits; - uint32_t value; - } sequence_extension; - - /** \brief Flag to indicate the following GOP header are being updated */ - uint32_t new_gop_header; - - union { - struct { - /** \brief Time code */ - uint32_t time_code : 25; - /** \brief Same as the element in GOP header */ - uint32_t closed_gop : 1; - /** \brief SAme as the element in GOP header */ - uint32_t broken_link : 1; - } bits; - uint32_t value; - } gop_header; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferMPEG2; - -/** - * \brief Picture parameter for MPEG-2 encoding - * - * This structure holds information for picture_header() and - * picture_coding_extension() - * - * If packed picture headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - */ -typedef struct _VAEncPictureParameterBufferMPEG2 { - /** \brief Forward reference picture */ - VASurfaceID forward_reference_picture; - /** \brief Backward reference picture */ - VASurfaceID backward_reference_picture; - /** \brief Reconstructed(decoded) picture */ - VASurfaceID reconstructed_picture; - /** - * \brief Output encoded bitstream. - * - * \ref coded_buf has type #VAEncCodedBufferType. It should be - * large enough to hold the compressed NAL slice and possibly SPS - * and PPS NAL units. - */ - VABufferID coded_buf; - /** - * \brief Flag to indicate the picture is the last one or not. - * - * This fields holds 0 if the picture to be encoded is not - * the last one in the stream. Otherwise, it - * is \ref MPEG2_LAST_PICTURE_EOSTREAM. - */ - uint8_t last_picture; - /** \brief Picture type */ - VAEncPictureType picture_type; - /** \brief Same as the element in picture_header() */ - uint32_t temporal_reference; - /** \brief Same as the element in picture_header() */ - uint32_t vbv_delay; - /** \brief Same as the element in Picture coding extension */ - uint8_t f_code[2][2]; - union { - struct { - /** \brief Same as the element in Picture coding extension */ - uint32_t intra_dc_precision : 2; - /** \brief Same as the element in Picture coding extension */ - uint32_t picture_structure : 2; - /** \brief Same as the element in Picture coding extension */ - uint32_t top_field_first : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t frame_pred_frame_dct : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t concealment_motion_vectors : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t q_scale_type : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t intra_vlc_format : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t alternate_scan : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t repeat_first_field : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t progressive_frame : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t composite_display_flag : 1; - } bits; - uint32_t value; - } picture_coding_extension; - - /* \brief Parameters for composite display - * - * Valid only when omposite_display_flag is 1 - */ - union { - struct { - /** \brief Same as the element in Picture coding extension */ - uint32_t v_axis : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t field_sequence : 3; - /** \brief Same as the element in Picture coding extension */ - uint32_t sub_carrier : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t burst_amplitude : 7; - /** \brief Same as the element in Picture coding extension */ - uint32_t sub_carrier_phase : 8; - } bits; - uint32_t value; - } composite_display; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferMPEG2; - -/** - * \brief Slice parameter for MPEG-2 encoding - * - */ -typedef struct _VAEncSliceParameterBufferMPEG2 { - /** \brief Starting MB address for this slice. */ - uint32_t macroblock_address; - /** \brief Number of macroblocks in this slice. */ - uint32_t num_macroblocks; - /** \brief Same as the element in slice() */ - int32_t quantiser_scale_code; - /** \brief Flag to indicate intra slice */ - int32_t is_intra_slice; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSliceParameterBufferMPEG2; - -typedef struct _VAEncMiscParameterExtensionDataSeqDisplayMPEG2 { - /** should always be 0x02 to identify it is Sequence Display Extension ISO-13818 */ - uint8_t extension_start_code_identifier; - /** these field should follow ISO-13818 6.3.6 */ - uint8_t video_format; - uint8_t colour_description; - uint8_t colour_primaries; - uint8_t transfer_characteristics; - uint8_t matrix_coefficients; - uint16_t display_horizontal_size; - uint16_t display_vertical_size; -} VAEncMiscParameterExtensionDataSeqDisplayMPEG2; -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_ENC_MPEG2_H_ */ diff --git a/prebuilts/arm/include/va/va_enc_vp8.h b/prebuilts/arm/include/va/va_enc_vp8.h deleted file mode 100644 index 84ce05f..0000000 --- a/prebuilts/arm/include/va/va_enc_vp8.h +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_vp8.h - * \brief VP8 encoding API - * - * This file contains the \ref api_enc_vp8 "VP8 encoding API". - */ - -#ifndef VA_ENC_VP8_H -#define VA_ENC_VP8_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_vp8 VP8 encoding API - * - * @{ - */ - -/** - * \brief VP8 Encoding Sequence Parameter Buffer Structure - * - * This structure conveys sequence level parameters. - * - */ -typedef struct _VAEncSequenceParameterBufferVP8 { - /* frame width in pixels */ - uint32_t frame_width; - /* frame height in pixels */ - uint32_t frame_height; - /* horizontal scale */ - uint32_t frame_width_scale; - /* vertical scale */ - uint32_t frame_height_scale; - - /* whether to enable error resilience features */ - uint32_t error_resilient; - /* auto keyframe placement, non-zero means enable auto keyframe placement */ - uint32_t kf_auto; - /* keyframe minimum interval */ - uint32_t kf_min_dist; - /* keyframe maximum interval */ - uint32_t kf_max_dist; - - - /* RC related fields. RC modes are set with VAConfigAttribRateControl */ - /* For VP8, CBR implies HRD conformance and VBR implies no HRD conformance */ - - /** - * Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - /* Period between I frames. */ - uint32_t intra_period; - - /* reference and reconstructed frame buffers - * Used for driver auto reference management when configured through - * VAConfigAttribEncAutoReference. - */ - VASurfaceID reference_frames[4]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferVP8; - - -/** - * \brief VP8 Encoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferVP8 { - /* surface to store reconstructed frame */ - VASurfaceID reconstructed_frame; - - /* - * surfaces to store reference frames in non auto reference mode - * VA_INVALID_SURFACE can be used to denote an invalid reference frame. - */ - VASurfaceID ref_last_frame; - VASurfaceID ref_gf_frame; - VASurfaceID ref_arf_frame; - - /* buffer to store coded data */ - VABufferID coded_buf; - - union { - struct { - /* force this frame to be a keyframe */ - uint32_t force_kf : 1; - /* don't reference the last frame */ - uint32_t no_ref_last : 1; - /* don't reference the golden frame */ - uint32_t no_ref_gf : 1; - /* don't reference the alternate reference frame */ - uint32_t no_ref_arf : 1; - /* The temporal id the frame belongs to. */ - uint32_t temporal_id : 8; - /** - * following two flags indicate the reference order - * LastRef is specified by 01b; - * GoldRef is specified by 10b; - * AltRef is specified by 11b; - * first_ref specifies the reference frame which is searched first. - * second_ref specifies the reference frame which is searched second - * if there is. - */ - uint32_t first_ref : 2; - uint32_t second_ref : 2; - /** \brief Reserved for future use, must be zero */ - uint32_t reserved : 16; - } bits; - uint32_t value; - } ref_flags; - - union { - struct { - /* version */ - uint32_t frame_type : 1; - uint32_t version : 3; - /* show_frame */ - uint32_t show_frame : 1; - /* color_space */ - uint32_t color_space : 1; - /* 0: bicubic, 1: bilinear, other: none */ - uint32_t recon_filter_type : 2; - /* 0: no loop fitler, 1: simple loop filter */ - uint32_t loop_filter_type : 2; - /* 0: disabled, 1: normal, 2: simple */ - uint32_t auto_partitions : 1; - /* same as log2_nbr_of_dct_partitions in frame header syntax */ - uint32_t num_token_partitions : 2; - - /** - * The following fields correspond to the same VP8 syntax elements - * in the frame header. - */ - /** - * 0: clamping of reconstruction pixels is disabled, - * 1: clamping enabled. - */ - uint32_t clamping_type : 1; - /* indicate segmentation is enabled for the current frame. */ - uint32_t segmentation_enabled : 1; - /** - * Determines if the MB segmentation map is updated in the current - * frame. - */ - uint32_t update_mb_segmentation_map : 1; - /** - * Indicates if the segment feature data is updated in the current - * frame. - */ - uint32_t update_segment_feature_data : 1; - /** - * indicates if the MB level loop filter adjustment is enabled for - * the current frame (0 off, 1 on). - */ - uint32_t loop_filter_adj_enable : 1; - /** - * Determines whether updated token probabilities are used only for - * this frame or until further update. - * It may be used by application to enable error resilient mode. - * In this mode probability updates are allowed only at Key Frames. - */ - uint32_t refresh_entropy_probs : 1; - /** - * Determines if the current decoded frame refreshes the golden frame. - */ - uint32_t refresh_golden_frame : 1; - /** - * Determines if the current decoded frame refreshes the alternate - * reference frame. - */ - uint32_t refresh_alternate_frame : 1; - /** - * Determines if the current decoded frame refreshes the last frame - * reference buffer. - */ - uint32_t refresh_last : 1; - /** - * Determines if the golden reference is replaced by another reference. - */ - uint32_t copy_buffer_to_golden : 2; - /** - * Determines if the alternate reference is replaced by another reference. - */ - uint32_t copy_buffer_to_alternate : 2; - /** - * Controls the sign of motion vectors when the golden frame is referenced. - */ - uint32_t sign_bias_golden : 1; - /** - * Controls the sign of motion vectors when the alternate frame is - * referenced. - */ - uint32_t sign_bias_alternate : 1; - /** - * Enables or disables the skipping of macroblocks containing no - * non-zero coefficients. - */ - uint32_t mb_no_coeff_skip : 1; - /** - * Enforces unconditional per-MB loop filter delta update setting frame - * header flags mode_ref_lf_delta_update, all mb_mode_delta_update_flag[4], - * and all ref_frame_delta_update_flag[4] to 1. - * Since loop filter deltas are not automatically refreshed to default - * values at key frames, dropped frame with delta update may prevent - * correct decoding from the next key frame. - * Encoder application is advised to set this flag to 1 at key frames. - */ - uint32_t forced_lf_adjustment : 1; - uint32_t reserved : 2; - } bits; - uint32_t value; - } pic_flags; - - /** - * Contains a list of 4 loop filter level values (updated value if applicable) - * controlling the deblocking filter strength. Each entry represents a segment. - * When segmentation is disabled, use entry 0. - * When loop_filter_level is 0, loop filter shall be disabled. - */ - int8_t loop_filter_level[4]; - - /** - * Contains a list of 4 delta values for reference frame based MB-level - * loop filter adjustment. - * If no update, then set to 0. - */ - int8_t ref_lf_delta[4]; - - /** - * Contains a list of 4 delta values for coding mode based MB-level loop - * filter adjustment. - * If no update, then set to 0. - */ - int8_t mode_lf_delta[4]; - - /** - * Controls the deblocking filter sensitivity. - * Corresponds to the same VP8 syntax element in frame header. - */ - uint8_t sharpness_level; - - /** - * Application supplied maximum clamp value for Qindex used in quantization. - * Qindex will not be allowed to exceed this value. - * It has a valid range [0..127] inclusive. - */ - uint8_t clamp_qindex_high; - - /** - * Application supplied minimum clamp value for Qindex used in quantization. - * Qindex will not be allowed to be lower than this value. - * It has a valid range [0..127] inclusive. - * Condition clamp_qindex_low <= clamp_qindex_high must be guaranteed, - * otherwise they are ignored. - */ - uint8_t clamp_qindex_low; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferVP8; - - -/** - * \brief VP8 MB Segmentation ID Buffer - * - * application provides buffer containing the initial segmentation id for each - * MB, in raster scan order. Rate control may reassign it. - * For an 640x480 video, the buffer has 1200 entries. - * the value of each entry should be in the range [0..3], inclusive. - * If segmentation is not enabled, application does not need to provide it. - */ -typedef struct _VAEncMBMapBufferVP8 { - /** - * number of MBs in the frame. - * It is also the number of entries of mb_segment_id[]; - */ - uint32_t num_mbs; - /** - * per MB Segmentation ID Buffer - */ - uint8_t *mb_segment_id; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMBMapBufferVP8; - - -/** - * \brief VP8 Quantization Matrix Buffer Structure - * - * Contains quantization index for yac(0-3) for each segment and quantization - * index deltas, ydc(0), y2dc(1), y2ac(2), uvdc(3), uvac(4) that are applied - * to all segments. When segmentation is disabled, only quantization_index[0] - * will be used. This structure is sent once per frame. - */ -typedef struct _VAQMatrixBufferVP8 { - uint16_t quantization_index[4]; - int16_t quantization_index_delta[5]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAQMatrixBufferVP8; - - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_VP8_H */ diff --git a/prebuilts/arm/include/va/va_enc_vp9.h b/prebuilts/arm/include/va/va_enc_vp9.h deleted file mode 100644 index 107ab0c..0000000 --- a/prebuilts/arm/include/va/va_enc_vp9.h +++ /dev/null @@ -1,603 +0,0 @@ -/* - * Copyright (c) 2007-2015 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_vp9.h - * \brief VP9 encoding API - * - * This file contains the \ref api_enc_vp9 "VP9 encoding API". - * - */ - -#ifndef VA_ENC_VP9_H -#define VA_ENC_VP9_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_vp9 VP9 encoding API - * - * @{ - */ - -/** - * \brief VP9 Encoding Status Data Buffer Structure - * - * This structure is used to convey status data from encoder to application. - * Driver allocates VACodedBufferVP9Status as a private data buffer. - * Driver encapsulates the status buffer with a VACodedBufferSegment, - * and sets VACodedBufferSegment.status to be VA_CODED_BUF_STATUS_CODEC_SPECIFIC. - * And driver associates status data segment to the bit stream buffer segment - * by setting VACodedBufferSegment.next of coded_buf (bit stream) to the private - * buffer segment of status data. - * Application accesses it by calling VAMapBuffer() with VAEncCodedBufferType. - */ -typedef struct _VACodedBufferVP9Status { - /** Final quantization index used (yac), determined by BRC. - * Application is providing quantization index deltas - * ydc(0), y2dc(1), y2ac(2), uvdc(3), uvac(4) that are applied to all segments - * and segmentation qi deltas, they will not be changed by BRC. - */ - uint16_t base_qp_index; - - /** Final loopfilter levels for the frame, if segmentation is disabled only - * index 0 is used. - * If loop_filter_level is 0, it indicates loop filter is disabled. - */ - uint8_t loop_filter_level; - - /** - * Long term reference frame indication from BRC. BRC recommends the - * current frame that is being queried is a good candidate for a long - * term reference. - */ - uint8_t long_term_indication; - - /* suggested next frame width */ - uint16_t next_frame_width; - - /* suggested next frame height */ - uint16_t next_frame_height; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VACodedBufferVP9Status; - -/** - * \brief VP9 Encoding Sequence Parameter Buffer Structure - * - * This structure conveys sequence level parameters. - * - */ -typedef struct _VAEncSequenceParameterBufferVP9 { - /** \brief Frame size note: - * Picture resolution may change frame by frame. - * Application needs to allocate surfaces and frame buffers based on - * max frame resolution in case resolution changes for later frames. - * The source and recon surfaces allocated should be 64x64(SB) aligned - * on both horizontal and vertical directions. - * But buffers on the surfaces need to be aligned to CU boundaries. - */ - /* maximum frame width in pixels for the whole sequence */ - uint32_t max_frame_width; - - /* maximum frame height in pixels for the whole sequence */ - uint32_t max_frame_height; - - /* auto keyframe placement, non-zero means enable auto keyframe placement */ - uint32_t kf_auto; - - /* keyframe minimum interval */ - uint32_t kf_min_dist; - - /* keyframe maximum interval */ - uint32_t kf_max_dist; - - - /* RC related fields. RC modes are set with VAConfigAttribRateControl */ - /* For VP9, CBR implies HRD conformance and VBR implies no HRD conformance */ - - /** - * Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - - /* Period between key frames */ - uint32_t intra_period; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferVP9; - - -/** - * \brief VP9 Encoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferVP9 { - /** VP9 encoder may support dynamic scaling function. - * If enabled (enable_dynamic_scaling is set), application may request - * GPU encodes picture with a different resolution from the raw source. - * GPU should handle the scaling process of source and - * all reference frames. - */ - /* raw source frame width in pixels */ - uint32_t frame_width_src; - /* raw source frame height in pixels */ - uint32_t frame_height_src; - - /* to be encoded frame width in pixels */ - uint32_t frame_width_dst; - /* to be encoded frame height in pixels */ - uint32_t frame_height_dst; - - /* surface to store reconstructed frame, not used for enc only case */ - VASurfaceID reconstructed_frame; - - /** \brief reference frame buffers - * Each entry of the array specifies the surface index of the picture - * that is referred by current picture or will be referred by any future - * picture. The valid entries take value from 0 to 127, inclusive. - * Non-valid entries, those do not point to pictures which are referred - * by current picture or future pictures, should take value 0xFF. - * Other values are not allowed. - * - * Application should update this array based on the refreshing - * information expected. - */ - VASurfaceID reference_frames[8]; - - /* buffer to store coded data */ - VABufferID coded_buf; - - union { - struct { - /* force this frame to be a keyframe */ - uint32_t force_kf : 1; - - /** \brief Indiates which frames to be used as reference. - * (Ref_frame_ctrl & 0x01) ? 1: last frame as reference frame, 0: not. - * (Ref_frame_ctrl & 0x02) ? 1: golden frame as reference frame, 0: not. - * (Ref_frame_ctrl & 0x04) ? 1: alt frame as reference frame, 0: not. - * L0 is for forward prediction. - * L1 is for backward prediction. - */ - uint32_t ref_frame_ctrl_l0 : 3; - uint32_t ref_frame_ctrl_l1 : 3; - - /** \brief Last Reference Frame index - * Specifies the index to RefFrameList[] which points to the LAST - * reference frame. It corresponds to active_ref_idx[0] in VP9 code. - */ - uint32_t ref_last_idx : 3; - - /** \brief Specifies the Sign Bias of the LAST reference frame. - * It corresponds to ref_frame_sign_bias[LAST_FRAME] in VP9 code. - */ - uint32_t ref_last_sign_bias : 1; - - /** \brief GOLDEN Reference Frame index - * Specifies the index to RefFrameList[] which points to the Golden - * reference frame. It corresponds to active_ref_idx[1] in VP9 code. - */ - uint32_t ref_gf_idx : 3; - - /** \brief Specifies the Sign Bias of the GOLDEN reference frame. - * It corresponds to ref_frame_sign_bias[GOLDEN_FRAME] in VP9 code. - */ - uint32_t ref_gf_sign_bias : 1; - - /** \brief Alternate Reference Frame index - * Specifies the index to RefFrameList[] which points to the Alternate - * reference frame. It corresponds to active_ref_idx[2] in VP9 code. - */ - uint32_t ref_arf_idx : 3; - - /** \brief Specifies the Sign Bias of the ALTERNATE reference frame. - * It corresponds to ref_frame_sign_bias[ALTREF_FRAME] in VP9 code. - */ - uint32_t ref_arf_sign_bias : 1; - - /* The temporal id the frame belongs to */ - uint32_t temporal_id : 8; - - uint32_t reserved : 5; - } bits; - uint32_t value; - } ref_flags; - - union { - struct { - /** - * Indicates if the current frame is a key frame or not. - * Corresponds to the same VP9 syntax element in frame tag. - */ - uint32_t frame_type : 1; - - /** \brief show_frame - * 0: current frame is not for display - * 1: current frame is for display - */ - uint32_t show_frame : 1; - - /** - * The following fields correspond to the same VP9 syntax elements - * in the frame header. - */ - uint32_t error_resilient_mode : 1; - - /** \brief Indicate intra-only for inter pictures. - * Must be 0 for key frames. - * 0: inter frame use both intra and inter blocks - * 1: inter frame use only intra blocks. - */ - uint32_t intra_only : 1; - - /** \brief Indicate high precision mode for Motion Vector prediction - * 0: normal mode - * 1: high precision mode - */ - uint32_t allow_high_precision_mv : 1; - - /** \brief Motion Compensation Filter type - * 0: eight-tap (only this mode is supported now.) - * 1: eight-tap-smooth - * 2: eight-tap-sharp - * 3: bilinear - * 4: switchable - */ - uint32_t mcomp_filter_type : 3; - uint32_t frame_parallel_decoding_mode : 1; - uint32_t reset_frame_context : 2; - uint32_t refresh_frame_context : 1; - uint32_t frame_context_idx : 2; - uint32_t segmentation_enabled : 1; - - /* corresponds to variable temporal_update in VP9 code. - * Indicates whether Segment ID is from bitstream or from previous - * frame. - * 0: Segment ID from bitstream - * 1: Segment ID from previous frame - */ - uint32_t segmentation_temporal_update : 1; - - /* corresponds to variable update_mb_segmentation_map in VP9 code. - * Indicates how hardware determines segmentation ID - * 0: intra block - segment id is 0; - * inter block - segment id from previous frame - * 1: intra block - segment id from bitstream (app or GPU decides) - * inter block - depends on segmentation_temporal_update - */ - uint32_t segmentation_update_map : 1; - - /** \brief Specifies if the picture is coded in lossless mode. - * - * lossless_mode = base_qindex == 0 && y_dc_delta_q == 0 \ - * && uv_dc_delta_q == 0 && uv_ac_delta_q == 0; - * Where base_qindex, y_dc_delta_q, uv_dc_delta_q and uv_ac_delta_q - * are all variables in VP9 code. - * - * When enabled, tx_mode needs to be set to 4x4 only and all - * tu_size in CU record set to 4x4 for entire frame. - * Software also has to program such that final_qindex=0 and - * final_filter_level=0 following the Quant Scale and - * Filter Level Table in Segmentation State section. - * Hardware forces Hadamard Tx when this bit is set. - * When lossless_mode is on, BRC has to be turned off. - * 0: normal mode - * 1: lossless mode - */ - uint32_t lossless_mode : 1; - - /** \brief MV prediction mode. Corresponds to VP9 variable with same name. - * comp_prediction_mode = 0: single prediction ony, - * comp_prediction_mode = 1: compound prediction, - * comp_prediction_mode = 2: hybrid prediction - * - * Not mandatory. App may suggest the setting based on power or - * performance. Kernal may use it as a guildline and decide the proper - * setting on its own. - */ - uint32_t comp_prediction_mode : 2; - - /** \brief Indicate how segmentation is specified - * 0 application specifies segmentation partitioning and - * relevant parameters. - * 1 GPU may decide on segmentation. If application already - * provides segmentation information, GPU may choose to - * honor it and further split into more levels if possible. - */ - uint32_t auto_segmentation : 1; - - /** \brief Indicate super frame syntax should be inserted - * 0 current frame is not encapsulated in super frame structure - * 1 current fame is to be encapsulated in super frame structure. - * super frame index syntax will be inserted by encoder at - * the end of current frame. - */ - uint32_t super_frame_flag : 1; - - uint32_t reserved : 10; - } bits; - uint32_t value; - } pic_flags; - - /** \brief indicate which frames in DPB should be refreshed. - * same syntax and semantic as in VP9 code. - */ - uint8_t refresh_frame_flags; - - /** \brief Base Q index in the VP9 term. - * Added with per segment delta Q index to get Q index of Luma AC. - */ - uint8_t luma_ac_qindex; - - /** - * Q index delta from base Q index in the VP9 term for Luma DC. - */ - int8_t luma_dc_qindex_delta; - - /** - * Q index delta from base Q index in the VP9 term for Chroma AC. - */ - int8_t chroma_ac_qindex_delta; - - /** - * Q index delta from base Q index in the VP9 term for Chroma DC. - */ - int8_t chroma_dc_qindex_delta; - - /** \brief filter level - * Corresponds to the same VP9 syntax element in frame header. - */ - uint8_t filter_level; - - /** - * Controls the deblocking filter sensitivity. - * Corresponds to the same VP9 syntax element in frame header. - */ - uint8_t sharpness_level; - - /** \brief Loop filter level reference delta values. - * Contains a list of 4 delta values for reference frame based block-level - * loop filter adjustment. - * If no update, set to 0. - * value range [-63..63] - */ - int8_t ref_lf_delta[4]; - - /** \brief Loop filter level mode delta values. - * Contains a list of 4 delta values for coding mode based MB-level loop - * filter adjustment. - * If no update, set to 0. - * value range [-63..63] - */ - int8_t mode_lf_delta[2]; - - /** - * Offset from starting position of output bitstream in bits where - * ref_lf_delta[] should be inserted. This offset should cover any metadata - * ahead of uncompressed header in inserted bit stream buffer (the offset - * should be same as that for final output bitstream buffer). - * - * In BRC mode, always insert ref_lf_delta[] (This implies uncompressed - * header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1). - */ - uint16_t bit_offset_ref_lf_delta; - - /** - * Offset from starting position of output bitstream in bits where - * mode_lf_delta[] should be inserted. - * - * In BRC mode, always insert mode_lf_delta[] (This implies uncompressed - * header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1). - */ - uint16_t bit_offset_mode_lf_delta; - - /** - * Offset from starting position of output bitstream in bits where (loop) - * filter_level should be inserted. - */ - uint16_t bit_offset_lf_level; - - /** - * Offset from starting position of output bitstream in bits where - * Base Qindex should be inserted. - */ - uint16_t bit_offset_qindex; - - /** - * Offset from starting position of output bitstream in bits where - * First Partition Size should be inserted. - */ - uint16_t bit_offset_first_partition_size; - - /** - * Offset from starting position of output bitstream in bits where - * segmentation_enabled is located in bitstream. When auto_segmentation - * is enabled, GPU uses this offset to locate and update the - * segmentation related information. - */ - uint16_t bit_offset_segmentation; - - /** \brief length in bit of segmentation portion from the location - * in bit stream where segmentation_enabled syntax is coded. - * When auto_segmentation is enabled, GPU uses this bit size to locate - * and update the information after segmentation. - */ - uint16_t bit_size_segmentation; - - - /** \brief log2 of number of tile rows - * Corresponds to the same VP9 syntax element in frame header. - * value range [0..2] - */ - uint8_t log2_tile_rows; - - /** \brief log2 of number of tile columns - * Corresponds to the same VP9 syntax element in frame header. - * value range [0..6] - */ - uint8_t log2_tile_columns; - - /** \brief indicate frame-skip happens - * Application may choose to drop/skip one or mulitple encoded frames or - * to-be-encoded frame due to various reasons such as insufficient - * bandwidth. - * Application uses the following three flags to inform GPU about frame-skip. - * - * value range of skip_frame_flag: [0..2] - * 0 - encode as normal, no skip; - * 1 - one or more frames were skipped by application prior to the - * current frame. Encode the current frame as normal. The driver - * will pass the number_skip_frames and skip_frames_size - * to bit rate control for adjustment. - * 2 - the current frame is to be skipped. Do not encode it but encrypt - * the packed header contents. This is for the secure encoding case - * where application generates a frame of all skipped blocks. - * The packed header will contain the skipped frame. - */ - uint8_t skip_frame_flag; - - /** \brief The number of frames skipped prior to the current frame. - * It includes only the skipped frames that were not counted before, - * and does not include the frame with skip_frame_flag == 2. - * Valid when skip_frame_flag = 1. - */ - uint8_t number_skip_frames; - - /** \brief When skip_frame_flag = 1, the size of the skipped frames in bits. - * It includes only the skipped frames that were not counted before, - * and does not include the frame size with skip_frame_flag = 2. - * When skip_frame_flag = 2, it is the size of the current skipped frame - * that is to be encrypted. - */ - uint32_t skip_frames_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAEncPictureParameterBufferVP9; - - -/** - * \brief Per segment parameters - */ -typedef struct _VAEncSegParamVP9 { - union { - struct { - /** \brief Indicates if per segment reference frame indicator is enabled. - * Corresponding to variable feature_enabled when - * j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code. - */ - uint8_t segment_reference_enabled : 1; - - /** \brief Specifies per segment reference indication. - * 0: reserved - * 1: Last ref - * 2: golden - * 3: altref - * Value can be derived from variable data when - * j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code. - * value range: [0..3] - */ - uint8_t segment_reference : 2; - - /** \brief Indicates if per segment skip mode is enabled. - * Corresponding to variable feature_enabled when - * j == SEG_LVL_SKIP in function setup_segmentation() VP9 code. - */ - uint8_t segment_reference_skipped : 1; - - uint8_t reserved : 4; - - } bits; - uint8_t value; - } seg_flags; - - /** \brief Specifies per segment Loop Filter Delta. - * Must be 0 when segmentation_enabled == 0. - * value range: [-63..63] - */ - int8_t segment_lf_level_delta; - - /** \brief Specifies per segment QIndex Delta. - * Must be 0 when segmentation_enabled == 0. - * value range: [-255..255] - */ - int16_t segment_qindex_delta; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSegParamVP9; - -/** - * Structure to convey all segment related information. - * If segmentation is disabled, this data structure is still required. - * In this case, only seg_data[0] contains valid data. - * This buffer is sent once per frame. - * - * The buffer is created with VABufferType VAQMatrixBufferType. - * - */ -typedef struct _VAEncMiscParameterTypeVP9PerSegmantParam { - /** - * Parameters for 8 segments. - */ - VAEncSegParamVP9 seg_data[8]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterTypeVP9PerSegmantParam; - - -/** - * \brief VP9 Block Segmentation ID Buffer - * - * The application provides a buffer of VAEncMacroblockMapBufferType containing - * the initial segmentation id for each 8x8 block, one byte each, in raster scan order. - * Rate control may reassign it. For example, a 640x480 video, the buffer has 4800 entries. - * The value of each entry should be in the range [0..7], inclusive. - * If segmentation is not enabled, the application does not need to provide it. - */ - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_VP9_H */ diff --git a/prebuilts/arm/include/va/va_fei.h b/prebuilts/arm/include/va/va_fei.h deleted file mode 100644 index 5563cc9..0000000 --- a/prebuilts/arm/include/va/va_fei.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (c) 2007-2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_fei.h - * \brief The FEI encoding common API - */ - -#ifndef VA_FEI_H -#define VA_FEI_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_fei FEI encoding common API - * - * @{ - */ - -/** - * \brief FEI specific attribute definitions - */ -/** @name Attribute values for VAConfigAttribFEIFunctionType - * - * This is only for VAEntrypointFEI - * The desired type should be passed to driver when creating the configuration. - * If VA_FEI_FUNCTION_ENC_PAK is set, VA_FEI_FUNCTION_ENC and VA_FEI_FUNCTION_PAK - * will be ignored if set also. Combination of VA_FEI_FUNCTION_ENC and VA_FEI_FUNCTION_PAK - * is not valid. If VA_FEI_FUNCTION_ENC is set, there will be no bitstream output. - * If VA_FEI_FUNCTION_PAK is set, two extra input buffers for PAK are needed: - * VAEncFEIMVBufferType and VAEncFEIMBCodeBufferType. - * VA_FEI_FUNCTION_ENC_PAK is recommended for best performance. - * - **/ -/**@{*/ -/** \brief ENC only is supported */ -#define VA_FEI_FUNCTION_ENC 0x00000001 -/** \brief PAK only is supported */ -#define VA_FEI_FUNCTION_PAK 0x00000002 -/** \brief ENC_PAK is supported */ -#define VA_FEI_FUNCTION_ENC_PAK 0x00000004 - -/**@}*/ - -/** \brief Attribute value for VAConfigAttribStats */ -typedef union _VAConfigAttribValStats { - struct { - /** \brief Max number of past reference frames that are supported. */ - uint32_t max_num_past_references : 4; - /** \brief Max number of future reference frames that are supported. */ - uint32_t max_num_future_references : 4; - /** \brief Number of supported output buffers for VAStatsStatisticsParameter->outputs */ - uint32_t num_outputs : 3; - /** \brief Interlaced content is supported */ - uint32_t interlaced : 1; - uint32_t reserved : 20; - } bits; - uint32_t value; -} VAConfigAttribValStats; - -typedef struct _VAPictureStats { - VASurfaceID picture_id; - /* - * see flags below. - */ - uint32_t flags; -} VAPictureStats; -/* flags in VAPictureStats could be one of the following */ -#define VA_PICTURE_STATS_INVALID 0x00000001 -#define VA_PICTURE_STATS_PROGRESSIVE 0x00000000 -#define VA_PICTURE_STATS_TOP_FIELD 0x00000002 -#define VA_PICTURE_STATS_BOTTOM_FIELD 0x00000004 -/** \brief picutre surface content updated indicator. - * The picture surface content is updated, it means temporary buffer like downscaled pixel data in driver - * internal needs be forced freshing - **/ -#define VA_PICTURE_STATS_CONTENT_UPDATED 0x00000010 - -/** \brief Motion Vector and Statistics frame level controls. - * common part VAStatsStatisticsParameterBufferType for a MB or CTB - **/ -typedef struct _VAStatsStatisticsParameter { - /** \brief Source surface ID. */ - VAPictureStats input; - - /** \brief Past reference surface ID pointer. */ - VAPictureStats *past_references; - - /** \brief Past reference surface number */ - uint32_t num_past_references; - - /** \brief Statistics output for past reference surface. - * Only enabling statistics output for past reference picture when *past_ref_stat_buf is a valid - * VABufferID, it is needed in case app wants statistics data of both reference and current pictures - * in very special use cases for better performance. - * The output layout is defined by VAStatsStatisticsBufferType(for progressive and top field of - * interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case), only - * pixel_average_16x16/pixel_average_8x8 and variance_16x16/variance_8x8 data are valid. - **/ - VABufferID *past_ref_stat_buf; - - /** \brief Future reference surface ID pointer. */ - VAPictureStats *future_references; - - /** \brief Future reference surface number */ - uint32_t num_future_references; - - /** \brief Statistics output for future reference surface. - * Only enabling statistics output for future reference picture when *past_ref_stat_buf is a valid - * VABufferID, it is needed in case app wants statistics data of both reference and current pictures - * in very special use cases for better performance. - * The output layout is defined by VAStatsStatisticsBufferType(for progressive and top field of - * interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case), only - * pixel_average_16x16/pixel_average_8x8 and variance_16x16/variance_8x8 data are valid. - **/ - VABufferID *future_ref_stat_buf; - - /** \brief ID of the output buffer. - * The number of outputs is determined by below DisableMVOutput and DisableStatisticsOutput. - * The output layout is defined by VAStatsMVBufferType, VAStatsStatisticsBufferType(for progressive and - * top field of interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case). - **/ - VABufferID *outputs; - - /** \brief MV predictor. It is valid only when mv_predictor_ctrl is not 0. - * Each block has a pair of MVs, one for past and one for future reference - * as defined by VAMotionVector. The block is in raster scan order. - * Buffer size shall not be less than the number of blocks multiplied by sizeof(VAMotionVector). - **/ - VABufferID mv_predictor; - - /** \brief QP input buffer. It is valid only when mb_qp is set to 1. - * The data in this buffer correspond to the input source. - * One QP per MB or CTB block in raster scan order, each QP is a signed char (8-bit) value. - **/ - VABufferID qp; -} VAStatsStatisticsParameter; - -#ifdef __cplusplus -} -#endif - -#endif /* VA_FEI_H */ diff --git a/prebuilts/arm/include/va/va_fei_h264.h b/prebuilts/arm/include/va/va_fei_h264.h deleted file mode 100644 index ddb8e8c..0000000 --- a/prebuilts/arm/include/va/va_fei_h264.h +++ /dev/null @@ -1,504 +0,0 @@ -/* - * Copyright (c) 2007-2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_fei_h264.h - * \brief The FEI encoding H264 special API - */ - -#ifndef VA_FEI_H264_H -#define VA_FEI_H264_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "va_fei.h" - -/** - * \defgroup api_fei_h264 H.264 FEI encoding API - * - * @{ - */ - -/** \brief FEI frame level control buffer for H.264 */ -typedef struct _VAEncMiscParameterFEIFrameControlH264 { - uint32_t function; /* one of the VAConfigAttribFEIFunctionType values */ - /** \brief MB (16x16) control input buffer. It is valid only when (mb_input | mb_size_ctrl) - * is set to 1. The data in this buffer correspond to the input source. 16x16 MB is in raster scan order, - * each MB control data structure is defined by VAEncFEIMBControlH264. - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMBControlH264). - * Note: if mb_qp is set, VAEncQPBufferH264 is expected. - */ - VABufferID mb_ctrl; - /** \brief distortion output of MB ENC or ENC_PAK. - * Each 16x16 block has one distortion data with VAEncFEIDistortionH264 layout - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIDistortionH264). - */ - VABufferID distortion; - /** \brief MVs data output of MB ENC. - * Each 16x16 block has one MVs data with layout VAMotionVector - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAMotionVector) * 16. - */ - VABufferID mv_data; - /** \brief MBCode data output of MB ENC. - * Each 16x16 block has one MB Code data with layout VAEncFEIMBCodeH264 - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMBCodeH264). - */ - VABufferID mb_code_data; - /** \brief QP input buffer with layout VAEncQPBufferH264. It is valid only when mb_qp is set to 1. - * The data in this buffer correspond to the input source. - * One QP per 16x16 block in raster scan order, each QP is a signed char (8-bit) value. - **/ - VABufferID qp; - /** \brief MV predictor. It is valid only when mv_predictor_enable is set to 1. - * Each 16x16 block has one or more pair of motion vectors and the corresponding - * reference indexes as defined by VAEncFEIMVPredictorH264. 16x16 block is in raster scan order. - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMVPredictorH264). */ - VABufferID mv_predictor; - - /** \brief number of MV predictors. It must not be greater than maximum supported MV predictor. */ - uint32_t num_mv_predictors_l0 : 16; - uint32_t num_mv_predictors_l1 : 16; - - /** \brief motion search method definition - * 0: default value, diamond search - * 1: full search - * 2: diamond search - **/ - uint32_t search_path : 8; - /** \brief maximum number of Search Units, valid range is [1, 63] - * 0 is treated as 1. reference search locations are grouped in a predefined pattern, - * and all locations within the same group must be either all are chosen or all are skipped. - * These predefined groups are called search unit (SU).*/ - uint32_t len_sp : 8; - uint32_t reserved0 : 16; - /** \brief defines the bit-mask for disabling sub-partition - * The lower 4 bits are for the major partitions (sub-macroblock) and the higher 3 bits for minor partitions (with sub-partition for 4x(8x8) sub-macroblocks. - * xxxxxx1 : 16x16 sub-macroblock disabled - * xxxxx1x : 2x(16x8) sub-macroblock within 16x16 disabled - * xxxx1xx : 2x(8x16) sub-macroblock within 16x16 disabled - * xxx1xxx : 1x(8x8) sub-partition for 4x(8x8) within 16x16 disabled - * xx1xxxx : 2x(8x4) sub-partition for 4x(8x8) within 16x16 disabled - * x1xxxxx : 2x(4x8) sub-partition for 4x(8x8) within 16x16 disabled - * 1xxxxxx : 4x(4x4) sub-partition for 4x(8x8) within 16x16 disabled - * 1111111 : Invalid - * 0000000 : default value */ - uint32_t sub_mb_part_mask : 7; - /** specifies which Luma Intra partition is enabled/disabled for intra mode decision. - * xxxx1: luma_intra_16x16 disabled - * xxx1x: luma_intra_8x8 disabled - * xx1xx: luma_intra_4x4 disabled - * xx111: intra prediction is disabled */ - uint32_t intra_part_mask : 5; - /** when set to 1, neighbor MV will be used as predictor; when set to 0, no neighbor MV will be used as predictor.*/ - uint32_t multi_pred_l0 : 1; - /** when set to 1, neighbor MV will be used as predictor; when set to 0, no neighbor MV will be used as predictor.*/ - uint32_t multi_pred_l1 : 1; - /**defines the half/quarter pel modes. The mode is inclusive, ie., higher precision mode samples lower precision locations. - * 00b: integer mode searching - * 01b: half-pel mode searching - * 10b: reserved - * 11b: quarter-pel mode searching */ - uint32_t sub_pel_mode : 2; - /** specifies distortion measure adjustments used for the inter motion search SAD comparison. - * 00b: none - * 10b: Haar transform adjusted*/ - uint32_t inter_sad : 2; - /** specifies distortion measure adjustments used for the intra motion search SAD comparison. - * 00b: none - * 10b: Haar transform adjusted*/ - uint32_t intra_sad : 2; - /** specifies if the output distortion is the raw distortion or cost adjusted distortion. - * 0: Raw Distortion without Cost - * 1: Distortion with added Cost */ - uint32_t distortion_type : 1; - /** when set to 1, enables the additional calls on Fraction & Bidirectional Refinement*/ - uint32_t repartition_check_enable : 1; - /** defines whether adaptive searching is enabled for IME(Integer Motion Estimation). - * 0: disable - * 1: enable */ - uint32_t adaptive_search : 1; - /** enables using the motion vector as an extra predictor provided by the host. If it is set, - * host needs to provide a buffer with motion vectors and the associated reference index for - * each 16x16 block as defined . The host can call processing function to get motion vectors and use as predictor. - * 0: MV predictor disabled - * 1: MV predictor enabled */ - uint32_t mv_predictor_enable : 1; - /** enables using the QP buffer to set the QP for each block*/ - uint32_t mb_qp : 1; - /** enable mb_ctrl buffer to handle MB*/ - uint32_t mb_input : 1; - /** when this flag is set, mb_ctrl must be set too and a buffer with per MB input - * needs to be provided and MaxSizeInWord and */ - uint32_t mb_size_ctrl : 1; - /** when this flag is set, extra distortion between the current MB and co-located MB is provided. - * Extra distortion output has performance impact, set it only when it is needed.*/ - uint32_t colocated_mb_distortion : 1; - uint32_t reserved1 : 4; - - /** \brief motion search window(ref_width * ref_height) */ - uint32_t ref_width : 8; - uint32_t ref_height : 8; - /** \brief predefined motion search windows. If selected, len_sp, window(ref_width * ref_eight) - * and search_path setting are ignored. - * 0: not use predefined search window - * 1: Tiny, len_sp=4, 24x24 window and diamond search - * 2: Small, len_sp=9, 28x28 window and diamond search - * 3: Diamond, len_sp=16, 48x40 window and diamond search - * 4: Large Diamond, len_sp=32, 48x40 window and diamond search - * 5: Exhaustive, len_sp=48, 48x40 window and full search - * 6: Extend Diamond, len_sp=16, 64x40 window and diamond search - * 7: Extend Large Diamond, len_sp=32, 64x40 window and diamond search - * 8: Extend Exhaustive, len_sp=48, 64x40 window and full search - **/ - uint32_t search_window : 4; - uint32_t reserved2 : 12; - - /** \brief max frame size control with multi passes QP setting */ - uint32_t max_frame_size; - /** \brief number of passes, every pass has different QP */ - uint32_t num_passes; - /** \brief delta QP list for every pass */ - uint8_t *delta_qp; - uint32_t reserved3[VA_PADDING_LOW]; -} VAEncMiscParameterFEIFrameControlH264; - -/** \brief FEI MB level control data structure */ -typedef struct _VAEncFEIMBControlH264 { - /** \brief when set, correposndent MB is coded as intra */ - uint32_t force_to_intra : 1; - /** \brief when set, correposndent MB is coded as skip */ - uint32_t force_to_skip : 1; - /** \brief specifies whether this macroblock should be coded as a non-skipped macroblock. */ - uint32_t force_to_nonskip : 1; - uint32_t enable_direct_bias_adjustment : 1; - uint32_t enable_motion_bias_adjustment : 1; - uint32_t ext_mv_cost_scaling_factor : 3; - uint32_t reserved0 : 24; - - uint32_t reserved1; - - uint32_t reserved2; - - uint32_t reserved3 : 16; - /** \brief when mb_size_ctrl is set, size here is used to budget accumulatively. Set to 0xFF if don't care. */ - uint32_t target_size_in_word : 8; - /** \brief specifies the max size of each MB */ - uint32_t max_size_in_word : 8; -} VAEncFEIMBControlH264; - - -/** \brief Application can use this definition as reference to allocate the buffer - * based on MaxNumPredictor returned from attribute VAConfigAttribFEIMVPredictors query. - **/ -typedef struct _VAEncFEIMVPredictorH264 { - /** \brief Reference index corresponding to the entry of RefPicList0 & RefPicList1 in VAEncSliceParameterBufferH264. - * Note that RefPicList0 & RefPicList1 needs to be the same for all slices. - * ref_idx_l0_x : index to RefPicList0; ref_idx_l1_x : index to RefPicList1; x : 0 - MaxNumPredictor. - **/ - struct { - uint8_t ref_idx_l0 : 4; - uint8_t ref_idx_l1 : 4; - } ref_idx[4]; /* index is predictor number */ - uint32_t reserved; - /** \brief MV. MaxNumPredictor must be the returned value from attribute VAConfigAttribFEIMVPredictors query. - * Even application doesn't use the maximum predictors, the VAFEIMVPredictorH264 structure size - * has to be defined as maximum so each MB can be at a fixed location. - * Note that 0x8000 must be used for correspondent intra block. - **/ - VAMotionVector mv[4]; /* MaxNumPredictor is 4 */ -} VAEncFEIMVPredictorH264; - -/** \brief FEI output */ -/** - * Motion vector output is per 4x4 block. For each 4x4 block there is a pair of MVs - * for RefPicList0 and RefPicList1 and each MV is 4 bytes including horizontal and vertical directions. - * Depending on Subblock partition, for the shape that is not 4x4, the MV is replicated - * so each 4x4 block has a pair of MVs. The 16x16 block has 32 MVs (128 bytes). - * 0x8000 is used for correspondent intra block. The 16x16 block is in raster scan order, - * within the 16x16 block, each 4x4 block MV is ordered as below in memory. - * The buffer size shall be greater than or equal to the number of 16x16 blocks multiplied by 128 bytes. - * Note that, when separate ENC and PAK is enabled, the exact layout of this buffer is needed for PAK input. - * App can reuse this buffer, or copy to a different buffer as PAK input. - * Layout is defined as Generic motion vector data structure VAMotionVector - * 16x16 Block - * ----------------------------------------- - * | 1 | 2 | 5 | 6 | - * ----------------------------------------- - * | 3 | 4 | 7 | 8 | - * ----------------------------------------- - * | 9 | 10 | 13 | 14 | - * ----------------------------------------- - * | 11 | 12 | 15 | 16 | - * ----------------------------------------- - **/ - -/** \brief VAEncFEIMBCodeH264 defines the data structure for VAEncFEIMBCodeBufferType per 16x16 MB block. - * it is output buffer of ENC and ENC_PAK modes, it's also input buffer of PAK mode. - * The 16x16 block is in raster scan order. Buffer size shall not be less than the number of 16x16 blocks - * multiplied by sizeof(VAEncFEIMBCodeH264). Note that, when separate ENC and PAK is enabled, - * the exact layout of this buffer is needed for PAK input. App can reuse this buffer, - * or copy to a different buffer as PAK input, reserved elements must not be modified when used as PAK input. - **/ -typedef struct _VAEncFEIMBCodeH264 { - //DWORD 0~2 - uint32_t reserved0[3]; - - //DWORD 3 - uint32_t inter_mb_mode : 2; - uint32_t mb_skip_flag : 1; - uint32_t reserved1 : 1; - uint32_t intra_mb_mode : 2; - uint32_t reserved2 : 1; - uint32_t field_mb_polarity_flag : 1; - uint32_t mb_type : 5; - uint32_t intra_mb_flag : 1; - uint32_t field_mb_flag : 1; - uint32_t transform8x8_flag : 1; - uint32_t reserved3 : 1; - uint32_t dc_block_coded_cr_flag : 1; - uint32_t dc_block_coded_cb_flag : 1; - uint32_t dc_block_coded_y_flag : 1; - uint32_t reserved4 : 12; - - //DWORD 4 - uint32_t horz_origin : 8; - uint32_t vert_origin : 8; - uint32_t cbp_y : 16; - - //DWORD 5 - uint32_t cbp_cb : 16; - uint32_t cbp_cr : 16; - - //DWORD 6 - uint32_t qp_prime_y : 8; - uint32_t reserved5 : 17; - uint32_t mb_skip_conv_disable : 1; - uint32_t is_last_mb : 1; - uint32_t enable_coefficient_clamp : 1; - uint32_t direct8x8_pattern : 4; - - //DWORD 7 8 and 9 - union { - /* Intra MBs */ - struct { - uint32_t luma_intra_pred_modes0 : 16; - uint32_t luma_intra_pred_modes1 : 16; - - uint32_t luma_intra_pred_modes2 : 16; - uint32_t luma_intra_pred_modes3 : 16; - - uint32_t chroma_intra_pred_mode : 2; - uint32_t intra_pred_avail_flag : 5; - uint32_t intra_pred_avail_flagF : 1; - uint32_t reserved6 : 24; - } intra_mb; - - /* Inter MBs */ - struct { - uint32_t sub_mb_shapes : 8; - uint32_t sub_mb_pred_modes : 8; - uint32_t reserved7 : 16; - - uint32_t ref_idx_l0_0 : 8; - uint32_t ref_idx_l0_1 : 8; - uint32_t ref_idx_l0_2 : 8; - uint32_t ref_idx_l0_3 : 8; - - uint32_t ref_idx_l1_0 : 8; - uint32_t ref_idx_l1_1 : 8; - uint32_t ref_idx_l1_2 : 8; - uint32_t ref_idx_l1_3 : 8; - } inter_mb; - } mb_mode; - - //DWORD 10 - uint32_t reserved8 : 16; - uint32_t target_size_in_word : 8; - uint32_t max_size_in_word : 8; - - //DWORD 11~14 - uint32_t reserved9[4]; - - //DWORD 15 - uint32_t reserved10; -} VAEncFEIMBCodeH264; // 64 bytes - -/** \brief VAEncFEIDistortionH264 defines the data structure for VAEncFEIDistortionBufferType per 16x16 MB block. - * It is output buffer of ENC and ENC_PAK modes, The 16x16 block is in raster scan order. - * Buffer size shall not be less than the number of 16x16 blocks multiple by sizeof(VAEncFEIDistortionH264). - **/ -typedef struct _VAEncFEIDistortionH264 { - /** \brief Inter-prediction-distortion associated with motion vector i (co-located with subblock_4x4_i). - * Its meaning is determined by sub-shape. It must be zero if the corresponding sub-shape is not chosen. - **/ - uint16_t inter_distortion[16]; - uint32_t best_inter_distortion : 16; - uint32_t best_intra_distortion : 16; - uint32_t colocated_mb_distortion : 16; - uint32_t reserved0 : 16; - uint32_t reserved1[2]; -} VAEncFEIDistortionH264; // 48 bytes - -/** \brief Motion Vector and Statistics frame level controls. - * VAStatsStatisticsParameterBufferType for H264 16x16 block - **/ -typedef struct _VAStatsStatisticsParameterH264 { - VAStatsStatisticsParameter stats_params; - - uint32_t frame_qp : 8; - /** \brief length of search path */ - uint32_t len_sp : 8; - /** \brief motion search method definition - * 0: default value, diamond search - * 1: full search - * 2: diamond search - **/ - uint32_t search_path : 8; - uint32_t reserved0 : 8; - - uint32_t sub_mb_part_mask : 7; - /** \brief sub pixel mode definition - * 00b: integer mode searching - * 01b: half-pel mode searching - * 10b: reserved - * 11b: quarter-pel mode searching - **/ - uint32_t sub_pel_mode : 2; - /** \brief distortion measure adjustment for inter search SAD comparison - * 00b: none - * 01b: reserved - * 10b: Haar transform adjusted - * 11b: reserved - **/ - uint32_t inter_sad : 2; - /** \brief distortion measure adjustment for intra search SAD comparison - * 00b: none - * 01b: reserved - * 10b: Haar transform adjusted - * 11b: reserved - **/ - uint32_t intra_sad : 2; - uint32_t adaptive_search : 1; - /** \brief indicate if future or/and past MV in mv_predictor buffer is valid. - * 0: MV predictor disabled - * 1: MV predictor enabled for past reference - * 2: MV predictor enabled for future reference - * 3: MV predictor enabled for both past and future references - **/ - uint32_t mv_predictor_ctrl : 3; - uint32_t mb_qp : 1; - /** \brief forward transform enable - * 0: disable - * 1: enable, needs frame_qp or mb_qp input for transform - **/ - uint32_t ft_enable : 1; - /** \brief luma intra mode partition mask - * xxxx1: luma_intra_16x16 disabled - * xxx1x: luma_intra_8x8 disabled - * xx1xx: luma_intra_4x4 disabled - * xx111: intra prediction is disabled - **/ - uint32_t intra_part_mask : 5; - uint32_t reserved1 : 8; - - /** \brief motion search window(ref_width * ref_height) */ - uint32_t ref_width : 8; - uint32_t ref_height : 8; - /** \brief predefined motion search windows. If selected, len_sp, window(ref_width * ref_eight) - * and search_path setting are ignored. - * 0: not use predefined search window - * 1: Tiny, len_sp=4, 24x24 window and diamond search - * 2: Small, len_sp=9, 28x28 window and diamond search - * 3: Diamond, len_sp=16, 48x40 window and diamond search - * 4: Large Diamond, len_sp=32, 48x40 window and diamond search - * 5: Exhaustive, len_sp=48, 48x40 window and full search - * 6: Extend Diamond, len_sp=16, 64x40 window and diamond search - * 7: Extend Large Diamond, len_sp=32, 64x40 window and diamond search - * 8: Extend Exhaustive, len_sp=48, 64x40 window and full search - **/ - uint32_t search_window : 4; - uint32_t reserved2 : 12; - - /** \brief MVOutput. When set to 1, MV output is NOT provided */ - uint32_t disable_mv_output : 1; - /** \brief StatisticsOutput. When set to 1, Statistics output is NOT provided. */ - uint32_t disable_statistics_output : 1; - /** \brief block 8x8 data enabling in statistics output */ - uint32_t enable_8x8_statistics : 1; - uint32_t reserved3 : 29; - uint32_t reserved4[2]; -} VAStatsStatisticsParameterH264; - -/** \brief VAStatsStatisticsH264. H264 Statistics buffer layout for VAStatsStatisticsBufferType - * and VAStatsStatisticsBottomFieldBufferType(for interlaced only). - * Statistics output is per 16x16 block. Data structure per 16x16 block is defined below. - * The 16x16 block is in raster scan order. The buffer size shall be greater than or equal to - * the number of 16x16 blocks multiplied by sizeof(VAStatsStatisticsH264). - **/ -typedef struct _VAStatsStatisticsH264 { - /** \brief past reference */ - uint32_t best_inter_distortion0 : 16; - uint32_t inter_mode0 : 16; - - /** \brief future reference */ - uint32_t best_inter_distortion1 : 16; - uint32_t inter_mode1 : 16; - - uint32_t best_intra_distortion : 16; - uint32_t intra_mode : 16; - - uint32_t num_non_zero_coef : 16; - uint32_t reserved0 : 16; - - uint32_t sum_coef; - - /** \brief DWORD 5 flat info **/ - uint32_t mb_is_flat : 1; - uint32_t reserved1 : 31; - - /** \brief DWORD 6 variance for block16x16**/ - uint32_t variance_16x16; - /** \brief DWORD 7 ~ 10, variance for block8x8 **/ - uint32_t variance_8x8[4]; - - /** \brief DWORD 11 pixel_average for block16x16 **/ - uint32_t pixel_average_16x16; - /** \brief DWORD 12 ~ 15, pixel_average for block8x8 **/ - uint32_t pixel_average_8x8[4]; -} VAStatsStatisticsH264; // 64 bytes - - -#ifdef __cplusplus -} -#endif - -#endif /* VA_FEI_H264_H */ diff --git a/prebuilts/arm/include/va/va_fei_hevc.h b/prebuilts/arm/include/va/va_fei_hevc.h deleted file mode 100644 index 6ba9047..0000000 --- a/prebuilts/arm/include/va/va_fei_hevc.h +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Copyright (c) 2007-2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_fei_hevc.h - * \brief The FEI encoding HEVC special API - */ - - -#ifndef __VA_FEI_HEVC_H__ -#define __VA_FEI_HEVC_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "va_fei.h" - -/** - * \defgroup api_fei_hevc HEVC FEI encoding API - * - * @{ - */ - -/** \brief FEI frame level control buffer for HEVC */ -typedef struct _VAEncMiscParameterFEIFrameControlHEVC { - /* one of the VAConfigAttribFEIFunctionType values */ - uint32_t function; - /** \brief CTB control input buffer. It is valid only when per_ctb_input - * is set to 1. The data in this buffer correspond to the input source. CTB is in raster scan order, - * each CTB control data structure is defined by VAEncFEICTBControlHEVC. - * Buffer size shall not be less than the number of CTBs multiplied by - * sizeof(VAEncFEICTBControlHEVC). - */ - VABufferID ctb_ctrl; - /** \brief CTB cmd per CTB data output of ENC - * it is reserved for CTB level information - * it should include CU split information and other CTB datas . - * Each CTB block has one CTB cmd data. - */ - VABufferID ctb_cmd; - /** \brief CU record data output of ENC - * it is reserved for CU level information - * it should include CU detail data. include mode,MV, reference etc. - * Each CTB block has one CU record data. - */ - VABufferID cu_record; - /** \brief distortion output of ENC or ENC_PAK. - * Each CTB has one distortion data with VAEncFEIDistortionHevc - * Buffer size shall not be less than the number of CTBs multiplied by - * sizeof(VAEncFEIDistortionHevc). - */ - VABufferID distortion; - /** \brief Qp input buffer. It is valid only when per_block_qp is set to 1. - * The data in this buffer correspond to the input source. - * One Qp per block block is in raster scan order, each Qp is a signed char (8-bit) value. - **/ - VABufferID qp; - /** \brief MV predictor. It is valid only when mv_predictor_input is set to non-zero. - * Each CTB block has one or more pair of motion vectors and the corresponding - * reference indexes as defined by VAEncFEIMVPredictorHEVC. 32x32 block is in raster scan order. - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMVPredictorHEVC). */ - VABufferID mv_predictor; - - /** \brief number of MV predictors L0 and L1. the maximum number of motion vector predictor for a 16x16, 32x32 or - * 64x64 block is four, it must not be greater than maximum supported MV predictor, - **/ - uint32_t num_mv_predictors_l0 : 16; - uint32_t num_mv_predictors_l1 : 16; - - /** \brief control parameters */ - uint32_t search_path : 8; - uint32_t len_sp : 8; - uint32_t reserved0 : 16; - - /** \brief multi pred l0/1 - * 0000: no internal MV predictor will be used - * 0001: spatial MV predictors - * 0100/1000: Reserved - **/ - uint32_t multi_pred_l0 : 4; - uint32_t multi_pred_l1 : 4; - /** \brief defines the motion vector precision, like integer/half/quarter pel. - * 00b: integer pel - * 01b: half-pel - * 10b: reserved - * 11b: quarter-pel - */ - uint32_t sub_pel_mode : 2; - uint32_t adaptive_search : 1; - /** \brief mv_predictor_input - * 000: MV predictor disabled - * 001: MV predictor enabled per 16x16 block - * 010: MV predictor enabled per 32x32 block - * 011: MV predictor enabled per 64x64 block - * 111: MV predictor enabled, block size can vary and is determined by BlockSize in motion vector predictor buffer - * 100/101/110: Reserved - **/ - uint32_t mv_predictor_input : 3; - /** \brief enables per CTB or CU qp */ - uint32_t per_block_qp : 1; - /** \brief enables the per CTB input , if 1, need ctb_ctrl to be a real surface ID*/ - uint32_t per_ctb_input : 1; - /** when this flag is set, extra distortion between current CTB and co-located CTB is provided. - * Extra distortion output has performance impact, set it only when it is needed */ - uint32_t colocated_ctb_distortion : 1; - /** brief specifies whether this CTB should be forced to split to remove Inter big LCU: do not check Inter 32x32 - * PUs. Every 32x32 LCU is split at least once. It can be used to improved performance. - * 0: ENC determined block type - * 1: Force to split - **/ - uint32_t force_lcu_split : 1; - /** \brief enables CU64x64 check */ - uint32_t enable_cu64_check : 1; - /** \brief enables CU64x64 asymmetric motion partition check */ - uint32_t enable_cu64_amp_check : 1; - /** \brief specifies if check the 64x64 merge candidate - * 0: after skip check, - * 1: only skip check for 64x64 - Default: 0. This field is used by LCU64 bi-directional. - **/ - uint32_t cu64_skip_check_only : 1; - uint32_t reserved1 : 11; - /** specifies the search region width in pixels. - * When bidirectional search is enabled, this applies to both search regions */ - uint32_t ref_width : 8; - /** specifies the reference region height in pixels. When bidirectional search is enabled, - * this applies to both search regions. */ - uint32_t ref_height : 8; - /** \brief search window similar for AVC - * defines predefined search windows. If it is selected, RefWidth, RefHeight, LenSP and SearchPath are ignored. - * 0 : not use predefined search window - * 1 : Tiny – (4 SUs) 24x24 window diamond search - * 2 : Small – (9 SUs) 28x28 window diamond search - * 3 : Diamond – (16 SUs) 48x40 window diamond search - * 4 : Large Diamond – (32 SUs) 48x40 window diamond search - * 5 : Exhaustive – 48x40 window full search - * 6 : (64 SUs) 64x64 window full search - * Note: option 1, 2, 3 and 4 are valid only when CAP parameter SearchWindow64Support is 0. - * And option 6 is valid only when SearchWindow64Support is 1.*/ - uint32_t search_window : 8; - /** \brief number of internal MV predictors for IME searches */ - uint32_t max_num_ime_search_center : 3; - /** \brief fast intra prediction enabling bit. It is used as a trade-off between speed and quality. - * The flag will be ignored if it's unsupported in the driver*/ - uint32_t fast_intra_mode : 1; - uint32_t reserved2 : 4; - - /** \brief specifies number of splits that encoder could be run concurrently - * 1: level 1, default value - * 2: level 2 - * 4: level 3 - **/ - uint32_t num_concurrent_enc_frame_partition : 8; - uint32_t reserved3 : 24; - - /** \brief max frame size control with multi passes QP setting */ - uint32_t max_frame_size; - /** \brief number of passes, every pass has different QP */ - uint32_t num_passes; - /** \brief delta QP list for every pass */ - uint8_t *delta_qp; - - uint32_t reserved4[2]; -} VAEncMiscParameterFEIFrameControlHEVC; - -/** \brief Application can use this definition as reference to allocate the buffer - * based on MaxNumPredictor returned from attribute VAConfigAttribFEIMVPredictors query. - * this buffer allocation is always based on 16x16 block even block size is indicated as 32x32 or 64x64, and buffer - * layout is always in 32x32 block raster scan order even block size is 16x16 or 64x64. If 32x32 block size is set, - * only the data in the first 16x16 block (block 0) is used for 32x32 block. If 64x64 block size is set - * MV layout is still in 32x32 raster scan order, the same as 32x32 and the first 16x16 - * block within each 32x32 block needs to have intended MV data (four 32x32 blocks will have the same MV data in the - * correspondent first 16x16 block). Data structure for each 16x16 block is defined as below (same as AVC except - * BlockSize/Reserved bits). - **/ -typedef struct _VAEncFEIMVPredictorHEVC { - /** \brief Feference index corresponding to the entry of RefPicList0 & RefPicList1 in slice header (final reference - * list). Note that RefPicList0 & RefPicList1 needs to be the same for all slices. - * Ref0xIndex – RefPicList0; Ref1xIndex – RefPicList1; x – 0 ~ MaxNumPredictor */ - struct { - uint8_t ref_idx_l0 : 4; - uint8_t ref_idx_l1 : 4; - } ref_idx[4]; /* index is predictor number */ - /** \brief Valid only when MVPredictor is set to 011 for HEVC. Only valid in the first 16x16 block. - * 00: MV predictor disabled for this 32x32 block - * 01: MV predictor enabled per 16x16 block for this 32x32 block - * 10: MV predictor enabled per 32x32 block, the rest of 16x16 block data within this 32x32 block are ignored - * 11: Reserved */ - uint32_t block_size : 2; - uint32_t reserved : 30; - - VAMotionVector mv[4]; /* MaxNumPredictor is 4 */ -} VAEncFEIMVPredictorHEVC; //40 bytes - -/** \brief FEI CTB level control data structure */ -typedef struct _VAEncFEICTBControlHEVC { - // DWORD 0 - uint32_t force_to_intra : 1; - uint32_t force_to_inter : 1; - uint32_t force_to_skip : 1; - /** \brief force all coeff to zero */ - uint32_t force_to_zero_coeff : 1; - uint32_t reserved0 : 28; - // DWORD 1 - uint32_t reserved1; - // DWORD 2 - uint32_t reserved2; - // DWORD 3 - uint32_t reserved3; -} VAEncFEICTBControlHEVC; - -/** \brief VAEncFEIDistortionHevc defines the data structure for VAEncFEIDistortionBufferType per CTB block. - * It is output buffer of ENC and ENC_PAK modes, The CTB block is in raster scan order. - * Buffer size shall not be less than the number of CTB blocks multiple by sizeof(VAEncFEIDistortionHevc). - **/ -typedef struct _VAEncFEIDistortionHevc { - /** best CTB distortion */ - uint32_t best_distortion; - /** only when colocated_ctb_distortion in VAEncMiscParameterFEIFrameControlHEVC is set */ - uint32_t colocated_ctb_distortion; -} VAEncFEIDistortionHevc; -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/prebuilts/arm/include/va/va_prot.h b/prebuilts/arm/include/va/va_prot.h deleted file mode 100644 index 5c59bb0..0000000 --- a/prebuilts/arm/include/va/va_prot.h +++ /dev/null @@ -1,515 +0,0 @@ -/* - * Copyright (c) 2020 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_prot.h - * \brief Protected content API. - * - * This file contains the \ref api_prot "Protected content API". - */ - -#ifndef VA_PROT_H -#define VA_PROT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_prot Protected content API - * - * @{ - * \section prolouge Prolouge - * Video streaming is ubiquitous and the support for video streaming is widely - * available across client open systems such as PCs, MACs, Chromebooks etc. and - * closed systems such as settop box, smart TVs, DVDs etc. By default, - * video streaming is not considered premium due to various constraints such as - * resolution, quality, production cost etc. but recently streaming of premium - * video(1080p+) has become norm. The streaming of premium video in open systems - * such as PCs, MACs, Chromebooks etc. makes video particularly susceptible to - * piracy (due to non-video playback usages of such systems) resulting in - * millions of dollars of loss to content creators. - * - * Digital Rights Management(DRM) has been proposed to stop piracy of premium - * video streams across a wide spectrum. There are some known open/closed DRM - * standards such as [Widevine by Google](https://www.widevine.com/), - * [PlayReady by Microsoft](https://www.microsoft.com/playready/), - * [FairPlay by Apple](https://developer.apple.com/streaming/fps/), - * [Merlin by Sony](https://www.marlin-community.com/), etc... Each DRM - * standard has its properties but all DRM standards support a common - * mechanism. This common mechanism involves cryptographical method for - * authenticating the client system, delivering bitstream and required - * cryptographic assets to client system and then cryptographically processing - * bitstream in client system. The cryptographic methods used in these steps - * are asymmetric such as RSA, DH etc. and symmetric such as AES CTR, CBC etc. - * encryption mechanisms. The authentication of client system, delivery of - * bitstream and cryptographic assets to client system is performed using - * asymmetric cryptographic mechanism while bitstream is encrypted and processed - * using symmetric cryptographic. In DRM world, authentication of client system, - * delivery of bitstream and required cryptographic assets to client system is - * loosely called provisioning and license acquisition while the processing of - * cryptographically secure bitstream is divided as video decryption/decoding, - * audio decryption/playback, video display. Besides DRM standards, Video/Audio - * bitstream encryption standard such as - * [Common Encryption Standard(CENC)](https://www.iso.org/standard/76597.html) - * provides a mechanism to normalize bitstream encryption methods across vendors - * while providing flexibility. - * - * \section DRM Pipeline - * Most DRM standards execute the following deep pipeline to playback - * contents on client systems from streaming servers - provisioning uses - * provisioning servers, licence aquisition uses license servers, video - * bitstream delivery uses content servers and decryption/decoding, audio - * bitstream delivery uses content servers and decyption/playback, - * display/playback. The system level HWDRM sequence diagram is following - - * ![HWDRM sequence diagram](https://user-images.githubusercontent.com/75039699/102427278-df284e80-3fc5-11eb-9a3e-129b5f6b567a.png) - * and HWDRM pipeline view is following - - * ![HWDRM pipeline view](https://user-images.githubusercontent.com/75039699/102427357-04b55800-3fc6-11eb-8b8c-f34fc44ec061.png) - * - * \section LibVA Protected Content APIs - * The LibVA Protected APIs are designed to enable DRM capabilities or - * facilitate isolated communicaiton with TEE. - * The VAEntrypointProtectedTEEComm is to define interfaces for Application - * to TEE direct communication to perform various TEE centric operations - * such as standalone provisioning of platform at factory or provisioning - * TEE for other usages, providing TEE capabilities etc. - * The VAEntrypointProtectedContent is to define interfaces for protected - * video playback using HWDRM. This entry point co-ordinates assets across - * TEE/GPU/Display for HWDRM playback. - * - * The difference between Protected Content and Protected TEE Communication - * is that Protected Content Entrypoint does not provide isolated entry - * point for TEE and invokes TEE only from HWDRM perspective. - * - * Protected Content Entrypoint - * The most of DRM standards execute following deep pipeline to playback - * contents on client systems from streaming servers - provisioning uses - * provisioning servers, licence aquisition uses license servers, video - * bitstream delivery uses content servers and decryption/decoding, audio - * bitstream delivery uses content servers and decyption/playback, - * display/playback. - * - * The Provisioning and License aquisition implementations are Independent - * Hardware Vendor (IHV) specific but most IHVs use some form of Trusted - * Execution Environment (TEE) to prepare client platform or system for DRM - * content playback. The provisioning operations use provisioning servers (as - * instructed in DRM standard) and client system TEE. The communication between - * provisioning servers and client system TEE uses asymmetic cryptographic - * mechanism. This step provides a way to establish root-of-trust between - * client system and streaming servers. Once root-of-trust is established then - * client system requests for license aquisition for a particular streaming - * title. The license aquisition involves communication between licensing - * servers and TEE using asymmetic cryptographic mechanism. At end of this step, - * client system TEE has required assets to decrypt/decode. Although these - * communication does not direcly involve video aspect of GPU but **facilitate - * GPU required assets to playback premium contents**. - * - * To support DRM standard requirements in playback pipeline, OSes and HWs - * incorporate various methods to protect full playback pipeline. These - * methods of protection could be SW based or HW based. The SW based protection - * mechanism of DRMs is called SWDRM while HW based protection mechanism is - * called HWDRM. There is no previous support in LibVA to support either DRM - * mechanism. - * - * For DRM capabilities, APIs inolve creation of protected session to - * communicate with TEE and then using these protected sessions to process - * video/audio data. The philophashy behind these API is to leverage existing - * LibVA infrastructure as much as possible. - * - * Note: TEE could be any secure HW device such as ME-FW or FPGA Secure - * Enclave or NPU Secure Enclave. There are 2 concepts here – TEE Type such - * as ME-FW or FPGA or NPU; TEE Type Client such as for AMT or HDCP or - * something else etc. - * - * \section description Detailed Description - * The Protected content API provides a general mechanism for opening - * protected session with TEE and if required then \ref priming GPU/Display. - * The behavior of protected session API depends on parameterization/ - * configuration of protected session. Just for TEE tasks, protected - * session is parameterized/configured as TEE Communication while for - * HWDRM, protected session is parameterized/confgured as Protected - * Content. - * - * TEE Communication Entrypoint - * With TEE Communication parameterization/configuration, client - * executes TEE workloads in TEE with TEE Communication protected - * session. - * - * Protected Content Entrypoint - * With Protected Content parameterization/configuration, client - * executes HWDRM playback workloads HW accelerating protected video - * content decryption/decoding with protected content session. - * - * Before calling vaCreateProtectedSession, VAConfigID is obtained using - * existing libva mechanism to determine configuration parameters of - * protected session. The VAConfigID is determined in this way so that - * Protected Session implementation aligns with existing libva implementation. - * After obtaining VAConfigID, Protected Session needs to be created but - * note this is a session and not a context. Refer VAProtectedSessionID - * for more details. - * - * Note:- Protected session represents session object that has all security - * information needed for Secure Enclave to operate certain operations. - * - * \subsection priming Priming - * Priming is used to refer various types of initializations. For example, - * if license acquisition is being performed then priming means that TEE is - * already provisioned aka TEE has some sort of "cryptographic" whitelist of - * servers that TEE will use to do license acquisition for video playback. If - * HWDRM video playback is being performed then priming means that HWDRM - * eco-system TEE/GPU/Display has proper keys to do proper video playback etc. - * - * Protected content API uses the following paradigm for protected content - * session: - * - \ref api_pc_caps - * - \ref api_pc_setup - * - \ref api_pc_exec - * - \ref api_pc_attach - * - * \subsection api_pc_caps Query for supported cipher mode, block size, mode - * - * Checking whether protected content is supported can be performed with - * vaQueryConfigEntrypoints() and the profile argument set to - * #VAProfileProtected. If protected content is supported, then the list of - * returned entry-points will include #VAEntrypointProtectedContent - * - * \code - * VAEntrypoint *entrypoints; - * int i, num_entrypoints, supportsProtectedContent = 0; - * - * num_entrypoints = vaMaxNumEntrypoints(); - * entrypoints = malloc(num_entrypoints * sizeof(entrypoints[0]); - * vaQueryConfigEntrypoints(va_dpy, VAProfileProtected, entrypoints, - * &num_entrypoints); - * - * for (i = 0; !supportsProtectedContent && i < num_entrypoints; i++) { - * if (entrypoints[i] == VAEntrypointProtectedContent) - * supportsProtectedContent = 1; - * } - * \endcode - * - * Then, the vaGetConfigAttributes() function is used to query the protected - * session capabilities. - * - * \code - * VAConfigAttrib attribs; - * attribs[0].type = VAConfigAttribProtectedContentCipherAlgorithm; - * attribs[1].type = VAConfigAttribProtectedContentCipherBlockSize; - * attribs[2].type = VAConfigAttribProtectedContentCipherMode; - * attribs[3].type = VAConfigAttribProtectedContentCipherSampleType; - * attribs[4].type = VAConfigAttribProtectedContentUsage; - * vaGetConfigAttributes(va_dpy, VAProfileProtected, - * VAEntrypointProtectedContent, attribs, 5); - * if ((attribs[1].value & VA_PC_CIPHER_AES) == 0) { - * // not find desired cipher algorithm - * assert(0); - * } - * if ((attribs[2].value & VA_PC_BLOCK_SIZE_128) == 0) { - * // not find desired block size - * assert(0); - * } - * if ((attribs[3].value & VA_PC_CIPHER_MODE_CBC) == 0) { - * // not find desired counter mode - * assert(0); - * } - * if ((attribs[4].value & VA_PC_SAMPLE_TYPE_SUBSAMPLE) == 0) { - * // not find desired sample type - * assert(0); - * } - * if ((attribs[5].value & VA_PC_USAGE_WIDEVINE) == 0) { - * // not find desired usage - * assert(0); - * } - * \endcode - * - * \subsection api_pc_setup Set up a protected content session - * - * TEE Communication Entrypoint - * The protected content session provides a TEE session that is used to extract - * TEE information. This information could be used to peform TEE operations. - * - * Protected Content Entrypoint - * The protected content session can be attached to VA decode/encode/vp context - * to do decryption/protection in the pipeline. - * Before creating a protected content session, it needs to create a config - * first via vaCreateConfig(). Then using this config id to create a protected - * content session via vaCreateProtectedSession(). - * - * The general control flow is demonstrated by the following pseudo-code: - * \code - * // Create config - * VAConfigID config_id; - * - * attribs[0].value = VA_PC_CIPHER_AES; - * attribs[1].value = VA_PC_BLOCK_SIZE_128; - * attribs[2].value = VA_PC_CIPHER_MODE_CBC; - * attribs[3].value = VA_PC_SAMPLE_TYPE_SUBSAMPLE; - * attribs[4].value = VA_PC_USAGE_WIDEVINE; - * va_status = vaCreateConfig(va_dpy, VAProfileProtected, - * VAEntrypointProtectedContent, attribs, 5, &config_id); - * CHECK_VASTATUS(va_status, "vaCreateConfig"); - * \endcode - * - * Once the config is set up, we can create protected content session via - vaCreateProtectedSession(). - * \code - * // Create a protected session - * VAProtectedSessionID crypto_session; - * - * va_status = vaCreateProtectedSession(va_dpy, config_id, &crypto_session); - * CHECK_VASTATUS(va_status, "vaCreateProtectedSession"); - * \endcode - * - * \subsection api_pc_exec TEE communication via vaProtectedSessionExecute() - * - * TEE Communication Entrypoint - * App needs to communicate with TEE to get TEE information or \ref priming - * "prime" TEE with information that will be utilized for future TEE - * operations/tasks. - * - * Protected Content Entrypoint - * Before starting decryption/encryption operation in GPU, app may need to - * communicate with TEE to get encrypted assets for \ref priming HWDRM pipeline - * for decryption. App need to call vaProtectedSessionExecute() to get this - * asset. The following pseudo-code demonstrates getting session assets via - * vaProtectedSessionExecute() as an example. - * - * In this example, the vaCreateBuffer is called with exec_buffer mainly becasue TEE - * Communication Entrypoint buffers are CPU bound and buffer size is small enough to - * have extra copy operation without impacting performance. - * - * \code - * uint32_t app_id = 0xFF; - * VABufferID buffer; - * VAProtectedSessionExecuteBuffer exec_buff = {0}; - * - * exec_buff.function_id = GET_SESSION_ID; - * exec_buff.input.data = nullptr; - * exec_buff.input.data_size = 0; - * exec_buff.output.data = &app_id; - * exec_buff.output.max_data_size = sizeof(app_id); - * va_status = vaCreateBuffer( - * va_dpy, - * crypto_session, - * (VABufferType) VAProtectedSessionExecuteBufferType, - * sizeof(exec_buff), - * 1, - * &exec_buff, - * &buffer); - * - * va_status = vaProtectedSessionExecute(va_dpy, crypto_session, buffer); - * - * vaDestroyBuffer(va_dpy, buffer); - * \endcode - * - * \subsection api_pc_attach Attach/Detach protected content session to the VA - * context which want to enable/disable decryption/protection - * - * Protected content session is attached to VA decode/encode/vp context to - * enable protected decoding/encoding/video processing per frame or entire - * stream. If protected session attached per frame then application has 2 - * options for decoding/encoding skip processing i.e. accomodating clear - * frames - 1. Application could do detach after each frame is processed - * to process clear frame 2. Application could remains attached to decode/ - * encode session but specify enryption byte length to 0. - * The video processing does not has option #2 mainly because API does - * not provide skip processing. - * - * \code - * vaAttachProtectedSession(va_dpy, decode_ctx, crypto_session); - * foreach (iteration) { - * vaBeginPicture(va_dpy, decode_ctx, surface); - * ... - * vaRenderPicture(va_dpy, decode_ctx, &buf_id1, 1); - * vaRenderPicture(va_dpy, decode_ctx, &buf_id2, 1); - * // Buffer holding encryption parameters, i.e. VAEncryptionParameterBufferType buffer - * vaRenderPicture(va_dpy, decode_ctx, &buf_id_enc_param, 1); - * ... - * vaEndPicture(va_dpy, decode_ctx); - * } - * vaDetachProtectedSession(va_dpy, decode_ctx); - * \endcode - * - * or it could be frame-by-frame attaching/detaching as following: - * - * \code - * foreach (iteration) { - * if (encrypted) - * vaAttachProtectedSession(va_dpy, decode_ctx, crypto_session); - - * vaBeginPicture(va_dpy, decode_ctx, surface); - * ... - * vaRenderPicture(va_dpy, decode_ctx, &buf_id1, 1); - * vaRenderPicture(va_dpy, decode_ctx, &buf_id2, 1); - * // Buffer holding encryption parameters, i.e. VAEncryptionParameterBufferType buffer - * vaRenderPicture(va_dpy, decode_ctx, &buf_id_enc_param, 1); - * ... - * vaEndPicture(va_dpy, decode_ctx); - * - * if (encrypted) - * vaDetachProtectedSession(va_dpy, decode_ctx); - - * // check encrypted variable for next frame - * } - * \endcode - */ - -/** - * ProtectedSessions and Contexts - * - * According to #VAContextID, Context represents a "virtual" video decode, - * encode or video processing pipeline. Surfaces are render targets for a given - * context. The data in the surfaces are not accessible to the client except if - * derived image is supported and the internal data format of the surface is - * implementation specific. Application can create a video decode, encode or - * processing context which represents a "virtualized" hardware device. - * - * Since Protected Session does not virtualize any HW device or build any - * pipeline but rather accessorize existing virtualized HW device or pipeline - * to operate in protected mode so we decided to create separate function. - * Beside this, a virtualized HW device or pipeline could own several protected - * sessions and operate in those protected modes without ever re-creating - * virtualization of HW device or re-building HW pipeline (an unique protected - * environment multiplexing capability in Intel HW). - * - * The returned protected_session represents a notion of Host and TEE clients - * while representing protection status in GPU and Display. - * - * Both contexts and protected sessions are identified by unique IDs and its - * implementation specific internals are kept opaque to the clients - */ -typedef VAGenericID VAProtectedSessionID; - -/** \brief TEE Execucte Function ID. */ -typedef enum _VA_TEE_EXEC_FUNCTION_ID { - VA_TEE_EXECUTE_FUNCTION_ID_PASS_THROUGH = 0x00000001, - VA_TEE_EXECUTE_FUNCTION_ID_GET_FIRMWARE_VERSION = 0x00000002, - -} VA_TEE_EXECUTE_FUNCTION_ID; - -/** \brief Input/Output buffer of VAProtectedSessionExecuteBuffer */ -typedef struct _VAProtectedSessionBuffer { - /* - * This is used when this buffer refer to output buffer. The maximum size of - * data that the driver can return in the output buffer. It is not used for - * input buffer. - */ - uint32_t max_data_size; - /* - * If it is used for input buffer, it is the size of the input data. If it is - * used for output buffer, it is the returns size of the output data written - * by the driver. - */ - uint32_t data_size; - /* - * data pointer of this buffer - */ - void *data; - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProtectedSessionBuffer; - -/** \brief Buffer for vaProtectedSessionExecute() */ -typedef struct _VAProtectedSessionExecuteBuffer { - /** \brief Specify the function to execute. It is IHV's implementation - * specific */ - uint32_t function_id; - /** \brief Input buffer */ - VAProtectedSessionBuffer input; - /** \brief Output buffer */ - VAProtectedSessionBuffer output; - /** \brief Return the result of this function. The status result is IHV's - * implementation specific */ - uint32_t status; - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProtectedSessionExecuteBuffer; - -/** - * \brief Create a protected session - * - * Create a protected session - * - * @param[in] dpy the VA display - * @param[in] config_id configuration for the protected session - * @param[out] protected_session created protected session id upon return - */ -VAStatus vaCreateProtectedSession(VADisplay dpy, VAConfigID config_id, - VAProtectedSessionID *protected_session); - -/** - * \brief Destroy a protected session - * - * Destroy a protected session - * - * @param[in] dpy the VA display - * @param[in] protected_session protected session to be destroyed - */ -VAStatus vaDestroyProtectedSession(VADisplay dpy, - VAProtectedSessionID protected_session); - -/** - * \brief Attach a protected content session to VA context - * - * Attach a protected content session to the context to enable - * decryption/protection - * - * @param[in] dpy the VA display - * @param[in] id the VA decode/encode/vp context - * @param[in] protected_session the protected session to attach - */ -VAStatus vaAttachProtectedSession(VADisplay dpy, VAGenericID id, - VAProtectedSessionID protected_session); - -/** - * \brief Detach the protected content session from the VA context - * - * Detach protected content session of the context to disable - * decryption/protection - * - * @param[in] dpy the VA display - * @param[in] id TEE client id to be detached - */ -VAStatus vaDetachProtectedSession(VADisplay dpy, VAGenericID id); - -/** - * \brief Execute provides a general mechanism for TEE client tasks execution. - * - * vaProtectedSessionExecute provides a mechanism for TEE clients to execute - * specific tasks. The implementation may differ between IHVs. - * This is a synchronous API. - * - * @param[in] dpy the VA display - * @param[in] protected_session the protected session - * @param[in,out] buf_id the VA buffer - */ -VAStatus vaProtectedSessionExecute(VADisplay dpy, - VAProtectedSessionID protected_session, - VABufferID buf_id); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_PROT_H */ diff --git a/prebuilts/arm/include/va/va_str.h b/prebuilts/arm/include/va/va_str.h deleted file mode 100644 index 1bfe583..0000000 --- a/prebuilts/arm/include/va/va_str.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - - -#ifndef _VA_STR_H_ -#define _VA_STR_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -const char *vaProfileStr(VAProfile profile); - -const char *vaEntrypointStr(VAEntrypoint entrypoint); - -const char *vaConfigAttribTypeStr(VAConfigAttribType configAttribType); - -const char *vaBufferTypeStr(VABufferType bufferType); - -const char *vaStatusStr(VAStatus status); - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_STR_H_ */ diff --git a/prebuilts/arm/include/va/va_tpi.h b/prebuilts/arm/include/va/va_tpi.h deleted file mode 100644 index fb165ad..0000000 --- a/prebuilts/arm/include/va/va_tpi.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef _VA_TPI_H_ -#define _VA_TPI_H_ - -#warning The APIs / data structures included in this file are deprecated - -#endif diff --git a/prebuilts/arm/include/va/va_version.h b/prebuilts/arm/include/va/va_version.h deleted file mode 100644 index ab2ec18..0000000 --- a/prebuilts/arm/include/va/va_version.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_VERSION_H -#define VA_VERSION_H - -/** - * VA_MAJOR_VERSION: - * - * The major version of VA-API (1, if %VA_VERSION is 1.2.3) - */ -#define VA_MAJOR_VERSION 1 - -/** - * VA_MINOR_VERSION: - * - * The minor version of VA-API (2, if %VA_VERSION is 1.2.3) - */ -#define VA_MINOR_VERSION 15 - -/** - * VA_MICRO_VERSION: - * - * The micro version of VA-API (3, if %VA_VERSION is 1.2.3) - */ -#define VA_MICRO_VERSION 0 - -/** - * VA_VERSION: - * - * The full version of VA-API, like 1.2.3 - */ -#define VA_VERSION 1.15.0 - -/** - * VA_VERSION_S: - * - * The full version of VA-API, in string form (suited for string - * concatenation) - */ -#define VA_VERSION_S "1.15.0" - -/** - * VA_VERSION_HEX: - * - * Numerically encoded version of VA-API, like 0x010203 - */ -#define VA_VERSION_HEX ((VA_MAJOR_VERSION << 24) | \ - (VA_MINOR_VERSION << 16) | \ - (VA_MICRO_VERSION << 8)) - -/** - * VA_CHECK_VERSION: - * @major: major version, like 1 in 1.2.3 - * @minor: minor version, like 2 in 1.2.3 - * @micro: micro version, like 3 in 1.2.3 - * - * Evaluates to %TRUE if the version of VA-API is greater than - * @major, @minor and @micro - */ -#define VA_CHECK_VERSION(major,minor,micro) \ - (VA_MAJOR_VERSION > (major) || \ - (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION > (minor)) || \ - (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION == (minor) && VA_MICRO_VERSION >= (micro))) - -#endif /* VA_VERSION_H */ diff --git a/prebuilts/arm/include/va/va_vpp.h b/prebuilts/arm/include/va/va_vpp.h deleted file mode 100644 index 193dc5f..0000000 --- a/prebuilts/arm/include/va/va_vpp.h +++ /dev/null @@ -1,1590 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_vpp.h - * \brief The video processing API - * - * This file contains the \ref api_vpp "Video processing API". - */ - -#ifndef VA_VPP_H -#define VA_VPP_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_vpp Video processing API - * - * @{ - * - * The video processing API uses the same paradigm as for decoding: - * - Query for supported filters; - * - Set up a video processing pipeline; - * - Send video processing parameters through VA buffers. - * - * \section api_vpp_caps Query for supported filters - * - * Checking whether video processing is supported can be performed - * with vaQueryConfigEntrypoints() and the profile argument set to - * #VAProfileNone. If video processing is supported, then the list of - * returned entry-points will include #VAEntrypointVideoProc. - * - * \code - * VAEntrypoint *entrypoints; - * int i, num_entrypoints, supportsVideoProcessing = 0; - * - * num_entrypoints = vaMaxNumEntrypoints(); - * entrypoints = malloc(num_entrypoints * sizeof(entrypoints[0]); - * vaQueryConfigEntrypoints(va_dpy, VAProfileNone, - * entrypoints, &num_entrypoints); - * - * for (i = 0; !supportsVideoProcessing && i < num_entrypoints; i++) { - * if (entrypoints[i] == VAEntrypointVideoProc) - * supportsVideoProcessing = 1; - * } - * \endcode - * - * Then, the vaQueryVideoProcFilters() function is used to query the - * list of video processing filters. - * - * \code - * VAProcFilterType filters[VAProcFilterCount]; - * unsigned int num_filters = VAProcFilterCount; - * - * // num_filters shall be initialized to the length of the array - * vaQueryVideoProcFilters(va_dpy, vpp_ctx, &filters, &num_filters); - * \endcode - * - * Finally, individual filter capabilities can be checked with - * vaQueryVideoProcFilterCaps(). - * - * \code - * VAProcFilterCap denoise_caps; - * unsigned int num_denoise_caps = 1; - * vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, - * VAProcFilterNoiseReduction, - * &denoise_caps, &num_denoise_caps - * ); - * - * VAProcFilterCapDeinterlacing deinterlacing_caps[VAProcDeinterlacingCount]; - * unsigned int num_deinterlacing_caps = VAProcDeinterlacingCount; - * vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, - * VAProcFilterDeinterlacing, - * &deinterlacing_caps, &num_deinterlacing_caps - * ); - * \endcode - * - * \section api_vpp_setup Set up a video processing pipeline - * - * A video processing pipeline buffer is created for each source - * surface we want to process. However, buffers holding filter - * parameters can be created once and for all. Rationale is to avoid - * multiple creation/destruction chains of filter buffers and also - * because filter parameters generally won't change frame after - * frame. e.g. this makes it possible to implement a checkerboard of - * videos where the same filters are applied to each video source. - * - * The general control flow is demonstrated by the following pseudo-code: - * \code - * // Create filters - * VABufferID denoise_filter, deint_filter; - * VABufferID filter_bufs[VAProcFilterCount]; - * unsigned int num_filter_bufs; - * - * for (i = 0; i < num_filters; i++) { - * switch (filters[i]) { - * case VAProcFilterNoiseReduction: { // Noise reduction filter - * VAProcFilterParameterBuffer denoise; - * denoise.type = VAProcFilterNoiseReduction; - * denoise.value = 0.5; - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcFilterParameterBufferType, sizeof(denoise), 1, - * &denoise, &denoise_filter - * ); - * filter_bufs[num_filter_bufs++] = denoise_filter; - * break; - * } - * - * case VAProcFilterDeinterlacing: // Motion-adaptive deinterlacing - * for (j = 0; j < num_deinterlacing_caps; j++) { - * VAProcFilterCapDeinterlacing * const cap = &deinterlacing_caps[j]; - * if (cap->type != VAProcDeinterlacingMotionAdaptive) - * continue; - * - * VAProcFilterParameterBufferDeinterlacing deint; - * deint.type = VAProcFilterDeinterlacing; - * deint.algorithm = VAProcDeinterlacingMotionAdaptive; - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcFilterParameterBufferType, sizeof(deint), 1, - * &deint, &deint_filter - * ); - * filter_bufs[num_filter_bufs++] = deint_filter; - * } - * } - * } - * \endcode - * - * Once the video processing pipeline is set up, the caller shall check the - * implied capabilities and requirements with vaQueryVideoProcPipelineCaps(). - * This function can be used to validate the number of reference frames are - * needed by the specified deinterlacing algorithm, the supported color - * primaries, etc. - * \code - * // Create filters - * VAProcPipelineCaps pipeline_caps; - * VASurfaceID *forward_references; - * unsigned int num_forward_references; - * VASurfaceID *backward_references; - * unsigned int num_backward_references; - * VAProcColorStandardType in_color_standards[VAProcColorStandardCount]; - * VAProcColorStandardType out_color_standards[VAProcColorStandardCount]; - * - * pipeline_caps.input_color_standards = NULL; - * pipeline_caps.num_input_color_standards = ARRAY_ELEMS(in_color_standards); - * pipeline_caps.output_color_standards = NULL; - * pipeline_caps.num_output_color_standards = ARRAY_ELEMS(out_color_standards); - * vaQueryVideoProcPipelineCaps(va_dpy, vpp_ctx, - * filter_bufs, num_filter_bufs, - * &pipeline_caps - * ); - * - * num_forward_references = pipeline_caps.num_forward_references; - * forward_references = - * malloc(num__forward_references * sizeof(VASurfaceID)); - * num_backward_references = pipeline_caps.num_backward_references; - * backward_references = - * malloc(num_backward_references * sizeof(VASurfaceID)); - * \endcode - * - * \section api_vpp_submit Send video processing parameters through VA buffers - * - * Video processing pipeline parameters are submitted for each source - * surface to process. Video filter parameters can also change, per-surface. - * e.g. the list of reference frames used for deinterlacing. - * - * \code - * foreach (iteration) { - * vaBeginPicture(va_dpy, vpp_ctx, vpp_surface); - * foreach (surface) { - * VARectangle output_region; - * VABufferID pipeline_buf; - * VAProcPipelineParameterBuffer *pipeline_param; - * - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcPipelineParameterBuffer, sizeof(*pipeline_param), 1, - * NULL, &pipeline_buf - * ); - * - * // Setup output region for this surface - * // e.g. upper left corner for the first surface - * output_region.x = BORDER; - * output_region.y = BORDER; - * output_region.width = - * (vpp_surface_width - (Nx_surfaces + 1) * BORDER) / Nx_surfaces; - * output_region.height = - * (vpp_surface_height - (Ny_surfaces + 1) * BORDER) / Ny_surfaces; - * - * vaMapBuffer(va_dpy, pipeline_buf, &pipeline_param); - * pipeline_param->surface = surface; - * pipeline_param->surface_region = NULL; - * pipeline_param->output_region = &output_region; - * pipeline_param->output_background_color = 0; - * if (first surface to render) - * pipeline_param->output_background_color = 0xff000000; // black - * pipeline_param->filter_flags = VA_FILTER_SCALING_HQ; - * pipeline_param->filters = filter_bufs; - * pipeline_param->num_filters = num_filter_bufs; - * vaUnmapBuffer(va_dpy, pipeline_buf); - * - * // Update reference frames for deinterlacing, if necessary - * pipeline_param->forward_references = forward_references; - * pipeline_param->num_forward_references = num_forward_references_used; - * pipeline_param->backward_references = backward_references; - * pipeline_param->num_backward_references = num_bacward_references_used; - * - * // Apply filters - * vaRenderPicture(va_dpy, vpp_ctx, &pipeline_buf, 1); - * } - * vaEndPicture(va_dpy, vpp_ctx); - * } - * \endcode - */ - -/** \brief Video filter types. */ -typedef enum _VAProcFilterType { - VAProcFilterNone = 0, - /** \brief Noise reduction filter. */ - VAProcFilterNoiseReduction, - /** \brief Deinterlacing filter. */ - VAProcFilterDeinterlacing, - /** \brief Sharpening filter. */ - VAProcFilterSharpening, - /** \brief Color balance parameters. */ - VAProcFilterColorBalance, - /** \brief Skin Tone Enhancement. */ - VAProcFilterSkinToneEnhancement, - /** \brief Total Color Correction. */ - VAProcFilterTotalColorCorrection, - /** \brief Human Vision System(HVS) Noise reduction filter. */ - VAProcFilterHVSNoiseReduction, - /** \brief High Dynamic Range Tone Mapping. */ - VAProcFilterHighDynamicRangeToneMapping, - /** \brief Three-Dimensional Look Up Table (3DLUT). */ - VAProcFilter3DLUT, - /** \brief Number of video filters. */ - VAProcFilterCount -} VAProcFilterType; - -/** \brief Deinterlacing types. */ -typedef enum _VAProcDeinterlacingType { - VAProcDeinterlacingNone = 0, - /** \brief Bob deinterlacing algorithm. */ - VAProcDeinterlacingBob, - /** \brief Weave deinterlacing algorithm. */ - VAProcDeinterlacingWeave, - /** \brief Motion adaptive deinterlacing algorithm. */ - VAProcDeinterlacingMotionAdaptive, - /** \brief Motion compensated deinterlacing algorithm. */ - VAProcDeinterlacingMotionCompensated, - /** \brief Number of deinterlacing algorithms. */ - VAProcDeinterlacingCount -} VAProcDeinterlacingType; - -/** \brief Color balance types. */ -typedef enum _VAProcColorBalanceType { - VAProcColorBalanceNone = 0, - /** \brief Hue. */ - VAProcColorBalanceHue, - /** \brief Saturation. */ - VAProcColorBalanceSaturation, - /** \brief Brightness. */ - VAProcColorBalanceBrightness, - /** \brief Contrast. */ - VAProcColorBalanceContrast, - /** \brief Automatically adjusted saturation. */ - VAProcColorBalanceAutoSaturation, - /** \brief Automatically adjusted brightness. */ - VAProcColorBalanceAutoBrightness, - /** \brief Automatically adjusted contrast. */ - VAProcColorBalanceAutoContrast, - /** \brief Number of color balance attributes. */ - VAProcColorBalanceCount -} VAProcColorBalanceType; - -/** \brief Color standard types. - * - * These define a set of color properties corresponding to particular - * video standards. - * - * Where matrix_coefficients is specified, it applies only to YUV data - - * RGB data always use the identity matrix (matrix_coefficients = 0). - */ -typedef enum _VAProcColorStandardType { - VAProcColorStandardNone = 0, - /** \brief ITU-R BT.601. - * - * It is unspecified whether this will use 525-line or 625-line values; - * specify the colour primaries and matrix coefficients explicitly if - * it is known which one is required. - * - * Equivalent to: - * colour_primaries = 5 or 6 - * transfer_characteristics = 6 - * matrix_coefficients = 5 or 6 - */ - VAProcColorStandardBT601, - /** \brief ITU-R BT.709. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 1 - * matrix_coefficients = 1 - */ - VAProcColorStandardBT709, - /** \brief ITU-R BT.470-2 System M. - * - * Equivalent to: - * colour_primaries = 4 - * transfer_characteristics = 4 - * matrix_coefficients = 4 - */ - VAProcColorStandardBT470M, - /** \brief ITU-R BT.470-2 System B, G. - * - * Equivalent to: - * colour_primaries = 5 - * transfer_characteristics = 5 - * matrix_coefficients = 5 - */ - VAProcColorStandardBT470BG, - /** \brief SMPTE-170M. - * - * Equivalent to: - * colour_primaries = 6 - * transfer_characteristics = 6 - * matrix_coefficients = 6 - */ - VAProcColorStandardSMPTE170M, - /** \brief SMPTE-240M. - * - * Equivalent to: - * colour_primaries = 7 - * transfer_characteristics = 7 - * matrix_coefficients = 7 - */ - VAProcColorStandardSMPTE240M, - /** \brief Generic film. - * - * Equivalent to: - * colour_primaries = 8 - * transfer_characteristics = 1 - * matrix_coefficients = 1 - */ - VAProcColorStandardGenericFilm, - /** \brief sRGB. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 13 - * matrix_coefficients = 0 - */ - VAProcColorStandardSRGB, - /** \brief stRGB. - * - * ??? - */ - VAProcColorStandardSTRGB, - /** \brief xvYCC601. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 11 - * matrix_coefficients = 5 - */ - VAProcColorStandardXVYCC601, - /** \brief xvYCC709. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 11 - * matrix_coefficients = 1 - */ - VAProcColorStandardXVYCC709, - /** \brief ITU-R BT.2020. - * - * Equivalent to: - * colour_primaries = 9 - * transfer_characteristics = 14 - * matrix_coefficients = 9 - */ - VAProcColorStandardBT2020, - /** \brief Explicitly specified color properties. - * - * Use corresponding color properties section. - * For example, HDR10 content: - * colour_primaries = 9 (BT2020) - * transfer_characteristics = 16 (SMPTE ST2084) - * matrix_coefficients = 9 - */ - VAProcColorStandardExplicit, - /** \brief Number of color standards. */ - VAProcColorStandardCount -} VAProcColorStandardType; - -/** \brief Total color correction types. */ -typedef enum _VAProcTotalColorCorrectionType { - VAProcTotalColorCorrectionNone = 0, - /** \brief Red Saturation. */ - VAProcTotalColorCorrectionRed, - /** \brief Green Saturation. */ - VAProcTotalColorCorrectionGreen, - /** \brief Blue Saturation. */ - VAProcTotalColorCorrectionBlue, - /** \brief Cyan Saturation. */ - VAProcTotalColorCorrectionCyan, - /** \brief Magenta Saturation. */ - VAProcTotalColorCorrectionMagenta, - /** \brief Yellow Saturation. */ - VAProcTotalColorCorrectionYellow, - /** \brief Number of color correction attributes. */ - VAProcTotalColorCorrectionCount -} VAProcTotalColorCorrectionType; - -/** \brief High Dynamic Range Metadata types. */ -typedef enum _VAProcHighDynamicRangeMetadataType { - VAProcHighDynamicRangeMetadataNone = 0, - /** \brief Metadata type for HDR10. */ - VAProcHighDynamicRangeMetadataHDR10, - /** \brief Number of Metadata type. */ - VAProcHighDynamicRangeMetadataTypeCount -} VAProcHighDynamicRangeMetadataType; - -/** \brief Video Processing Mode. */ -typedef enum _VAProcMode { - /** - * \brief Default Mode. - * In this mode, pipeline is decided in driver to the appropriate mode. - * e.g. a mode that's a balance between power and performance. - */ - VAProcDefaultMode = 0, - /** - * \brief Power Saving Mode. - * In this mode, pipeline is optimized for power saving. - */ - VAProcPowerSavingMode, - /** - * \brief Performance Mode. - * In this mode, pipeline is optimized for performance. - */ - VAProcPerformanceMode -} VAProcMode; - -/** @name Video blending flags */ -/**@{*/ -/** \brief Global alpha blending. */ -#define VA_BLEND_GLOBAL_ALPHA 0x0001 -/** \brief Premultiplied alpha blending (RGBA surfaces only). */ -#define VA_BLEND_PREMULTIPLIED_ALPHA 0x0002 -/** \brief Luma color key (YUV surfaces only). */ -#define VA_BLEND_LUMA_KEY 0x0010 -/**@}*/ - -/** \brief Video blending state definition. */ -typedef struct _VABlendState { - /** \brief Video blending flags. */ - unsigned int flags; - /** - * \brief Global alpha value. - * - * Valid if \flags has VA_BLEND_GLOBAL_ALPHA. - * Valid range is 0.0 to 1.0 inclusive. - */ - float global_alpha; - /** - * \brief Minimum luma value. - * - * Valid if \flags has VA_BLEND_LUMA_KEY. - * Valid range is 0.0 to 1.0 inclusive. - * \ref min_luma shall be set to a sensible value lower than \ref max_luma. - */ - float min_luma; - /** - * \brief Maximum luma value. - * - * Valid if \flags has VA_BLEND_LUMA_KEY. - * Valid range is 0.0 to 1.0 inclusive. - * \ref max_luma shall be set to a sensible value larger than \ref min_luma. - */ - float max_luma; -} VABlendState; - -/** @name Video pipeline flags */ -/**@{*/ -/** \brief Specifies whether to apply subpictures when processing a surface. */ -#define VA_PROC_PIPELINE_SUBPICTURES 0x00000001 -/** - * \brief Specifies whether to apply power or performance - * optimizations to a pipeline. - * - * When processing several surfaces, it may be necessary to prioritize - * more certain pipelines than others. This flag is only a hint to the - * video processor so that it can omit certain filters to save power - * for example. Typically, this flag could be used with video surfaces - * decoded from a secondary bitstream. - */ -#define VA_PROC_PIPELINE_FAST 0x00000002 -/**@}*/ - -/** @name Video filter flags */ -/**@{*/ -/** \brief Specifies whether the filter shall be present in the pipeline. */ -#define VA_PROC_FILTER_MANDATORY 0x00000001 -/**@}*/ - -/** @name Pipeline end flags */ -/**@{*/ -/** \brief Specifies the pipeline is the last. */ -#define VA_PIPELINE_FLAG_END 0x00000004 -/**@}*/ - -/** @name Chroma Siting flag */ -/**@{*/ -/** vertical chroma sitting take bit 0-1, horizontal chroma sitting take bit 2-3 - * vertical chromma siting | horizontal chroma sitting to be chroma sitting */ -#define VA_CHROMA_SITING_UNKNOWN 0x00 -/** \brief Chroma samples are co-sited vertically on the top with the luma samples. */ -#define VA_CHROMA_SITING_VERTICAL_TOP 0x01 -/** \brief Chroma samples are not co-sited vertically with the luma samples. */ -#define VA_CHROMA_SITING_VERTICAL_CENTER 0x02 -/** \brief Chroma samples are co-sited vertically on the bottom with the luma samples. */ -#define VA_CHROMA_SITING_VERTICAL_BOTTOM 0x03 -/** \brief Chroma samples are co-sited horizontally on the left with the luma samples. */ -#define VA_CHROMA_SITING_HORIZONTAL_LEFT 0x04 -/** \brief Chroma samples are not co-sited horizontally with the luma samples. */ -#define VA_CHROMA_SITING_HORIZONTAL_CENTER 0x08 -/**@}*/ - -/** - * This is to indicate that the color-space conversion uses full range or reduced range. - * VA_SOURCE_RANGE_FULL(Full range): Y/Cb/Cr is in [0, 255]. It is mainly used - * for JPEG/JFIF formats. The combination with the BT601 flag means that - * JPEG/JFIF color-space conversion matrix is used. - * VA_SOURCE_RANGE_REDUCED(Reduced range): Y is in [16, 235] and Cb/Cr is in [16, 240]. - * It is mainly used for the YUV->RGB color-space conversion in SDTV/HDTV/UHDTV. - */ -#define VA_SOURCE_RANGE_UNKNOWN 0 -#define VA_SOURCE_RANGE_REDUCED 1 -#define VA_SOURCE_RANGE_FULL 2 - -/** @name Tone Mapping flags multiple HDR mode*/ -/**@{*/ -/** \brief Tone Mapping from HDR content to HDR display. */ -#define VA_TONE_MAPPING_HDR_TO_HDR 0x0001 -/** \brief Tone Mapping from HDR content to SDR display. */ -#define VA_TONE_MAPPING_HDR_TO_SDR 0x0002 -/** \brief Tone Mapping from HDR content to EDR display. */ -#define VA_TONE_MAPPING_HDR_TO_EDR 0x0004 -/** \brief Tone Mapping from SDR content to HDR display. */ -#define VA_TONE_MAPPING_SDR_TO_HDR 0x0008 -/**@}*/ - -/** \brief Video processing pipeline capabilities. */ -typedef struct _VAProcPipelineCaps { - /** \brief Pipeline flags. See VAProcPipelineParameterBuffer::pipeline_flags. */ - uint32_t pipeline_flags; - /** \brief Extra filter flags. See VAProcPipelineParameterBuffer::filter_flags. */ - uint32_t filter_flags; - /** \brief Number of forward reference frames that are needed. */ - uint32_t num_forward_references; - /** \brief Number of backward reference frames that are needed. */ - uint32_t num_backward_references; - /** \brief List of color standards supported on input. */ - VAProcColorStandardType *input_color_standards; - /** \brief Number of elements in \ref input_color_standards array. */ - uint32_t num_input_color_standards; - /** \brief List of color standards supported on output. */ - VAProcColorStandardType *output_color_standards; - /** \brief Number of elements in \ref output_color_standards array. */ - uint32_t num_output_color_standards; - - /** - * \brief Rotation flags. - * - * For each rotation angle supported by the underlying hardware, - * the corresponding bit is set in \ref rotation_flags. See - * "Rotation angles" for a description of rotation angles. - * - * A value of 0 means the underlying hardware does not support any - * rotation. Otherwise, a check for a specific rotation angle can be - * performed as follows: - * - * \code - * VAProcPipelineCaps pipeline_caps; - * ... - * vaQueryVideoProcPipelineCaps(va_dpy, vpp_ctx, - * filter_bufs, num_filter_bufs, - * &pipeline_caps - * ); - * ... - * if (pipeline_caps.rotation_flags & (1 << VA_ROTATION_xxx)) { - * // Clockwise rotation by xxx degrees is supported - * ... - * } - * \endcode - */ - uint32_t rotation_flags; - /** \brief Blend flags. See "Video blending flags". */ - uint32_t blend_flags; - /** - * \brief Mirroring flags. - * - * For each mirroring direction supported by the underlying hardware, - * the corresponding bit is set in \ref mirror_flags. See - * "Mirroring directions" for a description of mirroring directions. - * - */ - uint32_t mirror_flags; - /** \brief Number of additional output surfaces supported by the pipeline */ - uint32_t num_additional_outputs; - - /** \brief Number of elements in \ref input_pixel_format array. */ - uint32_t num_input_pixel_formats; - /** \brief List of input pixel formats in fourcc. */ - uint32_t *input_pixel_format; - /** \brief Number of elements in \ref output_pixel_format array. */ - uint32_t num_output_pixel_formats; - /** \brief List of output pixel formats in fourcc. */ - uint32_t *output_pixel_format; - - /** \brief Max supported input width in pixels. */ - uint32_t max_input_width; - /** \brief Max supported input height in pixels. */ - uint32_t max_input_height; - /** \brief Min supported input width in pixels. */ - uint32_t min_input_width; - /** \brief Min supported input height in pixels. */ - uint32_t min_input_height; - - /** \brief Max supported output width in pixels. */ - uint32_t max_output_width; - /** \brief Max supported output height in pixels. */ - uint32_t max_output_height; - /** \brief Min supported output width in pixels. */ - uint32_t min_output_width; - /** \brief Min supported output height in pixels. */ - uint32_t min_output_height; - /** \brief Reserved bytes for future use, must be zero */ -#if defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__) || defined(__LP64__) - uint32_t va_reserved[VA_PADDING_HIGH - 2]; -#else - uint32_t va_reserved[VA_PADDING_HIGH]; -#endif -} VAProcPipelineCaps; - -/** \brief Specification of values supported by the filter. */ -typedef struct _VAProcFilterValueRange { - /** \brief Minimum value supported, inclusive. */ - float min_value; - /** \brief Maximum value supported, inclusive. */ - float max_value; - /** \brief Default value. */ - float default_value; - /** \brief Step value that alters the filter behaviour in a sensible way. */ - float step; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterValueRange; - -typedef struct _VAProcColorProperties { - /** Chroma sample location.\c VA_CHROMA_SITING_VERTICAL_XXX | VA_CHROMA_SITING_HORIZONTAL_XXX */ - uint8_t chroma_sample_location; - /** Color range. \c VA_SOURCE_RANGE_XXX*/ - uint8_t color_range; - /** Colour primaries. - * - * See ISO/IEC 23001-8 or ITU H.273, section 8.1 and table 2. - * Only used if the color standard in use is \c VAColorStandardExplicit. - * Below list the typical colour primaries for the reference. - * --------------------------------------------------------------------------------- - * | Value | Primaries | Informative Remark | - * -------------------------------------------------------------------------------- - * | 1 |primary x y |Rec.ITU-R BT.709-5 | - * | |green 0.300 0.600 |IEC 61966-2-1(sRGB or sYCC) | - * | |blue 0.150 0.060 | | - * | |red 0.640 0.330 | | - * | |whiteD65 0.3127 0.3290 | | - * --------------------------------------------------------------------------------- - * | 6 |primary x y |Rec.ITU-R BT.601-6 525 | - * | |green 0.310 0.595 | | - * | |blue 0.155 0.070 | | - * | |red 0.630 0.340 | | - * | |whiteD65 0.3127 0.3290 | | - * --------------------------------------------------------------------------------- - * | 9 |primary x y |Rec.ITU-R BT.2020 | - * | |green 0.170 0.797 | | - * | |blue 0.131 0.046 | | - * | |red 0.708 0.292 | | - * | |whiteD65 0.3127 0.3290 | | - * --------------------------------------------------------------------------------- - */ - uint8_t colour_primaries; - /** Transfer characteristics. - * - * See ISO/IEC 23001-8 or ITU H.273, section 8.2 and table 3. - * Only used if the color standard in use is \c VAColorStandardExplicit. - * Below list the typical transfer characteristics for the reference. - * ----------------------------------------------------------- - * | Value | Informative Remark | - * ----------------------------------------------------------- - * | 1 |Rec.ITU-R BT.709-5 | - * | |colour gamut system | - * ----------------------------------------------------------- - * | 4 |Assumed display gamma 2.2 | - * ----------------------------------------------------------- - * | 6 |Rec.ITU-R BT.601-6 525 or 625 | - * ----------------------------------------------------------- - * | 8 |Linear transfer characteristics | - * ----------------------------------------------------------- - * | 13 |IEC 61966-2-1(sRGB or sYCC) | - * ----------------------------------------------------------- - * | 14,15 |Rec.ITU-R BT.2020 | - * ----------------------------------------------------------- - * | 16 |SMPTE ST 2084 for 10,12,14 and 16bit system | - * ----------------------------------------------------------- - */ - uint8_t transfer_characteristics; - /** Matrix coefficients. - * - * See ISO/IEC 23001-8 or ITU H.273, section 8.3 and table 4. - * Only used if the color standard in use is \c VAColorStandardExplicit. - */ - uint8_t matrix_coefficients; - /** Reserved bytes for future use, must be zero. */ - uint8_t reserved[3]; -} VAProcColorProperties; - -/** \brief Describes High Dynamic Range Meta Data for HDR10. - * - * Specifies the colour volume(the colour primaries, white point and luminance range) of - * a display considered to be the mastering display for the associated video content -e.g., - * the colour volume of a display that was used for viewing while authoring the video content. - * See ITU-T H.265 D.3.27 Mastering display colour volume SEI message semantics. - * - * Specifies upper bounds for the nominal light level of the content. See ITU-T H.265 D.3.35 - * Content light level information SEI message semantics. - * - * This structure can be used to indicate the HDR10 metadata for 1) the content which was authored; - * 2) the display on which the content will be presented. If it is for display, max_content_light_level - * and max_pic_average_light_level are ignored. - */ -typedef struct _VAHdrMetaDataHDR10 { - /** - * \brief X chromaticity coordinate of the mastering display. - * - * Index value c equal to 0 should correspond to the green primary. - * Index value c equal to 1 should correspond to the blue primary. - * Index value c equal to 2 should correspond to the red primary. - * The value for display_primaries_x shall be in the range of 0 to 50000 inclusive. - */ - uint16_t display_primaries_x[3]; - /** - * \brief Y chromaticity coordinate of the mastering display. - * - * Index value c equal to 0 should correspond to the green primary. - * Index value c equal to 1 should correspond to the blue primary. - * Index value c equal to 2 should correspond to the red primary. - * The value for display_primaries_y shall be in the range of 0 to 50000 inclusive. - */ - uint16_t display_primaries_y[3]; - /** - * \brief X chromaticity coordinate of the white point of the mastering display. - * - * The value for white_point_x shall be in the range of 0 to 50000 inclusive. - */ - uint16_t white_point_x; - /** - * \brief Y chromaticity coordinate of the white point of the mastering display. - * - * The value for white_point_y shall be in the range of 0 to 50000 inclusive. - */ - uint16_t white_point_y; - /** - * \brief The maximum display luminance of the mastering display. - * - * The value is in units of 0.0001 candelas per square metre. - */ - uint32_t max_display_mastering_luminance; - /** - * \brief The minumum display luminance of the mastering display. - * - * The value is in units of 0.0001 candelas per square metre. - */ - uint32_t min_display_mastering_luminance; - /** - * \brief The maximum content light level (MaxCLL). - * - * The value is in units of 1 candelas per square metre. - */ - uint16_t max_content_light_level; - /** - * \brief The maximum picture average light level (MaxFALL). - * - * The value is in units of 1 candelas per square metre. - */ - uint16_t max_pic_average_light_level; - /** Resevered */ - uint16_t reserved[VA_PADDING_HIGH]; -} VAHdrMetaDataHDR10; - -/** \brief Capabilities specification for the High Dynamic Range filter. */ -typedef struct _VAProcFilterCapHighDynamicRange { - /** \brief high dynamic range type. */ - VAProcHighDynamicRangeMetadataType metadata_type; - /** - * \brief flag for high dynamic range tone mapping - * - * The flag is the combination of VA_TONE_MAPPING_XXX_TO_XXX. - * It could be VA_TONE_MAPPING_HDR_TO_HDR | VA_TONE_MAPPING_HDR_TO_SDR. - * SDR content to SDR display is always supported by default since it is legacy path. - */ - uint16_t caps_flag; - /** \brief Reserved bytes for future use, must be zero */ - uint16_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterCapHighDynamicRange; - -/** \brief High Dynamic Range Meta Data. */ -typedef struct _VAHdrMetaData { - /** \brief high dynamic range metadata type, HDR10 etc. */ - VAProcHighDynamicRangeMetadataType metadata_type; - /** - * \brief Pointer to high dynamic range metadata. - * - * The pointer could point to VAHdrMetaDataHDR10 or other HDR meta data. - */ - void* metadata; - /** - * \brief Size of high dynamic range metadata. - */ - uint32_t metadata_size; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved[VA_PADDING_LOW]; -} VAHdrMetaData; - -/** - * \brief Video processing pipeline configuration. - * - * This buffer defines a video processing pipeline. The actual filters to - * be applied are provided in the \c filters field, they can be re-used - * in other processing pipelines. - * - * The target surface is specified by the \c render_target argument of - * \c vaBeginPicture(). The general usage model is described as follows: - * - \c vaBeginPicture(): specify the target surface that receives the - * processed output; - * - \c vaRenderPicture(): specify a surface to be processed and composed - * into the \c render_target. Use as many \c vaRenderPicture() calls as - * necessary surfaces to compose ; - * - \c vaEndPicture(): tell the driver to start processing the surfaces - * with the requested filters. - * - * If a filter (e.g. noise reduction) needs to be applied with different - * values for multiple surfaces, the application needs to create as many - * filter parameter buffers as necessary. i.e. the filter parameters shall - * not change between two calls to \c vaRenderPicture(). - * - * For composition usage models, the first surface to process will generally - * use an opaque background color, i.e. \c output_background_color set with - * the most significant byte set to \c 0xff. For instance, \c 0xff000000 for - * a black background. Then, subsequent surfaces would use a transparent - * background color. - */ -typedef struct _VAProcPipelineParameterBuffer { - /** - * \brief Source surface ID. - * - * ID of the source surface to process. If subpictures are associated - * with the video surfaces then they shall be rendered to the target - * surface, if the #VA_PROC_PIPELINE_SUBPICTURES pipeline flag is set. - */ - VASurfaceID surface; - /** - * \brief Region within the source surface to be processed. - * - * Pointer to a #VARectangle defining the region within the source - * surface to be processed. If NULL, \c surface_region implies the - * whole surface. - */ - const VARectangle *surface_region; - /** - * \brief Requested input color standard. - * - * Color properties are implicitly converted throughout the processing - * pipeline. The video processor chooses the best moment to apply - * this conversion. The set of supported color standards for input shall - * be queried with vaQueryVideoProcPipelineCaps(). - * - * If this is set to VAProcColorStandardExplicit, the color properties - * are specified explicitly in surface_color_properties instead. - */ - VAProcColorStandardType surface_color_standard; - /** - * \brief Region within the output surface. - * - * Pointer to a #VARectangle defining the region within the output - * surface that receives the processed pixels. If NULL, \c output_region - * implies the whole surface. - * - * Note that any pixels residing outside the specified region will - * be filled in with the \ref output_background_color. - */ - const VARectangle *output_region; - /** - * \brief Background color. - * - * Background color used to fill in pixels that reside outside of the - * specified \ref output_region. The color is specified in ARGB format: - * [31:24] alpha, [23:16] red, [15:8] green, [7:0] blue. - * - * Unless the alpha value is zero or the \ref output_region represents - * the whole target surface size, implementations shall not render the - * source surface to the target surface directly. Rather, in order to - * maintain the exact semantics of \ref output_background_color, the - * driver shall use a temporary surface and fill it in with the - * appropriate background color. Next, the driver will blend this - * temporary surface into the target surface. - */ - uint32_t output_background_color; - /** - * \brief Requested output color standard. - * - * If this is set to VAProcColorStandardExplicit, the color properties - * are specified explicitly in output_color_properties instead. - */ - VAProcColorStandardType output_color_standard; - /** - * \brief Pipeline filters. See video pipeline flags. - * - * Flags to control the pipeline, like whether to apply subpictures - * or not, notify the driver that it can opt for power optimizations, - * should this be needed. - */ - uint32_t pipeline_flags; - /** - * \brief Extra filter flags. See vaPutSurface() flags. - * - * Filter flags are used as a fast path, wherever possible, to use - * vaPutSurface() flags instead of explicit filter parameter buffers. - * - * Allowed filter flags API-wise. Use vaQueryVideoProcPipelineCaps() - * to check for implementation details: - * - Bob-deinterlacing: \c VA_FRAME_PICTURE, \c VA_TOP_FIELD, - * \c VA_BOTTOM_FIELD. Note that any deinterlacing filter - * (#VAProcFilterDeinterlacing) will override those flags. - * - Color space conversion: \c VA_SRC_BT601, \c VA_SRC_BT709, - * \c VA_SRC_SMPTE_240. - * - Scaling: \c VA_FILTER_SCALING_DEFAULT, \c VA_FILTER_SCALING_FAST, - * \c VA_FILTER_SCALING_HQ, \c VA_FILTER_SCALING_NL_ANAMORPHIC. - * - Interpolation Method: \c VA_FILTER_INTERPOLATION_DEFAULT, - * \c VA_FILTER_INTERPOLATION_NEAREST_NEIGHBOR, - * \c VA_FILTER_INTERPOLATION_BILINEAR, \c VA_FILTER_INTERPOLATION_ADVANCED. - */ - uint32_t filter_flags; - /** - * \brief Array of filters to apply to the surface. - * - * The list of filters shall be ordered in the same way the driver expects - * them. i.e. as was returned from vaQueryVideoProcFilters(). - * Otherwise, a #VA_STATUS_ERROR_INVALID_FILTER_CHAIN is returned - * from vaRenderPicture() with this buffer. - * - * #VA_STATUS_ERROR_UNSUPPORTED_FILTER is returned if the list - * contains an unsupported filter. - * - */ - VABufferID *filters; - /** \brief Actual number of filters. */ - uint32_t num_filters; - /** \brief Array of forward reference frames (past frames). */ - VASurfaceID *forward_references; - /** \brief Number of forward reference frames that were supplied. */ - uint32_t num_forward_references; - /** \brief Array of backward reference frames (future frames). */ - VASurfaceID *backward_references; - /** \brief Number of backward reference frames that were supplied. */ - uint32_t num_backward_references; - /** - * \brief Rotation state. See rotation angles. - * - * The rotation angle is clockwise. There is no specific rotation - * center for this operation. Rather, The source \ref surface is - * first rotated by the specified angle and then scaled to fit the - * \ref output_region. - * - * This means that the top-left hand corner (0,0) of the output - * (rotated) surface is expressed as follows: - * - \ref VA_ROTATION_NONE: (0,0) is the top left corner of the - * source surface -- no rotation is performed ; - * - \ref VA_ROTATION_90: (0,0) is the bottom-left corner of the - * source surface ; - * - \ref VA_ROTATION_180: (0,0) is the bottom-right corner of the - * source surface -- the surface is flipped around the X axis ; - * - \ref VA_ROTATION_270: (0,0) is the top-right corner of the - * source surface. - * - * Check VAProcPipelineCaps::rotation_flags first prior to - * defining a specific rotation angle. Otherwise, the hardware can - * perfectly ignore this variable if it does not support any - * rotation. - */ - uint32_t rotation_state; - /** - * \brief blending state. See "Video blending state definition". - * - * If \ref blend_state is NULL, then default operation mode depends - * on the source \ref surface format: - * - RGB: per-pixel alpha blending ; - * - YUV: no blending, i.e override the underlying pixels. - * - * Otherwise, \ref blend_state is a pointer to a #VABlendState - * structure that shall be live until vaEndPicture(). - * - * Implementation note: the driver is responsible for checking the - * blend state flags against the actual source \ref surface format. - * e.g. premultiplied alpha blending is only applicable to RGB - * surfaces, and luma keying is only applicable to YUV surfaces. - * If a mismatch occurs, then #VA_STATUS_ERROR_INVALID_BLEND_STATE - * is returned. - */ - const VABlendState *blend_state; - /** - * \bried mirroring state. See "Mirroring directions". - * - * Mirroring of an image can be performed either along the - * horizontal or vertical axis. It is assumed that the rotation - * operation is always performed before the mirroring operation. - */ - uint32_t mirror_state; - /** \brief Array of additional output surfaces. */ - VASurfaceID *additional_outputs; - /** \brief Number of additional output surfaces. */ - uint32_t num_additional_outputs; - /** - * \brief Flag to indicate the input surface flag - * - * bit0~3: Surface sample type - * - 0000: Progressive --> VA_FRAME_PICTURE - * - 0001: Single Top Field --> VA_TOP_FIELD - * - 0010: Single Bottom Field --> VA_BOTTOM_FIELD - * - 0100: Interleaved Top Field First --> VA_TOP_FIELD_FIRST - * - 1000: Interleaved Bottom Field First --> VA_BOTTOM_FIELD_FIRST - * - * For interlaced scaling, examples as follow: - * - 1. Interleaved to Interleaved (Suppose input is top field first) - * -- set input_surface_flag as VA_TOP_FIELD_FIRST - * -- set output_surface_flag as VA_TOP_FIELD_FIRST - * - 2. Interleaved to Field (Suppose input is top field first) - * An interleaved frame need to be passed twice. - * First cycle to get the first field: - * -- set input_surface_flag as VA_TOP_FIELD_FIRST - * -- set output_surface_flag as VA_TOP_FIELD - * Second cycle to get the second field: - * -- set input_surface_flag as VA_TOP_FIELD_FIRST - * -- set output_surface_flag as VA_BOTTOM_FIELD - * - 3. Field to Interleaved (Suppose first field is top field) - * -- create two surfaces, one for top field, the other for bottom field - * -- set surface with the first field surface id - * -- set backward_reference with the second field surface id - * -- set input_surface_flag as VA_TOP_FIELD - * -- set output_surface_flag as VA_TOP_FIELD_FIRST - * - 4. Field to Field: - * -- set flag according to each frame. - * - * bit31: Surface encryption - * - 0: non-protected - * - 1: protected - * - * bit4~30 for future - */ - uint32_t input_surface_flag; - /** - * \brief Flag to indicate the output surface flag - * - * bit0~3: Surface sample type - * - 0000: Progressive --> VA_FRAME_PICTURE - * - 0001: Top Field --> VA_TOP_FIELD - * - 0010: Bottom Field --> VA_BOTTOM_FIELD - * - 0100: Top Field First --> VA_TOP_FIELD_FIRST - * - 1000: Bottom Field First --> VA_BOTTOM_FIELD_FIRST - * - * bit31: Surface encryption - * - 0: non-protected - * - 1: protected - * - * bit4~30 for future - */ - uint32_t output_surface_flag; - /** - * \brief Input Color Properties. See "VAProcColorProperties". - */ - VAProcColorProperties input_color_properties; - /** - * \brief Output Color Properties. See "VAProcColorProperties". - */ - VAProcColorProperties output_color_properties; - /** - * \brief Processing mode. See "VAProcMode". - */ - VAProcMode processing_mode; - /** - * \brief Output High Dynamic Metadata. - * - * If output_metadata is NULL, then output default to SDR. - */ - VAHdrMetaData *output_hdr_metadata; - - /** \brief Reserved bytes for future use, must be zero */ -#if defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__)|| defined(__LP64__) - uint32_t va_reserved[VA_PADDING_LARGE - 16]; -#else - uint32_t va_reserved[VA_PADDING_LARGE - 13]; -#endif -} VAProcPipelineParameterBuffer; - -/** - * \brief Filter parameter buffer base. - * - * This is a helper structure used by driver implementations only. - * Users are not supposed to allocate filter parameter buffers of this - * type. - */ -typedef struct _VAProcFilterParameterBufferBase { - /** \brief Filter type. */ - VAProcFilterType type; -} VAProcFilterParameterBufferBase; - -/** - * \brief Default filter parametrization. - * - * Unless there is a filter-specific parameter buffer, - * #VAProcFilterParameterBuffer is the default type to use. - */ -typedef struct _VAProcFilterParameterBuffer { - /** \brief Filter type. */ - VAProcFilterType type; - /** \brief Value. */ - float value; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterParameterBuffer; - -/** @name De-interlacing flags */ -/**@{*/ -/** - * \brief Bottom field first in the input frame. - * if this is not set then assumes top field first. - */ -#define VA_DEINTERLACING_BOTTOM_FIELD_FIRST 0x0001 -/** - * \brief Bottom field used in deinterlacing. - * if this is not set then assumes top field is used. - */ -#define VA_DEINTERLACING_BOTTOM_FIELD 0x0002 -/** - * \brief A single field is stored in the input frame. - * if this is not set then assumes the frame contains two interleaved fields. - */ -#define VA_DEINTERLACING_ONE_FIELD 0x0004 -/** - * \brief Film Mode Detection is enabled. If enabled, driver performs inverse - * of various pulldowns, such as 3:2 pulldown. - * if this is not set then assumes FMD is disabled. - */ -#define VA_DEINTERLACING_FMD_ENABLE 0x0008 - -//Scene change parameter for ADI on Linux, if enabled, driver use spatial DI(Bob), instead of ADI. if not, use old behavior for ADI -//Input stream is TFF(set flags = 0), SRC0,1,2,3 are interlaced frame (top +bottom fields), DSTs are progressive frames -//30i->30p -//SRC0 -> BOBDI, no reference, set flag = 0, output DST0 -//SRC1 -> ADI, reference frame=SRC0, set flags = 0, call VP, output DST1 -//SRC2 -> ADI, reference frame=SRC1, set flags = 0x0010(decimal 16), call VP, output DST2(T4) -//SRC3 -> ADI, reference frame=SRC2, set flags = 0, call VP, output DST3 -//30i->60p -//SRC0 -> BOBDI, no reference, set flag = 0, output DST0 -//SRC0 -> BOBDI, no reference, set flag =0x0002, output DST1 - -//SRC1 -> ADI, reference frame =SRC0, set flags = 0, call VP, output DST2 -//SRC1 -> ADI, reference frame =SRC0, set flags = 0x0012(decimal18), call VP, output DST3(B3) - -//SRC2 -> ADI, reference frame =SRC1, set flags = 0x0010(decimal 16), call VP, output DST4(T4) -//SRC2 -> ADI, reference frame =SRC1, set flags = 0x0002, call VP, output DST5 - -//SRC3 -> ADI, reference frame =SRC2, set flags = 0, call VP, output DST6 -//SRC3 -> ADI, reference frame =SRC1, set flags = 0x0002, call VP, output DST7 - -#define VA_DEINTERLACING_SCD_ENABLE 0x0010 - -/**@}*/ - -/** \brief Deinterlacing filter parametrization. */ -typedef struct _VAProcFilterParameterBufferDeinterlacing { - /** \brief Filter type. Shall be set to #VAProcFilterDeinterlacing. */ - VAProcFilterType type; - /** \brief Deinterlacing algorithm. */ - VAProcDeinterlacingType algorithm; - /** \brief Deinterlacing flags. */ - uint32_t flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterParameterBufferDeinterlacing; - -/** - * \brief Color balance filter parametrization. - * - * This buffer defines color balance attributes. A VA buffer can hold - * several color balance attributes by creating a VA buffer of desired - * number of elements. This can be achieved by the following pseudo-code: - * - * \code - * enum { kHue, kSaturation, kBrightness, kContrast }; - * - * // Initial color balance parameters - * static const VAProcFilterParameterBufferColorBalance colorBalanceParams[4] = - * { - * [kHue] = - * { VAProcFilterColorBalance, VAProcColorBalanceHue, 0.5 }, - * [kSaturation] = - * { VAProcFilterColorBalance, VAProcColorBalanceSaturation, 0.5 }, - * [kBrightness] = - * { VAProcFilterColorBalance, VAProcColorBalanceBrightness, 0.5 }, - * [kSaturation] = - * { VAProcFilterColorBalance, VAProcColorBalanceSaturation, 0.5 } - * }; - * - * // Create buffer - * VABufferID colorBalanceBuffer; - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcFilterParameterBufferType, sizeof(*pColorBalanceParam), 4, - * colorBalanceParams, - * &colorBalanceBuffer - * ); - * - * VAProcFilterParameterBufferColorBalance *pColorBalanceParam; - * vaMapBuffer(va_dpy, colorBalanceBuffer, &pColorBalanceParam); - * { - * // Change brightness only - * pColorBalanceBuffer[kBrightness].value = 0.75; - * } - * vaUnmapBuffer(va_dpy, colorBalanceBuffer); - * \endcode - */ -typedef struct _VAProcFilterParameterBufferColorBalance { - /** \brief Filter type. Shall be set to #VAProcFilterColorBalance. */ - VAProcFilterType type; - /** \brief Color balance attribute. */ - VAProcColorBalanceType attrib; - /** - * \brief Color balance value. - * - * Special case for automatically adjusted attributes. e.g. - * #VAProcColorBalanceAutoSaturation, - * #VAProcColorBalanceAutoBrightness, - * #VAProcColorBalanceAutoContrast. - * - If \ref value is \c 1.0 +/- \c FLT_EPSILON, the attribute is - * automatically adjusted and overrides any other attribute of - * the same type that would have been set explicitly; - * - If \ref value is \c 0.0 +/- \c FLT_EPSILON, the attribute is - * disabled and other attribute of the same type is used instead. - */ - float value; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterParameterBufferColorBalance; - -/** \brief Total color correction filter parametrization. */ -typedef struct _VAProcFilterParameterBufferTotalColorCorrection { - /** \brief Filter type. Shall be set to #VAProcFilterTotalColorCorrection. */ - VAProcFilterType type; - /** \brief Color to correct. */ - VAProcTotalColorCorrectionType attrib; - /** \brief Color correction value. */ - float value; -} VAProcFilterParameterBufferTotalColorCorrection; - -/** @name Video Processing Human Vision System (HVS) Denoise Mode.*/ -/**@{*/ -/** - * \brief Default Mode. - * This mode is decided in driver to the appropriate mode. - */ -#define VA_PROC_HVS_DENOISE_DEFAULT 0x0000 -/** - * \brief Auto BDRate Mode. - * Indicates auto BD rate improvement in pre-processing (such as before video encoding), ignore Strength. - */ -#define VA_PROC_HVS_DENOISE_AUTO_BDRATE 0x0001 -/** - * \brief Auto Subjective Mode. - * Indicates auto subjective quality improvement in pre-processing (such as before video encoding), ignore Strength. - */ -#define VA_PROC_HVS_DENOISE_AUTO_SUBJECTIVE 0x0002 -/** - * \brief Manual Mode. - * Indicates manual mode, allow to adjust the denoise strength manually (need to set Strength explicitly). - */ -#define VA_PROC_HVS_DENOISE_MANUAL 0x0003 -/**@}*/ - -/** \brief Human Vision System(HVS) Noise reduction filter parametrization. */ -typedef struct _VAProcFilterParameterBufferHVSNoiseReduction { - /** \brief Filter type. Shall be set to #VAProcFilterHVSNoiseReduction. */ - VAProcFilterType type; - /** \brief QP for encoding, used for HVS Denoise */ - uint16_t qp; - /** - * \brief QP to Noise Reduction Strength Mode, used for Human Vision System Based Noise Reduction. - * Controls Noise Reduction strength of conservative and aggressive mode. - * It is an integer from [0-16]. - * Value 0 means completely turn off Noise Reduction; - * Value 16 means the most aggressive mode of Noise Reduction; - * Value 10 is the default value. - */ - uint16_t strength; - /** - * \brief HVS Denoise Mode which controls denoise method. - * It is a value of VA_PROC_HVS_DENOISE_xxx. - * Please see the definition of VA_PROC_HVS_DENOISE_xxx. - */ - uint16_t mode; - /** \brief Reserved bytes for future use, must be zero */ - uint16_t va_reserved[VA_PADDING_HIGH - 1]; -} VAProcFilterParameterBufferHVSNoiseReduction; - -/** \brief High Dynamic Range(HDR) Tone Mapping filter parametrization. */ -typedef struct _VAProcFilterParameterBufferHDRToneMapping { - /** \brief Filter type. Shall be set to #VAProcFilterHighDynamicRangeToneMapping.*/ - VAProcFilterType type; - /** - * \brief High Dynamic Range metadata, could be HDR10 etc. - * - * This metadata is mainly for the input surface. Given that dynamic metadata is changing - * on frame-by-frame or scene-by-scene basis for HDR10 plus, differentiate the metadata - * for the input and output. - */ - VAHdrMetaData data; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterParameterBufferHDRToneMapping; - -/** @name 3DLUT Channel Layout and Mapping */ -/**@{*/ -/** \brief 3DLUT Channel Layout is unknown. */ -#define VA_3DLUT_CHANNEL_UNKNOWN 0x00000000 -/** \brief 3DLUT Channel Layout is R, G, B, the default layout. Map RGB to RGB. */ -#define VA_3DLUT_CHANNEL_RGB_RGB 0x00000001 -/** \brief 3DLUT Channel Layout is Y, U, V. Map YUV to RGB. */ -#define VA_3DLUT_CHANNEL_YUV_RGB 0x00000002 -/** \brief 3DLUT Channel Layout is V, U, Y. Map VUY to RGB. */ -#define VA_3DLUT_CHANNEL_VUY_RGB 0x00000004 -/**@}*/ - -/** - * \brief 3DLUT filter parametrization. - * - * 3DLUT (Three Dimensional Look Up Table) is often used when converting an image or a video frame - * from one color representation to another, for example, when converting log and gamma encodings, - * changing the color space, applying a color correction, changing the dynamic range, gamut mapping etc. - * - * This buffer defines 3DLUT attributes and memory layout. The typical 3DLUT has fixed number(lut_size) - * per dimension and memory layout is 3 dimensional array as 3dlut[stride_0][stride_1][stride_2] (lut_size - * shall be smaller than stride_0/1/2). - * - * API user should query hardware capability by using the VAProcFilterCap3DLUT to get the 3DLUT attributes - * which hardware supports, and use these attributes. For example, if the user queries hardware, the API user - * could get caps with 3dlut[33][33][64] (lut_size = 33, lut_stride[0/1/2] = 33/33/64). API user shall not - * use the attributes which hardware can not support. - * - * 3DLUT is usually used to transform input RGB/YUV values in one color space to output RGB values in another - * color space. Based on 1) the format and color space of VPP input and output and 2) 3DLUT memory layout and - * channel mapping, driver will enable some color space conversion implicitly if needed. For example, the input of - * VPP is P010 format in BT2020 color space, the output of VPP is NV12 in BT709 color space and the 3DLUT channel - * mapping is VA_3DLUT_CHANNEL_RGB_RGB, driver could build the data pipeline as P010(BT2020)->RGB(BT2020) - * ->3DULT(BT709)->NV12(BT709). Please note, the limitation of 3DLUT filter color space is that the color space of - * 3DLUT filter input data needs to be same as the input data of VPP; the color space of 3DLUT filter output data - * needs to be same as the output data of VPP; format does not have such limitation. - */ -typedef struct _VAProcFilterParameterBuffer3DLUT { - /** \brief Filter type. Shall be set to #VAProcFilter3DLUT.*/ - VAProcFilterType type; - - /** \brief lut_surface contains 3DLUT data in the 3DLUT memory layout, must be linear */ - VASurfaceID lut_surface; - /** - * \brief lut_size is the number of valid points on every dimension of the three dimensional look up table. - * The size of LUT (lut_size) shall be same among every dimension of the three dimensional look up table. - * The size of LUT (lut_size) shall be smaller than lut_stride[0/1/2]. - */ - uint16_t lut_size; - /** - * \brief lut_stride are the number of points on every dimension of the three dimensional look up table. - * Three dimension can has 3 different stride, lut3d[lut_stride[0]][lut_stride[1]][lut_stride[2]]. - * But the valid point shall start from 0, the range of valid point is [0, lut_size-1] for every dimension. - */ - uint16_t lut_stride[3]; - /** \brief bit_depth is the number of bits for every channel R, G or B (or Y, U, V) */ - uint16_t bit_depth; - /** \brief num_channel is the number of channels */ - uint16_t num_channel; - - /** \brief channel_mapping defines the mapping of input and output channels, could be one of VA_3DLUT_CHANNEL_XXX*/ - uint32_t channel_mapping; - - /** \brief reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterParameterBuffer3DLUT; - -/** \brief Capabilities specification for the 3DLUT filter. */ -typedef struct _VAProcFilterCap3DLUT { - /** \brief lut_size is the number of valid points on every dimension of the three dimensional look up table. */ - uint16_t lut_size; - /** \brief lut_stride are the number of points on every dimension of the three dimensional look up table. lut3d[lut_stride[0]][lut_stride[1]][lut_stride[2]]*/ - uint16_t lut_stride[3]; - /** \brief bit_depth is the number of bits for every channel R, G or B (or Y, U, V) */ - uint16_t bit_depth; - /** \brief num_channel is the number of channels */ - uint16_t num_channel; - /** \brief channel_mapping defines the mapping of channels, could be some combination of VA_3DLUT_CHANNEL_XXX*/ - uint32_t channel_mapping; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterCap3DLUT; - -/** - * \brief Default filter cap specification (single range value). - * - * Unless there is a filter-specific cap structure, #VAProcFilterCap is the - * default type to use for output caps from vaQueryVideoProcFilterCaps(). - */ -typedef struct _VAProcFilterCap { - /** \brief Range of supported values for the filter. */ - VAProcFilterValueRange range; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterCap; - -/** \brief Capabilities specification for the deinterlacing filter. */ -typedef struct _VAProcFilterCapDeinterlacing { - /** \brief Deinterlacing algorithm. */ - VAProcDeinterlacingType type; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterCapDeinterlacing; - -/** \brief Capabilities specification for the color balance filter. */ -typedef struct _VAProcFilterCapColorBalance { - /** \brief Color balance operation. */ - VAProcColorBalanceType type; - /** \brief Range of supported values for the specified operation. */ - VAProcFilterValueRange range; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterCapColorBalance; - -/** \brief Capabilities specification for the Total Color Correction filter. */ -typedef struct _VAProcFilterCapTotalColorCorrection { - /** \brief Color to correct. */ - VAProcTotalColorCorrectionType type; - /** \brief Range of supported values for the specified color. */ - VAProcFilterValueRange range; -} VAProcFilterCapTotalColorCorrection; - -/** - * \brief Queries video processing filters. - * - * This function returns the list of video processing filters supported - * by the driver. The \c filters array is allocated by the user and - * \c num_filters shall be initialized to the number of allocated - * elements in that array. Upon successful return, the actual number - * of filters will be overwritten into \c num_filters. Otherwise, - * \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and \c num_filters - * is adjusted to the number of elements that would be returned if enough - * space was available. - * - * The list of video processing filters supported by the driver shall - * be ordered in the way they can be iteratively applied. This is needed - * for both correctness, i.e. some filters would not mean anything if - * applied at the beginning of the pipeline; but also for performance - * since some filters can be applied in a single pass (e.g. noise - * reduction + deinterlacing). - * - * @param[in] dpy the VA display - * @param[in] context the video processing context - * @param[out] filters the output array of #VAProcFilterType elements - * @param[in,out] num_filters the number of elements allocated on input, - * the number of elements actually filled in on output - */ -VAStatus -vaQueryVideoProcFilters( - VADisplay dpy, - VAContextID context, - VAProcFilterType *filters, - unsigned int *num_filters -); - -/** - * \brief Queries video filter capabilities. - * - * This function returns the list of capabilities supported by the driver - * for a specific video filter. The \c filter_caps array is allocated by - * the user and \c num_filter_caps shall be initialized to the number - * of allocated elements in that array. Upon successful return, the - * actual number of filters will be overwritten into \c num_filter_caps. - * Otherwise, \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and - * \c num_filter_caps is adjusted to the number of elements that would be - * returned if enough space was available. - * - * @param[in] dpy the VA display - * @param[in] context the video processing context - * @param[in] type the video filter type - * @param[out] filter_caps the output array of #VAProcFilterCap elements - * @param[in,out] num_filter_caps the number of elements allocated on input, - * the number of elements actually filled in output - */ -VAStatus -vaQueryVideoProcFilterCaps( - VADisplay dpy, - VAContextID context, - VAProcFilterType type, - void *filter_caps, - unsigned int *num_filter_caps -); - -/** - * \brief Queries video processing pipeline capabilities. - * - * This function returns the video processing pipeline capabilities. The - * \c filters array defines the video processing pipeline and is an array - * of buffers holding filter parameters. - * - * Note: the #VAProcPipelineCaps structure contains user-provided arrays. - * If non-NULL, the corresponding \c num_* fields shall be filled in on - * input with the number of elements allocated. Upon successful return, - * the actual number of elements will be overwritten into the \c num_* - * fields. Otherwise, \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned - * and \c num_* fields are adjusted to the number of elements that would - * be returned if enough space was available. - * - * @param[in] dpy the VA display - * @param[in] context the video processing context - * @param[in] filters the array of VA buffers defining the video - * processing pipeline - * @param[in] num_filters the number of elements in filters - * @param[in,out] pipeline_caps the video processing pipeline capabilities - */ -VAStatus -vaQueryVideoProcPipelineCaps( - VADisplay dpy, - VAContextID context, - VABufferID *filters, - unsigned int num_filters, - VAProcPipelineCaps *pipeline_caps -); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_VPP_H */ diff --git a/prebuilts/arm/include/x264.h b/prebuilts/arm/include/x264.h deleted file mode 100644 index 5aa2a8d..0000000 --- a/prebuilts/arm/include/x264.h +++ /dev/null @@ -1,1019 +0,0 @@ -/***************************************************************************** - * x264.h: x264 public header - ***************************************************************************** - * Copyright (C) 2003-2022 x264 project - * - * Authors: Laurent Aimar - * Loren Merritt - * Fiona Glaser - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA. - * - * This program is also available under a commercial proprietary license. - * For more information, contact us at licensing@x264.com. - *****************************************************************************/ - -#ifndef X264_X264_H -#define X264_X264_H - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(_STDINT_H) && !defined(_STDINT_H_) && !defined(_STDINT_H_INCLUDED) && !defined(_STDINT) &&\ - !defined(_SYS_STDINT_H_) && !defined(_INTTYPES_H) && !defined(_INTTYPES_H_) && !defined(_INTTYPES) -# ifdef _MSC_VER -# pragma message("You must include stdint.h or inttypes.h before x264.h") -# else -# warning You must include stdint.h or inttypes.h before x264.h -# endif -#endif - -#include - -#include "x264_config.h" - -#define X264_BUILD 164 - -#ifdef _WIN32 -# define X264_DLL_IMPORT __declspec(dllimport) -# define X264_DLL_EXPORT __declspec(dllexport) -#else -# if defined(__GNUC__) && (__GNUC__ >= 4) -# define X264_DLL_IMPORT -# define X264_DLL_EXPORT __attribute__((visibility("default"))) -# else -# define X264_DLL_IMPORT -# define X264_DLL_EXPORT -# endif -#endif - -/* Application developers planning to link against a shared library version of - * libx264 from a Microsoft Visual Studio or similar development environment - * will need to define X264_API_IMPORTS before including this header. - * This clause does not apply to MinGW, similar development environments, or non - * Windows platforms. */ -#ifdef X264_API_IMPORTS -# define X264_API X264_DLL_IMPORT -#else -# ifdef X264_API_EXPORTS -# define X264_API X264_DLL_EXPORT -# else -# define X264_API -# endif -#endif - -/* x264_t: - * opaque handler for encoder */ -typedef struct x264_t x264_t; - -/**************************************************************************** - * NAL structure and functions - ****************************************************************************/ - -enum nal_unit_type_e -{ - NAL_UNKNOWN = 0, - NAL_SLICE = 1, - NAL_SLICE_DPA = 2, - NAL_SLICE_DPB = 3, - NAL_SLICE_DPC = 4, - NAL_SLICE_IDR = 5, /* ref_idc != 0 */ - NAL_SEI = 6, /* ref_idc == 0 */ - NAL_SPS = 7, - NAL_PPS = 8, - NAL_AUD = 9, - NAL_FILLER = 12, - /* ref_idc == 0 for 6,9,10,11,12 */ -}; -enum nal_priority_e -{ - NAL_PRIORITY_DISPOSABLE = 0, - NAL_PRIORITY_LOW = 1, - NAL_PRIORITY_HIGH = 2, - NAL_PRIORITY_HIGHEST = 3, -}; - -/* The data within the payload is already NAL-encapsulated; the ref_idc and type - * are merely in the struct for easy access by the calling application. - * All data returned in an x264_nal_t, including the data in p_payload, is no longer - * valid after the next call to x264_encoder_encode. Thus it must be used or copied - * before calling x264_encoder_encode or x264_encoder_headers again. */ -typedef struct x264_nal_t -{ - int i_ref_idc; /* nal_priority_e */ - int i_type; /* nal_unit_type_e */ - int b_long_startcode; - int i_first_mb; /* If this NAL is a slice, the index of the first MB in the slice. */ - int i_last_mb; /* If this NAL is a slice, the index of the last MB in the slice. */ - - /* Size of payload (including any padding) in bytes. */ - int i_payload; - /* If param->b_annexb is set, Annex-B bytestream with startcode. - * Otherwise, startcode is replaced with a 4-byte size. - * This size is the size used in mp4/similar muxing; it is equal to i_payload-4 */ - uint8_t *p_payload; - - /* Size of padding in bytes. */ - int i_padding; -} x264_nal_t; - -/**************************************************************************** - * Encoder parameters - ****************************************************************************/ -/* CPU flags */ - -/* x86 */ -#define X264_CPU_MMX (1U<<0) -#define X264_CPU_MMX2 (1U<<1) /* MMX2 aka MMXEXT aka ISSE */ -#define X264_CPU_MMXEXT X264_CPU_MMX2 -#define X264_CPU_SSE (1U<<2) -#define X264_CPU_SSE2 (1U<<3) -#define X264_CPU_LZCNT (1U<<4) -#define X264_CPU_SSE3 (1U<<5) -#define X264_CPU_SSSE3 (1U<<6) -#define X264_CPU_SSE4 (1U<<7) /* SSE4.1 */ -#define X264_CPU_SSE42 (1U<<8) /* SSE4.2 */ -#define X264_CPU_AVX (1U<<9) /* Requires OS support even if YMM registers aren't used */ -#define X264_CPU_XOP (1U<<10) /* AMD XOP */ -#define X264_CPU_FMA4 (1U<<11) /* AMD FMA4 */ -#define X264_CPU_FMA3 (1U<<12) -#define X264_CPU_BMI1 (1U<<13) -#define X264_CPU_BMI2 (1U<<14) -#define X264_CPU_AVX2 (1U<<15) -#define X264_CPU_AVX512 (1U<<16) /* AVX-512 {F, CD, BW, DQ, VL}, requires OS support */ -/* x86 modifiers */ -#define X264_CPU_CACHELINE_32 (1U<<17) /* avoid memory loads that span the border between two cachelines */ -#define X264_CPU_CACHELINE_64 (1U<<18) /* 32/64 is the size of a cacheline in bytes */ -#define X264_CPU_SSE2_IS_SLOW (1U<<19) /* avoid most SSE2 functions on Athlon64 */ -#define X264_CPU_SSE2_IS_FAST (1U<<20) /* a few functions are only faster on Core2 and Phenom */ -#define X264_CPU_SLOW_SHUFFLE (1U<<21) /* The Conroe has a slow shuffle unit (relative to overall SSE performance) */ -#define X264_CPU_STACK_MOD4 (1U<<22) /* if stack is only mod4 and not mod16 */ -#define X264_CPU_SLOW_ATOM (1U<<23) /* The Atom is terrible: slow SSE unaligned loads, slow - * SIMD multiplies, slow SIMD variable shifts, slow pshufb, - * cacheline split penalties -- gather everything here that - * isn't shared by other CPUs to avoid making half a dozen - * new SLOW flags. */ -#define X264_CPU_SLOW_PSHUFB (1U<<24) /* such as on the Intel Atom */ -#define X264_CPU_SLOW_PALIGNR (1U<<25) /* such as on the AMD Bobcat */ - -/* PowerPC */ -#define X264_CPU_ALTIVEC 0x0000001U - -/* ARM and AArch64 */ -#define X264_CPU_ARMV6 0x0000001U -#define X264_CPU_NEON 0x0000002U /* ARM NEON */ -#define X264_CPU_FAST_NEON_MRC 0x0000004U /* Transfer from NEON to ARM register is fast (Cortex-A9) */ -#define X264_CPU_ARMV8 0x0000008U - -/* MIPS */ -#define X264_CPU_MSA 0x0000001U /* MIPS MSA */ - -/* Analyse flags */ -#define X264_ANALYSE_I4x4 0x0001U /* Analyse i4x4 */ -#define X264_ANALYSE_I8x8 0x0002U /* Analyse i8x8 (requires 8x8 transform) */ -#define X264_ANALYSE_PSUB16x16 0x0010U /* Analyse p16x8, p8x16 and p8x8 */ -#define X264_ANALYSE_PSUB8x8 0x0020U /* Analyse p8x4, p4x8, p4x4 */ -#define X264_ANALYSE_BSUB16x16 0x0100U /* Analyse b16x8, b8x16 and b8x8 */ - -#define X264_DIRECT_PRED_NONE 0 -#define X264_DIRECT_PRED_SPATIAL 1 -#define X264_DIRECT_PRED_TEMPORAL 2 -#define X264_DIRECT_PRED_AUTO 3 -#define X264_ME_DIA 0 -#define X264_ME_HEX 1 -#define X264_ME_UMH 2 -#define X264_ME_ESA 3 -#define X264_ME_TESA 4 -#define X264_CQM_FLAT 0 -#define X264_CQM_JVT 1 -#define X264_CQM_CUSTOM 2 -#define X264_RC_CQP 0 -#define X264_RC_CRF 1 -#define X264_RC_ABR 2 -#define X264_QP_AUTO 0 -#define X264_AQ_NONE 0 -#define X264_AQ_VARIANCE 1 -#define X264_AQ_AUTOVARIANCE 2 -#define X264_AQ_AUTOVARIANCE_BIASED 3 -#define X264_B_ADAPT_NONE 0 -#define X264_B_ADAPT_FAST 1 -#define X264_B_ADAPT_TRELLIS 2 -#define X264_WEIGHTP_NONE 0 -#define X264_WEIGHTP_SIMPLE 1 -#define X264_WEIGHTP_SMART 2 -#define X264_B_PYRAMID_NONE 0 -#define X264_B_PYRAMID_STRICT 1 -#define X264_B_PYRAMID_NORMAL 2 -#define X264_KEYINT_MIN_AUTO 0 -#define X264_KEYINT_MAX_INFINITE (1<<30) - -/* AVC-Intra flavors */ -#define X264_AVCINTRA_FLAVOR_PANASONIC 0 -#define X264_AVCINTRA_FLAVOR_SONY 1 - -static const char * const x264_direct_pred_names[] = { "none", "spatial", "temporal", "auto", 0 }; -static const char * const x264_motion_est_names[] = { "dia", "hex", "umh", "esa", "tesa", 0 }; -static const char * const x264_b_pyramid_names[] = { "none", "strict", "normal", 0 }; -static const char * const x264_overscan_names[] = { "undef", "show", "crop", 0 }; -static const char * const x264_vidformat_names[] = { "component", "pal", "ntsc", "secam", "mac", "undef", 0 }; -static const char * const x264_fullrange_names[] = { "off", "on", 0 }; -static const char * const x264_colorprim_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "film", "bt2020", "smpte428", - "smpte431", "smpte432", 0 }; -static const char * const x264_transfer_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "linear", "log100", "log316", - "iec61966-2-4", "bt1361e", "iec61966-2-1", "bt2020-10", "bt2020-12", "smpte2084", "smpte428", "arib-std-b67", 0 }; -static const char * const x264_colmatrix_names[] = { "GBR", "bt709", "undef", "", "fcc", "bt470bg", "smpte170m", "smpte240m", "YCgCo", "bt2020nc", "bt2020c", - "smpte2085", "chroma-derived-nc", "chroma-derived-c", "ICtCp", 0 }; -static const char * const x264_nal_hrd_names[] = { "none", "vbr", "cbr", 0 }; -static const char * const x264_avcintra_flavor_names[] = { "panasonic", "sony", 0 }; - -/* Colorspace type */ -#define X264_CSP_MASK 0x00ff /* */ -#define X264_CSP_NONE 0x0000 /* Invalid mode */ -#define X264_CSP_I400 0x0001 /* monochrome 4:0:0 */ -#define X264_CSP_I420 0x0002 /* yuv 4:2:0 planar */ -#define X264_CSP_YV12 0x0003 /* yvu 4:2:0 planar */ -#define X264_CSP_NV12 0x0004 /* yuv 4:2:0, with one y plane and one packed u+v */ -#define X264_CSP_NV21 0x0005 /* yuv 4:2:0, with one y plane and one packed v+u */ -#define X264_CSP_I422 0x0006 /* yuv 4:2:2 planar */ -#define X264_CSP_YV16 0x0007 /* yvu 4:2:2 planar */ -#define X264_CSP_NV16 0x0008 /* yuv 4:2:2, with one y plane and one packed u+v */ -#define X264_CSP_YUYV 0x0009 /* yuyv 4:2:2 packed */ -#define X264_CSP_UYVY 0x000a /* uyvy 4:2:2 packed */ -#define X264_CSP_V210 0x000b /* 10-bit yuv 4:2:2 packed in 32 */ -#define X264_CSP_I444 0x000c /* yuv 4:4:4 planar */ -#define X264_CSP_YV24 0x000d /* yvu 4:4:4 planar */ -#define X264_CSP_BGR 0x000e /* packed bgr 24bits */ -#define X264_CSP_BGRA 0x000f /* packed bgr 32bits */ -#define X264_CSP_RGB 0x0010 /* packed rgb 24bits */ -#define X264_CSP_MAX 0x0011 /* end of list */ -#define X264_CSP_VFLIP 0x1000 /* the csp is vertically flipped */ -#define X264_CSP_HIGH_DEPTH 0x2000 /* the csp has a depth of 16 bits per pixel component */ - -/* Slice type */ -#define X264_TYPE_AUTO 0x0000 /* Let x264 choose the right type */ -#define X264_TYPE_IDR 0x0001 -#define X264_TYPE_I 0x0002 -#define X264_TYPE_P 0x0003 -#define X264_TYPE_BREF 0x0004 /* Non-disposable B-frame */ -#define X264_TYPE_B 0x0005 -#define X264_TYPE_KEYFRAME 0x0006 /* IDR or I depending on b_open_gop option */ -#define IS_X264_TYPE_I(x) ((x)==X264_TYPE_I || (x)==X264_TYPE_IDR || (x)==X264_TYPE_KEYFRAME) -#define IS_X264_TYPE_B(x) ((x)==X264_TYPE_B || (x)==X264_TYPE_BREF) - -/* Log level */ -#define X264_LOG_NONE (-1) -#define X264_LOG_ERROR 0 -#define X264_LOG_WARNING 1 -#define X264_LOG_INFO 2 -#define X264_LOG_DEBUG 3 - -/* Threading */ -#define X264_THREADS_AUTO 0 /* Automatically select optimal number of threads */ -#define X264_SYNC_LOOKAHEAD_AUTO (-1) /* Automatically select optimal lookahead thread buffer size */ - -/* HRD */ -#define X264_NAL_HRD_NONE 0 -#define X264_NAL_HRD_VBR 1 -#define X264_NAL_HRD_CBR 2 - -/* Zones: override ratecontrol or other options for specific sections of the video. - * See x264_encoder_reconfig() for which options can be changed. - * If zones overlap, whichever comes later in the list takes precedence. */ -typedef struct x264_zone_t -{ - int i_start, i_end; /* range of frame numbers */ - int b_force_qp; /* whether to use qp vs bitrate factor */ - int i_qp; - float f_bitrate_factor; - struct x264_param_t *param; -} x264_zone_t; - -typedef struct x264_param_t -{ - /* CPU flags */ - uint32_t cpu; - int i_threads; /* encode multiple frames in parallel */ - int i_lookahead_threads; /* multiple threads for lookahead analysis */ - int b_sliced_threads; /* Whether to use slice-based threading. */ - int b_deterministic; /* whether to allow non-deterministic optimizations when threaded */ - int b_cpu_independent; /* force canonical behavior rather than cpu-dependent optimal algorithms */ - int i_sync_lookahead; /* threaded lookahead buffer */ - - /* Video Properties */ - int i_width; - int i_height; - int i_csp; /* CSP of encoded bitstream */ - int i_bitdepth; - int i_level_idc; - int i_frame_total; /* number of frames to encode if known, else 0 */ - - /* NAL HRD - * Uses Buffering and Picture Timing SEIs to signal HRD - * The HRD in H.264 was not designed with VFR in mind. - * It is therefore not recommendeded to use NAL HRD with VFR. - * Furthermore, reconfiguring the VBV (via x264_encoder_reconfig) - * will currently generate invalid HRD. */ - int i_nal_hrd; - - struct - { - /* they will be reduced to be 0 < x <= 65535 and prime */ - int i_sar_height; - int i_sar_width; - - int i_overscan; /* 0=undef, 1=no overscan, 2=overscan */ - - /* see h264 annex E for the values of the following */ - int i_vidformat; - int b_fullrange; - int i_colorprim; - int i_transfer; - int i_colmatrix; - int i_chroma_loc; /* both top & bottom */ - } vui; - - /* Bitstream parameters */ - int i_frame_reference; /* Maximum number of reference frames */ - int i_dpb_size; /* Force a DPB size larger than that implied by B-frames and reference frames. - * Useful in combination with interactive error resilience. */ - int i_keyint_max; /* Force an IDR keyframe at this interval */ - int i_keyint_min; /* Scenecuts closer together than this are coded as I, not IDR. */ - int i_scenecut_threshold; /* how aggressively to insert extra I frames */ - int b_intra_refresh; /* Whether or not to use periodic intra refresh instead of IDR frames. */ - - int i_bframe; /* how many b-frame between 2 references pictures */ - int i_bframe_adaptive; - int i_bframe_bias; - int i_bframe_pyramid; /* Keep some B-frames as references: 0=off, 1=strict hierarchical, 2=normal */ - int b_open_gop; - int b_bluray_compat; - int i_avcintra_class; - int i_avcintra_flavor; - - int b_deblocking_filter; - int i_deblocking_filter_alphac0; /* [-6, 6] -6 light filter, 6 strong */ - int i_deblocking_filter_beta; /* [-6, 6] idem */ - - int b_cabac; - int i_cabac_init_idc; - - int b_interlaced; - int b_constrained_intra; - - int i_cqm_preset; - char *psz_cqm_file; /* filename (in UTF-8) of CQM file, JM format */ - uint8_t cqm_4iy[16]; /* used only if i_cqm_preset == X264_CQM_CUSTOM */ - uint8_t cqm_4py[16]; - uint8_t cqm_4ic[16]; - uint8_t cqm_4pc[16]; - uint8_t cqm_8iy[64]; - uint8_t cqm_8py[64]; - uint8_t cqm_8ic[64]; - uint8_t cqm_8pc[64]; - - /* Log */ - void (*pf_log)( void *, int i_level, const char *psz, va_list ); - void *p_log_private; - int i_log_level; - int b_full_recon; /* fully reconstruct frames, even when not necessary for encoding. Implied by psz_dump_yuv */ - char *psz_dump_yuv; /* filename (in UTF-8) for reconstructed frames */ - - /* Encoder analyser parameters */ - struct - { - unsigned int intra; /* intra partitions */ - unsigned int inter; /* inter partitions */ - - int b_transform_8x8; - int i_weighted_pred; /* weighting for P-frames */ - int b_weighted_bipred; /* implicit weighting for B-frames */ - int i_direct_mv_pred; /* spatial vs temporal mv prediction */ - int i_chroma_qp_offset; - - int i_me_method; /* motion estimation algorithm to use (X264_ME_*) */ - int i_me_range; /* integer pixel motion estimation search range (from predicted mv) */ - int i_mv_range; /* maximum length of a mv (in pixels). -1 = auto, based on level */ - int i_mv_range_thread; /* minimum space between threads. -1 = auto, based on number of threads. */ - int i_subpel_refine; /* subpixel motion estimation quality */ - int b_chroma_me; /* chroma ME for subpel and mode decision in P-frames */ - int b_mixed_references; /* allow each mb partition to have its own reference number */ - int i_trellis; /* trellis RD quantization */ - int b_fast_pskip; /* early SKIP detection on P-frames */ - int b_dct_decimate; /* transform coefficient thresholding on P-frames */ - int i_noise_reduction; /* adaptive pseudo-deadzone */ - float f_psy_rd; /* Psy RD strength */ - float f_psy_trellis; /* Psy trellis strength */ - int b_psy; /* Toggle all psy optimizations */ - - int b_mb_info; /* Use input mb_info data in x264_picture_t */ - int b_mb_info_update; /* Update the values in mb_info according to the results of encoding. */ - - /* the deadzone size that will be used in luma quantization */ - int i_luma_deadzone[2]; /* {inter, intra} */ - - int b_psnr; /* compute and print PSNR stats */ - int b_ssim; /* compute and print SSIM stats */ - } analyse; - - /* Rate control parameters */ - struct - { - int i_rc_method; /* X264_RC_* */ - - int i_qp_constant; /* 0=lossless */ - int i_qp_min; /* min allowed QP value */ - int i_qp_max; /* max allowed QP value */ - int i_qp_step; /* max QP step between frames */ - - int i_bitrate; - float f_rf_constant; /* 1pass VBR, nominal QP */ - float f_rf_constant_max; /* In CRF mode, maximum CRF as caused by VBV */ - float f_rate_tolerance; - int i_vbv_max_bitrate; - int i_vbv_buffer_size; - float f_vbv_buffer_init; /* <=1: fraction of buffer_size. >1: kbit */ - float f_ip_factor; - float f_pb_factor; - - /* VBV filler: force CBR VBV and use filler bytes to ensure hard-CBR. - * Implied by NAL-HRD CBR. */ - int b_filler; - - int i_aq_mode; /* psy adaptive QP. (X264_AQ_*) */ - float f_aq_strength; - int b_mb_tree; /* Macroblock-tree ratecontrol. */ - int i_lookahead; - - /* 2pass */ - int b_stat_write; /* Enable stat writing in psz_stat_out */ - char *psz_stat_out; /* output filename (in UTF-8) of the 2pass stats file */ - int b_stat_read; /* Read stat from psz_stat_in and use it */ - char *psz_stat_in; /* input filename (in UTF-8) of the 2pass stats file */ - - /* 2pass params (same as ffmpeg ones) */ - float f_qcompress; /* 0.0 => cbr, 1.0 => constant qp */ - float f_qblur; /* temporally blur quants */ - float f_complexity_blur; /* temporally blur complexity */ - x264_zone_t *zones; /* ratecontrol overrides */ - int i_zones; /* number of zone_t's */ - char *psz_zones; /* alternate method of specifying zones */ - } rc; - - /* Cropping Rectangle parameters: added to those implicitly defined by - non-mod16 video resolutions. */ - struct - { - int i_left; - int i_top; - int i_right; - int i_bottom; - } crop_rect; - - /* frame packing arrangement flag */ - int i_frame_packing; - - /* mastering display SEI: Primary and white point chromaticity coordinates - in 0.00002 increments. Brightness units are 0.0001 cd/m^2. */ - struct - { - int b_mastering_display; /* enable writing this SEI */ - int i_green_x; - int i_green_y; - int i_blue_x; - int i_blue_y; - int i_red_x; - int i_red_y; - int i_white_x; - int i_white_y; - int64_t i_display_max; - int64_t i_display_min; - } mastering_display; - - /* content light level SEI */ - struct - { - int b_cll; /* enable writing this SEI */ - int i_max_cll; - int i_max_fall; - } content_light_level; - - /* alternative transfer SEI */ - int i_alternative_transfer; - - /* Muxing parameters */ - int b_aud; /* generate access unit delimiters */ - int b_repeat_headers; /* put SPS/PPS before each keyframe */ - int b_annexb; /* if set, place start codes (4 bytes) before NAL units, - * otherwise place size (4 bytes) before NAL units. */ - int i_sps_id; /* SPS and PPS id number */ - int b_vfr_input; /* VFR input. If 1, use timebase and timestamps for ratecontrol purposes. - * If 0, use fps only. */ - int b_pulldown; /* use explicitly set timebase for CFR */ - uint32_t i_fps_num; - uint32_t i_fps_den; - uint32_t i_timebase_num; /* Timebase numerator */ - uint32_t i_timebase_den; /* Timebase denominator */ - - int b_tff; - - /* Pulldown: - * The correct pic_struct must be passed with each input frame. - * The input timebase should be the timebase corresponding to the output framerate. This should be constant. - * e.g. for 3:2 pulldown timebase should be 1001/30000 - * The PTS passed with each frame must be the PTS of the frame after pulldown is applied. - * Frame doubling and tripling require b_vfr_input set to zero (see H.264 Table D-1) - * - * Pulldown changes are not clearly defined in H.264. Therefore, it is the calling app's responsibility to manage this. - */ - - int b_pic_struct; - - /* Fake Interlaced. - * - * Used only when b_interlaced=0. Setting this flag makes it possible to flag the stream as PAFF interlaced yet - * encode all frames progessively. It is useful for encoding 25p and 30p Blu-Ray streams. - */ - - int b_fake_interlaced; - - /* Don't optimize header parameters based on video content, e.g. ensure that splitting an input video, compressing - * each part, and stitching them back together will result in identical SPS/PPS. This is necessary for stitching - * with container formats that don't allow multiple SPS/PPS. */ - int b_stitchable; - - int b_opencl; /* use OpenCL when available */ - int i_opencl_device; /* specify count of GPU devices to skip, for CLI users */ - void *opencl_device_id; /* pass explicit cl_device_id as void*, for API users */ - char *psz_clbin_file; /* filename (in UTF-8) of the compiled OpenCL kernel cache file */ - - /* Slicing parameters */ - int i_slice_max_size; /* Max size per slice in bytes; includes estimated NAL overhead. */ - int i_slice_max_mbs; /* Max number of MBs per slice; overrides i_slice_count. */ - int i_slice_min_mbs; /* Min number of MBs per slice */ - int i_slice_count; /* Number of slices per frame: forces rectangular slices. */ - int i_slice_count_max; /* Absolute cap on slices per frame; stops applying slice-max-size - * and slice-max-mbs if this is reached. */ - - /* Optional callback for freeing this x264_param_t when it is done being used. - * Only used when the x264_param_t sits in memory for an indefinite period of time, - * i.e. when an x264_param_t is passed to x264_t in an x264_picture_t or in zones. - * Not used when x264_encoder_reconfig is called directly. */ - void (*param_free)( void* ); - - /* Optional low-level callback for low-latency encoding. Called for each output NAL unit - * immediately after the NAL unit is finished encoding. This allows the calling application - * to begin processing video data (e.g. by sending packets over a network) before the frame - * is done encoding. - * - * This callback MUST do the following in order to work correctly: - * 1) Have available an output buffer of at least size nal->i_payload*3/2 + 5 + 64. - * 2) Call x264_nal_encode( h, dst, nal ), where dst is the output buffer. - * After these steps, the content of nal is valid and can be used in the same way as if - * the NAL unit were output by x264_encoder_encode. - * - * This does not need to be synchronous with the encoding process: the data pointed to - * by nal (both before and after x264_nal_encode) will remain valid until the next - * x264_encoder_encode call. The callback must be re-entrant. - * - * This callback does not work with frame-based threads; threads must be disabled - * or sliced-threads enabled. This callback also does not work as one would expect - * with HRD -- since the buffering period SEI cannot be calculated until the frame - * is finished encoding, it will not be sent via this callback. - * - * Note also that the NALs are not necessarily returned in order when sliced threads is - * enabled. Accordingly, the variable i_first_mb and i_last_mb are available in - * x264_nal_t to help the calling application reorder the slices if necessary. - * - * When this callback is enabled, x264_encoder_encode does not return valid NALs; - * the calling application is expected to acquire all output NALs through the callback. - * - * It is generally sensible to combine this callback with a use of slice-max-mbs or - * slice-max-size. - * - * The opaque pointer is the opaque pointer from the input frame associated with this - * NAL unit. This helps distinguish between nalu_process calls from different sources, - * e.g. if doing multiple encodes in one process. - */ - void (*nalu_process)( x264_t *h, x264_nal_t *nal, void *opaque ); - - /* For internal use only */ - void *opaque; -} x264_param_t; - -X264_API void x264_nal_encode( x264_t *h, uint8_t *dst, x264_nal_t *nal ); - -/**************************************************************************** - * H.264 level restriction information - ****************************************************************************/ - -typedef struct x264_level_t -{ - uint8_t level_idc; - int32_t mbps; /* max macroblock processing rate (macroblocks/sec) */ - int32_t frame_size; /* max frame size (macroblocks) */ - int32_t dpb; /* max decoded picture buffer (mbs) */ - int32_t bitrate; /* max bitrate (kbit/sec) */ - int32_t cpb; /* max vbv buffer (kbit) */ - uint16_t mv_range; /* max vertical mv component range (pixels) */ - uint8_t mvs_per_2mb; /* max mvs per 2 consecutive mbs. */ - uint8_t slice_rate; /* ?? */ - uint8_t mincr; /* min compression ratio */ - uint8_t bipred8x8; /* limit bipred to >=8x8 */ - uint8_t direct8x8; /* limit b_direct to >=8x8 */ - uint8_t frame_only; /* forbid interlacing */ -} x264_level_t; - -/* all of the levels defined in the standard, terminated by .level_idc=0 */ -X264_API extern const x264_level_t x264_levels[]; - -/**************************************************************************** - * Basic parameter handling functions - ****************************************************************************/ - -/* x264_param_default: - * fill x264_param_t with default values and do CPU detection */ -X264_API void x264_param_default( x264_param_t * ); - -/* x264_param_parse: - * set one parameter by name. - * returns 0 on success, or returns one of the following errors. - * note: BAD_VALUE occurs only if it can't even parse the value, - * numerical range is not checked until x264_encoder_open() or - * x264_encoder_reconfig(). - * value=NULL means "true" for boolean options, but is a BAD_VALUE for non-booleans. - * can allocate memory which should be freed by call of x264_param_cleanup. */ -#define X264_PARAM_BAD_NAME (-1) -#define X264_PARAM_BAD_VALUE (-2) -#define X264_PARAM_ALLOC_FAILED (-3) -X264_API int x264_param_parse( x264_param_t *, const char *name, const char *value ); - -/* x264_param_cleanup: - * Cleans up and frees allocated members of x264_param_t. - * This *does not* free the x264_param_t itself, as it may exist on the - * stack. It only frees any members of the struct that were allocated by - * x264 itself, in e.g. x264_param_parse(). */ -X264_API void x264_param_cleanup( x264_param_t *param ); - -/**************************************************************************** - * Advanced parameter handling functions - ****************************************************************************/ - -/* These functions expose the full power of x264's preset-tune-profile system for - * easy adjustment of large numbers of internal parameters. - * - * In order to replicate x264CLI's option handling, these functions MUST be called - * in the following order: - * 1) x264_param_default_preset - * 2) Custom user options (via param_parse or directly assigned variables) - * 3) x264_param_apply_fastfirstpass - * 4) x264_param_apply_profile - * - * Additionally, x264CLI does not apply step 3 if the preset chosen is "placebo" - * or --slow-firstpass is set. */ - -/* x264_param_default_preset: - * The same as x264_param_default, but also use the passed preset and tune - * to modify the default settings. - * (either can be NULL, which implies no preset or no tune, respectively) - * - * Currently available presets are, ordered from fastest to slowest: */ -static const char * const x264_preset_names[] = { "ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo", 0 }; - -/* The presets can also be indexed numerically, as in: - * x264_param_default_preset( ¶m, "3", ... ) - * with ultrafast mapping to "0" and placebo mapping to "9". This mapping may - * of course change if new presets are added in between, but will always be - * ordered from fastest to slowest. - * - * Warning: the speed of these presets scales dramatically. Ultrafast is a full - * 100 times faster than placebo! - * - * Currently available tunings are: */ -static const char * const x264_tune_names[] = { "film", "animation", "grain", "stillimage", "psnr", "ssim", "fastdecode", "zerolatency", 0 }; - -/* Multiple tunings can be used if separated by a delimiter in ",./-+", - * however multiple psy tunings cannot be used. - * film, animation, grain, stillimage, psnr, and ssim are psy tunings. - * - * returns 0 on success, negative on failure (e.g. invalid preset/tune name). */ -X264_API int x264_param_default_preset( x264_param_t *, const char *preset, const char *tune ); - -/* x264_param_apply_fastfirstpass: - * If first-pass mode is set (rc.b_stat_read == 0, rc.b_stat_write == 1), - * modify the encoder settings to disable options generally not useful on - * the first pass. */ -X264_API void x264_param_apply_fastfirstpass( x264_param_t * ); - -/* x264_param_apply_profile: - * Applies the restrictions of the given profile. - * Currently available profiles are, from most to least restrictive: */ -static const char * const x264_profile_names[] = { "baseline", "main", "high", "high10", "high422", "high444", 0 }; - -/* (can be NULL, in which case the function will do nothing) - * - * Does NOT guarantee that the given profile will be used: if the restrictions - * of "High" are applied to settings that are already Baseline-compatible, the - * stream will remain baseline. In short, it does not increase settings, only - * decrease them. - * - * returns 0 on success, negative on failure (e.g. invalid profile name). */ -X264_API int x264_param_apply_profile( x264_param_t *, const char *profile ); - -/**************************************************************************** - * Picture structures and functions - ****************************************************************************/ - -/* x264_chroma_format: - * Specifies the chroma formats that x264 supports encoding. When this - * value is non-zero, then it represents a X264_CSP_* that is the only - * chroma format that x264 supports encoding. If the value is 0 then - * there are no restrictions. */ -X264_API extern const int x264_chroma_format; - -enum pic_struct_e -{ - PIC_STRUCT_AUTO = 0, // automatically decide (default) - PIC_STRUCT_PROGRESSIVE = 1, // progressive frame - // "TOP" and "BOTTOM" are not supported in x264 (PAFF only) - PIC_STRUCT_TOP_BOTTOM = 4, // top field followed by bottom - PIC_STRUCT_BOTTOM_TOP = 5, // bottom field followed by top - PIC_STRUCT_TOP_BOTTOM_TOP = 6, // top field, bottom field, top field repeated - PIC_STRUCT_BOTTOM_TOP_BOTTOM = 7, // bottom field, top field, bottom field repeated - PIC_STRUCT_DOUBLE = 8, // double frame - PIC_STRUCT_TRIPLE = 9, // triple frame -}; - -typedef struct x264_hrd_t -{ - double cpb_initial_arrival_time; - double cpb_final_arrival_time; - double cpb_removal_time; - - double dpb_output_time; -} x264_hrd_t; - -/* Arbitrary user SEI: - * Payload size is in bytes and the payload pointer must be valid. - * Payload types and syntax can be found in Annex D of the H.264 Specification. - * SEI payload alignment bits as described in Annex D must be included at the - * end of the payload if needed. - * The payload should not be NAL-encapsulated. - * Payloads are written first in order of input, apart from in the case when HRD - * is enabled where payloads are written after the Buffering Period SEI. */ - -typedef struct x264_sei_payload_t -{ - int payload_size; - int payload_type; - uint8_t *payload; -} x264_sei_payload_t; - -typedef struct x264_sei_t -{ - int num_payloads; - x264_sei_payload_t *payloads; - /* In: optional callback to free each payload AND x264_sei_payload_t when used. */ - void (*sei_free)( void* ); -} x264_sei_t; - -typedef struct x264_image_t -{ - int i_csp; /* Colorspace */ - int i_plane; /* Number of image planes */ - int i_stride[4]; /* Strides for each plane */ - uint8_t *plane[4]; /* Pointers to each plane */ -} x264_image_t; - -typedef struct x264_image_properties_t -{ - /* All arrays of data here are ordered as follows: - * each array contains one offset per macroblock, in raster scan order. In interlaced - * mode, top-field MBs and bottom-field MBs are interleaved at the row level. - * Macroblocks are 16x16 blocks of pixels (with respect to the luma plane). For the - * purposes of calculating the number of macroblocks, width and height are rounded up to - * the nearest 16. If in interlaced mode, height is rounded up to the nearest 32 instead. */ - - /* In: an array of quantizer offsets to be applied to this image during encoding. - * These are added on top of the decisions made by x264. - * Offsets can be fractional; they are added before QPs are rounded to integer. - * Adaptive quantization must be enabled to use this feature. Behavior if quant - * offsets differ between encoding passes is undefined. */ - float *quant_offsets; - /* In: optional callback to free quant_offsets when used. - * Useful if one wants to use a different quant_offset array for each frame. */ - void (*quant_offsets_free)( void* ); - - /* In: optional array of flags for each macroblock. - * Allows specifying additional information for the encoder such as which macroblocks - * remain unchanged. Usable flags are listed below. - * x264_param_t.analyse.b_mb_info must be set to use this, since x264 needs to track - * extra data internally to make full use of this information. - * - * Out: if b_mb_info_update is set, x264 will update this array as a result of encoding. - * - * For "MBINFO_CONSTANT", it will remove this flag on any macroblock whose decoded - * pixels have changed. This can be useful for e.g. noting which areas of the - * frame need to actually be blitted. Note: this intentionally ignores the effects - * of deblocking for the current frame, which should be fine unless one needs exact - * pixel-perfect accuracy. - * - * Results for MBINFO_CONSTANT are currently only set for P-frames, and are not - * guaranteed to enumerate all blocks which haven't changed. (There may be false - * negatives, but no false positives.) - */ - uint8_t *mb_info; - /* In: optional callback to free mb_info when used. */ - void (*mb_info_free)( void* ); - - /* The macroblock is constant and remains unchanged from the previous frame. */ - #define X264_MBINFO_CONSTANT (1U<<0) - /* More flags may be added in the future. */ - - /* Out: SSIM of the the frame luma (if x264_param_t.b_ssim is set) */ - double f_ssim; - /* Out: Average PSNR of the frame (if x264_param_t.b_psnr is set) */ - double f_psnr_avg; - /* Out: PSNR of Y, U, and V (if x264_param_t.b_psnr is set) */ - double f_psnr[3]; - - /* Out: Average effective CRF of the encoded frame */ - double f_crf_avg; -} x264_image_properties_t; - -typedef struct x264_picture_t -{ - /* In: force picture type (if not auto) - * If x264 encoding parameters are violated in the forcing of picture types, - * x264 will correct the input picture type and log a warning. - * Out: type of the picture encoded */ - int i_type; - /* In: force quantizer for != X264_QP_AUTO */ - int i_qpplus1; - /* In: pic_struct, for pulldown/doubling/etc...used only if b_pic_struct=1. - * use pic_struct_e for pic_struct inputs - * Out: pic_struct element associated with frame */ - int i_pic_struct; - /* Out: whether this frame is a keyframe. Important when using modes that result in - * SEI recovery points being used instead of IDR frames. */ - int b_keyframe; - /* In: user pts, Out: pts of encoded picture (user)*/ - int64_t i_pts; - /* Out: frame dts. When the pts of the first frame is close to zero, - * initial frames may have a negative dts which must be dealt with by any muxer */ - int64_t i_dts; - /* In: custom encoding parameters to be set from this frame forwards - (in coded order, not display order). If NULL, continue using - parameters from the previous frame. Some parameters, such as - aspect ratio, can only be changed per-GOP due to the limitations - of H.264 itself; in this case, the caller must force an IDR frame - if it needs the changed parameter to apply immediately. */ - x264_param_t *param; - /* In: raw image data */ - /* Out: reconstructed image data. x264 may skip part of the reconstruction process, - e.g. deblocking, in frames where it isn't necessary. To force complete - reconstruction, at a small speed cost, set b_full_recon. */ - x264_image_t img; - /* In: optional information to modify encoder decisions for this frame - * Out: information about the encoded frame */ - x264_image_properties_t prop; - /* Out: HRD timing information. Output only when i_nal_hrd is set. */ - x264_hrd_t hrd_timing; - /* In: arbitrary user SEI (e.g subtitles, AFDs) */ - x264_sei_t extra_sei; - /* private user data. copied from input to output frames. */ - void *opaque; -} x264_picture_t; - -/* x264_picture_init: - * initialize an x264_picture_t. Needs to be done if the calling application - * allocates its own x264_picture_t as opposed to using x264_picture_alloc. */ -X264_API void x264_picture_init( x264_picture_t *pic ); - -/* x264_picture_alloc: - * alloc data for a picture. You must call x264_picture_clean on it. - * returns 0 on success, or -1 on malloc failure or invalid colorspace. */ -X264_API int x264_picture_alloc( x264_picture_t *pic, int i_csp, int i_width, int i_height ); - -/* x264_picture_clean: - * free associated resource for a x264_picture_t allocated with - * x264_picture_alloc ONLY */ -X264_API void x264_picture_clean( x264_picture_t *pic ); - -/**************************************************************************** - * Encoder functions - ****************************************************************************/ - -/* Force a link error in the case of linking against an incompatible API version. - * Glue #defines exist to force correct macro expansion; the final output of the macro - * is x264_encoder_open_##X264_BUILD (for purposes of dlopen). */ -#define x264_encoder_glue1(x,y) x##y -#define x264_encoder_glue2(x,y) x264_encoder_glue1(x,y) -#define x264_encoder_open x264_encoder_glue2(x264_encoder_open_,X264_BUILD) - -/* x264_encoder_open: - * create a new encoder handler, all parameters from x264_param_t are copied */ -X264_API x264_t *x264_encoder_open( x264_param_t * ); - -/* x264_encoder_reconfig: - * various parameters from x264_param_t are copied. - * this takes effect immediately, on whichever frame is encoded next; - * due to delay, this may not be the next frame passed to encoder_encode. - * if the change should apply to some particular frame, use x264_picture_t->param instead. - * returns 0 on success, negative on parameter validation error. - * not all parameters can be changed; see the actual function for a detailed breakdown. - * - * since not all parameters can be changed, moving from preset to preset may not always - * fully copy all relevant parameters, but should still work usably in practice. however, - * more so than for other presets, many of the speed shortcuts used in ultrafast cannot be - * switched out of; using reconfig to switch between ultrafast and other presets is not - * recommended without a more fine-grained breakdown of parameters to take this into account. */ -X264_API int x264_encoder_reconfig( x264_t *, x264_param_t * ); -/* x264_encoder_parameters: - * copies the current internal set of parameters to the pointer provided - * by the caller. useful when the calling application needs to know - * how x264_encoder_open has changed the parameters, or the current state - * of the encoder after multiple x264_encoder_reconfig calls. - * note that the data accessible through pointers in the returned param struct - * (e.g. filenames) should not be modified by the calling application. */ -X264_API void x264_encoder_parameters( x264_t *, x264_param_t * ); -/* x264_encoder_headers: - * return the SPS and PPS that will be used for the whole stream. - * *pi_nal is the number of NAL units outputted in pp_nal. - * returns the number of bytes in the returned NALs. - * returns negative on error. - * the payloads of all output NALs are guaranteed to be sequential in memory. */ -X264_API int x264_encoder_headers( x264_t *, x264_nal_t **pp_nal, int *pi_nal ); -/* x264_encoder_encode: - * encode one picture. - * *pi_nal is the number of NAL units outputted in pp_nal. - * returns the number of bytes in the returned NALs. - * returns negative on error and zero if no NAL units returned. - * the payloads of all output NALs are guaranteed to be sequential in memory. */ -X264_API int x264_encoder_encode( x264_t *, x264_nal_t **pp_nal, int *pi_nal, x264_picture_t *pic_in, x264_picture_t *pic_out ); -/* x264_encoder_close: - * close an encoder handler */ -X264_API void x264_encoder_close( x264_t * ); -/* x264_encoder_delayed_frames: - * return the number of currently delayed (buffered) frames - * this should be used at the end of the stream, to know when you have all the encoded frames. */ -X264_API int x264_encoder_delayed_frames( x264_t * ); -/* x264_encoder_maximum_delayed_frames( x264_t * ): - * return the maximum number of delayed (buffered) frames that can occur with the current - * parameters. */ -X264_API int x264_encoder_maximum_delayed_frames( x264_t * ); -/* x264_encoder_intra_refresh: - * If an intra refresh is not in progress, begin one with the next P-frame. - * If an intra refresh is in progress, begin one as soon as the current one finishes. - * Requires that b_intra_refresh be set. - * - * Useful for interactive streaming where the client can tell the server that packet loss has - * occurred. In this case, keyint can be set to an extremely high value so that intra refreshes - * only occur when calling x264_encoder_intra_refresh. - * - * In multi-pass encoding, if x264_encoder_intra_refresh is called differently in each pass, - * behavior is undefined. - * - * Should not be called during an x264_encoder_encode. */ -X264_API void x264_encoder_intra_refresh( x264_t * ); -/* x264_encoder_invalidate_reference: - * An interactive error resilience tool, designed for use in a low-latency one-encoder-few-clients - * system. When the client has packet loss or otherwise incorrectly decodes a frame, the encoder - * can be told with this command to "forget" the frame and all frames that depend on it, referencing - * only frames that occurred before the loss. This will force a keyframe if no frames are left to - * reference after the aforementioned "forgetting". - * - * It is strongly recommended to use a large i_dpb_size in this case, which allows the encoder to - * keep around extra, older frames to fall back on in case more recent frames are all invalidated. - * Unlike increasing i_frame_reference, this does not increase the number of frames used for motion - * estimation and thus has no speed impact. It is also recommended to set a very large keyframe - * interval, so that keyframes are not used except as necessary for error recovery. - * - * x264_encoder_invalidate_reference is not currently compatible with the use of B-frames or intra - * refresh. - * - * In multi-pass encoding, if x264_encoder_invalidate_reference is called differently in each pass, - * behavior is undefined. - * - * Should not be called during an x264_encoder_encode, but multiple calls can be made simultaneously. - * - * Returns 0 on success, negative on failure. */ -X264_API int x264_encoder_invalidate_reference( x264_t *, int64_t pts ); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/prebuilts/arm/include/x264_config.h b/prebuilts/arm/include/x264_config.h deleted file mode 100644 index 4b4b60e..0000000 --- a/prebuilts/arm/include/x264_config.h +++ /dev/null @@ -1,8 +0,0 @@ -#define X264_GPL 1 -#define X264_INTERLACED 1 -#define X264_BIT_DEPTH 0 -#define X264_CHROMA_FORMAT 0 -#define X264_REV 3094 -#define X264_REV_DIFF 0 -#define X264_VERSION " r3094 bfc87b7" -#define X264_POINTVER "0.164.3094 bfc87b7" diff --git a/prebuilts/arm/include/xf86drm.h b/prebuilts/arm/include/xf86drm.h deleted file mode 100644 index 1631396..0000000 --- a/prebuilts/arm/include/xf86drm.h +++ /dev/null @@ -1,966 +0,0 @@ -/** - * \file xf86drm.h - * OS-independent header for DRM user-level library interface. - * - * \author Rickard E. (Rik) Faith - */ - -/* - * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - */ - -#ifndef _XF86DRM_H_ -#define _XF86DRM_H_ - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef DRM_MAX_MINOR -#define DRM_MAX_MINOR 16 -#endif - -#if defined(__linux__) - -#define DRM_IOCTL_NR(n) _IOC_NR(n) -#define DRM_IOC_VOID _IOC_NONE -#define DRM_IOC_READ _IOC_READ -#define DRM_IOC_WRITE _IOC_WRITE -#define DRM_IOC_READWRITE _IOC_READ|_IOC_WRITE -#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) - -#else /* One of the *BSDs */ - -#include -#define DRM_IOCTL_NR(n) ((n) & 0xff) -#define DRM_IOC_VOID IOC_VOID -#define DRM_IOC_READ IOC_OUT -#define DRM_IOC_WRITE IOC_IN -#define DRM_IOC_READWRITE IOC_INOUT -#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) - -#endif - - /* Defaults, if nothing set in xf86config */ -#define DRM_DEV_UID 0 -#define DRM_DEV_GID 0 -/* Default /dev/dri directory permissions 0755 */ -#define DRM_DEV_DIRMODE \ - (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH) -#define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) - -#ifdef __OpenBSD__ -#define DRM_DIR_NAME "/dev" -#define DRM_PRIMARY_MINOR_NAME "drm" -#define DRM_CONTROL_MINOR_NAME "drmC" -#define DRM_RENDER_MINOR_NAME "drmR" -#else -#define DRM_DIR_NAME "/dev/dri" -#define DRM_PRIMARY_MINOR_NAME "card" -#define DRM_CONTROL_MINOR_NAME "controlD" -#define DRM_RENDER_MINOR_NAME "renderD" -#define DRM_PROC_NAME "/proc/dri/" /* For backward Linux compatibility */ -#endif - -#define DRM_DEV_NAME "%s/" DRM_PRIMARY_MINOR_NAME "%d" -#define DRM_CONTROL_DEV_NAME "%s/" DRM_CONTROL_MINOR_NAME "%d" -#define DRM_RENDER_DEV_NAME "%s/" DRM_RENDER_MINOR_NAME "%d" - -#define DRM_NODE_NAME_MAX \ - (sizeof(DRM_DIR_NAME) + 1 /* slash */ \ - + MAX3(sizeof(DRM_PRIMARY_MINOR_NAME), \ - sizeof(DRM_CONTROL_MINOR_NAME), \ - sizeof(DRM_RENDER_MINOR_NAME)) \ - + sizeof("144") /* highest possible node number */ \ - + 1) /* NULL-terminator */ - -#define DRM_ERR_NO_DEVICE (-1001) -#define DRM_ERR_NO_ACCESS (-1002) -#define DRM_ERR_NOT_ROOT (-1003) -#define DRM_ERR_INVALID (-1004) -#define DRM_ERR_NO_FD (-1005) - -#define DRM_AGP_NO_HANDLE 0 - -typedef unsigned int drmSize, *drmSizePtr; /**< For mapped regions */ -typedef void *drmAddress, **drmAddressPtr; /**< For mapped regions */ - -#if (__GNUC__ >= 3) -#define DRM_PRINTFLIKE(f, a) __attribute__ ((format(__printf__, f, a))) -#else -#define DRM_PRINTFLIKE(f, a) -#endif - -typedef struct _drmServerInfo { - int (*debug_print)(const char *format, va_list ap) DRM_PRINTFLIKE(1,0); - int (*load_module)(const char *name); - void (*get_perms)(gid_t *, mode_t *); -} drmServerInfo, *drmServerInfoPtr; - -typedef struct drmHashEntry { - int fd; - void (*f)(int, void *, void *); - void *tagTable; -} drmHashEntry; - -extern int drmIoctl(int fd, unsigned long request, void *arg); -extern void *drmGetHashTable(void); -extern drmHashEntry *drmGetEntry(int fd); - -/** - * Driver version information. - * - * \sa drmGetVersion() and drmSetVersion(). - */ -typedef struct _drmVersion { - int version_major; /**< Major version */ - int version_minor; /**< Minor version */ - int version_patchlevel; /**< Patch level */ - int name_len; /**< Length of name buffer */ - char *name; /**< Name of driver */ - int date_len; /**< Length of date buffer */ - char *date; /**< User-space buffer to hold date */ - int desc_len; /**< Length of desc buffer */ - char *desc; /**< User-space buffer to hold desc */ -} drmVersion, *drmVersionPtr; - -typedef struct _drmStats { - unsigned long count; /**< Number of data */ - struct { - unsigned long value; /**< Value from kernel */ - const char *long_format; /**< Suggested format for long_name */ - const char *long_name; /**< Long name for value */ - const char *rate_format; /**< Suggested format for rate_name */ - const char *rate_name; /**< Short name for value per second */ - int isvalue; /**< True if value (vs. counter) */ - const char *mult_names; /**< Multiplier names (e.g., "KGM") */ - int mult; /**< Multiplier value (e.g., 1024) */ - int verbose; /**< Suggest only in verbose output */ - } data[15]; -} drmStatsT; - - - /* All of these enums *MUST* match with the - kernel implementation -- so do *NOT* - change them! (The drmlib implementation - will just copy the flags instead of - translating them.) */ -typedef enum { - DRM_FRAME_BUFFER = 0, /**< WC, no caching, no core dump */ - DRM_REGISTERS = 1, /**< no caching, no core dump */ - DRM_SHM = 2, /**< shared, cached */ - DRM_AGP = 3, /**< AGP/GART */ - DRM_SCATTER_GATHER = 4, /**< PCI scatter/gather */ - DRM_CONSISTENT = 5 /**< PCI consistent */ -} drmMapType; - -typedef enum { - DRM_RESTRICTED = 0x0001, /**< Cannot be mapped to client-virtual */ - DRM_READ_ONLY = 0x0002, /**< Read-only in client-virtual */ - DRM_LOCKED = 0x0004, /**< Physical pages locked */ - DRM_KERNEL = 0x0008, /**< Kernel requires access */ - DRM_WRITE_COMBINING = 0x0010, /**< Use write-combining, if available */ - DRM_CONTAINS_LOCK = 0x0020, /**< SHM page that contains lock */ - DRM_REMOVABLE = 0x0040 /**< Removable mapping */ -} drmMapFlags; - -/** - * \warning These values *MUST* match drm.h - */ -typedef enum { - /** \name Flags for DMA buffer dispatch */ - /*@{*/ - DRM_DMA_BLOCK = 0x01, /**< - * Block until buffer dispatched. - * - * \note the buffer may not yet have been - * processed by the hardware -- getting a - * hardware lock with the hardware quiescent - * will ensure that the buffer has been - * processed. - */ - DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */ - DRM_DMA_PRIORITY = 0x04, /**< High priority dispatch */ - /*@}*/ - - /** \name Flags for DMA buffer request */ - /*@{*/ - DRM_DMA_WAIT = 0x10, /**< Wait for free buffers */ - DRM_DMA_SMALLER_OK = 0x20, /**< Smaller-than-requested buffers OK */ - DRM_DMA_LARGER_OK = 0x40 /**< Larger-than-requested buffers OK */ - /*@}*/ -} drmDMAFlags; - -typedef enum { - DRM_PAGE_ALIGN = 0x01, - DRM_AGP_BUFFER = 0x02, - DRM_SG_BUFFER = 0x04, - DRM_FB_BUFFER = 0x08, - DRM_PCI_BUFFER_RO = 0x10 -} drmBufDescFlags; - -typedef enum { - DRM_LOCK_READY = 0x01, /**< Wait until hardware is ready for DMA */ - DRM_LOCK_QUIESCENT = 0x02, /**< Wait until hardware quiescent */ - DRM_LOCK_FLUSH = 0x04, /**< Flush this context's DMA queue first */ - DRM_LOCK_FLUSH_ALL = 0x08, /**< Flush all DMA queues first */ - /* These *HALT* flags aren't supported yet - -- they will be used to support the - full-screen DGA-like mode. */ - DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */ - DRM_HALT_CUR_QUEUES = 0x20 /**< Halt all current queues */ -} drmLockFlags; - -typedef enum { - DRM_CONTEXT_PRESERVED = 0x01, /**< This context is preserved and - never swapped. */ - DRM_CONTEXT_2DONLY = 0x02 /**< This context is for 2D rendering only. */ -} drm_context_tFlags, *drm_context_tFlagsPtr; - -typedef struct _drmBufDesc { - int count; /**< Number of buffers of this size */ - int size; /**< Size in bytes */ - int low_mark; /**< Low water mark */ - int high_mark; /**< High water mark */ -} drmBufDesc, *drmBufDescPtr; - -typedef struct _drmBufInfo { - int count; /**< Number of buffers described in list */ - drmBufDescPtr list; /**< List of buffer descriptions */ -} drmBufInfo, *drmBufInfoPtr; - -typedef struct _drmBuf { - int idx; /**< Index into the master buffer list */ - int total; /**< Buffer size */ - int used; /**< Amount of buffer in use (for DMA) */ - drmAddress address; /**< Address */ -} drmBuf, *drmBufPtr; - -/** - * Buffer mapping information. - * - * Used by drmMapBufs() and drmUnmapBufs() to store information about the - * mapped buffers. - */ -typedef struct _drmBufMap { - int count; /**< Number of buffers mapped */ - drmBufPtr list; /**< Buffers */ -} drmBufMap, *drmBufMapPtr; - -typedef struct _drmLock { - volatile unsigned int lock; - char padding[60]; - /* This is big enough for most current (and future?) architectures: - DEC Alpha: 32 bytes - Intel Merced: ? - Intel P5/PPro/PII/PIII: 32 bytes - Intel StrongARM: 32 bytes - Intel i386/i486: 16 bytes - MIPS: 32 bytes (?) - Motorola 68k: 16 bytes - Motorola PowerPC: 32 bytes - Sun SPARC: 32 bytes - */ -} drmLock, *drmLockPtr; - -/** - * Indices here refer to the offset into - * list in drmBufInfo - */ -typedef struct _drmDMAReq { - drm_context_t context; /**< Context handle */ - int send_count; /**< Number of buffers to send */ - int *send_list; /**< List of handles to buffers */ - int *send_sizes; /**< Lengths of data to send, in bytes */ - drmDMAFlags flags; /**< Flags */ - int request_count; /**< Number of buffers requested */ - int request_size; /**< Desired size of buffers requested */ - int *request_list; /**< Buffer information */ - int *request_sizes; /**< Minimum acceptable sizes */ - int granted_count; /**< Number of buffers granted at this size */ -} drmDMAReq, *drmDMAReqPtr; - -typedef struct _drmRegion { - drm_handle_t handle; - unsigned int offset; - drmSize size; - drmAddress map; -} drmRegion, *drmRegionPtr; - -typedef struct _drmTextureRegion { - unsigned char next; - unsigned char prev; - unsigned char in_use; - unsigned char padding; /**< Explicitly pad this out */ - unsigned int age; -} drmTextureRegion, *drmTextureRegionPtr; - - -typedef enum { - DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */ - DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */ - /* bits 1-6 are reserved for high crtcs */ - DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e, - DRM_VBLANK_EVENT = 0x4000000, /**< Send event instead of blocking */ - DRM_VBLANK_FLIP = 0x8000000, /**< Scheduled buffer swap should flip */ - DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */ - DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */ - DRM_VBLANK_SIGNAL = 0x40000000 /* Send signal instead of blocking */ -} drmVBlankSeqType; -#define DRM_VBLANK_HIGH_CRTC_SHIFT 1 - -typedef struct _drmVBlankReq { - drmVBlankSeqType type; - unsigned int sequence; - unsigned long signal; -} drmVBlankReq, *drmVBlankReqPtr; - -typedef struct _drmVBlankReply { - drmVBlankSeqType type; - unsigned int sequence; - long tval_sec; - long tval_usec; -} drmVBlankReply, *drmVBlankReplyPtr; - -typedef union _drmVBlank { - drmVBlankReq request; - drmVBlankReply reply; -} drmVBlank, *drmVBlankPtr; - -typedef struct _drmSetVersion { - int drm_di_major; - int drm_di_minor; - int drm_dd_major; - int drm_dd_minor; -} drmSetVersion, *drmSetVersionPtr; - -#define __drm_dummy_lock(lock) (*(__volatile__ unsigned int *)lock) - -#define DRM_LOCK_HELD 0x80000000U /**< Hardware lock is held */ -#define DRM_LOCK_CONT 0x40000000U /**< Hardware lock is contended */ - -#if defined(__GNUC__) && (__GNUC__ >= 2) -# if defined(__i386) || defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__) - /* Reflect changes here to drmP.h */ -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - int __dummy; /* Can't mark eax as clobbered */ \ - __asm__ __volatile__( \ - "lock ; cmpxchg %4,%1\n\t" \ - "setnz %0" \ - : "=d" (__ret), \ - "=m" (__drm_dummy_lock(lock)), \ - "=a" (__dummy) \ - : "2" (old), \ - "r" (new)); \ - } while (0) - -#elif defined(__alpha__) - -#define DRM_CAS(lock, old, new, ret) \ - do { \ - int tmp, old32; \ - __asm__ __volatile__( \ - " addl $31, %5, %3\n" \ - "1: ldl_l %0, %2\n" \ - " cmpeq %0, %3, %1\n" \ - " beq %1, 2f\n" \ - " mov %4, %0\n" \ - " stl_c %0, %2\n" \ - " beq %0, 3f\n" \ - " mb\n" \ - "2: cmpeq %1, 0, %1\n" \ - ".subsection 2\n" \ - "3: br 1b\n" \ - ".previous" \ - : "=&r"(tmp), "=&r"(ret), \ - "=m"(__drm_dummy_lock(lock)), \ - "=&r"(old32) \ - : "r"(new), "r"(old) \ - : "memory"); \ - } while (0) - -#elif defined(__sparc__) - -#define DRM_CAS(lock,old,new,__ret) \ -do { register unsigned int __old __asm("o0"); \ - register unsigned int __new __asm("o1"); \ - register volatile unsigned int *__lock __asm("o2"); \ - __old = old; \ - __new = new; \ - __lock = (volatile unsigned int *)lock; \ - __asm__ __volatile__( \ - /*"cas [%2], %3, %0"*/ \ - ".word 0xd3e29008\n\t" \ - /*"membar #StoreStore | #StoreLoad"*/ \ - ".word 0x8143e00a" \ - : "=&r" (__new) \ - : "0" (__new), \ - "r" (__lock), \ - "r" (__old) \ - : "memory"); \ - __ret = (__new != __old); \ -} while(0) - -#elif defined(__ia64__) - -#ifdef __INTEL_COMPILER -/* this currently generates bad code (missing stop bits)... */ -#include - -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - unsigned long __result, __old = (old) & 0xffffffff; \ - __mf(); \ - __result = _InterlockedCompareExchange_acq(&__drm_dummy_lock(lock), (new), __old);\ - __ret = (__result) != (__old); \ -/* __ret = (__sync_val_compare_and_swap(&__drm_dummy_lock(lock), \ - (old), (new)) \ - != (old)); */\ - } while (0) - -#else -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - unsigned int __result, __old = (old); \ - __asm__ __volatile__( \ - "mf\n" \ - "mov ar.ccv=%2\n" \ - ";;\n" \ - "cmpxchg4.acq %0=%1,%3,ar.ccv" \ - : "=r" (__result), "=m" (__drm_dummy_lock(lock)) \ - : "r" ((unsigned long)__old), "r" (new) \ - : "memory"); \ - __ret = (__result) != (__old); \ - } while (0) - -#endif - -#elif defined(__powerpc__) - -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - __asm__ __volatile__( \ - "sync;" \ - "0: lwarx %0,0,%1;" \ - " xor. %0,%3,%0;" \ - " bne 1f;" \ - " stwcx. %2,0,%1;" \ - " bne- 0b;" \ - "1: " \ - "sync;" \ - : "=&r"(__ret) \ - : "r"(lock), "r"(new), "r"(old) \ - : "cr0", "memory"); \ - } while (0) - -# elif defined (__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ - || defined (__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \ - || defined (__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) \ - || defined (__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ - || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ - || defined(__ARM_ARCH_7EM__) - /* excluding ARMv4/ARMv5 and lower (lacking ldrex/strex support) */ - #undef DRM_DEV_MODE - #define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) - - #define DRM_CAS(lock,old,new,__ret) \ - do { \ - __asm__ __volatile__ ( \ - "1: ldrex %0, [%1]\n" \ - " teq %0, %2\n" \ - " ite eq\n" \ - " strexeq %0, %3, [%1]\n" \ - " movne %0, #1\n" \ - : "=&r" (__ret) \ - : "r" (lock), "r" (old), "r" (new) \ - : "cc","memory"); \ - } while (0) - -#endif /* architecture */ -#endif /* __GNUC__ >= 2 */ - -#ifndef DRM_CAS -#define DRM_CAS(lock,old,new,ret) do { ret=1; } while (0) /* FAST LOCK FAILS */ -#endif - -#if defined(__alpha__) -#define DRM_CAS_RESULT(_result) long _result -#elif defined(__powerpc__) -#define DRM_CAS_RESULT(_result) int _result -#else -#define DRM_CAS_RESULT(_result) char _result -#endif - -#define DRM_LIGHT_LOCK(fd,lock,context) \ - do { \ - DRM_CAS_RESULT(__ret); \ - DRM_CAS(lock,context,DRM_LOCK_HELD|context,__ret); \ - if (__ret) drmGetLock(fd,context,0); \ - } while(0) - - /* This one counts fast locks -- for - benchmarking only. */ -#define DRM_LIGHT_LOCK_COUNT(fd,lock,context,count) \ - do { \ - DRM_CAS_RESULT(__ret); \ - DRM_CAS(lock,context,DRM_LOCK_HELD|context,__ret); \ - if (__ret) drmGetLock(fd,context,0); \ - else ++count; \ - } while(0) - -#define DRM_LOCK(fd,lock,context,flags) \ - do { \ - if (flags) drmGetLock(fd,context,flags); \ - else DRM_LIGHT_LOCK(fd,lock,context); \ - } while(0) - -#define DRM_UNLOCK(fd,lock,context) \ - do { \ - DRM_CAS_RESULT(__ret); \ - DRM_CAS(lock,DRM_LOCK_HELD|context,context,__ret); \ - if (__ret) drmUnlock(fd,context); \ - } while(0) - - /* Simple spin locks */ -#define DRM_SPINLOCK(spin,val) \ - do { \ - DRM_CAS_RESULT(__ret); \ - do { \ - DRM_CAS(spin,0,val,__ret); \ - if (__ret) while ((spin)->lock); \ - } while (__ret); \ - } while(0) - -#define DRM_SPINLOCK_TAKE(spin,val) \ - do { \ - DRM_CAS_RESULT(__ret); \ - int cur; \ - do { \ - cur = (*spin).lock; \ - DRM_CAS(spin,cur,val,__ret); \ - } while (__ret); \ - } while(0) - -#define DRM_SPINLOCK_COUNT(spin,val,count,__ret) \ - do { \ - int __i; \ - __ret = 1; \ - for (__i = 0; __ret && __i < count; __i++) { \ - DRM_CAS(spin,0,val,__ret); \ - if (__ret) for (;__i < count && (spin)->lock; __i++); \ - } \ - } while(0) - -#define DRM_SPINUNLOCK(spin,val) \ - do { \ - DRM_CAS_RESULT(__ret); \ - if ((*spin).lock == val) { /* else server stole lock */ \ - do { \ - DRM_CAS(spin,val,0,__ret); \ - } while (__ret); \ - } \ - } while(0) - - - -/* General user-level programmer's API: unprivileged */ -extern int drmAvailable(void); -extern int drmOpen(const char *name, const char *busid); - -#define DRM_NODE_PRIMARY 0 -#define DRM_NODE_CONTROL 1 -#define DRM_NODE_RENDER 2 -#define DRM_NODE_MAX 3 - -extern int drmOpenWithType(const char *name, const char *busid, - int type); - -extern int drmOpenControl(int minor); -extern int drmOpenRender(int minor); -extern int drmClose(int fd); -extern drmVersionPtr drmGetVersion(int fd); -extern drmVersionPtr drmGetLibVersion(int fd); -extern int drmGetCap(int fd, uint64_t capability, uint64_t *value); -extern void drmFreeVersion(drmVersionPtr); -extern int drmGetMagic(int fd, drm_magic_t * magic); -extern char *drmGetBusid(int fd); -extern int drmGetInterruptFromBusID(int fd, int busnum, int devnum, - int funcnum); -extern int drmGetMap(int fd, int idx, drm_handle_t *offset, - drmSize *size, drmMapType *type, - drmMapFlags *flags, drm_handle_t *handle, - int *mtrr); -extern int drmGetClient(int fd, int idx, int *auth, int *pid, - int *uid, unsigned long *magic, - unsigned long *iocs); -extern int drmGetStats(int fd, drmStatsT *stats); -extern int drmSetInterfaceVersion(int fd, drmSetVersion *version); -extern int drmCommandNone(int fd, unsigned long drmCommandIndex); -extern int drmCommandRead(int fd, unsigned long drmCommandIndex, - void *data, unsigned long size); -extern int drmCommandWrite(int fd, unsigned long drmCommandIndex, - void *data, unsigned long size); -extern int drmCommandWriteRead(int fd, unsigned long drmCommandIndex, - void *data, unsigned long size); - -/* General user-level programmer's API: X server (root) only */ -extern void drmFreeBusid(const char *busid); -extern int drmSetBusid(int fd, const char *busid); -extern int drmAuthMagic(int fd, drm_magic_t magic); -extern int drmAddMap(int fd, - drm_handle_t offset, - drmSize size, - drmMapType type, - drmMapFlags flags, - drm_handle_t * handle); -extern int drmRmMap(int fd, drm_handle_t handle); -extern int drmAddContextPrivateMapping(int fd, drm_context_t ctx_id, - drm_handle_t handle); - -extern int drmAddBufs(int fd, int count, int size, - drmBufDescFlags flags, - int agp_offset); -extern int drmMarkBufs(int fd, double low, double high); -extern int drmCreateContext(int fd, drm_context_t * handle); -extern int drmSetContextFlags(int fd, drm_context_t context, - drm_context_tFlags flags); -extern int drmGetContextFlags(int fd, drm_context_t context, - drm_context_tFlagsPtr flags); -extern int drmAddContextTag(int fd, drm_context_t context, void *tag); -extern int drmDelContextTag(int fd, drm_context_t context); -extern void *drmGetContextTag(int fd, drm_context_t context); -extern drm_context_t * drmGetReservedContextList(int fd, int *count); -extern void drmFreeReservedContextList(drm_context_t *); -extern int drmSwitchToContext(int fd, drm_context_t context); -extern int drmDestroyContext(int fd, drm_context_t handle); -extern int drmCreateDrawable(int fd, drm_drawable_t * handle); -extern int drmDestroyDrawable(int fd, drm_drawable_t handle); -extern int drmUpdateDrawableInfo(int fd, drm_drawable_t handle, - drm_drawable_info_type_t type, - unsigned int num, void *data); -extern int drmCtlInstHandler(int fd, int irq); -extern int drmCtlUninstHandler(int fd); -extern int drmSetClientCap(int fd, uint64_t capability, - uint64_t value); - -extern int drmCrtcGetSequence(int fd, uint32_t crtcId, - uint64_t *sequence, uint64_t *ns); -extern int drmCrtcQueueSequence(int fd, uint32_t crtcId, - uint32_t flags, uint64_t sequence, - uint64_t *sequence_queued, - uint64_t user_data); -/* General user-level programmer's API: authenticated client and/or X */ -extern int drmMap(int fd, - drm_handle_t handle, - drmSize size, - drmAddressPtr address); -extern int drmUnmap(drmAddress address, drmSize size); -extern drmBufInfoPtr drmGetBufInfo(int fd); -extern drmBufMapPtr drmMapBufs(int fd); -extern int drmUnmapBufs(drmBufMapPtr bufs); -extern int drmDMA(int fd, drmDMAReqPtr request); -extern int drmFreeBufs(int fd, int count, int *list); -extern int drmGetLock(int fd, - drm_context_t context, - drmLockFlags flags); -extern int drmUnlock(int fd, drm_context_t context); -extern int drmFinish(int fd, int context, drmLockFlags flags); -extern int drmGetContextPrivateMapping(int fd, drm_context_t ctx_id, - drm_handle_t * handle); - -/* AGP/GART support: X server (root) only */ -extern int drmAgpAcquire(int fd); -extern int drmAgpRelease(int fd); -extern int drmAgpEnable(int fd, unsigned long mode); -extern int drmAgpAlloc(int fd, unsigned long size, - unsigned long type, unsigned long *address, - drm_handle_t *handle); -extern int drmAgpFree(int fd, drm_handle_t handle); -extern int drmAgpBind(int fd, drm_handle_t handle, - unsigned long offset); -extern int drmAgpUnbind(int fd, drm_handle_t handle); - -/* AGP/GART info: authenticated client and/or X */ -extern int drmAgpVersionMajor(int fd); -extern int drmAgpVersionMinor(int fd); -extern unsigned long drmAgpGetMode(int fd); -extern unsigned long drmAgpBase(int fd); /* Physical location */ -extern unsigned long drmAgpSize(int fd); /* Bytes */ -extern unsigned long drmAgpMemoryUsed(int fd); -extern unsigned long drmAgpMemoryAvail(int fd); -extern unsigned int drmAgpVendorId(int fd); -extern unsigned int drmAgpDeviceId(int fd); - -/* PCI scatter/gather support: X server (root) only */ -extern int drmScatterGatherAlloc(int fd, unsigned long size, - drm_handle_t *handle); -extern int drmScatterGatherFree(int fd, drm_handle_t handle); - -extern int drmWaitVBlank(int fd, drmVBlankPtr vbl); - -/* Support routines */ -extern void drmSetServerInfo(drmServerInfoPtr info); -extern int drmError(int err, const char *label); -extern void *drmMalloc(int size); -extern void drmFree(void *pt); - -/* Hash table routines */ -extern void *drmHashCreate(void); -extern int drmHashDestroy(void *t); -extern int drmHashLookup(void *t, unsigned long key, void **value); -extern int drmHashInsert(void *t, unsigned long key, void *value); -extern int drmHashDelete(void *t, unsigned long key); -extern int drmHashFirst(void *t, unsigned long *key, void **value); -extern int drmHashNext(void *t, unsigned long *key, void **value); - -/* PRNG routines */ -extern void *drmRandomCreate(unsigned long seed); -extern int drmRandomDestroy(void *state); -extern unsigned long drmRandom(void *state); -extern double drmRandomDouble(void *state); - -/* Skip list routines */ - -extern void *drmSLCreate(void); -extern int drmSLDestroy(void *l); -extern int drmSLLookup(void *l, unsigned long key, void **value); -extern int drmSLInsert(void *l, unsigned long key, void *value); -extern int drmSLDelete(void *l, unsigned long key); -extern int drmSLNext(void *l, unsigned long *key, void **value); -extern int drmSLFirst(void *l, unsigned long *key, void **value); -extern void drmSLDump(void *l); -extern int drmSLLookupNeighbors(void *l, unsigned long key, - unsigned long *prev_key, void **prev_value, - unsigned long *next_key, void **next_value); - -extern int drmOpenOnce(void *unused, const char *BusID, int *newlyopened); -extern int drmOpenOnceWithType(const char *BusID, int *newlyopened, int type); -extern void drmCloseOnce(int fd); -extern void drmMsg(const char *format, ...) DRM_PRINTFLIKE(1, 2); - -extern int drmSetMaster(int fd); -extern int drmDropMaster(int fd); -extern int drmIsMaster(int fd); - -#define DRM_EVENT_CONTEXT_VERSION 4 - -typedef struct _drmEventContext { - - /* This struct is versioned so we can add more pointers if we - * add more events. */ - int version; - - void (*vblank_handler)(int fd, - unsigned int sequence, - unsigned int tv_sec, - unsigned int tv_usec, - void *user_data); - - void (*page_flip_handler)(int fd, - unsigned int sequence, - unsigned int tv_sec, - unsigned int tv_usec, - void *user_data); - - void (*page_flip_handler2)(int fd, - unsigned int sequence, - unsigned int tv_sec, - unsigned int tv_usec, - unsigned int crtc_id, - void *user_data); - - void (*sequence_handler)(int fd, - uint64_t sequence, - uint64_t ns, - uint64_t user_data); -} drmEventContext, *drmEventContextPtr; - -extern int drmHandleEvent(int fd, drmEventContextPtr evctx); - -extern char *drmGetDeviceNameFromFd(int fd); - -/* Improved version of drmGetDeviceNameFromFd which attributes for any type of - * device/node - card, control or renderD. - */ -extern char *drmGetDeviceNameFromFd2(int fd); -extern int drmGetNodeTypeFromFd(int fd); - -/* Convert between GEM handles and DMA-BUF file descriptors. - * - * Warning: since GEM handles are not reference-counted and are unique per - * DRM file description, the caller is expected to perform its own reference - * counting. drmPrimeFDToHandle is guaranteed to return the same handle for - * different FDs if they reference the same underlying buffer object. This - * could even be a buffer object originally created on the same DRM FD. - * - * When sharing a DRM FD with an API such as EGL or GBM, the caller must not - * use drmPrimeHandleToFD nor drmPrimeFDToHandle. A single user-space - * reference-counting implementation is necessary to avoid double-closing GEM - * handles. - * - * Two processes can't share the same DRM FD and both use it to create or - * import GEM handles, even when using a single user-space reference-counting - * implementation like GBM, because GBM doesn't share its state between - * processes. - */ -extern int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd); -extern int drmPrimeFDToHandle(int fd, int prime_fd, uint32_t *handle); - -extern int drmCloseBufferHandle(int fd, uint32_t handle); - -extern char *drmGetPrimaryDeviceNameFromFd(int fd); -extern char *drmGetRenderDeviceNameFromFd(int fd); - -#define DRM_BUS_PCI 0 -#define DRM_BUS_USB 1 -#define DRM_BUS_PLATFORM 2 -#define DRM_BUS_HOST1X 3 - -typedef struct _drmPciBusInfo { - uint16_t domain; - uint8_t bus; - uint8_t dev; - uint8_t func; -} drmPciBusInfo, *drmPciBusInfoPtr; - -typedef struct _drmPciDeviceInfo { - uint16_t vendor_id; - uint16_t device_id; - uint16_t subvendor_id; - uint16_t subdevice_id; - uint8_t revision_id; -} drmPciDeviceInfo, *drmPciDeviceInfoPtr; - -typedef struct _drmUsbBusInfo { - uint8_t bus; - uint8_t dev; -} drmUsbBusInfo, *drmUsbBusInfoPtr; - -typedef struct _drmUsbDeviceInfo { - uint16_t vendor; - uint16_t product; -} drmUsbDeviceInfo, *drmUsbDeviceInfoPtr; - -#define DRM_PLATFORM_DEVICE_NAME_LEN 512 - -typedef struct _drmPlatformBusInfo { - char fullname[DRM_PLATFORM_DEVICE_NAME_LEN]; -} drmPlatformBusInfo, *drmPlatformBusInfoPtr; - -typedef struct _drmPlatformDeviceInfo { - char **compatible; /* NULL terminated list of compatible strings */ -} drmPlatformDeviceInfo, *drmPlatformDeviceInfoPtr; - -#define DRM_HOST1X_DEVICE_NAME_LEN 512 - -typedef struct _drmHost1xBusInfo { - char fullname[DRM_HOST1X_DEVICE_NAME_LEN]; -} drmHost1xBusInfo, *drmHost1xBusInfoPtr; - -typedef struct _drmHost1xDeviceInfo { - char **compatible; /* NULL terminated list of compatible strings */ -} drmHost1xDeviceInfo, *drmHost1xDeviceInfoPtr; - -typedef struct _drmDevice { - char **nodes; /* DRM_NODE_MAX sized array */ - int available_nodes; /* DRM_NODE_* bitmask */ - int bustype; - union { - drmPciBusInfoPtr pci; - drmUsbBusInfoPtr usb; - drmPlatformBusInfoPtr platform; - drmHost1xBusInfoPtr host1x; - } businfo; - union { - drmPciDeviceInfoPtr pci; - drmUsbDeviceInfoPtr usb; - drmPlatformDeviceInfoPtr platform; - drmHost1xDeviceInfoPtr host1x; - } deviceinfo; -} drmDevice, *drmDevicePtr; - -extern int drmGetDevice(int fd, drmDevicePtr *device); -extern void drmFreeDevice(drmDevicePtr *device); - -extern int drmGetDevices(drmDevicePtr devices[], int max_devices); -extern void drmFreeDevices(drmDevicePtr devices[], int count); - -#define DRM_DEVICE_GET_PCI_REVISION (1 << 0) -extern int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device); -extern int drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices); - -extern int drmGetDeviceFromDevId(dev_t dev_id, uint32_t flags, drmDevicePtr *device); - -extern int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b); - -extern int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle); -extern int drmSyncobjDestroy(int fd, uint32_t handle); -extern int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd); -extern int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle); - -extern int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd); -extern int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd); -extern int drmSyncobjWait(int fd, uint32_t *handles, unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); -extern int drmSyncobjReset(int fd, const uint32_t *handles, uint32_t handle_count); -extern int drmSyncobjSignal(int fd, const uint32_t *handles, uint32_t handle_count); -extern int drmSyncobjTimelineSignal(int fd, const uint32_t *handles, - uint64_t *points, uint32_t handle_count); -extern int drmSyncobjTimelineWait(int fd, uint32_t *handles, uint64_t *points, - unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); -extern int drmSyncobjQuery(int fd, uint32_t *handles, uint64_t *points, - uint32_t handle_count); -extern int drmSyncobjQuery2(int fd, uint32_t *handles, uint64_t *points, - uint32_t handle_count, uint32_t flags); -extern int drmSyncobjTransfer(int fd, - uint32_t dst_handle, uint64_t dst_point, - uint32_t src_handle, uint64_t src_point, - uint32_t flags); - -extern char * -drmGetFormatModifierVendor(uint64_t modifier); - -extern char * -drmGetFormatModifierName(uint64_t modifier); - -#ifndef fourcc_mod_get_vendor -#define fourcc_mod_get_vendor(modifier) \ - (((modifier) >> 56) & 0xff) -#endif - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/arm/include/xf86drmMode.h b/prebuilts/arm/include/xf86drmMode.h deleted file mode 100644 index 4617d1e..0000000 --- a/prebuilts/arm/include/xf86drmMode.h +++ /dev/null @@ -1,504 +0,0 @@ -/* - * \file xf86drmMode.h - * Header for DRM modesetting interface. - * - * \author Jakob Bornecrantz - * - * \par Acknowledgements: - * Feb 2007, Dave Airlie - */ - -/* - * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas. - * Copyright (c) 2007-2008 Dave Airlie - * Copyright (c) 2007-2008 Jakob Bornecrantz - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - * - */ - -#ifndef _XF86DRMMODE_H_ -#define _XF86DRMMODE_H_ - -#if defined(__cplusplus) -extern "C" { -#endif - -#include -#include -#include -#include -#include - -/* - * This is the interface for modesetting for drm. - * - * It aims to provide a randr1.2 compatible interface for modesettings in the - * kernel, the interface is also meant to be used by libraries like EGL. - * - * More information can be found in randrproto.txt which can be found here: - * http://gitweb.freedesktop.org/?p=xorg/proto/randrproto.git - * - * There are some major differences to be noted. Unlike the randr1.2 proto you - * need to create the memory object of the framebuffer yourself with the ttm - * buffer object interface. This object needs to be pinned. - */ - -/* - * Feature defines - * - * Just because these are defined doesn't mean that the kernel - * can do that feature, its just for new code vs old libdrm. - */ -#define DRM_MODE_FEATURE_KMS 1 -#define DRM_MODE_FEATURE_DIRTYFB 1 - - -typedef struct _drmModeRes { - - int count_fbs; - uint32_t *fbs; - - int count_crtcs; - uint32_t *crtcs; - - int count_connectors; - uint32_t *connectors; - - int count_encoders; - uint32_t *encoders; - - uint32_t min_width, max_width; - uint32_t min_height, max_height; -} drmModeRes, *drmModeResPtr; - -typedef struct _drmModeModeInfo { - uint32_t clock; - uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew; - uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan; - - uint32_t vrefresh; - - uint32_t flags; - uint32_t type; - char name[DRM_DISPLAY_MODE_LEN]; -} drmModeModeInfo, *drmModeModeInfoPtr; - -typedef struct _drmModeFB { - uint32_t fb_id; - uint32_t width, height; - uint32_t pitch; - uint32_t bpp; - uint32_t depth; - /* driver specific handle */ - uint32_t handle; -} drmModeFB, *drmModeFBPtr; - -typedef struct _drmModeFB2 { - uint32_t fb_id; - uint32_t width, height; - uint32_t pixel_format; /* fourcc code from drm_fourcc.h */ - uint64_t modifier; /* applies to all buffers */ - uint32_t flags; - - /* per-plane GEM handle; may be duplicate entries for multiple planes */ - uint32_t handles[4]; - uint32_t pitches[4]; /* bytes */ - uint32_t offsets[4]; /* bytes */ -} drmModeFB2, *drmModeFB2Ptr; - -typedef struct drm_clip_rect drmModeClip, *drmModeClipPtr; - -typedef struct _drmModePropertyBlob { - uint32_t id; - uint32_t length; - void *data; -} drmModePropertyBlobRes, *drmModePropertyBlobPtr; - -typedef struct _drmModeProperty { - uint32_t prop_id; - uint32_t flags; - char name[DRM_PROP_NAME_LEN]; - int count_values; - uint64_t *values; /* store the blob lengths */ - int count_enums; - struct drm_mode_property_enum *enums; - int count_blobs; - uint32_t *blob_ids; /* store the blob IDs */ -} drmModePropertyRes, *drmModePropertyPtr; - -static inline uint32_t drmModeGetPropertyType(const drmModePropertyRes *prop) -{ - return prop->flags & (DRM_MODE_PROP_LEGACY_TYPE | DRM_MODE_PROP_EXTENDED_TYPE); -} - -static inline int drm_property_type_is(const drmModePropertyPtr property, - uint32_t type) -{ - return drmModeGetPropertyType(property) == type; -} - -typedef struct _drmModeCrtc { - uint32_t crtc_id; - uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */ - - uint32_t x, y; /**< Position on the framebuffer */ - uint32_t width, height; - int mode_valid; - drmModeModeInfo mode; - - int gamma_size; /**< Number of gamma stops */ - -} drmModeCrtc, *drmModeCrtcPtr; - -typedef struct _drmModeEncoder { - uint32_t encoder_id; - uint32_t encoder_type; - uint32_t crtc_id; - uint32_t possible_crtcs; - uint32_t possible_clones; -} drmModeEncoder, *drmModeEncoderPtr; - -/** - * Describes the connector status. - * - * DRM_MODE_CONNECTED means that the connector has a sink plugged in. - * DRM_MODE_DISCONNECTED means the contrary. DRM_MODE_UNKNOWNCONNECTION is used - * when it could be either. - * - * User-space should first try to enable DRM_MODE_CONNECTED connectors and - * ignore other connectors. If there are no DRM_MODE_CONNECTED connectors, - * user-space should then try to probe and enable DRM_MODE_UNKNOWNCONNECTION - * connectors. - */ -typedef enum { - DRM_MODE_CONNECTED = 1, - DRM_MODE_DISCONNECTED = 2, - DRM_MODE_UNKNOWNCONNECTION = 3 -} drmModeConnection; - -typedef enum { - DRM_MODE_SUBPIXEL_UNKNOWN = 1, - DRM_MODE_SUBPIXEL_HORIZONTAL_RGB = 2, - DRM_MODE_SUBPIXEL_HORIZONTAL_BGR = 3, - DRM_MODE_SUBPIXEL_VERTICAL_RGB = 4, - DRM_MODE_SUBPIXEL_VERTICAL_BGR = 5, - DRM_MODE_SUBPIXEL_NONE = 6 -} drmModeSubPixel; - -typedef struct _drmModeConnector { - uint32_t connector_id; - uint32_t encoder_id; /**< Encoder currently connected to */ - uint32_t connector_type; - uint32_t connector_type_id; - drmModeConnection connection; - uint32_t mmWidth, mmHeight; /**< HxW in millimeters */ - drmModeSubPixel subpixel; - - int count_modes; - drmModeModeInfoPtr modes; - - int count_props; - uint32_t *props; /**< List of property ids */ - uint64_t *prop_values; /**< List of property values */ - - int count_encoders; - uint32_t *encoders; /**< List of encoder ids */ -} drmModeConnector, *drmModeConnectorPtr; - -#define DRM_PLANE_TYPE_OVERLAY 0 -#define DRM_PLANE_TYPE_PRIMARY 1 -#define DRM_PLANE_TYPE_CURSOR 2 - -typedef struct _drmModeObjectProperties { - uint32_t count_props; - uint32_t *props; - uint64_t *prop_values; -} drmModeObjectProperties, *drmModeObjectPropertiesPtr; - -typedef struct _drmModeFormatModifierIterator { - uint32_t fmt_idx, mod_idx; - uint32_t fmt; - uint64_t mod; -} drmModeFormatModifierIterator; - -typedef struct _drmModePlane { - uint32_t count_formats; - uint32_t *formats; - uint32_t plane_id; - - uint32_t crtc_id; - uint32_t fb_id; - - uint32_t crtc_x, crtc_y; - uint32_t x, y; - - uint32_t possible_crtcs; - uint32_t gamma_size; -} drmModePlane, *drmModePlanePtr; - -typedef struct _drmModePlaneRes { - uint32_t count_planes; - uint32_t *planes; -} drmModePlaneRes, *drmModePlaneResPtr; - -extern void drmModeFreeModeInfo( drmModeModeInfoPtr ptr ); -extern void drmModeFreeResources( drmModeResPtr ptr ); -extern void drmModeFreeFB( drmModeFBPtr ptr ); -extern void drmModeFreeFB2( drmModeFB2Ptr ptr ); -extern void drmModeFreeCrtc( drmModeCrtcPtr ptr ); -extern void drmModeFreeConnector( drmModeConnectorPtr ptr ); -extern void drmModeFreeEncoder( drmModeEncoderPtr ptr ); -extern void drmModeFreePlane( drmModePlanePtr ptr ); -extern void drmModeFreePlaneResources(drmModePlaneResPtr ptr); - -/** - * Check whether the DRM node supports Kernel Mode-Setting. - * - * Returns 1 if suitable for KMS, 0 otherwise. - */ -extern int drmIsKMS(int fd); - -/** - * Retrieves all of the resources associated with a card. - */ -extern drmModeResPtr drmModeGetResources(int fd); - -/* - * FrameBuffer manipulation. - */ - -/** - * Retrieve information about framebuffer bufferId - */ -extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId); -extern drmModeFB2Ptr drmModeGetFB2(int fd, uint32_t bufferId); - -/** - * Creates a new framebuffer with an buffer object as its scanout buffer. - */ -extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth, - uint8_t bpp, uint32_t pitch, uint32_t bo_handle, - uint32_t *buf_id); -/* ...with a specific pixel format */ -extern int drmModeAddFB2(int fd, uint32_t width, uint32_t height, - uint32_t pixel_format, const uint32_t bo_handles[4], - const uint32_t pitches[4], const uint32_t offsets[4], - uint32_t *buf_id, uint32_t flags); - -/* ...with format modifiers */ -int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height, - uint32_t pixel_format, const uint32_t bo_handles[4], - const uint32_t pitches[4], const uint32_t offsets[4], - const uint64_t modifier[4], uint32_t *buf_id, - uint32_t flags); - -/** - * Destroies the given framebuffer. - */ -extern int drmModeRmFB(int fd, uint32_t bufferId); - -/** - * Mark a region of a framebuffer as dirty. - */ -extern int drmModeDirtyFB(int fd, uint32_t bufferId, - drmModeClipPtr clips, uint32_t num_clips); - - -/* - * Crtc functions - */ - -/** - * Retrieve information about the ctrt crtcId - */ -extern drmModeCrtcPtr drmModeGetCrtc(int fd, uint32_t crtcId); - -/** - * Set the mode on a crtc crtcId with the given mode modeId. - */ -int drmModeSetCrtc(int fd, uint32_t crtcId, uint32_t bufferId, - uint32_t x, uint32_t y, uint32_t *connectors, int count, - drmModeModeInfoPtr mode); - -/* - * Cursor functions - */ - -/** - * Set the cursor on crtc - */ -int drmModeSetCursor(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height); - -int drmModeSetCursor2(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height, int32_t hot_x, int32_t hot_y); -/** - * Move the cursor on crtc - */ -int drmModeMoveCursor(int fd, uint32_t crtcId, int x, int y); - -/** - * Encoder functions - */ -drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id); - -/* - * Connector manipulation - */ - -/** - * Retrieve all information about the connector connectorId. This will do a - * forced probe on the connector to retrieve remote information such as EDIDs - * from the display device. - */ -extern drmModeConnectorPtr drmModeGetConnector(int fd, - uint32_t connectorId); - -/** - * Retrieve current information, i.e the currently active mode and encoder, - * about the connector connectorId. This will not do any probing on the - * connector or remote device, and only reports what is currently known. - * For the complete set of modes and encoders associated with the connector - * use drmModeGetConnector() which will do a probe to determine any display - * link changes first. - */ -extern drmModeConnectorPtr drmModeGetConnectorCurrent(int fd, - uint32_t connector_id); - -/** - * Get a bitmask of CRTCs a connector is compatible with. - * - * The bits reference CRTC indices. If the n-th CRTC is compatible with the - * connector, the n-th bit will be set. The indices are taken from the array - * returned by drmModeGetResources(). The indices are different from the object - * IDs. - * - * Zero is returned on error. - */ -extern uint32_t drmModeConnectorGetPossibleCrtcs(int fd, - const drmModeConnector *connector); - -/** - * Attaches the given mode to an connector. - */ -extern int drmModeAttachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info); - -/** - * Detaches a mode from the connector - * must be unused, by the given mode. - */ -extern int drmModeDetachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info); - -extern drmModePropertyPtr drmModeGetProperty(int fd, uint32_t propertyId); -extern void drmModeFreeProperty(drmModePropertyPtr ptr); - -extern drmModePropertyBlobPtr drmModeGetPropertyBlob(int fd, uint32_t blob_id); -extern bool drmModeFormatModifierBlobIterNext(const drmModePropertyBlobRes *blob, - drmModeFormatModifierIterator *iter); -extern void drmModeFreePropertyBlob(drmModePropertyBlobPtr ptr); -extern int drmModeConnectorSetProperty(int fd, uint32_t connector_id, uint32_t property_id, - uint64_t value); -extern int drmCheckModesettingSupported(const char *busid); - -extern int drmModeCrtcSetGamma(int fd, uint32_t crtc_id, uint32_t size, - uint16_t *red, uint16_t *green, uint16_t *blue); -extern int drmModeCrtcGetGamma(int fd, uint32_t crtc_id, uint32_t size, - uint16_t *red, uint16_t *green, uint16_t *blue); -extern int drmModePageFlip(int fd, uint32_t crtc_id, uint32_t fb_id, - uint32_t flags, void *user_data); -extern int drmModePageFlipTarget(int fd, uint32_t crtc_id, uint32_t fb_id, - uint32_t flags, void *user_data, - uint32_t target_vblank); - -extern drmModePlaneResPtr drmModeGetPlaneResources(int fd); -extern drmModePlanePtr drmModeGetPlane(int fd, uint32_t plane_id); -extern int drmModeSetPlane(int fd, uint32_t plane_id, uint32_t crtc_id, - uint32_t fb_id, uint32_t flags, - int32_t crtc_x, int32_t crtc_y, - uint32_t crtc_w, uint32_t crtc_h, - uint32_t src_x, uint32_t src_y, - uint32_t src_w, uint32_t src_h); - -extern drmModeObjectPropertiesPtr drmModeObjectGetProperties(int fd, - uint32_t object_id, - uint32_t object_type); -extern void drmModeFreeObjectProperties(drmModeObjectPropertiesPtr ptr); -extern int drmModeObjectSetProperty(int fd, uint32_t object_id, - uint32_t object_type, uint32_t property_id, - uint64_t value); - - -typedef struct _drmModeAtomicReq drmModeAtomicReq, *drmModeAtomicReqPtr; - -extern drmModeAtomicReqPtr drmModeAtomicAlloc(void); -extern drmModeAtomicReqPtr drmModeAtomicDuplicate(const drmModeAtomicReqPtr req); -extern int drmModeAtomicMerge(drmModeAtomicReqPtr base, - const drmModeAtomicReqPtr augment); -extern void drmModeAtomicFree(drmModeAtomicReqPtr req); -extern int drmModeAtomicGetCursor(const drmModeAtomicReqPtr req); -extern void drmModeAtomicSetCursor(drmModeAtomicReqPtr req, int cursor); -extern int drmModeAtomicAddProperty(drmModeAtomicReqPtr req, - uint32_t object_id, - uint32_t property_id, - uint64_t value); -extern int drmModeAtomicCommit(int fd, - const drmModeAtomicReqPtr req, - uint32_t flags, - void *user_data); - -extern int drmModeCreatePropertyBlob(int fd, const void *data, size_t size, - uint32_t *id); -extern int drmModeDestroyPropertyBlob(int fd, uint32_t id); - -/* - * DRM mode lease APIs. These create and manage new drm_masters with - * access to a subset of the available DRM resources - */ - -extern int drmModeCreateLease(int fd, const uint32_t *objects, int num_objects, int flags, uint32_t *lessee_id); - -typedef struct drmModeLesseeList { - uint32_t count; - uint32_t lessees[]; -} drmModeLesseeListRes, *drmModeLesseeListPtr; - -extern drmModeLesseeListPtr drmModeListLessees(int fd); - -typedef struct drmModeObjectList { - uint32_t count; - uint32_t objects[]; -} drmModeObjectListRes, *drmModeObjectListPtr; - -extern drmModeObjectListPtr drmModeGetLease(int fd); - -extern int drmModeRevokeLease(int fd, uint32_t lessee_id); - -/** - * Get a string describing a connector type. - * - * NULL is returned if the connector type is unsupported. Callers should handle - * this gracefully, e.g. by falling back to "Unknown" or printing the raw value. - */ -extern const char * -drmModeGetConnectorTypeName(uint32_t connector_type); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86/include/gbm.h b/prebuilts/x86/include/gbm.h deleted file mode 100644 index 829c4cb..0000000 --- a/prebuilts/x86/include/gbm.h +++ /dev/null @@ -1,461 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Benjamin Franzke - */ - -#ifndef _GBM_H_ -#define _GBM_H_ - -#define __GBM__ 1 - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * \file gbm.h - * \brief Generic Buffer Manager - */ - -struct gbm_device; -struct gbm_bo; -struct gbm_surface; - -/** - * \mainpage The Generic Buffer Manager - * - * This module provides an abstraction that the caller can use to request a - * buffer from the underlying memory management system for the platform. - * - * This allows the creation of portable code whilst still allowing access to - * the underlying memory manager. - */ - -/** - * Abstraction representing the handle to a buffer allocated by the - * manager - */ -union gbm_bo_handle { - void *ptr; - int32_t s32; - uint32_t u32; - int64_t s64; - uint64_t u64; -}; - -/** Format of the allocated buffer */ -enum gbm_bo_format { - /** RGB with 8 bits per channel in a 32 bit value */ - GBM_BO_FORMAT_XRGB8888, - /** ARGB with 8 bits per channel in a 32 bit value */ - GBM_BO_FORMAT_ARGB8888 -}; - - -/** - * The FourCC format codes are taken from the drm_fourcc.h definition, and - * re-namespaced. New GBM formats must not be added, unless they are - * identical ports from drm_fourcc. - */ -#define __gbm_fourcc_code(a,b,c,d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | \ - ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24)) - -#define GBM_FORMAT_BIG_ENDIAN (1<<31) /* format is big endian instead of little endian */ - -/* color index */ -#define GBM_FORMAT_C8 __gbm_fourcc_code('C', '8', ' ', ' ') /* [7:0] C */ - -/* 8 bpp Red */ -#define GBM_FORMAT_R8 __gbm_fourcc_code('R', '8', ' ', ' ') /* [7:0] R */ - -/* 16 bpp Red */ -#define GBM_FORMAT_R16 __gbm_fourcc_code('R', '1', '6', ' ') /* [15:0] R little endian */ - -/* 16 bpp RG */ -#define GBM_FORMAT_GR88 __gbm_fourcc_code('G', 'R', '8', '8') /* [15:0] G:R 8:8 little endian */ - -/* 32 bpp RG */ -#define GBM_FORMAT_RG1616 __gbm_fourcc_code('R', 'G', '3', '2') /* [31:0] R:G 16:16 little endian */ -#define GBM_FORMAT_GR1616 __gbm_fourcc_code('G', 'R', '3', '2') /* [31:0] G:R 16:16 little endian */ - -/* 8 bpp RGB */ -#define GBM_FORMAT_RGB332 __gbm_fourcc_code('R', 'G', 'B', '8') /* [7:0] R:G:B 3:3:2 */ -#define GBM_FORMAT_BGR233 __gbm_fourcc_code('B', 'G', 'R', '8') /* [7:0] B:G:R 2:3:3 */ - -/* 16 bpp RGB */ -#define GBM_FORMAT_XRGB4444 __gbm_fourcc_code('X', 'R', '1', '2') /* [15:0] x:R:G:B 4:4:4:4 little endian */ -#define GBM_FORMAT_XBGR4444 __gbm_fourcc_code('X', 'B', '1', '2') /* [15:0] x:B:G:R 4:4:4:4 little endian */ -#define GBM_FORMAT_RGBX4444 __gbm_fourcc_code('R', 'X', '1', '2') /* [15:0] R:G:B:x 4:4:4:4 little endian */ -#define GBM_FORMAT_BGRX4444 __gbm_fourcc_code('B', 'X', '1', '2') /* [15:0] B:G:R:x 4:4:4:4 little endian */ - -#define GBM_FORMAT_ARGB4444 __gbm_fourcc_code('A', 'R', '1', '2') /* [15:0] A:R:G:B 4:4:4:4 little endian */ -#define GBM_FORMAT_ABGR4444 __gbm_fourcc_code('A', 'B', '1', '2') /* [15:0] A:B:G:R 4:4:4:4 little endian */ -#define GBM_FORMAT_RGBA4444 __gbm_fourcc_code('R', 'A', '1', '2') /* [15:0] R:G:B:A 4:4:4:4 little endian */ -#define GBM_FORMAT_BGRA4444 __gbm_fourcc_code('B', 'A', '1', '2') /* [15:0] B:G:R:A 4:4:4:4 little endian */ - -#define GBM_FORMAT_XRGB1555 __gbm_fourcc_code('X', 'R', '1', '5') /* [15:0] x:R:G:B 1:5:5:5 little endian */ -#define GBM_FORMAT_XBGR1555 __gbm_fourcc_code('X', 'B', '1', '5') /* [15:0] x:B:G:R 1:5:5:5 little endian */ -#define GBM_FORMAT_RGBX5551 __gbm_fourcc_code('R', 'X', '1', '5') /* [15:0] R:G:B:x 5:5:5:1 little endian */ -#define GBM_FORMAT_BGRX5551 __gbm_fourcc_code('B', 'X', '1', '5') /* [15:0] B:G:R:x 5:5:5:1 little endian */ - -#define GBM_FORMAT_ARGB1555 __gbm_fourcc_code('A', 'R', '1', '5') /* [15:0] A:R:G:B 1:5:5:5 little endian */ -#define GBM_FORMAT_ABGR1555 __gbm_fourcc_code('A', 'B', '1', '5') /* [15:0] A:B:G:R 1:5:5:5 little endian */ -#define GBM_FORMAT_RGBA5551 __gbm_fourcc_code('R', 'A', '1', '5') /* [15:0] R:G:B:A 5:5:5:1 little endian */ -#define GBM_FORMAT_BGRA5551 __gbm_fourcc_code('B', 'A', '1', '5') /* [15:0] B:G:R:A 5:5:5:1 little endian */ - -#define GBM_FORMAT_RGB565 __gbm_fourcc_code('R', 'G', '1', '6') /* [15:0] R:G:B 5:6:5 little endian */ -#define GBM_FORMAT_BGR565 __gbm_fourcc_code('B', 'G', '1', '6') /* [15:0] B:G:R 5:6:5 little endian */ - -/* 24 bpp RGB */ -#define GBM_FORMAT_RGB888 __gbm_fourcc_code('R', 'G', '2', '4') /* [23:0] R:G:B little endian */ -#define GBM_FORMAT_BGR888 __gbm_fourcc_code('B', 'G', '2', '4') /* [23:0] B:G:R little endian */ - -/* 32 bpp RGB */ -#define GBM_FORMAT_XRGB8888 __gbm_fourcc_code('X', 'R', '2', '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */ -#define GBM_FORMAT_XBGR8888 __gbm_fourcc_code('X', 'B', '2', '4') /* [31:0] x:B:G:R 8:8:8:8 little endian */ -#define GBM_FORMAT_RGBX8888 __gbm_fourcc_code('R', 'X', '2', '4') /* [31:0] R:G:B:x 8:8:8:8 little endian */ -#define GBM_FORMAT_BGRX8888 __gbm_fourcc_code('B', 'X', '2', '4') /* [31:0] B:G:R:x 8:8:8:8 little endian */ - -#define GBM_FORMAT_ARGB8888 __gbm_fourcc_code('A', 'R', '2', '4') /* [31:0] A:R:G:B 8:8:8:8 little endian */ -#define GBM_FORMAT_ABGR8888 __gbm_fourcc_code('A', 'B', '2', '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */ -#define GBM_FORMAT_RGBA8888 __gbm_fourcc_code('R', 'A', '2', '4') /* [31:0] R:G:B:A 8:8:8:8 little endian */ -#define GBM_FORMAT_BGRA8888 __gbm_fourcc_code('B', 'A', '2', '4') /* [31:0] B:G:R:A 8:8:8:8 little endian */ - -#define GBM_FORMAT_XRGB2101010 __gbm_fourcc_code('X', 'R', '3', '0') /* [31:0] x:R:G:B 2:10:10:10 little endian */ -#define GBM_FORMAT_XBGR2101010 __gbm_fourcc_code('X', 'B', '3', '0') /* [31:0] x:B:G:R 2:10:10:10 little endian */ -#define GBM_FORMAT_RGBX1010102 __gbm_fourcc_code('R', 'X', '3', '0') /* [31:0] R:G:B:x 10:10:10:2 little endian */ -#define GBM_FORMAT_BGRX1010102 __gbm_fourcc_code('B', 'X', '3', '0') /* [31:0] B:G:R:x 10:10:10:2 little endian */ - -#define GBM_FORMAT_ARGB2101010 __gbm_fourcc_code('A', 'R', '3', '0') /* [31:0] A:R:G:B 2:10:10:10 little endian */ -#define GBM_FORMAT_ABGR2101010 __gbm_fourcc_code('A', 'B', '3', '0') /* [31:0] A:B:G:R 2:10:10:10 little endian */ -#define GBM_FORMAT_RGBA1010102 __gbm_fourcc_code('R', 'A', '3', '0') /* [31:0] R:G:B:A 10:10:10:2 little endian */ -#define GBM_FORMAT_BGRA1010102 __gbm_fourcc_code('B', 'A', '3', '0') /* [31:0] B:G:R:A 10:10:10:2 little endian */ - -/* 64 bpp RGB */ -#define GBM_FORMAT_XBGR16161616 __gbm_fourcc_code('X', 'B', '4', '8') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define GBM_FORMAT_ABGR16161616 __gbm_fourcc_code('A', 'B', '4', '8') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* - * Floating point 64bpp RGB - * IEEE 754-2008 binary16 half-precision float - * [15:0] sign:exponent:mantissa 1:5:10 - */ -#define GBM_FORMAT_XBGR16161616F __gbm_fourcc_code('X', 'B', '4', 'H') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define GBM_FORMAT_ABGR16161616F __gbm_fourcc_code('A', 'B', '4', 'H') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* packed YCbCr */ -#define GBM_FORMAT_YUYV __gbm_fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */ -#define GBM_FORMAT_YVYU __gbm_fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */ -#define GBM_FORMAT_UYVY __gbm_fourcc_code('U', 'Y', 'V', 'Y') /* [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian */ -#define GBM_FORMAT_VYUY __gbm_fourcc_code('V', 'Y', 'U', 'Y') /* [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian */ - -#define GBM_FORMAT_AYUV __gbm_fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */ - -/* - * 2 plane YCbCr - * index 0 = Y plane, [7:0] Y - * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian - * or - * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian - */ -#define GBM_FORMAT_NV12 __gbm_fourcc_code('N', 'V', '1', '2') /* 2x2 subsampled Cr:Cb plane */ -#define GBM_FORMAT_NV21 __gbm_fourcc_code('N', 'V', '2', '1') /* 2x2 subsampled Cb:Cr plane */ -#define GBM_FORMAT_NV16 __gbm_fourcc_code('N', 'V', '1', '6') /* 2x1 subsampled Cr:Cb plane */ -#define GBM_FORMAT_NV61 __gbm_fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */ - -/* - * 3 plane YCbCr - * index 0: Y plane, [7:0] Y - * index 1: Cb plane, [7:0] Cb - * index 2: Cr plane, [7:0] Cr - * or - * index 1: Cr plane, [7:0] Cr - * index 2: Cb plane, [7:0] Cb - */ -#define GBM_FORMAT_YUV410 __gbm_fourcc_code('Y', 'U', 'V', '9') /* 4x4 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU410 __gbm_fourcc_code('Y', 'V', 'U', '9') /* 4x4 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV411 __gbm_fourcc_code('Y', 'U', '1', '1') /* 4x1 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU411 __gbm_fourcc_code('Y', 'V', '1', '1') /* 4x1 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV420 __gbm_fourcc_code('Y', 'U', '1', '2') /* 2x2 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU420 __gbm_fourcc_code('Y', 'V', '1', '2') /* 2x2 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV422 __gbm_fourcc_code('Y', 'U', '1', '6') /* 2x1 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU422 __gbm_fourcc_code('Y', 'V', '1', '6') /* 2x1 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV444 __gbm_fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU444 __gbm_fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */ - -struct gbm_format_name_desc { - char name[5]; -}; - -/** - * Flags to indicate the intended use for the buffer - these are passed into - * gbm_bo_create(). The caller must set the union of all the flags that are - * appropriate - * - * \sa Use gbm_device_is_format_supported() to check if the combination of format - * and use flags are supported - */ -enum gbm_bo_flags { - /** - * Buffer is going to be presented to the screen using an API such as KMS - */ - GBM_BO_USE_SCANOUT = (1 << 0), - /** - * Buffer is going to be used as cursor - */ - GBM_BO_USE_CURSOR = (1 << 1), - /** - * Deprecated - */ - GBM_BO_USE_CURSOR_64X64 = GBM_BO_USE_CURSOR, - /** - * Buffer is to be used for rendering - for example it is going to be used - * as the storage for a color buffer - */ - GBM_BO_USE_RENDERING = (1 << 2), - /** - * Buffer can be used for gbm_bo_write. This is guaranteed to work - * with GBM_BO_USE_CURSOR, but may not work for other combinations. - */ - GBM_BO_USE_WRITE = (1 << 3), - /** - * Buffer is linear, i.e. not tiled. - */ - GBM_BO_USE_LINEAR = (1 << 4), - /** - * Buffer is protected, i.e. encrypted and not readable by CPU or any - * other non-secure / non-trusted components nor by non-trusted OpenGL, - * OpenCL, and Vulkan applications. - */ - GBM_BO_USE_PROTECTED = (1 << 5), -}; - -int -gbm_device_get_fd(struct gbm_device *gbm); - -const char * -gbm_device_get_backend_name(struct gbm_device *gbm); - -int -gbm_device_is_format_supported(struct gbm_device *gbm, - uint32_t format, uint32_t flags); - -int -gbm_device_get_format_modifier_plane_count(struct gbm_device *gbm, - uint32_t format, - uint64_t modifier); - -void -gbm_device_destroy(struct gbm_device *gbm); - -struct gbm_device * -gbm_create_device(int fd); - -struct gbm_bo * -gbm_bo_create(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); - -struct gbm_bo * -gbm_bo_create_with_modifiers(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count); - -struct gbm_bo * -gbm_bo_create_with_modifiers2(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count, - uint32_t flags); - -#define GBM_BO_IMPORT_WL_BUFFER 0x5501 -#define GBM_BO_IMPORT_EGL_IMAGE 0x5502 -#define GBM_BO_IMPORT_FD 0x5503 -#define GBM_BO_IMPORT_FD_MODIFIER 0x5504 - -struct gbm_import_fd_data { - int fd; - uint32_t width; - uint32_t height; - uint32_t stride; - uint32_t format; -}; - -#define GBM_MAX_PLANES 4 - -struct gbm_import_fd_modifier_data { - uint32_t width; - uint32_t height; - uint32_t format; - uint32_t num_fds; - int fds[GBM_MAX_PLANES]; - int strides[GBM_MAX_PLANES]; - int offsets[GBM_MAX_PLANES]; - uint64_t modifier; -}; - -struct gbm_bo * -gbm_bo_import(struct gbm_device *gbm, uint32_t type, - void *buffer, uint32_t flags); - -/** - * Flags to indicate the type of mapping for the buffer - these are - * passed into gbm_bo_map(). The caller must set the union of all the - * flags that are appropriate. - * - * These flags are independent of the GBM_BO_USE_* creation flags. However, - * mapping the buffer may require copying to/from a staging buffer. - * - * See also: pipe_map_flags - */ -enum gbm_bo_transfer_flags { - /** - * Buffer contents read back (or accessed directly) at transfer - * create time. - */ - GBM_BO_TRANSFER_READ = (1 << 0), - /** - * Buffer contents will be written back at unmap time - * (or modified as a result of being accessed directly). - */ - GBM_BO_TRANSFER_WRITE = (1 << 1), - /** - * Read/modify/write - */ - GBM_BO_TRANSFER_READ_WRITE = (GBM_BO_TRANSFER_READ | GBM_BO_TRANSFER_WRITE), -}; - -void * -gbm_bo_map(struct gbm_bo *bo, - uint32_t x, uint32_t y, uint32_t width, uint32_t height, - uint32_t flags, uint32_t *stride, void **map_data); - -void -gbm_bo_unmap(struct gbm_bo *bo, void *map_data); - -uint32_t -gbm_bo_get_width(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_height(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_stride(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_stride_for_plane(struct gbm_bo *bo, int plane); - -uint32_t -gbm_bo_get_format(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_bpp(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_offset(struct gbm_bo *bo, int plane); - -struct gbm_device * -gbm_bo_get_device(struct gbm_bo *bo); - -union gbm_bo_handle -gbm_bo_get_handle(struct gbm_bo *bo); - -int -gbm_bo_get_fd(struct gbm_bo *bo); - -uint64_t -gbm_bo_get_modifier(struct gbm_bo *bo); - -int -gbm_bo_get_plane_count(struct gbm_bo *bo); - -union gbm_bo_handle -gbm_bo_get_handle_for_plane(struct gbm_bo *bo, int plane); - -int -gbm_bo_get_fd_for_plane(struct gbm_bo *bo, int plane); - -int -gbm_bo_write(struct gbm_bo *bo, const void *buf, size_t count); - -void -gbm_bo_set_user_data(struct gbm_bo *bo, void *data, - void (*destroy_user_data)(struct gbm_bo *, void *)); - -void * -gbm_bo_get_user_data(struct gbm_bo *bo); - -void -gbm_bo_destroy(struct gbm_bo *bo); - -struct gbm_surface * -gbm_surface_create(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); - -struct gbm_surface * -gbm_surface_create_with_modifiers(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count); - -struct gbm_surface * -gbm_surface_create_with_modifiers2(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count, - uint32_t flags); - -struct gbm_bo * -gbm_surface_lock_front_buffer(struct gbm_surface *surface); - -void -gbm_surface_release_buffer(struct gbm_surface *surface, struct gbm_bo *bo); - -int -gbm_surface_has_free_buffers(struct gbm_surface *surface); - -void -gbm_surface_destroy(struct gbm_surface *surface); - -char * -gbm_format_get_name(uint32_t gbm_format, struct gbm_format_name_desc *desc); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/prebuilts/x86/include/libavcodec/ac3_parser.h b/prebuilts/x86/include/libavcodec/ac3_parser.h deleted file mode 100644 index ff8cc4c..0000000 --- a/prebuilts/x86/include/libavcodec/ac3_parser.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * AC-3 parser prototypes - * Copyright (c) 2003 Fabrice Bellard - * Copyright (c) 2003 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AC3_PARSER_H -#define AVCODEC_AC3_PARSER_H - -#include -#include - -/** - * Extract the bitstream ID and the frame size from AC-3 data. - */ -int av_ac3_parse_header(const uint8_t *buf, size_t size, - uint8_t *bitstream_id, uint16_t *frame_size); - - -#endif /* AVCODEC_AC3_PARSER_H */ diff --git a/prebuilts/x86/include/libavcodec/adts_parser.h b/prebuilts/x86/include/libavcodec/adts_parser.h deleted file mode 100644 index f85becd..0000000 --- a/prebuilts/x86/include/libavcodec/adts_parser.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_ADTS_PARSER_H -#define AVCODEC_ADTS_PARSER_H - -#include -#include - -#define AV_AAC_ADTS_HEADER_SIZE 7 - -/** - * Extract the number of samples and frames from AAC data. - * @param[in] buf pointer to AAC data buffer - * @param[out] samples Pointer to where number of samples is written - * @param[out] frames Pointer to where number of frames is written - * @return Returns 0 on success, error code on failure. - */ -int av_adts_header_parse(const uint8_t *buf, uint32_t *samples, - uint8_t *frames); - -#endif /* AVCODEC_ADTS_PARSER_H */ diff --git a/prebuilts/x86/include/libavcodec/avcodec.h b/prebuilts/x86/include/libavcodec/avcodec.h deleted file mode 100644 index 8a71c04..0000000 --- a/prebuilts/x86/include/libavcodec/avcodec.h +++ /dev/null @@ -1,4184 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVCODEC_H -#define AVCODEC_AVCODEC_H - -/** - * @file - * @ingroup libavc - * Libavcodec external API header - */ - -#include -#include "libavutil/samplefmt.h" -#include "libavutil/attributes.h" -#include "libavutil/avutil.h" -#include "libavutil/buffer.h" -#include "libavutil/cpu.h" -#include "libavutil/channel_layout.h" -#include "libavutil/dict.h" -#include "libavutil/frame.h" -#include "libavutil/hwcontext.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" - -#include "bsf.h" -#include "codec.h" -#include "codec_desc.h" -#include "codec_par.h" -#include "codec_id.h" -#include "packet.h" -#include "version.h" - -/** - * @defgroup libavc libavcodec - * Encoding/Decoding Library - * - * @{ - * - * @defgroup lavc_decoding Decoding - * @{ - * @} - * - * @defgroup lavc_encoding Encoding - * @{ - * @} - * - * @defgroup lavc_codec Codecs - * @{ - * @defgroup lavc_codec_native Native Codecs - * @{ - * @} - * @defgroup lavc_codec_wrappers External library wrappers - * @{ - * @} - * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge - * @{ - * @} - * @} - * @defgroup lavc_internal Internal - * @{ - * @} - * @} - */ - -/** - * @ingroup libavc - * @defgroup lavc_encdec send/receive encoding and decoding API overview - * @{ - * - * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/ - * avcodec_receive_packet() functions provide an encode/decode API, which - * decouples input and output. - * - * The API is very similar for encoding/decoding and audio/video, and works as - * follows: - * - Set up and open the AVCodecContext as usual. - * - Send valid input: - * - For decoding, call avcodec_send_packet() to give the decoder raw - * compressed data in an AVPacket. - * - For encoding, call avcodec_send_frame() to give the encoder an AVFrame - * containing uncompressed audio or video. - * - * In both cases, it is recommended that AVPackets and AVFrames are - * refcounted, or libavcodec might have to copy the input data. (libavformat - * always returns refcounted AVPackets, and av_frame_get_buffer() allocates - * refcounted AVFrames.) - * - Receive output in a loop. Periodically call one of the avcodec_receive_*() - * functions and process their output: - * - For decoding, call avcodec_receive_frame(). On success, it will return - * an AVFrame containing uncompressed audio or video data. - * - For encoding, call avcodec_receive_packet(). On success, it will return - * an AVPacket with a compressed frame. - * - * Repeat this call until it returns AVERROR(EAGAIN) or an error. The - * AVERROR(EAGAIN) return value means that new input data is required to - * return new output. In this case, continue with sending input. For each - * input frame/packet, the codec will typically return 1 output frame/packet, - * but it can also be 0 or more than 1. - * - * At the beginning of decoding or encoding, the codec might accept multiple - * input frames/packets without returning a frame, until its internal buffers - * are filled. This situation is handled transparently if you follow the steps - * outlined above. - * - * In theory, sending input can result in EAGAIN - this should happen only if - * not all output was received. You can use this to structure alternative decode - * or encode loops other than the one suggested above. For example, you could - * try sending new input on each iteration, and try to receive output if that - * returns EAGAIN. - * - * End of stream situations. These require "flushing" (aka draining) the codec, - * as the codec might buffer multiple frames or packets internally for - * performance or out of necessity (consider B-frames). - * This is handled as follows: - * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding) - * or avcodec_send_frame() (encoding) functions. This will enter draining - * mode. - * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet() - * (encoding) in a loop until AVERROR_EOF is returned. The functions will - * not return AVERROR(EAGAIN), unless you forgot to enter draining mode. - * - Before decoding can be resumed again, the codec has to be reset with - * avcodec_flush_buffers(). - * - * Using the API as outlined above is highly recommended. But it is also - * possible to call functions outside of this rigid schema. For example, you can - * call avcodec_send_packet() repeatedly without calling - * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed - * until the codec's internal buffer has been filled up (which is typically of - * size 1 per output frame, after initial input), and then reject input with - * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to - * read at least some output. - * - * Not all codecs will follow a rigid and predictable dataflow; the only - * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on - * one end implies that a receive/send call on the other end will succeed, or - * at least will not fail with AVERROR(EAGAIN). In general, no codec will - * permit unlimited buffering of input or output. - * - * This API replaces the following legacy functions: - * - avcodec_decode_video2() and avcodec_decode_audio4(): - * Use avcodec_send_packet() to feed input to the decoder, then use - * avcodec_receive_frame() to receive decoded frames after each packet. - * Unlike with the old video decoding API, multiple frames might result from - * a packet. For audio, splitting the input packet into frames by partially - * decoding packets becomes transparent to the API user. You never need to - * feed an AVPacket to the API twice (unless it is rejected with AVERROR(EAGAIN) - then - * no data was read from the packet). - * Additionally, sending a flush/draining packet is required only once. - * - avcodec_encode_video2()/avcodec_encode_audio2(): - * Use avcodec_send_frame() to feed input to the encoder, then use - * avcodec_receive_packet() to receive encoded packets. - * Providing user-allocated buffers for avcodec_receive_packet() is not - * possible. - * - The new API does not handle subtitles yet. - * - * Mixing new and old function calls on the same AVCodecContext is not allowed, - * and will result in undefined behavior. - * - * Some codecs might require using the new API; using the old API will return - * an error when calling it. All codecs support the new API. - * - * A codec is not allowed to return AVERROR(EAGAIN) for both sending and receiving. This - * would be an invalid state, which could put the codec user into an endless - * loop. The API has no concept of time either: it cannot happen that trying to - * do avcodec_send_packet() results in AVERROR(EAGAIN), but a repeated call 1 second - * later accepts the packet (with no other receive/flush API calls involved). - * The API is a strict state machine, and the passage of time is not supposed - * to influence it. Some timing-dependent behavior might still be deemed - * acceptable in certain cases. But it must never result in both send/receive - * returning EAGAIN at the same time at any point. It must also absolutely be - * avoided that the current state is "unstable" and can "flip-flop" between - * the send/receive APIs allowing progress. For example, it's not allowed that - * the codec randomly decides that it actually wants to consume a packet now - * instead of returning a frame, after it just returned AVERROR(EAGAIN) on an - * avcodec_send_packet() call. - * @} - */ - -/** - * @defgroup lavc_core Core functions/structures. - * @ingroup libavc - * - * Basic definitions, functions for querying libavcodec capabilities, - * allocating core structures, etc. - * @{ - */ - -/** - * @ingroup lavc_decoding - * Required number of additionally allocated bytes at the end of the input bitstream for decoding. - * This is mainly needed because some optimized bitstream readers read - * 32 or 64 bit at once and could read over the end.
- * Note: If the first 23 bits of the additional bytes are not 0, then damaged - * MPEG bitstreams could cause overread and segfault. - */ -#define AV_INPUT_BUFFER_PADDING_SIZE 64 - -/** - * @ingroup lavc_encoding - * minimum encoding buffer size - * Used to avoid some checks during header writing. - */ -#define AV_INPUT_BUFFER_MIN_SIZE 16384 - -/** - * @ingroup lavc_decoding - */ -enum AVDiscard{ - /* We leave some space between them for extensions (drop some - * keyframes for intra-only or drop just some bidir frames). */ - AVDISCARD_NONE =-16, ///< discard nothing - AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi - AVDISCARD_NONREF = 8, ///< discard all non reference - AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames - AVDISCARD_NONINTRA= 24, ///< discard all non intra frames - AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes - AVDISCARD_ALL = 48, ///< discard all -}; - -enum AVAudioServiceType { - AV_AUDIO_SERVICE_TYPE_MAIN = 0, - AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, - AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, - AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, - AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, - AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, - AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, - AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, - AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, - AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI -}; - -/** - * @ingroup lavc_encoding - */ -typedef struct RcOverride{ - int start_frame; - int end_frame; - int qscale; // If this is 0 then quality_factor will be used instead. - float quality_factor; -} RcOverride; - -/* encoding support - These flags can be passed in AVCodecContext.flags before initialization. - Note: Not everything is supported yet. -*/ - -/** - * Allow decoders to produce frames with data planes that are not aligned - * to CPU requirements (e.g. due to cropping). - */ -#define AV_CODEC_FLAG_UNALIGNED (1 << 0) -/** - * Use fixed qscale. - */ -#define AV_CODEC_FLAG_QSCALE (1 << 1) -/** - * 4 MV per MB allowed / advanced prediction for H.263. - */ -#define AV_CODEC_FLAG_4MV (1 << 2) -/** - * Output even those frames that might be corrupted. - */ -#define AV_CODEC_FLAG_OUTPUT_CORRUPT (1 << 3) -/** - * Use qpel MC. - */ -#define AV_CODEC_FLAG_QPEL (1 << 4) -/** - * Don't output frames whose parameters differ from first - * decoded frame in stream. - */ -#define AV_CODEC_FLAG_DROPCHANGED (1 << 5) -/** - * Use internal 2pass ratecontrol in first pass mode. - */ -#define AV_CODEC_FLAG_PASS1 (1 << 9) -/** - * Use internal 2pass ratecontrol in second pass mode. - */ -#define AV_CODEC_FLAG_PASS2 (1 << 10) -/** - * loop filter. - */ -#define AV_CODEC_FLAG_LOOP_FILTER (1 << 11) -/** - * Only decode/encode grayscale. - */ -#define AV_CODEC_FLAG_GRAY (1 << 13) -/** - * error[?] variables will be set during encoding. - */ -#define AV_CODEC_FLAG_PSNR (1 << 15) -/** - * Input bitstream might be truncated at a random location - * instead of only at frame boundaries. - */ -#define AV_CODEC_FLAG_TRUNCATED (1 << 16) -/** - * Use interlaced DCT. - */ -#define AV_CODEC_FLAG_INTERLACED_DCT (1 << 18) -/** - * Force low delay. - */ -#define AV_CODEC_FLAG_LOW_DELAY (1 << 19) -/** - * Place global headers in extradata instead of every keyframe. - */ -#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22) -/** - * Use only bitexact stuff (except (I)DCT). - */ -#define AV_CODEC_FLAG_BITEXACT (1 << 23) -/* Fx : Flag for H.263+ extra options */ -/** - * H.263 advanced intra coding / MPEG-4 AC prediction - */ -#define AV_CODEC_FLAG_AC_PRED (1 << 24) -/** - * interlaced motion estimation - */ -#define AV_CODEC_FLAG_INTERLACED_ME (1 << 29) -#define AV_CODEC_FLAG_CLOSED_GOP (1U << 31) - -/** - * Allow non spec compliant speedup tricks. - */ -#define AV_CODEC_FLAG2_FAST (1 << 0) -/** - * Skip bitstream encoding. - */ -#define AV_CODEC_FLAG2_NO_OUTPUT (1 << 2) -/** - * Place global headers at every keyframe instead of in extradata. - */ -#define AV_CODEC_FLAG2_LOCAL_HEADER (1 << 3) - -/** - * timecode is in drop frame format. DEPRECATED!!!! - */ -#define AV_CODEC_FLAG2_DROP_FRAME_TIMECODE (1 << 13) - -/** - * Input bitstream might be truncated at a packet boundaries - * instead of only at frame boundaries. - */ -#define AV_CODEC_FLAG2_CHUNKS (1 << 15) -/** - * Discard cropping information from SPS. - */ -#define AV_CODEC_FLAG2_IGNORE_CROP (1 << 16) - -/** - * Show all frames before the first keyframe - */ -#define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) -/** - * Export motion vectors through frame side data - */ -#define AV_CODEC_FLAG2_EXPORT_MVS (1 << 28) -/** - * Do not skip samples and export skip information as frame side data - */ -#define AV_CODEC_FLAG2_SKIP_MANUAL (1 << 29) -/** - * Do not reset ASS ReadOrder field on flush (subtitles decoding) - */ -#define AV_CODEC_FLAG2_RO_FLUSH_NOOP (1 << 30) - -/* Unsupported options : - * Syntax Arithmetic coding (SAC) - * Reference Picture Selection - * Independent Segment Decoding */ -/* /Fx */ -/* codec capabilities */ - -/* Exported side data. - These flags can be passed in AVCodecContext.export_side_data before initialization. -*/ -/** - * Export motion vectors through frame side data - */ -#define AV_CODEC_EXPORT_DATA_MVS (1 << 0) -/** - * Export encoder Producer Reference Time through packet side data - */ -#define AV_CODEC_EXPORT_DATA_PRFT (1 << 1) -/** - * Decoding only. - * Export the AVVideoEncParams structure through frame side data. - */ -#define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS (1 << 2) -/** - * Decoding only. - * Do not apply film grain, export it instead. - */ -#define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) - -/** - * Pan Scan area. - * This specifies the area which should be displayed. - * Note there may be multiple such areas for one frame. - */ -typedef struct AVPanScan { - /** - * id - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int id; - - /** - * width and height in 1/16 pel - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int width; - int height; - - /** - * position of the top left corner in 1/16 pel for up to 3 fields/frames - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int16_t position[3][2]; -} AVPanScan; - -/** - * This structure describes the bitrate properties of an encoded bitstream. It - * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD - * parameters for H.264/HEVC. - */ -typedef struct AVCPBProperties { - /** - * Maximum bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ -#if FF_API_UNSANITIZED_BITRATES - int max_bitrate; -#else - int64_t max_bitrate; -#endif - /** - * Minimum bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ -#if FF_API_UNSANITIZED_BITRATES - int min_bitrate; -#else - int64_t min_bitrate; -#endif - /** - * Average bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ -#if FF_API_UNSANITIZED_BITRATES - int avg_bitrate; -#else - int64_t avg_bitrate; -#endif - - /** - * The size of the buffer to which the ratecontrol is applied, in bits. - * Zero if unknown or unspecified. - */ - int buffer_size; - - /** - * The delay between the time the packet this structure is associated with - * is received and the time when it should be decoded, in periods of a 27MHz - * clock. - * - * UINT64_MAX when unknown or unspecified. - */ - uint64_t vbv_delay; -} AVCPBProperties; - -/** - * This structure supplies correlation between a packet timestamp and a wall clock - * production time. The definition follows the Producer Reference Time ('prft') - * as defined in ISO/IEC 14496-12 - */ -typedef struct AVProducerReferenceTime { - /** - * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()). - */ - int64_t wallclock; - int flags; -} AVProducerReferenceTime; - -/** - * The decoder will keep a reference to the frame and may reuse it later. - */ -#define AV_GET_BUFFER_FLAG_REF (1 << 0) - -/** - * The encoder will keep a reference to the packet and may reuse it later. - */ -#define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0) - -struct AVCodecInternal; - -/** - * main external API structure. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from user - * applications. - * The name string for AVOptions options matches the associated command line - * parameter name and can be found in libavcodec/options_table.h - * The AVOption/command line parameter names differ in some cases from the C - * structure field names for historic reasons or brevity. - * sizeof(AVCodecContext) must not be used outside libav*. - */ -typedef struct AVCodecContext { - /** - * information on struct for av_log - * - set by avcodec_alloc_context3 - */ - const AVClass *av_class; - int log_level_offset; - - enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ - const struct AVCodec *codec; - enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ - - /** - * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). - * This is used to work around some encoder bugs. - * A demuxer should set this to what is stored in the field used to identify the codec. - * If there are multiple such fields in a container then the demuxer should choose the one - * which maximizes the information about the used codec. - * If the codec tag field in a container is larger than 32 bits then the demuxer should - * remap the longer ID to 32 bits with a table or other structure. Alternatively a new - * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated - * first. - * - encoding: Set by user, if not then the default based on codec_id will be used. - * - decoding: Set by user, will be converted to uppercase by libavcodec during init. - */ - unsigned int codec_tag; - - void *priv_data; - - /** - * Private context used for internal data. - * - * Unlike priv_data, this is not codec-specific. It is used in general - * libavcodec functions. - */ - struct AVCodecInternal *internal; - - /** - * Private data of the user, can be used to carry app specific stuff. - * - encoding: Set by user. - * - decoding: Set by user. - */ - void *opaque; - - /** - * the average bitrate - * - encoding: Set by user; unused for constant quantizer encoding. - * - decoding: Set by user, may be overwritten by libavcodec - * if this info is available in the stream - */ - int64_t bit_rate; - - /** - * number of bits the bitstream is allowed to diverge from the reference. - * the reference can be CBR (for CBR pass1) or VBR (for pass2) - * - encoding: Set by user; unused for constant quantizer encoding. - * - decoding: unused - */ - int bit_rate_tolerance; - - /** - * Global quality for codecs which cannot change it per frame. - * This should be proportional to MPEG-1/2/4 qscale. - * - encoding: Set by user. - * - decoding: unused - */ - int global_quality; - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int compression_level; -#define FF_COMPRESSION_DEFAULT -1 - - /** - * AV_CODEC_FLAG_*. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int flags; - - /** - * AV_CODEC_FLAG2_* - * - encoding: Set by user. - * - decoding: Set by user. - */ - int flags2; - - /** - * some codecs need / can use extradata like Huffman tables. - * MJPEG: Huffman tables - * rv10: additional flags - * MPEG-4: global headers (they can be in the bitstream or here) - * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger - * than extradata_size to avoid problems if it is read with the bitstream reader. - * The bytewise contents of extradata must not depend on the architecture or CPU endianness. - * Must be allocated with the av_malloc() family of functions. - * - encoding: Set/allocated/freed by libavcodec. - * - decoding: Set/allocated/freed by user. - */ - uint8_t *extradata; - int extradata_size; - - /** - * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. For fixed-fps content, - * timebase should be 1/framerate and timestamp increments should be - * identically 1. - * This often, but not always is the inverse of the frame rate or field rate - * for video. 1/time_base is not the average frame rate if the frame rate is not - * constant. - * - * Like containers, elementary streams also can store timestamps, 1/time_base - * is the unit in which these timestamps are specified. - * As example of such codec time base see ISO/IEC 14496-2:2001(E) - * vop_time_increment_resolution and fixed_vop_rate - * (fixed_vop_rate == 0 implies that it is different from the framerate) - * - * - encoding: MUST be set by user. - * - decoding: the use of this field for decoding is deprecated. - * Use framerate instead. - */ - AVRational time_base; - - /** - * For some codecs, the time base is closer to the field rate than the frame rate. - * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration - * if no telecine is used ... - * - * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. - */ - int ticks_per_frame; - - /** - * Codec delay. - * - * Encoding: Number of frames delay there will be from the encoder input to - * the decoder output. (we assume the decoder matches the spec) - * Decoding: Number of frames delay in addition to what a standard decoder - * as specified in the spec would produce. - * - * Video: - * Number of frames the decoded output will be delayed relative to the - * encoded input. - * - * Audio: - * For encoding, this field is unused (see initial_padding). - * - * For decoding, this is the number of samples the decoder needs to - * output before the decoder's output is valid. When seeking, you should - * start decoding this many samples prior to your desired seek point. - * - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int delay; - - - /* video only */ - /** - * picture width / height. - * - * @note Those fields may not match the values of the last - * AVFrame output by avcodec_decode_video2 due frame - * reordering. - * - * - encoding: MUST be set by user. - * - decoding: May be set by the user before opening the decoder if known e.g. - * from the container. Some decoders will require the dimensions - * to be set by the caller. During decoding, the decoder may - * overwrite those values as required while parsing the data. - */ - int width, height; - - /** - * Bitstream width / height, may be different from width/height e.g. when - * the decoded frame is cropped before being output or lowres is enabled. - * - * @note Those field may not match the value of the last - * AVFrame output by avcodec_receive_frame() due frame - * reordering. - * - * - encoding: unused - * - decoding: May be set by the user before opening the decoder if known - * e.g. from the container. During decoding, the decoder may - * overwrite those values as required while parsing the data. - */ - int coded_width, coded_height; - - /** - * the number of pictures in a group of pictures, or 0 for intra_only - * - encoding: Set by user. - * - decoding: unused - */ - int gop_size; - - /** - * Pixel format, see AV_PIX_FMT_xxx. - * May be set by the demuxer if known from headers. - * May be overridden by the decoder if it knows better. - * - * @note This field may not match the value of the last - * AVFrame output by avcodec_receive_frame() due frame - * reordering. - * - * - encoding: Set by user. - * - decoding: Set by user if known, overridden by libavcodec while - * parsing the data. - */ - enum AVPixelFormat pix_fmt; - - /** - * If non NULL, 'draw_horiz_band' is called by the libavcodec - * decoder to draw a horizontal band. It improves cache usage. Not - * all codecs can do that. You must check the codec capabilities - * beforehand. - * When multithreading is used, it may be called from multiple threads - * at the same time; threads might draw different parts of the same AVFrame, - * or multiple AVFrames, and there is no guarantee that slices will be drawn - * in order. - * The function is also used by hardware acceleration APIs. - * It is called at least once during frame decoding to pass - * the data needed for hardware render. - * In that mode instead of pixel data, AVFrame points to - * a structure specific to the acceleration API. The application - * reads the structure and can change some fields to indicate progress - * or mark state. - * - encoding: unused - * - decoding: Set by user. - * @param height the height of the slice - * @param y the y position of the slice - * @param type 1->top field, 2->bottom field, 3->frame - * @param offset offset into the AVFrame.data from which the slice should be read - */ - void (*draw_horiz_band)(struct AVCodecContext *s, - const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], - int y, int type, int height); - - /** - * callback to negotiate the pixelFormat - * @param fmt is the list of formats which are supported by the codec, - * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. - * The first is always the native one. - * @note The callback may be called again immediately if initialization for - * the selected (hardware-accelerated) pixel format failed. - * @warning Behavior is undefined if the callback returns a value not - * in the fmt list of formats. - * @return the chosen format - * - encoding: unused - * - decoding: Set by user, if not set the native format will be chosen. - */ - enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - - /** - * maximum number of B-frames between non-B-frames - * Note: The output will be delayed by max_b_frames+1 relative to the input. - * - encoding: Set by user. - * - decoding: unused - */ - int max_b_frames; - - /** - * qscale factor between IP and B-frames - * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). - * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). - * - encoding: Set by user. - * - decoding: unused - */ - float b_quant_factor; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int b_frame_strategy; -#endif - - /** - * qscale offset between IP and B-frames - * - encoding: Set by user. - * - decoding: unused - */ - float b_quant_offset; - - /** - * Size of the frame reordering buffer in the decoder. - * For MPEG-2 it is 1 IPB or 0 low delay IP. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int has_b_frames; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int mpeg_quant; -#endif - - /** - * qscale factor between P- and I-frames - * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + offset). - * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). - * - encoding: Set by user. - * - decoding: unused - */ - float i_quant_factor; - - /** - * qscale offset between P and I-frames - * - encoding: Set by user. - * - decoding: unused - */ - float i_quant_offset; - - /** - * luminance masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float lumi_masking; - - /** - * temporary complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float temporal_cplx_masking; - - /** - * spatial complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float spatial_cplx_masking; - - /** - * p block masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float p_masking; - - /** - * darkness masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float dark_masking; - - /** - * slice count - * - encoding: Set by libavcodec. - * - decoding: Set by user (or 0). - */ - int slice_count; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int prediction_method; -#define FF_PRED_LEFT 0 -#define FF_PRED_PLANE 1 -#define FF_PRED_MEDIAN 2 -#endif - - /** - * slice offsets in the frame in bytes - * - encoding: Set/allocated by libavcodec. - * - decoding: Set/allocated by user (or NULL). - */ - int *slice_offset; - - /** - * sample aspect ratio (0 if unknown) - * That is the width of a pixel divided by the height of the pixel. - * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - AVRational sample_aspect_ratio; - - /** - * motion estimation comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_cmp; - /** - * subpixel motion estimation comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_sub_cmp; - /** - * macroblock comparison function (not supported yet) - * - encoding: Set by user. - * - decoding: unused - */ - int mb_cmp; - /** - * interlaced DCT comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int ildct_cmp; -#define FF_CMP_SAD 0 -#define FF_CMP_SSE 1 -#define FF_CMP_SATD 2 -#define FF_CMP_DCT 3 -#define FF_CMP_PSNR 4 -#define FF_CMP_BIT 5 -#define FF_CMP_RD 6 -#define FF_CMP_ZERO 7 -#define FF_CMP_VSAD 8 -#define FF_CMP_VSSE 9 -#define FF_CMP_NSSE 10 -#define FF_CMP_W53 11 -#define FF_CMP_W97 12 -#define FF_CMP_DCTMAX 13 -#define FF_CMP_DCT264 14 -#define FF_CMP_MEDIAN_SAD 15 -#define FF_CMP_CHROMA 256 - - /** - * ME diamond size & shape - * - encoding: Set by user. - * - decoding: unused - */ - int dia_size; - - /** - * amount of previous MV predictors (2a+1 x 2a+1 square) - * - encoding: Set by user. - * - decoding: unused - */ - int last_predictor_count; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int pre_me; -#endif - - /** - * motion estimation prepass comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_pre_cmp; - - /** - * ME prepass diamond size & shape - * - encoding: Set by user. - * - decoding: unused - */ - int pre_dia_size; - - /** - * subpel ME quality - * - encoding: Set by user. - * - decoding: unused - */ - int me_subpel_quality; - - /** - * maximum motion estimation search range in subpel units - * If 0 then no limit. - * - * - encoding: Set by user. - * - decoding: unused - */ - int me_range; - - /** - * slice flags - * - encoding: unused - * - decoding: Set by user. - */ - int slice_flags; -#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display -#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG-2 field pics) -#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1) - - /** - * macroblock decision mode - * - encoding: Set by user. - * - decoding: unused - */ - int mb_decision; -#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp -#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits -#define FF_MB_DECISION_RD 2 ///< rate distortion - - /** - * custom intra quantization matrix - * Must be allocated with the av_malloc() family of functions, and will be freed in - * avcodec_free_context(). - * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. - * - decoding: Set/allocated/freed by libavcodec. - */ - uint16_t *intra_matrix; - - /** - * custom inter quantization matrix - * Must be allocated with the av_malloc() family of functions, and will be freed in - * avcodec_free_context(). - * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. - * - decoding: Set/allocated/freed by libavcodec. - */ - uint16_t *inter_matrix; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int scenechange_threshold; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int noise_reduction; -#endif - - /** - * precision of the intra DC coefficient - 8 - * - encoding: Set by user. - * - decoding: Set by libavcodec - */ - int intra_dc_precision; - - /** - * Number of macroblock rows at the top which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_top; - - /** - * Number of macroblock rows at the bottom which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_bottom; - - /** - * minimum MB Lagrange multiplier - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmin; - - /** - * maximum MB Lagrange multiplier - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmax; - -#if FF_API_PRIVATE_OPT - /** - * @deprecated use encoder private options instead - */ - attribute_deprecated - int me_penalty_compensation; -#endif - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int bidir_refine; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int brd_scale; -#endif - - /** - * minimum GOP size - * - encoding: Set by user. - * - decoding: unused - */ - int keyint_min; - - /** - * number of reference frames - * - encoding: Set by user. - * - decoding: Set by lavc. - */ - int refs; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int chromaoffset; -#endif - - /** - * Note: Value depends upon the compare function used for fullpel ME. - * - encoding: Set by user. - * - decoding: unused - */ - int mv0_threshold; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int b_sensitivity; -#endif - - /** - * Chromaticity coordinates of the source primaries. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorPrimaries color_primaries; - - /** - * Color Transfer Characteristic. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorTransferCharacteristic color_trc; - - /** - * YUV colorspace type. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorSpace colorspace; - - /** - * MPEG vs JPEG YUV range. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorRange color_range; - - /** - * This defines the location of chroma samples. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVChromaLocation chroma_sample_location; - - /** - * Number of slices. - * Indicates number of picture subdivisions. Used for parallelized - * decoding. - * - encoding: Set by user - * - decoding: unused - */ - int slices; - - /** Field order - * - encoding: set by libavcodec - * - decoding: Set by user. - */ - enum AVFieldOrder field_order; - - /* audio only */ - int sample_rate; ///< samples per second - int channels; ///< number of audio channels - - /** - * audio sample format - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - enum AVSampleFormat sample_fmt; ///< sample format - - /* The following data should not be initialized. */ - /** - * Number of samples per channel in an audio frame. - * - * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame - * except the last must contain exactly frame_size samples per channel. - * May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the - * frame size is not restricted. - * - decoding: may be set by some decoders to indicate constant frame size - */ - int frame_size; - - /** - * Frame counter, set by libavcodec. - * - * - decoding: total number of frames returned from the decoder so far. - * - encoding: total number of frames passed to the encoder so far. - * - * @note the counter is not incremented if encoding/decoding resulted in - * an error. - */ - int frame_number; - - /** - * number of bytes per packet if constant and known or 0 - * Used by some WAV based audio codecs. - */ - int block_align; - - /** - * Audio cutoff bandwidth (0 means "automatic") - * - encoding: Set by user. - * - decoding: unused - */ - int cutoff; - - /** - * Audio channel layout. - * - encoding: set by user. - * - decoding: set by user, may be overwritten by libavcodec. - */ - uint64_t channel_layout; - - /** - * Request decoder to use this channel layout if it can (0 for default) - * - encoding: unused - * - decoding: Set by user. - */ - uint64_t request_channel_layout; - - /** - * Type of service that the audio stream conveys. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - enum AVAudioServiceType audio_service_type; - - /** - * desired sample format - * - encoding: Not used. - * - decoding: Set by user. - * Decoder will decode to this format if it can. - */ - enum AVSampleFormat request_sample_fmt; - - /** - * This callback is called at the beginning of each frame to get data - * buffer(s) for it. There may be one contiguous buffer for all the data or - * there may be a buffer per each data plane or anything in between. What - * this means is, you may set however many entries in buf[] you feel necessary. - * Each buffer must be reference-counted using the AVBuffer API (see description - * of buf[] below). - * - * The following fields will be set in the frame before this callback is - * called: - * - format - * - width, height (video only) - * - sample_rate, channel_layout, nb_samples (audio only) - * Their values may differ from the corresponding values in - * AVCodecContext. This callback must use the frame values, not the codec - * context values, to calculate the required buffer size. - * - * This callback must fill the following fields in the frame: - * - data[] - * - linesize[] - * - extended_data: - * * if the data is planar audio with more than 8 channels, then this - * callback must allocate and fill extended_data to contain all pointers - * to all data planes. data[] must hold as many pointers as it can. - * extended_data must be allocated with av_malloc() and will be freed in - * av_frame_unref(). - * * otherwise extended_data must point to data - * - buf[] must contain one or more pointers to AVBufferRef structures. Each of - * the frame's data and extended_data pointers must be contained in these. That - * is, one AVBufferRef for each allocated chunk of memory, not necessarily one - * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(), - * and av_buffer_ref(). - * - extended_buf and nb_extended_buf must be allocated with av_malloc() by - * this callback and filled with the extra buffers if there are more - * buffers than buf[] can hold. extended_buf will be freed in - * av_frame_unref(). - * - * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call - * avcodec_default_get_buffer2() instead of providing buffers allocated by - * some other means. - * - * Each data plane must be aligned to the maximum required by the target - * CPU. - * - * @see avcodec_default_get_buffer2() - * - * Video: - * - * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused - * (read and/or written to if it is writable) later by libavcodec. - * - * avcodec_align_dimensions2() should be used to find the required width and - * height, as they normally need to be rounded up to the next multiple of 16. - * - * Some decoders do not support linesizes changing between frames. - * - * If frame multithreading is used, this callback may be called from a - * different thread, but not from more than one at once. Does not need to be - * reentrant. - * - * @see avcodec_align_dimensions2() - * - * Audio: - * - * Decoders request a buffer of a particular size by setting - * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, - * however, utilize only part of the buffer by setting AVFrame.nb_samples - * to a smaller value in the output frame. - * - * As a convenience, av_samples_get_buffer_size() and - * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() - * functions to find the required data size and to fill data pointers and - * linesize. In AVFrame.linesize, only linesize[0] may be set for audio - * since all planes must be the same size. - * - * @see av_samples_get_buffer_size(), av_samples_fill_arrays() - * - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - */ - int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags); - -#if FF_API_OLD_ENCDEC - /** - * If non-zero, the decoded audio and video frames returned from - * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted - * and are valid indefinitely. The caller must free them with - * av_frame_unref() when they are not needed anymore. - * Otherwise, the decoded frames must not be freed by the caller and are - * only valid until the next decode call. - * - * This is always automatically enabled if avcodec_receive_frame() is used. - * - * - encoding: unused - * - decoding: set by the caller before avcodec_open2(). - */ - attribute_deprecated - int refcounted_frames; -#endif - - /* - encoding parameters */ - float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) - float qblur; ///< amount of qscale smoothing over time (0.0-1.0) - - /** - * minimum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmin; - - /** - * maximum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmax; - - /** - * maximum quantizer difference between frames - * - encoding: Set by user. - * - decoding: unused - */ - int max_qdiff; - - /** - * decoder bitstream buffer size - * - encoding: Set by user. - * - decoding: unused - */ - int rc_buffer_size; - - /** - * ratecontrol override, see RcOverride - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - int rc_override_count; - RcOverride *rc_override; - - /** - * maximum bitrate - * - encoding: Set by user. - * - decoding: Set by user, may be overwritten by libavcodec. - */ - int64_t rc_max_rate; - - /** - * minimum bitrate - * - encoding: Set by user. - * - decoding: unused - */ - int64_t rc_min_rate; - - /** - * Ratecontrol attempt to use, at maximum, of what can be used without an underflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_max_available_vbv_use; - - /** - * Ratecontrol attempt to use, at least, times the amount needed to prevent a vbv overflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_min_vbv_overflow_use; - - /** - * Number of bits which should be loaded into the rc buffer before decoding starts. - * - encoding: Set by user. - * - decoding: unused - */ - int rc_initial_buffer_occupancy; - -#if FF_API_CODER_TYPE -#define FF_CODER_TYPE_VLC 0 -#define FF_CODER_TYPE_AC 1 -#define FF_CODER_TYPE_RAW 2 -#define FF_CODER_TYPE_RLE 3 - /** - * @deprecated use encoder private options instead - */ - attribute_deprecated - int coder_type; -#endif /* FF_API_CODER_TYPE */ - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int context_model; -#endif - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_threshold; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_factor; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_exp; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_cmp; -#endif /* FF_API_PRIVATE_OPT */ - - /** - * trellis RD quantization - * - encoding: Set by user. - * - decoding: unused - */ - int trellis; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int min_prediction_order; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int max_prediction_order; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int64_t timecode_frame_start; -#endif - -#if FF_API_RTP_CALLBACK - /** - * @deprecated unused - */ - /* The RTP callback: This function is called */ - /* every time the encoder has a packet to send. */ - /* It depends on the encoder if the data starts */ - /* with a Start Code (it should). H.263 does. */ - /* mb_nb contains the number of macroblocks */ - /* encoded in the RTP payload. */ - attribute_deprecated - void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb); -#endif - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int rtp_payload_size; /* The size of the RTP payload: the coder will */ - /* do its best to deliver a chunk with size */ - /* below rtp_payload_size, the chunk will start */ - /* with a start code on some codecs like H.263. */ - /* This doesn't take account of any particular */ - /* headers inside the transmitted RTP payload. */ -#endif - -#if FF_API_STAT_BITS - /* statistics, used for 2-pass encoding */ - attribute_deprecated - int mv_bits; - attribute_deprecated - int header_bits; - attribute_deprecated - int i_tex_bits; - attribute_deprecated - int p_tex_bits; - attribute_deprecated - int i_count; - attribute_deprecated - int p_count; - attribute_deprecated - int skip_count; - attribute_deprecated - int misc_bits; - - /** @deprecated this field is unused */ - attribute_deprecated - int frame_bits; -#endif - - /** - * pass1 encoding statistics output buffer - * - encoding: Set by libavcodec. - * - decoding: unused - */ - char *stats_out; - - /** - * pass2 encoding statistics input buffer - * Concatenated stuff from stats_out of pass1 should be placed here. - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - char *stats_in; - - /** - * Work around bugs in encoders which sometimes cannot be detected automatically. - * - encoding: Set by user - * - decoding: Set by user - */ - int workaround_bugs; -#define FF_BUG_AUTODETECT 1 ///< autodetection -#define FF_BUG_XVID_ILACE 4 -#define FF_BUG_UMP4 8 -#define FF_BUG_NO_PADDING 16 -#define FF_BUG_AMV 32 -#define FF_BUG_QPEL_CHROMA 64 -#define FF_BUG_STD_QPEL 128 -#define FF_BUG_QPEL_CHROMA2 256 -#define FF_BUG_DIRECT_BLOCKSIZE 512 -#define FF_BUG_EDGE 1024 -#define FF_BUG_HPEL_CHROMA 2048 -#define FF_BUG_DC_CLIP 4096 -#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders. -#define FF_BUG_TRUNCATED 16384 -#define FF_BUG_IEDGE 32768 - - /** - * strictly follow the standard (MPEG-4, ...). - * - encoding: Set by user. - * - decoding: Set by user. - * Setting this to STRICT or higher means the encoder and decoder will - * generally do stupid things, whereas setting it to unofficial or lower - * will mean the encoder might produce output that is not supported by all - * spec-compliant decoders. Decoders don't differentiate between normal, - * unofficial and experimental (that is, they always try to decode things - * when they can) unless they are explicitly asked to behave stupidly - * (=strictly conform to the specs) - */ - int strict_std_compliance; -#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. -#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. -#define FF_COMPLIANCE_NORMAL 0 -#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions -#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. - - /** - * error concealment flags - * - encoding: unused - * - decoding: Set by user. - */ - int error_concealment; -#define FF_EC_GUESS_MVS 1 -#define FF_EC_DEBLOCK 2 -#define FF_EC_FAVOR_INTER 256 - - /** - * debug - * - encoding: Set by user. - * - decoding: Set by user. - */ - int debug; -#define FF_DEBUG_PICT_INFO 1 -#define FF_DEBUG_RC 2 -#define FF_DEBUG_BITSTREAM 4 -#define FF_DEBUG_MB_TYPE 8 -#define FF_DEBUG_QP 16 -#define FF_DEBUG_DCT_COEFF 0x00000040 -#define FF_DEBUG_SKIP 0x00000080 -#define FF_DEBUG_STARTCODE 0x00000100 -#define FF_DEBUG_ER 0x00000400 -#define FF_DEBUG_MMCO 0x00000800 -#define FF_DEBUG_BUGS 0x00001000 -#define FF_DEBUG_BUFFERS 0x00008000 -#define FF_DEBUG_THREADS 0x00010000 -#define FF_DEBUG_GREEN_MD 0x00800000 -#define FF_DEBUG_NOMC 0x01000000 - - /** - * Error recognition; may misdetect some more or less valid parts as errors. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int err_recognition; - -/** - * Verify checksums embedded in the bitstream (could be of either encoded or - * decoded data, depending on the codec) and print an error message on mismatch. - * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the - * decoder returning an error. - */ -#define AV_EF_CRCCHECK (1<<0) -#define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations -#define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length -#define AV_EF_EXPLODE (1<<3) ///< abort decoding on minor error detection - -#define AV_EF_IGNORE_ERR (1<<15) ///< ignore errors and continue -#define AV_EF_CAREFUL (1<<16) ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors -#define AV_EF_COMPLIANT (1<<17) ///< consider all spec non compliances as errors -#define AV_EF_AGGRESSIVE (1<<18) ///< consider things that a sane encoder should not do as an error - - - /** - * opaque 64-bit number (generally a PTS) that will be reordered and - * output in AVFrame.reordered_opaque - * - encoding: Set by libavcodec to the reordered_opaque of the input - * frame corresponding to the last returned packet. Only - * supported by encoders with the - * AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability. - * - decoding: Set by user. - */ - int64_t reordered_opaque; - - /** - * Hardware accelerator in use - * - encoding: unused. - * - decoding: Set by libavcodec - */ - const struct AVHWAccel *hwaccel; - - /** - * Hardware accelerator context. - * For some hardware accelerators, a global context needs to be - * provided by the user. In that case, this holds display-dependent - * data FFmpeg cannot instantiate itself. Please refer to the - * FFmpeg HW accelerator documentation to know how to fill this - * is. e.g. for VA API, this is a struct vaapi_context. - * - encoding: unused - * - decoding: Set by user - */ - void *hwaccel_context; - - /** - * error - * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR. - * - decoding: unused - */ - uint64_t error[AV_NUM_DATA_POINTERS]; - - /** - * DCT algorithm, see FF_DCT_* below - * - encoding: Set by user. - * - decoding: unused - */ - int dct_algo; -#define FF_DCT_AUTO 0 -#define FF_DCT_FASTINT 1 -#define FF_DCT_INT 2 -#define FF_DCT_MMX 3 -#define FF_DCT_ALTIVEC 5 -#define FF_DCT_FAAN 6 - - /** - * IDCT algorithm, see FF_IDCT_* below. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int idct_algo; -#define FF_IDCT_AUTO 0 -#define FF_IDCT_INT 1 -#define FF_IDCT_SIMPLE 2 -#define FF_IDCT_SIMPLEMMX 3 -#define FF_IDCT_ARM 7 -#define FF_IDCT_ALTIVEC 8 -#define FF_IDCT_SIMPLEARM 10 -#define FF_IDCT_XVID 14 -#define FF_IDCT_SIMPLEARMV5TE 16 -#define FF_IDCT_SIMPLEARMV6 17 -#define FF_IDCT_FAAN 20 -#define FF_IDCT_SIMPLENEON 22 -#define FF_IDCT_NONE 24 /* Used by XvMC to extract IDCT coefficients with FF_IDCT_PERM_NONE */ -#define FF_IDCT_SIMPLEAUTO 128 - - /** - * bits per sample/pixel from the demuxer (needed for huffyuv). - * - encoding: Set by libavcodec. - * - decoding: Set by user. - */ - int bits_per_coded_sample; - - /** - * Bits per sample/pixel of internal libavcodec pixel/sample format. - * - encoding: set by user. - * - decoding: set by libavcodec. - */ - int bits_per_raw_sample; - - /** - * low resolution decoding, 1-> 1/2 size, 2->1/4 size - * - encoding: unused - * - decoding: Set by user. - */ - int lowres; - -#if FF_API_CODED_FRAME - /** - * the picture in the bitstream - * - encoding: Set by libavcodec. - * - decoding: unused - * - * @deprecated use the quality factor packet side data instead - */ - attribute_deprecated AVFrame *coded_frame; -#endif - - /** - * thread count - * is used to decide how many independent tasks should be passed to execute() - * - encoding: Set by user. - * - decoding: Set by user. - */ - int thread_count; - - /** - * Which multithreading methods to use. - * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, - * so clients which cannot provide future frames should not use it. - * - * - encoding: Set by user, otherwise the default is used. - * - decoding: Set by user, otherwise the default is used. - */ - int thread_type; -#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once -#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once - - /** - * Which multithreading methods are in use by the codec. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int active_thread_type; - -#if FF_API_THREAD_SAFE_CALLBACKS - /** - * Set by the client if its custom get_buffer() callback can be called - * synchronously from another thread, which allows faster multithreaded decoding. - * draw_horiz_band() will be called from other threads regardless of this setting. - * Ignored if the default get_buffer() is used. - * - encoding: Set by user. - * - decoding: Set by user. - * - * @deprecated the custom get_buffer2() callback should always be - * thread-safe. Thread-unsafe get_buffer2() implementations will be - * invalid starting with LIBAVCODEC_VERSION_MAJOR=60; in other words, - * libavcodec will behave as if this field was always set to 1. - * Callers that want to be forward compatible with future libavcodec - * versions should wrap access to this field in - * #if LIBAVCODEC_VERSION_MAJOR < 60 - */ - attribute_deprecated - int thread_safe_callbacks; -#endif - - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. - * @param count the number of things to execute - * - encoding: Set by libavcodec, user can override. - * - decoding: Set by libavcodec, user can override. - */ - int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size); - - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. - * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. - * @param c context passed also to func - * @param count the number of things to execute - * @param arg2 argument passed unchanged to func - * @param ret return values of executed functions, must have space for "count" values. May be NULL. - * @param func function that will be called count times, with jobnr from 0 to count-1. - * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no - * two instances of func executing at the same time will have the same threadnr. - * @return always 0 currently, but code should handle a future improvement where when any call to func - * returns < 0 no further calls to func may be done and < 0 is returned. - * - encoding: Set by libavcodec, user can override. - * - decoding: Set by libavcodec, user can override. - */ - int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count); - - /** - * noise vs. sse weight for the nsse comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int nsse_weight; - - /** - * profile - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int profile; -#define FF_PROFILE_UNKNOWN -99 -#define FF_PROFILE_RESERVED -100 - -#define FF_PROFILE_AAC_MAIN 0 -#define FF_PROFILE_AAC_LOW 1 -#define FF_PROFILE_AAC_SSR 2 -#define FF_PROFILE_AAC_LTP 3 -#define FF_PROFILE_AAC_HE 4 -#define FF_PROFILE_AAC_HE_V2 28 -#define FF_PROFILE_AAC_LD 22 -#define FF_PROFILE_AAC_ELD 38 -#define FF_PROFILE_MPEG2_AAC_LOW 128 -#define FF_PROFILE_MPEG2_AAC_HE 131 - -#define FF_PROFILE_DNXHD 0 -#define FF_PROFILE_DNXHR_LB 1 -#define FF_PROFILE_DNXHR_SQ 2 -#define FF_PROFILE_DNXHR_HQ 3 -#define FF_PROFILE_DNXHR_HQX 4 -#define FF_PROFILE_DNXHR_444 5 - -#define FF_PROFILE_DTS 20 -#define FF_PROFILE_DTS_ES 30 -#define FF_PROFILE_DTS_96_24 40 -#define FF_PROFILE_DTS_HD_HRA 50 -#define FF_PROFILE_DTS_HD_MA 60 -#define FF_PROFILE_DTS_EXPRESS 70 - -#define FF_PROFILE_MPEG2_422 0 -#define FF_PROFILE_MPEG2_HIGH 1 -#define FF_PROFILE_MPEG2_SS 2 -#define FF_PROFILE_MPEG2_SNR_SCALABLE 3 -#define FF_PROFILE_MPEG2_MAIN 4 -#define FF_PROFILE_MPEG2_SIMPLE 5 - -#define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag -#define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag - -#define FF_PROFILE_H264_BASELINE 66 -#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED) -#define FF_PROFILE_H264_MAIN 77 -#define FF_PROFILE_H264_EXTENDED 88 -#define FF_PROFILE_H264_HIGH 100 -#define FF_PROFILE_H264_HIGH_10 110 -#define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_MULTIVIEW_HIGH 118 -#define FF_PROFILE_H264_HIGH_422 122 -#define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_STEREO_HIGH 128 -#define FF_PROFILE_H264_HIGH_444 144 -#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244 -#define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_CAVLC_444 44 - -#define FF_PROFILE_VC1_SIMPLE 0 -#define FF_PROFILE_VC1_MAIN 1 -#define FF_PROFILE_VC1_COMPLEX 2 -#define FF_PROFILE_VC1_ADVANCED 3 - -#define FF_PROFILE_MPEG4_SIMPLE 0 -#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1 -#define FF_PROFILE_MPEG4_CORE 2 -#define FF_PROFILE_MPEG4_MAIN 3 -#define FF_PROFILE_MPEG4_N_BIT 4 -#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5 -#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6 -#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7 -#define FF_PROFILE_MPEG4_HYBRID 8 -#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9 -#define FF_PROFILE_MPEG4_CORE_SCALABLE 10 -#define FF_PROFILE_MPEG4_ADVANCED_CODING 11 -#define FF_PROFILE_MPEG4_ADVANCED_CORE 12 -#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13 -#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14 -#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15 - -#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 1 -#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 2 -#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 32768 -#define FF_PROFILE_JPEG2000_DCINEMA_2K 3 -#define FF_PROFILE_JPEG2000_DCINEMA_4K 4 - -#define FF_PROFILE_VP9_0 0 -#define FF_PROFILE_VP9_1 1 -#define FF_PROFILE_VP9_2 2 -#define FF_PROFILE_VP9_3 3 - -#define FF_PROFILE_HEVC_MAIN 1 -#define FF_PROFILE_HEVC_MAIN_10 2 -#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 -#define FF_PROFILE_HEVC_REXT 4 - -#define FF_PROFILE_VVC_MAIN_10 1 -#define FF_PROFILE_VVC_MAIN_10_444 33 - -#define FF_PROFILE_AV1_MAIN 0 -#define FF_PROFILE_AV1_HIGH 1 -#define FF_PROFILE_AV1_PROFESSIONAL 2 - -#define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT 0xc0 -#define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1 -#define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT 0xc2 -#define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS 0xc3 -#define FF_PROFILE_MJPEG_JPEG_LS 0xf7 - -#define FF_PROFILE_SBC_MSBC 1 - -#define FF_PROFILE_PRORES_PROXY 0 -#define FF_PROFILE_PRORES_LT 1 -#define FF_PROFILE_PRORES_STANDARD 2 -#define FF_PROFILE_PRORES_HQ 3 -#define FF_PROFILE_PRORES_4444 4 -#define FF_PROFILE_PRORES_XQ 5 - -#define FF_PROFILE_ARIB_PROFILE_A 0 -#define FF_PROFILE_ARIB_PROFILE_C 1 - -#define FF_PROFILE_KLVA_SYNC 0 -#define FF_PROFILE_KLVA_ASYNC 1 - - /** - * level - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int level; -#define FF_LEVEL_UNKNOWN -99 - - /** - * Skip loop filtering for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_loop_filter; - - /** - * Skip IDCT/dequantization for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_idct; - - /** - * Skip decoding for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_frame; - - /** - * Header containing style information for text subtitles. - * For SUBTITLE_ASS subtitle type, it should contain the whole ASS - * [Script Info] and [V4+ Styles] section, plus the [Events] line and - * the Format line following. It shouldn't include any Dialogue line. - * - encoding: Set/allocated/freed by user (before avcodec_open2()) - * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2()) - */ - uint8_t *subtitle_header; - int subtitle_header_size; - -#if FF_API_VBV_DELAY - /** - * VBV delay coded in the last frame (in periods of a 27 MHz clock). - * Used for compliant TS muxing. - * - encoding: Set by libavcodec. - * - decoding: unused. - * @deprecated this value is now exported as a part of - * AV_PKT_DATA_CPB_PROPERTIES packet side data - */ - attribute_deprecated - uint64_t vbv_delay; -#endif - -#if FF_API_SIDEDATA_ONLY_PKT - /** - * Encoding only and set by default. Allow encoders to output packets - * that do not contain any encoded data, only side data. - * - * Some encoders need to output such packets, e.g. to update some stream - * parameters at the end of encoding. - * - * @deprecated this field disables the default behaviour and - * it is kept only for compatibility. - */ - attribute_deprecated - int side_data_only_packets; -#endif - - /** - * Audio only. The number of "priming" samples (padding) inserted by the - * encoder at the beginning of the audio. I.e. this number of leading - * decoded samples must be discarded by the caller to get the original audio - * without leading padding. - * - * - decoding: unused - * - encoding: Set by libavcodec. The timestamps on the output packets are - * adjusted by the encoder so that they always refer to the - * first sample of the data actually contained in the packet, - * including any added padding. E.g. if the timebase is - * 1/samplerate and the timestamp of the first input sample is - * 0, the timestamp of the first output packet will be - * -initial_padding. - */ - int initial_padding; - - /** - * - decoding: For codecs that store a framerate value in the compressed - * bitstream, the decoder may export it here. { 0, 1} when - * unknown. - * - encoding: May be used to signal the framerate of CFR content to an - * encoder. - */ - AVRational framerate; - - /** - * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx. - * - encoding: unused. - * - decoding: Set by libavcodec before calling get_format() - */ - enum AVPixelFormat sw_pix_fmt; - - /** - * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. - * - encoding unused. - * - decoding set by user. - */ - AVRational pkt_timebase; - - /** - * AVCodecDescriptor - * - encoding: unused. - * - decoding: set by libavcodec. - */ - const AVCodecDescriptor *codec_descriptor; - - /** - * Current statistics for PTS correction. - * - decoding: maintained and used by libavcodec, not intended to be used by user apps - * - encoding: unused - */ - int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far - int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far - int64_t pts_correction_last_pts; /// PTS of the last frame - int64_t pts_correction_last_dts; /// DTS of the last frame - - /** - * Character encoding of the input subtitles file. - * - decoding: set by user - * - encoding: unused - */ - char *sub_charenc; - - /** - * Subtitles character encoding mode. Formats or codecs might be adjusting - * this setting (if they are doing the conversion themselves for instance). - * - decoding: set by libavcodec - * - encoding: unused - */ - int sub_charenc_mode; -#define FF_SUB_CHARENC_MODE_DO_NOTHING -1 ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance) -#define FF_SUB_CHARENC_MODE_AUTOMATIC 0 ///< libavcodec will select the mode itself -#define FF_SUB_CHARENC_MODE_PRE_DECODER 1 ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv -#define FF_SUB_CHARENC_MODE_IGNORE 2 ///< neither convert the subtitles, nor check them for valid UTF-8 - - /** - * Skip processing alpha if supported by codec. - * Note that if the format uses pre-multiplied alpha (common with VP6, - * and recommended due to better video quality/compression) - * the image will look as if alpha-blended onto a black background. - * However for formats that do not use pre-multiplied alpha - * there might be serious artefacts (though e.g. libswscale currently - * assumes pre-multiplied alpha anyway). - * - * - decoding: set by user - * - encoding: unused - */ - int skip_alpha; - - /** - * Number of samples to skip after a discontinuity - * - decoding: unused - * - encoding: set by libavcodec - */ - int seek_preroll; - -#if FF_API_DEBUG_MV - /** - * @deprecated unused - */ - attribute_deprecated - int debug_mv; -#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames -#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames -#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames -#endif - - /** - * custom intra quantization matrix - * - encoding: Set by user, can be NULL. - * - decoding: unused. - */ - uint16_t *chroma_intra_matrix; - - /** - * dump format separator. - * can be ", " or "\n " or anything else - * - encoding: Set by user. - * - decoding: Set by user. - */ - uint8_t *dump_separator; - - /** - * ',' separated list of allowed decoders. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *codec_whitelist; - - /** - * Properties of the stream that gets decoded - * - encoding: unused - * - decoding: set by libavcodec - */ - unsigned properties; -#define FF_CODEC_PROPERTY_LOSSLESS 0x00000001 -#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002 - - /** - * Additional data associated with the entire coded stream. - * - * - decoding: unused - * - encoding: may be set by libavcodec after avcodec_open2(). - */ - AVPacketSideData *coded_side_data; - int nb_coded_side_data; - - /** - * A reference to the AVHWFramesContext describing the input (for encoding) - * or output (decoding) frames. The reference is set by the caller and - * afterwards owned (and freed) by libavcodec - it should never be read by - * the caller after being set. - * - * - decoding: This field should be set by the caller from the get_format() - * callback. The previous reference (if any) will always be - * unreffed by libavcodec before the get_format() call. - * - * If the default get_buffer2() is used with a hwaccel pixel - * format, then this AVHWFramesContext will be used for - * allocating the frame buffers. - * - * - encoding: For hardware encoders configured to use a hwaccel pixel - * format, this field should be set by the caller to a reference - * to the AVHWFramesContext describing input frames. - * AVHWFramesContext.format must be equal to - * AVCodecContext.pix_fmt. - * - * This field should be set before avcodec_open2() is called. - */ - AVBufferRef *hw_frames_ctx; - - /** - * Control the form of AVSubtitle.rects[N]->ass - * - decoding: set by user - * - encoding: unused - */ - int sub_text_format; -#define FF_SUB_TEXT_FMT_ASS 0 -#if FF_API_ASS_TIMING -#define FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS 1 -#endif - - /** - * Audio only. The amount of padding (in samples) appended by the encoder to - * the end of the audio. I.e. this number of decoded samples must be - * discarded by the caller from the end of the stream to get the original - * audio without any trailing padding. - * - * - decoding: unused - * - encoding: unused - */ - int trailing_padding; - - /** - * The number of pixels per image to maximally accept. - * - * - decoding: set by user - * - encoding: set by user - */ - int64_t max_pixels; - - /** - * A reference to the AVHWDeviceContext describing the device which will - * be used by a hardware encoder/decoder. The reference is set by the - * caller and afterwards owned (and freed) by libavcodec. - * - * This should be used if either the codec device does not require - * hardware frames or any that are used are to be allocated internally by - * libavcodec. If the user wishes to supply any of the frames used as - * encoder input or decoder output then hw_frames_ctx should be used - * instead. When hw_frames_ctx is set in get_format() for a decoder, this - * field will be ignored while decoding the associated stream segment, but - * may again be used on a following one after another get_format() call. - * - * For both encoders and decoders this field should be set before - * avcodec_open2() is called and must not be written to thereafter. - * - * Note that some decoders may require this field to be set initially in - * order to support hw_frames_ctx at all - in that case, all frames - * contexts used must be created on the same device. - */ - AVBufferRef *hw_device_ctx; - - /** - * Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated - * decoding (if active). - * - encoding: unused - * - decoding: Set by user (either before avcodec_open2(), or in the - * AVCodecContext.get_format callback) - */ - int hwaccel_flags; - - /** - * Video decoding only. Certain video codecs support cropping, meaning that - * only a sub-rectangle of the decoded frame is intended for display. This - * option controls how cropping is handled by libavcodec. - * - * When set to 1 (the default), libavcodec will apply cropping internally. - * I.e. it will modify the output frame width/height fields and offset the - * data pointers (only by as much as possible while preserving alignment, or - * by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that - * the frames output by the decoder refer only to the cropped area. The - * crop_* fields of the output frames will be zero. - * - * When set to 0, the width/height fields of the output frames will be set - * to the coded dimensions and the crop_* fields will describe the cropping - * rectangle. Applying the cropping is left to the caller. - * - * @warning When hardware acceleration with opaque output frames is used, - * libavcodec is unable to apply cropping from the top/left border. - * - * @note when this option is set to zero, the width/height fields of the - * AVCodecContext and output AVFrames have different meanings. The codec - * context fields store display dimensions (with the coded dimensions in - * coded_width/height), while the frame fields store the coded dimensions - * (with the display dimensions being determined by the crop_* fields). - */ - int apply_cropping; - - /* - * Video decoding only. Sets the number of extra hardware frames which - * the decoder will allocate for use by the caller. This must be set - * before avcodec_open2() is called. - * - * Some hardware decoders require all frames that they will use for - * output to be defined in advance before decoding starts. For such - * decoders, the hardware frame pool must therefore be of a fixed size. - * The extra frames set here are on top of any number that the decoder - * needs internally in order to operate normally (for example, frames - * used as reference pictures). - */ - int extra_hw_frames; - - /** - * The percentage of damaged samples to discard a frame. - * - * - decoding: set by user - * - encoding: unused - */ - int discard_damaged_percentage; - - /** - * The number of samples per frame to maximally accept. - * - * - decoding: set by user - * - encoding: set by user - */ - int64_t max_samples; - - /** - * Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of - * metadata exported in frame, packet, or coded stream side data by - * decoders and encoders. - * - * - decoding: set by user - * - encoding: set by user - */ - int export_side_data; - - /** - * This callback is called at the beginning of each packet to get a data - * buffer for it. - * - * The following field will be set in the packet before this callback is - * called: - * - size - * This callback must use the above value to calculate the required buffer size, - * which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes. - * - * This callback must fill the following fields in the packet: - * - data: alignment requirements for AVPacket apply, if any. Some architectures and - * encoders may benefit from having aligned data. - * - buf: must contain a pointer to an AVBufferRef structure. The packet's - * data pointer must be contained in it. See: av_buffer_create(), av_buffer_alloc(), - * and av_buffer_ref(). - * - * If AV_CODEC_CAP_DR1 is not set then get_encode_buffer() must call - * avcodec_default_get_encode_buffer() instead of providing a buffer allocated by - * some other means. - * - * The flags field may contain a combination of AV_GET_ENCODE_BUFFER_FLAG_ flags. - * They may be used for example to hint what use the buffer may get after being - * created. - * Implementations of this callback may ignore flags they don't understand. - * If AV_GET_ENCODE_BUFFER_FLAG_REF is set in flags then the packet may be reused - * (read and/or written to if it is writable) later by libavcodec. - * - * This callback must be thread-safe, as when frame threading is used, it may - * be called from multiple threads simultaneously. - * - * @see avcodec_default_get_encode_buffer() - * - * - encoding: Set by libavcodec, user can override. - * - decoding: unused - */ - int (*get_encode_buffer)(struct AVCodecContext *s, AVPacket *pkt, int flags); -} AVCodecContext; - -#if FF_API_CODEC_GET_SET -/** - * Accessors for some AVCodecContext fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_pkt_timebase (AVCodecContext *avctx, AVRational val); - -attribute_deprecated -const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc); - -attribute_deprecated -unsigned av_codec_get_codec_properties(const AVCodecContext *avctx); - -attribute_deprecated -int av_codec_get_lowres(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_lowres(AVCodecContext *avctx, int val); - -attribute_deprecated -int av_codec_get_seek_preroll(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_seek_preroll(AVCodecContext *avctx, int val); - -attribute_deprecated -uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val); -#endif - -struct AVSubtitle; - -#if FF_API_CODEC_GET_SET -attribute_deprecated -int av_codec_get_max_lowres(const AVCodec *codec); -#endif - -struct MpegEncContext; - -/** - * @defgroup lavc_hwaccel AVHWAccel - * - * @note Nothing in this structure should be accessed by the user. At some - * point in future it will not be externally visible at all. - * - * @{ - */ -typedef struct AVHWAccel { - /** - * Name of the hardware accelerated codec. - * The name is globally unique among encoders and among decoders (but an - * encoder and a decoder can share the same name). - */ - const char *name; - - /** - * Type of codec implemented by the hardware accelerator. - * - * See AVMEDIA_TYPE_xxx - */ - enum AVMediaType type; - - /** - * Codec implemented by the hardware accelerator. - * - * See AV_CODEC_ID_xxx - */ - enum AVCodecID id; - - /** - * Supported pixel format. - * - * Only hardware accelerated formats are supported here. - */ - enum AVPixelFormat pix_fmt; - - /** - * Hardware accelerated codec capabilities. - * see AV_HWACCEL_CODEC_CAP_* - */ - int capabilities; - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavcodec and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * Allocate a custom buffer - */ - int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame); - - /** - * Called at the beginning of each frame or field picture. - * - * Meaningful frame information (codec specific) is guaranteed to - * be parsed at this point. This function is mandatory. - * - * Note that buf can be NULL along with buf_size set to 0. - * Otherwise, this means the whole frame is available at this point. - * - * @param avctx the codec context - * @param buf the frame data buffer base - * @param buf_size the size of the frame in bytes - * @return zero if successful, a negative value otherwise - */ - int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); - - /** - * Callback for parameter data (SPS/PPS/VPS etc). - * - * Useful for hardware decoders which keep persistent state about the - * video parameters, and need to receive any changes to update that state. - * - * @param avctx the codec context - * @param type the nal unit type - * @param buf the nal unit data buffer - * @param buf_size the size of the nal unit in bytes - * @return zero if successful, a negative value otherwise - */ - int (*decode_params)(AVCodecContext *avctx, int type, const uint8_t *buf, uint32_t buf_size); - - /** - * Callback for each slice. - * - * Meaningful slice information (codec specific) is guaranteed to - * be parsed at this point. This function is mandatory. - * The only exception is XvMC, that works on MB level. - * - * @param avctx the codec context - * @param buf the slice data buffer base - * @param buf_size the size of the slice in bytes - * @return zero if successful, a negative value otherwise - */ - int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); - - /** - * Called at the end of each frame or field picture. - * - * The whole picture is parsed at this point and can now be sent - * to the hardware accelerator. This function is mandatory. - * - * @param avctx the codec context - * @return zero if successful, a negative value otherwise - */ - int (*end_frame)(AVCodecContext *avctx); - - /** - * Size of per-frame hardware accelerator private data. - * - * Private data is allocated with av_mallocz() before - * AVCodecContext.get_buffer() and deallocated after - * AVCodecContext.release_buffer(). - */ - int frame_priv_data_size; - - /** - * Called for every Macroblock in a slice. - * - * XvMC uses it to replace the ff_mpv_reconstruct_mb(). - * Instead of decoding to raw picture, MB parameters are - * stored in an array provided by the video driver. - * - * @param s the mpeg context - */ - void (*decode_mb)(struct MpegEncContext *s); - - /** - * Initialize the hwaccel private data. - * - * This will be called from ff_get_format(), after hwaccel and - * hwaccel_context are set and the hwaccel private data in AVCodecInternal - * is allocated. - */ - int (*init)(AVCodecContext *avctx); - - /** - * Uninitialize the hwaccel private data. - * - * This will be called from get_format() or avcodec_close(), after hwaccel - * and hwaccel_context are already uninitialized. - */ - int (*uninit)(AVCodecContext *avctx); - - /** - * Size of the private data to allocate in - * AVCodecInternal.hwaccel_priv_data. - */ - int priv_data_size; - - /** - * Internal hwaccel capabilities. - */ - int caps_internal; - - /** - * Fill the given hw_frames context with current codec parameters. Called - * from get_format. Refer to avcodec_get_hw_frames_parameters() for - * details. - * - * This CAN be called before AVHWAccel.init is called, and you must assume - * that avctx->hwaccel_priv_data is invalid. - */ - int (*frame_params)(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx); -} AVHWAccel; - -/** - * HWAccel is experimental and is thus avoided in favor of non experimental - * codecs - */ -#define AV_HWACCEL_CODEC_CAP_EXPERIMENTAL 0x0200 - -/** - * Hardware acceleration should be used for decoding even if the codec level - * used is unknown or higher than the maximum supported level reported by the - * hardware driver. - * - * It's generally a good idea to pass this flag unless you have a specific - * reason not to, as hardware tends to under-report supported levels. - */ -#define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0) - -/** - * Hardware acceleration can output YUV pixel formats with a different chroma - * sampling than 4:2:0 and/or other than 8 bits per component. - */ -#define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1) - -/** - * Hardware acceleration should still be attempted for decoding when the - * codec profile does not match the reported capabilities of the hardware. - * - * For example, this can be used to try to decode baseline profile H.264 - * streams in hardware - it will often succeed, because many streams marked - * as baseline profile actually conform to constrained baseline profile. - * - * @warning If the stream is actually not supported then the behaviour is - * undefined, and may include returning entirely incorrect output - * while indicating success. - */ -#define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) - -/** - * @} - */ - -#if FF_API_AVPICTURE -/** - * @defgroup lavc_picture AVPicture - * - * Functions for working with AVPicture - * @{ - */ - -/** - * Picture data structure. - * - * Up to four components can be stored into it, the last component is - * alpha. - * @deprecated use AVFrame or imgutils functions instead - */ -typedef struct AVPicture { - attribute_deprecated - uint8_t *data[AV_NUM_DATA_POINTERS]; ///< pointers to the image data planes - attribute_deprecated - int linesize[AV_NUM_DATA_POINTERS]; ///< number of bytes per line -} AVPicture; - -/** - * @} - */ -#endif - -enum AVSubtitleType { - SUBTITLE_NONE, - - SUBTITLE_BITMAP, ///< A bitmap, pict will be set - - /** - * Plain text, the text field must be set by the decoder and is - * authoritative. ass and pict fields may contain approximations. - */ - SUBTITLE_TEXT, - - /** - * Formatted text, the ass field must be set by the decoder and is - * authoritative. pict and text fields may contain approximations. - */ - SUBTITLE_ASS, -}; - -#define AV_SUBTITLE_FLAG_FORCED 0x00000001 - -typedef struct AVSubtitleRect { - int x; ///< top left corner of pict, undefined when pict is not set - int y; ///< top left corner of pict, undefined when pict is not set - int w; ///< width of pict, undefined when pict is not set - int h; ///< height of pict, undefined when pict is not set - int nb_colors; ///< number of colors in pict, undefined when pict is not set - -#if FF_API_AVPICTURE - /** - * @deprecated unused - */ - attribute_deprecated - AVPicture pict; -#endif - /** - * data+linesize for the bitmap of this subtitle. - * Can be set for text/ass as well once they are rendered. - */ - uint8_t *data[4]; - int linesize[4]; - - enum AVSubtitleType type; - - char *text; ///< 0 terminated plain UTF-8 text - - /** - * 0 terminated ASS/SSA compatible event line. - * The presentation of this is unaffected by the other values in this - * struct. - */ - char *ass; - - int flags; -} AVSubtitleRect; - -typedef struct AVSubtitle { - uint16_t format; /* 0 = graphics */ - uint32_t start_display_time; /* relative to packet pts, in ms */ - uint32_t end_display_time; /* relative to packet pts, in ms */ - unsigned num_rects; - AVSubtitleRect **rects; - int64_t pts; ///< Same as packet pts, in AV_TIME_BASE -} AVSubtitle; - -#if FF_API_NEXT -/** - * If c is NULL, returns the first registered codec, - * if c is non-NULL, returns the next registered codec after c, - * or NULL if c is the last one. - */ -attribute_deprecated -AVCodec *av_codec_next(const AVCodec *c); -#endif - -/** - * Return the LIBAVCODEC_VERSION_INT constant. - */ -unsigned avcodec_version(void); - -/** - * Return the libavcodec build-time configuration. - */ -const char *avcodec_configuration(void); - -/** - * Return the libavcodec license. - */ -const char *avcodec_license(void); - -#if FF_API_NEXT -/** - * @deprecated Calling this function is unnecessary. - */ -attribute_deprecated -void avcodec_register(AVCodec *codec); - -/** - * @deprecated Calling this function is unnecessary. - */ -attribute_deprecated -void avcodec_register_all(void); -#endif - -/** - * Allocate an AVCodecContext and set its fields to default values. The - * resulting struct should be freed with avcodec_free_context(). - * - * @param codec if non-NULL, allocate private data and initialize defaults - * for the given codec. It is illegal to then call avcodec_open2() - * with a different codec. - * If NULL, then the codec-specific defaults won't be initialized, - * which may result in suboptimal default settings (this is - * important mainly for encoders, e.g. libx264). - * - * @return An AVCodecContext filled with default values or NULL on failure. - */ -AVCodecContext *avcodec_alloc_context3(const AVCodec *codec); - -/** - * Free the codec context and everything associated with it and write NULL to - * the provided pointer. - */ -void avcodec_free_context(AVCodecContext **avctx); - -#if FF_API_GET_CONTEXT_DEFAULTS -/** - * @deprecated This function should not be used, as closing and opening a codec - * context multiple time is not supported. A new codec context should be - * allocated for each new use. - */ -int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec); -#endif - -/** - * Get the AVClass for AVCodecContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avcodec_get_class(void); - -#if FF_API_GET_FRAME_CLASS -/** - * @deprecated This function should not be used. - */ -attribute_deprecated -const AVClass *avcodec_get_frame_class(void); -#endif - -/** - * Get the AVClass for AVSubtitleRect. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avcodec_get_subtitle_rect_class(void); - -#if FF_API_COPY_CONTEXT -/** - * Copy the settings of the source AVCodecContext into the destination - * AVCodecContext. The resulting destination codec context will be - * unopened, i.e. you are required to call avcodec_open2() before you - * can use this AVCodecContext to decode/encode video/audio data. - * - * @param dest target codec context, should be initialized with - * avcodec_alloc_context3(NULL), but otherwise uninitialized - * @param src source codec context - * @return AVERROR() on error (e.g. memory allocation error), 0 on success - * - * @deprecated The semantics of this function are ill-defined and it should not - * be used. If you need to transfer the stream parameters from one codec context - * to another, use an intermediate AVCodecParameters instance and the - * avcodec_parameters_from_context() / avcodec_parameters_to_context() - * functions. - */ -attribute_deprecated -int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src); -#endif - -/** - * Fill the parameters struct based on the values from the supplied codec - * context. Any allocated fields in par are freed and replaced with duplicates - * of the corresponding fields in codec. - * - * @return >= 0 on success, a negative AVERROR code on failure - */ -int avcodec_parameters_from_context(AVCodecParameters *par, - const AVCodecContext *codec); - -/** - * Fill the codec context based on the values from the supplied codec - * parameters. Any allocated fields in codec that have a corresponding field in - * par are freed and replaced with duplicates of the corresponding field in par. - * Fields in codec that do not have a counterpart in par are not touched. - * - * @return >= 0 on success, a negative AVERROR code on failure. - */ -int avcodec_parameters_to_context(AVCodecContext *codec, - const AVCodecParameters *par); - -/** - * Initialize the AVCodecContext to use the given AVCodec. Prior to using this - * function the context has to be allocated with avcodec_alloc_context3(). - * - * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), - * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for - * retrieving a codec. - * - * @warning This function is not thread safe! - * - * @note Always call this function before using decoding routines (such as - * @ref avcodec_receive_frame()). - * - * @code - * av_dict_set(&opts, "b", "2.5M", 0); - * codec = avcodec_find_decoder(AV_CODEC_ID_H264); - * if (!codec) - * exit(1); - * - * context = avcodec_alloc_context3(codec); - * - * if (avcodec_open2(context, codec, opts) < 0) - * exit(1); - * @endcode - * - * @param avctx The context to initialize. - * @param codec The codec to open this context for. If a non-NULL codec has been - * previously passed to avcodec_alloc_context3() or - * for this context, then this parameter MUST be either NULL or - * equal to the previously passed codec. - * @param options A dictionary filled with AVCodecContext and codec-private options. - * On return this object will be filled with options that were not found. - * - * @return zero on success, a negative value on error - * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), - * av_dict_set(), av_opt_find(). - */ -int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options); - -/** - * Close a given AVCodecContext and free all the data associated with it - * (but not the AVCodecContext itself). - * - * Calling this function on an AVCodecContext that hasn't been opened will free - * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL - * codec. Subsequent calls will do nothing. - * - * @note Do not use this function. Use avcodec_free_context() to destroy a - * codec context (either open or closed). Opening and closing a codec context - * multiple times is not supported anymore -- use multiple codec contexts - * instead. - */ -int avcodec_close(AVCodecContext *avctx); - -/** - * Free all allocated data in the given subtitle struct. - * - * @param sub AVSubtitle to free. - */ -void avsubtitle_free(AVSubtitle *sub); - -/** - * @} - */ - -/** - * @addtogroup lavc_decoding - * @{ - */ - -/** - * The default callback for AVCodecContext.get_buffer2(). It is made public so - * it can be called by custom get_buffer2() implementations for decoders without - * AV_CODEC_CAP_DR1 set. - */ -int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags); - -/** - * The default callback for AVCodecContext.get_encode_buffer(). It is made public so - * it can be called by custom get_encode_buffer() implementations for encoders without - * AV_CODEC_CAP_DR1 set. - */ -int avcodec_default_get_encode_buffer(AVCodecContext *s, AVPacket *pkt, int flags); - -/** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you do not use any horizontal - * padding. - * - * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. - */ -void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height); - -/** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you also ensure that all - * line sizes are a multiple of the respective linesize_align[i]. - * - * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. - */ -void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, - int linesize_align[AV_NUM_DATA_POINTERS]); - -/** - * Converts AVChromaLocation to swscale x/y chroma position. - * - * The positions represent the chroma (0,0) position in a coordinates system - * with luma (0,0) representing the origin and luma(1,1) representing 256,256 - * - * @param xpos horizontal chroma sample position - * @param ypos vertical chroma sample position - */ -int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos); - -/** - * Converts swscale x/y chroma position to AVChromaLocation. - * - * The positions represent the chroma (0,0) position in a coordinates system - * with luma (0,0) representing the origin and luma(1,1) representing 256,256 - * - * @param xpos horizontal chroma sample position - * @param ypos vertical chroma sample position - */ -enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos); - -#if FF_API_OLD_ENCDEC -/** - * Decode the audio frame of size avpkt->size from avpkt->data into frame. - * - * Some decoders may support multiple frames in a single AVPacket. Such - * decoders would then just decode the first frame and the return value would be - * less than the packet size. In this case, avcodec_decode_audio4 has to be - * called again with an AVPacket containing the remaining data in order to - * decode the second frame, etc... Even if no frames are returned, the packet - * needs to be fed to the decoder with remaining data until it is completely - * consumed or an error occurs. - * - * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input - * and output. This means that for some packets they will not immediately - * produce decoded output and need to be flushed at the end of decoding to get - * all the decoded data. Flushing is done by calling this function with packets - * with avpkt->data set to NULL and avpkt->size set to 0 until it stops - * returning samples. It is safe to flush even those decoders that are not - * marked with AV_CODEC_CAP_DELAY, then no samples will be returned. - * - * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE - * larger than the actual read bytes because some optimized bitstream - * readers read 32 or 64 bits at once and could read over the end. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx the codec context - * @param[out] frame The AVFrame in which to store decoded audio samples. - * The decoder will allocate a buffer for the decoded frame by - * calling the AVCodecContext.get_buffer2() callback. - * When AVCodecContext.refcounted_frames is set to 1, the frame is - * reference counted and the returned reference belongs to the - * caller. The caller must release the frame using av_frame_unref() - * when the frame is no longer needed. The caller may safely write - * to the frame if av_frame_is_writable() returns 1. - * When AVCodecContext.refcounted_frames is set to 0, the returned - * reference belongs to the decoder and is valid only until the - * next call to this function or until closing or flushing the - * decoder. The caller may not write to it. - * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is - * non-zero. Note that this field being set to zero - * does not mean that an error has occurred. For - * decoders with AV_CODEC_CAP_DELAY set, no given decode - * call is guaranteed to produce a frame. - * @param[in] avpkt The input AVPacket containing the input buffer. - * At least avpkt->data and avpkt->size should be set. Some - * decoders might also require additional fields to be set. - * @return A negative error code is returned if an error occurred during - * decoding, otherwise the number of bytes consumed from the input - * AVPacket is returned. - * -* @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). - */ -attribute_deprecated -int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, - int *got_frame_ptr, const AVPacket *avpkt); - -/** - * Decode the video frame of size avpkt->size from avpkt->data into picture. - * Some decoders may support multiple frames in a single AVPacket, such - * decoders would then just decode the first frame. - * - * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than - * the actual read bytes because some optimized bitstream readers read 32 or 64 - * bits at once and could read over the end. - * - * @warning The end of the input buffer buf should be set to 0 to ensure that - * no overreading happens for damaged MPEG streams. - * - * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay - * between input and output, these need to be fed with avpkt->data=NULL, - * avpkt->size=0 at the end to return the remaining frames. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx the codec context - * @param[out] picture The AVFrame in which the decoded video frame will be stored. - * Use av_frame_alloc() to get an AVFrame. The codec will - * allocate memory for the actual bitmap by calling the - * AVCodecContext.get_buffer2() callback. - * When AVCodecContext.refcounted_frames is set to 1, the frame is - * reference counted and the returned reference belongs to the - * caller. The caller must release the frame using av_frame_unref() - * when the frame is no longer needed. The caller may safely write - * to the frame if av_frame_is_writable() returns 1. - * When AVCodecContext.refcounted_frames is set to 0, the returned - * reference belongs to the decoder and is valid only until the - * next call to this function or until closing or flushing the - * decoder. The caller may not write to it. - * - * @param[in] avpkt The input AVPacket containing the input buffer. - * You can create such packet with av_init_packet() and by then setting - * data and size, some decoders might in addition need other fields like - * flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least - * fields possible. - * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. - * @return On error a negative value is returned, otherwise the number of bytes - * used or zero if no frame could be decompressed. - * - * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). - */ -attribute_deprecated -int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, - int *got_picture_ptr, - const AVPacket *avpkt); -#endif - -/** - * Decode a subtitle message. - * Return a negative value on error, otherwise return the number of bytes used. - * If no subtitle could be decompressed, got_sub_ptr is zero. - * Otherwise, the subtitle is stored in *sub. - * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for - * simplicity, because the performance difference is expected to be negligible - * and reusing a get_buffer written for video codecs would probably perform badly - * due to a potentially very different allocation pattern. - * - * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input - * and output. This means that for some packets they will not immediately - * produce decoded output and need to be flushed at the end of decoding to get - * all the decoded data. Flushing is done by calling this function with packets - * with avpkt->data set to NULL and avpkt->size set to 0 until it stops - * returning subtitles. It is safe to flush even those decoders that are not - * marked with AV_CODEC_CAP_DELAY, then no subtitles will be returned. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx the codec context - * @param[out] sub The preallocated AVSubtitle in which the decoded subtitle will be stored, - * must be freed with avsubtitle_free if *got_sub_ptr is set. - * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. - * @param[in] avpkt The input AVPacket containing the input buffer. - */ -int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, - int *got_sub_ptr, - AVPacket *avpkt); - -/** - * Supply raw packet data as input to a decoder. - * - * Internally, this call will copy relevant AVCodecContext fields, which can - * influence decoding per-packet, and apply them when the packet is actually - * decoded. (For example AVCodecContext.skip_frame, which might direct the - * decoder to drop the frame contained by the packet sent with this function.) - * - * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE - * larger than the actual read bytes because some optimized bitstream - * readers read 32 or 64 bits at once and could read over the end. - * - * @warning Do not mix this API with the legacy API (like avcodec_decode_video2()) - * on the same AVCodecContext. It will return unexpected results now - * or in future libavcodec versions. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx codec context - * @param[in] avpkt The input AVPacket. Usually, this will be a single video - * frame, or several complete audio frames. - * Ownership of the packet remains with the caller, and the - * decoder will not write to the packet. The decoder may create - * a reference to the packet data (or copy it if the packet is - * not reference-counted). - * Unlike with older APIs, the packet is always fully consumed, - * and if it contains multiple frames (e.g. some audio codecs), - * will require you to call avcodec_receive_frame() multiple - * times afterwards before you can send a new packet. - * It can be NULL (or an AVPacket with data set to NULL and - * size set to 0); in this case, it is considered a flush - * packet, which signals the end of the stream. Sending the - * first flush packet will return success. Subsequent ones are - * unnecessary and will return AVERROR_EOF. If the decoder - * still has frames buffered, it will return them after sending - * a flush packet. - * - * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): input is not accepted in the current state - user - * must read output with avcodec_receive_frame() (once - * all output is read, the packet should be resent, and - * the call will not fail with EAGAIN). - * AVERROR_EOF: the decoder has been flushed, and no new packets can - * be sent to it (also returned if more than 1 flush - * packet is sent) - * AVERROR(EINVAL): codec not opened, it is an encoder, or requires flush - * AVERROR(ENOMEM): failed to add packet to internal queue, or similar - * other errors: legitimate decoding errors - */ -int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); - -/** - * Return decoded output data from a decoder. - * - * @param avctx codec context - * @param frame This will be set to a reference-counted video or audio - * frame (depending on the decoder type) allocated by the - * decoder. Note that the function will always call - * av_frame_unref(frame) before doing anything else. - * - * @return - * 0: success, a frame was returned - * AVERROR(EAGAIN): output is not available in this state - user must try - * to send new input - * AVERROR_EOF: the decoder has been fully flushed, and there will be - * no more output frames - * AVERROR(EINVAL): codec not opened, or it is an encoder - * AVERROR_INPUT_CHANGED: current decoded frame has changed parameters - * with respect to first decoded frame. Applicable - * when flag AV_CODEC_FLAG_DROPCHANGED is set. - * other negative values: legitimate decoding errors - */ -int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); - -/** - * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet() - * to retrieve buffered output packets. - * - * @param avctx codec context - * @param[in] frame AVFrame containing the raw audio or video frame to be encoded. - * Ownership of the frame remains with the caller, and the - * encoder will not write to the frame. The encoder may create - * a reference to the frame data (or copy it if the frame is - * not reference-counted). - * It can be NULL, in which case it is considered a flush - * packet. This signals the end of the stream. If the encoder - * still has packets buffered, it will return them after this - * call. Once flushing mode has been entered, additional flush - * packets are ignored, and sending frames will return - * AVERROR_EOF. - * - * For audio: - * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame - * can have any number of samples. - * If it is not set, frame->nb_samples must be equal to - * avctx->frame_size for all frames except the last. - * The final frame may be smaller than avctx->frame_size. - * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): input is not accepted in the current state - user - * must read output with avcodec_receive_packet() (once - * all output is read, the packet should be resent, and - * the call will not fail with EAGAIN). - * AVERROR_EOF: the encoder has been flushed, and no new frames can - * be sent to it - * AVERROR(EINVAL): codec not opened, refcounted_frames not set, it is a - * decoder, or requires flush - * AVERROR(ENOMEM): failed to add packet to internal queue, or similar - * other errors: legitimate encoding errors - */ -int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame); - -/** - * Read encoded data from the encoder. - * - * @param avctx codec context - * @param avpkt This will be set to a reference-counted packet allocated by the - * encoder. Note that the function will always call - * av_packet_unref(avpkt) before doing anything else. - * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): output is not available in the current state - user - * must try to send input - * AVERROR_EOF: the encoder has been fully flushed, and there will be - * no more output packets - * AVERROR(EINVAL): codec not opened, or it is a decoder - * other errors: legitimate encoding errors - */ -int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt); - -/** - * Create and return a AVHWFramesContext with values adequate for hardware - * decoding. This is meant to get called from the get_format callback, and is - * a helper for preparing a AVHWFramesContext for AVCodecContext.hw_frames_ctx. - * This API is for decoding with certain hardware acceleration modes/APIs only. - * - * The returned AVHWFramesContext is not initialized. The caller must do this - * with av_hwframe_ctx_init(). - * - * Calling this function is not a requirement, but makes it simpler to avoid - * codec or hardware API specific details when manually allocating frames. - * - * Alternatively to this, an API user can set AVCodecContext.hw_device_ctx, - * which sets up AVCodecContext.hw_frames_ctx fully automatically, and makes - * it unnecessary to call this function or having to care about - * AVHWFramesContext initialization at all. - * - * There are a number of requirements for calling this function: - * - * - It must be called from get_format with the same avctx parameter that was - * passed to get_format. Calling it outside of get_format is not allowed, and - * can trigger undefined behavior. - * - The function is not always supported (see description of return values). - * Even if this function returns successfully, hwaccel initialization could - * fail later. (The degree to which implementations check whether the stream - * is actually supported varies. Some do this check only after the user's - * get_format callback returns.) - * - The hw_pix_fmt must be one of the choices suggested by get_format. If the - * user decides to use a AVHWFramesContext prepared with this API function, - * the user must return the same hw_pix_fmt from get_format. - * - The device_ref passed to this function must support the given hw_pix_fmt. - * - After calling this API function, it is the user's responsibility to - * initialize the AVHWFramesContext (returned by the out_frames_ref parameter), - * and to set AVCodecContext.hw_frames_ctx to it. If done, this must be done - * before returning from get_format (this is implied by the normal - * AVCodecContext.hw_frames_ctx API rules). - * - The AVHWFramesContext parameters may change every time time get_format is - * called. Also, AVCodecContext.hw_frames_ctx is reset before get_format. So - * you are inherently required to go through this process again on every - * get_format call. - * - It is perfectly possible to call this function without actually using - * the resulting AVHWFramesContext. One use-case might be trying to reuse a - * previously initialized AVHWFramesContext, and calling this API function - * only to test whether the required frame parameters have changed. - * - Fields that use dynamically allocated values of any kind must not be set - * by the user unless setting them is explicitly allowed by the documentation. - * If the user sets AVHWFramesContext.free and AVHWFramesContext.user_opaque, - * the new free callback must call the potentially set previous free callback. - * This API call may set any dynamically allocated fields, including the free - * callback. - * - * The function will set at least the following fields on AVHWFramesContext - * (potentially more, depending on hwaccel API): - * - * - All fields set by av_hwframe_ctx_alloc(). - * - Set the format field to hw_pix_fmt. - * - Set the sw_format field to the most suited and most versatile format. (An - * implication is that this will prefer generic formats over opaque formats - * with arbitrary restrictions, if possible.) - * - Set the width/height fields to the coded frame size, rounded up to the - * API-specific minimum alignment. - * - Only _if_ the hwaccel requires a pre-allocated pool: set the initial_pool_size - * field to the number of maximum reference surfaces possible with the codec, - * plus 1 surface for the user to work (meaning the user can safely reference - * at most 1 decoded surface at a time), plus additional buffering introduced - * by frame threading. If the hwaccel does not require pre-allocation, the - * field is left to 0, and the decoder will allocate new surfaces on demand - * during decoding. - * - Possibly AVHWFramesContext.hwctx fields, depending on the underlying - * hardware API. - * - * Essentially, out_frames_ref returns the same as av_hwframe_ctx_alloc(), but - * with basic frame parameters set. - * - * The function is stateless, and does not change the AVCodecContext or the - * device_ref AVHWDeviceContext. - * - * @param avctx The context which is currently calling get_format, and which - * implicitly contains all state needed for filling the returned - * AVHWFramesContext properly. - * @param device_ref A reference to the AVHWDeviceContext describing the device - * which will be used by the hardware decoder. - * @param hw_pix_fmt The hwaccel format you are going to return from get_format. - * @param out_frames_ref On success, set to a reference to an _uninitialized_ - * AVHWFramesContext, created from the given device_ref. - * Fields will be set to values required for decoding. - * Not changed if an error is returned. - * @return zero on success, a negative value on error. The following error codes - * have special semantics: - * AVERROR(ENOENT): the decoder does not support this functionality. Setup - * is always manual, or it is a decoder which does not - * support setting AVCodecContext.hw_frames_ctx at all, - * or it is a software format. - * AVERROR(EINVAL): it is known that hardware decoding is not supported for - * this configuration, or the device_ref is not supported - * for the hwaccel referenced by hw_pix_fmt. - */ -int avcodec_get_hw_frames_parameters(AVCodecContext *avctx, - AVBufferRef *device_ref, - enum AVPixelFormat hw_pix_fmt, - AVBufferRef **out_frames_ref); - - - -/** - * @defgroup lavc_parsing Frame parsing - * @{ - */ - -enum AVPictureStructure { - AV_PICTURE_STRUCTURE_UNKNOWN, //< unknown - AV_PICTURE_STRUCTURE_TOP_FIELD, //< coded as top field - AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field - AV_PICTURE_STRUCTURE_FRAME, //< coded as frame -}; - -typedef struct AVCodecParserContext { - void *priv_data; - struct AVCodecParser *parser; - int64_t frame_offset; /* offset of the current frame */ - int64_t cur_offset; /* current offset - (incremented by each av_parser_parse()) */ - int64_t next_frame_offset; /* offset of the next frame */ - /* video info */ - int pict_type; /* XXX: Put it back in AVCodecContext. */ - /** - * This field is used for proper frame duration computation in lavf. - * It signals, how much longer the frame duration of the current frame - * is compared to normal frame duration. - * - * frame_duration = (1 + repeat_pict) * time_base - * - * It is used by codecs like H.264 to display telecined material. - */ - int repeat_pict; /* XXX: Put it back in AVCodecContext. */ - int64_t pts; /* pts of the current frame */ - int64_t dts; /* dts of the current frame */ - - /* private data */ - int64_t last_pts; - int64_t last_dts; - int fetch_timestamp; - -#define AV_PARSER_PTS_NB 4 - int cur_frame_start_index; - int64_t cur_frame_offset[AV_PARSER_PTS_NB]; - int64_t cur_frame_pts[AV_PARSER_PTS_NB]; - int64_t cur_frame_dts[AV_PARSER_PTS_NB]; - - int flags; -#define PARSER_FLAG_COMPLETE_FRAMES 0x0001 -#define PARSER_FLAG_ONCE 0x0002 -/// Set if the parser has a valid file offset -#define PARSER_FLAG_FETCHED_OFFSET 0x0004 -#define PARSER_FLAG_USE_CODEC_TS 0x1000 - - int64_t offset; ///< byte offset from starting packet start - int64_t cur_frame_end[AV_PARSER_PTS_NB]; - - /** - * Set by parser to 1 for key frames and 0 for non-key frames. - * It is initialized to -1, so if the parser doesn't set this flag, - * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames - * will be used. - */ - int key_frame; - -#if FF_API_CONVERGENCE_DURATION - /** - * @deprecated unused - */ - attribute_deprecated - int64_t convergence_duration; -#endif - - // Timestamp generation support: - /** - * Synchronization point for start of timestamp generation. - * - * Set to >0 for sync point, 0 for no sync point and <0 for undefined - * (default). - * - * For example, this corresponds to presence of H.264 buffering period - * SEI message. - */ - int dts_sync_point; - - /** - * Offset of the current timestamp against last timestamp sync point in - * units of AVCodecContext.time_base. - * - * Set to INT_MIN when dts_sync_point unused. Otherwise, it must - * contain a valid timestamp offset. - * - * Note that the timestamp of sync point has usually a nonzero - * dts_ref_dts_delta, which refers to the previous sync point. Offset of - * the next frame after timestamp sync point will be usually 1. - * - * For example, this corresponds to H.264 cpb_removal_delay. - */ - int dts_ref_dts_delta; - - /** - * Presentation delay of current frame in units of AVCodecContext.time_base. - * - * Set to INT_MIN when dts_sync_point unused. Otherwise, it must - * contain valid non-negative timestamp delta (presentation time of a frame - * must not lie in the past). - * - * This delay represents the difference between decoding and presentation - * time of the frame. - * - * For example, this corresponds to H.264 dpb_output_delay. - */ - int pts_dts_delta; - - /** - * Position of the packet in file. - * - * Analogous to cur_frame_pts/dts - */ - int64_t cur_frame_pos[AV_PARSER_PTS_NB]; - - /** - * Byte position of currently parsed frame in stream. - */ - int64_t pos; - - /** - * Previous frame byte position. - */ - int64_t last_pos; - - /** - * Duration of the current frame. - * For audio, this is in units of 1 / AVCodecContext.sample_rate. - * For all other types, this is in units of AVCodecContext.time_base. - */ - int duration; - - enum AVFieldOrder field_order; - - /** - * Indicate whether a picture is coded as a frame, top field or bottom field. - * - * For example, H.264 field_pic_flag equal to 0 corresponds to - * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag - * equal to 1 and bottom_field_flag equal to 0 corresponds to - * AV_PICTURE_STRUCTURE_TOP_FIELD. - */ - enum AVPictureStructure picture_structure; - - /** - * Picture number incremented in presentation or output order. - * This field may be reinitialized at the first picture of a new sequence. - * - * For example, this corresponds to H.264 PicOrderCnt. - */ - int output_picture_number; - - /** - * Dimensions of the decoded video intended for presentation. - */ - int width; - int height; - - /** - * Dimensions of the coded video. - */ - int coded_width; - int coded_height; - - /** - * The format of the coded data, corresponds to enum AVPixelFormat for video - * and for enum AVSampleFormat for audio. - * - * Note that a decoder can have considerable freedom in how exactly it - * decodes the data, so the format reported here might be different from the - * one returned by a decoder. - */ - int format; -} AVCodecParserContext; - -typedef struct AVCodecParser { - int codec_ids[5]; /* several codec IDs are permitted */ - int priv_data_size; - int (*parser_init)(AVCodecParserContext *s); - /* This callback never returns an error, a negative value means that - * the frame start was in a previous packet. */ - int (*parser_parse)(AVCodecParserContext *s, - AVCodecContext *avctx, - const uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size); - void (*parser_close)(AVCodecParserContext *s); - int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size); -#if FF_API_NEXT - attribute_deprecated - struct AVCodecParser *next; -#endif -} AVCodecParser; - -/** - * Iterate over all registered codec parsers. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered codec parser or NULL when the iteration is - * finished - */ -const AVCodecParser *av_parser_iterate(void **opaque); - -#if FF_API_NEXT -attribute_deprecated -AVCodecParser *av_parser_next(const AVCodecParser *c); - -attribute_deprecated -void av_register_codec_parser(AVCodecParser *parser); -#endif -AVCodecParserContext *av_parser_init(int codec_id); - -/** - * Parse a packet. - * - * @param s parser context. - * @param avctx codec context. - * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. - * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. - * @param buf input buffer. - * @param buf_size buffer size in bytes without the padding. I.e. the full buffer - size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE. - To signal EOF, this should be 0 (so that the last frame - can be output). - * @param pts input presentation timestamp. - * @param dts input decoding timestamp. - * @param pos input byte position in stream. - * @return the number of bytes of the input bitstream used. - * - * Example: - * @code - * while(in_len){ - * len = av_parser_parse2(myparser, AVCodecContext, &data, &size, - * in_data, in_len, - * pts, dts, pos); - * in_data += len; - * in_len -= len; - * - * if(size) - * decode_frame(data, size); - * } - * @endcode - */ -int av_parser_parse2(AVCodecParserContext *s, - AVCodecContext *avctx, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, - int64_t pts, int64_t dts, - int64_t pos); - -#if FF_API_PARSER_CHANGE -/** - * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed - * @deprecated Use dump_extradata, remove_extra or extract_extradata - * bitstream filters instead. - */ -attribute_deprecated -int av_parser_change(AVCodecParserContext *s, - AVCodecContext *avctx, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, int keyframe); -#endif -void av_parser_close(AVCodecParserContext *s); - -/** - * @} - * @} - */ - -/** - * @addtogroup lavc_encoding - * @{ - */ - -#if FF_API_OLD_ENCDEC -/** - * Encode a frame of audio. - * - * Takes input samples from frame and writes the next output packet, if - * available, to avpkt. The output packet does not necessarily contain data for - * the most recent frame, as encoders can delay, split, and combine input frames - * internally as needed. - * - * @param avctx codec context - * @param avpkt output AVPacket. - * The user can supply an output buffer by setting - * avpkt->data and avpkt->size prior to calling the - * function, but if the size of the user-provided data is not - * large enough, encoding will fail. If avpkt->data and - * avpkt->size are set, avpkt->destruct must also be set. All - * other AVPacket fields will be reset by the encoder using - * av_init_packet(). If avpkt->data is NULL, the encoder will - * allocate it. The encoder will set avpkt->size to the size - * of the output packet. - * - * If this function fails or produces no output, avpkt will be - * freed using av_packet_unref(). - * @param[in] frame AVFrame containing the raw audio data to be encoded. - * May be NULL when flushing an encoder that has the - * AV_CODEC_CAP_DELAY capability set. - * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame - * can have any number of samples. - * If it is not set, frame->nb_samples must be equal to - * avctx->frame_size for all frames except the last. - * The final frame may be smaller than avctx->frame_size. - * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the - * output packet is non-empty, and to 0 if it is - * empty. If the function returns an error, the - * packet can be assumed to be invalid, and the - * value of got_packet_ptr is undefined and should - * not be used. - * @return 0 on success, negative error code on failure - * - * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. - * If allowed and required, set AVCodecContext.get_encode_buffer to - * a custom function to pass user supplied output buffers. - */ -attribute_deprecated -int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, - const AVFrame *frame, int *got_packet_ptr); - -/** - * Encode a frame of video. - * - * Takes input raw video data from frame and writes the next output packet, if - * available, to avpkt. The output packet does not necessarily contain data for - * the most recent frame, as encoders can delay and reorder input frames - * internally as needed. - * - * @param avctx codec context - * @param avpkt output AVPacket. - * The user can supply an output buffer by setting - * avpkt->data and avpkt->size prior to calling the - * function, but if the size of the user-provided data is not - * large enough, encoding will fail. All other AVPacket fields - * will be reset by the encoder using av_init_packet(). If - * avpkt->data is NULL, the encoder will allocate it. - * The encoder will set avpkt->size to the size of the - * output packet. The returned data (if any) belongs to the - * caller, he is responsible for freeing it. - * - * If this function fails or produces no output, avpkt will be - * freed using av_packet_unref(). - * @param[in] frame AVFrame containing the raw video data to be encoded. - * May be NULL when flushing an encoder that has the - * AV_CODEC_CAP_DELAY capability set. - * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the - * output packet is non-empty, and to 0 if it is - * empty. If the function returns an error, the - * packet can be assumed to be invalid, and the - * value of got_packet_ptr is undefined and should - * not be used. - * @return 0 on success, negative error code on failure - * - * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. - * If allowed and required, set AVCodecContext.get_encode_buffer to - * a custom function to pass user supplied output buffers. - */ -attribute_deprecated -int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, - const AVFrame *frame, int *got_packet_ptr); -#endif - -int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, - const AVSubtitle *sub); - - -/** - * @} - */ - -#if FF_API_AVPICTURE -/** - * @addtogroup lavc_picture - * @{ - */ - -/** - * @deprecated unused - */ -attribute_deprecated -int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated unused - */ -attribute_deprecated -void avpicture_free(AVPicture *picture); - -/** - * @deprecated use av_image_fill_arrays() instead. - */ -attribute_deprecated -int avpicture_fill(AVPicture *picture, const uint8_t *ptr, - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated use av_image_copy_to_buffer() instead. - */ -attribute_deprecated -int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt, - int width, int height, - unsigned char *dest, int dest_size); - -/** - * @deprecated use av_image_get_buffer_size() instead. - */ -attribute_deprecated -int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated av_image_copy() instead. - */ -attribute_deprecated -void av_picture_copy(AVPicture *dst, const AVPicture *src, - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated unused - */ -attribute_deprecated -int av_picture_crop(AVPicture *dst, const AVPicture *src, - enum AVPixelFormat pix_fmt, int top_band, int left_band); - -/** - * @deprecated unused - */ -attribute_deprecated -int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt, - int padtop, int padbottom, int padleft, int padright, int *color); - -/** - * @} - */ -#endif - -/** - * @defgroup lavc_misc Utility functions - * @ingroup libavc - * - * Miscellaneous utility functions related to both encoding and decoding - * (or neither). - * @{ - */ - -/** - * @defgroup lavc_misc_pixfmt Pixel formats - * - * Functions for working with pixel formats. - * @{ - */ - -#if FF_API_GETCHROMA -/** - * @deprecated Use av_pix_fmt_get_chroma_sub_sample - */ - -attribute_deprecated -void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift); -#endif - -/** - * Return a value representing the fourCC code associated to the - * pixel format pix_fmt, or 0 if no associated fourCC code can be - * found. - */ -unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt); - -/** - * Find the best pixel format to convert to given a certain source pixel - * format. When converting from one pixel format to another, information loss - * may occur. For example, when converting from RGB24 to GRAY, the color - * information will be lost. Similarly, other losses occur when converting from - * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of - * the given pixel formats should be used to suffer the least amount of loss. - * The pixel formats from which it chooses one, are determined by the - * pix_fmt_list parameter. - * - * - * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. - * @return The best pixel format to convert to or -1 if none was found. - */ -enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list, - enum AVPixelFormat src_pix_fmt, - int has_alpha, int *loss_ptr); - -#if FF_API_AVCODEC_PIX_FMT -/** - * @deprecated see av_get_pix_fmt_loss() - */ -attribute_deprecated -int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, - int has_alpha); -/** - * @deprecated see av_find_best_pix_fmt_of_2() - */ -attribute_deprecated -enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); - -attribute_deprecated -enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); -#endif - -enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - -/** - * @} - */ - -#if FF_API_TAG_STRING -/** - * Put a string representing the codec tag codec_tag in buf. - * - * @param buf buffer to place codec tag in - * @param buf_size size in bytes of buf - * @param codec_tag codec tag to assign - * @return the length of the string that would have been generated if - * enough space had been available, excluding the trailing null - * - * @deprecated see av_fourcc_make_string() and av_fourcc2str(). - */ -attribute_deprecated -size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag); -#endif - -void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); - -/** - * Return a name for the specified profile, if available. - * - * @param codec the codec that is searched for the given profile - * @param profile the profile value for which a name is requested - * @return A name for the profile if found, NULL otherwise. - */ -const char *av_get_profile_name(const AVCodec *codec, int profile); - -/** - * Return a name for the specified profile, if available. - * - * @param codec_id the ID of the codec to which the requested profile belongs - * @param profile the profile value for which a name is requested - * @return A name for the profile if found, NULL otherwise. - * - * @note unlike av_get_profile_name(), which searches a list of profiles - * supported by a specific decoder or encoder implementation, this - * function searches the list of profiles from the AVCodecDescriptor - */ -const char *avcodec_profile_name(enum AVCodecID codec_id, int profile); - -int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); -int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); -//FIXME func typedef - -/** - * Fill AVFrame audio data and linesize pointers. - * - * The buffer buf must be a preallocated buffer with a size big enough - * to contain the specified samples amount. The filled AVFrame data - * pointers will point to this buffer. - * - * AVFrame extended_data channel pointers are allocated if necessary for - * planar audio. - * - * @param frame the AVFrame - * frame->nb_samples must be set prior to calling the - * function. This function fills in frame->data, - * frame->extended_data, frame->linesize[0]. - * @param nb_channels channel count - * @param sample_fmt sample format - * @param buf buffer to use for frame data - * @param buf_size size of buffer - * @param align plane size sample alignment (0 = default) - * @return >=0 on success, negative error code on failure - * @todo return the size in bytes required to store the samples in - * case of success, at the next libavutil bump - */ -int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, - enum AVSampleFormat sample_fmt, const uint8_t *buf, - int buf_size, int align); - -/** - * Reset the internal codec state / flush internal buffers. Should be called - * e.g. when seeking or when switching to a different stream. - * - * @note for decoders, when refcounted frames are not used - * (i.e. avctx->refcounted_frames is 0), this invalidates the frames previously - * returned from the decoder. When refcounted frames are used, the decoder just - * releases any references it might keep internally, but the caller's reference - * remains valid. - * - * @note for encoders, this function will only do something if the encoder - * declares support for AV_CODEC_CAP_ENCODER_FLUSH. When called, the encoder - * will drain any remaining packets, and can then be re-used for a different - * stream (as opposed to sending a null frame which will leave the encoder - * in a permanent EOF state after draining). This can be desirable if the - * cost of tearing down and replacing the encoder instance is high. - */ -void avcodec_flush_buffers(AVCodecContext *avctx); - -/** - * Return codec bits per sample. - * - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ -int av_get_bits_per_sample(enum AVCodecID codec_id); - -/** - * Return the PCM codec associated with a sample format. - * @param be endianness, 0 for little, 1 for big, - * -1 (or anything else) for native - * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE - */ -enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be); - -/** - * Return codec bits per sample. - * Only return non-zero if the bits per sample is exactly correct, not an - * approximation. - * - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ -int av_get_exact_bits_per_sample(enum AVCodecID codec_id); - -/** - * Return audio frame duration. - * - * @param avctx codec context - * @param frame_bytes size of the frame, or 0 if unknown - * @return frame duration, in samples, if known. 0 if not able to - * determine. - */ -int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); - -/** - * This function is the same as av_get_audio_frame_duration(), except it works - * with AVCodecParameters instead of an AVCodecContext. - */ -int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes); - -#if FF_API_OLD_BSF -typedef struct AVBitStreamFilterContext { - void *priv_data; - const struct AVBitStreamFilter *filter; - AVCodecParserContext *parser; - struct AVBitStreamFilterContext *next; - /** - * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter(). - * Not for access by library users. - */ - char *args; -} AVBitStreamFilterContext; - -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use the new bitstream filtering API (using AVBSFContext). - */ -attribute_deprecated -void av_register_bitstream_filter(AVBitStreamFilter *bsf); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_get_by_name(), av_bsf_alloc(), and av_bsf_init() - * from the new bitstream filtering API (using AVBSFContext). - */ -attribute_deprecated -AVBitStreamFilterContext *av_bitstream_filter_init(const char *name); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_send_packet() and av_bsf_receive_packet() from the - * new bitstream filtering API (using AVBSFContext). - */ -attribute_deprecated -int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, - AVCodecContext *avctx, const char *args, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, int keyframe); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_free() from the new bitstream filtering API (using - * AVBSFContext). - */ -attribute_deprecated -void av_bitstream_filter_close(AVBitStreamFilterContext *bsf); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_iterate() from the new bitstream filtering API (using - * AVBSFContext). - */ -attribute_deprecated -const AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f); -#endif - -#if FF_API_NEXT -attribute_deprecated -const AVBitStreamFilter *av_bsf_next(void **opaque); -#endif - -/* memory */ - -/** - * Same behaviour av_fast_malloc but the buffer has additional - * AV_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0. - * - * In addition the whole buffer will initially and after resizes - * be 0-initialized so that no uninitialized data will ever appear. - */ -void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Same behaviour av_fast_padded_malloc except that buffer will always - * be 0-initialized after call. - */ -void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); - -/** - * Encode extradata length to a buffer. Used by xiph codecs. - * - * @param s buffer to write to; must be at least (v/255+1) bytes long - * @param v size of extradata in bytes - * @return number of bytes written to the buffer. - */ -unsigned int av_xiphlacing(unsigned char *s, unsigned int v); - -#if FF_API_USER_VISIBLE_AVHWACCEL -/** - * Register the hardware accelerator hwaccel. - * - * @deprecated This function doesn't do anything. - */ -attribute_deprecated -void av_register_hwaccel(AVHWAccel *hwaccel); - -/** - * If hwaccel is NULL, returns the first registered hardware accelerator, - * if hwaccel is non-NULL, returns the next registered hardware accelerator - * after hwaccel, or NULL if hwaccel is the last one. - * - * @deprecated AVHWaccel structures contain no user-serviceable parts, so - * this function should not be used. - */ -attribute_deprecated -AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel); -#endif - -#if FF_API_LOCKMGR -/** - * Lock operation used by lockmgr - * - * @deprecated Deprecated together with av_lockmgr_register(). - */ -enum AVLockOp { - AV_LOCK_CREATE, ///< Create a mutex - AV_LOCK_OBTAIN, ///< Lock the mutex - AV_LOCK_RELEASE, ///< Unlock the mutex - AV_LOCK_DESTROY, ///< Free mutex resources -}; - -/** - * Register a user provided lock manager supporting the operations - * specified by AVLockOp. The "mutex" argument to the function points - * to a (void *) where the lockmgr should store/get a pointer to a user - * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the - * value left by the last call for all other ops. If the lock manager is - * unable to perform the op then it should leave the mutex in the same - * state as when it was called and return a non-zero value. However, - * when called with AV_LOCK_DESTROY the mutex will always be assumed to - * have been successfully destroyed. If av_lockmgr_register succeeds - * it will return a non-negative value, if it fails it will return a - * negative value and destroy all mutex and unregister all callbacks. - * av_lockmgr_register is not thread-safe, it must be called from a - * single thread before any calls which make use of locking are used. - * - * @param cb User defined callback. av_lockmgr_register invokes calls - * to this callback and the previously registered callback. - * The callback will be used to create more than one mutex - * each of which must be backed by its own underlying locking - * mechanism (i.e. do not use a single static object to - * implement your lock manager). If cb is set to NULL the - * lockmgr will be unregistered. - * - * @deprecated This function does nothing, and always returns 0. Be sure to - * build with thread support to get basic thread safety. - */ -attribute_deprecated -int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)); -#endif - -/** - * @return a positive value if s is open (i.e. avcodec_open2() was called on it - * with no corresponding avcodec_close()), 0 otherwise. - */ -int avcodec_is_open(AVCodecContext *s); - -/** - * Allocate a CPB properties structure and initialize its fields to default - * values. - * - * @param size if non-NULL, the size of the allocated struct will be written - * here. This is useful for embedding it in side data. - * - * @return the newly allocated struct or NULL on failure - */ -AVCPBProperties *av_cpb_properties_alloc(size_t *size); - -/** - * @} - */ - -#endif /* AVCODEC_AVCODEC_H */ diff --git a/prebuilts/x86/include/libavcodec/avdct.h b/prebuilts/x86/include/libavcodec/avdct.h deleted file mode 100644 index 6411fab..0000000 --- a/prebuilts/x86/include/libavcodec/avdct.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVDCT_H -#define AVCODEC_AVDCT_H - -#include "libavutil/opt.h" - -/** - * AVDCT context. - * @note function pointers can be NULL if the specific features have been - * disabled at build time. - */ -typedef struct AVDCT { - const AVClass *av_class; - - void (*idct)(int16_t *block /* align 16 */); - - /** - * IDCT input permutation. - * Several optimized IDCTs need a permutated input (relative to the - * normal order of the reference IDCT). - * This permutation must be performed before the idct_put/add. - * Note, normally this can be merged with the zigzag/alternate scan
- * An example to avoid confusion: - * - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...) - * - (x -> reference DCT -> reference IDCT -> x) - * - (x -> reference DCT -> simple_mmx_perm = idct_permutation - * -> simple_idct_mmx -> x) - * - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant - * -> simple_idct_mmx -> ...) - */ - uint8_t idct_permutation[64]; - - void (*fdct)(int16_t *block /* align 16 */); - - - /** - * DCT algorithm. - * must use AVOptions to set this field. - */ - int dct_algo; - - /** - * IDCT algorithm. - * must use AVOptions to set this field. - */ - int idct_algo; - - void (*get_pixels)(int16_t *block /* align 16 */, - const uint8_t *pixels /* align 8 */, - ptrdiff_t line_size); - - int bits_per_sample; - - void (*get_pixels_unaligned)(int16_t *block /* align 16 */, - const uint8_t *pixels, - ptrdiff_t line_size); -} AVDCT; - -/** - * Allocates a AVDCT context. - * This needs to be initialized with avcodec_dct_init() after optionally - * configuring it with AVOptions. - * - * To free it use av_free() - */ -AVDCT *avcodec_dct_alloc(void); -int avcodec_dct_init(AVDCT *); - -const AVClass *avcodec_dct_get_class(void); - -#endif /* AVCODEC_AVDCT_H */ diff --git a/prebuilts/x86/include/libavcodec/avfft.h b/prebuilts/x86/include/libavcodec/avfft.h deleted file mode 100644 index 0c0f9b8..0000000 --- a/prebuilts/x86/include/libavcodec/avfft.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVFFT_H -#define AVCODEC_AVFFT_H - -/** - * @file - * @ingroup lavc_fft - * FFT functions - */ - -/** - * @defgroup lavc_fft FFT functions - * @ingroup lavc_misc - * - * @{ - */ - -typedef float FFTSample; - -typedef struct FFTComplex { - FFTSample re, im; -} FFTComplex; - -typedef struct FFTContext FFTContext; - -/** - * Set up a complex FFT. - * @param nbits log2 of the length of the input array - * @param inverse if 0 perform the forward transform, if 1 perform the inverse - */ -FFTContext *av_fft_init(int nbits, int inverse); - -/** - * Do the permutation needed BEFORE calling ff_fft_calc(). - */ -void av_fft_permute(FFTContext *s, FFTComplex *z); - -/** - * Do a complex FFT with the parameters defined in av_fft_init(). The - * input data must be permuted before. No 1.0/sqrt(n) normalization is done. - */ -void av_fft_calc(FFTContext *s, FFTComplex *z); - -void av_fft_end(FFTContext *s); - -FFTContext *av_mdct_init(int nbits, int inverse, double scale); -void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_mdct_end(FFTContext *s); - -/* Real Discrete Fourier Transform */ - -enum RDFTransformType { - DFT_R2C, - IDFT_C2R, - IDFT_R2C, - DFT_C2R, -}; - -typedef struct RDFTContext RDFTContext; - -/** - * Set up a real FFT. - * @param nbits log2 of the length of the input array - * @param trans the type of transform - */ -RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans); -void av_rdft_calc(RDFTContext *s, FFTSample *data); -void av_rdft_end(RDFTContext *s); - -/* Discrete Cosine Transform */ - -typedef struct DCTContext DCTContext; - -enum DCTTransformType { - DCT_II = 0, - DCT_III, - DCT_I, - DST_I, -}; - -/** - * Set up DCT. - * - * @param nbits size of the input array: - * (1 << nbits) for DCT-II, DCT-III and DST-I - * (1 << nbits) + 1 for DCT-I - * @param type the type of transform - * - * @note the first element of the input of DST-I is ignored - */ -DCTContext *av_dct_init(int nbits, enum DCTTransformType type); -void av_dct_calc(DCTContext *s, FFTSample *data); -void av_dct_end (DCTContext *s); - -/** - * @} - */ - -#endif /* AVCODEC_AVFFT_H */ diff --git a/prebuilts/x86/include/libavcodec/bsf.h b/prebuilts/x86/include/libavcodec/bsf.h deleted file mode 100644 index 3b5faa8..0000000 --- a/prebuilts/x86/include/libavcodec/bsf.h +++ /dev/null @@ -1,325 +0,0 @@ -/* - * Bitstream filters public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_BSF_H -#define AVCODEC_BSF_H - -#include "libavutil/dict.h" -#include "libavutil/log.h" -#include "libavutil/rational.h" - -#include "codec_id.h" -#include "codec_par.h" -#include "packet.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -typedef struct AVBSFInternal AVBSFInternal; - -/** - * The bitstream filter state. - * - * This struct must be allocated with av_bsf_alloc() and freed with - * av_bsf_free(). - * - * The fields in the struct will only be changed (by the caller or by the - * filter) as described in their documentation, and are to be considered - * immutable otherwise. - */ -typedef struct AVBSFContext { - /** - * A class for logging and AVOptions - */ - const AVClass *av_class; - - /** - * The bitstream filter this context is an instance of. - */ - const struct AVBitStreamFilter *filter; - - /** - * Opaque libavcodec internal data. Must not be touched by the caller in any - * way. - */ - AVBSFInternal *internal; - - /** - * Opaque filter-specific private data. If filter->priv_class is non-NULL, - * this is an AVOptions-enabled struct. - */ - void *priv_data; - - /** - * Parameters of the input stream. This field is allocated in - * av_bsf_alloc(), it needs to be filled by the caller before - * av_bsf_init(). - */ - AVCodecParameters *par_in; - - /** - * Parameters of the output stream. This field is allocated in - * av_bsf_alloc(), it is set by the filter in av_bsf_init(). - */ - AVCodecParameters *par_out; - - /** - * The timebase used for the timestamps of the input packets. Set by the - * caller before av_bsf_init(). - */ - AVRational time_base_in; - - /** - * The timebase used for the timestamps of the output packets. Set by the - * filter in av_bsf_init(). - */ - AVRational time_base_out; -} AVBSFContext; - -typedef struct AVBitStreamFilter { - const char *name; - - /** - * A list of codec ids supported by the filter, terminated by - * AV_CODEC_ID_NONE. - * May be NULL, in that case the bitstream filter works with any codec id. - */ - const enum AVCodecID *codec_ids; - - /** - * A class for the private data, used to declare bitstream filter private - * AVOptions. This field is NULL for bitstream filters that do not declare - * any options. - * - * If this field is non-NULL, the first member of the filter private data - * must be a pointer to AVClass, which will be set by libavcodec generic - * code to this class. - */ - const AVClass *priv_class; - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavcodec and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - int priv_data_size; - int (*init)(AVBSFContext *ctx); - int (*filter)(AVBSFContext *ctx, AVPacket *pkt); - void (*close)(AVBSFContext *ctx); - void (*flush)(AVBSFContext *ctx); -} AVBitStreamFilter; - -/** - * @return a bitstream filter with the specified name or NULL if no such - * bitstream filter exists. - */ -const AVBitStreamFilter *av_bsf_get_by_name(const char *name); - -/** - * Iterate over all registered bitstream filters. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered bitstream filter or NULL when the iteration is - * finished - */ -const AVBitStreamFilter *av_bsf_iterate(void **opaque); - -/** - * Allocate a context for a given bitstream filter. The caller must fill in the - * context parameters as described in the documentation and then call - * av_bsf_init() before sending any data to the filter. - * - * @param filter the filter for which to allocate an instance. - * @param ctx a pointer into which the pointer to the newly-allocated context - * will be written. It must be freed with av_bsf_free() after the - * filtering is done. - * - * @return 0 on success, a negative AVERROR code on failure - */ -int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx); - -/** - * Prepare the filter for use, after all the parameters and options have been - * set. - */ -int av_bsf_init(AVBSFContext *ctx); - -/** - * Submit a packet for filtering. - * - * After sending each packet, the filter must be completely drained by calling - * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or - * AVERROR_EOF. - * - * @param pkt the packet to filter. The bitstream filter will take ownership of - * the packet and reset the contents of pkt. pkt is not touched if an error occurs. - * If pkt is empty (i.e. NULL, or pkt->data is NULL and pkt->side_data_elems zero), - * it signals the end of the stream (i.e. no more non-empty packets will be sent; - * sending more empty packets does nothing) and will cause the filter to output - * any packets it may have buffered internally. - * - * @return 0 on success. AVERROR(EAGAIN) if packets need to be retrieved from the - * filter (using av_bsf_receive_packet()) before new input can be consumed. Another - * negative AVERROR value if an error occurs. - */ -int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt); - -/** - * Retrieve a filtered packet. - * - * @param[out] pkt this struct will be filled with the contents of the filtered - * packet. It is owned by the caller and must be freed using - * av_packet_unref() when it is no longer needed. - * This parameter should be "clean" (i.e. freshly allocated - * with av_packet_alloc() or unreffed with av_packet_unref()) - * when this function is called. If this function returns - * successfully, the contents of pkt will be completely - * overwritten by the returned data. On failure, pkt is not - * touched. - * - * @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the - * filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there - * will be no further output from the filter. Another negative AVERROR value if - * an error occurs. - * - * @note one input packet may result in several output packets, so after sending - * a packet with av_bsf_send_packet(), this function needs to be called - * repeatedly until it stops returning 0. It is also possible for a filter to - * output fewer packets than were sent to it, so this function may return - * AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call. - */ -int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt); - -/** - * Reset the internal bitstream filter state. Should be called e.g. when seeking. - */ -void av_bsf_flush(AVBSFContext *ctx); - -/** - * Free a bitstream filter context and everything associated with it; write NULL - * into the supplied pointer. - */ -void av_bsf_free(AVBSFContext **ctx); - -/** - * Get the AVClass for AVBSFContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *av_bsf_get_class(void); - -/** - * Structure for chain/list of bitstream filters. - * Empty list can be allocated by av_bsf_list_alloc(). - */ -typedef struct AVBSFList AVBSFList; - -/** - * Allocate empty list of bitstream filters. - * The list must be later freed by av_bsf_list_free() - * or finalized by av_bsf_list_finalize(). - * - * @return Pointer to @ref AVBSFList on success, NULL in case of failure - */ -AVBSFList *av_bsf_list_alloc(void); - -/** - * Free list of bitstream filters. - * - * @param lst Pointer to pointer returned by av_bsf_list_alloc() - */ -void av_bsf_list_free(AVBSFList **lst); - -/** - * Append bitstream filter to the list of bitstream filters. - * - * @param lst List to append to - * @param bsf Filter context to be appended - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_append(AVBSFList *lst, AVBSFContext *bsf); - -/** - * Construct new bitstream filter context given it's name and options - * and append it to the list of bitstream filters. - * - * @param lst List to append to - * @param bsf_name Name of the bitstream filter - * @param options Options for the bitstream filter, can be set to NULL - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_append2(AVBSFList *lst, const char * bsf_name, AVDictionary **options); -/** - * Finalize list of bitstream filters. - * - * This function will transform @ref AVBSFList to single @ref AVBSFContext, - * so the whole chain of bitstream filters can be treated as single filter - * freshly allocated by av_bsf_alloc(). - * If the call is successful, @ref AVBSFList structure is freed and lst - * will be set to NULL. In case of failure, caller is responsible for - * freeing the structure by av_bsf_list_free() - * - * @param lst Filter list structure to be transformed - * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure - * representing the chain of bitstream filters - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf); - -/** - * Parse string describing list of bitstream filters and create single - * @ref AVBSFContext describing the whole chain of bitstream filters. - * Resulting @ref AVBSFContext can be treated as any other @ref AVBSFContext freshly - * allocated by av_bsf_alloc(). - * - * @param str String describing chain of bitstream filters in format - * `bsf1[=opt1=val1:opt2=val2][,bsf2]` - * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure - * representing the chain of bitstream filters - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf); - -/** - * Get null/pass-through bitstream filter. - * - * @param[out] bsf Pointer to be set to new instance of pass-through bitstream filter - * - * @return - */ -int av_bsf_get_null_filter(AVBSFContext **bsf); - -/** - * @} - */ - -#endif // AVCODEC_BSF_H diff --git a/prebuilts/x86/include/libavcodec/codec.h b/prebuilts/x86/include/libavcodec/codec.h deleted file mode 100644 index 50a22f6..0000000 --- a/prebuilts/x86/include/libavcodec/codec.h +++ /dev/null @@ -1,480 +0,0 @@ -/* - * AVCodec public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_H -#define AVCODEC_CODEC_H - -#include - -#include "libavutil/avutil.h" -#include "libavutil/hwcontext.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" -#include "libavutil/samplefmt.h" - -#include "libavcodec/codec_id.h" -#include "libavcodec/version.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * Decoder can use draw_horiz_band callback. - */ -#define AV_CODEC_CAP_DRAW_HORIZ_BAND (1 << 0) -/** - * Codec uses get_buffer() or get_encode_buffer() for allocating buffers and - * supports custom allocators. - * If not set, it might not use get_buffer() or get_encode_buffer() at all, or - * use operations that assume the buffer was allocated by - * avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer. - */ -#define AV_CODEC_CAP_DR1 (1 << 1) -#define AV_CODEC_CAP_TRUNCATED (1 << 3) -/** - * Encoder or decoder requires flushing with NULL input at the end in order to - * give the complete and correct output. - * - * NOTE: If this flag is not set, the codec is guaranteed to never be fed with - * with NULL data. The user can still send NULL data to the public encode - * or decode function, but libavcodec will not pass it along to the codec - * unless this flag is set. - * - * Decoders: - * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, - * avpkt->size=0 at the end to get the delayed data until the decoder no longer - * returns frames. - * - * Encoders: - * The encoder needs to be fed with NULL data at the end of encoding until the - * encoder no longer returns data. - * - * NOTE: For encoders implementing the AVCodec.encode2() function, setting this - * flag also means that the encoder must set the pts and duration for - * each output packet. If this flag is not set, the pts and duration will - * be determined by libavcodec from the input frame. - */ -#define AV_CODEC_CAP_DELAY (1 << 5) -/** - * Codec can be fed a final frame with a smaller size. - * This can be used to prevent truncation of the last audio samples. - */ -#define AV_CODEC_CAP_SMALL_LAST_FRAME (1 << 6) - -/** - * Codec can output multiple frames per AVPacket - * Normally demuxers return one frame at a time, demuxers which do not do - * are connected to a parser to split what they return into proper frames. - * This flag is reserved to the very rare category of codecs which have a - * bitstream that cannot be split into frames without timeconsuming - * operations like full decoding. Demuxers carrying such bitstreams thus - * may return multiple frames in a packet. This has many disadvantages like - * prohibiting stream copy in many cases thus it should only be considered - * as a last resort. - */ -#define AV_CODEC_CAP_SUBFRAMES (1 << 8) -/** - * Codec is experimental and is thus avoided in favor of non experimental - * encoders - */ -#define AV_CODEC_CAP_EXPERIMENTAL (1 << 9) -/** - * Codec should fill in channel configuration and samplerate instead of container - */ -#define AV_CODEC_CAP_CHANNEL_CONF (1 << 10) -/** - * Codec supports frame-level multithreading. - */ -#define AV_CODEC_CAP_FRAME_THREADS (1 << 12) -/** - * Codec supports slice-based (or partition-based) multithreading. - */ -#define AV_CODEC_CAP_SLICE_THREADS (1 << 13) -/** - * Codec supports changed parameters at any point. - */ -#define AV_CODEC_CAP_PARAM_CHANGE (1 << 14) -/** - * Codec supports multithreading through a method other than slice- or - * frame-level multithreading. Typically this marks wrappers around - * multithreading-capable external libraries. - */ -#define AV_CODEC_CAP_OTHER_THREADS (1 << 15) -#if FF_API_AUTO_THREADS -#define AV_CODEC_CAP_AUTO_THREADS AV_CODEC_CAP_OTHER_THREADS -#endif -/** - * Audio encoder supports receiving a different number of samples in each call. - */ -#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16) -/** - * Decoder is not a preferred choice for probing. - * This indicates that the decoder is not a good choice for probing. - * It could for example be an expensive to spin up hardware decoder, - * or it could simply not provide a lot of useful information about - * the stream. - * A decoder marked with this flag should only be used as last resort - * choice for probing. - */ -#define AV_CODEC_CAP_AVOID_PROBING (1 << 17) - -#if FF_API_UNUSED_CODEC_CAPS -/** - * Deprecated and unused. Use AVCodecDescriptor.props instead - */ -#define AV_CODEC_CAP_INTRA_ONLY 0x40000000 -/** - * Deprecated and unused. Use AVCodecDescriptor.props instead - */ -#define AV_CODEC_CAP_LOSSLESS 0x80000000 -#endif - -/** - * Codec is backed by a hardware implementation. Typically used to - * identify a non-hwaccel hardware decoder. For information about hwaccels, use - * avcodec_get_hw_config() instead. - */ -#define AV_CODEC_CAP_HARDWARE (1 << 18) - -/** - * Codec is potentially backed by a hardware implementation, but not - * necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the - * implementation provides some sort of internal fallback. - */ -#define AV_CODEC_CAP_HYBRID (1 << 19) - -/** - * This codec takes the reordered_opaque field from input AVFrames - * and returns it in the corresponding field in AVCodecContext after - * encoding. - */ -#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20) - -/** - * This encoder can be flushed using avcodec_flush_buffers(). If this flag is - * not set, the encoder must be closed and reopened to ensure that no frames - * remain pending. - */ -#define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21) - -/** - * AVProfile. - */ -typedef struct AVProfile { - int profile; - const char *name; ///< short name for the profile -} AVProfile; - -typedef struct AVCodecDefault AVCodecDefault; - -struct AVCodecContext; -struct AVSubtitle; -struct AVPacket; - -/** - * AVCodec. - */ -typedef struct AVCodec { - /** - * Name of the codec implementation. - * The name is globally unique among encoders and among decoders (but an - * encoder and a decoder can share the same name). - * This is the primary way to find a codec from the user perspective. - */ - const char *name; - /** - * Descriptive name for the codec, meant to be more human readable than name. - * You should use the NULL_IF_CONFIG_SMALL() macro to define it. - */ - const char *long_name; - enum AVMediaType type; - enum AVCodecID id; - /** - * Codec capabilities. - * see AV_CODEC_CAP_* - */ - int capabilities; - const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} - const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 - const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 - const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 - const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 - uint8_t max_lowres; ///< maximum value for lowres supported by the decoder - const AVClass *priv_class; ///< AVClass for the private context - const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} - - /** - * Group name of the codec implementation. - * This is a short symbolic name of the wrapper backing this codec. A - * wrapper uses some kind of external implementation for the codec, such - * as an external library, or a codec implementation provided by the OS or - * the hardware. - * If this field is NULL, this is a builtin, libavcodec native codec. - * If non-NULL, this will be the suffix in AVCodec.name in most cases - * (usually AVCodec.name will be of the form "_"). - */ - const char *wrapper_name; - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavcodec and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - int priv_data_size; -#if FF_API_NEXT - struct AVCodec *next; -#endif - /** - * @name Frame-level threading support functions - * @{ - */ - /** - * Copy necessary context variables from a previous thread context to the current one. - * If not defined, the next thread will start automatically; otherwise, the codec - * must call ff_thread_finish_setup(). - * - * dst and src will (rarely) point to the same context, in which case memcpy should be skipped. - */ - int (*update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src); - /** @} */ - - /** - * Private codec-specific defaults. - */ - const AVCodecDefault *defaults; - - /** - * Initialize codec static data, called from av_codec_iterate(). - * - * This is not intended for time consuming operations as it is - * run for every codec regardless of that codec being used. - */ - void (*init_static_data)(struct AVCodec *codec); - - int (*init)(struct AVCodecContext *); - int (*encode_sub)(struct AVCodecContext *, uint8_t *buf, int buf_size, - const struct AVSubtitle *sub); - /** - * Encode data to an AVPacket. - * - * @param avctx codec context - * @param avpkt output AVPacket - * @param[in] frame AVFrame containing the raw data to be encoded - * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a - * non-empty packet was returned in avpkt. - * @return 0 on success, negative error code on failure - */ - int (*encode2)(struct AVCodecContext *avctx, struct AVPacket *avpkt, - const struct AVFrame *frame, int *got_packet_ptr); - /** - * Decode picture or subtitle data. - * - * @param avctx codec context - * @param outdata codec type dependent output struct - * @param[out] got_frame_ptr decoder sets to 0 or 1 to indicate that a - * non-empty frame or subtitle was returned in - * outdata. - * @param[in] avpkt AVPacket containing the data to be decoded - * @return amount of bytes read from the packet on success, negative error - * code on failure - */ - int (*decode)(struct AVCodecContext *avctx, void *outdata, - int *got_frame_ptr, struct AVPacket *avpkt); - int (*close)(struct AVCodecContext *); - /** - * Encode API with decoupled frame/packet dataflow. This function is called - * to get one output packet. It should call ff_encode_get_frame() to obtain - * input data. - */ - int (*receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt); - - /** - * Decode API with decoupled packet/frame dataflow. This function is called - * to get one output frame. It should call ff_decode_get_packet() to obtain - * input data. - */ - int (*receive_frame)(struct AVCodecContext *avctx, struct AVFrame *frame); - /** - * Flush buffers. - * Will be called when seeking - */ - void (*flush)(struct AVCodecContext *); - /** - * Internal codec capabilities. - * See FF_CODEC_CAP_* in internal.h - */ - int caps_internal; - - /** - * Decoding only, a comma-separated list of bitstream filters to apply to - * packets before decoding. - */ - const char *bsfs; - - /** - * Array of pointers to hardware configurations supported by the codec, - * or NULL if no hardware supported. The array is terminated by a NULL - * pointer. - * - * The user can only access this field via avcodec_get_hw_config(). - */ - const struct AVCodecHWConfigInternal *const *hw_configs; - - /** - * List of supported codec_tags, terminated by FF_CODEC_TAGS_END. - */ - const uint32_t *codec_tags; -} AVCodec; - -/** - * Iterate over all registered codecs. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered codec or NULL when the iteration is - * finished - */ -const AVCodec *av_codec_iterate(void **opaque); - -/** - * Find a registered decoder with a matching codec ID. - * - * @param id AVCodecID of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_decoder(enum AVCodecID id); - -/** - * Find a registered decoder with the specified name. - * - * @param name name of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_decoder_by_name(const char *name); - -/** - * Find a registered encoder with a matching codec ID. - * - * @param id AVCodecID of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_encoder(enum AVCodecID id); - -/** - * Find a registered encoder with the specified name. - * - * @param name name of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_encoder_by_name(const char *name); -/** - * @return a non-zero number if codec is an encoder, zero otherwise - */ -int av_codec_is_encoder(const AVCodec *codec); - -/** - * @return a non-zero number if codec is a decoder, zero otherwise - */ -int av_codec_is_decoder(const AVCodec *codec); - -enum { - /** - * The codec supports this format via the hw_device_ctx interface. - * - * When selecting this format, AVCodecContext.hw_device_ctx should - * have been set to a device of the specified type before calling - * avcodec_open2(). - */ - AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX = 0x01, - /** - * The codec supports this format via the hw_frames_ctx interface. - * - * When selecting this format for a decoder, - * AVCodecContext.hw_frames_ctx should be set to a suitable frames - * context inside the get_format() callback. The frames context - * must have been created on a device of the specified type. - * - * When selecting this format for an encoder, - * AVCodecContext.hw_frames_ctx should be set to the context which - * will be used for the input frames before calling avcodec_open2(). - */ - AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = 0x02, - /** - * The codec supports this format by some internal method. - * - * This format can be selected without any additional configuration - - * no device or frames context is required. - */ - AV_CODEC_HW_CONFIG_METHOD_INTERNAL = 0x04, - /** - * The codec supports this format by some ad-hoc method. - * - * Additional settings and/or function calls are required. See the - * codec-specific documentation for details. (Methods requiring - * this sort of configuration are deprecated and others should be - * used in preference.) - */ - AV_CODEC_HW_CONFIG_METHOD_AD_HOC = 0x08, -}; - -typedef struct AVCodecHWConfig { - /** - * For decoders, a hardware pixel format which that decoder may be - * able to decode to if suitable hardware is available. - * - * For encoders, a pixel format which the encoder may be able to - * accept. If set to AV_PIX_FMT_NONE, this applies to all pixel - * formats supported by the codec. - */ - enum AVPixelFormat pix_fmt; - /** - * Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible - * setup methods which can be used with this configuration. - */ - int methods; - /** - * The device type associated with the configuration. - * - * Must be set for AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX and - * AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, otherwise unused. - */ - enum AVHWDeviceType device_type; -} AVCodecHWConfig; - -/** - * Retrieve supported hardware configurations for a codec. - * - * Values of index from zero to some maximum return the indexed configuration - * descriptor; all other values return NULL. If the codec does not support - * any hardware configurations then it will always return NULL. - */ -const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *codec, int index); - -/** - * @} - */ - -#endif /* AVCODEC_CODEC_H */ diff --git a/prebuilts/x86/include/libavcodec/codec_desc.h b/prebuilts/x86/include/libavcodec/codec_desc.h deleted file mode 100644 index 126b52d..0000000 --- a/prebuilts/x86/include/libavcodec/codec_desc.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Codec descriptors public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_DESC_H -#define AVCODEC_CODEC_DESC_H - -#include "libavutil/avutil.h" - -#include "codec_id.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * This struct describes the properties of a single codec described by an - * AVCodecID. - * @see avcodec_descriptor_get() - */ -typedef struct AVCodecDescriptor { - enum AVCodecID id; - enum AVMediaType type; - /** - * Name of the codec described by this descriptor. It is non-empty and - * unique for each codec descriptor. It should contain alphanumeric - * characters and '_' only. - */ - const char *name; - /** - * A more descriptive name for this codec. May be NULL. - */ - const char *long_name; - /** - * Codec properties, a combination of AV_CODEC_PROP_* flags. - */ - int props; - /** - * MIME type(s) associated with the codec. - * May be NULL; if not, a NULL-terminated array of MIME types. - * The first item is always non-NULL and is the preferred MIME type. - */ - const char *const *mime_types; - /** - * If non-NULL, an array of profiles recognized for this codec. - * Terminated with FF_PROFILE_UNKNOWN. - */ - const struct AVProfile *profiles; -} AVCodecDescriptor; - -/** - * Codec uses only intra compression. - * Video and audio codecs only. - */ -#define AV_CODEC_PROP_INTRA_ONLY (1 << 0) -/** - * Codec supports lossy compression. Audio and video codecs only. - * @note a codec may support both lossy and lossless - * compression modes - */ -#define AV_CODEC_PROP_LOSSY (1 << 1) -/** - * Codec supports lossless compression. Audio and video codecs only. - */ -#define AV_CODEC_PROP_LOSSLESS (1 << 2) -/** - * Codec supports frame reordering. That is, the coded order (the order in which - * the encoded packets are output by the encoders / stored / input to the - * decoders) may be different from the presentation order of the corresponding - * frames. - * - * For codecs that do not have this property set, PTS and DTS should always be - * equal. - */ -#define AV_CODEC_PROP_REORDER (1 << 3) -/** - * Subtitle codec is bitmap based - * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. - */ -#define AV_CODEC_PROP_BITMAP_SUB (1 << 16) -/** - * Subtitle codec is text based. - * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. - */ -#define AV_CODEC_PROP_TEXT_SUB (1 << 17) - -/** - * @return descriptor for given codec ID or NULL if no descriptor exists. - */ -const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id); - -/** - * Iterate over all codec descriptors known to libavcodec. - * - * @param prev previous descriptor. NULL to get the first descriptor. - * - * @return next descriptor or NULL after the last descriptor - */ -const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev); - -/** - * @return codec descriptor with the given name or NULL if no such descriptor - * exists. - */ -const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name); - -/** - * @} - */ - -#endif // AVCODEC_CODEC_DESC_H diff --git a/prebuilts/x86/include/libavcodec/codec_id.h b/prebuilts/x86/include/libavcodec/codec_id.h deleted file mode 100644 index ab7bc68..0000000 --- a/prebuilts/x86/include/libavcodec/codec_id.h +++ /dev/null @@ -1,592 +0,0 @@ -/* - * Codec IDs - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_ID_H -#define AVCODEC_CODEC_ID_H - -#include "libavutil/avutil.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * Identify the syntax and semantics of the bitstream. - * The principle is roughly: - * Two decoders with the same ID can decode the same streams. - * Two encoders with the same ID can encode compatible streams. - * There may be slight deviations from the principle due to implementation - * details. - * - * If you add a codec ID to this list, add it so that - * 1. no value of an existing codec ID changes (that would break ABI), - * 2. it is as close as possible to similar codecs - * - * After adding new codec IDs, do not forget to add an entry to the codec - * descriptor list and bump libavcodec minor version. - */ -enum AVCodecID { - AV_CODEC_ID_NONE, - - /* video codecs */ - AV_CODEC_ID_MPEG1VIDEO, - AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding - AV_CODEC_ID_H261, - AV_CODEC_ID_H263, - AV_CODEC_ID_RV10, - AV_CODEC_ID_RV20, - AV_CODEC_ID_MJPEG, - AV_CODEC_ID_MJPEGB, - AV_CODEC_ID_LJPEG, - AV_CODEC_ID_SP5X, - AV_CODEC_ID_JPEGLS, - AV_CODEC_ID_MPEG4, - AV_CODEC_ID_RAWVIDEO, - AV_CODEC_ID_MSMPEG4V1, - AV_CODEC_ID_MSMPEG4V2, - AV_CODEC_ID_MSMPEG4V3, - AV_CODEC_ID_WMV1, - AV_CODEC_ID_WMV2, - AV_CODEC_ID_H263P, - AV_CODEC_ID_H263I, - AV_CODEC_ID_FLV1, - AV_CODEC_ID_SVQ1, - AV_CODEC_ID_SVQ3, - AV_CODEC_ID_DVVIDEO, - AV_CODEC_ID_HUFFYUV, - AV_CODEC_ID_CYUV, - AV_CODEC_ID_H264, - AV_CODEC_ID_INDEO3, - AV_CODEC_ID_VP3, - AV_CODEC_ID_THEORA, - AV_CODEC_ID_ASV1, - AV_CODEC_ID_ASV2, - AV_CODEC_ID_FFV1, - AV_CODEC_ID_4XM, - AV_CODEC_ID_VCR1, - AV_CODEC_ID_CLJR, - AV_CODEC_ID_MDEC, - AV_CODEC_ID_ROQ, - AV_CODEC_ID_INTERPLAY_VIDEO, - AV_CODEC_ID_XAN_WC3, - AV_CODEC_ID_XAN_WC4, - AV_CODEC_ID_RPZA, - AV_CODEC_ID_CINEPAK, - AV_CODEC_ID_WS_VQA, - AV_CODEC_ID_MSRLE, - AV_CODEC_ID_MSVIDEO1, - AV_CODEC_ID_IDCIN, - AV_CODEC_ID_8BPS, - AV_CODEC_ID_SMC, - AV_CODEC_ID_FLIC, - AV_CODEC_ID_TRUEMOTION1, - AV_CODEC_ID_VMDVIDEO, - AV_CODEC_ID_MSZH, - AV_CODEC_ID_ZLIB, - AV_CODEC_ID_QTRLE, - AV_CODEC_ID_TSCC, - AV_CODEC_ID_ULTI, - AV_CODEC_ID_QDRAW, - AV_CODEC_ID_VIXL, - AV_CODEC_ID_QPEG, - AV_CODEC_ID_PNG, - AV_CODEC_ID_PPM, - AV_CODEC_ID_PBM, - AV_CODEC_ID_PGM, - AV_CODEC_ID_PGMYUV, - AV_CODEC_ID_PAM, - AV_CODEC_ID_FFVHUFF, - AV_CODEC_ID_RV30, - AV_CODEC_ID_RV40, - AV_CODEC_ID_VC1, - AV_CODEC_ID_WMV3, - AV_CODEC_ID_LOCO, - AV_CODEC_ID_WNV1, - AV_CODEC_ID_AASC, - AV_CODEC_ID_INDEO2, - AV_CODEC_ID_FRAPS, - AV_CODEC_ID_TRUEMOTION2, - AV_CODEC_ID_BMP, - AV_CODEC_ID_CSCD, - AV_CODEC_ID_MMVIDEO, - AV_CODEC_ID_ZMBV, - AV_CODEC_ID_AVS, - AV_CODEC_ID_SMACKVIDEO, - AV_CODEC_ID_NUV, - AV_CODEC_ID_KMVC, - AV_CODEC_ID_FLASHSV, - AV_CODEC_ID_CAVS, - AV_CODEC_ID_JPEG2000, - AV_CODEC_ID_VMNC, - AV_CODEC_ID_VP5, - AV_CODEC_ID_VP6, - AV_CODEC_ID_VP6F, - AV_CODEC_ID_TARGA, - AV_CODEC_ID_DSICINVIDEO, - AV_CODEC_ID_TIERTEXSEQVIDEO, - AV_CODEC_ID_TIFF, - AV_CODEC_ID_GIF, - AV_CODEC_ID_DXA, - AV_CODEC_ID_DNXHD, - AV_CODEC_ID_THP, - AV_CODEC_ID_SGI, - AV_CODEC_ID_C93, - AV_CODEC_ID_BETHSOFTVID, - AV_CODEC_ID_PTX, - AV_CODEC_ID_TXD, - AV_CODEC_ID_VP6A, - AV_CODEC_ID_AMV, - AV_CODEC_ID_VB, - AV_CODEC_ID_PCX, - AV_CODEC_ID_SUNRAST, - AV_CODEC_ID_INDEO4, - AV_CODEC_ID_INDEO5, - AV_CODEC_ID_MIMIC, - AV_CODEC_ID_RL2, - AV_CODEC_ID_ESCAPE124, - AV_CODEC_ID_DIRAC, - AV_CODEC_ID_BFI, - AV_CODEC_ID_CMV, - AV_CODEC_ID_MOTIONPIXELS, - AV_CODEC_ID_TGV, - AV_CODEC_ID_TGQ, - AV_CODEC_ID_TQI, - AV_CODEC_ID_AURA, - AV_CODEC_ID_AURA2, - AV_CODEC_ID_V210X, - AV_CODEC_ID_TMV, - AV_CODEC_ID_V210, - AV_CODEC_ID_DPX, - AV_CODEC_ID_MAD, - AV_CODEC_ID_FRWU, - AV_CODEC_ID_FLASHSV2, - AV_CODEC_ID_CDGRAPHICS, - AV_CODEC_ID_R210, - AV_CODEC_ID_ANM, - AV_CODEC_ID_BINKVIDEO, - AV_CODEC_ID_IFF_ILBM, -#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM - AV_CODEC_ID_KGV1, - AV_CODEC_ID_YOP, - AV_CODEC_ID_VP8, - AV_CODEC_ID_PICTOR, - AV_CODEC_ID_ANSI, - AV_CODEC_ID_A64_MULTI, - AV_CODEC_ID_A64_MULTI5, - AV_CODEC_ID_R10K, - AV_CODEC_ID_MXPEG, - AV_CODEC_ID_LAGARITH, - AV_CODEC_ID_PRORES, - AV_CODEC_ID_JV, - AV_CODEC_ID_DFA, - AV_CODEC_ID_WMV3IMAGE, - AV_CODEC_ID_VC1IMAGE, - AV_CODEC_ID_UTVIDEO, - AV_CODEC_ID_BMV_VIDEO, - AV_CODEC_ID_VBLE, - AV_CODEC_ID_DXTORY, - AV_CODEC_ID_V410, - AV_CODEC_ID_XWD, - AV_CODEC_ID_CDXL, - AV_CODEC_ID_XBM, - AV_CODEC_ID_ZEROCODEC, - AV_CODEC_ID_MSS1, - AV_CODEC_ID_MSA1, - AV_CODEC_ID_TSCC2, - AV_CODEC_ID_MTS2, - AV_CODEC_ID_CLLC, - AV_CODEC_ID_MSS2, - AV_CODEC_ID_VP9, - AV_CODEC_ID_AIC, - AV_CODEC_ID_ESCAPE130, - AV_CODEC_ID_G2M, - AV_CODEC_ID_WEBP, - AV_CODEC_ID_HNM4_VIDEO, - AV_CODEC_ID_HEVC, -#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC - AV_CODEC_ID_FIC, - AV_CODEC_ID_ALIAS_PIX, - AV_CODEC_ID_BRENDER_PIX, - AV_CODEC_ID_PAF_VIDEO, - AV_CODEC_ID_EXR, - AV_CODEC_ID_VP7, - AV_CODEC_ID_SANM, - AV_CODEC_ID_SGIRLE, - AV_CODEC_ID_MVC1, - AV_CODEC_ID_MVC2, - AV_CODEC_ID_HQX, - AV_CODEC_ID_TDSC, - AV_CODEC_ID_HQ_HQA, - AV_CODEC_ID_HAP, - AV_CODEC_ID_DDS, - AV_CODEC_ID_DXV, - AV_CODEC_ID_SCREENPRESSO, - AV_CODEC_ID_RSCC, - AV_CODEC_ID_AVS2, - AV_CODEC_ID_PGX, - AV_CODEC_ID_AVS3, - AV_CODEC_ID_MSP2, - AV_CODEC_ID_VVC, -#define AV_CODEC_ID_H266 AV_CODEC_ID_VVC - - AV_CODEC_ID_Y41P = 0x8000, - AV_CODEC_ID_AVRP, - AV_CODEC_ID_012V, - AV_CODEC_ID_AVUI, - AV_CODEC_ID_AYUV, - AV_CODEC_ID_TARGA_Y216, - AV_CODEC_ID_V308, - AV_CODEC_ID_V408, - AV_CODEC_ID_YUV4, - AV_CODEC_ID_AVRN, - AV_CODEC_ID_CPIA, - AV_CODEC_ID_XFACE, - AV_CODEC_ID_SNOW, - AV_CODEC_ID_SMVJPEG, - AV_CODEC_ID_APNG, - AV_CODEC_ID_DAALA, - AV_CODEC_ID_CFHD, - AV_CODEC_ID_TRUEMOTION2RT, - AV_CODEC_ID_M101, - AV_CODEC_ID_MAGICYUV, - AV_CODEC_ID_SHEERVIDEO, - AV_CODEC_ID_YLC, - AV_CODEC_ID_PSD, - AV_CODEC_ID_PIXLET, - AV_CODEC_ID_SPEEDHQ, - AV_CODEC_ID_FMVC, - AV_CODEC_ID_SCPR, - AV_CODEC_ID_CLEARVIDEO, - AV_CODEC_ID_XPM, - AV_CODEC_ID_AV1, - AV_CODEC_ID_BITPACKED, - AV_CODEC_ID_MSCC, - AV_CODEC_ID_SRGC, - AV_CODEC_ID_SVG, - AV_CODEC_ID_GDV, - AV_CODEC_ID_FITS, - AV_CODEC_ID_IMM4, - AV_CODEC_ID_PROSUMER, - AV_CODEC_ID_MWSC, - AV_CODEC_ID_WCMV, - AV_CODEC_ID_RASC, - AV_CODEC_ID_HYMT, - AV_CODEC_ID_ARBC, - AV_CODEC_ID_AGM, - AV_CODEC_ID_LSCR, - AV_CODEC_ID_VP4, - AV_CODEC_ID_IMM5, - AV_CODEC_ID_MVDV, - AV_CODEC_ID_MVHA, - AV_CODEC_ID_CDTOONS, - AV_CODEC_ID_MV30, - AV_CODEC_ID_NOTCHLC, - AV_CODEC_ID_PFM, - AV_CODEC_ID_MOBICLIP, - AV_CODEC_ID_PHOTOCD, - AV_CODEC_ID_IPU, - AV_CODEC_ID_ARGO, - AV_CODEC_ID_CRI, - AV_CODEC_ID_SIMBIOSIS_IMX, - AV_CODEC_ID_SGA_VIDEO, - - /* various PCM "codecs" */ - AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs - AV_CODEC_ID_PCM_S16LE = 0x10000, - AV_CODEC_ID_PCM_S16BE, - AV_CODEC_ID_PCM_U16LE, - AV_CODEC_ID_PCM_U16BE, - AV_CODEC_ID_PCM_S8, - AV_CODEC_ID_PCM_U8, - AV_CODEC_ID_PCM_MULAW, - AV_CODEC_ID_PCM_ALAW, - AV_CODEC_ID_PCM_S32LE, - AV_CODEC_ID_PCM_S32BE, - AV_CODEC_ID_PCM_U32LE, - AV_CODEC_ID_PCM_U32BE, - AV_CODEC_ID_PCM_S24LE, - AV_CODEC_ID_PCM_S24BE, - AV_CODEC_ID_PCM_U24LE, - AV_CODEC_ID_PCM_U24BE, - AV_CODEC_ID_PCM_S24DAUD, - AV_CODEC_ID_PCM_ZORK, - AV_CODEC_ID_PCM_S16LE_PLANAR, - AV_CODEC_ID_PCM_DVD, - AV_CODEC_ID_PCM_F32BE, - AV_CODEC_ID_PCM_F32LE, - AV_CODEC_ID_PCM_F64BE, - AV_CODEC_ID_PCM_F64LE, - AV_CODEC_ID_PCM_BLURAY, - AV_CODEC_ID_PCM_LXF, - AV_CODEC_ID_S302M, - AV_CODEC_ID_PCM_S8_PLANAR, - AV_CODEC_ID_PCM_S24LE_PLANAR, - AV_CODEC_ID_PCM_S32LE_PLANAR, - AV_CODEC_ID_PCM_S16BE_PLANAR, - - AV_CODEC_ID_PCM_S64LE = 0x10800, - AV_CODEC_ID_PCM_S64BE, - AV_CODEC_ID_PCM_F16LE, - AV_CODEC_ID_PCM_F24LE, - AV_CODEC_ID_PCM_VIDC, - AV_CODEC_ID_PCM_SGA, - - /* various ADPCM codecs */ - AV_CODEC_ID_ADPCM_IMA_QT = 0x11000, - AV_CODEC_ID_ADPCM_IMA_WAV, - AV_CODEC_ID_ADPCM_IMA_DK3, - AV_CODEC_ID_ADPCM_IMA_DK4, - AV_CODEC_ID_ADPCM_IMA_WS, - AV_CODEC_ID_ADPCM_IMA_SMJPEG, - AV_CODEC_ID_ADPCM_MS, - AV_CODEC_ID_ADPCM_4XM, - AV_CODEC_ID_ADPCM_XA, - AV_CODEC_ID_ADPCM_ADX, - AV_CODEC_ID_ADPCM_EA, - AV_CODEC_ID_ADPCM_G726, - AV_CODEC_ID_ADPCM_CT, - AV_CODEC_ID_ADPCM_SWF, - AV_CODEC_ID_ADPCM_YAMAHA, - AV_CODEC_ID_ADPCM_SBPRO_4, - AV_CODEC_ID_ADPCM_SBPRO_3, - AV_CODEC_ID_ADPCM_SBPRO_2, - AV_CODEC_ID_ADPCM_THP, - AV_CODEC_ID_ADPCM_IMA_AMV, - AV_CODEC_ID_ADPCM_EA_R1, - AV_CODEC_ID_ADPCM_EA_R3, - AV_CODEC_ID_ADPCM_EA_R2, - AV_CODEC_ID_ADPCM_IMA_EA_SEAD, - AV_CODEC_ID_ADPCM_IMA_EA_EACS, - AV_CODEC_ID_ADPCM_EA_XAS, - AV_CODEC_ID_ADPCM_EA_MAXIS_XA, - AV_CODEC_ID_ADPCM_IMA_ISS, - AV_CODEC_ID_ADPCM_G722, - AV_CODEC_ID_ADPCM_IMA_APC, - AV_CODEC_ID_ADPCM_VIMA, - - AV_CODEC_ID_ADPCM_AFC = 0x11800, - AV_CODEC_ID_ADPCM_IMA_OKI, - AV_CODEC_ID_ADPCM_DTK, - AV_CODEC_ID_ADPCM_IMA_RAD, - AV_CODEC_ID_ADPCM_G726LE, - AV_CODEC_ID_ADPCM_THP_LE, - AV_CODEC_ID_ADPCM_PSX, - AV_CODEC_ID_ADPCM_AICA, - AV_CODEC_ID_ADPCM_IMA_DAT4, - AV_CODEC_ID_ADPCM_MTAF, - AV_CODEC_ID_ADPCM_AGM, - AV_CODEC_ID_ADPCM_ARGO, - AV_CODEC_ID_ADPCM_IMA_SSI, - AV_CODEC_ID_ADPCM_ZORK, - AV_CODEC_ID_ADPCM_IMA_APM, - AV_CODEC_ID_ADPCM_IMA_ALP, - AV_CODEC_ID_ADPCM_IMA_MTF, - AV_CODEC_ID_ADPCM_IMA_CUNNING, - AV_CODEC_ID_ADPCM_IMA_MOFLEX, - - /* AMR */ - AV_CODEC_ID_AMR_NB = 0x12000, - AV_CODEC_ID_AMR_WB, - - /* RealAudio codecs*/ - AV_CODEC_ID_RA_144 = 0x13000, - AV_CODEC_ID_RA_288, - - /* various DPCM codecs */ - AV_CODEC_ID_ROQ_DPCM = 0x14000, - AV_CODEC_ID_INTERPLAY_DPCM, - AV_CODEC_ID_XAN_DPCM, - AV_CODEC_ID_SOL_DPCM, - - AV_CODEC_ID_SDX2_DPCM = 0x14800, - AV_CODEC_ID_GREMLIN_DPCM, - AV_CODEC_ID_DERF_DPCM, - - /* audio codecs */ - AV_CODEC_ID_MP2 = 0x15000, - AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 - AV_CODEC_ID_AAC, - AV_CODEC_ID_AC3, - AV_CODEC_ID_DTS, - AV_CODEC_ID_VORBIS, - AV_CODEC_ID_DVAUDIO, - AV_CODEC_ID_WMAV1, - AV_CODEC_ID_WMAV2, - AV_CODEC_ID_MACE3, - AV_CODEC_ID_MACE6, - AV_CODEC_ID_VMDAUDIO, - AV_CODEC_ID_FLAC, - AV_CODEC_ID_MP3ADU, - AV_CODEC_ID_MP3ON4, - AV_CODEC_ID_SHORTEN, - AV_CODEC_ID_ALAC, - AV_CODEC_ID_WESTWOOD_SND1, - AV_CODEC_ID_GSM, ///< as in Berlin toast format - AV_CODEC_ID_QDM2, - AV_CODEC_ID_COOK, - AV_CODEC_ID_TRUESPEECH, - AV_CODEC_ID_TTA, - AV_CODEC_ID_SMACKAUDIO, - AV_CODEC_ID_QCELP, - AV_CODEC_ID_WAVPACK, - AV_CODEC_ID_DSICINAUDIO, - AV_CODEC_ID_IMC, - AV_CODEC_ID_MUSEPACK7, - AV_CODEC_ID_MLP, - AV_CODEC_ID_GSM_MS, /* as found in WAV */ - AV_CODEC_ID_ATRAC3, - AV_CODEC_ID_APE, - AV_CODEC_ID_NELLYMOSER, - AV_CODEC_ID_MUSEPACK8, - AV_CODEC_ID_SPEEX, - AV_CODEC_ID_WMAVOICE, - AV_CODEC_ID_WMAPRO, - AV_CODEC_ID_WMALOSSLESS, - AV_CODEC_ID_ATRAC3P, - AV_CODEC_ID_EAC3, - AV_CODEC_ID_SIPR, - AV_CODEC_ID_MP1, - AV_CODEC_ID_TWINVQ, - AV_CODEC_ID_TRUEHD, - AV_CODEC_ID_MP4ALS, - AV_CODEC_ID_ATRAC1, - AV_CODEC_ID_BINKAUDIO_RDFT, - AV_CODEC_ID_BINKAUDIO_DCT, - AV_CODEC_ID_AAC_LATM, - AV_CODEC_ID_QDMC, - AV_CODEC_ID_CELT, - AV_CODEC_ID_G723_1, - AV_CODEC_ID_G729, - AV_CODEC_ID_8SVX_EXP, - AV_CODEC_ID_8SVX_FIB, - AV_CODEC_ID_BMV_AUDIO, - AV_CODEC_ID_RALF, - AV_CODEC_ID_IAC, - AV_CODEC_ID_ILBC, - AV_CODEC_ID_OPUS, - AV_CODEC_ID_COMFORT_NOISE, - AV_CODEC_ID_TAK, - AV_CODEC_ID_METASOUND, - AV_CODEC_ID_PAF_AUDIO, - AV_CODEC_ID_ON2AVC, - AV_CODEC_ID_DSS_SP, - AV_CODEC_ID_CODEC2, - - AV_CODEC_ID_FFWAVESYNTH = 0x15800, - AV_CODEC_ID_SONIC, - AV_CODEC_ID_SONIC_LS, - AV_CODEC_ID_EVRC, - AV_CODEC_ID_SMV, - AV_CODEC_ID_DSD_LSBF, - AV_CODEC_ID_DSD_MSBF, - AV_CODEC_ID_DSD_LSBF_PLANAR, - AV_CODEC_ID_DSD_MSBF_PLANAR, - AV_CODEC_ID_4GV, - AV_CODEC_ID_INTERPLAY_ACM, - AV_CODEC_ID_XMA1, - AV_CODEC_ID_XMA2, - AV_CODEC_ID_DST, - AV_CODEC_ID_ATRAC3AL, - AV_CODEC_ID_ATRAC3PAL, - AV_CODEC_ID_DOLBY_E, - AV_CODEC_ID_APTX, - AV_CODEC_ID_APTX_HD, - AV_CODEC_ID_SBC, - AV_CODEC_ID_ATRAC9, - AV_CODEC_ID_HCOM, - AV_CODEC_ID_ACELP_KELVIN, - AV_CODEC_ID_MPEGH_3D_AUDIO, - AV_CODEC_ID_SIREN, - AV_CODEC_ID_HCA, - AV_CODEC_ID_FASTAUDIO, - - /* subtitle codecs */ - AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. - AV_CODEC_ID_DVD_SUBTITLE = 0x17000, - AV_CODEC_ID_DVB_SUBTITLE, - AV_CODEC_ID_TEXT, ///< raw UTF-8 text - AV_CODEC_ID_XSUB, - AV_CODEC_ID_SSA, - AV_CODEC_ID_MOV_TEXT, - AV_CODEC_ID_HDMV_PGS_SUBTITLE, - AV_CODEC_ID_DVB_TELETEXT, - AV_CODEC_ID_SRT, - - AV_CODEC_ID_MICRODVD = 0x17800, - AV_CODEC_ID_EIA_608, - AV_CODEC_ID_JACOSUB, - AV_CODEC_ID_SAMI, - AV_CODEC_ID_REALTEXT, - AV_CODEC_ID_STL, - AV_CODEC_ID_SUBVIEWER1, - AV_CODEC_ID_SUBVIEWER, - AV_CODEC_ID_SUBRIP, - AV_CODEC_ID_WEBVTT, - AV_CODEC_ID_MPL2, - AV_CODEC_ID_VPLAYER, - AV_CODEC_ID_PJS, - AV_CODEC_ID_ASS, - AV_CODEC_ID_HDMV_TEXT_SUBTITLE, - AV_CODEC_ID_TTML, - AV_CODEC_ID_ARIB_CAPTION, - - /* other specific kind of codecs (generally used for attachments) */ - AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs. - AV_CODEC_ID_TTF = 0x18000, - - AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program stream. - AV_CODEC_ID_EPG, - AV_CODEC_ID_BINTEXT = 0x18800, - AV_CODEC_ID_XBIN, - AV_CODEC_ID_IDF, - AV_CODEC_ID_OTF, - AV_CODEC_ID_SMPTE_KLV, - AV_CODEC_ID_DVD_NAV, - AV_CODEC_ID_TIMED_ID3, - AV_CODEC_ID_BIN_DATA, - - - AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it - - AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS - * stream (only used by libavformat) */ - AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems - * stream (only used by libavformat) */ - AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. - AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket -}; - -/** - * Get the type of the given codec. - */ -enum AVMediaType avcodec_get_type(enum AVCodecID codec_id); - -/** - * Get the name of a codec. - * @return a static string identifying the codec; never NULL - */ -const char *avcodec_get_name(enum AVCodecID id); - -/** - * @} - */ - -#endif // AVCODEC_CODEC_ID_H diff --git a/prebuilts/x86/include/libavcodec/codec_par.h b/prebuilts/x86/include/libavcodec/codec_par.h deleted file mode 100644 index 948758e..0000000 --- a/prebuilts/x86/include/libavcodec/codec_par.h +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Codec parameters public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_PAR_H -#define AVCODEC_CODEC_PAR_H - -#include - -#include "libavutil/avutil.h" -#include "libavutil/rational.h" -#include "libavutil/pixfmt.h" - -#include "codec_id.h" - -/** - * @addtogroup lavc_core - */ - -enum AVFieldOrder { - AV_FIELD_UNKNOWN, - AV_FIELD_PROGRESSIVE, - AV_FIELD_TT, //< Top coded_first, top displayed first - AV_FIELD_BB, //< Bottom coded first, bottom displayed first - AV_FIELD_TB, //< Top coded first, bottom displayed first - AV_FIELD_BT, //< Bottom coded first, top displayed first -}; - -/** - * This struct describes the properties of an encoded stream. - * - * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must - * be allocated with avcodec_parameters_alloc() and freed with - * avcodec_parameters_free(). - */ -typedef struct AVCodecParameters { - /** - * General type of the encoded data. - */ - enum AVMediaType codec_type; - /** - * Specific type of the encoded data (the codec used). - */ - enum AVCodecID codec_id; - /** - * Additional information about the codec (corresponds to the AVI FOURCC). - */ - uint32_t codec_tag; - - /** - * Extra binary data needed for initializing the decoder, codec-dependent. - * - * Must be allocated with av_malloc() and will be freed by - * avcodec_parameters_free(). The allocated size of extradata must be at - * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding - * bytes zeroed. - */ - uint8_t *extradata; - /** - * Size of the extradata content in bytes. - */ - int extradata_size; - - /** - * - video: the pixel format, the value corresponds to enum AVPixelFormat. - * - audio: the sample format, the value corresponds to enum AVSampleFormat. - */ - int format; - - /** - * The average bitrate of the encoded data (in bits per second). - */ - int64_t bit_rate; - - /** - * The number of bits per sample in the codedwords. - * - * This is basically the bitrate per sample. It is mandatory for a bunch of - * formats to actually decode them. It's the number of bits for one sample in - * the actual coded bitstream. - * - * This could be for example 4 for ADPCM - * For PCM formats this matches bits_per_raw_sample - * Can be 0 - */ - int bits_per_coded_sample; - - /** - * This is the number of valid bits in each output sample. If the - * sample format has more bits, the least significant bits are additional - * padding bits, which are always 0. Use right shifts to reduce the sample - * to its actual size. For example, audio formats with 24 bit samples will - * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32. - * To get the original sample use "(int32_t)sample >> 8"." - * - * For ADPCM this might be 12 or 16 or similar - * Can be 0 - */ - int bits_per_raw_sample; - - /** - * Codec-specific bitstream restrictions that the stream conforms to. - */ - int profile; - int level; - - /** - * Video only. The dimensions of the video frame in pixels. - */ - int width; - int height; - - /** - * Video only. The aspect ratio (width / height) which a single pixel - * should have when displayed. - * - * When the aspect ratio is unknown / undefined, the numerator should be - * set to 0 (the denominator may have any value). - */ - AVRational sample_aspect_ratio; - - /** - * Video only. The order of the fields in interlaced video. - */ - enum AVFieldOrder field_order; - - /** - * Video only. Additional colorspace characteristics. - */ - enum AVColorRange color_range; - enum AVColorPrimaries color_primaries; - enum AVColorTransferCharacteristic color_trc; - enum AVColorSpace color_space; - enum AVChromaLocation chroma_location; - - /** - * Video only. Number of delayed frames. - */ - int video_delay; - - /** - * Audio only. The channel layout bitmask. May be 0 if the channel layout is - * unknown or unspecified, otherwise the number of bits set must be equal to - * the channels field. - */ - uint64_t channel_layout; - /** - * Audio only. The number of audio channels. - */ - int channels; - /** - * Audio only. The number of audio samples per second. - */ - int sample_rate; - /** - * Audio only. The number of bytes per coded audio frame, required by some - * formats. - * - * Corresponds to nBlockAlign in WAVEFORMATEX. - */ - int block_align; - /** - * Audio only. Audio frame size, if known. Required by some formats to be static. - */ - int frame_size; - - /** - * Audio only. The amount of padding (in samples) inserted by the encoder at - * the beginning of the audio. I.e. this number of leading decoded samples - * must be discarded by the caller to get the original audio without leading - * padding. - */ - int initial_padding; - /** - * Audio only. The amount of padding (in samples) appended by the encoder to - * the end of the audio. I.e. this number of decoded samples must be - * discarded by the caller from the end of the stream to get the original - * audio without any trailing padding. - */ - int trailing_padding; - /** - * Audio only. Number of samples to skip after a discontinuity. - */ - int seek_preroll; -} AVCodecParameters; - -/** - * Allocate a new AVCodecParameters and set its fields to default values - * (unknown/invalid/0). The returned struct must be freed with - * avcodec_parameters_free(). - */ -AVCodecParameters *avcodec_parameters_alloc(void); - -/** - * Free an AVCodecParameters instance and everything associated with it and - * write NULL to the supplied pointer. - */ -void avcodec_parameters_free(AVCodecParameters **par); - -/** - * Copy the contents of src to dst. Any allocated fields in dst are freed and - * replaced with newly allocated duplicates of the corresponding fields in src. - * - * @return >= 0 on success, a negative AVERROR code on failure. - */ -int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src); - - -/** - * @} - */ - -#endif // AVCODEC_CODEC_PAR_H diff --git a/prebuilts/x86/include/libavcodec/d3d11va.h b/prebuilts/x86/include/libavcodec/d3d11va.h deleted file mode 100644 index 6816b6c..0000000 --- a/prebuilts/x86/include/libavcodec/d3d11va.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Direct3D11 HW acceleration - * - * copyright (c) 2009 Laurent Aimar - * copyright (c) 2015 Steve Lhomme - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_D3D11VA_H -#define AVCODEC_D3D11VA_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_d3d11va - * Public libavcodec D3D11VA header. - */ - -#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0602 -#endif - -#include -#include - -/** - * @defgroup lavc_codec_hwaccel_d3d11va Direct3D11 - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for Direct3D11 and old UVD/UVD+ ATI video cards -#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for Direct3D11 and old Intel GPUs with ClearVideo interface - -/** - * This structure is used to provides the necessary configurations and data - * to the Direct3D11 FFmpeg HWAccel implementation. - * - * The application must make it available as AVCodecContext.hwaccel_context. - * - * Use av_d3d11va_alloc_context() exclusively to allocate an AVD3D11VAContext. - */ -typedef struct AVD3D11VAContext { - /** - * D3D11 decoder object - */ - ID3D11VideoDecoder *decoder; - - /** - * D3D11 VideoContext - */ - ID3D11VideoContext *video_context; - - /** - * D3D11 configuration used to create the decoder - */ - D3D11_VIDEO_DECODER_CONFIG *cfg; - - /** - * The number of surface in the surface array - */ - unsigned surface_count; - - /** - * The array of Direct3D surfaces used to create the decoder - */ - ID3D11VideoDecoderOutputView **surface; - - /** - * A bit field configuring the workarounds needed for using the decoder - */ - uint64_t workaround; - - /** - * Private to the FFmpeg AVHWAccel implementation - */ - unsigned report_id; - - /** - * Mutex to access video_context - */ - HANDLE context_mutex; -} AVD3D11VAContext; - -/** - * Allocate an AVD3D11VAContext. - * - * @return Newly-allocated AVD3D11VAContext or NULL on failure. - */ -AVD3D11VAContext *av_d3d11va_alloc_context(void); - -/** - * @} - */ - -#endif /* AVCODEC_D3D11VA_H */ diff --git a/prebuilts/x86/include/libavcodec/dirac.h b/prebuilts/x86/include/libavcodec/dirac.h deleted file mode 100644 index e6d9d34..0000000 --- a/prebuilts/x86/include/libavcodec/dirac.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2007 Marco Gerards - * Copyright (C) 2009 David Conrad - * Copyright (C) 2011 Jordi Ortiz - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DIRAC_H -#define AVCODEC_DIRAC_H - -/** - * @file - * Interface to Dirac Decoder/Encoder - * @author Marco Gerards - * @author David Conrad - * @author Jordi Ortiz - */ - -#include "avcodec.h" - -/** - * The spec limits the number of wavelet decompositions to 4 for both - * level 1 (VC-2) and 128 (long-gop default). - * 5 decompositions is the maximum before >16-bit buffers are needed. - * Schroedinger allows this for DD 9,7 and 13,7 wavelets only, limiting - * the others to 4 decompositions (or 3 for the fidelity filter). - * - * We use this instead of MAX_DECOMPOSITIONS to save some memory. - */ -#define MAX_DWT_LEVELS 5 - -/** - * Parse code values: - * - * Dirac Specification -> - * 9.6.1 Table 9.1 - * - * VC-2 Specification -> - * 10.4.1 Table 10.1 - */ - -enum DiracParseCodes { - DIRAC_PCODE_SEQ_HEADER = 0x00, - DIRAC_PCODE_END_SEQ = 0x10, - DIRAC_PCODE_AUX = 0x20, - DIRAC_PCODE_PAD = 0x30, - DIRAC_PCODE_PICTURE_CODED = 0x08, - DIRAC_PCODE_PICTURE_RAW = 0x48, - DIRAC_PCODE_PICTURE_LOW_DEL = 0xC8, - DIRAC_PCODE_PICTURE_HQ = 0xE8, - DIRAC_PCODE_INTER_NOREF_CO1 = 0x0A, - DIRAC_PCODE_INTER_NOREF_CO2 = 0x09, - DIRAC_PCODE_INTER_REF_CO1 = 0x0D, - DIRAC_PCODE_INTER_REF_CO2 = 0x0E, - DIRAC_PCODE_INTRA_REF_CO = 0x0C, - DIRAC_PCODE_INTRA_REF_RAW = 0x4C, - DIRAC_PCODE_INTRA_REF_PICT = 0xCC, - DIRAC_PCODE_MAGIC = 0x42424344, -}; - -typedef struct DiracVersionInfo { - int major; - int minor; -} DiracVersionInfo; - -typedef struct AVDiracSeqHeader { - unsigned width; - unsigned height; - uint8_t chroma_format; ///< 0: 444 1: 422 2: 420 - - uint8_t interlaced; - uint8_t top_field_first; - - uint8_t frame_rate_index; ///< index into dirac_frame_rate[] - uint8_t aspect_ratio_index; ///< index into dirac_aspect_ratio[] - - uint16_t clean_width; - uint16_t clean_height; - uint16_t clean_left_offset; - uint16_t clean_right_offset; - - uint8_t pixel_range_index; ///< index into dirac_pixel_range_presets[] - uint8_t color_spec_index; ///< index into dirac_color_spec_presets[] - - int profile; - int level; - - AVRational framerate; - AVRational sample_aspect_ratio; - - enum AVPixelFormat pix_fmt; - enum AVColorRange color_range; - enum AVColorPrimaries color_primaries; - enum AVColorTransferCharacteristic color_trc; - enum AVColorSpace colorspace; - - DiracVersionInfo version; - int bit_depth; -} AVDiracSeqHeader; - -/** - * Parse a Dirac sequence header. - * - * @param dsh this function will allocate and fill an AVDiracSeqHeader struct - * and write it into this pointer. The caller must free it with - * av_free(). - * @param buf the data buffer - * @param buf_size the size of the data buffer in bytes - * @param log_ctx if non-NULL, this function will log errors here - * @return 0 on success, a negative AVERROR code on failure - */ -int av_dirac_parse_sequence_header(AVDiracSeqHeader **dsh, - const uint8_t *buf, size_t buf_size, - void *log_ctx); - -#endif /* AVCODEC_DIRAC_H */ diff --git a/prebuilts/x86/include/libavcodec/dv_profile.h b/prebuilts/x86/include/libavcodec/dv_profile.h deleted file mode 100644 index 9380a66..0000000 --- a/prebuilts/x86/include/libavcodec/dv_profile.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DV_PROFILE_H -#define AVCODEC_DV_PROFILE_H - -#include - -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" -#include "avcodec.h" - -/* minimum number of bytes to read from a DV stream in order to - * determine the profile */ -#define DV_PROFILE_BYTES (6 * 80) /* 6 DIF blocks */ - - -/* - * AVDVProfile is used to express the differences between various - * DV flavors. For now it's primarily used for differentiating - * 525/60 and 625/50, but the plans are to use it for various - * DV specs as well (e.g. SMPTE314M vs. IEC 61834). - */ -typedef struct AVDVProfile { - int dsf; /* value of the dsf in the DV header */ - int video_stype; /* stype for VAUX source pack */ - int frame_size; /* total size of one frame in bytes */ - int difseg_size; /* number of DIF segments per DIF channel */ - int n_difchan; /* number of DIF channels per frame */ - AVRational time_base; /* 1/framerate */ - int ltc_divisor; /* FPS from the LTS standpoint */ - int height; /* picture height in pixels */ - int width; /* picture width in pixels */ - AVRational sar[2]; /* sample aspect ratios for 4:3 and 16:9 */ - enum AVPixelFormat pix_fmt; /* picture pixel format */ - int bpm; /* blocks per macroblock */ - const uint8_t *block_sizes; /* AC block sizes, in bits */ - int audio_stride; /* size of audio_shuffle table */ - int audio_min_samples[3]; /* min amount of audio samples */ - /* for 48kHz, 44.1kHz and 32kHz */ - int audio_samples_dist[5]; /* how many samples are supposed to be */ - /* in each frame in a 5 frames window */ - const uint8_t (*audio_shuffle)[9]; /* PCM shuffling table */ -} AVDVProfile; - -/** - * Get a DV profile for the provided compressed frame. - * - * @param sys the profile used for the previous frame, may be NULL - * @param frame the compressed data buffer - * @param buf_size size of the buffer in bytes - * @return the DV profile for the supplied data or NULL on failure - */ -const AVDVProfile *av_dv_frame_profile(const AVDVProfile *sys, - const uint8_t *frame, unsigned buf_size); - -/** - * Get a DV profile for the provided stream parameters. - */ -const AVDVProfile *av_dv_codec_profile(int width, int height, enum AVPixelFormat pix_fmt); - -/** - * Get a DV profile for the provided stream parameters. - * The frame rate is used as a best-effort parameter. - */ -const AVDVProfile *av_dv_codec_profile2(int width, int height, enum AVPixelFormat pix_fmt, AVRational frame_rate); - -#endif /* AVCODEC_DV_PROFILE_H */ diff --git a/prebuilts/x86/include/libavcodec/dxva2.h b/prebuilts/x86/include/libavcodec/dxva2.h deleted file mode 100644 index 22c9399..0000000 --- a/prebuilts/x86/include/libavcodec/dxva2.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * DXVA2 HW acceleration - * - * copyright (c) 2009 Laurent Aimar - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DXVA2_H -#define AVCODEC_DXVA2_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_dxva2 - * Public libavcodec DXVA2 header. - */ - -#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0602 -#endif - -#include -#include -#include - -/** - * @defgroup lavc_codec_hwaccel_dxva2 DXVA2 - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards -#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for DXVA2 and old Intel GPUs with ClearVideo interface - -/** - * This structure is used to provides the necessary configurations and data - * to the DXVA2 FFmpeg HWAccel implementation. - * - * The application must make it available as AVCodecContext.hwaccel_context. - */ -struct dxva_context { - /** - * DXVA2 decoder object - */ - IDirectXVideoDecoder *decoder; - - /** - * DXVA2 configuration used to create the decoder - */ - const DXVA2_ConfigPictureDecode *cfg; - - /** - * The number of surface in the surface array - */ - unsigned surface_count; - - /** - * The array of Direct3D surfaces used to create the decoder - */ - LPDIRECT3DSURFACE9 *surface; - - /** - * A bit field configuring the workarounds needed for using the decoder - */ - uint64_t workaround; - - /** - * Private to the FFmpeg AVHWAccel implementation - */ - unsigned report_id; -}; - -/** - * @} - */ - -#endif /* AVCODEC_DXVA2_H */ diff --git a/prebuilts/x86/include/libavcodec/jni.h b/prebuilts/x86/include/libavcodec/jni.h deleted file mode 100644 index dd99e92..0000000 --- a/prebuilts/x86/include/libavcodec/jni.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * JNI public API functions - * - * Copyright (c) 2015-2016 Matthieu Bouron - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_JNI_H -#define AVCODEC_JNI_H - -/* - * Manually set a Java virtual machine which will be used to retrieve the JNI - * environment. Once a Java VM is set it cannot be changed afterwards, meaning - * you can call multiple times av_jni_set_java_vm with the same Java VM pointer - * however it will error out if you try to set a different Java VM. - * - * @param vm Java virtual machine - * @param log_ctx context used for logging, can be NULL - * @return 0 on success, < 0 otherwise - */ -int av_jni_set_java_vm(void *vm, void *log_ctx); - -/* - * Get the Java virtual machine which has been set with av_jni_set_java_vm. - * - * @param vm Java virtual machine - * @return a pointer to the Java virtual machine - */ -void *av_jni_get_java_vm(void *log_ctx); - -#endif /* AVCODEC_JNI_H */ diff --git a/prebuilts/x86/include/libavcodec/mediacodec.h b/prebuilts/x86/include/libavcodec/mediacodec.h deleted file mode 100644 index 4c8545d..0000000 --- a/prebuilts/x86/include/libavcodec/mediacodec.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Android MediaCodec public API - * - * Copyright (c) 2016 Matthieu Bouron - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_MEDIACODEC_H -#define AVCODEC_MEDIACODEC_H - -#include "libavcodec/avcodec.h" - -/** - * This structure holds a reference to a android/view/Surface object that will - * be used as output by the decoder. - * - */ -typedef struct AVMediaCodecContext { - - /** - * android/view/Surface object reference. - */ - void *surface; - -} AVMediaCodecContext; - -/** - * Allocate and initialize a MediaCodec context. - * - * When decoding with MediaCodec is finished, the caller must free the - * MediaCodec context with av_mediacodec_default_free. - * - * @return a pointer to a newly allocated AVMediaCodecContext on success, NULL otherwise - */ -AVMediaCodecContext *av_mediacodec_alloc_context(void); - -/** - * Convenience function that sets up the MediaCodec context. - * - * @param avctx codec context - * @param ctx MediaCodec context to initialize - * @param surface reference to an android/view/Surface - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_default_init(AVCodecContext *avctx, AVMediaCodecContext *ctx, void *surface); - -/** - * This function must be called to free the MediaCodec context initialized with - * av_mediacodec_default_init(). - * - * @param avctx codec context - */ -void av_mediacodec_default_free(AVCodecContext *avctx); - -/** - * Opaque structure representing a MediaCodec buffer to render. - */ -typedef struct MediaCodecBuffer AVMediaCodecBuffer; - -/** - * Release a MediaCodec buffer and render it to the surface that is associated - * with the decoder. This function should only be called once on a given - * buffer, once released the underlying buffer returns to the codec, thus - * subsequent calls to this function will have no effect. - * - * @param buffer the buffer to render - * @param render 1 to release and render the buffer to the surface or 0 to - * discard the buffer - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_release_buffer(AVMediaCodecBuffer *buffer, int render); - -/** - * Release a MediaCodec buffer and render it at the given time to the surface - * that is associated with the decoder. The timestamp must be within one second - * of the current java/lang/System#nanoTime() (which is implemented using - * CLOCK_MONOTONIC on Android). See the Android MediaCodec documentation - * of android/media/MediaCodec#releaseOutputBuffer(int,long) for more details. - * - * @param buffer the buffer to render - * @param time timestamp in nanoseconds of when to render the buffer - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_render_buffer_at_time(AVMediaCodecBuffer *buffer, int64_t time); - -#endif /* AVCODEC_MEDIACODEC_H */ diff --git a/prebuilts/x86/include/libavcodec/packet.h b/prebuilts/x86/include/libavcodec/packet.h deleted file mode 100644 index ca18ae6..0000000 --- a/prebuilts/x86/include/libavcodec/packet.h +++ /dev/null @@ -1,774 +0,0 @@ -/* - * AVPacket public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_PACKET_H -#define AVCODEC_PACKET_H - -#include -#include - -#include "libavutil/attributes.h" -#include "libavutil/buffer.h" -#include "libavutil/dict.h" -#include "libavutil/rational.h" - -#include "libavcodec/version.h" - -/** - * @defgroup lavc_packet AVPacket - * - * Types and functions for working with AVPacket. - * @{ - */ -enum AVPacketSideDataType { - /** - * An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE - * bytes worth of palette. This side data signals that a new palette is - * present. - */ - AV_PKT_DATA_PALETTE, - - /** - * The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format - * that the extradata buffer was changed and the receiving side should - * act upon it appropriately. The new extradata is embedded in the side - * data buffer and should be immediately used for processing the current - * frame or packet. - */ - AV_PKT_DATA_NEW_EXTRADATA, - - /** - * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: - * @code - * u32le param_flags - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) - * s32le channel_count - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) - * u64le channel_layout - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) - * s32le sample_rate - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) - * s32le width - * s32le height - * @endcode - */ - AV_PKT_DATA_PARAM_CHANGE, - - /** - * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of - * structures with info about macroblocks relevant to splitting the - * packet into smaller packets on macroblock edges (e.g. as for RFC 2190). - * That is, it does not necessarily contain info about all macroblocks, - * as long as the distance between macroblocks in the info is smaller - * than the target payload size. - * Each MB info structure is 12 bytes, and is laid out as follows: - * @code - * u32le bit offset from the start of the packet - * u8 current quantizer at the start of the macroblock - * u8 GOB number - * u16le macroblock address within the GOB - * u8 horizontal MV predictor - * u8 vertical MV predictor - * u8 horizontal MV predictor for block number 3 - * u8 vertical MV predictor for block number 3 - * @endcode - */ - AV_PKT_DATA_H263_MB_INFO, - - /** - * This side data should be associated with an audio stream and contains - * ReplayGain information in form of the AVReplayGain struct. - */ - AV_PKT_DATA_REPLAYGAIN, - - /** - * This side data contains a 3x3 transformation matrix describing an affine - * transformation that needs to be applied to the decoded video frames for - * correct presentation. - * - * See libavutil/display.h for a detailed description of the data. - */ - AV_PKT_DATA_DISPLAYMATRIX, - - /** - * This side data should be associated with a video stream and contains - * Stereoscopic 3D information in form of the AVStereo3D struct. - */ - AV_PKT_DATA_STEREO3D, - - /** - * This side data should be associated with an audio stream and corresponds - * to enum AVAudioServiceType. - */ - AV_PKT_DATA_AUDIO_SERVICE_TYPE, - - /** - * This side data contains quality related information from the encoder. - * @code - * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad). - * u8 picture type - * u8 error count - * u16 reserved - * u64le[error count] sum of squared differences between encoder in and output - * @endcode - */ - AV_PKT_DATA_QUALITY_STATS, - - /** - * This side data contains an integer value representing the stream index - * of a "fallback" track. A fallback track indicates an alternate - * track to use when the current track can not be decoded for some reason. - * e.g. no decoder available for codec. - */ - AV_PKT_DATA_FALLBACK_TRACK, - - /** - * This side data corresponds to the AVCPBProperties struct. - */ - AV_PKT_DATA_CPB_PROPERTIES, - - /** - * Recommmends skipping the specified number of samples - * @code - * u32le number of samples to skip from start of this packet - * u32le number of samples to skip from end of this packet - * u8 reason for start skip - * u8 reason for end skip (0=padding silence, 1=convergence) - * @endcode - */ - AV_PKT_DATA_SKIP_SAMPLES, - - /** - * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that - * the packet may contain "dual mono" audio specific to Japanese DTV - * and if it is true, recommends only the selected channel to be used. - * @code - * u8 selected channels (0=mail/left, 1=sub/right, 2=both) - * @endcode - */ - AV_PKT_DATA_JP_DUALMONO, - - /** - * A list of zero terminated key/value strings. There is no end marker for - * the list, so it is required to rely on the side data size to stop. - */ - AV_PKT_DATA_STRINGS_METADATA, - - /** - * Subtitle event position - * @code - * u32le x1 - * u32le y1 - * u32le x2 - * u32le y2 - * @endcode - */ - AV_PKT_DATA_SUBTITLE_POSITION, - - /** - * Data found in BlockAdditional element of matroska container. There is - * no end marker for the data, so it is required to rely on the side data - * size to recognize the end. 8 byte id (as found in BlockAddId) followed - * by data. - */ - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, - - /** - * The optional first identifier line of a WebVTT cue. - */ - AV_PKT_DATA_WEBVTT_IDENTIFIER, - - /** - * The optional settings (rendering instructions) that immediately - * follow the timestamp specifier of a WebVTT cue. - */ - AV_PKT_DATA_WEBVTT_SETTINGS, - - /** - * A list of zero terminated key/value strings. There is no end marker for - * the list, so it is required to rely on the side data size to stop. This - * side data includes updated metadata which appeared in the stream. - */ - AV_PKT_DATA_METADATA_UPDATE, - - /** - * MPEGTS stream ID as uint8_t, this is required to pass the stream ID - * information from the demuxer to the corresponding muxer. - */ - AV_PKT_DATA_MPEGTS_STREAM_ID, - - /** - * Mastering display metadata (based on SMPTE-2086:2014). This metadata - * should be associated with a video stream and contains data in the form - * of the AVMasteringDisplayMetadata struct. - */ - AV_PKT_DATA_MASTERING_DISPLAY_METADATA, - - /** - * This side data should be associated with a video stream and corresponds - * to the AVSphericalMapping structure. - */ - AV_PKT_DATA_SPHERICAL, - - /** - * Content light level (based on CTA-861.3). This metadata should be - * associated with a video stream and contains data in the form of the - * AVContentLightMetadata struct. - */ - AV_PKT_DATA_CONTENT_LIGHT_LEVEL, - - /** - * ATSC A53 Part 4 Closed Captions. This metadata should be associated with - * a video stream. A53 CC bitstream is stored as uint8_t in AVPacketSideData.data. - * The number of bytes of CC data is AVPacketSideData.size. - */ - AV_PKT_DATA_A53_CC, - - /** - * This side data is encryption initialization data. - * The format is not part of ABI, use av_encryption_init_info_* methods to - * access. - */ - AV_PKT_DATA_ENCRYPTION_INIT_INFO, - - /** - * This side data contains encryption info for how to decrypt the packet. - * The format is not part of ABI, use av_encryption_info_* methods to access. - */ - AV_PKT_DATA_ENCRYPTION_INFO, - - /** - * Active Format Description data consisting of a single byte as specified - * in ETSI TS 101 154 using AVActiveFormatDescription enum. - */ - AV_PKT_DATA_AFD, - - /** - * Producer Reference Time data corresponding to the AVProducerReferenceTime struct, - * usually exported by some encoders (on demand through the prft flag set in the - * AVCodecContext export_side_data field). - */ - AV_PKT_DATA_PRFT, - - /** - * ICC profile data consisting of an opaque octet buffer following the - * format described by ISO 15076-1. - */ - AV_PKT_DATA_ICC_PROFILE, - - /** - * DOVI configuration - * ref: - * dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2, section 2.2 - * dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2, section 3.3 - * Tags are stored in struct AVDOVIDecoderConfigurationRecord. - */ - AV_PKT_DATA_DOVI_CONF, - - /** - * Timecode which conforms to SMPTE ST 12-1:2014. The data is an array of 4 uint32_t - * where the first uint32_t describes how many (1-3) of the other timecodes are used. - * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() - * function in libavutil/timecode.h. - */ - AV_PKT_DATA_S12M_TIMECODE, - - /** - * The number of side data types. - * This is not part of the public API/ABI in the sense that it may - * change when new side data types are added. - * This must stay the last enum value. - * If its value becomes huge, some code using it - * needs to be updated as it assumes it to be smaller than other limits. - */ - AV_PKT_DATA_NB -}; - -#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED - -typedef struct AVPacketSideData { - uint8_t *data; -#if FF_API_BUFFER_SIZE_T - int size; -#else - size_t size; -#endif - enum AVPacketSideDataType type; -} AVPacketSideData; - -/** - * This structure stores compressed data. It is typically exported by demuxers - * and then passed as input to decoders, or received as output from encoders and - * then passed to muxers. - * - * For video, it should typically contain one compressed frame. For audio it may - * contain several compressed frames. Encoders are allowed to output empty - * packets, with no compressed data, containing only side data - * (e.g. to update some stream parameters at the end of encoding). - * - * The semantics of data ownership depends on the buf field. - * If it is set, the packet data is dynamically allocated and is - * valid indefinitely until a call to av_packet_unref() reduces the - * reference count to 0. - * - * If the buf field is not set av_packet_ref() would make a copy instead - * of increasing the reference count. - * - * The side data is always allocated with av_malloc(), copied by - * av_packet_ref() and freed by av_packet_unref(). - * - * sizeof(AVPacket) being a part of the public ABI is deprecated. once - * av_init_packet() is removed, new packets will only be able to be allocated - * with av_packet_alloc(), and new fields may be added to the end of the struct - * with a minor bump. - * - * @see av_packet_alloc - * @see av_packet_ref - * @see av_packet_unref - */ -typedef struct AVPacket { - /** - * A reference to the reference-counted buffer where the packet data is - * stored. - * May be NULL, then the packet data is not reference-counted. - */ - AVBufferRef *buf; - /** - * Presentation timestamp in AVStream->time_base units; the time at which - * the decompressed packet will be presented to the user. - * Can be AV_NOPTS_VALUE if it is not stored in the file. - * pts MUST be larger or equal to dts as presentation cannot happen before - * decompression, unless one wants to view hex dumps. Some formats misuse - * the terms dts and pts/cts to mean something different. Such timestamps - * must be converted to true pts/dts before they are stored in AVPacket. - */ - int64_t pts; - /** - * Decompression timestamp in AVStream->time_base units; the time at which - * the packet is decompressed. - * Can be AV_NOPTS_VALUE if it is not stored in the file. - */ - int64_t dts; - uint8_t *data; - int size; - int stream_index; - /** - * A combination of AV_PKT_FLAG values - */ - int flags; - /** - * Additional packet data that can be provided by the container. - * Packet can contain several types of side information. - */ - AVPacketSideData *side_data; - int side_data_elems; - - /** - * Duration of this packet in AVStream->time_base units, 0 if unknown. - * Equals next_pts - this_pts in presentation order. - */ - int64_t duration; - - int64_t pos; ///< byte position in stream, -1 if unknown - -#if FF_API_CONVERGENCE_DURATION - /** - * @deprecated Same as the duration field, but as int64_t. This was required - * for Matroska subtitles, whose duration values could overflow when the - * duration field was still an int. - */ - attribute_deprecated - int64_t convergence_duration; -#endif -} AVPacket; - -#if FF_API_INIT_PACKET -attribute_deprecated -typedef struct AVPacketList { - AVPacket pkt; - struct AVPacketList *next; -} AVPacketList; -#endif - -#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe -#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted -/** - * Flag is used to discard packets which are required to maintain valid - * decoder state but are not required for output and should be dropped - * after decoding. - **/ -#define AV_PKT_FLAG_DISCARD 0x0004 -/** - * The packet comes from a trusted source. - * - * Otherwise-unsafe constructs such as arbitrary pointers to data - * outside the packet may be followed. - */ -#define AV_PKT_FLAG_TRUSTED 0x0008 -/** - * Flag is used to indicate packets that contain frames that can - * be discarded by the decoder. I.e. Non-reference frames. - */ -#define AV_PKT_FLAG_DISPOSABLE 0x0010 - -enum AVSideDataParamChangeFlags { - AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001, - AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002, - AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004, - AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008, -}; - -/** - * Allocate an AVPacket and set its fields to default values. The resulting - * struct must be freed using av_packet_free(). - * - * @return An AVPacket filled with default values or NULL on failure. - * - * @note this only allocates the AVPacket itself, not the data buffers. Those - * must be allocated through other means such as av_new_packet. - * - * @see av_new_packet - */ -AVPacket *av_packet_alloc(void); - -/** - * Create a new packet that references the same data as src. - * - * This is a shortcut for av_packet_alloc()+av_packet_ref(). - * - * @return newly created AVPacket on success, NULL on error. - * - * @see av_packet_alloc - * @see av_packet_ref - */ -AVPacket *av_packet_clone(const AVPacket *src); - -/** - * Free the packet, if the packet is reference counted, it will be - * unreferenced first. - * - * @param pkt packet to be freed. The pointer will be set to NULL. - * @note passing NULL is a no-op. - */ -void av_packet_free(AVPacket **pkt); - -#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 - -/** - * Allocate the payload of a packet and initialize its fields with - * default values. - * - * @param pkt packet - * @param size wanted payload size - * @return 0 if OK, AVERROR_xxx otherwise - */ -int av_new_packet(AVPacket *pkt, int size); - -/** - * Reduce packet size, correctly zeroing padding - * - * @param pkt packet - * @param size new size - */ -void av_shrink_packet(AVPacket *pkt, int size); - -/** - * Increase packet size, correctly zeroing padding - * - * @param pkt packet - * @param grow_by number of bytes by which to increase the size of the packet - */ -int av_grow_packet(AVPacket *pkt, int grow_by); - -/** - * Initialize a reference-counted packet from av_malloc()ed data. - * - * @param pkt packet to be initialized. This function will set the data, size, - * and buf fields, all others are left untouched. - * @param data Data allocated by av_malloc() to be used as packet data. If this - * function returns successfully, the data is owned by the underlying AVBuffer. - * The caller may not access the data through other means. - * @param size size of data in bytes, without the padding. I.e. the full buffer - * size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE. - * - * @return 0 on success, a negative AVERROR on error - */ -int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size); - -#if FF_API_AVPACKET_OLD_API -/** - * @warning This is a hack - the packet memory allocation stuff is broken. The - * packet is allocated if it was not really allocated. - * - * @deprecated Use av_packet_ref or av_packet_make_refcounted - */ -attribute_deprecated -int av_dup_packet(AVPacket *pkt); -/** - * Copy packet, including contents - * - * @return 0 on success, negative AVERROR on fail - * - * @deprecated Use av_packet_ref - */ -attribute_deprecated -int av_copy_packet(AVPacket *dst, const AVPacket *src); - -/** - * Copy packet side data - * - * @return 0 on success, negative AVERROR on fail - * - * @deprecated Use av_packet_copy_props - */ -attribute_deprecated -int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src); - -/** - * Free a packet. - * - * @deprecated Use av_packet_unref - * - * @param pkt packet to free - */ -attribute_deprecated -void av_free_packet(AVPacket *pkt); -#endif -/** - * Allocate new information of a packet. - * - * @param pkt packet - * @param type side information type - * @param size side information size - * @return pointer to fresh allocated data or NULL otherwise - */ -uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, -#if FF_API_BUFFER_SIZE_T - int size); -#else - size_t size); -#endif - -/** - * Wrap an existing array as a packet side data. - * - * @param pkt packet - * @param type side information type - * @param data the side data array. It must be allocated with the av_malloc() - * family of functions. The ownership of the data is transferred to - * pkt. - * @param size side information size - * @return a non-negative number on success, a negative AVERROR code on - * failure. On failure, the packet is unchanged and the data remains - * owned by the caller. - */ -int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - uint8_t *data, size_t size); - -/** - * Shrink the already allocated side data buffer - * - * @param pkt packet - * @param type side information type - * @param size new side information size - * @return 0 on success, < 0 on failure - */ -int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, -#if FF_API_BUFFER_SIZE_T - int size); -#else - size_t size); -#endif - -/** - * Get side information from packet. - * - * @param pkt packet - * @param type desired side information type - * @param size If supplied, *size will be set to the size of the side data - * or to zero if the desired side data is not present. - * @return pointer to data if present or NULL otherwise - */ -uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, -#if FF_API_BUFFER_SIZE_T - int *size); -#else - size_t *size); -#endif - -#if FF_API_MERGE_SD_API -attribute_deprecated -int av_packet_merge_side_data(AVPacket *pkt); - -attribute_deprecated -int av_packet_split_side_data(AVPacket *pkt); -#endif - -const char *av_packet_side_data_name(enum AVPacketSideDataType type); - -/** - * Pack a dictionary for use in side_data. - * - * @param dict The dictionary to pack. - * @param size pointer to store the size of the returned data - * @return pointer to data if successful, NULL otherwise - */ -#if FF_API_BUFFER_SIZE_T -uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size); -#else -uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size); -#endif -/** - * Unpack a dictionary from side_data. - * - * @param data data from side_data - * @param size size of the data - * @param dict the metadata storage dictionary - * @return 0 on success, < 0 on failure - */ -#if FF_API_BUFFER_SIZE_T -int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict); -#else -int av_packet_unpack_dictionary(const uint8_t *data, size_t size, - AVDictionary **dict); -#endif - -/** - * Convenience function to free all the side data stored. - * All the other fields stay untouched. - * - * @param pkt packet - */ -void av_packet_free_side_data(AVPacket *pkt); - -/** - * Setup a new reference to the data described by a given packet - * - * If src is reference-counted, setup dst as a new reference to the - * buffer in src. Otherwise allocate a new buffer in dst and copy the - * data from src into it. - * - * All the other fields are copied from src. - * - * @see av_packet_unref - * - * @param dst Destination packet. Will be completely overwritten. - * @param src Source packet - * - * @return 0 on success, a negative AVERROR on error. On error, dst - * will be blank (as if returned by av_packet_alloc()). - */ -int av_packet_ref(AVPacket *dst, const AVPacket *src); - -/** - * Wipe the packet. - * - * Unreference the buffer referenced by the packet and reset the - * remaining packet fields to their default values. - * - * @param pkt The packet to be unreferenced. - */ -void av_packet_unref(AVPacket *pkt); - -/** - * Move every field in src to dst and reset src. - * - * @see av_packet_unref - * - * @param src Source packet, will be reset - * @param dst Destination packet - */ -void av_packet_move_ref(AVPacket *dst, AVPacket *src); - -/** - * Copy only "properties" fields from src to dst. - * - * Properties for the purpose of this function are all the fields - * beside those related to the packet data (buf, data, size) - * - * @param dst Destination packet - * @param src Source packet - * - * @return 0 on success AVERROR on failure. - */ -int av_packet_copy_props(AVPacket *dst, const AVPacket *src); - -/** - * Ensure the data described by a given packet is reference counted. - * - * @note This function does not ensure that the reference will be writable. - * Use av_packet_make_writable instead for that purpose. - * - * @see av_packet_ref - * @see av_packet_make_writable - * - * @param pkt packet whose data should be made reference counted. - * - * @return 0 on success, a negative AVERROR on error. On failure, the - * packet is unchanged. - */ -int av_packet_make_refcounted(AVPacket *pkt); - -/** - * Create a writable reference for the data described by a given packet, - * avoiding data copy if possible. - * - * @param pkt Packet whose data should be made writable. - * - * @return 0 on success, a negative AVERROR on failure. On failure, the - * packet is unchanged. - */ -int av_packet_make_writable(AVPacket *pkt); - -/** - * Convert valid timing fields (timestamps / durations) in a packet from one - * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be - * ignored. - * - * @param pkt packet on which the conversion will be performed - * @param tb_src source timebase, in which the timing fields in pkt are - * expressed - * @param tb_dst destination timebase, to which the timing fields will be - * converted - */ -void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst); - -/** - * @} - */ - -#endif // AVCODEC_PACKET_H diff --git a/prebuilts/x86/include/libavcodec/qsv.h b/prebuilts/x86/include/libavcodec/qsv.h deleted file mode 100644 index b77158e..0000000 --- a/prebuilts/x86/include/libavcodec/qsv.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Intel MediaSDK QSV public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_QSV_H -#define AVCODEC_QSV_H - -#include - -#include "libavutil/buffer.h" - -/** - * This struct is used for communicating QSV parameters between libavcodec and - * the caller. It is managed by the caller and must be assigned to - * AVCodecContext.hwaccel_context. - * - decoding: hwaccel_context must be set on return from the get_format() - * callback - * - encoding: hwaccel_context must be set before avcodec_open2() - */ -typedef struct AVQSVContext { - /** - * If non-NULL, the session to use for encoding or decoding. - * Otherwise, libavcodec will try to create an internal session. - */ - mfxSession session; - - /** - * The IO pattern to use. - */ - int iopattern; - - /** - * Extra buffers to pass to encoder or decoder initialization. - */ - mfxExtBuffer **ext_buffers; - int nb_ext_buffers; - - /** - * Encoding only. If this field is set to non-zero by the caller, libavcodec - * will create an mfxExtOpaqueSurfaceAlloc extended buffer and pass it to - * the encoder initialization. This only makes sense if iopattern is also - * set to MFX_IOPATTERN_IN_OPAQUE_MEMORY. - * - * The number of allocated opaque surfaces will be the sum of the number - * required by the encoder and the user-provided value nb_opaque_surfaces. - * The array of the opaque surfaces will be exported to the caller through - * the opaque_surfaces field. - */ - int opaque_alloc; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. Before - * calling avcodec_open2(), the caller should set this field to the number - * of extra opaque surfaces to allocate beyond what is required by the - * encoder. - * - * On return from avcodec_open2(), this field will be set by libavcodec to - * the total number of allocated opaque surfaces. - */ - int nb_opaque_surfaces; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. On return - * from avcodec_open2(), this field will be used by libavcodec to export the - * array of the allocated opaque surfaces to the caller, so they can be - * passed to other parts of the pipeline. - * - * The buffer reference exported here is owned and managed by libavcodec, - * the callers should make their own reference with av_buffer_ref() and free - * it with av_buffer_unref() when it is no longer needed. - * - * The buffer data is an nb_opaque_surfaces-sized array of mfxFrameSurface1. - */ - AVBufferRef *opaque_surfaces; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. On return - * from avcodec_open2(), this field will be set to the surface type used in - * the opaque allocation request. - */ - int opaque_alloc_type; -} AVQSVContext; - -/** - * Allocate a new context. - * - * It must be freed by the caller with av_free(). - */ -AVQSVContext *av_qsv_alloc_context(void); - -#endif /* AVCODEC_QSV_H */ diff --git a/prebuilts/x86/include/libavcodec/vaapi.h b/prebuilts/x86/include/libavcodec/vaapi.h deleted file mode 100644 index 2cf7da5..0000000 --- a/prebuilts/x86/include/libavcodec/vaapi.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Video Acceleration API (shared data between FFmpeg and the video player) - * HW decode acceleration for MPEG-2, MPEG-4, H.264 and VC-1 - * - * Copyright (C) 2008-2009 Splitted-Desktop Systems - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VAAPI_H -#define AVCODEC_VAAPI_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_vaapi - * Public libavcodec VA API header. - */ - -#include -#include "libavutil/attributes.h" -#include "version.h" - -#if FF_API_STRUCT_VAAPI_CONTEXT - -/** - * @defgroup lavc_codec_hwaccel_vaapi VA API Decoding - * @ingroup lavc_codec_hwaccel - * @{ - */ - -/** - * This structure is used to share data between the FFmpeg library and - * the client video application. - * This shall be zero-allocated and available as - * AVCodecContext.hwaccel_context. All user members can be set once - * during initialization or through each AVCodecContext.get_buffer() - * function call. In any case, they must be valid prior to calling - * decoding functions. - * - * Deprecated: use AVCodecContext.hw_frames_ctx instead. - */ -struct attribute_deprecated vaapi_context { - /** - * Window system dependent data - * - * - encoding: unused - * - decoding: Set by user - */ - void *display; - - /** - * Configuration ID - * - * - encoding: unused - * - decoding: Set by user - */ - uint32_t config_id; - - /** - * Context ID (video decode pipeline) - * - * - encoding: unused - * - decoding: Set by user - */ - uint32_t context_id; -}; - -/* @} */ - -#endif /* FF_API_STRUCT_VAAPI_CONTEXT */ - -#endif /* AVCODEC_VAAPI_H */ diff --git a/prebuilts/x86/include/libavcodec/vdpau.h b/prebuilts/x86/include/libavcodec/vdpau.h deleted file mode 100644 index 4d99943..0000000 --- a/prebuilts/x86/include/libavcodec/vdpau.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * The Video Decode and Presentation API for UNIX (VDPAU) is used for - * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1. - * - * Copyright (C) 2008 NVIDIA - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VDPAU_H -#define AVCODEC_VDPAU_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_vdpau - * Public libavcodec VDPAU header. - */ - - -/** - * @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer - * @ingroup lavc_codec_hwaccel - * - * VDPAU hardware acceleration has two modules - * - VDPAU decoding - * - VDPAU presentation - * - * The VDPAU decoding module parses all headers using FFmpeg - * parsing mechanisms and uses VDPAU for the actual decoding. - * - * As per the current implementation, the actual decoding - * and rendering (API calls) are done as part of the VDPAU - * presentation (vo_vdpau.c) module. - * - * @{ - */ - -#include - -#include "libavutil/avconfig.h" -#include "libavutil/attributes.h" - -#include "avcodec.h" -#include "version.h" - -struct AVCodecContext; -struct AVFrame; - -typedef int (*AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *, - const VdpPictureInfo *, uint32_t, - const VdpBitstreamBuffer *); - -/** - * This structure is used to share data between the libavcodec library and - * the client video application. - * The user shall allocate the structure via the av_alloc_vdpau_hwaccel - * function and make it available as - * AVCodecContext.hwaccel_context. Members can be set by the user once - * during initialization or through each AVCodecContext.get_buffer() - * function call. In any case, they must be valid prior to calling - * decoding functions. - * - * The size of this structure is not a part of the public ABI and must not - * be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an - * AVVDPAUContext. - */ -typedef struct AVVDPAUContext { - /** - * VDPAU decoder handle - * - * Set by user. - */ - VdpDecoder decoder; - - /** - * VDPAU decoder render callback - * - * Set by the user. - */ - VdpDecoderRender *render; - - AVVDPAU_Render2 render2; -} AVVDPAUContext; - -/** - * @brief allocation function for AVVDPAUContext - * - * Allows extending the struct without breaking API/ABI - */ -AVVDPAUContext *av_alloc_vdpaucontext(void); - -AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *); -void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2); - -/** - * Associate a VDPAU device with a codec context for hardware acceleration. - * This function is meant to be called from the get_format() codec callback, - * or earlier. It can also be called after avcodec_flush_buffers() to change - * the underlying VDPAU device mid-stream (e.g. to recover from non-transparent - * display preemption). - * - * @note get_format() must return AV_PIX_FMT_VDPAU if this function completes - * successfully. - * - * @param avctx decoding context whose get_format() callback is invoked - * @param device VDPAU device handle to use for hardware acceleration - * @param get_proc_address VDPAU device driver - * @param flags zero of more OR'd AV_HWACCEL_FLAG_* flags - * - * @return 0 on success, an AVERROR code on failure. - */ -int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device, - VdpGetProcAddress *get_proc_address, unsigned flags); - -/** - * Gets the parameters to create an adequate VDPAU video surface for the codec - * context using VDPAU hardware decoding acceleration. - * - * @note Behavior is undefined if the context was not successfully bound to a - * VDPAU device using av_vdpau_bind_context(). - * - * @param avctx the codec context being used for decoding the stream - * @param type storage space for the VDPAU video surface chroma type - * (or NULL to ignore) - * @param width storage space for the VDPAU video surface pixel width - * (or NULL to ignore) - * @param height storage space for the VDPAU video surface pixel height - * (or NULL to ignore) - * - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type, - uint32_t *width, uint32_t *height); - -/** - * Allocate an AVVDPAUContext. - * - * @return Newly-allocated AVVDPAUContext or NULL on failure. - */ -AVVDPAUContext *av_vdpau_alloc_context(void); - -#if FF_API_VDPAU_PROFILE -/** - * Get a decoder profile that should be used for initializing a VDPAU decoder. - * Should be called from the AVCodecContext.get_format() callback. - * - * @deprecated Use av_vdpau_bind_context() instead. - * - * @param avctx the codec context being used for decoding the stream - * @param profile a pointer into which the result will be written on success. - * The contents of profile are undefined if this function returns - * an error. - * - * @return 0 on success (non-negative), a negative AVERROR on failure. - */ -attribute_deprecated -int av_vdpau_get_profile(AVCodecContext *avctx, VdpDecoderProfile *profile); -#endif - -/* @}*/ - -#endif /* AVCODEC_VDPAU_H */ diff --git a/prebuilts/x86/include/libavcodec/version.h b/prebuilts/x86/include/libavcodec/version.h deleted file mode 100644 index cfdde46..0000000 --- a/prebuilts/x86/include/libavcodec/version.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VERSION_H -#define AVCODEC_VERSION_H - -/** - * @file - * @ingroup libavc - * Libavcodec version macros. - */ - -#include "libavutil/version.h" - -#define LIBAVCODEC_VERSION_MAJOR 58 -#define LIBAVCODEC_VERSION_MINOR 134 -#define LIBAVCODEC_VERSION_MICRO 100 - -#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ - LIBAVCODEC_VERSION_MINOR, \ - LIBAVCODEC_VERSION_MICRO) -#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \ - LIBAVCODEC_VERSION_MINOR, \ - LIBAVCODEC_VERSION_MICRO) -#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT - -#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - */ - -#ifndef FF_API_AVCTX_TIMEBASE -#define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CODED_FRAME -#define FF_API_CODED_FRAME (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_SIDEDATA_ONLY_PKT -#define FF_API_SIDEDATA_ONLY_PKT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_VDPAU_PROFILE -#define FF_API_VDPAU_PROFILE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CONVERGENCE_DURATION -#define FF_API_CONVERGENCE_DURATION (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVPICTURE -#define FF_API_AVPICTURE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVPACKET_OLD_API -#define FF_API_AVPACKET_OLD_API (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_RTP_CALLBACK -#define FF_API_RTP_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_VBV_DELAY -#define FF_API_VBV_DELAY (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CODER_TYPE -#define FF_API_CODER_TYPE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_STAT_BITS -#define FF_API_STAT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_PRIVATE_OPT -#define FF_API_PRIVATE_OPT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_ASS_TIMING -#define FF_API_ASS_TIMING (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_BSF -#define FF_API_OLD_BSF (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_COPY_CONTEXT -#define FF_API_COPY_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_GET_CONTEXT_DEFAULTS -#define FF_API_GET_CONTEXT_DEFAULTS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_NVENC_OLD_NAME -#define FF_API_NVENC_OLD_NAME (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_STRUCT_VAAPI_CONTEXT -#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_MERGE_SD_API -#define FF_API_MERGE_SD_API (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_TAG_STRING -#define FF_API_TAG_STRING (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_GETCHROMA -#define FF_API_GETCHROMA (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CODEC_GET_SET -#define FF_API_CODEC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_USER_VISIBLE_AVHWACCEL -#define FF_API_USER_VISIBLE_AVHWACCEL (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LOCKMGR -#define FF_API_LOCKMGR (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_NEXT -#define FF_API_NEXT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_UNSANITIZED_BITRATES -#define FF_API_UNSANITIZED_BITRATES (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OPENH264_SLICE_MODE -#define FF_API_OPENH264_SLICE_MODE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OPENH264_CABAC -#define FF_API_OPENH264_CABAC (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_UNUSED_CODEC_CAPS -#define FF_API_UNUSED_CODEC_CAPS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVPRIV_PUT_BITS -#define FF_API_AVPRIV_PUT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_ENCDEC -#define FF_API_OLD_ENCDEC (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVCODEC_PIX_FMT -#define FF_API_AVCODEC_PIX_FMT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_MPV_RC_STRATEGY -#define FF_API_MPV_RC_STRATEGY (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_PARSER_CHANGE -#define FF_API_PARSER_CHANGE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_THREAD_SAFE_CALLBACKS -#define FF_API_THREAD_SAFE_CALLBACKS (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_DEBUG_MV -#define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_GET_FRAME_CLASS -#define FF_API_GET_FRAME_CLASS (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_AUTO_THREADS -#define FF_API_AUTO_THREADS (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_INIT_PACKET -#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 60) -#endif - -#endif /* AVCODEC_VERSION_H */ diff --git a/prebuilts/x86/include/libavcodec/videotoolbox.h b/prebuilts/x86/include/libavcodec/videotoolbox.h deleted file mode 100644 index af2db0d..0000000 --- a/prebuilts/x86/include/libavcodec/videotoolbox.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Videotoolbox hardware acceleration - * - * copyright (c) 2012 Sebastien Zwickert - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VIDEOTOOLBOX_H -#define AVCODEC_VIDEOTOOLBOX_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_videotoolbox - * Public libavcodec Videotoolbox header. - */ - -#include - -#define Picture QuickdrawPicture -#include -#undef Picture - -#include "libavcodec/avcodec.h" - -/** - * This struct holds all the information that needs to be passed - * between the caller and libavcodec for initializing Videotoolbox decoding. - * Its size is not a part of the public ABI, it must be allocated with - * av_videotoolbox_alloc_context() and freed with av_free(). - */ -typedef struct AVVideotoolboxContext { - /** - * Videotoolbox decompression session object. - * Created and freed the caller. - */ - VTDecompressionSessionRef session; - - /** - * The output callback that must be passed to the session. - * Set by av_videottoolbox_default_init() - */ - VTDecompressionOutputCallback output_callback; - - /** - * CVPixelBuffer Format Type that Videotoolbox will use for decoded frames. - * set by the caller. If this is set to 0, then no specific format is - * requested from the decoder, and its native format is output. - */ - OSType cv_pix_fmt_type; - - /** - * CoreMedia Format Description that Videotoolbox will use to create the decompression session. - * Set by the caller. - */ - CMVideoFormatDescriptionRef cm_fmt_desc; - - /** - * CoreMedia codec type that Videotoolbox will use to create the decompression session. - * Set by the caller. - */ - int cm_codec_type; -} AVVideotoolboxContext; - -/** - * Allocate and initialize a Videotoolbox context. - * - * This function should be called from the get_format() callback when the caller - * selects the AV_PIX_FMT_VIDETOOLBOX format. The caller must then create - * the decoder object (using the output callback provided by libavcodec) that - * will be used for Videotoolbox-accelerated decoding. - * - * When decoding with Videotoolbox is finished, the caller must destroy the decoder - * object and free the Videotoolbox context using av_free(). - * - * @return the newly allocated context or NULL on failure - */ -AVVideotoolboxContext *av_videotoolbox_alloc_context(void); - -/** - * This is a convenience function that creates and sets up the Videotoolbox context using - * an internal implementation. - * - * @param avctx the corresponding codec context - * - * @return >= 0 on success, a negative AVERROR code on failure - */ -int av_videotoolbox_default_init(AVCodecContext *avctx); - -/** - * This is a convenience function that creates and sets up the Videotoolbox context using - * an internal implementation. - * - * @param avctx the corresponding codec context - * @param vtctx the Videotoolbox context to use - * - * @return >= 0 on success, a negative AVERROR code on failure - */ -int av_videotoolbox_default_init2(AVCodecContext *avctx, AVVideotoolboxContext *vtctx); - -/** - * This function must be called to free the Videotoolbox context initialized with - * av_videotoolbox_default_init(). - * - * @param avctx the corresponding codec context - */ -void av_videotoolbox_default_free(AVCodecContext *avctx); - -/** - * @} - */ - -#endif /* AVCODEC_VIDEOTOOLBOX_H */ diff --git a/prebuilts/x86/include/libavcodec/vorbis_parser.h b/prebuilts/x86/include/libavcodec/vorbis_parser.h deleted file mode 100644 index 789932a..0000000 --- a/prebuilts/x86/include/libavcodec/vorbis_parser.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * A public API for Vorbis parsing - * - * Determines the duration for each packet. - */ - -#ifndef AVCODEC_VORBIS_PARSER_H -#define AVCODEC_VORBIS_PARSER_H - -#include - -typedef struct AVVorbisParseContext AVVorbisParseContext; - -/** - * Allocate and initialize the Vorbis parser using headers in the extradata. - */ -AVVorbisParseContext *av_vorbis_parse_init(const uint8_t *extradata, - int extradata_size); - -/** - * Free the parser and everything associated with it. - */ -void av_vorbis_parse_free(AVVorbisParseContext **s); - -#define VORBIS_FLAG_HEADER 0x00000001 -#define VORBIS_FLAG_COMMENT 0x00000002 -#define VORBIS_FLAG_SETUP 0x00000004 - -/** - * Get the duration for a Vorbis packet. - * - * If @p flags is @c NULL, - * special frames are considered invalid. - * - * @param s Vorbis parser context - * @param buf buffer containing a Vorbis frame - * @param buf_size size of the buffer - * @param flags flags for special frames - */ -int av_vorbis_parse_frame_flags(AVVorbisParseContext *s, const uint8_t *buf, - int buf_size, int *flags); - -/** - * Get the duration for a Vorbis packet. - * - * @param s Vorbis parser context - * @param buf buffer containing a Vorbis frame - * @param buf_size size of the buffer - */ -int av_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf, - int buf_size); - -void av_vorbis_parse_reset(AVVorbisParseContext *s); - -#endif /* AVCODEC_VORBIS_PARSER_H */ diff --git a/prebuilts/x86/include/libavcodec/xvmc.h b/prebuilts/x86/include/libavcodec/xvmc.h deleted file mode 100644 index 465ee78..0000000 --- a/prebuilts/x86/include/libavcodec/xvmc.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (C) 2003 Ivan Kalvachev - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_XVMC_H -#define AVCODEC_XVMC_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_xvmc - * Public libavcodec XvMC header. - */ - -#include - -#include "libavutil/attributes.h" -#include "version.h" -#include "avcodec.h" - -/** - * @defgroup lavc_codec_hwaccel_xvmc XvMC - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct - the number is 1337 speak for the letters IDCT MCo (motion compensation) */ - -struct attribute_deprecated xvmc_pix_fmt { - /** The field contains the special constant value AV_XVMC_ID. - It is used as a test that the application correctly uses the API, - and that there is no corruption caused by pixel routines. - - application - set during initialization - - libavcodec - unchanged - */ - int xvmc_id; - - /** Pointer to the block array allocated by XvMCCreateBlocks(). - The array has to be freed by XvMCDestroyBlocks(). - Each group of 64 values represents one data block of differential - pixel information (in MoCo mode) or coefficients for IDCT. - - application - set the pointer during initialization - - libavcodec - fills coefficients/pixel data into the array - */ - short* data_blocks; - - /** Pointer to the macroblock description array allocated by - XvMCCreateMacroBlocks() and freed by XvMCDestroyMacroBlocks(). - - application - set the pointer during initialization - - libavcodec - fills description data into the array - */ - XvMCMacroBlock* mv_blocks; - - /** Number of macroblock descriptions that can be stored in the mv_blocks - array. - - application - set during initialization - - libavcodec - unchanged - */ - int allocated_mv_blocks; - - /** Number of blocks that can be stored at once in the data_blocks array. - - application - set during initialization - - libavcodec - unchanged - */ - int allocated_data_blocks; - - /** Indicate that the hardware would interpret data_blocks as IDCT - coefficients and perform IDCT on them. - - application - set during initialization - - libavcodec - unchanged - */ - int idct; - - /** In MoCo mode it indicates that intra macroblocks are assumed to be in - unsigned format; same as the XVMC_INTRA_UNSIGNED flag. - - application - set during initialization - - libavcodec - unchanged - */ - int unsigned_intra; - - /** Pointer to the surface allocated by XvMCCreateSurface(). - It has to be freed by XvMCDestroySurface() on application exit. - It identifies the frame and its state on the video hardware. - - application - set during initialization - - libavcodec - unchanged - */ - XvMCSurface* p_surface; - -/** Set by the decoder before calling ff_draw_horiz_band(), - needed by the XvMCRenderSurface function. */ -//@{ - /** Pointer to the surface used as past reference - - application - unchanged - - libavcodec - set - */ - XvMCSurface* p_past_surface; - - /** Pointer to the surface used as future reference - - application - unchanged - - libavcodec - set - */ - XvMCSurface* p_future_surface; - - /** top/bottom field or frame - - application - unchanged - - libavcodec - set - */ - unsigned int picture_structure; - - /** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence - - application - unchanged - - libavcodec - set - */ - unsigned int flags; -//}@ - - /** Number of macroblock descriptions in the mv_blocks array - that have already been passed to the hardware. - - application - zeroes it on get_buffer(). - A successful ff_draw_horiz_band() may increment it - with filled_mb_block_num or zero both. - - libavcodec - unchanged - */ - int start_mv_blocks_num; - - /** Number of new macroblock descriptions in the mv_blocks array (after - start_mv_blocks_num) that are filled by libavcodec and have to be - passed to the hardware. - - application - zeroes it on get_buffer() or after successful - ff_draw_horiz_band(). - - libavcodec - increment with one of each stored MB - */ - int filled_mv_blocks_num; - - /** Number of the next free data block; one data block consists of - 64 short values in the data_blocks array. - All blocks before this one have already been claimed by placing their - position into the corresponding block description structure field, - that are part of the mv_blocks array. - - application - zeroes it on get_buffer(). - A successful ff_draw_horiz_band() may zero it together - with start_mb_blocks_num. - - libavcodec - each decoded macroblock increases it by the number - of coded blocks it contains. - */ - int next_free_data_block_num; -}; - -/** - * @} - */ - -#endif /* AVCODEC_XVMC_H */ diff --git a/prebuilts/x86/include/libavdevice/avdevice.h b/prebuilts/x86/include/libavdevice/avdevice.h deleted file mode 100644 index 85a4dcc..0000000 --- a/prebuilts/x86/include/libavdevice/avdevice.h +++ /dev/null @@ -1,519 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVDEVICE_AVDEVICE_H -#define AVDEVICE_AVDEVICE_H - -#include "version.h" - -/** - * @file - * @ingroup lavd - * Main libavdevice API header - */ - -/** - * @defgroup lavd libavdevice - * Special devices muxing/demuxing library. - * - * Libavdevice is a complementary library to @ref libavf "libavformat". It - * provides various "special" platform-specific muxers and demuxers, e.g. for - * grabbing devices, audio capture and playback etc. As a consequence, the - * (de)muxers in libavdevice are of the AVFMT_NOFILE type (they use their own - * I/O functions). The filename passed to avformat_open_input() often does not - * refer to an actually existing file, but has some special device-specific - * meaning - e.g. for xcbgrab it is the display name. - * - * To use libavdevice, simply call avdevice_register_all() to register all - * compiled muxers and demuxers. They all use standard libavformat API. - * - * @{ - */ - -#include "libavutil/log.h" -#include "libavutil/opt.h" -#include "libavutil/dict.h" -#include "libavformat/avformat.h" - -/** - * Return the LIBAVDEVICE_VERSION_INT constant. - */ -unsigned avdevice_version(void); - -/** - * Return the libavdevice build-time configuration. - */ -const char *avdevice_configuration(void); - -/** - * Return the libavdevice license. - */ -const char *avdevice_license(void); - -/** - * Initialize libavdevice and register all the input and output devices. - */ -void avdevice_register_all(void); - -/** - * Audio input devices iterator. - * - * If d is NULL, returns the first registered input audio/video device, - * if d is non-NULL, returns the next registered input audio/video device after d - * or NULL if d is the last one. - */ -AVInputFormat *av_input_audio_device_next(AVInputFormat *d); - -/** - * Video input devices iterator. - * - * If d is NULL, returns the first registered input audio/video device, - * if d is non-NULL, returns the next registered input audio/video device after d - * or NULL if d is the last one. - */ -AVInputFormat *av_input_video_device_next(AVInputFormat *d); - -/** - * Audio output devices iterator. - * - * If d is NULL, returns the first registered output audio/video device, - * if d is non-NULL, returns the next registered output audio/video device after d - * or NULL if d is the last one. - */ -AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d); - -/** - * Video output devices iterator. - * - * If d is NULL, returns the first registered output audio/video device, - * if d is non-NULL, returns the next registered output audio/video device after d - * or NULL if d is the last one. - */ -AVOutputFormat *av_output_video_device_next(AVOutputFormat *d); - -typedef struct AVDeviceRect { - int x; /**< x coordinate of top left corner */ - int y; /**< y coordinate of top left corner */ - int width; /**< width */ - int height; /**< height */ -} AVDeviceRect; - -/** - * Message types used by avdevice_app_to_dev_control_message(). - */ -enum AVAppToDevMessageType { - /** - * Dummy message. - */ - AV_APP_TO_DEV_NONE = MKBETAG('N','O','N','E'), - - /** - * Window size change message. - * - * Message is sent to the device every time the application changes the size - * of the window device renders to. - * Message should also be sent right after window is created. - * - * data: AVDeviceRect: new window size. - */ - AV_APP_TO_DEV_WINDOW_SIZE = MKBETAG('G','E','O','M'), - - /** - * Repaint request message. - * - * Message is sent to the device when window has to be repainted. - * - * data: AVDeviceRect: area required to be repainted. - * NULL: whole area is required to be repainted. - */ - AV_APP_TO_DEV_WINDOW_REPAINT = MKBETAG('R','E','P','A'), - - /** - * Request pause/play. - * - * Application requests pause/unpause playback. - * Mostly usable with devices that have internal buffer. - * By default devices are not paused. - * - * data: NULL - */ - AV_APP_TO_DEV_PAUSE = MKBETAG('P', 'A', 'U', ' '), - AV_APP_TO_DEV_PLAY = MKBETAG('P', 'L', 'A', 'Y'), - AV_APP_TO_DEV_TOGGLE_PAUSE = MKBETAG('P', 'A', 'U', 'T'), - - /** - * Volume control message. - * - * Set volume level. It may be device-dependent if volume - * is changed per stream or system wide. Per stream volume - * change is expected when possible. - * - * data: double: new volume with range of 0.0 - 1.0. - */ - AV_APP_TO_DEV_SET_VOLUME = MKBETAG('S', 'V', 'O', 'L'), - - /** - * Mute control messages. - * - * Change mute state. It may be device-dependent if mute status - * is changed per stream or system wide. Per stream mute status - * change is expected when possible. - * - * data: NULL. - */ - AV_APP_TO_DEV_MUTE = MKBETAG(' ', 'M', 'U', 'T'), - AV_APP_TO_DEV_UNMUTE = MKBETAG('U', 'M', 'U', 'T'), - AV_APP_TO_DEV_TOGGLE_MUTE = MKBETAG('T', 'M', 'U', 'T'), - - /** - * Get volume/mute messages. - * - * Force the device to send AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED or - * AV_DEV_TO_APP_MUTE_STATE_CHANGED command respectively. - * - * data: NULL. - */ - AV_APP_TO_DEV_GET_VOLUME = MKBETAG('G', 'V', 'O', 'L'), - AV_APP_TO_DEV_GET_MUTE = MKBETAG('G', 'M', 'U', 'T'), -}; - -/** - * Message types used by avdevice_dev_to_app_control_message(). - */ -enum AVDevToAppMessageType { - /** - * Dummy message. - */ - AV_DEV_TO_APP_NONE = MKBETAG('N','O','N','E'), - - /** - * Create window buffer message. - * - * Device requests to create a window buffer. Exact meaning is device- - * and application-dependent. Message is sent before rendering first - * frame and all one-shot initializations should be done here. - * Application is allowed to ignore preferred window buffer size. - * - * @note: Application is obligated to inform about window buffer size - * with AV_APP_TO_DEV_WINDOW_SIZE message. - * - * data: AVDeviceRect: preferred size of the window buffer. - * NULL: no preferred size of the window buffer. - */ - AV_DEV_TO_APP_CREATE_WINDOW_BUFFER = MKBETAG('B','C','R','E'), - - /** - * Prepare window buffer message. - * - * Device requests to prepare a window buffer for rendering. - * Exact meaning is device- and application-dependent. - * Message is sent before rendering of each frame. - * - * data: NULL. - */ - AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER = MKBETAG('B','P','R','E'), - - /** - * Display window buffer message. - * - * Device requests to display a window buffer. - * Message is sent when new frame is ready to be displayed. - * Usually buffers need to be swapped in handler of this message. - * - * data: NULL. - */ - AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER = MKBETAG('B','D','I','S'), - - /** - * Destroy window buffer message. - * - * Device requests to destroy a window buffer. - * Message is sent when device is about to be destroyed and window - * buffer is not required anymore. - * - * data: NULL. - */ - AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER = MKBETAG('B','D','E','S'), - - /** - * Buffer fullness status messages. - * - * Device signals buffer overflow/underflow. - * - * data: NULL. - */ - AV_DEV_TO_APP_BUFFER_OVERFLOW = MKBETAG('B','O','F','L'), - AV_DEV_TO_APP_BUFFER_UNDERFLOW = MKBETAG('B','U','F','L'), - - /** - * Buffer readable/writable. - * - * Device informs that buffer is readable/writable. - * When possible, device informs how many bytes can be read/write. - * - * @warning Device may not inform when number of bytes than can be read/write changes. - * - * data: int64_t: amount of bytes available to read/write. - * NULL: amount of bytes available to read/write is not known. - */ - AV_DEV_TO_APP_BUFFER_READABLE = MKBETAG('B','R','D',' '), - AV_DEV_TO_APP_BUFFER_WRITABLE = MKBETAG('B','W','R',' '), - - /** - * Mute state change message. - * - * Device informs that mute state has changed. - * - * data: int: 0 for not muted state, non-zero for muted state. - */ - AV_DEV_TO_APP_MUTE_STATE_CHANGED = MKBETAG('C','M','U','T'), - - /** - * Volume level change message. - * - * Device informs that volume level has changed. - * - * data: double: new volume with range of 0.0 - 1.0. - */ - AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED = MKBETAG('C','V','O','L'), -}; - -/** - * Send control message from application to device. - * - * @param s device context. - * @param type message type. - * @param data message data. Exact type depends on message type. - * @param data_size size of message data. - * @return >= 0 on success, negative on error. - * AVERROR(ENOSYS) when device doesn't implement handler of the message. - */ -int avdevice_app_to_dev_control_message(struct AVFormatContext *s, - enum AVAppToDevMessageType type, - void *data, size_t data_size); - -/** - * Send control message from device to application. - * - * @param s device context. - * @param type message type. - * @param data message data. Can be NULL. - * @param data_size size of message data. - * @return >= 0 on success, negative on error. - * AVERROR(ENOSYS) when application doesn't implement handler of the message. - */ -int avdevice_dev_to_app_control_message(struct AVFormatContext *s, - enum AVDevToAppMessageType type, - void *data, size_t data_size); - -#if FF_API_DEVICE_CAPABILITIES -/** - * Following API allows user to probe device capabilities (supported codecs, - * pixel formats, sample formats, resolutions, channel counts, etc). - * It is build on top op AVOption API. - * Queried capabilities make it possible to set up converters of video or audio - * parameters that fit to the device. - * - * List of capabilities that can be queried: - * - Capabilities valid for both audio and video devices: - * - codec: supported audio/video codecs. - * type: AV_OPT_TYPE_INT (AVCodecID value) - * - Capabilities valid for audio devices: - * - sample_format: supported sample formats. - * type: AV_OPT_TYPE_INT (AVSampleFormat value) - * - sample_rate: supported sample rates. - * type: AV_OPT_TYPE_INT - * - channels: supported number of channels. - * type: AV_OPT_TYPE_INT - * - channel_layout: supported channel layouts. - * type: AV_OPT_TYPE_INT64 - * - Capabilities valid for video devices: - * - pixel_format: supported pixel formats. - * type: AV_OPT_TYPE_INT (AVPixelFormat value) - * - window_size: supported window sizes (describes size of the window size presented to the user). - * type: AV_OPT_TYPE_IMAGE_SIZE - * - frame_size: supported frame sizes (describes size of provided video frames). - * type: AV_OPT_TYPE_IMAGE_SIZE - * - fps: supported fps values - * type: AV_OPT_TYPE_RATIONAL - * - * Value of the capability may be set by user using av_opt_set() function - * and AVDeviceCapabilitiesQuery object. Following queries will - * limit results to the values matching already set capabilities. - * For example, setting a codec may impact number of formats or fps values - * returned during next query. Setting invalid value may limit results to zero. - * - * Example of the usage basing on opengl output device: - * - * @code - * AVFormatContext *oc = NULL; - * AVDeviceCapabilitiesQuery *caps = NULL; - * AVOptionRanges *ranges; - * int ret; - * - * if ((ret = avformat_alloc_output_context2(&oc, NULL, "opengl", NULL)) < 0) - * goto fail; - * if (avdevice_capabilities_create(&caps, oc, NULL) < 0) - * goto fail; - * - * //query codecs - * if (av_opt_query_ranges(&ranges, caps, "codec", AV_OPT_MULTI_COMPONENT_RANGE)) < 0) - * goto fail; - * //pick codec here and set it - * av_opt_set(caps, "codec", AV_CODEC_ID_RAWVIDEO, 0); - * - * //query format - * if (av_opt_query_ranges(&ranges, caps, "pixel_format", AV_OPT_MULTI_COMPONENT_RANGE)) < 0) - * goto fail; - * //pick format here and set it - * av_opt_set(caps, "pixel_format", AV_PIX_FMT_YUV420P, 0); - * - * //query and set more capabilities - * - * fail: - * //clean up code - * avdevice_capabilities_free(&query, oc); - * avformat_free_context(oc); - * @endcode - */ - -/** - * Structure describes device capabilities. - * - * It is used by devices in conjunction with av_device_capabilities AVOption table - * to implement capabilities probing API based on AVOption API. Should not be used directly. - */ -typedef struct AVDeviceCapabilitiesQuery { - const AVClass *av_class; - AVFormatContext *device_context; - enum AVCodecID codec; - enum AVSampleFormat sample_format; - enum AVPixelFormat pixel_format; - int sample_rate; - int channels; - int64_t channel_layout; - int window_width; - int window_height; - int frame_width; - int frame_height; - AVRational fps; -} AVDeviceCapabilitiesQuery; - -/** - * AVOption table used by devices to implement device capabilities API. Should not be used by a user. - */ -attribute_deprecated -extern const AVOption av_device_capabilities[]; - -/** - * Initialize capabilities probing API based on AVOption API. - * - * avdevice_capabilities_free() must be called when query capabilities API is - * not used anymore. - * - * @param[out] caps Device capabilities data. Pointer to a NULL pointer must be passed. - * @param s Context of the device. - * @param device_options An AVDictionary filled with device-private options. - * On return this parameter will be destroyed and replaced with a dict - * containing options that were not found. May be NULL. - * The same options must be passed later to avformat_write_header() for output - * devices or avformat_open_input() for input devices, or at any other place - * that affects device-private options. - * - * @return >= 0 on success, negative otherwise. - */ -attribute_deprecated -int avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s, - AVDictionary **device_options); - -/** - * Free resources created by avdevice_capabilities_create() - * - * @param caps Device capabilities data to be freed. - * @param s Context of the device. - */ -attribute_deprecated -void avdevice_capabilities_free(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s); -#endif - -/** - * Structure describes basic parameters of the device. - */ -typedef struct AVDeviceInfo { - char *device_name; /**< device name, format depends on device */ - char *device_description; /**< human friendly name */ -} AVDeviceInfo; - -/** - * List of devices. - */ -typedef struct AVDeviceInfoList { - AVDeviceInfo **devices; /**< list of autodetected devices */ - int nb_devices; /**< number of autodetected devices */ - int default_device; /**< index of default device or -1 if no default */ -} AVDeviceInfoList; - -/** - * List devices. - * - * Returns available device names and their parameters. - * - * @note: Some devices may accept system-dependent device names that cannot be - * autodetected. The list returned by this function cannot be assumed to - * be always completed. - * - * @param s device context. - * @param[out] device_list list of autodetected devices. - * @return count of autodetected devices, negative on error. - */ -int avdevice_list_devices(struct AVFormatContext *s, AVDeviceInfoList **device_list); - -/** - * Convenient function to free result of avdevice_list_devices(). - * - * @param devices device list to be freed. - */ -void avdevice_free_list_devices(AVDeviceInfoList **device_list); - -/** - * List devices. - * - * Returns available device names and their parameters. - * These are convinient wrappers for avdevice_list_devices(). - * Device context is allocated and deallocated internally. - * - * @param device device format. May be NULL if device name is set. - * @param device_name device name. May be NULL if device format is set. - * @param device_options An AVDictionary filled with device-private options. May be NULL. - * The same options must be passed later to avformat_write_header() for output - * devices or avformat_open_input() for input devices, or at any other place - * that affects device-private options. - * @param[out] device_list list of autodetected devices - * @return count of autodetected devices, negative on error. - * @note device argument takes precedence over device_name when both are set. - */ -int avdevice_list_input_sources(struct AVInputFormat *device, const char *device_name, - AVDictionary *device_options, AVDeviceInfoList **device_list); -int avdevice_list_output_sinks(struct AVOutputFormat *device, const char *device_name, - AVDictionary *device_options, AVDeviceInfoList **device_list); - -/** - * @} - */ - -#endif /* AVDEVICE_AVDEVICE_H */ diff --git a/prebuilts/x86/include/libavdevice/version.h b/prebuilts/x86/include/libavdevice/version.h deleted file mode 100644 index c310c5e..0000000 --- a/prebuilts/x86/include/libavdevice/version.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVDEVICE_VERSION_H -#define AVDEVICE_VERSION_H - -/** - * @file - * @ingroup lavd - * Libavdevice version macros - */ - -#include "libavutil/version.h" - -#define LIBAVDEVICE_VERSION_MAJOR 58 -#define LIBAVDEVICE_VERSION_MINOR 13 -#define LIBAVDEVICE_VERSION_MICRO 100 - -#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \ - LIBAVDEVICE_VERSION_MINOR, \ - LIBAVDEVICE_VERSION_MICRO) -#define LIBAVDEVICE_VERSION AV_VERSION(LIBAVDEVICE_VERSION_MAJOR, \ - LIBAVDEVICE_VERSION_MINOR, \ - LIBAVDEVICE_VERSION_MICRO) -#define LIBAVDEVICE_BUILD LIBAVDEVICE_VERSION_INT - -#define LIBAVDEVICE_IDENT "Lavd" AV_STRINGIFY(LIBAVDEVICE_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ -#ifndef FF_API_DEVICE_CAPABILITIES -#define FF_API_DEVICE_CAPABILITIES (LIBAVDEVICE_VERSION_MAJOR < 60) -#endif - -#endif /* AVDEVICE_VERSION_H */ diff --git a/prebuilts/x86/include/libavfilter/avfilter.h b/prebuilts/x86/include/libavfilter/avfilter.h deleted file mode 100644 index be12424..0000000 --- a/prebuilts/x86/include/libavfilter/avfilter.h +++ /dev/null @@ -1,1178 +0,0 @@ -/* - * filter layer - * Copyright (c) 2007 Bobby Bingham - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_AVFILTER_H -#define AVFILTER_AVFILTER_H - -/** - * @file - * @ingroup lavfi - * Main libavfilter public API header - */ - -/** - * @defgroup lavfi libavfilter - * Graph-based frame editing library. - * - * @{ - */ - -#include - -#include "libavutil/attributes.h" -#include "libavutil/avutil.h" -#include "libavutil/buffer.h" -#include "libavutil/dict.h" -#include "libavutil/frame.h" -#include "libavutil/log.h" -#include "libavutil/samplefmt.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" - -#include "libavfilter/version.h" - -/** - * Return the LIBAVFILTER_VERSION_INT constant. - */ -unsigned avfilter_version(void); - -/** - * Return the libavfilter build-time configuration. - */ -const char *avfilter_configuration(void); - -/** - * Return the libavfilter license. - */ -const char *avfilter_license(void); - -typedef struct AVFilterContext AVFilterContext; -typedef struct AVFilterLink AVFilterLink; -typedef struct AVFilterPad AVFilterPad; -typedef struct AVFilterFormats AVFilterFormats; -typedef struct AVFilterChannelLayouts AVFilterChannelLayouts; - -/** - * Get the number of elements in a NULL-terminated array of AVFilterPads (e.g. - * AVFilter.inputs/outputs). - */ -int avfilter_pad_count(const AVFilterPad *pads); - -/** - * Get the name of an AVFilterPad. - * - * @param pads an array of AVFilterPads - * @param pad_idx index of the pad in the array; it is the caller's - * responsibility to ensure the index is valid - * - * @return name of the pad_idx'th pad in pads - */ -const char *avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx); - -/** - * Get the type of an AVFilterPad. - * - * @param pads an array of AVFilterPads - * @param pad_idx index of the pad in the array; it is the caller's - * responsibility to ensure the index is valid - * - * @return type of the pad_idx'th pad in pads - */ -enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx); - -/** - * The number of the filter inputs is not determined just by AVFilter.inputs. - * The filter might add additional inputs during initialization depending on the - * options supplied to it. - */ -#define AVFILTER_FLAG_DYNAMIC_INPUTS (1 << 0) -/** - * The number of the filter outputs is not determined just by AVFilter.outputs. - * The filter might add additional outputs during initialization depending on - * the options supplied to it. - */ -#define AVFILTER_FLAG_DYNAMIC_OUTPUTS (1 << 1) -/** - * The filter supports multithreading by splitting frames into multiple parts - * and processing them concurrently. - */ -#define AVFILTER_FLAG_SLICE_THREADS (1 << 2) -/** - * Some filters support a generic "enable" expression option that can be used - * to enable or disable a filter in the timeline. Filters supporting this - * option have this flag set. When the enable expression is false, the default - * no-op filter_frame() function is called in place of the filter_frame() - * callback defined on each input pad, thus the frame is passed unchanged to - * the next filters. - */ -#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC (1 << 16) -/** - * Same as AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC, except that the filter will - * have its filter_frame() callback(s) called as usual even when the enable - * expression is false. The filter will disable filtering within the - * filter_frame() callback(s) itself, for example executing code depending on - * the AVFilterContext->is_disabled value. - */ -#define AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL (1 << 17) -/** - * Handy mask to test whether the filter supports or no the timeline feature - * (internally or generically). - */ -#define AVFILTER_FLAG_SUPPORT_TIMELINE (AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL) - -/** - * Filter definition. This defines the pads a filter contains, and all the - * callback functions used to interact with the filter. - */ -typedef struct AVFilter { - /** - * Filter name. Must be non-NULL and unique among filters. - */ - const char *name; - - /** - * A description of the filter. May be NULL. - * - * You should use the NULL_IF_CONFIG_SMALL() macro to define it. - */ - const char *description; - - /** - * List of inputs, terminated by a zeroed element. - * - * NULL if there are no (static) inputs. Instances of filters with - * AVFILTER_FLAG_DYNAMIC_INPUTS set may have more inputs than present in - * this list. - */ - const AVFilterPad *inputs; - /** - * List of outputs, terminated by a zeroed element. - * - * NULL if there are no (static) outputs. Instances of filters with - * AVFILTER_FLAG_DYNAMIC_OUTPUTS set may have more outputs than present in - * this list. - */ - const AVFilterPad *outputs; - - /** - * A class for the private data, used to declare filter private AVOptions. - * This field is NULL for filters that do not declare any options. - * - * If this field is non-NULL, the first member of the filter private data - * must be a pointer to AVClass, which will be set by libavfilter generic - * code to this class. - */ - const AVClass *priv_class; - - /** - * A combination of AVFILTER_FLAG_* - */ - int flags; - - /***************************************************************** - * All fields below this line are not part of the public API. They - * may not be used outside of libavfilter and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * Filter pre-initialization function - * - * This callback will be called immediately after the filter context is - * allocated, to allow allocating and initing sub-objects. - * - * If this callback is not NULL, the uninit callback will be called on - * allocation failure. - * - * @return 0 on success, - * AVERROR code on failure (but the code will be - * dropped and treated as ENOMEM by the calling code) - */ - int (*preinit)(AVFilterContext *ctx); - - /** - * Filter initialization function. - * - * This callback will be called only once during the filter lifetime, after - * all the options have been set, but before links between filters are - * established and format negotiation is done. - * - * Basic filter initialization should be done here. Filters with dynamic - * inputs and/or outputs should create those inputs/outputs here based on - * provided options. No more changes to this filter's inputs/outputs can be - * done after this callback. - * - * This callback must not assume that the filter links exist or frame - * parameters are known. - * - * @ref AVFilter.uninit "uninit" is guaranteed to be called even if - * initialization fails, so this callback does not have to clean up on - * failure. - * - * @return 0 on success, a negative AVERROR on failure - */ - int (*init)(AVFilterContext *ctx); - - /** - * Should be set instead of @ref AVFilter.init "init" by the filters that - * want to pass a dictionary of AVOptions to nested contexts that are - * allocated during init. - * - * On return, the options dict should be freed and replaced with one that - * contains all the options which could not be processed by this filter (or - * with NULL if all the options were processed). - * - * Otherwise the semantics is the same as for @ref AVFilter.init "init". - */ - int (*init_dict)(AVFilterContext *ctx, AVDictionary **options); - - /** - * Filter uninitialization function. - * - * Called only once right before the filter is freed. Should deallocate any - * memory held by the filter, release any buffer references, etc. It does - * not need to deallocate the AVFilterContext.priv memory itself. - * - * This callback may be called even if @ref AVFilter.init "init" was not - * called or failed, so it must be prepared to handle such a situation. - */ - void (*uninit)(AVFilterContext *ctx); - - /** - * Query formats supported by the filter on its inputs and outputs. - * - * This callback is called after the filter is initialized (so the inputs - * and outputs are fixed), shortly before the format negotiation. This - * callback may be called more than once. - * - * This callback must set AVFilterLink.outcfg.formats on every input link and - * AVFilterLink.incfg.formats on every output link to a list of pixel/sample - * formats that the filter supports on that link. For audio links, this - * filter must also set @ref AVFilterLink.incfg.samplerates "in_samplerates" / - * @ref AVFilterLink.outcfg.samplerates "out_samplerates" and - * @ref AVFilterLink.incfg.channel_layouts "in_channel_layouts" / - * @ref AVFilterLink.outcfg.channel_layouts "out_channel_layouts" analogously. - * - * This callback may be NULL for filters with one input, in which case - * libavfilter assumes that it supports all input formats and preserves - * them on output. - * - * @return zero on success, a negative value corresponding to an - * AVERROR code otherwise - */ - int (*query_formats)(AVFilterContext *); - - int priv_size; ///< size of private data to allocate for the filter - - int flags_internal; ///< Additional flags for avfilter internal use only. - -#if FF_API_NEXT - /** - * Used by the filter registration system. Must not be touched by any other - * code. - */ - struct AVFilter *next; -#endif - - /** - * Make the filter instance process a command. - * - * @param cmd the command to process, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param res a buffer with size res_size where the filter(s) can return a response. This must not change when the command is not supported. - * @param flags if AVFILTER_CMD_FLAG_FAST is set and the command would be - * time consuming then a filter should treat it like an unsupported command - * - * @returns >=0 on success otherwise an error code. - * AVERROR(ENOSYS) on unsupported commands - */ - int (*process_command)(AVFilterContext *, const char *cmd, const char *arg, char *res, int res_len, int flags); - - /** - * Filter initialization function, alternative to the init() - * callback. Args contains the user-supplied parameters, opaque is - * used for providing binary data. - */ - int (*init_opaque)(AVFilterContext *ctx, void *opaque); - - /** - * Filter activation function. - * - * Called when any processing is needed from the filter, instead of any - * filter_frame and request_frame on pads. - * - * The function must examine inlinks and outlinks and perform a single - * step of processing. If there is nothing to do, the function must do - * nothing and not return an error. If more steps are or may be - * possible, it must use ff_filter_set_ready() to schedule another - * activation. - */ - int (*activate)(AVFilterContext *ctx); -} AVFilter; - -/** - * Process multiple parts of the frame concurrently. - */ -#define AVFILTER_THREAD_SLICE (1 << 0) - -typedef struct AVFilterInternal AVFilterInternal; - -/** An instance of a filter */ -struct AVFilterContext { - const AVClass *av_class; ///< needed for av_log() and filters common options - - const AVFilter *filter; ///< the AVFilter of which this is an instance - - char *name; ///< name of this filter instance - - AVFilterPad *input_pads; ///< array of input pads - AVFilterLink **inputs; ///< array of pointers to input links - unsigned nb_inputs; ///< number of input pads - - AVFilterPad *output_pads; ///< array of output pads - AVFilterLink **outputs; ///< array of pointers to output links - unsigned nb_outputs; ///< number of output pads - - void *priv; ///< private data for use by the filter - - struct AVFilterGraph *graph; ///< filtergraph this filter belongs to - - /** - * Type of multithreading being allowed/used. A combination of - * AVFILTER_THREAD_* flags. - * - * May be set by the caller before initializing the filter to forbid some - * or all kinds of multithreading for this filter. The default is allowing - * everything. - * - * When the filter is initialized, this field is combined using bit AND with - * AVFilterGraph.thread_type to get the final mask used for determining - * allowed threading types. I.e. a threading type needs to be set in both - * to be allowed. - * - * After the filter is initialized, libavfilter sets this field to the - * threading type that is actually used (0 for no multithreading). - */ - int thread_type; - - /** - * An opaque struct for libavfilter internal use. - */ - AVFilterInternal *internal; - - struct AVFilterCommand *command_queue; - - char *enable_str; ///< enable expression string - void *enable; ///< parsed expression (AVExpr*) - double *var_values; ///< variable values for the enable expression - int is_disabled; ///< the enabled state from the last expression evaluation - - /** - * For filters which will create hardware frames, sets the device the - * filter should create them in. All other filters will ignore this field: - * in particular, a filter which consumes or processes hardware frames will - * instead use the hw_frames_ctx field in AVFilterLink to carry the - * hardware context information. - */ - AVBufferRef *hw_device_ctx; - - /** - * Max number of threads allowed in this filter instance. - * If <= 0, its value is ignored. - * Overrides global number of threads set per filter graph. - */ - int nb_threads; - - /** - * Ready status of the filter. - * A non-0 value means that the filter needs activating; - * a higher value suggests a more urgent activation. - */ - unsigned ready; - - /** - * Sets the number of extra hardware frames which the filter will - * allocate on its output links for use in following filters or by - * the caller. - * - * Some hardware filters require all frames that they will use for - * output to be defined in advance before filtering starts. For such - * filters, any hardware frame pools used for output must therefore be - * of fixed size. The extra frames set here are on top of any number - * that the filter needs internally in order to operate normally. - * - * This field must be set before the graph containing this filter is - * configured. - */ - int extra_hw_frames; -}; - -/** - * Lists of formats / etc. supported by an end of a link. - * - * This structure is directly part of AVFilterLink, in two copies: - * one for the source filter, one for the destination filter. - - * These lists are used for negotiating the format to actually be used, - * which will be loaded into the format and channel_layout members of - * AVFilterLink, when chosen. - */ -typedef struct AVFilterFormatsConfig { - - /** - * List of supported formats (pixel or sample). - */ - AVFilterFormats *formats; - - /** - * Lists of supported sample rates, only for audio. - */ - AVFilterFormats *samplerates; - - /** - * Lists of supported channel layouts, only for audio. - */ - AVFilterChannelLayouts *channel_layouts; - -} AVFilterFormatsConfig; - -/** - * A link between two filters. This contains pointers to the source and - * destination filters between which this link exists, and the indexes of - * the pads involved. In addition, this link also contains the parameters - * which have been negotiated and agreed upon between the filter, such as - * image dimensions, format, etc. - * - * Applications must not normally access the link structure directly. - * Use the buffersrc and buffersink API instead. - * In the future, access to the header may be reserved for filters - * implementation. - */ -struct AVFilterLink { - AVFilterContext *src; ///< source filter - AVFilterPad *srcpad; ///< output pad on the source filter - - AVFilterContext *dst; ///< dest filter - AVFilterPad *dstpad; ///< input pad on the dest filter - - enum AVMediaType type; ///< filter media type - - /* These parameters apply only to video */ - int w; ///< agreed upon image width - int h; ///< agreed upon image height - AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio - /* These parameters apply only to audio */ - uint64_t channel_layout; ///< channel layout of current buffer (see libavutil/channel_layout.h) - int sample_rate; ///< samples per second - - int format; ///< agreed upon media format - - /** - * Define the time base used by the PTS of the frames/samples - * which will pass through this link. - * During the configuration stage, each filter is supposed to - * change only the output timebase, while the timebase of the - * input link is assumed to be an unchangeable property. - */ - AVRational time_base; - - /***************************************************************** - * All fields below this line are not part of the public API. They - * may not be used outside of libavfilter and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * Lists of supported formats / etc. supported by the input filter. - */ - AVFilterFormatsConfig incfg; - - /** - * Lists of supported formats / etc. supported by the output filter. - */ - AVFilterFormatsConfig outcfg; - - /** stage of the initialization of the link properties (dimensions, etc) */ - enum { - AVLINK_UNINIT = 0, ///< not started - AVLINK_STARTINIT, ///< started, but incomplete - AVLINK_INIT ///< complete - } init_state; - - /** - * Graph the filter belongs to. - */ - struct AVFilterGraph *graph; - - /** - * Current timestamp of the link, as defined by the most recent - * frame(s), in link time_base units. - */ - int64_t current_pts; - - /** - * Current timestamp of the link, as defined by the most recent - * frame(s), in AV_TIME_BASE units. - */ - int64_t current_pts_us; - - /** - * Index in the age array. - */ - int age_index; - - /** - * Frame rate of the stream on the link, or 1/0 if unknown or variable; - * if left to 0/0, will be automatically copied from the first input - * of the source filter if it exists. - * - * Sources should set it to the best estimation of the real frame rate. - * If the source frame rate is unknown or variable, set this to 1/0. - * Filters should update it if necessary depending on their function. - * Sinks can use it to set a default output frame rate. - * It is similar to the r_frame_rate field in AVStream. - */ - AVRational frame_rate; - - /** - * Buffer partially filled with samples to achieve a fixed/minimum size. - */ - AVFrame *partial_buf; - - /** - * Size of the partial buffer to allocate. - * Must be between min_samples and max_samples. - */ - int partial_buf_size; - - /** - * Minimum number of samples to filter at once. If filter_frame() is - * called with fewer samples, it will accumulate them in partial_buf. - * This field and the related ones must not be changed after filtering - * has started. - * If 0, all related fields are ignored. - */ - int min_samples; - - /** - * Maximum number of samples to filter at once. If filter_frame() is - * called with more samples, it will split them. - */ - int max_samples; - - /** - * Number of channels. - */ - int channels; - - /** - * Number of past frames sent through the link. - */ - int64_t frame_count_in, frame_count_out; - - /** - * A pointer to a FFFramePool struct. - */ - void *frame_pool; - - /** - * True if a frame is currently wanted on the output of this filter. - * Set when ff_request_frame() is called by the output, - * cleared when a frame is filtered. - */ - int frame_wanted_out; - - /** - * For hwaccel pixel formats, this should be a reference to the - * AVHWFramesContext describing the frames. - */ - AVBufferRef *hw_frames_ctx; - -#ifndef FF_INTERNAL_FIELDS - - /** - * Internal structure members. - * The fields below this limit are internal for libavfilter's use - * and must in no way be accessed by applications. - */ - char reserved[0xF000]; - -#else /* FF_INTERNAL_FIELDS */ - - /** - * Queue of frames waiting to be filtered. - */ - FFFrameQueue fifo; - - /** - * If set, the source filter can not generate a frame as is. - * The goal is to avoid repeatedly calling the request_frame() method on - * the same link. - */ - int frame_blocked_in; - - /** - * Link input status. - * If not zero, all attempts of filter_frame will fail with the - * corresponding code. - */ - int status_in; - - /** - * Timestamp of the input status change. - */ - int64_t status_in_pts; - - /** - * Link output status. - * If not zero, all attempts of request_frame will fail with the - * corresponding code. - */ - int status_out; - -#endif /* FF_INTERNAL_FIELDS */ - -}; - -/** - * Link two filters together. - * - * @param src the source filter - * @param srcpad index of the output pad on the source filter - * @param dst the destination filter - * @param dstpad index of the input pad on the destination filter - * @return zero on success - */ -int avfilter_link(AVFilterContext *src, unsigned srcpad, - AVFilterContext *dst, unsigned dstpad); - -/** - * Free the link in *link, and set its pointer to NULL. - */ -void avfilter_link_free(AVFilterLink **link); - -#if FF_API_FILTER_GET_SET -/** - * Get the number of channels of a link. - * @deprecated Use av_buffersink_get_channels() - */ -attribute_deprecated -int avfilter_link_get_channels(AVFilterLink *link); -#endif -#if FF_API_FILTER_LINK_SET_CLOSED -/** - * Set the closed field of a link. - * @deprecated applications are not supposed to mess with links, they should - * close the sinks. - */ -attribute_deprecated -void avfilter_link_set_closed(AVFilterLink *link, int closed); -#endif -/** - * Negotiate the media format, dimensions, etc of all inputs to a filter. - * - * @param filter the filter to negotiate the properties for its inputs - * @return zero on successful negotiation - */ -int avfilter_config_links(AVFilterContext *filter); - -#define AVFILTER_CMD_FLAG_ONE 1 ///< Stop once a filter understood the command (for target=all for example), fast filters are favored automatically -#define AVFILTER_CMD_FLAG_FAST 2 ///< Only execute command when its fast (like a video out that supports contrast adjustment in hw) - -/** - * Make the filter instance process a command. - * It is recommended to use avfilter_graph_send_command(). - */ -int avfilter_process_command(AVFilterContext *filter, const char *cmd, const char *arg, char *res, int res_len, int flags); - -/** - * Iterate over all registered filters. - * - * @param opaque a pointer where libavfilter will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered filter or NULL when the iteration is - * finished - */ -const AVFilter *av_filter_iterate(void **opaque); - -#if FF_API_NEXT -/** Initialize the filter system. Register all builtin filters. */ -attribute_deprecated -void avfilter_register_all(void); - -/** - * Register a filter. This is only needed if you plan to use - * avfilter_get_by_name later to lookup the AVFilter structure by name. A - * filter can still by instantiated with avfilter_graph_alloc_filter even if it - * is not registered. - * - * @param filter the filter to register - * @return 0 if the registration was successful, a negative value - * otherwise - */ -attribute_deprecated -int avfilter_register(AVFilter *filter); - -/** - * Iterate over all registered filters. - * @return If prev is non-NULL, next registered filter after prev or NULL if - * prev is the last filter. If prev is NULL, return the first registered filter. - */ -attribute_deprecated -const AVFilter *avfilter_next(const AVFilter *prev); -#endif - -/** - * Get a filter definition matching the given name. - * - * @param name the filter name to find - * @return the filter definition, if any matching one is registered. - * NULL if none found. - */ -const AVFilter *avfilter_get_by_name(const char *name); - - -/** - * Initialize a filter with the supplied parameters. - * - * @param ctx uninitialized filter context to initialize - * @param args Options to initialize the filter with. This must be a - * ':'-separated list of options in the 'key=value' form. - * May be NULL if the options have been set directly using the - * AVOptions API or there are no options that need to be set. - * @return 0 on success, a negative AVERROR on failure - */ -int avfilter_init_str(AVFilterContext *ctx, const char *args); - -/** - * Initialize a filter with the supplied dictionary of options. - * - * @param ctx uninitialized filter context to initialize - * @param options An AVDictionary filled with options for this filter. On - * return this parameter will be destroyed and replaced with - * a dict containing options that were not found. This dictionary - * must be freed by the caller. - * May be NULL, then this function is equivalent to - * avfilter_init_str() with the second parameter set to NULL. - * @return 0 on success, a negative AVERROR on failure - * - * @note This function and avfilter_init_str() do essentially the same thing, - * the difference is in manner in which the options are passed. It is up to the - * calling code to choose whichever is more preferable. The two functions also - * behave differently when some of the provided options are not declared as - * supported by the filter. In such a case, avfilter_init_str() will fail, but - * this function will leave those extra options in the options AVDictionary and - * continue as usual. - */ -int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options); - -/** - * Free a filter context. This will also remove the filter from its - * filtergraph's list of filters. - * - * @param filter the filter to free - */ -void avfilter_free(AVFilterContext *filter); - -/** - * Insert a filter in the middle of an existing link. - * - * @param link the link into which the filter should be inserted - * @param filt the filter to be inserted - * @param filt_srcpad_idx the input pad on the filter to connect - * @param filt_dstpad_idx the output pad on the filter to connect - * @return zero on success - */ -int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, - unsigned filt_srcpad_idx, unsigned filt_dstpad_idx); - -/** - * @return AVClass for AVFilterContext. - * - * @see av_opt_find(). - */ -const AVClass *avfilter_get_class(void); - -typedef struct AVFilterGraphInternal AVFilterGraphInternal; - -/** - * A function pointer passed to the @ref AVFilterGraph.execute callback to be - * executed multiple times, possibly in parallel. - * - * @param ctx the filter context the job belongs to - * @param arg an opaque parameter passed through from @ref - * AVFilterGraph.execute - * @param jobnr the index of the job being executed - * @param nb_jobs the total number of jobs - * - * @return 0 on success, a negative AVERROR on error - */ -typedef int (avfilter_action_func)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs); - -/** - * A function executing multiple jobs, possibly in parallel. - * - * @param ctx the filter context to which the jobs belong - * @param func the function to be called multiple times - * @param arg the argument to be passed to func - * @param ret a nb_jobs-sized array to be filled with return values from each - * invocation of func - * @param nb_jobs the number of jobs to execute - * - * @return 0 on success, a negative AVERROR on error - */ -typedef int (avfilter_execute_func)(AVFilterContext *ctx, avfilter_action_func *func, - void *arg, int *ret, int nb_jobs); - -typedef struct AVFilterGraph { - const AVClass *av_class; - AVFilterContext **filters; - unsigned nb_filters; - - char *scale_sws_opts; ///< sws options to use for the auto-inserted scale filters -#if FF_API_LAVR_OPTS - attribute_deprecated char *resample_lavr_opts; ///< libavresample options to use for the auto-inserted resample filters -#endif - - /** - * Type of multithreading allowed for filters in this graph. A combination - * of AVFILTER_THREAD_* flags. - * - * May be set by the caller at any point, the setting will apply to all - * filters initialized after that. The default is allowing everything. - * - * When a filter in this graph is initialized, this field is combined using - * bit AND with AVFilterContext.thread_type to get the final mask used for - * determining allowed threading types. I.e. a threading type needs to be - * set in both to be allowed. - */ - int thread_type; - - /** - * Maximum number of threads used by filters in this graph. May be set by - * the caller before adding any filters to the filtergraph. Zero (the - * default) means that the number of threads is determined automatically. - */ - int nb_threads; - - /** - * Opaque object for libavfilter internal use. - */ - AVFilterGraphInternal *internal; - - /** - * Opaque user data. May be set by the caller to an arbitrary value, e.g. to - * be used from callbacks like @ref AVFilterGraph.execute. - * Libavfilter will not touch this field in any way. - */ - void *opaque; - - /** - * This callback may be set by the caller immediately after allocating the - * graph and before adding any filters to it, to provide a custom - * multithreading implementation. - * - * If set, filters with slice threading capability will call this callback - * to execute multiple jobs in parallel. - * - * If this field is left unset, libavfilter will use its internal - * implementation, which may or may not be multithreaded depending on the - * platform and build options. - */ - avfilter_execute_func *execute; - - char *aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions - - /** - * Private fields - * - * The following fields are for internal use only. - * Their type, offset, number and semantic can change without notice. - */ - - AVFilterLink **sink_links; - int sink_links_count; - - unsigned disable_auto_convert; -} AVFilterGraph; - -/** - * Allocate a filter graph. - * - * @return the allocated filter graph on success or NULL. - */ -AVFilterGraph *avfilter_graph_alloc(void); - -/** - * Create a new filter instance in a filter graph. - * - * @param graph graph in which the new filter will be used - * @param filter the filter to create an instance of - * @param name Name to give to the new instance (will be copied to - * AVFilterContext.name). This may be used by the caller to identify - * different filters, libavfilter itself assigns no semantics to - * this parameter. May be NULL. - * - * @return the context of the newly created filter instance (note that it is - * also retrievable directly through AVFilterGraph.filters or with - * avfilter_graph_get_filter()) on success or NULL on failure. - */ -AVFilterContext *avfilter_graph_alloc_filter(AVFilterGraph *graph, - const AVFilter *filter, - const char *name); - -/** - * Get a filter instance identified by instance name from graph. - * - * @param graph filter graph to search through. - * @param name filter instance name (should be unique in the graph). - * @return the pointer to the found filter instance or NULL if it - * cannot be found. - */ -AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, const char *name); - -/** - * Create and add a filter instance into an existing graph. - * The filter instance is created from the filter filt and inited - * with the parameter args. opaque is currently ignored. - * - * In case of success put in *filt_ctx the pointer to the created - * filter instance, otherwise set *filt_ctx to NULL. - * - * @param name the instance name to give to the created filter instance - * @param graph_ctx the filter graph - * @return a negative AVERROR error code in case of failure, a non - * negative value otherwise - */ -int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt, - const char *name, const char *args, void *opaque, - AVFilterGraph *graph_ctx); - -/** - * Enable or disable automatic format conversion inside the graph. - * - * Note that format conversion can still happen inside explicitly inserted - * scale and aresample filters. - * - * @param flags any of the AVFILTER_AUTO_CONVERT_* constants - */ -void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags); - -enum { - AVFILTER_AUTO_CONVERT_ALL = 0, /**< all automatic conversions enabled */ - AVFILTER_AUTO_CONVERT_NONE = -1, /**< all automatic conversions disabled */ -}; - -/** - * Check validity and configure all the links and formats in the graph. - * - * @param graphctx the filter graph - * @param log_ctx context used for logging - * @return >= 0 in case of success, a negative AVERROR code otherwise - */ -int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx); - -/** - * Free a graph, destroy its links, and set *graph to NULL. - * If *graph is NULL, do nothing. - */ -void avfilter_graph_free(AVFilterGraph **graph); - -/** - * A linked-list of the inputs/outputs of the filter chain. - * - * This is mainly useful for avfilter_graph_parse() / avfilter_graph_parse2(), - * where it is used to communicate open (unlinked) inputs and outputs from and - * to the caller. - * This struct specifies, per each not connected pad contained in the graph, the - * filter context and the pad index required for establishing a link. - */ -typedef struct AVFilterInOut { - /** unique name for this input/output in the list */ - char *name; - - /** filter context associated to this input/output */ - AVFilterContext *filter_ctx; - - /** index of the filt_ctx pad to use for linking */ - int pad_idx; - - /** next input/input in the list, NULL if this is the last */ - struct AVFilterInOut *next; -} AVFilterInOut; - -/** - * Allocate a single AVFilterInOut entry. - * Must be freed with avfilter_inout_free(). - * @return allocated AVFilterInOut on success, NULL on failure. - */ -AVFilterInOut *avfilter_inout_alloc(void); - -/** - * Free the supplied list of AVFilterInOut and set *inout to NULL. - * If *inout is NULL, do nothing. - */ -void avfilter_inout_free(AVFilterInOut **inout); - -/** - * Add a graph described by a string to a graph. - * - * @note The caller must provide the lists of inputs and outputs, - * which therefore must be known before calling the function. - * - * @note The inputs parameter describes inputs of the already existing - * part of the graph; i.e. from the point of view of the newly created - * part, they are outputs. Similarly the outputs parameter describes - * outputs of the already existing filters, which are provided as - * inputs to the parsed filters. - * - * @param graph the filter graph where to link the parsed graph context - * @param filters string to be parsed - * @param inputs linked list to the inputs of the graph - * @param outputs linked list to the outputs of the graph - * @return zero on success, a negative AVERROR code on error - */ -int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, - AVFilterInOut *inputs, AVFilterInOut *outputs, - void *log_ctx); - -/** - * Add a graph described by a string to a graph. - * - * In the graph filters description, if the input label of the first - * filter is not specified, "in" is assumed; if the output label of - * the last filter is not specified, "out" is assumed. - * - * @param graph the filter graph where to link the parsed graph context - * @param filters string to be parsed - * @param inputs pointer to a linked list to the inputs of the graph, may be NULL. - * If non-NULL, *inputs is updated to contain the list of open inputs - * after the parsing, should be freed with avfilter_inout_free(). - * @param outputs pointer to a linked list to the outputs of the graph, may be NULL. - * If non-NULL, *outputs is updated to contain the list of open outputs - * after the parsing, should be freed with avfilter_inout_free(). - * @return non negative on success, a negative AVERROR code on error - */ -int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters, - AVFilterInOut **inputs, AVFilterInOut **outputs, - void *log_ctx); - -/** - * Add a graph described by a string to a graph. - * - * @param[in] graph the filter graph where to link the parsed graph context - * @param[in] filters string to be parsed - * @param[out] inputs a linked list of all free (unlinked) inputs of the - * parsed graph will be returned here. It is to be freed - * by the caller using avfilter_inout_free(). - * @param[out] outputs a linked list of all free (unlinked) outputs of the - * parsed graph will be returned here. It is to be freed by the - * caller using avfilter_inout_free(). - * @return zero on success, a negative AVERROR code on error - * - * @note This function returns the inputs and outputs that are left - * unlinked after parsing the graph and the caller then deals with - * them. - * @note This function makes no reference whatsoever to already - * existing parts of the graph and the inputs parameter will on return - * contain inputs of the newly parsed part of the graph. Analogously - * the outputs parameter will contain outputs of the newly created - * filters. - */ -int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters, - AVFilterInOut **inputs, - AVFilterInOut **outputs); - -/** - * Send a command to one or more filter instances. - * - * @param graph the filter graph - * @param target the filter(s) to which the command should be sent - * "all" sends to all filters - * otherwise it can be a filter or filter instance name - * which will send the command to all matching filters. - * @param cmd the command to send, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param res a buffer with size res_size where the filter(s) can return a response. - * - * @returns >=0 on success otherwise an error code. - * AVERROR(ENOSYS) on unsupported commands - */ -int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags); - -/** - * Queue a command for one or more filter instances. - * - * @param graph the filter graph - * @param target the filter(s) to which the command should be sent - * "all" sends to all filters - * otherwise it can be a filter or filter instance name - * which will send the command to all matching filters. - * @param cmd the command to sent, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param ts time at which the command should be sent to the filter - * - * @note As this executes commands after this function returns, no return code - * from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported. - */ -int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts); - - -/** - * Dump a graph into a human-readable string representation. - * - * @param graph the graph to dump - * @param options formatting options; currently ignored - * @return a string, or NULL in case of memory allocation failure; - * the string must be freed using av_free - */ -char *avfilter_graph_dump(AVFilterGraph *graph, const char *options); - -/** - * Request a frame on the oldest sink link. - * - * If the request returns AVERROR_EOF, try the next. - * - * Note that this function is not meant to be the sole scheduling mechanism - * of a filtergraph, only a convenience function to help drain a filtergraph - * in a balanced way under normal circumstances. - * - * Also note that AVERROR_EOF does not mean that frames did not arrive on - * some of the sinks during the process. - * When there are multiple sink links, in case the requested link - * returns an EOF, this may cause a filter to flush pending frames - * which are sent to another sink link, although unrequested. - * - * @return the return value of ff_request_frame(), - * or AVERROR_EOF if all links returned AVERROR_EOF - */ -int avfilter_graph_request_oldest(AVFilterGraph *graph); - -/** - * @} - */ - -#endif /* AVFILTER_AVFILTER_H */ diff --git a/prebuilts/x86/include/libavfilter/buffersink.h b/prebuilts/x86/include/libavfilter/buffersink.h deleted file mode 100644 index 69ed0f2..0000000 --- a/prebuilts/x86/include/libavfilter/buffersink.h +++ /dev/null @@ -1,205 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_BUFFERSINK_H -#define AVFILTER_BUFFERSINK_H - -/** - * @file - * @ingroup lavfi_buffersink - * memory buffer sink API for audio and video - */ - -#include "avfilter.h" - -/** - * @defgroup lavfi_buffersink Buffer sink API - * @ingroup lavfi - * @{ - * - * The buffersink and abuffersink filters are there to connect filter graphs - * to applications. They have a single input, connected to the graph, and no - * output. Frames must be extracted using av_buffersink_get_frame() or - * av_buffersink_get_samples(). - * - * The format negotiated by the graph during configuration can be obtained - * using the accessor functions: - * - av_buffersink_get_time_base(), - * - av_buffersink_get_format(), - * - av_buffersink_get_frame_rate(), - * - av_buffersink_get_w(), - * - av_buffersink_get_h(), - * - av_buffersink_get_sample_aspect_ratio(), - * - av_buffersink_get_channels(), - * - av_buffersink_get_channel_layout(), - * - av_buffersink_get_sample_rate(). - * - * The format can be constrained by setting options, using av_opt_set() and - * related functions with the AV_OPT_SEARCH_CHILDREN flag. - * - pix_fmts (int list), - * - sample_fmts (int list), - * - sample_rates (int list), - * - channel_layouts (int64_t), - * - channel_counts (int list), - * - all_channel_counts (bool). - * Most of these options are of type binary, and should be set using - * av_opt_set_int_list() or av_opt_set_bin(). If they are not set, all - * corresponding formats are accepted. - * - * As a special case, if neither channel_layouts nor channel_counts is set, - * all valid channel layouts are accepted, but channel counts without a - * layout are not, unless all_channel_counts is set. - * Also, channel_layouts must not contain a channel layout already accepted - * by a value in channel_counts; for example, if channel_counts contains 2, - * then channel_layouts must not contain stereo. - */ - -/** - * Get a frame with filtered data from sink and put it in frame. - * - * @param ctx pointer to a buffersink or abuffersink filter context. - * @param frame pointer to an allocated frame that will be filled with data. - * The data must be freed using av_frame_unref() / av_frame_free() - * @param flags a combination of AV_BUFFERSINK_FLAG_* flags - * - * @return >= 0 in for success, a negative AVERROR code for failure. - */ -int av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags); - -/** - * Tell av_buffersink_get_buffer_ref() to read video/samples buffer - * reference, but not remove it from the buffer. This is useful if you - * need only to read a video/samples buffer, without to fetch it. - */ -#define AV_BUFFERSINK_FLAG_PEEK 1 - -/** - * Tell av_buffersink_get_buffer_ref() not to request a frame from its input. - * If a frame is already buffered, it is read (and removed from the buffer), - * but if no frame is present, return AVERROR(EAGAIN). - */ -#define AV_BUFFERSINK_FLAG_NO_REQUEST 2 - -#if FF_API_BUFFERSINK_ALLOC -/** - * Deprecated and unused struct to use for initializing a buffersink context. - */ -typedef struct AVBufferSinkParams { - const enum AVPixelFormat *pixel_fmts; ///< list of allowed pixel formats, terminated by AV_PIX_FMT_NONE -} AVBufferSinkParams; - -/** - * Create an AVBufferSinkParams structure. - * - * Must be freed with av_free(). - */ -attribute_deprecated -AVBufferSinkParams *av_buffersink_params_alloc(void); - -/** - * Deprecated and unused struct to use for initializing an abuffersink context. - */ -typedef struct AVABufferSinkParams { - const enum AVSampleFormat *sample_fmts; ///< list of allowed sample formats, terminated by AV_SAMPLE_FMT_NONE - const int64_t *channel_layouts; ///< list of allowed channel layouts, terminated by -1 - const int *channel_counts; ///< list of allowed channel counts, terminated by -1 - int all_channel_counts; ///< if not 0, accept any channel count or layout - int *sample_rates; ///< list of allowed sample rates, terminated by -1 -} AVABufferSinkParams; - -/** - * Create an AVABufferSinkParams structure. - * - * Must be freed with av_free(). - */ -attribute_deprecated -AVABufferSinkParams *av_abuffersink_params_alloc(void); -#endif - -/** - * Set the frame size for an audio buffer sink. - * - * All calls to av_buffersink_get_buffer_ref will return a buffer with - * exactly the specified number of samples, or AVERROR(EAGAIN) if there is - * not enough. The last buffer at EOF will be padded with 0. - */ -void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size); - -/** - * @defgroup lavfi_buffersink_accessors Buffer sink accessors - * Get the properties of the stream - * @{ - */ - -enum AVMediaType av_buffersink_get_type (const AVFilterContext *ctx); -AVRational av_buffersink_get_time_base (const AVFilterContext *ctx); -int av_buffersink_get_format (const AVFilterContext *ctx); - -AVRational av_buffersink_get_frame_rate (const AVFilterContext *ctx); -int av_buffersink_get_w (const AVFilterContext *ctx); -int av_buffersink_get_h (const AVFilterContext *ctx); -AVRational av_buffersink_get_sample_aspect_ratio (const AVFilterContext *ctx); - -int av_buffersink_get_channels (const AVFilterContext *ctx); -uint64_t av_buffersink_get_channel_layout (const AVFilterContext *ctx); -int av_buffersink_get_sample_rate (const AVFilterContext *ctx); - -AVBufferRef * av_buffersink_get_hw_frames_ctx (const AVFilterContext *ctx); - -/** @} */ - -/** - * Get a frame with filtered data from sink and put it in frame. - * - * @param ctx pointer to a context of a buffersink or abuffersink AVFilter. - * @param frame pointer to an allocated frame that will be filled with data. - * The data must be freed using av_frame_unref() / av_frame_free() - * - * @return - * - >= 0 if a frame was successfully returned. - * - AVERROR(EAGAIN) if no frames are available at this point; more - * input frames must be added to the filtergraph to get more output. - * - AVERROR_EOF if there will be no more output frames on this sink. - * - A different negative AVERROR code in other failure cases. - */ -int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame); - -/** - * Same as av_buffersink_get_frame(), but with the ability to specify the number - * of samples read. This function is less efficient than - * av_buffersink_get_frame(), because it copies the data around. - * - * @param ctx pointer to a context of the abuffersink AVFilter. - * @param frame pointer to an allocated frame that will be filled with data. - * The data must be freed using av_frame_unref() / av_frame_free() - * frame will contain exactly nb_samples audio samples, except at - * the end of stream, when it can contain less than nb_samples. - * - * @return The return codes have the same meaning as for - * av_buffersink_get_frame(). - * - * @warning do not mix this function with av_buffersink_get_frame(). Use only one or - * the other with a single sink, not both. - */ -int av_buffersink_get_samples(AVFilterContext *ctx, AVFrame *frame, int nb_samples); - -/** - * @} - */ - -#endif /* AVFILTER_BUFFERSINK_H */ diff --git a/prebuilts/x86/include/libavfilter/buffersrc.h b/prebuilts/x86/include/libavfilter/buffersrc.h deleted file mode 100644 index 08fbd18..0000000 --- a/prebuilts/x86/include/libavfilter/buffersrc.h +++ /dev/null @@ -1,209 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_BUFFERSRC_H -#define AVFILTER_BUFFERSRC_H - -/** - * @file - * @ingroup lavfi_buffersrc - * Memory buffer source API. - */ - -#include "avfilter.h" - -/** - * @defgroup lavfi_buffersrc Buffer source API - * @ingroup lavfi - * @{ - */ - -enum { - - /** - * Do not check for format changes. - */ - AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT = 1, - - /** - * Immediately push the frame to the output. - */ - AV_BUFFERSRC_FLAG_PUSH = 4, - - /** - * Keep a reference to the frame. - * If the frame if reference-counted, create a new reference; otherwise - * copy the frame data. - */ - AV_BUFFERSRC_FLAG_KEEP_REF = 8, - -}; - -/** - * Get the number of failed requests. - * - * A failed request is when the request_frame method is called while no - * frame is present in the buffer. - * The number is reset when a frame is added. - */ -unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src); - -/** - * This structure contains the parameters describing the frames that will be - * passed to this filter. - * - * It should be allocated with av_buffersrc_parameters_alloc() and freed with - * av_free(). All the allocated fields in it remain owned by the caller. - */ -typedef struct AVBufferSrcParameters { - /** - * video: the pixel format, value corresponds to enum AVPixelFormat - * audio: the sample format, value corresponds to enum AVSampleFormat - */ - int format; - /** - * The timebase to be used for the timestamps on the input frames. - */ - AVRational time_base; - - /** - * Video only, the display dimensions of the input frames. - */ - int width, height; - - /** - * Video only, the sample (pixel) aspect ratio. - */ - AVRational sample_aspect_ratio; - - /** - * Video only, the frame rate of the input video. This field must only be - * set to a non-zero value if input stream has a known constant framerate - * and should be left at its initial value if the framerate is variable or - * unknown. - */ - AVRational frame_rate; - - /** - * Video with a hwaccel pixel format only. This should be a reference to an - * AVHWFramesContext instance describing the input frames. - */ - AVBufferRef *hw_frames_ctx; - - /** - * Audio only, the audio sampling rate in samples per second. - */ - int sample_rate; - - /** - * Audio only, the audio channel layout - */ - uint64_t channel_layout; -} AVBufferSrcParameters; - -/** - * Allocate a new AVBufferSrcParameters instance. It should be freed by the - * caller with av_free(). - */ -AVBufferSrcParameters *av_buffersrc_parameters_alloc(void); - -/** - * Initialize the buffersrc or abuffersrc filter with the provided parameters. - * This function may be called multiple times, the later calls override the - * previous ones. Some of the parameters may also be set through AVOptions, then - * whatever method is used last takes precedence. - * - * @param ctx an instance of the buffersrc or abuffersrc filter - * @param param the stream parameters. The frames later passed to this filter - * must conform to those parameters. All the allocated fields in - * param remain owned by the caller, libavfilter will make internal - * copies or references when necessary. - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *param); - -/** - * Add a frame to the buffer source. - * - * @param ctx an instance of the buffersrc filter - * @param frame frame to be added. If the frame is reference counted, this - * function will make a new reference to it. Otherwise the frame data will be - * copied. - * - * @return 0 on success, a negative AVERROR on error - * - * This function is equivalent to av_buffersrc_add_frame_flags() with the - * AV_BUFFERSRC_FLAG_KEEP_REF flag. - */ -av_warn_unused_result -int av_buffersrc_write_frame(AVFilterContext *ctx, const AVFrame *frame); - -/** - * Add a frame to the buffer source. - * - * @param ctx an instance of the buffersrc filter - * @param frame frame to be added. If the frame is reference counted, this - * function will take ownership of the reference(s) and reset the frame. - * Otherwise the frame data will be copied. If this function returns an error, - * the input frame is not touched. - * - * @return 0 on success, a negative AVERROR on error. - * - * @note the difference between this function and av_buffersrc_write_frame() is - * that av_buffersrc_write_frame() creates a new reference to the input frame, - * while this function takes ownership of the reference passed to it. - * - * This function is equivalent to av_buffersrc_add_frame_flags() without the - * AV_BUFFERSRC_FLAG_KEEP_REF flag. - */ -av_warn_unused_result -int av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame); - -/** - * Add a frame to the buffer source. - * - * By default, if the frame is reference-counted, this function will take - * ownership of the reference(s) and reset the frame. This can be controlled - * using the flags. - * - * If this function returns an error, the input frame is not touched. - * - * @param buffer_src pointer to a buffer source context - * @param frame a frame, or NULL to mark EOF - * @param flags a combination of AV_BUFFERSRC_FLAG_* - * @return >= 0 in case of success, a negative AVERROR code - * in case of failure - */ -av_warn_unused_result -int av_buffersrc_add_frame_flags(AVFilterContext *buffer_src, - AVFrame *frame, int flags); - -/** - * Close the buffer source after EOF. - * - * This is similar to passing NULL to av_buffersrc_add_frame_flags() - * except it takes the timestamp of the EOF, i.e. the timestamp of the end - * of the last frame. - */ -int av_buffersrc_close(AVFilterContext *ctx, int64_t pts, unsigned flags); - -/** - * @} - */ - -#endif /* AVFILTER_BUFFERSRC_H */ diff --git a/prebuilts/x86/include/libavfilter/version.h b/prebuilts/x86/include/libavfilter/version.h deleted file mode 100644 index 33bb98e..0000000 --- a/prebuilts/x86/include/libavfilter/version.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_VERSION_H -#define AVFILTER_VERSION_H - -/** - * @file - * @ingroup lavfi - * Libavfilter version macros - */ - -#include "libavutil/version.h" - -#define LIBAVFILTER_VERSION_MAJOR 7 -#define LIBAVFILTER_VERSION_MINOR 110 -#define LIBAVFILTER_VERSION_MICRO 100 - - -#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ - LIBAVFILTER_VERSION_MINOR, \ - LIBAVFILTER_VERSION_MICRO) -#define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \ - LIBAVFILTER_VERSION_MINOR, \ - LIBAVFILTER_VERSION_MICRO) -#define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT - -#define LIBAVFILTER_IDENT "Lavfi" AV_STRINGIFY(LIBAVFILTER_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ - -#ifndef FF_API_OLD_FILTER_OPTS_ERROR -#define FF_API_OLD_FILTER_OPTS_ERROR (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_LAVR_OPTS -#define FF_API_LAVR_OPTS (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_FILTER_GET_SET -#define FF_API_FILTER_GET_SET (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_SWS_PARAM_OPTION -#define FF_API_SWS_PARAM_OPTION (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_NEXT -#define FF_API_NEXT (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_FILTER_LINK_SET_CLOSED -#define FF_API_FILTER_LINK_SET_CLOSED (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_BUFFERSINK_ALLOC -#define FF_API_BUFFERSINK_ALLOC (LIBAVFILTER_VERSION_MAJOR < 9) -#endif - -#endif /* AVFILTER_VERSION_H */ diff --git a/prebuilts/x86/include/libavformat/avformat.h b/prebuilts/x86/include/libavformat/avformat.h deleted file mode 100644 index 56708c0..0000000 --- a/prebuilts/x86/include/libavformat/avformat.h +++ /dev/null @@ -1,3012 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFORMAT_AVFORMAT_H -#define AVFORMAT_AVFORMAT_H - -/** - * @file - * @ingroup libavf - * Main libavformat public API header - */ - -/** - * @defgroup libavf libavformat - * I/O and Muxing/Demuxing Library - * - * Libavformat (lavf) is a library for dealing with various media container - * formats. Its main two purposes are demuxing - i.e. splitting a media file - * into component streams, and the reverse process of muxing - writing supplied - * data in a specified container format. It also has an @ref lavf_io - * "I/O module" which supports a number of protocols for accessing the data (e.g. - * file, tcp, http and others). - * Unless you are absolutely sure you won't use libavformat's network - * capabilities, you should also call avformat_network_init(). - * - * A supported input format is described by an AVInputFormat struct, conversely - * an output format is described by AVOutputFormat. You can iterate over all - * input/output formats using the av_demuxer_iterate / av_muxer_iterate() functions. - * The protocols layer is not part of the public API, so you can only get the names - * of supported protocols with the avio_enum_protocols() function. - * - * Main lavf structure used for both muxing and demuxing is AVFormatContext, - * which exports all information about the file being read or written. As with - * most Libavformat structures, its size is not part of public ABI, so it cannot be - * allocated on stack or directly with av_malloc(). To create an - * AVFormatContext, use avformat_alloc_context() (some functions, like - * avformat_open_input() might do that for you). - * - * Most importantly an AVFormatContext contains: - * @li the @ref AVFormatContext.iformat "input" or @ref AVFormatContext.oformat - * "output" format. It is either autodetected or set by user for input; - * always set by user for output. - * @li an @ref AVFormatContext.streams "array" of AVStreams, which describe all - * elementary streams stored in the file. AVStreams are typically referred to - * using their index in this array. - * @li an @ref AVFormatContext.pb "I/O context". It is either opened by lavf or - * set by user for input, always set by user for output (unless you are dealing - * with an AVFMT_NOFILE format). - * - * @section lavf_options Passing options to (de)muxers - * It is possible to configure lavf muxers and demuxers using the @ref avoptions - * mechanism. Generic (format-independent) libavformat options are provided by - * AVFormatContext, they can be examined from a user program by calling - * av_opt_next() / av_opt_find() on an allocated AVFormatContext (or its AVClass - * from avformat_get_class()). Private (format-specific) options are provided by - * AVFormatContext.priv_data if and only if AVInputFormat.priv_class / - * AVOutputFormat.priv_class of the corresponding format struct is non-NULL. - * Further options may be provided by the @ref AVFormatContext.pb "I/O context", - * if its AVClass is non-NULL, and the protocols layer. See the discussion on - * nesting in @ref avoptions documentation to learn how to access those. - * - * @section urls - * URL strings in libavformat are made of a scheme/protocol, a ':', and a - * scheme specific string. URLs without a scheme and ':' used for local files - * are supported but deprecated. "file:" should be used for local files. - * - * It is important that the scheme string is not taken from untrusted - * sources without checks. - * - * Note that some schemes/protocols are quite powerful, allowing access to - * both local and remote files, parts of them, concatenations of them, local - * audio and video devices and so on. - * - * @{ - * - * @defgroup lavf_decoding Demuxing - * @{ - * Demuxers read a media file and split it into chunks of data (@em packets). A - * @ref AVPacket "packet" contains one or more encoded frames which belongs to a - * single elementary stream. In the lavf API this process is represented by the - * avformat_open_input() function for opening a file, av_read_frame() for - * reading a single packet and finally avformat_close_input(), which does the - * cleanup. - * - * @section lavf_decoding_open Opening a media file - * The minimum information required to open a file is its URL, which - * is passed to avformat_open_input(), as in the following code: - * @code - * const char *url = "file:in.mp3"; - * AVFormatContext *s = NULL; - * int ret = avformat_open_input(&s, url, NULL, NULL); - * if (ret < 0) - * abort(); - * @endcode - * The above code attempts to allocate an AVFormatContext, open the - * specified file (autodetecting the format) and read the header, exporting the - * information stored there into s. Some formats do not have a header or do not - * store enough information there, so it is recommended that you call the - * avformat_find_stream_info() function which tries to read and decode a few - * frames to find missing information. - * - * In some cases you might want to preallocate an AVFormatContext yourself with - * avformat_alloc_context() and do some tweaking on it before passing it to - * avformat_open_input(). One such case is when you want to use custom functions - * for reading input data instead of lavf internal I/O layer. - * To do that, create your own AVIOContext with avio_alloc_context(), passing - * your reading callbacks to it. Then set the @em pb field of your - * AVFormatContext to newly created AVIOContext. - * - * Since the format of the opened file is in general not known until after - * avformat_open_input() has returned, it is not possible to set demuxer private - * options on a preallocated context. Instead, the options should be passed to - * avformat_open_input() wrapped in an AVDictionary: - * @code - * AVDictionary *options = NULL; - * av_dict_set(&options, "video_size", "640x480", 0); - * av_dict_set(&options, "pixel_format", "rgb24", 0); - * - * if (avformat_open_input(&s, url, NULL, &options) < 0) - * abort(); - * av_dict_free(&options); - * @endcode - * This code passes the private options 'video_size' and 'pixel_format' to the - * demuxer. They would be necessary for e.g. the rawvideo demuxer, since it - * cannot know how to interpret raw video data otherwise. If the format turns - * out to be something different than raw video, those options will not be - * recognized by the demuxer and therefore will not be applied. Such unrecognized - * options are then returned in the options dictionary (recognized options are - * consumed). The calling program can handle such unrecognized options as it - * wishes, e.g. - * @code - * AVDictionaryEntry *e; - * if (e = av_dict_get(options, "", NULL, AV_DICT_IGNORE_SUFFIX)) { - * fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key); - * abort(); - * } - * @endcode - * - * After you have finished reading the file, you must close it with - * avformat_close_input(). It will free everything associated with the file. - * - * @section lavf_decoding_read Reading from an opened file - * Reading data from an opened AVFormatContext is done by repeatedly calling - * av_read_frame() on it. Each call, if successful, will return an AVPacket - * containing encoded data for one AVStream, identified by - * AVPacket.stream_index. This packet may be passed straight into the libavcodec - * decoding functions avcodec_send_packet() or avcodec_decode_subtitle2() if the - * caller wishes to decode the data. - * - * AVPacket.pts, AVPacket.dts and AVPacket.duration timing information will be - * set if known. They may also be unset (i.e. AV_NOPTS_VALUE for - * pts/dts, 0 for duration) if the stream does not provide them. The timing - * information will be in AVStream.time_base units, i.e. it has to be - * multiplied by the timebase to convert them to seconds. - * - * A packet returned by av_read_frame() is always reference-counted, - * i.e. AVPacket.buf is set and the user may keep it indefinitely. - * The packet must be freed with av_packet_unref() when it is no - * longer needed. - * - * @section lavf_decoding_seek Seeking - * @} - * - * @defgroup lavf_encoding Muxing - * @{ - * Muxers take encoded data in the form of @ref AVPacket "AVPackets" and write - * it into files or other output bytestreams in the specified container format. - * - * The main API functions for muxing are avformat_write_header() for writing the - * file header, av_write_frame() / av_interleaved_write_frame() for writing the - * packets and av_write_trailer() for finalizing the file. - * - * At the beginning of the muxing process, the caller must first call - * avformat_alloc_context() to create a muxing context. The caller then sets up - * the muxer by filling the various fields in this context: - * - * - The @ref AVFormatContext.oformat "oformat" field must be set to select the - * muxer that will be used. - * - Unless the format is of the AVFMT_NOFILE type, the @ref AVFormatContext.pb - * "pb" field must be set to an opened IO context, either returned from - * avio_open2() or a custom one. - * - Unless the format is of the AVFMT_NOSTREAMS type, at least one stream must - * be created with the avformat_new_stream() function. The caller should fill - * the @ref AVStream.codecpar "stream codec parameters" information, such as the - * codec @ref AVCodecParameters.codec_type "type", @ref AVCodecParameters.codec_id - * "id" and other parameters (e.g. width / height, the pixel or sample format, - * etc.) as known. The @ref AVStream.time_base "stream timebase" should - * be set to the timebase that the caller desires to use for this stream (note - * that the timebase actually used by the muxer can be different, as will be - * described later). - * - It is advised to manually initialize only the relevant fields in - * AVCodecParameters, rather than using @ref avcodec_parameters_copy() during - * remuxing: there is no guarantee that the codec context values remain valid - * for both input and output format contexts. - * - The caller may fill in additional information, such as @ref - * AVFormatContext.metadata "global" or @ref AVStream.metadata "per-stream" - * metadata, @ref AVFormatContext.chapters "chapters", @ref - * AVFormatContext.programs "programs", etc. as described in the - * AVFormatContext documentation. Whether such information will actually be - * stored in the output depends on what the container format and the muxer - * support. - * - * When the muxing context is fully set up, the caller must call - * avformat_write_header() to initialize the muxer internals and write the file - * header. Whether anything actually is written to the IO context at this step - * depends on the muxer, but this function must always be called. Any muxer - * private options must be passed in the options parameter to this function. - * - * The data is then sent to the muxer by repeatedly calling av_write_frame() or - * av_interleaved_write_frame() (consult those functions' documentation for - * discussion on the difference between them; only one of them may be used with - * a single muxing context, they should not be mixed). Do note that the timing - * information on the packets sent to the muxer must be in the corresponding - * AVStream's timebase. That timebase is set by the muxer (in the - * avformat_write_header() step) and may be different from the timebase - * requested by the caller. - * - * Once all the data has been written, the caller must call av_write_trailer() - * to flush any buffered packets and finalize the output file, then close the IO - * context (if any) and finally free the muxing context with - * avformat_free_context(). - * @} - * - * @defgroup lavf_io I/O Read/Write - * @{ - * @section lavf_io_dirlist Directory listing - * The directory listing API makes it possible to list files on remote servers. - * - * Some of possible use cases: - * - an "open file" dialog to choose files from a remote location, - * - a recursive media finder providing a player with an ability to play all - * files from a given directory. - * - * @subsection lavf_io_dirlist_open Opening a directory - * At first, a directory needs to be opened by calling avio_open_dir() - * supplied with a URL and, optionally, ::AVDictionary containing - * protocol-specific parameters. The function returns zero or positive - * integer and allocates AVIODirContext on success. - * - * @code - * AVIODirContext *ctx = NULL; - * if (avio_open_dir(&ctx, "smb://example.com/some_dir", NULL) < 0) { - * fprintf(stderr, "Cannot open directory.\n"); - * abort(); - * } - * @endcode - * - * This code tries to open a sample directory using smb protocol without - * any additional parameters. - * - * @subsection lavf_io_dirlist_read Reading entries - * Each directory's entry (i.e. file, another directory, anything else - * within ::AVIODirEntryType) is represented by AVIODirEntry. - * Reading consecutive entries from an opened AVIODirContext is done by - * repeatedly calling avio_read_dir() on it. Each call returns zero or - * positive integer if successful. Reading can be stopped right after the - * NULL entry has been read -- it means there are no entries left to be - * read. The following code reads all entries from a directory associated - * with ctx and prints their names to standard output. - * @code - * AVIODirEntry *entry = NULL; - * for (;;) { - * if (avio_read_dir(ctx, &entry) < 0) { - * fprintf(stderr, "Cannot list directory.\n"); - * abort(); - * } - * if (!entry) - * break; - * printf("%s\n", entry->name); - * avio_free_directory_entry(&entry); - * } - * @endcode - * @} - * - * @defgroup lavf_codec Demuxers - * @{ - * @defgroup lavf_codec_native Native Demuxers - * @{ - * @} - * @defgroup lavf_codec_wrappers External library wrappers - * @{ - * @} - * @} - * @defgroup lavf_protos I/O Protocols - * @{ - * @} - * @defgroup lavf_internal Internal - * @{ - * @} - * @} - */ - -#include -#include /* FILE */ -#include "libavcodec/avcodec.h" -#include "libavutil/dict.h" -#include "libavutil/log.h" - -#include "avio.h" -#include "libavformat/version.h" - -struct AVFormatContext; - -struct AVDeviceInfoList; -struct AVDeviceCapabilitiesQuery; - -/** - * @defgroup metadata_api Public Metadata API - * @{ - * @ingroup libavf - * The metadata API allows libavformat to export metadata tags to a client - * application when demuxing. Conversely it allows a client application to - * set metadata when muxing. - * - * Metadata is exported or set as pairs of key/value strings in the 'metadata' - * fields of the AVFormatContext, AVStream, AVChapter and AVProgram structs - * using the @ref lavu_dict "AVDictionary" API. Like all strings in FFmpeg, - * metadata is assumed to be UTF-8 encoded Unicode. Note that metadata - * exported by demuxers isn't checked to be valid UTF-8 in most cases. - * - * Important concepts to keep in mind: - * - Keys are unique; there can never be 2 tags with the same key. This is - * also meant semantically, i.e., a demuxer should not knowingly produce - * several keys that are literally different but semantically identical. - * E.g., key=Author5, key=Author6. In this example, all authors must be - * placed in the same tag. - * - Metadata is flat, not hierarchical; there are no subtags. If you - * want to store, e.g., the email address of the child of producer Alice - * and actor Bob, that could have key=alice_and_bobs_childs_email_address. - * - Several modifiers can be applied to the tag name. This is done by - * appending a dash character ('-') and the modifier name in the order - * they appear in the list below -- e.g. foo-eng-sort, not foo-sort-eng. - * - language -- a tag whose value is localized for a particular language - * is appended with the ISO 639-2/B 3-letter language code. - * For example: Author-ger=Michael, Author-eng=Mike - * The original/default language is in the unqualified "Author" tag. - * A demuxer should set a default if it sets any translated tag. - * - sorting -- a modified version of a tag that should be used for - * sorting will have '-sort' appended. E.g. artist="The Beatles", - * artist-sort="Beatles, The". - * - Some protocols and demuxers support metadata updates. After a successful - * call to av_read_frame(), AVFormatContext.event_flags or AVStream.event_flags - * will be updated to indicate if metadata changed. In order to detect metadata - * changes on a stream, you need to loop through all streams in the AVFormatContext - * and check their individual event_flags. - * - * - Demuxers attempt to export metadata in a generic format, however tags - * with no generic equivalents are left as they are stored in the container. - * Follows a list of generic tag names: - * - @verbatim - album -- name of the set this work belongs to - album_artist -- main creator of the set/album, if different from artist. - e.g. "Various Artists" for compilation albums. - artist -- main creator of the work - comment -- any additional description of the file. - composer -- who composed the work, if different from artist. - copyright -- name of copyright holder. - creation_time-- date when the file was created, preferably in ISO 8601. - date -- date when the work was created, preferably in ISO 8601. - disc -- number of a subset, e.g. disc in a multi-disc collection. - encoder -- name/settings of the software/hardware that produced the file. - encoded_by -- person/group who created the file. - filename -- original name of the file. - genre -- . - language -- main language in which the work is performed, preferably - in ISO 639-2 format. Multiple languages can be specified by - separating them with commas. - performer -- artist who performed the work, if different from artist. - E.g for "Also sprach Zarathustra", artist would be "Richard - Strauss" and performer "London Philharmonic Orchestra". - publisher -- name of the label/publisher. - service_name -- name of the service in broadcasting (channel name). - service_provider -- name of the service provider in broadcasting. - title -- name of the work. - track -- number of this work in the set, can be in form current/total. - variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of - @endverbatim - * - * Look in the examples section for an application example how to use the Metadata API. - * - * @} - */ - -/* packet functions */ - - -/** - * Allocate and read the payload of a packet and initialize its - * fields with default values. - * - * @param s associated IO context - * @param pkt packet - * @param size desired payload size - * @return >0 (read size) if OK, AVERROR_xxx otherwise - */ -int av_get_packet(AVIOContext *s, AVPacket *pkt, int size); - - -/** - * Read data and append it to the current content of the AVPacket. - * If pkt->size is 0 this is identical to av_get_packet. - * Note that this uses av_grow_packet and thus involves a realloc - * which is inefficient. Thus this function should only be used - * when there is no reasonable way to know (an upper bound of) - * the final size. - * - * @param s associated IO context - * @param pkt packet - * @param size amount of data to read - * @return >0 (read size) if OK, AVERROR_xxx otherwise, previous data - * will not be lost even if an error occurs. - */ -int av_append_packet(AVIOContext *s, AVPacket *pkt, int size); - -/*************************************************/ -/* input/output formats */ - -struct AVCodecTag; - -/** - * This structure contains the data a format has to probe a file. - */ -typedef struct AVProbeData { - const char *filename; - unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */ - int buf_size; /**< Size of buf except extra allocated bytes */ - const char *mime_type; /**< mime_type, when known. */ -} AVProbeData; - -#define AVPROBE_SCORE_RETRY (AVPROBE_SCORE_MAX/4) -#define AVPROBE_SCORE_STREAM_RETRY (AVPROBE_SCORE_MAX/4-1) - -#define AVPROBE_SCORE_EXTENSION 50 ///< score for file extension -#define AVPROBE_SCORE_MIME 75 ///< score for file mime type -#define AVPROBE_SCORE_MAX 100 ///< maximum score - -#define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer - -/// Demuxer will use avio_open, no opened file should be provided by the caller. -#define AVFMT_NOFILE 0x0001 -#define AVFMT_NEEDNUMBER 0x0002 /**< Needs '%d' in filename. */ -#define AVFMT_SHOW_IDS 0x0008 /**< Show format stream IDs numbers. */ -#define AVFMT_GLOBALHEADER 0x0040 /**< Format wants global header. */ -#define AVFMT_NOTIMESTAMPS 0x0080 /**< Format does not need / have any timestamps. */ -#define AVFMT_GENERIC_INDEX 0x0100 /**< Use generic index building code. */ -#define AVFMT_TS_DISCONT 0x0200 /**< Format allows timestamp discontinuities. Note, muxers always require valid (monotone) timestamps */ -#define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */ -#define AVFMT_NODIMENSIONS 0x0800 /**< Format does not need width/height */ -#define AVFMT_NOSTREAMS 0x1000 /**< Format does not require any streams */ -#define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fall back on binary search via read_timestamp */ -#define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fall back on generic search */ -#define AVFMT_NO_BYTE_SEEK 0x8000 /**< Format does not allow seeking by bytes */ -#define AVFMT_ALLOW_FLUSH 0x10000 /**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. */ -#define AVFMT_TS_NONSTRICT 0x20000 /**< Format does not require strictly - increasing timestamps, but they must - still be monotonic */ -#define AVFMT_TS_NEGATIVE 0x40000 /**< Format allows muxing negative - timestamps. If not set the timestamp - will be shifted in av_write_frame and - av_interleaved_write_frame so they - start from 0. - The user or muxer can override this through - AVFormatContext.avoid_negative_ts - */ - -#define AVFMT_SEEK_TO_PTS 0x4000000 /**< Seeking is based on PTS */ - -/** - * @addtogroup lavf_encoding - * @{ - */ -typedef struct AVOutputFormat { - const char *name; - /** - * Descriptive name for the format, meant to be more human-readable - * than name. You should use the NULL_IF_CONFIG_SMALL() macro - * to define it. - */ - const char *long_name; - const char *mime_type; - const char *extensions; /**< comma-separated filename extensions */ - /* output support */ - enum AVCodecID audio_codec; /**< default audio codec */ - enum AVCodecID video_codec; /**< default video codec */ - enum AVCodecID subtitle_codec; /**< default subtitle codec */ - /** - * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, - * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, - * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, - * AVFMT_TS_NONSTRICT, AVFMT_TS_NEGATIVE - */ - int flags; - - /** - * List of supported codec_id-codec_tag pairs, ordered by "better - * choice first". The arrays are all terminated by AV_CODEC_ID_NONE. - */ - const struct AVCodecTag * const *codec_tag; - - - const AVClass *priv_class; ///< AVClass for the private context - - /***************************************************************** - * No fields below this line are 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. - ***************************************************************** - */ - /** - * The ff_const59 define is not part of the public API and will - * be removed without further warning. - */ -#if FF_API_AVIOFORMAT -#define ff_const59 -#else -#define ff_const59 const -#endif -#if FF_API_NEXT - ff_const59 struct AVOutputFormat *next; -#endif - /** - * size of private data so that it can be allocated in the wrapper - */ - int priv_data_size; - - int (*write_header)(struct AVFormatContext *); - /** - * Write a packet. If AVFMT_ALLOW_FLUSH is set in flags, - * pkt can be NULL in order to flush data buffered in the muxer. - * When flushing, return 0 if there still is more data to flush, - * or 1 if everything was flushed and there is no more buffered - * data. - */ - int (*write_packet)(struct AVFormatContext *, AVPacket *pkt); - int (*write_trailer)(struct AVFormatContext *); - /** - * A format-specific function for interleavement. - * If unset, packets will be interleaved by dts. - */ - int (*interleave_packet)(struct AVFormatContext *, AVPacket *out, - AVPacket *in, int flush); - /** - * Test if the given codec can be stored in this container. - * - * @return 1 if the codec is supported, 0 if it is not. - * A negative number if unknown. - * MKTAG('A', 'P', 'I', 'C') if the codec is only supported as AV_DISPOSITION_ATTACHED_PIC - */ - int (*query_codec)(enum AVCodecID id, int std_compliance); - - void (*get_output_timestamp)(struct AVFormatContext *s, int stream, - int64_t *dts, int64_t *wall); - /** - * Allows sending messages from application to device. - */ - int (*control_message)(struct AVFormatContext *s, int type, - void *data, size_t data_size); - - /** - * Write an uncoded AVFrame. - * - * See av_write_uncoded_frame() for details. - * - * The library will free *frame afterwards, but the muxer can prevent it - * by setting the pointer to NULL. - */ - int (*write_uncoded_frame)(struct AVFormatContext *, int stream_index, - AVFrame **frame, unsigned flags); - /** - * Returns device list with it properties. - * @see avdevice_list_devices() for more details. - */ - int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); -#if LIBAVFORMAT_VERSION_MAJOR < 59 - /** - * Initialize device capabilities submodule. - * @see avdevice_capabilities_create() for more details. - */ - int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); - /** - * Free device capabilities submodule. - * @see avdevice_capabilities_free() for more details. - */ - int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); -#endif - enum AVCodecID data_codec; /**< default data codec */ - /** - * Initialize format. May allocate data here, and set any AVFormatContext or - * AVStream parameters that need to be set before packets are sent. - * This method must not write output. - * - * Return 0 if streams were fully configured, 1 if not, negative AVERROR on failure - * - * Any allocations made here must be freed in deinit(). - */ - int (*init)(struct AVFormatContext *); - /** - * Deinitialize format. If present, this is called whenever the muxer is being - * destroyed, regardless of whether or not the header has been written. - * - * If a trailer is being written, this is called after write_trailer(). - * - * This is called if init() fails as well. - */ - void (*deinit)(struct AVFormatContext *); - /** - * Set up any necessary bitstream filtering and extract any extra data needed - * for the global header. - * Return 0 if more packets from this stream must be checked; 1 if not. - */ - int (*check_bitstream)(struct AVFormatContext *, const AVPacket *pkt); -} AVOutputFormat; -/** - * @} - */ - -/** - * @addtogroup lavf_decoding - * @{ - */ -typedef struct AVInputFormat { - /** - * A comma separated list of short names for the format. New names - * may be appended with a minor bump. - */ - const char *name; - - /** - * Descriptive name for the format, meant to be more human-readable - * than name. You should use the NULL_IF_CONFIG_SMALL() macro - * to define it. - */ - const char *long_name; - - /** - * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, - * AVFMT_NOTIMESTAMPS, AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, - * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS. - */ - int flags; - - /** - * If extensions are defined, then no probe is done. You should - * usually not use extension format guessing because it is not - * reliable enough - */ - const char *extensions; - - const struct AVCodecTag * const *codec_tag; - - const AVClass *priv_class; ///< AVClass for the private context - - /** - * Comma-separated list of mime types. - * It is used check for matching mime types while probing. - * @see av_probe_input_format2 - */ - const char *mime_type; - - /***************************************************************** - * No fields below this line are 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. - ***************************************************************** - */ -#if FF_API_NEXT - ff_const59 struct AVInputFormat *next; -#endif - - /** - * Raw demuxers store their codec ID here. - */ - int raw_codec_id; - - /** - * Size of private data so that it can be allocated in the wrapper. - */ - int priv_data_size; - - /** - * Tell if a given file has a chance of being parsed as this format. - * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes - * big so you do not have to check for that unless you need more. - */ - int (*read_probe)(const AVProbeData *); - - /** - * Read the format header and initialize the AVFormatContext - * structure. Return 0 if OK. 'avformat_new_stream' should be - * called to create new streams. - */ - int (*read_header)(struct AVFormatContext *); - - /** - * Read one packet and put it in 'pkt'. pts and flags are also - * set. 'avformat_new_stream' can be called only if the flag - * AVFMTCTX_NOHEADER is used and only in the calling thread (not in a - * background thread). - * @return 0 on success, < 0 on error. - * Upon returning an error, pkt must be unreferenced by the caller. - */ - int (*read_packet)(struct AVFormatContext *, AVPacket *pkt); - - /** - * Close the stream. The AVFormatContext and AVStreams are not - * freed by this function - */ - int (*read_close)(struct AVFormatContext *); - - /** - * Seek to a given timestamp relative to the frames in - * stream component stream_index. - * @param stream_index Must not be -1. - * @param flags Selects which direction should be preferred if no exact - * match is available. - * @return >= 0 on success (but not necessarily the new offset) - */ - int (*read_seek)(struct AVFormatContext *, - int stream_index, int64_t timestamp, int flags); - - /** - * Get the next timestamp in stream[stream_index].time_base units. - * @return the timestamp or AV_NOPTS_VALUE if an error occurred - */ - int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index, - int64_t *pos, int64_t pos_limit); - - /** - * Start/resume playing - only meaningful if using a network-based format - * (RTSP). - */ - int (*read_play)(struct AVFormatContext *); - - /** - * Pause playing - only meaningful if using a network-based format - * (RTSP). - */ - int (*read_pause)(struct AVFormatContext *); - - /** - * Seek to timestamp ts. - * Seeking will be done so that the point from which all active streams - * can be presented successfully will be closest to ts and within min/max_ts. - * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. - */ - int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); - - /** - * Returns device list with it properties. - * @see avdevice_list_devices() for more details. - */ - int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - /** - * Initialize device capabilities submodule. - * @see avdevice_capabilities_create() for more details. - */ - int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); - - /** - * Free device capabilities submodule. - * @see avdevice_capabilities_free() for more details. - */ - int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); -#endif -} AVInputFormat; -/** - * @} - */ - -enum AVStreamParseType { - AVSTREAM_PARSE_NONE, - AVSTREAM_PARSE_FULL, /**< full parsing and repack */ - AVSTREAM_PARSE_HEADERS, /**< Only parse headers, do not repack. */ - AVSTREAM_PARSE_TIMESTAMPS, /**< full parsing and interpolation of timestamps for frames not starting on a packet boundary */ - AVSTREAM_PARSE_FULL_ONCE, /**< full parsing and repack of the first frame only, only implemented for H.264 currently */ - AVSTREAM_PARSE_FULL_RAW, /**< full parsing and repack with timestamp and position generation by parser for raw - this assumes that each packet in the file contains no demuxer level headers and - just codec level data, otherwise position generation would fail */ -}; - -typedef struct AVIndexEntry { - int64_t pos; - int64_t timestamp; /**< - * Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are available - * when seeking to this entry. That means preferable PTS on keyframe based formats. - * But demuxers can choose to store a different timestamp, if it is more convenient for the implementation or nothing better - * is known - */ -#define AVINDEX_KEYFRAME 0x0001 -#define AVINDEX_DISCARD_FRAME 0x0002 /** - * Flag is used to indicate which frame should be discarded after decoding. - */ - int flags:2; - int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment). - int min_distance; /**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. */ -} AVIndexEntry; - -#define AV_DISPOSITION_DEFAULT 0x0001 -#define AV_DISPOSITION_DUB 0x0002 -#define AV_DISPOSITION_ORIGINAL 0x0004 -#define AV_DISPOSITION_COMMENT 0x0008 -#define AV_DISPOSITION_LYRICS 0x0010 -#define AV_DISPOSITION_KARAOKE 0x0020 - -/** - * Track should be used during playback by default. - * Useful for subtitle track that should be displayed - * even when user did not explicitly ask for subtitles. - */ -#define AV_DISPOSITION_FORCED 0x0040 -#define AV_DISPOSITION_HEARING_IMPAIRED 0x0080 /**< stream for hearing impaired audiences */ -#define AV_DISPOSITION_VISUAL_IMPAIRED 0x0100 /**< stream for visual impaired audiences */ -#define AV_DISPOSITION_CLEAN_EFFECTS 0x0200 /**< stream without voice */ -/** - * The stream is stored in the file as an attached picture/"cover art" (e.g. - * APIC frame in ID3v2). The first (usually only) packet associated with it - * will be returned among the first few packets read from the file unless - * seeking takes place. It can also be accessed at any time in - * AVStream.attached_pic. - */ -#define AV_DISPOSITION_ATTACHED_PIC 0x0400 -/** - * The stream is sparse, and contains thumbnail images, often corresponding - * to chapter markers. Only ever used with AV_DISPOSITION_ATTACHED_PIC. - */ -#define AV_DISPOSITION_TIMED_THUMBNAILS 0x0800 - -typedef struct AVStreamInternal AVStreamInternal; - -/** - * To specify text track kind (different from subtitles default). - */ -#define AV_DISPOSITION_CAPTIONS 0x10000 -#define AV_DISPOSITION_DESCRIPTIONS 0x20000 -#define AV_DISPOSITION_METADATA 0x40000 -#define AV_DISPOSITION_DEPENDENT 0x80000 ///< dependent audio stream (mix_type=0 in mpegts) -#define AV_DISPOSITION_STILL_IMAGE 0x100000 ///< still images in video stream (still_picture_flag=1 in mpegts) - -/** - * Options for behavior on timestamp wrap detection. - */ -#define AV_PTS_WRAP_IGNORE 0 ///< ignore the wrap -#define AV_PTS_WRAP_ADD_OFFSET 1 ///< add the format specific offset on wrap detection -#define AV_PTS_WRAP_SUB_OFFSET -1 ///< subtract the format specific offset on wrap detection - -/** - * Stream structure. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVStream) must not be used outside libav*. - */ -typedef struct AVStream { - int index; /**< stream index in AVFormatContext */ - /** - * Format-specific stream ID. - * decoding: set by libavformat - * encoding: set by the user, replaced by libavformat if left unset - */ - int id; -#if FF_API_LAVF_AVCTX - /** - * @deprecated use the codecpar struct instead - */ - attribute_deprecated - AVCodecContext *codec; -#endif - void *priv_data; - - /** - * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. - * - * decoding: set by libavformat - * encoding: May be set by the caller before avformat_write_header() to - * provide a hint to the muxer about the desired timebase. In - * avformat_write_header(), the muxer will overwrite this field - * with the timebase that will actually be used for the timestamps - * written into the file (which may or may not be related to the - * user-provided one, depending on the format). - */ - AVRational time_base; - - /** - * Decoding: pts of the first frame of the stream in presentation order, in stream time base. - * Only set this if you are absolutely 100% sure that the value you set - * it to really is the pts of the first frame. - * This may be undefined (AV_NOPTS_VALUE). - * @note The ASF header does NOT contain a correct start_time the ASF - * demuxer must NOT set this. - */ - int64_t start_time; - - /** - * Decoding: duration of the stream, in stream time base. - * If a source file does not specify a duration, but does specify - * a bitrate, this value will be estimated from bitrate and file size. - * - * Encoding: May be set by the caller before avformat_write_header() to - * provide a hint to the muxer about the estimated duration. - */ - int64_t duration; - - int64_t nb_frames; ///< number of frames in this stream if known or 0 - - int disposition; /**< AV_DISPOSITION_* bit field */ - - enum AVDiscard discard; ///< Selects which packets can be discarded at will and do not need to be demuxed. - - /** - * sample aspect ratio (0 if unknown) - * - encoding: Set by user. - * - decoding: Set by libavformat. - */ - AVRational sample_aspect_ratio; - - AVDictionary *metadata; - - /** - * Average framerate - * - * - demuxing: May be set by libavformat when creating the stream or in - * avformat_find_stream_info(). - * - muxing: May be set by the caller before avformat_write_header(). - */ - AVRational avg_frame_rate; - - /** - * For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet - * will contain the attached picture. - * - * decoding: set by libavformat, must not be modified by the caller. - * encoding: unused - */ - AVPacket attached_pic; - - /** - * An array of side data that applies to the whole stream (i.e. the - * container does not allow it to change between packets). - * - * There may be no overlap between the side data in this array and side data - * in the packets. I.e. a given side data is either exported by the muxer - * (demuxing) / set by the caller (muxing) in this array, then it never - * appears in the packets, or the side data is exported / sent through - * the packets (always in the first packet where the value becomes known or - * changes), then it does not appear in this array. - * - * - demuxing: Set by libavformat when the stream is created. - * - muxing: May be set by the caller before avformat_write_header(). - * - * Freed by libavformat in avformat_free_context(). - * - * @see av_format_inject_global_side_data() - */ - AVPacketSideData *side_data; - /** - * The number of elements in the AVStream.side_data array. - */ - int nb_side_data; - - /** - * Flags indicating events happening on the stream, a combination of - * AVSTREAM_EVENT_FLAG_*. - * - * - demuxing: may be set by the demuxer in avformat_open_input(), - * avformat_find_stream_info() and av_read_frame(). Flags must be cleared - * by the user once the event has been handled. - * - muxing: may be set by the user after avformat_write_header(). to - * indicate a user-triggered event. The muxer will clear the flags for - * events it has handled in av_[interleaved]_write_frame(). - */ - int event_flags; -/** - * - demuxing: the demuxer read new metadata from the file and updated - * AVStream.metadata accordingly - * - muxing: the user updated AVStream.metadata and wishes the muxer to write - * it into the file - */ -#define AVSTREAM_EVENT_FLAG_METADATA_UPDATED 0x0001 -/** - * - demuxing: new packets for this stream were read from the file. This - * event is informational only and does not guarantee that new packets - * for this stream will necessarily be returned from av_read_frame(). - */ -#define AVSTREAM_EVENT_FLAG_NEW_PACKETS (1 << 1) - - /** - * Real base framerate of the stream. - * This is the lowest framerate with which all timestamps can be - * represented accurately (it is the least common multiple of all - * framerates in the stream). Note, this value is just a guess! - * For example, if the time base is 1/90000 and all frames have either - * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. - */ - AVRational r_frame_rate; - -#if FF_API_LAVF_FFSERVER - /** - * String containing pairs of key and values describing recommended encoder configuration. - * Pairs are separated by ','. - * Keys are separated from values by '='. - * - * @deprecated unused - */ - attribute_deprecated - char *recommended_encoder_configuration; -#endif - - /** - * Codec parameters associated with this stream. Allocated and freed by - * libavformat in avformat_new_stream() and avformat_free_context() - * respectively. - * - * - demuxing: filled by libavformat on stream creation or in - * avformat_find_stream_info() - * - muxing: filled by the caller before avformat_write_header() - */ - AVCodecParameters *codecpar; - - /***************************************************************** - * 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. - * Internal note: be aware that physically removing these fields - * will break ABI. Replace removed fields with dummy fields, and - * add new fields to AVStreamInternal. - ***************************************************************** - */ - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - // kept for ABI compatibility only, do not access in any way - void *unused; -#endif - - int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */ - - // Timestamp generation support: - /** - * Timestamp corresponding to the last dts sync point. - * - * Initialized when AVCodecParserContext.dts_sync_point >= 0 and - * a DTS is received from the underlying container. Otherwise set to - * AV_NOPTS_VALUE by default. - */ - int64_t first_dts; - int64_t cur_dts; - int64_t last_IP_pts; - int last_IP_duration; - - /** - * Number of packets to buffer for codec probing - */ - int probe_packets; - - /** - * Number of frames that have been demuxed during avformat_find_stream_info() - */ - int codec_info_nb_frames; - - /* av_read_frame() support */ - enum AVStreamParseType need_parsing; - struct AVCodecParserContext *parser; - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - // kept for ABI compatibility only, do not access in any way - void *unused7; - AVProbeData unused6; - int64_t unused5[16+1]; -#endif - AVIndexEntry *index_entries; /**< Only used if the format does not - support seeking natively. */ - int nb_index_entries; - unsigned int index_entries_allocated_size; - - /** - * Stream Identifier - * This is the MPEG-TS stream identifier +1 - * 0 means unknown - */ - int stream_identifier; - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - // kept for ABI compatibility only, do not access in any way - int unused8; - int unused9; - int unused10; -#endif - - /** - * An opaque field for libavformat internal usage. - * Must not be accessed in any way by callers. - */ - AVStreamInternal *internal; -} AVStream; - -#if FF_API_FORMAT_GET_SET -/** - * Accessors for some AVStream fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -AVRational av_stream_get_r_frame_rate(const AVStream *s); -attribute_deprecated -void av_stream_set_r_frame_rate(AVStream *s, AVRational r); -#if FF_API_LAVF_FFSERVER -attribute_deprecated -char* av_stream_get_recommended_encoder_configuration(const AVStream *s); -attribute_deprecated -void av_stream_set_recommended_encoder_configuration(AVStream *s, char *configuration); -#endif -#endif - -struct AVCodecParserContext *av_stream_get_parser(const AVStream *s); - -/** - * Returns the pts of the last muxed packet + its duration - * - * the retuned value is undefined when used with a demuxer. - */ -int64_t av_stream_get_end_pts(const AVStream *st); - -#define AV_PROGRAM_RUNNING 1 - -/** - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVProgram) must not be used outside libav*. - */ -typedef struct AVProgram { - int id; - int flags; - enum AVDiscard discard; ///< selects which program to discard and which to feed to the caller - unsigned int *stream_index; - unsigned int nb_stream_indexes; - AVDictionary *metadata; - - int program_num; - int pmt_pid; - int pcr_pid; - int pmt_version; - - /***************************************************************** - * 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. - ***************************************************************** - */ - int64_t start_time; - int64_t end_time; - - int64_t pts_wrap_reference; ///< reference dts for wrap detection - int pts_wrap_behavior; ///< behavior on wrap detection -} AVProgram; - -#define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present - (streams are added dynamically) */ -#define AVFMTCTX_UNSEEKABLE 0x0002 /**< signal that the stream is definitely - not seekable, and attempts to call the - seek function will fail. For some - network protocols (e.g. HLS), this can - change dynamically at runtime. */ - -typedef struct AVChapter { -#if FF_API_CHAPTER_ID_INT - int id; ///< unique ID to identify the chapter -#else - int64_t id; ///< unique ID to identify the chapter -#endif - AVRational time_base; ///< time base in which the start/end timestamps are specified - int64_t start, end; ///< chapter start/end time in time_base units - AVDictionary *metadata; -} AVChapter; - - -/** - * Callback used by devices to communicate with application. - */ -typedef int (*av_format_control_message)(struct AVFormatContext *s, int type, - void *data, size_t data_size); - -typedef int (*AVOpenCallback)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, - const AVIOInterruptCB *int_cb, AVDictionary **options); - -/** - * The duration of a video can be estimated through various ways, and this enum can be used - * to know how the duration was estimated. - */ -enum AVDurationEstimationMethod { - AVFMT_DURATION_FROM_PTS, ///< Duration accurately estimated from PTSes - AVFMT_DURATION_FROM_STREAM, ///< Duration estimated from a stream with a known duration - AVFMT_DURATION_FROM_BITRATE ///< Duration estimated from bitrate (less accurate) -}; - -typedef struct AVFormatInternal AVFormatInternal; - -/** - * Format I/O context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVFormatContext) must not be used outside libav*, use - * avformat_alloc_context() to create an AVFormatContext. - * - * Fields can be accessed through AVOptions (av_opt*), - * the name string used matches the associated command line parameter name and - * can be found in libavformat/options_table.h. - * The AVOption/command line parameter names differ in some cases from the C - * structure field names for historic reasons or brevity. - */ -typedef struct AVFormatContext { - /** - * A class for logging and @ref avoptions. Set by avformat_alloc_context(). - * Exports (de)muxer private options if they exist. - */ - const AVClass *av_class; - - /** - * The input container format. - * - * Demuxing only, set by avformat_open_input(). - */ - ff_const59 struct AVInputFormat *iformat; - - /** - * The output container format. - * - * Muxing only, must be set by the caller before avformat_write_header(). - */ - ff_const59 struct AVOutputFormat *oformat; - - /** - * Format private data. This is an AVOptions-enabled struct - * if and only if iformat/oformat.priv_class is not NULL. - * - * - muxing: set by avformat_write_header() - * - demuxing: set by avformat_open_input() - */ - void *priv_data; - - /** - * I/O context. - * - * - demuxing: either set by the user before avformat_open_input() (then - * the user must close it manually) or set by avformat_open_input(). - * - muxing: set by the user before avformat_write_header(). The caller must - * take care of closing / freeing the IO context. - * - * Do NOT set this field if AVFMT_NOFILE flag is set in - * iformat/oformat.flags. In such a case, the (de)muxer will handle - * I/O in some other way and this field will be NULL. - */ - AVIOContext *pb; - - /* stream info */ - /** - * Flags signalling stream properties. A combination of AVFMTCTX_*. - * Set by libavformat. - */ - int ctx_flags; - - /** - * Number of elements in AVFormatContext.streams. - * - * Set by avformat_new_stream(), must not be modified by any other code. - */ - unsigned int nb_streams; - /** - * A list of all streams in the file. New streams are created with - * avformat_new_stream(). - * - * - demuxing: streams are created by libavformat in avformat_open_input(). - * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also - * appear in av_read_frame(). - * - muxing: streams are created by the user before avformat_write_header(). - * - * Freed by libavformat in avformat_free_context(). - */ - AVStream **streams; - -#if FF_API_FORMAT_FILENAME - /** - * input or output filename - * - * - demuxing: set by avformat_open_input() - * - muxing: may be set by the caller before avformat_write_header() - * - * @deprecated Use url instead. - */ - attribute_deprecated - char filename[1024]; -#endif - - /** - * input or output URL. Unlike the old filename field, this field has no - * length restriction. - * - * - demuxing: set by avformat_open_input(), initialized to an empty - * string if url parameter was NULL in avformat_open_input(). - * - muxing: may be set by the caller before calling avformat_write_header() - * (or avformat_init_output() if that is called first) to a string - * which is freeable by av_free(). Set to an empty string if it - * was NULL in avformat_init_output(). - * - * Freed by libavformat in avformat_free_context(). - */ - char *url; - - /** - * Position of the first frame of the component, in - * AV_TIME_BASE fractional seconds. NEVER set this value directly: - * It is deduced from the AVStream values. - * - * Demuxing only, set by libavformat. - */ - int64_t start_time; - - /** - * Duration of the stream, in AV_TIME_BASE fractional - * seconds. Only set this value if you know none of the individual stream - * durations and also do not set any of them. This is deduced from the - * AVStream values if not set. - * - * Demuxing only, set by libavformat. - */ - int64_t duration; - - /** - * Total stream bitrate in bit/s, 0 if not - * available. Never set it directly if the file_size and the - * duration are known as FFmpeg can compute it automatically. - */ - int64_t bit_rate; - - unsigned int packet_size; - int max_delay; - - /** - * Flags modifying the (de)muxer behaviour. A combination of AVFMT_FLAG_*. - * Set by the user before avformat_open_input() / avformat_write_header(). - */ - int flags; -#define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames. -#define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index. -#define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input. -#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS -#define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container -#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled -#define AVFMT_FLAG_NOBUFFER 0x0040 ///< Do not buffer frames when possible -#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it. -#define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted -#define AVFMT_FLAG_FLUSH_PACKETS 0x0200 ///< Flush the AVIOContext every packet. -/** - * When muxing, try to avoid writing any random/volatile data to the output. - * This includes any random IDs, real-time timestamps/dates, muxer version, etc. - * - * This flag is mainly intended for testing. - */ -#define AVFMT_FLAG_BITEXACT 0x0400 -#if FF_API_LAVF_MP4A_LATM -#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Deprecated, does nothing. -#endif -#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down) -#if FF_API_LAVF_PRIV_OPT -#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (deprecated, will do nothing once av_demuxer_open() is removed) -#endif -#if FF_API_LAVF_KEEPSIDE_FLAG -#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Deprecated, does nothing. -#endif -#define AVFMT_FLAG_FAST_SEEK 0x80000 ///< Enable fast, but inaccurate seeks for some formats -#define AVFMT_FLAG_SHORTEST 0x100000 ///< Stop muxing when the shortest stream stops. -#define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Add bitstream filters as requested by the muxer - - /** - * Maximum size of the data read from input for determining - * the input container format. - * Demuxing only, set by the caller before avformat_open_input(). - */ - int64_t probesize; - - /** - * Maximum duration (in AV_TIME_BASE units) of the data read - * from input in avformat_find_stream_info(). - * Demuxing only, set by the caller before avformat_find_stream_info(). - * Can be set to 0 to let avformat choose using a heuristic. - */ - int64_t max_analyze_duration; - - const uint8_t *key; - int keylen; - - unsigned int nb_programs; - AVProgram **programs; - - /** - * Forced video codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID video_codec_id; - - /** - * Forced audio codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID audio_codec_id; - - /** - * Forced subtitle codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID subtitle_codec_id; - - /** - * Maximum amount of memory in bytes to use for the index of each stream. - * If the index exceeds this size, entries will be discarded as - * needed to maintain a smaller size. This can lead to slower or less - * accurate seeking (depends on demuxer). - * Demuxers for which a full in-memory index is mandatory will ignore - * this. - * - muxing: unused - * - demuxing: set by user - */ - unsigned int max_index_size; - - /** - * Maximum amount of memory in bytes to use for buffering frames - * obtained from realtime capture devices. - */ - unsigned int max_picture_buffer; - - /** - * Number of chapters in AVChapter array. - * When muxing, chapters are normally written in the file header, - * so nb_chapters should normally be initialized before write_header - * is called. Some muxers (e.g. mov and mkv) can also write chapters - * in the trailer. To write chapters in the trailer, nb_chapters - * must be zero when write_header is called and non-zero when - * write_trailer is called. - * - muxing: set by user - * - demuxing: set by libavformat - */ - unsigned int nb_chapters; - AVChapter **chapters; - - /** - * Metadata that applies to the whole file. - * - * - demuxing: set by libavformat in avformat_open_input() - * - muxing: may be set by the caller before avformat_write_header() - * - * Freed by libavformat in avformat_free_context(). - */ - AVDictionary *metadata; - - /** - * Start time of the stream in real world time, in microseconds - * since the Unix epoch (00:00 1st January 1970). That is, pts=0 in the - * stream was captured at this real world time. - * - muxing: Set by the caller before avformat_write_header(). If set to - * either 0 or AV_NOPTS_VALUE, then the current wall-time will - * be used. - * - demuxing: Set by libavformat. AV_NOPTS_VALUE if unknown. Note that - * the value may become known after some number of frames - * have been received. - */ - int64_t start_time_realtime; - - /** - * The number of frames used for determining the framerate in - * avformat_find_stream_info(). - * Demuxing only, set by the caller before avformat_find_stream_info(). - */ - int fps_probe_size; - - /** - * Error recognition; higher values will detect more errors but may - * misdetect some more or less valid parts as errors. - * Demuxing only, set by the caller before avformat_open_input(). - */ - int error_recognition; - - /** - * Custom interrupt callbacks for the I/O layer. - * - * demuxing: set by the user before avformat_open_input(). - * muxing: set by the user before avformat_write_header() - * (mainly useful for AVFMT_NOFILE formats). The callback - * should also be passed to avio_open2() if it's used to - * open the file. - */ - AVIOInterruptCB interrupt_callback; - - /** - * Flags to enable debugging. - */ - int debug; -#define FF_FDEBUG_TS 0x0001 - - /** - * Maximum buffering duration for interleaving. - * - * To ensure all the streams are interleaved correctly, - * av_interleaved_write_frame() will wait until it has at least one packet - * for each stream before actually writing any packets to the output file. - * When some streams are "sparse" (i.e. there are large gaps between - * successive packets), this can result in excessive buffering. - * - * This field specifies the maximum difference between the timestamps of the - * first and the last packet in the muxing queue, above which libavformat - * will output a packet regardless of whether it has queued a packet for all - * the streams. - * - * Muxing only, set by the caller before avformat_write_header(). - */ - int64_t max_interleave_delta; - - /** - * Allow non-standard and experimental extension - * @see AVCodecContext.strict_std_compliance - */ - int strict_std_compliance; - - /** - * Flags indicating events happening on the file, a combination of - * AVFMT_EVENT_FLAG_*. - * - * - demuxing: may be set by the demuxer in avformat_open_input(), - * avformat_find_stream_info() and av_read_frame(). Flags must be cleared - * by the user once the event has been handled. - * - muxing: may be set by the user after avformat_write_header() to - * indicate a user-triggered event. The muxer will clear the flags for - * events it has handled in av_[interleaved]_write_frame(). - */ - int event_flags; -/** - * - demuxing: the demuxer read new metadata from the file and updated - * AVFormatContext.metadata accordingly - * - muxing: the user updated AVFormatContext.metadata and wishes the muxer to - * write it into the file - */ -#define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001 - - /** - * Maximum number of packets to read while waiting for the first timestamp. - * Decoding only. - */ - int max_ts_probe; - - /** - * Avoid negative timestamps during muxing. - * Any value of the AVFMT_AVOID_NEG_TS_* constants. - * Note, this only works when using av_interleaved_write_frame. (interleave_packet_per_dts is in use) - * - muxing: Set by user - * - demuxing: unused - */ - int avoid_negative_ts; -#define AVFMT_AVOID_NEG_TS_AUTO -1 ///< Enabled when required by target format -#define AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE 1 ///< Shift timestamps so they are non negative -#define AVFMT_AVOID_NEG_TS_MAKE_ZERO 2 ///< Shift timestamps so that they start at 0 - - /** - * Transport stream id. - * This will be moved into demuxer private options. Thus no API/ABI compatibility - */ - int ts_id; - - /** - * Audio preload in microseconds. - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int audio_preload; - - /** - * Max chunk time in microseconds. - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int max_chunk_duration; - - /** - * Max chunk size in bytes - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int max_chunk_size; - - /** - * forces the use of wallclock timestamps as pts/dts of packets - * This has undefined results in the presence of B frames. - * - encoding: unused - * - decoding: Set by user - */ - int use_wallclock_as_timestamps; - - /** - * avio flags, used to force AVIO_FLAG_DIRECT. - * - encoding: unused - * - decoding: Set by user - */ - int avio_flags; - - /** - * The duration field can be estimated through various ways, and this field can be used - * to know how the duration was estimated. - * - encoding: unused - * - decoding: Read by user - */ - enum AVDurationEstimationMethod duration_estimation_method; - - /** - * Skip initial bytes when opening stream - * - encoding: unused - * - decoding: Set by user - */ - int64_t skip_initial_bytes; - - /** - * Correct single timestamp overflows - * - encoding: unused - * - decoding: Set by user - */ - unsigned int correct_ts_overflow; - - /** - * Force seeking to any (also non key) frames. - * - encoding: unused - * - decoding: Set by user - */ - int seek2any; - - /** - * Flush the I/O context after each packet. - * - encoding: Set by user - * - decoding: unused - */ - int flush_packets; - - /** - * format probing score. - * The maximal score is AVPROBE_SCORE_MAX, its set when the demuxer probes - * the format. - * - encoding: unused - * - decoding: set by avformat, read by user - */ - int probe_score; - - /** - * number of bytes to read maximally to identify format. - * - encoding: unused - * - decoding: set by user - */ - int format_probesize; - - /** - * ',' separated list of allowed decoders. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *codec_whitelist; - - /** - * ',' separated list of allowed demuxers. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *format_whitelist; - - /** - * An opaque field for libavformat internal usage. - * Must not be accessed in any way by callers. - */ - AVFormatInternal *internal; - - /** - * IO repositioned flag. - * This is set by avformat when the underlaying IO context read pointer - * is repositioned, for example when doing byte based seeking. - * Demuxers can use the flag to detect such changes. - */ - int io_repositioned; - - /** - * Forced video codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *video_codec; - - /** - * Forced audio codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *audio_codec; - - /** - * Forced subtitle codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *subtitle_codec; - - /** - * Forced data codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *data_codec; - - /** - * Number of bytes to be written as padding in a metadata header. - * Demuxing: Unused. - * Muxing: Set by user via av_format_set_metadata_header_padding. - */ - int metadata_header_padding; - - /** - * User data. - * This is a place for some private data of the user. - */ - void *opaque; - - /** - * Callback used by devices to communicate with application. - */ - av_format_control_message control_message_cb; - - /** - * Output timestamp offset, in microseconds. - * Muxing: set by user - */ - int64_t output_ts_offset; - - /** - * dump format separator. - * can be ", " or "\n " or anything else - * - muxing: Set by user. - * - demuxing: Set by user. - */ - uint8_t *dump_separator; - - /** - * Forced Data codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID data_codec_id; - -#if FF_API_OLD_OPEN_CALLBACKS - /** - * Called to open further IO contexts when needed for demuxing. - * - * This can be set by the user application to perform security checks on - * the URLs before opening them. - * The function should behave like avio_open2(), AVFormatContext is provided - * as contextual information and to reach AVFormatContext.opaque. - * - * If NULL then some simple checks are used together with avio_open2(). - * - * Must not be accessed directly from outside avformat. - * @See av_format_set_open_cb() - * - * Demuxing: Set by user. - * - * @deprecated Use io_open and io_close. - */ - attribute_deprecated - int (*open_cb)(struct AVFormatContext *s, AVIOContext **p, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options); -#endif - - /** - * ',' separated list of allowed protocols. - * - encoding: unused - * - decoding: set by user - */ - char *protocol_whitelist; - - /** - * A callback for opening new IO streams. - * - * Whenever a muxer or a demuxer needs to open an IO stream (typically from - * avformat_open_input() for demuxers, but for certain formats can happen at - * other times as well), it will call this callback to obtain an IO context. - * - * @param s the format context - * @param pb on success, the newly opened IO context should be returned here - * @param url the url to open - * @param flags a combination of AVIO_FLAG_* - * @param options a dictionary of additional options, with the same - * semantics as in avio_open2() - * @return 0 on success, a negative AVERROR code on failure - * - * @note Certain muxers and demuxers do nesting, i.e. they open one or more - * additional internal format contexts. Thus the AVFormatContext pointer - * passed to this callback may be different from the one facing the caller. - * It will, however, have the same 'opaque' field. - */ - int (*io_open)(struct AVFormatContext *s, AVIOContext **pb, const char *url, - int flags, AVDictionary **options); - - /** - * A callback for closing the streams opened with AVFormatContext.io_open(). - */ - void (*io_close)(struct AVFormatContext *s, AVIOContext *pb); - - /** - * ',' separated list of disallowed protocols. - * - encoding: unused - * - decoding: set by user - */ - char *protocol_blacklist; - - /** - * The maximum number of streams. - * - encoding: unused - * - decoding: set by user - */ - int max_streams; - - /** - * Skip duration calcuation in estimate_timings_from_pts. - * - encoding: unused - * - decoding: set by user - */ - int skip_estimate_duration_from_pts; - - /** - * Maximum number of packets that can be probed - * - encoding: unused - * - decoding: set by user - */ - int max_probe_packets; -} AVFormatContext; - -#if FF_API_FORMAT_GET_SET -/** - * Accessors for some AVFormatContext fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -int av_format_get_probe_score(const AVFormatContext *s); -attribute_deprecated -AVCodec * av_format_get_video_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_video_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -AVCodec * av_format_get_audio_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_audio_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -AVCodec * av_format_get_subtitle_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_subtitle_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -AVCodec * av_format_get_data_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_data_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -int av_format_get_metadata_header_padding(const AVFormatContext *s); -attribute_deprecated -void av_format_set_metadata_header_padding(AVFormatContext *s, int c); -attribute_deprecated -void * av_format_get_opaque(const AVFormatContext *s); -attribute_deprecated -void av_format_set_opaque(AVFormatContext *s, void *opaque); -attribute_deprecated -av_format_control_message av_format_get_control_message_cb(const AVFormatContext *s); -attribute_deprecated -void av_format_set_control_message_cb(AVFormatContext *s, av_format_control_message callback); -#if FF_API_OLD_OPEN_CALLBACKS -attribute_deprecated AVOpenCallback av_format_get_open_cb(const AVFormatContext *s); -attribute_deprecated void av_format_set_open_cb(AVFormatContext *s, AVOpenCallback callback); -#endif -#endif - -/** - * This function will cause global side data to be injected in the next packet - * of each stream as well as after any subsequent seek. - */ -void av_format_inject_global_side_data(AVFormatContext *s); - -/** - * Returns the method used to set ctx->duration. - * - * @return AVFMT_DURATION_FROM_PTS, AVFMT_DURATION_FROM_STREAM, or AVFMT_DURATION_FROM_BITRATE. - */ -enum AVDurationEstimationMethod av_fmt_ctx_get_duration_estimation_method(const AVFormatContext* ctx); - -/** - * @defgroup lavf_core Core functions - * @ingroup libavf - * - * Functions for querying libavformat capabilities, allocating core structures, - * etc. - * @{ - */ - -/** - * Return the LIBAVFORMAT_VERSION_INT constant. - */ -unsigned avformat_version(void); - -/** - * Return the libavformat build-time configuration. - */ -const char *avformat_configuration(void); - -/** - * Return the libavformat license. - */ -const char *avformat_license(void); - -#if FF_API_NEXT -/** - * Initialize libavformat and register all the muxers, demuxers and - * protocols. If you do not call this function, then you can select - * exactly which formats you want to support. - * - * @see av_register_input_format() - * @see av_register_output_format() - */ -attribute_deprecated -void av_register_all(void); - -attribute_deprecated -void av_register_input_format(AVInputFormat *format); -attribute_deprecated -void av_register_output_format(AVOutputFormat *format); -#endif - -/** - * Do global initialization of network libraries. This is optional, - * and not recommended anymore. - * - * This functions only exists to work around thread-safety issues - * with older GnuTLS or OpenSSL libraries. If libavformat is linked - * to newer versions of those libraries, or if you do not use them, - * calling this function is unnecessary. Otherwise, you need to call - * this function before any other threads using them are started. - * - * This function will be deprecated once support for older GnuTLS and - * OpenSSL libraries is removed, and this function has no purpose - * anymore. - */ -int avformat_network_init(void); - -/** - * Undo the initialization done by avformat_network_init. Call it only - * once for each time you called avformat_network_init. - */ -int avformat_network_deinit(void); - -#if FF_API_NEXT -/** - * If f is NULL, returns the first registered input format, - * if f is non-NULL, returns the next registered input format after f - * or NULL if f is the last one. - */ -attribute_deprecated -AVInputFormat *av_iformat_next(const AVInputFormat *f); - -/** - * If f is NULL, returns the first registered output format, - * if f is non-NULL, returns the next registered output format after f - * or NULL if f is the last one. - */ -attribute_deprecated -AVOutputFormat *av_oformat_next(const AVOutputFormat *f); -#endif - -/** - * Iterate over all registered muxers. - * - * @param opaque a pointer where libavformat will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered muxer or NULL when the iteration is - * finished - */ -const AVOutputFormat *av_muxer_iterate(void **opaque); - -/** - * Iterate over all registered demuxers. - * - * @param opaque a pointer where libavformat will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered demuxer or NULL when the iteration is - * finished - */ -const AVInputFormat *av_demuxer_iterate(void **opaque); - -/** - * Allocate an AVFormatContext. - * avformat_free_context() can be used to free the context and everything - * allocated by the framework within it. - */ -AVFormatContext *avformat_alloc_context(void); - -/** - * Free an AVFormatContext and all its streams. - * @param s context to free - */ -void avformat_free_context(AVFormatContext *s); - -/** - * Get the AVClass for AVFormatContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avformat_get_class(void); - -/** - * Add a new stream to a media file. - * - * When demuxing, it is called by the demuxer in read_header(). If the - * flag AVFMTCTX_NOHEADER is set in s.ctx_flags, then it may also - * be called in read_packet(). - * - * When muxing, should be called by the user before avformat_write_header(). - * - * User is required to call avcodec_close() and avformat_free_context() to - * clean up the allocation by avformat_new_stream(). - * - * @param s media file handle - * @param c If non-NULL, the AVCodecContext corresponding to the new stream - * will be initialized to use this codec. This is needed for e.g. codec-specific - * defaults to be set, so codec should be provided if it is known. - * - * @return newly created stream or NULL on error. - */ -AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c); - -/** - * Wrap an existing array as stream side data. - * - * @param st stream - * @param type side information type - * @param data the side data array. It must be allocated with the av_malloc() - * family of functions. The ownership of the data is transferred to - * st. - * @param size side information size - * @return zero on success, a negative AVERROR code on failure. On failure, - * the stream is unchanged and the data remains owned by the caller. - */ -int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type, - uint8_t *data, size_t size); - -/** - * Allocate new information from stream. - * - * @param stream stream - * @param type desired side information type - * @param size side information size - * @return pointer to fresh allocated data or NULL otherwise - */ -uint8_t *av_stream_new_side_data(AVStream *stream, -#if FF_API_BUFFER_SIZE_T - enum AVPacketSideDataType type, int size); -#else - enum AVPacketSideDataType type, size_t size); -#endif -/** - * Get side information from stream. - * - * @param stream stream - * @param type desired side information type - * @param size If supplied, *size will be set to the size of the side data - * or to zero if the desired side data is not present. - * @return pointer to data if present or NULL otherwise - */ -uint8_t *av_stream_get_side_data(const AVStream *stream, -#if FF_API_BUFFER_SIZE_T - enum AVPacketSideDataType type, int *size); -#else - enum AVPacketSideDataType type, size_t *size); -#endif - -AVProgram *av_new_program(AVFormatContext *s, int id); - -/** - * @} - */ - - -/** - * Allocate an AVFormatContext for an output format. - * avformat_free_context() can be used to free the context and - * everything allocated by the framework within it. - * - * @param *ctx is set to the created format context, or to NULL in - * case of failure - * @param oformat format to use for allocating the context, if NULL - * format_name and filename are used instead - * @param format_name the name of output format to use for allocating the - * context, if NULL filename is used instead - * @param filename the name of the filename to use for allocating the - * context, may be NULL - * @return >= 0 in case of success, a negative AVERROR code in case of - * failure - */ -int avformat_alloc_output_context2(AVFormatContext **ctx, ff_const59 AVOutputFormat *oformat, - const char *format_name, const char *filename); - -/** - * @addtogroup lavf_decoding - * @{ - */ - -/** - * Find AVInputFormat based on the short name of the input format. - */ -ff_const59 AVInputFormat *av_find_input_format(const char *short_name); - -/** - * Guess the file format. - * - * @param pd data to be probed - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - */ -ff_const59 AVInputFormat *av_probe_input_format(ff_const59 AVProbeData *pd, int is_opened); - -/** - * Guess the file format. - * - * @param pd data to be probed - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - * @param score_max A probe score larger that this is required to accept a - * detection, the variable is set to the actual detection - * score afterwards. - * If the score is <= AVPROBE_SCORE_MAX / 4 it is recommended - * to retry with a larger probe buffer. - */ -ff_const59 AVInputFormat *av_probe_input_format2(ff_const59 AVProbeData *pd, int is_opened, int *score_max); - -/** - * Guess the file format. - * - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - * @param score_ret The score of the best detection. - */ -ff_const59 AVInputFormat *av_probe_input_format3(ff_const59 AVProbeData *pd, int is_opened, int *score_ret); - -/** - * Probe a bytestream to determine the input format. Each time a probe returns - * with a score that is too low, the probe buffer size is increased and another - * attempt is made. When the maximum probe size is reached, the input format - * with the highest score is returned. - * - * @param pb the bytestream to probe - * @param fmt the input format is put here - * @param url the url of the stream - * @param logctx the log context - * @param offset the offset within the bytestream to probe from - * @param max_probe_size the maximum probe buffer size (zero for default) - * @return the score in case of success, a negative value corresponding to an - * the maximal score is AVPROBE_SCORE_MAX - * AVERROR code otherwise - */ -int av_probe_input_buffer2(AVIOContext *pb, ff_const59 AVInputFormat **fmt, - const char *url, void *logctx, - unsigned int offset, unsigned int max_probe_size); - -/** - * Like av_probe_input_buffer2() but returns 0 on success - */ -int av_probe_input_buffer(AVIOContext *pb, ff_const59 AVInputFormat **fmt, - const char *url, void *logctx, - unsigned int offset, unsigned int max_probe_size); - -/** - * Open an input stream and read the header. The codecs are not opened. - * The stream must be closed with avformat_close_input(). - * - * @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context). - * May be a pointer to NULL, in which case an AVFormatContext is allocated by this - * function and written into ps. - * Note that a user-supplied AVFormatContext will be freed on failure. - * @param url URL of the stream to open. - * @param fmt If non-NULL, this parameter forces a specific input format. - * Otherwise the format is autodetected. - * @param options A dictionary filled with AVFormatContext and demuxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return 0 on success, a negative AVERROR on failure. - * - * @note If you want to use custom IO, preallocate the format context and set its pb field. - */ -int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options); - -#if FF_API_DEMUXER_OPEN -/** - * @deprecated Use an AVDictionary to pass options to a demuxer. - */ -attribute_deprecated -int av_demuxer_open(AVFormatContext *ic); -#endif - -/** - * Read packets of a media file to get stream information. This - * is useful for file formats with no headers such as MPEG. This - * function also computes the real framerate in case of MPEG-2 repeat - * frame mode. - * The logical file position is not changed by this function; - * examined packets may be buffered for later processing. - * - * @param ic media file handle - * @param options If non-NULL, an ic.nb_streams long array of pointers to - * dictionaries, where i-th member contains options for - * codec corresponding to i-th stream. - * On return each dictionary will be filled with options that were not found. - * @return >=0 if OK, AVERROR_xxx on error - * - * @note this function isn't guaranteed to open all the codecs, so - * options being non-empty at return is a perfectly normal behavior. - * - * @todo Let the user decide somehow what information is needed so that - * we do not waste time getting stuff the user does not need. - */ -int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options); - -/** - * Find the programs which belong to a given stream. - * - * @param ic media file handle - * @param last the last found program, the search will start after this - * program, or from the beginning if it is NULL - * @param s stream index - * @return the next program which belongs to s, NULL if no program is found or - * the last program is not among the programs of ic. - */ -AVProgram *av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s); - -void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int idx); - -/** - * Find the "best" stream in the file. - * The best stream is determined according to various heuristics as the most - * likely to be what the user expects. - * If the decoder parameter is non-NULL, av_find_best_stream will find the - * default decoder for the stream's codec; streams for which no decoder can - * be found are ignored. - * - * @param ic media file handle - * @param type stream type: video, audio, subtitles, etc. - * @param wanted_stream_nb user-requested stream number, - * or -1 for automatic selection - * @param related_stream try to find a stream related (eg. in the same - * program) to this one, or -1 if none - * @param decoder_ret if non-NULL, returns the decoder for the - * selected stream - * @param flags flags; none are currently defined - * @return the non-negative stream number in case of success, - * AVERROR_STREAM_NOT_FOUND if no stream with the requested type - * could be found, - * AVERROR_DECODER_NOT_FOUND if streams were found but no decoder - * @note If av_find_best_stream returns successfully and decoder_ret is not - * NULL, then *decoder_ret is guaranteed to be set to a valid AVCodec. - */ -int av_find_best_stream(AVFormatContext *ic, - enum AVMediaType type, - int wanted_stream_nb, - int related_stream, - AVCodec **decoder_ret, - int flags); - -/** - * Return the next frame of a stream. - * This function returns what is stored in the file, and does not validate - * that what is there are valid frames for the decoder. It will split what is - * stored in the file into frames and return one for each call. It will not - * omit invalid data between valid frames so as to give the decoder the maximum - * information possible for decoding. - * - * On success, the returned packet is reference-counted (pkt->buf is set) and - * valid indefinitely. The packet must be freed with av_packet_unref() when - * it is no longer needed. For video, the packet contains exactly one frame. - * For audio, it contains an integer number of frames if each frame has - * a known fixed size (e.g. PCM or ADPCM data). If the audio frames have - * a variable size (e.g. MPEG audio), then it contains one frame. - * - * pkt->pts, pkt->dts and pkt->duration are always set to correct - * values in AVStream.time_base units (and guessed if the format cannot - * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format - * has B-frames, so it is better to rely on pkt->dts if you do not - * decompress the payload. - * - * @return 0 if OK, < 0 on error or end of file. On error, pkt will be blank - * (as if it came from av_packet_alloc()). - * - * @note pkt will be initialized, so it may be uninitialized, but it must not - * contain data that needs to be freed. - */ -int av_read_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Seek to the keyframe at timestamp. - * 'timestamp' in 'stream_index'. - * - * @param s media file handle - * @param stream_index If stream_index is (-1), a default - * stream is selected, and timestamp is automatically converted - * from AV_TIME_BASE units to the stream specific time_base. - * @param timestamp Timestamp in AVStream.time_base units - * or, if no stream is specified, in AV_TIME_BASE units. - * @param flags flags which select direction and seeking mode - * @return >= 0 on success - */ -int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, - int flags); - -/** - * Seek to timestamp ts. - * Seeking will be done so that the point from which all active streams - * can be presented successfully will be closest to ts and within min/max_ts. - * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. - * - * If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in bytes and - * are the file position (this may not be supported by all demuxers). - * If flags contain AVSEEK_FLAG_FRAME, then all timestamps are in frames - * in the stream with stream_index (this may not be supported by all demuxers). - * Otherwise all timestamps are in units of the stream selected by stream_index - * or if stream_index is -1, in AV_TIME_BASE units. - * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as - * keyframes (this may not be supported by all demuxers). - * If flags contain AVSEEK_FLAG_BACKWARD, it is ignored. - * - * @param s media file handle - * @param stream_index index of the stream which is used as time base reference - * @param min_ts smallest acceptable timestamp - * @param ts target timestamp - * @param max_ts largest acceptable timestamp - * @param flags flags - * @return >=0 on success, error code otherwise - * - * @note This is part of the new seek API which is still under construction. - */ -int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); - -/** - * Discard all internally buffered data. This can be useful when dealing with - * discontinuities in the byte stream. Generally works only with formats that - * can resync. This includes headerless formats like MPEG-TS/TS but should also - * work with NUT, Ogg and in a limited way AVI for example. - * - * The set of streams, the detected duration, stream parameters and codecs do - * not change when calling this function. If you want a complete reset, it's - * better to open a new AVFormatContext. - * - * This does not flush the AVIOContext (s->pb). If necessary, call - * avio_flush(s->pb) before calling this function. - * - * @param s media file handle - * @return >=0 on success, error code otherwise - */ -int avformat_flush(AVFormatContext *s); - -/** - * Start playing a network-based stream (e.g. RTSP stream) at the - * current position. - */ -int av_read_play(AVFormatContext *s); - -/** - * Pause a network-based stream (e.g. RTSP stream). - * - * Use av_read_play() to resume it. - */ -int av_read_pause(AVFormatContext *s); - -/** - * Close an opened input AVFormatContext. Free it and all its contents - * and set *s to NULL. - */ -void avformat_close_input(AVFormatContext **s); -/** - * @} - */ - -#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward -#define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes -#define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes -#define AVSEEK_FLAG_FRAME 8 ///< seeking based on frame number - -/** - * @addtogroup lavf_encoding - * @{ - */ - -#define AVSTREAM_INIT_IN_WRITE_HEADER 0 ///< stream parameters initialized in avformat_write_header -#define AVSTREAM_INIT_IN_INIT_OUTPUT 1 ///< stream parameters initialized in avformat_init_output - -/** - * Allocate the stream private data and write the stream header to - * an output media file. - * - * @param s Media file handle, must be allocated with avformat_alloc_context(). - * Its oformat field must be set to the desired output format; - * Its pb field must be set to an already opened AVIOContext. - * @param options An AVDictionary filled with AVFormatContext and muxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return AVSTREAM_INIT_IN_WRITE_HEADER on success if the codec had not already been fully initialized in avformat_init, - * AVSTREAM_INIT_IN_INIT_OUTPUT on success if the codec had already been fully initialized in avformat_init, - * negative AVERROR on failure. - * - * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_init_output. - */ -av_warn_unused_result -int avformat_write_header(AVFormatContext *s, AVDictionary **options); - -/** - * Allocate the stream private data and initialize the codec, but do not write the header. - * May optionally be used before avformat_write_header to initialize stream parameters - * before actually writing the header. - * If using this function, do not pass the same options to avformat_write_header. - * - * @param s Media file handle, must be allocated with avformat_alloc_context(). - * Its oformat field must be set to the desired output format; - * Its pb field must be set to an already opened AVIOContext. - * @param options An AVDictionary filled with AVFormatContext and muxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return AVSTREAM_INIT_IN_WRITE_HEADER on success if the codec requires avformat_write_header to fully initialize, - * AVSTREAM_INIT_IN_INIT_OUTPUT on success if the codec has been fully initialized, - * negative AVERROR on failure. - * - * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_write_header. - */ -av_warn_unused_result -int avformat_init_output(AVFormatContext *s, AVDictionary **options); - -/** - * Write a packet to an output media file. - * - * This function passes the packet directly to the muxer, without any buffering - * or reordering. The caller is responsible for correctly interleaving the - * packets if the format requires it. Callers that want libavformat to handle - * the interleaving should call av_interleaved_write_frame() instead of this - * function. - * - * @param s media file handle - * @param pkt The packet containing the data to be written. Note that unlike - * av_interleaved_write_frame(), this function does not take - * ownership of the packet passed to it (though some muxers may make - * an internal reference to the input packet). - *
- * This parameter can be NULL (at any time, not just at the end), in - * order to immediately flush data buffered within the muxer, for - * muxers that buffer up data internally before writing it to the - * output. - *
- * Packet's @ref AVPacket.stream_index "stream_index" field must be - * set to the index of the corresponding stream in @ref - * AVFormatContext.streams "s->streams". - *
- * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") - * must be set to correct values in the stream's timebase (unless the - * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then - * they can be set to AV_NOPTS_VALUE). - * The dts for subsequent packets passed to this function must be strictly - * increasing when compared in their respective timebases (unless the - * output format is flagged with the AVFMT_TS_NONSTRICT, then they - * merely have to be nondecreasing). @ref AVPacket.duration - * "duration") should also be set if known. - * @return < 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush - * - * @see av_interleaved_write_frame() - */ -int av_write_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Write a packet to an output media file ensuring correct interleaving. - * - * This function will buffer the packets internally as needed to make sure the - * packets in the output file are properly interleaved in the order of - * increasing dts. Callers doing their own interleaving should call - * av_write_frame() instead of this function. - * - * Using this function instead of av_write_frame() can give muxers advance - * knowledge of future packets, improving e.g. the behaviour of the mp4 - * muxer for VFR content in fragmenting mode. - * - * @param s media file handle - * @param pkt The packet containing the data to be written. - *
- * If the packet is reference-counted, this function will take - * ownership of this reference and unreference it later when it sees - * fit. - * The caller must not access the data through this reference after - * this function returns. If the packet is not reference-counted, - * libavformat will make a copy. - *
- * This parameter can be NULL (at any time, not just at the end), to - * flush the interleaving queues. - *
- * Packet's @ref AVPacket.stream_index "stream_index" field must be - * set to the index of the corresponding stream in @ref - * AVFormatContext.streams "s->streams". - *
- * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") - * must be set to correct values in the stream's timebase (unless the - * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then - * they can be set to AV_NOPTS_VALUE). - * The dts for subsequent packets in one stream must be strictly - * increasing (unless the output format is flagged with the - * AVFMT_TS_NONSTRICT, then they merely have to be nondecreasing). - * @ref AVPacket.duration "duration") should also be set if known. - * - * @return 0 on success, a negative AVERROR on error. Libavformat will always - * take care of freeing the packet, even if this function fails. - * - * @see av_write_frame(), AVFormatContext.max_interleave_delta - */ -int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Write an uncoded frame to an output media file. - * - * The frame must be correctly interleaved according to the container - * specification; if not, av_interleaved_write_uncoded_frame() must be used. - * - * See av_interleaved_write_uncoded_frame() for details. - */ -int av_write_uncoded_frame(AVFormatContext *s, int stream_index, - AVFrame *frame); - -/** - * Write an uncoded frame to an output media file. - * - * If the muxer supports it, this function makes it possible to write an AVFrame - * structure directly, without encoding it into a packet. - * It is mostly useful for devices and similar special muxers that use raw - * video or PCM data and will not serialize it into a byte stream. - * - * To test whether it is possible to use it with a given muxer and stream, - * use av_write_uncoded_frame_query(). - * - * The caller gives up ownership of the frame and must not access it - * afterwards. - * - * @return >=0 for success, a negative code on error - */ -int av_interleaved_write_uncoded_frame(AVFormatContext *s, int stream_index, - AVFrame *frame); - -/** - * Test whether a muxer supports uncoded frame. - * - * @return >=0 if an uncoded frame can be written to that muxer and stream, - * <0 if not - */ -int av_write_uncoded_frame_query(AVFormatContext *s, int stream_index); - -/** - * Write the stream trailer to an output media file and free the - * file private data. - * - * May only be called after a successful call to avformat_write_header. - * - * @param s media file handle - * @return 0 if OK, AVERROR_xxx on error - */ -int av_write_trailer(AVFormatContext *s); - -/** - * Return the output format in the list of registered output formats - * which best matches the provided parameters, or return NULL if - * there is no match. - * - * @param short_name if non-NULL checks if short_name matches with the - * names of the registered formats - * @param filename if non-NULL checks if filename terminates with the - * extensions of the registered formats - * @param mime_type if non-NULL checks if mime_type matches with the - * MIME type of the registered formats - */ -ff_const59 AVOutputFormat *av_guess_format(const char *short_name, - const char *filename, - const char *mime_type); - -/** - * Guess the codec ID based upon muxer and filename. - */ -enum AVCodecID av_guess_codec(ff_const59 AVOutputFormat *fmt, const char *short_name, - const char *filename, const char *mime_type, - enum AVMediaType type); - -/** - * Get timing information for the data currently output. - * The exact meaning of "currently output" depends on the format. - * It is mostly relevant for devices that have an internal buffer and/or - * work in real time. - * @param s media file handle - * @param stream stream in the media file - * @param[out] dts DTS of the last packet output for the stream, in stream - * time_base units - * @param[out] wall absolute time when that packet whas output, - * in microsecond - * @return 0 if OK, AVERROR(ENOSYS) if the format does not support it - * Note: some formats or devices may not allow to measure dts and wall - * atomically. - */ -int av_get_output_timestamp(struct AVFormatContext *s, int stream, - int64_t *dts, int64_t *wall); - - -/** - * @} - */ - - -/** - * @defgroup lavf_misc Utility functions - * @ingroup libavf - * @{ - * - * Miscellaneous utility functions related to both muxing and demuxing - * (or neither). - */ - -/** - * Send a nice hexadecimal dump of a buffer to the specified file stream. - * - * @param f The file stream pointer where the dump should be sent to. - * @param buf buffer - * @param size buffer size - * - * @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2 - */ -void av_hex_dump(FILE *f, const uint8_t *buf, int size); - -/** - * Send a nice hexadecimal dump of a buffer to the log. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message, lower values signifying - * higher importance. - * @param buf buffer - * @param size buffer size - * - * @see av_hex_dump, av_pkt_dump2, av_pkt_dump_log2 - */ -void av_hex_dump_log(void *avcl, int level, const uint8_t *buf, int size); - -/** - * Send a nice dump of a packet to the specified file stream. - * - * @param f The file stream pointer where the dump should be sent to. - * @param pkt packet to dump - * @param dump_payload True if the payload must be displayed, too. - * @param st AVStream that the packet belongs to - */ -void av_pkt_dump2(FILE *f, const AVPacket *pkt, int dump_payload, const AVStream *st); - - -/** - * Send a nice dump of a packet to the log. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message, lower values signifying - * higher importance. - * @param pkt packet to dump - * @param dump_payload True if the payload must be displayed, too. - * @param st AVStream that the packet belongs to - */ -void av_pkt_dump_log2(void *avcl, int level, const AVPacket *pkt, int dump_payload, - const AVStream *st); - -/** - * Get the AVCodecID for the given codec tag tag. - * If no codec id is found returns AV_CODEC_ID_NONE. - * - * @param tags list of supported codec_id-codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param tag codec tag to match to a codec ID - */ -enum AVCodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag); - -/** - * Get the codec tag for the given codec id id. - * If no codec tag is found returns 0. - * - * @param tags list of supported codec_id-codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param id codec ID to match to a codec tag - */ -unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum AVCodecID id); - -/** - * Get the codec tag for the given codec id. - * - * @param tags list of supported codec_id - codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param id codec id that should be searched for in the list - * @param tag A pointer to the found tag - * @return 0 if id was not found in tags, > 0 if it was found - */ -int av_codec_get_tag2(const struct AVCodecTag * const *tags, enum AVCodecID id, - unsigned int *tag); - -int av_find_default_stream_index(AVFormatContext *s); - -/** - * Get the index for a specific timestamp. - * - * @param st stream that the timestamp belongs to - * @param timestamp timestamp to retrieve the index for - * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond - * to the timestamp which is <= the requested one, if backward - * is 0, then it will be >= - * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise - * @return < 0 if no such timestamp could be found - */ -int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags); - -/** - * Add an index entry into a sorted list. Update the entry if the list - * already contains it. - * - * @param timestamp timestamp in the time base of the given stream - */ -int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, - int size, int distance, int flags); - - -/** - * Split a URL string into components. - * - * The pointers to buffers for storing individual components may be null, - * in order to ignore that component. Buffers for components not found are - * set to empty strings. If the port is not found, it is set to a negative - * value. - * - * @param proto the buffer for the protocol - * @param proto_size the size of the proto buffer - * @param authorization the buffer for the authorization - * @param authorization_size the size of the authorization buffer - * @param hostname the buffer for the host name - * @param hostname_size the size of the hostname buffer - * @param port_ptr a pointer to store the port number in - * @param path the buffer for the path - * @param path_size the size of the path buffer - * @param url the URL to split - */ -void av_url_split(char *proto, int proto_size, - char *authorization, int authorization_size, - char *hostname, int hostname_size, - int *port_ptr, - char *path, int path_size, - const char *url); - - -/** - * Print detailed information about the input or output format, such as - * duration, bitrate, streams, container, programs, metadata, side data, - * codec and time base. - * - * @param ic the context to analyze - * @param index index of the stream to dump information about - * @param url the URL to print, such as source or destination file - * @param is_output Select whether the specified context is an input(0) or output(1) - */ -void av_dump_format(AVFormatContext *ic, - int index, - const char *url, - int is_output); - - -#define AV_FRAME_FILENAME_FLAGS_MULTIPLE 1 ///< Allow multiple %d - -/** - * Return in 'buf' the path with '%d' replaced by a number. - * - * Also handles the '%0nd' format where 'n' is the total number - * of digits and '%%'. - * - * @param buf destination buffer - * @param buf_size destination buffer size - * @param path numbered sequence string - * @param number frame number - * @param flags AV_FRAME_FILENAME_FLAGS_* - * @return 0 if OK, -1 on format error - */ -int av_get_frame_filename2(char *buf, int buf_size, - const char *path, int number, int flags); - -int av_get_frame_filename(char *buf, int buf_size, - const char *path, int number); - -/** - * Check whether filename actually is a numbered sequence generator. - * - * @param filename possible numbered sequence string - * @return 1 if a valid numbered sequence string, 0 otherwise - */ -int av_filename_number_test(const char *filename); - -/** - * Generate an SDP for an RTP session. - * - * Note, this overwrites the id values of AVStreams in the muxer contexts - * for getting unique dynamic payload types. - * - * @param ac array of AVFormatContexts describing the RTP streams. If the - * array is composed by only one context, such context can contain - * multiple AVStreams (one AVStream per RTP stream). Otherwise, - * all the contexts in the array (an AVCodecContext per RTP stream) - * must contain only one AVStream. - * @param n_files number of AVCodecContexts contained in ac - * @param buf buffer where the SDP will be stored (must be allocated by - * the caller) - * @param size the size of the buffer - * @return 0 if OK, AVERROR_xxx on error - */ -int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size); - -/** - * Return a positive value if the given filename has one of the given - * extensions, 0 otherwise. - * - * @param filename file name to check against the given extensions - * @param extensions a comma-separated list of filename extensions - */ -int av_match_ext(const char *filename, const char *extensions); - -/** - * Test if the given container can store a codec. - * - * @param ofmt container to check for compatibility - * @param codec_id codec to potentially store in container - * @param std_compliance standards compliance level, one of FF_COMPLIANCE_* - * - * @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot. - * A negative number if this information is not available. - */ -int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id, - int std_compliance); - -/** - * @defgroup riff_fourcc RIFF FourCCs - * @{ - * Get the tables mapping RIFF FourCCs to libavcodec AVCodecIDs. 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 - */ -/** - * @return the table mapping RIFF FourCCs for video to libavcodec AVCodecID. - */ -const struct AVCodecTag *avformat_get_riff_video_tags(void); -/** - * @return the table mapping RIFF FourCCs for audio to AVCodecID. - */ -const struct AVCodecTag *avformat_get_riff_audio_tags(void); -/** - * @return the table mapping MOV FourCCs for video to libavcodec AVCodecID. - */ -const struct AVCodecTag *avformat_get_mov_video_tags(void); -/** - * @return the table mapping MOV FourCCs for audio to AVCodecID. - */ -const struct AVCodecTag *avformat_get_mov_audio_tags(void); - -/** - * @} - */ - -/** - * Guess the sample aspect ratio of a frame, based on both the stream and the - * frame aspect ratio. - * - * Since the frame aspect ratio is set by the codec but the stream aspect ratio - * is set by the demuxer, these two may not be equal. This function tries to - * return the value that you should use if you would like to display the frame. - * - * Basic logic is to use the stream aspect ratio if it is set to something sane - * otherwise use the frame aspect ratio. This way a container setting, which is - * usually easy to modify can override the coded value in the frames. - * - * @param format the format context which the stream is part of - * @param stream the stream which the frame is part of - * @param frame the frame with the aspect ratio to be determined - * @return the guessed (valid) sample_aspect_ratio, 0/1 if no idea - */ -AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame); - -/** - * Guess the frame rate, based on both the container and codec information. - * - * @param ctx the format context which the stream is part of - * @param stream the stream which the frame is part of - * @param frame the frame for which the frame rate should be determined, may be NULL - * @return the guessed (valid) frame rate, 0/1 if no idea - */ -AVRational av_guess_frame_rate(AVFormatContext *ctx, AVStream *stream, AVFrame *frame); - -/** - * Check if the stream st contained in s is matched by the stream specifier - * spec. - * - * See the "stream specifiers" chapter in the documentation for the syntax - * of spec. - * - * @return >0 if st is matched by spec; - * 0 if st is not matched by spec; - * AVERROR code if spec is invalid - * - * @note A stream specifier can match several streams in the format. - */ -int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, - const char *spec); - -int avformat_queue_attached_pictures(AVFormatContext *s); - -#if FF_API_OLD_BSF -/** - * Apply a list of bitstream filters to a packet. - * - * @param codec AVCodecContext, usually from an AVStream - * @param pkt the packet to apply filters to. If, on success, the returned - * packet has size == 0 and side_data_elems == 0, it indicates that - * the packet should be dropped - * @param bsfc a NULL-terminated list of filters to apply - * @return >=0 on success; - * AVERROR code on failure - */ -attribute_deprecated -int av_apply_bitstream_filters(AVCodecContext *codec, AVPacket *pkt, - AVBitStreamFilterContext *bsfc); -#endif - -enum AVTimebaseSource { - AVFMT_TBCF_AUTO = -1, - AVFMT_TBCF_DECODER, - AVFMT_TBCF_DEMUXER, -#if FF_API_R_FRAME_RATE - AVFMT_TBCF_R_FRAMERATE, -#endif -}; - -/** - * Transfer internal timing information from one stream to another. - * - * This function is useful when doing stream copy. - * - * @param ofmt target output format for ost - * @param ost output stream which needs timings copy and adjustments - * @param ist reference input stream to copy timings from - * @param copy_tb define from where the stream codec timebase needs to be imported - */ -int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt, - AVStream *ost, const AVStream *ist, - enum AVTimebaseSource copy_tb); - -/** - * Get the internal codec timebase from a stream. - * - * @param st input stream to extract the timebase from - */ -AVRational av_stream_get_codec_timebase(const AVStream *st); - -/** - * @} - */ - -#endif /* AVFORMAT_AVFORMAT_H */ diff --git a/prebuilts/x86/include/libavformat/avio.h b/prebuilts/x86/include/libavformat/avio.h deleted file mode 100644 index d022820..0000000 --- a/prebuilts/x86/include/libavformat/avio.h +++ /dev/null @@ -1,888 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -#ifndef AVFORMAT_AVIO_H -#define AVFORMAT_AVIO_H - -/** - * @file - * @ingroup lavf_io - * Buffered I/O operations - */ - -#include - -#include "libavutil/common.h" -#include "libavutil/dict.h" -#include "libavutil/log.h" - -#include "libavformat/version.h" - -/** - * Seeking works like for a local file. - */ -#define AVIO_SEEKABLE_NORMAL (1 << 0) - -/** - * Seeking by timestamp with avio_seek_time() is possible. - */ -#define AVIO_SEEKABLE_TIME (1 << 1) - -/** - * Callback for checking whether to abort blocking functions. - * AVERROR_EXIT is returned in this case by the interrupted - * function. During blocking operations, callback is called with - * opaque as parameter. If the callback returns 1, the - * blocking operation will be aborted. - * - * No members can be added to this struct without a major bump, if - * new elements have been added after this struct in AVFormatContext - * or AVIOContext. - */ -typedef struct AVIOInterruptCB { - int (*callback)(void*); - void *opaque; -} AVIOInterruptCB; - -/** - * Directory entry types. - */ -enum AVIODirEntryType { - AVIO_ENTRY_UNKNOWN, - AVIO_ENTRY_BLOCK_DEVICE, - AVIO_ENTRY_CHARACTER_DEVICE, - AVIO_ENTRY_DIRECTORY, - AVIO_ENTRY_NAMED_PIPE, - AVIO_ENTRY_SYMBOLIC_LINK, - AVIO_ENTRY_SOCKET, - AVIO_ENTRY_FILE, - AVIO_ENTRY_SERVER, - AVIO_ENTRY_SHARE, - AVIO_ENTRY_WORKGROUP, -}; - -/** - * Describes single entry of the directory. - * - * Only name and type fields are guaranteed be set. - * Rest of fields are protocol or/and platform dependent and might be unknown. - */ -typedef struct AVIODirEntry { - char *name; /**< Filename */ - int type; /**< Type of the entry */ - int utf8; /**< Set to 1 when name is encoded with UTF-8, 0 otherwise. - Name can be encoded with UTF-8 even though 0 is set. */ - int64_t size; /**< File size in bytes, -1 if unknown. */ - int64_t modification_timestamp; /**< Time of last modification in microseconds since unix - epoch, -1 if unknown. */ - int64_t access_timestamp; /**< Time of last access in microseconds since unix epoch, - -1 if unknown. */ - int64_t status_change_timestamp; /**< Time of last status change in microseconds since unix - epoch, -1 if unknown. */ - int64_t user_id; /**< User ID of owner, -1 if unknown. */ - int64_t group_id; /**< Group ID of owner, -1 if unknown. */ - int64_t filemode; /**< Unix file mode, -1 if unknown. */ -} AVIODirEntry; - -typedef struct AVIODirContext { - struct URLContext *url_context; -} AVIODirContext; - -/** - * Different data types that can be returned via the AVIO - * write_data_type callback. - */ -enum AVIODataMarkerType { - /** - * Header data; this needs to be present for the stream to be decodeable. - */ - AVIO_DATA_MARKER_HEADER, - /** - * A point in the output bytestream where a decoder can start decoding - * (i.e. a keyframe). A demuxer/decoder given the data flagged with - * AVIO_DATA_MARKER_HEADER, followed by any AVIO_DATA_MARKER_SYNC_POINT, - * should give decodeable results. - */ - AVIO_DATA_MARKER_SYNC_POINT, - /** - * A point in the output bytestream where a demuxer can start parsing - * (for non self synchronizing bytestream formats). That is, any - * non-keyframe packet start point. - */ - AVIO_DATA_MARKER_BOUNDARY_POINT, - /** - * This is any, unlabelled data. It can either be a muxer not marking - * any positions at all, it can be an actual boundary/sync point - * that the muxer chooses not to mark, or a later part of a packet/fragment - * that is cut into multiple write callbacks due to limited IO buffer size. - */ - AVIO_DATA_MARKER_UNKNOWN, - /** - * Trailer data, which doesn't contain actual content, but only for - * finalizing the output file. - */ - AVIO_DATA_MARKER_TRAILER, - /** - * A point in the output bytestream where the underlying AVIOContext might - * flush the buffer depending on latency or buffering requirements. Typically - * means the end of a packet. - */ - AVIO_DATA_MARKER_FLUSH_POINT, -}; - -/** - * Bytestream IO Context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVIOContext) must not be used outside libav*. - * - * @note None of the function pointers in AVIOContext should be called - * directly, they should only be set by the client application - * when implementing custom I/O. Normally these are set to the - * function pointers specified in avio_alloc_context() - */ -typedef struct AVIOContext { - /** - * A class for private options. - * - * If this AVIOContext is created by avio_open2(), av_class is set and - * passes the options down to protocols. - * - * If this AVIOContext is manually allocated, then av_class may be set by - * the caller. - * - * warning -- this field can be NULL, be sure to not pass this AVIOContext - * to any av_opt_* functions in that case. - */ - const AVClass *av_class; - - /* - * The following shows the relationship between buffer, buf_ptr, - * buf_ptr_max, buf_end, buf_size, and pos, when reading and when writing - * (since AVIOContext is used for both): - * - ********************************************************************************** - * READING - ********************************************************************************** - * - * | buffer_size | - * |---------------------------------------| - * | | - * - * buffer buf_ptr buf_end - * +---------------+-----------------------+ - * |/ / / / / / / /|/ / / / / / /| | - * read buffer: |/ / consumed / | to be read /| | - * |/ / / / / / / /|/ / / / / / /| | - * +---------------+-----------------------+ - * - * pos - * +-------------------------------------------+-----------------+ - * input file: | | | - * +-------------------------------------------+-----------------+ - * - * - ********************************************************************************** - * WRITING - ********************************************************************************** - * - * | buffer_size | - * |--------------------------------------| - * | | - * - * buf_ptr_max - * buffer (buf_ptr) buf_end - * +-----------------------+--------------+ - * |/ / / / / / / / / / / /| | - * write buffer: | / / to be flushed / / | | - * |/ / / / / / / / / / / /| | - * +-----------------------+--------------+ - * buf_ptr can be in this - * due to a backward seek - * - * pos - * +-------------+----------------------------------------------+ - * output file: | | | - * +-------------+----------------------------------------------+ - * - */ - unsigned char *buffer; /**< Start of the buffer. */ - int buffer_size; /**< Maximum buffer size */ - unsigned char *buf_ptr; /**< Current position in the buffer */ - unsigned char *buf_end; /**< End of the data, may be less than - buffer+buffer_size if the read function returned - less data than requested, e.g. for streams where - no more data has been received yet. */ - void *opaque; /**< A private pointer, passed to the read/write/seek/... - functions. */ - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size); - int (*write_packet)(void *opaque, uint8_t *buf, int buf_size); - int64_t (*seek)(void *opaque, int64_t offset, int whence); - int64_t pos; /**< position in the file of the current buffer */ - int eof_reached; /**< true if was unable to read due to error or eof */ - int write_flag; /**< true if open for writing */ - int max_packet_size; - unsigned long checksum; - unsigned char *checksum_ptr; - unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size); - int error; /**< contains the error code or 0 if no error happened */ - /** - * Pause or resume playback for network streaming protocols - e.g. MMS. - */ - int (*read_pause)(void *opaque, int pause); - /** - * Seek to a given timestamp in stream with the specified stream_index. - * Needed for some network streaming protocols which don't support seeking - * to byte position. - */ - int64_t (*read_seek)(void *opaque, int stream_index, - int64_t timestamp, int flags); - /** - * A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. - */ - int seekable; - - /** - * max filesize, used to limit allocations - * This field is internal to libavformat and access from outside is not allowed. - */ - int64_t maxsize; - - /** - * avio_read and avio_write should if possible be satisfied directly - * instead of going through a buffer, and avio_seek will always - * call the underlying seek function directly. - */ - int direct; - - /** - * Bytes read statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int64_t bytes_read; - - /** - * seek statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int seek_count; - - /** - * writeout statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int writeout_count; - - /** - * Original buffer size - * used internally after probing and ensure seekback to reset the buffer size - * This field is internal to libavformat and access from outside is not allowed. - */ - int orig_buffer_size; - - /** - * Threshold to favor readahead over seek. - * This is current internal only, do not use from outside. - */ - int short_seek_threshold; - - /** - * ',' separated list of allowed protocols. - */ - const char *protocol_whitelist; - - /** - * ',' separated list of disallowed protocols. - */ - const char *protocol_blacklist; - - /** - * A callback that is used instead of write_packet. - */ - int (*write_data_type)(void *opaque, uint8_t *buf, int buf_size, - enum AVIODataMarkerType type, int64_t time); - /** - * If set, don't call write_data_type separately for AVIO_DATA_MARKER_BOUNDARY_POINT, - * but ignore them and treat them as AVIO_DATA_MARKER_UNKNOWN (to avoid needlessly - * small chunks of data returned from the callback). - */ - int ignore_boundary_point; - - /** - * Internal, not meant to be used from outside of AVIOContext. - */ - enum AVIODataMarkerType current_type; - int64_t last_time; - - /** - * A callback that is used instead of short_seek_threshold. - * This is current internal only, do not use from outside. - */ - int (*short_seek_get)(void *opaque); - - int64_t written; - - /** - * Maximum reached position before a backward seek in the write buffer, - * used keeping track of already written data for a later flush. - */ - unsigned char *buf_ptr_max; - - /** - * Try to buffer at least this amount of data before flushing it - */ - int min_packet_size; -} AVIOContext; - -/** - * Return the name of the protocol that will handle the passed URL. - * - * NULL is returned if no protocol could be found for the given URL. - * - * @return Name of the protocol or NULL. - */ -const char *avio_find_protocol_name(const char *url); - -/** - * Return AVIO_FLAG_* access flags corresponding to the access permissions - * of the resource in url, or a negative value corresponding to an - * AVERROR code in case of failure. The returned access flags are - * masked by the value in flags. - * - * @note This function is intrinsically unsafe, in the sense that the - * checked resource may change its existence or permission status from - * one call to another. Thus you should not trust the returned value, - * unless you are sure that no other processes are accessing the - * checked resource. - */ -int avio_check(const char *url, int flags); - -/** - * Move or rename a resource. - * - * @note url_src and url_dst should share the same protocol and authority. - * - * @param url_src url to resource to be moved - * @param url_dst new url to resource if the operation succeeded - * @return >=0 on success or negative on error. - */ -int avpriv_io_move(const char *url_src, const char *url_dst); - -/** - * Delete a resource. - * - * @param url resource to be deleted. - * @return >=0 on success or negative on error. - */ -int avpriv_io_delete(const char *url); - -/** - * Open directory for reading. - * - * @param s directory read context. Pointer to a NULL pointer must be passed. - * @param url directory to be listed. - * @param options A dictionary filled with protocol-private options. On return - * this parameter will be destroyed and replaced with a dictionary - * containing options that were not found. May be NULL. - * @return >=0 on success or negative on error. - */ -int avio_open_dir(AVIODirContext **s, const char *url, AVDictionary **options); - -/** - * Get next directory entry. - * - * Returned entry must be freed with avio_free_directory_entry(). In particular - * it may outlive AVIODirContext. - * - * @param s directory read context. - * @param[out] next next entry or NULL when no more entries. - * @return >=0 on success or negative on error. End of list is not considered an - * error. - */ -int avio_read_dir(AVIODirContext *s, AVIODirEntry **next); - -/** - * Close directory. - * - * @note Entries created using avio_read_dir() are not deleted and must be - * freeded with avio_free_directory_entry(). - * - * @param s directory read context. - * @return >=0 on success or negative on error. - */ -int avio_close_dir(AVIODirContext **s); - -/** - * Free entry allocated by avio_read_dir(). - * - * @param entry entry to be freed. - */ -void avio_free_directory_entry(AVIODirEntry **entry); - -/** - * Allocate and initialize an AVIOContext for buffered I/O. It must be later - * freed with avio_context_free(). - * - * @param buffer Memory block for input/output operations via AVIOContext. - * The buffer must be allocated with av_malloc() and friends. - * It may be freed and replaced with a new buffer by libavformat. - * AVIOContext.buffer holds the buffer currently in use, - * which must be later freed with av_free(). - * @param buffer_size The buffer size is very important for performance. - * For protocols with fixed blocksize it should be set to this blocksize. - * For others a typical size is a cache page, e.g. 4kb. - * @param write_flag Set to 1 if the buffer should be writable, 0 otherwise. - * @param opaque An opaque pointer to user-specific data. - * @param read_packet A function for refilling the buffer, may be NULL. - * For stream protocols, must never return 0 but rather - * a proper AVERROR code. - * @param write_packet A function for writing the buffer contents, may be NULL. - * The function may not change the input buffers content. - * @param seek A function for seeking to specified byte position, may be NULL. - * - * @return Allocated AVIOContext or NULL on failure. - */ -AVIOContext *avio_alloc_context( - unsigned char *buffer, - int buffer_size, - int write_flag, - void *opaque, - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), - int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), - int64_t (*seek)(void *opaque, int64_t offset, int whence)); - -/** - * Free the supplied IO context and everything associated with it. - * - * @param s Double pointer to the IO context. This function will write NULL - * into s. - */ -void avio_context_free(AVIOContext **s); - -void avio_w8(AVIOContext *s, int b); -void avio_write(AVIOContext *s, const unsigned char *buf, int size); -void avio_wl64(AVIOContext *s, uint64_t val); -void avio_wb64(AVIOContext *s, uint64_t val); -void avio_wl32(AVIOContext *s, unsigned int val); -void avio_wb32(AVIOContext *s, unsigned int val); -void avio_wl24(AVIOContext *s, unsigned int val); -void avio_wb24(AVIOContext *s, unsigned int val); -void avio_wl16(AVIOContext *s, unsigned int val); -void avio_wb16(AVIOContext *s, unsigned int val); - -/** - * Write a NULL-terminated string. - * @return number of bytes written. - */ -int avio_put_str(AVIOContext *s, const char *str); - -/** - * Convert an UTF-8 string to UTF-16LE and write it. - * @param s the AVIOContext - * @param str NULL-terminated UTF-8 string - * - * @return number of bytes written. - */ -int avio_put_str16le(AVIOContext *s, const char *str); - -/** - * Convert an UTF-8 string to UTF-16BE and write it. - * @param s the AVIOContext - * @param str NULL-terminated UTF-8 string - * - * @return number of bytes written. - */ -int avio_put_str16be(AVIOContext *s, const char *str); - -/** - * Mark the written bytestream as a specific type. - * - * Zero-length ranges are omitted from the output. - * - * @param time the stream time the current bytestream pos corresponds to - * (in AV_TIME_BASE units), or AV_NOPTS_VALUE if unknown or not - * applicable - * @param type the kind of data written starting at the current pos - */ -void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type); - -/** - * ORing this as the "whence" parameter to a seek function causes it to - * return the filesize without seeking anywhere. Supporting this is optional. - * If it is not supported then the seek function will return <0. - */ -#define AVSEEK_SIZE 0x10000 - -/** - * Passing this flag as the "whence" parameter to a seek function causes it to - * seek by any means (like reopening and linear reading) or other normally unreasonable - * means that can be extremely slow. - * This may be ignored by the seek code. - */ -#define AVSEEK_FORCE 0x20000 - -/** - * fseek() equivalent for AVIOContext. - * @return new position or AVERROR. - */ -int64_t avio_seek(AVIOContext *s, int64_t offset, int whence); - -/** - * Skip given number of bytes forward - * @return new position or AVERROR. - */ -int64_t avio_skip(AVIOContext *s, int64_t offset); - -/** - * ftell() equivalent for AVIOContext. - * @return position or AVERROR. - */ -static av_always_inline int64_t avio_tell(AVIOContext *s) -{ - return avio_seek(s, 0, SEEK_CUR); -} - -/** - * Get the filesize. - * @return filesize or AVERROR - */ -int64_t avio_size(AVIOContext *s); - -/** - * Similar to feof() but also returns nonzero on read errors. - * @return non zero if and only if at end of file or a read error happened when reading. - */ -int avio_feof(AVIOContext *s); - -/** - * Writes a formatted string to the context. - * @return number of bytes written, < 0 on error. - */ -int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3); - -/** - * Write a NULL terminated array of strings to the context. - * Usually you don't need to use this function directly but its macro wrapper, - * avio_print. - */ -void avio_print_string_array(AVIOContext *s, const char *strings[]); - -/** - * Write strings (const char *) to the context. - * This is a convenience macro around avio_print_string_array and it - * automatically creates the string array from the variable argument list. - * For simple string concatenations this function is more performant than using - * avio_printf since it does not need a temporary buffer. - */ -#define avio_print(s, ...) \ - avio_print_string_array(s, (const char*[]){__VA_ARGS__, NULL}) - -/** - * Force flushing of buffered data. - * - * For write streams, force the buffered data to be immediately written to the output, - * without to wait to fill the internal buffer. - * - * For read streams, discard all currently buffered data, and advance the - * reported file position to that of the underlying stream. This does not - * read new data, and does not perform any seeks. - */ -void avio_flush(AVIOContext *s); - -/** - * Read size bytes from AVIOContext into buf. - * @return number of bytes read or AVERROR - */ -int avio_read(AVIOContext *s, unsigned char *buf, int size); - -/** - * Read size bytes from AVIOContext into buf. Unlike avio_read(), this is allowed - * to read fewer bytes than requested. The missing bytes can be read in the next - * call. This always tries to read at least 1 byte. - * Useful to reduce latency in certain cases. - * @return number of bytes read or AVERROR - */ -int avio_read_partial(AVIOContext *s, unsigned char *buf, int size); - -/** - * @name Functions for reading from AVIOContext - * @{ - * - * @note return 0 if EOF, so you cannot use it if EOF handling is - * necessary - */ -int avio_r8 (AVIOContext *s); -unsigned int avio_rl16(AVIOContext *s); -unsigned int avio_rl24(AVIOContext *s); -unsigned int avio_rl32(AVIOContext *s); -uint64_t avio_rl64(AVIOContext *s); -unsigned int avio_rb16(AVIOContext *s); -unsigned int avio_rb24(AVIOContext *s); -unsigned int avio_rb32(AVIOContext *s); -uint64_t avio_rb64(AVIOContext *s); -/** - * @} - */ - -/** - * Read a string from pb into buf. The reading will terminate when either - * a NULL character was encountered, maxlen bytes have been read, or nothing - * more can be read from pb. The result is guaranteed to be NULL-terminated, it - * will be truncated if buf is too small. - * Note that the string is not interpreted or validated in any way, it - * might get truncated in the middle of a sequence for multi-byte encodings. - * - * @return number of bytes read (is always <= maxlen). - * If reading ends on EOF or error, the return value will be one more than - * bytes actually read. - */ -int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen); - -/** - * Read a UTF-16 string from pb and convert it to UTF-8. - * The reading will terminate when either a null or invalid character was - * encountered or maxlen bytes have been read. - * @return number of bytes read (is always <= maxlen) - */ -int avio_get_str16le(AVIOContext *pb, int maxlen, char *buf, int buflen); -int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen); - - -/** - * @name URL open modes - * The flags argument to avio_open must be one of the following - * constants, optionally ORed with other flags. - * @{ - */ -#define AVIO_FLAG_READ 1 /**< read-only */ -#define AVIO_FLAG_WRITE 2 /**< write-only */ -#define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) /**< read-write pseudo flag */ -/** - * @} - */ - -/** - * Use non-blocking mode. - * If this flag is set, operations on the context will return - * AVERROR(EAGAIN) if they can not be performed immediately. - * If this flag is not set, operations on the context will never return - * AVERROR(EAGAIN). - * Note that this flag does not affect the opening/connecting of the - * context. Connecting a protocol will always block if necessary (e.g. on - * network protocols) but never hang (e.g. on busy devices). - * Warning: non-blocking protocols is work-in-progress; this flag may be - * silently ignored. - */ -#define AVIO_FLAG_NONBLOCK 8 - -/** - * Use direct mode. - * avio_read and avio_write should if possible be satisfied directly - * instead of going through a buffer, and avio_seek will always - * call the underlying seek function directly. - */ -#define AVIO_FLAG_DIRECT 0x8000 - -/** - * Create and initialize a AVIOContext for accessing the - * resource indicated by url. - * @note When the resource indicated by url has been opened in - * read+write mode, the AVIOContext can be used only for writing. - * - * @param s Used to return the pointer to the created AVIOContext. - * In case of failure the pointed to value is set to NULL. - * @param url resource to access - * @param flags flags which control how the resource indicated by url - * is to be opened - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code in case of failure - */ -int avio_open(AVIOContext **s, const char *url, int flags); - -/** - * Create and initialize a AVIOContext for accessing the - * resource indicated by url. - * @note When the resource indicated by url has been opened in - * read+write mode, the AVIOContext can be used only for writing. - * - * @param s Used to return the pointer to the created AVIOContext. - * In case of failure the pointed to value is set to NULL. - * @param url resource to access - * @param flags flags which control how the resource indicated by url - * is to be opened - * @param int_cb an interrupt callback to be used at the protocols level - * @param options A dictionary filled with protocol-private options. On return - * this parameter will be destroyed and replaced with a dict containing options - * that were not found. May be NULL. - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code in case of failure - */ -int avio_open2(AVIOContext **s, const char *url, int flags, - const AVIOInterruptCB *int_cb, AVDictionary **options); - -/** - * Close the resource accessed by the AVIOContext s and free it. - * This function can only be used if s was opened by avio_open(). - * - * The internal buffer is automatically flushed before closing the - * resource. - * - * @return 0 on success, an AVERROR < 0 on error. - * @see avio_closep - */ -int avio_close(AVIOContext *s); - -/** - * Close the resource accessed by the AVIOContext *s, free it - * and set the pointer pointing to it to NULL. - * This function can only be used if s was opened by avio_open(). - * - * The internal buffer is automatically flushed before closing the - * resource. - * - * @return 0 on success, an AVERROR < 0 on error. - * @see avio_close - */ -int avio_closep(AVIOContext **s); - - -/** - * Open a write only memory stream. - * - * @param s new IO context - * @return zero if no error. - */ -int avio_open_dyn_buf(AVIOContext **s); - -/** - * Return the written size and a pointer to the buffer. - * The AVIOContext stream is left intact. - * The buffer must NOT be freed. - * No padding is added to the buffer. - * - * @param s IO context - * @param pbuffer pointer to a byte buffer - * @return the length of the byte buffer - */ -int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer); - -/** - * Return the written size and a pointer to the buffer. The buffer - * must be freed with av_free(). - * Padding of AV_INPUT_BUFFER_PADDING_SIZE is added to the buffer. - * - * @param s IO context - * @param pbuffer pointer to a byte buffer - * @return the length of the byte buffer - */ -int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer); - -/** - * Iterate through names of available protocols. - * - * @param opaque A private pointer representing current protocol. - * It must be a pointer to NULL on first iteration and will - * be updated by successive calls to avio_enum_protocols. - * @param output If set to 1, iterate over output protocols, - * otherwise over input protocols. - * - * @return A static string containing the name of current protocol or NULL - */ -const char *avio_enum_protocols(void **opaque, int output); - -/** - * Get AVClass by names of available protocols. - * - * @return A AVClass of input protocol name or NULL - */ -const AVClass *avio_protocol_get_class(const char *name); - -/** - * Pause and resume playing - only meaningful if using a network streaming - * protocol (e.g. MMS). - * - * @param h IO context from which to call the read_pause function pointer - * @param pause 1 for pause, 0 for resume - */ -int avio_pause(AVIOContext *h, int pause); - -/** - * Seek to a given timestamp relative to some component stream. - * Only meaningful if using a network streaming protocol (e.g. MMS.). - * - * @param h IO context from which to call the seek function pointers - * @param stream_index The stream index that the timestamp is relative to. - * If stream_index is (-1) the timestamp should be in AV_TIME_BASE - * units from the beginning of the presentation. - * If a stream_index >= 0 is used and the protocol does not support - * seeking based on component streams, the call will fail. - * @param timestamp timestamp in AVStream.time_base units - * or if there is no stream specified then in AV_TIME_BASE units. - * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE - * and AVSEEK_FLAG_ANY. The protocol may silently ignore - * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will - * fail if used and not supported. - * @return >= 0 on success - * @see AVInputFormat::read_seek - */ -int64_t avio_seek_time(AVIOContext *h, int stream_index, - int64_t timestamp, int flags); - -/* Avoid a warning. The header can not be included because it breaks c++. */ -struct AVBPrint; - -/** - * Read contents of h into print buffer, up to max_size bytes, or up to EOF. - * - * @return 0 for success (max_size bytes read or EOF reached), negative error - * code otherwise - */ -int avio_read_to_bprint(AVIOContext *h, struct AVBPrint *pb, size_t max_size); - -/** - * Accept and allocate a client context on a server context. - * @param s the server context - * @param c the client context, must be unallocated - * @return >= 0 on success or a negative value corresponding - * to an AVERROR on failure - */ -int avio_accept(AVIOContext *s, AVIOContext **c); - -/** - * Perform one step of the protocol handshake to accept a new client. - * This function must be called on a client returned by avio_accept() before - * using it as a read/write context. - * It is separate from avio_accept() because it may block. - * A step of the handshake is defined by places where the application may - * decide to change the proceedings. - * For example, on a protocol with a request header and a reply header, each - * one can constitute a step because the application may use the parameters - * from the request to change parameters in the reply; or each individual - * chunk of the request can constitute a step. - * If the handshake is already finished, avio_handshake() does nothing and - * returns 0 immediately. - * - * @param c the client context to perform the handshake on - * @return 0 on a complete and successful handshake - * > 0 if the handshake progressed, but is not complete - * < 0 for an AVERROR code - */ -int avio_handshake(AVIOContext *c); -#endif /* AVFORMAT_AVIO_H */ diff --git a/prebuilts/x86/include/libavformat/version.h b/prebuilts/x86/include/libavformat/version.h deleted file mode 100644 index 46dc51a..0000000 --- a/prebuilts/x86/include/libavformat/version.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFORMAT_VERSION_H -#define AVFORMAT_VERSION_H - -/** - * @file - * @ingroup libavf - * Libavformat version macros - */ - -#include "libavutil/version.h" - -// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) -// Also please add any ticket numbers that you believe might be affected here -#define LIBAVFORMAT_VERSION_MAJOR 58 -#define LIBAVFORMAT_VERSION_MINOR 76 -#define LIBAVFORMAT_VERSION_MICRO 100 - -#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ - LIBAVFORMAT_VERSION_MINOR, \ - LIBAVFORMAT_VERSION_MICRO) -#define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_MAJOR, \ - LIBAVFORMAT_VERSION_MINOR, \ - LIBAVFORMAT_VERSION_MICRO) -#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT - -#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - * - */ -#ifndef FF_API_COMPUTE_PKT_FIELDS2 -#define FF_API_COMPUTE_PKT_FIELDS2 (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_OPEN_CALLBACKS -#define FF_API_OLD_OPEN_CALLBACKS (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_AVCTX -#define FF_API_LAVF_AVCTX (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_HTTP_USER_AGENT -#define FF_API_HTTP_USER_AGENT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_HLS_WRAP -#define FF_API_HLS_WRAP (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_HLS_USE_LOCALTIME -#define FF_API_HLS_USE_LOCALTIME (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_KEEPSIDE_FLAG -#define FF_API_LAVF_KEEPSIDE_FLAG (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_ROTATE_API -#define FF_API_OLD_ROTATE_API (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_FORMAT_GET_SET -#define FF_API_FORMAT_GET_SET (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_AVIO_EOF_0 -#define FF_API_OLD_AVIO_EOF_0 (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_FFSERVER -#define FF_API_LAVF_FFSERVER (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_FORMAT_FILENAME -#define FF_API_FORMAT_FILENAME (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_RTSP_OPTIONS -#define FF_API_OLD_RTSP_OPTIONS (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_NEXT -#define FF_API_NEXT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_DASH_MIN_SEG_DURATION -#define FF_API_DASH_MIN_SEG_DURATION (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_MP4A_LATM -#define FF_API_LAVF_MP4A_LATM (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVIOFORMAT -#define FF_API_AVIOFORMAT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_DEMUXER_OPEN -#define FF_API_DEMUXER_OPEN (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CHAPTER_ID_INT -#define FF_API_CHAPTER_ID_INT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_PRIV_OPT -#define FF_API_LAVF_PRIV_OPT (LIBAVFORMAT_VERSION_MAJOR < 60) -#endif - - -#ifndef FF_API_R_FRAME_RATE -#define FF_API_R_FRAME_RATE 1 -#endif -#endif /* AVFORMAT_VERSION_H */ diff --git a/prebuilts/x86/include/libavutil/adler32.h b/prebuilts/x86/include/libavutil/adler32.h deleted file mode 100644 index e7a8f83..0000000 --- a/prebuilts/x86/include/libavutil/adler32.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * copyright (c) 2006 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_adler32 - * Public header for Adler-32 hash function implementation. - */ - -#ifndef AVUTIL_ADLER32_H -#define AVUTIL_ADLER32_H - -#include -#include -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_adler32 Adler-32 - * @ingroup lavu_hash - * Adler-32 hash function implementation. - * - * @{ - */ - -#if FF_API_CRYPTO_SIZE_T -typedef unsigned long AVAdler; -#else -typedef uint32_t AVAdler; -#endif - -/** - * Calculate the Adler32 checksum of a buffer. - * - * Passing the return value to a subsequent av_adler32_update() call - * allows the checksum of multiple buffers to be calculated as though - * they were concatenated. - * - * @param adler initial checksum value - * @param buf pointer to input buffer - * @param len size of input buffer - * @return updated checksum - */ -AVAdler av_adler32_update(AVAdler adler, const uint8_t *buf, -#if FF_API_CRYPTO_SIZE_T - unsigned int len) av_pure; -#else - size_t len) av_pure; -#endif - -/** - * @} - */ - -#endif /* AVUTIL_ADLER32_H */ diff --git a/prebuilts/x86/include/libavutil/aes.h b/prebuilts/x86/include/libavutil/aes.h deleted file mode 100644 index 09efbda..0000000 --- a/prebuilts/x86/include/libavutil/aes.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * copyright (c) 2007 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AES_H -#define AVUTIL_AES_H - -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_aes AES - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_aes_size; - -struct AVAES; - -/** - * Allocate an AVAES context. - */ -struct AVAES *av_aes_alloc(void); - -/** - * Initialize an AVAES context. - * @param key_bits 128, 192 or 256 - * @param decrypt 0 for encryption, 1 for decryption - */ -int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * @param count number of 16 byte blocks - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_aes_crypt(struct AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_AES_H */ diff --git a/prebuilts/x86/include/libavutil/aes_ctr.h b/prebuilts/x86/include/libavutil/aes_ctr.h deleted file mode 100644 index e4aae12..0000000 --- a/prebuilts/x86/include/libavutil/aes_ctr.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * AES-CTR cipher - * Copyright (c) 2015 Eran Kornblau - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AES_CTR_H -#define AVUTIL_AES_CTR_H - -#include - -#include "attributes.h" -#include "version.h" - -#define AES_CTR_KEY_SIZE (16) -#define AES_CTR_IV_SIZE (8) - -struct AVAESCTR; - -/** - * Allocate an AVAESCTR context. - */ -struct AVAESCTR *av_aes_ctr_alloc(void); - -/** - * Initialize an AVAESCTR context. - * @param key encryption key, must have a length of AES_CTR_KEY_SIZE - */ -int av_aes_ctr_init(struct AVAESCTR *a, const uint8_t *key); - -/** - * Release an AVAESCTR context. - */ -void av_aes_ctr_free(struct AVAESCTR *a); - -/** - * Process a buffer using a previously initialized context. - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param size the size of src and dst - */ -void av_aes_ctr_crypt(struct AVAESCTR *a, uint8_t *dst, const uint8_t *src, int size); - -/** - * Get the current iv - */ -const uint8_t* av_aes_ctr_get_iv(struct AVAESCTR *a); - -/** - * Generate a random iv - */ -void av_aes_ctr_set_random_iv(struct AVAESCTR *a); - -/** - * Forcefully change the 8-byte iv - */ -void av_aes_ctr_set_iv(struct AVAESCTR *a, const uint8_t* iv); - -/** - * Forcefully change the "full" 16-byte iv, including the counter - */ -void av_aes_ctr_set_full_iv(struct AVAESCTR *a, const uint8_t* iv); - -/** - * Increment the top 64 bit of the iv (performed after each frame) - */ -void av_aes_ctr_increment_iv(struct AVAESCTR *a); - -/** - * @} - */ - -#endif /* AVUTIL_AES_CTR_H */ diff --git a/prebuilts/x86/include/libavutil/attributes.h b/prebuilts/x86/include/libavutil/attributes.h deleted file mode 100644 index 5cb9fe3..0000000 --- a/prebuilts/x86/include/libavutil/attributes.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Macro definitions for various function/variable attributes - */ - -#ifndef AVUTIL_ATTRIBUTES_H -#define AVUTIL_ATTRIBUTES_H - -#ifdef __GNUC__ -# define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y)) -# define AV_GCC_VERSION_AT_MOST(x,y) (__GNUC__ < (x) || __GNUC__ == (x) && __GNUC_MINOR__ <= (y)) -#else -# define AV_GCC_VERSION_AT_LEAST(x,y) 0 -# define AV_GCC_VERSION_AT_MOST(x,y) 0 -#endif - -#ifdef __has_builtin -# define AV_HAS_BUILTIN(x) __has_builtin(x) -#else -# define AV_HAS_BUILTIN(x) 0 -#endif - -#ifndef av_always_inline -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_always_inline __attribute__((always_inline)) inline -#elif defined(_MSC_VER) -# define av_always_inline __forceinline -#else -# define av_always_inline inline -#endif -#endif - -#ifndef av_extern_inline -#if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__) -# define av_extern_inline extern inline -#else -# define av_extern_inline inline -#endif -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,4) -# define av_warn_unused_result __attribute__((warn_unused_result)) -#else -# define av_warn_unused_result -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_noinline __attribute__((noinline)) -#elif defined(_MSC_VER) -# define av_noinline __declspec(noinline) -#else -# define av_noinline -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) -# define av_pure __attribute__((pure)) -#else -# define av_pure -#endif - -#if AV_GCC_VERSION_AT_LEAST(2,6) || defined(__clang__) -# define av_const __attribute__((const)) -#else -# define av_const -#endif - -#if AV_GCC_VERSION_AT_LEAST(4,3) || defined(__clang__) -# define av_cold __attribute__((cold)) -#else -# define av_cold -#endif - -#if AV_GCC_VERSION_AT_LEAST(4,1) && !defined(__llvm__) -# define av_flatten __attribute__((flatten)) -#else -# define av_flatten -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define attribute_deprecated __attribute__((deprecated)) -#elif defined(_MSC_VER) -# define attribute_deprecated __declspec(deprecated) -#else -# define attribute_deprecated -#endif - -/** - * Disable warnings about deprecated features - * This is useful for sections of code kept for backward compatibility and - * scheduled for removal. - */ -#ifndef AV_NOWARN_DEPRECATED -#if AV_GCC_VERSION_AT_LEAST(4,6) -# define AV_NOWARN_DEPRECATED(code) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ - code \ - _Pragma("GCC diagnostic pop") -#elif defined(_MSC_VER) -# define AV_NOWARN_DEPRECATED(code) \ - __pragma(warning(push)) \ - __pragma(warning(disable : 4996)) \ - code; \ - __pragma(warning(pop)) -#else -# define AV_NOWARN_DEPRECATED(code) code -#endif -#endif - -#if defined(__GNUC__) || defined(__clang__) -# define av_unused __attribute__((unused)) -#else -# define av_unused -#endif - -/** - * Mark a variable as used and prevent the compiler from optimizing it - * away. This is useful for variables accessed only from inline - * assembler without the compiler being aware. - */ -#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) -# define av_used __attribute__((used)) -#else -# define av_used -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,3) || defined(__clang__) -# define av_alias __attribute__((may_alias)) -#else -# define av_alias -#endif - -#if (defined(__GNUC__) || defined(__clang__)) && !defined(__INTEL_COMPILER) -# define av_uninit(x) x=x -#else -# define av_uninit(x) x -#endif - -#if defined(__GNUC__) || defined(__clang__) -# define av_builtin_constant_p __builtin_constant_p -# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos))) -#else -# define av_builtin_constant_p(x) 0 -# define av_printf_format(fmtpos, attrpos) -#endif - -#if AV_GCC_VERSION_AT_LEAST(2,5) || defined(__clang__) -# define av_noreturn __attribute__((noreturn)) -#else -# define av_noreturn -#endif - -#endif /* AVUTIL_ATTRIBUTES_H */ diff --git a/prebuilts/x86/include/libavutil/audio_fifo.h b/prebuilts/x86/include/libavutil/audio_fifo.h deleted file mode 100644 index d8a9194..0000000 --- a/prebuilts/x86/include/libavutil/audio_fifo.h +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Audio FIFO - * Copyright (c) 2012 Justin Ruggles - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Audio FIFO Buffer - */ - -#ifndef AVUTIL_AUDIO_FIFO_H -#define AVUTIL_AUDIO_FIFO_H - -#include "avutil.h" -#include "fifo.h" -#include "samplefmt.h" - -/** - * @addtogroup lavu_audio - * @{ - * - * @defgroup lavu_audiofifo Audio FIFO Buffer - * @{ - */ - -/** - * Context for an Audio FIFO Buffer. - * - * - Operates at the sample level rather than the byte level. - * - Supports multiple channels with either planar or packed sample format. - * - Automatic reallocation when writing to a full buffer. - */ -typedef struct AVAudioFifo AVAudioFifo; - -/** - * Free an AVAudioFifo. - * - * @param af AVAudioFifo to free - */ -void av_audio_fifo_free(AVAudioFifo *af); - -/** - * Allocate an AVAudioFifo. - * - * @param sample_fmt sample format - * @param channels number of channels - * @param nb_samples initial allocation size, in samples - * @return newly allocated AVAudioFifo, or NULL on error - */ -AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels, - int nb_samples); - -/** - * Reallocate an AVAudioFifo. - * - * @param af AVAudioFifo to reallocate - * @param nb_samples new allocation size, in samples - * @return 0 if OK, or negative AVERROR code on failure - */ -av_warn_unused_result -int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples); - -/** - * Write data to an AVAudioFifo. - * - * The AVAudioFifo will be reallocated automatically if the available space - * is less than nb_samples. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to write to - * @param data audio data plane pointers - * @param nb_samples number of samples to write - * @return number of samples actually written, or negative AVERROR - * code on failure. If successful, the number of samples - * actually written will always be nb_samples. - */ -int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Peek data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to peek - * @return number of samples actually peek, or negative AVERROR code - * on failure. The number of samples actually peek will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Peek data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to peek - * @param offset offset from current read position - * @return number of samples actually peek, or negative AVERROR code - * on failure. The number of samples actually peek will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offset); - -/** - * Read data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to read - * @return number of samples actually read, or negative AVERROR code - * on failure. The number of samples actually read will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Drain data from an AVAudioFifo. - * - * Removes the data without reading it. - * - * @param af AVAudioFifo to drain - * @param nb_samples number of samples to drain - * @return 0 if OK, or negative AVERROR code on failure - */ -int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples); - -/** - * Reset the AVAudioFifo buffer. - * - * This empties all data in the buffer. - * - * @param af AVAudioFifo to reset - */ -void av_audio_fifo_reset(AVAudioFifo *af); - -/** - * Get the current number of samples in the AVAudioFifo available for reading. - * - * @param af the AVAudioFifo to query - * @return number of samples available for reading - */ -int av_audio_fifo_size(AVAudioFifo *af); - -/** - * Get the current number of samples in the AVAudioFifo available for writing. - * - * @param af the AVAudioFifo to query - * @return number of samples available for writing - */ -int av_audio_fifo_space(AVAudioFifo *af); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_AUDIO_FIFO_H */ diff --git a/prebuilts/x86/include/libavutil/avassert.h b/prebuilts/x86/include/libavutil/avassert.h deleted file mode 100644 index 9abeade..0000000 --- a/prebuilts/x86/include/libavutil/avassert.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * copyright (c) 2010 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * simple assert() macros that are a bit more flexible than ISO C assert(). - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_AVASSERT_H -#define AVUTIL_AVASSERT_H - -#include -#include "avutil.h" -#include "log.h" - -/** - * assert() equivalent, that is always enabled. - */ -#define av_assert0(cond) do { \ - if (!(cond)) { \ - av_log(NULL, AV_LOG_PANIC, "Assertion %s failed at %s:%d\n", \ - AV_STRINGIFY(cond), __FILE__, __LINE__); \ - abort(); \ - } \ -} while (0) - - -/** - * assert() equivalent, that does not lie in speed critical code. - * These asserts() thus can be enabled without fearing speed loss. - */ -#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0 -#define av_assert1(cond) av_assert0(cond) -#else -#define av_assert1(cond) ((void)0) -#endif - - -/** - * assert() equivalent, that does lie in speed critical code. - */ -#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 -#define av_assert2(cond) av_assert0(cond) -#define av_assert2_fpu() av_assert0_fpu() -#else -#define av_assert2(cond) ((void)0) -#define av_assert2_fpu() ((void)0) -#endif - -/** - * Assert that floating point operations can be executed. - * - * This will av_assert0() that the cpu is not in MMX state on X86 - */ -void av_assert0_fpu(void); - -#endif /* AVUTIL_AVASSERT_H */ diff --git a/prebuilts/x86/include/libavutil/avconfig.h b/prebuilts/x86/include/libavutil/avconfig.h deleted file mode 100644 index 8558b35..0000000 --- a/prebuilts/x86/include/libavutil/avconfig.h +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated by ffmpeg configure */ -#ifndef AVUTIL_AVCONFIG_H -#define AVUTIL_AVCONFIG_H -#define AV_HAVE_BIGENDIAN 0 -#define AV_HAVE_FAST_UNALIGNED 0 -#endif /* AVUTIL_AVCONFIG_H */ diff --git a/prebuilts/x86/include/libavutil/avstring.h b/prebuilts/x86/include/libavutil/avstring.h deleted file mode 100644 index fae446c..0000000 --- a/prebuilts/x86/include/libavutil/avstring.h +++ /dev/null @@ -1,437 +0,0 @@ -/* - * Copyright (c) 2007 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AVSTRING_H -#define AVUTIL_AVSTRING_H - -#include -#include -#include "attributes.h" -#include "version.h" - -/** - * @addtogroup lavu_string - * @{ - */ - -/** - * Return non-zero if pfx is a prefix of str. If it is, *ptr is set to - * the address of the first character in str after the prefix. - * - * @param str input string - * @param pfx prefix to test - * @param ptr updated if the prefix is matched inside str - * @return non-zero if the prefix matches, zero otherwise - */ -int av_strstart(const char *str, const char *pfx, const char **ptr); - -/** - * Return non-zero if pfx is a prefix of str independent of case. If - * it is, *ptr is set to the address of the first character in str - * after the prefix. - * - * @param str input string - * @param pfx prefix to test - * @param ptr updated if the prefix is matched inside str - * @return non-zero if the prefix matches, zero otherwise - */ -int av_stristart(const char *str, const char *pfx, const char **ptr); - -/** - * Locate the first case-independent occurrence in the string haystack - * of the string needle. A zero-length string needle is considered to - * match at the start of haystack. - * - * This function is a case-insensitive version of the standard strstr(). - * - * @param haystack string to search in - * @param needle string to search for - * @return pointer to the located match within haystack - * or a null pointer if no match - */ -char *av_stristr(const char *haystack, const char *needle); - -/** - * Locate the first occurrence of the string needle in the string haystack - * where not more than hay_length characters are searched. A zero-length - * string needle is considered to match at the start of haystack. - * - * This function is a length-limited version of the standard strstr(). - * - * @param haystack string to search in - * @param needle string to search for - * @param hay_length length of string to search in - * @return pointer to the located match within haystack - * or a null pointer if no match - */ -char *av_strnstr(const char *haystack, const char *needle, size_t hay_length); - -/** - * Copy the string src to dst, but no more than size - 1 bytes, and - * null-terminate dst. - * - * This function is the same as BSD strlcpy(). - * - * @param dst destination buffer - * @param src source string - * @param size size of destination buffer - * @return the length of src - * - * @warning since the return value is the length of src, src absolutely - * _must_ be a properly 0-terminated string, otherwise this will read beyond - * the end of the buffer and possibly crash. - */ -size_t av_strlcpy(char *dst, const char *src, size_t size); - -/** - * Append the string src to the string dst, but to a total length of - * no more than size - 1 bytes, and null-terminate dst. - * - * This function is similar to BSD strlcat(), but differs when - * size <= strlen(dst). - * - * @param dst destination buffer - * @param src source string - * @param size size of destination buffer - * @return the total length of src and dst - * - * @warning since the return value use the length of src and dst, these - * absolutely _must_ be a properly 0-terminated strings, otherwise this - * will read beyond the end of the buffer and possibly crash. - */ -size_t av_strlcat(char *dst, const char *src, size_t size); - -/** - * Append output to a string, according to a format. Never write out of - * the destination buffer, and always put a terminating 0 within - * the buffer. - * @param dst destination buffer (string to which the output is - * appended) - * @param size total size of the destination buffer - * @param fmt printf-compatible format string, specifying how the - * following parameters are used - * @return the length of the string that would have been generated - * if enough space had been available - */ -size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4); - -/** - * Get the count of continuous non zero chars starting from the beginning. - * - * @param len maximum number of characters to check in the string, that - * is the maximum value which is returned by the function - */ -static inline size_t av_strnlen(const char *s, size_t len) -{ - size_t i; - for (i = 0; i < len && s[i]; i++) - ; - return i; -} - -/** - * Print arguments following specified format into a large enough auto - * allocated buffer. It is similar to GNU asprintf(). - * @param fmt printf-compatible format string, specifying how the - * following parameters are used. - * @return the allocated string - * @note You have to free the string yourself with av_free(). - */ -char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2); - -#if FF_API_D2STR -/** - * Convert a number to an av_malloced string. - * @deprecated use av_asprintf() with "%f" or a more specific format - */ -attribute_deprecated -char *av_d2str(double d); -#endif - -/** - * Unescape the given string until a non escaped terminating char, - * and return the token corresponding to the unescaped string. - * - * The normal \ and ' escaping is supported. Leading and trailing - * whitespaces are removed, unless they are escaped with '\' or are - * enclosed between ''. - * - * @param buf the buffer to parse, buf will be updated to point to the - * terminating char - * @param term a 0-terminated list of terminating chars - * @return the malloced unescaped string, which must be av_freed by - * the user, NULL in case of allocation failure - */ -char *av_get_token(const char **buf, const char *term); - -/** - * Split the string into several tokens which can be accessed by - * successive calls to av_strtok(). - * - * A token is defined as a sequence of characters not belonging to the - * set specified in delim. - * - * On the first call to av_strtok(), s should point to the string to - * parse, and the value of saveptr is ignored. In subsequent calls, s - * should be NULL, and saveptr should be unchanged since the previous - * call. - * - * This function is similar to strtok_r() defined in POSIX.1. - * - * @param s the string to parse, may be NULL - * @param delim 0-terminated list of token delimiters, must be non-NULL - * @param saveptr user-provided pointer which points to stored - * information necessary for av_strtok() to continue scanning the same - * string. saveptr is updated to point to the next character after the - * first delimiter found, or to NULL if the string was terminated - * @return the found token, or NULL when no token is found - */ -char *av_strtok(char *s, const char *delim, char **saveptr); - -/** - * Locale-independent conversion of ASCII isdigit. - */ -static inline av_const int av_isdigit(int c) -{ - return c >= '0' && c <= '9'; -} - -/** - * Locale-independent conversion of ASCII isgraph. - */ -static inline av_const int av_isgraph(int c) -{ - return c > 32 && c < 127; -} - -/** - * Locale-independent conversion of ASCII isspace. - */ -static inline av_const int av_isspace(int c) -{ - return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || - c == '\v'; -} - -/** - * Locale-independent conversion of ASCII characters to uppercase. - */ -static inline av_const int av_toupper(int c) -{ - if (c >= 'a' && c <= 'z') - c ^= 0x20; - return c; -} - -/** - * Locale-independent conversion of ASCII characters to lowercase. - */ -static inline av_const int av_tolower(int c) -{ - if (c >= 'A' && c <= 'Z') - c ^= 0x20; - return c; -} - -/** - * Locale-independent conversion of ASCII isxdigit. - */ -static inline av_const int av_isxdigit(int c) -{ - c = av_tolower(c); - return av_isdigit(c) || (c >= 'a' && c <= 'f'); -} - -/** - * Locale-independent case-insensitive compare. - * @note This means only ASCII-range characters are case-insensitive - */ -int av_strcasecmp(const char *a, const char *b); - -/** - * Locale-independent case-insensitive compare. - * @note This means only ASCII-range characters are case-insensitive - */ -int av_strncasecmp(const char *a, const char *b, size_t n); - -/** - * Locale-independent strings replace. - * @note This means only ASCII-range characters are replace - */ -char *av_strireplace(const char *str, const char *from, const char *to); - -/** - * Thread safe basename. - * @param path the string to parse, on DOS both \ and / are considered separators. - * @return pointer to the basename substring. - * If path does not contain a slash, the function returns a copy of path. - * If path is a NULL pointer or points to an empty string, a pointer - * to a string "." is returned. - */ -const char *av_basename(const char *path); - -/** - * Thread safe dirname. - * @param path the string to parse, on DOS both \ and / are considered separators. - * @return A pointer to a string that's the parent directory of path. - * If path is a NULL pointer or points to an empty string, a pointer - * to a string "." is returned. - * @note the function may modify the contents of the path, so copies should be passed. - */ -const char *av_dirname(char *path); - -/** - * Match instances of a name in a comma-separated list of names. - * List entries are checked from the start to the end of the names list, - * the first match ends further processing. If an entry prefixed with '-' - * matches, then 0 is returned. The "ALL" list entry is considered to - * match all names. - * - * @param name Name to look for. - * @param names List of names. - * @return 1 on match, 0 otherwise. - */ -int av_match_name(const char *name, const char *names); - -/** - * Append path component to the existing path. - * Path separator '/' is placed between when needed. - * Resulting string have to be freed with av_free(). - * @param path base path - * @param component component to be appended - * @return new path or NULL on error. - */ -char *av_append_path_component(const char *path, const char *component); - -enum AVEscapeMode { - AV_ESCAPE_MODE_AUTO, ///< Use auto-selected escaping mode. - AV_ESCAPE_MODE_BACKSLASH, ///< Use backslash escaping. - AV_ESCAPE_MODE_QUOTE, ///< Use single-quote escaping. - AV_ESCAPE_MODE_XML, ///< Use XML non-markup character data escaping. -}; - -/** - * Consider spaces special and escape them even in the middle of the - * string. - * - * This is equivalent to adding the whitespace characters to the special - * characters lists, except it is guaranteed to use the exact same list - * of whitespace characters as the rest of libavutil. - */ -#define AV_ESCAPE_FLAG_WHITESPACE (1 << 0) - -/** - * Escape only specified special characters. - * Without this flag, escape also any characters that may be considered - * special by av_get_token(), such as the single quote. - */ -#define AV_ESCAPE_FLAG_STRICT (1 << 1) - -/** - * Within AV_ESCAPE_MODE_XML, additionally escape single quotes for single - * quoted attributes. - */ -#define AV_ESCAPE_FLAG_XML_SINGLE_QUOTES (1 << 2) - -/** - * Within AV_ESCAPE_MODE_XML, additionally escape double quotes for double - * quoted attributes. - */ -#define AV_ESCAPE_FLAG_XML_DOUBLE_QUOTES (1 << 3) - - -/** - * Escape string in src, and put the escaped string in an allocated - * string in *dst, which must be freed with av_free(). - * - * @param dst pointer where an allocated string is put - * @param src string to escape, must be non-NULL - * @param special_chars string containing the special characters which - * need to be escaped, can be NULL - * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. - * Any unknown value for mode will be considered equivalent to - * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without - * notice. - * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_ macros - * @return the length of the allocated string, or a negative error code in case of error - * @see av_bprint_escape() - */ -av_warn_unused_result -int av_escape(char **dst, const char *src, const char *special_chars, - enum AVEscapeMode mode, int flags); - -#define AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES 1 ///< accept codepoints over 0x10FFFF -#define AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS 2 ///< accept non-characters - 0xFFFE and 0xFFFF -#define AV_UTF8_FLAG_ACCEPT_SURROGATES 4 ///< accept UTF-16 surrogates codes -#define AV_UTF8_FLAG_EXCLUDE_XML_INVALID_CONTROL_CODES 8 ///< exclude control codes not accepted by XML - -#define AV_UTF8_FLAG_ACCEPT_ALL \ - AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES|AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS|AV_UTF8_FLAG_ACCEPT_SURROGATES - -/** - * Read and decode a single UTF-8 code point (character) from the - * buffer in *buf, and update *buf to point to the next byte to - * decode. - * - * In case of an invalid byte sequence, the pointer will be updated to - * the next byte after the invalid sequence and the function will - * return an error code. - * - * Depending on the specified flags, the function will also fail in - * case the decoded code point does not belong to a valid range. - * - * @note For speed-relevant code a carefully implemented use of - * GET_UTF8() may be preferred. - * - * @param codep pointer used to return the parsed code in case of success. - * The value in *codep is set even in case the range check fails. - * @param bufp pointer to the address the first byte of the sequence - * to decode, updated by the function to point to the - * byte next after the decoded sequence - * @param buf_end pointer to the end of the buffer, points to the next - * byte past the last in the buffer. This is used to - * avoid buffer overreads (in case of an unfinished - * UTF-8 sequence towards the end of the buffer). - * @param flags a collection of AV_UTF8_FLAG_* flags - * @return >= 0 in case a sequence was successfully read, a negative - * value in case of invalid sequence - */ -av_warn_unused_result -int av_utf8_decode(int32_t *codep, const uint8_t **bufp, const uint8_t *buf_end, - unsigned int flags); - -/** - * Check if a name is in a list. - * @returns 0 if not found, or the 1 based index where it has been found in the - * list. - */ -int av_match_list(const char *name, const char *list, char separator); - -/** - * See libc sscanf manual for more information. - * Locale-independent sscanf implementation. - */ -int av_sscanf(const char *string, const char *format, ...); - -/** - * @} - */ - -#endif /* AVUTIL_AVSTRING_H */ diff --git a/prebuilts/x86/include/libavutil/avutil.h b/prebuilts/x86/include/libavutil/avutil.h deleted file mode 100644 index 4d63315..0000000 --- a/prebuilts/x86/include/libavutil/avutil.h +++ /dev/null @@ -1,365 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AVUTIL_H -#define AVUTIL_AVUTIL_H - -/** - * @file - * @ingroup lavu - * Convenience header that includes @ref lavu "libavutil"'s core. - */ - -/** - * @mainpage - * - * @section ffmpeg_intro Introduction - * - * This document describes the usage of the different libraries - * provided by FFmpeg. - * - * @li @ref libavc "libavcodec" encoding/decoding library - * @li @ref lavfi "libavfilter" graph-based frame editing library - * @li @ref libavf "libavformat" I/O and muxing/demuxing library - * @li @ref lavd "libavdevice" special devices muxing/demuxing library - * @li @ref lavu "libavutil" common utility library - * @li @ref lswr "libswresample" audio resampling, format conversion and mixing - * @li @ref lpp "libpostproc" post processing library - * @li @ref libsws "libswscale" color conversion and scaling library - * - * @section ffmpeg_versioning Versioning and compatibility - * - * Each of the FFmpeg libraries contains a version.h header, which defines a - * major, minor and micro version number with the - * LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO} macros. The major version - * number is incremented with backward incompatible changes - e.g. removing - * parts of the public API, reordering public struct members, etc. The minor - * version number is incremented for backward compatible API changes or major - * new features - e.g. adding a new public function or a new decoder. The micro - * version number is incremented for smaller changes that a calling program - * might still want to check for - e.g. changing behavior in a previously - * unspecified situation. - * - * FFmpeg guarantees backward API and ABI compatibility for each library as long - * as its major version number is unchanged. This means that no public symbols - * will be removed or renamed. Types and names of the public struct members and - * values of public macros and enums will remain the same (unless they were - * explicitly declared as not part of the public API). Documented behavior will - * not change. - * - * In other words, any correct program that works with a given FFmpeg snapshot - * should work just as well without any changes with any later snapshot with the - * same major versions. This applies to both rebuilding the program against new - * FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program - * links against. - * - * However, new public symbols may be added and new members may be appended to - * public structs whose size is not part of public ABI (most public structs in - * FFmpeg). New macros and enum values may be added. Behavior in undocumented - * situations may change slightly (and be documented). All those are accompanied - * by an entry in doc/APIchanges and incrementing either the minor or micro - * version number. - */ - -/** - * @defgroup lavu libavutil - * Common code shared across all FFmpeg libraries. - * - * @note - * libavutil is designed to be modular. In most cases, in order to use the - * functions provided by one component of libavutil you must explicitly include - * the specific header containing that feature. If you are only using - * media-related components, you could simply include libavutil/avutil.h, which - * brings in most of the "core" components. - * - * @{ - * - * @defgroup lavu_crypto Crypto and Hashing - * - * @{ - * @} - * - * @defgroup lavu_math Mathematics - * @{ - * - * @} - * - * @defgroup lavu_string String Manipulation - * - * @{ - * - * @} - * - * @defgroup lavu_mem Memory Management - * - * @{ - * - * @} - * - * @defgroup lavu_data Data Structures - * @{ - * - * @} - * - * @defgroup lavu_video Video related - * - * @{ - * - * @} - * - * @defgroup lavu_audio Audio related - * - * @{ - * - * @} - * - * @defgroup lavu_error Error Codes - * - * @{ - * - * @} - * - * @defgroup lavu_log Logging Facility - * - * @{ - * - * @} - * - * @defgroup lavu_misc Other - * - * @{ - * - * @defgroup preproc_misc Preprocessor String Macros - * - * @{ - * - * @} - * - * @defgroup version_utils Library Version Macros - * - * @{ - * - * @} - */ - - -/** - * @addtogroup lavu_ver - * @{ - */ - -/** - * Return the LIBAVUTIL_VERSION_INT constant. - */ -unsigned avutil_version(void); - -/** - * Return an informative version string. This usually is the actual release - * version number or a git commit description. This string has no fixed format - * and can change any time. It should never be parsed by code. - */ -const char *av_version_info(void); - -/** - * Return the libavutil build-time configuration. - */ -const char *avutil_configuration(void); - -/** - * Return the libavutil license. - */ -const char *avutil_license(void); - -/** - * @} - */ - -/** - * @addtogroup lavu_media Media Type - * @brief Media Type - */ - -enum AVMediaType { - AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA - AVMEDIA_TYPE_VIDEO, - AVMEDIA_TYPE_AUDIO, - AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous - AVMEDIA_TYPE_SUBTITLE, - AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse - AVMEDIA_TYPE_NB -}; - -/** - * Return a string describing the media_type enum, NULL if media_type - * is unknown. - */ -const char *av_get_media_type_string(enum AVMediaType media_type); - -/** - * @defgroup lavu_const Constants - * @{ - * - * @defgroup lavu_enc Encoding specific - * - * @note those definition should move to avcodec - * @{ - */ - -#define FF_LAMBDA_SHIFT 7 -#define FF_LAMBDA_SCALE (1< - -/** - * @defgroup lavu_base64 Base64 - * @ingroup lavu_crypto - * @{ - */ - -/** - * Decode a base64-encoded string. - * - * @param out buffer for decoded data - * @param in null-terminated input string - * @param out_size size in bytes of the out buffer, must be at - * least 3/4 of the length of in, that is AV_BASE64_DECODE_SIZE(strlen(in)) - * @return number of bytes written, or a negative value in case of - * invalid input - */ -int av_base64_decode(uint8_t *out, const char *in, int out_size); - -/** - * Calculate the output size in bytes needed to decode a base64 string - * with length x to a data buffer. - */ -#define AV_BASE64_DECODE_SIZE(x) ((x) * 3LL / 4) - -/** - * Encode data to base64 and null-terminate. - * - * @param out buffer for encoded data - * @param out_size size in bytes of the out buffer (including the - * null terminator), must be at least AV_BASE64_SIZE(in_size) - * @param in input buffer containing the data to encode - * @param in_size size in bytes of the in buffer - * @return out or NULL in case of error - */ -char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size); - -/** - * Calculate the output size needed to base64-encode x bytes to a - * null-terminated string. - */ -#define AV_BASE64_SIZE(x) (((x)+2) / 3 * 4 + 1) - - /** - * @} - */ - -#endif /* AVUTIL_BASE64_H */ diff --git a/prebuilts/x86/include/libavutil/blowfish.h b/prebuilts/x86/include/libavutil/blowfish.h deleted file mode 100644 index 9e289a4..0000000 --- a/prebuilts/x86/include/libavutil/blowfish.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Blowfish algorithm - * Copyright (c) 2012 Samuel Pitoiset - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_BLOWFISH_H -#define AVUTIL_BLOWFISH_H - -#include - -/** - * @defgroup lavu_blowfish Blowfish - * @ingroup lavu_crypto - * @{ - */ - -#define AV_BF_ROUNDS 16 - -typedef struct AVBlowfish { - uint32_t p[AV_BF_ROUNDS + 2]; - uint32_t s[4][256]; -} AVBlowfish; - -/** - * Allocate an AVBlowfish context. - */ -AVBlowfish *av_blowfish_alloc(void); - -/** - * Initialize an AVBlowfish context. - * - * @param ctx an AVBlowfish context - * @param key a key - * @param key_len length of the key - */ -void av_blowfish_init(struct AVBlowfish *ctx, const uint8_t *key, int key_len); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVBlowfish context - * @param xl left four bytes halves of input to be encrypted - * @param xr right four bytes halves of input to be encrypted - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_blowfish_crypt_ecb(struct AVBlowfish *ctx, uint32_t *xl, uint32_t *xr, - int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVBlowfish context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_blowfish_crypt(struct AVBlowfish *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_BLOWFISH_H */ diff --git a/prebuilts/x86/include/libavutil/bprint.h b/prebuilts/x86/include/libavutil/bprint.h deleted file mode 100644 index c09b1ac..0000000 --- a/prebuilts/x86/include/libavutil/bprint.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (c) 2012 Nicolas George - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_BPRINT_H -#define AVUTIL_BPRINT_H - -#include - -#include "attributes.h" -#include "avstring.h" - -/** - * Define a structure with extra padding to a fixed size - * This helps ensuring binary compatibility with future versions. - */ - -#define FF_PAD_STRUCTURE(name, size, ...) \ -struct ff_pad_helper_##name { __VA_ARGS__ }; \ -typedef struct name { \ - __VA_ARGS__ \ - char reserved_padding[size - sizeof(struct ff_pad_helper_##name)]; \ -} name; - -/** - * Buffer to print data progressively - * - * The string buffer grows as necessary and is always 0-terminated. - * The content of the string is never accessed, and thus is - * encoding-agnostic and can even hold binary data. - * - * Small buffers are kept in the structure itself, and thus require no - * memory allocation at all (unless the contents of the buffer is needed - * after the structure goes out of scope). This is almost as lightweight as - * declaring a local "char buf[512]". - * - * The length of the string can go beyond the allocated size: the buffer is - * then truncated, but the functions still keep account of the actual total - * length. - * - * In other words, buf->len can be greater than buf->size and records the - * total length of what would have been to the buffer if there had been - * enough memory. - * - * Append operations do not need to be tested for failure: if a memory - * allocation fails, data stop being appended to the buffer, but the length - * is still updated. This situation can be tested with - * av_bprint_is_complete(). - * - * The size_max field determines several possible behaviours: - * - * size_max = -1 (= UINT_MAX) or any large value will let the buffer be - * reallocated as necessary, with an amortized linear cost. - * - * size_max = 0 prevents writing anything to the buffer: only the total - * length is computed. The write operations can then possibly be repeated in - * a buffer with exactly the necessary size - * (using size_init = size_max = len + 1). - * - * size_max = 1 is automatically replaced by the exact size available in the - * structure itself, thus ensuring no dynamic memory allocation. The - * internal buffer is large enough to hold a reasonable paragraph of text, - * such as the current paragraph. - */ - -FF_PAD_STRUCTURE(AVBPrint, 1024, - char *str; /**< string so far */ - unsigned len; /**< length so far */ - unsigned size; /**< allocated memory */ - unsigned size_max; /**< maximum allocated memory */ - char reserved_internal_buffer[1]; -) - -/** - * Convenience macros for special values for av_bprint_init() size_max - * parameter. - */ -#define AV_BPRINT_SIZE_UNLIMITED ((unsigned)-1) -#define AV_BPRINT_SIZE_AUTOMATIC 1 -#define AV_BPRINT_SIZE_COUNT_ONLY 0 - -/** - * Init a print buffer. - * - * @param buf buffer to init - * @param size_init initial size (including the final 0) - * @param size_max maximum size; - * 0 means do not write anything, just count the length; - * 1 is replaced by the maximum value for automatic storage; - * any large value means that the internal buffer will be - * reallocated as needed up to that limit; -1 is converted to - * UINT_MAX, the largest limit possible. - * Check also AV_BPRINT_SIZE_* macros. - */ -void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max); - -/** - * Init a print buffer using a pre-existing buffer. - * - * The buffer will not be reallocated. - * - * @param buf buffer structure to init - * @param buffer byte buffer to use for the string data - * @param size size of buffer - */ -void av_bprint_init_for_buffer(AVBPrint *buf, char *buffer, unsigned size); - -/** - * Append a formatted string to a print buffer. - */ -void av_bprintf(AVBPrint *buf, const char *fmt, ...) av_printf_format(2, 3); - -/** - * Append a formatted string to a print buffer. - */ -void av_vbprintf(AVBPrint *buf, const char *fmt, va_list vl_arg); - -/** - * Append char c n times to a print buffer. - */ -void av_bprint_chars(AVBPrint *buf, char c, unsigned n); - -/** - * Append data to a print buffer. - * - * param buf bprint buffer to use - * param data pointer to data - * param size size of data - */ -void av_bprint_append_data(AVBPrint *buf, const char *data, unsigned size); - -struct tm; -/** - * Append a formatted date and time to a print buffer. - * - * param buf bprint buffer to use - * param fmt date and time format string, see strftime() - * param tm broken-down time structure to translate - * - * @note due to poor design of the standard strftime function, it may - * produce poor results if the format string expands to a very long text and - * the bprint buffer is near the limit stated by the size_max option. - */ -void av_bprint_strftime(AVBPrint *buf, const char *fmt, const struct tm *tm); - -/** - * Allocate bytes in the buffer for external use. - * - * @param[in] buf buffer structure - * @param[in] size required size - * @param[out] mem pointer to the memory area - * @param[out] actual_size size of the memory area after allocation; - * can be larger or smaller than size - */ -void av_bprint_get_buffer(AVBPrint *buf, unsigned size, - unsigned char **mem, unsigned *actual_size); - -/** - * Reset the string to "" but keep internal allocated data. - */ -void av_bprint_clear(AVBPrint *buf); - -/** - * Test if the print buffer is complete (not truncated). - * - * It may have been truncated due to a memory allocation failure - * or the size_max limit (compare size and size_max if necessary). - */ -static inline int av_bprint_is_complete(const AVBPrint *buf) -{ - return buf->len < buf->size; -} - -/** - * Finalize a print buffer. - * - * The print buffer can no longer be used afterwards, - * but the len and size fields are still valid. - * - * @arg[out] ret_str if not NULL, used to return a permanent copy of the - * buffer contents, or NULL if memory allocation fails; - * if NULL, the buffer is discarded and freed - * @return 0 for success or error code (probably AVERROR(ENOMEM)) - */ -int av_bprint_finalize(AVBPrint *buf, char **ret_str); - -/** - * Escape the content in src and append it to dstbuf. - * - * @param dstbuf already inited destination bprint buffer - * @param src string containing the text to escape - * @param special_chars string containing the special characters which - * need to be escaped, can be NULL - * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. - * Any unknown value for mode will be considered equivalent to - * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without - * notice. - * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_* macros - */ -void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_chars, - enum AVEscapeMode mode, int flags); - -#endif /* AVUTIL_BPRINT_H */ diff --git a/prebuilts/x86/include/libavutil/bswap.h b/prebuilts/x86/include/libavutil/bswap.h deleted file mode 100644 index 91cb795..0000000 --- a/prebuilts/x86/include/libavutil/bswap.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * byte swapping routines - */ - -#ifndef AVUTIL_BSWAP_H -#define AVUTIL_BSWAP_H - -#include -#include "libavutil/avconfig.h" -#include "attributes.h" - -#ifdef HAVE_AV_CONFIG_H - -#include "config.h" - -#if ARCH_AARCH64 -# include "aarch64/bswap.h" -#elif ARCH_ARM -# include "arm/bswap.h" -#elif ARCH_AVR32 -# include "avr32/bswap.h" -#elif ARCH_SH4 -# include "sh4/bswap.h" -#elif ARCH_X86 -# include "x86/bswap.h" -#endif - -#endif /* HAVE_AV_CONFIG_H */ - -#define AV_BSWAP16C(x) (((x) << 8 & 0xff00) | ((x) >> 8 & 0x00ff)) -#define AV_BSWAP32C(x) (AV_BSWAP16C(x) << 16 | AV_BSWAP16C((x) >> 16)) -#define AV_BSWAP64C(x) (AV_BSWAP32C(x) << 32 | AV_BSWAP32C((x) >> 32)) - -#define AV_BSWAPC(s, x) AV_BSWAP##s##C(x) - -#ifndef av_bswap16 -static av_always_inline av_const uint16_t av_bswap16(uint16_t x) -{ - x= (x>>8) | (x<<8); - return x; -} -#endif - -#ifndef av_bswap32 -static av_always_inline av_const uint32_t av_bswap32(uint32_t x) -{ - return AV_BSWAP32C(x); -} -#endif - -#ifndef av_bswap64 -static inline uint64_t av_const av_bswap64(uint64_t x) -{ - return (uint64_t)av_bswap32(x) << 32 | av_bswap32(x >> 32); -} -#endif - -// be2ne ... big-endian to native-endian -// le2ne ... little-endian to native-endian - -#if AV_HAVE_BIGENDIAN -#define av_be2ne16(x) (x) -#define av_be2ne32(x) (x) -#define av_be2ne64(x) (x) -#define av_le2ne16(x) av_bswap16(x) -#define av_le2ne32(x) av_bswap32(x) -#define av_le2ne64(x) av_bswap64(x) -#define AV_BE2NEC(s, x) (x) -#define AV_LE2NEC(s, x) AV_BSWAPC(s, x) -#else -#define av_be2ne16(x) av_bswap16(x) -#define av_be2ne32(x) av_bswap32(x) -#define av_be2ne64(x) av_bswap64(x) -#define av_le2ne16(x) (x) -#define av_le2ne32(x) (x) -#define av_le2ne64(x) (x) -#define AV_BE2NEC(s, x) AV_BSWAPC(s, x) -#define AV_LE2NEC(s, x) (x) -#endif - -#define AV_BE2NE16C(x) AV_BE2NEC(16, x) -#define AV_BE2NE32C(x) AV_BE2NEC(32, x) -#define AV_BE2NE64C(x) AV_BE2NEC(64, x) -#define AV_LE2NE16C(x) AV_LE2NEC(16, x) -#define AV_LE2NE32C(x) AV_LE2NEC(32, x) -#define AV_LE2NE64C(x) AV_LE2NEC(64, x) - -#endif /* AVUTIL_BSWAP_H */ diff --git a/prebuilts/x86/include/libavutil/buffer.h b/prebuilts/x86/include/libavutil/buffer.h deleted file mode 100644 index 241a80e..0000000 --- a/prebuilts/x86/include/libavutil/buffer.h +++ /dev/null @@ -1,353 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_buffer - * refcounted data buffer API - */ - -#ifndef AVUTIL_BUFFER_H -#define AVUTIL_BUFFER_H - -#include -#include - -#include "version.h" - -/** - * @defgroup lavu_buffer AVBuffer - * @ingroup lavu_data - * - * @{ - * AVBuffer is an API for reference-counted data buffers. - * - * There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer - * represents the data buffer itself; it is opaque and not meant to be accessed - * by the caller directly, but only through AVBufferRef. However, the caller may - * e.g. compare two AVBuffer pointers to check whether two different references - * are describing the same data buffer. AVBufferRef represents a single - * reference to an AVBuffer and it is the object that may be manipulated by the - * caller directly. - * - * There are two functions provided for creating a new AVBuffer with a single - * reference -- av_buffer_alloc() to just allocate a new buffer, and - * av_buffer_create() to wrap an existing array in an AVBuffer. From an existing - * reference, additional references may be created with av_buffer_ref(). - * Use av_buffer_unref() to free a reference (this will automatically free the - * data once all the references are freed). - * - * The convention throughout this API and the rest of FFmpeg is such that the - * buffer is considered writable if there exists only one reference to it (and - * it has not been marked as read-only). The av_buffer_is_writable() function is - * provided to check whether this is true and av_buffer_make_writable() will - * automatically create a new writable buffer when necessary. - * Of course nothing prevents the calling code from violating this convention, - * however that is safe only when all the existing references are under its - * control. - * - * @note Referencing and unreferencing the buffers is thread-safe and thus - * may be done from multiple threads simultaneously without any need for - * additional locking. - * - * @note Two different references to the same buffer can point to different - * parts of the buffer (i.e. their AVBufferRef.data will not be equal). - */ - -/** - * A reference counted buffer type. It is opaque and is meant to be used through - * references (AVBufferRef). - */ -typedef struct AVBuffer AVBuffer; - -/** - * A reference to a data buffer. - * - * The size of this struct is not a part of the public ABI and it is not meant - * to be allocated directly. - */ -typedef struct AVBufferRef { - AVBuffer *buffer; - - /** - * The data buffer. It is considered writable if and only if - * this is the only reference to the buffer, in which case - * av_buffer_is_writable() returns 1. - */ - uint8_t *data; - /** - * Size of data in bytes. - */ -#if FF_API_BUFFER_SIZE_T - int size; -#else - size_t size; -#endif -} AVBufferRef; - -/** - * Allocate an AVBuffer of the given size using av_malloc(). - * - * @return an AVBufferRef of given size or NULL when out of memory - */ -#if FF_API_BUFFER_SIZE_T -AVBufferRef *av_buffer_alloc(int size); -#else -AVBufferRef *av_buffer_alloc(size_t size); -#endif - -/** - * Same as av_buffer_alloc(), except the returned buffer will be initialized - * to zero. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferRef *av_buffer_allocz(int size); -#else -AVBufferRef *av_buffer_allocz(size_t size); -#endif - -/** - * Always treat the buffer as read-only, even when it has only one - * reference. - */ -#define AV_BUFFER_FLAG_READONLY (1 << 0) - -/** - * Create an AVBuffer from an existing array. - * - * If this function is successful, data is owned by the AVBuffer. The caller may - * only access data through the returned AVBufferRef and references derived from - * it. - * If this function fails, data is left untouched. - * @param data data array - * @param size size of data in bytes - * @param free a callback for freeing this buffer's data - * @param opaque parameter to be got for processing or passed to free - * @param flags a combination of AV_BUFFER_FLAG_* - * - * @return an AVBufferRef referring to data on success, NULL on failure. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferRef *av_buffer_create(uint8_t *data, int size, -#else -AVBufferRef *av_buffer_create(uint8_t *data, size_t size, -#endif - void (*free)(void *opaque, uint8_t *data), - void *opaque, int flags); - -/** - * Default free callback, which calls av_free() on the buffer data. - * This function is meant to be passed to av_buffer_create(), not called - * directly. - */ -void av_buffer_default_free(void *opaque, uint8_t *data); - -/** - * Create a new reference to an AVBuffer. - * - * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on - * failure. - */ -AVBufferRef *av_buffer_ref(AVBufferRef *buf); - -/** - * Free a given reference and automatically free the buffer if there are no more - * references to it. - * - * @param buf the reference to be freed. The pointer is set to NULL on return. - */ -void av_buffer_unref(AVBufferRef **buf); - -/** - * @return 1 if the caller may write to the data referred to by buf (which is - * true if and only if buf is the only reference to the underlying AVBuffer). - * Return 0 otherwise. - * A positive answer is valid until av_buffer_ref() is called on buf. - */ -int av_buffer_is_writable(const AVBufferRef *buf); - -/** - * @return the opaque parameter set by av_buffer_create. - */ -void *av_buffer_get_opaque(const AVBufferRef *buf); - -int av_buffer_get_ref_count(const AVBufferRef *buf); - -/** - * Create a writable reference from a given buffer reference, avoiding data copy - * if possible. - * - * @param buf buffer reference to make writable. On success, buf is either left - * untouched, or it is unreferenced and a new writable AVBufferRef is - * written in its place. On failure, buf is left untouched. - * @return 0 on success, a negative AVERROR on failure. - */ -int av_buffer_make_writable(AVBufferRef **buf); - -/** - * Reallocate a given buffer. - * - * @param buf a buffer reference to reallocate. On success, buf will be - * unreferenced and a new reference with the required size will be - * written in its place. On failure buf will be left untouched. *buf - * may be NULL, then a new buffer is allocated. - * @param size required new buffer size. - * @return 0 on success, a negative AVERROR on failure. - * - * @note the buffer is actually reallocated with av_realloc() only if it was - * initially allocated through av_buffer_realloc(NULL) and there is only one - * reference to it (i.e. the one passed to this function). In all other cases - * a new buffer is allocated and the data is copied. - */ -#if FF_API_BUFFER_SIZE_T -int av_buffer_realloc(AVBufferRef **buf, int size); -#else -int av_buffer_realloc(AVBufferRef **buf, size_t size); -#endif - -/** - * Ensure dst refers to the same data as src. - * - * When *dst is already equivalent to src, do nothing. Otherwise unreference dst - * and replace it with a new reference to src. - * - * @param dst Pointer to either a valid buffer reference or NULL. On success, - * this will point to a buffer reference equivalent to src. On - * failure, dst will be left untouched. - * @param src A buffer reference to replace dst with. May be NULL, then this - * function is equivalent to av_buffer_unref(dst). - * @return 0 on success - * AVERROR(ENOMEM) on memory allocation failure. - */ -int av_buffer_replace(AVBufferRef **dst, AVBufferRef *src); - -/** - * @} - */ - -/** - * @defgroup lavu_bufferpool AVBufferPool - * @ingroup lavu_data - * - * @{ - * AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers. - * - * Frequently allocating and freeing large buffers may be slow. AVBufferPool is - * meant to solve this in cases when the caller needs a set of buffers of the - * same size (the most obvious use case being buffers for raw video or audio - * frames). - * - * At the beginning, the user must call av_buffer_pool_init() to create the - * buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to - * get a reference to a new buffer, similar to av_buffer_alloc(). This new - * reference works in all aspects the same way as the one created by - * av_buffer_alloc(). However, when the last reference to this buffer is - * unreferenced, it is returned to the pool instead of being freed and will be - * reused for subsequent av_buffer_pool_get() calls. - * - * When the caller is done with the pool and no longer needs to allocate any new - * buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable. - * Once all the buffers are released, it will automatically be freed. - * - * Allocating and releasing buffers with this API is thread-safe as long as - * either the default alloc callback is used, or the user-supplied one is - * thread-safe. - */ - -/** - * The buffer pool. This structure is opaque and not meant to be accessed - * directly. It is allocated with av_buffer_pool_init() and freed with - * av_buffer_pool_uninit(). - */ -typedef struct AVBufferPool AVBufferPool; - -/** - * Allocate and initialize a buffer pool. - * - * @param size size of each buffer in this pool - * @param alloc a function that will be used to allocate new buffers when the - * pool is empty. May be NULL, then the default allocator will be used - * (av_buffer_alloc()). - * @return newly created buffer pool on success, NULL on error. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)); -#else -AVBufferPool *av_buffer_pool_init(size_t size, AVBufferRef* (*alloc)(size_t size)); -#endif - -/** - * Allocate and initialize a buffer pool with a more complex allocator. - * - * @param size size of each buffer in this pool - * @param opaque arbitrary user data used by the allocator - * @param alloc a function that will be used to allocate new buffers when the - * pool is empty. May be NULL, then the default allocator will be - * used (av_buffer_alloc()). - * @param pool_free a function that will be called immediately before the pool - * is freed. I.e. after av_buffer_pool_uninit() is called - * by the caller and all the frames are returned to the pool - * and freed. It is intended to uninitialize the user opaque - * data. May be NULL. - * @return newly created buffer pool on success, NULL on error. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferPool *av_buffer_pool_init2(int size, void *opaque, - AVBufferRef* (*alloc)(void *opaque, int size), -#else -AVBufferPool *av_buffer_pool_init2(size_t size, void *opaque, - AVBufferRef* (*alloc)(void *opaque, size_t size), -#endif - void (*pool_free)(void *opaque)); - -/** - * Mark the pool as being available for freeing. It will actually be freed only - * once all the allocated buffers associated with the pool are released. Thus it - * is safe to call this function while some of the allocated buffers are still - * in use. - * - * @param pool pointer to the pool to be freed. It will be set to NULL. - */ -void av_buffer_pool_uninit(AVBufferPool **pool); - -/** - * Allocate a new AVBuffer, reusing an old buffer from the pool when available. - * This function may be called simultaneously from multiple threads. - * - * @return a reference to the new buffer on success, NULL on error. - */ -AVBufferRef *av_buffer_pool_get(AVBufferPool *pool); - -/** - * Query the original opaque parameter of an allocated buffer in the pool. - * - * @param ref a buffer reference to a buffer returned by av_buffer_pool_get. - * @return the opaque parameter set by the buffer allocator function of the - * buffer pool. - * - * @note the opaque parameter of ref is used by the buffer pool implementation, - * therefore you have to use this function to access the original opaque - * parameter of an allocated buffer. - */ -void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref); - -/** - * @} - */ - -#endif /* AVUTIL_BUFFER_H */ diff --git a/prebuilts/x86/include/libavutil/camellia.h b/prebuilts/x86/include/libavutil/camellia.h deleted file mode 100644 index e674c9b..0000000 --- a/prebuilts/x86/include/libavutil/camellia.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * An implementation of the CAMELLIA algorithm as mentioned in RFC3713 - * Copyright (c) 2014 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CAMELLIA_H -#define AVUTIL_CAMELLIA_H - -#include - - -/** - * @file - * @brief Public header for libavutil CAMELLIA algorithm - * @defgroup lavu_camellia CAMELLIA - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_camellia_size; - -struct AVCAMELLIA; - -/** - * Allocate an AVCAMELLIA context - * To free the struct: av_free(ptr) - */ -struct AVCAMELLIA *av_camellia_alloc(void); - -/** - * Initialize an AVCAMELLIA context. - * - * @param ctx an AVCAMELLIA context - * @param key a key of 16, 24, 32 bytes used for encryption/decryption - * @param key_bits number of keybits: possible are 128, 192, 256 - */ -int av_camellia_init(struct AVCAMELLIA *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVCAMELLIA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 16 byte blocks - * @paran iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_camellia_crypt(struct AVCAMELLIA *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt); - -/** - * @} - */ -#endif /* AVUTIL_CAMELLIA_H */ diff --git a/prebuilts/x86/include/libavutil/cast5.h b/prebuilts/x86/include/libavutil/cast5.h deleted file mode 100644 index ad5b347..0000000 --- a/prebuilts/x86/include/libavutil/cast5.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * An implementation of the CAST128 algorithm as mentioned in RFC2144 - * Copyright (c) 2014 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CAST5_H -#define AVUTIL_CAST5_H - -#include - - -/** - * @file - * @brief Public header for libavutil CAST5 algorithm - * @defgroup lavu_cast5 CAST5 - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_cast5_size; - -struct AVCAST5; - -/** - * Allocate an AVCAST5 context - * To free the struct: av_free(ptr) - */ -struct AVCAST5 *av_cast5_alloc(void); -/** - * Initialize an AVCAST5 context. - * - * @param ctx an AVCAST5 context - * @param key a key of 5,6,...16 bytes used for encryption/decryption - * @param key_bits number of keybits: possible are 40,48,...,128 - * @return 0 on success, less than 0 on failure - */ -int av_cast5_init(struct AVCAST5 *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, ECB mode only - * - * @param ctx an AVCAST5 context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_cast5_crypt(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVCAST5 context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_cast5_crypt2(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); -/** - * @} - */ -#endif /* AVUTIL_CAST5_H */ diff --git a/prebuilts/x86/include/libavutil/channel_layout.h b/prebuilts/x86/include/libavutil/channel_layout.h deleted file mode 100644 index d39ae11..0000000 --- a/prebuilts/x86/include/libavutil/channel_layout.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright (c) 2006 Michael Niedermayer - * Copyright (c) 2008 Peter Ross - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CHANNEL_LAYOUT_H -#define AVUTIL_CHANNEL_LAYOUT_H - -#include - -/** - * @file - * audio channel layout utility functions - */ - -/** - * @addtogroup lavu_audio - * @{ - */ - -/** - * @defgroup channel_masks Audio channel masks - * - * 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. - * - * @{ - */ -#define AV_CH_FRONT_LEFT 0x00000001 -#define AV_CH_FRONT_RIGHT 0x00000002 -#define AV_CH_FRONT_CENTER 0x00000004 -#define AV_CH_LOW_FREQUENCY 0x00000008 -#define AV_CH_BACK_LEFT 0x00000010 -#define AV_CH_BACK_RIGHT 0x00000020 -#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040 -#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080 -#define AV_CH_BACK_CENTER 0x00000100 -#define AV_CH_SIDE_LEFT 0x00000200 -#define AV_CH_SIDE_RIGHT 0x00000400 -#define AV_CH_TOP_CENTER 0x00000800 -#define AV_CH_TOP_FRONT_LEFT 0x00001000 -#define AV_CH_TOP_FRONT_CENTER 0x00002000 -#define AV_CH_TOP_FRONT_RIGHT 0x00004000 -#define AV_CH_TOP_BACK_LEFT 0x00008000 -#define AV_CH_TOP_BACK_CENTER 0x00010000 -#define AV_CH_TOP_BACK_RIGHT 0x00020000 -#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix. -#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT. -#define AV_CH_WIDE_LEFT 0x0000000080000000ULL -#define AV_CH_WIDE_RIGHT 0x0000000100000000ULL -#define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL -#define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL -#define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL -#define AV_CH_TOP_SIDE_LEFT 0x0000001000000000ULL -#define AV_CH_TOP_SIDE_RIGHT 0x0000002000000000ULL -#define AV_CH_BOTTOM_FRONT_CENTER 0x0000004000000000ULL -#define AV_CH_BOTTOM_FRONT_LEFT 0x0000008000000000ULL -#define AV_CH_BOTTOM_FRONT_RIGHT 0x0000010000000000ULL - -/** Channel mask value used for AVCodecContext.request_channel_layout - to indicate that the user requests the channel order of the decoder output - to be the native codec channel order. */ -#define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL - -/** - * @} - * @defgroup channel_mask_c Audio channel layouts - * @{ - * */ -#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT) -#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT0_FRONT (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT0_FRONT (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) -#define 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) -#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT) -#define AV_CH_LAYOUT_22POINT2 (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_BACK_CENTER|AV_CH_LOW_FREQUENCY_2|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_CENTER|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_BOTTOM_FRONT_CENTER|AV_CH_BOTTOM_FRONT_LEFT|AV_CH_BOTTOM_FRONT_RIGHT) - -enum AVMatrixEncoding { - AV_MATRIX_ENCODING_NONE, - AV_MATRIX_ENCODING_DOLBY, - AV_MATRIX_ENCODING_DPLII, - AV_MATRIX_ENCODING_DPLIIX, - AV_MATRIX_ENCODING_DPLIIZ, - AV_MATRIX_ENCODING_DOLBYEX, - AV_MATRIX_ENCODING_DOLBYHEADPHONE, - AV_MATRIX_ENCODING_NB -}; - -/** - * Return a channel layout id that matches name, or 0 if no match is found. - * - * name can be one or several of the following notations, - * separated by '+' or '|': - * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, - * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); - * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, - * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); - * - a number of channels, in decimal, followed by 'c', yielding - * the default channel layout for that number of channels (@see - * av_get_default_channel_layout); - * - a channel layout mask, in hexadecimal starting with "0x" (see the - * AV_CH_* macros). - * - * Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7" - */ -uint64_t av_get_channel_layout(const char *name); - -/** - * Return a channel layout and the number of channels based on the specified name. - * - * This function is similar to (@see av_get_channel_layout), but can also parse - * unknown channel layout specifications. - * - * @param[in] name channel layout specification string - * @param[out] channel_layout parsed channel layout (0 if unknown) - * @param[out] nb_channels number of channels - * - * @return 0 on success, AVERROR(EINVAL) if the parsing fails. - */ -int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, int* nb_channels); - -/** - * Return a description of a channel layout. - * If nb_channels is <= 0, it is guessed from the channel_layout. - * - * @param buf put here the string containing the channel layout - * @param buf_size size in bytes of the buffer - */ -void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout); - -struct AVBPrint; -/** - * Append a description of a channel layout to a bprint buffer. - */ -void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout); - -/** - * Return the number of channels in the channel layout. - */ -int av_get_channel_layout_nb_channels(uint64_t channel_layout); - -/** - * Return default channel layout for a given number of channels. - */ -int64_t av_get_default_channel_layout(int nb_channels); - -/** - * Get the index of a channel in channel_layout. - * - * @param channel a channel layout describing exactly one channel which must be - * present in channel_layout. - * - * @return index of channel in channel_layout on success, a negative AVERROR - * on error. - */ -int av_get_channel_layout_channel_index(uint64_t channel_layout, - uint64_t channel); - -/** - * Get the channel with the given index in channel_layout. - */ -uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index); - -/** - * Get the name of a given channel. - * - * @return channel name on success, NULL on error. - */ -const char *av_get_channel_name(uint64_t channel); - -/** - * Get the description of a given channel. - * - * @param channel a channel layout with a single channel - * @return channel description on success, NULL on error - */ -const char *av_get_channel_description(uint64_t channel); - -/** - * Get the value and name of a standard channel layout. - * - * @param[in] index index in an internal list, starting at 0 - * @param[out] layout channel layout mask - * @param[out] name name of the layout - * @return 0 if the layout exists, - * <0 if index is beyond the limits - */ -int av_get_standard_channel_layout(unsigned index, uint64_t *layout, - const char **name); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_CHANNEL_LAYOUT_H */ diff --git a/prebuilts/x86/include/libavutil/common.h b/prebuilts/x86/include/libavutil/common.h deleted file mode 100644 index aee353d..0000000 --- a/prebuilts/x86/include/libavutil/common.h +++ /dev/null @@ -1,608 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * common internal and external API header - */ - -#ifndef AVUTIL_COMMON_H -#define AVUTIL_COMMON_H - -#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && !defined(UINT64_C) -#error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "attributes.h" -#include "macros.h" -#include "version.h" -#include "libavutil/avconfig.h" - -#if AV_HAVE_BIGENDIAN -# define AV_NE(be, le) (be) -#else -# define AV_NE(be, le) (le) -#endif - -//rounded division & shift -#define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) -/* assume b>0 */ -#define ROUNDED_DIV(a,b) (((a)>=0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) -/* Fast a/(1<=0 and b>=0 */ -#define AV_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \ - : ((a) + (1<<(b)) - 1) >> (b)) -/* Backwards compat. */ -#define FF_CEIL_RSHIFT AV_CEIL_RSHIFT - -#define FFUDIV(a,b) (((a)>0 ?(a):(a)-(b)+1) / (b)) -#define FFUMOD(a,b) ((a)-(b)*FFUDIV(a,b)) - -/** - * Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they - * are not representable as absolute values of their type. This is the same - * as with *abs() - * @see FFNABS() - */ -#define FFABS(a) ((a) >= 0 ? (a) : (-(a))) -#define FFSIGN(a) ((a) > 0 ? 1 : -1) - -/** - * Negative Absolute value. - * this works for all integers of all types. - * As with many macros, this evaluates its argument twice, it thus must not have - * a sideeffect, that is FFNABS(x++) has undefined behavior. - */ -#define FFNABS(a) ((a) <= 0 ? (a) : (-(a))) - -/** - * Unsigned Absolute value. - * This takes the absolute value of a signed int and returns it as a unsigned. - * This also works with INT_MIN which would otherwise not be representable - * As with many macros, this evaluates its argument twice. - */ -#define FFABSU(a) ((a) <= 0 ? -(unsigned)(a) : (unsigned)(a)) -#define FFABS64U(a) ((a) <= 0 ? -(uint64_t)(a) : (uint64_t)(a)) - -/** - * Comparator. - * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 - * if x == y. This is useful for instance in a qsort comparator callback. - * Furthermore, compilers are able to optimize this to branchless code, and - * there is no risk of overflow with signed types. - * As with many macros, this evaluates its argument multiple times, it thus - * must not have a side-effect. - */ -#define FFDIFFSIGN(x,y) (((x)>(y)) - ((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])) - -/* misc math functions */ - -#ifdef HAVE_AV_CONFIG_H -# include "config.h" -# include "intmath.h" -#endif - -#ifndef av_ceil_log2 -# define av_ceil_log2 av_ceil_log2_c -#endif -#ifndef av_clip -# define av_clip av_clip_c -#endif -#ifndef av_clip64 -# define av_clip64 av_clip64_c -#endif -#ifndef av_clip_uint8 -# define av_clip_uint8 av_clip_uint8_c -#endif -#ifndef av_clip_int8 -# define av_clip_int8 av_clip_int8_c -#endif -#ifndef av_clip_uint16 -# define av_clip_uint16 av_clip_uint16_c -#endif -#ifndef av_clip_int16 -# define av_clip_int16 av_clip_int16_c -#endif -#ifndef av_clipl_int32 -# define av_clipl_int32 av_clipl_int32_c -#endif -#ifndef av_clip_intp2 -# define av_clip_intp2 av_clip_intp2_c -#endif -#ifndef av_clip_uintp2 -# define av_clip_uintp2 av_clip_uintp2_c -#endif -#ifndef av_mod_uintp2 -# define av_mod_uintp2 av_mod_uintp2_c -#endif -#ifndef av_sat_add32 -# define av_sat_add32 av_sat_add32_c -#endif -#ifndef av_sat_dadd32 -# define av_sat_dadd32 av_sat_dadd32_c -#endif -#ifndef av_sat_sub32 -# define av_sat_sub32 av_sat_sub32_c -#endif -#ifndef av_sat_dsub32 -# define av_sat_dsub32 av_sat_dsub32_c -#endif -#ifndef av_sat_add64 -# define av_sat_add64 av_sat_add64_c -#endif -#ifndef av_sat_sub64 -# define av_sat_sub64 av_sat_sub64_c -#endif -#ifndef av_clipf -# define av_clipf av_clipf_c -#endif -#ifndef av_clipd -# define av_clipd av_clipd_c -#endif -#ifndef av_popcount -# define av_popcount av_popcount_c -#endif -#ifndef av_popcount64 -# define av_popcount64 av_popcount64_c -#endif -#ifndef av_parity -# define av_parity av_parity_c -#endif - -#ifndef av_log2 -av_const int av_log2(unsigned v); -#endif - -#ifndef av_log2_16bit -av_const int av_log2_16bit(unsigned v); -#endif - -/** - * Clip a signed integer value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const int av_clip_c(int a, int amin, int amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a signed 64bit integer value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a signed integer value into the 0-255 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const uint8_t av_clip_uint8_c(int a) -{ - if (a&(~0xFF)) return (~a)>>31; - else return a; -} - -/** - * Clip a signed integer value into the -128,127 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int8_t av_clip_int8_c(int a) -{ - if ((a+0x80U) & ~0xFF) return (a>>31) ^ 0x7F; - else return a; -} - -/** - * Clip a signed integer value into the 0-65535 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const uint16_t av_clip_uint16_c(int a) -{ - if (a&(~0xFFFF)) return (~a)>>31; - else return a; -} - -/** - * Clip a signed integer value into the -32768,32767 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int16_t av_clip_int16_c(int a) -{ - if ((a+0x8000U) & ~0xFFFF) return (a>>31) ^ 0x7FFF; - else return a; -} - -/** - * Clip a signed 64-bit integer value into the -2147483648,2147483647 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a) -{ - if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF); - else return (int32_t)a; -} - -/** - * Clip a signed integer into the -(2^p),(2^p-1) range. - * @param a value to clip - * @param p bit position to clip at - * @return clipped value - */ -static av_always_inline av_const int av_clip_intp2_c(int a, int p) -{ - if (((unsigned)a + (1 << p)) & ~((2 << p) - 1)) - return (a >> 31) ^ ((1 << p) - 1); - else - return a; -} - -/** - * Clip a signed integer to an unsigned power of two range. - * @param a value to clip - * @param p bit position to clip at - * @return clipped value - */ -static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p) -{ - if (a & ~((1<> 31 & ((1<= 0) - return INT64_MAX ^ (b >> 63); - return s; -#endif -} - -/** - * Subtract two signed 64-bit values with saturation. - * - * @param a one value - * @param b another value - * @return difference with signed saturation - */ -static av_always_inline int64_t av_sat_sub64_c(int64_t a, int64_t b) { -#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_sub_overflow) - int64_t tmp; - return !__builtin_sub_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN); -#else - if (b <= 0 && a >= INT64_MAX + b) - return INT64_MAX; - if (b >= 0 && a <= INT64_MIN + b) - return INT64_MIN; - return a - b; -#endif -} - -/** - * Clip a float value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const float av_clipf_c(float a, float amin, float amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a double value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const double av_clipd_c(double a, double amin, double amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** Compute ceil(log2(x)). - * @param x value used to compute ceil(log2(x)) - * @return computed ceiling of log2(x) - */ -static av_always_inline av_const int av_ceil_log2_c(int x) -{ - return av_log2((x - 1U) << 1); -} - -/** - * Count number of bits set to one in x - * @param x value to count bits of - * @return the number of bits set to one in x - */ -static av_always_inline av_const int av_popcount_c(uint32_t x) -{ - x -= (x >> 1) & 0x55555555; - x = (x & 0x33333333) + ((x >> 2) & 0x33333333); - x = (x + (x >> 4)) & 0x0F0F0F0F; - x += x >> 8; - return (x + (x >> 16)) & 0x3F; -} - -/** - * Count number of bits set to one in x - * @param x value to count bits of - * @return the number of bits set to one in x - */ -static av_always_inline av_const int av_popcount64_c(uint64_t x) -{ - return av_popcount((uint32_t)x) + av_popcount((uint32_t)(x >> 32)); -} - -static av_always_inline av_const int av_parity_c(uint32_t v) -{ - return av_popcount(v) & 1; -} - -#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) -#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) - -/** - * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form. - * - * @param val Output value, must be an lvalue of type uint32_t. - * @param GET_BYTE Expression reading one byte from the input. - * Evaluated up to 7 times (4 for the currently - * assigned Unicode range). With a memory buffer - * input, this could be *ptr++, or if you want to make sure - * that *ptr stops at the end of a NULL terminated string then - * *ptr ? *ptr++ : 0 - * @param ERROR Expression to be evaluated on invalid input, - * typically a goto statement. - * - * @warning ERROR should not contain a loop control statement which - * could interact with the internal while loop, and should force an - * exit from the macro code (e.g. through a goto or a return) in order - * to prevent undefined results. - */ -#define GET_UTF8(val, GET_BYTE, ERROR)\ - val= (GET_BYTE);\ - {\ - uint32_t top = (val & 128) >> 1;\ - if ((val & 0xc0) == 0x80 || val >= 0xFE)\ - {ERROR}\ - while (val & top) {\ - unsigned int tmp = (GET_BYTE) - 128;\ - if(tmp>>6)\ - {ERROR}\ - val= (val<<6) + tmp;\ - top <<= 5;\ - }\ - val &= (top << 1) - 1;\ - } - -/** - * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form. - * - * @param val Output value, must be an lvalue of type uint32_t. - * @param GET_16BIT Expression returning two bytes of UTF-16 data converted - * to native byte order. Evaluated one or two times. - * @param ERROR Expression to be evaluated on invalid input, - * typically a goto statement. - */ -#define GET_UTF16(val, GET_16BIT, ERROR)\ - val = (GET_16BIT);\ - {\ - unsigned int hi = val - 0xD800;\ - if (hi < 0x800) {\ - val = (GET_16BIT) - 0xDC00;\ - if (val > 0x3FFU || hi > 0x3FFU)\ - {ERROR}\ - val += (hi<<10) + 0x10000;\ - }\ - }\ - -/** - * @def PUT_UTF8(val, tmp, PUT_BYTE) - * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long). - * @param val is an input-only argument and should be of type uint32_t. It holds - * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If - * val is given as a function it is executed only once. - * @param tmp is a temporary variable and should be of type uint8_t. It - * represents an intermediate value during conversion that is to be - * output by PUT_BYTE. - * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination. - * It could be a function or a statement, and uses tmp as the input byte. - * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be - * executed up to 4 times for values in the valid UTF-8 range and up to - * 7 times in the general case, depending on the length of the converted - * Unicode character. - */ -#define PUT_UTF8(val, tmp, PUT_BYTE)\ - {\ - int bytes, shift;\ - uint32_t in = val;\ - if (in < 0x80) {\ - tmp = in;\ - PUT_BYTE\ - } else {\ - bytes = (av_log2(in) + 4) / 5;\ - shift = (bytes - 1) * 6;\ - tmp = (256 - (256 >> bytes)) | (in >> shift);\ - PUT_BYTE\ - while (shift >= 6) {\ - shift -= 6;\ - tmp = 0x80 | ((in >> shift) & 0x3f);\ - PUT_BYTE\ - }\ - }\ - } - -/** - * @def PUT_UTF16(val, tmp, PUT_16BIT) - * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes). - * @param val is an input-only argument and should be of type uint32_t. It holds - * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If - * val is given as a function it is executed only once. - * @param tmp is a temporary variable and should be of type uint16_t. It - * represents an intermediate value during conversion that is to be - * output by PUT_16BIT. - * @param PUT_16BIT writes the converted UTF-16 data to any proper destination - * in desired endianness. It could be a function or a statement, and uses tmp - * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;" - * PUT_BYTE will be executed 1 or 2 times depending on input character. - */ -#define PUT_UTF16(val, tmp, PUT_16BIT)\ - {\ - uint32_t in = val;\ - if (in < 0x10000) {\ - tmp = in;\ - PUT_16BIT\ - } else {\ - tmp = 0xD800 | ((in - 0x10000) >> 10);\ - PUT_16BIT\ - tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\ - PUT_16BIT\ - }\ - }\ - - - -#include "mem.h" - -#ifdef HAVE_AV_CONFIG_H -# include "internal.h" -#endif /* HAVE_AV_CONFIG_H */ - -#endif /* AVUTIL_COMMON_H */ diff --git a/prebuilts/x86/include/libavutil/cpu.h b/prebuilts/x86/include/libavutil/cpu.h deleted file mode 100644 index 83099dd..0000000 --- a/prebuilts/x86/include/libavutil/cpu.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 2000, 2001, 2002 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CPU_H -#define AVUTIL_CPU_H - -#include - -#include "attributes.h" - -#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ - - /* lower 16 bits - CPU features */ -#define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX -#define AV_CPU_FLAG_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext -#define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext -#define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW -#define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions -#define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions -#define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster - ///< than regular MMX/SSE (e.g. Core1) -#define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt -#define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions -#define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster - ///< than regular MMX/SSE (e.g. Core1) -#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions -#define AV_CPU_FLAG_SSSE3SLOW 0x4000000 ///< SSSE3 supported, but usually not faster -#define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower -#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions -#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions -#define AV_CPU_FLAG_AESNI 0x80000 ///< Advanced Encryption Standard functions -#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used -#define AV_CPU_FLAG_AVXSLOW 0x8000000 ///< AVX supported, but slow when using YMM registers (e.g. Bulldozer) -#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions -#define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions -#define AV_CPU_FLAG_CMOV 0x1000 ///< supports cmov instruction -#define AV_CPU_FLAG_AVX2 0x8000 ///< AVX2 functions: requires OS support even if YMM registers aren't used -#define AV_CPU_FLAG_FMA3 0x10000 ///< Haswell FMA3 functions -#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1 -#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2 -#define AV_CPU_FLAG_AVX512 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used - -#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard -#define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06 -#define AV_CPU_FLAG_POWER8 0x0004 ///< ISA 2.07 - -#define AV_CPU_FLAG_ARMV5TE (1 << 0) -#define AV_CPU_FLAG_ARMV6 (1 << 1) -#define AV_CPU_FLAG_ARMV6T2 (1 << 2) -#define AV_CPU_FLAG_VFP (1 << 3) -#define AV_CPU_FLAG_VFPV3 (1 << 4) -#define AV_CPU_FLAG_NEON (1 << 5) -#define AV_CPU_FLAG_ARMV8 (1 << 6) -#define AV_CPU_FLAG_VFP_VM (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations -#define AV_CPU_FLAG_SETEND (1 <<16) - -#define AV_CPU_FLAG_MMI (1 << 0) -#define AV_CPU_FLAG_MSA (1 << 1) - -/** - * Return the flags which specify extensions supported by the CPU. - * The returned value is affected by av_force_cpu_flags() if that was used - * before. So av_get_cpu_flags() can easily be used in an application to - * detect the enabled cpu flags. - */ -int av_get_cpu_flags(void); - -/** - * Disables cpu detection and forces the specified flags. - * -1 is a special case that disables forcing of specific flags. - */ -void av_force_cpu_flags(int flags); - -/** - * Set a mask on flags returned by av_get_cpu_flags(). - * This function is mainly useful for testing. - * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible - */ -attribute_deprecated void av_set_cpu_flags_mask(int mask); - -/** - * Parse CPU flags from a string. - * - * The returned flags contain the specified flags as well as related unspecified flags. - * - * This function exists only for compatibility with libav. - * Please use av_parse_cpu_caps() when possible. - * @return a combination of AV_CPU_* flags, negative on error. - */ -attribute_deprecated -int av_parse_cpu_flags(const char *s); - -/** - * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. - * - * @return negative on error. - */ -int av_parse_cpu_caps(unsigned *flags, const char *s); - -/** - * @return the number of logical CPU cores present. - */ -int av_cpu_count(void); - -/** - * Get the maximum data alignment that may be required by FFmpeg. - * - * Note that this is affected by the build configuration and the CPU flags mask, - * so e.g. if the CPU supports AVX, but libavutil has been built with - * --disable-avx or the AV_CPU_FLAG_AVX flag has been disabled through - * av_set_cpu_flags_mask(), then this function will behave as if AVX is not - * present. - */ -size_t av_cpu_max_align(void); - -#endif /* AVUTIL_CPU_H */ diff --git a/prebuilts/x86/include/libavutil/crc.h b/prebuilts/x86/include/libavutil/crc.h deleted file mode 100644 index 47e22b4..0000000 --- a/prebuilts/x86/include/libavutil/crc.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_crc32 - * Public header for CRC hash function implementation. - */ - -#ifndef AVUTIL_CRC_H -#define AVUTIL_CRC_H - -#include -#include -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_crc32 CRC - * @ingroup lavu_hash - * CRC (Cyclic Redundancy Check) hash function implementation. - * - * This module supports numerous CRC polynomials, in addition to the most - * widely used CRC-32-IEEE. See @ref AVCRCId for a list of available - * polynomials. - * - * @{ - */ - -typedef uint32_t AVCRC; - -typedef enum { - AV_CRC_8_ATM, - AV_CRC_16_ANSI, - AV_CRC_16_CCITT, - AV_CRC_32_IEEE, - AV_CRC_32_IEEE_LE, /*< reversed bitorder version of AV_CRC_32_IEEE */ - AV_CRC_16_ANSI_LE, /*< reversed bitorder version of AV_CRC_16_ANSI */ - AV_CRC_24_IEEE, - AV_CRC_8_EBU, - AV_CRC_MAX, /*< Not part of public API! Do not use outside libavutil. */ -}AVCRCId; - -/** - * Initialize a CRC table. - * @param ctx must be an array of size sizeof(AVCRC)*257 or sizeof(AVCRC)*1024 - * @param le If 1, the lowest bit represents the coefficient for the highest - * exponent of the corresponding polynomial (both for poly and - * actual CRC). - * If 0, you must swap the CRC parameter and the result of av_crc - * if you need the standard representation (can be simplified in - * most cases to e.g. bswap16): - * av_bswap32(crc << (32-bits)) - * @param bits number of bits for the CRC - * @param poly generator polynomial without the x**bits coefficient, in the - * representation as specified by le - * @param ctx_size size of ctx in bytes - * @return <0 on failure - */ -int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size); - -/** - * Get an initialized standard CRC table. - * @param crc_id ID of a standard CRC - * @return a pointer to the CRC table or NULL on failure - */ -const AVCRC *av_crc_get_table(AVCRCId crc_id); - -/** - * Calculate the CRC of a block. - * @param crc CRC of previous blocks if any or initial value for CRC - * @return CRC updated with the data from the given block - * - * @see av_crc_init() "le" parameter - */ -uint32_t av_crc(const AVCRC *ctx, uint32_t crc, - const uint8_t *buffer, size_t length) av_pure; - -/** - * @} - */ - -#endif /* AVUTIL_CRC_H */ diff --git a/prebuilts/x86/include/libavutil/des.h b/prebuilts/x86/include/libavutil/des.h deleted file mode 100644 index 4cf11f5..0000000 --- a/prebuilts/x86/include/libavutil/des.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * DES encryption/decryption - * Copyright (c) 2007 Reimar Doeffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_DES_H -#define AVUTIL_DES_H - -#include - -/** - * @defgroup lavu_des DES - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVDES { - uint64_t round_keys[3][16]; - int triple_des; -} AVDES; - -/** - * Allocate an AVDES context. - */ -AVDES *av_des_alloc(void); - -/** - * @brief Initializes an AVDES context. - * - * @param key_bits must be 64 or 192 - * @param decrypt 0 for encryption/CBC-MAC, 1 for decryption - * @return zero on success, negative value otherwise - */ -int av_des_init(struct AVDES *d, const uint8_t *key, int key_bits, int decrypt); - -/** - * @brief Encrypts / decrypts using the DES algorithm. - * - * @param count number of 8 byte blocks - * @param dst destination array, can be equal to src, must be 8-byte aligned - * @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL - * @param iv initialization vector for CBC mode, if NULL then ECB will be used, - * must be 8-byte aligned - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_des_crypt(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @brief Calculates CBC-MAC using the DES algorithm. - * - * @param count number of 8 byte blocks - * @param dst destination array, can be equal to src, must be 8-byte aligned - * @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL - */ -void av_des_mac(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count); - -/** - * @} - */ - -#endif /* AVUTIL_DES_H */ diff --git a/prebuilts/x86/include/libavutil/dict.h b/prebuilts/x86/include/libavutil/dict.h deleted file mode 100644 index 118f1f0..0000000 --- a/prebuilts/x86/include/libavutil/dict.h +++ /dev/null @@ -1,200 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Public dictionary API. - * @deprecated - * AVDictionary is provided for compatibility with libav. It is both in - * implementation as well as API inefficient. It does not scale and is - * extremely slow with large dictionaries. - * It is recommended that new code uses our tree container from tree.c/h - * where applicable, which uses AVL trees to achieve O(log n) performance. - */ - -#ifndef AVUTIL_DICT_H -#define AVUTIL_DICT_H - -#include - -#include "version.h" - -/** - * @addtogroup lavu_dict AVDictionary - * @ingroup lavu_data - * - * @brief Simple key:value store - * - * @{ - * Dictionaries are used for storing key:value pairs. To create - * an AVDictionary, simply pass an address of a NULL pointer to - * av_dict_set(). NULL can be used as an empty dictionary wherever - * a pointer to an AVDictionary is required. - * Use av_dict_get() to retrieve an entry or iterate over all - * entries and finally av_dict_free() to free the dictionary - * and all its contents. - * - @code - AVDictionary *d = NULL; // "create" an empty dictionary - AVDictionaryEntry *t = NULL; - - av_dict_set(&d, "foo", "bar", 0); // add an entry - - char *k = av_strdup("key"); // if your strings are already allocated, - char *v = av_strdup("value"); // you can avoid copying them like this - av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); - - while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) { - <....> // iterate over all entries in d - } - av_dict_free(&d); - @endcode - */ - -#define AV_DICT_MATCH_CASE 1 /**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */ -#define AV_DICT_IGNORE_SUFFIX 2 /**< Return first entry in a dictionary whose first part corresponds to the search key, - ignoring the suffix of the found key string. Only relevant in av_dict_get(). */ -#define AV_DICT_DONT_STRDUP_KEY 4 /**< Take ownership of a key that's been - allocated with av_malloc() or another memory allocation function. */ -#define AV_DICT_DONT_STRDUP_VAL 8 /**< Take ownership of a value that's been - allocated with av_malloc() or another memory allocation function. */ -#define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries. -#define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no - delimiter is added, the strings are simply concatenated. */ -#define AV_DICT_MULTIKEY 64 /**< Allow to store several equal keys in the dictionary */ - -typedef struct AVDictionaryEntry { - char *key; - char *value; -} AVDictionaryEntry; - -typedef struct AVDictionary AVDictionary; - -/** - * Get a dictionary entry with matching key. - * - * The returned entry key or value must not be changed, or it will - * cause undefined behavior. - * - * To iterate through all the dictionary entries, you can set the matching key - * to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag. - * - * @param prev Set to the previous matching element to find the next. - * If set to NULL the first matching element is returned. - * @param key matching key - * @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved - * @return found entry or NULL in case no matching entry was found in the dictionary - */ -AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, - const AVDictionaryEntry *prev, int flags); - -/** - * Get number of entries in dictionary. - * - * @param m dictionary - * @return number of entries in dictionary - */ -int av_dict_count(const AVDictionary *m); - -/** - * Set the given entry in *pm, overwriting an existing entry. - * - * Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set, - * these arguments will be freed on error. - * - * Warning: Adding a new entry to a dictionary invalidates all existing entries - * previously returned with av_dict_get. - * - * @param pm pointer to a pointer to a dictionary struct. If *pm is NULL - * a dictionary struct is allocated and put in *pm. - * @param key entry key to add to *pm (will either be av_strduped or added as a new key depending on flags) - * @param value entry value to add to *pm (will be av_strduped or added as a new key depending on flags). - * Passing a NULL value will cause an existing entry to be deleted. - * @return >= 0 on success otherwise an error code <0 - */ -int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags); - -/** - * Convenience wrapper for av_dict_set that converts the value to a string - * and stores it. - * - * Note: If AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. - */ -int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags); - -/** - * Parse the key/value pairs list and add the parsed entries to a dictionary. - * - * In case of failure, all the successfully set entries are stored in - * *pm. You may need to manually free the created dictionary. - * - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other - * @param flags flags to use when adding to dictionary. - * AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL - * are ignored since the key/value tokens will always - * be duplicated. - * @return 0 on success, negative AVERROR code on failure - */ -int av_dict_parse_string(AVDictionary **pm, const char *str, - const char *key_val_sep, const char *pairs_sep, - int flags); - -/** - * Copy entries from one AVDictionary struct into another. - * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, - * this function will allocate a struct for you and put it in *dst - * @param src pointer to source AVDictionary struct - * @param flags flags to use when setting entries in *dst - * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag - * @return 0 on success, negative AVERROR code on failure. If dst was allocated - * by this function, callers should free the associated memory. - */ -int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags); - -/** - * Free all the memory allocated for an AVDictionary struct - * and all keys and values. - */ -void av_dict_free(AVDictionary **m); - -/** - * Get dictionary entries as a string. - * - * Create a string containing dictionary's entries. - * Such string may be passed back to av_dict_parse_string(). - * @note String is escaped with backslashes ('\'). - * - * @param[in] m dictionary - * @param[out] buffer Pointer to buffer that will be allocated with string containg entries. - * Buffer must be freed by the caller when is no longer needed. - * @param[in] key_val_sep character used to separate key from value - * @param[in] pairs_sep character used to separate two pairs from each other - * @return >= 0 on success, negative on error - * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. - */ -int av_dict_get_string(const AVDictionary *m, char **buffer, - const char key_val_sep, const char pairs_sep); - -/** - * @} - */ - -#endif /* AVUTIL_DICT_H */ diff --git a/prebuilts/x86/include/libavutil/display.h b/prebuilts/x86/include/libavutil/display.h deleted file mode 100644 index 515adad..0000000 --- a/prebuilts/x86/include/libavutil/display.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2014 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Display matrix - */ - -#ifndef AVUTIL_DISPLAY_H -#define AVUTIL_DISPLAY_H - -#include -#include "common.h" - -/** - * @addtogroup lavu_video - * @{ - * - * @defgroup lavu_video_display Display transformation matrix functions - * @{ - */ - -/** - * @addtogroup lavu_video_display - * The display transformation matrix specifies an affine transformation that - * should be applied to video frames for correct presentation. It is compatible - * with the matrices stored in the ISO/IEC 14496-12 container format. - * - * The data is a 3x3 matrix represented as a 9-element array: - * - * @code{.unparsed} - * | a b u | - * (a, b, u, c, d, v, x, y, w) -> | c d v | - * | x y w | - * @endcode - * - * All numbers are stored in native endianness, as 16.16 fixed-point values, - * except for u, v and w, which are stored as 2.30 fixed-point values. - * - * The transformation maps a point (p, q) in the source (pre-transformation) - * frame to the point (p', q') in the destination (post-transformation) frame as - * follows: - * - * @code{.unparsed} - * | a b u | - * (p, q, 1) . | c d v | = z * (p', q', 1) - * | x y w | - * @endcode - * - * The transformation can also be more explicitly written in components as - * follows: - * - * @code{.unparsed} - * p' = (a * p + c * q + x) / z; - * q' = (b * p + d * q + y) / z; - * z = u * p + v * q + w - * @endcode - */ - -/** - * Extract the rotation component of the transformation matrix. - * - * @param matrix the transformation matrix - * @return the angle (in degrees) by which the transformation rotates the frame - * counterclockwise. The angle will be in range [-180.0, 180.0], - * or NaN if the matrix is singular. - * - * @note floating point numbers are inherently inexact, so callers are - * recommended to round the return value to nearest integer before use. - */ -double av_display_rotation_get(const int32_t matrix[9]); - -/** - * Initialize a transformation matrix describing a pure counterclockwise - * rotation by the specified angle (in degrees). - * - * @param matrix an allocated transformation matrix (will be fully overwritten - * by this function) - * @param angle rotation angle in degrees. - */ -void av_display_rotation_set(int32_t matrix[9], double angle); - -/** - * Flip the input matrix horizontally and/or vertically. - * - * @param matrix an allocated transformation matrix - * @param hflip whether the matrix should be flipped horizontally - * @param vflip whether the matrix should be flipped vertically - */ -void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_DISPLAY_H */ diff --git a/prebuilts/x86/include/libavutil/dovi_meta.h b/prebuilts/x86/include/libavutil/dovi_meta.h deleted file mode 100644 index 299911d..0000000 --- a/prebuilts/x86/include/libavutil/dovi_meta.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2020 Vacing Fang - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * DOVI configuration - */ - - -#ifndef AVUTIL_DOVI_META_H -#define AVUTIL_DOVI_META_H - -#include -#include - -/* - * DOVI configuration - * ref: dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2 - dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2 - * @code - * uint8_t dv_version_major, the major version number that the stream complies with - * uint8_t dv_version_minor, the minor version number that the stream complies with - * uint8_t dv_profile, the Dolby Vision profile - * uint8_t dv_level, the Dolby Vision level - * uint8_t rpu_present_flag - * uint8_t el_present_flag - * uint8_t bl_present_flag - * uint8_t dv_bl_signal_compatibility_id - * @endcode - * - * @note The struct must be allocated with av_dovi_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVDOVIDecoderConfigurationRecord { - uint8_t dv_version_major; - uint8_t dv_version_minor; - uint8_t dv_profile; - uint8_t dv_level; - uint8_t rpu_present_flag; - uint8_t el_present_flag; - uint8_t bl_present_flag; - uint8_t dv_bl_signal_compatibility_id; -} AVDOVIDecoderConfigurationRecord; - -/** - * Allocate a AVDOVIDecoderConfigurationRecord structure and initialize its - * fields to default values. - * - * @return the newly allocated struct or NULL on failure - */ -AVDOVIDecoderConfigurationRecord *av_dovi_alloc(size_t *size); - -#endif /* AVUTIL_DOVI_META_H */ diff --git a/prebuilts/x86/include/libavutil/downmix_info.h b/prebuilts/x86/include/libavutil/downmix_info.h deleted file mode 100644 index 221cf5b..0000000 --- a/prebuilts/x86/include/libavutil/downmix_info.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2014 Tim Walker - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_DOWNMIX_INFO_H -#define AVUTIL_DOWNMIX_INFO_H - -#include "frame.h" - -/** - * @file - * audio downmix medatata - */ - -/** - * @addtogroup lavu_audio - * @{ - */ - -/** - * @defgroup downmix_info Audio downmix metadata - * @{ - */ - -/** - * Possible downmix types. - */ -enum AVDownmixType { - AV_DOWNMIX_TYPE_UNKNOWN, /**< Not indicated. */ - AV_DOWNMIX_TYPE_LORO, /**< Lo/Ro 2-channel downmix (Stereo). */ - AV_DOWNMIX_TYPE_LTRT, /**< Lt/Rt 2-channel downmix, Dolby Surround compatible. */ - AV_DOWNMIX_TYPE_DPLII, /**< Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible. */ - AV_DOWNMIX_TYPE_NB /**< Number of downmix types. Not part of ABI. */ -}; - -/** - * This structure describes optional metadata relevant to a downmix procedure. - * - * All fields are set by the decoder to the value indicated in the audio - * bitstream (if present), or to a "sane" default otherwise. - */ -typedef struct AVDownmixInfo { - /** - * Type of downmix preferred by the mastering engineer. - */ - enum AVDownmixType preferred_downmix_type; - - /** - * Absolute scale factor representing the nominal level of the center - * channel during a regular downmix. - */ - double center_mix_level; - - /** - * Absolute scale factor representing the nominal level of the center - * channel during an Lt/Rt compatible downmix. - */ - double center_mix_level_ltrt; - - /** - * Absolute scale factor representing the nominal level of the surround - * channels during a regular downmix. - */ - double surround_mix_level; - - /** - * Absolute scale factor representing the nominal level of the surround - * channels during an Lt/Rt compatible downmix. - */ - double surround_mix_level_ltrt; - - /** - * Absolute scale factor representing the level at which the LFE data is - * mixed into L/R channels during downmixing. - */ - double lfe_mix_level; -} AVDownmixInfo; - -/** - * Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing. - * - * If the side data is absent, it is created and added to the frame. - * - * @param frame the frame for which the side data is to be obtained or created - * - * @return the AVDownmixInfo structure to be edited by the caller, or NULL if - * the structure cannot be allocated. - */ -AVDownmixInfo *av_downmix_info_update_side_data(AVFrame *frame); - -/** - * @} - */ - -/** - * @} - */ - -#endif /* AVUTIL_DOWNMIX_INFO_H */ diff --git a/prebuilts/x86/include/libavutil/encryption_info.h b/prebuilts/x86/include/libavutil/encryption_info.h deleted file mode 100644 index 8fe7ebf..0000000 --- a/prebuilts/x86/include/libavutil/encryption_info.h +++ /dev/null @@ -1,205 +0,0 @@ -/** - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_ENCRYPTION_INFO_H -#define AVUTIL_ENCRYPTION_INFO_H - -#include -#include - -typedef struct AVSubsampleEncryptionInfo { - /** The number of bytes that are clear. */ - unsigned int bytes_of_clear_data; - - /** - * The number of bytes that are protected. If using pattern encryption, - * the pattern applies to only the protected bytes; if not using pattern - * encryption, all these bytes are encrypted. - */ - unsigned int bytes_of_protected_data; -} AVSubsampleEncryptionInfo; - -/** - * This describes encryption info for a packet. This contains frame-specific - * info for how to decrypt the packet before passing it to the decoder. - * - * The size of this struct is not part of the public ABI. - */ -typedef struct AVEncryptionInfo { - /** The fourcc encryption scheme, in big-endian byte order. */ - uint32_t scheme; - - /** - * Only used for pattern encryption. This is the number of 16-byte blocks - * that are encrypted. - */ - uint32_t crypt_byte_block; - - /** - * Only used for pattern encryption. This is the number of 16-byte blocks - * that are clear. - */ - uint32_t skip_byte_block; - - /** - * The ID of the key used to encrypt the packet. This should always be - * 16 bytes long, but may be changed in the future. - */ - uint8_t *key_id; - uint32_t key_id_size; - - /** - * The initialization vector. This may have been zero-filled to be the - * correct block size. This should always be 16 bytes long, but may be - * changed in the future. - */ - uint8_t *iv; - uint32_t iv_size; - - /** - * An array of subsample encryption info specifying how parts of the sample - * are encrypted. If there are no subsamples, then the whole sample is - * encrypted. - */ - AVSubsampleEncryptionInfo *subsamples; - uint32_t subsample_count; -} AVEncryptionInfo; - -/** - * This describes info used to initialize an encryption key system. - * - * The size of this struct is not part of the public ABI. - */ -typedef struct AVEncryptionInitInfo { - /** - * A unique identifier for the key system this is for, can be NULL if it - * is not known. This should always be 16 bytes, but may change in the - * future. - */ - uint8_t* system_id; - uint32_t system_id_size; - - /** - * An array of key IDs this initialization data is for. All IDs are the - * same length. Can be NULL if there are no known key IDs. - */ - uint8_t** key_ids; - /** The number of key IDs. */ - uint32_t num_key_ids; - /** - * The number of bytes in each key ID. This should always be 16, but may - * change in the future. - */ - uint32_t key_id_size; - - /** - * Key-system specific initialization data. This data is copied directly - * from the file and the format depends on the specific key system. This - * can be NULL if there is no initialization data; in that case, there - * will be at least one key ID. - */ - uint8_t* data; - uint32_t data_size; - - /** - * An optional pointer to the next initialization info in the list. - */ - struct AVEncryptionInitInfo *next; -} AVEncryptionInitInfo; - -/** - * Allocates an AVEncryptionInfo structure and sub-pointers to hold the given - * number of subsamples. This will allocate pointers for the key ID, IV, - * and subsample entries, set the size members, and zero-initialize the rest. - * - * @param subsample_count The number of subsamples. - * @param key_id_size The number of bytes in the key ID, should be 16. - * @param iv_size The number of bytes in the IV, should be 16. - * - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_alloc(uint32_t subsample_count, uint32_t key_id_size, uint32_t iv_size); - -/** - * Allocates an AVEncryptionInfo structure with a copy of the given data. - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_clone(const AVEncryptionInfo *info); - -/** - * Frees the given encryption info object. This MUST NOT be used to free the - * side-data data pointer, that should use normal side-data methods. - */ -void av_encryption_info_free(AVEncryptionInfo *info); - -/** - * Creates a copy of the AVEncryptionInfo that is contained in the given side - * data. The resulting object should be passed to av_encryption_info_free() - * when done. - * - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_get_side_data(const uint8_t *side_data, size_t side_data_size); - -/** - * Allocates and initializes side data that holds a copy of the given encryption - * info. The resulting pointer should be either freed using av_free or given - * to av_packet_add_side_data(). - * - * @return The new side-data pointer, or NULL. - */ -uint8_t *av_encryption_info_add_side_data( - const AVEncryptionInfo *info, size_t *side_data_size); - - -/** - * Allocates an AVEncryptionInitInfo structure and sub-pointers to hold the - * given sizes. This will allocate pointers and set all the fields. - * - * @return The new AVEncryptionInitInfo structure, or NULL on error. - */ -AVEncryptionInitInfo *av_encryption_init_info_alloc( - uint32_t system_id_size, uint32_t num_key_ids, uint32_t key_id_size, uint32_t data_size); - -/** - * Frees the given encryption init info object. This MUST NOT be used to free - * the side-data data pointer, that should use normal side-data methods. - */ -void av_encryption_init_info_free(AVEncryptionInitInfo* info); - -/** - * Creates a copy of the AVEncryptionInitInfo that is contained in the given - * side data. The resulting object should be passed to - * av_encryption_init_info_free() when done. - * - * @return The new AVEncryptionInitInfo structure, or NULL on error. - */ -AVEncryptionInitInfo *av_encryption_init_info_get_side_data( - const uint8_t* side_data, size_t side_data_size); - -/** - * Allocates and initializes side data that holds a copy of the given encryption - * init info. The resulting pointer should be either freed using av_free or - * given to av_packet_add_side_data(). - * - * @return The new side-data pointer, or NULL. - */ -uint8_t *av_encryption_init_info_add_side_data( - const AVEncryptionInitInfo *info, size_t *side_data_size); - -#endif /* AVUTIL_ENCRYPTION_INFO_H */ diff --git a/prebuilts/x86/include/libavutil/error.h b/prebuilts/x86/include/libavutil/error.h deleted file mode 100644 index 71df4da..0000000 --- a/prebuilts/x86/include/libavutil/error.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * error code definitions - */ - -#ifndef AVUTIL_ERROR_H -#define AVUTIL_ERROR_H - -#include -#include - -/** - * @addtogroup lavu_error - * - * @{ - */ - - -/* error handling */ -#if EDOM > 0 -#define AVERROR(e) (-(e)) ///< Returns a negative error code from a POSIX error code, to return from library functions. -#define AVUNERROR(e) (-(e)) ///< Returns a POSIX error code from a library function error return value. -#else -/* Some platforms have E* and errno already negated. */ -#define AVERROR(e) (e) -#define AVUNERROR(e) (e) -#endif - -#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d)) - -#define AVERROR_BSF_NOT_FOUND FFERRTAG(0xF8,'B','S','F') ///< Bitstream filter not found -#define AVERROR_BUG FFERRTAG( 'B','U','G','!') ///< Internal bug, also see AVERROR_BUG2 -#define AVERROR_BUFFER_TOO_SMALL FFERRTAG( 'B','U','F','S') ///< Buffer too small -#define AVERROR_DECODER_NOT_FOUND FFERRTAG(0xF8,'D','E','C') ///< Decoder not found -#define AVERROR_DEMUXER_NOT_FOUND FFERRTAG(0xF8,'D','E','M') ///< Demuxer not found -#define AVERROR_ENCODER_NOT_FOUND FFERRTAG(0xF8,'E','N','C') ///< Encoder not found -#define AVERROR_EOF FFERRTAG( 'E','O','F',' ') ///< End of file -#define AVERROR_EXIT FFERRTAG( 'E','X','I','T') ///< Immediate exit was requested; the called function should not be restarted -#define AVERROR_EXTERNAL FFERRTAG( 'E','X','T',' ') ///< Generic error in an external library -#define AVERROR_FILTER_NOT_FOUND FFERRTAG(0xF8,'F','I','L') ///< Filter not found -#define AVERROR_INVALIDDATA FFERRTAG( 'I','N','D','A') ///< Invalid data found when processing input -#define AVERROR_MUXER_NOT_FOUND FFERRTAG(0xF8,'M','U','X') ///< Muxer not found -#define AVERROR_OPTION_NOT_FOUND FFERRTAG(0xF8,'O','P','T') ///< Option not found -#define AVERROR_PATCHWELCOME FFERRTAG( 'P','A','W','E') ///< Not yet implemented in FFmpeg, patches welcome -#define AVERROR_PROTOCOL_NOT_FOUND FFERRTAG(0xF8,'P','R','O') ///< Protocol not found - -#define AVERROR_STREAM_NOT_FOUND FFERRTAG(0xF8,'S','T','R') ///< Stream not found -/** - * This is semantically identical to AVERROR_BUG - * it has been introduced in Libav after our AVERROR_BUG and with a modified value. - */ -#define AVERROR_BUG2 FFERRTAG( 'B','U','G',' ') -#define AVERROR_UNKNOWN FFERRTAG( 'U','N','K','N') ///< Unknown error, typically from an external library -#define AVERROR_EXPERIMENTAL (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it. -#define AVERROR_INPUT_CHANGED (-0x636e6701) ///< Input changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_OUTPUT_CHANGED) -#define AVERROR_OUTPUT_CHANGED (-0x636e6702) ///< Output changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_INPUT_CHANGED) -/* HTTP & RTSP errors */ -#define AVERROR_HTTP_BAD_REQUEST FFERRTAG(0xF8,'4','0','0') -#define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8,'4','0','1') -#define AVERROR_HTTP_FORBIDDEN FFERRTAG(0xF8,'4','0','3') -#define AVERROR_HTTP_NOT_FOUND FFERRTAG(0xF8,'4','0','4') -#define AVERROR_HTTP_OTHER_4XX FFERRTAG(0xF8,'4','X','X') -#define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8,'5','X','X') - -#define AV_ERROR_MAX_STRING_SIZE 64 - -/** - * Put a description of the AVERROR code errnum in errbuf. - * In case of failure the global variable errno is set to indicate the - * error. Even in case of failure av_strerror() will print a generic - * error message indicating the errnum provided to errbuf. - * - * @param errnum error code to describe - * @param errbuf buffer to which description is written - * @param errbuf_size the size in bytes of errbuf - * @return 0 on success, a negative value if a description for errnum - * cannot be found - */ -int av_strerror(int errnum, char *errbuf, size_t errbuf_size); - -/** - * Fill the provided buffer with a string containing an error string - * corresponding to the AVERROR code errnum. - * - * @param errbuf a buffer - * @param errbuf_size size in bytes of errbuf - * @param errnum error code to describe - * @return the buffer in input, filled with the error description - * @see av_strerror() - */ -static inline char *av_make_error_string(char *errbuf, size_t errbuf_size, int errnum) -{ - av_strerror(errnum, errbuf, errbuf_size); - return errbuf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_err2str(errnum) \ - av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum) - -/** - * @} - */ - -#endif /* AVUTIL_ERROR_H */ diff --git a/prebuilts/x86/include/libavutil/eval.h b/prebuilts/x86/include/libavutil/eval.h deleted file mode 100644 index 068c62c..0000000 --- a/prebuilts/x86/include/libavutil/eval.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2002 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * simple arithmetic expression evaluator - */ - -#ifndef AVUTIL_EVAL_H -#define AVUTIL_EVAL_H - -#include "avutil.h" - -typedef struct AVExpr AVExpr; - -/** - * Parse and evaluate an expression. - * Note, this is significantly slower than av_expr_eval(). - * - * @param res a pointer to a double where is put the result value of - * the expression, or NAN in case of error - * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" - * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} - * @param const_values a zero terminated array of values for the identifiers from const_names - * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers - * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 - * @param log_ctx parent logging context - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_expr_parse_and_eval(double *res, const char *s, - const char * const *const_names, const double *const_values, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - void *opaque, int log_offset, void *log_ctx); - -/** - * Parse an expression. - * - * @param expr a pointer where is put an AVExpr containing the parsed - * value in case of successful parsing, or NULL otherwise. - * The pointed to AVExpr must be freed with av_expr_free() by the user - * when it is not needed anymore. - * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" - * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} - * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers - * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments - * @param log_ctx parent logging context - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_expr_parse(AVExpr **expr, const char *s, - const char * const *const_names, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - int log_offset, void *log_ctx); - -/** - * Evaluate a previously parsed expression. - * - * @param const_values a zero terminated array of values for the identifiers from av_expr_parse() const_names - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 - * @return the value of the expression - */ -double av_expr_eval(AVExpr *e, const double *const_values, void *opaque); - -/** - * Track the presence of variables and their number of occurrences in a parsed expression - * - * @param counter a zero-initialized array where the count of each variable will be stored - * @param size size of array - * @return 0 on success, a negative value indicates that no expression or array was passed - * or size was zero - */ -int av_expr_count_vars(AVExpr *e, unsigned *counter, int size); - -/** - * Track the presence of user provided functions and their number of occurrences - * in a parsed expression. - * - * @param counter a zero-initialized array where the count of each function will be stored - * if you passed 5 functions with 2 arguments to av_expr_parse() - * then for arg=2 this will use upto 5 entries. - * @param size size of array - * @param arg number of arguments the counted functions have - * @return 0 on success, a negative value indicates that no expression or array was passed - * or size was zero - */ -int av_expr_count_func(AVExpr *e, unsigned *counter, int size, int arg); - -/** - * Free a parsed expression previously created with av_expr_parse(). - */ -void av_expr_free(AVExpr *e); - -/** - * Parse the string in numstr and return its value as a double. If - * the string is empty, contains only whitespaces, or does not contain - * an initial substring that has the expected syntax for a - * floating-point number, no conversion is performed. In this case, - * returns a value of zero and the value returned in tail is the value - * of numstr. - * - * @param numstr a string representing a number, may contain one of - * the International System number postfixes, for example 'K', 'M', - * 'G'. If 'i' is appended after the postfix, powers of 2 are used - * instead of powers of 10. The 'B' postfix multiplies the value by - * 8, and can be appended after another postfix or used alone. This - * allows using for example 'KB', 'MiB', 'G' and 'B' as postfix. - * @param tail if non-NULL puts here the pointer to the char next - * after the last parsed character - */ -double av_strtod(const char *numstr, char **tail); - -#endif /* AVUTIL_EVAL_H */ diff --git a/prebuilts/x86/include/libavutil/ffversion.h b/prebuilts/x86/include/libavutil/ffversion.h deleted file mode 100644 index 7c7cb88..0000000 --- a/prebuilts/x86/include/libavutil/ffversion.h +++ /dev/null @@ -1,5 +0,0 @@ -/* Automatically generated by version.sh, do not manually edit! */ -#ifndef AVUTIL_FFVERSION_H -#define AVUTIL_FFVERSION_H -#define FFMPEG_VERSION "n4.4.2" -#endif /* AVUTIL_FFVERSION_H */ diff --git a/prebuilts/x86/include/libavutil/fifo.h b/prebuilts/x86/include/libavutil/fifo.h deleted file mode 100644 index dc7bc6f..0000000 --- a/prebuilts/x86/include/libavutil/fifo.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * a very simple circular buffer FIFO implementation - */ - -#ifndef AVUTIL_FIFO_H -#define AVUTIL_FIFO_H - -#include -#include "avutil.h" -#include "attributes.h" - -typedef struct AVFifoBuffer { - uint8_t *buffer; - uint8_t *rptr, *wptr, *end; - uint32_t rndx, wndx; -} AVFifoBuffer; - -/** - * Initialize an AVFifoBuffer. - * @param size of FIFO - * @return AVFifoBuffer or NULL in case of memory allocation failure - */ -AVFifoBuffer *av_fifo_alloc(unsigned int size); - -/** - * Initialize an AVFifoBuffer. - * @param nmemb number of elements - * @param size size of the single element - * @return AVFifoBuffer or NULL in case of memory allocation failure - */ -AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size); - -/** - * Free an AVFifoBuffer. - * @param f AVFifoBuffer to free - */ -void av_fifo_free(AVFifoBuffer *f); - -/** - * Free an AVFifoBuffer and reset pointer to NULL. - * @param f AVFifoBuffer to free - */ -void av_fifo_freep(AVFifoBuffer **f); - -/** - * Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied. - * @param f AVFifoBuffer to reset - */ -void av_fifo_reset(AVFifoBuffer *f); - -/** - * Return the amount of data in bytes in the AVFifoBuffer, that is the - * amount of data you can read from it. - * @param f AVFifoBuffer to read from - * @return size - */ -int av_fifo_size(const AVFifoBuffer *f); - -/** - * Return the amount of space in bytes in the AVFifoBuffer, that is the - * amount of data you can write into it. - * @param f AVFifoBuffer to write into - * @return size - */ -int av_fifo_space(const AVFifoBuffer *f); - -/** - * Feed data at specific position from an AVFifoBuffer to a user-supplied callback. - * Similar as av_fifo_gereric_read but without discarding data. - * @param f AVFifoBuffer to read from - * @param offset offset from current read position - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination - */ -int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_size, void (*func)(void*, void*, int)); - -/** - * Feed data from an AVFifoBuffer to a user-supplied callback. - * Similar as av_fifo_gereric_read but without discarding data. - * @param f AVFifoBuffer to read from - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination - */ -int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); - -/** - * Feed data from an AVFifoBuffer to a user-supplied callback. - * @param f AVFifoBuffer to read from - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination - */ -int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); - -/** - * Feed data from a user-supplied callback to an AVFifoBuffer. - * @param f AVFifoBuffer to write to - * @param src data source; non-const since it may be used as a - * modifiable context by the function defined in func - * @param size number of bytes to write - * @param func generic write function; the first parameter is src, - * the second is dest_buf, the third is dest_buf_size. - * func must return the number of bytes written to dest_buf, or <= 0 to - * indicate no more data available to write. - * If func is NULL, src is interpreted as a simple byte array for source data. - * @return the number of bytes written to the FIFO - */ -int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int)); - -/** - * Resize an AVFifoBuffer. - * In case of reallocation failure, the old FIFO is kept unchanged. - * - * @param f AVFifoBuffer to resize - * @param size new AVFifoBuffer size in bytes - * @return <0 for failure, >=0 otherwise - */ -int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); - -/** - * Enlarge an AVFifoBuffer. - * In case of reallocation failure, the old FIFO is kept unchanged. - * The new fifo size may be larger than the requested size. - * - * @param f AVFifoBuffer to resize - * @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size() - * @return <0 for failure, >=0 otherwise - */ -int av_fifo_grow(AVFifoBuffer *f, unsigned int additional_space); - -/** - * Read and discard the specified amount of data from an AVFifoBuffer. - * @param f AVFifoBuffer to read from - * @param size amount of data to read in bytes - */ -void av_fifo_drain(AVFifoBuffer *f, int size); - -/** - * Return a pointer to the data stored in a FIFO buffer at a certain offset. - * The FIFO buffer is not modified. - * - * @param f AVFifoBuffer to peek at, f must be non-NULL - * @param offs an offset in bytes, its absolute value must be less - * than the used buffer size or the returned pointer will - * point outside to the buffer data. - * The used buffer size can be checked with av_fifo_size(). - */ -static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs) -{ - uint8_t *ptr = f->rptr + offs; - if (ptr >= f->end) - ptr = f->buffer + (ptr - f->end); - else if (ptr < f->buffer) - ptr = f->end - (f->buffer - ptr); - return ptr; -} - -#endif /* AVUTIL_FIFO_H */ diff --git a/prebuilts/x86/include/libavutil/file.h b/prebuilts/x86/include/libavutil/file.h deleted file mode 100644 index 3ef4a60..0000000 --- a/prebuilts/x86/include/libavutil/file.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_FILE_H -#define AVUTIL_FILE_H - -#include - -#include "avutil.h" - -/** - * @file - * Misc file utilities. - */ - -/** - * Read the file with name filename, and put its content in a newly - * allocated buffer or map it with mmap() when available. - * In case of success set *bufptr to the read or mmapped buffer, and - * *size to the size in bytes of the buffer in *bufptr. - * Unlike mmap this function succeeds with zero sized files, in this - * case *bufptr will be set to NULL and *size will be set to 0. - * The returned buffer must be released with av_file_unmap(). - * - * @param log_offset loglevel offset used for logging - * @param log_ctx context used for logging - * @return a non negative number in case of success, a negative value - * corresponding to an AVERROR error code in case of failure - */ -av_warn_unused_result -int av_file_map(const char *filename, uint8_t **bufptr, size_t *size, - int log_offset, void *log_ctx); - -/** - * Unmap or free the buffer bufptr created by av_file_map(). - * - * @param size size in bytes of bufptr, must be the same as returned - * by av_file_map() - */ -void av_file_unmap(uint8_t *bufptr, size_t size); - -/** - * Wrapper to work around the lack of mkstemp() on mingw. - * Also, tries to create file in /tmp first, if possible. - * *prefix can be a character constant; *filename will be allocated internally. - * @return file descriptor of opened file (or negative value corresponding to an - * AVERROR code on error) - * and opened file name in **filename. - * @note On very old libcs it is necessary to set a secure umask before - * calling this, av_tempfile() can't call umask itself as it is used in - * libraries and could interfere with the calling application. - * @deprecated as fd numbers cannot be passed saftely between libs on some platforms - */ -int av_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx); - -#endif /* AVUTIL_FILE_H */ diff --git a/prebuilts/x86/include/libavutil/film_grain_params.h b/prebuilts/x86/include/libavutil/film_grain_params.h deleted file mode 100644 index 7629e3a..0000000 --- a/prebuilts/x86/include/libavutil/film_grain_params.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_FILM_GRAIN_PARAMS_H -#define AVUTIL_FILM_GRAIN_PARAMS_H - -#include "frame.h" - -enum AVFilmGrainParamsType { - AV_FILM_GRAIN_PARAMS_NONE = 0, - - /** - * The union is valid when interpreted as AVFilmGrainAOMParams (codec.aom) - */ - AV_FILM_GRAIN_PARAMS_AV1, -}; - -/** - * This structure describes how to handle film grain synthesis for AOM codecs. - * - * @note The struct must be allocated as part of AVFilmGrainParams using - * av_film_grain_params_alloc(). Its size is not a part of the public ABI. - */ -typedef struct AVFilmGrainAOMParams { - /** - * Number of points, and the scale and value for each point of the - * piecewise linear scaling function for the uma plane. - */ - int num_y_points; - uint8_t y_points[14][2 /* value, scaling */]; - - /** - * Signals whether to derive the chroma scaling function from the luma. - * Not equivalent to copying the luma values and scales. - */ - int chroma_scaling_from_luma; - - /** - * If chroma_scaling_from_luma is set to 0, signals the chroma scaling - * function parameters. - */ - int num_uv_points[2 /* cb, cr */]; - uint8_t uv_points[2 /* cb, cr */][10][2 /* value, scaling */]; - - /** - * Specifies the shift applied to the chroma components. For AV1, its within - * [8; 11] and determines the range and quantization of the film grain. - */ - int scaling_shift; - - /** - * Specifies the auto-regression lag. - */ - int ar_coeff_lag; - - /** - * Luma auto-regression coefficients. The number of coefficients is given by - * 2 * ar_coeff_lag * (ar_coeff_lag + 1). - */ - int8_t ar_coeffs_y[24]; - - /** - * Chroma auto-regression coefficients. The number of coefficients is given by - * 2 * ar_coeff_lag * (ar_coeff_lag + 1) + !!num_y_points. - */ - int8_t ar_coeffs_uv[2 /* cb, cr */][25]; - - /** - * Specifies the range of the auto-regressive coefficients. Values of 6, - * 7, 8 and so on represent a range of [-2, 2), [-1, 1), [-0.5, 0.5) and - * so on. For AV1 must be between 6 and 9. - */ - int ar_coeff_shift; - - /** - * Signals the down shift applied to the generated gaussian numbers during - * synthesis. - */ - int grain_scale_shift; - - /** - * Specifies the luma/chroma multipliers for the index to the component - * scaling function. - */ - int uv_mult[2 /* cb, cr */]; - int uv_mult_luma[2 /* cb, cr */]; - - /** - * Offset used for component scaling function. For AV1 its a 9-bit value - * with a range [-256, 255] - */ - int uv_offset[2 /* cb, cr */]; - - /** - * Signals whether to overlap film grain blocks. - */ - int overlap_flag; - - /** - * Signals to clip to limited color levels after film grain application. - */ - int limit_output_range; -} AVFilmGrainAOMParams; - -/** - * This structure describes how to handle film grain synthesis in video - * for specific codecs. Must be present on every frame where film grain is - * meant to be synthesised for correct presentation. - * - * @note The struct must be allocated with av_film_grain_params_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVFilmGrainParams { - /** - * Specifies the codec for which this structure is valid. - */ - enum AVFilmGrainParamsType type; - - /** - * Seed to use for the synthesis process, if the codec allows for it. - */ - uint64_t seed; - - /** - * Additional fields may be added both here and in any structure included. - * If a codec's film grain structure differs slightly over another - * codec's, fields within may change meaning depending on the type. - */ - union { - AVFilmGrainAOMParams aom; - } codec; -} AVFilmGrainParams; - -/** - * Allocate an AVFilmGrainParams structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * If size is not NULL it will be set to the number of bytes allocated. - * - * @return An AVFilmGrainParams filled with default values or NULL - * on failure. - */ -AVFilmGrainParams *av_film_grain_params_alloc(size_t *size); - -/** - * Allocate a complete AVFilmGrainParams and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVFilmGrainParams structure to be filled by caller. - */ -AVFilmGrainParams *av_film_grain_params_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_FILM_GRAIN_PARAMS_H */ diff --git a/prebuilts/x86/include/libavutil/frame.h b/prebuilts/x86/include/libavutil/frame.h deleted file mode 100644 index 7d1f8e2..0000000 --- a/prebuilts/x86/include/libavutil/frame.h +++ /dev/null @@ -1,997 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_frame - * reference-counted frame API - */ - -#ifndef AVUTIL_FRAME_H -#define AVUTIL_FRAME_H - -#include -#include - -#include "avutil.h" -#include "buffer.h" -#include "dict.h" -#include "rational.h" -#include "samplefmt.h" -#include "pixfmt.h" -#include "version.h" - - -/** - * @defgroup lavu_frame AVFrame - * @ingroup lavu_data - * - * @{ - * AVFrame is an abstraction for reference-counted raw multimedia data. - */ - -enum AVFrameSideDataType { - /** - * The data is the AVPanScan struct defined in libavcodec. - */ - AV_FRAME_DATA_PANSCAN, - /** - * ATSC A53 Part 4 Closed Captions. - * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data. - * The number of bytes of CC data is AVFrameSideData.size. - */ - AV_FRAME_DATA_A53_CC, - /** - * Stereoscopic 3d metadata. - * The data is the AVStereo3D struct defined in libavutil/stereo3d.h. - */ - AV_FRAME_DATA_STEREO3D, - /** - * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h. - */ - AV_FRAME_DATA_MATRIXENCODING, - /** - * Metadata relevant to a downmix procedure. - * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h. - */ - AV_FRAME_DATA_DOWNMIX_INFO, - /** - * ReplayGain information in the form of the AVReplayGain struct. - */ - AV_FRAME_DATA_REPLAYGAIN, - /** - * This side data contains a 3x3 transformation matrix describing an affine - * transformation that needs to be applied to the frame for correct - * presentation. - * - * See libavutil/display.h for a detailed description of the data. - */ - AV_FRAME_DATA_DISPLAYMATRIX, - /** - * Active Format Description data consisting of a single byte as specified - * in ETSI TS 101 154 using AVActiveFormatDescription enum. - */ - AV_FRAME_DATA_AFD, - /** - * Motion vectors exported by some codecs (on demand through the export_mvs - * flag set in the libavcodec AVCodecContext flags2 option). - * The data is the AVMotionVector struct defined in - * libavutil/motion_vector.h. - */ - AV_FRAME_DATA_MOTION_VECTORS, - /** - * Recommmends skipping the specified number of samples. This is exported - * only if the "skip_manual" AVOption is set in libavcodec. - * This has the same format as AV_PKT_DATA_SKIP_SAMPLES. - * @code - * u32le number of samples to skip from start of this packet - * u32le number of samples to skip from end of this packet - * u8 reason for start skip - * u8 reason for end skip (0=padding silence, 1=convergence) - * @endcode - */ - AV_FRAME_DATA_SKIP_SAMPLES, - /** - * This side data must be associated with an audio frame and corresponds to - * enum AVAudioServiceType defined in avcodec.h. - */ - AV_FRAME_DATA_AUDIO_SERVICE_TYPE, - /** - * Mastering display metadata associated with a video frame. The payload is - * an AVMasteringDisplayMetadata type and contains information about the - * mastering display color volume. - */ - AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, - /** - * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. - * This is set on the first frame of a GOP that has a temporal reference of 0. - */ - AV_FRAME_DATA_GOP_TIMECODE, - - /** - * The data represents the AVSphericalMapping structure defined in - * libavutil/spherical.h. - */ - AV_FRAME_DATA_SPHERICAL, - - /** - * Content light level (based on CTA-861.3). This payload contains data in - * the form of the AVContentLightMetadata struct. - */ - AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, - - /** - * The data contains an ICC profile as an opaque octet buffer following the - * format described by ISO 15076-1 with an optional name defined in the - * metadata key entry "name". - */ - AV_FRAME_DATA_ICC_PROFILE, - -#if FF_API_FRAME_QP - /** - * Implementation-specific description of the format of AV_FRAME_QP_TABLE_DATA. - * The contents of this side data are undocumented and internal; use - * av_frame_set_qp_table() and av_frame_get_qp_table() to access this in a - * meaningful way instead. - */ - AV_FRAME_DATA_QP_TABLE_PROPERTIES, - - /** - * Raw QP table data. Its format is described by - * AV_FRAME_DATA_QP_TABLE_PROPERTIES. Use av_frame_set_qp_table() and - * av_frame_get_qp_table() to access this instead. - */ - AV_FRAME_DATA_QP_TABLE_DATA, -#endif - - /** - * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t - * where the first uint32_t describes how many (1-3) of the other timecodes are used. - * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() - * function in libavutil/timecode.h. - */ - AV_FRAME_DATA_S12M_TIMECODE, - - /** - * HDR dynamic metadata associated with a video frame. The payload is - * an AVDynamicHDRPlus type and contains information for color - * volume transform - application 4 of SMPTE 2094-40:2016 standard. - */ - AV_FRAME_DATA_DYNAMIC_HDR_PLUS, - - /** - * Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of - * array element is implied by AVFrameSideData.size / AVRegionOfInterest.self_size. - */ - AV_FRAME_DATA_REGIONS_OF_INTEREST, - - /** - * Encoding parameters for a video frame, as described by AVVideoEncParams. - */ - AV_FRAME_DATA_VIDEO_ENC_PARAMS, - - /** - * User data unregistered metadata associated with a video frame. - * This is the H.26[45] UDU SEI message, and shouldn't be used for any other purpose - * The data is stored as uint8_t in AVFrameSideData.data which is 16 bytes of - * uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of user_data_payload_byte. - */ - AV_FRAME_DATA_SEI_UNREGISTERED, - - /** - * Film grain parameters for a frame, described by AVFilmGrainParams. - * Must be present for every frame which should have film grain applied. - */ - AV_FRAME_DATA_FILM_GRAIN_PARAMS, -}; - -enum AVActiveFormatDescription { - AV_AFD_SAME = 8, - AV_AFD_4_3 = 9, - AV_AFD_16_9 = 10, - AV_AFD_14_9 = 11, - AV_AFD_4_3_SP_14_9 = 13, - AV_AFD_16_9_SP_14_9 = 14, - AV_AFD_SP_4_3 = 15, -}; - - -/** - * Structure to hold side data for an AVFrame. - * - * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added - * to the end with a minor bump. - */ -typedef struct AVFrameSideData { - enum AVFrameSideDataType type; - uint8_t *data; -#if FF_API_BUFFER_SIZE_T - int size; -#else - size_t size; -#endif - AVDictionary *metadata; - AVBufferRef *buf; -} AVFrameSideData; - -/** - * Structure describing a single Region Of Interest. - * - * When multiple regions are defined in a single side-data block, they - * should be ordered from most to least important - some encoders are only - * capable of supporting a limited number of distinct regions, so will have - * to truncate the list. - * - * When overlapping regions are defined, the first region containing a given - * area of the frame applies. - */ -typedef struct AVRegionOfInterest { - /** - * Must be set to the size of this data structure (that is, - * sizeof(AVRegionOfInterest)). - */ - uint32_t self_size; - /** - * Distance in pixels from the top edge of the frame to the top and - * bottom edges and from the left edge of the frame to the left and - * right edges of the rectangle defining this region of interest. - * - * The constraints on a region are encoder dependent, so the region - * actually affected may be slightly larger for alignment or other - * reasons. - */ - int top; - int bottom; - int left; - int right; - /** - * Quantisation offset. - * - * Must be in the range -1 to +1. A value of zero indicates no quality - * change. A negative value asks for better quality (less quantisation), - * while a positive value asks for worse quality (greater quantisation). - * - * The range is calibrated so that the extreme values indicate the - * largest possible offset - if the rest of the frame is encoded with the - * worst possible quality, an offset of -1 indicates that this region - * should be encoded with the best possible quality anyway. Intermediate - * values are then interpolated in some codec-dependent way. - * - * For example, in 10-bit H.264 the quantisation parameter varies between - * -12 and 51. A typical qoffset value of -1/10 therefore indicates that - * this region should be encoded with a QP around one-tenth of the full - * range better than the rest of the frame. So, if most of the frame - * were to be encoded with a QP of around 30, this region would get a QP - * of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3). - * An extreme value of -1 would indicate that this region should be - * encoded with the best possible quality regardless of the treatment of - * the rest of the frame - that is, should be encoded at a QP of -12. - */ - AVRational qoffset; -} AVRegionOfInterest; - -/** - * This structure describes decoded (raw) audio or video data. - * - * AVFrame must be allocated using av_frame_alloc(). Note that this only - * allocates the AVFrame itself, the buffers for the data must be managed - * through other means (see below). - * AVFrame must be freed with av_frame_free(). - * - * AVFrame is typically allocated once and then reused multiple times to hold - * different data (e.g. a single AVFrame to hold frames received from a - * decoder). In such a case, av_frame_unref() will free any references held by - * the frame and reset it to its original clean state before it - * is reused again. - * - * The data described by an AVFrame is usually reference counted through the - * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / - * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at - * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, - * every single data plane must be contained in one of the buffers in - * AVFrame.buf or AVFrame.extended_buf. - * There may be a single buffer for all the data, or one separate buffer for - * each plane, or anything in between. - * - * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added - * to the end with a minor bump. - * - * Fields can be accessed through AVOptions, the name string used, matches the - * C structure field name for fields accessible through AVOptions. The AVClass - * for AVFrame can be obtained from avcodec_get_frame_class() - */ -typedef struct AVFrame { -#define AV_NUM_DATA_POINTERS 8 - /** - * pointer to the picture/channel planes. - * This might be different from the first allocated byte - * - * Some decoders access areas outside 0,0 - width,height, please - * see avcodec_align_dimensions2(). Some filters and swscale can read - * up to 16 bytes beyond the planes, if these filters are to be used, - * then 16 extra bytes must be allocated. - * - * NOTE: Except for hwaccel formats, pointers not needed by the format - * MUST be set to NULL. - */ - uint8_t *data[AV_NUM_DATA_POINTERS]; - - /** - * For video, size in bytes of each picture line. - * For audio, size in bytes of each plane. - * - * For audio, only linesize[0] may be set. For planar audio, each channel - * plane must be the same size. - * - * For video the linesizes should be multiples of the CPUs alignment - * preference, this is 16 or 32 for modern desktop CPUs. - * Some code requires such alignment other code can be slower without - * correct alignment, for yet other it makes no difference. - * - * @note The linesize may be larger than the size of usable data -- there - * may be extra padding present for performance reasons. - */ - int linesize[AV_NUM_DATA_POINTERS]; - - /** - * pointers to the data planes/channels. - * - * For video, this should simply point to data[]. - * - * For planar audio, each channel has a separate data pointer, and - * linesize[0] contains the size of each channel buffer. - * For packed audio, there is just one data pointer, and linesize[0] - * contains the total size of the buffer for all channels. - * - * Note: Both data and extended_data should always be set in a valid frame, - * but for planar audio with more channels that can fit in data, - * extended_data must be used in order to access all channels. - */ - uint8_t **extended_data; - - /** - * @name Video dimensions - * Video frames only. The coded dimensions (in pixels) of the video frame, - * i.e. the size of the rectangle that contains some well-defined values. - * - * @note The part of the frame intended for display/presentation is further - * restricted by the @ref cropping "Cropping rectangle". - * @{ - */ - int width, height; - /** - * @} - */ - - /** - * number of audio samples (per channel) described by this frame - */ - int nb_samples; - - /** - * format of the frame, -1 if unknown or unset - * Values correspond to enum AVPixelFormat for video frames, - * enum AVSampleFormat for audio) - */ - int format; - - /** - * 1 -> keyframe, 0-> not - */ - int key_frame; - - /** - * Picture type of the frame. - */ - enum AVPictureType pict_type; - - /** - * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified. - */ - AVRational sample_aspect_ratio; - - /** - * Presentation timestamp in time_base units (time when frame should be shown to user). - */ - int64_t pts; - -#if FF_API_PKT_PTS - /** - * PTS copied from the AVPacket that was decoded to produce this frame. - * @deprecated use the pts field instead - */ - attribute_deprecated - int64_t pkt_pts; -#endif - - /** - * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used) - * This is also the Presentation time of this AVFrame calculated from - * only AVPacket.dts values without pts values. - */ - int64_t pkt_dts; - - /** - * picture number in bitstream order - */ - int coded_picture_number; - /** - * picture number in display order - */ - int display_picture_number; - - /** - * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) - */ - int quality; - - /** - * for some private data of the user - */ - void *opaque; - -#if FF_API_ERROR_FRAME - /** - * @deprecated unused - */ - attribute_deprecated - uint64_t error[AV_NUM_DATA_POINTERS]; -#endif - - /** - * When decoding, this signals how much the picture must be delayed. - * extra_delay = repeat_pict / (2*fps) - */ - int repeat_pict; - - /** - * The content of the picture is interlaced. - */ - int interlaced_frame; - - /** - * If the content is interlaced, is top field displayed first. - */ - int top_field_first; - - /** - * Tell user application that palette has changed from previous frame. - */ - int palette_has_changed; - - /** - * reordered opaque 64 bits (generally an integer or a double precision float - * PTS but can be anything). - * The user sets AVCodecContext.reordered_opaque to represent the input at - * that time, - * the decoder reorders values as needed and sets AVFrame.reordered_opaque - * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque - */ - int64_t reordered_opaque; - - /** - * Sample rate of the audio data. - */ - int sample_rate; - - /** - * Channel layout of the audio data. - */ - uint64_t channel_layout; - - /** - * AVBuffer references backing the data for this frame. If all elements of - * this array are NULL, then this frame is not reference counted. This array - * must be filled contiguously -- if buf[i] is non-NULL then buf[j] must - * also be non-NULL for all j < i. - * - * There may be at most one AVBuffer per data plane, so for video this array - * always contains all the references. For planar audio with more than - * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in - * this array. Then the extra AVBufferRef pointers are stored in the - * extended_buf array. - */ - AVBufferRef *buf[AV_NUM_DATA_POINTERS]; - - /** - * For planar audio which requires more than AV_NUM_DATA_POINTERS - * AVBufferRef pointers, this array will hold all the references which - * cannot fit into AVFrame.buf. - * - * Note that this is different from AVFrame.extended_data, which always - * contains all the pointers. This array only contains the extra pointers, - * which cannot fit into AVFrame.buf. - * - * This array is always allocated using av_malloc() by whoever constructs - * the frame. It is freed in av_frame_unref(). - */ - AVBufferRef **extended_buf; - /** - * Number of elements in extended_buf. - */ - int nb_extended_buf; - - AVFrameSideData **side_data; - int nb_side_data; - -/** - * @defgroup lavu_frame_flags AV_FRAME_FLAGS - * @ingroup lavu_frame - * Flags describing additional frame properties. - * - * @{ - */ - -/** - * The frame data may be corrupted, e.g. due to decoding errors. - */ -#define AV_FRAME_FLAG_CORRUPT (1 << 0) -/** - * A flag to mark the frames which need to be decoded, but shouldn't be output. - */ -#define AV_FRAME_FLAG_DISCARD (1 << 2) -/** - * @} - */ - - /** - * Frame flags, a combination of @ref lavu_frame_flags - */ - int flags; - - /** - * MPEG vs JPEG YUV range. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorRange color_range; - - enum AVColorPrimaries color_primaries; - - enum AVColorTransferCharacteristic color_trc; - - /** - * YUV colorspace type. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorSpace colorspace; - - enum AVChromaLocation chroma_location; - - /** - * frame timestamp estimated using various heuristics, in stream time base - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int64_t best_effort_timestamp; - - /** - * reordered pos from the last AVPacket that has been input into the decoder - * - encoding: unused - * - decoding: Read by user. - */ - int64_t pkt_pos; - - /** - * duration of the corresponding packet, expressed in - * AVStream->time_base units, 0 if unknown. - * - encoding: unused - * - decoding: Read by user. - */ - int64_t pkt_duration; - - /** - * metadata. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - AVDictionary *metadata; - - /** - * decode error flags of the frame, set to a combination of - * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there - * were errors during the decoding. - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int decode_error_flags; -#define FF_DECODE_ERROR_INVALID_BITSTREAM 1 -#define FF_DECODE_ERROR_MISSING_REFERENCE 2 -#define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4 -#define FF_DECODE_ERROR_DECODE_SLICES 8 - - /** - * number of audio channels, only used for audio. - * - encoding: unused - * - decoding: Read by user. - */ - int channels; - - /** - * size of the corresponding packet containing the compressed - * frame. - * It is set to a negative value if unknown. - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int pkt_size; - -#if FF_API_FRAME_QP - /** - * QP table - */ - attribute_deprecated - int8_t *qscale_table; - /** - * QP store stride - */ - attribute_deprecated - int qstride; - - attribute_deprecated - int qscale_type; - - attribute_deprecated - AVBufferRef *qp_table_buf; -#endif - /** - * For hwaccel-format frames, this should be a reference to the - * AVHWFramesContext describing the frame. - */ - AVBufferRef *hw_frames_ctx; - - /** - * AVBufferRef for free use by the API user. FFmpeg will never check the - * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when - * the frame is unreferenced. av_frame_copy_props() calls create a new - * reference with av_buffer_ref() for the target frame's opaque_ref field. - * - * This is unrelated to the opaque field, although it serves a similar - * purpose. - */ - AVBufferRef *opaque_ref; - - /** - * @anchor cropping - * @name Cropping - * Video frames only. The number of pixels to discard from the the - * top/bottom/left/right border of the frame to obtain the sub-rectangle of - * the frame intended for presentation. - * @{ - */ - size_t crop_top; - size_t crop_bottom; - size_t crop_left; - size_t crop_right; - /** - * @} - */ - - /** - * AVBufferRef for internal use by a single libav* library. - * Must not be used to transfer data between libraries. - * Has to be NULL when ownership of the frame leaves the respective library. - * - * Code outside the FFmpeg libs should never check or change the contents of the buffer ref. - * - * FFmpeg calls av_buffer_unref() on it when the frame is unreferenced. - * av_frame_copy_props() calls create a new reference with av_buffer_ref() - * for the target frame's private_ref field. - */ - AVBufferRef *private_ref; -} AVFrame; - -#if FF_API_FRAME_GET_SET -/** - * Accessors for some AVFrame fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame); -attribute_deprecated -void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val); -attribute_deprecated -int64_t av_frame_get_pkt_duration (const AVFrame *frame); -attribute_deprecated -void av_frame_set_pkt_duration (AVFrame *frame, int64_t val); -attribute_deprecated -int64_t av_frame_get_pkt_pos (const AVFrame *frame); -attribute_deprecated -void av_frame_set_pkt_pos (AVFrame *frame, int64_t val); -attribute_deprecated -int64_t av_frame_get_channel_layout (const AVFrame *frame); -attribute_deprecated -void av_frame_set_channel_layout (AVFrame *frame, int64_t val); -attribute_deprecated -int av_frame_get_channels (const AVFrame *frame); -attribute_deprecated -void av_frame_set_channels (AVFrame *frame, int val); -attribute_deprecated -int av_frame_get_sample_rate (const AVFrame *frame); -attribute_deprecated -void av_frame_set_sample_rate (AVFrame *frame, int val); -attribute_deprecated -AVDictionary *av_frame_get_metadata (const AVFrame *frame); -attribute_deprecated -void av_frame_set_metadata (AVFrame *frame, AVDictionary *val); -attribute_deprecated -int av_frame_get_decode_error_flags (const AVFrame *frame); -attribute_deprecated -void av_frame_set_decode_error_flags (AVFrame *frame, int val); -attribute_deprecated -int av_frame_get_pkt_size(const AVFrame *frame); -attribute_deprecated -void av_frame_set_pkt_size(AVFrame *frame, int val); -#if FF_API_FRAME_QP -attribute_deprecated -int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type); -attribute_deprecated -int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type); -#endif -attribute_deprecated -enum AVColorSpace av_frame_get_colorspace(const AVFrame *frame); -attribute_deprecated -void av_frame_set_colorspace(AVFrame *frame, enum AVColorSpace val); -attribute_deprecated -enum AVColorRange av_frame_get_color_range(const AVFrame *frame); -attribute_deprecated -void av_frame_set_color_range(AVFrame *frame, enum AVColorRange val); -#endif - -/** - * Get the name of a colorspace. - * @return a static string identifying the colorspace; can be NULL. - */ -const char *av_get_colorspace_name(enum AVColorSpace val); - -/** - * Allocate an AVFrame and set its fields to default values. The resulting - * struct must be freed using av_frame_free(). - * - * @return An AVFrame filled with default values or NULL on failure. - * - * @note this only allocates the AVFrame itself, not the data buffers. Those - * must be allocated through other means, e.g. with av_frame_get_buffer() or - * manually. - */ -AVFrame *av_frame_alloc(void); - -/** - * Free the frame and any dynamically allocated objects in it, - * e.g. extended_data. If the frame is reference counted, it will be - * unreferenced first. - * - * @param frame frame to be freed. The pointer will be set to NULL. - */ -void av_frame_free(AVFrame **frame); - -/** - * Set up a new reference to the data described by the source frame. - * - * Copy frame properties from src to dst and create a new reference for each - * AVBufferRef from src. - * - * If src is not reference counted, new buffers are allocated and the data is - * copied. - * - * @warning: dst MUST have been either unreferenced with av_frame_unref(dst), - * or newly allocated with av_frame_alloc() before calling this - * function, or undefined behavior will occur. - * - * @return 0 on success, a negative AVERROR on error - */ -int av_frame_ref(AVFrame *dst, const AVFrame *src); - -/** - * Create a new frame that references the same data as src. - * - * This is a shortcut for av_frame_alloc()+av_frame_ref(). - * - * @return newly created AVFrame on success, NULL on error. - */ -AVFrame *av_frame_clone(const AVFrame *src); - -/** - * Unreference all the buffers referenced by frame and reset the frame fields. - */ -void av_frame_unref(AVFrame *frame); - -/** - * Move everything contained in src to dst and reset src. - * - * @warning: dst is not unreferenced, but directly overwritten without reading - * or deallocating its contents. Call av_frame_unref(dst) manually - * before calling this function to ensure that no memory is leaked. - */ -void av_frame_move_ref(AVFrame *dst, AVFrame *src); - -/** - * Allocate new buffer(s) for audio or video data. - * - * The following fields must be set on frame before calling this function: - * - format (pixel format for video, sample format for audio) - * - width and height for video - * - nb_samples and channel_layout for audio - * - * This function will fill AVFrame.data and AVFrame.buf arrays and, if - * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. - * For planar formats, one buffer will be allocated for each plane. - * - * @warning: if frame already has been allocated, calling this function will - * leak memory. In addition, undefined behavior can occur in certain - * cases. - * - * @param frame frame in which to store the new buffers. - * @param align Required buffer size alignment. If equal to 0, alignment will be - * chosen automatically for the current CPU. It is highly - * recommended to pass 0 here unless you know what you are doing. - * - * @return 0 on success, a negative AVERROR on error. - */ -int av_frame_get_buffer(AVFrame *frame, int align); - -/** - * Check if the frame data is writable. - * - * @return A positive value if the frame data is writable (which is true if and - * only if each of the underlying buffers has only one reference, namely the one - * stored in this frame). Return 0 otherwise. - * - * If 1 is returned the answer is valid until av_buffer_ref() is called on any - * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). - * - * @see av_frame_make_writable(), av_buffer_is_writable() - */ -int av_frame_is_writable(AVFrame *frame); - -/** - * Ensure that the frame data is writable, avoiding data copy if possible. - * - * Do nothing if the frame is writable, allocate new buffers and copy the data - * if it is not. - * - * @return 0 on success, a negative AVERROR on error. - * - * @see av_frame_is_writable(), av_buffer_is_writable(), - * av_buffer_make_writable() - */ -int av_frame_make_writable(AVFrame *frame); - -/** - * Copy the frame data from src to dst. - * - * This function does not allocate anything, dst must be already initialized and - * allocated with the same parameters as src. - * - * This function only copies the frame data (i.e. the contents of the data / - * extended data arrays), not any other properties. - * - * @return >= 0 on success, a negative AVERROR on error. - */ -int av_frame_copy(AVFrame *dst, const AVFrame *src); - -/** - * Copy only "metadata" fields from src to dst. - * - * Metadata for the purpose of this function are those fields that do not affect - * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample - * aspect ratio (for video), but not width/height or channel layout. - * Side data is also copied. - */ -int av_frame_copy_props(AVFrame *dst, const AVFrame *src); - -/** - * Get the buffer reference a given data plane is stored in. - * - * @param plane index of the data plane of interest in frame->extended_data. - * - * @return the buffer reference that contains the plane or NULL if the input - * frame is not valid. - */ -AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane); - -/** - * Add a new side data to a frame. - * - * @param frame a frame to which the side data should be added - * @param type type of the added side data - * @param size size of the side data - * - * @return newly added side data on success, NULL on error - */ -AVFrameSideData *av_frame_new_side_data(AVFrame *frame, - enum AVFrameSideDataType type, -#if FF_API_BUFFER_SIZE_T - int size); -#else - size_t size); -#endif - -/** - * Add a new side data to a frame from an existing AVBufferRef - * - * @param frame a frame to which the side data should be added - * @param type the type of the added side data - * @param buf an AVBufferRef to add as side data. The ownership of - * the reference is transferred to the frame. - * - * @return newly added side data on success, NULL on error. On failure - * the frame is unchanged and the AVBufferRef remains owned by - * the caller. - */ -AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame, - enum AVFrameSideDataType type, - AVBufferRef *buf); - -/** - * @return a pointer to the side data of a given type on success, NULL if there - * is no side data with such type in this frame. - */ -AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, - enum AVFrameSideDataType type); - -/** - * Remove and free all side data instances of the given type. - */ -void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type); - - -/** - * Flags for frame cropping. - */ -enum { - /** - * Apply the maximum possible cropping, even if it requires setting the - * AVFrame.data[] entries to unaligned pointers. Passing unaligned data - * to FFmpeg API is generally not allowed, and causes undefined behavior - * (such as crashes). You can pass unaligned data only to FFmpeg APIs that - * are explicitly documented to accept it. Use this flag only if you - * absolutely know what you are doing. - */ - AV_FRAME_CROP_UNALIGNED = 1 << 0, -}; - -/** - * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/ - * crop_bottom fields. If cropping is successful, the function will adjust the - * data pointers and the width/height fields, and set the crop fields to 0. - * - * In all cases, the cropping boundaries will be rounded to the inherent - * alignment of the pixel format. In some cases, such as for opaque hwaccel - * formats, the left/top cropping is ignored. The crop fields are set to 0 even - * if the cropping was rounded or ignored. - * - * @param frame the frame which should be cropped - * @param flags Some combination of AV_FRAME_CROP_* flags, or 0. - * - * @return >= 0 on success, a negative AVERROR on error. If the cropping fields - * were invalid, AVERROR(ERANGE) is returned, and nothing is changed. - */ -int av_frame_apply_cropping(AVFrame *frame, int flags); - -/** - * @return a string identifying the side data type - */ -const char *av_frame_side_data_name(enum AVFrameSideDataType type); - -/** - * @} - */ - -#endif /* AVUTIL_FRAME_H */ diff --git a/prebuilts/x86/include/libavutil/hash.h b/prebuilts/x86/include/libavutil/hash.h deleted file mode 100644 index af4719e..0000000 --- a/prebuilts/x86/include/libavutil/hash.h +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright (C) 2013 Reimar Döffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_hash_generic - * Generic hashing API - */ - -#ifndef AVUTIL_HASH_H -#define AVUTIL_HASH_H - -#include -#include - -#include "version.h" - -/** - * @defgroup lavu_hash Hash Functions - * @ingroup lavu_crypto - * Hash functions useful in multimedia. - * - * Hash functions are widely used in multimedia, from error checking and - * concealment to internal regression testing. libavutil has efficient - * implementations of a variety of hash functions that may be useful for - * FFmpeg and other multimedia applications. - * - * @{ - * - * @defgroup lavu_hash_generic Generic Hashing API - * An abstraction layer for all hash functions supported by libavutil. - * - * If your application needs to support a wide range of different hash - * functions, then the Generic Hashing API is for you. It provides a generic, - * reusable API for @ref lavu_hash "all hash functions" implemented in libavutil. - * If you just need to use one particular hash function, use the @ref lavu_hash - * "individual hash" directly. - * - * @section Sample Code - * - * A basic template for using the Generic Hashing API follows: - * - * @code - * struct AVHashContext *ctx = NULL; - * const char *hash_name = NULL; - * uint8_t *output_buf = NULL; - * - * // Select from a string returned by av_hash_names() - * hash_name = ...; - * - * // Allocate a hash context - * ret = av_hash_alloc(&ctx, hash_name); - * if (ret < 0) - * return ret; - * - * // Initialize the hash context - * av_hash_init(ctx); - * - * // Update the hash context with data - * while (data_left) { - * av_hash_update(ctx, data, size); - * } - * - * // Now we have no more data, so it is time to finalize the hash and get the - * // output. But we need to first allocate an output buffer. Note that you can - * // use any memory allocation function, including malloc(), not just - * // av_malloc(). - * output_buf = av_malloc(av_hash_get_size(ctx)); - * if (!output_buf) - * return AVERROR(ENOMEM); - * - * // Finalize the hash context. - * // You can use any of the av_hash_final*() functions provided, for other - * // output formats. If you do so, be sure to adjust the memory allocation - * // above. See the function documentation below for the exact amount of extra - * // memory needed. - * av_hash_final(ctx, output_buffer); - * - * // Free the context - * av_hash_freep(&ctx); - * @endcode - * - * @section Hash Function-Specific Information - * If the CRC32 hash is selected, the #AV_CRC_32_IEEE polynomial will be - * used. - * - * If the Murmur3 hash is selected, the default seed will be used. See @ref - * lavu_murmur3_seedinfo "Murmur3" for more information. - * - * @{ - */ - -/** - * @example ffhash.c - * This example is a simple command line application that takes one or more - * arguments. It demonstrates a typical use of the hashing API with allocation, - * initialization, updating, and finalizing. - */ - -struct AVHashContext; - -/** - * Allocate a hash context for the algorithm specified by name. - * - * @return >= 0 for success, a negative error code for failure - * - * @note The context is not initialized after a call to this function; you must - * call av_hash_init() to do so. - */ -int av_hash_alloc(struct AVHashContext **ctx, const char *name); - -/** - * Get the names of available hash algorithms. - * - * This function can be used to enumerate the algorithms. - * - * @param[in] i Index of the hash algorithm, starting from 0 - * @return Pointer to a static string or `NULL` if `i` is out of range - */ -const char *av_hash_names(int i); - -/** - * Get the name of the algorithm corresponding to the given hash context. - */ -const char *av_hash_get_name(const struct AVHashContext *ctx); - -/** - * Maximum value that av_hash_get_size() will currently return. - * - * You can use this if you absolutely want or need to use static allocation for - * the output buffer and are fine with not supporting hashes newly added to - * libavutil without recompilation. - * - * @warning - * Adding new hashes with larger sizes, and increasing the macro while doing - * so, will not be considered an ABI change. To prevent your code from - * overflowing a buffer, either dynamically allocate the output buffer with - * av_hash_get_size(), or limit your use of the Hashing API to hashes that are - * already in FFmpeg during the time of compilation. - */ -#define AV_HASH_MAX_SIZE 64 - -/** - * Get the size of the resulting hash value in bytes. - * - * The maximum value this function will currently return is available as macro - * #AV_HASH_MAX_SIZE. - * - * @param[in] ctx Hash context - * @return Size of the hash value in bytes - */ -int av_hash_get_size(const struct AVHashContext *ctx); - -/** - * Initialize or reset a hash context. - * - * @param[in,out] ctx Hash context - */ -void av_hash_init(struct AVHashContext *ctx); - -/** - * Update a hash context with additional data. - * - * @param[in,out] ctx Hash context - * @param[in] src Data to be added to the hash context - * @param[in] len Size of the additional data - */ -#if FF_API_CRYPTO_SIZE_T -void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, int len); -#else -void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, size_t len); -#endif - -/** - * Finalize a hash context and compute the actual hash value. - * - * The minimum size of `dst` buffer is given by av_hash_get_size() or - * #AV_HASH_MAX_SIZE. The use of the latter macro is discouraged. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * - * @see av_hash_final_bin() provides an alternative API - */ -void av_hash_final(struct AVHashContext *ctx, uint8_t *dst); - -/** - * Finalize a hash context and store the actual hash value in a buffer. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * If `size` is smaller than the hash size (given by av_hash_get_size()), the - * hash is truncated; if size is larger, the buffer is padded with 0. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * @param[in] size Number of bytes to write to `dst` - */ -void av_hash_final_bin(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Finalize a hash context and store the hexadecimal representation of the - * actual hash value as a string. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * The string is always 0-terminated. - * - * If `size` is smaller than `2 * hash_size + 1`, where `hash_size` is the - * value returned by av_hash_get_size(), the string will be truncated. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the string will be stored - * @param[in] size Maximum number of bytes to write to `dst` - */ -void av_hash_final_hex(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Finalize a hash context and store the Base64 representation of the - * actual hash value as a string. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * The string is always 0-terminated. - * - * If `size` is smaller than AV_BASE64_SIZE(hash_size), where `hash_size` is - * the value returned by av_hash_get_size(), the string will be truncated. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * @param[in] size Maximum number of bytes to write to `dst` - */ -void av_hash_final_b64(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Free hash context and set hash context pointer to `NULL`. - * - * @param[in,out] ctx Pointer to hash context - */ -void av_hash_freep(struct AVHashContext **ctx); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_HASH_H */ diff --git a/prebuilts/x86/include/libavutil/hdr_dynamic_metadata.h b/prebuilts/x86/include/libavutil/hdr_dynamic_metadata.h deleted file mode 100644 index 2d72de5..0000000 --- a/prebuilts/x86/include/libavutil/hdr_dynamic_metadata.h +++ /dev/null @@ -1,343 +0,0 @@ -/* - * Copyright (c) 2018 Mohammad Izadi - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HDR_DYNAMIC_METADATA_H -#define AVUTIL_HDR_DYNAMIC_METADATA_H - -#include "frame.h" -#include "rational.h" - -/** - * Option for overlapping elliptical pixel selectors in an image. - */ -enum AVHDRPlusOverlapProcessOption { - AV_HDR_PLUS_OVERLAP_PROCESS_WEIGHTED_AVERAGING = 0, - AV_HDR_PLUS_OVERLAP_PROCESS_LAYERING = 1, -}; - -/** - * Represents the percentile at a specific percentage in - * a distribution. - */ -typedef struct AVHDRPlusPercentile { - /** - * The percentage value corresponding to a specific percentile linearized - * RGB value in the processing window in the scene. The value shall be in - * the range of 0 to100, inclusive. - */ - uint8_t percentage; - - /** - * The linearized maxRGB value at a specific percentile in the processing - * window in the scene. The value shall be in the range of 0 to 1, inclusive - * and in multiples of 0.00001. - */ - AVRational percentile; -} AVHDRPlusPercentile; - -/** - * Color transform parameters at a processing window in a dynamic metadata for - * SMPTE 2094-40. - */ -typedef struct AVHDRPlusColorTransformParams { - /** - * The relative x coordinate of the top left pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(width of Picture - 1). The value 1 corresponds - * to the absolute coordinate of width of Picture - 1. The value for - * first processing window shall be 0. - */ - AVRational window_upper_left_corner_x; - - /** - * The relative y coordinate of the top left pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(height of Picture - 1). The value 1 corresponds - * to the absolute coordinate of height of Picture - 1. The value for - * first processing window shall be 0. - */ - AVRational window_upper_left_corner_y; - - /** - * The relative x coordinate of the bottom right pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(width of Picture - 1). The value 1 corresponds - * to the absolute coordinate of width of Picture - 1. The value for - * first processing window shall be 1. - */ - AVRational window_lower_right_corner_x; - - /** - * The relative y coordinate of the bottom right pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(height of Picture - 1). The value 1 corresponds - * to the absolute coordinate of height of Picture - 1. The value for - * first processing window shall be 1. - */ - AVRational window_lower_right_corner_y; - - /** - * The x coordinate of the center position of the concentric internal and - * external ellipses of the elliptical pixel selector in the processing - * window. The value shall be in the range of 0 to (width of Picture - 1), - * inclusive and in multiples of 1 pixel. - */ - uint16_t center_of_ellipse_x; - - /** - * The y coordinate of the center position of the concentric internal and - * external ellipses of the elliptical pixel selector in the processing - * window. The value shall be in the range of 0 to (height of Picture - 1), - * inclusive and in multiples of 1 pixel. - */ - uint16_t center_of_ellipse_y; - - /** - * The clockwise rotation angle in degree of arc with respect to the - * positive direction of the x-axis of the concentric internal and external - * ellipses of the elliptical pixel selector in the processing window. The - * value shall be in the range of 0 to 180, inclusive and in multiples of 1. - */ - uint8_t rotation_angle; - - /** - * The semi-major axis value of the internal ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value shall be - * in the range of 1 to 65535, inclusive and in multiples of 1 pixel. - */ - uint16_t semimajor_axis_internal_ellipse; - - /** - * The semi-major axis value of the external ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value - * shall not be less than semimajor_axis_internal_ellipse of the current - * processing window. The value shall be in the range of 1 to 65535, - * inclusive and in multiples of 1 pixel. - */ - uint16_t semimajor_axis_external_ellipse; - - /** - * The semi-minor axis value of the external ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value shall be - * in the range of 1 to 65535, inclusive and in multiples of 1 pixel. - */ - uint16_t semiminor_axis_external_ellipse; - - /** - * Overlap process option indicates one of the two methods of combining - * rendered pixels in the processing window in an image with at least one - * elliptical pixel selector. For overlapping elliptical pixel selectors - * in an image, overlap_process_option shall have the same value. - */ - enum AVHDRPlusOverlapProcessOption overlap_process_option; - - /** - * The maximum of the color components of linearized RGB values in the - * processing window in the scene. The values should be in the range of 0 to - * 1, inclusive and in multiples of 0.00001. maxscl[ 0 ], maxscl[ 1 ], and - * maxscl[ 2 ] are corresponding to R, G, B color components respectively. - */ - AVRational maxscl[3]; - - /** - * The average of linearized maxRGB values in the processing window in the - * scene. The value should be in the range of 0 to 1, inclusive and in - * multiples of 0.00001. - */ - AVRational average_maxrgb; - - /** - * The number of linearized maxRGB values at given percentiles in the - * processing window in the scene. The maximum value shall be 15. - */ - uint8_t num_distribution_maxrgb_percentiles; - - /** - * The linearized maxRGB values at given percentiles in the - * processing window in the scene. - */ - AVHDRPlusPercentile distribution_maxrgb[15]; - - /** - * The fraction of selected pixels in the image that contains the brightest - * pixel in the scene. The value shall be in the range of 0 to 1, inclusive - * and in multiples of 0.001. - */ - AVRational fraction_bright_pixels; - - /** - * This flag indicates that the metadata for the tone mapping function in - * the processing window is present (for value of 1). - */ - uint8_t tone_mapping_flag; - - /** - * The x coordinate of the separation point between the linear part and the - * curved part of the tone mapping function. The value shall be in the range - * of 0 to 1, excluding 0 and in multiples of 1/4095. - */ - AVRational knee_point_x; - - /** - * The y coordinate of the separation point between the linear part and the - * curved part of the tone mapping function. The value shall be in the range - * of 0 to 1, excluding 0 and in multiples of 1/4095. - */ - AVRational knee_point_y; - - /** - * The number of the intermediate anchor parameters of the tone mapping - * function in the processing window. The maximum value shall be 15. - */ - uint8_t num_bezier_curve_anchors; - - /** - * The intermediate anchor parameters of the tone mapping function in the - * processing window in the scene. The values should be in the range of 0 - * to 1, inclusive and in multiples of 1/1023. - */ - AVRational bezier_curve_anchors[15]; - - /** - * This flag shall be equal to 0 in bitstreams conforming to this version of - * this Specification. Other values are reserved for future use. - */ - uint8_t color_saturation_mapping_flag; - - /** - * The color saturation gain in the processing window in the scene. The - * value shall be in the range of 0 to 63/8, inclusive and in multiples of - * 1/8. The default value shall be 1. - */ - AVRational color_saturation_weight; -} AVHDRPlusColorTransformParams; - -/** - * This struct represents dynamic metadata for color volume transform - - * application 4 of SMPTE 2094-40:2016 standard. - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with - * av_dynamic_hdr_plus_alloc() and its size is not a part of - * the public ABI. - */ -typedef struct AVDynamicHDRPlus { - /** - * Country code by Rec. ITU-T T.35 Annex A. The value shall be 0xB5. - */ - uint8_t itu_t_t35_country_code; - - /** - * Application version in the application defining document in ST-2094 - * suite. The value shall be set to 0. - */ - uint8_t application_version; - - /** - * The number of processing windows. The value shall be in the range - * of 1 to 3, inclusive. - */ - uint8_t num_windows; - - /** - * The color transform parameters for every processing window. - */ - AVHDRPlusColorTransformParams params[3]; - - /** - * The nominal maximum display luminance of the targeted system display, - * in units of 0.0001 candelas per square metre. The value shall be in - * the range of 0 to 10000, inclusive. - */ - AVRational targeted_system_display_maximum_luminance; - - /** - * This flag shall be equal to 0 in bit streams conforming to this version - * of this Specification. The value 1 is reserved for future use. - */ - uint8_t targeted_system_display_actual_peak_luminance_flag; - - /** - * The number of rows in the targeted system_display_actual_peak_luminance - * array. The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_rows_targeted_system_display_actual_peak_luminance; - - /** - * The number of columns in the - * targeted_system_display_actual_peak_luminance array. The value shall be - * in the range of 2 to 25, inclusive. - */ - uint8_t num_cols_targeted_system_display_actual_peak_luminance; - - /** - * The normalized actual peak luminance of the targeted system display. The - * values should be in the range of 0 to 1, inclusive and in multiples of - * 1/15. - */ - AVRational targeted_system_display_actual_peak_luminance[25][25]; - - /** - * This flag shall be equal to 0 in bitstreams conforming to this version of - * this Specification. The value 1 is reserved for future use. - */ - uint8_t mastering_display_actual_peak_luminance_flag; - - /** - * The number of rows in the mastering_display_actual_peak_luminance array. - * The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_rows_mastering_display_actual_peak_luminance; - - /** - * The number of columns in the mastering_display_actual_peak_luminance - * array. The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_cols_mastering_display_actual_peak_luminance; - - /** - * The normalized actual peak luminance of the mastering display used for - * mastering the image essence. The values should be in the range of 0 to 1, - * inclusive and in multiples of 1/15. - */ - AVRational mastering_display_actual_peak_luminance[25][25]; -} AVDynamicHDRPlus; - -/** - * Allocate an AVDynamicHDRPlus structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVDynamicHDRPlus filled with default values or NULL - * on failure. - */ -AVDynamicHDRPlus *av_dynamic_hdr_plus_alloc(size_t *size); - -/** - * Allocate a complete AVDynamicHDRPlus and add it to the frame. - * @param frame The frame which side data is added to. - * - * @return The AVDynamicHDRPlus structure to be filled by caller or NULL - * on failure. - */ -AVDynamicHDRPlus *av_dynamic_hdr_plus_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_HDR_DYNAMIC_METADATA_H */ diff --git a/prebuilts/x86/include/libavutil/hmac.h b/prebuilts/x86/include/libavutil/hmac.h deleted file mode 100644 index 412e950..0000000 --- a/prebuilts/x86/include/libavutil/hmac.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2012 Martin Storsjo - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HMAC_H -#define AVUTIL_HMAC_H - -#include - -#include "version.h" -/** - * @defgroup lavu_hmac HMAC - * @ingroup lavu_crypto - * @{ - */ - -enum AVHMACType { - AV_HMAC_MD5, - AV_HMAC_SHA1, - AV_HMAC_SHA224, - AV_HMAC_SHA256, - AV_HMAC_SHA384, - AV_HMAC_SHA512, -}; - -typedef struct AVHMAC AVHMAC; - -/** - * Allocate an AVHMAC context. - * @param type The hash function used for the HMAC. - */ -AVHMAC *av_hmac_alloc(enum AVHMACType type); - -/** - * Free an AVHMAC context. - * @param ctx The context to free, may be NULL - */ -void av_hmac_free(AVHMAC *ctx); - -/** - * Initialize an AVHMAC context with an authentication key. - * @param ctx The HMAC context - * @param key The authentication key - * @param keylen The length of the key, in bytes - */ -void av_hmac_init(AVHMAC *ctx, const uint8_t *key, unsigned int keylen); - -/** - * Hash data with the HMAC. - * @param ctx The HMAC context - * @param data The data to hash - * @param len The length of the data, in bytes - */ -void av_hmac_update(AVHMAC *ctx, const uint8_t *data, unsigned int len); - -/** - * Finish hashing and output the HMAC digest. - * @param ctx The HMAC context - * @param out The output buffer to write the digest into - * @param outlen The length of the out buffer, in bytes - * @return The number of bytes written to out, or a negative error code. - */ -int av_hmac_final(AVHMAC *ctx, uint8_t *out, unsigned int outlen); - -/** - * Hash an array of data with a key. - * @param ctx The HMAC context - * @param data The data to hash - * @param len The length of the data, in bytes - * @param key The authentication key - * @param keylen The length of the key, in bytes - * @param out The output buffer to write the digest into - * @param outlen The length of the out buffer, in bytes - * @return The number of bytes written to out, or a negative error code. - */ -int av_hmac_calc(AVHMAC *ctx, const uint8_t *data, unsigned int len, - const uint8_t *key, unsigned int keylen, - uint8_t *out, unsigned int outlen); - -/** - * @} - */ - -#endif /* AVUTIL_HMAC_H */ diff --git a/prebuilts/x86/include/libavutil/hwcontext.h b/prebuilts/x86/include/libavutil/hwcontext.h deleted file mode 100644 index 04d19d8..0000000 --- a/prebuilts/x86/include/libavutil/hwcontext.h +++ /dev/null @@ -1,605 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_H -#define AVUTIL_HWCONTEXT_H - -#include "buffer.h" -#include "frame.h" -#include "log.h" -#include "pixfmt.h" - -enum AVHWDeviceType { - AV_HWDEVICE_TYPE_NONE, - AV_HWDEVICE_TYPE_VDPAU, - AV_HWDEVICE_TYPE_CUDA, - AV_HWDEVICE_TYPE_VAAPI, - AV_HWDEVICE_TYPE_DXVA2, - AV_HWDEVICE_TYPE_QSV, - AV_HWDEVICE_TYPE_VIDEOTOOLBOX, - AV_HWDEVICE_TYPE_D3D11VA, - AV_HWDEVICE_TYPE_DRM, - AV_HWDEVICE_TYPE_OPENCL, - AV_HWDEVICE_TYPE_MEDIACODEC, - AV_HWDEVICE_TYPE_VULKAN, -}; - -typedef struct AVHWDeviceInternal AVHWDeviceInternal; - -/** - * This struct aggregates all the (hardware/vendor-specific) "high-level" state, - * i.e. state that is not tied to a concrete processing configuration. - * E.g., in an API that supports hardware-accelerated encoding and decoding, - * this struct will (if possible) wrap the state that is common to both encoding - * and decoding and from which specific instances of encoders or decoders can be - * derived. - * - * This struct is reference-counted with the AVBuffer mechanism. The - * av_hwdevice_ctx_alloc() constructor yields a reference, whose data field - * points to the actual AVHWDeviceContext. Further objects derived from - * AVHWDeviceContext (such as AVHWFramesContext, describing a frame pool with - * specific properties) will hold an internal reference to it. After all the - * references are released, the AVHWDeviceContext itself will be freed, - * optionally invoking a user-specified callback for uninitializing the hardware - * state. - */ -typedef struct AVHWDeviceContext { - /** - * A class for logging. Set by av_hwdevice_ctx_alloc(). - */ - const AVClass *av_class; - - /** - * Private data used internally by libavutil. Must not be accessed in any - * way by the caller. - */ - AVHWDeviceInternal *internal; - - /** - * This field identifies the underlying API used for hardware access. - * - * This field is set when this struct is allocated and never changed - * afterwards. - */ - enum AVHWDeviceType type; - - /** - * The format-specific data, allocated and freed by libavutil along with - * this context. - * - * Should be cast by the user to the format-specific context defined in the - * corresponding header (hwcontext_*.h) and filled as described in the - * documentation before calling av_hwdevice_ctx_init(). - * - * After calling av_hwdevice_ctx_init() this struct should not be modified - * by the caller. - */ - void *hwctx; - - /** - * This field may be set by the caller before calling av_hwdevice_ctx_init(). - * - * If non-NULL, this callback will be called when the last reference to - * this context is unreferenced, immediately before it is freed. - * - * @note when other objects (e.g an AVHWFramesContext) are derived from this - * struct, this callback will be invoked after all such child objects - * are fully uninitialized and their respective destructors invoked. - */ - void (*free)(struct AVHWDeviceContext *ctx); - - /** - * Arbitrary user data, to be used e.g. by the free() callback. - */ - void *user_opaque; -} AVHWDeviceContext; - -typedef struct AVHWFramesInternal AVHWFramesInternal; - -/** - * This struct describes a set or pool of "hardware" frames (i.e. those with - * data not located in normal system memory). All the frames in the pool are - * assumed to be allocated in the same way and interchangeable. - * - * This struct is reference-counted with the AVBuffer mechanism and tied to a - * given AVHWDeviceContext instance. The av_hwframe_ctx_alloc() constructor - * yields a reference, whose data field points to the actual AVHWFramesContext - * struct. - */ -typedef struct AVHWFramesContext { - /** - * A class for logging. - */ - const AVClass *av_class; - - /** - * Private data used internally by libavutil. Must not be accessed in any - * way by the caller. - */ - AVHWFramesInternal *internal; - - /** - * A reference to the parent AVHWDeviceContext. This reference is owned and - * managed by the enclosing AVHWFramesContext, but the caller may derive - * additional references from it. - */ - AVBufferRef *device_ref; - - /** - * The parent AVHWDeviceContext. This is simply a pointer to - * device_ref->data provided for convenience. - * - * Set by libavutil in av_hwframe_ctx_init(). - */ - AVHWDeviceContext *device_ctx; - - /** - * The format-specific data, allocated and freed automatically along with - * this context. - * - * Should be cast by the user to the format-specific context defined in the - * corresponding header (hwframe_*.h) and filled as described in the - * documentation before calling av_hwframe_ctx_init(). - * - * After any frames using this context are created, the contents of this - * struct should not be modified by the caller. - */ - void *hwctx; - - /** - * This field may be set by the caller before calling av_hwframe_ctx_init(). - * - * If non-NULL, this callback will be called when the last reference to - * this context is unreferenced, immediately before it is freed. - */ - void (*free)(struct AVHWFramesContext *ctx); - - /** - * Arbitrary user data, to be used e.g. by the free() callback. - */ - void *user_opaque; - - /** - * A pool from which the frames are allocated by av_hwframe_get_buffer(). - * This field may be set by the caller before calling av_hwframe_ctx_init(). - * The buffers returned by calling av_buffer_pool_get() on this pool must - * have the properties described in the documentation in the corresponding hw - * type's header (hwcontext_*.h). The pool will be freed strictly before - * this struct's free() callback is invoked. - * - * This field may be NULL, then libavutil will attempt to allocate a pool - * internally. Note that certain device types enforce pools allocated at - * fixed size (frame count), which cannot be extended dynamically. In such a - * case, initial_pool_size must be set appropriately. - */ - AVBufferPool *pool; - - /** - * Initial size of the frame pool. If a device type does not support - * dynamically resizing the pool, then this is also the maximum pool size. - * - * May be set by the caller before calling av_hwframe_ctx_init(). Must be - * set if pool is NULL and the device type does not support dynamic pools. - */ - int initial_pool_size; - - /** - * The pixel format identifying the underlying HW surface type. - * - * Must be a hwaccel format, i.e. the corresponding descriptor must have the - * AV_PIX_FMT_FLAG_HWACCEL flag set. - * - * Must be set by the user before calling av_hwframe_ctx_init(). - */ - enum AVPixelFormat format; - - /** - * The pixel format identifying the actual data layout of the hardware - * frames. - * - * Must be set by the caller before calling av_hwframe_ctx_init(). - * - * @note when the underlying API does not provide the exact data layout, but - * only the colorspace/bit depth, this field should be set to the fully - * planar version of that format (e.g. for 8-bit 420 YUV it should be - * AV_PIX_FMT_YUV420P, not AV_PIX_FMT_NV12 or anything else). - */ - enum AVPixelFormat sw_format; - - /** - * The allocated dimensions of the frames in this pool. - * - * Must be set by the user before calling av_hwframe_ctx_init(). - */ - int width, height; -} AVHWFramesContext; - -/** - * Look up an AVHWDeviceType by name. - * - * @param name String name of the device type (case-insensitive). - * @return The type from enum AVHWDeviceType, or AV_HWDEVICE_TYPE_NONE if - * not found. - */ -enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name); - -/** Get the string name of an AVHWDeviceType. - * - * @param type Type from enum AVHWDeviceType. - * @return Pointer to a static string containing the name, or NULL if the type - * is not valid. - */ -const char *av_hwdevice_get_type_name(enum AVHWDeviceType type); - -/** - * Iterate over supported device types. - * - * @param type AV_HWDEVICE_TYPE_NONE initially, then the previous type - * returned by this function in subsequent iterations. - * @return The next usable device type from enum AVHWDeviceType, or - * AV_HWDEVICE_TYPE_NONE if there are no more. - */ -enum AVHWDeviceType av_hwdevice_iterate_types(enum AVHWDeviceType prev); - -/** - * Allocate an AVHWDeviceContext for a given hardware type. - * - * @param type the type of the hardware device to allocate. - * @return a reference to the newly created AVHWDeviceContext on success or NULL - * on failure. - */ -AVBufferRef *av_hwdevice_ctx_alloc(enum AVHWDeviceType type); - -/** - * Finalize the device context before use. This function must be called after - * the context is filled with all the required information and before it is - * used in any way. - * - * @param ref a reference to the AVHWDeviceContext - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwdevice_ctx_init(AVBufferRef *ref); - -/** - * Open a device of the specified type and create an AVHWDeviceContext for it. - * - * This is a convenience function intended to cover the simple cases. Callers - * who need to fine-tune device creation/management should open the device - * manually and then wrap it in an AVHWDeviceContext using - * av_hwdevice_ctx_alloc()/av_hwdevice_ctx_init(). - * - * The returned context is already initialized and ready for use, the caller - * should not call av_hwdevice_ctx_init() on it. The user_opaque/free fields of - * the created AVHWDeviceContext are set by this function and should not be - * touched by the caller. - * - * @param device_ctx On success, a reference to the newly-created device context - * will be written here. The reference is owned by the caller - * and must be released with av_buffer_unref() when no longer - * needed. On failure, NULL will be written to this pointer. - * @param type The type of the device to create. - * @param device A type-specific string identifying the device to open. - * @param opts A dictionary of additional (type-specific) options to use in - * opening the device. The dictionary remains owned by the caller. - * @param flags currently unused - * - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create(AVBufferRef **device_ctx, enum AVHWDeviceType type, - const char *device, AVDictionary *opts, int flags); - -/** - * Create a new device of the specified type from an existing device. - * - * If the source device is a device of the target type or was originally - * derived from such a device (possibly through one or more intermediate - * devices of other types), then this will return a reference to the - * existing device of the same type as is requested. - * - * Otherwise, it will attempt to derive a new device from the given source - * device. If direct derivation to the new type is not implemented, it will - * attempt the same derivation from each ancestor of the source device in - * turn looking for an implemented derivation method. - * - * @param dst_ctx On success, a reference to the newly-created - * AVHWDeviceContext. - * @param type The type of the new device to create. - * @param src_ctx A reference to an existing AVHWDeviceContext which will be - * used to create the new device. - * @param flags Currently unused; should be set to zero. - * @return Zero on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create_derived(AVBufferRef **dst_ctx, - enum AVHWDeviceType type, - AVBufferRef *src_ctx, int flags); - -/** - * Create a new device of the specified type from an existing device. - * - * This function performs the same action as av_hwdevice_ctx_create_derived, - * however, it is able to set options for the new device to be derived. - * - * @param dst_ctx On success, a reference to the newly-created - * AVHWDeviceContext. - * @param type The type of the new device to create. - * @param src_ctx A reference to an existing AVHWDeviceContext which will be - * used to create the new device. - * @param options Options for the new device to create, same format as in - * av_hwdevice_ctx_create. - * @param flags Currently unused; should be set to zero. - * @return Zero on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create_derived_opts(AVBufferRef **dst_ctx, - enum AVHWDeviceType type, - AVBufferRef *src_ctx, - AVDictionary *options, int flags); - -/** - * Allocate an AVHWFramesContext tied to a given device context. - * - * @param device_ctx a reference to a AVHWDeviceContext. This function will make - * a new reference for internal use, the one passed to the - * function remains owned by the caller. - * @return a reference to the newly created AVHWFramesContext on success or NULL - * on failure. - */ -AVBufferRef *av_hwframe_ctx_alloc(AVBufferRef *device_ctx); - -/** - * Finalize the context before use. This function must be called after the - * context is filled with all the required information and before it is attached - * to any frames. - * - * @param ref a reference to the AVHWFramesContext - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwframe_ctx_init(AVBufferRef *ref); - -/** - * Allocate a new frame attached to the given AVHWFramesContext. - * - * @param hwframe_ctx a reference to an AVHWFramesContext - * @param frame an empty (freshly allocated or unreffed) frame to be filled with - * newly allocated buffers. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwframe_get_buffer(AVBufferRef *hwframe_ctx, AVFrame *frame, int flags); - -/** - * Copy data to or from a hw surface. At least one of dst/src must have an - * AVHWFramesContext attached. - * - * If src has an AVHWFramesContext attached, then the format of dst (if set) - * must use one of the formats returned by av_hwframe_transfer_get_formats(src, - * AV_HWFRAME_TRANSFER_DIRECTION_FROM). - * If dst has an AVHWFramesContext attached, then the format of src must use one - * of the formats returned by av_hwframe_transfer_get_formats(dst, - * AV_HWFRAME_TRANSFER_DIRECTION_TO) - * - * dst may be "clean" (i.e. with data/buf pointers unset), in which case the - * data buffers will be allocated by this function using av_frame_get_buffer(). - * If dst->format is set, then this format will be used, otherwise (when - * dst->format is AV_PIX_FMT_NONE) the first acceptable format will be chosen. - * - * The two frames must have matching allocated dimensions (i.e. equal to - * AVHWFramesContext.width/height), since not all device types support - * transferring a sub-rectangle of the whole surface. The display dimensions - * (i.e. AVFrame.width/height) may be smaller than the allocated dimensions, but - * also have to be equal for both frames. When the display dimensions are - * smaller than the allocated dimensions, the content of the padding in the - * destination frame is unspecified. - * - * @param dst the destination frame. dst is not touched on failure. - * @param src the source frame. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR error code on failure. - */ -int av_hwframe_transfer_data(AVFrame *dst, const AVFrame *src, int flags); - -enum AVHWFrameTransferDirection { - /** - * Transfer the data from the queried hw frame. - */ - AV_HWFRAME_TRANSFER_DIRECTION_FROM, - - /** - * Transfer the data to the queried hw frame. - */ - AV_HWFRAME_TRANSFER_DIRECTION_TO, -}; - -/** - * Get a list of possible source or target formats usable in - * av_hwframe_transfer_data(). - * - * @param hwframe_ctx the frame context to obtain the information for - * @param dir the direction of the transfer - * @param formats the pointer to the output format list will be written here. - * The list is terminated with AV_PIX_FMT_NONE and must be freed - * by the caller when no longer needed using av_free(). - * If this function returns successfully, the format list will - * have at least one item (not counting the terminator). - * On failure, the contents of this pointer are unspecified. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_hwframe_transfer_get_formats(AVBufferRef *hwframe_ctx, - enum AVHWFrameTransferDirection dir, - enum AVPixelFormat **formats, int flags); - - -/** - * This struct describes the constraints on hardware frames attached to - * a given device with a hardware-specific configuration. This is returned - * by av_hwdevice_get_hwframe_constraints() and must be freed by - * av_hwframe_constraints_free() after use. - */ -typedef struct AVHWFramesConstraints { - /** - * A list of possible values for format in the hw_frames_ctx, - * terminated by AV_PIX_FMT_NONE. This member will always be filled. - */ - enum AVPixelFormat *valid_hw_formats; - - /** - * A list of possible values for sw_format in the hw_frames_ctx, - * terminated by AV_PIX_FMT_NONE. Can be NULL if this information is - * not known. - */ - enum AVPixelFormat *valid_sw_formats; - - /** - * The minimum size of frames in this hw_frames_ctx. - * (Zero if not known.) - */ - int min_width; - int min_height; - - /** - * The maximum size of frames in this hw_frames_ctx. - * (INT_MAX if not known / no limit.) - */ - int max_width; - int max_height; -} AVHWFramesConstraints; - -/** - * Allocate a HW-specific configuration structure for a given HW device. - * After use, the user must free all members as required by the specific - * hardware structure being used, then free the structure itself with - * av_free(). - * - * @param device_ctx a reference to the associated AVHWDeviceContext. - * @return The newly created HW-specific configuration structure on - * success or NULL on failure. - */ -void *av_hwdevice_hwconfig_alloc(AVBufferRef *device_ctx); - -/** - * Get the constraints on HW frames given a device and the HW-specific - * configuration to be used with that device. If no HW-specific - * configuration is provided, returns the maximum possible capabilities - * of the device. - * - * @param ref a reference to the associated AVHWDeviceContext. - * @param hwconfig a filled HW-specific configuration structure, or NULL - * to return the maximum possible capabilities of the device. - * @return AVHWFramesConstraints structure describing the constraints - * on the device, or NULL if not available. - */ -AVHWFramesConstraints *av_hwdevice_get_hwframe_constraints(AVBufferRef *ref, - const void *hwconfig); - -/** - * Free an AVHWFrameConstraints structure. - * - * @param constraints The (filled or unfilled) AVHWFrameConstraints structure. - */ -void av_hwframe_constraints_free(AVHWFramesConstraints **constraints); - - -/** - * Flags to apply to frame mappings. - */ -enum { - /** - * The mapping must be readable. - */ - AV_HWFRAME_MAP_READ = 1 << 0, - /** - * The mapping must be writeable. - */ - AV_HWFRAME_MAP_WRITE = 1 << 1, - /** - * The mapped frame will be overwritten completely in subsequent - * operations, so the current frame data need not be loaded. Any values - * which are not overwritten are unspecified. - */ - AV_HWFRAME_MAP_OVERWRITE = 1 << 2, - /** - * The mapping must be direct. That is, there must not be any copying in - * the map or unmap steps. Note that performance of direct mappings may - * be much lower than normal memory. - */ - AV_HWFRAME_MAP_DIRECT = 1 << 3, -}; - -/** - * Map a hardware frame. - * - * This has a number of different possible effects, depending on the format - * and origin of the src and dst frames. On input, src should be a usable - * frame with valid buffers and dst should be blank (typically as just created - * by av_frame_alloc()). src should have an associated hwframe context, and - * dst may optionally have a format and associated hwframe context. - * - * If src was created by mapping a frame from the hwframe context of dst, - * then this function undoes the mapping - dst is replaced by a reference to - * the frame that src was originally mapped from. - * - * If both src and dst have an associated hwframe context, then this function - * attempts to map the src frame from its hardware context to that of dst and - * then fill dst with appropriate data to be usable there. This will only be - * possible if the hwframe contexts and associated devices are compatible - - * given compatible devices, av_hwframe_ctx_create_derived() can be used to - * create a hwframe context for dst in which mapping should be possible. - * - * If src has a hwframe context but dst does not, then the src frame is - * mapped to normal memory and should thereafter be usable as a normal frame. - * If the format is set on dst, then the mapping will attempt to create dst - * with that format and fail if it is not possible. If format is unset (is - * AV_PIX_FMT_NONE) then dst will be mapped with whatever the most appropriate - * format to use is (probably the sw_format of the src hwframe context). - * - * A return value of AVERROR(ENOSYS) indicates that the mapping is not - * possible with the given arguments and hwframe setup, while other return - * values indicate that it failed somehow. - * - * @param dst Destination frame, to contain the mapping. - * @param src Source frame, to be mapped. - * @param flags Some combination of AV_HWFRAME_MAP_* flags. - * @return Zero on success, negative AVERROR code on failure. - */ -int av_hwframe_map(AVFrame *dst, const AVFrame *src, int flags); - - -/** - * Create and initialise an AVHWFramesContext as a mapping of another existing - * AVHWFramesContext on a different device. - * - * av_hwframe_ctx_init() should not be called after this. - * - * @param derived_frame_ctx On success, a reference to the newly created - * AVHWFramesContext. - * @param derived_device_ctx A reference to the device to create the new - * AVHWFramesContext on. - * @param source_frame_ctx A reference to an existing AVHWFramesContext - * which will be mapped to the derived context. - * @param flags Some combination of AV_HWFRAME_MAP_* flags, defining the - * mapping parameters to apply to frames which are allocated - * in the derived device. - * @return Zero on success, negative AVERROR code on failure. - */ -int av_hwframe_ctx_create_derived(AVBufferRef **derived_frame_ctx, - enum AVPixelFormat format, - AVBufferRef *derived_device_ctx, - AVBufferRef *source_frame_ctx, - int flags); - -#endif /* AVUTIL_HWCONTEXT_H */ diff --git a/prebuilts/x86/include/libavutil/hwcontext_cuda.h b/prebuilts/x86/include/libavutil/hwcontext_cuda.h deleted file mode 100644 index cefbe0c..0000000 --- a/prebuilts/x86/include/libavutil/hwcontext_cuda.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#ifndef AVUTIL_HWCONTEXT_CUDA_H -#define AVUTIL_HWCONTEXT_CUDA_H - -#ifndef CUDA_VERSION -#include -#endif - -#include "pixfmt.h" - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_CUDA. - * - * This API supports dynamic frame pools. AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a CUdeviceptr. - */ - -typedef struct AVCUDADeviceContextInternal AVCUDADeviceContextInternal; - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVCUDADeviceContext { - CUcontext cuda_ctx; - CUstream stream; - AVCUDADeviceContextInternal *internal; -} AVCUDADeviceContext; - -/** - * AVHWFramesContext.hwctx is currently not used - */ - -/** - * @defgroup hwcontext_cuda Device context creation flags - * - * Flags for av_hwdevice_ctx_create. - * - * @{ - */ - -/** - * Use primary device context instead of creating a new one. - */ -#define AV_CUDA_USE_PRIMARY_CONTEXT (1 << 0) - -/** - * @} - */ - -#endif /* AVUTIL_HWCONTEXT_CUDA_H */ diff --git a/prebuilts/x86/include/libavutil/hwcontext_d3d11va.h b/prebuilts/x86/include/libavutil/hwcontext_d3d11va.h deleted file mode 100644 index 9f91e9b..0000000 --- a/prebuilts/x86/include/libavutil/hwcontext_d3d11va.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_D3D11VA_H -#define AVUTIL_HWCONTEXT_D3D11VA_H - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_D3D11VA. - * - * The default pool implementation will be fixed-size if initial_pool_size is - * set (and allocate elements from an array texture). Otherwise it will allocate - * individual textures. Be aware that decoding requires a single array texture. - * - * Using sw_format==AV_PIX_FMT_YUV420P has special semantics, and maps to - * DXGI_FORMAT_420_OPAQUE. av_hwframe_transfer_data() is not supported for - * this format. Refer to MSDN for details. - * - * av_hwdevice_ctx_create() for this device type supports a key named "debug" - * for the AVDictionary entry. If this is set to any value, the device creation - * code will try to load various supported D3D debugging layers. - */ - -#include -#include - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVD3D11VADeviceContext { - /** - * Device used for texture creation and access. This can also be used to - * set the libavcodec decoding device. - * - * Must be set by the user. This is the only mandatory field - the other - * device context fields are set from this and are available for convenience. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11Device *device; - - /** - * If unset, this will be set from the device field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11DeviceContext *device_context; - - /** - * If unset, this will be set from the device field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11VideoDevice *video_device; - - /** - * If unset, this will be set from the device_context field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11VideoContext *video_context; - - /** - * Callbacks for locking. They protect accesses to device_context and - * video_context calls. They also protect access to the internal staging - * texture (for av_hwframe_transfer_data() calls). They do NOT protect - * access to hwcontext or decoder state in general. - * - * If unset on init, the hwcontext implementation will set them to use an - * internal mutex. - * - * The underlying lock must be recursive. lock_ctx is for free use by the - * locking implementation. - */ - void (*lock)(void *lock_ctx); - void (*unlock)(void *lock_ctx); - void *lock_ctx; -} AVD3D11VADeviceContext; - -/** - * D3D11 frame descriptor for pool allocation. - * - * In user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer pointing at an object of this type describing the - * planes of the frame. - * - * This has no use outside of custom allocation, and AVFrame AVBufferRef do not - * necessarily point to an instance of this struct. - */ -typedef struct AVD3D11FrameDescriptor { - /** - * The texture in which the frame is located. The reference count is - * managed by the AVBufferRef, and destroying the reference will release - * the interface. - * - * Normally stored in AVFrame.data[0]. - */ - ID3D11Texture2D *texture; - - /** - * The index into the array texture element representing the frame, or 0 - * if the texture is not an array texture. - * - * Normally stored in AVFrame.data[1] (cast from intptr_t). - */ - intptr_t index; -} AVD3D11FrameDescriptor; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVD3D11VAFramesContext { - /** - * The canonical texture used for pool allocation. If this is set to NULL - * on init, the hwframes implementation will allocate and set an array - * texture if initial_pool_size > 0. - * - * The only situation when the API user should set this is: - * - the user wants to do manual pool allocation (setting - * AVHWFramesContext.pool), instead of letting AVHWFramesContext - * allocate the pool - * - of an array texture - * - and wants it to use it for decoding - * - this has to be done before calling av_hwframe_ctx_init() - * - * Deallocating the AVHWFramesContext will always release this interface, - * and it does not matter whether it was user-allocated. - * - * This is in particular used by the libavcodec D3D11VA hwaccel, which - * requires a single array texture. It will create ID3D11VideoDecoderOutputView - * objects for each array texture element on decoder initialization. - */ - ID3D11Texture2D *texture; - - /** - * D3D11_TEXTURE2D_DESC.BindFlags used for texture creation. The user must - * at least set D3D11_BIND_DECODER if the frames context is to be used for - * video decoding. - * This field is ignored/invalid if a user-allocated texture is provided. - */ - UINT BindFlags; - - /** - * D3D11_TEXTURE2D_DESC.MiscFlags used for texture creation. - * This field is ignored/invalid if a user-allocated texture is provided. - */ - UINT MiscFlags; -} AVD3D11VAFramesContext; - -#endif /* AVUTIL_HWCONTEXT_D3D11VA_H */ diff --git a/prebuilts/x86/include/libavutil/hwcontext_drm.h b/prebuilts/x86/include/libavutil/hwcontext_drm.h deleted file mode 100644 index 42709f2..0000000 --- a/prebuilts/x86/include/libavutil/hwcontext_drm.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_DRM_H -#define AVUTIL_HWCONTEXT_DRM_H - -#include -#include - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_DRM. - * - * Internal frame allocation is not currently supported - all frames - * must be allocated by the user. Thus AVHWFramesContext is always - * NULL, though this may change if support for frame allocation is - * added in future. - */ - -enum { - /** - * The maximum number of layers/planes in a DRM frame. - */ - AV_DRM_MAX_PLANES = 4 -}; - -/** - * DRM object descriptor. - * - * Describes a single DRM object, addressing it as a PRIME file - * descriptor. - */ -typedef struct AVDRMObjectDescriptor { - /** - * DRM PRIME fd for the object. - */ - int fd; - /** - * Total size of the object. - * - * (This includes any parts not which do not contain image data.) - */ - size_t size; - /** - * Format modifier applied to the object (DRM_FORMAT_MOD_*). - * - * If the format modifier is unknown then this should be set to - * DRM_FORMAT_MOD_INVALID. - */ - uint64_t format_modifier; -} AVDRMObjectDescriptor; - -/** - * DRM plane descriptor. - * - * Describes a single plane of a layer, which is contained within - * a single object. - */ -typedef struct AVDRMPlaneDescriptor { - /** - * Index of the object containing this plane in the objects - * array of the enclosing frame descriptor. - */ - int object_index; - /** - * Offset within that object of this plane. - */ - ptrdiff_t offset; - /** - * Pitch (linesize) of this plane. - */ - ptrdiff_t pitch; -} AVDRMPlaneDescriptor; - -/** - * DRM layer descriptor. - * - * Describes a single layer within a frame. This has the structure - * defined by its format, and will contain one or more planes. - */ -typedef struct AVDRMLayerDescriptor { - /** - * Format of the layer (DRM_FORMAT_*). - */ - uint32_t format; - /** - * Number of planes in the layer. - * - * This must match the number of planes required by format. - */ - int nb_planes; - /** - * Array of planes in this layer. - */ - AVDRMPlaneDescriptor planes[AV_DRM_MAX_PLANES]; -} AVDRMLayerDescriptor; - -/** - * DRM frame descriptor. - * - * This is used as the data pointer for AV_PIX_FMT_DRM_PRIME frames. - * It is also used by user-allocated frame pools - allocating in - * AVHWFramesContext.pool must return AVBufferRefs which contain - * an object of this type. - * - * The fields of this structure should be set such it can be - * imported directly by EGL using the EGL_EXT_image_dma_buf_import - * and EGL_EXT_image_dma_buf_import_modifiers extensions. - * (Note that the exact layout of a particular format may vary between - * platforms - we only specify that the same platform should be able - * to import it.) - * - * The total number of planes must not exceed AV_DRM_MAX_PLANES, and - * the order of the planes by increasing layer index followed by - * increasing plane index must be the same as the order which would - * be used for the data pointers in the equivalent software format. - */ -typedef struct AVDRMFrameDescriptor { - /** - * Number of DRM objects making up this frame. - */ - int nb_objects; - /** - * Array of objects making up the frame. - */ - AVDRMObjectDescriptor objects[AV_DRM_MAX_PLANES]; - /** - * Number of layers in the frame. - */ - int nb_layers; - /** - * Array of layers in the frame. - */ - AVDRMLayerDescriptor layers[AV_DRM_MAX_PLANES]; -} AVDRMFrameDescriptor; - -/** - * DRM device. - * - * Allocated as AVHWDeviceContext.hwctx. - */ -typedef struct AVDRMDeviceContext { - /** - * File descriptor of DRM device. - * - * This is used as the device to create frames on, and may also be - * used in some derivation and mapping operations. - * - * If no device is required, set to -1. - */ - int fd; -} AVDRMDeviceContext; - -#endif /* AVUTIL_HWCONTEXT_DRM_H */ diff --git a/prebuilts/x86/include/libavutil/hwcontext_dxva2.h b/prebuilts/x86/include/libavutil/hwcontext_dxva2.h deleted file mode 100644 index e1b79bc..0000000 --- a/prebuilts/x86/include/libavutil/hwcontext_dxva2.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#ifndef AVUTIL_HWCONTEXT_DXVA2_H -#define AVUTIL_HWCONTEXT_DXVA2_H - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_DXVA2. - * - * Only fixed-size pools are supported. - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to a pointer to IDirect3DSurface9. - */ - -#include -#include - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVDXVA2DeviceContext { - IDirect3DDeviceManager9 *devmgr; -} AVDXVA2DeviceContext; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVDXVA2FramesContext { - /** - * The surface type (e.g. DXVA2_VideoProcessorRenderTarget or - * DXVA2_VideoDecoderRenderTarget). Must be set by the caller. - */ - DWORD surface_type; - - /** - * The surface pool. When an external pool is not provided by the caller, - * this will be managed (allocated and filled on init, freed on uninit) by - * libavutil. - */ - IDirect3DSurface9 **surfaces; - int nb_surfaces; - - /** - * Certain drivers require the decoder to be destroyed before the surfaces. - * To allow internally managed pools to work properly in such cases, this - * field is provided. - * - * If it is non-NULL, libavutil will call IDirectXVideoDecoder_Release() on - * it just before the internal surface pool is freed. - * - * This is for convenience only. Some code uses other methods to manage the - * decoder reference. - */ - IDirectXVideoDecoder *decoder_to_release; -} AVDXVA2FramesContext; - -#endif /* AVUTIL_HWCONTEXT_DXVA2_H */ diff --git a/prebuilts/x86/include/libavutil/hwcontext_mediacodec.h b/prebuilts/x86/include/libavutil/hwcontext_mediacodec.h deleted file mode 100644 index 101a980..0000000 --- a/prebuilts/x86/include/libavutil/hwcontext_mediacodec.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_MEDIACODEC_H -#define AVUTIL_HWCONTEXT_MEDIACODEC_H - -/** - * MediaCodec details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVMediaCodecDeviceContext { - /** - * android/view/Surface handle, to be filled by the user. - * - * This is the default surface used by decoders on this device. - */ - void *surface; -} AVMediaCodecDeviceContext; - -#endif /* AVUTIL_HWCONTEXT_MEDIACODEC_H */ diff --git a/prebuilts/x86/include/libavutil/hwcontext_opencl.h b/prebuilts/x86/include/libavutil/hwcontext_opencl.h deleted file mode 100644 index ef54486..0000000 --- a/prebuilts/x86/include/libavutil/hwcontext_opencl.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_OPENCL_H -#define AVUTIL_HWCONTEXT_OPENCL_H - -#ifdef __APPLE__ -#include -#else -#include -#endif - -#include "frame.h" - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_OPENCL. - * - * Pools allocated internally are always dynamic, and are primarily intended - * to be used in OpenCL-only cases. If interoperation is required, it is - * typically required to allocate frames in the other API and then map the - * frames context to OpenCL with av_hwframe_ctx_create_derived(). - */ - -/** - * OpenCL frame descriptor for pool allocation. - * - * In user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer pointing at an object of this type describing the - * planes of the frame. - */ -typedef struct AVOpenCLFrameDescriptor { - /** - * Number of planes in the frame. - */ - int nb_planes; - /** - * OpenCL image2d objects for each plane of the frame. - */ - cl_mem planes[AV_NUM_DATA_POINTERS]; -} AVOpenCLFrameDescriptor; - -/** - * OpenCL device details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVOpenCLDeviceContext { - /** - * The primary device ID of the device. If multiple OpenCL devices - * are associated with the context then this is the one which will - * be used for all operations internal to FFmpeg. - */ - cl_device_id device_id; - /** - * The OpenCL context which will contain all operations and frames on - * this device. - */ - cl_context context; - /** - * The default command queue for this device, which will be used by all - * frames contexts which do not have their own command queue. If not - * intialised by the user, a default queue will be created on the - * primary device. - */ - cl_command_queue command_queue; -} AVOpenCLDeviceContext; - -/** - * OpenCL-specific data associated with a frame pool. - * - * Allocated as AVHWFramesContext.hwctx. - */ -typedef struct AVOpenCLFramesContext { - /** - * The command queue used for internal asynchronous operations on this - * device (av_hwframe_transfer_data(), av_hwframe_map()). - * - * If this is not set, the command queue from the associated device is - * used instead. - */ - cl_command_queue command_queue; -} AVOpenCLFramesContext; - -#endif /* AVUTIL_HWCONTEXT_OPENCL_H */ diff --git a/prebuilts/x86/include/libavutil/hwcontext_qsv.h b/prebuilts/x86/include/libavutil/hwcontext_qsv.h deleted file mode 100644 index b98d611..0000000 --- a/prebuilts/x86/include/libavutil/hwcontext_qsv.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_QSV_H -#define AVUTIL_HWCONTEXT_QSV_H - -#include - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_QSV. - * - * This API does not support dynamic frame pools. AVHWFramesContext.pool must - * contain AVBufferRefs whose data pointer points to an mfxFrameSurface1 struct. - */ - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVQSVDeviceContext { - mfxSession session; -} AVQSVDeviceContext; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVQSVFramesContext { - mfxFrameSurface1 *surfaces; - int nb_surfaces; - - /** - * A combination of MFX_MEMTYPE_* describing the frame pool. - */ - int frame_type; -} AVQSVFramesContext; - -#endif /* AVUTIL_HWCONTEXT_QSV_H */ - diff --git a/prebuilts/x86/include/libavutil/hwcontext_vaapi.h b/prebuilts/x86/include/libavutil/hwcontext_vaapi.h deleted file mode 100644 index 0b2e071..0000000 --- a/prebuilts/x86/include/libavutil/hwcontext_vaapi.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VAAPI_H -#define AVUTIL_HWCONTEXT_VAAPI_H - -#include - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_VAAPI. - * - * Dynamic frame pools are supported, but note that any pool used as a render - * target is required to be of fixed size in order to be be usable as an - * argument to vaCreateContext(). - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to a VASurfaceID. - */ - -enum { - /** - * The quirks field has been set by the user and should not be detected - * automatically by av_hwdevice_ctx_init(). - */ - AV_VAAPI_DRIVER_QUIRK_USER_SET = (1 << 0), - /** - * The driver does not destroy parameter buffers when they are used by - * vaRenderPicture(). Additional code will be required to destroy them - * separately afterwards. - */ - AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS = (1 << 1), - - /** - * The driver does not support the VASurfaceAttribMemoryType attribute, - * so the surface allocation code will not try to use it. - */ - AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE = (1 << 2), - - /** - * The driver does not support surface attributes at all. - * The surface allocation code will never pass them to surface allocation, - * and the results of the vaQuerySurfaceAttributes() call will be faked. - */ - AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3), -}; - -/** - * VAAPI connection details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVVAAPIDeviceContext { - /** - * The VADisplay handle, to be filled by the user. - */ - VADisplay display; - /** - * Driver quirks to apply - this is filled by av_hwdevice_ctx_init(), - * with reference to a table of known drivers, unless the - * AV_VAAPI_DRIVER_QUIRK_USER_SET bit is already present. The user - * may need to refer to this field when performing any later - * operations using VAAPI with the same VADisplay. - */ - unsigned int driver_quirks; -} AVVAAPIDeviceContext; - -/** - * VAAPI-specific data associated with a frame pool. - * - * Allocated as AVHWFramesContext.hwctx. - */ -typedef struct AVVAAPIFramesContext { - /** - * Set by the user to apply surface attributes to all surfaces in - * the frame pool. If null, default settings are used. - */ - VASurfaceAttrib *attributes; - int nb_attributes; - /** - * The surfaces IDs of all surfaces in the pool after creation. - * Only valid if AVHWFramesContext.initial_pool_size was positive. - * These are intended to be used as the render_targets arguments to - * vaCreateContext(). - */ - VASurfaceID *surface_ids; - int nb_surfaces; -} AVVAAPIFramesContext; - -/** - * VAAPI hardware pipeline configuration details. - * - * Allocated with av_hwdevice_hwconfig_alloc(). - */ -typedef struct AVVAAPIHWConfig { - /** - * ID of a VAAPI pipeline configuration. - */ - VAConfigID config_id; -} AVVAAPIHWConfig; - -#endif /* AVUTIL_HWCONTEXT_VAAPI_H */ diff --git a/prebuilts/x86/include/libavutil/hwcontext_vdpau.h b/prebuilts/x86/include/libavutil/hwcontext_vdpau.h deleted file mode 100644 index 1b7ea1e..0000000 --- a/prebuilts/x86/include/libavutil/hwcontext_vdpau.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VDPAU_H -#define AVUTIL_HWCONTEXT_VDPAU_H - -#include - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_VDPAU. - * - * This API supports dynamic frame pools. AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a VdpVideoSurface. - */ - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVVDPAUDeviceContext { - VdpDevice device; - VdpGetProcAddress *get_proc_address; -} AVVDPAUDeviceContext; - -/** - * AVHWFramesContext.hwctx is currently not used - */ - -#endif /* AVUTIL_HWCONTEXT_VDPAU_H */ diff --git a/prebuilts/x86/include/libavutil/hwcontext_videotoolbox.h b/prebuilts/x86/include/libavutil/hwcontext_videotoolbox.h deleted file mode 100644 index 5074d79..0000000 --- a/prebuilts/x86/include/libavutil/hwcontext_videotoolbox.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H -#define AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H - -#include - -#include - -#include "pixfmt.h" - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_VIDEOTOOLBOX. - * - * This API currently does not support frame allocation, as the raw VideoToolbox - * API does allocation, and FFmpeg itself never has the need to allocate frames. - * - * If the API user sets a custom pool, AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a CVImageBufferRef or CVPixelBufferRef. - * - * Currently AVHWDeviceContext.hwctx and AVHWFramesContext.hwctx are always - * NULL. - */ - -/** - * Convert a VideoToolbox (actually CoreVideo) format to AVPixelFormat. - * Returns AV_PIX_FMT_NONE if no known equivalent was found. - */ -enum AVPixelFormat av_map_videotoolbox_format_to_pixfmt(uint32_t cv_fmt); - -/** - * Convert an AVPixelFormat to a VideoToolbox (actually CoreVideo) format. - * Returns 0 if no known equivalent was found. - */ -uint32_t av_map_videotoolbox_format_from_pixfmt(enum AVPixelFormat pix_fmt); - -/** - * Same as av_map_videotoolbox_format_from_pixfmt function, but can map and - * return full range pixel formats via a flag. - */ -uint32_t av_map_videotoolbox_format_from_pixfmt2(enum AVPixelFormat pix_fmt, bool full_range); - -#endif /* AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H */ diff --git a/prebuilts/x86/include/libavutil/hwcontext_vulkan.h b/prebuilts/x86/include/libavutil/hwcontext_vulkan.h deleted file mode 100644 index 5cbeb8e..0000000 --- a/prebuilts/x86/include/libavutil/hwcontext_vulkan.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VULKAN_H -#define AVUTIL_HWCONTEXT_VULKAN_H - -#include - -#include "pixfmt.h" -#include "frame.h" - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_VULKAN. - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to an AVVkFrame. - */ - -/** - * Main Vulkan context, allocated as AVHWDeviceContext.hwctx. - * All of these can be set before init to change what the context uses - */ -typedef struct AVVulkanDeviceContext { - /** - * Custom memory allocator, else NULL - */ - const VkAllocationCallbacks *alloc; - /** - * Vulkan instance. Must be at least version 1.1. - */ - VkInstance inst; - /** - * Physical device - */ - VkPhysicalDevice phys_dev; - /** - * Active device - */ - VkDevice act_dev; - /** - * Queue family index for graphics - * @note av_hwdevice_create() will set all 3 queue indices if unset - * If there is no dedicated queue for compute or transfer operations, - * they will be set to the graphics queue index which can handle both. - * nb_graphics_queues indicates how many queues were enabled for the - * graphics queue (must be at least 1) - */ - int queue_family_index; - int nb_graphics_queues; - /** - * Queue family index to use for transfer operations, and the amount of queues - * enabled. In case there is no dedicated transfer queue, nb_tx_queues - * must be 0 and queue_family_tx_index must be the same as either the graphics - * queue or the compute queue, if available. - */ - int queue_family_tx_index; - int nb_tx_queues; - /** - * Queue family index for compute ops, and the amount of queues enabled. - * In case there are no dedicated compute queues, nb_comp_queues must be - * 0 and its queue family index must be set to the graphics queue. - */ - int queue_family_comp_index; - int nb_comp_queues; - /** - * Enabled instance extensions. - * If supplying your own device context, set this to an array of strings, with - * each entry containing the specified Vulkan extension string to enable. - * Duplicates are possible and accepted. - * If no extensions are enabled, set these fields to NULL, and 0 respectively. - */ - const char * const *enabled_inst_extensions; - int nb_enabled_inst_extensions; - /** - * Enabled device extensions. By default, VK_KHR_external_memory_fd, - * VK_EXT_external_memory_dma_buf, VK_EXT_image_drm_format_modifier, - * VK_KHR_external_semaphore_fd and VK_EXT_external_memory_host are enabled if found. - * If supplying your own device context, these fields takes the same format as - * the above fields, with the same conditions that duplicates are possible - * and accepted, and that NULL and 0 respectively means no extensions are enabled. - */ - const char * const *enabled_dev_extensions; - int nb_enabled_dev_extensions; - /** - * This structure should be set to the set of features that present and enabled - * during device creation. When a device is created by FFmpeg, it will default to - * enabling all that are present of the shaderImageGatherExtended, - * fragmentStoresAndAtomics, shaderInt64 and vertexPipelineStoresAndAtomics features. - */ - VkPhysicalDeviceFeatures2 device_features; -} AVVulkanDeviceContext; - -/** - * Allocated as AVHWFramesContext.hwctx, used to set pool-specific options - */ -typedef struct AVVulkanFramesContext { - /** - * Controls the tiling of allocated frames. - */ - VkImageTiling tiling; - /** - * Defines extra usage of output frames. If left as 0, the following bits - * are set: TRANSFER_SRC, TRANSFER_DST. SAMPLED and STORAGE. - */ - VkImageUsageFlagBits usage; - /** - * Extension data for image creation. - */ - void *create_pnext; - /** - * Extension data for memory allocation. Must have as many entries as - * the number of planes of the sw_format. - * This will be chained to VkExportMemoryAllocateInfo, which is used - * to make all pool images exportable to other APIs if the necessary - * extensions are present in enabled_dev_extensions. - */ - void *alloc_pnext[AV_NUM_DATA_POINTERS]; -} AVVulkanFramesContext; - -/* - * Frame structure, the VkFormat of the image will always match - * the pool's sw_format. - * All frames, imported or allocated, will be created with the - * VK_IMAGE_CREATE_ALIAS_BIT flag set, so the memory may be aliased if needed. - * - * If all three queue family indices in the device context are the same, - * images will be created with the EXCLUSIVE sharing mode. Otherwise, all images - * will be created using the CONCURRENT sharing mode. - * - * @note the size of this structure is not part of the ABI, to allocate - * you must use @av_vk_frame_alloc(). - */ -typedef struct AVVkFrame { - /** - * Vulkan images to which the memory is bound to. - */ - VkImage img[AV_NUM_DATA_POINTERS]; - - /** - * The same tiling must be used for all images in the frame. - */ - VkImageTiling tiling; - - /** - * Memory backing the images. Could be less than the amount of images - * if importing from a DRM or VAAPI frame. - */ - VkDeviceMemory mem[AV_NUM_DATA_POINTERS]; - size_t size[AV_NUM_DATA_POINTERS]; - - /** - * OR'd flags for all memory allocated - */ - VkMemoryPropertyFlagBits flags; - - /** - * Updated after every barrier - */ - VkAccessFlagBits access[AV_NUM_DATA_POINTERS]; - VkImageLayout layout[AV_NUM_DATA_POINTERS]; - - /** - * Synchronization semaphores. Must not be freed manually. Must be waited on - * and signalled at every queue submission. - * Could be less than the amount of images: either one per VkDeviceMemory - * or one for the entire frame. All others will be set to VK_NULL_HANDLE. - */ - VkSemaphore sem[AV_NUM_DATA_POINTERS]; - - /** - * Internal data. - */ - struct AVVkFrameInternal *internal; -} AVVkFrame; - -/** - * Allocates a single AVVkFrame and initializes everything as 0. - * @note Must be freed via av_free() - */ -AVVkFrame *av_vk_frame_alloc(void); - -/** - * Returns the format of each image up to the number of planes for a given sw_format. - * Returns NULL on unsupported formats. - */ -const VkFormat *av_vkfmt_from_pixfmt(enum AVPixelFormat p); - -#endif /* AVUTIL_HWCONTEXT_VULKAN_H */ diff --git a/prebuilts/x86/include/libavutil/imgutils.h b/prebuilts/x86/include/libavutil/imgutils.h deleted file mode 100644 index 5eccbf0..0000000 --- a/prebuilts/x86/include/libavutil/imgutils.h +++ /dev/null @@ -1,291 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_IMGUTILS_H -#define AVUTIL_IMGUTILS_H - -/** - * @file - * misc image utilities - * - * @addtogroup lavu_picture - * @{ - */ - -#include "avutil.h" -#include "pixdesc.h" -#include "rational.h" - -/** - * Compute the max pixel step for each plane of an image with a - * format described by pixdesc. - * - * The pixel step is the distance in bytes between the first byte of - * the group of bytes which describe a pixel component and the first - * byte of the successive group in the same plane for the same - * component. - * - * @param max_pixsteps an array which is filled with the max pixel step - * for each plane. Since a plane may contain different pixel - * components, the computed max_pixsteps[plane] is relative to the - * component in the plane with the max pixel step. - * @param max_pixstep_comps an array which is filled with the component - * for each plane which has the max pixel step. May be NULL. - */ -void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4], - const AVPixFmtDescriptor *pixdesc); - -/** - * Compute the size of an image line with format pix_fmt and width - * width for the plane plane. - * - * @return the computed size in bytes - */ -int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane); - -/** - * Fill plane linesizes for an image with pixel format pix_fmt and - * width width. - * - * @param linesizes array to be filled with the linesize for each plane - * @return >= 0 in case of success, a negative error code otherwise - */ -int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width); - -/** - * Fill plane sizes for an image with pixel format pix_fmt and height height. - * - * @param size the array to be filled with the size of each image plane - * @param linesizes the array containing the linesize for each - * plane, should be filled by av_image_fill_linesizes() - * @return >= 0 in case of success, a negative error code otherwise - * - * @note The linesize parameters have the type ptrdiff_t here, while they are - * int for av_image_fill_linesizes(). - */ -int av_image_fill_plane_sizes(size_t size[4], enum AVPixelFormat pix_fmt, - int height, const ptrdiff_t linesizes[4]); - -/** - * Fill plane data pointers for an image with pixel format pix_fmt and - * height height. - * - * @param data pointers array to be filled with the pointer for each image plane - * @param ptr the pointer to a buffer which will contain the image - * @param linesizes the array containing the linesize for each - * plane, should be filled by av_image_fill_linesizes() - * @return the size in bytes required for the image buffer, a negative - * error code in case of failure - */ -int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int height, - uint8_t *ptr, const int linesizes[4]); - -/** - * Allocate an image with size w and h and pixel format pix_fmt, and - * fill pointers and linesizes accordingly. - * The allocated image buffer has to be freed by using - * av_freep(&pointers[0]). - * - * @param align the value to use for buffer size alignment - * @return the size in bytes required for the image buffer, a negative - * error code in case of failure - */ -int av_image_alloc(uint8_t *pointers[4], int linesizes[4], - int w, int h, enum AVPixelFormat pix_fmt, int align); - -/** - * Copy image plane from src to dst. - * That is, copy "height" number of lines of "bytewidth" bytes each. - * The first byte of each successive line is separated by *_linesize - * bytes. - * - * bytewidth must be contained by both absolute values of dst_linesize - * and src_linesize, otherwise the function behavior is undefined. - * - * @param dst_linesize linesize for the image plane in dst - * @param src_linesize linesize for the image plane in src - */ -void av_image_copy_plane(uint8_t *dst, int dst_linesize, - const uint8_t *src, int src_linesize, - int bytewidth, int height); - -/** - * Copy image in src_data to dst_data. - * - * @param dst_linesizes linesizes for the image in dst_data - * @param src_linesizes linesizes for the image in src_data - */ -void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], - const uint8_t *src_data[4], const int src_linesizes[4], - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Copy image data located in uncacheable (e.g. GPU mapped) memory. Where - * available, this function will use special functionality for reading from such - * memory, which may result in greatly improved performance compared to plain - * av_image_copy(). - * - * The data pointers and the linesizes must be aligned to the maximum required - * by the CPU architecture. - * - * @note The linesize parameters have the type ptrdiff_t here, while they are - * int for av_image_copy(). - * @note On x86, the linesizes currently need to be aligned to the cacheline - * size (i.e. 64) to get improved performance. - */ -void av_image_copy_uc_from(uint8_t *dst_data[4], const ptrdiff_t dst_linesizes[4], - const uint8_t *src_data[4], const ptrdiff_t src_linesizes[4], - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Setup the data pointers and linesizes based on the specified image - * parameters and the provided array. - * - * The fields of the given image are filled in by using the src - * address which points to the image data buffer. Depending on the - * specified pixel format, one or multiple image data pointers and - * line sizes will be set. If a planar format is specified, several - * pointers will be set pointing to the different picture planes and - * the line sizes of the different planes will be stored in the - * lines_sizes array. Call with src == NULL to get the required - * size for the src buffer. - * - * To allocate the buffer and fill in the dst_data and dst_linesize in - * one call, use av_image_alloc(). - * - * @param dst_data data pointers to be filled in - * @param dst_linesize linesizes for the image in dst_data to be filled in - * @param src buffer which will contain or contains the actual image data, can be NULL - * @param pix_fmt the pixel format of the image - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @param align the value used in src for linesize alignment - * @return the size in bytes required for src, a negative error code - * in case of failure - */ -int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], - const uint8_t *src, - enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Return the size in bytes of the amount of data required to store an - * image with the given parameters. - * - * @param pix_fmt the pixel format of the image - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @param align the assumed linesize alignment - * @return the buffer size in bytes, a negative error code in case of failure - */ -int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Copy image data from an image into a buffer. - * - * av_image_get_buffer_size() can be used to compute the required size - * for the buffer to fill. - * - * @param dst a buffer into which picture data will be copied - * @param dst_size the size in bytes of dst - * @param src_data pointers containing the source image data - * @param src_linesize linesizes for the image in src_data - * @param pix_fmt the pixel format of the source image - * @param width the width of the source image in pixels - * @param height the height of the source image in pixels - * @param align the assumed linesize alignment for dst - * @return the number of bytes written to dst, or a negative value - * (error code) on error - */ -int av_image_copy_to_buffer(uint8_t *dst, int dst_size, - const uint8_t * const src_data[4], const int src_linesize[4], - enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Check if the given dimension of an image is valid, meaning that all - * bytes of the image can be addressed with a signed int. - * - * @param w the width of the picture - * @param h the height of the picture - * @param log_offset the offset to sum to the log level for logging with log_ctx - * @param log_ctx the parent logging context, it may be NULL - * @return >= 0 if valid, a negative error code otherwise - */ -int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx); - -/** - * Check if the given dimension of an image is valid, meaning that all - * bytes of a plane of an image with the specified pix_fmt can be addressed - * with a signed int. - * - * @param w the width of the picture - * @param h the height of the picture - * @param max_pixels the maximum number of pixels the user wants to accept - * @param pix_fmt the pixel format, can be AV_PIX_FMT_NONE if unknown. - * @param log_offset the offset to sum to the log level for logging with log_ctx - * @param log_ctx the parent logging context, it may be NULL - * @return >= 0 if valid, a negative error code otherwise - */ -int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx); - -/** - * Check if the given sample aspect ratio of an image is valid. - * - * It is considered invalid if the denominator is 0 or if applying the ratio - * to the image size would make the smaller dimension less than 1. If the - * sar numerator is 0, it is considered unknown and will return as valid. - * - * @param w width of the image - * @param h height of the image - * @param sar sample aspect ratio of the image - * @return 0 if valid, a negative AVERROR code otherwise - */ -int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar); - -/** - * Overwrite the image data with black. This is suitable for filling a - * sub-rectangle of an image, meaning the padding between the right most pixel - * and the left most pixel on the next line will not be overwritten. For some - * formats, the image size might be rounded up due to inherent alignment. - * - * If the pixel format has alpha, the alpha is cleared to opaque. - * - * This can return an error if the pixel format is not supported. Normally, all - * non-hwaccel pixel formats should be supported. - * - * Passing NULL for dst_data is allowed. Then the function returns whether the - * operation would have succeeded. (It can return an error if the pix_fmt is - * not supported.) - * - * @param dst_data data pointers to destination image - * @param dst_linesize linesizes for the destination image - * @param pix_fmt the pixel format of the image - * @param range the color range of the image (important for colorspaces such as YUV) - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @return 0 if the image data was cleared, a negative AVERROR code otherwise - */ -int av_image_fill_black(uint8_t *dst_data[4], const ptrdiff_t dst_linesize[4], - enum AVPixelFormat pix_fmt, enum AVColorRange range, - int width, int height); - -/** - * @} - */ - - -#endif /* AVUTIL_IMGUTILS_H */ diff --git a/prebuilts/x86/include/libavutil/intfloat.h b/prebuilts/x86/include/libavutil/intfloat.h deleted file mode 100644 index fe3d7ec..0000000 --- a/prebuilts/x86/include/libavutil/intfloat.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2011 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_INTFLOAT_H -#define AVUTIL_INTFLOAT_H - -#include -#include "attributes.h" - -union av_intfloat32 { - uint32_t i; - float f; -}; - -union av_intfloat64 { - uint64_t i; - double f; -}; - -/** - * Reinterpret a 32-bit integer as a float. - */ -static av_always_inline float av_int2float(uint32_t i) -{ - union av_intfloat32 v; - v.i = i; - return v.f; -} - -/** - * Reinterpret a float as a 32-bit integer. - */ -static av_always_inline uint32_t av_float2int(float f) -{ - union av_intfloat32 v; - v.f = f; - return v.i; -} - -/** - * Reinterpret a 64-bit integer as a double. - */ -static av_always_inline double av_int2double(uint64_t i) -{ - union av_intfloat64 v; - v.i = i; - return v.f; -} - -/** - * Reinterpret a double as a 64-bit integer. - */ -static av_always_inline uint64_t av_double2int(double f) -{ - union av_intfloat64 v; - v.f = f; - return v.i; -} - -#endif /* AVUTIL_INTFLOAT_H */ diff --git a/prebuilts/x86/include/libavutil/intreadwrite.h b/prebuilts/x86/include/libavutil/intreadwrite.h deleted file mode 100644 index 4c8413a..0000000 --- a/prebuilts/x86/include/libavutil/intreadwrite.h +++ /dev/null @@ -1,644 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_INTREADWRITE_H -#define AVUTIL_INTREADWRITE_H - -#include -#include "libavutil/avconfig.h" -#include "attributes.h" -#include "bswap.h" - -typedef union { - uint64_t u64; - uint32_t u32[2]; - uint16_t u16[4]; - uint8_t u8 [8]; - double f64; - float f32[2]; -} av_alias av_alias64; - -typedef union { - uint32_t u32; - uint16_t u16[2]; - uint8_t u8 [4]; - float f32; -} av_alias av_alias32; - -typedef union { - uint16_t u16; - uint8_t u8 [2]; -} av_alias av_alias16; - -/* - * Arch-specific headers can provide any combination of - * AV_[RW][BLN](16|24|32|48|64) and AV_(COPY|SWAP|ZERO)(64|128) macros. - * Preprocessor symbols must be defined, even if these are implemented - * as inline functions. - * - * R/W means read/write, B/L/N means big/little/native endianness. - * The following macros require aligned access, compared to their - * unaligned variants: AV_(COPY|SWAP|ZERO)(64|128), AV_[RW]N[8-64]A. - * Incorrect usage may range from abysmal performance to crash - * depending on the platform. - * - * The unaligned variants are AV_[RW][BLN][8-64] and AV_COPY*U. - */ - -#ifdef HAVE_AV_CONFIG_H - -#include "config.h" - -#if ARCH_ARM -# include "arm/intreadwrite.h" -#elif ARCH_AVR32 -# include "avr32/intreadwrite.h" -#elif ARCH_MIPS -# include "mips/intreadwrite.h" -#elif ARCH_PPC -# include "ppc/intreadwrite.h" -#elif ARCH_TOMI -# include "tomi/intreadwrite.h" -#elif ARCH_X86 -# include "x86/intreadwrite.h" -#endif - -#endif /* HAVE_AV_CONFIG_H */ - -/* - * Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers. - */ - -#if AV_HAVE_BIGENDIAN - -# if defined(AV_RN16) && !defined(AV_RB16) -# define AV_RB16(p) AV_RN16(p) -# elif !defined(AV_RN16) && defined(AV_RB16) -# define AV_RN16(p) AV_RB16(p) -# endif - -# if defined(AV_WN16) && !defined(AV_WB16) -# define AV_WB16(p, v) AV_WN16(p, v) -# elif !defined(AV_WN16) && defined(AV_WB16) -# define AV_WN16(p, v) AV_WB16(p, v) -# endif - -# if defined(AV_RN24) && !defined(AV_RB24) -# define AV_RB24(p) AV_RN24(p) -# elif !defined(AV_RN24) && defined(AV_RB24) -# define AV_RN24(p) AV_RB24(p) -# endif - -# if defined(AV_WN24) && !defined(AV_WB24) -# define AV_WB24(p, v) AV_WN24(p, v) -# elif !defined(AV_WN24) && defined(AV_WB24) -# define AV_WN24(p, v) AV_WB24(p, v) -# endif - -# if defined(AV_RN32) && !defined(AV_RB32) -# define AV_RB32(p) AV_RN32(p) -# elif !defined(AV_RN32) && defined(AV_RB32) -# define AV_RN32(p) AV_RB32(p) -# endif - -# if defined(AV_WN32) && !defined(AV_WB32) -# define AV_WB32(p, v) AV_WN32(p, v) -# elif !defined(AV_WN32) && defined(AV_WB32) -# define AV_WN32(p, v) AV_WB32(p, v) -# endif - -# if defined(AV_RN48) && !defined(AV_RB48) -# define AV_RB48(p) AV_RN48(p) -# elif !defined(AV_RN48) && defined(AV_RB48) -# define AV_RN48(p) AV_RB48(p) -# endif - -# if defined(AV_WN48) && !defined(AV_WB48) -# define AV_WB48(p, v) AV_WN48(p, v) -# elif !defined(AV_WN48) && defined(AV_WB48) -# define AV_WN48(p, v) AV_WB48(p, v) -# endif - -# if defined(AV_RN64) && !defined(AV_RB64) -# define AV_RB64(p) AV_RN64(p) -# elif !defined(AV_RN64) && defined(AV_RB64) -# define AV_RN64(p) AV_RB64(p) -# endif - -# if defined(AV_WN64) && !defined(AV_WB64) -# define AV_WB64(p, v) AV_WN64(p, v) -# elif !defined(AV_WN64) && defined(AV_WB64) -# define AV_WN64(p, v) AV_WB64(p, v) -# endif - -#else /* AV_HAVE_BIGENDIAN */ - -# if defined(AV_RN16) && !defined(AV_RL16) -# define AV_RL16(p) AV_RN16(p) -# elif !defined(AV_RN16) && defined(AV_RL16) -# define AV_RN16(p) AV_RL16(p) -# endif - -# if defined(AV_WN16) && !defined(AV_WL16) -# define AV_WL16(p, v) AV_WN16(p, v) -# elif !defined(AV_WN16) && defined(AV_WL16) -# define AV_WN16(p, v) AV_WL16(p, v) -# endif - -# if defined(AV_RN24) && !defined(AV_RL24) -# define AV_RL24(p) AV_RN24(p) -# elif !defined(AV_RN24) && defined(AV_RL24) -# define AV_RN24(p) AV_RL24(p) -# endif - -# if defined(AV_WN24) && !defined(AV_WL24) -# define AV_WL24(p, v) AV_WN24(p, v) -# elif !defined(AV_WN24) && defined(AV_WL24) -# define AV_WN24(p, v) AV_WL24(p, v) -# endif - -# if defined(AV_RN32) && !defined(AV_RL32) -# define AV_RL32(p) AV_RN32(p) -# elif !defined(AV_RN32) && defined(AV_RL32) -# define AV_RN32(p) AV_RL32(p) -# endif - -# if defined(AV_WN32) && !defined(AV_WL32) -# define AV_WL32(p, v) AV_WN32(p, v) -# elif !defined(AV_WN32) && defined(AV_WL32) -# define AV_WN32(p, v) AV_WL32(p, v) -# endif - -# if defined(AV_RN48) && !defined(AV_RL48) -# define AV_RL48(p) AV_RN48(p) -# elif !defined(AV_RN48) && defined(AV_RL48) -# define AV_RN48(p) AV_RL48(p) -# endif - -# if defined(AV_WN48) && !defined(AV_WL48) -# define AV_WL48(p, v) AV_WN48(p, v) -# elif !defined(AV_WN48) && defined(AV_WL48) -# define AV_WN48(p, v) AV_WL48(p, v) -# endif - -# if defined(AV_RN64) && !defined(AV_RL64) -# define AV_RL64(p) AV_RN64(p) -# elif !defined(AV_RN64) && defined(AV_RL64) -# define AV_RN64(p) AV_RL64(p) -# endif - -# if defined(AV_WN64) && !defined(AV_WL64) -# define AV_WL64(p, v) AV_WN64(p, v) -# elif !defined(AV_WN64) && defined(AV_WL64) -# define AV_WN64(p, v) AV_WL64(p, v) -# endif - -#endif /* !AV_HAVE_BIGENDIAN */ - -/* - * Define AV_[RW]N helper macros to simplify definitions not provided - * by per-arch headers. - */ - -#if defined(__GNUC__) - -union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias; -union unaligned_32 { uint32_t l; } __attribute__((packed)) av_alias; -union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; - -# define AV_RN(s, p) (((const union unaligned_##s *) (p))->l) -# define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v)) - -#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_X64) || defined(_M_ARM64)) && AV_HAVE_FAST_UNALIGNED - -# define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p))) -# define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v)) - -#elif AV_HAVE_FAST_UNALIGNED - -# define AV_RN(s, p) (((const av_alias##s*)(p))->u##s) -# define AV_WN(s, p, v) (((av_alias##s*)(p))->u##s = (v)) - -#else - -#ifndef AV_RB16 -# define AV_RB16(x) \ - ((((const uint8_t*)(x))[0] << 8) | \ - ((const uint8_t*)(x))[1]) -#endif -#ifndef AV_WB16 -# define AV_WB16(p, val) do { \ - uint16_t d = (val); \ - ((uint8_t*)(p))[1] = (d); \ - ((uint8_t*)(p))[0] = (d)>>8; \ - } while(0) -#endif - -#ifndef AV_RL16 -# define AV_RL16(x) \ - ((((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL16 -# define AV_WL16(p, val) do { \ - uint16_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - } while(0) -#endif - -#ifndef AV_RB32 -# define AV_RB32(x) \ - (((uint32_t)((const uint8_t*)(x))[0] << 24) | \ - (((const uint8_t*)(x))[1] << 16) | \ - (((const uint8_t*)(x))[2] << 8) | \ - ((const uint8_t*)(x))[3]) -#endif -#ifndef AV_WB32 -# define AV_WB32(p, val) do { \ - uint32_t d = (val); \ - ((uint8_t*)(p))[3] = (d); \ - ((uint8_t*)(p))[2] = (d)>>8; \ - ((uint8_t*)(p))[1] = (d)>>16; \ - ((uint8_t*)(p))[0] = (d)>>24; \ - } while(0) -#endif - -#ifndef AV_RL32 -# define AV_RL32(x) \ - (((uint32_t)((const uint8_t*)(x))[3] << 24) | \ - (((const uint8_t*)(x))[2] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL32 -# define AV_WL32(p, val) do { \ - uint32_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - } while(0) -#endif - -#ifndef AV_RB64 -# define AV_RB64(x) \ - (((uint64_t)((const uint8_t*)(x))[0] << 56) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 48) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[5] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[6] << 8) | \ - (uint64_t)((const uint8_t*)(x))[7]) -#endif -#ifndef AV_WB64 -# define AV_WB64(p, val) do { \ - uint64_t d = (val); \ - ((uint8_t*)(p))[7] = (d); \ - ((uint8_t*)(p))[6] = (d)>>8; \ - ((uint8_t*)(p))[5] = (d)>>16; \ - ((uint8_t*)(p))[4] = (d)>>24; \ - ((uint8_t*)(p))[3] = (d)>>32; \ - ((uint8_t*)(p))[2] = (d)>>40; \ - ((uint8_t*)(p))[1] = (d)>>48; \ - ((uint8_t*)(p))[0] = (d)>>56; \ - } while(0) -#endif - -#ifndef AV_RL64 -# define AV_RL64(x) \ - (((uint64_t)((const uint8_t*)(x))[7] << 56) | \ - ((uint64_t)((const uint8_t*)(x))[6] << 48) | \ - ((uint64_t)((const uint8_t*)(x))[5] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ - (uint64_t)((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL64 -# define AV_WL64(p, val) do { \ - uint64_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - ((uint8_t*)(p))[4] = (d)>>32; \ - ((uint8_t*)(p))[5] = (d)>>40; \ - ((uint8_t*)(p))[6] = (d)>>48; \ - ((uint8_t*)(p))[7] = (d)>>56; \ - } while(0) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RN(s, p) AV_RB##s(p) -# define AV_WN(s, p, v) AV_WB##s(p, v) -#else -# define AV_RN(s, p) AV_RL##s(p) -# define AV_WN(s, p, v) AV_WL##s(p, v) -#endif - -#endif /* HAVE_FAST_UNALIGNED */ - -#ifndef AV_RN16 -# define AV_RN16(p) AV_RN(16, p) -#endif - -#ifndef AV_RN32 -# define AV_RN32(p) AV_RN(32, p) -#endif - -#ifndef AV_RN64 -# define AV_RN64(p) AV_RN(64, p) -#endif - -#ifndef AV_WN16 -# define AV_WN16(p, v) AV_WN(16, p, v) -#endif - -#ifndef AV_WN32 -# define AV_WN32(p, v) AV_WN(32, p, v) -#endif - -#ifndef AV_WN64 -# define AV_WN64(p, v) AV_WN(64, p, v) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RB(s, p) AV_RN##s(p) -# define AV_WB(s, p, v) AV_WN##s(p, v) -# define AV_RL(s, p) av_bswap##s(AV_RN##s(p)) -# define AV_WL(s, p, v) AV_WN##s(p, av_bswap##s(v)) -#else -# define AV_RB(s, p) av_bswap##s(AV_RN##s(p)) -# define AV_WB(s, p, v) AV_WN##s(p, av_bswap##s(v)) -# define AV_RL(s, p) AV_RN##s(p) -# define AV_WL(s, p, v) AV_WN##s(p, v) -#endif - -#define AV_RB8(x) (((const uint8_t*)(x))[0]) -#define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0) - -#define AV_RL8(x) AV_RB8(x) -#define AV_WL8(p, d) AV_WB8(p, d) - -#ifndef AV_RB16 -# define AV_RB16(p) AV_RB(16, p) -#endif -#ifndef AV_WB16 -# define AV_WB16(p, v) AV_WB(16, p, v) -#endif - -#ifndef AV_RL16 -# define AV_RL16(p) AV_RL(16, p) -#endif -#ifndef AV_WL16 -# define AV_WL16(p, v) AV_WL(16, p, v) -#endif - -#ifndef AV_RB32 -# define AV_RB32(p) AV_RB(32, p) -#endif -#ifndef AV_WB32 -# define AV_WB32(p, v) AV_WB(32, p, v) -#endif - -#ifndef AV_RL32 -# define AV_RL32(p) AV_RL(32, p) -#endif -#ifndef AV_WL32 -# define AV_WL32(p, v) AV_WL(32, p, v) -#endif - -#ifndef AV_RB64 -# define AV_RB64(p) AV_RB(64, p) -#endif -#ifndef AV_WB64 -# define AV_WB64(p, v) AV_WB(64, p, v) -#endif - -#ifndef AV_RL64 -# define AV_RL64(p) AV_RL(64, p) -#endif -#ifndef AV_WL64 -# define AV_WL64(p, v) AV_WL(64, p, v) -#endif - -#ifndef AV_RB24 -# define AV_RB24(x) \ - ((((const uint8_t*)(x))[0] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[2]) -#endif -#ifndef AV_WB24 -# define AV_WB24(p, d) do { \ - ((uint8_t*)(p))[2] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[0] = (d)>>16; \ - } while(0) -#endif - -#ifndef AV_RL24 -# define AV_RL24(x) \ - ((((const uint8_t*)(x))[2] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL24 -# define AV_WL24(p, d) do { \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - } while(0) -#endif - -#ifndef AV_RB48 -# define AV_RB48(x) \ - (((uint64_t)((const uint8_t*)(x))[0] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 8) | \ - (uint64_t)((const uint8_t*)(x))[5]) -#endif -#ifndef AV_WB48 -# define AV_WB48(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[5] = (d); \ - ((uint8_t*)(p))[4] = (d)>>8; \ - ((uint8_t*)(p))[3] = (d)>>16; \ - ((uint8_t*)(p))[2] = (d)>>24; \ - ((uint8_t*)(p))[1] = (d)>>32; \ - ((uint8_t*)(p))[0] = (d)>>40; \ - } while(0) -#endif - -#ifndef AV_RL48 -# define AV_RL48(x) \ - (((uint64_t)((const uint8_t*)(x))[5] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ - (uint64_t)((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL48 -# define AV_WL48(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - ((uint8_t*)(p))[4] = (d)>>32; \ - ((uint8_t*)(p))[5] = (d)>>40; \ - } while(0) -#endif - -/* - * The AV_[RW]NA macros access naturally aligned data - * in a type-safe way. - */ - -#define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s) -#define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v)) - -#ifndef AV_RN16A -# define AV_RN16A(p) AV_RNA(16, p) -#endif - -#ifndef AV_RN32A -# define AV_RN32A(p) AV_RNA(32, p) -#endif - -#ifndef AV_RN64A -# define AV_RN64A(p) AV_RNA(64, p) -#endif - -#ifndef AV_WN16A -# define AV_WN16A(p, v) AV_WNA(16, p, v) -#endif - -#ifndef AV_WN32A -# define AV_WN32A(p, v) AV_WNA(32, p, v) -#endif - -#ifndef AV_WN64A -# define AV_WN64A(p, v) AV_WNA(64, p, v) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RLA(s, p) av_bswap##s(AV_RN##s##A(p)) -# define AV_WLA(s, p, v) AV_WN##s##A(p, av_bswap##s(v)) -#else -# define AV_RLA(s, p) AV_RN##s##A(p) -# define AV_WLA(s, p, v) AV_WN##s##A(p, v) -#endif - -#ifndef AV_RL64A -# define AV_RL64A(p) AV_RLA(64, p) -#endif -#ifndef AV_WL64A -# define AV_WL64A(p, v) AV_WLA(64, p, v) -#endif - -/* - * The AV_COPYxxU macros are suitable for copying data to/from unaligned - * memory locations. - */ - -#define AV_COPYU(n, d, s) AV_WN##n(d, AV_RN##n(s)); - -#ifndef AV_COPY16U -# define AV_COPY16U(d, s) AV_COPYU(16, d, s) -#endif - -#ifndef AV_COPY32U -# define AV_COPY32U(d, s) AV_COPYU(32, d, s) -#endif - -#ifndef AV_COPY64U -# define AV_COPY64U(d, s) AV_COPYU(64, d, s) -#endif - -#ifndef AV_COPY128U -# define AV_COPY128U(d, s) \ - do { \ - AV_COPY64U(d, s); \ - AV_COPY64U((char *)(d) + 8, (const char *)(s) + 8); \ - } while(0) -#endif - -/* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be - * naturally aligned. They may be implemented using MMX, - * so emms_c() must be called before using any float code - * afterwards. - */ - -#define AV_COPY(n, d, s) \ - (((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n) - -#ifndef AV_COPY16 -# define AV_COPY16(d, s) AV_COPY(16, d, s) -#endif - -#ifndef AV_COPY32 -# define AV_COPY32(d, s) AV_COPY(32, d, s) -#endif - -#ifndef AV_COPY64 -# define AV_COPY64(d, s) AV_COPY(64, d, s) -#endif - -#ifndef AV_COPY128 -# define AV_COPY128(d, s) \ - do { \ - AV_COPY64(d, s); \ - AV_COPY64((char*)(d)+8, (char*)(s)+8); \ - } while(0) -#endif - -#define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*)(b)) - -#ifndef AV_SWAP64 -# define AV_SWAP64(a, b) AV_SWAP(64, a, b) -#endif - -#define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0) - -#ifndef AV_ZERO16 -# define AV_ZERO16(d) AV_ZERO(16, d) -#endif - -#ifndef AV_ZERO32 -# define AV_ZERO32(d) AV_ZERO(32, d) -#endif - -#ifndef AV_ZERO64 -# define AV_ZERO64(d) AV_ZERO(64, d) -#endif - -#ifndef AV_ZERO128 -# define AV_ZERO128(d) \ - do { \ - AV_ZERO64(d); \ - AV_ZERO64((char*)(d)+8); \ - } while(0) -#endif - -#endif /* AVUTIL_INTREADWRITE_H */ diff --git a/prebuilts/x86/include/libavutil/lfg.h b/prebuilts/x86/include/libavutil/lfg.h deleted file mode 100644 index 2b66920..0000000 --- a/prebuilts/x86/include/libavutil/lfg.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Lagged Fibonacci PRNG - * Copyright (c) 2008 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LFG_H -#define AVUTIL_LFG_H - -#include - -/** - * Context structure for the Lagged Fibonacci PRNG. - * The exact layout, types and content of this struct may change and should - * not be accessed directly. Only its sizeof() is guranteed to stay the same - * to allow easy instanciation. - */ -typedef struct AVLFG { - unsigned int state[64]; - int index; -} AVLFG; - -void av_lfg_init(AVLFG *c, unsigned int seed); - -/** - * Seed the state of the ALFG using binary data. - * - * Return value: 0 on success, negative value (AVERROR) on failure. - */ -int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length); - -/** - * Get the next random unsigned 32-bit number using an ALFG. - * - * Please also consider a simple LCG like state= state*1664525+1013904223, - * it may be good enough and faster for your specific use case. - */ -static inline unsigned int av_lfg_get(AVLFG *c){ - unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63]; - c->index += 1U; - return a; -} - -/** - * Get the next random unsigned 32-bit number using a MLFG. - * - * Please also consider av_lfg_get() above, it is faster. - */ -static inline unsigned int av_mlfg_get(AVLFG *c){ - unsigned int a= c->state[(c->index-55) & 63]; - unsigned int b= c->state[(c->index-24) & 63]; - a = c->state[c->index & 63] = 2*a*b+a+b; - c->index += 1U; - return a; -} - -/** - * Get the next two numbers generated by a Box-Muller Gaussian - * generator using the random numbers issued by lfg. - * - * @param out array where the two generated numbers are placed - */ -void av_bmg_get(AVLFG *lfg, double out[2]); - -#endif /* AVUTIL_LFG_H */ diff --git a/prebuilts/x86/include/libavutil/log.h b/prebuilts/x86/include/libavutil/log.h deleted file mode 100644 index 8edd6bb..0000000 --- a/prebuilts/x86/include/libavutil/log.h +++ /dev/null @@ -1,401 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LOG_H -#define AVUTIL_LOG_H - -#include -#include "avutil.h" -#include "attributes.h" -#include "version.h" - -typedef enum { - AV_CLASS_CATEGORY_NA = 0, - AV_CLASS_CATEGORY_INPUT, - AV_CLASS_CATEGORY_OUTPUT, - AV_CLASS_CATEGORY_MUXER, - AV_CLASS_CATEGORY_DEMUXER, - AV_CLASS_CATEGORY_ENCODER, - AV_CLASS_CATEGORY_DECODER, - AV_CLASS_CATEGORY_FILTER, - AV_CLASS_CATEGORY_BITSTREAM_FILTER, - AV_CLASS_CATEGORY_SWSCALER, - AV_CLASS_CATEGORY_SWRESAMPLER, - AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT = 40, - AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, - AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, - AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT, - AV_CLASS_CATEGORY_DEVICE_OUTPUT, - AV_CLASS_CATEGORY_DEVICE_INPUT, - AV_CLASS_CATEGORY_NB ///< not part of ABI/API -}AVClassCategory; - -#define AV_IS_INPUT_DEVICE(category) \ - (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_INPUT)) - -#define AV_IS_OUTPUT_DEVICE(category) \ - (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_OUTPUT)) - -struct AVOptionRanges; - -/** - * Describe the class of an AVClass context structure. That is an - * arbitrary struct of which the first field is a pointer to an - * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). - */ -typedef struct AVClass { - /** - * The name of the class; usually it is the same name as the - * context structure type to which the AVClass is associated. - */ - const char* class_name; - - /** - * A pointer to a function which returns the name of a context - * instance ctx associated with the class. - */ - const char* (*item_name)(void* ctx); - - /** - * a pointer to the first option specified in the class if any or NULL - * - * @see av_set_default_options() - */ - const struct AVOption *option; - - /** - * LIBAVUTIL_VERSION with which this structure was created. - * This is used to allow fields to be added without requiring major - * version bumps everywhere. - */ - - int version; - - /** - * Offset in the structure where log_level_offset is stored. - * 0 means there is no such variable - */ - int log_level_offset_offset; - - /** - * Offset in the structure where a pointer to the parent context for - * logging is stored. For example a decoder could pass its AVCodecContext - * to eval as such a parent context, which an av_log() implementation - * could then leverage to display the parent context. - * The offset can be NULL. - */ - int parent_log_context_offset; - - /** - * Return next AVOptions-enabled child or NULL - */ - void* (*child_next)(void *obj, void *prev); - -#if FF_API_CHILD_CLASS_NEXT - /** - * Return an AVClass corresponding to the next potential - * AVOptions-enabled child. - * - * The difference between child_next and this is that - * child_next iterates over _already existing_ objects, while - * child_class_next iterates over _all possible_ children. - */ - attribute_deprecated - const struct AVClass* (*child_class_next)(const struct AVClass *prev); -#endif - - /** - * Category used for visualization (like color) - * This is only set if the category is equal for all objects using this class. - * available since version (51 << 16 | 56 << 8 | 100) - */ - AVClassCategory category; - - /** - * Callback to return the category. - * available since version (51 << 16 | 59 << 8 | 100) - */ - AVClassCategory (*get_category)(void* ctx); - - /** - * Callback to return the supported/allowed ranges. - * available since version (52.12) - */ - int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags); - - /** - * Iterate over the AVClasses corresponding to potential AVOptions-enabled - * children. - * - * @param iter pointer to opaque iteration state. The caller must initialize - * *iter to NULL before the first call. - * @return AVClass for the next AVOptions-enabled child or NULL if there are - * no more such children. - * - * @note The difference between child_next and this is that child_next - * iterates over _already existing_ objects, while child_class_iterate - * iterates over _all possible_ children. - */ - const struct AVClass* (*child_class_iterate)(void **iter); -} AVClass; - -/** - * @addtogroup lavu_log - * - * @{ - * - * @defgroup lavu_log_constants Logging Constants - * - * @{ - */ - -/** - * Print no output. - */ -#define AV_LOG_QUIET -8 - -/** - * Something went really wrong and we will crash now. - */ -#define AV_LOG_PANIC 0 - -/** - * Something went wrong and recovery is not possible. - * For example, no header was found for a format which depends - * on headers or an illegal combination of parameters is used. - */ -#define AV_LOG_FATAL 8 - -/** - * Something went wrong and cannot losslessly be recovered. - * However, not all future data is affected. - */ -#define AV_LOG_ERROR 16 - -/** - * Something somehow does not look correct. This may or may not - * lead to problems. An example would be the use of '-vstrict -2'. - */ -#define AV_LOG_WARNING 24 - -/** - * Standard information. - */ -#define AV_LOG_INFO 32 - -/** - * Detailed information. - */ -#define AV_LOG_VERBOSE 40 - -/** - * Stuff which is only useful for libav* developers. - */ -#define AV_LOG_DEBUG 48 - -/** - * Extremely verbose debugging, useful for libav* development. - */ -#define AV_LOG_TRACE 56 - -#define AV_LOG_MAX_OFFSET (AV_LOG_TRACE - AV_LOG_QUIET) - -/** - * @} - */ - -/** - * Sets additional colors for extended debugging sessions. - * @code - av_log(ctx, AV_LOG_DEBUG|AV_LOG_C(134), "Message in purple\n"); - @endcode - * Requires 256color terminal support. Uses outside debugging is not - * recommended. - */ -#define AV_LOG_C(x) ((x) << 8) - -/** - * Send the specified message to the log if the level is less than or equal - * to the current av_log_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log_set_callback - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct or NULL if general log. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - */ -void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4); - -/** - * Send the specified message to the log once with the initial_level and then with - * the subsequent_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct or NULL if general log. - * @param initial_level importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant" for the first occurance. - * @param subsequent_level importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant" after the first occurance. - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param state a variable to keep trak of if a message has already been printed - * this must be initialized to 0 before the first use. The same state - * must not be accessed by 2 Threads simultaneously. - */ -void av_log_once(void* avcl, int initial_level, int subsequent_level, int *state, const char *fmt, ...) av_printf_format(5, 6); - - -/** - * Send the specified message to the log if the level is less than or equal - * to the current av_log_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log_set_callback - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param vl The arguments referenced by the format string. - */ -void av_vlog(void *avcl, int level, const char *fmt, va_list vl); - -/** - * Get the current log level - * - * @see lavu_log_constants - * - * @return Current log level - */ -int av_log_get_level(void); - -/** - * Set the log level - * - * @see lavu_log_constants - * - * @param level Logging level - */ -void av_log_set_level(int level); - -/** - * Set the logging callback - * - * @note The callback must be thread safe, even if the application does not use - * threads itself as some codecs are multithreaded. - * - * @see av_log_default_callback - * - * @param callback A logging function with a compatible signature. - */ -void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)); - -/** - * Default logging callback - * - * It prints the message to stderr, optionally colorizing it. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param vl The arguments referenced by the format string. - */ -void av_log_default_callback(void *avcl, int level, const char *fmt, - va_list vl); - -/** - * Return the context name - * - * @param ctx The AVClass context - * - * @return The AVClass class_name - */ -const char* av_default_item_name(void* ctx); -AVClassCategory av_default_get_category(void *ptr); - -/** - * Format a line of log the same way as the default callback. - * @param line buffer to receive the formatted line - * @param line_size size of the buffer - * @param print_prefix used to store whether the prefix must be printed; - * must point to a persistent integer initially set to 1 - */ -void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl, - char *line, int line_size, int *print_prefix); - -/** - * Format a line of log the same way as the default callback. - * @param line buffer to receive the formatted line; - * may be NULL if line_size is 0 - * @param line_size size of the buffer; at most line_size-1 characters will - * be written to the buffer, plus one null terminator - * @param print_prefix used to store whether the prefix must be printed; - * must point to a persistent integer initially set to 1 - * @return Returns a negative value if an error occurred, otherwise returns - * the number of characters that would have been written for a - * sufficiently large buffer, not including the terminating null - * character. If the return value is not less than line_size, it means - * that the log message was truncated to fit the buffer. - */ -int av_log_format_line2(void *ptr, int level, const char *fmt, va_list vl, - char *line, int line_size, int *print_prefix); - -/** - * Skip repeated messages, this requires the user app to use av_log() instead of - * (f)printf as the 2 would otherwise interfere and lead to - * "Last message repeated x times" messages below (f)printf messages with some - * bad luck. - * Also to receive the last, "last repeated" line if any, the user app must - * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end - */ -#define AV_LOG_SKIP_REPEATED 1 - -/** - * Include the log severity in messages originating from codecs. - * - * Results in messages such as: - * [rawvideo @ 0xDEADBEEF] [error] encode did not produce valid pts - */ -#define AV_LOG_PRINT_LEVEL 2 - -void av_log_set_flags(int arg); -int av_log_get_flags(void); - -/** - * @} - */ - -#endif /* AVUTIL_LOG_H */ diff --git a/prebuilts/x86/include/libavutil/lzo.h b/prebuilts/x86/include/libavutil/lzo.h deleted file mode 100644 index c034039..0000000 --- a/prebuilts/x86/include/libavutil/lzo.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * LZO 1x decompression - * copyright (c) 2006 Reimar Doeffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LZO_H -#define AVUTIL_LZO_H - -/** - * @defgroup lavu_lzo LZO - * @ingroup lavu_crypto - * - * @{ - */ - -#include - -/** @name Error flags returned by av_lzo1x_decode - * @{ */ -/// end of the input buffer reached before decoding finished -#define AV_LZO_INPUT_DEPLETED 1 -/// decoded data did not fit into output buffer -#define AV_LZO_OUTPUT_FULL 2 -/// a reference to previously decoded data was wrong -#define AV_LZO_INVALID_BACKPTR 4 -/// a non-specific error in the compressed bitstream -#define AV_LZO_ERROR 8 -/** @} */ - -#define AV_LZO_INPUT_PADDING 8 -#define AV_LZO_OUTPUT_PADDING 12 - -/** - * @brief Decodes LZO 1x compressed data. - * @param out output buffer - * @param outlen size of output buffer, number of bytes left are returned here - * @param in input buffer - * @param inlen size of input buffer, number of bytes left are returned here - * @return 0 on success, otherwise a combination of the error flags above - * - * Make sure all buffers are appropriately padded, in must provide - * AV_LZO_INPUT_PADDING, out must provide AV_LZO_OUTPUT_PADDING additional bytes. - */ -int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen); - -/** - * @} - */ - -#endif /* AVUTIL_LZO_H */ diff --git a/prebuilts/x86/include/libavutil/macros.h b/prebuilts/x86/include/libavutil/macros.h deleted file mode 100644 index 2007ee5..0000000 --- a/prebuilts/x86/include/libavutil/macros.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu - * Utility Preprocessor macros - */ - -#ifndef AVUTIL_MACROS_H -#define AVUTIL_MACROS_H - -/** - * @addtogroup preproc_misc Preprocessor String Macros - * - * 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)) - -#endif /* AVUTIL_MACROS_H */ diff --git a/prebuilts/x86/include/libavutil/mastering_display_metadata.h b/prebuilts/x86/include/libavutil/mastering_display_metadata.h deleted file mode 100644 index c23b07c..0000000 --- a/prebuilts/x86/include/libavutil/mastering_display_metadata.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2016 Neil Birkbeck - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MASTERING_DISPLAY_METADATA_H -#define AVUTIL_MASTERING_DISPLAY_METADATA_H - -#include "frame.h" -#include "rational.h" - - -/** - * Mastering display metadata capable of representing the color volume of - * the display used to master the content (SMPTE 2086:2014). - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with av_mastering_display_metadata_alloc() - * and its size is not a part of the public ABI. - */ -typedef struct AVMasteringDisplayMetadata { - /** - * CIE 1931 xy chromaticity coords of color primaries (r, g, b order). - */ - AVRational display_primaries[3][2]; - - /** - * CIE 1931 xy chromaticity coords of white point. - */ - AVRational white_point[2]; - - /** - * Min luminance of mastering display (cd/m^2). - */ - AVRational min_luminance; - - /** - * Max luminance of mastering display (cd/m^2). - */ - AVRational max_luminance; - - /** - * Flag indicating whether the display primaries (and white point) are set. - */ - int has_primaries; - - /** - * Flag indicating whether the luminance (min_ and max_) have been set. - */ - int has_luminance; - -} AVMasteringDisplayMetadata; - -/** - * Allocate an AVMasteringDisplayMetadata structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVMasteringDisplayMetadata filled with default values or NULL - * on failure. - */ -AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void); - -/** - * Allocate a complete AVMasteringDisplayMetadata and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVMasteringDisplayMetadata structure to be filled by caller. - */ -AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFrame *frame); - -/** - * Content light level needed by to transmit HDR over HDMI (CTA-861.3). - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with av_content_light_metadata_alloc() - * and its size is not a part of the public ABI. - */ -typedef struct AVContentLightMetadata { - /** - * Max content light level (cd/m^2). - */ - unsigned MaxCLL; - - /** - * Max average light level per frame (cd/m^2). - */ - unsigned MaxFALL; -} AVContentLightMetadata; - -/** - * Allocate an AVContentLightMetadata structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVContentLightMetadata filled with default values or NULL - * on failure. - */ -AVContentLightMetadata *av_content_light_metadata_alloc(size_t *size); - -/** - * Allocate a complete AVContentLightMetadata and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVContentLightMetadata structure to be filled by caller. - */ -AVContentLightMetadata *av_content_light_metadata_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_MASTERING_DISPLAY_METADATA_H */ diff --git a/prebuilts/x86/include/libavutil/mathematics.h b/prebuilts/x86/include/libavutil/mathematics.h deleted file mode 100644 index 64d4137..0000000 --- a/prebuilts/x86/include/libavutil/mathematics.h +++ /dev/null @@ -1,243 +0,0 @@ -/* - * copyright (c) 2005-2012 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @addtogroup lavu_math - * Mathematical utilities for working with timestamp and time base. - */ - -#ifndef AVUTIL_MATHEMATICS_H -#define AVUTIL_MATHEMATICS_H - -#include -#include -#include "attributes.h" -#include "rational.h" -#include "intfloat.h" - -#ifndef M_E -#define M_E 2.7182818284590452354 /* e */ -#endif -#ifndef M_LN2 -#define M_LN2 0.69314718055994530942 /* log_e 2 */ -#endif -#ifndef M_LN10 -#define M_LN10 2.30258509299404568402 /* log_e 10 */ -#endif -#ifndef M_LOG2_10 -#define M_LOG2_10 3.32192809488736234787 /* log_2 10 */ -#endif -#ifndef M_PHI -#define M_PHI 1.61803398874989484820 /* phi / golden ratio */ -#endif -#ifndef M_PI -#define M_PI 3.14159265358979323846 /* pi */ -#endif -#ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 /* pi/2 */ -#endif -#ifndef M_SQRT1_2 -#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ -#endif -#ifndef M_SQRT2 -#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ -#endif -#ifndef NAN -#define NAN av_int2float(0x7fc00000) -#endif -#ifndef INFINITY -#define INFINITY av_int2float(0x7f800000) -#endif - -/** - * @addtogroup lavu_math - * - * @{ - */ - -/** - * Rounding methods. - */ -enum AVRounding { - AV_ROUND_ZERO = 0, ///< Round toward zero. - AV_ROUND_INF = 1, ///< Round away from zero. - AV_ROUND_DOWN = 2, ///< Round toward -infinity. - AV_ROUND_UP = 3, ///< Round toward +infinity. - AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero. - /** - * Flag telling rescaling functions to pass `INT64_MIN`/`MAX` through - * unchanged, avoiding special cases for #AV_NOPTS_VALUE. - * - * Unlike other values of the enumeration AVRounding, this value is a - * bitmask that must be used in conjunction with another value of the - * enumeration through a bitwise OR, in order to set behavior for normal - * cases. - * - * @code{.c} - * av_rescale_rnd(3, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); - * // Rescaling 3: - * // Calculating 3 * 1 / 2 - * // 3 / 2 is rounded up to 2 - * // => 2 - * - * av_rescale_rnd(AV_NOPTS_VALUE, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); - * // Rescaling AV_NOPTS_VALUE: - * // AV_NOPTS_VALUE == INT64_MIN - * // AV_NOPTS_VALUE is passed through - * // => AV_NOPTS_VALUE - * @endcode - */ - AV_ROUND_PASS_MINMAX = 8192, -}; - -/** - * Compute the greatest common divisor of two integer operands. - * - * @param a,b Operands - * @return GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0; - * if a == 0 and b == 0, returns 0. - */ -int64_t av_const av_gcd(int64_t a, int64_t b); - -/** - * Rescale a 64-bit integer with rounding to nearest. - * - * The operation is mathematically equivalent to `a * b / c`, but writing that - * directly can overflow. - * - * This function is equivalent to av_rescale_rnd() with #AV_ROUND_NEAR_INF. - * - * @see av_rescale_rnd(), av_rescale_q(), av_rescale_q_rnd() - */ -int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const; - -/** - * Rescale a 64-bit integer with specified rounding. - * - * The operation is mathematically equivalent to `a * b / c`, but writing that - * directly can overflow, and does not support different rounding methods. - * If the result is not representable then INT64_MIN is returned. - * - * @see av_rescale(), av_rescale_q(), av_rescale_q_rnd() - */ -int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd) av_const; - -/** - * Rescale a 64-bit integer by 2 rational numbers. - * - * The operation is mathematically equivalent to `a * bq / cq`. - * - * This function is equivalent to av_rescale_q_rnd() with #AV_ROUND_NEAR_INF. - * - * @see av_rescale(), av_rescale_rnd(), av_rescale_q_rnd() - */ -int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; - -/** - * Rescale a 64-bit integer by 2 rational numbers with specified rounding. - * - * The operation is mathematically equivalent to `a * bq / cq`. - * - * @see av_rescale(), av_rescale_rnd(), av_rescale_q() - */ -int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, - enum AVRounding rnd) av_const; - -/** - * Compare two timestamps each in its own time base. - * - * @return One of the following values: - * - -1 if `ts_a` is before `ts_b` - * - 1 if `ts_a` is after `ts_b` - * - 0 if they represent the same position - * - * @warning - * The result of the function is undefined if one of the timestamps is outside - * the `int64_t` range when represented in the other's timebase. - */ -int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b); - -/** - * Compare the remainders of two integer operands divided by a common divisor. - * - * In other words, compare the least significant `log2(mod)` bits of integers - * `a` and `b`. - * - * @code{.c} - * av_compare_mod(0x11, 0x02, 0x10) < 0 // since 0x11 % 0x10 (0x1) < 0x02 % 0x10 (0x2) - * av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) > 0x02 % 0x20 (0x02) - * @endcode - * - * @param a,b Operands - * @param mod Divisor; must be a power of 2 - * @return - * - a negative value if `a % mod < b % mod` - * - a positive value if `a % mod > b % mod` - * - zero if `a % mod == b % mod` - */ -int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod); - -/** - * Rescale a timestamp while preserving known durations. - * - * This function is designed to be called per audio packet to scale the input - * timestamp to a different time base. Compared to a simple av_rescale_q() - * call, this function is robust against possible inconsistent frame durations. - * - * The `last` parameter is a state variable that must be preserved for all - * subsequent calls for the same stream. For the first call, `*last` should be - * initialized to #AV_NOPTS_VALUE. - * - * @param[in] in_tb Input time base - * @param[in] in_ts Input timestamp - * @param[in] fs_tb Duration time base; typically this is finer-grained - * (greater) than `in_tb` and `out_tb` - * @param[in] duration Duration till the next call to this function (i.e. - * duration of the current packet/frame) - * @param[in,out] last Pointer to a timestamp expressed in terms of - * `fs_tb`, acting as a state variable - * @param[in] out_tb Output timebase - * @return Timestamp expressed in terms of `out_tb` - * - * @note In the context of this function, "duration" is in term of samples, not - * seconds. - */ -int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts, AVRational fs_tb, int duration, int64_t *last, AVRational out_tb); - -/** - * Add a value to a timestamp. - * - * This function guarantees that when the same value is repeatly added that - * no accumulation of rounding errors occurs. - * - * @param[in] ts Input timestamp - * @param[in] ts_tb Input timestamp time base - * @param[in] inc Value to be added - * @param[in] inc_tb Time base of `inc` - */ -int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc); - - -/** - * @} - */ - -#endif /* AVUTIL_MATHEMATICS_H */ diff --git a/prebuilts/x86/include/libavutil/md5.h b/prebuilts/x86/include/libavutil/md5.h deleted file mode 100644 index ca72ccb..0000000 --- a/prebuilts/x86/include/libavutil/md5.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_md5 - * Public header for MD5 hash function implementation. - */ - -#ifndef AVUTIL_MD5_H -#define AVUTIL_MD5_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_md5 MD5 - * @ingroup lavu_hash - * MD5 hash function implementation. - * - * @{ - */ - -extern const int av_md5_size; - -struct AVMD5; - -/** - * Allocate an AVMD5 context. - */ -struct AVMD5 *av_md5_alloc(void); - -/** - * Initialize MD5 hashing. - * - * @param ctx pointer to the function context (of size av_md5_size) - */ -void av_md5_init(struct AVMD5 *ctx); - -/** - * Update hash value. - * - * @param ctx hash function context - * @param src input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, int len); -#else -void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param ctx hash function context - * @param dst buffer where output digest value is stored - */ -void av_md5_final(struct AVMD5 *ctx, uint8_t *dst); - -/** - * Hash an array of data. - * - * @param dst The output buffer to write the digest into - * @param src The data to hash - * @param len The length of the data, in bytes - */ -#if FF_API_CRYPTO_SIZE_T -void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len); -#else -void av_md5_sum(uint8_t *dst, const uint8_t *src, size_t len); -#endif - -/** - * @} - */ - -#endif /* AVUTIL_MD5_H */ diff --git a/prebuilts/x86/include/libavutil/mem.h b/prebuilts/x86/include/libavutil/mem.h deleted file mode 100644 index e21a1fe..0000000 --- a/prebuilts/x86/include/libavutil/mem.h +++ /dev/null @@ -1,706 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_mem - * Memory handling functions - */ - -#ifndef AVUTIL_MEM_H -#define AVUTIL_MEM_H - -#include -#include - -#include "attributes.h" -#include "error.h" -#include "avutil.h" -#include "version.h" - -/** - * @addtogroup lavu_mem - * Utilities for manipulating memory. - * - * FFmpeg has several applications of memory that are not required of a typical - * program. For example, the computing-heavy components like video decoding and - * encoding can be sped up significantly through the use of aligned memory. - * - * However, for each of FFmpeg's applications of memory, there might not be a - * recognized or standardized API for that specific use. Memory alignment, for - * instance, varies wildly depending on operating systems, architectures, and - * compilers. Hence, this component of @ref libavutil is created to make - * dealing with memory consistently possible on all platforms. - * - * @{ - */ - -#if FF_API_DECLARE_ALIGNED -/** - * - * @defgroup lavu_mem_macros Alignment Macros - * Helper macros for declaring aligned variables. - * @{ - */ - -/** - * @def DECLARE_ALIGNED(n,t,v) - * Declare a variable that is aligned in memory. - * - * @code{.c} - * DECLARE_ALIGNED(16, uint16_t, aligned_int) = 42; - * DECLARE_ALIGNED(32, uint8_t, aligned_array)[128]; - * - * // The default-alignment equivalent would be - * uint16_t aligned_int = 42; - * uint8_t aligned_array[128]; - * @endcode - * - * @param n Minimum alignment in bytes - * @param t Type of the variable (or array element) - * @param v Name of the variable - */ - -/** - * @def DECLARE_ASM_ALIGNED(n,t,v) - * Declare an aligned variable appropriate for use in inline assembly code. - * - * @code{.c} - * DECLARE_ASM_ALIGNED(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008); - * @endcode - * - * @param n Minimum alignment in bytes - * @param t Type of the variable (or array element) - * @param v Name of the variable - */ - -/** - * @def DECLARE_ASM_CONST(n,t,v) - * Declare a static constant aligned variable appropriate for use in inline - * assembly code. - * - * @code{.c} - * DECLARE_ASM_CONST(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008); - * @endcode - * - * @param n Minimum alignment in bytes - * @param t Type of the variable (or array element) - * @param v Name of the variable - */ - -#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v -#elif defined(__DJGPP__) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (FFMIN(n, 16)))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v - #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v -#elif defined(__GNUC__) || defined(__clang__) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (n))) v - #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v -#elif defined(_MSC_VER) - #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v - #define DECLARE_ASM_ALIGNED(n,t,v) __declspec(align(n)) t v - #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v -#else - #define DECLARE_ALIGNED(n,t,v) t v - #define DECLARE_ASM_ALIGNED(n,t,v) t v - #define DECLARE_ASM_CONST(n,t,v) static const t v -#endif - -/** - * @} - */ -#endif - -/** - * @defgroup lavu_mem_attrs Function Attributes - * Function attributes applicable to memory handling functions. - * - * These function attributes can help compilers emit more useful warnings, or - * generate better code. - * @{ - */ - -/** - * @def av_malloc_attrib - * Function attribute denoting a malloc-like function. - * - * @see Function attribute `malloc` in GCC's documentation - */ - -#if AV_GCC_VERSION_AT_LEAST(3,1) - #define av_malloc_attrib __attribute__((__malloc__)) -#else - #define av_malloc_attrib -#endif - -/** - * @def av_alloc_size(...) - * Function attribute used on a function that allocates memory, whose size is - * given by the specified parameter(s). - * - * @code{.c} - * void *av_malloc(size_t size) av_alloc_size(1); - * void *av_calloc(size_t nmemb, size_t size) av_alloc_size(1, 2); - * @endcode - * - * @param ... One or two parameter indexes, separated by a comma - * - * @see Function attribute `alloc_size` in GCC's documentation - */ - -#if AV_GCC_VERSION_AT_LEAST(4,3) - #define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__))) -#else - #define av_alloc_size(...) -#endif - -/** - * @} - */ - -/** - * @defgroup lavu_mem_funcs Heap Management - * Functions responsible for allocating, freeing, and copying memory. - * - * All memory allocation functions have a built-in upper limit of `INT_MAX` - * bytes. This may be changed with av_max_alloc(), although exercise extreme - * caution when doing so. - * - * @{ - */ - -/** - * Allocate a memory block with alignment suitable for all memory accesses - * (including vectors if available on the CPU). - * - * @param size Size in bytes for the memory block to be allocated - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * @see av_mallocz() - */ -void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1); - -/** - * Allocate a memory block with alignment suitable for all memory accesses - * (including vectors if available on the CPU) and zero all the bytes of the - * block. - * - * @param size Size in bytes for the memory block to be allocated - * @return Pointer to the allocated block, or `NULL` if it cannot be allocated - * @see av_malloc() - */ -void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1); - -/** - * Allocate a memory block for an array with av_malloc(). - * - * The allocated memory will have size `size * nmemb` bytes. - * - * @param nmemb Number of element - * @param size Size of a single element - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * @see av_malloc() - */ -av_alloc_size(1, 2) void *av_malloc_array(size_t nmemb, size_t size); - -/** - * Allocate a memory block for an array with av_mallocz(). - * - * The allocated memory will have size `size * nmemb` bytes. - * - * @param nmemb Number of elements - * @param size Size of the single element - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * - * @see av_mallocz() - * @see av_malloc_array() - */ -av_alloc_size(1, 2) void *av_mallocz_array(size_t nmemb, size_t size); - -/** - * Non-inlined equivalent of av_mallocz_array(). - * - * Created for symmetry with the calloc() C function. - */ -void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib; - -/** - * Allocate, reallocate, or free a block of memory. - * - * If `ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is - * zero, free the memory block pointed to by `ptr`. Otherwise, expand or - * shrink that block of memory according to `size`. - * - * @param ptr Pointer to a memory block already allocated with - * av_realloc() or `NULL` - * @param size Size in bytes of the memory block to be allocated or - * reallocated - * - * @return Pointer to a newly-reallocated block or `NULL` if the block - * cannot be reallocated or the function is used to free the memory block - * - * @warning Unlike av_malloc(), the returned pointer is not guaranteed to be - * correctly aligned. - * @see av_fast_realloc() - * @see av_reallocp() - */ -void *av_realloc(void *ptr, size_t size) av_alloc_size(2); - -/** - * Allocate, reallocate, or free a block of memory through a pointer to a - * pointer. - * - * If `*ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is - * zero, free the memory block pointed to by `*ptr`. Otherwise, expand or - * shrink that block of memory according to `size`. - * - * @param[in,out] ptr Pointer to a pointer to a memory block already allocated - * with av_realloc(), or a pointer to `NULL`. The pointer - * is updated on success, or freed on failure. - * @param[in] size Size in bytes for the memory block to be allocated or - * reallocated - * - * @return Zero on success, an AVERROR error code on failure - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. - */ -av_warn_unused_result -int av_reallocp(void *ptr, size_t size); - -/** - * Allocate, reallocate, or free a block of memory. - * - * This function does the same thing as av_realloc(), except: - * - It takes two size arguments and allocates `nelem * elsize` bytes, - * after checking the result of the multiplication for integer overflow. - * - It frees the input block in case of failure, thus avoiding the memory - * leak with the classic - * @code{.c} - * buf = realloc(buf); - * if (!buf) - * return -1; - * @endcode - * pattern. - */ -void *av_realloc_f(void *ptr, size_t nelem, size_t elsize); - -/** - * Allocate, reallocate, or free an array. - * - * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. If - * `nmemb` is zero, free the memory block pointed to by `ptr`. - * - * @param ptr Pointer to a memory block already allocated with - * av_realloc() or `NULL` - * @param nmemb Number of elements in the array - * @param size Size of the single element of the array - * - * @return Pointer to a newly-reallocated block or NULL if the block - * cannot be reallocated or the function is used to free the memory block - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. - * @see av_reallocp_array() - */ -av_alloc_size(2, 3) void *av_realloc_array(void *ptr, size_t nmemb, size_t size); - -/** - * Allocate, reallocate, or free an array through a pointer to a pointer. - * - * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. If `nmemb` is - * zero, free the memory block pointed to by `*ptr`. - * - * @param[in,out] ptr Pointer to a pointer to a memory block already - * allocated with av_realloc(), or a pointer to `NULL`. - * The pointer is updated on success, or freed on failure. - * @param[in] nmemb Number of elements - * @param[in] size Size of the single element - * - * @return Zero on success, an AVERROR error code on failure - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. - */ -int av_reallocp_array(void *ptr, size_t nmemb, size_t size); - -/** - * Reallocate the given buffer if it is not large enough, otherwise do nothing. - * - * If the given buffer is `NULL`, then a new uninitialized buffer is allocated. - * - * If the given buffer is not large enough, and reallocation fails, `NULL` is - * returned and `*size` is set to 0, but the original buffer is not changed or - * freed. - * - * A typical use pattern follows: - * - * @code{.c} - * uint8_t *buf = ...; - * uint8_t *new_buf = av_fast_realloc(buf, ¤t_size, size_needed); - * if (!new_buf) { - * // Allocation failed; clean up original buffer - * av_freep(&buf); - * return AVERROR(ENOMEM); - * } - * @endcode - * - * @param[in,out] ptr Already allocated buffer, or `NULL` - * @param[in,out] size Pointer to the size of buffer `ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `ptr` - * @return `ptr` if the buffer is large enough, a pointer to newly reallocated - * buffer if the buffer was not large enough, or `NULL` in case of - * error - * @see av_realloc() - * @see av_fast_malloc() - */ -void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Allocate a buffer, reusing the given one if large enough. - * - * Contrary to av_fast_realloc(), the current buffer contents might not be - * preserved and on error the old buffer is freed, thus no special handling to - * avoid memleaks is necessary. - * - * `*ptr` is allowed to be `NULL`, in which case allocation always happens if - * `size_needed` is greater than 0. - * - * @code{.c} - * uint8_t *buf = ...; - * av_fast_malloc(&buf, ¤t_size, size_needed); - * if (!buf) { - * // Allocation failed; buf already freed - * return AVERROR(ENOMEM); - * } - * @endcode - * - * @param[in,out] ptr Pointer to pointer to an already allocated buffer. - * `*ptr` will be overwritten with pointer to new - * buffer on success or `NULL` on failure - * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `*ptr` - * @see av_realloc() - * @see av_fast_mallocz() - */ -void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Allocate and clear a buffer, reusing the given one if large enough. - * - * Like av_fast_malloc(), but all newly allocated space is initially cleared. - * Reused buffer is not cleared. - * - * `*ptr` is allowed to be `NULL`, in which case allocation always happens if - * `size_needed` is greater than 0. - * - * @param[in,out] ptr Pointer to pointer to an already allocated buffer. - * `*ptr` will be overwritten with pointer to new - * buffer on success or `NULL` on failure - * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `*ptr` - * @see av_fast_malloc() - */ -void av_fast_mallocz(void *ptr, unsigned int *size, size_t min_size); - -/** - * Free a memory block which has been allocated with a function of av_malloc() - * or av_realloc() family. - * - * @param ptr Pointer to the memory block which should be freed. - * - * @note `ptr = NULL` is explicitly allowed. - * @note It is recommended that you use av_freep() instead, to prevent leaving - * behind dangling pointers. - * @see av_freep() - */ -void av_free(void *ptr); - -/** - * Free a memory block which has been allocated with a function of av_malloc() - * or av_realloc() family, and set the pointer pointing to it to `NULL`. - * - * @code{.c} - * uint8_t *buf = av_malloc(16); - * av_free(buf); - * // buf now contains a dangling pointer to freed memory, and accidental - * // dereference of buf will result in a use-after-free, which may be a - * // security risk. - * - * uint8_t *buf = av_malloc(16); - * av_freep(&buf); - * // buf is now NULL, and accidental dereference will only result in a - * // NULL-pointer dereference. - * @endcode - * - * @param ptr Pointer to the pointer to the memory block which should be freed - * @note `*ptr = NULL` is safe and leads to no action. - * @see av_free() - */ -void av_freep(void *ptr); - -/** - * Duplicate a string. - * - * @param s String to be duplicated - * @return Pointer to a newly-allocated string containing a - * copy of `s` or `NULL` if the string cannot be allocated - * @see av_strndup() - */ -char *av_strdup(const char *s) av_malloc_attrib; - -/** - * Duplicate a substring of a string. - * - * @param s String to be duplicated - * @param len Maximum length of the resulting string (not counting the - * terminating byte) - * @return Pointer to a newly-allocated string containing a - * substring of `s` or `NULL` if the string cannot be allocated - */ -char *av_strndup(const char *s, size_t len) av_malloc_attrib; - -/** - * Duplicate a buffer with av_malloc(). - * - * @param p Buffer to be duplicated - * @param size Size in bytes of the buffer copied - * @return Pointer to a newly allocated buffer containing a - * copy of `p` or `NULL` if the buffer cannot be allocated - */ -void *av_memdup(const void *p, size_t size); - -/** - * Overlapping memcpy() implementation. - * - * @param dst Destination buffer - * @param back Number of bytes back to start copying (i.e. the initial size of - * the overlapping window); must be > 0 - * @param cnt Number of bytes to copy; must be >= 0 - * - * @note `cnt > back` is valid, this will copy the bytes we just copied, - * thus creating a repeating pattern with a period length of `back`. - */ -void av_memcpy_backptr(uint8_t *dst, int back, int cnt); - -/** - * @} - */ - -/** - * @defgroup lavu_mem_dynarray Dynamic Array - * - * Utilities to make an array grow when needed. - * - * Sometimes, the programmer would want to have an array that can grow when - * needed. The libavutil dynamic array utilities fill that need. - * - * libavutil supports two systems of appending elements onto a dynamically - * allocated array, the first one storing the pointer to the value in the - * array, and the second storing the value directly. In both systems, the - * caller is responsible for maintaining a variable containing the length of - * the array, as well as freeing of the array after use. - * - * The first system stores pointers to values in a block of dynamically - * allocated memory. Since only pointers are stored, the function does not need - * to know the size of the type. Both av_dynarray_add() and - * av_dynarray_add_nofree() implement this system. - * - * @code - * type **array = NULL; //< an array of pointers to values - * int nb = 0; //< a variable to keep track of the length of the array - * - * type to_be_added = ...; - * type to_be_added2 = ...; - * - * av_dynarray_add(&array, &nb, &to_be_added); - * if (nb == 0) - * return AVERROR(ENOMEM); - * - * av_dynarray_add(&array, &nb, &to_be_added2); - * if (nb == 0) - * return AVERROR(ENOMEM); - * - * // Now: - * // nb == 2 - * // &to_be_added == array[0] - * // &to_be_added2 == array[1] - * - * av_freep(&array); - * @endcode - * - * The second system stores the value directly in a block of memory. As a - * result, the function has to know the size of the type. av_dynarray2_add() - * implements this mechanism. - * - * @code - * type *array = NULL; //< an array of values - * int nb = 0; //< a variable to keep track of the length of the array - * - * type to_be_added = ...; - * type to_be_added2 = ...; - * - * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), NULL); - * if (!addr) - * return AVERROR(ENOMEM); - * memcpy(addr, &to_be_added, sizeof(to_be_added)); - * - * // Shortcut of the above. - * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), - * (const void *)&to_be_added2); - * if (!addr) - * return AVERROR(ENOMEM); - * - * // Now: - * // nb == 2 - * // to_be_added == array[0] - * // to_be_added2 == array[1] - * - * av_freep(&array); - * @endcode - * - * @{ - */ - -/** - * Add the pointer to an element to a dynamic array. - * - * The array to grow is supposed to be an array of pointers to - * structures, and the element to add must be a pointer to an already - * allocated structure. - * - * The array is reallocated when its size reaches powers of 2. - * Therefore, the amortized cost of adding an element is constant. - * - * In case of success, the pointer to the array is updated in order to - * point to the new grown array, and the number pointed to by `nb_ptr` - * is incremented. - * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and - * `*nb_ptr` is set to 0. - * - * @param[in,out] tab_ptr Pointer to the array to grow - * @param[in,out] nb_ptr Pointer to the number of elements in the array - * @param[in] elem Element to add - * @see av_dynarray_add_nofree(), av_dynarray2_add() - */ -void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem); - -/** - * Add an element to a dynamic array. - * - * Function has the same functionality as av_dynarray_add(), - * but it doesn't free memory on fails. It returns error code - * instead and leave current buffer untouched. - * - * @return >=0 on success, negative otherwise - * @see av_dynarray_add(), av_dynarray2_add() - */ -av_warn_unused_result -int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem); - -/** - * Add an element of size `elem_size` to a dynamic array. - * - * The array is reallocated when its number of elements reaches powers of 2. - * Therefore, the amortized cost of adding an element is constant. - * - * In case of success, the pointer to the array is updated in order to - * point to the new grown array, and the number pointed to by `nb_ptr` - * is incremented. - * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and - * `*nb_ptr` is set to 0. - * - * @param[in,out] tab_ptr Pointer to the array to grow - * @param[in,out] nb_ptr Pointer to the number of elements in the array - * @param[in] elem_size Size in bytes of an element in the array - * @param[in] elem_data Pointer to the data of the element to add. If - * `NULL`, the space of the newly added element is - * allocated but left uninitialized. - * - * @return Pointer to the data of the element to copy in the newly allocated - * space - * @see av_dynarray_add(), av_dynarray_add_nofree() - */ -void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size, - const uint8_t *elem_data); - -/** - * @} - */ - -/** - * @defgroup lavu_mem_misc Miscellaneous Functions - * - * Other functions related to memory allocation. - * - * @{ - */ - -/** - * Multiply two `size_t` values checking for overflow. - * - * @param[in] a,b Operands of multiplication - * @param[out] r Pointer to the result of the operation - * @return 0 on success, AVERROR(EINVAL) on overflow - */ -static inline int av_size_mult(size_t a, size_t b, size_t *r) -{ - size_t t = a * b; - /* Hack inspired from glibc: don't try the division if nelem and elsize - * are both less than sqrt(SIZE_MAX). */ - if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) - return AVERROR(EINVAL); - *r = t; - return 0; -} - -/** - * Set the maximum size that may be allocated in one block. - * - * The value specified with this function is effective for all libavutil's @ref - * lavu_mem_funcs "heap management functions." - * - * By default, the max value is defined as `INT_MAX`. - * - * @param max Value to be set as the new maximum size - * - * @warning Exercise extreme caution when using this function. Don't touch - * this if you do not understand the full consequence of doing so. - */ -void av_max_alloc(size_t max); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_MEM_H */ diff --git a/prebuilts/x86/include/libavutil/motion_vector.h b/prebuilts/x86/include/libavutil/motion_vector.h deleted file mode 100644 index ec29556..0000000 --- a/prebuilts/x86/include/libavutil/motion_vector.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MOTION_VECTOR_H -#define AVUTIL_MOTION_VECTOR_H - -#include - -typedef struct AVMotionVector { - /** - * Where the current macroblock comes from; negative value when it comes - * from the past, positive value when it comes from the future. - * XXX: set exact relative ref frame reference instead of a +/- 1 "direction". - */ - int32_t source; - /** - * Width and height of the block. - */ - uint8_t w, h; - /** - * Absolute source position. Can be outside the frame area. - */ - int16_t src_x, src_y; - /** - * Absolute destination position. Can be outside the frame area. - */ - int16_t dst_x, dst_y; - /** - * Extra flag information. - * Currently unused. - */ - uint64_t flags; - /** - * Motion vector - * src_x = dst_x + motion_x / motion_scale - * src_y = dst_y + motion_y / motion_scale - */ - int32_t motion_x, motion_y; - uint16_t motion_scale; -} AVMotionVector; - -#endif /* AVUTIL_MOTION_VECTOR_H */ diff --git a/prebuilts/x86/include/libavutil/murmur3.h b/prebuilts/x86/include/libavutil/murmur3.h deleted file mode 100644 index b3b3a07..0000000 --- a/prebuilts/x86/include/libavutil/murmur3.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2013 Reimar Döffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_murmur3 - * Public header for MurmurHash3 hash function implementation. - */ - -#ifndef AVUTIL_MURMUR3_H -#define AVUTIL_MURMUR3_H - -#include -#include - -#include "version.h" - -/** - * @defgroup lavu_murmur3 Murmur3 - * @ingroup lavu_hash - * MurmurHash3 hash function implementation. - * - * MurmurHash3 is a non-cryptographic hash function, of which three - * incompatible versions were created by its inventor Austin Appleby: - * - * - 32-bit output - * - 128-bit output for 32-bit platforms - * - 128-bit output for 64-bit platforms - * - * FFmpeg only implements the last variant: 128-bit output designed for 64-bit - * platforms. Even though the hash function was designed for 64-bit platforms, - * the function in reality works on 32-bit systems too, only with reduced - * performance. - * - * @anchor lavu_murmur3_seedinfo - * By design, MurmurHash3 requires a seed to operate. In response to this, - * libavutil provides two functions for hash initiation, one that requires a - * seed (av_murmur3_init_seeded()) and one that uses a fixed arbitrary integer - * as the seed, and therefore does not (av_murmur3_init()). - * - * To make hashes comparable, you should provide the same seed for all calls to - * this hash function -- if you are supplying one yourself, that is. - * - * @{ - */ - -/** - * Allocate an AVMurMur3 hash context. - * - * @return Uninitialized hash context or `NULL` in case of error - */ -struct AVMurMur3 *av_murmur3_alloc(void); - -/** - * Initialize or reinitialize an AVMurMur3 hash context with a seed. - * - * @param[out] c Hash context - * @param[in] seed Random seed - * - * @see av_murmur3_init() - * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of - * seeds for MurmurHash3. - */ -void av_murmur3_init_seeded(struct AVMurMur3 *c, uint64_t seed); - -/** - * Initialize or reinitialize an AVMurMur3 hash context. - * - * Equivalent to av_murmur3_init_seeded() with a built-in seed. - * - * @param[out] c Hash context - * - * @see av_murmur3_init_seeded() - * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of - * seeds for MurmurHash3. - */ -void av_murmur3_init(struct AVMurMur3 *c); - -/** - * Update hash context with new data. - * - * @param[out] c Hash context - * @param[in] src Input data to update hash with - * @param[in] len Number of bytes to read from `src` - */ -#if FF_API_CRYPTO_SIZE_T -void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, int len); -#else -void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param[in,out] c Hash context - * @param[out] dst Buffer where output digest value is stored - */ -void av_murmur3_final(struct AVMurMur3 *c, uint8_t dst[16]); - -/** - * @} - */ - -#endif /* AVUTIL_MURMUR3_H */ diff --git a/prebuilts/x86/include/libavutil/opt.h b/prebuilts/x86/include/libavutil/opt.h deleted file mode 100644 index 8dc020a..0000000 --- a/prebuilts/x86/include/libavutil/opt.h +++ /dev/null @@ -1,886 +0,0 @@ -/* - * AVOptions - * copyright (c) 2005 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_OPT_H -#define AVUTIL_OPT_H - -/** - * @file - * AVOptions - */ - -#include "rational.h" -#include "avutil.h" -#include "dict.h" -#include "log.h" -#include "pixfmt.h" -#include "samplefmt.h" -#include "version.h" - -/** - * @defgroup avoptions AVOptions - * @ingroup lavu_data - * @{ - * AVOptions provide a generic system to declare options on arbitrary structs - * ("objects"). An option can have a help text, a type and a range of possible - * values. Options may then be enumerated, read and written to. - * - * @section avoptions_implement Implementing AVOptions - * This section describes how to add AVOptions capabilities to a struct. - * - * All AVOptions-related information is stored in an AVClass. Therefore - * the first member of the struct should be a pointer to an AVClass describing it. - * The option field of the AVClass must be set to a NULL-terminated static array - * of AVOptions. Each AVOption must have a non-empty name, a type, a default - * value and for number-type AVOptions also a range of allowed values. It must - * also declare an offset in bytes from the start of the struct, where the field - * associated with this AVOption is located. Other fields in the AVOption struct - * should also be set when applicable, but are not required. - * - * The following example illustrates an AVOptions-enabled struct: - * @code - * typedef struct test_struct { - * const AVClass *class; - * int int_opt; - * char *str_opt; - * uint8_t *bin_opt; - * int bin_len; - * } test_struct; - * - * static const AVOption test_options[] = { - * { "test_int", "This is a test option of int type.", offsetof(test_struct, int_opt), - * AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX }, - * { "test_str", "This is a test option of string type.", offsetof(test_struct, str_opt), - * AV_OPT_TYPE_STRING }, - * { "test_bin", "This is a test option of binary type.", offsetof(test_struct, bin_opt), - * AV_OPT_TYPE_BINARY }, - * { NULL }, - * }; - * - * static const AVClass test_class = { - * .class_name = "test class", - * .item_name = av_default_item_name, - * .option = test_options, - * .version = LIBAVUTIL_VERSION_INT, - * }; - * @endcode - * - * Next, when allocating your struct, you must ensure that the AVClass pointer - * is set to the correct value. Then, av_opt_set_defaults() can be called to - * initialize defaults. After that the struct is ready to be used with the - * AVOptions API. - * - * When cleaning up, you may use the av_opt_free() function to automatically - * free all the allocated string and binary options. - * - * Continuing with the above example: - * - * @code - * test_struct *alloc_test_struct(void) - * { - * test_struct *ret = av_mallocz(sizeof(*ret)); - * ret->class = &test_class; - * av_opt_set_defaults(ret); - * return ret; - * } - * void free_test_struct(test_struct **foo) - * { - * av_opt_free(*foo); - * av_freep(foo); - * } - * @endcode - * - * @subsection avoptions_implement_nesting Nesting - * It may happen that an AVOptions-enabled struct contains another - * AVOptions-enabled struct as a member (e.g. AVCodecContext in - * libavcodec exports generic options, while its priv_data field exports - * codec-specific options). In such a case, it is possible to set up the - * parent struct to export a child's options. To do that, simply - * implement AVClass.child_next() and AVClass.child_class_iterate() in the - * parent struct's AVClass. - * Assuming that the test_struct from above now also contains a - * child_struct field: - * - * @code - * typedef struct child_struct { - * AVClass *class; - * int flags_opt; - * } child_struct; - * static const AVOption child_opts[] = { - * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX }, - * { NULL }, - * }; - * static const AVClass child_class = { - * .class_name = "child class", - * .item_name = av_default_item_name, - * .option = child_opts, - * .version = LIBAVUTIL_VERSION_INT, - * }; - * - * void *child_next(void *obj, void *prev) - * { - * test_struct *t = obj; - * if (!prev && t->child_struct) - * return t->child_struct; - * return NULL - * } - * const AVClass child_class_iterate(void **iter) - * { - * const AVClass *c = *iter ? NULL : &child_class; - * *iter = (void*)(uintptr_t)c; - * return c; - * } - * @endcode - * Putting child_next() and child_class_iterate() as defined above into - * test_class will now make child_struct's options accessible through - * test_struct (again, proper setup as described above needs to be done on - * child_struct right after it is created). - * - * From the above example it might not be clear why both child_next() - * and child_class_iterate() are needed. The distinction is that child_next() - * iterates over actually existing objects, while child_class_iterate() - * iterates over all possible child classes. E.g. if an AVCodecContext - * was initialized to use a codec which has private options, then its - * child_next() will return AVCodecContext.priv_data and finish - * iterating. OTOH child_class_iterate() on AVCodecContext.av_class will - * iterate over all available codecs with private options. - * - * @subsection avoptions_implement_named_constants Named constants - * It is possible to create named constants for options. Simply set the unit - * field of the option the constants should apply to a string and - * create the constants themselves as options of type AV_OPT_TYPE_CONST - * with their unit field set to the same string. - * Their default_val field should contain the value of the named - * constant. - * For example, to add some named constants for the test_flags option - * above, put the following into the child_opts array: - * @code - * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, "test_unit" }, - * { "flag1", "This is a flag with value 16", 0, AV_OPT_TYPE_CONST, { .i64 = 16 }, 0, 0, "test_unit" }, - * @endcode - * - * @section avoptions_use Using AVOptions - * This section deals with accessing options in an AVOptions-enabled struct. - * Such structs in FFmpeg are e.g. AVCodecContext in libavcodec or - * AVFormatContext in libavformat. - * - * @subsection avoptions_use_examine Examining AVOptions - * The basic functions for examining options are av_opt_next(), which iterates - * over all options defined for one object, and av_opt_find(), which searches - * for an option with the given name. - * - * The situation is more complicated with nesting. An AVOptions-enabled struct - * may have AVOptions-enabled children. Passing the AV_OPT_SEARCH_CHILDREN flag - * to av_opt_find() will make the function search children recursively. - * - * For enumerating there are basically two cases. The first is when you want to - * get all options that may potentially exist on the struct and its children - * (e.g. when constructing documentation). In that case you should call - * av_opt_child_class_iterate() recursively on the parent struct's AVClass. The - * second case is when you have an already initialized struct with all its - * children and you want to get all options that can be actually written or read - * from it. In that case you should call av_opt_child_next() recursively (and - * av_opt_next() on each result). - * - * @subsection avoptions_use_get_set Reading and writing AVOptions - * When setting options, you often have a string read directly from the - * user. In such a case, simply passing it to av_opt_set() is enough. For - * non-string type options, av_opt_set() will parse the string according to the - * option type. - * - * Similarly av_opt_get() will read any option type and convert it to a string - * which will be returned. Do not forget that the string is allocated, so you - * have to free it with av_free(). - * - * In some cases it may be more convenient to put all options into an - * AVDictionary and call av_opt_set_dict() on it. A specific case of this - * are the format/codec open functions in lavf/lavc which take a dictionary - * filled with option as a parameter. This makes it possible to set some options - * that cannot be set otherwise, since e.g. the input file format is not known - * before the file is actually opened. - */ - -enum AVOptionType{ - AV_OPT_TYPE_FLAGS, - AV_OPT_TYPE_INT, - AV_OPT_TYPE_INT64, - AV_OPT_TYPE_DOUBLE, - AV_OPT_TYPE_FLOAT, - AV_OPT_TYPE_STRING, - AV_OPT_TYPE_RATIONAL, - AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length - AV_OPT_TYPE_DICT, - AV_OPT_TYPE_UINT64, - AV_OPT_TYPE_CONST, - AV_OPT_TYPE_IMAGE_SIZE, ///< offset must point to two consecutive integers - AV_OPT_TYPE_PIXEL_FMT, - AV_OPT_TYPE_SAMPLE_FMT, - AV_OPT_TYPE_VIDEO_RATE, ///< offset must point to AVRational - AV_OPT_TYPE_DURATION, - AV_OPT_TYPE_COLOR, - AV_OPT_TYPE_CHANNEL_LAYOUT, - AV_OPT_TYPE_BOOL, -}; - -/** - * AVOption - */ -typedef struct AVOption { - const char *name; - - /** - * short English help text - * @todo What about other languages? - */ - const char *help; - - /** - * The offset relative to the context structure where the option - * value is stored. It should be 0 for named constants. - */ - int offset; - enum AVOptionType type; - - /** - * the default value for scalar options - */ - union { - int64_t i64; - double dbl; - const char *str; - /* TODO those are unused now */ - AVRational q; - } default_val; - double min; ///< minimum valid value for the option - double max; ///< maximum valid value for the option - - int flags; -#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding -#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding -#define AV_OPT_FLAG_AUDIO_PARAM 8 -#define AV_OPT_FLAG_VIDEO_PARAM 16 -#define AV_OPT_FLAG_SUBTITLE_PARAM 32 -/** - * The option is intended for exporting values to the caller. - */ -#define AV_OPT_FLAG_EXPORT 64 -/** - * The option may not be set through the AVOptions API, only read. - * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set. - */ -#define AV_OPT_FLAG_READONLY 128 -#define AV_OPT_FLAG_BSF_PARAM (1<<8) ///< a generic parameter which can be set by the user for bit stream filtering -#define AV_OPT_FLAG_RUNTIME_PARAM (1<<15) ///< a generic parameter which can be set by the user at runtime -#define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering -#define AV_OPT_FLAG_DEPRECATED (1<<17) ///< set if option is deprecated, users should refer to AVOption.help text for more information -#define AV_OPT_FLAG_CHILD_CONSTS (1<<18) ///< set if option constants can also reside in child objects -//FIXME think about enc-audio, ... style flags - - /** - * The logical unit to which the option belongs. Non-constant - * options and corresponding named constants share the same - * unit. May be NULL. - */ - const char *unit; -} AVOption; - -/** - * A single allowed range of values, or a single allowed value. - */ -typedef struct AVOptionRange { - const char *str; - /** - * Value range. - * For string ranges this represents the min/max length. - * For dimensions this represents the min/max pixel count or width/height in multi-component case. - */ - double value_min, value_max; - /** - * Value's component range. - * For string this represents the unicode range for chars, 0-127 limits to ASCII. - */ - double component_min, component_max; - /** - * Range flag. - * If set to 1 the struct encodes a range, if set to 0 a single value. - */ - int is_range; -} AVOptionRange; - -/** - * List of AVOptionRange structs. - */ -typedef struct AVOptionRanges { - /** - * Array of option ranges. - * - * Most of option types use just one component. - * Following describes multi-component option types: - * - * AV_OPT_TYPE_IMAGE_SIZE: - * component index 0: range of pixel count (width * height). - * component index 1: range of width. - * component index 2: range of height. - * - * @note To obtain multi-component version of this structure, user must - * provide AV_OPT_MULTI_COMPONENT_RANGE to av_opt_query_ranges or - * av_opt_query_ranges_default function. - * - * Multi-component range can be read as in following example: - * - * @code - * int range_index, component_index; - * AVOptionRanges *ranges; - * AVOptionRange *range[3]; //may require more than 3 in the future. - * av_opt_query_ranges(&ranges, obj, key, AV_OPT_MULTI_COMPONENT_RANGE); - * for (range_index = 0; range_index < ranges->nb_ranges; range_index++) { - * for (component_index = 0; component_index < ranges->nb_components; component_index++) - * range[component_index] = ranges->range[ranges->nb_ranges * component_index + range_index]; - * //do something with range here. - * } - * av_opt_freep_ranges(&ranges); - * @endcode - */ - AVOptionRange **range; - /** - * Number of ranges per component. - */ - int nb_ranges; - /** - * Number of componentes. - */ - int nb_components; -} AVOptionRanges; - -/** - * Show the obj options. - * - * @param req_flags requested flags for the options to show. Show only the - * options for which it is opt->flags & req_flags. - * @param rej_flags rejected flags for the options to show. Show only the - * options for which it is !(opt->flags & req_flags). - * @param av_log_obj log context to use for showing the options - */ -int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags); - -/** - * Set the values of all AVOption fields to their default values. - * - * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) - */ -void av_opt_set_defaults(void *s); - -/** - * Set the values of all AVOption fields to their default values. Only these - * AVOption fields for which (opt->flags & mask) == flags will have their - * default applied to s. - * - * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) - * @param mask combination of AV_OPT_FLAG_* - * @param flags combination of AV_OPT_FLAG_* - */ -void av_opt_set_defaults2(void *s, int mask, int flags); - -/** - * Parse the key/value pairs list in opts. For each key/value pair - * found, stores the value in the field in ctx that is named like the - * key. ctx must be an AVClass context, storing is done using - * AVOptions. - * - * @param opts options string to parse, may be NULL - * @param key_val_sep a 0-terminated list of characters used to - * separate key from value - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other - * @return the number of successfully set key/value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_opt_set() if a key/value pair - * cannot be set - */ -int av_set_options_string(void *ctx, const char *opts, - const char *key_val_sep, const char *pairs_sep); - -/** - * Parse the key-value pairs list in opts. For each key=value pair found, - * set the value of the corresponding option in ctx. - * - * @param ctx the AVClass object to set options on - * @param opts the options string, key-value pairs separated by a - * delimiter - * @param shorthand a NULL-terminated array of options names for shorthand - * notation: if the first field in opts has no key part, - * the key is taken from the first element of shorthand; - * then again for the second, etc., until either opts is - * finished, shorthand is finished or a named option is - * found; after that, all options must be named - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @return the number of successfully set key=value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_set_string3() if a key/value pair - * cannot be set - * - * Options names must use only the following characters: a-z A-Z 0-9 - . / _ - * Separators must use characters distinct from option names and from each - * other. - */ -int av_opt_set_from_string(void *ctx, const char *opts, - const char *const *shorthand, - const char *key_val_sep, const char *pairs_sep); -/** - * Free all allocated objects in obj. - */ -void av_opt_free(void *obj); - -/** - * Check whether a particular flag is set in a flags field. - * - * @param field_name the name of the flag field option - * @param flag_name the name of the flag to check - * @return non-zero if the flag is set, zero if the flag isn't set, - * isn't of the right type, or the flags field doesn't exist. - */ -int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name); - -/** - * Set all the options from a given dictionary on an object. - * - * @param obj a struct whose first element is a pointer to AVClass - * @param options options to process. This dictionary will be freed and replaced - * by a new one containing all options not found in obj. - * Of course this new dictionary needs to be freed by caller - * with av_dict_free(). - * - * @return 0 on success, a negative AVERROR if some option was found in obj, - * but could not be set. - * - * @see av_dict_copy() - */ -int av_opt_set_dict(void *obj, struct AVDictionary **options); - - -/** - * Set all the options from a given dictionary on an object. - * - * @param obj a struct whose first element is a pointer to AVClass - * @param options options to process. This dictionary will be freed and replaced - * by a new one containing all options not found in obj. - * Of course this new dictionary needs to be freed by caller - * with av_dict_free(). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * - * @return 0 on success, a negative AVERROR if some option was found in obj, - * but could not be set. - * - * @see av_dict_copy() - */ -int av_opt_set_dict2(void *obj, struct AVDictionary **options, int search_flags); - -/** - * Extract a key-value pair from the beginning of a string. - * - * @param ropts pointer to the options string, will be updated to - * point to the rest of the string (one of the pairs_sep - * or the final NUL) - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @param flags flags; see the AV_OPT_FLAG_* values below - * @param rkey parsed key; must be freed using av_free() - * @param rval parsed value; must be freed using av_free() - * - * @return >=0 for success, or a negative value corresponding to an - * AVERROR code in case of error; in particular: - * AVERROR(EINVAL) if no key is present - * - */ -int av_opt_get_key_value(const char **ropts, - const char *key_val_sep, const char *pairs_sep, - unsigned flags, - char **rkey, char **rval); - -enum { - - /** - * Accept to parse a value without a key; the key will then be returned - * as NULL. - */ - AV_OPT_FLAG_IMPLICIT_KEY = 1, -}; - -/** - * @defgroup opt_eval_funcs Evaluating option strings - * @{ - * This group of functions can be used to evaluate option strings - * and get numbers out of them. They do the same thing as av_opt_set(), - * except the result is written into the caller-supplied pointer. - * - * @param obj a struct whose first element is a pointer to AVClass. - * @param o an option for which the string is to be evaluated. - * @param val string to be evaluated. - * @param *_out value of the string will be written here. - * - * @return 0 on success, a negative number on failure. - */ -int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out); -int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out); -int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out); -int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out); -int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out); -int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out); -/** - * @} - */ - -#define AV_OPT_SEARCH_CHILDREN (1 << 0) /**< Search in possible children of the - given object first. */ -/** - * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass - * instead of a required pointer to a struct containing AVClass. This is - * useful for searching for options without needing to allocate the corresponding - * object. - */ -#define AV_OPT_SEARCH_FAKE_OBJ (1 << 1) - -/** - * In av_opt_get, return NULL if the option has a pointer type and is set to NULL, - * rather than returning an empty string. - */ -#define AV_OPT_ALLOW_NULL (1 << 2) - -/** - * Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than - * one component for certain option types. - * @see AVOptionRanges for details. - */ -#define AV_OPT_MULTI_COMPONENT_RANGE (1 << 12) - -/** - * Look for an option in an object. Consider only options which - * have all the specified flags set. - * - * @param[in] obj A pointer to a struct whose first element is a - * pointer to an AVClass. - * Alternatively a double pointer to an AVClass, if - * AV_OPT_SEARCH_FAKE_OBJ search flag is set. - * @param[in] name The name of the option to look for. - * @param[in] unit When searching for named constants, name of the unit - * it belongs to. - * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * - * @return A pointer to the option found, or NULL if no option - * was found. - * - * @note Options found with AV_OPT_SEARCH_CHILDREN flag may not be settable - * directly with av_opt_set(). Use special calls which take an options - * AVDictionary (e.g. avformat_open_input()) to set options found with this - * flag. - */ -const AVOption *av_opt_find(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags); - -/** - * Look for an option in an object. Consider only options which - * have all the specified flags set. - * - * @param[in] obj A pointer to a struct whose first element is a - * pointer to an AVClass. - * Alternatively a double pointer to an AVClass, if - * AV_OPT_SEARCH_FAKE_OBJ search flag is set. - * @param[in] name The name of the option to look for. - * @param[in] unit When searching for named constants, name of the unit - * it belongs to. - * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * @param[out] target_obj if non-NULL, an object to which the option belongs will be - * written here. It may be different from obj if AV_OPT_SEARCH_CHILDREN is present - * in search_flags. This parameter is ignored if search_flags contain - * AV_OPT_SEARCH_FAKE_OBJ. - * - * @return A pointer to the option found, or NULL if no option - * was found. - */ -const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags, void **target_obj); - -/** - * Iterate over all AVOptions belonging to obj. - * - * @param obj an AVOptions-enabled struct or a double pointer to an - * AVClass describing it. - * @param prev result of the previous call to av_opt_next() on this object - * or NULL - * @return next AVOption or NULL - */ -const AVOption *av_opt_next(const void *obj, const AVOption *prev); - -/** - * Iterate over AVOptions-enabled children of obj. - * - * @param prev result of a previous call to this function or NULL - * @return next AVOptions-enabled child or NULL - */ -void *av_opt_child_next(void *obj, void *prev); - -#if FF_API_CHILD_CLASS_NEXT -/** - * Iterate over potential AVOptions-enabled children of parent. - * - * @param prev result of a previous call to this function or NULL - * @return AVClass corresponding to next potential child or NULL - * - * @deprecated use av_opt_child_class_iterate - */ -attribute_deprecated -const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev); -#endif - -/** - * Iterate over potential AVOptions-enabled children of parent. - * - * @param iter a pointer where iteration state is stored. - * @return AVClass corresponding to next potential child or NULL - */ -const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter); - -/** - * @defgroup opt_set_funcs Option setting functions - * @{ - * Those functions set the field of obj with the given name to value. - * - * @param[in] obj A struct whose first element is a pointer to an AVClass. - * @param[in] name the name of the field to set - * @param[in] val The value to set. In case of av_opt_set() if the field is not - * of a string type, then the given string is parsed. - * SI postfixes and some named scalars are supported. - * If the field is of a numeric type, it has to be a numeric or named - * scalar. Behavior with more than one scalar and +- infix operators - * is undefined. - * If the field is of a flags type, it has to be a sequence of numeric - * scalars or named flags separated by '+' or '-'. Prefixing a flag - * with '+' causes it to be set without affecting the other flags; - * similarly, '-' unsets a flag. - * If the field is of a dictionary type, it has to be a ':' separated list of - * key=value parameters. Values containing ':' special characters must be - * escaped. - * @param search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN - * is passed here, then the option may be set on a child of obj. - * - * @return 0 if the value has been set, or an AVERROR code in case of - * error: - * AVERROR_OPTION_NOT_FOUND if no matching option exists - * AVERROR(ERANGE) if the value is out of range - * AVERROR(EINVAL) if the value is not valid - */ -int av_opt_set (void *obj, const char *name, const char *val, int search_flags); -int av_opt_set_int (void *obj, const char *name, int64_t val, int search_flags); -int av_opt_set_double (void *obj, const char *name, double val, int search_flags); -int av_opt_set_q (void *obj, const char *name, AVRational val, int search_flags); -int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, int search_flags); -int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags); -int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags); -int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags); -int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags); -int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch_layout, int search_flags); -/** - * @note Any old dictionary present is discarded and replaced with a copy of the new one. The - * caller still owns val is and responsible for freeing it. - */ -int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags); - -/** - * Set a binary option to an integer list. - * - * @param obj AVClass object to set options on - * @param name name of the binary option - * @param val pointer to an integer list (must have the correct type with - * regard to the contents of the list) - * @param term list terminator (usually 0 or -1) - * @param flags search flags - */ -#define av_opt_set_int_list(obj, name, val, term, flags) \ - (av_int_list_length(val, term) > INT_MAX / sizeof(*(val)) ? \ - AVERROR(EINVAL) : \ - av_opt_set_bin(obj, name, (const uint8_t *)(val), \ - av_int_list_length(val, term) * sizeof(*(val)), flags)) - -/** - * @} - */ - -/** - * @defgroup opt_get_funcs Option getting functions - * @{ - * Those functions get a value of the option with the given name from an object. - * - * @param[in] obj a struct whose first element is a pointer to an AVClass. - * @param[in] name name of the option to get. - * @param[in] search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN - * is passed here, then the option may be found in a child of obj. - * @param[out] out_val value of the option will be written here - * @return >=0 on success, a negative error code otherwise - */ -/** - * @note the returned string will be av_malloc()ed and must be av_free()ed by the caller - * - * @note if AV_OPT_ALLOW_NULL is set in search_flags in av_opt_get, and the - * option is of type AV_OPT_TYPE_STRING, AV_OPT_TYPE_BINARY or AV_OPT_TYPE_DICT - * and is set to NULL, *out_val will be set to NULL instead of an allocated - * empty string. - */ -int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val); -int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val); -int av_opt_get_double (void *obj, const char *name, int search_flags, double *out_val); -int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational *out_val); -int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out); -int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt); -int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt); -int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val); -int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *ch_layout); -/** - * @param[out] out_val The returned dictionary is a copy of the actual value and must - * be freed with av_dict_free() by the caller - */ -int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val); -/** - * @} - */ -/** - * Gets a pointer to the requested field in a struct. - * This function allows accessing a struct even when its fields are moved or - * renamed since the application making the access has been compiled, - * - * @returns a pointer to the field, it can be cast to the correct type and read - * or written to. - */ -void *av_opt_ptr(const AVClass *avclass, void *obj, const char *name); - -/** - * Free an AVOptionRanges struct and set it to NULL. - */ -void av_opt_freep_ranges(AVOptionRanges **ranges); - -/** - * Get a list of allowed ranges for the given option. - * - * The returned list may depend on other fields in obj like for example profile. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges - * - * The result must be freed with av_opt_freep_ranges. - * - * @return number of compontents returned on success, a negative errro code otherwise - */ -int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags); - -/** - * Copy options from src object into dest object. - * - * Options that require memory allocation (e.g. string or binary) are malloc'ed in dest object. - * Original memory allocated for such options is freed unless both src and dest options points to the same memory. - * - * @param dest Object to copy from - * @param src Object to copy into - * @return 0 on success, negative on error - */ -int av_opt_copy(void *dest, const void *src); - -/** - * Get a default list of allowed ranges for the given option. - * - * This list is constructed without using the AVClass.query_ranges() callback - * and can be used as fallback from within the callback. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges - * - * The result must be freed with av_opt_free_ranges. - * - * @return number of compontents returned on success, a negative errro code otherwise - */ -int av_opt_query_ranges_default(AVOptionRanges **, void *obj, const char *key, int flags); - -/** - * Check if given option is set to its default value. - * - * Options o must belong to the obj. This function must not be called to check child's options state. - * @see av_opt_is_set_to_default_by_name(). - * - * @param obj AVClass object to check option on - * @param o option to be checked - * @return >0 when option is set to its default, - * 0 when option is not set its default, - * <0 on error - */ -int av_opt_is_set_to_default(void *obj, const AVOption *o); - -/** - * Check if given option is set to its default value. - * - * @param obj AVClass object to check option on - * @param name option name - * @param search_flags combination of AV_OPT_SEARCH_* - * @return >0 when option is set to its default, - * 0 when option is not set its default, - * <0 on error - */ -int av_opt_is_set_to_default_by_name(void *obj, const char *name, int search_flags); - - -#define AV_OPT_SERIALIZE_SKIP_DEFAULTS 0x00000001 ///< Serialize options that are not set to default values only. -#define AV_OPT_SERIALIZE_OPT_FLAGS_EXACT 0x00000002 ///< Serialize options that exactly match opt_flags only. - -/** - * Serialize object's options. - * - * Create a string containing object's serialized options. - * Such string may be passed back to av_opt_set_from_string() in order to restore option values. - * A key/value or pairs separator occurring in the serialized value or - * name string are escaped through the av_escape() function. - * - * @param[in] obj AVClass object to serialize - * @param[in] opt_flags serialize options with all the specified flags set (AV_OPT_FLAG) - * @param[in] flags combination of AV_OPT_SERIALIZE_* flags - * @param[out] buffer Pointer to buffer that will be allocated with string containg serialized options. - * Buffer must be freed by the caller when is no longer needed. - * @param[in] key_val_sep character used to separate key from value - * @param[in] pairs_sep character used to separate two pairs from each other - * @return >= 0 on success, negative on error - * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. - */ -int av_opt_serialize(void *obj, int opt_flags, int flags, char **buffer, - const char key_val_sep, const char pairs_sep); -/** - * @} - */ - -#endif /* AVUTIL_OPT_H */ diff --git a/prebuilts/x86/include/libavutil/parseutils.h b/prebuilts/x86/include/libavutil/parseutils.h deleted file mode 100644 index e66d24b..0000000 --- a/prebuilts/x86/include/libavutil/parseutils.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PARSEUTILS_H -#define AVUTIL_PARSEUTILS_H - -#include - -#include "rational.h" - -/** - * @file - * misc parsing utilities - */ - -/** - * Parse str and store the parsed ratio in q. - * - * Note that a ratio with infinite (1/0) or negative value is - * considered valid, so you should check on the returned value if you - * want to exclude those values. - * - * The undefined value can be expressed using the "0:0" string. - * - * @param[in,out] q pointer to the AVRational which will contain the ratio - * @param[in] str the string to parse: it has to be a string in the format - * num:den, a float number or an expression - * @param[in] max the maximum allowed numerator and denominator - * @param[in] log_offset log level offset which is applied to the log - * level of log_ctx - * @param[in] log_ctx parent logging context - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_ratio(AVRational *q, const char *str, int max, - int log_offset, void *log_ctx); - -#define av_parse_ratio_quiet(rate, str, max) \ - av_parse_ratio(rate, str, max, AV_LOG_MAX_OFFSET, NULL) - -/** - * Parse str and put in width_ptr and height_ptr the detected values. - * - * @param[in,out] width_ptr pointer to the variable which will contain the detected - * width value - * @param[in,out] height_ptr pointer to the variable which will contain the detected - * height value - * @param[in] str the string to parse: it has to be a string in the format - * width x height or a valid video size abbreviation. - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str); - -/** - * Parse str and store the detected values in *rate. - * - * @param[in,out] rate pointer to the AVRational which will contain the detected - * frame rate - * @param[in] str the string to parse: it has to be a string in the format - * rate_num / rate_den, a float number or a valid video rate abbreviation - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_video_rate(AVRational *rate, const char *str); - -/** - * Put the RGBA values that correspond to color_string in rgba_color. - * - * @param color_string a string specifying a color. It can be the name of - * a color (case insensitive match) or a [0x|#]RRGGBB[AA] sequence, - * possibly followed by "@" and a string representing the alpha - * component. - * The alpha component may be a string composed by "0x" followed by an - * hexadecimal number or a decimal number between 0.0 and 1.0, which - * represents the opacity value (0x00/0.0 means completely transparent, - * 0xff/1.0 completely opaque). - * If the alpha component is not specified then 0xff is assumed. - * The string "random" will result in a random color. - * @param slen length of the initial part of color_string containing the - * color. It can be set to -1 if color_string is a null terminated string - * containing nothing else than the color. - * @return >= 0 in case of success, a negative value in case of - * failure (for example if color_string cannot be parsed). - */ -int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen, - void *log_ctx); - -/** - * Get the name of a color from the internal table of hard-coded named - * colors. - * - * This function is meant to enumerate the color names recognized by - * av_parse_color(). - * - * @param color_idx index of the requested color, starting from 0 - * @param rgbp if not NULL, will point to a 3-elements array with the color value in RGB - * @return the color name string or NULL if color_idx is not in the array - */ -const char *av_get_known_color_name(int color_idx, const uint8_t **rgb); - -/** - * Parse timestr and return in *time a corresponding number of - * microseconds. - * - * @param timeval puts here the number of microseconds corresponding - * to the string in timestr. If the string represents a duration, it - * is the number of microseconds contained in the time interval. If - * the string is a date, is the number of microseconds since 1st of - * January, 1970 up to the time of the parsed date. If timestr cannot - * be successfully parsed, set *time to INT64_MIN. - - * @param timestr a string representing a date or a duration. - * - If a date the syntax is: - * @code - * [{YYYY-MM-DD|YYYYMMDD}[T|t| ]]{{HH:MM:SS[.m...]]]}|{HHMMSS[.m...]]]}}[Z] - * now - * @endcode - * If the value is "now" it takes the current time. - * Time is local time unless Z is appended, in which case it is - * interpreted as UTC. - * If the year-month-day part is not specified it takes the current - * year-month-day. - * - If a duration the syntax is: - * @code - * [-][HH:]MM:SS[.m...] - * [-]S+[.m...] - * @endcode - * @param duration flag which tells how to interpret timestr, if not - * zero timestr is interpreted as a duration, otherwise as a date - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_parse_time(int64_t *timeval, const char *timestr, int duration); - -/** - * Attempt to find a specific tag in a URL. - * - * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done. - * Return 1 if found. - */ -int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info); - -/** - * Simplified version of strptime - * - * Parse the input string p according to the format string fmt and - * store its results in the structure dt. - * This implementation supports only a subset of the formats supported - * by the standard strptime(). - * - * The supported input field descriptors are listed below. - * - %H: the hour as a decimal number, using a 24-hour clock, in the - * range '00' through '23' - * - %J: hours as a decimal number, in the range '0' through INT_MAX - * - %M: the minute as a decimal number, using a 24-hour clock, in the - * range '00' through '59' - * - %S: the second as a decimal number, using a 24-hour clock, in the - * range '00' through '59' - * - %Y: the year as a decimal number, using the Gregorian calendar - * - %m: the month as a decimal number, in the range '1' through '12' - * - %d: the day of the month as a decimal number, in the range '1' - * through '31' - * - %T: alias for '%H:%M:%S' - * - %%: a literal '%' - * - * @return a pointer to the first character not processed in this function - * call. In case the input string contains more characters than - * required by the format string the return value points right after - * the last consumed input character. In case the whole input string - * is consumed the return value points to the null byte at the end of - * the string. On failure NULL is returned. - */ -char *av_small_strptime(const char *p, const char *fmt, struct tm *dt); - -/** - * Convert the decomposed UTC time in tm to a time_t value. - */ -time_t av_timegm(struct tm *tm); - -#endif /* AVUTIL_PARSEUTILS_H */ diff --git a/prebuilts/x86/include/libavutil/pixdesc.h b/prebuilts/x86/include/libavutil/pixdesc.h deleted file mode 100644 index 9b9d386..0000000 --- a/prebuilts/x86/include/libavutil/pixdesc.h +++ /dev/null @@ -1,442 +0,0 @@ -/* - * pixel format descriptor - * Copyright (c) 2009 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXDESC_H -#define AVUTIL_PIXDESC_H - -#include - -#include "attributes.h" -#include "pixfmt.h" -#include "version.h" - -typedef struct AVComponentDescriptor { - /** - * Which of the 4 planes contains the component. - */ - int plane; - - /** - * Number of elements between 2 horizontally consecutive pixels. - * Elements are bits for bitstream formats, bytes otherwise. - */ - int step; - - /** - * Number of elements before the component of the first pixel. - * Elements are bits for bitstream formats, bytes otherwise. - */ - int offset; - - /** - * Number of least significant bits that must be shifted away - * to get the value. - */ - int shift; - - /** - * Number of bits in the component. - */ - int depth; - -#if FF_API_PLUS1_MINUS1 - /** deprecated, use step instead */ - attribute_deprecated int step_minus1; - - /** deprecated, use depth instead */ - attribute_deprecated int depth_minus1; - - /** deprecated, use offset instead */ - attribute_deprecated int offset_plus1; -#endif -} AVComponentDescriptor; - -/** - * Descriptor that unambiguously describes how the bits of a pixel are - * stored in the up to 4 data planes of an image. It also stores the - * subsampling factors and number of components. - * - * @note This is separate of the colorspace (RGB, YCbCr, YPbPr, JPEG-style YUV - * and all the YUV variants) AVPixFmtDescriptor just stores how values - * are stored not what these values represent. - */ -typedef struct AVPixFmtDescriptor { - const char *name; - uint8_t nb_components; ///< The number of components each pixel has, (1-4) - - /** - * Amount to shift the luma width right to find the chroma width. - * For YV12 this is 1 for example. - * chroma_width = AV_CEIL_RSHIFT(luma_width, log2_chroma_w) - * The note above is needed to ensure rounding up. - * This value only refers to the chroma components. - */ - uint8_t log2_chroma_w; - - /** - * Amount to shift the luma height right to find the chroma height. - * For YV12 this is 1 for example. - * chroma_height= AV_CEIL_RSHIFT(luma_height, log2_chroma_h) - * The note above is needed to ensure rounding up. - * This value only refers to the chroma components. - */ - uint8_t log2_chroma_h; - - /** - * Combination of AV_PIX_FMT_FLAG_... flags. - */ - uint64_t flags; - - /** - * Parameters that describe how pixels are packed. - * If the format has 1 or 2 components, then luma is 0. - * If the format has 3 or 4 components: - * if the RGB flag is set then 0 is red, 1 is green and 2 is blue; - * otherwise 0 is luma, 1 is chroma-U and 2 is chroma-V. - * - * If present, the Alpha channel is always the last component. - */ - AVComponentDescriptor comp[4]; - - /** - * Alternative comma-separated names. - */ - const char *alias; -} AVPixFmtDescriptor; - -/** - * Pixel format is big-endian. - */ -#define AV_PIX_FMT_FLAG_BE (1 << 0) -/** - * Pixel format has a palette in data[1], values are indexes in this palette. - */ -#define AV_PIX_FMT_FLAG_PAL (1 << 1) -/** - * All values of a component are bit-wise packed end to end. - */ -#define AV_PIX_FMT_FLAG_BITSTREAM (1 << 2) -/** - * Pixel format is an HW accelerated format. - */ -#define AV_PIX_FMT_FLAG_HWACCEL (1 << 3) -/** - * At least one pixel component is not in the first data plane. - */ -#define AV_PIX_FMT_FLAG_PLANAR (1 << 4) -/** - * The pixel format contains RGB-like data (as opposed to YUV/grayscale). - */ -#define AV_PIX_FMT_FLAG_RGB (1 << 5) - -#if FF_API_PSEUDOPAL -/** - * The pixel format is "pseudo-paletted". This means that it contains a - * fixed palette in the 2nd plane but the palette is fixed/constant for each - * PIX_FMT. This allows interpreting the data as if it was PAL8, which can - * in some cases be simpler. Or the data can be interpreted purely based on - * the pixel format without using the palette. - * An example of a pseudo-paletted format is AV_PIX_FMT_GRAY8 - * - * @deprecated This flag is deprecated, and will be removed. When it is removed, - * the extra palette allocation in AVFrame.data[1] is removed as well. Only - * actual paletted formats (as indicated by AV_PIX_FMT_FLAG_PAL) will have a - * palette. Starting with FFmpeg versions which have this flag deprecated, the - * extra "pseudo" palette is already ignored, and API users are not required to - * allocate a palette for AV_PIX_FMT_FLAG_PSEUDOPAL formats (it was required - * before the deprecation, though). - */ -#define AV_PIX_FMT_FLAG_PSEUDOPAL (1 << 6) -#endif - -/** - * The pixel format has an alpha channel. This is set on all formats that - * support alpha in some way, including AV_PIX_FMT_PAL8. The alpha is always - * straight, never pre-multiplied. - * - * If a codec or a filter does not support alpha, it should set all alpha to - * opaque, or use the equivalent pixel formats without alpha component, e.g. - * AV_PIX_FMT_RGB0 (or AV_PIX_FMT_RGB24 etc.) instead of AV_PIX_FMT_RGBA. - */ -#define AV_PIX_FMT_FLAG_ALPHA (1 << 7) - -/** - * The pixel format is following a Bayer pattern - */ -#define AV_PIX_FMT_FLAG_BAYER (1 << 8) - -/** - * The pixel format contains IEEE-754 floating point values. Precision (double, - * single, or half) should be determined by the pixel size (64, 32, or 16 bits). - */ -#define AV_PIX_FMT_FLAG_FLOAT (1 << 9) - -/** - * Return the number of bits per pixel used by the pixel format - * described by pixdesc. Note that this is not the same as the number - * of bits per sample. - * - * The returned number of bits refers to the number of bits actually - * used for storing the pixel information, that is padding bits are - * not counted. - */ -int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); - -/** - * Return the number of bits per pixel for the pixel format - * described by pixdesc, including any padding or unused bits. - */ -int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); - -/** - * @return a pixel format descriptor for provided pixel format or NULL if - * this pixel format is unknown. - */ -const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt); - -/** - * Iterate over all pixel format descriptors known to libavutil. - * - * @param prev previous descriptor. NULL to get the first descriptor. - * - * @return next descriptor or NULL after the last descriptor - */ -const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev); - -/** - * @return an AVPixelFormat id described by desc, or AV_PIX_FMT_NONE if desc - * is not a valid pointer to a pixel format descriptor. - */ -enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc); - -/** - * Utility function to access log2_chroma_w log2_chroma_h from - * the pixel format AVPixFmtDescriptor. - * - * @param[in] pix_fmt the pixel format - * @param[out] h_shift store log2_chroma_w (horizontal/width shift) - * @param[out] v_shift store log2_chroma_h (vertical/height shift) - * - * @return 0 on success, AVERROR(ENOSYS) on invalid or unknown pixel format - */ -int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, - int *h_shift, int *v_shift); - -/** - * @return number of planes in pix_fmt, a negative AVERROR if pix_fmt is not a - * valid pixel format. - */ -int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt); - -/** - * @return the name for provided color range or NULL if unknown. - */ -const char *av_color_range_name(enum AVColorRange range); - -/** - * @return the AVColorRange value for name or an AVError if not found. - */ -int av_color_range_from_name(const char *name); - -/** - * @return the name for provided color primaries or NULL if unknown. - */ -const char *av_color_primaries_name(enum AVColorPrimaries primaries); - -/** - * @return the AVColorPrimaries value for name or an AVError if not found. - */ -int av_color_primaries_from_name(const char *name); - -/** - * @return the name for provided color transfer or NULL if unknown. - */ -const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer); - -/** - * @return the AVColorTransferCharacteristic value for name or an AVError if not found. - */ -int av_color_transfer_from_name(const char *name); - -/** - * @return the name for provided color space or NULL if unknown. - */ -const char *av_color_space_name(enum AVColorSpace space); - -/** - * @return the AVColorSpace value for name or an AVError if not found. - */ -int av_color_space_from_name(const char *name); - -/** - * @return the name for provided chroma location or NULL if unknown. - */ -const char *av_chroma_location_name(enum AVChromaLocation location); - -/** - * @return the AVChromaLocation value for name or an AVError if not found. - */ -int av_chroma_location_from_name(const char *name); - -/** - * Return the pixel format corresponding to name. - * - * If there is no pixel format with name name, then looks for a - * pixel format with the name corresponding to the native endian - * format of name. - * For example in a little-endian system, first looks for "gray16", - * then for "gray16le". - * - * Finally if no pixel format has been found, returns AV_PIX_FMT_NONE. - */ -enum AVPixelFormat av_get_pix_fmt(const char *name); - -/** - * Return the short name for a pixel format, NULL in case pix_fmt is - * unknown. - * - * @see av_get_pix_fmt(), av_get_pix_fmt_string() - */ -const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt); - -/** - * Print in buf the string corresponding to the pixel format with - * number pix_fmt, or a header if pix_fmt is negative. - * - * @param buf the buffer where to write the string - * @param buf_size the size of buf - * @param pix_fmt the number of the pixel format to print the - * corresponding info string, or a negative value to print the - * corresponding header. - */ -char *av_get_pix_fmt_string(char *buf, int buf_size, - enum AVPixelFormat pix_fmt); - -/** - * Read a line from an image, and write the values of the - * pixel format component c to dst. - * - * @param data the array containing the pointers to the planes of the image - * @param linesize the array containing the linesizes of the image - * @param desc the pixel format descriptor for the image - * @param x the horizontal coordinate of the first pixel to read - * @param y the vertical coordinate of the first pixel to read - * @param w the width of the line to read, that is the number of - * values to write to dst - * @param read_pal_component if not zero and the format is a paletted - * format writes the values corresponding to the palette - * component c in data[1] to dst, rather than the palette indexes in - * data[0]. The behavior is undefined if the format is not paletted. - * @param dst_element_size size of elements in dst array (2 or 4 byte) - */ -void av_read_image_line2(void *dst, const uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int read_pal_component, - int dst_element_size); - -void av_read_image_line(uint16_t *dst, const uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int read_pal_component); - -/** - * Write the values from src to the pixel format component c of an - * image line. - * - * @param src array containing the values to write - * @param data the array containing the pointers to the planes of the - * image to write into. It is supposed to be zeroed. - * @param linesize the array containing the linesizes of the image - * @param desc the pixel format descriptor for the image - * @param x the horizontal coordinate of the first pixel to write - * @param y the vertical coordinate of the first pixel to write - * @param w the width of the line to write, that is the number of - * values to write to the image line - * @param src_element_size size of elements in src array (2 or 4 byte) - */ -void av_write_image_line2(const void *src, uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int src_element_size); - -void av_write_image_line(const uint16_t *src, uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w); - -/** - * Utility function to swap the endianness of a pixel format. - * - * @param[in] pix_fmt the pixel format - * - * @return pixel format with swapped endianness if it exists, - * otherwise AV_PIX_FMT_NONE - */ -enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt); - -#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ -#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ -#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ -#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ -#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ -#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ - -/** - * Compute what kind of losses will occur when converting from one specific - * pixel format to another. - * When converting from one pixel format to another, information loss may occur. - * For example, when converting from RGB24 to GRAY, the color information will - * be lost. Similarly, other losses occur when converting from some formats to - * other formats. These losses can involve loss of chroma, but also loss of - * resolution, loss of color depth, loss due to the color space conversion, loss - * of the alpha bits or loss due to color quantization. - * av_get_fix_fmt_loss() informs you about the various types of losses - * which will occur when converting from one pixel format to another. - * - * @param[in] dst_pix_fmt destination pixel format - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @return Combination of flags informing you what kind of losses will occur - * (maximum loss for an invalid dst_pix_fmt). - */ -int av_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, - enum AVPixelFormat src_pix_fmt, - int has_alpha); - -/** - * Compute what kind of losses will occur when converting from one specific - * pixel format to another. - * When converting from one pixel format to another, information loss may occur. - * For example, when converting from RGB24 to GRAY, the color information will - * be lost. Similarly, other losses occur when converting from some formats to - * other formats. These losses can involve loss of chroma, but also loss of - * resolution, loss of color depth, loss due to the color space conversion, loss - * of the alpha bits or loss due to color quantization. - * av_get_fix_fmt_loss() informs you about the various types of losses - * which will occur when converting from one pixel format to another. - * - * @param[in] dst_pix_fmt destination pixel format - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @return Combination of flags informing you what kind of losses will occur - * (maximum loss for an invalid dst_pix_fmt). - */ -enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); - -#endif /* AVUTIL_PIXDESC_H */ diff --git a/prebuilts/x86/include/libavutil/pixelutils.h b/prebuilts/x86/include/libavutil/pixelutils.h deleted file mode 100644 index a8dbc15..0000000 --- a/prebuilts/x86/include/libavutil/pixelutils.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXELUTILS_H -#define AVUTIL_PIXELUTILS_H - -#include -#include -#include "common.h" - -/** - * Sum of abs(src1[x] - src2[x]) - */ -typedef int (*av_pixelutils_sad_fn)(const uint8_t *src1, ptrdiff_t stride1, - const uint8_t *src2, ptrdiff_t stride2); - -/** - * Get a potentially optimized pointer to a Sum-of-absolute-differences - * function (see the av_pixelutils_sad_fn prototype). - * - * @param w_bits 1< - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXFMT_H -#define AVUTIL_PIXFMT_H - -/** - * @file - * pixel format definitions - */ - -#include "libavutil/avconfig.h" -#include "version.h" - -#define AVPALETTE_SIZE 1024 -#define AVPALETTE_COUNT 256 - -/** - * Pixel format. - * - * @note - * AV_PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA - * color is put together as: - * (A << 24) | (R << 16) | (G << 8) | B - * This is stored as BGRA on little-endian CPU architectures and ARGB on - * big-endian CPUs. - * - * @note - * If the resolution is not a multiple of the chroma subsampling factor - * then the chroma plane resolution must be rounded up. - * - * @par - * When the pixel format is palettized RGB32 (AV_PIX_FMT_PAL8), the palettized - * image data is stored in AVFrame.data[0]. The palette is transported in - * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is - * formatted the same as in AV_PIX_FMT_RGB32 described above (i.e., it is - * also endian-specific). Note also that the individual RGB32 palette - * components stored in AVFrame.data[1] should be in the range 0..255. - * This is important as many custom PAL8 video codecs that were designed - * to run on the IBM VGA graphics adapter use 6-bit palette components. - * - * @par - * For all the 8 bits per pixel formats, an RGB32 palette is in data[1] like - * for pal8. This palette is filled in automatically by the function - * allocating the picture. - */ -enum AVPixelFormat { - AV_PIX_FMT_NONE = -1, - AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) - AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr - AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... - AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... - AV_PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - AV_PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) - AV_PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) - AV_PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) - AV_PIX_FMT_GRAY8, ///< Y , 8bpp - AV_PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb - AV_PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb - AV_PIX_FMT_PAL8, ///< 8 bits with AV_PIX_FMT_RGB32 palette - AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range - AV_PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range - AV_PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range - AV_PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 - AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 - AV_PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) - AV_PIX_FMT_BGR4, ///< 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 - AV_PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) - AV_PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) - AV_PIX_FMT_RGB4, ///< 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 - AV_PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) - AV_PIX_FMT_NV12, ///< 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) - AV_PIX_FMT_NV21, ///< as above, but U and V bytes are swapped - - AV_PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... - AV_PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... - AV_PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... - AV_PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... - - AV_PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian - AV_PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian - AV_PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) - AV_PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range - AV_PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) - AV_PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian - AV_PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian - - AV_PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian - AV_PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian - AV_PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined - AV_PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined - - AV_PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian - AV_PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian - AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined - AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined - -#if FF_API_VAAPI - /** @name Deprecated pixel formats */ - /**@{*/ - AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers - AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers - AV_PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a VASurfaceID - /**@}*/ - AV_PIX_FMT_VAAPI = AV_PIX_FMT_VAAPI_VLD, -#else - /** - * Hardware acceleration through VA-API, data[3] contains a - * VASurfaceID. - */ - AV_PIX_FMT_VAAPI, -#endif - - AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer - - AV_PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_YA8, ///< 8 bits gray, 8 bits alpha - - AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 - AV_PIX_FMT_GRAY8A= AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 - - AV_PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian - AV_PIX_FMT_BGR48LE, ///< 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. - */ - AV_PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp - AV_PIX_FMT_GBR24P = AV_PIX_FMT_GBRP, // alias for #AV_PIX_FMT_GBRP - AV_PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big-endian - AV_PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little-endian - AV_PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big-endian - AV_PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little-endian - AV_PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big-endian - AV_PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little-endian - AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) - AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) - AV_PIX_FMT_YUVA420P9BE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian - AV_PIX_FMT_YUVA420P9LE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian - AV_PIX_FMT_YUVA422P9BE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian - AV_PIX_FMT_YUVA422P9LE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian - AV_PIX_FMT_YUVA444P9BE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian - AV_PIX_FMT_YUVA444P9LE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian - AV_PIX_FMT_YUVA420P10BE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - AV_PIX_FMT_YUVA420P10LE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - AV_PIX_FMT_YUVA422P10BE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA422P10LE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA444P10BE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA444P10LE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA420P16BE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - AV_PIX_FMT_YUVA420P16LE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - AV_PIX_FMT_YUVA422P16BE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA422P16LE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - - AV_PIX_FMT_VDPAU, ///< HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface - - AV_PIX_FMT_XYZ12LE, ///< 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 - AV_PIX_FMT_XYZ12BE, ///< 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 - AV_PIX_FMT_NV16, ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - AV_PIX_FMT_NV20LE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_NV20BE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - - AV_PIX_FMT_RGBA64BE, ///< 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 - AV_PIX_FMT_RGBA64LE, ///< 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 - AV_PIX_FMT_BGRA64BE, ///< 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 - AV_PIX_FMT_BGRA64LE, ///< 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 - - AV_PIX_FMT_YVYU422, ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb - - AV_PIX_FMT_YA16BE, ///< 16 bits gray, 16 bits alpha (big-endian) - AV_PIX_FMT_YA16LE, ///< 16 bits gray, 16 bits alpha (little-endian) - - AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp - AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian - AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian - /** - * HW acceleration through QSV, data[3] contains a pointer to the - * mfxFrameSurface1 structure. - */ - AV_PIX_FMT_QSV, - /** - * HW acceleration though MMAL, data[3] contains a pointer to the - * MMAL_BUFFER_HEADER_T structure. - */ - AV_PIX_FMT_MMAL, - - AV_PIX_FMT_D3D11VA_VLD, ///< 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. - */ - AV_PIX_FMT_CUDA, - - AV_PIX_FMT_0RGB, ///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined - AV_PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined - AV_PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined - AV_PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined - - AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big-endian - AV_PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little-endian - AV_PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big-endian - AV_PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little-endian - AV_PIX_FMT_YUVJ411P, ///< 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 - - AV_PIX_FMT_BAYER_BGGR8, ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples - AV_PIX_FMT_BAYER_RGGB8, ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples - AV_PIX_FMT_BAYER_GBRG8, ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples - AV_PIX_FMT_BAYER_GRBG8, ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples - AV_PIX_FMT_BAYER_BGGR16LE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_BGGR16BE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_RGGB16LE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_RGGB16BE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_GBRG16LE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_GBRG16BE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian - - AV_PIX_FMT_XVMC,///< XVideo Motion Acceleration via common packet passing - - AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian - AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian - AV_PIX_FMT_YUV440P12LE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian - AV_PIX_FMT_YUV440P12BE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian - AV_PIX_FMT_AYUV64LE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian - AV_PIX_FMT_AYUV64BE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian - - AV_PIX_FMT_VIDEOTOOLBOX, ///< hardware decoding through Videotoolbox - - AV_PIX_FMT_P010LE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian - AV_PIX_FMT_P010BE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian - - AV_PIX_FMT_GBRAP12BE, ///< planar GBR 4:4:4:4 48bpp, big-endian - AV_PIX_FMT_GBRAP12LE, ///< planar GBR 4:4:4:4 48bpp, little-endian - - AV_PIX_FMT_GBRAP10BE, ///< planar GBR 4:4:4:4 40bpp, big-endian - AV_PIX_FMT_GBRAP10LE, ///< planar GBR 4:4:4:4 40bpp, little-endian - - AV_PIX_FMT_MEDIACODEC, ///< hardware decoding through MediaCodec - - AV_PIX_FMT_GRAY12BE, ///< Y , 12bpp, big-endian - AV_PIX_FMT_GRAY12LE, ///< Y , 12bpp, little-endian - AV_PIX_FMT_GRAY10BE, ///< Y , 10bpp, big-endian - AV_PIX_FMT_GRAY10LE, ///< Y , 10bpp, little-endian - - AV_PIX_FMT_P016LE, ///< like NV12, with 16bpp per component, little-endian - AV_PIX_FMT_P016BE, ///< 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). - */ - AV_PIX_FMT_D3D11, - - AV_PIX_FMT_GRAY9BE, ///< Y , 9bpp, big-endian - AV_PIX_FMT_GRAY9LE, ///< Y , 9bpp, little-endian - - AV_PIX_FMT_GBRPF32BE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, big-endian - AV_PIX_FMT_GBRPF32LE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, little-endian - AV_PIX_FMT_GBRAPF32BE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, big-endian - AV_PIX_FMT_GBRAPF32LE, ///< 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. - */ - AV_PIX_FMT_DRM_PRIME, - /** - * 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. - */ - AV_PIX_FMT_OPENCL, - - AV_PIX_FMT_GRAY14BE, ///< Y , 14bpp, big-endian - AV_PIX_FMT_GRAY14LE, ///< Y , 14bpp, little-endian - - AV_PIX_FMT_GRAYF32BE, ///< IEEE-754 single precision Y, 32bpp, big-endian - AV_PIX_FMT_GRAYF32LE, ///< IEEE-754 single precision Y, 32bpp, little-endian - - AV_PIX_FMT_YUVA422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, big-endian - AV_PIX_FMT_YUVA422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, little-endian - AV_PIX_FMT_YUVA444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, big-endian - AV_PIX_FMT_YUVA444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, little-endian - - AV_PIX_FMT_NV24, ///< 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) - AV_PIX_FMT_NV42, ///< as above, but U and V bytes are swapped - - /** - * Vulkan hardware images. - * - * data[0] points to an AVVkFrame - */ - AV_PIX_FMT_VULKAN, - - AV_PIX_FMT_Y210BE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, big-endian - AV_PIX_FMT_Y210LE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, little-endian - - AV_PIX_FMT_X2RGB10LE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_X2RGB10BE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions -}; - -#if AV_HAVE_BIGENDIAN -# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##be -#else -# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##le -#endif - -#define AV_PIX_FMT_RGB32 AV_PIX_FMT_NE(ARGB, BGRA) -#define AV_PIX_FMT_RGB32_1 AV_PIX_FMT_NE(RGBA, ABGR) -#define AV_PIX_FMT_BGR32 AV_PIX_FMT_NE(ABGR, RGBA) -#define AV_PIX_FMT_BGR32_1 AV_PIX_FMT_NE(BGRA, ARGB) -#define AV_PIX_FMT_0RGB32 AV_PIX_FMT_NE(0RGB, BGR0) -#define AV_PIX_FMT_0BGR32 AV_PIX_FMT_NE(0BGR, RGB0) - -#define AV_PIX_FMT_GRAY9 AV_PIX_FMT_NE(GRAY9BE, GRAY9LE) -#define AV_PIX_FMT_GRAY10 AV_PIX_FMT_NE(GRAY10BE, GRAY10LE) -#define AV_PIX_FMT_GRAY12 AV_PIX_FMT_NE(GRAY12BE, GRAY12LE) -#define AV_PIX_FMT_GRAY14 AV_PIX_FMT_NE(GRAY14BE, GRAY14LE) -#define AV_PIX_FMT_GRAY16 AV_PIX_FMT_NE(GRAY16BE, GRAY16LE) -#define AV_PIX_FMT_YA16 AV_PIX_FMT_NE(YA16BE, YA16LE) -#define AV_PIX_FMT_RGB48 AV_PIX_FMT_NE(RGB48BE, RGB48LE) -#define AV_PIX_FMT_RGB565 AV_PIX_FMT_NE(RGB565BE, RGB565LE) -#define AV_PIX_FMT_RGB555 AV_PIX_FMT_NE(RGB555BE, RGB555LE) -#define AV_PIX_FMT_RGB444 AV_PIX_FMT_NE(RGB444BE, RGB444LE) -#define AV_PIX_FMT_RGBA64 AV_PIX_FMT_NE(RGBA64BE, RGBA64LE) -#define AV_PIX_FMT_BGR48 AV_PIX_FMT_NE(BGR48BE, BGR48LE) -#define AV_PIX_FMT_BGR565 AV_PIX_FMT_NE(BGR565BE, BGR565LE) -#define AV_PIX_FMT_BGR555 AV_PIX_FMT_NE(BGR555BE, BGR555LE) -#define AV_PIX_FMT_BGR444 AV_PIX_FMT_NE(BGR444BE, BGR444LE) -#define AV_PIX_FMT_BGRA64 AV_PIX_FMT_NE(BGRA64BE, BGRA64LE) - -#define AV_PIX_FMT_YUV420P9 AV_PIX_FMT_NE(YUV420P9BE , YUV420P9LE) -#define AV_PIX_FMT_YUV422P9 AV_PIX_FMT_NE(YUV422P9BE , YUV422P9LE) -#define AV_PIX_FMT_YUV444P9 AV_PIX_FMT_NE(YUV444P9BE , YUV444P9LE) -#define AV_PIX_FMT_YUV420P10 AV_PIX_FMT_NE(YUV420P10BE, YUV420P10LE) -#define AV_PIX_FMT_YUV422P10 AV_PIX_FMT_NE(YUV422P10BE, YUV422P10LE) -#define AV_PIX_FMT_YUV440P10 AV_PIX_FMT_NE(YUV440P10BE, YUV440P10LE) -#define AV_PIX_FMT_YUV444P10 AV_PIX_FMT_NE(YUV444P10BE, YUV444P10LE) -#define AV_PIX_FMT_YUV420P12 AV_PIX_FMT_NE(YUV420P12BE, YUV420P12LE) -#define AV_PIX_FMT_YUV422P12 AV_PIX_FMT_NE(YUV422P12BE, YUV422P12LE) -#define AV_PIX_FMT_YUV440P12 AV_PIX_FMT_NE(YUV440P12BE, YUV440P12LE) -#define AV_PIX_FMT_YUV444P12 AV_PIX_FMT_NE(YUV444P12BE, YUV444P12LE) -#define AV_PIX_FMT_YUV420P14 AV_PIX_FMT_NE(YUV420P14BE, YUV420P14LE) -#define AV_PIX_FMT_YUV422P14 AV_PIX_FMT_NE(YUV422P14BE, YUV422P14LE) -#define AV_PIX_FMT_YUV444P14 AV_PIX_FMT_NE(YUV444P14BE, YUV444P14LE) -#define AV_PIX_FMT_YUV420P16 AV_PIX_FMT_NE(YUV420P16BE, YUV420P16LE) -#define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE) -#define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE) - -#define AV_PIX_FMT_GBRP9 AV_PIX_FMT_NE(GBRP9BE , GBRP9LE) -#define AV_PIX_FMT_GBRP10 AV_PIX_FMT_NE(GBRP10BE, GBRP10LE) -#define AV_PIX_FMT_GBRP12 AV_PIX_FMT_NE(GBRP12BE, GBRP12LE) -#define AV_PIX_FMT_GBRP14 AV_PIX_FMT_NE(GBRP14BE, GBRP14LE) -#define AV_PIX_FMT_GBRP16 AV_PIX_FMT_NE(GBRP16BE, GBRP16LE) -#define AV_PIX_FMT_GBRAP10 AV_PIX_FMT_NE(GBRAP10BE, GBRAP10LE) -#define AV_PIX_FMT_GBRAP12 AV_PIX_FMT_NE(GBRAP12BE, GBRAP12LE) -#define AV_PIX_FMT_GBRAP16 AV_PIX_FMT_NE(GBRAP16BE, GBRAP16LE) - -#define AV_PIX_FMT_BAYER_BGGR16 AV_PIX_FMT_NE(BAYER_BGGR16BE, BAYER_BGGR16LE) -#define AV_PIX_FMT_BAYER_RGGB16 AV_PIX_FMT_NE(BAYER_RGGB16BE, BAYER_RGGB16LE) -#define AV_PIX_FMT_BAYER_GBRG16 AV_PIX_FMT_NE(BAYER_GBRG16BE, BAYER_GBRG16LE) -#define AV_PIX_FMT_BAYER_GRBG16 AV_PIX_FMT_NE(BAYER_GRBG16BE, BAYER_GRBG16LE) - -#define AV_PIX_FMT_GBRPF32 AV_PIX_FMT_NE(GBRPF32BE, GBRPF32LE) -#define AV_PIX_FMT_GBRAPF32 AV_PIX_FMT_NE(GBRAPF32BE, GBRAPF32LE) - -#define AV_PIX_FMT_GRAYF32 AV_PIX_FMT_NE(GRAYF32BE, GRAYF32LE) - -#define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE , YUVA420P9LE) -#define AV_PIX_FMT_YUVA422P9 AV_PIX_FMT_NE(YUVA422P9BE , YUVA422P9LE) -#define AV_PIX_FMT_YUVA444P9 AV_PIX_FMT_NE(YUVA444P9BE , YUVA444P9LE) -#define AV_PIX_FMT_YUVA420P10 AV_PIX_FMT_NE(YUVA420P10BE, YUVA420P10LE) -#define AV_PIX_FMT_YUVA422P10 AV_PIX_FMT_NE(YUVA422P10BE, YUVA422P10LE) -#define AV_PIX_FMT_YUVA444P10 AV_PIX_FMT_NE(YUVA444P10BE, YUVA444P10LE) -#define AV_PIX_FMT_YUVA422P12 AV_PIX_FMT_NE(YUVA422P12BE, YUVA422P12LE) -#define AV_PIX_FMT_YUVA444P12 AV_PIX_FMT_NE(YUVA444P12BE, YUVA444P12LE) -#define AV_PIX_FMT_YUVA420P16 AV_PIX_FMT_NE(YUVA420P16BE, YUVA420P16LE) -#define AV_PIX_FMT_YUVA422P16 AV_PIX_FMT_NE(YUVA422P16BE, YUVA422P16LE) -#define AV_PIX_FMT_YUVA444P16 AV_PIX_FMT_NE(YUVA444P16BE, YUVA444P16LE) - -#define AV_PIX_FMT_XYZ12 AV_PIX_FMT_NE(XYZ12BE, XYZ12LE) -#define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE) -#define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE) -#define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE) -#define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE) - -#define AV_PIX_FMT_Y210 AV_PIX_FMT_NE(Y210BE, Y210LE) -#define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE) - -/** - * Chromaticity coordinates of the source primaries. - * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.1. - */ -enum AVColorPrimaries { - AVCOL_PRI_RESERVED0 = 0, - AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B - AVCOL_PRI_UNSPECIFIED = 2, - AVCOL_PRI_RESERVED = 3, - AVCOL_PRI_BT470M = 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - - AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM - AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC - AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above - AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C - AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 - AVCOL_PRI_SMPTE428 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) - AVCOL_PRI_SMPTEST428_1 = AVCOL_PRI_SMPTE428, - AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3 - AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3 - AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E / JEDEC P22 phosphors - AVCOL_PRI_JEDEC_P22 = AVCOL_PRI_EBU3213, - AVCOL_PRI_NB ///< Not part of ABI -}; - -/** - * Color Transfer Characteristic. - * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.2. - */ -enum AVColorTransferCharacteristic { - AVCOL_TRC_RESERVED0 = 0, - AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 - AVCOL_TRC_UNSPECIFIED = 2, - AVCOL_TRC_RESERVED = 3, - AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM - AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG - AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC - AVCOL_TRC_SMPTE240M = 7, - AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics" - AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)" - AVCOL_TRC_LOG_SQRT = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)" - AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 - AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut - AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) - AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10-bit system - AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12-bit system - AVCOL_TRC_SMPTE2084 = 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems - AVCOL_TRC_SMPTEST2084 = AVCOL_TRC_SMPTE2084, - AVCOL_TRC_SMPTE428 = 17, ///< SMPTE ST 428-1 - AVCOL_TRC_SMPTEST428_1 = AVCOL_TRC_SMPTE428, - AVCOL_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" - AVCOL_TRC_NB ///< Not part of ABI -}; - -/** - * YUV colorspace type. - * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.3. - */ -enum AVColorSpace { - AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB) - AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B - AVCOL_SPC_UNSPECIFIED = 2, - AVCOL_SPC_RESERVED = 3, - AVCOL_SPC_FCC = 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 - AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC - AVCOL_SPC_SMPTE240M = 7, ///< functionally identical to above - AVCOL_SPC_YCGCO = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 - AVCOL_SPC_YCOCG = AVCOL_SPC_YCGCO, - AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system - AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system - AVCOL_SPC_SMPTE2085 = 11, ///< SMPTE 2085, Y'D'zD'x - AVCOL_SPC_CHROMA_DERIVED_NCL = 12, ///< Chromaticity-derived non-constant luminance system - AVCOL_SPC_CHROMA_DERIVED_CL = 13, ///< Chromaticity-derived constant luminance system - AVCOL_SPC_ICTCP = 14, ///< ITU-R BT.2100-0, ICtCp - AVCOL_SPC_NB ///< Not part of ABI -}; - -/** - * Visual content value range. - * - * These values are based on definitions that can be found in multiple - * specifications, such as ITU-T BT.709 (3.4 - Quantization of RGB, luminance - * and colour-difference signals), ITU-T BT.2020 (Table 5 - Digital - * Representation) as well as ITU-T BT.2100 (Table 9 - Digital 10- and 12-bit - * integer representation). At the time of writing, the BT.2100 one is - * recommended, as it also defines the full range representation. - * - * Common definitions: - * - For RGB and luminance planes such as Y in YCbCr and I in ICtCp, - * 'E' is the original value in range of 0.0 to 1.0. - * - For chrominance planes such as Cb,Cr and Ct,Cp, 'E' is the original - * value in range of -0.5 to 0.5. - * - 'n' is the output bit depth. - * - For additional definitions such as rounding and clipping to valid n - * bit unsigned integer range, please refer to BT.2100 (Table 9). - */ -enum AVColorRange { - AVCOL_RANGE_UNSPECIFIED = 0, - - /** - * Narrow or limited range content. - * - * - For luminance planes: - * - * (219 * E + 16) * 2^(n-8) - * - * F.ex. the range of 16-235 for 8 bits - * - * - For chrominance planes: - * - * (224 * E + 128) * 2^(n-8) - * - * F.ex. the range of 16-240 for 8 bits - */ - AVCOL_RANGE_MPEG = 1, - - /** - * Full range content. - * - * - For RGB and luminance planes: - * - * (2^n - 1) * E - * - * F.ex. the range of 0-255 for 8 bits - * - * - For chrominance planes: - * - * (2^n - 1) * E + 2^(n - 1) - * - * F.ex. the range of 1-255 for 8 bits - */ - AVCOL_RANGE_JPEG = 2, - AVCOL_RANGE_NB ///< Not part of ABI -}; - -/** - * Location of chroma samples. - * - * Illustration showing the location of the first (top left) chroma sample of the - * image, the left shows only luma, the right - * shows the location of the chroma sample, the 2 could be imagined to overlay - * each other but are drawn separately due to limitations of ASCII - * - * 1st 2nd 1st 2nd horizontal luma sample positions - * v v v v - * ______ ______ - *1st luma line > |X X ... |3 4 X ... X are luma samples, - * | |1 2 1-6 are possible chroma positions - *2nd luma line > |X X ... |5 6 X ... 0 is undefined/unknown position - */ -enum AVChromaLocation { - AVCHROMA_LOC_UNSPECIFIED = 0, - AVCHROMA_LOC_LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0 - AVCHROMA_LOC_CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0 - AVCHROMA_LOC_TOPLEFT = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 - AVCHROMA_LOC_TOP = 4, - AVCHROMA_LOC_BOTTOMLEFT = 5, - AVCHROMA_LOC_BOTTOM = 6, - AVCHROMA_LOC_NB ///< Not part of ABI -}; - -#endif /* AVUTIL_PIXFMT_H */ diff --git a/prebuilts/x86/include/libavutil/random_seed.h b/prebuilts/x86/include/libavutil/random_seed.h deleted file mode 100644 index 0462a04..0000000 --- a/prebuilts/x86/include/libavutil/random_seed.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2009 Baptiste Coudurier - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_RANDOM_SEED_H -#define AVUTIL_RANDOM_SEED_H - -#include -/** - * @addtogroup lavu_crypto - * @{ - */ - -/** - * Get a seed to use in conjunction with random functions. - * This function tries to provide a good seed at a best effort bases. - * Its possible to call this function multiple times if more bits are needed. - * It can be quite slow, which is why it should only be used as seed for a faster - * PRNG. The quality of the seed depends on the platform. - */ -uint32_t av_get_random_seed(void); - -/** - * @} - */ - -#endif /* AVUTIL_RANDOM_SEED_H */ diff --git a/prebuilts/x86/include/libavutil/rational.h b/prebuilts/x86/include/libavutil/rational.h deleted file mode 100644 index cbb08a0..0000000 --- a/prebuilts/x86/include/libavutil/rational.h +++ /dev/null @@ -1,220 +0,0 @@ -/* - * rational numbers - * Copyright (c) 2003 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_math_rational - * Utilties for rational number calculation. - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_RATIONAL_H -#define AVUTIL_RATIONAL_H - -#include -#include -#include "attributes.h" - -/** - * @defgroup lavu_math_rational AVRational - * @ingroup lavu_math - * Rational number calculation. - * - * While rational numbers can be expressed as floating-point numbers, the - * conversion process is a lossy one, so are floating-point operations. On the - * other hand, the nature of FFmpeg demands highly accurate calculation of - * timestamps. This set of rational number utilities serves as a generic - * interface for manipulating rational numbers as pairs of numerators and - * denominators. - * - * Many of the functions that operate on AVRational's have the suffix `_q`, in - * reference to the mathematical symbol "ℚ" (Q) which denotes the set of all - * rational numbers. - * - * @{ - */ - -/** - * Rational number (pair of numerator and denominator). - */ -typedef struct AVRational{ - int num; ///< Numerator - int den; ///< Denominator -} AVRational; - -/** - * Create an AVRational. - * - * Useful for compilers that do not support compound literals. - * - * @note The return value is not reduced. - * @see av_reduce() - */ -static inline AVRational av_make_q(int num, int den) -{ - AVRational r = { num, den }; - return r; -} - -/** - * Compare two rationals. - * - * @param a First rational - * @param b Second rational - * - * @return One of the following values: - * - 0 if `a == b` - * - 1 if `a > b` - * - -1 if `a < b` - * - `INT_MIN` if one of the values is of the form `0 / 0` - */ -static inline int av_cmp_q(AVRational a, AVRational b){ - const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den; - - if(tmp) return (int)((tmp ^ a.den ^ b.den)>>63)|1; - else if(b.den && a.den) return 0; - else if(a.num && b.num) return (a.num>>31) - (b.num>>31); - else return INT_MIN; -} - -/** - * Convert an AVRational to a `double`. - * @param a AVRational to convert - * @return `a` in floating-point form - * @see av_d2q() - */ -static inline double av_q2d(AVRational a){ - return a.num / (double) a.den; -} - -/** - * Reduce a fraction. - * - * This is useful for framerate calculations. - * - * @param[out] dst_num Destination numerator - * @param[out] dst_den Destination denominator - * @param[in] num Source numerator - * @param[in] den Source denominator - * @param[in] max Maximum allowed values for `dst_num` & `dst_den` - * @return 1 if the operation is exact, 0 otherwise - */ -int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max); - -/** - * Multiply two rationals. - * @param b First rational - * @param c Second rational - * @return b*c - */ -AVRational av_mul_q(AVRational b, AVRational c) av_const; - -/** - * Divide one rational by another. - * @param b First rational - * @param c Second rational - * @return b/c - */ -AVRational av_div_q(AVRational b, AVRational c) av_const; - -/** - * Add two rationals. - * @param b First rational - * @param c Second rational - * @return b+c - */ -AVRational av_add_q(AVRational b, AVRational c) av_const; - -/** - * Subtract one rational from another. - * @param b First rational - * @param c Second rational - * @return b-c - */ -AVRational av_sub_q(AVRational b, AVRational c) av_const; - -/** - * Invert a rational. - * @param q value - * @return 1 / q - */ -static av_always_inline AVRational av_inv_q(AVRational q) -{ - AVRational r = { q.den, q.num }; - return r; -} - -/** - * Convert a double precision floating point number to a rational. - * - * In case of infinity, the returned value is expressed as `{1, 0}` or - * `{-1, 0}` depending on the sign. - * - * @param d `double` to convert - * @param max Maximum allowed numerator and denominator - * @return `d` in AVRational form - * @see av_q2d() - */ -AVRational av_d2q(double d, int max) av_const; - -/** - * Find which of the two rationals is closer to another rational. - * - * @param q Rational to be compared against - * @param q1,q2 Rationals to be tested - * @return One of the following values: - * - 1 if `q1` is nearer to `q` than `q2` - * - -1 if `q2` is nearer to `q` than `q1` - * - 0 if they have the same distance - */ -int av_nearer_q(AVRational q, AVRational q1, AVRational q2); - -/** - * Find the value in a list of rationals nearest a given reference rational. - * - * @param q Reference rational - * @param q_list Array of rationals terminated by `{0, 0}` - * @return Index of the nearest value found in the array - */ -int av_find_nearest_q_idx(AVRational q, const AVRational* q_list); - -/** - * Convert an AVRational to a IEEE 32-bit `float` expressed in fixed-point - * format. - * - * @param q Rational to be converted - * @return Equivalent floating-point value, expressed as an unsigned 32-bit - * integer. - * @note The returned value is platform-indepedant. - */ -uint32_t av_q2intfloat(AVRational q); - -/** - * Return the best rational so that a and b are multiple of it. - * If the resulting denominator is larger than max_den, return def. - */ -AVRational av_gcd_q(AVRational a, AVRational b, int max_den, AVRational def); - -/** - * @} - */ - -#endif /* AVUTIL_RATIONAL_H */ diff --git a/prebuilts/x86/include/libavutil/rc4.h b/prebuilts/x86/include/libavutil/rc4.h deleted file mode 100644 index 029cd2a..0000000 --- a/prebuilts/x86/include/libavutil/rc4.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * RC4 encryption/decryption/pseudo-random number generator - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_RC4_H -#define AVUTIL_RC4_H - -#include - -/** - * @defgroup lavu_rc4 RC4 - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVRC4 { - uint8_t state[256]; - int x, y; -} AVRC4; - -/** - * Allocate an AVRC4 context. - */ -AVRC4 *av_rc4_alloc(void); - -/** - * @brief Initializes an AVRC4 context. - * - * @param key_bits must be a multiple of 8 - * @param decrypt 0 for encryption, 1 for decryption, currently has no effect - * @return zero on success, negative value otherwise - */ -int av_rc4_init(struct AVRC4 *d, const uint8_t *key, int key_bits, int decrypt); - -/** - * @brief Encrypts / decrypts using the RC4 algorithm. - * - * @param count number of bytes - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst, may be NULL - * @param iv not (yet) used for RC4, should be NULL - * @param decrypt 0 for encryption, 1 for decryption, not (yet) used - */ -void av_rc4_crypt(struct AVRC4 *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_RC4_H */ diff --git a/prebuilts/x86/include/libavutil/replaygain.h b/prebuilts/x86/include/libavutil/replaygain.h deleted file mode 100644 index b49bf1a..0000000 --- a/prebuilts/x86/include/libavutil/replaygain.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_REPLAYGAIN_H -#define AVUTIL_REPLAYGAIN_H - -#include - -/** - * ReplayGain information (see - * http://wiki.hydrogenaudio.org/index.php?title=ReplayGain_1.0_specification). - * The size of this struct is a part of the public ABI. - */ -typedef struct AVReplayGain { - /** - * Track replay gain in microbels (divide by 100000 to get the value in dB). - * Should be set to INT32_MIN when unknown. - */ - int32_t track_gain; - /** - * Peak track amplitude, with 100000 representing full scale (but values - * may overflow). 0 when unknown. - */ - uint32_t track_peak; - /** - * Same as track_gain, but for the whole album. - */ - int32_t album_gain; - /** - * Same as track_peak, but for the whole album, - */ - uint32_t album_peak; -} AVReplayGain; - -#endif /* AVUTIL_REPLAYGAIN_H */ diff --git a/prebuilts/x86/include/libavutil/ripemd.h b/prebuilts/x86/include/libavutil/ripemd.h deleted file mode 100644 index 921aa66..0000000 --- a/prebuilts/x86/include/libavutil/ripemd.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * Copyright (C) 2013 James Almer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_ripemd - * Public header for RIPEMD hash function implementation. - */ - -#ifndef AVUTIL_RIPEMD_H -#define AVUTIL_RIPEMD_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_ripemd RIPEMD - * @ingroup lavu_hash - * RIPEMD hash function implementation. - * - * @{ - */ - -extern const int av_ripemd_size; - -struct AVRIPEMD; - -/** - * Allocate an AVRIPEMD context. - */ -struct AVRIPEMD *av_ripemd_alloc(void); - -/** - * Initialize RIPEMD hashing. - * - * @param context pointer to the function context (of size av_ripemd_size) - * @param bits number of bits in digest (128, 160, 256 or 320 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_ripemd_init(struct AVRIPEMD* context, int bits); - -/** - * Update hash value. - * - * @param context hash function context - * @param data input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, unsigned int len); -#else -void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_ripemd_final(struct AVRIPEMD* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_RIPEMD_H */ diff --git a/prebuilts/x86/include/libavutil/samplefmt.h b/prebuilts/x86/include/libavutil/samplefmt.h deleted file mode 100644 index 8cd43ae..0000000 --- a/prebuilts/x86/include/libavutil/samplefmt.h +++ /dev/null @@ -1,272 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_SAMPLEFMT_H -#define AVUTIL_SAMPLEFMT_H - -#include - -#include "avutil.h" -#include "attributes.h" - -/** - * @addtogroup lavu_audio - * @{ - * - * @defgroup lavu_sampfmts Audio sample formats - * - * Audio sample format enumeration and related convenience functions. - * @{ - */ - -/** - * Audio sample formats - * - * - The data described by the sample format is always in native-endian order. - * Sample values can be expressed by native C types, hence the lack of a signed - * 24-bit sample format even though it is a common raw audio data format. - * - * - The floating-point formats are based on full volume being in the range - * [-1.0, 1.0]. Any values outside this range are beyond full volume level. - * - * - The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg - * (such as AVFrame in libavcodec) is as follows: - * - * @par - * For planar sample formats, each audio channel is in a separate data plane, - * and linesize is the buffer size, in bytes, for a single plane. All data - * planes must be the same size. For packed sample formats, only the first data - * plane is used, and samples for each channel are interleaved. In this case, - * linesize is the buffer size, in bytes, for the 1 plane. - * - */ -enum AVSampleFormat { - AV_SAMPLE_FMT_NONE = -1, - AV_SAMPLE_FMT_U8, ///< unsigned 8 bits - AV_SAMPLE_FMT_S16, ///< signed 16 bits - AV_SAMPLE_FMT_S32, ///< signed 32 bits - AV_SAMPLE_FMT_FLT, ///< float - AV_SAMPLE_FMT_DBL, ///< double - - AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar - AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar - AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar - AV_SAMPLE_FMT_FLTP, ///< float, planar - AV_SAMPLE_FMT_DBLP, ///< double, planar - AV_SAMPLE_FMT_S64, ///< signed 64 bits - AV_SAMPLE_FMT_S64P, ///< signed 64 bits, planar - - AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking dynamically -}; - -/** - * Return the name of sample_fmt, or NULL if sample_fmt is not - * recognized. - */ -const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt); - -/** - * Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE - * on error. - */ -enum AVSampleFormat av_get_sample_fmt(const char *name); - -/** - * Return the planar<->packed alternative form of the given sample format, or - * AV_SAMPLE_FMT_NONE on error. If the passed sample_fmt is already in the - * requested planar/packed format, the format returned is the same as the - * input. - */ -enum AVSampleFormat av_get_alt_sample_fmt(enum AVSampleFormat sample_fmt, int planar); - -/** - * Get the packed alternative form of the given sample format. - * - * If the passed sample_fmt is already in packed format, the format returned is - * the same as the input. - * - * @return the packed alternative form of the given sample format or - AV_SAMPLE_FMT_NONE on error. - */ -enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt); - -/** - * Get the planar alternative form of the given sample format. - * - * If the passed sample_fmt is already in planar format, the format returned is - * the same as the input. - * - * @return the planar alternative form of the given sample format or - AV_SAMPLE_FMT_NONE on error. - */ -enum AVSampleFormat av_get_planar_sample_fmt(enum AVSampleFormat sample_fmt); - -/** - * Generate a string corresponding to the sample format with - * sample_fmt, or a header if sample_fmt is negative. - * - * @param buf the buffer where to write the string - * @param buf_size the size of buf - * @param sample_fmt the number of the sample format to print the - * corresponding info string, or a negative value to print the - * corresponding header. - * @return the pointer to the filled buffer or NULL if sample_fmt is - * unknown or in case of other errors - */ -char *av_get_sample_fmt_string(char *buf, int buf_size, enum AVSampleFormat sample_fmt); - -/** - * Return number of bytes per sample. - * - * @param sample_fmt the sample format - * @return number of bytes per sample or zero if unknown for the given - * sample format - */ -int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt); - -/** - * Check if the sample format is planar. - * - * @param sample_fmt the sample format to inspect - * @return 1 if the sample format is planar, 0 if it is interleaved - */ -int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt); - -/** - * Get the required buffer size for the given audio parameters. - * - * @param[out] linesize calculated linesize, may be NULL - * @param nb_channels the number of channels - * @param nb_samples the number of samples in a single channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return required buffer size, or negative error code on failure - */ -int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, - enum AVSampleFormat sample_fmt, int align); - -/** - * @} - * - * @defgroup lavu_sampmanip Samples manipulation - * - * Functions that manipulate audio samples - * @{ - */ - -/** - * Fill plane data pointers and linesize for samples with sample - * format sample_fmt. - * - * The audio_data array is filled with the pointers to the samples data planes: - * for planar, set the start point of each channel's data within the buffer, - * for packed, set the start point of the entire buffer only. - * - * The value pointed to by linesize is set to the aligned size of each - * channel's data buffer for planar layout, or to the aligned size of the - * buffer for all channels for packed layout. - * - * The buffer in buf must be big enough to contain all the samples - * (use av_samples_get_buffer_size() to compute its minimum size), - * otherwise the audio_data pointers will point to invalid data. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize calculated linesize, may be NULL - * @param buf the pointer to a buffer containing the samples - * @param nb_channels the number of channels - * @param nb_samples the number of samples in a single channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return >=0 on success or a negative error code on failure - * @todo return minimum size in bytes required for the buffer in case - * of success at the next bump - */ -int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, - const uint8_t *buf, - int nb_channels, int nb_samples, - enum AVSampleFormat sample_fmt, int align); - -/** - * Allocate a samples buffer for nb_samples samples, and fill data pointers and - * linesize accordingly. - * The allocated samples buffer can be freed by using av_freep(&audio_data[0]) - * Allocated data will be initialized to silence. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize aligned size for audio buffer(s), may be NULL - * @param nb_channels number of audio channels - * @param nb_samples number of samples per channel - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return >=0 on success or a negative error code on failure - * @todo return the size of the allocated buffer in case of success at the next bump - * @see av_samples_fill_arrays() - * @see av_samples_alloc_array_and_samples() - */ -int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels, - int nb_samples, enum AVSampleFormat sample_fmt, int align); - -/** - * Allocate a data pointers array, samples buffer for nb_samples - * samples, and fill data pointers and linesize accordingly. - * - * This is the same as av_samples_alloc(), but also allocates the data - * pointers array. - * - * @see av_samples_alloc() - */ -int av_samples_alloc_array_and_samples(uint8_t ***audio_data, int *linesize, int nb_channels, - int nb_samples, enum AVSampleFormat sample_fmt, int align); - -/** - * Copy samples from src to dst. - * - * @param dst destination array of pointers to data planes - * @param src source array of pointers to data planes - * @param dst_offset offset in samples at which the data will be written to dst - * @param src_offset offset in samples at which the data will be read from src - * @param nb_samples number of samples to be copied - * @param nb_channels number of audio channels - * @param sample_fmt audio sample format - */ -int av_samples_copy(uint8_t **dst, uint8_t * const *src, int dst_offset, - int src_offset, int nb_samples, int nb_channels, - enum AVSampleFormat sample_fmt); - -/** - * Fill an audio buffer with silence. - * - * @param audio_data array of pointers to data planes - * @param offset offset in samples at which to start filling - * @param nb_samples number of samples to fill - * @param nb_channels number of audio channels - * @param sample_fmt audio sample format - */ -int av_samples_set_silence(uint8_t **audio_data, int offset, int nb_samples, - int nb_channels, enum AVSampleFormat sample_fmt); - -/** - * @} - * @} - */ -#endif /* AVUTIL_SAMPLEFMT_H */ diff --git a/prebuilts/x86/include/libavutil/sha.h b/prebuilts/x86/include/libavutil/sha.h deleted file mode 100644 index c0180e5..0000000 --- a/prebuilts/x86/include/libavutil/sha.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_sha - * Public header for SHA-1 & SHA-256 hash function implementations. - */ - -#ifndef AVUTIL_SHA_H -#define AVUTIL_SHA_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_sha SHA - * @ingroup lavu_hash - * SHA-1 and SHA-256 (Secure Hash Algorithm) hash function implementations. - * - * This module supports the following SHA hash functions: - * - * - SHA-1: 160 bits - * - SHA-224: 224 bits, as a variant of SHA-2 - * - SHA-256: 256 bits, as a variant of SHA-2 - * - * @see For SHA-384, SHA-512, and variants thereof, see @ref lavu_sha512. - * - * @{ - */ - -extern const int av_sha_size; - -struct AVSHA; - -/** - * Allocate an AVSHA context. - */ -struct AVSHA *av_sha_alloc(void); - -/** - * Initialize SHA-1 or SHA-2 hashing. - * - * @param context pointer to the function context (of size av_sha_size) - * @param bits number of bits in digest (SHA-1 - 160 bits, SHA-2 224 or 256 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_sha_init(struct AVSHA* context, int bits); - -/** - * Update hash value. - * - * @param ctx hash function context - * @param data input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_sha_update(struct AVSHA *ctx, const uint8_t *data, unsigned int len); -#else -void av_sha_update(struct AVSHA *ctx, const uint8_t *data, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_sha_final(struct AVSHA* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_SHA_H */ diff --git a/prebuilts/x86/include/libavutil/sha512.h b/prebuilts/x86/include/libavutil/sha512.h deleted file mode 100644 index bef714b..0000000 --- a/prebuilts/x86/include/libavutil/sha512.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * Copyright (C) 2013 James Almer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_sha512 - * Public header for SHA-512 implementation. - */ - -#ifndef AVUTIL_SHA512_H -#define AVUTIL_SHA512_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_sha512 SHA-512 - * @ingroup lavu_hash - * SHA-512 (Secure Hash Algorithm) hash function implementations. - * - * This module supports the following SHA-2 hash functions: - * - * - SHA-512/224: 224 bits - * - SHA-512/256: 256 bits - * - SHA-384: 384 bits - * - SHA-512: 512 bits - * - * @see For SHA-1, SHA-256, and variants thereof, see @ref lavu_sha. - * - * @{ - */ - -extern const int av_sha512_size; - -struct AVSHA512; - -/** - * Allocate an AVSHA512 context. - */ -struct AVSHA512 *av_sha512_alloc(void); - -/** - * Initialize SHA-2 512 hashing. - * - * @param context pointer to the function context (of size av_sha512_size) - * @param bits number of bits in digest (224, 256, 384 or 512 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_sha512_init(struct AVSHA512* context, int bits); - -/** - * Update hash value. - * - * @param context hash function context - * @param data input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_sha512_update(struct AVSHA512* context, const uint8_t* data, unsigned int len); -#else -void av_sha512_update(struct AVSHA512* context, const uint8_t* data, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_sha512_final(struct AVSHA512* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_SHA512_H */ diff --git a/prebuilts/x86/include/libavutil/spherical.h b/prebuilts/x86/include/libavutil/spherical.h deleted file mode 100644 index cef759c..0000000 --- a/prebuilts/x86/include/libavutil/spherical.h +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (c) 2016 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Spherical video - */ - -#ifndef AVUTIL_SPHERICAL_H -#define AVUTIL_SPHERICAL_H - -#include -#include - -/** - * @addtogroup lavu_video - * @{ - * - * @defgroup lavu_video_spherical Spherical video mapping - * @{ - */ - -/** - * @addtogroup lavu_video_spherical - * A spherical video file contains surfaces that need to be mapped onto a - * sphere. Depending on how the frame was converted, a different distortion - * transformation or surface recomposition function needs to be applied before - * the video should be mapped and displayed. - */ - -/** - * Projection of the video surface(s) on a sphere. - */ -enum AVSphericalProjection { - /** - * Video represents a sphere mapped on a flat surface using - * equirectangular projection. - */ - AV_SPHERICAL_EQUIRECTANGULAR, - - /** - * Video frame is split into 6 faces of a cube, and arranged on a - * 3x2 layout. Faces are oriented upwards for the front, left, right, - * and back faces. The up face is oriented so the top of the face is - * forwards and the down face is oriented so the top of the face is - * to the back. - */ - AV_SPHERICAL_CUBEMAP, - - /** - * Video represents a portion of a sphere mapped on a flat surface - * using equirectangular projection. The @ref bounding fields indicate - * the position of the current video in a larger surface. - */ - AV_SPHERICAL_EQUIRECTANGULAR_TILE, -}; - -/** - * This structure describes how to handle spherical videos, outlining - * information about projection, initial layout, and any other view modifier. - * - * @note The struct must be allocated with av_spherical_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVSphericalMapping { - /** - * Projection type. - */ - enum AVSphericalProjection projection; - - /** - * @name Initial orientation - * @{ - * There fields describe additional rotations applied to the sphere after - * the video frame is mapped onto it. The sphere is rotated around the - * viewer, who remains stationary. The order of transformation is always - * yaw, followed by pitch, and finally by roll. - * - * The coordinate system matches the one defined in OpenGL, where the - * forward vector (z) is coming out of screen, and it is equivalent to - * a rotation matrix of R = r_y(yaw) * r_x(pitch) * r_z(roll). - * - * A positive yaw rotates the portion of the sphere in front of the viewer - * toward their right. A positive pitch rotates the portion of the sphere - * in front of the viewer upwards. A positive roll tilts the portion of - * the sphere in front of the viewer to the viewer's right. - * - * These values are exported as 16.16 fixed point. - * - * See this equirectangular projection as example: - * - * @code{.unparsed} - * Yaw - * -180 0 180 - * 90 +-------------+-------------+ 180 - * | | | up - * P | | | y| forward - * i | ^ | | /z - * t 0 +-------------X-------------+ 0 Roll | / - * c | | | | / - * h | | | 0|/_____right - * | | | x - * -90 +-------------+-------------+ -180 - * - * X - the default camera center - * ^ - the default up vector - * @endcode - */ - int32_t yaw; ///< Rotation around the up vector [-180, 180]. - int32_t pitch; ///< Rotation around the right vector [-90, 90]. - int32_t roll; ///< Rotation around the forward vector [-180, 180]. - /** - * @} - */ - - /** - * @name Bounding rectangle - * @anchor bounding - * @{ - * These fields indicate the location of the current tile, and where - * it should be mapped relative to the original surface. They are - * exported as 0.32 fixed point, and can be converted to classic - * pixel values with av_spherical_bounds(). - * - * @code{.unparsed} - * +----------------+----------+ - * | |bound_top | - * | +--------+ | - * | bound_left |tile | | - * +<---------->| |<--->+bound_right - * | +--------+ | - * | | | - * | bound_bottom| | - * +----------------+----------+ - * @endcode - * - * If needed, the original video surface dimensions can be derived - * by adding the current stream or frame size to the related bounds, - * like in the following example: - * - * @code{c} - * original_width = tile->width + bound_left + bound_right; - * original_height = tile->height + bound_top + bound_bottom; - * @endcode - * - * @note These values are valid only for the tiled equirectangular - * projection type (@ref AV_SPHERICAL_EQUIRECTANGULAR_TILE), - * and should be ignored in all other cases. - */ - uint32_t bound_left; ///< Distance from the left edge - uint32_t bound_top; ///< Distance from the top edge - uint32_t bound_right; ///< Distance from the right edge - uint32_t bound_bottom; ///< Distance from the bottom edge - /** - * @} - */ - - /** - * Number of pixels to pad from the edge of each cube face. - * - * @note This value is valid for only for the cubemap projection type - * (@ref AV_SPHERICAL_CUBEMAP), and should be ignored in all other - * cases. - */ - uint32_t padding; -} AVSphericalMapping; - -/** - * Allocate a AVSphericalVideo structure and initialize its fields to default - * values. - * - * @return the newly allocated struct or NULL on failure - */ -AVSphericalMapping *av_spherical_alloc(size_t *size); - -/** - * Convert the @ref bounding fields from an AVSphericalVideo - * from 0.32 fixed point to pixels. - * - * @param map The AVSphericalVideo map to read bound values from. - * @param width Width of the current frame or stream. - * @param height Height of the current frame or stream. - * @param left Pixels from the left edge. - * @param top Pixels from the top edge. - * @param right Pixels from the right edge. - * @param bottom Pixels from the bottom edge. - */ -void av_spherical_tile_bounds(const AVSphericalMapping *map, - size_t width, size_t height, - size_t *left, size_t *top, - size_t *right, size_t *bottom); - -/** - * Provide a human-readable name of a given AVSphericalProjection. - * - * @param projection The input AVSphericalProjection. - * - * @return The name of the AVSphericalProjection, or "unknown". - */ -const char *av_spherical_projection_name(enum AVSphericalProjection projection); - -/** - * Get the AVSphericalProjection form a human-readable name. - * - * @param name The input string. - * - * @return The AVSphericalProjection value, or -1 if not found. - */ -int av_spherical_from_name(const char *name); -/** - * @} - * @} - */ - -#endif /* AVUTIL_SPHERICAL_H */ diff --git a/prebuilts/x86/include/libavutil/stereo3d.h b/prebuilts/x86/include/libavutil/stereo3d.h deleted file mode 100644 index d421aac..0000000 --- a/prebuilts/x86/include/libavutil/stereo3d.h +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (c) 2013 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Stereoscopic video - */ - -#ifndef AVUTIL_STEREO3D_H -#define AVUTIL_STEREO3D_H - -#include - -#include "frame.h" - -/** - * @addtogroup lavu_video - * @{ - * - * @defgroup lavu_video_stereo3d Stereo3D types and functions - * @{ - */ - -/** - * @addtogroup lavu_video_stereo3d - * A stereoscopic video file consists in multiple views embedded in a single - * frame, usually describing two views of a scene. This file describes all - * possible codec-independent view arrangements. - * */ - -/** - * List of possible 3D Types - */ -enum AVStereo3DType { - /** - * Video is not stereoscopic (and metadata has to be there). - */ - AV_STEREO3D_2D, - - /** - * Views are next to each other. - * - * @code{.unparsed} - * LLLLRRRR - * LLLLRRRR - * LLLLRRRR - * ... - * @endcode - */ - AV_STEREO3D_SIDEBYSIDE, - - /** - * Views are on top of each other. - * - * @code{.unparsed} - * LLLLLLLL - * LLLLLLLL - * RRRRRRRR - * RRRRRRRR - * @endcode - */ - AV_STEREO3D_TOPBOTTOM, - - /** - * Views are alternated temporally. - * - * @code{.unparsed} - * frame0 frame1 frame2 ... - * LLLLLLLL RRRRRRRR LLLLLLLL - * LLLLLLLL RRRRRRRR LLLLLLLL - * LLLLLLLL RRRRRRRR LLLLLLLL - * ... ... ... - * @endcode - */ - AV_STEREO3D_FRAMESEQUENCE, - - /** - * Views are packed in a checkerboard-like structure per pixel. - * - * @code{.unparsed} - * LRLRLRLR - * RLRLRLRL - * LRLRLRLR - * ... - * @endcode - */ - AV_STEREO3D_CHECKERBOARD, - - /** - * Views are next to each other, but when upscaling - * apply a checkerboard pattern. - * - * @code{.unparsed} - * LLLLRRRR L L L L R R R R - * LLLLRRRR => L L L L R R R R - * LLLLRRRR L L L L R R R R - * LLLLRRRR L L L L R R R R - * @endcode - */ - AV_STEREO3D_SIDEBYSIDE_QUINCUNX, - - /** - * Views are packed per line, as if interlaced. - * - * @code{.unparsed} - * LLLLLLLL - * RRRRRRRR - * LLLLLLLL - * ... - * @endcode - */ - AV_STEREO3D_LINES, - - /** - * Views are packed per column. - * - * @code{.unparsed} - * LRLRLRLR - * LRLRLRLR - * LRLRLRLR - * ... - * @endcode - */ - AV_STEREO3D_COLUMNS, -}; - -/** - * List of possible view types. - */ -enum AVStereo3DView { - /** - * Frame contains two packed views. - */ - AV_STEREO3D_VIEW_PACKED, - - /** - * Frame contains only the left view. - */ - AV_STEREO3D_VIEW_LEFT, - - /** - * Frame contains only the right view. - */ - AV_STEREO3D_VIEW_RIGHT, -}; - -/** - * Inverted views, Right/Bottom represents the left view. - */ -#define AV_STEREO3D_FLAG_INVERT (1 << 0) - -/** - * Stereo 3D type: this structure describes how two videos are packed - * within a single video surface, with additional information as needed. - * - * @note The struct must be allocated with av_stereo3d_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVStereo3D { - /** - * How views are packed within the video. - */ - enum AVStereo3DType type; - - /** - * Additional information about the frame packing. - */ - int flags; - - /** - * Determines which views are packed. - */ - enum AVStereo3DView view; -} AVStereo3D; - -/** - * Allocate an AVStereo3D structure and set its fields to default values. - * The resulting struct can be freed using av_freep(). - * - * @return An AVStereo3D filled with default values or NULL on failure. - */ -AVStereo3D *av_stereo3d_alloc(void); - -/** - * Allocate a complete AVFrameSideData and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVStereo3D structure to be filled by caller. - */ -AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame); - -/** - * Provide a human-readable name of a given stereo3d type. - * - * @param type The input stereo3d type value. - * - * @return The name of the stereo3d value, or "unknown". - */ -const char *av_stereo3d_type_name(unsigned int type); - -/** - * Get the AVStereo3DType form a human-readable name. - * - * @param name The input string. - * - * @return The AVStereo3DType value, or -1 if not found. - */ -int av_stereo3d_from_name(const char *name); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_STEREO3D_H */ diff --git a/prebuilts/x86/include/libavutil/tea.h b/prebuilts/x86/include/libavutil/tea.h deleted file mode 100644 index dd929bd..0000000 --- a/prebuilts/x86/include/libavutil/tea.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * A 32-bit implementation of the TEA algorithm - * Copyright (c) 2015 Vesselin Bontchev - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TEA_H -#define AVUTIL_TEA_H - -#include - -/** - * @file - * @brief Public header for libavutil TEA algorithm - * @defgroup lavu_tea TEA - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_tea_size; - -struct AVTEA; - -/** - * Allocate an AVTEA context - * To free the struct: av_free(ptr) - */ -struct AVTEA *av_tea_alloc(void); - -/** - * Initialize an AVTEA context. - * - * @param ctx an AVTEA context - * @param key a key of 16 bytes used for encryption/decryption - * @param rounds the number of rounds in TEA (64 is the "standard") - */ -void av_tea_init(struct AVTEA *ctx, const uint8_t key[16], int rounds); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_tea_crypt(struct AVTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_TEA_H */ diff --git a/prebuilts/x86/include/libavutil/threadmessage.h b/prebuilts/x86/include/libavutil/threadmessage.h deleted file mode 100644 index 42ce655..0000000 --- a/prebuilts/x86/include/libavutil/threadmessage.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with FFmpeg; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_THREADMESSAGE_H -#define AVUTIL_THREADMESSAGE_H - -typedef struct AVThreadMessageQueue AVThreadMessageQueue; - -typedef enum AVThreadMessageFlags { - - /** - * Perform non-blocking operation. - * If this flag is set, send and recv operations are non-blocking and - * return AVERROR(EAGAIN) immediately if they can not proceed. - */ - AV_THREAD_MESSAGE_NONBLOCK = 1, - -} AVThreadMessageFlags; - -/** - * Allocate a new message queue. - * - * @param mq pointer to the message queue - * @param nelem maximum number of elements in the queue - * @param elsize size of each element in the queue - * @return >=0 for success; <0 for error, in particular AVERROR(ENOSYS) if - * lavu was built without thread support - */ -int av_thread_message_queue_alloc(AVThreadMessageQueue **mq, - unsigned nelem, - unsigned elsize); - -/** - * Free a message queue. - * - * The message queue must no longer be in use by another thread. - */ -void av_thread_message_queue_free(AVThreadMessageQueue **mq); - -/** - * Send a message on the queue. - */ -int av_thread_message_queue_send(AVThreadMessageQueue *mq, - void *msg, - unsigned flags); - -/** - * Receive a message from the queue. - */ -int av_thread_message_queue_recv(AVThreadMessageQueue *mq, - void *msg, - unsigned flags); - -/** - * Set the sending error code. - * - * If the error code is set to non-zero, av_thread_message_queue_send() will - * return it immediately. Conventional values, such as AVERROR_EOF or - * AVERROR(EAGAIN), can be used to cause the sending thread to stop or - * suspend its operation. - */ -void av_thread_message_queue_set_err_send(AVThreadMessageQueue *mq, - int err); - -/** - * Set the receiving error code. - * - * If the error code is set to non-zero, av_thread_message_queue_recv() will - * return it immediately when there are no longer available messages. - * Conventional values, such as AVERROR_EOF or AVERROR(EAGAIN), can be used - * to cause the receiving thread to stop or suspend its operation. - */ -void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq, - int err); - -/** - * Set the optional free message callback function which will be called if an - * operation is removing messages from the queue. - */ -void av_thread_message_queue_set_free_func(AVThreadMessageQueue *mq, - void (*free_func)(void *msg)); - -/** - * Return the current number of messages in the queue. - * - * @return the current number of messages or AVERROR(ENOSYS) if lavu was built - * without thread support - */ -int av_thread_message_queue_nb_elems(AVThreadMessageQueue *mq); - -/** - * Flush the message queue - * - * This function is mostly equivalent to reading and free-ing every message - * except that it will be done in a single operation (no lock/unlock between - * reads). - */ -void av_thread_message_flush(AVThreadMessageQueue *mq); - -#endif /* AVUTIL_THREADMESSAGE_H */ diff --git a/prebuilts/x86/include/libavutil/time.h b/prebuilts/x86/include/libavutil/time.h deleted file mode 100644 index dc169b0..0000000 --- a/prebuilts/x86/include/libavutil/time.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2000-2003 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TIME_H -#define AVUTIL_TIME_H - -#include - -/** - * Get the current time in microseconds. - */ -int64_t av_gettime(void); - -/** - * Get the current time in microseconds since some unspecified starting point. - * On platforms that support it, the time comes from a monotonic clock - * This property makes this time source ideal for measuring relative time. - * The returned values may not be monotonic on platforms where a monotonic - * clock is not available. - */ -int64_t av_gettime_relative(void); - -/** - * Indicates with a boolean result if the av_gettime_relative() time source - * is monotonic. - */ -int av_gettime_relative_is_monotonic(void); - -/** - * Sleep for a period of time. Although the duration is expressed in - * microseconds, the actual delay may be rounded to the precision of the - * system timer. - * - * @param usec Number of microseconds to sleep. - * @return zero on success or (negative) error code. - */ -int av_usleep(unsigned usec); - -#endif /* AVUTIL_TIME_H */ diff --git a/prebuilts/x86/include/libavutil/timecode.h b/prebuilts/x86/include/libavutil/timecode.h deleted file mode 100644 index 060574a..0000000 --- a/prebuilts/x86/include/libavutil/timecode.h +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (c) 2006 Smartjog S.A.S, Baptiste Coudurier - * Copyright (c) 2011-2012 Smartjog S.A.S, Clément Bœsch - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Timecode helpers header - */ - -#ifndef AVUTIL_TIMECODE_H -#define AVUTIL_TIMECODE_H - -#include -#include "rational.h" - -#define AV_TIMECODE_STR_SIZE 23 - -enum AVTimecodeFlag { - AV_TIMECODE_FLAG_DROPFRAME = 1<<0, ///< timecode is drop frame - AV_TIMECODE_FLAG_24HOURSMAX = 1<<1, ///< timecode wraps after 24 hours - AV_TIMECODE_FLAG_ALLOWNEGATIVE = 1<<2, ///< negative time values are allowed -}; - -typedef struct { - int start; ///< timecode frame start (first base frame number) - uint32_t flags; ///< flags such as drop frame, +24 hours support, ... - AVRational rate; ///< frame rate in rational form - unsigned fps; ///< frame per second; must be consistent with the rate field -} AVTimecode; - -/** - * Adjust frame number for NTSC drop frame time code. - * - * @param framenum frame number to adjust - * @param fps frame per second, multiples of 30 - * @return adjusted frame number - * @warning adjustment is only valid for multiples of NTSC 29.97 - */ -int av_timecode_adjust_ntsc_framenum2(int framenum, int fps); - -/** - * Convert frame number to SMPTE 12M binary representation. - * - * @param tc timecode data correctly initialized - * @param framenum frame number - * @return the SMPTE binary representation - * - * See SMPTE ST 314M-2005 Sec 4.4.2.2.1 "Time code pack (TC)" - * the format description as follows: - * bits 0-5: hours, in BCD(6bits) - * bits 6: BGF1 - * bits 7: BGF2 (NTSC) or FIELD (PAL) - * bits 8-14: minutes, in BCD(7bits) - * bits 15: BGF0 (NTSC) or BGF2 (PAL) - * bits 16-22: seconds, in BCD(7bits) - * bits 23: FIELD (NTSC) or BGF0 (PAL) - * bits 24-29: frames, in BCD(6bits) - * bits 30: drop frame flag (0: non drop, 1: drop) - * bits 31: color frame flag (0: unsync mode, 1: sync mode) - * @note BCD numbers (6 or 7 bits): 4 or 5 lower bits for units, 2 higher bits for tens. - * @note Frame number adjustment is automatically done in case of drop timecode, - * you do NOT have to call av_timecode_adjust_ntsc_framenum2(). - * @note The frame number is relative to tc->start. - * @note Color frame (CF) and binary group flags (BGF) bits are set to zero. - */ -uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum); - -/** - * Convert sei info to SMPTE 12M binary representation. - * - * @param rate frame rate in rational form - * @param drop drop flag - * @param hh hour - * @param mm minute - * @param ss second - * @param ff frame number - * @return the SMPTE binary representation - */ -uint32_t av_timecode_get_smpte(AVRational rate, int drop, int hh, int mm, int ss, int ff); - -/** - * Load timecode string in buf. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tc timecode data correctly initialized - * @param framenum frame number - * @return the buf parameter - * - * @note Timecode representation can be a negative timecode and have more than - * 24 hours, but will only be honored if the flags are correctly set. - * @note The frame number is relative to tc->start. - */ -char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum); - -/** - * Get the timecode string from the SMPTE timecode format. - * - * In contrast to av_timecode_make_smpte_tc_string this function supports 50/60 - * fps timecodes by using the field bit. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param rate frame rate of the timecode - * @param tcsmpte the 32-bit SMPTE timecode - * @param prevent_df prevent the use of a drop flag when it is known the DF bit - * is arbitrary - * @param skip_field prevent the use of a field flag when it is known the field - * bit is arbitrary (e.g. because it is used as PC flag) - * @return the buf parameter - */ -char *av_timecode_make_smpte_tc_string2(char *buf, AVRational rate, uint32_t tcsmpte, int prevent_df, int skip_field); - -/** - * Get the timecode string from the SMPTE timecode format. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tcsmpte the 32-bit SMPTE timecode - * @param prevent_df prevent the use of a drop flag when it is known the DF bit - * is arbitrary - * @return the buf parameter - */ -char *av_timecode_make_smpte_tc_string(char *buf, uint32_t tcsmpte, int prevent_df); - -/** - * Get the timecode string from the 25-bit timecode format (MPEG GOP format). - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tc25bit the 25-bits timecode - * @return the buf parameter - */ -char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit); - -/** - * Init a timecode struct with the passed parameters. - * - * @param log_ctx a pointer to an arbitrary struct of which the first field - * is a pointer to an AVClass struct (used for av_log) - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param flags miscellaneous flags such as drop frame, +24 hours, ... - * (see AVTimecodeFlag) - * @param frame_start the first frame number - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx); - -/** - * Init a timecode struct from the passed timecode components. - * - * @param log_ctx a pointer to an arbitrary struct of which the first field - * is a pointer to an AVClass struct (used for av_log) - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param flags miscellaneous flags such as drop frame, +24 hours, ... - * (see AVTimecodeFlag) - * @param hh hours - * @param mm minutes - * @param ss seconds - * @param ff frames - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init_from_components(AVTimecode *tc, AVRational rate, int flags, int hh, int mm, int ss, int ff, void *log_ctx); - -/** - * Parse timecode representation (hh:mm:ss[:;.]ff). - * - * @param log_ctx a pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct (used for av_log). - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param str timecode string which will determine the frame start - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx); - -/** - * Check if the timecode feature is available for the given frame rate - * - * @return 0 if supported, <0 otherwise - */ -int av_timecode_check_frame_rate(AVRational rate); - -#endif /* AVUTIL_TIMECODE_H */ diff --git a/prebuilts/x86/include/libavutil/timestamp.h b/prebuilts/x86/include/libavutil/timestamp.h deleted file mode 100644 index e082f01..0000000 --- a/prebuilts/x86/include/libavutil/timestamp.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * timestamp utils, mostly useful for debugging/logging purposes - */ - -#ifndef AVUTIL_TIMESTAMP_H -#define AVUTIL_TIMESTAMP_H - -#include "common.h" - -#if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS) && !defined(PRId64) -#error missing -D__STDC_FORMAT_MACROS / #define __STDC_FORMAT_MACROS -#endif - -#define AV_TS_MAX_STRING_SIZE 32 - -/** - * Fill the provided buffer with a string containing a timestamp - * representation. - * - * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE - * @param ts the timestamp to represent - * @return the buffer in input - */ -static inline char *av_ts_make_string(char *buf, int64_t ts) -{ - if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); - else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%" PRId64, ts); - return buf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_ts2str(ts) av_ts_make_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts) - -/** - * Fill the provided buffer with a string containing a timestamp time - * representation. - * - * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE - * @param ts the timestamp to represent - * @param tb the timebase of the timestamp - * @return the buffer in input - */ -static inline char *av_ts_make_time_string(char *buf, int64_t ts, AVRational *tb) -{ - if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); - else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%.6g", av_q2d(*tb) * ts); - return buf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_ts2timestr(ts, tb) av_ts_make_time_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts, tb) - -#endif /* AVUTIL_TIMESTAMP_H */ diff --git a/prebuilts/x86/include/libavutil/tree.h b/prebuilts/x86/include/libavutil/tree.h deleted file mode 100644 index d5e0aeb..0000000 --- a/prebuilts/x86/include/libavutil/tree.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * A tree container. - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_TREE_H -#define AVUTIL_TREE_H - -#include "attributes.h" -#include "version.h" - -/** - * @addtogroup lavu_tree AVTree - * @ingroup lavu_data - * - * Low-complexity tree container - * - * Insertion, removal, finding equal, largest which is smaller than and - * smallest which is larger than, all have O(log n) worst-case complexity. - * @{ - */ - - -struct AVTreeNode; -extern const int av_tree_node_size; - -/** - * Allocate an AVTreeNode. - */ -struct AVTreeNode *av_tree_node_alloc(void); - -/** - * Find an element. - * @param root a pointer to the root node of the tree - * @param next If next is not NULL, then next[0] will contain the previous - * element and next[1] the next element. If either does not exist, - * then the corresponding entry in next is unchanged. - * @param cmp compare function used to compare elements in the tree, - * API identical to that of Standard C's qsort - * It is guaranteed that the first and only the first argument to cmp() - * will be the key parameter to av_tree_find(), thus it could if the - * user wants, be a different type (like an opaque context). - * @return An element with cmp(key, elem) == 0 or NULL if no such element - * exists in the tree. - */ -void *av_tree_find(const struct AVTreeNode *root, void *key, - int (*cmp)(const void *key, const void *b), void *next[2]); - -/** - * Insert or remove an element. - * - * If *next is NULL, then the supplied element will be removed if it exists. - * If *next is non-NULL, then the supplied element will be inserted, unless - * it already exists in the tree. - * - * @param rootp A pointer to a pointer to the root node of the tree; note that - * the root node can change during insertions, this is required - * to keep the tree balanced. - * @param key pointer to the element key to insert in the tree - * @param next Used to allocate and free AVTreeNodes. For insertion the user - * must set it to an allocated and zeroed object of at least - * av_tree_node_size bytes size. av_tree_insert() will set it to - * NULL if it has been consumed. - * For deleting elements *next is set to NULL by the user and - * av_tree_insert() will set it to the AVTreeNode which was - * used for the removed element. - * This allows the use of flat arrays, which have - * lower overhead compared to many malloced elements. - * You might want to define a function like: - * @code - * void *tree_insert(struct AVTreeNode **rootp, void *key, - * int (*cmp)(void *key, const void *b), - * AVTreeNode **next) - * { - * if (!*next) - * *next = av_mallocz(av_tree_node_size); - * return av_tree_insert(rootp, key, cmp, next); - * } - * void *tree_remove(struct AVTreeNode **rootp, void *key, - * int (*cmp)(void *key, const void *b, AVTreeNode **next)) - * { - * av_freep(next); - * return av_tree_insert(rootp, key, cmp, next); - * } - * @endcode - * @param cmp compare function used to compare elements in the tree, API identical - * to that of Standard C's qsort - * @return If no insertion happened, the found element; if an insertion or - * removal happened, then either key or NULL will be returned. - * Which one it is depends on the tree state and the implementation. You - * should make no assumptions that it's one or the other in the code. - */ -void *av_tree_insert(struct AVTreeNode **rootp, void *key, - int (*cmp)(const void *key, const void *b), - struct AVTreeNode **next); - -void av_tree_destroy(struct AVTreeNode *t); - -/** - * Apply enu(opaque, &elem) to all the elements in the tree in a given range. - * - * @param cmp a comparison function that returns < 0 for an element below the - * range, > 0 for an element above the range and == 0 for an - * element inside the range - * - * @note The cmp function should use the same ordering used to construct the - * tree. - */ -void av_tree_enumerate(struct AVTreeNode *t, void *opaque, - int (*cmp)(void *opaque, void *elem), - int (*enu)(void *opaque, void *elem)); - -/** - * @} - */ - -#endif /* AVUTIL_TREE_H */ diff --git a/prebuilts/x86/include/libavutil/twofish.h b/prebuilts/x86/include/libavutil/twofish.h deleted file mode 100644 index 813cfec..0000000 --- a/prebuilts/x86/include/libavutil/twofish.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * An implementation of the TwoFish algorithm - * Copyright (c) 2015 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TWOFISH_H -#define AVUTIL_TWOFISH_H - -#include - - -/** - * @file - * @brief Public header for libavutil TWOFISH algorithm - * @defgroup lavu_twofish TWOFISH - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_twofish_size; - -struct AVTWOFISH; - -/** - * Allocate an AVTWOFISH context - * To free the struct: av_free(ptr) - */ -struct AVTWOFISH *av_twofish_alloc(void); - -/** - * Initialize an AVTWOFISH context. - * - * @param ctx an AVTWOFISH context - * @param key a key of size ranging from 1 to 32 bytes used for encryption/decryption - * @param key_bits number of keybits: 128, 192, 256 If less than the required, padded with zeroes to nearest valid value; return value is 0 if key_bits is 128/192/256, -1 if less than 0, 1 otherwise - */ -int av_twofish_init(struct AVTWOFISH *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVTWOFISH context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 16 byte blocks - * @paran iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_twofish_crypt(struct AVTWOFISH *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt); - -/** - * @} - */ -#endif /* AVUTIL_TWOFISH_H */ diff --git a/prebuilts/x86/include/libavutil/tx.h b/prebuilts/x86/include/libavutil/tx.h deleted file mode 100644 index bfc0c7f..0000000 --- a/prebuilts/x86/include/libavutil/tx.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TX_H -#define AVUTIL_TX_H - -#include -#include - -typedef struct AVTXContext AVTXContext; - -typedef struct AVComplexFloat { - float re, im; -} AVComplexFloat; - -typedef struct AVComplexDouble { - double re, im; -} AVComplexDouble; - -typedef struct AVComplexInt32 { - int32_t re, im; -} AVComplexInt32; - -enum AVTXType { - /** - * Standard complex to complex FFT with sample data type AVComplexFloat. - * Output is not 1/len normalized. Scaling currently unsupported. - * The stride parameter is ignored. - */ - AV_TX_FLOAT_FFT = 0, - - /** - * Standard MDCT with sample data type of float and a scale type of - * float. Length is the frame size, not the window size (which is 2x frame) - * For forward transforms, the stride specifies the spacing between each - * sample in the output array in bytes. The input must be a flat array. - * For inverse transforms, the stride specifies the spacing between each - * sample in the input array in bytes. The output will be a flat array. - * Stride must be a non-zero multiple of sizeof(float). - * NOTE: the inverse transform is half-length, meaning the output will not - * contain redundant data. This is what most codecs work with. - */ - AV_TX_FLOAT_MDCT = 1, - - /** - * Same as AV_TX_FLOAT_FFT with a data type of AVComplexDouble. - */ - AV_TX_DOUBLE_FFT = 2, - - /** - * Same as AV_TX_FLOAT_MDCT with data and scale type of double. - * Stride must be a non-zero multiple of sizeof(double). - */ - AV_TX_DOUBLE_MDCT = 3, - - /** - * Same as AV_TX_FLOAT_FFT with a data type of AVComplexInt32. - */ - AV_TX_INT32_FFT = 4, - - /** - * Same as AV_TX_FLOAT_MDCT with data type of int32_t and scale type of float. - * Only scale values less than or equal to 1.0 are supported. - * Stride must be a non-zero multiple of sizeof(int32_t). - */ - AV_TX_INT32_MDCT = 5, -}; - -/** - * Function pointer to a function to perform the transform. - * - * @note Using a different context than the one allocated during av_tx_init() - * is not allowed. - * - * @param s the transform context - * @param out the output array - * @param in the input array - * @param stride the input or output stride in bytes - * - * The out and in arrays must be aligned to the maximum required by the CPU - * architecture. - * The stride must follow the constraints the transform type has specified. - */ -typedef void (*av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride); - -/** - * Flags for av_tx_init() - */ -enum AVTXFlags { - /** - * Performs an in-place transformation on the input. The output argument - * of av_tn_fn() MUST match the input. May be unsupported or slower for some - * transform types. - */ - AV_TX_INPLACE = 1ULL << 0, -}; - -/** - * Initialize a transform context with the given configuration - * (i)MDCTs with an odd length are currently not supported. - * - * @param ctx the context to allocate, will be NULL on error - * @param tx pointer to the transform function pointer to set - * @param type type the type of transform - * @param inv whether to do an inverse or a forward transform - * @param len the size of the transform in samples - * @param scale pointer to the value to scale the output if supported by type - * @param flags a bitmask of AVTXFlags or 0 - * - * @return 0 on success, negative error code on failure - */ -int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type, - int inv, int len, const void *scale, uint64_t flags); - -/** - * Frees a context and sets ctx to NULL, does nothing when ctx == NULL - */ -void av_tx_uninit(AVTXContext **ctx); - -#endif /* AVUTIL_TX_H */ diff --git a/prebuilts/x86/include/libavutil/version.h b/prebuilts/x86/include/libavutil/version.h deleted file mode 100644 index f888dbb..0000000 --- a/prebuilts/x86/include/libavutil/version.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * copyright (c) 2003 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu - * Libavutil version macros - */ - -#ifndef AVUTIL_VERSION_H -#define AVUTIL_VERSION_H - -#include "macros.h" - -/** - * @addtogroup version_utils - * - * Useful to check and match library version in order to maintain - * backward compatibility. - * - * The FFmpeg libraries follow a versioning sheme very similar to - * Semantic Versioning (http://semver.org/) - * The difference is that the component called PATCH is called MICRO in FFmpeg - * and its value is reset to 100 instead of 0 to keep it above or equal to 100. - * Also we do not increase MICRO for every bugfix or change in git master. - * - * Prior to FFmpeg 3.2 point releases did not change any lib version number to - * avoid aliassing different git master checkouts. - * Starting with FFmpeg 3.2, the released library versions will occupy - * a separate MAJOR.MINOR that is not used on the master development branch. - * That is if we branch a release of master 55.10.123 we will bump to 55.11.100 - * for the release and master will continue at 55.12.100 after it. Each new - * point release will then bump the MICRO improving the usefulness of the lib - * versions. - * - * @{ - */ - -#define AV_VERSION_INT(a, b, c) ((a)<<16 | (b)<<8 | (c)) -#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c -#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) - -/** - * Extract version components from the full ::AV_VERSION_INT int as returned - * by functions like ::avformat_version() and ::avcodec_version() - */ -#define AV_VERSION_MAJOR(a) ((a) >> 16) -#define AV_VERSION_MINOR(a) (((a) & 0x00FF00) >> 8) -#define AV_VERSION_MICRO(a) ((a) & 0xFF) - -/** - * @} - */ - -/** - * @defgroup lavu_ver Version and Build diagnostics - * - * Macros and function useful to check at compiletime and at runtime - * which version of libavutil is in use. - * - * @{ - */ - -#define LIBAVUTIL_VERSION_MAJOR 56 -#define LIBAVUTIL_VERSION_MINOR 70 -#define LIBAVUTIL_VERSION_MICRO 100 - -#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT - -#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) - -/** - * @defgroup lavu_depr_guards Deprecation Guards - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - * - * @{ - */ - -#ifndef FF_API_VAAPI -#define FF_API_VAAPI (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_FRAME_QP -#define FF_API_FRAME_QP (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_PLUS1_MINUS1 -#define FF_API_PLUS1_MINUS1 (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_ERROR_FRAME -#define FF_API_ERROR_FRAME (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_PKT_PTS -#define FF_API_PKT_PTS (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_CRYPTO_SIZE_T -#define FF_API_CRYPTO_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_FRAME_GET_SET -#define FF_API_FRAME_GET_SET (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_PSEUDOPAL -#define FF_API_PSEUDOPAL (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_CHILD_CLASS_NEXT -#define FF_API_CHILD_CLASS_NEXT (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_BUFFER_SIZE_T -#define FF_API_BUFFER_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_D2STR -#define FF_API_D2STR (LIBAVUTIL_VERSION_MAJOR < 58) -#endif -#ifndef FF_API_DECLARE_ALIGNED -#define FF_API_DECLARE_ALIGNED (LIBAVUTIL_VERSION_MAJOR < 58) -#endif - -/** - * @} - * @} - */ - -#endif /* AVUTIL_VERSION_H */ diff --git a/prebuilts/x86/include/libavutil/video_enc_params.h b/prebuilts/x86/include/libavutil/video_enc_params.h deleted file mode 100644 index fc0c3bc..0000000 --- a/prebuilts/x86/include/libavutil/video_enc_params.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_VIDEO_ENC_PARAMS_H -#define AVUTIL_VIDEO_ENC_PARAMS_H - -#include -#include - -#include "libavutil/avassert.h" -#include "libavutil/frame.h" - -enum AVVideoEncParamsType { - AV_VIDEO_ENC_PARAMS_NONE = -1, - /** - * VP9 stores: - * - per-frame base (luma AC) quantizer index, exported as AVVideoEncParams.qp - * - deltas for luma DC, chroma AC and chroma DC, exported in the - * corresponding entries in AVVideoEncParams.delta_qp - * - per-segment delta, exported as for each block as AVVideoBlockParams.delta_qp - * - * To compute the resulting quantizer index for a block: - * - for luma AC, add the base qp and the per-block delta_qp, saturating to - * unsigned 8-bit. - * - for luma DC and chroma AC/DC, add the corresponding - * AVVideoBlockParams.delta_qp to the luma AC index, again saturating to - * unsigned 8-bit. - */ - AV_VIDEO_ENC_PARAMS_VP9, - - /** - * H.264 stores: - * - in PPS (per-picture): - * * initial QP_Y (luma) value, exported as AVVideoEncParams.qp - * * delta(s) for chroma QP values (same for both, or each separately), - * exported as in the corresponding entries in AVVideoEncParams.delta_qp - * - per-slice QP delta, not exported directly, added to the per-MB value - * - per-MB delta; not exported directly; the final per-MB quantizer - * parameter - QP_Y - minus the value in AVVideoEncParams.qp is exported - * as AVVideoBlockParams.qp_delta. - */ - AV_VIDEO_ENC_PARAMS_H264, - - /* - * MPEG-2-compatible quantizer. - * - * Summing the frame-level qp with the per-block delta_qp gives the - * resulting quantizer for the block. - */ - AV_VIDEO_ENC_PARAMS_MPEG2, -}; - -/** - * Video encoding parameters for a given frame. This struct is allocated along - * with an optional array of per-block AVVideoBlockParams descriptors. - * Must be allocated with av_video_enc_params_alloc(). - */ -typedef struct AVVideoEncParams { - /** - * Number of blocks in the array. - * - * May be 0, in which case no per-block information is present. In this case - * the values of blocks_offset / block_size are unspecified and should not - * be accessed. - */ - unsigned int nb_blocks; - /** - * Offset in bytes from the beginning of this structure at which the array - * of blocks starts. - */ - size_t blocks_offset; - /* - * Size of each block in bytes. May not match sizeof(AVVideoBlockParams). - */ - size_t block_size; - - /** - * Type of the parameters (the codec they are used with). - */ - enum AVVideoEncParamsType type; - - /** - * Base quantisation parameter for the frame. The final quantiser for a - * given block in a given plane is obtained from this value, possibly - * combined with {@code delta_qp} and the per-block delta in a manner - * documented for each type. - */ - int32_t qp; - - /** - * Quantisation parameter offset from the base (per-frame) qp for a given - * plane (first index) and AC/DC coefficients (second index). - */ - int32_t delta_qp[4][2]; -} AVVideoEncParams; - -/** - * Data structure for storing block-level encoding information. - * It is allocated as a part of AVVideoEncParams and should be retrieved with - * av_video_enc_params_block(). - * - * sizeof(AVVideoBlockParams) is not a part of the ABI and new fields may be - * added to it. - */ -typedef struct AVVideoBlockParams { - /** - * Distance in luma pixels from the top-left corner of the visible frame - * to the top-left corner of the block. - * Can be negative if top/right padding is present on the coded frame. - */ - int src_x, src_y; - /** - * Width and height of the block in luma pixels. - */ - int w, h; - - /** - * Difference between this block's final quantization parameter and the - * corresponding per-frame value. - */ - int32_t delta_qp; -} AVVideoBlockParams; - -/* - * Get the block at the specified {@code idx}. Must be between 0 and nb_blocks. - */ -static av_always_inline AVVideoBlockParams* -av_video_enc_params_block(AVVideoEncParams *par, unsigned int idx) -{ - av_assert0(idx < par->nb_blocks); - return (AVVideoBlockParams *)((uint8_t *)par + par->blocks_offset + - idx * par->block_size); -} - -/** - * Allocates memory for AVVideoEncParams of the given type, plus an array of - * {@code nb_blocks} AVVideoBlockParams and initializes the variables. Can be - * freed with a normal av_free() call. - * - * @param out_size if non-NULL, the size in bytes of the resulting data array is - * written here. - */ -AVVideoEncParams *av_video_enc_params_alloc(enum AVVideoEncParamsType type, - unsigned int nb_blocks, size_t *out_size); - -/** - * Allocates memory for AVEncodeInfoFrame plus an array of - * {@code nb_blocks} AVEncodeInfoBlock in the given AVFrame {@code frame} - * as AVFrameSideData of type AV_FRAME_DATA_VIDEO_ENC_PARAMS - * and initializes the variables. - */ -AVVideoEncParams* -av_video_enc_params_create_side_data(AVFrame *frame, enum AVVideoEncParamsType type, - unsigned int nb_blocks); - -#endif /* AVUTIL_VIDEO_ENC_PARAMS_H */ diff --git a/prebuilts/x86/include/libavutil/xtea.h b/prebuilts/x86/include/libavutil/xtea.h deleted file mode 100644 index 735427c..0000000 --- a/prebuilts/x86/include/libavutil/xtea.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * A 32-bit implementation of the XTEA algorithm - * Copyright (c) 2012 Samuel Pitoiset - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_XTEA_H -#define AVUTIL_XTEA_H - -#include - -/** - * @file - * @brief Public header for libavutil XTEA algorithm - * @defgroup lavu_xtea XTEA - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVXTEA { - uint32_t key[16]; -} AVXTEA; - -/** - * Allocate an AVXTEA context. - */ -AVXTEA *av_xtea_alloc(void); - -/** - * Initialize an AVXTEA context. - * - * @param ctx an AVXTEA context - * @param key a key of 16 bytes used for encryption/decryption, - * interpreted as big endian 32 bit numbers - */ -void av_xtea_init(struct AVXTEA *ctx, const uint8_t key[16]); - -/** - * Initialize an AVXTEA context. - * - * @param ctx an AVXTEA context - * @param key a key of 16 bytes used for encryption/decryption, - * interpreted as little endian 32 bit numbers - */ -void av_xtea_le_init(struct AVXTEA *ctx, const uint8_t key[16]); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, - * in big endian format. - * - * @param ctx an AVXTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_xtea_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, - * in little endian format. - * - * @param ctx an AVXTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_xtea_le_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_XTEA_H */ diff --git a/prebuilts/x86/include/libdrm/amdgpu.h b/prebuilts/x86/include/libdrm/amdgpu.h deleted file mode 100644 index 5ef2524..0000000 --- a/prebuilts/x86/include/libdrm/amdgpu.h +++ /dev/null @@ -1,1876 +0,0 @@ -/* - * Copyright 2014 Advanced Micro Devices, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - */ - -/** - * \file amdgpu.h - * - * Declare public libdrm_amdgpu API - * - * This file define API exposed by libdrm_amdgpu library. - * User wanted to use libdrm_amdgpu functionality must include - * this file. - * - */ -#ifndef _AMDGPU_H_ -#define _AMDGPU_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct drm_amdgpu_info_hw_ip; -struct drm_amdgpu_bo_list_entry; - -/*--------------------------------------------------------------------------*/ -/* --------------------------- Defines ------------------------------------ */ -/*--------------------------------------------------------------------------*/ - -/** - * Define max. number of Command Buffers (IB) which could be sent to the single - * hardware IP to accommodate CE/DE requirements - * - * \sa amdgpu_cs_ib_info -*/ -#define AMDGPU_CS_MAX_IBS_PER_SUBMIT 4 - -/** - * Special timeout value meaning that the timeout is infinite. - */ -#define AMDGPU_TIMEOUT_INFINITE 0xffffffffffffffffull - -/** - * Used in amdgpu_cs_query_fence_status(), meaning that the given timeout - * is absolute. - */ -#define AMDGPU_QUERY_FENCE_TIMEOUT_IS_ABSOLUTE (1 << 0) - -/*--------------------------------------------------------------------------*/ -/* ----------------------------- Enums ------------------------------------ */ -/*--------------------------------------------------------------------------*/ - -/** - * Enum describing possible handle types - * - * \sa amdgpu_bo_import, amdgpu_bo_export - * -*/ -enum amdgpu_bo_handle_type { - /** GEM flink name (needs DRM authentication, used by DRI2) */ - amdgpu_bo_handle_type_gem_flink_name = 0, - - /** KMS handle which is used by all driver ioctls */ - amdgpu_bo_handle_type_kms = 1, - - /** DMA-buf fd handle */ - amdgpu_bo_handle_type_dma_buf_fd = 2, - - /** Deprecated in favour of and same behaviour as - * amdgpu_bo_handle_type_kms, use that instead of this - */ - amdgpu_bo_handle_type_kms_noimport = 3, -}; - -/** Define known types of GPU VM VA ranges */ -enum amdgpu_gpu_va_range -{ - /** Allocate from "normal"/general range */ - amdgpu_gpu_va_range_general = 0 -}; - -enum amdgpu_sw_info { - amdgpu_sw_info_address32_hi = 0, -}; - -/*--------------------------------------------------------------------------*/ -/* -------------------------- Datatypes ----------------------------------- */ -/*--------------------------------------------------------------------------*/ - -/** - * Define opaque pointer to context associated with fd. - * This context will be returned as the result of - * "initialize" function and should be pass as the first - * parameter to any API call - */ -typedef struct amdgpu_device *amdgpu_device_handle; - -/** - * Define GPU Context type as pointer to opaque structure - * Example of GPU Context is the "rendering" context associated - * with OpenGL context (glCreateContext) - */ -typedef struct amdgpu_context *amdgpu_context_handle; - -/** - * Define handle for amdgpu resources: buffer, GDS, etc. - */ -typedef struct amdgpu_bo *amdgpu_bo_handle; - -/** - * Define handle for list of BOs - */ -typedef struct amdgpu_bo_list *amdgpu_bo_list_handle; - -/** - * Define handle to be used to work with VA allocated ranges - */ -typedef struct amdgpu_va *amdgpu_va_handle; - -/** - * Define handle for semaphore - */ -typedef struct amdgpu_semaphore *amdgpu_semaphore_handle; - -/*--------------------------------------------------------------------------*/ -/* -------------------------- Structures ---------------------------------- */ -/*--------------------------------------------------------------------------*/ - -/** - * Structure describing memory allocation request - * - * \sa amdgpu_bo_alloc() - * -*/ -struct amdgpu_bo_alloc_request { - /** Allocation request. It must be aligned correctly. */ - uint64_t alloc_size; - - /** - * It may be required to have some specific alignment requirements - * for physical back-up storage (e.g. for displayable surface). - * If 0 there is no special alignment requirement - */ - uint64_t phys_alignment; - - /** - * UMD should specify where to allocate memory and how it - * will be accessed by the CPU. - */ - uint32_t preferred_heap; - - /** Additional flags passed on allocation */ - uint64_t flags; -}; - -/** - * Special UMD specific information associated with buffer. - * - * It may be need to pass some buffer charactersitic as part - * of buffer sharing. Such information are defined UMD and - * opaque for libdrm_amdgpu as well for kernel driver. - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_query_info, - * amdgpu_bo_import(), amdgpu_bo_export - * -*/ -struct amdgpu_bo_metadata { - /** Special flag associated with surface */ - uint64_t flags; - - /** - * ASIC-specific tiling information (also used by DCE). - * The encoding is defined by the AMDGPU_TILING_* definitions. - */ - uint64_t tiling_info; - - /** Size of metadata associated with the buffer, in bytes. */ - uint32_t size_metadata; - - /** UMD specific metadata. Opaque for kernel */ - uint32_t umd_metadata[64]; -}; - -/** - * Structure describing allocated buffer. Client may need - * to query such information as part of 'sharing' buffers mechanism - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_query_info(), - * amdgpu_bo_import(), amdgpu_bo_export() -*/ -struct amdgpu_bo_info { - /** Allocated memory size */ - uint64_t alloc_size; - - /** - * It may be required to have some specific alignment requirements - * for physical back-up storage. - */ - uint64_t phys_alignment; - - /** Heap where to allocate memory. */ - uint32_t preferred_heap; - - /** Additional allocation flags. */ - uint64_t alloc_flags; - - /** Metadata associated with buffer if any. */ - struct amdgpu_bo_metadata metadata; -}; - -/** - * Structure with information about "imported" buffer - * - * \sa amdgpu_bo_import() - * - */ -struct amdgpu_bo_import_result { - /** Handle of memory/buffer to use */ - amdgpu_bo_handle buf_handle; - - /** Buffer size */ - uint64_t alloc_size; -}; - -/** - * - * Structure to describe GDS partitioning information. - * \note OA and GWS resources are asscoiated with GDS partition - * - * \sa amdgpu_gpu_resource_query_gds_info - * -*/ -struct amdgpu_gds_resource_info { - uint32_t gds_gfx_partition_size; - uint32_t compute_partition_size; - uint32_t gds_total_size; - uint32_t gws_per_gfx_partition; - uint32_t gws_per_compute_partition; - uint32_t oa_per_gfx_partition; - uint32_t oa_per_compute_partition; -}; - -/** - * Structure describing CS fence - * - * \sa amdgpu_cs_query_fence_status(), amdgpu_cs_request, amdgpu_cs_submit() - * -*/ -struct amdgpu_cs_fence { - - /** In which context IB was sent to execution */ - amdgpu_context_handle context; - - /** To which HW IP type the fence belongs */ - uint32_t ip_type; - - /** IP instance index if there are several IPs of the same type. */ - uint32_t ip_instance; - - /** Ring index of the HW IP */ - uint32_t ring; - - /** Specify fence for which we need to check submission status.*/ - uint64_t fence; -}; - -/** - * Structure describing IB - * - * \sa amdgpu_cs_request, amdgpu_cs_submit() - * -*/ -struct amdgpu_cs_ib_info { - /** Special flags */ - uint64_t flags; - - /** Virtual MC address of the command buffer */ - uint64_t ib_mc_address; - - /** - * Size of Command Buffer to be submitted. - * - The size is in units of dwords (4 bytes). - * - Could be 0 - */ - uint32_t size; -}; - -/** - * Structure describing fence information - * - * \sa amdgpu_cs_request, amdgpu_cs_query_fence, - * amdgpu_cs_submit(), amdgpu_cs_query_fence_status() -*/ -struct amdgpu_cs_fence_info { - /** buffer object for the fence */ - amdgpu_bo_handle handle; - - /** fence offset in the unit of sizeof(uint64_t) */ - uint64_t offset; -}; - -/** - * Structure describing submission request - * - * \note We could have several IBs as packet. e.g. CE, CE, DE case for gfx - * - * \sa amdgpu_cs_submit() -*/ -struct amdgpu_cs_request { - /** Specify flags with additional information */ - uint64_t flags; - - /** Specify HW IP block type to which to send the IB. */ - unsigned ip_type; - - /** IP instance index if there are several IPs of the same type. */ - unsigned ip_instance; - - /** - * Specify ring index of the IP. We could have several rings - * in the same IP. E.g. 0 for SDMA0 and 1 for SDMA1. - */ - uint32_t ring; - - /** - * List handle with resources used by this request. - */ - amdgpu_bo_list_handle resources; - - /** - * Number of dependencies this Command submission needs to - * wait for before starting execution. - */ - uint32_t number_of_dependencies; - - /** - * Array of dependencies which need to be met before - * execution can start. - */ - struct amdgpu_cs_fence *dependencies; - - /** Number of IBs to submit in the field ibs. */ - uint32_t number_of_ibs; - - /** - * IBs to submit. Those IBs will be submit together as single entity - */ - struct amdgpu_cs_ib_info *ibs; - - /** - * The returned sequence number for the command submission - */ - uint64_t seq_no; - - /** - * The fence information - */ - struct amdgpu_cs_fence_info fence_info; -}; - -/** - * Structure which provide information about GPU VM MC Address space - * alignments requirements - * - * \sa amdgpu_query_buffer_size_alignment - */ -struct amdgpu_buffer_size_alignments { - /** Size alignment requirement for allocation in - * local memory */ - uint64_t size_local; - - /** - * Size alignment requirement for allocation in remote memory - */ - uint64_t size_remote; -}; - -/** - * Structure which provide information about heap - * - * \sa amdgpu_query_heap_info() - * - */ -struct amdgpu_heap_info { - /** Theoretical max. available memory in the given heap */ - uint64_t heap_size; - - /** - * Number of bytes allocated in the heap. This includes all processes - * and private allocations in the kernel. It changes when new buffers - * are allocated, freed, and moved. It cannot be larger than - * heap_size. - */ - uint64_t heap_usage; - - /** - * Theoretical possible max. size of buffer which - * could be allocated in the given heap - */ - uint64_t max_allocation; -}; - -/** - * Describe GPU h/w info needed for UMD correct initialization - * - * \sa amdgpu_query_gpu_info() -*/ -struct amdgpu_gpu_info { - /** Asic id */ - uint32_t asic_id; - /** Chip revision */ - uint32_t chip_rev; - /** Chip external revision */ - uint32_t chip_external_rev; - /** Family ID */ - uint32_t family_id; - /** Special flags */ - uint64_t ids_flags; - /** max engine clock*/ - uint64_t max_engine_clk; - /** max memory clock */ - uint64_t max_memory_clk; - /** number of shader engines */ - uint32_t num_shader_engines; - /** number of shader arrays per engine */ - uint32_t num_shader_arrays_per_engine; - /** Number of available good shader pipes */ - uint32_t avail_quad_shader_pipes; - /** Max. number of shader pipes.(including good and bad pipes */ - uint32_t max_quad_shader_pipes; - /** Number of parameter cache entries per shader quad pipe */ - uint32_t cache_entries_per_quad_pipe; - /** Number of available graphics context */ - uint32_t num_hw_gfx_contexts; - /** Number of render backend pipes */ - uint32_t rb_pipes; - /** Enabled render backend pipe mask */ - uint32_t enabled_rb_pipes_mask; - /** Frequency of GPU Counter */ - uint32_t gpu_counter_freq; - /** CC_RB_BACKEND_DISABLE.BACKEND_DISABLE per SE */ - uint32_t backend_disable[4]; - /** Value of MC_ARB_RAMCFG register*/ - uint32_t mc_arb_ramcfg; - /** Value of GB_ADDR_CONFIG */ - uint32_t gb_addr_cfg; - /** Values of the GB_TILE_MODE0..31 registers */ - uint32_t gb_tile_mode[32]; - /** Values of GB_MACROTILE_MODE0..15 registers */ - uint32_t gb_macro_tile_mode[16]; - /** Value of PA_SC_RASTER_CONFIG register per SE */ - uint32_t pa_sc_raster_cfg[4]; - /** Value of PA_SC_RASTER_CONFIG_1 register per SE */ - uint32_t pa_sc_raster_cfg1[4]; - /* CU info */ - uint32_t cu_active_number; - uint32_t cu_ao_mask; - uint32_t cu_bitmap[4][4]; - /* video memory type info*/ - uint32_t vram_type; - /* video memory bit width*/ - uint32_t vram_bit_width; - /** constant engine ram size*/ - uint32_t ce_ram_size; - /* vce harvesting instance */ - uint32_t vce_harvest_config; - /* PCI revision ID */ - uint32_t pci_rev_id; -}; - - -/*--------------------------------------------------------------------------*/ -/*------------------------- Functions --------------------------------------*/ -/*--------------------------------------------------------------------------*/ - -/* - * Initialization / Cleanup - * -*/ - -/** - * - * \param fd - \c [in] File descriptor for AMD GPU device - * received previously as the result of - * e.g. drmOpen() call. - * For legacy fd type, the DRI2/DRI3 - * authentication should be done before - * calling this function. - * \param major_version - \c [out] Major version of library. It is assumed - * that adding new functionality will cause - * increase in major version - * \param minor_version - \c [out] Minor version of library - * \param device_handle - \c [out] Pointer to opaque context which should - * be passed as the first parameter on each - * API call - * - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * - * \sa amdgpu_device_deinitialize() -*/ -int amdgpu_device_initialize(int fd, - uint32_t *major_version, - uint32_t *minor_version, - amdgpu_device_handle *device_handle); - -/** - * - * When access to such library does not needed any more the special - * function must be call giving opportunity to clean up any - * resources if needed. - * - * \param device_handle - \c [in] Context associated with file - * descriptor for AMD GPU device - * received previously as the - * result e.g. of drmOpen() call. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_device_initialize() - * -*/ -int amdgpu_device_deinitialize(amdgpu_device_handle device_handle); - -/** - * - * /param device_handle - \c [in] Device handle. - * See #amdgpu_device_initialize() - * - * \return Returns the drm fd used for operations on this - * device. This is still owned by the library and hence - * should not be closed. Guaranteed to be valid until - * #amdgpu_device_deinitialize gets called. - * -*/ -int amdgpu_device_get_fd(amdgpu_device_handle device_handle); - -/* - * Memory Management - * -*/ - -/** - * Allocate memory to be used by UMD for GPU related operations - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param alloc_buffer - \c [in] Pointer to the structure describing an - * allocation request - * \param buf_handle - \c [out] Allocated buffer handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_free() -*/ -int amdgpu_bo_alloc(amdgpu_device_handle dev, - struct amdgpu_bo_alloc_request *alloc_buffer, - amdgpu_bo_handle *buf_handle); - -/** - * Associate opaque data with buffer to be queried by another UMD - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle - * \param info - \c [in] Metadata to associated with buffer - * - * \return 0 on success\n - * <0 - Negative POSIX Error code -*/ -int amdgpu_bo_set_metadata(amdgpu_bo_handle buf_handle, - struct amdgpu_bo_metadata *info); - -/** - * Query buffer information including metadata previusly associated with - * buffer. - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle - * \param info - \c [out] Structure describing buffer - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_alloc() -*/ -int amdgpu_bo_query_info(amdgpu_bo_handle buf_handle, - struct amdgpu_bo_info *info); - -/** - * Allow others to get access to buffer - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle - * \param type - \c [in] Type of handle requested - * \param shared_handle - \c [out] Special "shared" handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_import() - * -*/ -int amdgpu_bo_export(amdgpu_bo_handle buf_handle, - enum amdgpu_bo_handle_type type, - uint32_t *shared_handle); - -/** - * Request access to "shared" buffer - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param type - \c [in] Type of handle requested - * \param shared_handle - \c [in] Shared handle received as result "import" - * operation - * \param output - \c [out] Pointer to structure with information - * about imported buffer - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note Buffer must be "imported" only using new "fd" (different from - * one used by "exporter"). - * - * \sa amdgpu_bo_export() - * -*/ -int amdgpu_bo_import(amdgpu_device_handle dev, - enum amdgpu_bo_handle_type type, - uint32_t shared_handle, - struct amdgpu_bo_import_result *output); - -/** - * Request GPU access to user allocated memory e.g. via "malloc" - * - * \param dev - [in] Device handle. See #amdgpu_device_initialize() - * \param cpu - [in] CPU address of user allocated memory which we - * want to map to GPU address space (make GPU accessible) - * (This address must be correctly aligned). - * \param size - [in] Size of allocation (must be correctly aligned) - * \param buf_handle - [out] Buffer handle for the userptr memory - * resource on submission and be used in other operations. - * - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note - * This call doesn't guarantee that such memory will be persistently - * "locked" / make non-pageable. The purpose of this call is to provide - * opportunity for GPU get access to this resource during submission. - * - * The maximum amount of memory which could be mapped in this call depends - * if overcommit is disabled or not. If overcommit is disabled than the max. - * amount of memory to be pinned will be limited by left "free" size in total - * amount of memory which could be locked simultaneously ("GART" size). - * - * Supported (theoretical) max. size of mapping is restricted only by - * "GART" size. - * - * It is responsibility of caller to correctly specify access rights - * on VA assignment. -*/ -int amdgpu_create_bo_from_user_mem(amdgpu_device_handle dev, - void *cpu, uint64_t size, - amdgpu_bo_handle *buf_handle); - -/** - * Validate if the user memory comes from BO - * - * \param dev - [in] Device handle. See #amdgpu_device_initialize() - * \param cpu - [in] CPU address of user allocated memory which we - * want to map to GPU address space (make GPU accessible) - * (This address must be correctly aligned). - * \param size - [in] Size of allocation (must be correctly aligned) - * \param buf_handle - [out] Buffer handle for the userptr memory - * if the user memory is not from BO, the buf_handle will be NULL. - * \param offset_in_bo - [out] offset in this BO for this user memory - * - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_find_bo_by_cpu_mapping(amdgpu_device_handle dev, - void *cpu, - uint64_t size, - amdgpu_bo_handle *buf_handle, - uint64_t *offset_in_bo); - -/** - * Free previously allocated memory - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle to free - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note In the case of memory shared between different applications all - * resources will be “physically” freed only all such applications - * will be terminated - * \note If is UMD responsibility to ‘free’ buffer only when there is no - * more GPU access - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_alloc() - * -*/ -int amdgpu_bo_free(amdgpu_bo_handle buf_handle); - -/** - * Increase the reference count of a buffer object - * - * \param bo - \c [in] Buffer object handle to increase the reference count - * - * \sa amdgpu_bo_alloc(), amdgpu_bo_free() - * -*/ -void amdgpu_bo_inc_ref(amdgpu_bo_handle bo); - -/** - * Request CPU access to GPU accessible memory - * - * \param buf_handle - \c [in] Buffer handle - * \param cpu - \c [out] CPU address to be used for access - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_cpu_unmap() - * -*/ -int amdgpu_bo_cpu_map(amdgpu_bo_handle buf_handle, void **cpu); - -/** - * Release CPU access to GPU memory - * - * \param buf_handle - \c [in] Buffer handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_cpu_map() - * -*/ -int amdgpu_bo_cpu_unmap(amdgpu_bo_handle buf_handle); - -/** - * Wait until a buffer is not used by the device. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle. - * \param timeout_ns - Timeout in nanoseconds. - * \param buffer_busy - 0 if buffer is idle, all GPU access was completed - * and no GPU access is scheduled. - * 1 GPU access is in fly or scheduled - * - * \return 0 - on success - * <0 - Negative POSIX Error code - */ -int amdgpu_bo_wait_for_idle(amdgpu_bo_handle buf_handle, - uint64_t timeout_ns, - bool *buffer_busy); - -/** - * Creates a BO list handle for command submission. - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param number_of_buffers - \c [in] Number of BOs in the list - * \param buffers - \c [in] List of BO handles - * \param result - \c [out] Created BO list handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_destroy_raw(), amdgpu_cs_submit_raw2() -*/ -int amdgpu_bo_list_create_raw(amdgpu_device_handle dev, - uint32_t number_of_buffers, - struct drm_amdgpu_bo_list_entry *buffers, - uint32_t *result); - -/** - * Destroys a BO list handle. - * - * \param bo_list - \c [in] BO list handle. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_create_raw(), amdgpu_cs_submit_raw2() -*/ -int amdgpu_bo_list_destroy_raw(amdgpu_device_handle dev, uint32_t bo_list); - -/** - * Creates a BO list handle for command submission. - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param number_of_resources - \c [in] Number of BOs in the list - * \param resources - \c [in] List of BO handles - * \param resource_prios - \c [in] Optional priority for each handle - * \param result - \c [out] Created BO list handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_destroy() -*/ -int amdgpu_bo_list_create(amdgpu_device_handle dev, - uint32_t number_of_resources, - amdgpu_bo_handle *resources, - uint8_t *resource_prios, - amdgpu_bo_list_handle *result); - -/** - * Destroys a BO list handle. - * - * \param handle - \c [in] BO list handle. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_create() -*/ -int amdgpu_bo_list_destroy(amdgpu_bo_list_handle handle); - -/** - * Update resources for existing BO list - * - * \param handle - \c [in] BO list handle - * \param number_of_resources - \c [in] Number of BOs in the list - * \param resources - \c [in] List of BO handles - * \param resource_prios - \c [in] Optional priority for each handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_update() -*/ -int amdgpu_bo_list_update(amdgpu_bo_list_handle handle, - uint32_t number_of_resources, - amdgpu_bo_handle *resources, - uint8_t *resource_prios); - -/* - * GPU Execution context - * -*/ - -/** - * Create GPU execution Context - * - * For the purpose of GPU Scheduler and GPU Robustness extensions it is - * necessary to have information/identify rendering/compute contexts. - * It also may be needed to associate some specific requirements with such - * contexts. Kernel driver will guarantee that submission from the same - * context will always be executed in order (first come, first serve). - * - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param priority - \c [in] Context creation flags. See AMDGPU_CTX_PRIORITY_* - * \param context - \c [out] GPU Context handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_free() - * -*/ -int amdgpu_cs_ctx_create2(amdgpu_device_handle dev, - uint32_t priority, - amdgpu_context_handle *context); -/** - * Create GPU execution Context - * - * Refer to amdgpu_cs_ctx_create2 for full documentation. This call - * is missing the priority parameter. - * - * \sa amdgpu_cs_ctx_create2() - * -*/ -int amdgpu_cs_ctx_create(amdgpu_device_handle dev, - amdgpu_context_handle *context); - -/** - * - * Destroy GPU execution context when not needed any more - * - * \param context - \c [in] GPU Context handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_create() - * -*/ -int amdgpu_cs_ctx_free(amdgpu_context_handle context); - -/** - * Override the submission priority for the given context using a master fd. - * - * \param dev - \c [in] device handle - * \param context - \c [in] context handle for context id - * \param master_fd - \c [in] The master fd to authorize the override. - * \param priority - \c [in] The priority to assign to the context. - * - * \return 0 on success or a a negative Posix error code on failure. - */ -int amdgpu_cs_ctx_override_priority(amdgpu_device_handle dev, - amdgpu_context_handle context, - int master_fd, - unsigned priority); - -/** - * Set or query the stable power state for GPU profiling. - * - * \param dev - \c [in] device handle - * \param op - \c [in] AMDGPU_CTX_OP_{GET,SET}_STABLE_PSTATE - * \param flags - \c [in] AMDGPU_CTX_STABLE_PSTATE_* - * \param out_flags - \c [out] output current stable pstate - * - * \return 0 on success otherwise POSIX Error code. - */ -int amdgpu_cs_ctx_stable_pstate(amdgpu_context_handle context, - uint32_t op, - uint32_t flags, - uint32_t *out_flags); - -/** - * Query reset state for the specific GPU Context - * - * \param context - \c [in] GPU Context handle - * \param state - \c [out] One of AMDGPU_CTX_*_RESET - * \param hangs - \c [out] Number of hangs caused by the context. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_create() - * -*/ -int amdgpu_cs_query_reset_state(amdgpu_context_handle context, - uint32_t *state, uint32_t *hangs); - -/** - * Query reset state for the specific GPU Context. - * - * \param context - \c [in] GPU Context handle - * \param flags - \c [out] A combination of AMDGPU_CTX_QUERY2_FLAGS_* - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_create() - * -*/ -int amdgpu_cs_query_reset_state2(amdgpu_context_handle context, - uint64_t *flags); - -/* - * Command Buffers Management - * -*/ - -/** - * Send request to submit command buffers to hardware. - * - * Kernel driver could use GPU Scheduler to make decision when physically - * sent this request to the hardware. Accordingly this request could be put - * in queue and sent for execution later. The only guarantee is that request - * from the same GPU context to the same ip:ip_instance:ring will be executed in - * order. - * - * The caller can specify the user fence buffer/location with the fence_info in the - * cs_request.The sequence number is returned via the 'seq_no' parameter - * in ibs_request structure. - * - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param context - \c [in] GPU Context - * \param flags - \c [in] Global submission flags - * \param ibs_request - \c [in/out] Pointer to submission requests. - * We could submit to the several - * engines/rings simulteniously as - * 'atomic' operation - * \param number_of_requests - \c [in] Number of submission requests - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note It is required to pass correct resource list with buffer handles - * which will be accessible by command buffers from submission - * This will allow kernel driver to correctly implement "paging". - * Failure to do so will have unpredictable results. - * - * \sa amdgpu_command_buffer_alloc(), amdgpu_command_buffer_free(), - * amdgpu_cs_query_fence_status() - * -*/ -int amdgpu_cs_submit(amdgpu_context_handle context, - uint64_t flags, - struct amdgpu_cs_request *ibs_request, - uint32_t number_of_requests); - -/** - * Query status of Command Buffer Submission - * - * \param fence - \c [in] Structure describing fence to query - * \param timeout_ns - \c [in] Timeout value to wait - * \param flags - \c [in] Flags for the query - * \param expired - \c [out] If fence expired or not.\n - * 0 – if fence is not expired\n - * !0 - otherwise - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note If UMD wants only to check operation status and returned immediately - * then timeout value as 0 must be passed. In this case success will be - * returned in the case if submission was completed or timeout error - * code. - * - * \sa amdgpu_cs_submit() -*/ -int amdgpu_cs_query_fence_status(struct amdgpu_cs_fence *fence, - uint64_t timeout_ns, - uint64_t flags, - uint32_t *expired); - -/** - * Wait for multiple fences - * - * \param fences - \c [in] The fence array to wait - * \param fence_count - \c [in] The fence count - * \param wait_all - \c [in] If true, wait all fences to be signaled, - * otherwise, wait at least one fence - * \param timeout_ns - \c [in] The timeout to wait, in nanoseconds - * \param status - \c [out] '1' for signaled, '0' for timeout - * \param first - \c [out] the index of the first signaled fence from @fences - * - * \return 0 on success - * <0 - Negative POSIX Error code - * - * \note Currently it supports only one amdgpu_device. All fences come from - * the same amdgpu_device with the same fd. -*/ -int amdgpu_cs_wait_fences(struct amdgpu_cs_fence *fences, - uint32_t fence_count, - bool wait_all, - uint64_t timeout_ns, - uint32_t *status, uint32_t *first); - -/* - * Query / Info API - * -*/ - -/** - * Query allocation size alignments - * - * UMD should query information about GPU VM MC size alignments requirements - * to be able correctly choose required allocation size and implement - * internal optimization if needed. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param info - \c [out] Pointer to structure to get size alignment - * requirements - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_buffer_size_alignment(amdgpu_device_handle dev, - struct amdgpu_buffer_size_alignments - *info); - -/** - * Query firmware versions - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param fw_type - \c [in] AMDGPU_INFO_FW_* - * \param ip_instance - \c [in] Index of the IP block of the same type. - * \param index - \c [in] Index of the engine. (for SDMA and MEC) - * \param version - \c [out] Pointer to to the "version" return value - * \param feature - \c [out] Pointer to to the "feature" return value - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_firmware_version(amdgpu_device_handle dev, unsigned fw_type, - unsigned ip_instance, unsigned index, - uint32_t *version, uint32_t *feature); - -/** - * Query the number of HW IP instances of a certain type. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param count - \c [out] Pointer to structure to get information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code -*/ -int amdgpu_query_hw_ip_count(amdgpu_device_handle dev, unsigned type, - uint32_t *count); - -/** - * Query engine information - * - * This query allows UMD to query information different engines and their - * capabilities. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param ip_instance - \c [in] Index of the IP block of the same type. - * \param info - \c [out] Pointer to structure to get information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code -*/ -int amdgpu_query_hw_ip_info(amdgpu_device_handle dev, unsigned type, - unsigned ip_instance, - struct drm_amdgpu_info_hw_ip *info); - -/** - * Query heap information - * - * This query allows UMD to query potentially available memory resources and - * adjust their logic if necessary. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param heap - \c [in] Heap type - * \param info - \c [in] Pointer to structure to get needed information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_heap_info(amdgpu_device_handle dev, uint32_t heap, - uint32_t flags, struct amdgpu_heap_info *info); - -/** - * Get the CRTC ID from the mode object ID - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param id - \c [in] Mode object ID - * \param result - \c [in] Pointer to the CRTC ID - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_crtc_from_id(amdgpu_device_handle dev, unsigned id, - int32_t *result); - -/** - * Query GPU H/w Info - * - * Query hardware specific information - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param heap - \c [in] Heap type - * \param info - \c [in] Pointer to structure to get needed information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_gpu_info(amdgpu_device_handle dev, - struct amdgpu_gpu_info *info); - -/** - * Query hardware or driver information. - * - * The return size is query-specific and depends on the "info_id" parameter. - * No more than "size" bytes is returned. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param info_id - \c [in] AMDGPU_INFO_* - * \param size - \c [in] Size of the returned value. - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX error code - * -*/ -int amdgpu_query_info(amdgpu_device_handle dev, unsigned info_id, - unsigned size, void *value); - -/** - * Query hardware or driver information. - * - * The return size is query-specific and depends on the "info_id" parameter. - * No more than "size" bytes is returned. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param info - \c [in] amdgpu_sw_info_* - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX error code - * -*/ -int amdgpu_query_sw_info(amdgpu_device_handle dev, enum amdgpu_sw_info info, - void *value); - -/** - * Query information about GDS - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param gds_info - \c [out] Pointer to structure to get GDS information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_gds_info(amdgpu_device_handle dev, - struct amdgpu_gds_resource_info *gds_info); - -/** - * Query information about sensor. - * - * The return size is query-specific and depends on the "sensor_type" - * parameter. No more than "size" bytes is returned. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param sensor_type - \c [in] AMDGPU_INFO_SENSOR_* - * \param size - \c [in] Size of the returned value. - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_sensor_info(amdgpu_device_handle dev, unsigned sensor_type, - unsigned size, void *value); - -/** - * Query information about video capabilities - * - * The return sizeof(struct drm_amdgpu_info_video_caps) - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param caps_type - \c [in] AMDGPU_INFO_VIDEO_CAPS_DECODE(ENCODE) - * \param size - \c [in] Size of the returned value. - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_video_caps_info(amdgpu_device_handle dev, unsigned cap_type, - unsigned size, void *value); - -/** - * Read a set of consecutive memory-mapped registers. - * Not all registers are allowed to be read by userspace. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize( - * \param dword_offset - \c [in] Register offset in dwords - * \param count - \c [in] The number of registers to read starting - * from the offset - * \param instance - \c [in] GRBM_GFX_INDEX selector. It may have other - * uses. Set it to 0xffffffff if unsure. - * \param flags - \c [in] Flags with additional information. - * \param values - \c [out] The pointer to return values. - * - * \return 0 on success\n - * <0 - Negative POSIX error code - * -*/ -int amdgpu_read_mm_registers(amdgpu_device_handle dev, unsigned dword_offset, - unsigned count, uint32_t instance, uint32_t flags, - uint32_t *values); - -/** - * Flag to request VA address range in the 32bit address space -*/ -#define AMDGPU_VA_RANGE_32_BIT 0x1 -#define AMDGPU_VA_RANGE_HIGH 0x2 -#define AMDGPU_VA_RANGE_REPLAYABLE 0x4 - -/** - * Allocate virtual address range - * - * \param dev - [in] Device handle. See #amdgpu_device_initialize() - * \param va_range_type - \c [in] Type of MC va range from which to allocate - * \param size - \c [in] Size of range. Size must be correctly* aligned. - * It is client responsibility to correctly aligned size based on the future - * usage of allocated range. - * \param va_base_alignment - \c [in] Overwrite base address alignment - * requirement for GPU VM MC virtual - * address assignment. Must be multiple of size alignments received as - * 'amdgpu_buffer_size_alignments'. - * If 0 use the default one. - * \param va_base_required - \c [in] Specified required va base address. - * If 0 then library choose available one. - * If !0 value will be passed and those value already "in use" then - * corresponding error status will be returned. - * \param va_base_allocated - \c [out] On return: Allocated VA base to be used - * by client. - * \param va_range_handle - \c [out] On return: Handle assigned to allocation - * \param flags - \c [in] flags for special VA range - * - * \return 0 on success\n - * >0 - AMD specific error code\n - * <0 - Negative POSIX Error code - * - * \notes \n - * It is client responsibility to correctly handle VA assignments and usage. - * Neither kernel driver nor libdrm_amdpgu are able to prevent and - * detect wrong va assignment. - * - * It is client responsibility to correctly handle multi-GPU cases and to pass - * the corresponding arrays of all devices handles where corresponding VA will - * be used. - * -*/ -int amdgpu_va_range_alloc(amdgpu_device_handle dev, - enum amdgpu_gpu_va_range va_range_type, - uint64_t size, - uint64_t va_base_alignment, - uint64_t va_base_required, - uint64_t *va_base_allocated, - amdgpu_va_handle *va_range_handle, - uint64_t flags); - -/** - * Free previously allocated virtual address range - * - * - * \param va_range_handle - \c [in] Handle assigned to VA allocation - * - * \return 0 on success\n - * >0 - AMD specific error code\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_va_range_free(amdgpu_va_handle va_range_handle); - -/** -* Query virtual address range -* -* UMD can query GPU VM range supported by each device -* to initialize its own VAM accordingly. -* -* \param dev - [in] Device handle. See #amdgpu_device_initialize() -* \param type - \c [in] Type of virtual address range -* \param offset - \c [out] Start offset of virtual address range -* \param size - \c [out] Size of virtual address range -* -* \return 0 on success\n -* <0 - Negative POSIX Error code -* -*/ - -int amdgpu_va_range_query(amdgpu_device_handle dev, - enum amdgpu_gpu_va_range type, - uint64_t *start, - uint64_t *end); - -/** - * VA mapping/unmapping for the buffer object - * - * \param bo - \c [in] BO handle - * \param offset - \c [in] Start offset to map - * \param size - \c [in] Size to map - * \param addr - \c [in] Start virtual address. - * \param flags - \c [in] Supported flags for mapping/unmapping - * \param ops - \c [in] AMDGPU_VA_OP_MAP or AMDGPU_VA_OP_UNMAP - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ - -int amdgpu_bo_va_op(amdgpu_bo_handle bo, - uint64_t offset, - uint64_t size, - uint64_t addr, - uint64_t flags, - uint32_t ops); - -/** - * VA mapping/unmapping for a buffer object or PRT region. - * - * This is not a simple drop-in extension for amdgpu_bo_va_op; instead, all - * parameters are treated "raw", i.e. size is not automatically aligned, and - * all flags must be specified explicitly. - * - * \param dev - \c [in] device handle - * \param bo - \c [in] BO handle (may be NULL) - * \param offset - \c [in] Start offset to map - * \param size - \c [in] Size to map - * \param addr - \c [in] Start virtual address. - * \param flags - \c [in] Supported flags for mapping/unmapping - * \param ops - \c [in] AMDGPU_VA_OP_MAP or AMDGPU_VA_OP_UNMAP - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ - -int amdgpu_bo_va_op_raw(amdgpu_device_handle dev, - amdgpu_bo_handle bo, - uint64_t offset, - uint64_t size, - uint64_t addr, - uint64_t flags, - uint32_t ops); - -/** - * create semaphore - * - * \param sem - \c [out] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_create_semaphore(amdgpu_semaphore_handle *sem); - -/** - * signal semaphore - * - * \param context - \c [in] GPU Context - * \param ip_type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param ip_instance - \c [in] Index of the IP block of the same type - * \param ring - \c [in] Specify ring index of the IP - * \param sem - \c [in] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_signal_semaphore(amdgpu_context_handle ctx, - uint32_t ip_type, - uint32_t ip_instance, - uint32_t ring, - amdgpu_semaphore_handle sem); - -/** - * wait semaphore - * - * \param context - \c [in] GPU Context - * \param ip_type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param ip_instance - \c [in] Index of the IP block of the same type - * \param ring - \c [in] Specify ring index of the IP - * \param sem - \c [in] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_wait_semaphore(amdgpu_context_handle ctx, - uint32_t ip_type, - uint32_t ip_instance, - uint32_t ring, - amdgpu_semaphore_handle sem); - -/** - * destroy semaphore - * - * \param sem - \c [in] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_destroy_semaphore(amdgpu_semaphore_handle sem); - -/** - * Get the ASIC marketing name - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * - * \return the constant string of the marketing name - * "NULL" means the ASIC is not found -*/ -const char *amdgpu_get_marketing_name(amdgpu_device_handle dev); - -/** - * Create kernel sync object - * - * \param dev - \c [in] device handle - * \param flags - \c [in] flags that affect creation - * \param syncobj - \c [out] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_create_syncobj2(amdgpu_device_handle dev, - uint32_t flags, - uint32_t *syncobj); - -/** - * Create kernel sync object - * - * \param dev - \c [in] device handle - * \param syncobj - \c [out] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_create_syncobj(amdgpu_device_handle dev, - uint32_t *syncobj); -/** - * Destroy kernel sync object - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_destroy_syncobj(amdgpu_device_handle dev, - uint32_t syncobj); - -/** - * Reset kernel sync objects to unsignalled state. - * - * \param dev - \c [in] device handle - * \param syncobjs - \c [in] array of sync object handles - * \param syncobj_count - \c [in] number of handles in syncobjs - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_syncobj_reset(amdgpu_device_handle dev, - const uint32_t *syncobjs, uint32_t syncobj_count); - -/** - * Signal kernel sync objects. - * - * \param dev - \c [in] device handle - * \param syncobjs - \c [in] array of sync object handles - * \param syncobj_count - \c [in] number of handles in syncobjs - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_syncobj_signal(amdgpu_device_handle dev, - const uint32_t *syncobjs, uint32_t syncobj_count); - -/** - * Signal kernel timeline sync objects. - * - * \param dev - \c [in] device handle - * \param syncobjs - \c [in] array of sync object handles - * \param points - \c [in] array of timeline points - * \param syncobj_count - \c [in] number of handles in syncobjs - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_syncobj_timeline_signal(amdgpu_device_handle dev, - const uint32_t *syncobjs, - uint64_t *points, - uint32_t syncobj_count); - -/** - * Wait for one or all sync objects to signal. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param num_handles - \c [in] self-explanatory - * \param timeout_nsec - \c [in] self-explanatory - * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_WAIT_FLAGS_* - * \param first_signaled - \c [in] self-explanatory - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_wait(amdgpu_device_handle dev, - uint32_t *handles, unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); - -/** - * Wait for one or all sync objects on their points to signal. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param points - \c [in] array of sync points to wait - * \param num_handles - \c [in] self-explanatory - * \param timeout_nsec - \c [in] self-explanatory - * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_WAIT_FLAGS_* - * \param first_signaled - \c [in] self-explanatory - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_timeline_wait(amdgpu_device_handle dev, - uint32_t *handles, uint64_t *points, - unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); -/** - * Query sync objects payloads. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param points - \c [out] array of sync points returned, which presents - * syncobj payload. - * \param num_handles - \c [in] self-explanatory - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_query(amdgpu_device_handle dev, - uint32_t *handles, uint64_t *points, - unsigned num_handles); -/** - * Query sync objects last signaled or submitted point. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param points - \c [out] array of sync points returned, which presents - * syncobj payload. - * \param num_handles - \c [in] self-explanatory - * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_QUERY_FLAGS_* - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_query2(amdgpu_device_handle dev, - uint32_t *handles, uint64_t *points, - unsigned num_handles, uint32_t flags); - -/** - * Export kernel sync object to shareable fd. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param shared_fd - \c [out] shared file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_export_syncobj(amdgpu_device_handle dev, - uint32_t syncobj, - int *shared_fd); -/** - * Import kernel sync object from shareable fd. - * - * \param dev - \c [in] device handle - * \param shared_fd - \c [in] shared file descriptor. - * \param syncobj - \c [out] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_import_syncobj(amdgpu_device_handle dev, - int shared_fd, - uint32_t *syncobj); - -/** - * Export kernel sync object to a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param sync_file_fd - \c [out] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_export_sync_file(amdgpu_device_handle dev, - uint32_t syncobj, - int *sync_file_fd); - -/** - * Import kernel sync object from a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param sync_file_fd - \c [in] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_import_sync_file(amdgpu_device_handle dev, - uint32_t syncobj, - int sync_file_fd); -/** - * Export kernel timeline sync object to a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param point - \c [in] timeline point - * \param flags - \c [in] flags - * \param sync_file_fd - \c [out] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_export_sync_file2(amdgpu_device_handle dev, - uint32_t syncobj, - uint64_t point, - uint32_t flags, - int *sync_file_fd); - -/** - * Import kernel timeline sync object from a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param point - \c [in] timeline point - * \param sync_file_fd - \c [in] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_import_sync_file2(amdgpu_device_handle dev, - uint32_t syncobj, - uint64_t point, - int sync_file_fd); - -/** - * transfer between syncbojs. - * - * \param dev - \c [in] device handle - * \param dst_handle - \c [in] sync object handle - * \param dst_point - \c [in] timeline point, 0 presents dst is binary - * \param src_handle - \c [in] sync object handle - * \param src_point - \c [in] timeline point, 0 presents src is binary - * \param flags - \c [in] flags - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_transfer(amdgpu_device_handle dev, - uint32_t dst_handle, - uint64_t dst_point, - uint32_t src_handle, - uint64_t src_point, - uint32_t flags); - -/** - * Export an amdgpu fence as a handle (syncobj or fd). - * - * \param what AMDGPU_FENCE_TO_HANDLE_GET_{SYNCOBJ, FD} - * \param out_handle returned handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - */ -int amdgpu_cs_fence_to_handle(amdgpu_device_handle dev, - struct amdgpu_cs_fence *fence, - uint32_t what, - uint32_t *out_handle); - -/** - * Submit raw command submission to kernel - * - * \param dev - \c [in] device handle - * \param context - \c [in] context handle for context id - * \param bo_list_handle - \c [in] request bo list handle (0 for none) - * \param num_chunks - \c [in] number of CS chunks to submit - * \param chunks - \c [in] array of CS chunks - * \param seq_no - \c [out] output sequence number for submission. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -struct drm_amdgpu_cs_chunk; -struct drm_amdgpu_cs_chunk_dep; -struct drm_amdgpu_cs_chunk_data; - -int amdgpu_cs_submit_raw(amdgpu_device_handle dev, - amdgpu_context_handle context, - amdgpu_bo_list_handle bo_list_handle, - int num_chunks, - struct drm_amdgpu_cs_chunk *chunks, - uint64_t *seq_no); - -/** - * Submit raw command submission to the kernel with a raw BO list handle. - * - * \param dev - \c [in] device handle - * \param context - \c [in] context handle for context id - * \param bo_list_handle - \c [in] raw bo list handle (0 for none) - * \param num_chunks - \c [in] number of CS chunks to submit - * \param chunks - \c [in] array of CS chunks - * \param seq_no - \c [out] output sequence number for submission. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_create_raw(), amdgpu_bo_list_destroy_raw() - */ -int amdgpu_cs_submit_raw2(amdgpu_device_handle dev, - amdgpu_context_handle context, - uint32_t bo_list_handle, - int num_chunks, - struct drm_amdgpu_cs_chunk *chunks, - uint64_t *seq_no); - -void amdgpu_cs_chunk_fence_to_dep(struct amdgpu_cs_fence *fence, - struct drm_amdgpu_cs_chunk_dep *dep); -void amdgpu_cs_chunk_fence_info_to_data(struct amdgpu_cs_fence_info *fence_info, - struct drm_amdgpu_cs_chunk_data *data); - -/** - * Reserve VMID - * \param context - \c [in] GPU Context - * \param flags - \c [in] TBD - * - * \return 0 on success otherwise POSIX Error code -*/ -int amdgpu_vm_reserve_vmid(amdgpu_device_handle dev, uint32_t flags); - -/** - * Free reserved VMID - * \param context - \c [in] GPU Context - * \param flags - \c [in] TBD - * - * \return 0 on success otherwise POSIX Error code -*/ -int amdgpu_vm_unreserve_vmid(amdgpu_device_handle dev, uint32_t flags); - -#ifdef __cplusplus -} -#endif -#endif /* #ifdef _AMDGPU_H_ */ diff --git a/prebuilts/x86/include/libdrm/amdgpu_drm.h b/prebuilts/x86/include/libdrm/amdgpu_drm.h deleted file mode 100644 index 7f01f98..0000000 --- a/prebuilts/x86/include/libdrm/amdgpu_drm.h +++ /dev/null @@ -1,1157 +0,0 @@ -/* amdgpu_drm.h -- Public header for the amdgpu driver -*- linux-c -*- - * - * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Fremont, California. - * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. - * Copyright 2014 Advanced Micro Devices, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Kevin E. Martin - * Gareth Hughes - * Keith Whitwell - */ - -#ifndef __AMDGPU_DRM_H__ -#define __AMDGPU_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_AMDGPU_GEM_CREATE 0x00 -#define DRM_AMDGPU_GEM_MMAP 0x01 -#define DRM_AMDGPU_CTX 0x02 -#define DRM_AMDGPU_BO_LIST 0x03 -#define DRM_AMDGPU_CS 0x04 -#define DRM_AMDGPU_INFO 0x05 -#define DRM_AMDGPU_GEM_METADATA 0x06 -#define DRM_AMDGPU_GEM_WAIT_IDLE 0x07 -#define DRM_AMDGPU_GEM_VA 0x08 -#define DRM_AMDGPU_WAIT_CS 0x09 -#define DRM_AMDGPU_GEM_OP 0x10 -#define DRM_AMDGPU_GEM_USERPTR 0x11 -#define DRM_AMDGPU_WAIT_FENCES 0x12 -#define DRM_AMDGPU_VM 0x13 -#define DRM_AMDGPU_FENCE_TO_HANDLE 0x14 -#define DRM_AMDGPU_SCHED 0x15 - -#define DRM_IOCTL_AMDGPU_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_CREATE, union drm_amdgpu_gem_create) -#define DRM_IOCTL_AMDGPU_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_MMAP, union drm_amdgpu_gem_mmap) -#define DRM_IOCTL_AMDGPU_CTX DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_CTX, union drm_amdgpu_ctx) -#define DRM_IOCTL_AMDGPU_BO_LIST DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_BO_LIST, union drm_amdgpu_bo_list) -#define DRM_IOCTL_AMDGPU_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_CS, union drm_amdgpu_cs) -#define DRM_IOCTL_AMDGPU_INFO DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_INFO, struct drm_amdgpu_info) -#define DRM_IOCTL_AMDGPU_GEM_METADATA DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_METADATA, struct drm_amdgpu_gem_metadata) -#define DRM_IOCTL_AMDGPU_GEM_WAIT_IDLE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_WAIT_IDLE, union drm_amdgpu_gem_wait_idle) -#define DRM_IOCTL_AMDGPU_GEM_VA DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_VA, struct drm_amdgpu_gem_va) -#define DRM_IOCTL_AMDGPU_WAIT_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_WAIT_CS, union drm_amdgpu_wait_cs) -#define DRM_IOCTL_AMDGPU_GEM_OP DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_OP, struct drm_amdgpu_gem_op) -#define DRM_IOCTL_AMDGPU_GEM_USERPTR DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_USERPTR, struct drm_amdgpu_gem_userptr) -#define DRM_IOCTL_AMDGPU_WAIT_FENCES DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_WAIT_FENCES, union drm_amdgpu_wait_fences) -#define DRM_IOCTL_AMDGPU_VM DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_VM, union drm_amdgpu_vm) -#define DRM_IOCTL_AMDGPU_FENCE_TO_HANDLE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_FENCE_TO_HANDLE, union drm_amdgpu_fence_to_handle) -#define DRM_IOCTL_AMDGPU_SCHED DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_SCHED, union drm_amdgpu_sched) - -/** - * DOC: memory domains - * - * %AMDGPU_GEM_DOMAIN_CPU System memory that is not GPU accessible. - * Memory in this pool could be swapped out to disk if there is pressure. - * - * %AMDGPU_GEM_DOMAIN_GTT GPU accessible system memory, mapped into the - * GPU's virtual address space via gart. Gart memory linearizes non-contiguous - * pages of system memory, allows GPU access system memory in a linearized - * fashion. - * - * %AMDGPU_GEM_DOMAIN_VRAM Local video memory. For APUs, it is memory - * carved out by the BIOS. - * - * %AMDGPU_GEM_DOMAIN_GDS Global on-chip data storage used to share data - * across shader threads. - * - * %AMDGPU_GEM_DOMAIN_GWS Global wave sync, used to synchronize the - * execution of all the waves on a device. - * - * %AMDGPU_GEM_DOMAIN_OA Ordered append, used by 3D or Compute engines - * for appending data. - */ -#define AMDGPU_GEM_DOMAIN_CPU 0x1 -#define AMDGPU_GEM_DOMAIN_GTT 0x2 -#define AMDGPU_GEM_DOMAIN_VRAM 0x4 -#define AMDGPU_GEM_DOMAIN_GDS 0x8 -#define AMDGPU_GEM_DOMAIN_GWS 0x10 -#define AMDGPU_GEM_DOMAIN_OA 0x20 -#define AMDGPU_GEM_DOMAIN_MASK (AMDGPU_GEM_DOMAIN_CPU | \ - AMDGPU_GEM_DOMAIN_GTT | \ - AMDGPU_GEM_DOMAIN_VRAM | \ - AMDGPU_GEM_DOMAIN_GDS | \ - AMDGPU_GEM_DOMAIN_GWS | \ - AMDGPU_GEM_DOMAIN_OA) - -/* Flag that CPU access will be required for the case of VRAM domain */ -#define AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED (1 << 0) -/* Flag that CPU access will not work, this VRAM domain is invisible */ -#define AMDGPU_GEM_CREATE_NO_CPU_ACCESS (1 << 1) -/* Flag that USWC attributes should be used for GTT */ -#define AMDGPU_GEM_CREATE_CPU_GTT_USWC (1 << 2) -/* Flag that the memory should be in VRAM and cleared */ -#define AMDGPU_GEM_CREATE_VRAM_CLEARED (1 << 3) -/* Flag that allocating the BO should use linear VRAM */ -#define AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS (1 << 5) -/* Flag that BO is always valid in this VM */ -#define AMDGPU_GEM_CREATE_VM_ALWAYS_VALID (1 << 6) -/* Flag that BO sharing will be explicitly synchronized */ -#define AMDGPU_GEM_CREATE_EXPLICIT_SYNC (1 << 7) -/* Flag that indicates allocating MQD gart on GFX9, where the mtype - * for the second page onward should be set to NC. It should never - * be used by user space applications. - */ -#define AMDGPU_GEM_CREATE_CP_MQD_GFX9 (1 << 8) -/* Flag that BO may contain sensitive data that must be wiped before - * releasing the memory - */ -#define AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE (1 << 9) -/* Flag that BO will be encrypted and that the TMZ bit should be - * set in the PTEs when mapping this buffer via GPUVM or - * accessing it with various hw blocks - */ -#define AMDGPU_GEM_CREATE_ENCRYPTED (1 << 10) -/* Flag that BO will be used only in preemptible context, which does - * not require GTT memory accounting - */ -#define AMDGPU_GEM_CREATE_PREEMPTIBLE (1 << 11) - -struct drm_amdgpu_gem_create_in { - /** the requested memory size */ - __u64 bo_size; - /** physical start_addr alignment in bytes for some HW requirements */ - __u64 alignment; - /** the requested memory domains */ - __u64 domains; - /** allocation flags */ - __u64 domain_flags; -}; - -struct drm_amdgpu_gem_create_out { - /** returned GEM object handle */ - __u32 handle; - __u32 _pad; -}; - -union drm_amdgpu_gem_create { - struct drm_amdgpu_gem_create_in in; - struct drm_amdgpu_gem_create_out out; -}; - -/** Opcode to create new residency list. */ -#define AMDGPU_BO_LIST_OP_CREATE 0 -/** Opcode to destroy previously created residency list */ -#define AMDGPU_BO_LIST_OP_DESTROY 1 -/** Opcode to update resource information in the list */ -#define AMDGPU_BO_LIST_OP_UPDATE 2 - -struct drm_amdgpu_bo_list_in { - /** Type of operation */ - __u32 operation; - /** Handle of list or 0 if we want to create one */ - __u32 list_handle; - /** Number of BOs in list */ - __u32 bo_number; - /** Size of each element describing BO */ - __u32 bo_info_size; - /** Pointer to array describing BOs */ - __u64 bo_info_ptr; -}; - -struct drm_amdgpu_bo_list_entry { - /** Handle of BO */ - __u32 bo_handle; - /** New (if specified) BO priority to be used during migration */ - __u32 bo_priority; -}; - -struct drm_amdgpu_bo_list_out { - /** Handle of resource list */ - __u32 list_handle; - __u32 _pad; -}; - -union drm_amdgpu_bo_list { - struct drm_amdgpu_bo_list_in in; - struct drm_amdgpu_bo_list_out out; -}; - -/* context related */ -#define AMDGPU_CTX_OP_ALLOC_CTX 1 -#define AMDGPU_CTX_OP_FREE_CTX 2 -#define AMDGPU_CTX_OP_QUERY_STATE 3 -#define AMDGPU_CTX_OP_QUERY_STATE2 4 -#define AMDGPU_CTX_OP_GET_STABLE_PSTATE 5 -#define AMDGPU_CTX_OP_SET_STABLE_PSTATE 6 - -/* GPU reset status */ -#define AMDGPU_CTX_NO_RESET 0 -/* this the context caused it */ -#define AMDGPU_CTX_GUILTY_RESET 1 -/* some other context caused it */ -#define AMDGPU_CTX_INNOCENT_RESET 2 -/* unknown cause */ -#define AMDGPU_CTX_UNKNOWN_RESET 3 - -/* indicate gpu reset occured after ctx created */ -#define AMDGPU_CTX_QUERY2_FLAGS_RESET (1<<0) -/* indicate vram lost occured after ctx created */ -#define AMDGPU_CTX_QUERY2_FLAGS_VRAMLOST (1<<1) -/* indicate some job from this context once cause gpu hang */ -#define AMDGPU_CTX_QUERY2_FLAGS_GUILTY (1<<2) -/* indicate some errors are detected by RAS */ -#define AMDGPU_CTX_QUERY2_FLAGS_RAS_CE (1<<3) -#define AMDGPU_CTX_QUERY2_FLAGS_RAS_UE (1<<4) - -/* Context priority level */ -#define AMDGPU_CTX_PRIORITY_UNSET -2048 -#define AMDGPU_CTX_PRIORITY_VERY_LOW -1023 -#define AMDGPU_CTX_PRIORITY_LOW -512 -#define AMDGPU_CTX_PRIORITY_NORMAL 0 -/* - * When used in struct drm_amdgpu_ctx_in, a priority above NORMAL requires - * CAP_SYS_NICE or DRM_MASTER -*/ -#define AMDGPU_CTX_PRIORITY_HIGH 512 -#define AMDGPU_CTX_PRIORITY_VERY_HIGH 1023 - -/* select a stable profiling pstate for perfmon tools */ -#define AMDGPU_CTX_STABLE_PSTATE_FLAGS_MASK 0xf -#define AMDGPU_CTX_STABLE_PSTATE_NONE 0 -#define AMDGPU_CTX_STABLE_PSTATE_STANDARD 1 -#define AMDGPU_CTX_STABLE_PSTATE_MIN_SCLK 2 -#define AMDGPU_CTX_STABLE_PSTATE_MIN_MCLK 3 -#define AMDGPU_CTX_STABLE_PSTATE_PEAK 4 - -struct drm_amdgpu_ctx_in { - /** AMDGPU_CTX_OP_* */ - __u32 op; - /** Flags */ - __u32 flags; - __u32 ctx_id; - /** AMDGPU_CTX_PRIORITY_* */ - __s32 priority; -}; - -union drm_amdgpu_ctx_out { - struct { - __u32 ctx_id; - __u32 _pad; - } alloc; - - struct { - /** For future use, no flags defined so far */ - __u64 flags; - /** Number of resets caused by this context so far. */ - __u32 hangs; - /** Reset status since the last call of the ioctl. */ - __u32 reset_status; - } state; - - struct { - __u32 flags; - __u32 _pad; - } pstate; -}; - -union drm_amdgpu_ctx { - struct drm_amdgpu_ctx_in in; - union drm_amdgpu_ctx_out out; -}; - -/* vm ioctl */ -#define AMDGPU_VM_OP_RESERVE_VMID 1 -#define AMDGPU_VM_OP_UNRESERVE_VMID 2 - -struct drm_amdgpu_vm_in { - /** AMDGPU_VM_OP_* */ - __u32 op; - __u32 flags; -}; - -struct drm_amdgpu_vm_out { - /** For future use, no flags defined so far */ - __u64 flags; -}; - -union drm_amdgpu_vm { - struct drm_amdgpu_vm_in in; - struct drm_amdgpu_vm_out out; -}; - -/* sched ioctl */ -#define AMDGPU_SCHED_OP_PROCESS_PRIORITY_OVERRIDE 1 -#define AMDGPU_SCHED_OP_CONTEXT_PRIORITY_OVERRIDE 2 - -struct drm_amdgpu_sched_in { - /* AMDGPU_SCHED_OP_* */ - __u32 op; - __u32 fd; - /** AMDGPU_CTX_PRIORITY_* */ - __s32 priority; - __u32 ctx_id; -}; - -union drm_amdgpu_sched { - struct drm_amdgpu_sched_in in; -}; - -/* - * This is not a reliable API and you should expect it to fail for any - * number of reasons and have fallback path that do not use userptr to - * perform any operation. - */ -#define AMDGPU_GEM_USERPTR_READONLY (1 << 0) -#define AMDGPU_GEM_USERPTR_ANONONLY (1 << 1) -#define AMDGPU_GEM_USERPTR_VALIDATE (1 << 2) -#define AMDGPU_GEM_USERPTR_REGISTER (1 << 3) - -struct drm_amdgpu_gem_userptr { - __u64 addr; - __u64 size; - /* AMDGPU_GEM_USERPTR_* */ - __u32 flags; - /* Resulting GEM handle */ - __u32 handle; -}; - -/* SI-CI-VI: */ -/* same meaning as the GB_TILE_MODE and GL_MACRO_TILE_MODE fields */ -#define AMDGPU_TILING_ARRAY_MODE_SHIFT 0 -#define AMDGPU_TILING_ARRAY_MODE_MASK 0xf -#define AMDGPU_TILING_PIPE_CONFIG_SHIFT 4 -#define AMDGPU_TILING_PIPE_CONFIG_MASK 0x1f -#define AMDGPU_TILING_TILE_SPLIT_SHIFT 9 -#define AMDGPU_TILING_TILE_SPLIT_MASK 0x7 -#define AMDGPU_TILING_MICRO_TILE_MODE_SHIFT 12 -#define AMDGPU_TILING_MICRO_TILE_MODE_MASK 0x7 -#define AMDGPU_TILING_BANK_WIDTH_SHIFT 15 -#define AMDGPU_TILING_BANK_WIDTH_MASK 0x3 -#define AMDGPU_TILING_BANK_HEIGHT_SHIFT 17 -#define AMDGPU_TILING_BANK_HEIGHT_MASK 0x3 -#define AMDGPU_TILING_MACRO_TILE_ASPECT_SHIFT 19 -#define AMDGPU_TILING_MACRO_TILE_ASPECT_MASK 0x3 -#define AMDGPU_TILING_NUM_BANKS_SHIFT 21 -#define AMDGPU_TILING_NUM_BANKS_MASK 0x3 - -/* GFX9 and later: */ -#define AMDGPU_TILING_SWIZZLE_MODE_SHIFT 0 -#define AMDGPU_TILING_SWIZZLE_MODE_MASK 0x1f -#define AMDGPU_TILING_DCC_OFFSET_256B_SHIFT 5 -#define AMDGPU_TILING_DCC_OFFSET_256B_MASK 0xFFFFFF -#define AMDGPU_TILING_DCC_PITCH_MAX_SHIFT 29 -#define AMDGPU_TILING_DCC_PITCH_MAX_MASK 0x3FFF -#define AMDGPU_TILING_DCC_INDEPENDENT_64B_SHIFT 43 -#define AMDGPU_TILING_DCC_INDEPENDENT_64B_MASK 0x1 -#define AMDGPU_TILING_DCC_INDEPENDENT_128B_SHIFT 44 -#define AMDGPU_TILING_DCC_INDEPENDENT_128B_MASK 0x1 -#define AMDGPU_TILING_SCANOUT_SHIFT 63 -#define AMDGPU_TILING_SCANOUT_MASK 0x1 - -/* Set/Get helpers for tiling flags. */ -#define AMDGPU_TILING_SET(field, value) \ - (((__u64)(value) & AMDGPU_TILING_##field##_MASK) << AMDGPU_TILING_##field##_SHIFT) -#define AMDGPU_TILING_GET(value, field) \ - (((__u64)(value) >> AMDGPU_TILING_##field##_SHIFT) & AMDGPU_TILING_##field##_MASK) - -#define AMDGPU_GEM_METADATA_OP_SET_METADATA 1 -#define AMDGPU_GEM_METADATA_OP_GET_METADATA 2 - -/** The same structure is shared for input/output */ -struct drm_amdgpu_gem_metadata { - /** GEM Object handle */ - __u32 handle; - /** Do we want get or set metadata */ - __u32 op; - struct { - /** For future use, no flags defined so far */ - __u64 flags; - /** family specific tiling info */ - __u64 tiling_info; - __u32 data_size_bytes; - __u32 data[64]; - } data; -}; - -struct drm_amdgpu_gem_mmap_in { - /** the GEM object handle */ - __u32 handle; - __u32 _pad; -}; - -struct drm_amdgpu_gem_mmap_out { - /** mmap offset from the vma offset manager */ - __u64 addr_ptr; -}; - -union drm_amdgpu_gem_mmap { - struct drm_amdgpu_gem_mmap_in in; - struct drm_amdgpu_gem_mmap_out out; -}; - -struct drm_amdgpu_gem_wait_idle_in { - /** GEM object handle */ - __u32 handle; - /** For future use, no flags defined so far */ - __u32 flags; - /** Absolute timeout to wait */ - __u64 timeout; -}; - -struct drm_amdgpu_gem_wait_idle_out { - /** BO status: 0 - BO is idle, 1 - BO is busy */ - __u32 status; - /** Returned current memory domain */ - __u32 domain; -}; - -union drm_amdgpu_gem_wait_idle { - struct drm_amdgpu_gem_wait_idle_in in; - struct drm_amdgpu_gem_wait_idle_out out; -}; - -struct drm_amdgpu_wait_cs_in { - /* Command submission handle - * handle equals 0 means none to wait for - * handle equals ~0ull means wait for the latest sequence number - */ - __u64 handle; - /** Absolute timeout to wait */ - __u64 timeout; - __u32 ip_type; - __u32 ip_instance; - __u32 ring; - __u32 ctx_id; -}; - -struct drm_amdgpu_wait_cs_out { - /** CS status: 0 - CS completed, 1 - CS still busy */ - __u64 status; -}; - -union drm_amdgpu_wait_cs { - struct drm_amdgpu_wait_cs_in in; - struct drm_amdgpu_wait_cs_out out; -}; - -struct drm_amdgpu_fence { - __u32 ctx_id; - __u32 ip_type; - __u32 ip_instance; - __u32 ring; - __u64 seq_no; -}; - -struct drm_amdgpu_wait_fences_in { - /** This points to uint64_t * which points to fences */ - __u64 fences; - __u32 fence_count; - __u32 wait_all; - __u64 timeout_ns; -}; - -struct drm_amdgpu_wait_fences_out { - __u32 status; - __u32 first_signaled; -}; - -union drm_amdgpu_wait_fences { - struct drm_amdgpu_wait_fences_in in; - struct drm_amdgpu_wait_fences_out out; -}; - -#define AMDGPU_GEM_OP_GET_GEM_CREATE_INFO 0 -#define AMDGPU_GEM_OP_SET_PLACEMENT 1 - -/* Sets or returns a value associated with a buffer. */ -struct drm_amdgpu_gem_op { - /** GEM object handle */ - __u32 handle; - /** AMDGPU_GEM_OP_* */ - __u32 op; - /** Input or return value */ - __u64 value; -}; - -#define AMDGPU_VA_OP_MAP 1 -#define AMDGPU_VA_OP_UNMAP 2 -#define AMDGPU_VA_OP_CLEAR 3 -#define AMDGPU_VA_OP_REPLACE 4 - -/* Delay the page table update till the next CS */ -#define AMDGPU_VM_DELAY_UPDATE (1 << 0) - -/* Mapping flags */ -/* readable mapping */ -#define AMDGPU_VM_PAGE_READABLE (1 << 1) -/* writable mapping */ -#define AMDGPU_VM_PAGE_WRITEABLE (1 << 2) -/* executable mapping, new for VI */ -#define AMDGPU_VM_PAGE_EXECUTABLE (1 << 3) -/* partially resident texture */ -#define AMDGPU_VM_PAGE_PRT (1 << 4) -/* MTYPE flags use bit 5 to 8 */ -#define AMDGPU_VM_MTYPE_MASK (0xf << 5) -/* Default MTYPE. Pre-AI must use this. Recommended for newer ASICs. */ -#define AMDGPU_VM_MTYPE_DEFAULT (0 << 5) -/* Use Non Coherent MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_NC (1 << 5) -/* Use Write Combine MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_WC (2 << 5) -/* Use Cache Coherent MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_CC (3 << 5) -/* Use UnCached MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_UC (4 << 5) -/* Use Read Write MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_RW (5 << 5) - -struct drm_amdgpu_gem_va { - /** GEM object handle */ - __u32 handle; - __u32 _pad; - /** AMDGPU_VA_OP_* */ - __u32 operation; - /** AMDGPU_VM_PAGE_* */ - __u32 flags; - /** va address to assign . Must be correctly aligned.*/ - __u64 va_address; - /** Specify offset inside of BO to assign. Must be correctly aligned.*/ - __u64 offset_in_bo; - /** Specify mapping size. Must be correctly aligned. */ - __u64 map_size; -}; - -#define AMDGPU_HW_IP_GFX 0 -#define AMDGPU_HW_IP_COMPUTE 1 -#define AMDGPU_HW_IP_DMA 2 -#define AMDGPU_HW_IP_UVD 3 -#define AMDGPU_HW_IP_VCE 4 -#define AMDGPU_HW_IP_UVD_ENC 5 -#define AMDGPU_HW_IP_VCN_DEC 6 -#define AMDGPU_HW_IP_VCN_ENC 7 -#define AMDGPU_HW_IP_VCN_JPEG 8 -#define AMDGPU_HW_IP_NUM 9 - -#define AMDGPU_HW_IP_INSTANCE_MAX_COUNT 1 - -#define AMDGPU_CHUNK_ID_IB 0x01 -#define AMDGPU_CHUNK_ID_FENCE 0x02 -#define AMDGPU_CHUNK_ID_DEPENDENCIES 0x03 -#define AMDGPU_CHUNK_ID_SYNCOBJ_IN 0x04 -#define AMDGPU_CHUNK_ID_SYNCOBJ_OUT 0x05 -#define AMDGPU_CHUNK_ID_BO_HANDLES 0x06 -#define AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES 0x07 -#define AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_WAIT 0x08 -#define AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_SIGNAL 0x09 - -struct drm_amdgpu_cs_chunk { - __u32 chunk_id; - __u32 length_dw; - __u64 chunk_data; -}; - -struct drm_amdgpu_cs_in { - /** Rendering context id */ - __u32 ctx_id; - /** Handle of resource list associated with CS */ - __u32 bo_list_handle; - __u32 num_chunks; - __u32 flags; - /** this points to __u64 * which point to cs chunks */ - __u64 chunks; -}; - -struct drm_amdgpu_cs_out { - __u64 handle; -}; - -union drm_amdgpu_cs { - struct drm_amdgpu_cs_in in; - struct drm_amdgpu_cs_out out; -}; - -/* Specify flags to be used for IB */ - -/* This IB should be submitted to CE */ -#define AMDGPU_IB_FLAG_CE (1<<0) - -/* Preamble flag, which means the IB could be dropped if no context switch */ -#define AMDGPU_IB_FLAG_PREAMBLE (1<<1) - -/* Preempt flag, IB should set Pre_enb bit if PREEMPT flag detected */ -#define AMDGPU_IB_FLAG_PREEMPT (1<<2) - -/* The IB fence should do the L2 writeback but not invalidate any shader - * caches (L2/vL1/sL1/I$). */ -#define AMDGPU_IB_FLAG_TC_WB_NOT_INVALIDATE (1 << 3) - -/* Set GDS_COMPUTE_MAX_WAVE_ID = DEFAULT before PACKET3_INDIRECT_BUFFER. - * This will reset wave ID counters for the IB. - */ -#define AMDGPU_IB_FLAG_RESET_GDS_MAX_WAVE_ID (1 << 4) - -/* Flag the IB as secure (TMZ) - */ -#define AMDGPU_IB_FLAGS_SECURE (1 << 5) - -/* Tell KMD to flush and invalidate caches - */ -#define AMDGPU_IB_FLAG_EMIT_MEM_SYNC (1 << 6) - -struct drm_amdgpu_cs_chunk_ib { - __u32 _pad; - /** AMDGPU_IB_FLAG_* */ - __u32 flags; - /** Virtual address to begin IB execution */ - __u64 va_start; - /** Size of submission */ - __u32 ib_bytes; - /** HW IP to submit to */ - __u32 ip_type; - /** HW IP index of the same type to submit to */ - __u32 ip_instance; - /** Ring index to submit to */ - __u32 ring; -}; - -struct drm_amdgpu_cs_chunk_dep { - __u32 ip_type; - __u32 ip_instance; - __u32 ring; - __u32 ctx_id; - __u64 handle; -}; - -struct drm_amdgpu_cs_chunk_fence { - __u32 handle; - __u32 offset; -}; - -struct drm_amdgpu_cs_chunk_sem { - __u32 handle; -}; - -struct drm_amdgpu_cs_chunk_syncobj { - __u32 handle; - __u32 flags; - __u64 point; -}; - -#define AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ 0 -#define AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ_FD 1 -#define AMDGPU_FENCE_TO_HANDLE_GET_SYNC_FILE_FD 2 - -union drm_amdgpu_fence_to_handle { - struct { - struct drm_amdgpu_fence fence; - __u32 what; - __u32 pad; - } in; - struct { - __u32 handle; - } out; -}; - -struct drm_amdgpu_cs_chunk_data { - union { - struct drm_amdgpu_cs_chunk_ib ib_data; - struct drm_amdgpu_cs_chunk_fence fence_data; - }; -}; - -/* - * Query h/w info: Flag that this is integrated (a.h.a. fusion) GPU - * - */ -#define AMDGPU_IDS_FLAGS_FUSION 0x1 -#define AMDGPU_IDS_FLAGS_PREEMPTION 0x2 -#define AMDGPU_IDS_FLAGS_TMZ 0x4 - -/* indicate if acceleration can be working */ -#define AMDGPU_INFO_ACCEL_WORKING 0x00 -/* get the crtc_id from the mode object id? */ -#define AMDGPU_INFO_CRTC_FROM_ID 0x01 -/* query hw IP info */ -#define AMDGPU_INFO_HW_IP_INFO 0x02 -/* query hw IP instance count for the specified type */ -#define AMDGPU_INFO_HW_IP_COUNT 0x03 -/* timestamp for GL_ARB_timer_query */ -#define AMDGPU_INFO_TIMESTAMP 0x05 -/* Query the firmware version */ -#define AMDGPU_INFO_FW_VERSION 0x0e - /* Subquery id: Query VCE firmware version */ - #define AMDGPU_INFO_FW_VCE 0x1 - /* Subquery id: Query UVD firmware version */ - #define AMDGPU_INFO_FW_UVD 0x2 - /* Subquery id: Query GMC firmware version */ - #define AMDGPU_INFO_FW_GMC 0x03 - /* Subquery id: Query GFX ME firmware version */ - #define AMDGPU_INFO_FW_GFX_ME 0x04 - /* Subquery id: Query GFX PFP firmware version */ - #define AMDGPU_INFO_FW_GFX_PFP 0x05 - /* Subquery id: Query GFX CE firmware version */ - #define AMDGPU_INFO_FW_GFX_CE 0x06 - /* Subquery id: Query GFX RLC firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC 0x07 - /* Subquery id: Query GFX MEC firmware version */ - #define AMDGPU_INFO_FW_GFX_MEC 0x08 - /* Subquery id: Query SMC firmware version */ - #define AMDGPU_INFO_FW_SMC 0x0a - /* Subquery id: Query SDMA firmware version */ - #define AMDGPU_INFO_FW_SDMA 0x0b - /* Subquery id: Query PSP SOS firmware version */ - #define AMDGPU_INFO_FW_SOS 0x0c - /* Subquery id: Query PSP ASD firmware version */ - #define AMDGPU_INFO_FW_ASD 0x0d - /* Subquery id: Query VCN firmware version */ - #define AMDGPU_INFO_FW_VCN 0x0e - /* Subquery id: Query GFX RLC SRLC firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_CNTL 0x0f - /* Subquery id: Query GFX RLC SRLG firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_GPM_MEM 0x10 - /* Subquery id: Query GFX RLC SRLS firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_SRM_MEM 0x11 - /* Subquery id: Query DMCU firmware version */ - #define AMDGPU_INFO_FW_DMCU 0x12 - #define AMDGPU_INFO_FW_TA 0x13 - /* Subquery id: Query DMCUB firmware version */ - #define AMDGPU_INFO_FW_DMCUB 0x14 - /* Subquery id: Query TOC firmware version */ - #define AMDGPU_INFO_FW_TOC 0x15 - -/* number of bytes moved for TTM migration */ -#define AMDGPU_INFO_NUM_BYTES_MOVED 0x0f -/* the used VRAM size */ -#define AMDGPU_INFO_VRAM_USAGE 0x10 -/* the used GTT size */ -#define AMDGPU_INFO_GTT_USAGE 0x11 -/* Information about GDS, etc. resource configuration */ -#define AMDGPU_INFO_GDS_CONFIG 0x13 -/* Query information about VRAM and GTT domains */ -#define AMDGPU_INFO_VRAM_GTT 0x14 -/* Query information about register in MMR address space*/ -#define AMDGPU_INFO_READ_MMR_REG 0x15 -/* Query information about device: rev id, family, etc. */ -#define AMDGPU_INFO_DEV_INFO 0x16 -/* visible vram usage */ -#define AMDGPU_INFO_VIS_VRAM_USAGE 0x17 -/* number of TTM buffer evictions */ -#define AMDGPU_INFO_NUM_EVICTIONS 0x18 -/* Query memory about VRAM and GTT domains */ -#define AMDGPU_INFO_MEMORY 0x19 -/* Query vce clock table */ -#define AMDGPU_INFO_VCE_CLOCK_TABLE 0x1A -/* Query vbios related information */ -#define AMDGPU_INFO_VBIOS 0x1B - /* Subquery id: Query vbios size */ - #define AMDGPU_INFO_VBIOS_SIZE 0x1 - /* Subquery id: Query vbios image */ - #define AMDGPU_INFO_VBIOS_IMAGE 0x2 - /* Subquery id: Query vbios info */ - #define AMDGPU_INFO_VBIOS_INFO 0x3 -/* Query UVD handles */ -#define AMDGPU_INFO_NUM_HANDLES 0x1C -/* Query sensor related information */ -#define AMDGPU_INFO_SENSOR 0x1D - /* Subquery id: Query GPU shader clock */ - #define AMDGPU_INFO_SENSOR_GFX_SCLK 0x1 - /* Subquery id: Query GPU memory clock */ - #define AMDGPU_INFO_SENSOR_GFX_MCLK 0x2 - /* Subquery id: Query GPU temperature */ - #define AMDGPU_INFO_SENSOR_GPU_TEMP 0x3 - /* Subquery id: Query GPU load */ - #define AMDGPU_INFO_SENSOR_GPU_LOAD 0x4 - /* Subquery id: Query average GPU power */ - #define AMDGPU_INFO_SENSOR_GPU_AVG_POWER 0x5 - /* Subquery id: Query northbridge voltage */ - #define AMDGPU_INFO_SENSOR_VDDNB 0x6 - /* Subquery id: Query graphics voltage */ - #define AMDGPU_INFO_SENSOR_VDDGFX 0x7 - /* Subquery id: Query GPU stable pstate shader clock */ - #define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_SCLK 0x8 - /* Subquery id: Query GPU stable pstate memory clock */ - #define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_MCLK 0x9 -/* Number of VRAM page faults on CPU access. */ -#define AMDGPU_INFO_NUM_VRAM_CPU_PAGE_FAULTS 0x1E -#define AMDGPU_INFO_VRAM_LOST_COUNTER 0x1F -/* query ras mask of enabled features*/ -#define AMDGPU_INFO_RAS_ENABLED_FEATURES 0x20 -/* RAS MASK: UMC (VRAM) */ -#define AMDGPU_INFO_RAS_ENABLED_UMC (1 << 0) -/* RAS MASK: SDMA */ -#define AMDGPU_INFO_RAS_ENABLED_SDMA (1 << 1) -/* RAS MASK: GFX */ -#define AMDGPU_INFO_RAS_ENABLED_GFX (1 << 2) -/* RAS MASK: MMHUB */ -#define AMDGPU_INFO_RAS_ENABLED_MMHUB (1 << 3) -/* RAS MASK: ATHUB */ -#define AMDGPU_INFO_RAS_ENABLED_ATHUB (1 << 4) -/* RAS MASK: PCIE */ -#define AMDGPU_INFO_RAS_ENABLED_PCIE (1 << 5) -/* RAS MASK: HDP */ -#define AMDGPU_INFO_RAS_ENABLED_HDP (1 << 6) -/* RAS MASK: XGMI */ -#define AMDGPU_INFO_RAS_ENABLED_XGMI (1 << 7) -/* RAS MASK: DF */ -#define AMDGPU_INFO_RAS_ENABLED_DF (1 << 8) -/* RAS MASK: SMN */ -#define AMDGPU_INFO_RAS_ENABLED_SMN (1 << 9) -/* RAS MASK: SEM */ -#define AMDGPU_INFO_RAS_ENABLED_SEM (1 << 10) -/* RAS MASK: MP0 */ -#define AMDGPU_INFO_RAS_ENABLED_MP0 (1 << 11) -/* RAS MASK: MP1 */ -#define AMDGPU_INFO_RAS_ENABLED_MP1 (1 << 12) -/* RAS MASK: FUSE */ -#define AMDGPU_INFO_RAS_ENABLED_FUSE (1 << 13) -/* query video encode/decode caps */ -#define AMDGPU_INFO_VIDEO_CAPS 0x21 - /* Subquery id: Decode */ - #define AMDGPU_INFO_VIDEO_CAPS_DECODE 0 - /* Subquery id: Encode */ - #define AMDGPU_INFO_VIDEO_CAPS_ENCODE 1 - -#define AMDGPU_INFO_MMR_SE_INDEX_SHIFT 0 -#define AMDGPU_INFO_MMR_SE_INDEX_MASK 0xff -#define AMDGPU_INFO_MMR_SH_INDEX_SHIFT 8 -#define AMDGPU_INFO_MMR_SH_INDEX_MASK 0xff - -struct drm_amdgpu_query_fw { - /** AMDGPU_INFO_FW_* */ - __u32 fw_type; - /** - * Index of the IP if there are more IPs of - * the same type. - */ - __u32 ip_instance; - /** - * Index of the engine. Whether this is used depends - * on the firmware type. (e.g. MEC, SDMA) - */ - __u32 index; - __u32 _pad; -}; - -/* Input structure for the INFO ioctl */ -struct drm_amdgpu_info { - /* Where the return value will be stored */ - __u64 return_pointer; - /* The size of the return value. Just like "size" in "snprintf", - * it limits how many bytes the kernel can write. */ - __u32 return_size; - /* The query request id. */ - __u32 query; - - union { - struct { - __u32 id; - __u32 _pad; - } mode_crtc; - - struct { - /** AMDGPU_HW_IP_* */ - __u32 type; - /** - * Index of the IP if there are more IPs of the same - * type. Ignored by AMDGPU_INFO_HW_IP_COUNT. - */ - __u32 ip_instance; - } query_hw_ip; - - struct { - __u32 dword_offset; - /** number of registers to read */ - __u32 count; - __u32 instance; - /** For future use, no flags defined so far */ - __u32 flags; - } read_mmr_reg; - - struct drm_amdgpu_query_fw query_fw; - - struct { - __u32 type; - __u32 offset; - } vbios_info; - - struct { - __u32 type; - } sensor_info; - - struct { - __u32 type; - } video_cap; - }; -}; - -struct drm_amdgpu_info_gds { - /** GDS GFX partition size */ - __u32 gds_gfx_partition_size; - /** GDS compute partition size */ - __u32 compute_partition_size; - /** total GDS memory size */ - __u32 gds_total_size; - /** GWS size per GFX partition */ - __u32 gws_per_gfx_partition; - /** GSW size per compute partition */ - __u32 gws_per_compute_partition; - /** OA size per GFX partition */ - __u32 oa_per_gfx_partition; - /** OA size per compute partition */ - __u32 oa_per_compute_partition; - __u32 _pad; -}; - -struct drm_amdgpu_info_vram_gtt { - __u64 vram_size; - __u64 vram_cpu_accessible_size; - __u64 gtt_size; -}; - -struct drm_amdgpu_heap_info { - /** max. physical memory */ - __u64 total_heap_size; - - /** Theoretical max. available memory in the given heap */ - __u64 usable_heap_size; - - /** - * Number of bytes allocated in the heap. This includes all processes - * and private allocations in the kernel. It changes when new buffers - * are allocated, freed, and moved. It cannot be larger than - * heap_size. - */ - __u64 heap_usage; - - /** - * Theoretical possible max. size of buffer which - * could be allocated in the given heap - */ - __u64 max_allocation; -}; - -struct drm_amdgpu_memory_info { - struct drm_amdgpu_heap_info vram; - struct drm_amdgpu_heap_info cpu_accessible_vram; - struct drm_amdgpu_heap_info gtt; -}; - -struct drm_amdgpu_info_firmware { - __u32 ver; - __u32 feature; -}; - -struct drm_amdgpu_info_vbios { - __u8 name[64]; - __u8 vbios_pn[64]; - __u32 version; - __u32 pad; - __u8 vbios_ver_str[32]; - __u8 date[32]; -}; - -#define AMDGPU_VRAM_TYPE_UNKNOWN 0 -#define AMDGPU_VRAM_TYPE_GDDR1 1 -#define AMDGPU_VRAM_TYPE_DDR2 2 -#define AMDGPU_VRAM_TYPE_GDDR3 3 -#define AMDGPU_VRAM_TYPE_GDDR4 4 -#define AMDGPU_VRAM_TYPE_GDDR5 5 -#define AMDGPU_VRAM_TYPE_HBM 6 -#define AMDGPU_VRAM_TYPE_DDR3 7 -#define AMDGPU_VRAM_TYPE_DDR4 8 -#define AMDGPU_VRAM_TYPE_GDDR6 9 -#define AMDGPU_VRAM_TYPE_DDR5 10 - -struct drm_amdgpu_info_device { - /** PCI Device ID */ - __u32 device_id; - /** Internal chip revision: A0, A1, etc.) */ - __u32 chip_rev; - __u32 external_rev; - /** Revision id in PCI Config space */ - __u32 pci_rev; - __u32 family; - __u32 num_shader_engines; - __u32 num_shader_arrays_per_engine; - /* in KHz */ - __u32 gpu_counter_freq; - __u64 max_engine_clock; - __u64 max_memory_clock; - /* cu information */ - __u32 cu_active_number; - /* NOTE: cu_ao_mask is INVALID, DON'T use it */ - __u32 cu_ao_mask; - __u32 cu_bitmap[4][4]; - /** Render backend pipe mask. One render backend is CB+DB. */ - __u32 enabled_rb_pipes_mask; - __u32 num_rb_pipes; - __u32 num_hw_gfx_contexts; - __u32 _pad; - __u64 ids_flags; - /** Starting virtual address for UMDs. */ - __u64 virtual_address_offset; - /** The maximum virtual address */ - __u64 virtual_address_max; - /** Required alignment of virtual addresses. */ - __u32 virtual_address_alignment; - /** Page table entry - fragment size */ - __u32 pte_fragment_size; - __u32 gart_page_size; - /** constant engine ram size*/ - __u32 ce_ram_size; - /** video memory type info*/ - __u32 vram_type; - /** video memory bit width*/ - __u32 vram_bit_width; - /* vce harvesting instance */ - __u32 vce_harvest_config; - /* gfx double offchip LDS buffers */ - __u32 gc_double_offchip_lds_buf; - /* NGG Primitive Buffer */ - __u64 prim_buf_gpu_addr; - /* NGG Position Buffer */ - __u64 pos_buf_gpu_addr; - /* NGG Control Sideband */ - __u64 cntl_sb_buf_gpu_addr; - /* NGG Parameter Cache */ - __u64 param_buf_gpu_addr; - __u32 prim_buf_size; - __u32 pos_buf_size; - __u32 cntl_sb_buf_size; - __u32 param_buf_size; - /* wavefront size*/ - __u32 wave_front_size; - /* shader visible vgprs*/ - __u32 num_shader_visible_vgprs; - /* CU per shader array*/ - __u32 num_cu_per_sh; - /* number of tcc blocks*/ - __u32 num_tcc_blocks; - /* gs vgt table depth*/ - __u32 gs_vgt_table_depth; - /* gs primitive buffer depth*/ - __u32 gs_prim_buffer_depth; - /* max gs wavefront per vgt*/ - __u32 max_gs_waves_per_vgt; - __u32 _pad1; - /* always on cu bitmap */ - __u32 cu_ao_bitmap[4][4]; - /** Starting high virtual address for UMDs. */ - __u64 high_va_offset; - /** The maximum high virtual address */ - __u64 high_va_max; - /* gfx10 pa_sc_tile_steering_override */ - __u32 pa_sc_tile_steering_override; - /* disabled TCCs */ - __u64 tcc_disabled_mask; -}; - -struct drm_amdgpu_info_hw_ip { - /** Version of h/w IP */ - __u32 hw_ip_version_major; - __u32 hw_ip_version_minor; - /** Capabilities */ - __u64 capabilities_flags; - /** command buffer address start alignment*/ - __u32 ib_start_alignment; - /** command buffer size alignment*/ - __u32 ib_size_alignment; - /** Bitmask of available rings. Bit 0 means ring 0, etc. */ - __u32 available_rings; - __u32 _pad; -}; - -struct drm_amdgpu_info_num_handles { - /** Max handles as supported by firmware for UVD */ - __u32 uvd_max_handles; - /** Handles currently in use for UVD */ - __u32 uvd_used_handles; -}; - -#define AMDGPU_VCE_CLOCK_TABLE_ENTRIES 6 - -struct drm_amdgpu_info_vce_clock_table_entry { - /** System clock */ - __u32 sclk; - /** Memory clock */ - __u32 mclk; - /** VCE clock */ - __u32 eclk; - __u32 pad; -}; - -struct drm_amdgpu_info_vce_clock_table { - struct drm_amdgpu_info_vce_clock_table_entry entries[AMDGPU_VCE_CLOCK_TABLE_ENTRIES]; - __u32 num_valid_entries; - __u32 pad; -}; - -/* query video encode/decode caps */ -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 0 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 1 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 2 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC 3 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC 4 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG 5 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 6 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1 7 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_COUNT 8 - -struct drm_amdgpu_info_video_codec_info { - __u32 valid; - __u32 max_width; - __u32 max_height; - __u32 max_pixels_per_frame; - __u32 max_level; - __u32 pad; -}; - -struct drm_amdgpu_info_video_caps { - struct drm_amdgpu_info_video_codec_info codec_info[AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_COUNT]; -}; - -/* - * Supported GPU families - */ -#define AMDGPU_FAMILY_UNKNOWN 0 -#define AMDGPU_FAMILY_SI 110 /* Hainan, Oland, Verde, Pitcairn, Tahiti */ -#define AMDGPU_FAMILY_CI 120 /* Bonaire, Hawaii */ -#define AMDGPU_FAMILY_KV 125 /* Kaveri, Kabini, Mullins */ -#define AMDGPU_FAMILY_VI 130 /* Iceland, Tonga */ -#define AMDGPU_FAMILY_CZ 135 /* Carrizo, Stoney */ -#define AMDGPU_FAMILY_AI 141 /* Vega10 */ -#define AMDGPU_FAMILY_RV 142 /* Raven */ -#define AMDGPU_FAMILY_NV 143 /* Navi10 */ -#define AMDGPU_FAMILY_VGH 144 /* Van Gogh */ -#define AMDGPU_FAMILY_YC 146 /* Yellow Carp */ - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86/include/libdrm/android/gralloc_handle.h b/prebuilts/x86/include/libdrm/android/gralloc_handle.h deleted file mode 100644 index d3d975e..0000000 --- a/prebuilts/x86/include/libdrm/android/gralloc_handle.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2010-2011 Chia-I Wu - * Copyright (C) 2010-2011 LunarG Inc. - * Copyright (C) 2016 Linaro, Ltd., Rob Herring - * Copyright (C) 2018 Collabora, Robert Foss - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#ifndef __ANDROID_GRALLOC_HANDLE_H__ -#define __ANDROID_GRALLOC_HANDLE_H__ - -#include -#include - -/* support users of drm_gralloc/gbm_gralloc */ -#define gralloc_gbm_handle_t gralloc_handle_t -#define gralloc_drm_handle_t gralloc_handle_t - -struct gralloc_handle_t { - native_handle_t base; - - /* dma-buf file descriptor - * Must be located first since, native_handle_t is allocated - * using native_handle_create(), which allocates space for - * sizeof(native_handle_t) + sizeof(int) * (numFds + numInts) - * numFds = GRALLOC_HANDLE_NUM_FDS - * numInts = GRALLOC_HANDLE_NUM_INTS - * Where numFds represents the number of FDs and - * numInts represents the space needed for the - * remainder of this struct. - * And the FDs are expected to be found first following - * native_handle_t. - */ - int prime_fd; - - /* api variables */ - uint32_t magic; /* differentiate between allocator impls */ - uint32_t version; /* api version */ - - uint32_t width; /* width of buffer in pixels */ - uint32_t height; /* height of buffer in pixels */ - uint32_t format; /* pixel format (Android) */ - uint32_t usage; /* android libhardware usage flags */ - - uint32_t stride; /* the stride in bytes */ - int data_owner; /* owner of data (for validation) */ - uint64_t modifier __attribute__((aligned(8))); /* buffer modifiers */ - - union { - void *data; /* pointer to struct gralloc_gbm_bo_t */ - uint64_t reserved; - } __attribute__((aligned(8))); -}; - -#define GRALLOC_HANDLE_VERSION 4 -#define GRALLOC_HANDLE_MAGIC 0x60585350 -#define GRALLOC_HANDLE_NUM_FDS 1 -#define GRALLOC_HANDLE_NUM_INTS ( \ - ((sizeof(struct gralloc_handle_t) - sizeof(native_handle_t))/sizeof(int)) \ - - GRALLOC_HANDLE_NUM_FDS) - -static inline struct gralloc_handle_t *gralloc_handle(buffer_handle_t handle) -{ - return (struct gralloc_handle_t *)handle; -} - -/** - * Create a buffer handle. - */ -static inline native_handle_t *gralloc_handle_create(int32_t width, - int32_t height, - int32_t hal_format, - int32_t usage) -{ - struct gralloc_handle_t *handle; - native_handle_t *nhandle = native_handle_create(GRALLOC_HANDLE_NUM_FDS, - GRALLOC_HANDLE_NUM_INTS); - - if (!nhandle) - return NULL; - - handle = gralloc_handle(nhandle); - handle->magic = GRALLOC_HANDLE_MAGIC; - handle->version = GRALLOC_HANDLE_VERSION; - handle->width = width; - handle->height = height; - handle->format = hal_format; - handle->usage = usage; - handle->prime_fd = -1; - - return nhandle; -} - -#endif diff --git a/prebuilts/x86/include/libdrm/drm.h b/prebuilts/x86/include/libdrm/drm.h deleted file mode 100644 index 398c396..0000000 --- a/prebuilts/x86/include/libdrm/drm.h +++ /dev/null @@ -1,1183 +0,0 @@ -/* - * Header for the Direct Rendering Manager - * - * Author: Rickard E. (Rik) Faith - * - * Acknowledgments: - * Dec 1999, Richard Henderson , move to generic cmpxchg. - */ - -/* - * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef _DRM_H_ -#define _DRM_H_ - -#if defined(__linux__) - -#include -#include -typedef unsigned int drm_handle_t; - -#else /* One of the BSDs */ - -#include -#include -#include -typedef int8_t __s8; -typedef uint8_t __u8; -typedef int16_t __s16; -typedef uint16_t __u16; -typedef int32_t __s32; -typedef uint32_t __u32; -typedef int64_t __s64; -typedef uint64_t __u64; -typedef size_t __kernel_size_t; -typedef unsigned long drm_handle_t; - -#endif - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_NAME "drm" /**< Name in kernel, /dev, and /proc */ -#define DRM_MIN_ORDER 5 /**< At least 2^5 bytes = 32 bytes */ -#define DRM_MAX_ORDER 22 /**< Up to 2^22 bytes = 4MB */ -#define DRM_RAM_PERCENT 10 /**< How much system ram can we lock? */ - -#define _DRM_LOCK_HELD 0x80000000U /**< Hardware lock is held */ -#define _DRM_LOCK_CONT 0x40000000U /**< Hardware lock is contended */ -#define _DRM_LOCK_IS_HELD(lock) ((lock) & _DRM_LOCK_HELD) -#define _DRM_LOCK_IS_CONT(lock) ((lock) & _DRM_LOCK_CONT) -#define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT)) - -typedef unsigned int drm_context_t; -typedef unsigned int drm_drawable_t; -typedef unsigned int drm_magic_t; - -/* - * Cliprect. - * - * \warning: If you change this structure, make sure you change - * XF86DRIClipRectRec in the server as well - * - * \note KW: Actually it's illegal to change either for - * backwards-compatibility reasons. - */ -struct drm_clip_rect { - unsigned short x1; - unsigned short y1; - unsigned short x2; - unsigned short y2; -}; - -/* - * Drawable information. - */ -struct drm_drawable_info { - unsigned int num_rects; - struct drm_clip_rect *rects; -}; - -/* - * Texture region, - */ -struct drm_tex_region { - unsigned char next; - unsigned char prev; - unsigned char in_use; - unsigned char padding; - unsigned int age; -}; - -/* - * Hardware lock. - * - * The lock structure is a simple cache-line aligned integer. To avoid - * processor bus contention on a multiprocessor system, there should not be any - * other data stored in the same cache line. - */ -struct drm_hw_lock { - __volatile__ unsigned int lock; /**< lock variable */ - char padding[60]; /**< Pad to cache line */ -}; - -/* - * DRM_IOCTL_VERSION ioctl argument type. - * - * \sa drmGetVersion(). - */ -struct drm_version { - int version_major; /**< Major version */ - int version_minor; /**< Minor version */ - int version_patchlevel; /**< Patch level */ - __kernel_size_t name_len; /**< Length of name buffer */ - char *name; /**< Name of driver */ - __kernel_size_t date_len; /**< Length of date buffer */ - char *date; /**< User-space buffer to hold date */ - __kernel_size_t desc_len; /**< Length of desc buffer */ - char *desc; /**< User-space buffer to hold desc */ -}; - -/* - * DRM_IOCTL_GET_UNIQUE ioctl argument type. - * - * \sa drmGetBusid() and drmSetBusId(). - */ -struct drm_unique { - __kernel_size_t unique_len; /**< Length of unique */ - char *unique; /**< Unique name for driver instantiation */ -}; - -struct drm_list { - int count; /**< Length of user-space structures */ - struct drm_version *version; -}; - -struct drm_block { - int unused; -}; - -/* - * DRM_IOCTL_CONTROL ioctl argument type. - * - * \sa drmCtlInstHandler() and drmCtlUninstHandler(). - */ -struct drm_control { - enum { - DRM_ADD_COMMAND, - DRM_RM_COMMAND, - DRM_INST_HANDLER, - DRM_UNINST_HANDLER - } func; - int irq; -}; - -/* - * Type of memory to map. - */ -enum drm_map_type { - _DRM_FRAME_BUFFER = 0, /**< WC (no caching), no core dump */ - _DRM_REGISTERS = 1, /**< no caching, no core dump */ - _DRM_SHM = 2, /**< shared, cached */ - _DRM_AGP = 3, /**< AGP/GART */ - _DRM_SCATTER_GATHER = 4, /**< Scatter/gather memory for PCI DMA */ - _DRM_CONSISTENT = 5 /**< Consistent memory for PCI DMA */ -}; - -/* - * Memory mapping flags. - */ -enum drm_map_flags { - _DRM_RESTRICTED = 0x01, /**< Cannot be mapped to user-virtual */ - _DRM_READ_ONLY = 0x02, - _DRM_LOCKED = 0x04, /**< shared, cached, locked */ - _DRM_KERNEL = 0x08, /**< kernel requires access */ - _DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */ - _DRM_CONTAINS_LOCK = 0x20, /**< SHM page that contains lock */ - _DRM_REMOVABLE = 0x40, /**< Removable mapping */ - _DRM_DRIVER = 0x80 /**< Managed by driver */ -}; - -struct drm_ctx_priv_map { - unsigned int ctx_id; /**< Context requesting private mapping */ - void *handle; /**< Handle of map */ -}; - -/* - * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls - * argument type. - * - * \sa drmAddMap(). - */ -struct drm_map { - unsigned long offset; /**< Requested physical address (0 for SAREA)*/ - unsigned long size; /**< Requested physical size (bytes) */ - enum drm_map_type type; /**< Type of memory to map */ - enum drm_map_flags flags; /**< Flags */ - void *handle; /**< User-space: "Handle" to pass to mmap() */ - /**< Kernel-space: kernel-virtual address */ - int mtrr; /**< MTRR slot used */ - /* Private data */ -}; - -/* - * DRM_IOCTL_GET_CLIENT ioctl argument type. - */ -struct drm_client { - int idx; /**< Which client desired? */ - int auth; /**< Is client authenticated? */ - unsigned long pid; /**< Process ID */ - unsigned long uid; /**< User ID */ - unsigned long magic; /**< Magic */ - unsigned long iocs; /**< Ioctl count */ -}; - -enum drm_stat_type { - _DRM_STAT_LOCK, - _DRM_STAT_OPENS, - _DRM_STAT_CLOSES, - _DRM_STAT_IOCTLS, - _DRM_STAT_LOCKS, - _DRM_STAT_UNLOCKS, - _DRM_STAT_VALUE, /**< Generic value */ - _DRM_STAT_BYTE, /**< Generic byte counter (1024bytes/K) */ - _DRM_STAT_COUNT, /**< Generic non-byte counter (1000/k) */ - - _DRM_STAT_IRQ, /**< IRQ */ - _DRM_STAT_PRIMARY, /**< Primary DMA bytes */ - _DRM_STAT_SECONDARY, /**< Secondary DMA bytes */ - _DRM_STAT_DMA, /**< DMA */ - _DRM_STAT_SPECIAL, /**< Special DMA (e.g., priority or polled) */ - _DRM_STAT_MISSED /**< Missed DMA opportunity */ - /* Add to the *END* of the list */ -}; - -/* - * DRM_IOCTL_GET_STATS ioctl argument type. - */ -struct drm_stats { - unsigned long count; - struct { - unsigned long value; - enum drm_stat_type type; - } data[15]; -}; - -/* - * Hardware locking flags. - */ -enum drm_lock_flags { - _DRM_LOCK_READY = 0x01, /**< Wait until hardware is ready for DMA */ - _DRM_LOCK_QUIESCENT = 0x02, /**< Wait until hardware quiescent */ - _DRM_LOCK_FLUSH = 0x04, /**< Flush this context's DMA queue first */ - _DRM_LOCK_FLUSH_ALL = 0x08, /**< Flush all DMA queues first */ - /* These *HALT* flags aren't supported yet - -- they will be used to support the - full-screen DGA-like mode. */ - _DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */ - _DRM_HALT_CUR_QUEUES = 0x20 /**< Halt all current queues */ -}; - -/* - * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type. - * - * \sa drmGetLock() and drmUnlock(). - */ -struct drm_lock { - int context; - enum drm_lock_flags flags; -}; - -/* - * DMA flags - * - * \warning - * These values \e must match xf86drm.h. - * - * \sa drm_dma. - */ -enum drm_dma_flags { - /* Flags for DMA buffer dispatch */ - _DRM_DMA_BLOCK = 0x01, /**< - * Block until buffer dispatched. - * - * \note The buffer may not yet have - * been processed by the hardware -- - * getting a hardware lock with the - * hardware quiescent will ensure - * that the buffer has been - * processed. - */ - _DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */ - _DRM_DMA_PRIORITY = 0x04, /**< High priority dispatch */ - - /* Flags for DMA buffer request */ - _DRM_DMA_WAIT = 0x10, /**< Wait for free buffers */ - _DRM_DMA_SMALLER_OK = 0x20, /**< Smaller-than-requested buffers OK */ - _DRM_DMA_LARGER_OK = 0x40 /**< Larger-than-requested buffers OK */ -}; - -/* - * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type. - * - * \sa drmAddBufs(). - */ -struct drm_buf_desc { - int count; /**< Number of buffers of this size */ - int size; /**< Size in bytes */ - int low_mark; /**< Low water mark */ - int high_mark; /**< High water mark */ - enum { - _DRM_PAGE_ALIGN = 0x01, /**< Align on page boundaries for DMA */ - _DRM_AGP_BUFFER = 0x02, /**< Buffer is in AGP space */ - _DRM_SG_BUFFER = 0x04, /**< Scatter/gather memory buffer */ - _DRM_FB_BUFFER = 0x08, /**< Buffer is in frame buffer */ - _DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */ - } flags; - unsigned long agp_start; /**< - * Start address of where the AGP buffers are - * in the AGP aperture - */ -}; - -/* - * DRM_IOCTL_INFO_BUFS ioctl argument type. - */ -struct drm_buf_info { - int count; /**< Entries in list */ - struct drm_buf_desc *list; -}; - -/* - * DRM_IOCTL_FREE_BUFS ioctl argument type. - */ -struct drm_buf_free { - int count; - int *list; -}; - -/* - * Buffer information - * - * \sa drm_buf_map. - */ -struct drm_buf_pub { - int idx; /**< Index into the master buffer list */ - int total; /**< Buffer size */ - int used; /**< Amount of buffer in use (for DMA) */ - void *address; /**< Address of buffer */ -}; - -/* - * DRM_IOCTL_MAP_BUFS ioctl argument type. - */ -struct drm_buf_map { - int count; /**< Length of the buffer list */ -#ifdef __cplusplus - void *virt; -#else - void *virtual; /**< Mmap'd area in user-virtual */ -#endif - struct drm_buf_pub *list; /**< Buffer information */ -}; - -/* - * DRM_IOCTL_DMA ioctl argument type. - * - * Indices here refer to the offset into the buffer list in drm_buf_get. - * - * \sa drmDMA(). - */ -struct drm_dma { - int context; /**< Context handle */ - int send_count; /**< Number of buffers to send */ - int *send_indices; /**< List of handles to buffers */ - int *send_sizes; /**< Lengths of data to send */ - enum drm_dma_flags flags; /**< Flags */ - int request_count; /**< Number of buffers requested */ - int request_size; /**< Desired size for buffers */ - int *request_indices; /**< Buffer information */ - int *request_sizes; - int granted_count; /**< Number of buffers granted */ -}; - -enum drm_ctx_flags { - _DRM_CONTEXT_PRESERVED = 0x01, - _DRM_CONTEXT_2DONLY = 0x02 -}; - -/* - * DRM_IOCTL_ADD_CTX ioctl argument type. - * - * \sa drmCreateContext() and drmDestroyContext(). - */ -struct drm_ctx { - drm_context_t handle; - enum drm_ctx_flags flags; -}; - -/* - * DRM_IOCTL_RES_CTX ioctl argument type. - */ -struct drm_ctx_res { - int count; - struct drm_ctx *contexts; -}; - -/* - * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type. - */ -struct drm_draw { - drm_drawable_t handle; -}; - -/* - * DRM_IOCTL_UPDATE_DRAW ioctl argument type. - */ -typedef enum { - DRM_DRAWABLE_CLIPRECTS -} drm_drawable_info_type_t; - -struct drm_update_draw { - drm_drawable_t handle; - unsigned int type; - unsigned int num; - unsigned long long data; -}; - -/* - * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type. - */ -struct drm_auth { - drm_magic_t magic; -}; - -/* - * DRM_IOCTL_IRQ_BUSID ioctl argument type. - * - * \sa drmGetInterruptFromBusID(). - */ -struct drm_irq_busid { - int irq; /**< IRQ number */ - int busnum; /**< bus number */ - int devnum; /**< device number */ - int funcnum; /**< function number */ -}; - -enum drm_vblank_seq_type { - _DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */ - _DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */ - /* bits 1-6 are reserved for high crtcs */ - _DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e, - _DRM_VBLANK_EVENT = 0x4000000, /**< Send event instead of blocking */ - _DRM_VBLANK_FLIP = 0x8000000, /**< Scheduled buffer swap should flip */ - _DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */ - _DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */ - _DRM_VBLANK_SIGNAL = 0x40000000 /**< Send signal instead of blocking, unsupported */ -}; -#define _DRM_VBLANK_HIGH_CRTC_SHIFT 1 - -#define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE) -#define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_EVENT | _DRM_VBLANK_SIGNAL | \ - _DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS) - -struct drm_wait_vblank_request { - enum drm_vblank_seq_type type; - unsigned int sequence; - unsigned long signal; -}; - -struct drm_wait_vblank_reply { - enum drm_vblank_seq_type type; - unsigned int sequence; - long tval_sec; - long tval_usec; -}; - -/* - * DRM_IOCTL_WAIT_VBLANK ioctl argument type. - * - * \sa drmWaitVBlank(). - */ -union drm_wait_vblank { - struct drm_wait_vblank_request request; - struct drm_wait_vblank_reply reply; -}; - -#define _DRM_PRE_MODESET 1 -#define _DRM_POST_MODESET 2 - -/* - * DRM_IOCTL_MODESET_CTL ioctl argument type - * - * \sa drmModesetCtl(). - */ -struct drm_modeset_ctl { - __u32 crtc; - __u32 cmd; -}; - -/* - * DRM_IOCTL_AGP_ENABLE ioctl argument type. - * - * \sa drmAgpEnable(). - */ -struct drm_agp_mode { - unsigned long mode; /**< AGP mode */ -}; - -/* - * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type. - * - * \sa drmAgpAlloc() and drmAgpFree(). - */ -struct drm_agp_buffer { - unsigned long size; /**< In bytes -- will round to page boundary */ - unsigned long handle; /**< Used for binding / unbinding */ - unsigned long type; /**< Type of memory to allocate */ - unsigned long physical; /**< Physical used by i810 */ -}; - -/* - * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type. - * - * \sa drmAgpBind() and drmAgpUnbind(). - */ -struct drm_agp_binding { - unsigned long handle; /**< From drm_agp_buffer */ - unsigned long offset; /**< In bytes -- will round to page boundary */ -}; - -/* - * DRM_IOCTL_AGP_INFO ioctl argument type. - * - * \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(), - * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(), - * drmAgpVendorId() and drmAgpDeviceId(). - */ -struct drm_agp_info { - int agp_version_major; - int agp_version_minor; - unsigned long mode; - unsigned long aperture_base; /* physical address */ - unsigned long aperture_size; /* bytes */ - unsigned long memory_allowed; /* bytes */ - unsigned long memory_used; - - /* PCI information */ - unsigned short id_vendor; - unsigned short id_device; -}; - -/* - * DRM_IOCTL_SG_ALLOC ioctl argument type. - */ -struct drm_scatter_gather { - unsigned long size; /**< In bytes -- will round to page boundary */ - unsigned long handle; /**< Used for mapping / unmapping */ -}; - -/* - * DRM_IOCTL_SET_VERSION ioctl argument type. - */ -struct drm_set_version { - int drm_di_major; - int drm_di_minor; - int drm_dd_major; - int drm_dd_minor; -}; - -/* DRM_IOCTL_GEM_CLOSE ioctl argument type */ -struct drm_gem_close { - /** Handle of the object to be closed. */ - __u32 handle; - __u32 pad; -}; - -/* DRM_IOCTL_GEM_FLINK ioctl argument type */ -struct drm_gem_flink { - /** Handle for the object being named */ - __u32 handle; - - /** Returned global name */ - __u32 name; -}; - -/* DRM_IOCTL_GEM_OPEN ioctl argument type */ -struct drm_gem_open { - /** Name of object being opened */ - __u32 name; - - /** Returned handle for the object */ - __u32 handle; - - /** Returned size of the object */ - __u64 size; -}; - -/** - * DRM_CAP_DUMB_BUFFER - * - * If set to 1, the driver supports creating dumb buffers via the - * &DRM_IOCTL_MODE_CREATE_DUMB ioctl. - */ -#define DRM_CAP_DUMB_BUFFER 0x1 -/** - * DRM_CAP_VBLANK_HIGH_CRTC - * - * If set to 1, the kernel supports specifying a CRTC index in the high bits of - * &drm_wait_vblank_request.type. - * - * Starting kernel version 2.6.39, this capability is always set to 1. - */ -#define DRM_CAP_VBLANK_HIGH_CRTC 0x2 -/** - * DRM_CAP_DUMB_PREFERRED_DEPTH - * - * The preferred bit depth for dumb buffers. - * - * The bit depth is the number of bits used to indicate the color of a single - * pixel excluding any padding. This is different from the number of bits per - * pixel. For instance, XRGB8888 has a bit depth of 24 but has 32 bits per - * pixel. - * - * Note that this preference only applies to dumb buffers, it's irrelevant for - * other types of buffers. - */ -#define DRM_CAP_DUMB_PREFERRED_DEPTH 0x3 -/** - * DRM_CAP_DUMB_PREFER_SHADOW - * - * If set to 1, the driver prefers userspace to render to a shadow buffer - * instead of directly rendering to a dumb buffer. For best speed, userspace - * should do streaming ordered memory copies into the dumb buffer and never - * read from it. - * - * Note that this preference only applies to dumb buffers, it's irrelevant for - * other types of buffers. - */ -#define DRM_CAP_DUMB_PREFER_SHADOW 0x4 -/** - * DRM_CAP_PRIME - * - * Bitfield of supported PRIME sharing capabilities. See &DRM_PRIME_CAP_IMPORT - * and &DRM_PRIME_CAP_EXPORT. - * - * PRIME buffers are exposed as dma-buf file descriptors. See - * Documentation/gpu/drm-mm.rst, section "PRIME Buffer Sharing". - */ -#define DRM_CAP_PRIME 0x5 -/** - * DRM_PRIME_CAP_IMPORT - * - * If this bit is set in &DRM_CAP_PRIME, the driver supports importing PRIME - * buffers via the &DRM_IOCTL_PRIME_FD_TO_HANDLE ioctl. - */ -#define DRM_PRIME_CAP_IMPORT 0x1 -/** - * DRM_PRIME_CAP_EXPORT - * - * If this bit is set in &DRM_CAP_PRIME, the driver supports exporting PRIME - * buffers via the &DRM_IOCTL_PRIME_HANDLE_TO_FD ioctl. - */ -#define DRM_PRIME_CAP_EXPORT 0x2 -/** - * DRM_CAP_TIMESTAMP_MONOTONIC - * - * If set to 0, the kernel will report timestamps with ``CLOCK_REALTIME`` in - * struct drm_event_vblank. If set to 1, the kernel will report timestamps with - * ``CLOCK_MONOTONIC``. See ``clock_gettime(2)`` for the definition of these - * clocks. - * - * Starting from kernel version 2.6.39, the default value for this capability - * is 1. Starting kernel version 4.15, this capability is always set to 1. - */ -#define DRM_CAP_TIMESTAMP_MONOTONIC 0x6 -/** - * DRM_CAP_ASYNC_PAGE_FLIP - * - * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC. - */ -#define DRM_CAP_ASYNC_PAGE_FLIP 0x7 -/** - * DRM_CAP_CURSOR_WIDTH - * - * The ``CURSOR_WIDTH`` and ``CURSOR_HEIGHT`` capabilities return a valid - * width x height combination for the hardware cursor. The intention is that a - * hardware agnostic userspace can query a cursor plane size to use. - * - * Note that the cross-driver contract is to merely return a valid size; - * drivers are free to attach another meaning on top, eg. i915 returns the - * maximum plane size. - */ -#define DRM_CAP_CURSOR_WIDTH 0x8 -/** - * DRM_CAP_CURSOR_HEIGHT - * - * See &DRM_CAP_CURSOR_WIDTH. - */ -#define DRM_CAP_CURSOR_HEIGHT 0x9 -/** - * DRM_CAP_ADDFB2_MODIFIERS - * - * If set to 1, the driver supports supplying modifiers in the - * &DRM_IOCTL_MODE_ADDFB2 ioctl. - */ -#define DRM_CAP_ADDFB2_MODIFIERS 0x10 -/** - * DRM_CAP_PAGE_FLIP_TARGET - * - * If set to 1, the driver supports the &DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE and - * &DRM_MODE_PAGE_FLIP_TARGET_RELATIVE flags in - * &drm_mode_crtc_page_flip_target.flags for the &DRM_IOCTL_MODE_PAGE_FLIP - * ioctl. - */ -#define DRM_CAP_PAGE_FLIP_TARGET 0x11 -/** - * DRM_CAP_CRTC_IN_VBLANK_EVENT - * - * If set to 1, the kernel supports reporting the CRTC ID in - * &drm_event_vblank.crtc_id for the &DRM_EVENT_VBLANK and - * &DRM_EVENT_FLIP_COMPLETE events. - * - * Starting kernel version 4.12, this capability is always set to 1. - */ -#define DRM_CAP_CRTC_IN_VBLANK_EVENT 0x12 -/** - * DRM_CAP_SYNCOBJ - * - * If set to 1, the driver supports sync objects. See - * Documentation/gpu/drm-mm.rst, section "DRM Sync Objects". - */ -#define DRM_CAP_SYNCOBJ 0x13 -/** - * DRM_CAP_SYNCOBJ_TIMELINE - * - * If set to 1, the driver supports timeline operations on sync objects. See - * Documentation/gpu/drm-mm.rst, section "DRM Sync Objects". - */ -#define DRM_CAP_SYNCOBJ_TIMELINE 0x14 - -/* DRM_IOCTL_GET_CAP ioctl argument type */ -struct drm_get_cap { - __u64 capability; - __u64 value; -}; - -/** - * DRM_CLIENT_CAP_STEREO_3D - * - * If set to 1, the DRM core will expose the stereo 3D capabilities of the - * monitor by advertising the supported 3D layouts in the flags of struct - * drm_mode_modeinfo. See ``DRM_MODE_FLAG_3D_*``. - * - * This capability is always supported for all drivers starting from kernel - * version 3.13. - */ -#define DRM_CLIENT_CAP_STEREO_3D 1 - -/** - * DRM_CLIENT_CAP_UNIVERSAL_PLANES - * - * If set to 1, the DRM core will expose all planes (overlay, primary, and - * cursor) to userspace. - * - * This capability has been introduced in kernel version 3.15. Starting from - * kernel version 3.17, this capability is always supported for all drivers. - */ -#define DRM_CLIENT_CAP_UNIVERSAL_PLANES 2 - -/** - * DRM_CLIENT_CAP_ATOMIC - * - * If set to 1, the DRM core will expose atomic properties to userspace. This - * implicitly enables &DRM_CLIENT_CAP_UNIVERSAL_PLANES and - * &DRM_CLIENT_CAP_ASPECT_RATIO. - * - * If the driver doesn't support atomic mode-setting, enabling this capability - * will fail with -EOPNOTSUPP. - * - * This capability has been introduced in kernel version 4.0. Starting from - * kernel version 4.2, this capability is always supported for atomic-capable - * drivers. - */ -#define DRM_CLIENT_CAP_ATOMIC 3 - -/** - * DRM_CLIENT_CAP_ASPECT_RATIO - * - * If set to 1, the DRM core will provide aspect ratio information in modes. - * See ``DRM_MODE_FLAG_PIC_AR_*``. - * - * This capability is always supported for all drivers starting from kernel - * version 4.18. - */ -#define DRM_CLIENT_CAP_ASPECT_RATIO 4 - -/** - * DRM_CLIENT_CAP_WRITEBACK_CONNECTORS - * - * If set to 1, the DRM core will expose special connectors to be used for - * writing back to memory the scene setup in the commit. The client must enable - * &DRM_CLIENT_CAP_ATOMIC first. - * - * This capability is always supported for atomic-capable drivers starting from - * kernel version 4.19. - */ -#define DRM_CLIENT_CAP_WRITEBACK_CONNECTORS 5 - -/* DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */ -struct drm_set_client_cap { - __u64 capability; - __u64 value; -}; - -#define DRM_RDWR O_RDWR -#define DRM_CLOEXEC O_CLOEXEC -struct drm_prime_handle { - __u32 handle; - - /** Flags.. only applicable for handle->fd */ - __u32 flags; - - /** Returned dmabuf file descriptor */ - __s32 fd; -}; - -struct drm_syncobj_create { - __u32 handle; -#define DRM_SYNCOBJ_CREATE_SIGNALED (1 << 0) - __u32 flags; -}; - -struct drm_syncobj_destroy { - __u32 handle; - __u32 pad; -}; - -#define DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE (1 << 0) -#define DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE (1 << 0) -struct drm_syncobj_handle { - __u32 handle; - __u32 flags; - - __s32 fd; - __u32 pad; -}; - -struct drm_syncobj_transfer { - __u32 src_handle; - __u32 dst_handle; - __u64 src_point; - __u64 dst_point; - __u32 flags; - __u32 pad; -}; - -#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0) -#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1) -#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE (1 << 2) /* wait for time point to become available */ -struct drm_syncobj_wait { - __u64 handles; - /* absolute timeout */ - __s64 timeout_nsec; - __u32 count_handles; - __u32 flags; - __u32 first_signaled; /* only valid when not waiting all */ - __u32 pad; -}; - -struct drm_syncobj_timeline_wait { - __u64 handles; - /* wait on specific timeline point for every handles*/ - __u64 points; - /* absolute timeout */ - __s64 timeout_nsec; - __u32 count_handles; - __u32 flags; - __u32 first_signaled; /* only valid when not waiting all */ - __u32 pad; -}; - - -struct drm_syncobj_array { - __u64 handles; - __u32 count_handles; - __u32 pad; -}; - -#define DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED (1 << 0) /* last available point on timeline syncobj */ -struct drm_syncobj_timeline_array { - __u64 handles; - __u64 points; - __u32 count_handles; - __u32 flags; -}; - - -/* Query current scanout sequence number */ -struct drm_crtc_get_sequence { - __u32 crtc_id; /* requested crtc_id */ - __u32 active; /* return: crtc output is active */ - __u64 sequence; /* return: most recent vblank sequence */ - __s64 sequence_ns; /* return: most recent time of first pixel out */ -}; - -/* Queue event to be delivered at specified sequence. Time stamp marks - * when the first pixel of the refresh cycle leaves the display engine - * for the display - */ -#define DRM_CRTC_SEQUENCE_RELATIVE 0x00000001 /* sequence is relative to current */ -#define DRM_CRTC_SEQUENCE_NEXT_ON_MISS 0x00000002 /* Use next sequence if we've missed */ - -struct drm_crtc_queue_sequence { - __u32 crtc_id; - __u32 flags; - __u64 sequence; /* on input, target sequence. on output, actual sequence */ - __u64 user_data; /* user data passed to event */ -}; - -#if defined(__cplusplus) -} -#endif - -#include "drm_mode.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_IOCTL_BASE 'd' -#define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr) -#define DRM_IOR(nr,type) _IOR(DRM_IOCTL_BASE,nr,type) -#define DRM_IOW(nr,type) _IOW(DRM_IOCTL_BASE,nr,type) -#define DRM_IOWR(nr,type) _IOWR(DRM_IOCTL_BASE,nr,type) - -#define DRM_IOCTL_VERSION DRM_IOWR(0x00, struct drm_version) -#define DRM_IOCTL_GET_UNIQUE DRM_IOWR(0x01, struct drm_unique) -#define DRM_IOCTL_GET_MAGIC DRM_IOR( 0x02, struct drm_auth) -#define DRM_IOCTL_IRQ_BUSID DRM_IOWR(0x03, struct drm_irq_busid) -#define DRM_IOCTL_GET_MAP DRM_IOWR(0x04, struct drm_map) -#define DRM_IOCTL_GET_CLIENT DRM_IOWR(0x05, struct drm_client) -#define DRM_IOCTL_GET_STATS DRM_IOR( 0x06, struct drm_stats) -#define DRM_IOCTL_SET_VERSION DRM_IOWR(0x07, struct drm_set_version) -#define DRM_IOCTL_MODESET_CTL DRM_IOW(0x08, struct drm_modeset_ctl) -#define DRM_IOCTL_GEM_CLOSE DRM_IOW (0x09, struct drm_gem_close) -#define DRM_IOCTL_GEM_FLINK DRM_IOWR(0x0a, struct drm_gem_flink) -#define DRM_IOCTL_GEM_OPEN DRM_IOWR(0x0b, struct drm_gem_open) -#define DRM_IOCTL_GET_CAP DRM_IOWR(0x0c, struct drm_get_cap) -#define DRM_IOCTL_SET_CLIENT_CAP DRM_IOW( 0x0d, struct drm_set_client_cap) - -#define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, struct drm_unique) -#define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, struct drm_auth) -#define DRM_IOCTL_BLOCK DRM_IOWR(0x12, struct drm_block) -#define DRM_IOCTL_UNBLOCK DRM_IOWR(0x13, struct drm_block) -#define DRM_IOCTL_CONTROL DRM_IOW( 0x14, struct drm_control) -#define DRM_IOCTL_ADD_MAP DRM_IOWR(0x15, struct drm_map) -#define DRM_IOCTL_ADD_BUFS DRM_IOWR(0x16, struct drm_buf_desc) -#define DRM_IOCTL_MARK_BUFS DRM_IOW( 0x17, struct drm_buf_desc) -#define DRM_IOCTL_INFO_BUFS DRM_IOWR(0x18, struct drm_buf_info) -#define DRM_IOCTL_MAP_BUFS DRM_IOWR(0x19, struct drm_buf_map) -#define DRM_IOCTL_FREE_BUFS DRM_IOW( 0x1a, struct drm_buf_free) - -#define DRM_IOCTL_RM_MAP DRM_IOW( 0x1b, struct drm_map) - -#define DRM_IOCTL_SET_SAREA_CTX DRM_IOW( 0x1c, struct drm_ctx_priv_map) -#define DRM_IOCTL_GET_SAREA_CTX DRM_IOWR(0x1d, struct drm_ctx_priv_map) - -#define DRM_IOCTL_SET_MASTER DRM_IO(0x1e) -#define DRM_IOCTL_DROP_MASTER DRM_IO(0x1f) - -#define DRM_IOCTL_ADD_CTX DRM_IOWR(0x20, struct drm_ctx) -#define DRM_IOCTL_RM_CTX DRM_IOWR(0x21, struct drm_ctx) -#define DRM_IOCTL_MOD_CTX DRM_IOW( 0x22, struct drm_ctx) -#define DRM_IOCTL_GET_CTX DRM_IOWR(0x23, struct drm_ctx) -#define DRM_IOCTL_SWITCH_CTX DRM_IOW( 0x24, struct drm_ctx) -#define DRM_IOCTL_NEW_CTX DRM_IOW( 0x25, struct drm_ctx) -#define DRM_IOCTL_RES_CTX DRM_IOWR(0x26, struct drm_ctx_res) -#define DRM_IOCTL_ADD_DRAW DRM_IOWR(0x27, struct drm_draw) -#define DRM_IOCTL_RM_DRAW DRM_IOWR(0x28, struct drm_draw) -#define DRM_IOCTL_DMA DRM_IOWR(0x29, struct drm_dma) -#define DRM_IOCTL_LOCK DRM_IOW( 0x2a, struct drm_lock) -#define DRM_IOCTL_UNLOCK DRM_IOW( 0x2b, struct drm_lock) -#define DRM_IOCTL_FINISH DRM_IOW( 0x2c, struct drm_lock) - -#define DRM_IOCTL_PRIME_HANDLE_TO_FD DRM_IOWR(0x2d, struct drm_prime_handle) -#define DRM_IOCTL_PRIME_FD_TO_HANDLE DRM_IOWR(0x2e, struct drm_prime_handle) - -#define DRM_IOCTL_AGP_ACQUIRE DRM_IO( 0x30) -#define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31) -#define DRM_IOCTL_AGP_ENABLE DRM_IOW( 0x32, struct drm_agp_mode) -#define DRM_IOCTL_AGP_INFO DRM_IOR( 0x33, struct drm_agp_info) -#define DRM_IOCTL_AGP_ALLOC DRM_IOWR(0x34, struct drm_agp_buffer) -#define DRM_IOCTL_AGP_FREE DRM_IOW( 0x35, struct drm_agp_buffer) -#define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding) -#define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding) - -#define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather) -#define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather) - -#define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank) - -#define DRM_IOCTL_CRTC_GET_SEQUENCE DRM_IOWR(0x3b, struct drm_crtc_get_sequence) -#define DRM_IOCTL_CRTC_QUEUE_SEQUENCE DRM_IOWR(0x3c, struct drm_crtc_queue_sequence) - -#define DRM_IOCTL_UPDATE_DRAW DRM_IOW(0x3f, struct drm_update_draw) - -#define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res) -#define DRM_IOCTL_MODE_GETCRTC DRM_IOWR(0xA1, struct drm_mode_crtc) -#define DRM_IOCTL_MODE_SETCRTC DRM_IOWR(0xA2, struct drm_mode_crtc) -#define DRM_IOCTL_MODE_CURSOR DRM_IOWR(0xA3, struct drm_mode_cursor) -#define DRM_IOCTL_MODE_GETGAMMA DRM_IOWR(0xA4, struct drm_mode_crtc_lut) -#define DRM_IOCTL_MODE_SETGAMMA DRM_IOWR(0xA5, struct drm_mode_crtc_lut) -#define DRM_IOCTL_MODE_GETENCODER DRM_IOWR(0xA6, struct drm_mode_get_encoder) -#define DRM_IOCTL_MODE_GETCONNECTOR DRM_IOWR(0xA7, struct drm_mode_get_connector) -#define DRM_IOCTL_MODE_ATTACHMODE DRM_IOWR(0xA8, struct drm_mode_mode_cmd) /* deprecated (never worked) */ -#define DRM_IOCTL_MODE_DETACHMODE DRM_IOWR(0xA9, struct drm_mode_mode_cmd) /* deprecated (never worked) */ - -#define DRM_IOCTL_MODE_GETPROPERTY DRM_IOWR(0xAA, struct drm_mode_get_property) -#define DRM_IOCTL_MODE_SETPROPERTY DRM_IOWR(0xAB, struct drm_mode_connector_set_property) -#define DRM_IOCTL_MODE_GETPROPBLOB DRM_IOWR(0xAC, struct drm_mode_get_blob) -#define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd) -#define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd) -#define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int) -#define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOWR(0xB0, struct drm_mode_crtc_page_flip) -#define DRM_IOCTL_MODE_DIRTYFB DRM_IOWR(0xB1, struct drm_mode_fb_dirty_cmd) - -#define DRM_IOCTL_MODE_CREATE_DUMB DRM_IOWR(0xB2, struct drm_mode_create_dumb) -#define DRM_IOCTL_MODE_MAP_DUMB DRM_IOWR(0xB3, struct drm_mode_map_dumb) -#define DRM_IOCTL_MODE_DESTROY_DUMB DRM_IOWR(0xB4, struct drm_mode_destroy_dumb) -#define DRM_IOCTL_MODE_GETPLANERESOURCES DRM_IOWR(0xB5, struct drm_mode_get_plane_res) -#define DRM_IOCTL_MODE_GETPLANE DRM_IOWR(0xB6, struct drm_mode_get_plane) -#define DRM_IOCTL_MODE_SETPLANE DRM_IOWR(0xB7, struct drm_mode_set_plane) -#define DRM_IOCTL_MODE_ADDFB2 DRM_IOWR(0xB8, struct drm_mode_fb_cmd2) -#define DRM_IOCTL_MODE_OBJ_GETPROPERTIES DRM_IOWR(0xB9, struct drm_mode_obj_get_properties) -#define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct drm_mode_obj_set_property) -#define DRM_IOCTL_MODE_CURSOR2 DRM_IOWR(0xBB, struct drm_mode_cursor2) -#define DRM_IOCTL_MODE_ATOMIC DRM_IOWR(0xBC, struct drm_mode_atomic) -#define DRM_IOCTL_MODE_CREATEPROPBLOB DRM_IOWR(0xBD, struct drm_mode_create_blob) -#define DRM_IOCTL_MODE_DESTROYPROPBLOB DRM_IOWR(0xBE, struct drm_mode_destroy_blob) - -#define DRM_IOCTL_SYNCOBJ_CREATE DRM_IOWR(0xBF, struct drm_syncobj_create) -#define DRM_IOCTL_SYNCOBJ_DESTROY DRM_IOWR(0xC0, struct drm_syncobj_destroy) -#define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD DRM_IOWR(0xC1, struct drm_syncobj_handle) -#define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE DRM_IOWR(0xC2, struct drm_syncobj_handle) -#define DRM_IOCTL_SYNCOBJ_WAIT DRM_IOWR(0xC3, struct drm_syncobj_wait) -#define DRM_IOCTL_SYNCOBJ_RESET DRM_IOWR(0xC4, struct drm_syncobj_array) -#define DRM_IOCTL_SYNCOBJ_SIGNAL DRM_IOWR(0xC5, struct drm_syncobj_array) - -#define DRM_IOCTL_MODE_CREATE_LEASE DRM_IOWR(0xC6, struct drm_mode_create_lease) -#define DRM_IOCTL_MODE_LIST_LESSEES DRM_IOWR(0xC7, struct drm_mode_list_lessees) -#define DRM_IOCTL_MODE_GET_LEASE DRM_IOWR(0xC8, struct drm_mode_get_lease) -#define DRM_IOCTL_MODE_REVOKE_LEASE DRM_IOWR(0xC9, struct drm_mode_revoke_lease) - -#define DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT DRM_IOWR(0xCA, struct drm_syncobj_timeline_wait) -#define DRM_IOCTL_SYNCOBJ_QUERY DRM_IOWR(0xCB, struct drm_syncobj_timeline_array) -#define DRM_IOCTL_SYNCOBJ_TRANSFER DRM_IOWR(0xCC, struct drm_syncobj_transfer) -#define DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL DRM_IOWR(0xCD, struct drm_syncobj_timeline_array) - -#define DRM_IOCTL_MODE_GETFB2 DRM_IOWR(0xCE, struct drm_mode_fb_cmd2) - -/* - * Device specific ioctls should only be in their respective headers - * The device specific ioctl range is from 0x40 to 0x9f. - * Generic IOCTLS restart at 0xA0. - * - * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and - * drmCommandReadWrite(). - */ -#define DRM_COMMAND_BASE 0x40 -#define DRM_COMMAND_END 0xA0 - -/* - * Header for events written back to userspace on the drm fd. The - * type defines the type of event, the length specifies the total - * length of the event (including the header), and user_data is - * typically a 64 bit value passed with the ioctl that triggered the - * event. A read on the drm fd will always only return complete - * events, that is, if for example the read buffer is 100 bytes, and - * there are two 64 byte events pending, only one will be returned. - * - * Event types 0 - 0x7fffffff are generic drm events, 0x80000000 and - * up are chipset specific. - */ -struct drm_event { - __u32 type; - __u32 length; -}; - -#define DRM_EVENT_VBLANK 0x01 -#define DRM_EVENT_FLIP_COMPLETE 0x02 -#define DRM_EVENT_CRTC_SEQUENCE 0x03 - -struct drm_event_vblank { - struct drm_event base; - __u64 user_data; - __u32 tv_sec; - __u32 tv_usec; - __u32 sequence; - __u32 crtc_id; /* 0 on older kernels that do not support this */ -}; - -/* Event delivered at sequence. Time stamp marks when the first pixel - * of the refresh cycle leaves the display engine for the display - */ -struct drm_event_crtc_sequence { - struct drm_event base; - __u64 user_data; - __s64 time_ns; - __u64 sequence; -}; - -/* typedef area */ -typedef struct drm_clip_rect drm_clip_rect_t; -typedef struct drm_drawable_info drm_drawable_info_t; -typedef struct drm_tex_region drm_tex_region_t; -typedef struct drm_hw_lock drm_hw_lock_t; -typedef struct drm_version drm_version_t; -typedef struct drm_unique drm_unique_t; -typedef struct drm_list drm_list_t; -typedef struct drm_block drm_block_t; -typedef struct drm_control drm_control_t; -typedef enum drm_map_type drm_map_type_t; -typedef enum drm_map_flags drm_map_flags_t; -typedef struct drm_ctx_priv_map drm_ctx_priv_map_t; -typedef struct drm_map drm_map_t; -typedef struct drm_client drm_client_t; -typedef enum drm_stat_type drm_stat_type_t; -typedef struct drm_stats drm_stats_t; -typedef enum drm_lock_flags drm_lock_flags_t; -typedef struct drm_lock drm_lock_t; -typedef enum drm_dma_flags drm_dma_flags_t; -typedef struct drm_buf_desc drm_buf_desc_t; -typedef struct drm_buf_info drm_buf_info_t; -typedef struct drm_buf_free drm_buf_free_t; -typedef struct drm_buf_pub drm_buf_pub_t; -typedef struct drm_buf_map drm_buf_map_t; -typedef struct drm_dma drm_dma_t; -typedef union drm_wait_vblank drm_wait_vblank_t; -typedef struct drm_agp_mode drm_agp_mode_t; -typedef enum drm_ctx_flags drm_ctx_flags_t; -typedef struct drm_ctx drm_ctx_t; -typedef struct drm_ctx_res drm_ctx_res_t; -typedef struct drm_draw drm_draw_t; -typedef struct drm_update_draw drm_update_draw_t; -typedef struct drm_auth drm_auth_t; -typedef struct drm_irq_busid drm_irq_busid_t; -typedef enum drm_vblank_seq_type drm_vblank_seq_type_t; - -typedef struct drm_agp_buffer drm_agp_buffer_t; -typedef struct drm_agp_binding drm_agp_binding_t; -typedef struct drm_agp_info drm_agp_info_t; -typedef struct drm_scatter_gather drm_scatter_gather_t; -typedef struct drm_set_version drm_set_version_t; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86/include/libdrm/drm_fourcc.h b/prebuilts/x86/include/libdrm/drm_fourcc.h deleted file mode 100644 index 957c7be..0000000 --- a/prebuilts/x86/include/libdrm/drm_fourcc.h +++ /dev/null @@ -1,1365 +0,0 @@ -/* - * Copyright 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef DRM_FOURCC_H -#define DRM_FOURCC_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/** - * DOC: overview - * - * In the DRM subsystem, framebuffer pixel formats are described using the - * fourcc codes defined in `include/uapi/drm/drm_fourcc.h`. In addition to the - * fourcc code, a Format Modifier may optionally be provided, in order to - * further describe the buffer's format - for example tiling or compression. - * - * Format Modifiers - * ---------------- - * - * Format modifiers are used in conjunction with a fourcc code, forming a - * unique fourcc:modifier pair. This format:modifier pair must fully define the - * format and data layout of the buffer, and should be the only way to describe - * that particular buffer. - * - * Having multiple fourcc:modifier pairs which describe the same layout should - * be avoided, as such aliases run the risk of different drivers exposing - * different names for the same data format, forcing userspace to understand - * that they are aliases. - * - * Format modifiers may change any property of the buffer, including the number - * of planes and/or the required allocation size. Format modifiers are - * vendor-namespaced, and as such the relationship between a fourcc code and a - * modifier is specific to the modifer being used. For example, some modifiers - * may preserve meaning - such as number of planes - from the fourcc code, - * whereas others may not. - * - * Modifiers must uniquely encode buffer layout. In other words, a buffer must - * match only a single modifier. A modifier must not be a subset of layouts of - * another modifier. For instance, it's incorrect to encode pitch alignment in - * a modifier: a buffer may match a 64-pixel aligned modifier and a 32-pixel - * aligned modifier. That said, modifiers can have implicit minimal - * requirements. - * - * For modifiers where the combination of fourcc code and modifier can alias, - * a canonical pair needs to be defined and used by all drivers. Preferred - * combinations are also encouraged where all combinations might lead to - * confusion and unnecessarily reduced interoperability. An example for the - * latter is AFBC, where the ABGR layouts are preferred over ARGB layouts. - * - * There are two kinds of modifier users: - * - * - Kernel and user-space drivers: for drivers it's important that modifiers - * don't alias, otherwise two drivers might support the same format but use - * different aliases, preventing them from sharing buffers in an efficient - * format. - * - Higher-level programs interfacing with KMS/GBM/EGL/Vulkan/etc: these users - * see modifiers as opaque tokens they can check for equality and intersect. - * These users musn't need to know to reason about the modifier value - * (i.e. they are not expected to extract information out of the modifier). - * - * Vendors should document their modifier usage in as much detail as - * possible, to ensure maximum compatibility across devices, drivers and - * applications. - * - * The authoritative list of format modifier codes is found in - * `include/uapi/drm/drm_fourcc.h` - */ - -#define fourcc_code(a, b, c, d) ((__u32)(a) | ((__u32)(b) << 8) | \ - ((__u32)(c) << 16) | ((__u32)(d) << 24)) - -#define DRM_FORMAT_BIG_ENDIAN (1U<<31) /* format is big endian instead of little endian */ - -/* Reserve 0 for the invalid format specifier */ -#define DRM_FORMAT_INVALID 0 - -/* color index */ -#define DRM_FORMAT_C8 fourcc_code('C', '8', ' ', ' ') /* [7:0] C */ - -/* 8 bpp Red */ -#define DRM_FORMAT_R8 fourcc_code('R', '8', ' ', ' ') /* [7:0] R */ - -/* 16 bpp Red */ -#define DRM_FORMAT_R16 fourcc_code('R', '1', '6', ' ') /* [15:0] R little endian */ - -/* 16 bpp RG */ -#define DRM_FORMAT_RG88 fourcc_code('R', 'G', '8', '8') /* [15:0] R:G 8:8 little endian */ -#define DRM_FORMAT_GR88 fourcc_code('G', 'R', '8', '8') /* [15:0] G:R 8:8 little endian */ - -/* 32 bpp RG */ -#define DRM_FORMAT_RG1616 fourcc_code('R', 'G', '3', '2') /* [31:0] R:G 16:16 little endian */ -#define DRM_FORMAT_GR1616 fourcc_code('G', 'R', '3', '2') /* [31:0] G:R 16:16 little endian */ - -/* 8 bpp RGB */ -#define DRM_FORMAT_RGB332 fourcc_code('R', 'G', 'B', '8') /* [7:0] R:G:B 3:3:2 */ -#define DRM_FORMAT_BGR233 fourcc_code('B', 'G', 'R', '8') /* [7:0] B:G:R 2:3:3 */ - -/* 16 bpp RGB */ -#define DRM_FORMAT_XRGB4444 fourcc_code('X', 'R', '1', '2') /* [15:0] x:R:G:B 4:4:4:4 little endian */ -#define DRM_FORMAT_XBGR4444 fourcc_code('X', 'B', '1', '2') /* [15:0] x:B:G:R 4:4:4:4 little endian */ -#define DRM_FORMAT_RGBX4444 fourcc_code('R', 'X', '1', '2') /* [15:0] R:G:B:x 4:4:4:4 little endian */ -#define DRM_FORMAT_BGRX4444 fourcc_code('B', 'X', '1', '2') /* [15:0] B:G:R:x 4:4:4:4 little endian */ - -#define DRM_FORMAT_ARGB4444 fourcc_code('A', 'R', '1', '2') /* [15:0] A:R:G:B 4:4:4:4 little endian */ -#define DRM_FORMAT_ABGR4444 fourcc_code('A', 'B', '1', '2') /* [15:0] A:B:G:R 4:4:4:4 little endian */ -#define DRM_FORMAT_RGBA4444 fourcc_code('R', 'A', '1', '2') /* [15:0] R:G:B:A 4:4:4:4 little endian */ -#define DRM_FORMAT_BGRA4444 fourcc_code('B', 'A', '1', '2') /* [15:0] B:G:R:A 4:4:4:4 little endian */ - -#define DRM_FORMAT_XRGB1555 fourcc_code('X', 'R', '1', '5') /* [15:0] x:R:G:B 1:5:5:5 little endian */ -#define DRM_FORMAT_XBGR1555 fourcc_code('X', 'B', '1', '5') /* [15:0] x:B:G:R 1:5:5:5 little endian */ -#define DRM_FORMAT_RGBX5551 fourcc_code('R', 'X', '1', '5') /* [15:0] R:G:B:x 5:5:5:1 little endian */ -#define DRM_FORMAT_BGRX5551 fourcc_code('B', 'X', '1', '5') /* [15:0] B:G:R:x 5:5:5:1 little endian */ - -#define DRM_FORMAT_ARGB1555 fourcc_code('A', 'R', '1', '5') /* [15:0] A:R:G:B 1:5:5:5 little endian */ -#define DRM_FORMAT_ABGR1555 fourcc_code('A', 'B', '1', '5') /* [15:0] A:B:G:R 1:5:5:5 little endian */ -#define DRM_FORMAT_RGBA5551 fourcc_code('R', 'A', '1', '5') /* [15:0] R:G:B:A 5:5:5:1 little endian */ -#define DRM_FORMAT_BGRA5551 fourcc_code('B', 'A', '1', '5') /* [15:0] B:G:R:A 5:5:5:1 little endian */ - -#define DRM_FORMAT_RGB565 fourcc_code('R', 'G', '1', '6') /* [15:0] R:G:B 5:6:5 little endian */ -#define DRM_FORMAT_BGR565 fourcc_code('B', 'G', '1', '6') /* [15:0] B:G:R 5:6:5 little endian */ - -/* 24 bpp RGB */ -#define DRM_FORMAT_RGB888 fourcc_code('R', 'G', '2', '4') /* [23:0] R:G:B little endian */ -#define DRM_FORMAT_BGR888 fourcc_code('B', 'G', '2', '4') /* [23:0] B:G:R little endian */ - -/* 32 bpp RGB */ -#define DRM_FORMAT_XRGB8888 fourcc_code('X', 'R', '2', '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */ -#define DRM_FORMAT_XBGR8888 fourcc_code('X', 'B', '2', '4') /* [31:0] x:B:G:R 8:8:8:8 little endian */ -#define DRM_FORMAT_RGBX8888 fourcc_code('R', 'X', '2', '4') /* [31:0] R:G:B:x 8:8:8:8 little endian */ -#define DRM_FORMAT_BGRX8888 fourcc_code('B', 'X', '2', '4') /* [31:0] B:G:R:x 8:8:8:8 little endian */ - -#define DRM_FORMAT_ARGB8888 fourcc_code('A', 'R', '2', '4') /* [31:0] A:R:G:B 8:8:8:8 little endian */ -#define DRM_FORMAT_ABGR8888 fourcc_code('A', 'B', '2', '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */ -#define DRM_FORMAT_RGBA8888 fourcc_code('R', 'A', '2', '4') /* [31:0] R:G:B:A 8:8:8:8 little endian */ -#define DRM_FORMAT_BGRA8888 fourcc_code('B', 'A', '2', '4') /* [31:0] B:G:R:A 8:8:8:8 little endian */ - -#define DRM_FORMAT_XRGB2101010 fourcc_code('X', 'R', '3', '0') /* [31:0] x:R:G:B 2:10:10:10 little endian */ -#define DRM_FORMAT_XBGR2101010 fourcc_code('X', 'B', '3', '0') /* [31:0] x:B:G:R 2:10:10:10 little endian */ -#define DRM_FORMAT_RGBX1010102 fourcc_code('R', 'X', '3', '0') /* [31:0] R:G:B:x 10:10:10:2 little endian */ -#define DRM_FORMAT_BGRX1010102 fourcc_code('B', 'X', '3', '0') /* [31:0] B:G:R:x 10:10:10:2 little endian */ - -#define DRM_FORMAT_ARGB2101010 fourcc_code('A', 'R', '3', '0') /* [31:0] A:R:G:B 2:10:10:10 little endian */ -#define DRM_FORMAT_ABGR2101010 fourcc_code('A', 'B', '3', '0') /* [31:0] A:B:G:R 2:10:10:10 little endian */ -#define DRM_FORMAT_RGBA1010102 fourcc_code('R', 'A', '3', '0') /* [31:0] R:G:B:A 10:10:10:2 little endian */ -#define DRM_FORMAT_BGRA1010102 fourcc_code('B', 'A', '3', '0') /* [31:0] B:G:R:A 10:10:10:2 little endian */ - -/* 64 bpp RGB */ -#define DRM_FORMAT_XRGB16161616 fourcc_code('X', 'R', '4', '8') /* [63:0] x:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_XBGR16161616 fourcc_code('X', 'B', '4', '8') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define DRM_FORMAT_ARGB16161616 fourcc_code('A', 'R', '4', '8') /* [63:0] A:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_ABGR16161616 fourcc_code('A', 'B', '4', '8') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* - * Floating point 64bpp RGB - * IEEE 754-2008 binary16 half-precision float - * [15:0] sign:exponent:mantissa 1:5:10 - */ -#define DRM_FORMAT_XRGB16161616F fourcc_code('X', 'R', '4', 'H') /* [63:0] x:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_XBGR16161616F fourcc_code('X', 'B', '4', 'H') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define DRM_FORMAT_ARGB16161616F fourcc_code('A', 'R', '4', 'H') /* [63:0] A:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_ABGR16161616F fourcc_code('A', 'B', '4', 'H') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* - * RGBA format with 10-bit components packed in 64-bit per pixel, with 6 bits - * of unused padding per component: - */ -#define DRM_FORMAT_AXBXGXRX106106106106 fourcc_code('A', 'B', '1', '0') /* [63:0] A:x:B:x:G:x:R:x 10:6:10:6:10:6:10:6 little endian */ - -/* packed YCbCr */ -#define DRM_FORMAT_YUYV fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */ -#define DRM_FORMAT_YVYU fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */ -#define DRM_FORMAT_UYVY fourcc_code('U', 'Y', 'V', 'Y') /* [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian */ -#define DRM_FORMAT_VYUY fourcc_code('V', 'Y', 'U', 'Y') /* [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian */ - -#define DRM_FORMAT_AYUV fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */ -#define DRM_FORMAT_XYUV8888 fourcc_code('X', 'Y', 'U', 'V') /* [31:0] X:Y:Cb:Cr 8:8:8:8 little endian */ -#define DRM_FORMAT_VUY888 fourcc_code('V', 'U', '2', '4') /* [23:0] Cr:Cb:Y 8:8:8 little endian */ -#define DRM_FORMAT_VUY101010 fourcc_code('V', 'U', '3', '0') /* Y followed by U then V, 10:10:10. Non-linear modifier only */ - -/* - * packed Y2xx indicate for each component, xx valid data occupy msb - * 16-xx padding occupy lsb - */ -#define DRM_FORMAT_Y210 fourcc_code('Y', '2', '1', '0') /* [63:0] Cr0:0:Y1:0:Cb0:0:Y0:0 10:6:10:6:10:6:10:6 little endian per 2 Y pixels */ -#define DRM_FORMAT_Y212 fourcc_code('Y', '2', '1', '2') /* [63:0] Cr0:0:Y1:0:Cb0:0:Y0:0 12:4:12:4:12:4:12:4 little endian per 2 Y pixels */ -#define DRM_FORMAT_Y216 fourcc_code('Y', '2', '1', '6') /* [63:0] Cr0:Y1:Cb0:Y0 16:16:16:16 little endian per 2 Y pixels */ - -/* - * packed Y4xx indicate for each component, xx valid data occupy msb - * 16-xx padding occupy lsb except Y410 - */ -#define DRM_FORMAT_Y410 fourcc_code('Y', '4', '1', '0') /* [31:0] A:Cr:Y:Cb 2:10:10:10 little endian */ -#define DRM_FORMAT_Y412 fourcc_code('Y', '4', '1', '2') /* [63:0] A:0:Cr:0:Y:0:Cb:0 12:4:12:4:12:4:12:4 little endian */ -#define DRM_FORMAT_Y416 fourcc_code('Y', '4', '1', '6') /* [63:0] A:Cr:Y:Cb 16:16:16:16 little endian */ - -#define DRM_FORMAT_XVYU2101010 fourcc_code('X', 'V', '3', '0') /* [31:0] X:Cr:Y:Cb 2:10:10:10 little endian */ -#define DRM_FORMAT_XVYU12_16161616 fourcc_code('X', 'V', '3', '6') /* [63:0] X:0:Cr:0:Y:0:Cb:0 12:4:12:4:12:4:12:4 little endian */ -#define DRM_FORMAT_XVYU16161616 fourcc_code('X', 'V', '4', '8') /* [63:0] X:Cr:Y:Cb 16:16:16:16 little endian */ - -/* - * packed YCbCr420 2x2 tiled formats - * first 64 bits will contain Y,Cb,Cr components for a 2x2 tile - */ -/* [63:0] A3:A2:Y3:0:Cr0:0:Y2:0:A1:A0:Y1:0:Cb0:0:Y0:0 1:1:8:2:8:2:8:2:1:1:8:2:8:2:8:2 little endian */ -#define DRM_FORMAT_Y0L0 fourcc_code('Y', '0', 'L', '0') -/* [63:0] X3:X2:Y3:0:Cr0:0:Y2:0:X1:X0:Y1:0:Cb0:0:Y0:0 1:1:8:2:8:2:8:2:1:1:8:2:8:2:8:2 little endian */ -#define DRM_FORMAT_X0L0 fourcc_code('X', '0', 'L', '0') - -/* [63:0] A3:A2:Y3:Cr0:Y2:A1:A0:Y1:Cb0:Y0 1:1:10:10:10:1:1:10:10:10 little endian */ -#define DRM_FORMAT_Y0L2 fourcc_code('Y', '0', 'L', '2') -/* [63:0] X3:X2:Y3:Cr0:Y2:X1:X0:Y1:Cb0:Y0 1:1:10:10:10:1:1:10:10:10 little endian */ -#define DRM_FORMAT_X0L2 fourcc_code('X', '0', 'L', '2') - -/* - * 1-plane YUV 4:2:0 - * In these formats, the component ordering is specified (Y, followed by U - * then V), but the exact Linear layout is undefined. - * These formats can only be used with a non-Linear modifier. - */ -#define DRM_FORMAT_YUV420_8BIT fourcc_code('Y', 'U', '0', '8') -#define DRM_FORMAT_YUV420_10BIT fourcc_code('Y', 'U', '1', '0') - -/* - * 2 plane RGB + A - * index 0 = RGB plane, same format as the corresponding non _A8 format has - * index 1 = A plane, [7:0] A - */ -#define DRM_FORMAT_XRGB8888_A8 fourcc_code('X', 'R', 'A', '8') -#define DRM_FORMAT_XBGR8888_A8 fourcc_code('X', 'B', 'A', '8') -#define DRM_FORMAT_RGBX8888_A8 fourcc_code('R', 'X', 'A', '8') -#define DRM_FORMAT_BGRX8888_A8 fourcc_code('B', 'X', 'A', '8') -#define DRM_FORMAT_RGB888_A8 fourcc_code('R', '8', 'A', '8') -#define DRM_FORMAT_BGR888_A8 fourcc_code('B', '8', 'A', '8') -#define DRM_FORMAT_RGB565_A8 fourcc_code('R', '5', 'A', '8') -#define DRM_FORMAT_BGR565_A8 fourcc_code('B', '5', 'A', '8') - -/* - * 2 plane YCbCr - * index 0 = Y plane, [7:0] Y - * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian - * or - * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian - */ -#define DRM_FORMAT_NV12 fourcc_code('N', 'V', '1', '2') /* 2x2 subsampled Cr:Cb plane */ -#define DRM_FORMAT_NV21 fourcc_code('N', 'V', '2', '1') /* 2x2 subsampled Cb:Cr plane */ -#define DRM_FORMAT_NV16 fourcc_code('N', 'V', '1', '6') /* 2x1 subsampled Cr:Cb plane */ -#define DRM_FORMAT_NV61 fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */ -#define DRM_FORMAT_NV24 fourcc_code('N', 'V', '2', '4') /* non-subsampled Cr:Cb plane */ -#define DRM_FORMAT_NV42 fourcc_code('N', 'V', '4', '2') /* non-subsampled Cb:Cr plane */ -/* - * 2 plane YCbCr - * index 0 = Y plane, [39:0] Y3:Y2:Y1:Y0 little endian - * index 1 = Cr:Cb plane, [39:0] Cr1:Cb1:Cr0:Cb0 little endian - */ -#define DRM_FORMAT_NV15 fourcc_code('N', 'V', '1', '5') /* 2x2 subsampled Cr:Cb plane */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y:x [10:6] little endian - * index 1 = Cr:Cb plane, [31:0] Cr:x:Cb:x [10:6:10:6] little endian - */ -#define DRM_FORMAT_P210 fourcc_code('P', '2', '1', '0') /* 2x1 subsampled Cr:Cb plane, 10 bit per channel */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y:x [10:6] little endian - * index 1 = Cr:Cb plane, [31:0] Cr:x:Cb:x [10:6:10:6] little endian - */ -#define DRM_FORMAT_P010 fourcc_code('P', '0', '1', '0') /* 2x2 subsampled Cr:Cb plane 10 bits per channel */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y:x [12:4] little endian - * index 1 = Cr:Cb plane, [31:0] Cr:x:Cb:x [12:4:12:4] little endian - */ -#define DRM_FORMAT_P012 fourcc_code('P', '0', '1', '2') /* 2x2 subsampled Cr:Cb plane 12 bits per channel */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y little endian - * index 1 = Cr:Cb plane, [31:0] Cr:Cb [16:16] little endian - */ -#define DRM_FORMAT_P016 fourcc_code('P', '0', '1', '6') /* 2x2 subsampled Cr:Cb plane 16 bits per channel */ - -/* 3 plane non-subsampled (444) YCbCr - * 16 bits per component, but only 10 bits are used and 6 bits are padded - * index 0: Y plane, [15:0] Y:x [10:6] little endian - * index 1: Cb plane, [15:0] Cb:x [10:6] little endian - * index 2: Cr plane, [15:0] Cr:x [10:6] little endian - */ -#define DRM_FORMAT_Q410 fourcc_code('Q', '4', '1', '0') - -/* 3 plane non-subsampled (444) YCrCb - * 16 bits per component, but only 10 bits are used and 6 bits are padded - * index 0: Y plane, [15:0] Y:x [10:6] little endian - * index 1: Cr plane, [15:0] Cr:x [10:6] little endian - * index 2: Cb plane, [15:0] Cb:x [10:6] little endian - */ -#define DRM_FORMAT_Q401 fourcc_code('Q', '4', '0', '1') - -/* - * 3 plane YCbCr - * index 0: Y plane, [7:0] Y - * index 1: Cb plane, [7:0] Cb - * index 2: Cr plane, [7:0] Cr - * or - * index 1: Cr plane, [7:0] Cr - * index 2: Cb plane, [7:0] Cb - */ -#define DRM_FORMAT_YUV410 fourcc_code('Y', 'U', 'V', '9') /* 4x4 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU410 fourcc_code('Y', 'V', 'U', '9') /* 4x4 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV411 fourcc_code('Y', 'U', '1', '1') /* 4x1 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU411 fourcc_code('Y', 'V', '1', '1') /* 4x1 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV420 fourcc_code('Y', 'U', '1', '2') /* 2x2 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU420 fourcc_code('Y', 'V', '1', '2') /* 2x2 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV422 fourcc_code('Y', 'U', '1', '6') /* 2x1 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU422 fourcc_code('Y', 'V', '1', '6') /* 2x1 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV444 fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU444 fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */ - - -/* - * Format Modifiers: - * - * Format modifiers describe, typically, a re-ordering or modification - * of the data in a plane of an FB. This can be used to express tiled/ - * swizzled formats, or compression, or a combination of the two. - * - * The upper 8 bits of the format modifier are a vendor-id as assigned - * below. The lower 56 bits are assigned as vendor sees fit. - */ - -/* Vendor Ids: */ -#define DRM_FORMAT_MOD_VENDOR_NONE 0 -#define DRM_FORMAT_MOD_VENDOR_INTEL 0x01 -#define DRM_FORMAT_MOD_VENDOR_AMD 0x02 -#define DRM_FORMAT_MOD_VENDOR_NVIDIA 0x03 -#define DRM_FORMAT_MOD_VENDOR_SAMSUNG 0x04 -#define DRM_FORMAT_MOD_VENDOR_QCOM 0x05 -#define DRM_FORMAT_MOD_VENDOR_VIVANTE 0x06 -#define DRM_FORMAT_MOD_VENDOR_BROADCOM 0x07 -#define DRM_FORMAT_MOD_VENDOR_ARM 0x08 -#define DRM_FORMAT_MOD_VENDOR_ALLWINNER 0x09 -#define DRM_FORMAT_MOD_VENDOR_AMLOGIC 0x0a - -/* add more to the end as needed */ - -#define DRM_FORMAT_RESERVED ((1ULL << 56) - 1) - -#define fourcc_mod_code(vendor, val) \ - ((((__u64)DRM_FORMAT_MOD_VENDOR_## vendor) << 56) | ((val) & 0x00ffffffffffffffULL)) - -/* - * Format Modifier tokens: - * - * When adding a new token please document the layout with a code comment, - * similar to the fourcc codes above. drm_fourcc.h is considered the - * authoritative source for all of these. - * - * Generic modifier names: - * - * DRM_FORMAT_MOD_GENERIC_* definitions are used to provide vendor-neutral names - * for layouts which are common across multiple vendors. To preserve - * compatibility, in cases where a vendor-specific definition already exists and - * a generic name for it is desired, the common name is a purely symbolic alias - * and must use the same numerical value as the original definition. - * - * Note that generic names should only be used for modifiers which describe - * generic layouts (such as pixel re-ordering), which may have - * independently-developed support across multiple vendors. - * - * In future cases where a generic layout is identified before merging with a - * vendor-specific modifier, a new 'GENERIC' vendor or modifier using vendor - * 'NONE' could be considered. This should only be for obvious, exceptional - * cases to avoid polluting the 'GENERIC' namespace with modifiers which only - * apply to a single vendor. - * - * Generic names should not be used for cases where multiple hardware vendors - * have implementations of the same standardised compression scheme (such as - * AFBC). In those cases, all implementations should use the same format - * modifier(s), reflecting the vendor of the standard. - */ - -#define DRM_FORMAT_MOD_GENERIC_16_16_TILE DRM_FORMAT_MOD_SAMSUNG_16_16_TILE - -/* - * Invalid Modifier - * - * This modifier can be used as a sentinel to terminate the format modifiers - * list, or to initialize a variable with an invalid modifier. It might also be - * used to report an error back to userspace for certain APIs. - */ -#define DRM_FORMAT_MOD_INVALID fourcc_mod_code(NONE, DRM_FORMAT_RESERVED) - -/* - * Linear Layout - * - * Just plain linear layout. Note that this is different from no specifying any - * modifier (e.g. not setting DRM_MODE_FB_MODIFIERS in the DRM_ADDFB2 ioctl), - * which tells the driver to also take driver-internal information into account - * and so might actually result in a tiled framebuffer. - */ -#define DRM_FORMAT_MOD_LINEAR fourcc_mod_code(NONE, 0) - -/* - * Deprecated: use DRM_FORMAT_MOD_LINEAR instead - * - * The "none" format modifier doesn't actually mean that the modifier is - * implicit, instead it means that the layout is linear. Whether modifiers are - * used is out-of-band information carried in an API-specific way (e.g. in a - * flag for drm_mode_fb_cmd2). - */ -#define DRM_FORMAT_MOD_NONE 0 - -/* Intel framebuffer modifiers */ - -/* - * Intel X-tiling layout - * - * This is a tiled layout using 4Kb tiles (except on gen2 where the tiles 2Kb) - * in row-major layout. Within the tile bytes are laid out row-major, with - * a platform-dependent stride. On top of that the memory can apply - * platform-depending swizzling of some higher address bits into bit6. - * - * Note that this layout is only accurate on intel gen 8+ or valleyview chipsets. - * On earlier platforms the is highly platforms specific and not useful for - * cross-driver sharing. It exists since on a given platform it does uniquely - * identify the layout in a simple way for i915-specific userspace, which - * facilitated conversion of userspace to modifiers. Additionally the exact - * format on some really old platforms is not known. - */ -#define I915_FORMAT_MOD_X_TILED fourcc_mod_code(INTEL, 1) - -/* - * Intel Y-tiling layout - * - * This is a tiled layout using 4Kb tiles (except on gen2 where the tiles 2Kb) - * in row-major layout. Within the tile bytes are laid out in OWORD (16 bytes) - * chunks column-major, with a platform-dependent height. On top of that the - * memory can apply platform-depending swizzling of some higher address bits - * into bit6. - * - * Note that this layout is only accurate on intel gen 8+ or valleyview chipsets. - * On earlier platforms the is highly platforms specific and not useful for - * cross-driver sharing. It exists since on a given platform it does uniquely - * identify the layout in a simple way for i915-specific userspace, which - * facilitated conversion of userspace to modifiers. Additionally the exact - * format on some really old platforms is not known. - */ -#define I915_FORMAT_MOD_Y_TILED fourcc_mod_code(INTEL, 2) - -/* - * Intel Yf-tiling layout - * - * This is a tiled layout using 4Kb tiles in row-major layout. - * Within the tile pixels are laid out in 16 256 byte units / sub-tiles which - * are arranged in four groups (two wide, two high) with column-major layout. - * Each group therefore consits out of four 256 byte units, which are also laid - * out as 2x2 column-major. - * 256 byte units are made out of four 64 byte blocks of pixels, producing - * either a square block or a 2:1 unit. - * 64 byte blocks of pixels contain four pixel rows of 16 bytes, where the width - * in pixel depends on the pixel depth. - */ -#define I915_FORMAT_MOD_Yf_TILED fourcc_mod_code(INTEL, 3) - -/* - * Intel color control surface (CCS) for render compression - * - * The framebuffer format must be one of the 8:8:8:8 RGB formats. - * The main surface will be plane index 0 and must be Y/Yf-tiled, - * the CCS will be plane index 1. - * - * Each CCS tile matches a 1024x512 pixel area of the main surface. - * To match certain aspects of the 3D hardware the CCS is - * considered to be made up of normal 128Bx32 Y tiles, Thus - * the CCS pitch must be specified in multiples of 128 bytes. - * - * In reality the CCS tile appears to be a 64Bx64 Y tile, composed - * of QWORD (8 bytes) chunks instead of OWORD (16 bytes) chunks. - * But that fact is not relevant unless the memory is accessed - * directly. - */ -#define I915_FORMAT_MOD_Y_TILED_CCS fourcc_mod_code(INTEL, 4) -#define I915_FORMAT_MOD_Yf_TILED_CCS fourcc_mod_code(INTEL, 5) - -/* - * Intel color control surfaces (CCS) for Gen-12 render compression. - * - * The main surface is Y-tiled and at plane index 0, the CCS is linear and - * at index 1. A 64B CCS cache line corresponds to an area of 4x1 tiles in - * main surface. In other words, 4 bits in CCS map to a main surface cache - * line pair. The main surface pitch is required to be a multiple of four - * Y-tile widths. - */ -#define I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS fourcc_mod_code(INTEL, 6) - -/* - * Intel color control surfaces (CCS) for Gen-12 media compression - * - * The main surface is Y-tiled and at plane index 0, the CCS is linear and - * at index 1. A 64B CCS cache line corresponds to an area of 4x1 tiles in - * main surface. In other words, 4 bits in CCS map to a main surface cache - * line pair. The main surface pitch is required to be a multiple of four - * Y-tile widths. For semi-planar formats like NV12, CCS planes follow the - * Y and UV planes i.e., planes 0 and 1 are used for Y and UV surfaces, - * planes 2 and 3 for the respective CCS. - */ -#define I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS fourcc_mod_code(INTEL, 7) - -/* - * Intel Color Control Surface with Clear Color (CCS) for Gen-12 render - * compression. - * - * The main surface is Y-tiled and is at plane index 0 whereas CCS is linear - * and at index 1. The clear color is stored at index 2, and the pitch should - * be ignored. The clear color structure is 256 bits. The first 128 bits - * represents Raw Clear Color Red, Green, Blue and Alpha color each represented - * by 32 bits. The raw clear color is consumed by the 3d engine and generates - * the converted clear color of size 64 bits. The first 32 bits store the Lower - * Converted Clear Color value and the next 32 bits store the Higher Converted - * Clear Color value when applicable. The Converted Clear Color values are - * consumed by the DE. The last 64 bits are used to store Color Discard Enable - * and Depth Clear Value Valid which are ignored by the DE. A CCS cache line - * corresponds to an area of 4x1 tiles in the main surface. The main surface - * pitch is required to be a multiple of 4 tile widths. - */ -#define I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC fourcc_mod_code(INTEL, 8) - -/* - * Tiled, NV12MT, grouped in 64 (pixels) x 32 (lines) -sized macroblocks - * - * Macroblocks are laid in a Z-shape, and each pixel data is following the - * standard NV12 style. - * As for NV12, an image is the result of two frame buffers: one for Y, - * one for the interleaved Cb/Cr components (1/2 the height of the Y buffer). - * Alignment requirements are (for each buffer): - * - multiple of 128 pixels for the width - * - multiple of 32 pixels for the height - * - * For more information: see https://linuxtv.org/downloads/v4l-dvb-apis/re32.html - */ -#define DRM_FORMAT_MOD_SAMSUNG_64_32_TILE fourcc_mod_code(SAMSUNG, 1) - -/* - * Tiled, 16 (pixels) x 16 (lines) - sized macroblocks - * - * This is a simple tiled layout using tiles of 16x16 pixels in a row-major - * layout. For YCbCr formats Cb/Cr components are taken in such a way that - * they correspond to their 16x16 luma block. - */ -#define DRM_FORMAT_MOD_SAMSUNG_16_16_TILE fourcc_mod_code(SAMSUNG, 2) - -/* - * Qualcomm Compressed Format - * - * Refers to a compressed variant of the base format that is compressed. - * Implementation may be platform and base-format specific. - * - * Each macrotile consists of m x n (mostly 4 x 4) tiles. - * Pixel data pitch/stride is aligned with macrotile width. - * Pixel data height is aligned with macrotile height. - * Entire pixel data buffer is aligned with 4k(bytes). - */ -#define DRM_FORMAT_MOD_QCOM_COMPRESSED fourcc_mod_code(QCOM, 1) - -/* Vivante framebuffer modifiers */ - -/* - * Vivante 4x4 tiling layout - * - * This is a simple tiled layout using tiles of 4x4 pixels in a row-major - * layout. - */ -#define DRM_FORMAT_MOD_VIVANTE_TILED fourcc_mod_code(VIVANTE, 1) - -/* - * Vivante 64x64 super-tiling layout - * - * This is a tiled layout using 64x64 pixel super-tiles, where each super-tile - * contains 8x4 groups of 2x4 tiles of 4x4 pixels (like above) each, all in row- - * major layout. - * - * For more information: see - * https://github.com/etnaviv/etna_viv/blob/master/doc/hardware.md#texture-tiling - */ -#define DRM_FORMAT_MOD_VIVANTE_SUPER_TILED fourcc_mod_code(VIVANTE, 2) - -/* - * Vivante 4x4 tiling layout for dual-pipe - * - * Same as the 4x4 tiling layout, except every second 4x4 pixel tile starts at a - * different base address. Offsets from the base addresses are therefore halved - * compared to the non-split tiled layout. - */ -#define DRM_FORMAT_MOD_VIVANTE_SPLIT_TILED fourcc_mod_code(VIVANTE, 3) - -/* - * Vivante 64x64 super-tiling layout for dual-pipe - * - * Same as the 64x64 super-tiling layout, except every second 4x4 pixel tile - * starts at a different base address. Offsets from the base addresses are - * therefore halved compared to the non-split super-tiled layout. - */ -#define DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED fourcc_mod_code(VIVANTE, 4) - -/* NVIDIA frame buffer modifiers */ - -/* - * Tegra Tiled Layout, used by Tegra 2, 3 and 4. - * - * Pixels are arranged in simple tiles of 16 x 16 bytes. - */ -#define DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED fourcc_mod_code(NVIDIA, 1) - -/* - * Generalized Block Linear layout, used by desktop GPUs starting with NV50/G80, - * and Tegra GPUs starting with Tegra K1. - * - * Pixels are arranged in Groups of Bytes (GOBs). GOB size and layout varies - * based on the architecture generation. GOBs themselves are then arranged in - * 3D blocks, with the block dimensions (in terms of GOBs) always being a power - * of two, and hence expressible as their log2 equivalent (E.g., "2" represents - * a block depth or height of "4"). - * - * Chapter 20 "Pixel Memory Formats" of the Tegra X1 TRM describes this format - * in full detail. - * - * Macro - * Bits Param Description - * ---- ----- ----------------------------------------------------------------- - * - * 3:0 h log2(height) of each block, in GOBs. Placed here for - * compatibility with the existing - * DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK()-based modifiers. - * - * 4:4 - Must be 1, to indicate block-linear layout. Necessary for - * compatibility with the existing - * DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK()-based modifiers. - * - * 8:5 - Reserved (To support 3D-surfaces with variable log2(depth) block - * size). Must be zero. - * - * Note there is no log2(width) parameter. Some portions of the - * hardware support a block width of two gobs, but it is impractical - * to use due to lack of support elsewhere, and has no known - * benefits. - * - * 11:9 - Reserved (To support 2D-array textures with variable array stride - * in blocks, specified via log2(tile width in blocks)). Must be - * zero. - * - * 19:12 k Page Kind. This value directly maps to a field in the page - * tables of all GPUs >= NV50. It affects the exact layout of bits - * in memory and can be derived from the tuple - * - * (format, GPU model, compression type, samples per pixel) - * - * Where compression type is defined below. If GPU model were - * implied by the format modifier, format, or memory buffer, page - * kind would not need to be included in the modifier itself, but - * since the modifier should define the layout of the associated - * memory buffer independent from any device or other context, it - * must be included here. - * - * 21:20 g GOB Height and Page Kind Generation. The height of a GOB changed - * starting with Fermi GPUs. Additionally, the mapping between page - * kind and bit layout has changed at various points. - * - * 0 = Gob Height 8, Fermi - Volta, Tegra K1+ Page Kind mapping - * 1 = Gob Height 4, G80 - GT2XX Page Kind mapping - * 2 = Gob Height 8, Turing+ Page Kind mapping - * 3 = Reserved for future use. - * - * 22:22 s Sector layout. On Tegra GPUs prior to Xavier, there is a further - * bit remapping step that occurs at an even lower level than the - * page kind and block linear swizzles. This causes the layout of - * surfaces mapped in those SOC's GPUs to be incompatible with the - * equivalent mapping on other GPUs in the same system. - * - * 0 = Tegra K1 - Tegra Parker/TX2 Layout. - * 1 = Desktop GPU and Tegra Xavier+ Layout - * - * 25:23 c Lossless Framebuffer Compression type. - * - * 0 = none - * 1 = ROP/3D, layout 1, exact compression format implied by Page - * Kind field - * 2 = ROP/3D, layout 2, exact compression format implied by Page - * Kind field - * 3 = CDE horizontal - * 4 = CDE vertical - * 5 = Reserved for future use - * 6 = Reserved for future use - * 7 = Reserved for future use - * - * 55:25 - Reserved for future use. Must be zero. - */ -#define DRM_FORMAT_MOD_NVIDIA_BLOCK_LINEAR_2D(c, s, g, k, h) \ - fourcc_mod_code(NVIDIA, (0x10 | \ - ((h) & 0xf) | \ - (((k) & 0xff) << 12) | \ - (((g) & 0x3) << 20) | \ - (((s) & 0x1) << 22) | \ - (((c) & 0x7) << 23))) - -/* To grandfather in prior block linear format modifiers to the above layout, - * the page kind "0", which corresponds to "pitch/linear" and hence is unusable - * with block-linear layouts, is remapped within drivers to the value 0xfe, - * which corresponds to the "generic" kind used for simple single-sample - * uncompressed color formats on Fermi - Volta GPUs. - */ -static __inline__ __u64 -drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier) -{ - if (!(modifier & 0x10) || (modifier & (0xff << 12))) - return modifier; - else - return modifier | (0xfe << 12); -} - -/* - * 16Bx2 Block Linear layout, used by Tegra K1 and later - * - * Pixels are arranged in 64x8 Groups Of Bytes (GOBs). GOBs are then stacked - * vertically by a power of 2 (1 to 32 GOBs) to form a block. - * - * Within a GOB, data is ordered as 16B x 2 lines sectors laid in Z-shape. - * - * Parameter 'v' is the log2 encoding of the number of GOBs stacked vertically. - * Valid values are: - * - * 0 == ONE_GOB - * 1 == TWO_GOBS - * 2 == FOUR_GOBS - * 3 == EIGHT_GOBS - * 4 == SIXTEEN_GOBS - * 5 == THIRTYTWO_GOBS - * - * Chapter 20 "Pixel Memory Formats" of the Tegra X1 TRM describes this format - * in full detail. - */ -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(v) \ - DRM_FORMAT_MOD_NVIDIA_BLOCK_LINEAR_2D(0, 0, 0, 0, (v)) - -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(0) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(1) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(2) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(3) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(4) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(5) - -/* - * Some Broadcom modifiers take parameters, for example the number of - * vertical lines in the image. Reserve the lower 32 bits for modifier - * type, and the next 24 bits for parameters. Top 8 bits are the - * vendor code. - */ -#define __fourcc_mod_broadcom_param_shift 8 -#define __fourcc_mod_broadcom_param_bits 48 -#define fourcc_mod_broadcom_code(val, params) \ - fourcc_mod_code(BROADCOM, ((((__u64)params) << __fourcc_mod_broadcom_param_shift) | val)) -#define fourcc_mod_broadcom_param(m) \ - ((int)(((m) >> __fourcc_mod_broadcom_param_shift) & \ - ((1ULL << __fourcc_mod_broadcom_param_bits) - 1))) -#define fourcc_mod_broadcom_mod(m) \ - ((m) & ~(((1ULL << __fourcc_mod_broadcom_param_bits) - 1) << \ - __fourcc_mod_broadcom_param_shift)) - -/* - * Broadcom VC4 "T" format - * - * This is the primary layout that the V3D GPU can texture from (it - * can't do linear). The T format has: - * - * - 64b utiles of pixels in a raster-order grid according to cpp. It's 4x4 - * pixels at 32 bit depth. - * - * - 1k subtiles made of a 4x4 raster-order grid of 64b utiles (so usually - * 16x16 pixels). - * - * - 4k tiles made of a 2x2 grid of 1k subtiles (so usually 32x32 pixels). On - * even 4k tile rows, they're arranged as (BL, TL, TR, BR), and on odd rows - * they're (TR, BR, BL, TL), where bottom left is start of memory. - * - * - an image made of 4k tiles in rows either left-to-right (even rows of 4k - * tiles) or right-to-left (odd rows of 4k tiles). - */ -#define DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED fourcc_mod_code(BROADCOM, 1) - -/* - * Broadcom SAND format - * - * This is the native format that the H.264 codec block uses. For VC4 - * HVS, it is only valid for H.264 (NV12/21) and RGBA modes. - * - * The image can be considered to be split into columns, and the - * columns are placed consecutively into memory. The width of those - * columns can be either 32, 64, 128, or 256 pixels, but in practice - * only 128 pixel columns are used. - * - * The pitch between the start of each column is set to optimally - * switch between SDRAM banks. This is passed as the number of lines - * of column width in the modifier (we can't use the stride value due - * to various core checks that look at it , so you should set the - * stride to width*cpp). - * - * Note that the column height for this format modifier is the same - * for all of the planes, assuming that each column contains both Y - * and UV. Some SAND-using hardware stores UV in a separate tiled - * image from Y to reduce the column height, which is not supported - * with these modifiers. - */ - -#define DRM_FORMAT_MOD_BROADCOM_SAND32_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(2, v) -#define DRM_FORMAT_MOD_BROADCOM_SAND64_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(3, v) -#define DRM_FORMAT_MOD_BROADCOM_SAND128_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(4, v) -#define DRM_FORMAT_MOD_BROADCOM_SAND256_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(5, v) - -#define DRM_FORMAT_MOD_BROADCOM_SAND32 \ - DRM_FORMAT_MOD_BROADCOM_SAND32_COL_HEIGHT(0) -#define DRM_FORMAT_MOD_BROADCOM_SAND64 \ - DRM_FORMAT_MOD_BROADCOM_SAND64_COL_HEIGHT(0) -#define DRM_FORMAT_MOD_BROADCOM_SAND128 \ - DRM_FORMAT_MOD_BROADCOM_SAND128_COL_HEIGHT(0) -#define DRM_FORMAT_MOD_BROADCOM_SAND256 \ - DRM_FORMAT_MOD_BROADCOM_SAND256_COL_HEIGHT(0) - -/* Broadcom UIF format - * - * This is the common format for the current Broadcom multimedia - * blocks, including V3D 3.x and newer, newer video codecs, and - * displays. - * - * The image consists of utiles (64b blocks), UIF blocks (2x2 utiles), - * and macroblocks (4x4 UIF blocks). Those 4x4 UIF block groups are - * stored in columns, with padding between the columns to ensure that - * moving from one column to the next doesn't hit the same SDRAM page - * bank. - * - * To calculate the padding, it is assumed that each hardware block - * and the software driving it knows the platform's SDRAM page size, - * number of banks, and XOR address, and that it's identical between - * all blocks using the format. This tiling modifier will use XOR as - * necessary to reduce the padding. If a hardware block can't do XOR, - * the assumption is that a no-XOR tiling modifier will be created. - */ -#define DRM_FORMAT_MOD_BROADCOM_UIF fourcc_mod_code(BROADCOM, 6) - -/* - * Arm Framebuffer Compression (AFBC) modifiers - * - * AFBC is a proprietary lossless image compression protocol and format. - * It provides fine-grained random access and minimizes the amount of data - * transferred between IP blocks. - * - * AFBC has several features which may be supported and/or used, which are - * represented using bits in the modifier. Not all combinations are valid, - * and different devices or use-cases may support different combinations. - * - * Further information on the use of AFBC modifiers can be found in - * Documentation/gpu/afbc.rst - */ - -/* - * The top 4 bits (out of the 56 bits alloted for specifying vendor specific - * modifiers) denote the category for modifiers. Currently we have three - * categories of modifiers ie AFBC, MISC and AFRC. We can have a maximum of - * sixteen different categories. - */ -#define DRM_FORMAT_MOD_ARM_CODE(__type, __val) \ - fourcc_mod_code(ARM, ((__u64)(__type) << 52) | ((__val) & 0x000fffffffffffffULL)) - -#define DRM_FORMAT_MOD_ARM_TYPE_AFBC 0x00 -#define DRM_FORMAT_MOD_ARM_TYPE_MISC 0x01 - -#define DRM_FORMAT_MOD_ARM_AFBC(__afbc_mode) \ - DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_AFBC, __afbc_mode) - -/* - * AFBC superblock size - * - * Indicates the superblock size(s) used for the AFBC buffer. The buffer - * size (in pixels) must be aligned to a multiple of the superblock size. - * Four lowest significant bits(LSBs) are reserved for block size. - * - * Where one superblock size is specified, it applies to all planes of the - * buffer (e.g. 16x16, 32x8). When multiple superblock sizes are specified, - * the first applies to the Luma plane and the second applies to the Chroma - * plane(s). e.g. (32x8_64x4 means 32x8 Luma, with 64x4 Chroma). - * Multiple superblock sizes are only valid for multi-plane YCbCr formats. - */ -#define AFBC_FORMAT_MOD_BLOCK_SIZE_MASK 0xf -#define AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 (1ULL) -#define AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 (2ULL) -#define AFBC_FORMAT_MOD_BLOCK_SIZE_64x4 (3ULL) -#define AFBC_FORMAT_MOD_BLOCK_SIZE_32x8_64x4 (4ULL) - -/* - * AFBC lossless colorspace transform - * - * Indicates that the buffer makes use of the AFBC lossless colorspace - * transform. - */ -#define AFBC_FORMAT_MOD_YTR (1ULL << 4) - -/* - * AFBC block-split - * - * Indicates that the payload of each superblock is split. The second - * half of the payload is positioned at a predefined offset from the start - * of the superblock payload. - */ -#define AFBC_FORMAT_MOD_SPLIT (1ULL << 5) - -/* - * AFBC sparse layout - * - * This flag indicates that the payload of each superblock must be stored at a - * predefined position relative to the other superblocks in the same AFBC - * buffer. This order is the same order used by the header buffer. In this mode - * each superblock is given the same amount of space as an uncompressed - * superblock of the particular format would require, rounding up to the next - * multiple of 128 bytes in size. - */ -#define AFBC_FORMAT_MOD_SPARSE (1ULL << 6) - -/* - * AFBC copy-block restrict - * - * Buffers with this flag must obey the copy-block restriction. The restriction - * is such that there are no copy-blocks referring across the border of 8x8 - * blocks. For the subsampled data the 8x8 limitation is also subsampled. - */ -#define AFBC_FORMAT_MOD_CBR (1ULL << 7) - -/* - * AFBC tiled layout - * - * The tiled layout groups superblocks in 8x8 or 4x4 tiles, where all - * superblocks inside a tile are stored together in memory. 8x8 tiles are used - * for pixel formats up to and including 32 bpp while 4x4 tiles are used for - * larger bpp formats. The order between the tiles is scan line. - * When the tiled layout is used, the buffer size (in pixels) must be aligned - * to the tile size. - */ -#define AFBC_FORMAT_MOD_TILED (1ULL << 8) - -/* - * AFBC solid color blocks - * - * Indicates that the buffer makes use of solid-color blocks, whereby bandwidth - * can be reduced if a whole superblock is a single color. - */ -#define AFBC_FORMAT_MOD_SC (1ULL << 9) - -/* - * AFBC double-buffer - * - * Indicates that the buffer is allocated in a layout safe for front-buffer - * rendering. - */ -#define AFBC_FORMAT_MOD_DB (1ULL << 10) - -/* - * AFBC buffer content hints - * - * Indicates that the buffer includes per-superblock content hints. - */ -#define AFBC_FORMAT_MOD_BCH (1ULL << 11) - -/* AFBC uncompressed storage mode - * - * Indicates that the buffer is using AFBC uncompressed storage mode. - * In this mode all superblock payloads in the buffer use the uncompressed - * storage mode, which is usually only used for data which cannot be compressed. - * The buffer layout is the same as for AFBC buffers without USM set, this only - * affects the storage mode of the individual superblocks. Note that even a - * buffer without USM set may use uncompressed storage mode for some or all - * superblocks, USM just guarantees it for all. - */ -#define AFBC_FORMAT_MOD_USM (1ULL << 12) - -/* - * Arm Fixed-Rate Compression (AFRC) modifiers - * - * AFRC is a proprietary fixed rate image compression protocol and format, - * designed to provide guaranteed bandwidth and memory footprint - * reductions in graphics and media use-cases. - * - * AFRC buffers consist of one or more planes, with the same components - * and meaning as an uncompressed buffer using the same pixel format. - * - * Within each plane, the pixel/luma/chroma values are grouped into - * "coding unit" blocks which are individually compressed to a - * fixed size (in bytes). All coding units within a given plane of a buffer - * store the same number of values, and have the same compressed size. - * - * The coding unit size is configurable, allowing different rates of compression. - * - * The start of each AFRC buffer plane must be aligned to an alignment granule which - * depends on the coding unit size. - * - * Coding Unit Size Plane Alignment - * ---------------- --------------- - * 16 bytes 1024 bytes - * 24 bytes 512 bytes - * 32 bytes 2048 bytes - * - * Coding units are grouped into paging tiles. AFRC buffer dimensions must be aligned - * to a multiple of the paging tile dimensions. - * The dimensions of each paging tile depend on whether the buffer is optimised for - * scanline (SCAN layout) or rotated (ROT layout) access. - * - * Layout Paging Tile Width Paging Tile Height - * ------ ----------------- ------------------ - * SCAN 16 coding units 4 coding units - * ROT 8 coding units 8 coding units - * - * The dimensions of each coding unit depend on the number of components - * in the compressed plane and whether the buffer is optimised for - * scanline (SCAN layout) or rotated (ROT layout) access. - * - * Number of Components in Plane Layout Coding Unit Width Coding Unit Height - * ----------------------------- --------- ----------------- ------------------ - * 1 SCAN 16 samples 4 samples - * Example: 16x4 luma samples in a 'Y' plane - * 16x4 chroma 'V' values, in the 'V' plane of a fully-planar YUV buffer - * ----------------------------- --------- ----------------- ------------------ - * 1 ROT 8 samples 8 samples - * Example: 8x8 luma samples in a 'Y' plane - * 8x8 chroma 'V' values, in the 'V' plane of a fully-planar YUV buffer - * ----------------------------- --------- ----------------- ------------------ - * 2 DONT CARE 8 samples 4 samples - * Example: 8x4 chroma pairs in the 'UV' plane of a semi-planar YUV buffer - * ----------------------------- --------- ----------------- ------------------ - * 3 DONT CARE 4 samples 4 samples - * Example: 4x4 pixels in an RGB buffer without alpha - * ----------------------------- --------- ----------------- ------------------ - * 4 DONT CARE 4 samples 4 samples - * Example: 4x4 pixels in an RGB buffer with alpha - */ - -#define DRM_FORMAT_MOD_ARM_TYPE_AFRC 0x02 - -#define DRM_FORMAT_MOD_ARM_AFRC(__afrc_mode) \ - DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_AFRC, __afrc_mode) - -/* - * AFRC coding unit size modifier. - * - * Indicates the number of bytes used to store each compressed coding unit for - * one or more planes in an AFRC encoded buffer. The coding unit size for chrominance - * is the same for both Cb and Cr, which may be stored in separate planes. - * - * AFRC_FORMAT_MOD_CU_SIZE_P0 indicates the number of bytes used to store - * each compressed coding unit in the first plane of the buffer. For RGBA buffers - * this is the only plane, while for semi-planar and fully-planar YUV buffers, - * this corresponds to the luma plane. - * - * AFRC_FORMAT_MOD_CU_SIZE_P12 indicates the number of bytes used to store - * each compressed coding unit in the second and third planes in the buffer. - * For semi-planar and fully-planar YUV buffers, this corresponds to the chroma plane(s). - * - * For single-plane buffers, AFRC_FORMAT_MOD_CU_SIZE_P0 must be specified - * and AFRC_FORMAT_MOD_CU_SIZE_P12 must be zero. - * For semi-planar and fully-planar buffers, both AFRC_FORMAT_MOD_CU_SIZE_P0 and - * AFRC_FORMAT_MOD_CU_SIZE_P12 must be specified. - */ -#define AFRC_FORMAT_MOD_CU_SIZE_MASK 0xf -#define AFRC_FORMAT_MOD_CU_SIZE_16 (1ULL) -#define AFRC_FORMAT_MOD_CU_SIZE_24 (2ULL) -#define AFRC_FORMAT_MOD_CU_SIZE_32 (3ULL) - -#define AFRC_FORMAT_MOD_CU_SIZE_P0(__afrc_cu_size) (__afrc_cu_size) -#define AFRC_FORMAT_MOD_CU_SIZE_P12(__afrc_cu_size) ((__afrc_cu_size) << 4) - -/* - * AFRC scanline memory layout. - * - * Indicates if the buffer uses the scanline-optimised layout - * for an AFRC encoded buffer, otherwise, it uses the rotation-optimised layout. - * The memory layout is the same for all planes. - */ -#define AFRC_FORMAT_MOD_LAYOUT_SCAN (1ULL << 8) - -/* - * Arm 16x16 Block U-Interleaved modifier - * - * This is used by Arm Mali Utgard and Midgard GPUs. It divides the image - * into 16x16 pixel blocks. Blocks are stored linearly in order, but pixels - * in the block are reordered. - */ -#define DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED \ - DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_MISC, 1ULL) - -/* - * Allwinner tiled modifier - * - * This tiling mode is implemented by the VPU found on all Allwinner platforms, - * codenamed sunxi. It is associated with a YUV format that uses either 2 or 3 - * planes. - * - * With this tiling, the luminance samples are disposed in tiles representing - * 32x32 pixels and the chrominance samples in tiles representing 32x64 pixels. - * The pixel order in each tile is linear and the tiles are disposed linearly, - * both in row-major order. - */ -#define DRM_FORMAT_MOD_ALLWINNER_TILED fourcc_mod_code(ALLWINNER, 1) - -/* - * Amlogic Video Framebuffer Compression modifiers - * - * Amlogic uses a proprietary lossless image compression protocol and format - * for their hardware video codec accelerators, either video decoders or - * video input encoders. - * - * It considerably reduces memory bandwidth while writing and reading - * frames in memory. - * - * The underlying storage is considered to be 3 components, 8bit or 10-bit - * per component YCbCr 420, single plane : - * - DRM_FORMAT_YUV420_8BIT - * - DRM_FORMAT_YUV420_10BIT - * - * The first 8 bits of the mode defines the layout, then the following 8 bits - * defines the options changing the layout. - * - * Not all combinations are valid, and different SoCs may support different - * combinations of layout and options. - */ -#define __fourcc_mod_amlogic_layout_mask 0xff -#define __fourcc_mod_amlogic_options_shift 8 -#define __fourcc_mod_amlogic_options_mask 0xff - -#define DRM_FORMAT_MOD_AMLOGIC_FBC(__layout, __options) \ - fourcc_mod_code(AMLOGIC, \ - ((__layout) & __fourcc_mod_amlogic_layout_mask) | \ - (((__options) & __fourcc_mod_amlogic_options_mask) \ - << __fourcc_mod_amlogic_options_shift)) - -/* Amlogic FBC Layouts */ - -/* - * Amlogic FBC Basic Layout - * - * The basic layout is composed of: - * - a body content organized in 64x32 superblocks with 4096 bytes per - * superblock in default mode. - * - a 32 bytes per 128x64 header block - * - * This layout is transferrable between Amlogic SoCs supporting this modifier. - */ -#define AMLOGIC_FBC_LAYOUT_BASIC (1ULL) - -/* - * Amlogic FBC Scatter Memory layout - * - * Indicates the header contains IOMMU references to the compressed - * frames content to optimize memory access and layout. - * - * In this mode, only the header memory address is needed, thus the - * content memory organization is tied to the current producer - * execution and cannot be saved/dumped neither transferrable between - * Amlogic SoCs supporting this modifier. - * - * Due to the nature of the layout, these buffers are not expected to - * be accessible by the user-space clients, but only accessible by the - * hardware producers and consumers. - * - * The user-space clients should expect a failure while trying to mmap - * the DMA-BUF handle returned by the producer. - */ -#define AMLOGIC_FBC_LAYOUT_SCATTER (2ULL) - -/* Amlogic FBC Layout Options Bit Mask */ - -/* - * Amlogic FBC Memory Saving mode - * - * Indicates the storage is packed when pixel size is multiple of word - * boudaries, i.e. 8bit should be stored in this mode to save allocation - * memory. - * - * This mode reduces body layout to 3072 bytes per 64x32 superblock with - * the basic layout and 3200 bytes per 64x32 superblock combined with - * the scatter layout. - */ -#define AMLOGIC_FBC_OPTION_MEM_SAVING (1ULL << 0) - -/* - * AMD modifiers - * - * Memory layout: - * - * without DCC: - * - main surface - * - * with DCC & without DCC_RETILE: - * - main surface in plane 0 - * - DCC surface in plane 1 (RB-aligned, pipe-aligned if DCC_PIPE_ALIGN is set) - * - * with DCC & DCC_RETILE: - * - main surface in plane 0 - * - displayable DCC surface in plane 1 (not RB-aligned & not pipe-aligned) - * - pipe-aligned DCC surface in plane 2 (RB-aligned & pipe-aligned) - * - * For multi-plane formats the above surfaces get merged into one plane for - * each format plane, based on the required alignment only. - * - * Bits Parameter Notes - * ----- ------------------------ --------------------------------------------- - * - * 7:0 TILE_VERSION Values are AMD_FMT_MOD_TILE_VER_* - * 12:8 TILE Values are AMD_FMT_MOD_TILE__* - * 13 DCC - * 14 DCC_RETILE - * 15 DCC_PIPE_ALIGN - * 16 DCC_INDEPENDENT_64B - * 17 DCC_INDEPENDENT_128B - * 19:18 DCC_MAX_COMPRESSED_BLOCK Values are AMD_FMT_MOD_DCC_BLOCK_* - * 20 DCC_CONSTANT_ENCODE - * 23:21 PIPE_XOR_BITS Only for some chips - * 26:24 BANK_XOR_BITS Only for some chips - * 29:27 PACKERS Only for some chips - * 32:30 RB Only for some chips - * 35:33 PIPE Only for some chips - * 55:36 - Reserved for future use, must be zero - */ -#define AMD_FMT_MOD fourcc_mod_code(AMD, 0) - -#define IS_AMD_FMT_MOD(val) (((val) >> 56) == DRM_FORMAT_MOD_VENDOR_AMD) - -/* Reserve 0 for GFX8 and older */ -#define AMD_FMT_MOD_TILE_VER_GFX9 1 -#define AMD_FMT_MOD_TILE_VER_GFX10 2 -#define AMD_FMT_MOD_TILE_VER_GFX10_RBPLUS 3 - -/* - * 64K_S is the same for GFX9/GFX10/GFX10_RBPLUS and hence has GFX9 as canonical - * version. - */ -#define AMD_FMT_MOD_TILE_GFX9_64K_S 9 - -/* - * 64K_D for non-32 bpp is the same for GFX9/GFX10/GFX10_RBPLUS and hence has - * GFX9 as canonical version. - */ -#define AMD_FMT_MOD_TILE_GFX9_64K_D 10 -#define AMD_FMT_MOD_TILE_GFX9_64K_S_X 25 -#define AMD_FMT_MOD_TILE_GFX9_64K_D_X 26 -#define AMD_FMT_MOD_TILE_GFX9_64K_R_X 27 - -#define AMD_FMT_MOD_DCC_BLOCK_64B 0 -#define AMD_FMT_MOD_DCC_BLOCK_128B 1 -#define AMD_FMT_MOD_DCC_BLOCK_256B 2 - -#define AMD_FMT_MOD_TILE_VERSION_SHIFT 0 -#define AMD_FMT_MOD_TILE_VERSION_MASK 0xFF -#define AMD_FMT_MOD_TILE_SHIFT 8 -#define AMD_FMT_MOD_TILE_MASK 0x1F - -/* Whether DCC compression is enabled. */ -#define AMD_FMT_MOD_DCC_SHIFT 13 -#define AMD_FMT_MOD_DCC_MASK 0x1 - -/* - * Whether to include two DCC surfaces, one which is rb & pipe aligned, and - * one which is not-aligned. - */ -#define AMD_FMT_MOD_DCC_RETILE_SHIFT 14 -#define AMD_FMT_MOD_DCC_RETILE_MASK 0x1 - -/* Only set if DCC_RETILE = false */ -#define AMD_FMT_MOD_DCC_PIPE_ALIGN_SHIFT 15 -#define AMD_FMT_MOD_DCC_PIPE_ALIGN_MASK 0x1 - -#define AMD_FMT_MOD_DCC_INDEPENDENT_64B_SHIFT 16 -#define AMD_FMT_MOD_DCC_INDEPENDENT_64B_MASK 0x1 -#define AMD_FMT_MOD_DCC_INDEPENDENT_128B_SHIFT 17 -#define AMD_FMT_MOD_DCC_INDEPENDENT_128B_MASK 0x1 -#define AMD_FMT_MOD_DCC_MAX_COMPRESSED_BLOCK_SHIFT 18 -#define AMD_FMT_MOD_DCC_MAX_COMPRESSED_BLOCK_MASK 0x3 - -/* - * DCC supports embedding some clear colors directly in the DCC surface. - * However, on older GPUs the rendering HW ignores the embedded clear color - * and prefers the driver provided color. This necessitates doing a fastclear - * eliminate operation before a process transfers control. - * - * If this bit is set that means the fastclear eliminate is not needed for these - * embeddable colors. - */ -#define AMD_FMT_MOD_DCC_CONSTANT_ENCODE_SHIFT 20 -#define AMD_FMT_MOD_DCC_CONSTANT_ENCODE_MASK 0x1 - -/* - * The below fields are for accounting for per GPU differences. These are only - * relevant for GFX9 and later and if the tile field is *_X/_T. - * - * PIPE_XOR_BITS = always needed - * BANK_XOR_BITS = only for TILE_VER_GFX9 - * PACKERS = only for TILE_VER_GFX10_RBPLUS - * RB = only for TILE_VER_GFX9 & DCC - * PIPE = only for TILE_VER_GFX9 & DCC & (DCC_RETILE | DCC_PIPE_ALIGN) - */ -#define AMD_FMT_MOD_PIPE_XOR_BITS_SHIFT 21 -#define AMD_FMT_MOD_PIPE_XOR_BITS_MASK 0x7 -#define AMD_FMT_MOD_BANK_XOR_BITS_SHIFT 24 -#define AMD_FMT_MOD_BANK_XOR_BITS_MASK 0x7 -#define AMD_FMT_MOD_PACKERS_SHIFT 27 -#define AMD_FMT_MOD_PACKERS_MASK 0x7 -#define AMD_FMT_MOD_RB_SHIFT 30 -#define AMD_FMT_MOD_RB_MASK 0x7 -#define AMD_FMT_MOD_PIPE_SHIFT 33 -#define AMD_FMT_MOD_PIPE_MASK 0x7 - -#define AMD_FMT_MOD_SET(field, value) \ - ((uint64_t)(value) << AMD_FMT_MOD_##field##_SHIFT) -#define AMD_FMT_MOD_GET(field, value) \ - (((value) >> AMD_FMT_MOD_##field##_SHIFT) & AMD_FMT_MOD_##field##_MASK) -#define AMD_FMT_MOD_CLEAR(field) \ - (~((uint64_t)AMD_FMT_MOD_##field##_MASK << AMD_FMT_MOD_##field##_SHIFT)) - -#if defined(__cplusplus) -} -#endif - -#endif /* DRM_FOURCC_H */ diff --git a/prebuilts/x86/include/libdrm/drm_mode.h b/prebuilts/x86/include/libdrm/drm_mode.h deleted file mode 100644 index 9b6722d..0000000 --- a/prebuilts/x86/include/libdrm/drm_mode.h +++ /dev/null @@ -1,1129 +0,0 @@ -/* - * Copyright (c) 2007 Dave Airlie - * Copyright (c) 2007 Jakob Bornecrantz - * Copyright (c) 2008 Red Hat Inc. - * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA - * Copyright (c) 2007-2008 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef _DRM_MODE_H -#define _DRM_MODE_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/** - * DOC: overview - * - * DRM exposes many UAPI and structure definition to have a consistent - * and standardized interface with user. - * Userspace can refer to these structure definitions and UAPI formats - * to communicate to driver - */ - -#define DRM_CONNECTOR_NAME_LEN 32 -#define DRM_DISPLAY_MODE_LEN 32 -#define DRM_PROP_NAME_LEN 32 - -#define DRM_MODE_TYPE_BUILTIN (1<<0) /* deprecated */ -#define DRM_MODE_TYPE_CLOCK_C ((1<<1) | DRM_MODE_TYPE_BUILTIN) /* deprecated */ -#define DRM_MODE_TYPE_CRTC_C ((1<<2) | DRM_MODE_TYPE_BUILTIN) /* deprecated */ -#define DRM_MODE_TYPE_PREFERRED (1<<3) -#define DRM_MODE_TYPE_DEFAULT (1<<4) /* deprecated */ -#define DRM_MODE_TYPE_USERDEF (1<<5) -#define DRM_MODE_TYPE_DRIVER (1<<6) - -#define DRM_MODE_TYPE_ALL (DRM_MODE_TYPE_PREFERRED | \ - DRM_MODE_TYPE_USERDEF | \ - DRM_MODE_TYPE_DRIVER) - -/* Video mode flags */ -/* bit compatible with the xrandr RR_ definitions (bits 0-13) - * - * ABI warning: Existing userspace really expects - * the mode flags to match the xrandr definitions. Any - * changes that don't match the xrandr definitions will - * likely need a new client cap or some other mechanism - * to avoid breaking existing userspace. This includes - * allocating new flags in the previously unused bits! - */ -#define DRM_MODE_FLAG_PHSYNC (1<<0) -#define DRM_MODE_FLAG_NHSYNC (1<<1) -#define DRM_MODE_FLAG_PVSYNC (1<<2) -#define DRM_MODE_FLAG_NVSYNC (1<<3) -#define DRM_MODE_FLAG_INTERLACE (1<<4) -#define DRM_MODE_FLAG_DBLSCAN (1<<5) -#define DRM_MODE_FLAG_CSYNC (1<<6) -#define DRM_MODE_FLAG_PCSYNC (1<<7) -#define DRM_MODE_FLAG_NCSYNC (1<<8) -#define DRM_MODE_FLAG_HSKEW (1<<9) /* hskew provided */ -#define DRM_MODE_FLAG_BCAST (1<<10) /* deprecated */ -#define DRM_MODE_FLAG_PIXMUX (1<<11) /* deprecated */ -#define DRM_MODE_FLAG_DBLCLK (1<<12) -#define DRM_MODE_FLAG_CLKDIV2 (1<<13) - /* - * When adding a new stereo mode don't forget to adjust DRM_MODE_FLAGS_3D_MAX - * (define not exposed to user space). - */ -#define DRM_MODE_FLAG_3D_MASK (0x1f<<14) -#define DRM_MODE_FLAG_3D_NONE (0<<14) -#define DRM_MODE_FLAG_3D_FRAME_PACKING (1<<14) -#define DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE (2<<14) -#define DRM_MODE_FLAG_3D_LINE_ALTERNATIVE (3<<14) -#define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL (4<<14) -#define DRM_MODE_FLAG_3D_L_DEPTH (5<<14) -#define DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH (6<<14) -#define DRM_MODE_FLAG_3D_TOP_AND_BOTTOM (7<<14) -#define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF (8<<14) - -/* Picture aspect ratio options */ -#define DRM_MODE_PICTURE_ASPECT_NONE 0 -#define DRM_MODE_PICTURE_ASPECT_4_3 1 -#define DRM_MODE_PICTURE_ASPECT_16_9 2 -#define DRM_MODE_PICTURE_ASPECT_64_27 3 -#define DRM_MODE_PICTURE_ASPECT_256_135 4 - -/* Content type options */ -#define DRM_MODE_CONTENT_TYPE_NO_DATA 0 -#define DRM_MODE_CONTENT_TYPE_GRAPHICS 1 -#define DRM_MODE_CONTENT_TYPE_PHOTO 2 -#define DRM_MODE_CONTENT_TYPE_CINEMA 3 -#define DRM_MODE_CONTENT_TYPE_GAME 4 - -/* Aspect ratio flag bitmask (4 bits 22:19) */ -#define DRM_MODE_FLAG_PIC_AR_MASK (0x0F<<19) -#define DRM_MODE_FLAG_PIC_AR_NONE \ - (DRM_MODE_PICTURE_ASPECT_NONE<<19) -#define DRM_MODE_FLAG_PIC_AR_4_3 \ - (DRM_MODE_PICTURE_ASPECT_4_3<<19) -#define DRM_MODE_FLAG_PIC_AR_16_9 \ - (DRM_MODE_PICTURE_ASPECT_16_9<<19) -#define DRM_MODE_FLAG_PIC_AR_64_27 \ - (DRM_MODE_PICTURE_ASPECT_64_27<<19) -#define DRM_MODE_FLAG_PIC_AR_256_135 \ - (DRM_MODE_PICTURE_ASPECT_256_135<<19) - -#define DRM_MODE_FLAG_ALL (DRM_MODE_FLAG_PHSYNC | \ - DRM_MODE_FLAG_NHSYNC | \ - DRM_MODE_FLAG_PVSYNC | \ - DRM_MODE_FLAG_NVSYNC | \ - DRM_MODE_FLAG_INTERLACE | \ - DRM_MODE_FLAG_DBLSCAN | \ - DRM_MODE_FLAG_CSYNC | \ - DRM_MODE_FLAG_PCSYNC | \ - DRM_MODE_FLAG_NCSYNC | \ - DRM_MODE_FLAG_HSKEW | \ - DRM_MODE_FLAG_DBLCLK | \ - DRM_MODE_FLAG_CLKDIV2 | \ - DRM_MODE_FLAG_3D_MASK) - -/* DPMS flags */ -/* bit compatible with the xorg definitions. */ -#define DRM_MODE_DPMS_ON 0 -#define DRM_MODE_DPMS_STANDBY 1 -#define DRM_MODE_DPMS_SUSPEND 2 -#define DRM_MODE_DPMS_OFF 3 - -/* Scaling mode options */ -#define DRM_MODE_SCALE_NONE 0 /* Unmodified timing (display or - software can still scale) */ -#define DRM_MODE_SCALE_FULLSCREEN 1 /* Full screen, ignore aspect */ -#define DRM_MODE_SCALE_CENTER 2 /* Centered, no scaling */ -#define DRM_MODE_SCALE_ASPECT 3 /* Full screen, preserve aspect */ - -/* Dithering mode options */ -#define DRM_MODE_DITHERING_OFF 0 -#define DRM_MODE_DITHERING_ON 1 -#define DRM_MODE_DITHERING_AUTO 2 - -/* Dirty info options */ -#define DRM_MODE_DIRTY_OFF 0 -#define DRM_MODE_DIRTY_ON 1 -#define DRM_MODE_DIRTY_ANNOTATE 2 - -/* Link Status options */ -#define DRM_MODE_LINK_STATUS_GOOD 0 -#define DRM_MODE_LINK_STATUS_BAD 1 - -/* - * DRM_MODE_ROTATE_ - * - * Signals that a drm plane is been rotated degrees in counter - * clockwise direction. - * - * This define is provided as a convenience, looking up the property id - * using the name->prop id lookup is the preferred method. - */ -#define DRM_MODE_ROTATE_0 (1<<0) -#define DRM_MODE_ROTATE_90 (1<<1) -#define DRM_MODE_ROTATE_180 (1<<2) -#define DRM_MODE_ROTATE_270 (1<<3) - -/* - * DRM_MODE_ROTATE_MASK - * - * Bitmask used to look for drm plane rotations. - */ -#define DRM_MODE_ROTATE_MASK (\ - DRM_MODE_ROTATE_0 | \ - DRM_MODE_ROTATE_90 | \ - DRM_MODE_ROTATE_180 | \ - DRM_MODE_ROTATE_270) - -/* - * DRM_MODE_REFLECT_ - * - * Signals that the contents of a drm plane is reflected along the axis, - * in the same way as mirroring. - * See kerneldoc chapter "Plane Composition Properties" for more details. - * - * This define is provided as a convenience, looking up the property id - * using the name->prop id lookup is the preferred method. - */ -#define DRM_MODE_REFLECT_X (1<<4) -#define DRM_MODE_REFLECT_Y (1<<5) - -/* - * DRM_MODE_REFLECT_MASK - * - * Bitmask used to look for drm plane reflections. - */ -#define DRM_MODE_REFLECT_MASK (\ - DRM_MODE_REFLECT_X | \ - DRM_MODE_REFLECT_Y) - -/* Content Protection Flags */ -#define DRM_MODE_CONTENT_PROTECTION_UNDESIRED 0 -#define DRM_MODE_CONTENT_PROTECTION_DESIRED 1 -#define DRM_MODE_CONTENT_PROTECTION_ENABLED 2 - -/** - * struct drm_mode_modeinfo - Display mode information. - * @clock: pixel clock in kHz - * @hdisplay: horizontal display size - * @hsync_start: horizontal sync start - * @hsync_end: horizontal sync end - * @htotal: horizontal total size - * @hskew: horizontal skew - * @vdisplay: vertical display size - * @vsync_start: vertical sync start - * @vsync_end: vertical sync end - * @vtotal: vertical total size - * @vscan: vertical scan - * @vrefresh: approximate vertical refresh rate in Hz - * @flags: bitmask of misc. flags, see DRM_MODE_FLAG_* defines - * @type: bitmask of type flags, see DRM_MODE_TYPE_* defines - * @name: string describing the mode resolution - * - * This is the user-space API display mode information structure. For the - * kernel version see struct drm_display_mode. - */ -struct drm_mode_modeinfo { - __u32 clock; - __u16 hdisplay; - __u16 hsync_start; - __u16 hsync_end; - __u16 htotal; - __u16 hskew; - __u16 vdisplay; - __u16 vsync_start; - __u16 vsync_end; - __u16 vtotal; - __u16 vscan; - - __u32 vrefresh; - - __u32 flags; - __u32 type; - char name[DRM_DISPLAY_MODE_LEN]; -}; - -struct drm_mode_card_res { - __u64 fb_id_ptr; - __u64 crtc_id_ptr; - __u64 connector_id_ptr; - __u64 encoder_id_ptr; - __u32 count_fbs; - __u32 count_crtcs; - __u32 count_connectors; - __u32 count_encoders; - __u32 min_width; - __u32 max_width; - __u32 min_height; - __u32 max_height; -}; - -struct drm_mode_crtc { - __u64 set_connectors_ptr; - __u32 count_connectors; - - __u32 crtc_id; /**< Id */ - __u32 fb_id; /**< Id of framebuffer */ - - __u32 x; /**< x Position on the framebuffer */ - __u32 y; /**< y Position on the framebuffer */ - - __u32 gamma_size; - __u32 mode_valid; - struct drm_mode_modeinfo mode; -}; - -#define DRM_MODE_PRESENT_TOP_FIELD (1<<0) -#define DRM_MODE_PRESENT_BOTTOM_FIELD (1<<1) - -/* Planes blend with or override other bits on the CRTC */ -struct drm_mode_set_plane { - __u32 plane_id; - __u32 crtc_id; - __u32 fb_id; /* fb object contains surface format type */ - __u32 flags; /* see above flags */ - - /* Signed dest location allows it to be partially off screen */ - __s32 crtc_x; - __s32 crtc_y; - __u32 crtc_w; - __u32 crtc_h; - - /* Source values are 16.16 fixed point */ - __u32 src_x; - __u32 src_y; - __u32 src_h; - __u32 src_w; -}; - -struct drm_mode_get_plane { - __u32 plane_id; - - __u32 crtc_id; - __u32 fb_id; - - __u32 possible_crtcs; - __u32 gamma_size; - - __u32 count_format_types; - __u64 format_type_ptr; -}; - -struct drm_mode_get_plane_res { - __u64 plane_id_ptr; - __u32 count_planes; -}; - -#define DRM_MODE_ENCODER_NONE 0 -#define DRM_MODE_ENCODER_DAC 1 -#define DRM_MODE_ENCODER_TMDS 2 -#define DRM_MODE_ENCODER_LVDS 3 -#define DRM_MODE_ENCODER_TVDAC 4 -#define DRM_MODE_ENCODER_VIRTUAL 5 -#define DRM_MODE_ENCODER_DSI 6 -#define DRM_MODE_ENCODER_DPMST 7 -#define DRM_MODE_ENCODER_DPI 8 - -struct drm_mode_get_encoder { - __u32 encoder_id; - __u32 encoder_type; - - __u32 crtc_id; /**< Id of crtc */ - - __u32 possible_crtcs; - __u32 possible_clones; -}; - -/* This is for connectors with multiple signal types. */ -/* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */ -enum drm_mode_subconnector { - DRM_MODE_SUBCONNECTOR_Automatic = 0, /* DVI-I, TV */ - DRM_MODE_SUBCONNECTOR_Unknown = 0, /* DVI-I, TV, DP */ - DRM_MODE_SUBCONNECTOR_VGA = 1, /* DP */ - DRM_MODE_SUBCONNECTOR_DVID = 3, /* DVI-I DP */ - DRM_MODE_SUBCONNECTOR_DVIA = 4, /* DVI-I */ - DRM_MODE_SUBCONNECTOR_Composite = 5, /* TV */ - DRM_MODE_SUBCONNECTOR_SVIDEO = 6, /* TV */ - DRM_MODE_SUBCONNECTOR_Component = 8, /* TV */ - DRM_MODE_SUBCONNECTOR_SCART = 9, /* TV */ - DRM_MODE_SUBCONNECTOR_DisplayPort = 10, /* DP */ - DRM_MODE_SUBCONNECTOR_HDMIA = 11, /* DP */ - DRM_MODE_SUBCONNECTOR_Native = 15, /* DP */ - DRM_MODE_SUBCONNECTOR_Wireless = 18, /* DP */ -}; - -#define DRM_MODE_CONNECTOR_Unknown 0 -#define DRM_MODE_CONNECTOR_VGA 1 -#define DRM_MODE_CONNECTOR_DVII 2 -#define DRM_MODE_CONNECTOR_DVID 3 -#define DRM_MODE_CONNECTOR_DVIA 4 -#define DRM_MODE_CONNECTOR_Composite 5 -#define DRM_MODE_CONNECTOR_SVIDEO 6 -#define DRM_MODE_CONNECTOR_LVDS 7 -#define DRM_MODE_CONNECTOR_Component 8 -#define DRM_MODE_CONNECTOR_9PinDIN 9 -#define DRM_MODE_CONNECTOR_DisplayPort 10 -#define DRM_MODE_CONNECTOR_HDMIA 11 -#define DRM_MODE_CONNECTOR_HDMIB 12 -#define DRM_MODE_CONNECTOR_TV 13 -#define DRM_MODE_CONNECTOR_eDP 14 -#define DRM_MODE_CONNECTOR_VIRTUAL 15 -#define DRM_MODE_CONNECTOR_DSI 16 -#define DRM_MODE_CONNECTOR_DPI 17 -#define DRM_MODE_CONNECTOR_WRITEBACK 18 -#define DRM_MODE_CONNECTOR_SPI 19 -#define DRM_MODE_CONNECTOR_USB 20 - -/** - * struct drm_mode_get_connector - Get connector metadata. - * - * User-space can perform a GETCONNECTOR ioctl to retrieve information about a - * connector. User-space is expected to retrieve encoders, modes and properties - * by performing this ioctl at least twice: the first time to retrieve the - * number of elements, the second time to retrieve the elements themselves. - * - * To retrieve the number of elements, set @count_props and @count_encoders to - * zero, set @count_modes to 1, and set @modes_ptr to a temporary struct - * drm_mode_modeinfo element. - * - * To retrieve the elements, allocate arrays for @encoders_ptr, @modes_ptr, - * @props_ptr and @prop_values_ptr, then set @count_modes, @count_props and - * @count_encoders to their capacity. - * - * Performing the ioctl only twice may be racy: the number of elements may have - * changed with a hotplug event in-between the two ioctls. User-space is - * expected to retry the last ioctl until the number of elements stabilizes. - * The kernel won't fill any array which doesn't have the expected length. - * - * **Force-probing a connector** - * - * If the @count_modes field is set to zero and the DRM client is the current - * DRM master, the kernel will perform a forced probe on the connector to - * refresh the connector status, modes and EDID. A forced-probe can be slow, - * might cause flickering and the ioctl will block. - * - * User-space needs to force-probe connectors to ensure their metadata is - * up-to-date at startup and after receiving a hot-plug event. User-space - * may perform a forced-probe when the user explicitly requests it. User-space - * shouldn't perform a forced-probe in other situations. - */ -struct drm_mode_get_connector { - /** @encoders_ptr: Pointer to ``__u32`` array of object IDs. */ - __u64 encoders_ptr; - /** @modes_ptr: Pointer to struct drm_mode_modeinfo array. */ - __u64 modes_ptr; - /** @props_ptr: Pointer to ``__u32`` array of property IDs. */ - __u64 props_ptr; - /** @prop_values_ptr: Pointer to ``__u64`` array of property values. */ - __u64 prop_values_ptr; - - /** @count_modes: Number of modes. */ - __u32 count_modes; - /** @count_props: Number of properties. */ - __u32 count_props; - /** @count_encoders: Number of encoders. */ - __u32 count_encoders; - - /** @encoder_id: Object ID of the current encoder. */ - __u32 encoder_id; - /** @connector_id: Object ID of the connector. */ - __u32 connector_id; - /** - * @connector_type: Type of the connector. - * - * See DRM_MODE_CONNECTOR_* defines. - */ - __u32 connector_type; - /** - * @connector_type_id: Type-specific connector number. - * - * This is not an object ID. This is a per-type connector number. Each - * (type, type_id) combination is unique across all connectors of a DRM - * device. - */ - __u32 connector_type_id; - - /** - * @connection: Status of the connector. - * - * See enum drm_connector_status. - */ - __u32 connection; - /** @mm_width: Width of the connected sink in millimeters. */ - __u32 mm_width; - /** @mm_height: Height of the connected sink in millimeters. */ - __u32 mm_height; - /** - * @subpixel: Subpixel order of the connected sink. - * - * See enum subpixel_order. - */ - __u32 subpixel; - - /** @pad: Padding, must be zero. */ - __u32 pad; -}; - -#define DRM_MODE_PROP_PENDING (1<<0) /* deprecated, do not use */ -#define DRM_MODE_PROP_RANGE (1<<1) -#define DRM_MODE_PROP_IMMUTABLE (1<<2) -#define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */ -#define DRM_MODE_PROP_BLOB (1<<4) -#define DRM_MODE_PROP_BITMASK (1<<5) /* bitmask of enumerated types */ - -/* non-extended types: legacy bitmask, one bit per type: */ -#define DRM_MODE_PROP_LEGACY_TYPE ( \ - DRM_MODE_PROP_RANGE | \ - DRM_MODE_PROP_ENUM | \ - DRM_MODE_PROP_BLOB | \ - DRM_MODE_PROP_BITMASK) - -/* extended-types: rather than continue to consume a bit per type, - * grab a chunk of the bits to use as integer type id. - */ -#define DRM_MODE_PROP_EXTENDED_TYPE 0x0000ffc0 -#define DRM_MODE_PROP_TYPE(n) ((n) << 6) -#define DRM_MODE_PROP_OBJECT DRM_MODE_PROP_TYPE(1) -#define DRM_MODE_PROP_SIGNED_RANGE DRM_MODE_PROP_TYPE(2) - -/* the PROP_ATOMIC flag is used to hide properties from userspace that - * is not aware of atomic properties. This is mostly to work around - * older userspace (DDX drivers) that read/write each prop they find, - * witout being aware that this could be triggering a lengthy modeset. - */ -#define DRM_MODE_PROP_ATOMIC 0x80000000 - -struct drm_mode_property_enum { - __u64 value; - char name[DRM_PROP_NAME_LEN]; -}; - -struct drm_mode_get_property { - __u64 values_ptr; /* values and blob lengths */ - __u64 enum_blob_ptr; /* enum and blob id ptrs */ - - __u32 prop_id; - __u32 flags; - char name[DRM_PROP_NAME_LEN]; - - __u32 count_values; - /* This is only used to count enum values, not blobs. The _blobs is - * simply because of a historical reason, i.e. backwards compat. */ - __u32 count_enum_blobs; -}; - -struct drm_mode_connector_set_property { - __u64 value; - __u32 prop_id; - __u32 connector_id; -}; - -#define DRM_MODE_OBJECT_CRTC 0xcccccccc -#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0 -#define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0 -#define DRM_MODE_OBJECT_MODE 0xdededede -#define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0 -#define DRM_MODE_OBJECT_FB 0xfbfbfbfb -#define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb -#define DRM_MODE_OBJECT_PLANE 0xeeeeeeee -#define DRM_MODE_OBJECT_ANY 0 - -struct drm_mode_obj_get_properties { - __u64 props_ptr; - __u64 prop_values_ptr; - __u32 count_props; - __u32 obj_id; - __u32 obj_type; -}; - -struct drm_mode_obj_set_property { - __u64 value; - __u32 prop_id; - __u32 obj_id; - __u32 obj_type; -}; - -struct drm_mode_get_blob { - __u32 blob_id; - __u32 length; - __u64 data; -}; - -struct drm_mode_fb_cmd { - __u32 fb_id; - __u32 width; - __u32 height; - __u32 pitch; - __u32 bpp; - __u32 depth; - /* driver specific handle */ - __u32 handle; -}; - -#define DRM_MODE_FB_INTERLACED (1<<0) /* for interlaced framebuffers */ -#define DRM_MODE_FB_MODIFIERS (1<<1) /* enables ->modifer[] */ - -struct drm_mode_fb_cmd2 { - __u32 fb_id; - __u32 width; - __u32 height; - __u32 pixel_format; /* fourcc code from drm_fourcc.h */ - __u32 flags; /* see above flags */ - - /* - * In case of planar formats, this ioctl allows up to 4 - * buffer objects with offsets and pitches per plane. - * The pitch and offset order is dictated by the fourcc, - * e.g. NV12 (https://fourcc.org/yuv.php#NV12) is described as: - * - * YUV 4:2:0 image with a plane of 8 bit Y samples - * followed by an interleaved U/V plane containing - * 8 bit 2x2 subsampled colour difference samples. - * - * So it would consist of Y as offsets[0] and UV as - * offsets[1]. Note that offsets[0] will generally - * be 0 (but this is not required). - * - * To accommodate tiled, compressed, etc formats, a - * modifier can be specified. The default value of zero - * indicates "native" format as specified by the fourcc. - * Vendor specific modifier token. Note that even though - * it looks like we have a modifier per-plane, we in fact - * do not. The modifier for each plane must be identical. - * Thus all combinations of different data layouts for - * multi plane formats must be enumerated as separate - * modifiers. - */ - __u32 handles[4]; - __u32 pitches[4]; /* pitch for each plane */ - __u32 offsets[4]; /* offset of each plane */ - __u64 modifier[4]; /* ie, tiling, compress */ -}; - -#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01 -#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02 -#define DRM_MODE_FB_DIRTY_FLAGS 0x03 - -#define DRM_MODE_FB_DIRTY_MAX_CLIPS 256 - -/* - * Mark a region of a framebuffer as dirty. - * - * Some hardware does not automatically update display contents - * as a hardware or software draw to a framebuffer. This ioctl - * allows userspace to tell the kernel and the hardware what - * regions of the framebuffer have changed. - * - * The kernel or hardware is free to update more then just the - * region specified by the clip rects. The kernel or hardware - * may also delay and/or coalesce several calls to dirty into a - * single update. - * - * Userspace may annotate the updates, the annotates are a - * promise made by the caller that the change is either a copy - * of pixels or a fill of a single color in the region specified. - * - * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then - * the number of updated regions are half of num_clips given, - * where the clip rects are paired in src and dst. The width and - * height of each one of the pairs must match. - * - * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller - * promises that the region specified of the clip rects is filled - * completely with a single color as given in the color argument. - */ - -struct drm_mode_fb_dirty_cmd { - __u32 fb_id; - __u32 flags; - __u32 color; - __u32 num_clips; - __u64 clips_ptr; -}; - -struct drm_mode_mode_cmd { - __u32 connector_id; - struct drm_mode_modeinfo mode; -}; - -#define DRM_MODE_CURSOR_BO 0x01 -#define DRM_MODE_CURSOR_MOVE 0x02 -#define DRM_MODE_CURSOR_FLAGS 0x03 - -/* - * depending on the value in flags different members are used. - * - * CURSOR_BO uses - * crtc_id - * width - * height - * handle - if 0 turns the cursor off - * - * CURSOR_MOVE uses - * crtc_id - * x - * y - */ -struct drm_mode_cursor { - __u32 flags; - __u32 crtc_id; - __s32 x; - __s32 y; - __u32 width; - __u32 height; - /* driver specific handle */ - __u32 handle; -}; - -struct drm_mode_cursor2 { - __u32 flags; - __u32 crtc_id; - __s32 x; - __s32 y; - __u32 width; - __u32 height; - /* driver specific handle */ - __u32 handle; - __s32 hot_x; - __s32 hot_y; -}; - -struct drm_mode_crtc_lut { - __u32 crtc_id; - __u32 gamma_size; - - /* pointers to arrays */ - __u64 red; - __u64 green; - __u64 blue; -}; - -struct drm_color_ctm { - /* - * Conversion matrix in S31.32 sign-magnitude - * (not two's complement!) format. - */ - __u64 matrix[9]; -}; - -struct drm_color_lut { - /* - * Values are mapped linearly to 0.0 - 1.0 range, with 0x0 == 0.0 and - * 0xffff == 1.0. - */ - __u16 red; - __u16 green; - __u16 blue; - __u16 reserved; -}; - -/** - * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data. - * - * HDR Metadata Infoframe as per CTA 861.G spec. This is expected - * to match exactly with the spec. - * - * Userspace is expected to pass the metadata information as per - * the format described in this structure. - */ -struct hdr_metadata_infoframe { - /** - * @eotf: Electro-Optical Transfer Function (EOTF) - * used in the stream. - */ - __u8 eotf; - /** - * @metadata_type: Static_Metadata_Descriptor_ID. - */ - __u8 metadata_type; - /** - * @display_primaries: Color Primaries of the Data. - * These are coded as unsigned 16-bit values in units of - * 0.00002, where 0x0000 represents zero and 0xC350 - * represents 1.0000. - * @display_primaries.x: X cordinate of color primary. - * @display_primaries.y: Y cordinate of color primary. - */ - struct { - __u16 x, y; - } display_primaries[3]; - /** - * @white_point: White Point of Colorspace Data. - * These are coded as unsigned 16-bit values in units of - * 0.00002, where 0x0000 represents zero and 0xC350 - * represents 1.0000. - * @white_point.x: X cordinate of whitepoint of color primary. - * @white_point.y: Y cordinate of whitepoint of color primary. - */ - struct { - __u16 x, y; - } white_point; - /** - * @max_display_mastering_luminance: Max Mastering Display Luminance. - * This value is coded as an unsigned 16-bit value in units of 1 cd/m2, - * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2. - */ - __u16 max_display_mastering_luminance; - /** - * @min_display_mastering_luminance: Min Mastering Display Luminance. - * This value is coded as an unsigned 16-bit value in units of - * 0.0001 cd/m2, where 0x0001 represents 0.0001 cd/m2 and 0xFFFF - * represents 6.5535 cd/m2. - */ - __u16 min_display_mastering_luminance; - /** - * @max_cll: Max Content Light Level. - * This value is coded as an unsigned 16-bit value in units of 1 cd/m2, - * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2. - */ - __u16 max_cll; - /** - * @max_fall: Max Frame Average Light Level. - * This value is coded as an unsigned 16-bit value in units of 1 cd/m2, - * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2. - */ - __u16 max_fall; -}; - -/** - * struct hdr_output_metadata - HDR output metadata - * - * Metadata Information to be passed from userspace - */ -struct hdr_output_metadata { - /** - * @metadata_type: Static_Metadata_Descriptor_ID. - */ - __u32 metadata_type; - /** - * @hdmi_metadata_type1: HDR Metadata Infoframe. - */ - union { - struct hdr_metadata_infoframe hdmi_metadata_type1; - }; -}; - -#define DRM_MODE_PAGE_FLIP_EVENT 0x01 -#define DRM_MODE_PAGE_FLIP_ASYNC 0x02 -#define DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE 0x4 -#define DRM_MODE_PAGE_FLIP_TARGET_RELATIVE 0x8 -#define DRM_MODE_PAGE_FLIP_TARGET (DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE | \ - DRM_MODE_PAGE_FLIP_TARGET_RELATIVE) -#define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT | \ - DRM_MODE_PAGE_FLIP_ASYNC | \ - DRM_MODE_PAGE_FLIP_TARGET) - -/* - * Request a page flip on the specified crtc. - * - * This ioctl will ask KMS to schedule a page flip for the specified - * crtc. Once any pending rendering targeting the specified fb (as of - * ioctl time) has completed, the crtc will be reprogrammed to display - * that fb after the next vertical refresh. The ioctl returns - * immediately, but subsequent rendering to the current fb will block - * in the execbuffer ioctl until the page flip happens. If a page - * flip is already pending as the ioctl is called, EBUSY will be - * returned. - * - * Flag DRM_MODE_PAGE_FLIP_EVENT requests that drm sends back a vblank - * event (see drm.h: struct drm_event_vblank) when the page flip is - * done. The user_data field passed in with this ioctl will be - * returned as the user_data field in the vblank event struct. - * - * Flag DRM_MODE_PAGE_FLIP_ASYNC requests that the flip happen - * 'as soon as possible', meaning that it not delay waiting for vblank. - * This may cause tearing on the screen. - * - * The reserved field must be zero. - */ - -struct drm_mode_crtc_page_flip { - __u32 crtc_id; - __u32 fb_id; - __u32 flags; - __u32 reserved; - __u64 user_data; -}; - -/* - * Request a page flip on the specified crtc. - * - * Same as struct drm_mode_crtc_page_flip, but supports new flags and - * re-purposes the reserved field: - * - * The sequence field must be zero unless either of the - * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is specified. When - * the ABSOLUTE flag is specified, the sequence field denotes the absolute - * vblank sequence when the flip should take effect. When the RELATIVE - * flag is specified, the sequence field denotes the relative (to the - * current one when the ioctl is called) vblank sequence when the flip - * should take effect. NOTE: DRM_IOCTL_WAIT_VBLANK must still be used to - * make sure the vblank sequence before the target one has passed before - * calling this ioctl. The purpose of the - * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is merely to clarify - * the target for when code dealing with a page flip runs during a - * vertical blank period. - */ - -struct drm_mode_crtc_page_flip_target { - __u32 crtc_id; - __u32 fb_id; - __u32 flags; - __u32 sequence; - __u64 user_data; -}; - -/* create a dumb scanout buffer */ -struct drm_mode_create_dumb { - __u32 height; - __u32 width; - __u32 bpp; - __u32 flags; - /* handle, pitch, size will be returned */ - __u32 handle; - __u32 pitch; - __u64 size; -}; - -/* set up for mmap of a dumb scanout buffer */ -struct drm_mode_map_dumb { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 pad; - /** - * Fake offset to use for subsequent mmap call - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 offset; -}; - -struct drm_mode_destroy_dumb { - __u32 handle; -}; - -/* page-flip flags are valid, plus: */ -#define DRM_MODE_ATOMIC_TEST_ONLY 0x0100 -#define DRM_MODE_ATOMIC_NONBLOCK 0x0200 -#define DRM_MODE_ATOMIC_ALLOW_MODESET 0x0400 - -#define DRM_MODE_ATOMIC_FLAGS (\ - DRM_MODE_PAGE_FLIP_EVENT |\ - DRM_MODE_PAGE_FLIP_ASYNC |\ - DRM_MODE_ATOMIC_TEST_ONLY |\ - DRM_MODE_ATOMIC_NONBLOCK |\ - DRM_MODE_ATOMIC_ALLOW_MODESET) - -struct drm_mode_atomic { - __u32 flags; - __u32 count_objs; - __u64 objs_ptr; - __u64 count_props_ptr; - __u64 props_ptr; - __u64 prop_values_ptr; - __u64 reserved; - __u64 user_data; -}; - -struct drm_format_modifier_blob { -#define FORMAT_BLOB_CURRENT 1 - /* Version of this blob format */ - __u32 version; - - /* Flags */ - __u32 flags; - - /* Number of fourcc formats supported */ - __u32 count_formats; - - /* Where in this blob the formats exist (in bytes) */ - __u32 formats_offset; - - /* Number of drm_format_modifiers */ - __u32 count_modifiers; - - /* Where in this blob the modifiers exist (in bytes) */ - __u32 modifiers_offset; - - /* __u32 formats[] */ - /* struct drm_format_modifier modifiers[] */ -}; - -struct drm_format_modifier { - /* Bitmask of formats in get_plane format list this info applies to. The - * offset allows a sliding window of which 64 formats (bits). - * - * Some examples: - * In today's world with < 65 formats, and formats 0, and 2 are - * supported - * 0x0000000000000005 - * ^-offset = 0, formats = 5 - * - * If the number formats grew to 128, and formats 98-102 are - * supported with the modifier: - * - * 0x0000007c00000000 0000000000000000 - * ^ - * |__offset = 64, formats = 0x7c00000000 - * - */ - __u64 formats; - __u32 offset; - __u32 pad; - - /* The modifier that applies to the >get_plane format list bitmask. */ - __u64 modifier; -}; - -/** - * struct drm_mode_create_blob - Create New blob property - * - * Create a new 'blob' data property, copying length bytes from data pointer, - * and returning new blob ID. - */ -struct drm_mode_create_blob { - /** @data: Pointer to data to copy. */ - __u64 data; - /** @length: Length of data to copy. */ - __u32 length; - /** @blob_id: Return: new property ID. */ - __u32 blob_id; -}; - -/** - * struct drm_mode_destroy_blob - Destroy user blob - * @blob_id: blob_id to destroy - * - * Destroy a user-created blob property. - * - * User-space can release blobs as soon as they do not need to refer to them by - * their blob object ID. For instance, if you are using a MODE_ID blob in an - * atomic commit and you will not make another commit re-using the same ID, you - * can destroy the blob as soon as the commit has been issued, without waiting - * for it to complete. - */ -struct drm_mode_destroy_blob { - __u32 blob_id; -}; - -/** - * struct drm_mode_create_lease - Create lease - * - * Lease mode resources, creating another drm_master. - */ -struct drm_mode_create_lease { - /** @object_ids: Pointer to array of object ids (__u32) */ - __u64 object_ids; - /** @object_count: Number of object ids */ - __u32 object_count; - /** @flags: flags for new FD (O_CLOEXEC, etc) */ - __u32 flags; - - /** @lessee_id: Return: unique identifier for lessee. */ - __u32 lessee_id; - /** @fd: Return: file descriptor to new drm_master file */ - __u32 fd; -}; - -/** - * struct drm_mode_list_lessees - List lessees - * - * List lesses from a drm_master. - */ -struct drm_mode_list_lessees { - /** - * @count_lessees: Number of lessees. - * - * On input, provides length of the array. - * On output, provides total number. No - * more than the input number will be written - * back, so two calls can be used to get - * the size and then the data. - */ - __u32 count_lessees; - /** @pad: Padding. */ - __u32 pad; - - /** - * @lessees_ptr: Pointer to lessees. - * - * Pointer to __u64 array of lessee ids - */ - __u64 lessees_ptr; -}; - -/** - * struct drm_mode_get_lease - Get Lease - * - * Get leased objects. - */ -struct drm_mode_get_lease { - /** - * @count_objects: Number of leased objects. - * - * On input, provides length of the array. - * On output, provides total number. No - * more than the input number will be written - * back, so two calls can be used to get - * the size and then the data. - */ - __u32 count_objects; - /** @pad: Padding. */ - __u32 pad; - - /** - * @objects_ptr: Pointer to objects. - * - * Pointer to __u32 array of object ids. - */ - __u64 objects_ptr; -}; - -/** - * struct drm_mode_revoke_lease - Revoke lease - */ -struct drm_mode_revoke_lease { - /** @lessee_id: Unique ID of lessee */ - __u32 lessee_id; -}; - -/** - * struct drm_mode_rect - Two dimensional rectangle. - * @x1: Horizontal starting coordinate (inclusive). - * @y1: Vertical starting coordinate (inclusive). - * @x2: Horizontal ending coordinate (exclusive). - * @y2: Vertical ending coordinate (exclusive). - * - * With drm subsystem using struct drm_rect to manage rectangular area this - * export it to user-space. - * - * Currently used by drm_mode_atomic blob property FB_DAMAGE_CLIPS. - */ -struct drm_mode_rect { - __s32 x1; - __s32 y1; - __s32 x2; - __s32 y2; -}; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86/include/libdrm/drm_sarea.h b/prebuilts/x86/include/libdrm/drm_sarea.h deleted file mode 100644 index 93025be..0000000 --- a/prebuilts/x86/include/libdrm/drm_sarea.h +++ /dev/null @@ -1,92 +0,0 @@ -/** - * \file drm_sarea.h - * \brief SAREA definitions - * - * \author Michel Dänzer - */ - -/* - * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef _DRM_SAREA_H_ -#define _DRM_SAREA_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* SAREA area needs to be at least a page */ -#if defined(__alpha__) -#define SAREA_MAX 0x2000U -#elif defined(__mips__) -#define SAREA_MAX 0x4000U -#elif defined(__ia64__) -#define SAREA_MAX 0x10000U /* 64kB */ -#else -/* Intel 830M driver needs at least 8k SAREA */ -#define SAREA_MAX 0x2000U -#endif - -/** Maximum number of drawables in the SAREA */ -#define SAREA_MAX_DRAWABLES 256 - -#define SAREA_DRAWABLE_CLAIMED_ENTRY 0x80000000 - -/** SAREA drawable */ -struct drm_sarea_drawable { - unsigned int stamp; - unsigned int flags; -}; - -/** SAREA frame */ -struct drm_sarea_frame { - unsigned int x; - unsigned int y; - unsigned int width; - unsigned int height; - unsigned int fullscreen; -}; - -/** SAREA */ -struct drm_sarea { - /** first thing is always the DRM locking structure */ - struct drm_hw_lock lock; - /** \todo Use readers/writer lock for drm_sarea::drawable_lock */ - struct drm_hw_lock drawable_lock; - struct drm_sarea_drawable drawableTable[SAREA_MAX_DRAWABLES]; /**< drawables */ - struct drm_sarea_frame frame; /**< frame */ - drm_context_t dummy_context; -}; - -typedef struct drm_sarea_drawable drm_sarea_drawable_t; -typedef struct drm_sarea_frame drm_sarea_frame_t; -typedef struct drm_sarea drm_sarea_t; - -#if defined(__cplusplus) -} -#endif - -#endif /* _DRM_SAREA_H_ */ diff --git a/prebuilts/x86/include/libdrm/i915_drm.h b/prebuilts/x86/include/libdrm/i915_drm.h deleted file mode 100644 index 72afd94..0000000 --- a/prebuilts/x86/include/libdrm/i915_drm.h +++ /dev/null @@ -1,1915 +0,0 @@ -/* - * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ - -#ifndef _I915_DRM_H_ -#define _I915_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints. - */ - -/** - * DOC: uevents generated by i915 on it's device node - * - * I915_L3_PARITY_UEVENT - Generated when the driver receives a parity mismatch - * event from the gpu l3 cache. Additional information supplied is ROW, - * BANK, SUBBANK, SLICE of the affected cacheline. Userspace should keep - * track of these events and if a specific cache-line seems to have a - * persistent error remap it with the l3 remapping tool supplied in - * intel-gpu-tools. The value supplied with the event is always 1. - * - * I915_ERROR_UEVENT - Generated upon error detection, currently only via - * hangcheck. The error detection event is a good indicator of when things - * began to go badly. The value supplied with the event is a 1 upon error - * detection, and a 0 upon reset completion, signifying no more error - * exists. NOTE: Disabling hangcheck or reset via module parameter will - * cause the related events to not be seen. - * - * I915_RESET_UEVENT - Event is generated just before an attempt to reset the - * the GPU. The value supplied with the event is always 1. NOTE: Disable - * reset via module parameter will cause this event to not be seen. - */ -#define I915_L3_PARITY_UEVENT "L3_PARITY_ERROR" -#define I915_ERROR_UEVENT "ERROR" -#define I915_RESET_UEVENT "RESET" - -/* - * i915_user_extension: Base class for defining a chain of extensions - * - * Many interfaces need to grow over time. In most cases we can simply - * extend the struct and have userspace pass in more data. Another option, - * as demonstrated by Vulkan's approach to providing extensions for forward - * and backward compatibility, is to use a list of optional structs to - * provide those extra details. - * - * The key advantage to using an extension chain is that it allows us to - * redefine the interface more easily than an ever growing struct of - * increasing complexity, and for large parts of that interface to be - * entirely optional. The downside is more pointer chasing; chasing across - * the boundary with pointers encapsulated inside u64. - */ -struct i915_user_extension { - __u64 next_extension; - __u32 name; - __u32 flags; /* All undefined bits must be zero. */ - __u32 rsvd[4]; /* Reserved for future use; must be zero. */ -}; - -/* - * MOCS indexes used for GPU surfaces, defining the cacheability of the - * surface data and the coherency for this data wrt. CPU vs. GPU accesses. - */ -enum i915_mocs_table_index { - /* - * Not cached anywhere, coherency between CPU and GPU accesses is - * guaranteed. - */ - I915_MOCS_UNCACHED, - /* - * Cacheability and coherency controlled by the kernel automatically - * based on the DRM_I915_GEM_SET_CACHING IOCTL setting and the current - * usage of the surface (used for display scanout or not). - */ - I915_MOCS_PTE, - /* - * Cached in all GPU caches available on the platform. - * Coherency between CPU and GPU accesses to the surface is not - * guaranteed without extra synchronization. - */ - I915_MOCS_CACHED, -}; - -/* - * Different engines serve different roles, and there may be more than one - * engine serving each role. enum drm_i915_gem_engine_class provides a - * classification of the role of the engine, which may be used when requesting - * operations to be performed on a certain subset of engines, or for providing - * information about that group. - */ -enum drm_i915_gem_engine_class { - I915_ENGINE_CLASS_RENDER = 0, - I915_ENGINE_CLASS_COPY = 1, - I915_ENGINE_CLASS_VIDEO = 2, - I915_ENGINE_CLASS_VIDEO_ENHANCE = 3, - - /* should be kept compact */ - - I915_ENGINE_CLASS_INVALID = -1 -}; - -/** - * DOC: perf_events exposed by i915 through /sys/bus/event_sources/drivers/i915 - * - */ - -enum drm_i915_pmu_engine_sample { - I915_SAMPLE_BUSY = 0, - I915_SAMPLE_WAIT = 1, - I915_SAMPLE_SEMA = 2 -}; - -#define I915_PMU_SAMPLE_BITS (4) -#define I915_PMU_SAMPLE_MASK (0xf) -#define I915_PMU_SAMPLE_INSTANCE_BITS (8) -#define I915_PMU_CLASS_SHIFT \ - (I915_PMU_SAMPLE_BITS + I915_PMU_SAMPLE_INSTANCE_BITS) - -#define __I915_PMU_ENGINE(class, instance, sample) \ - ((class) << I915_PMU_CLASS_SHIFT | \ - (instance) << I915_PMU_SAMPLE_BITS | \ - (sample)) - -#define I915_PMU_ENGINE_BUSY(class, instance) \ - __I915_PMU_ENGINE(class, instance, I915_SAMPLE_BUSY) - -#define I915_PMU_ENGINE_WAIT(class, instance) \ - __I915_PMU_ENGINE(class, instance, I915_SAMPLE_WAIT) - -#define I915_PMU_ENGINE_SEMA(class, instance) \ - __I915_PMU_ENGINE(class, instance, I915_SAMPLE_SEMA) - -#define __I915_PMU_OTHER(x) (__I915_PMU_ENGINE(0xff, 0xff, 0xf) + 1 + (x)) - -#define I915_PMU_ACTUAL_FREQUENCY __I915_PMU_OTHER(0) -#define I915_PMU_REQUESTED_FREQUENCY __I915_PMU_OTHER(1) -#define I915_PMU_INTERRUPTS __I915_PMU_OTHER(2) -#define I915_PMU_RC6_RESIDENCY __I915_PMU_OTHER(3) - -#define I915_PMU_LAST I915_PMU_RC6_RESIDENCY - -/* Each region is a minimum of 16k, and there are at most 255 of them. - */ -#define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use - * of chars for next/prev indices */ -#define I915_LOG_MIN_TEX_REGION_SIZE 14 - -typedef struct _drm_i915_init { - enum { - I915_INIT_DMA = 0x01, - I915_CLEANUP_DMA = 0x02, - I915_RESUME_DMA = 0x03 - } func; - unsigned int mmio_offset; - int sarea_priv_offset; - unsigned int ring_start; - unsigned int ring_end; - unsigned int ring_size; - unsigned int front_offset; - unsigned int back_offset; - unsigned int depth_offset; - unsigned int w; - unsigned int h; - unsigned int pitch; - unsigned int pitch_bits; - unsigned int back_pitch; - unsigned int depth_pitch; - unsigned int cpp; - unsigned int chipset; -} drm_i915_init_t; - -typedef struct _drm_i915_sarea { - struct drm_tex_region texList[I915_NR_TEX_REGIONS + 1]; - int last_upload; /* last time texture was uploaded */ - int last_enqueue; /* last time a buffer was enqueued */ - int last_dispatch; /* age of the most recently dispatched buffer */ - int ctxOwner; /* last context to upload state */ - int texAge; - int pf_enabled; /* is pageflipping allowed? */ - int pf_active; - int pf_current_page; /* which buffer is being displayed? */ - int perf_boxes; /* performance boxes to be displayed */ - int width, height; /* screen size in pixels */ - - drm_handle_t front_handle; - int front_offset; - int front_size; - - drm_handle_t back_handle; - int back_offset; - int back_size; - - drm_handle_t depth_handle; - int depth_offset; - int depth_size; - - drm_handle_t tex_handle; - int tex_offset; - int tex_size; - int log_tex_granularity; - int pitch; - int rotation; /* 0, 90, 180 or 270 */ - int rotated_offset; - int rotated_size; - int rotated_pitch; - int virtualX, virtualY; - - unsigned int front_tiled; - unsigned int back_tiled; - unsigned int depth_tiled; - unsigned int rotated_tiled; - unsigned int rotated2_tiled; - - int pipeA_x; - int pipeA_y; - int pipeA_w; - int pipeA_h; - int pipeB_x; - int pipeB_y; - int pipeB_w; - int pipeB_h; - - /* fill out some space for old userspace triple buffer */ - drm_handle_t unused_handle; - __u32 unused1, unused2, unused3; - - /* buffer object handles for static buffers. May change - * over the lifetime of the client. - */ - __u32 front_bo_handle; - __u32 back_bo_handle; - __u32 unused_bo_handle; - __u32 depth_bo_handle; - -} drm_i915_sarea_t; - -/* due to userspace building against these headers we need some compat here */ -#define planeA_x pipeA_x -#define planeA_y pipeA_y -#define planeA_w pipeA_w -#define planeA_h pipeA_h -#define planeB_x pipeB_x -#define planeB_y pipeB_y -#define planeB_w pipeB_w -#define planeB_h pipeB_h - -/* Flags for perf_boxes - */ -#define I915_BOX_RING_EMPTY 0x1 -#define I915_BOX_FLIP 0x2 -#define I915_BOX_WAIT 0x4 -#define I915_BOX_TEXTURE_LOAD 0x8 -#define I915_BOX_LOST_CONTEXT 0x10 - -/* - * i915 specific ioctls. - * - * The device specific ioctl range is [DRM_COMMAND_BASE, DRM_COMMAND_END) ie - * [0x40, 0xa0) (a0 is excluded). The numbers below are defined as offset - * against DRM_COMMAND_BASE and should be between [0x0, 0x60). - */ -#define DRM_I915_INIT 0x00 -#define DRM_I915_FLUSH 0x01 -#define DRM_I915_FLIP 0x02 -#define DRM_I915_BATCHBUFFER 0x03 -#define DRM_I915_IRQ_EMIT 0x04 -#define DRM_I915_IRQ_WAIT 0x05 -#define DRM_I915_GETPARAM 0x06 -#define DRM_I915_SETPARAM 0x07 -#define DRM_I915_ALLOC 0x08 -#define DRM_I915_FREE 0x09 -#define DRM_I915_INIT_HEAP 0x0a -#define DRM_I915_CMDBUFFER 0x0b -#define DRM_I915_DESTROY_HEAP 0x0c -#define DRM_I915_SET_VBLANK_PIPE 0x0d -#define DRM_I915_GET_VBLANK_PIPE 0x0e -#define DRM_I915_VBLANK_SWAP 0x0f -#define DRM_I915_HWS_ADDR 0x11 -#define DRM_I915_GEM_INIT 0x13 -#define DRM_I915_GEM_EXECBUFFER 0x14 -#define DRM_I915_GEM_PIN 0x15 -#define DRM_I915_GEM_UNPIN 0x16 -#define DRM_I915_GEM_BUSY 0x17 -#define DRM_I915_GEM_THROTTLE 0x18 -#define DRM_I915_GEM_ENTERVT 0x19 -#define DRM_I915_GEM_LEAVEVT 0x1a -#define DRM_I915_GEM_CREATE 0x1b -#define DRM_I915_GEM_PREAD 0x1c -#define DRM_I915_GEM_PWRITE 0x1d -#define DRM_I915_GEM_MMAP 0x1e -#define DRM_I915_GEM_SET_DOMAIN 0x1f -#define DRM_I915_GEM_SW_FINISH 0x20 -#define DRM_I915_GEM_SET_TILING 0x21 -#define DRM_I915_GEM_GET_TILING 0x22 -#define DRM_I915_GEM_GET_APERTURE 0x23 -#define DRM_I915_GEM_MMAP_GTT 0x24 -#define DRM_I915_GET_PIPE_FROM_CRTC_ID 0x25 -#define DRM_I915_GEM_MADVISE 0x26 -#define DRM_I915_OVERLAY_PUT_IMAGE 0x27 -#define DRM_I915_OVERLAY_ATTRS 0x28 -#define DRM_I915_GEM_EXECBUFFER2 0x29 -#define DRM_I915_GEM_EXECBUFFER2_WR DRM_I915_GEM_EXECBUFFER2 -#define DRM_I915_GET_SPRITE_COLORKEY 0x2a -#define DRM_I915_SET_SPRITE_COLORKEY 0x2b -#define DRM_I915_GEM_WAIT 0x2c -#define DRM_I915_GEM_CONTEXT_CREATE 0x2d -#define DRM_I915_GEM_CONTEXT_DESTROY 0x2e -#define DRM_I915_GEM_SET_CACHING 0x2f -#define DRM_I915_GEM_GET_CACHING 0x30 -#define DRM_I915_REG_READ 0x31 -#define DRM_I915_GET_RESET_STATS 0x32 -#define DRM_I915_GEM_USERPTR 0x33 -#define DRM_I915_GEM_CONTEXT_GETPARAM 0x34 -#define DRM_I915_GEM_CONTEXT_SETPARAM 0x35 -#define DRM_I915_PERF_OPEN 0x36 -#define DRM_I915_PERF_ADD_CONFIG 0x37 -#define DRM_I915_PERF_REMOVE_CONFIG 0x38 -#define DRM_I915_QUERY 0x39 -/* Must be kept compact -- no holes */ - -#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t) -#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) -#define DRM_IOCTL_I915_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP) -#define DRM_IOCTL_I915_BATCHBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t) -#define DRM_IOCTL_I915_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t) -#define DRM_IOCTL_I915_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t) -#define DRM_IOCTL_I915_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t) -#define DRM_IOCTL_I915_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t) -#define DRM_IOCTL_I915_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t) -#define DRM_IOCTL_I915_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t) -#define DRM_IOCTL_I915_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t) -#define DRM_IOCTL_I915_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t) -#define DRM_IOCTL_I915_DESTROY_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_DESTROY_HEAP, drm_i915_mem_destroy_heap_t) -#define DRM_IOCTL_I915_SET_VBLANK_PIPE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t) -#define DRM_IOCTL_I915_GET_VBLANK_PIPE DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t) -#define DRM_IOCTL_I915_VBLANK_SWAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t) -#define DRM_IOCTL_I915_HWS_ADDR DRM_IOW(DRM_COMMAND_BASE + DRM_I915_HWS_ADDR, struct drm_i915_gem_init) -#define DRM_IOCTL_I915_GEM_INIT DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_INIT, struct drm_i915_gem_init) -#define DRM_IOCTL_I915_GEM_EXECBUFFER DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER, struct drm_i915_gem_execbuffer) -#define DRM_IOCTL_I915_GEM_EXECBUFFER2 DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2, struct drm_i915_gem_execbuffer2) -#define DRM_IOCTL_I915_GEM_EXECBUFFER2_WR DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2_WR, struct drm_i915_gem_execbuffer2) -#define DRM_IOCTL_I915_GEM_PIN DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_PIN, struct drm_i915_gem_pin) -#define DRM_IOCTL_I915_GEM_UNPIN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_UNPIN, struct drm_i915_gem_unpin) -#define DRM_IOCTL_I915_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_BUSY, struct drm_i915_gem_busy) -#define DRM_IOCTL_I915_GEM_SET_CACHING DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_SET_CACHING, struct drm_i915_gem_caching) -#define DRM_IOCTL_I915_GEM_GET_CACHING DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_GET_CACHING, struct drm_i915_gem_caching) -#define DRM_IOCTL_I915_GEM_THROTTLE DRM_IO ( DRM_COMMAND_BASE + DRM_I915_GEM_THROTTLE) -#define DRM_IOCTL_I915_GEM_ENTERVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT) -#define DRM_IOCTL_I915_GEM_LEAVEVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT) -#define DRM_IOCTL_I915_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE, struct drm_i915_gem_create) -#define DRM_IOCTL_I915_GEM_PREAD DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PREAD, struct drm_i915_gem_pread) -#define DRM_IOCTL_I915_GEM_PWRITE DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite) -#define DRM_IOCTL_I915_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap) -#define DRM_IOCTL_I915_GEM_MMAP_GTT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP_GTT, struct drm_i915_gem_mmap_gtt) -#define DRM_IOCTL_I915_GEM_SET_DOMAIN DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SET_DOMAIN, struct drm_i915_gem_set_domain) -#define DRM_IOCTL_I915_GEM_SW_FINISH DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SW_FINISH, struct drm_i915_gem_sw_finish) -#define DRM_IOCTL_I915_GEM_SET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling) -#define DRM_IOCTL_I915_GEM_GET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling) -#define DRM_IOCTL_I915_GEM_GET_APERTURE DRM_IOR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture) -#define DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_PIPE_FROM_CRTC_ID, struct drm_i915_get_pipe_from_crtc_id) -#define DRM_IOCTL_I915_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MADVISE, struct drm_i915_gem_madvise) -#define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE DRM_IOW(DRM_COMMAND_BASE + DRM_I915_OVERLAY_PUT_IMAGE, struct drm_intel_overlay_put_image) -#define DRM_IOCTL_I915_OVERLAY_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_OVERLAY_ATTRS, struct drm_intel_overlay_attrs) -#define DRM_IOCTL_I915_SET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_SET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey) -#define DRM_IOCTL_I915_GET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey) -#define DRM_IOCTL_I915_GEM_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_WAIT, struct drm_i915_gem_wait) -#define DRM_IOCTL_I915_GEM_CONTEXT_CREATE DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create) -#define DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create_ext) -#define DRM_IOCTL_I915_GEM_CONTEXT_DESTROY DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_DESTROY, struct drm_i915_gem_context_destroy) -#define DRM_IOCTL_I915_REG_READ DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_REG_READ, struct drm_i915_reg_read) -#define DRM_IOCTL_I915_GET_RESET_STATS DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GET_RESET_STATS, struct drm_i915_reset_stats) -#define DRM_IOCTL_I915_GEM_USERPTR DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_USERPTR, struct drm_i915_gem_userptr) -#define DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_GETPARAM, struct drm_i915_gem_context_param) -#define DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_SETPARAM, struct drm_i915_gem_context_param) -#define DRM_IOCTL_I915_PERF_OPEN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_OPEN, struct drm_i915_perf_open_param) -#define DRM_IOCTL_I915_PERF_ADD_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config) -#define DRM_IOCTL_I915_PERF_REMOVE_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64) -#define DRM_IOCTL_I915_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_QUERY, struct drm_i915_query) - -/* Allow drivers to submit batchbuffers directly to hardware, relying - * on the security mechanisms provided by hardware. - */ -typedef struct drm_i915_batchbuffer { - int start; /* agp offset */ - int used; /* nr bytes in use */ - int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ - int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ - int num_cliprects; /* mulitpass with multiple cliprects? */ - struct drm_clip_rect *cliprects; /* pointer to userspace cliprects */ -} drm_i915_batchbuffer_t; - -/* As above, but pass a pointer to userspace buffer which can be - * validated by the kernel prior to sending to hardware. - */ -typedef struct _drm_i915_cmdbuffer { - char *buf; /* pointer to userspace command buffer */ - int sz; /* nr bytes in buf */ - int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ - int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ - int num_cliprects; /* mulitpass with multiple cliprects? */ - struct drm_clip_rect *cliprects; /* pointer to userspace cliprects */ -} drm_i915_cmdbuffer_t; - -/* Userspace can request & wait on irq's: - */ -typedef struct drm_i915_irq_emit { - int *irq_seq; -} drm_i915_irq_emit_t; - -typedef struct drm_i915_irq_wait { - int irq_seq; -} drm_i915_irq_wait_t; - -/* - * Different modes of per-process Graphics Translation Table, - * see I915_PARAM_HAS_ALIASING_PPGTT - */ -#define I915_GEM_PPGTT_NONE 0 -#define I915_GEM_PPGTT_ALIASING 1 -#define I915_GEM_PPGTT_FULL 2 - -/* Ioctl to query kernel params: - */ -#define I915_PARAM_IRQ_ACTIVE 1 -#define I915_PARAM_ALLOW_BATCHBUFFER 2 -#define I915_PARAM_LAST_DISPATCH 3 -#define I915_PARAM_CHIPSET_ID 4 -#define I915_PARAM_HAS_GEM 5 -#define I915_PARAM_NUM_FENCES_AVAIL 6 -#define I915_PARAM_HAS_OVERLAY 7 -#define I915_PARAM_HAS_PAGEFLIPPING 8 -#define I915_PARAM_HAS_EXECBUF2 9 -#define I915_PARAM_HAS_BSD 10 -#define I915_PARAM_HAS_BLT 11 -#define I915_PARAM_HAS_RELAXED_FENCING 12 -#define I915_PARAM_HAS_COHERENT_RINGS 13 -#define I915_PARAM_HAS_EXEC_CONSTANTS 14 -#define I915_PARAM_HAS_RELAXED_DELTA 15 -#define I915_PARAM_HAS_GEN7_SOL_RESET 16 -#define I915_PARAM_HAS_LLC 17 -#define I915_PARAM_HAS_ALIASING_PPGTT 18 -#define I915_PARAM_HAS_WAIT_TIMEOUT 19 -#define I915_PARAM_HAS_SEMAPHORES 20 -#define I915_PARAM_HAS_PRIME_VMAP_FLUSH 21 -#define I915_PARAM_HAS_VEBOX 22 -#define I915_PARAM_HAS_SECURE_BATCHES 23 -#define I915_PARAM_HAS_PINNED_BATCHES 24 -#define I915_PARAM_HAS_EXEC_NO_RELOC 25 -#define I915_PARAM_HAS_EXEC_HANDLE_LUT 26 -#define I915_PARAM_HAS_WT 27 -#define I915_PARAM_CMD_PARSER_VERSION 28 -#define I915_PARAM_HAS_COHERENT_PHYS_GTT 29 -#define I915_PARAM_MMAP_VERSION 30 -#define I915_PARAM_HAS_BSD2 31 -#define I915_PARAM_REVISION 32 -#define I915_PARAM_SUBSLICE_TOTAL 33 -#define I915_PARAM_EU_TOTAL 34 -#define I915_PARAM_HAS_GPU_RESET 35 -#define I915_PARAM_HAS_RESOURCE_STREAMER 36 -#define I915_PARAM_HAS_EXEC_SOFTPIN 37 -#define I915_PARAM_HAS_POOLED_EU 38 -#define I915_PARAM_MIN_EU_IN_POOL 39 -#define I915_PARAM_MMAP_GTT_VERSION 40 - -/* - * Query whether DRM_I915_GEM_EXECBUFFER2 supports user defined execution - * priorities and the driver will attempt to execute batches in priority order. - * The param returns a capability bitmask, nonzero implies that the scheduler - * is enabled, with different features present according to the mask. - * - * The initial priority for each batch is supplied by the context and is - * controlled via I915_CONTEXT_PARAM_PRIORITY. - */ -#define I915_PARAM_HAS_SCHEDULER 41 -#define I915_SCHEDULER_CAP_ENABLED (1ul << 0) -#define I915_SCHEDULER_CAP_PRIORITY (1ul << 1) -#define I915_SCHEDULER_CAP_PREEMPTION (1ul << 2) -#define I915_SCHEDULER_CAP_SEMAPHORES (1ul << 3) - -#define I915_PARAM_HUC_STATUS 42 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to opt-out of - * synchronisation with implicit fencing on individual objects. - * See EXEC_OBJECT_ASYNC. - */ -#define I915_PARAM_HAS_EXEC_ASYNC 43 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports explicit fence support - - * both being able to pass in a sync_file fd to wait upon before executing, - * and being able to return a new sync_file fd that is signaled when the - * current request is complete. See I915_EXEC_FENCE_IN and I915_EXEC_FENCE_OUT. - */ -#define I915_PARAM_HAS_EXEC_FENCE 44 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to capture - * user specified buffers for post-mortem debugging of GPU hangs. See - * EXEC_OBJECT_CAPTURE. - */ -#define I915_PARAM_HAS_EXEC_CAPTURE 45 - -#define I915_PARAM_SLICE_MASK 46 - -/* Assuming it's uniform for each slice, this queries the mask of subslices - * per-slice for this system. - */ -#define I915_PARAM_SUBSLICE_MASK 47 - -/* - * Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying the batch buffer - * as the first execobject as opposed to the last. See I915_EXEC_BATCH_FIRST. - */ -#define I915_PARAM_HAS_EXEC_BATCH_FIRST 48 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying an array of - * drm_i915_gem_exec_fence structures. See I915_EXEC_FENCE_ARRAY. - */ -#define I915_PARAM_HAS_EXEC_FENCE_ARRAY 49 - -/* - * Query whether every context (both per-file default and user created) is - * isolated (insofar as HW supports). If this parameter is not true, then - * freshly created contexts may inherit values from an existing context, - * rather than default HW values. If true, it also ensures (insofar as HW - * supports) that all state set by this context will not leak to any other - * context. - * - * As not every engine across every gen support contexts, the returned - * value reports the support of context isolation for individual engines by - * returning a bitmask of each engine class set to true if that class supports - * isolation. - */ -#define I915_PARAM_HAS_CONTEXT_ISOLATION 50 - -/* Frequency of the command streamer timestamps given by the *_TIMESTAMP - * registers. This used to be fixed per platform but from CNL onwards, this - * might vary depending on the parts. - */ -#define I915_PARAM_CS_TIMESTAMP_FREQUENCY 51 - -/* - * Once upon a time we supposed that writes through the GGTT would be - * immediately in physical memory (once flushed out of the CPU path). However, - * on a few different processors and chipsets, this is not necessarily the case - * as the writes appear to be buffered internally. Thus a read of the backing - * storage (physical memory) via a different path (with different physical tags - * to the indirect write via the GGTT) will see stale values from before - * the GGTT write. Inside the kernel, we can for the most part keep track of - * the different read/write domains in use (e.g. set-domain), but the assumption - * of coherency is baked into the ABI, hence reporting its true state in this - * parameter. - * - * Reports true when writes via mmap_gtt are immediately visible following an - * lfence to flush the WCB. - * - * Reports false when writes via mmap_gtt are indeterminately delayed in an in - * internal buffer and are _not_ immediately visible to third parties accessing - * directly via mmap_cpu/mmap_wc. Use of mmap_gtt as part of an IPC - * communications channel when reporting false is strongly disadvised. - */ -#define I915_PARAM_MMAP_GTT_COHERENT 52 - -/* Must be kept compact -- no holes and well documented */ - -typedef struct drm_i915_getparam { - __s32 param; - /* - * WARNING: Using pointers instead of fixed-size u64 means we need to write - * compat32 code. Don't repeat this mistake. - */ - int *value; -} drm_i915_getparam_t; - -/* Ioctl to set kernel params: - */ -#define I915_SETPARAM_USE_MI_BATCHBUFFER_START 1 -#define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY 2 -#define I915_SETPARAM_ALLOW_BATCHBUFFER 3 -#define I915_SETPARAM_NUM_USED_FENCES 4 -/* Must be kept compact -- no holes */ - -typedef struct drm_i915_setparam { - int param; - int value; -} drm_i915_setparam_t; - -/* A memory manager for regions of shared memory: - */ -#define I915_MEM_REGION_AGP 1 - -typedef struct drm_i915_mem_alloc { - int region; - int alignment; - int size; - int *region_offset; /* offset from start of fb or agp */ -} drm_i915_mem_alloc_t; - -typedef struct drm_i915_mem_free { - int region; - int region_offset; -} drm_i915_mem_free_t; - -typedef struct drm_i915_mem_init_heap { - int region; - int size; - int start; -} drm_i915_mem_init_heap_t; - -/* Allow memory manager to be torn down and re-initialized (eg on - * rotate): - */ -typedef struct drm_i915_mem_destroy_heap { - int region; -} drm_i915_mem_destroy_heap_t; - -/* Allow X server to configure which pipes to monitor for vblank signals - */ -#define DRM_I915_VBLANK_PIPE_A 1 -#define DRM_I915_VBLANK_PIPE_B 2 - -typedef struct drm_i915_vblank_pipe { - int pipe; -} drm_i915_vblank_pipe_t; - -/* Schedule buffer swap at given vertical blank: - */ -typedef struct drm_i915_vblank_swap { - drm_drawable_t drawable; - enum drm_vblank_seq_type seqtype; - unsigned int sequence; -} drm_i915_vblank_swap_t; - -typedef struct drm_i915_hws_addr { - __u64 addr; -} drm_i915_hws_addr_t; - -struct drm_i915_gem_init { - /** - * Beginning offset in the GTT to be managed by the DRM memory - * manager. - */ - __u64 gtt_start; - /** - * Ending offset in the GTT to be managed by the DRM memory - * manager. - */ - __u64 gtt_end; -}; - -struct drm_i915_gem_create { - /** - * Requested size for the object. - * - * The (page-aligned) allocated size for the object will be returned. - */ - __u64 size; - /** - * Returned handle for the object. - * - * Object handles are nonzero. - */ - __u32 handle; - __u32 pad; -}; - -struct drm_i915_gem_pread { - /** Handle for the object being read. */ - __u32 handle; - __u32 pad; - /** Offset into the object to read from */ - __u64 offset; - /** Length of data to read */ - __u64 size; - /** - * Pointer to write the data into. - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 data_ptr; -}; - -struct drm_i915_gem_pwrite { - /** Handle for the object being written to. */ - __u32 handle; - __u32 pad; - /** Offset into the object to write to */ - __u64 offset; - /** Length of data to write */ - __u64 size; - /** - * Pointer to read the data from. - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 data_ptr; -}; - -struct drm_i915_gem_mmap { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 pad; - /** Offset in the object to map. */ - __u64 offset; - /** - * Length of data to map. - * - * The value will be page-aligned. - */ - __u64 size; - /** - * Returned pointer the data was mapped at. - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 addr_ptr; - - /** - * Flags for extended behaviour. - * - * Added in version 2. - */ - __u64 flags; -#define I915_MMAP_WC 0x1 -}; - -struct drm_i915_gem_mmap_gtt { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 pad; - /** - * Fake offset to use for subsequent mmap call - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 offset; -}; - -struct drm_i915_gem_set_domain { - /** Handle for the object */ - __u32 handle; - - /** New read domains */ - __u32 read_domains; - - /** New write domain */ - __u32 write_domain; -}; - -struct drm_i915_gem_sw_finish { - /** Handle for the object */ - __u32 handle; -}; - -struct drm_i915_gem_relocation_entry { - /** - * Handle of the buffer being pointed to by this relocation entry. - * - * It's appealing to make this be an index into the mm_validate_entry - * list to refer to the buffer, but this allows the driver to create - * a relocation list for state buffers and not re-write it per - * exec using the buffer. - */ - __u32 target_handle; - - /** - * Value to be added to the offset of the target buffer to make up - * the relocation entry. - */ - __u32 delta; - - /** Offset in the buffer the relocation entry will be written into */ - __u64 offset; - - /** - * Offset value of the target buffer that the relocation entry was last - * written as. - * - * If the buffer has the same offset as last time, we can skip syncing - * and writing the relocation. This value is written back out by - * the execbuffer ioctl when the relocation is written. - */ - __u64 presumed_offset; - - /** - * Target memory domains read by this operation. - */ - __u32 read_domains; - - /** - * Target memory domains written by this operation. - * - * Note that only one domain may be written by the whole - * execbuffer operation, so that where there are conflicts, - * the application will get -EINVAL back. - */ - __u32 write_domain; -}; - -/** @{ - * Intel memory domains - * - * Most of these just align with the various caches in - * the system and are used to flush and invalidate as - * objects end up cached in different domains. - */ -/** CPU cache */ -#define I915_GEM_DOMAIN_CPU 0x00000001 -/** Render cache, used by 2D and 3D drawing */ -#define I915_GEM_DOMAIN_RENDER 0x00000002 -/** Sampler cache, used by texture engine */ -#define I915_GEM_DOMAIN_SAMPLER 0x00000004 -/** Command queue, used to load batch buffers */ -#define I915_GEM_DOMAIN_COMMAND 0x00000008 -/** Instruction cache, used by shader programs */ -#define I915_GEM_DOMAIN_INSTRUCTION 0x00000010 -/** Vertex address cache */ -#define I915_GEM_DOMAIN_VERTEX 0x00000020 -/** GTT domain - aperture and scanout */ -#define I915_GEM_DOMAIN_GTT 0x00000040 -/** WC domain - uncached access */ -#define I915_GEM_DOMAIN_WC 0x00000080 -/** @} */ - -struct drm_i915_gem_exec_object { - /** - * User's handle for a buffer to be bound into the GTT for this - * operation. - */ - __u32 handle; - - /** Number of relocations to be performed on this buffer */ - __u32 relocation_count; - /** - * Pointer to array of struct drm_i915_gem_relocation_entry containing - * the relocations to be performed in this buffer. - */ - __u64 relocs_ptr; - - /** Required alignment in graphics aperture */ - __u64 alignment; - - /** - * Returned value of the updated offset of the object, for future - * presumed_offset writes. - */ - __u64 offset; -}; - -struct drm_i915_gem_execbuffer { - /** - * List of buffers to be validated with their relocations to be - * performend on them. - * - * This is a pointer to an array of struct drm_i915_gem_validate_entry. - * - * These buffers must be listed in an order such that all relocations - * a buffer is performing refer to buffers that have already appeared - * in the validate list. - */ - __u64 buffers_ptr; - __u32 buffer_count; - - /** Offset in the batchbuffer to start execution from. */ - __u32 batch_start_offset; - /** Bytes used in batchbuffer from batch_start_offset */ - __u32 batch_len; - __u32 DR1; - __u32 DR4; - __u32 num_cliprects; - /** This is a struct drm_clip_rect *cliprects */ - __u64 cliprects_ptr; -}; - -struct drm_i915_gem_exec_object2 { - /** - * User's handle for a buffer to be bound into the GTT for this - * operation. - */ - __u32 handle; - - /** Number of relocations to be performed on this buffer */ - __u32 relocation_count; - /** - * Pointer to array of struct drm_i915_gem_relocation_entry containing - * the relocations to be performed in this buffer. - */ - __u64 relocs_ptr; - - /** Required alignment in graphics aperture */ - __u64 alignment; - - /** - * When the EXEC_OBJECT_PINNED flag is specified this is populated by - * the user with the GTT offset at which this object will be pinned. - * When the I915_EXEC_NO_RELOC flag is specified this must contain the - * presumed_offset of the object. - * During execbuffer2 the kernel populates it with the value of the - * current GTT offset of the object, for future presumed_offset writes. - */ - __u64 offset; - -#define EXEC_OBJECT_NEEDS_FENCE (1<<0) -#define EXEC_OBJECT_NEEDS_GTT (1<<1) -#define EXEC_OBJECT_WRITE (1<<2) -#define EXEC_OBJECT_SUPPORTS_48B_ADDRESS (1<<3) -#define EXEC_OBJECT_PINNED (1<<4) -#define EXEC_OBJECT_PAD_TO_SIZE (1<<5) -/* The kernel implicitly tracks GPU activity on all GEM objects, and - * synchronises operations with outstanding rendering. This includes - * rendering on other devices if exported via dma-buf. However, sometimes - * this tracking is too coarse and the user knows better. For example, - * if the object is split into non-overlapping ranges shared between different - * clients or engines (i.e. suballocating objects), the implicit tracking - * by kernel assumes that each operation affects the whole object rather - * than an individual range, causing needless synchronisation between clients. - * The kernel will also forgo any CPU cache flushes prior to rendering from - * the object as the client is expected to be also handling such domain - * tracking. - * - * The kernel maintains the implicit tracking in order to manage resources - * used by the GPU - this flag only disables the synchronisation prior to - * rendering with this object in this execbuf. - * - * Opting out of implicit synhronisation requires the user to do its own - * explicit tracking to avoid rendering corruption. See, for example, - * I915_PARAM_HAS_EXEC_FENCE to order execbufs and execute them asynchronously. - */ -#define EXEC_OBJECT_ASYNC (1<<6) -/* Request that the contents of this execobject be copied into the error - * state upon a GPU hang involving this batch for post-mortem debugging. - * These buffers are recorded in no particular order as "user" in - * /sys/class/drm/cardN/error. Query I915_PARAM_HAS_EXEC_CAPTURE to see - * if the kernel supports this flag. - */ -#define EXEC_OBJECT_CAPTURE (1<<7) -/* All remaining bits are MBZ and RESERVED FOR FUTURE USE */ -#define __EXEC_OBJECT_UNKNOWN_FLAGS -(EXEC_OBJECT_CAPTURE<<1) - __u64 flags; - - union { - __u64 rsvd1; - __u64 pad_to_size; - }; - __u64 rsvd2; -}; - -struct drm_i915_gem_exec_fence { - /** - * User's handle for a drm_syncobj to wait on or signal. - */ - __u32 handle; - -#define I915_EXEC_FENCE_WAIT (1<<0) -#define I915_EXEC_FENCE_SIGNAL (1<<1) -#define __I915_EXEC_FENCE_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SIGNAL << 1)) - __u32 flags; -}; - -struct drm_i915_gem_execbuffer2 { - /** - * List of gem_exec_object2 structs - */ - __u64 buffers_ptr; - __u32 buffer_count; - - /** Offset in the batchbuffer to start execution from. */ - __u32 batch_start_offset; - /** Bytes used in batchbuffer from batch_start_offset */ - __u32 batch_len; - __u32 DR1; - __u32 DR4; - __u32 num_cliprects; - /** - * This is a struct drm_clip_rect *cliprects if I915_EXEC_FENCE_ARRAY - * is not set. If I915_EXEC_FENCE_ARRAY is set, then this is a - * struct drm_i915_gem_exec_fence *fences. - */ - __u64 cliprects_ptr; -#define I915_EXEC_RING_MASK (0x3f) -#define I915_EXEC_DEFAULT (0<<0) -#define I915_EXEC_RENDER (1<<0) -#define I915_EXEC_BSD (2<<0) -#define I915_EXEC_BLT (3<<0) -#define I915_EXEC_VEBOX (4<<0) - -/* Used for switching the constants addressing mode on gen4+ RENDER ring. - * Gen6+ only supports relative addressing to dynamic state (default) and - * absolute addressing. - * - * These flags are ignored for the BSD and BLT rings. - */ -#define I915_EXEC_CONSTANTS_MASK (3<<6) -#define I915_EXEC_CONSTANTS_REL_GENERAL (0<<6) /* default */ -#define I915_EXEC_CONSTANTS_ABSOLUTE (1<<6) -#define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) /* gen4/5 only */ - __u64 flags; - __u64 rsvd1; /* now used for context info */ - __u64 rsvd2; -}; - -/** Resets the SO write offset registers for transform feedback on gen7. */ -#define I915_EXEC_GEN7_SOL_RESET (1<<8) - -/** Request a privileged ("secure") batch buffer. Note only available for - * DRM_ROOT_ONLY | DRM_MASTER processes. - */ -#define I915_EXEC_SECURE (1<<9) - -/** Inform the kernel that the batch is and will always be pinned. This - * negates the requirement for a workaround to be performed to avoid - * an incoherent CS (such as can be found on 830/845). If this flag is - * not passed, the kernel will endeavour to make sure the batch is - * coherent with the CS before execution. If this flag is passed, - * userspace assumes the responsibility for ensuring the same. - */ -#define I915_EXEC_IS_PINNED (1<<10) - -/** Provide a hint to the kernel that the command stream and auxiliary - * state buffers already holds the correct presumed addresses and so the - * relocation process may be skipped if no buffers need to be moved in - * preparation for the execbuffer. - */ -#define I915_EXEC_NO_RELOC (1<<11) - -/** Use the reloc.handle as an index into the exec object array rather - * than as the per-file handle. - */ -#define I915_EXEC_HANDLE_LUT (1<<12) - -/** Used for switching BSD rings on the platforms with two BSD rings */ -#define I915_EXEC_BSD_SHIFT (13) -#define I915_EXEC_BSD_MASK (3 << I915_EXEC_BSD_SHIFT) -/* default ping-pong mode */ -#define I915_EXEC_BSD_DEFAULT (0 << I915_EXEC_BSD_SHIFT) -#define I915_EXEC_BSD_RING1 (1 << I915_EXEC_BSD_SHIFT) -#define I915_EXEC_BSD_RING2 (2 << I915_EXEC_BSD_SHIFT) - -/** Tell the kernel that the batchbuffer is processed by - * the resource streamer. - */ -#define I915_EXEC_RESOURCE_STREAMER (1<<15) - -/* Setting I915_EXEC_FENCE_IN implies that lower_32_bits(rsvd2) represent - * a sync_file fd to wait upon (in a nonblocking manner) prior to executing - * the batch. - * - * Returns -EINVAL if the sync_file fd cannot be found. - */ -#define I915_EXEC_FENCE_IN (1<<16) - -/* Setting I915_EXEC_FENCE_OUT causes the ioctl to return a sync_file fd - * in the upper_32_bits(rsvd2) upon success. Ownership of the fd is given - * to the caller, and it should be close() after use. (The fd is a regular - * file descriptor and will be cleaned up on process termination. It holds - * a reference to the request, but nothing else.) - * - * The sync_file fd can be combined with other sync_file and passed either - * to execbuf using I915_EXEC_FENCE_IN, to atomic KMS ioctls (so that a flip - * will only occur after this request completes), or to other devices. - * - * Using I915_EXEC_FENCE_OUT requires use of - * DRM_IOCTL_I915_GEM_EXECBUFFER2_WR ioctl so that the result is written - * back to userspace. Failure to do so will cause the out-fence to always - * be reported as zero, and the real fence fd to be leaked. - */ -#define I915_EXEC_FENCE_OUT (1<<17) - -/* - * Traditionally the execbuf ioctl has only considered the final element in - * the execobject[] to be the executable batch. Often though, the client - * will known the batch object prior to construction and being able to place - * it into the execobject[] array first can simplify the relocation tracking. - * Setting I915_EXEC_BATCH_FIRST tells execbuf to use element 0 of the - * execobject[] as the * batch instead (the default is to use the last - * element). - */ -#define I915_EXEC_BATCH_FIRST (1<<18) - -/* Setting I915_FENCE_ARRAY implies that num_cliprects and cliprects_ptr - * define an array of i915_gem_exec_fence structures which specify a set of - * dma fences to wait upon or signal. - */ -#define I915_EXEC_FENCE_ARRAY (1<<19) - -#define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_ARRAY<<1)) - -#define I915_EXEC_CONTEXT_ID_MASK (0xffffffff) -#define i915_execbuffer2_set_context_id(eb2, context) \ - (eb2).rsvd1 = context & I915_EXEC_CONTEXT_ID_MASK -#define i915_execbuffer2_get_context_id(eb2) \ - ((eb2).rsvd1 & I915_EXEC_CONTEXT_ID_MASK) - -struct drm_i915_gem_pin { - /** Handle of the buffer to be pinned. */ - __u32 handle; - __u32 pad; - - /** alignment required within the aperture */ - __u64 alignment; - - /** Returned GTT offset of the buffer. */ - __u64 offset; -}; - -struct drm_i915_gem_unpin { - /** Handle of the buffer to be unpinned. */ - __u32 handle; - __u32 pad; -}; - -struct drm_i915_gem_busy { - /** Handle of the buffer to check for busy */ - __u32 handle; - - /** Return busy status - * - * A return of 0 implies that the object is idle (after - * having flushed any pending activity), and a non-zero return that - * the object is still in-flight on the GPU. (The GPU has not yet - * signaled completion for all pending requests that reference the - * object.) An object is guaranteed to become idle eventually (so - * long as no new GPU commands are executed upon it). Due to the - * asynchronous nature of the hardware, an object reported - * as busy may become idle before the ioctl is completed. - * - * Furthermore, if the object is busy, which engine is busy is only - * provided as a guide and only indirectly by reporting its class - * (there may be more than one engine in each class). There are race - * conditions which prevent the report of which engines are busy from - * being always accurate. However, the converse is not true. If the - * object is idle, the result of the ioctl, that all engines are idle, - * is accurate. - * - * The returned dword is split into two fields to indicate both - * the engine classess on which the object is being read, and the - * engine class on which it is currently being written (if any). - * - * The low word (bits 0:15) indicate if the object is being written - * to by any engine (there can only be one, as the GEM implicit - * synchronisation rules force writes to be serialised). Only the - * engine class (offset by 1, I915_ENGINE_CLASS_RENDER is reported as - * 1 not 0 etc) for the last write is reported. - * - * The high word (bits 16:31) are a bitmask of which engines classes - * are currently reading from the object. Multiple engines may be - * reading from the object simultaneously. - * - * The value of each engine class is the same as specified in the - * I915_CONTEXT_SET_ENGINES parameter and via perf, i.e. - * I915_ENGINE_CLASS_RENDER, I915_ENGINE_CLASS_COPY, etc. - * reported as active itself. Some hardware may have parallel - * execution engines, e.g. multiple media engines, which are - * mapped to the same class identifier and so are not separately - * reported for busyness. - * - * Caveat emptor: - * Only the boolean result of this query is reliable; that is whether - * the object is idle or busy. The report of which engines are busy - * should be only used as a heuristic. - */ - __u32 busy; -}; - -/** - * I915_CACHING_NONE - * - * GPU access is not coherent with cpu caches. Default for machines without an - * LLC. - */ -#define I915_CACHING_NONE 0 -/** - * I915_CACHING_CACHED - * - * GPU access is coherent with cpu caches and furthermore the data is cached in - * last-level caches shared between cpu cores and the gpu GT. Default on - * machines with HAS_LLC. - */ -#define I915_CACHING_CACHED 1 -/** - * I915_CACHING_DISPLAY - * - * Special GPU caching mode which is coherent with the scanout engines. - * Transparently falls back to I915_CACHING_NONE on platforms where no special - * cache mode (like write-through or gfdt flushing) is available. The kernel - * automatically sets this mode when using a buffer as a scanout target. - * Userspace can manually set this mode to avoid a costly stall and clflush in - * the hotpath of drawing the first frame. - */ -#define I915_CACHING_DISPLAY 2 - -struct drm_i915_gem_caching { - /** - * Handle of the buffer to set/get the caching level of. */ - __u32 handle; - - /** - * Caching level to apply or return value - * - * bits0-15 are for generic caching control (i.e. the above defined - * values). bits16-31 are reserved for platform-specific variations - * (e.g. l3$ caching on gen7). */ - __u32 caching; -}; - -#define I915_TILING_NONE 0 -#define I915_TILING_X 1 -#define I915_TILING_Y 2 -#define I915_TILING_LAST I915_TILING_Y - -#define I915_BIT_6_SWIZZLE_NONE 0 -#define I915_BIT_6_SWIZZLE_9 1 -#define I915_BIT_6_SWIZZLE_9_10 2 -#define I915_BIT_6_SWIZZLE_9_11 3 -#define I915_BIT_6_SWIZZLE_9_10_11 4 -/* Not seen by userland */ -#define I915_BIT_6_SWIZZLE_UNKNOWN 5 -/* Seen by userland. */ -#define I915_BIT_6_SWIZZLE_9_17 6 -#define I915_BIT_6_SWIZZLE_9_10_17 7 - -struct drm_i915_gem_set_tiling { - /** Handle of the buffer to have its tiling state updated */ - __u32 handle; - - /** - * Tiling mode for the object (I915_TILING_NONE, I915_TILING_X, - * I915_TILING_Y). - * - * This value is to be set on request, and will be updated by the - * kernel on successful return with the actual chosen tiling layout. - * - * The tiling mode may be demoted to I915_TILING_NONE when the system - * has bit 6 swizzling that can't be managed correctly by GEM. - * - * Buffer contents become undefined when changing tiling_mode. - */ - __u32 tiling_mode; - - /** - * Stride in bytes for the object when in I915_TILING_X or - * I915_TILING_Y. - */ - __u32 stride; - - /** - * Returned address bit 6 swizzling required for CPU access through - * mmap mapping. - */ - __u32 swizzle_mode; -}; - -struct drm_i915_gem_get_tiling { - /** Handle of the buffer to get tiling state for. */ - __u32 handle; - - /** - * Current tiling mode for the object (I915_TILING_NONE, I915_TILING_X, - * I915_TILING_Y). - */ - __u32 tiling_mode; - - /** - * Returned address bit 6 swizzling required for CPU access through - * mmap mapping. - */ - __u32 swizzle_mode; - - /** - * Returned address bit 6 swizzling required for CPU access through - * mmap mapping whilst bound. - */ - __u32 phys_swizzle_mode; -}; - -struct drm_i915_gem_get_aperture { - /** Total size of the aperture used by i915_gem_execbuffer, in bytes */ - __u64 aper_size; - - /** - * Available space in the aperture used by i915_gem_execbuffer, in - * bytes - */ - __u64 aper_available_size; -}; - -struct drm_i915_get_pipe_from_crtc_id { - /** ID of CRTC being requested **/ - __u32 crtc_id; - - /** pipe of requested CRTC **/ - __u32 pipe; -}; - -#define I915_MADV_WILLNEED 0 -#define I915_MADV_DONTNEED 1 -#define __I915_MADV_PURGED 2 /* internal state */ - -struct drm_i915_gem_madvise { - /** Handle of the buffer to change the backing store advice */ - __u32 handle; - - /* Advice: either the buffer will be needed again in the near future, - * or wont be and could be discarded under memory pressure. - */ - __u32 madv; - - /** Whether the backing store still exists. */ - __u32 retained; -}; - -/* flags */ -#define I915_OVERLAY_TYPE_MASK 0xff -#define I915_OVERLAY_YUV_PLANAR 0x01 -#define I915_OVERLAY_YUV_PACKED 0x02 -#define I915_OVERLAY_RGB 0x03 - -#define I915_OVERLAY_DEPTH_MASK 0xff00 -#define I915_OVERLAY_RGB24 0x1000 -#define I915_OVERLAY_RGB16 0x2000 -#define I915_OVERLAY_RGB15 0x3000 -#define I915_OVERLAY_YUV422 0x0100 -#define I915_OVERLAY_YUV411 0x0200 -#define I915_OVERLAY_YUV420 0x0300 -#define I915_OVERLAY_YUV410 0x0400 - -#define I915_OVERLAY_SWAP_MASK 0xff0000 -#define I915_OVERLAY_NO_SWAP 0x000000 -#define I915_OVERLAY_UV_SWAP 0x010000 -#define I915_OVERLAY_Y_SWAP 0x020000 -#define I915_OVERLAY_Y_AND_UV_SWAP 0x030000 - -#define I915_OVERLAY_FLAGS_MASK 0xff000000 -#define I915_OVERLAY_ENABLE 0x01000000 - -struct drm_intel_overlay_put_image { - /* various flags and src format description */ - __u32 flags; - /* source picture description */ - __u32 bo_handle; - /* stride values and offsets are in bytes, buffer relative */ - __u16 stride_Y; /* stride for packed formats */ - __u16 stride_UV; - __u32 offset_Y; /* offset for packet formats */ - __u32 offset_U; - __u32 offset_V; - /* in pixels */ - __u16 src_width; - __u16 src_height; - /* to compensate the scaling factors for partially covered surfaces */ - __u16 src_scan_width; - __u16 src_scan_height; - /* output crtc description */ - __u32 crtc_id; - __u16 dst_x; - __u16 dst_y; - __u16 dst_width; - __u16 dst_height; -}; - -/* flags */ -#define I915_OVERLAY_UPDATE_ATTRS (1<<0) -#define I915_OVERLAY_UPDATE_GAMMA (1<<1) -#define I915_OVERLAY_DISABLE_DEST_COLORKEY (1<<2) -struct drm_intel_overlay_attrs { - __u32 flags; - __u32 color_key; - __s32 brightness; - __u32 contrast; - __u32 saturation; - __u32 gamma0; - __u32 gamma1; - __u32 gamma2; - __u32 gamma3; - __u32 gamma4; - __u32 gamma5; -}; - -/* - * Intel sprite handling - * - * Color keying works with a min/mask/max tuple. Both source and destination - * color keying is allowed. - * - * Source keying: - * Sprite pixels within the min & max values, masked against the color channels - * specified in the mask field, will be transparent. All other pixels will - * be displayed on top of the primary plane. For RGB surfaces, only the min - * and mask fields will be used; ranged compares are not allowed. - * - * Destination keying: - * Primary plane pixels that match the min value, masked against the color - * channels specified in the mask field, will be replaced by corresponding - * pixels from the sprite plane. - * - * Note that source & destination keying are exclusive; only one can be - * active on a given plane. - */ - -#define I915_SET_COLORKEY_NONE (1<<0) /* Deprecated. Instead set - * flags==0 to disable colorkeying. - */ -#define I915_SET_COLORKEY_DESTINATION (1<<1) -#define I915_SET_COLORKEY_SOURCE (1<<2) -struct drm_intel_sprite_colorkey { - __u32 plane_id; - __u32 min_value; - __u32 channel_mask; - __u32 max_value; - __u32 flags; -}; - -struct drm_i915_gem_wait { - /** Handle of BO we shall wait on */ - __u32 bo_handle; - __u32 flags; - /** Number of nanoseconds to wait, Returns time remaining. */ - __s64 timeout_ns; -}; - -struct drm_i915_gem_context_create { - __u32 ctx_id; /* output: id of new context*/ - __u32 pad; -}; - -struct drm_i915_gem_context_create_ext { - __u32 ctx_id; /* output: id of new context*/ - __u32 flags; -#define I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS (1u << 0) -#define I915_CONTEXT_CREATE_FLAGS_UNKNOWN \ - (-(I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS << 1)) - __u64 extensions; -}; - -struct drm_i915_gem_context_param { - __u32 ctx_id; - __u32 size; - __u64 param; -#define I915_CONTEXT_PARAM_BAN_PERIOD 0x1 -#define I915_CONTEXT_PARAM_NO_ZEROMAP 0x2 -#define I915_CONTEXT_PARAM_GTT_SIZE 0x3 -#define I915_CONTEXT_PARAM_NO_ERROR_CAPTURE 0x4 -#define I915_CONTEXT_PARAM_BANNABLE 0x5 -#define I915_CONTEXT_PARAM_PRIORITY 0x6 -#define I915_CONTEXT_MAX_USER_PRIORITY 1023 /* inclusive */ -#define I915_CONTEXT_DEFAULT_PRIORITY 0 -#define I915_CONTEXT_MIN_USER_PRIORITY -1023 /* inclusive */ - /* - * When using the following param, value should be a pointer to - * drm_i915_gem_context_param_sseu. - */ -#define I915_CONTEXT_PARAM_SSEU 0x7 - -/* - * Not all clients may want to attempt automatic recover of a context after - * a hang (for example, some clients may only submit very small incremental - * batches relying on known logical state of previous batches which will never - * recover correctly and each attempt will hang), and so would prefer that - * the context is forever banned instead. - * - * If set to false (0), after a reset, subsequent (and in flight) rendering - * from this context is discarded, and the client will need to create a new - * context to use instead. - * - * If set to true (1), the kernel will automatically attempt to recover the - * context by skipping the hanging batch and executing the next batch starting - * from the default context state (discarding the incomplete logical context - * state lost due to the reset). - * - * On creation, all new contexts are marked as recoverable. - */ -#define I915_CONTEXT_PARAM_RECOVERABLE 0x8 -/* Must be kept compact -- no holes and well documented */ - - __u64 value; -}; - -/** - * Context SSEU programming - * - * It may be necessary for either functional or performance reason to configure - * a context to run with a reduced number of SSEU (where SSEU stands for Slice/ - * Sub-slice/EU). - * - * This is done by configuring SSEU configuration using the below - * @struct drm_i915_gem_context_param_sseu for every supported engine which - * userspace intends to use. - * - * Not all GPUs or engines support this functionality in which case an error - * code -ENODEV will be returned. - * - * Also, flexibility of possible SSEU configuration permutations varies between - * GPU generations and software imposed limitations. Requesting such a - * combination will return an error code of -EINVAL. - * - * NOTE: When perf/OA is active the context's SSEU configuration is ignored in - * favour of a single global setting. - */ -struct drm_i915_gem_context_param_sseu { - /* - * Engine class & instance to be configured or queried. - */ - __u16 engine_class; - __u16 engine_instance; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 flags; - - /* - * Mask of slices to enable for the context. Valid values are a subset - * of the bitmask value returned for I915_PARAM_SLICE_MASK. - */ - __u64 slice_mask; - - /* - * Mask of subslices to enable for the context. Valid values are a - * subset of the bitmask value return by I915_PARAM_SUBSLICE_MASK. - */ - __u64 subslice_mask; - - /* - * Minimum/Maximum number of EUs to enable per subslice for the - * context. min_eus_per_subslice must be inferior or equal to - * max_eus_per_subslice. - */ - __u16 min_eus_per_subslice; - __u16 max_eus_per_subslice; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 rsvd; -}; - -struct drm_i915_gem_context_create_ext_setparam { -#define I915_CONTEXT_CREATE_EXT_SETPARAM 0 - struct i915_user_extension base; - struct drm_i915_gem_context_param param; -}; - -struct drm_i915_gem_context_destroy { - __u32 ctx_id; - __u32 pad; -}; - -/* - * DRM_I915_GEM_VM_CREATE - - * - * Create a new virtual memory address space (ppGTT) for use within a context - * on the same file. Extensions can be provided to configure exactly how the - * address space is setup upon creation. - * - * The id of new VM (bound to the fd) for use with I915_CONTEXT_PARAM_VM is - * returned in the outparam @id. - * - * No flags are defined, with all bits reserved and must be zero. - * - * An extension chain maybe provided, starting with @extensions, and terminated - * by the @next_extension being 0. Currently, no extensions are defined. - * - * DRM_I915_GEM_VM_DESTROY - - * - * Destroys a previously created VM id, specified in @id. - * - * No extensions or flags are allowed currently, and so must be zero. - */ -struct drm_i915_gem_vm_control { - __u64 extensions; - __u32 flags; - __u32 vm_id; -}; - -struct drm_i915_reg_read { - /* - * Register offset. - * For 64bit wide registers where the upper 32bits don't immediately - * follow the lower 32bits, the offset of the lower 32bits must - * be specified - */ - __u64 offset; -#define I915_REG_READ_8B_WA (1ul << 0) - - __u64 val; /* Return value */ -}; - -/* Known registers: - * - * Render engine timestamp - 0x2358 + 64bit - gen7+ - * - Note this register returns an invalid value if using the default - * single instruction 8byte read, in order to workaround that pass - * flag I915_REG_READ_8B_WA in offset field. - * - */ - -struct drm_i915_reset_stats { - __u32 ctx_id; - __u32 flags; - - /* All resets since boot/module reload, for all contexts */ - __u32 reset_count; - - /* Number of batches lost when active in GPU, for this context */ - __u32 batch_active; - - /* Number of batches lost pending for execution, for this context */ - __u32 batch_pending; - - __u32 pad; -}; - -struct drm_i915_gem_userptr { - __u64 user_ptr; - __u64 user_size; - __u32 flags; -#define I915_USERPTR_READ_ONLY 0x1 -#define I915_USERPTR_UNSYNCHRONIZED 0x80000000 - /** - * Returned handle for the object. - * - * Object handles are nonzero. - */ - __u32 handle; -}; - -enum drm_i915_oa_format { - I915_OA_FORMAT_A13 = 1, /* HSW only */ - I915_OA_FORMAT_A29, /* HSW only */ - I915_OA_FORMAT_A13_B8_C8, /* HSW only */ - I915_OA_FORMAT_B4_C8, /* HSW only */ - I915_OA_FORMAT_A45_B8_C8, /* HSW only */ - I915_OA_FORMAT_B4_C8_A16, /* HSW only */ - I915_OA_FORMAT_C4_B8, /* HSW+ */ - - /* Gen8+ */ - I915_OA_FORMAT_A12, - I915_OA_FORMAT_A12_B8_C8, - I915_OA_FORMAT_A32u40_A4u32_B8_C8, - - I915_OA_FORMAT_MAX /* non-ABI */ -}; - -enum drm_i915_perf_property_id { - /** - * Open the stream for a specific context handle (as used with - * execbuffer2). A stream opened for a specific context this way - * won't typically require root privileges. - */ - DRM_I915_PERF_PROP_CTX_HANDLE = 1, - - /** - * A value of 1 requests the inclusion of raw OA unit reports as - * part of stream samples. - */ - DRM_I915_PERF_PROP_SAMPLE_OA, - - /** - * The value specifies which set of OA unit metrics should be - * be configured, defining the contents of any OA unit reports. - */ - DRM_I915_PERF_PROP_OA_METRICS_SET, - - /** - * The value specifies the size and layout of OA unit reports. - */ - DRM_I915_PERF_PROP_OA_FORMAT, - - /** - * Specifying this property implicitly requests periodic OA unit - * sampling and (at least on Haswell) the sampling frequency is derived - * from this exponent as follows: - * - * 80ns * 2^(period_exponent + 1) - */ - DRM_I915_PERF_PROP_OA_EXPONENT, - - DRM_I915_PERF_PROP_MAX /* non-ABI */ -}; - -struct drm_i915_perf_open_param { - __u32 flags; -#define I915_PERF_FLAG_FD_CLOEXEC (1<<0) -#define I915_PERF_FLAG_FD_NONBLOCK (1<<1) -#define I915_PERF_FLAG_DISABLED (1<<2) - - /** The number of u64 (id, value) pairs */ - __u32 num_properties; - - /** - * Pointer to array of u64 (id, value) pairs configuring the stream - * to open. - */ - __u64 properties_ptr; -}; - -/** - * Enable data capture for a stream that was either opened in a disabled state - * via I915_PERF_FLAG_DISABLED or was later disabled via - * I915_PERF_IOCTL_DISABLE. - * - * It is intended to be cheaper to disable and enable a stream than it may be - * to close and re-open a stream with the same configuration. - * - * It's undefined whether any pending data for the stream will be lost. - */ -#define I915_PERF_IOCTL_ENABLE _IO('i', 0x0) - -/** - * Disable data capture for a stream. - * - * It is an error to try and read a stream that is disabled. - */ -#define I915_PERF_IOCTL_DISABLE _IO('i', 0x1) - -/** - * Common to all i915 perf records - */ -struct drm_i915_perf_record_header { - __u32 type; - __u16 pad; - __u16 size; -}; - -enum drm_i915_perf_record_type { - - /** - * Samples are the work horse record type whose contents are extensible - * and defined when opening an i915 perf stream based on the given - * properties. - * - * Boolean properties following the naming convention - * DRM_I915_PERF_SAMPLE_xyz_PROP request the inclusion of 'xyz' data in - * every sample. - * - * The order of these sample properties given by userspace has no - * affect on the ordering of data within a sample. The order is - * documented here. - * - * struct { - * struct drm_i915_perf_record_header header; - * - * { u32 oa_report[]; } && DRM_I915_PERF_PROP_SAMPLE_OA - * }; - */ - DRM_I915_PERF_RECORD_SAMPLE = 1, - - /* - * Indicates that one or more OA reports were not written by the - * hardware. This can happen for example if an MI_REPORT_PERF_COUNT - * command collides with periodic sampling - which would be more likely - * at higher sampling frequencies. - */ - DRM_I915_PERF_RECORD_OA_REPORT_LOST = 2, - - /** - * An error occurred that resulted in all pending OA reports being lost. - */ - DRM_I915_PERF_RECORD_OA_BUFFER_LOST = 3, - - DRM_I915_PERF_RECORD_MAX /* non-ABI */ -}; - -/** - * Structure to upload perf dynamic configuration into the kernel. - */ -struct drm_i915_perf_oa_config { - /** String formatted like "%08x-%04x-%04x-%04x-%012x" */ - char uuid[36]; - - __u32 n_mux_regs; - __u32 n_boolean_regs; - __u32 n_flex_regs; - - /* - * These fields are pointers to tuples of u32 values (register address, - * value). For example the expected length of the buffer pointed by - * mux_regs_ptr is (2 * sizeof(u32) * n_mux_regs). - */ - __u64 mux_regs_ptr; - __u64 boolean_regs_ptr; - __u64 flex_regs_ptr; -}; - -struct drm_i915_query_item { - __u64 query_id; -#define DRM_I915_QUERY_TOPOLOGY_INFO 1 -/* Must be kept compact -- no holes and well documented */ - - /* - * When set to zero by userspace, this is filled with the size of the - * data to be written at the data_ptr pointer. The kernel sets this - * value to a negative value to signal an error on a particular query - * item. - */ - __s32 length; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 flags; - - /* - * Data will be written at the location pointed by data_ptr when the - * value of length matches the length of the data to be written by the - * kernel. - */ - __u64 data_ptr; -}; - -struct drm_i915_query { - __u32 num_items; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 flags; - - /* - * This points to an array of num_items drm_i915_query_item structures. - */ - __u64 items_ptr; -}; - -/* - * Data written by the kernel with query DRM_I915_QUERY_TOPOLOGY_INFO : - * - * data: contains the 3 pieces of information : - * - * - the slice mask with one bit per slice telling whether a slice is - * available. The availability of slice X can be queried with the following - * formula : - * - * (data[X / 8] >> (X % 8)) & 1 - * - * - the subslice mask for each slice with one bit per subslice telling - * whether a subslice is available. The availability of subslice Y in slice - * X can be queried with the following formula : - * - * (data[subslice_offset + - * X * subslice_stride + - * Y / 8] >> (Y % 8)) & 1 - * - * - the EU mask for each subslice in each slice with one bit per EU telling - * whether an EU is available. The availability of EU Z in subslice Y in - * slice X can be queried with the following formula : - * - * (data[eu_offset + - * (X * max_subslices + Y) * eu_stride + - * Z / 8] >> (Z % 8)) & 1 - */ -struct drm_i915_query_topology_info { - /* - * Unused for now. Must be cleared to zero. - */ - __u16 flags; - - __u16 max_slices; - __u16 max_subslices; - __u16 max_eus_per_subslice; - - /* - * Offset in data[] at which the subslice masks are stored. - */ - __u16 subslice_offset; - - /* - * Stride at which each of the subslice masks for each slice are - * stored. - */ - __u16 subslice_stride; - - /* - * Offset in data[] at which the EU masks are stored. - */ - __u16 eu_offset; - - /* - * Stride at which each of the EU masks for each subslice are stored. - */ - __u16 eu_stride; - - __u8 data[]; -}; - -#if defined(__cplusplus) -} -#endif - -#endif /* _I915_DRM_H_ */ diff --git a/prebuilts/x86/include/libdrm/intel_aub.h b/prebuilts/x86/include/libdrm/intel_aub.h deleted file mode 100644 index 5f0aba8..0000000 --- a/prebuilts/x86/include/libdrm/intel_aub.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - * - * Authors: - * Eric Anholt - * - */ - -/** @file intel_aub.h - * - * The AUB file is a file format used by Intel's internal simulation - * and other validation tools. It can be used at various levels by a - * driver to input state to the simulated hardware or a replaying - * debugger. - * - * We choose to dump AUB files using the trace block format for ease - * of implementation -- dump out the blocks of memory as plain blobs - * and insert ring commands to execute the batchbuffer blob. - */ - -#ifndef _INTEL_AUB_H -#define _INTEL_AUB_H - -#define AUB_MI_NOOP (0) -#define AUB_MI_BATCH_BUFFER_START (0x31 << 23) -#define AUB_PIPE_CONTROL (0x7a000002) - -/* DW0: instruction type. */ - -#define CMD_AUB (7 << 29) - -#define CMD_AUB_HEADER (CMD_AUB | (1 << 23) | (0x05 << 16)) -/* DW1 */ -# define AUB_HEADER_MAJOR_SHIFT 24 -# define AUB_HEADER_MINOR_SHIFT 16 - -#define CMD_AUB_TRACE_HEADER_BLOCK (CMD_AUB | (1 << 23) | (0x41 << 16)) -#define CMD_AUB_DUMP_BMP (CMD_AUB | (1 << 23) | (0x9e << 16)) - -/* DW1 */ -#define AUB_TRACE_OPERATION_MASK 0x000000ff -#define AUB_TRACE_OP_COMMENT 0x00000000 -#define AUB_TRACE_OP_DATA_WRITE 0x00000001 -#define AUB_TRACE_OP_COMMAND_WRITE 0x00000002 -#define AUB_TRACE_OP_MMIO_WRITE 0x00000003 -// operation = TRACE_DATA_WRITE, Type -#define AUB_TRACE_TYPE_MASK 0x0000ff00 -#define AUB_TRACE_TYPE_NOTYPE (0 << 8) -#define AUB_TRACE_TYPE_BATCH (1 << 8) -#define AUB_TRACE_TYPE_VERTEX_BUFFER (5 << 8) -#define AUB_TRACE_TYPE_2D_MAP (6 << 8) -#define AUB_TRACE_TYPE_CUBE_MAP (7 << 8) -#define AUB_TRACE_TYPE_VOLUME_MAP (9 << 8) -#define AUB_TRACE_TYPE_1D_MAP (10 << 8) -#define AUB_TRACE_TYPE_CONSTANT_BUFFER (11 << 8) -#define AUB_TRACE_TYPE_CONSTANT_URB (12 << 8) -#define AUB_TRACE_TYPE_INDEX_BUFFER (13 << 8) -#define AUB_TRACE_TYPE_GENERAL (14 << 8) -#define AUB_TRACE_TYPE_SURFACE (15 << 8) - - -// operation = TRACE_COMMAND_WRITE, Type = -#define AUB_TRACE_TYPE_RING_HWB (1 << 8) -#define AUB_TRACE_TYPE_RING_PRB0 (2 << 8) -#define AUB_TRACE_TYPE_RING_PRB1 (3 << 8) -#define AUB_TRACE_TYPE_RING_PRB2 (4 << 8) - -// Address space -#define AUB_TRACE_ADDRESS_SPACE_MASK 0x00ff0000 -#define AUB_TRACE_MEMTYPE_GTT (0 << 16) -#define AUB_TRACE_MEMTYPE_LOCAL (1 << 16) -#define AUB_TRACE_MEMTYPE_NONLOCAL (2 << 16) -#define AUB_TRACE_MEMTYPE_PCI (3 << 16) -#define AUB_TRACE_MEMTYPE_GTT_ENTRY (4 << 16) - -/* DW2 */ - -/** - * aub_state_struct_type enum values are encoded with the top 16 bits - * representing the type to be delivered to the .aub file, and the bottom 16 - * bits representing the subtype. This macro performs the encoding. - */ -#define ENCODE_SS_TYPE(type, subtype) (((type) << 16) | (subtype)) - -enum aub_state_struct_type { - AUB_TRACE_VS_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 1), - AUB_TRACE_GS_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 2), - AUB_TRACE_CLIP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 3), - AUB_TRACE_SF_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 4), - AUB_TRACE_WM_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 5), - AUB_TRACE_CC_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 6), - AUB_TRACE_CLIP_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 7), - AUB_TRACE_SF_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 8), - AUB_TRACE_CC_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x9), - AUB_TRACE_SAMPLER_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xa), - AUB_TRACE_KERNEL_INSTRUCTIONS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xb), - AUB_TRACE_SCRATCH_SPACE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xc), - AUB_TRACE_SAMPLER_DEFAULT_COLOR = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xd), - - AUB_TRACE_SCISSOR_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x15), - AUB_TRACE_BLEND_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x16), - AUB_TRACE_DEPTH_STENCIL_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x17), - - AUB_TRACE_VERTEX_BUFFER = ENCODE_SS_TYPE(AUB_TRACE_TYPE_VERTEX_BUFFER, 0), - AUB_TRACE_BINDING_TABLE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x100), - AUB_TRACE_SURFACE_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x200), - AUB_TRACE_VS_CONSTANTS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 0), - AUB_TRACE_WM_CONSTANTS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 1), -}; - -#undef ENCODE_SS_TYPE - -/** - * Decode a aub_state_struct_type value to determine the type that should be - * stored in the .aub file. - */ -static inline uint32_t AUB_TRACE_TYPE(enum aub_state_struct_type ss_type) -{ - return (ss_type & 0xFFFF0000) >> 16; -} - -/** - * Decode a state_struct_type value to determine the subtype that should be - * stored in the .aub file. - */ -static inline uint32_t AUB_TRACE_SUBTYPE(enum aub_state_struct_type ss_type) -{ - return ss_type & 0xFFFF; -} - -/* DW3: address */ -/* DW4: len */ - -#endif /* _INTEL_AUB_H */ diff --git a/prebuilts/x86/include/libdrm/intel_bufmgr.h b/prebuilts/x86/include/libdrm/intel_bufmgr.h deleted file mode 100644 index 693472a..0000000 --- a/prebuilts/x86/include/libdrm/intel_bufmgr.h +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Copyright © 2008-2012 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - * - * Authors: - * Eric Anholt - * - */ - -/** - * @file intel_bufmgr.h - * - * Public definitions of Intel-specific bufmgr functions. - */ - -#ifndef INTEL_BUFMGR_H -#define INTEL_BUFMGR_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct drm_clip_rect; - -typedef struct _drm_intel_bufmgr drm_intel_bufmgr; -typedef struct _drm_intel_context drm_intel_context; -typedef struct _drm_intel_bo drm_intel_bo; - -struct _drm_intel_bo { - /** - * Size in bytes of the buffer object. - * - * The size may be larger than the size originally requested for the - * allocation, such as being aligned to page size. - */ - unsigned long size; - - /** - * Alignment requirement for object - * - * Used for GTT mapping & pinning the object. - */ - unsigned long align; - - /** - * Deprecated field containing (possibly the low 32-bits of) the last - * seen virtual card address. Use offset64 instead. - */ - unsigned long offset; - - /** - * Virtual address for accessing the buffer data. Only valid while - * mapped. - */ -#ifdef __cplusplus - void *virt; -#else - void *virtual; -#endif - - /** Buffer manager context associated with this buffer object */ - drm_intel_bufmgr *bufmgr; - - /** - * MM-specific handle for accessing object - */ - int handle; - - /** - * Last seen card virtual address (offset from the beginning of the - * aperture) for the object. This should be used to fill relocation - * entries when calling drm_intel_bo_emit_reloc() - */ - uint64_t offset64; -}; - -enum aub_dump_bmp_format { - AUB_DUMP_BMP_FORMAT_8BIT = 1, - AUB_DUMP_BMP_FORMAT_ARGB_4444 = 4, - AUB_DUMP_BMP_FORMAT_ARGB_0888 = 6, - AUB_DUMP_BMP_FORMAT_ARGB_8888 = 7, -}; - -typedef struct _drm_intel_aub_annotation { - uint32_t type; - uint32_t subtype; - uint32_t ending_offset; -} drm_intel_aub_annotation; - -#define BO_ALLOC_FOR_RENDER (1<<0) - -drm_intel_bo *drm_intel_bo_alloc(drm_intel_bufmgr *bufmgr, const char *name, - unsigned long size, unsigned int alignment); -drm_intel_bo *drm_intel_bo_alloc_for_render(drm_intel_bufmgr *bufmgr, - const char *name, - unsigned long size, - unsigned int alignment); -drm_intel_bo *drm_intel_bo_alloc_userptr(drm_intel_bufmgr *bufmgr, - const char *name, - void *addr, uint32_t tiling_mode, - uint32_t stride, unsigned long size, - unsigned long flags); -drm_intel_bo *drm_intel_bo_alloc_tiled(drm_intel_bufmgr *bufmgr, - const char *name, - int x, int y, int cpp, - uint32_t *tiling_mode, - unsigned long *pitch, - unsigned long flags); -void drm_intel_bo_reference(drm_intel_bo *bo); -void drm_intel_bo_unreference(drm_intel_bo *bo); -int drm_intel_bo_map(drm_intel_bo *bo, int write_enable); -int drm_intel_bo_unmap(drm_intel_bo *bo); - -int drm_intel_bo_subdata(drm_intel_bo *bo, unsigned long offset, - unsigned long size, const void *data); -int drm_intel_bo_get_subdata(drm_intel_bo *bo, unsigned long offset, - unsigned long size, void *data); -void drm_intel_bo_wait_rendering(drm_intel_bo *bo); - -void drm_intel_bufmgr_set_debug(drm_intel_bufmgr *bufmgr, int enable_debug); -void drm_intel_bufmgr_destroy(drm_intel_bufmgr *bufmgr); -int drm_intel_bo_exec(drm_intel_bo *bo, int used, - struct drm_clip_rect *cliprects, int num_cliprects, int DR4); -int drm_intel_bo_mrb_exec(drm_intel_bo *bo, int used, - struct drm_clip_rect *cliprects, int num_cliprects, int DR4, - unsigned int flags); -int drm_intel_bufmgr_check_aperture_space(drm_intel_bo ** bo_array, int count); - -int drm_intel_bo_emit_reloc(drm_intel_bo *bo, uint32_t offset, - drm_intel_bo *target_bo, uint32_t target_offset, - uint32_t read_domains, uint32_t write_domain); -int drm_intel_bo_emit_reloc_fence(drm_intel_bo *bo, uint32_t offset, - drm_intel_bo *target_bo, - uint32_t target_offset, - uint32_t read_domains, uint32_t write_domain); -int drm_intel_bo_pin(drm_intel_bo *bo, uint32_t alignment); -int drm_intel_bo_unpin(drm_intel_bo *bo); -int drm_intel_bo_set_tiling(drm_intel_bo *bo, uint32_t * tiling_mode, - uint32_t stride); -int drm_intel_bo_get_tiling(drm_intel_bo *bo, uint32_t * tiling_mode, - uint32_t * swizzle_mode); -int drm_intel_bo_flink(drm_intel_bo *bo, uint32_t * name); -int drm_intel_bo_busy(drm_intel_bo *bo); -int drm_intel_bo_madvise(drm_intel_bo *bo, int madv); -int drm_intel_bo_use_48b_address_range(drm_intel_bo *bo, uint32_t enable); -int drm_intel_bo_set_softpin_offset(drm_intel_bo *bo, uint64_t offset); - -int drm_intel_bo_disable_reuse(drm_intel_bo *bo); -int drm_intel_bo_is_reusable(drm_intel_bo *bo); -int drm_intel_bo_references(drm_intel_bo *bo, drm_intel_bo *target_bo); - -/* drm_intel_bufmgr_gem.c */ -drm_intel_bufmgr *drm_intel_bufmgr_gem_init(int fd, int batch_size); -drm_intel_bo *drm_intel_bo_gem_create_from_name(drm_intel_bufmgr *bufmgr, - const char *name, - unsigned int handle); -void drm_intel_bufmgr_gem_enable_reuse(drm_intel_bufmgr *bufmgr); -void drm_intel_bufmgr_gem_enable_fenced_relocs(drm_intel_bufmgr *bufmgr); -void drm_intel_bufmgr_gem_set_vma_cache_size(drm_intel_bufmgr *bufmgr, - int limit); -int drm_intel_gem_bo_map_unsynchronized(drm_intel_bo *bo); -int drm_intel_gem_bo_map_gtt(drm_intel_bo *bo); -int drm_intel_gem_bo_unmap_gtt(drm_intel_bo *bo); - -#define HAVE_DRM_INTEL_GEM_BO_DISABLE_IMPLICIT_SYNC 1 -int drm_intel_bufmgr_gem_can_disable_implicit_sync(drm_intel_bufmgr *bufmgr); -void drm_intel_gem_bo_disable_implicit_sync(drm_intel_bo *bo); -void drm_intel_gem_bo_enable_implicit_sync(drm_intel_bo *bo); - -void *drm_intel_gem_bo_map__cpu(drm_intel_bo *bo); -void *drm_intel_gem_bo_map__gtt(drm_intel_bo *bo); -void *drm_intel_gem_bo_map__wc(drm_intel_bo *bo); - -int drm_intel_gem_bo_get_reloc_count(drm_intel_bo *bo); -void drm_intel_gem_bo_clear_relocs(drm_intel_bo *bo, int start); -void drm_intel_gem_bo_start_gtt_access(drm_intel_bo *bo, int write_enable); - -void -drm_intel_bufmgr_gem_set_aub_filename(drm_intel_bufmgr *bufmgr, - const char *filename); -void drm_intel_bufmgr_gem_set_aub_dump(drm_intel_bufmgr *bufmgr, int enable); -void drm_intel_gem_bo_aub_dump_bmp(drm_intel_bo *bo, - int x1, int y1, int width, int height, - enum aub_dump_bmp_format format, - int pitch, int offset); -void -drm_intel_bufmgr_gem_set_aub_annotations(drm_intel_bo *bo, - drm_intel_aub_annotation *annotations, - unsigned count); - -int drm_intel_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, int crtc_id); - -int drm_intel_get_aperture_sizes(int fd, size_t *mappable, size_t *total); -int drm_intel_bufmgr_gem_get_devid(drm_intel_bufmgr *bufmgr); -int drm_intel_gem_bo_wait(drm_intel_bo *bo, int64_t timeout_ns); - -drm_intel_context *drm_intel_gem_context_create(drm_intel_bufmgr *bufmgr); -int drm_intel_gem_context_get_id(drm_intel_context *ctx, - uint32_t *ctx_id); -void drm_intel_gem_context_destroy(drm_intel_context *ctx); -int drm_intel_gem_bo_context_exec(drm_intel_bo *bo, drm_intel_context *ctx, - int used, unsigned int flags); -int drm_intel_gem_bo_fence_exec(drm_intel_bo *bo, - drm_intel_context *ctx, - int used, - int in_fence, - int *out_fence, - unsigned int flags); - -int drm_intel_bo_gem_export_to_prime(drm_intel_bo *bo, int *prime_fd); -drm_intel_bo *drm_intel_bo_gem_create_from_prime(drm_intel_bufmgr *bufmgr, - int prime_fd, int size); - -/* drm_intel_bufmgr_fake.c */ -drm_intel_bufmgr *drm_intel_bufmgr_fake_init(int fd, - unsigned long low_offset, - void *low_virtual, - unsigned long size, - volatile unsigned int - *last_dispatch); -void drm_intel_bufmgr_fake_set_last_dispatch(drm_intel_bufmgr *bufmgr, - volatile unsigned int - *last_dispatch); -void drm_intel_bufmgr_fake_set_exec_callback(drm_intel_bufmgr *bufmgr, - int (*exec) (drm_intel_bo *bo, - unsigned int used, - void *priv), - void *priv); -void drm_intel_bufmgr_fake_set_fence_callback(drm_intel_bufmgr *bufmgr, - unsigned int (*emit) (void *priv), - void (*wait) (unsigned int fence, - void *priv), - void *priv); -drm_intel_bo *drm_intel_bo_fake_alloc_static(drm_intel_bufmgr *bufmgr, - const char *name, - unsigned long offset, - unsigned long size, void *virt); -void drm_intel_bo_fake_disable_backing_store(drm_intel_bo *bo, - void (*invalidate_cb) (drm_intel_bo - * bo, - void *ptr), - void *ptr); - -void drm_intel_bufmgr_fake_contended_lock_take(drm_intel_bufmgr *bufmgr); -void drm_intel_bufmgr_fake_evict_all(drm_intel_bufmgr *bufmgr); - -struct drm_intel_decode *drm_intel_decode_context_alloc(uint32_t devid); -void drm_intel_decode_context_free(struct drm_intel_decode *ctx); -void drm_intel_decode_set_batch_pointer(struct drm_intel_decode *ctx, - void *data, uint32_t hw_offset, - int count); -void drm_intel_decode_set_dump_past_end(struct drm_intel_decode *ctx, - int dump_past_end); -void drm_intel_decode_set_head_tail(struct drm_intel_decode *ctx, - uint32_t head, uint32_t tail); -void drm_intel_decode_set_output_file(struct drm_intel_decode *ctx, FILE *out); -void drm_intel_decode(struct drm_intel_decode *ctx); - -int drm_intel_reg_read(drm_intel_bufmgr *bufmgr, - uint32_t offset, - uint64_t *result); - -int drm_intel_get_reset_stats(drm_intel_context *ctx, - uint32_t *reset_count, - uint32_t *active, - uint32_t *pending); - -int drm_intel_get_subslice_total(int fd, unsigned int *subslice_total); -int drm_intel_get_eu_total(int fd, unsigned int *eu_total); - -int drm_intel_get_pooled_eu(int fd); -int drm_intel_get_min_eu_in_pool(int fd); - -/** @{ Compatibility defines to keep old code building despite the symbol rename - * from dri_* to drm_intel_* - */ -#define dri_bo drm_intel_bo -#define dri_bufmgr drm_intel_bufmgr -#define dri_bo_alloc drm_intel_bo_alloc -#define dri_bo_reference drm_intel_bo_reference -#define dri_bo_unreference drm_intel_bo_unreference -#define dri_bo_map drm_intel_bo_map -#define dri_bo_unmap drm_intel_bo_unmap -#define dri_bo_subdata drm_intel_bo_subdata -#define dri_bo_get_subdata drm_intel_bo_get_subdata -#define dri_bo_wait_rendering drm_intel_bo_wait_rendering -#define dri_bufmgr_set_debug drm_intel_bufmgr_set_debug -#define dri_bufmgr_destroy drm_intel_bufmgr_destroy -#define dri_bo_exec drm_intel_bo_exec -#define dri_bufmgr_check_aperture_space drm_intel_bufmgr_check_aperture_space -#define dri_bo_emit_reloc(reloc_bo, read, write, target_offset, \ - reloc_offset, target_bo) \ - drm_intel_bo_emit_reloc(reloc_bo, reloc_offset, \ - target_bo, target_offset, \ - read, write); -#define dri_bo_pin drm_intel_bo_pin -#define dri_bo_unpin drm_intel_bo_unpin -#define dri_bo_get_tiling drm_intel_bo_get_tiling -#define dri_bo_set_tiling(bo, mode) drm_intel_bo_set_tiling(bo, mode, 0) -#define dri_bo_flink drm_intel_bo_flink -#define intel_bufmgr_gem_init drm_intel_bufmgr_gem_init -#define intel_bo_gem_create_from_name drm_intel_bo_gem_create_from_name -#define intel_bufmgr_gem_enable_reuse drm_intel_bufmgr_gem_enable_reuse -#define intel_bufmgr_fake_init drm_intel_bufmgr_fake_init -#define intel_bufmgr_fake_set_last_dispatch drm_intel_bufmgr_fake_set_last_dispatch -#define intel_bufmgr_fake_set_exec_callback drm_intel_bufmgr_fake_set_exec_callback -#define intel_bufmgr_fake_set_fence_callback drm_intel_bufmgr_fake_set_fence_callback -#define intel_bo_fake_alloc_static drm_intel_bo_fake_alloc_static -#define intel_bo_fake_disable_backing_store drm_intel_bo_fake_disable_backing_store -#define intel_bufmgr_fake_contended_lock_take drm_intel_bufmgr_fake_contended_lock_take -#define intel_bufmgr_fake_evict_all drm_intel_bufmgr_fake_evict_all - -/** @{ */ - -#if defined(__cplusplus) -} -#endif - -#endif /* INTEL_BUFMGR_H */ diff --git a/prebuilts/x86/include/libdrm/intel_debug.h b/prebuilts/x86/include/libdrm/intel_debug.h deleted file mode 100644 index fa0737c..0000000 --- a/prebuilts/x86/include/libdrm/intel_debug.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - * - * Authors: - * Ben Widawsky - * - */ - -#ifndef INTEL_DEBUG_H -#define INTEL_DEBUG_H - -#include - -#define SHADER_DEBUG_SOCKET "/var/run/gen_debug" -#define DEBUG_HANDSHAKE_VERSION 0x3 -#define DEBUG_HANDSHAKE_ACK "okay" - -/* First byte must always be the 1 byte version */ -struct intel_debug_handshake { - uint32_t version; - int flink_handle; - uint32_t per_thread_scratch; -} __attribute__((packed)); - -#endif diff --git a/prebuilts/x86/include/libdrm/mach64_drm.h b/prebuilts/x86/include/libdrm/mach64_drm.h deleted file mode 100644 index 1f5fd84..0000000 --- a/prebuilts/x86/include/libdrm/mach64_drm.h +++ /dev/null @@ -1,256 +0,0 @@ -/* mach64_drm.h -- Public header for the mach64 driver -*- linux-c -*- - * Created: Thu Nov 30 20:04:32 2000 by gareth@valinux.com - */ -/* - * Copyright 2000 Gareth Hughes - * Copyright 2002 Frank C. Earl - * Copyright 2002-2003 Leif Delgass - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT OWNER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Gareth Hughes - * Frank C. Earl - * Leif Delgass - */ - -#ifndef __MACH64_DRM_H__ -#define __MACH64_DRM_H__ - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (mach64_sarea.h) - */ -#ifndef __MACH64_SAREA_DEFINES__ -#define __MACH64_SAREA_DEFINES__ - -/* What needs to be changed for the current vertex buffer? - * GH: We're going to be pedantic about this. We want the card to do as - * little as possible, so let's avoid having it fetch a whole bunch of - * register values that don't change all that often, if at all. - */ -#define MACH64_UPLOAD_DST_OFF_PITCH 0x0001 -#define MACH64_UPLOAD_Z_OFF_PITCH 0x0002 -#define MACH64_UPLOAD_Z_ALPHA_CNTL 0x0004 -#define MACH64_UPLOAD_SCALE_3D_CNTL 0x0008 -#define MACH64_UPLOAD_DP_FOG_CLR 0x0010 -#define MACH64_UPLOAD_DP_WRITE_MASK 0x0020 -#define MACH64_UPLOAD_DP_PIX_WIDTH 0x0040 -#define MACH64_UPLOAD_SETUP_CNTL 0x0080 -#define MACH64_UPLOAD_MISC 0x0100 -#define MACH64_UPLOAD_TEXTURE 0x0200 -#define MACH64_UPLOAD_TEX0IMAGE 0x0400 -#define MACH64_UPLOAD_TEX1IMAGE 0x0800 -#define MACH64_UPLOAD_CLIPRECTS 0x1000 /* handled client-side */ -#define MACH64_UPLOAD_CONTEXT 0x00ff -#define MACH64_UPLOAD_ALL 0x1fff - -/* DMA buffer size - */ -#define MACH64_BUFFER_SIZE 16384 - -/* Max number of swaps allowed on the ring - * before the client must wait - */ -#define MACH64_MAX_QUEUED_FRAMES 3U - -/* Byte offsets for host blit buffer data - */ -#define MACH64_HOSTDATA_BLIT_OFFSET 104 - -/* Keep these small for testing. - */ -#define MACH64_NR_SAREA_CLIPRECTS 8 - -#define MACH64_CARD_HEAP 0 -#define MACH64_AGP_HEAP 1 -#define MACH64_NR_TEX_HEAPS 2 -#define MACH64_NR_TEX_REGIONS 64 -#define MACH64_LOG_TEX_GRANULARITY 16 - -#define MACH64_TEX_MAXLEVELS 1 - -#define MACH64_NR_CONTEXT_REGS 15 -#define MACH64_NR_TEXTURE_REGS 4 - -#endif /* __MACH64_SAREA_DEFINES__ */ - -typedef struct { - unsigned int dst_off_pitch; - - unsigned int z_off_pitch; - unsigned int z_cntl; - unsigned int alpha_tst_cntl; - - unsigned int scale_3d_cntl; - - unsigned int sc_left_right; - unsigned int sc_top_bottom; - - unsigned int dp_fog_clr; - unsigned int dp_write_mask; - unsigned int dp_pix_width; - unsigned int dp_mix; - unsigned int dp_src; - - unsigned int clr_cmp_cntl; - unsigned int gui_traj_cntl; - - unsigned int setup_cntl; - - unsigned int tex_size_pitch; - unsigned int tex_cntl; - unsigned int secondary_tex_off; - unsigned int tex_offset; -} drm_mach64_context_regs_t; - -typedef struct drm_mach64_sarea { - /* The channel for communication of state information to the kernel - * on firing a vertex dma buffer. - */ - drm_mach64_context_regs_t context_state; - unsigned int dirty; - unsigned int vertsize; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[MACH64_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Counters for client-side throttling of rendering clients. - */ - unsigned int frames_queued; - - /* Texture memory LRU. - */ - struct drm_tex_region tex_list[MACH64_NR_TEX_HEAPS][MACH64_NR_TEX_REGIONS + - 1]; - unsigned int tex_age[MACH64_NR_TEX_HEAPS]; - int ctx_owner; -} drm_mach64_sarea_t; - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (mach64_common.h) - */ - -/* Mach64 specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ - -#define DRM_MACH64_INIT 0x00 -#define DRM_MACH64_IDLE 0x01 -#define DRM_MACH64_RESET 0x02 -#define DRM_MACH64_SWAP 0x03 -#define DRM_MACH64_CLEAR 0x04 -#define DRM_MACH64_VERTEX 0x05 -#define DRM_MACH64_BLIT 0x06 -#define DRM_MACH64_FLUSH 0x07 -#define DRM_MACH64_GETPARAM 0x08 - -#define DRM_IOCTL_MACH64_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_INIT, drm_mach64_init_t) -#define DRM_IOCTL_MACH64_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_IDLE ) -#define DRM_IOCTL_MACH64_RESET DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_RESET ) -#define DRM_IOCTL_MACH64_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_SWAP ) -#define DRM_IOCTL_MACH64_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_CLEAR, drm_mach64_clear_t) -#define DRM_IOCTL_MACH64_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_VERTEX, drm_mach64_vertex_t) -#define DRM_IOCTL_MACH64_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_BLIT, drm_mach64_blit_t) -#define DRM_IOCTL_MACH64_FLUSH DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_FLUSH ) -#define DRM_IOCTL_MACH64_GETPARAM DRM_IOWR( DRM_COMMAND_BASE + DRM_MACH64_GETPARAM, drm_mach64_getparam_t) - -/* Buffer flags for clears - */ -#define MACH64_FRONT 0x1 -#define MACH64_BACK 0x2 -#define MACH64_DEPTH 0x4 - -/* Primitive types for vertex buffers - */ -#define MACH64_PRIM_POINTS 0x00000000 -#define MACH64_PRIM_LINES 0x00000001 -#define MACH64_PRIM_LINE_LOOP 0x00000002 -#define MACH64_PRIM_LINE_STRIP 0x00000003 -#define MACH64_PRIM_TRIANGLES 0x00000004 -#define MACH64_PRIM_TRIANGLE_STRIP 0x00000005 -#define MACH64_PRIM_TRIANGLE_FAN 0x00000006 -#define MACH64_PRIM_QUADS 0x00000007 -#define MACH64_PRIM_QUAD_STRIP 0x00000008 -#define MACH64_PRIM_POLYGON 0x00000009 - -typedef enum _drm_mach64_dma_mode_t { - MACH64_MODE_DMA_ASYNC, - MACH64_MODE_DMA_SYNC, - MACH64_MODE_MMIO -} drm_mach64_dma_mode_t; - -typedef struct drm_mach64_init { - enum { - DRM_MACH64_INIT_DMA = 0x01, - DRM_MACH64_CLEANUP_DMA = 0x02 - } func; - - unsigned long sarea_priv_offset; - int is_pci; - drm_mach64_dma_mode_t dma_mode; - - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long ring_offset; - unsigned long buffers_offset; - unsigned long agp_textures_offset; -} drm_mach64_init_t; - -typedef struct drm_mach64_clear { - unsigned int flags; - int x, y, w, h; - unsigned int clear_color; - unsigned int clear_depth; -} drm_mach64_clear_t; - -typedef struct drm_mach64_vertex { - int prim; - void *buf; /* Address of vertex buffer */ - unsigned long used; /* Number of bytes in buffer */ - int discard; /* Client finished with buffer? */ -} drm_mach64_vertex_t; - -typedef struct drm_mach64_blit { - void *buf; - int pitch; - int offset; - int format; - unsigned short x, y; - unsigned short width, height; -} drm_mach64_blit_t; - -typedef struct drm_mach64_getparam { - enum { - MACH64_PARAM_FRAMES_QUEUED = 0x01, - MACH64_PARAM_IRQ_NR = 0x02 - } param; - void *value; -} drm_mach64_getparam_t; - -#endif diff --git a/prebuilts/x86/include/libdrm/mga_drm.h b/prebuilts/x86/include/libdrm/mga_drm.h deleted file mode 100644 index 7930011..0000000 --- a/prebuilts/x86/include/libdrm/mga_drm.h +++ /dev/null @@ -1,427 +0,0 @@ -/* mga_drm.h -- Public header for the Matrox g200/g400 driver -*- linux-c -*- - * Created: Tue Jan 25 01:50:01 1999 by jhartmann@precisioninsight.com - * - * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Jeff Hartmann - * Keith Whitwell - * - * Rewritten by: - * Gareth Hughes - */ - -#ifndef __MGA_DRM_H__ -#define __MGA_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (mga_sarea.h) - */ - -#ifndef __MGA_SAREA_DEFINES__ -#define __MGA_SAREA_DEFINES__ - -/* WARP pipe flags - */ -#define MGA_F 0x1 /* fog */ -#define MGA_A 0x2 /* alpha */ -#define MGA_S 0x4 /* specular */ -#define MGA_T2 0x8 /* multitexture */ - -#define MGA_WARP_TGZ 0 -#define MGA_WARP_TGZF (MGA_F) -#define MGA_WARP_TGZA (MGA_A) -#define MGA_WARP_TGZAF (MGA_F|MGA_A) -#define MGA_WARP_TGZS (MGA_S) -#define MGA_WARP_TGZSF (MGA_S|MGA_F) -#define MGA_WARP_TGZSA (MGA_S|MGA_A) -#define MGA_WARP_TGZSAF (MGA_S|MGA_F|MGA_A) -#define MGA_WARP_T2GZ (MGA_T2) -#define MGA_WARP_T2GZF (MGA_T2|MGA_F) -#define MGA_WARP_T2GZA (MGA_T2|MGA_A) -#define MGA_WARP_T2GZAF (MGA_T2|MGA_A|MGA_F) -#define MGA_WARP_T2GZS (MGA_T2|MGA_S) -#define MGA_WARP_T2GZSF (MGA_T2|MGA_S|MGA_F) -#define MGA_WARP_T2GZSA (MGA_T2|MGA_S|MGA_A) -#define MGA_WARP_T2GZSAF (MGA_T2|MGA_S|MGA_F|MGA_A) - -#define MGA_MAX_G200_PIPES 8 /* no multitex */ -#define MGA_MAX_G400_PIPES 16 -#define MGA_MAX_WARP_PIPES MGA_MAX_G400_PIPES -#define MGA_WARP_UCODE_SIZE 32768 /* in bytes */ - -#define MGA_CARD_TYPE_G200 1 -#define MGA_CARD_TYPE_G400 2 -#define MGA_CARD_TYPE_G450 3 /* not currently used */ -#define MGA_CARD_TYPE_G550 4 - -#define MGA_FRONT 0x1 -#define MGA_BACK 0x2 -#define MGA_DEPTH 0x4 - -/* What needs to be changed for the current vertex dma buffer? - */ -#define MGA_UPLOAD_CONTEXT 0x1 -#define MGA_UPLOAD_TEX0 0x2 -#define MGA_UPLOAD_TEX1 0x4 -#define MGA_UPLOAD_PIPE 0x8 -#define MGA_UPLOAD_TEX0IMAGE 0x10 /* handled client-side */ -#define MGA_UPLOAD_TEX1IMAGE 0x20 /* handled client-side */ -#define MGA_UPLOAD_2D 0x40 -#define MGA_WAIT_AGE 0x80 /* handled client-side */ -#define MGA_UPLOAD_CLIPRECTS 0x100 /* handled client-side */ -#if 0 -#define MGA_DMA_FLUSH 0x200 /* set when someone gets the lock - quiescent */ -#endif - -/* 32 buffers of 64k each, total 2 meg. - */ -#define MGA_BUFFER_SIZE (1 << 16) -#define MGA_NUM_BUFFERS 128 - -/* Keep these small for testing. - */ -#define MGA_NR_SAREA_CLIPRECTS 8 - -/* 2 heaps (1 for card, 1 for agp), each divided into up to 128 - * regions, subject to a minimum region size of (1<<16) == 64k. - * - * Clients may subdivide regions internally, but when sharing between - * clients, the region size is the minimum granularity. - */ - -#define MGA_CARD_HEAP 0 -#define MGA_AGP_HEAP 1 -#define MGA_NR_TEX_HEAPS 2 -#define MGA_NR_TEX_REGIONS 16 -#define MGA_LOG_MIN_TEX_REGION_SIZE 16 - -#define DRM_MGA_IDLE_RETRY 2048 - -#endif /* __MGA_SAREA_DEFINES__ */ - -/* Setup registers for 3D context - */ -typedef struct { - unsigned int dstorg; - unsigned int maccess; - unsigned int plnwt; - unsigned int dwgctl; - unsigned int alphactrl; - unsigned int fogcolor; - unsigned int wflag; - unsigned int tdualstage0; - unsigned int tdualstage1; - unsigned int fcol; - unsigned int stencil; - unsigned int stencilctl; -} drm_mga_context_regs_t; - -/* Setup registers for 2D, X server - */ -typedef struct { - unsigned int pitch; -} drm_mga_server_regs_t; - -/* Setup registers for each texture unit - */ -typedef struct { - unsigned int texctl; - unsigned int texctl2; - unsigned int texfilter; - unsigned int texbordercol; - unsigned int texorg; - unsigned int texwidth; - unsigned int texheight; - unsigned int texorg1; - unsigned int texorg2; - unsigned int texorg3; - unsigned int texorg4; -} drm_mga_texture_regs_t; - -/* General aging mechanism - */ -typedef struct { - unsigned int head; /* Position of head pointer */ - unsigned int wrap; /* Primary DMA wrap count */ -} drm_mga_age_t; - -typedef struct _drm_mga_sarea { - /* The channel for communication of state information to the kernel - * on firing a vertex dma buffer. - */ - drm_mga_context_regs_t context_state; - drm_mga_server_regs_t server_state; - drm_mga_texture_regs_t tex_state[2]; - unsigned int warp_pipe; - unsigned int dirty; - unsigned int vertsize; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[MGA_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Information about the most recently used 3d drawable. The - * client fills in the req_* fields, the server fills in the - * exported_ fields and puts the cliprects into boxes, above. - * - * The client clears the exported_drawable field before - * clobbering the boxes data. - */ - unsigned int req_drawable; /* the X drawable id */ - unsigned int req_draw_buffer; /* MGA_FRONT or MGA_BACK */ - - unsigned int exported_drawable; - unsigned int exported_index; - unsigned int exported_stamp; - unsigned int exported_buffers; - unsigned int exported_nfront; - unsigned int exported_nback; - int exported_back_x, exported_front_x, exported_w; - int exported_back_y, exported_front_y, exported_h; - struct drm_clip_rect exported_boxes[MGA_NR_SAREA_CLIPRECTS]; - - /* Counters for aging textures and for client-side throttling. - */ - unsigned int status[4]; - unsigned int last_wrap; - - drm_mga_age_t last_frame; - unsigned int last_enqueue; /* last time a buffer was enqueued */ - unsigned int last_dispatch; /* age of the most recently dispatched buffer */ - unsigned int last_quiescent; /* */ - - /* LRU lists for texture memory in agp space and on the card. - */ - struct drm_tex_region texList[MGA_NR_TEX_HEAPS][MGA_NR_TEX_REGIONS + 1]; - unsigned int texAge[MGA_NR_TEX_HEAPS]; - - /* Mechanism to validate card state. - */ - int ctxOwner; -} drm_mga_sarea_t; - -/* MGA specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ -#define DRM_MGA_INIT 0x00 -#define DRM_MGA_FLUSH 0x01 -#define DRM_MGA_RESET 0x02 -#define DRM_MGA_SWAP 0x03 -#define DRM_MGA_CLEAR 0x04 -#define DRM_MGA_VERTEX 0x05 -#define DRM_MGA_INDICES 0x06 -#define DRM_MGA_ILOAD 0x07 -#define DRM_MGA_BLIT 0x08 -#define DRM_MGA_GETPARAM 0x09 - -/* 3.2: - * ioctls for operating on fences. - */ -#define DRM_MGA_SET_FENCE 0x0a -#define DRM_MGA_WAIT_FENCE 0x0b -#define DRM_MGA_DMA_BOOTSTRAP 0x0c - -#define DRM_IOCTL_MGA_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INIT, drm_mga_init_t) -#define DRM_IOCTL_MGA_FLUSH DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_FLUSH, struct drm_lock) -#define DRM_IOCTL_MGA_RESET DRM_IO( DRM_COMMAND_BASE + DRM_MGA_RESET) -#define DRM_IOCTL_MGA_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_MGA_SWAP) -#define DRM_IOCTL_MGA_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_CLEAR, drm_mga_clear_t) -#define DRM_IOCTL_MGA_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_VERTEX, drm_mga_vertex_t) -#define DRM_IOCTL_MGA_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INDICES, drm_mga_indices_t) -#define DRM_IOCTL_MGA_ILOAD DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_ILOAD, drm_mga_iload_t) -#define DRM_IOCTL_MGA_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_BLIT, drm_mga_blit_t) -#define DRM_IOCTL_MGA_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_GETPARAM, drm_mga_getparam_t) -#define DRM_IOCTL_MGA_SET_FENCE DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_SET_FENCE, __u32) -#define DRM_IOCTL_MGA_WAIT_FENCE DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_WAIT_FENCE, __u32) -#define DRM_IOCTL_MGA_DMA_BOOTSTRAP DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_DMA_BOOTSTRAP, drm_mga_dma_bootstrap_t) - -typedef struct _drm_mga_warp_index { - int installed; - unsigned long phys_addr; - int size; -} drm_mga_warp_index_t; - -typedef struct drm_mga_init { - enum { - MGA_INIT_DMA = 0x01, - MGA_CLEANUP_DMA = 0x02 - } func; - - unsigned long sarea_priv_offset; - - int chipset; - int sgram; - - unsigned int maccess; - - unsigned int fb_cpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - - unsigned int depth_cpp; - unsigned int depth_offset, depth_pitch; - - unsigned int texture_offset[MGA_NR_TEX_HEAPS]; - unsigned int texture_size[MGA_NR_TEX_HEAPS]; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long status_offset; - unsigned long warp_offset; - unsigned long primary_offset; - unsigned long buffers_offset; -} drm_mga_init_t; - -typedef struct drm_mga_dma_bootstrap { - /** - * \name AGP texture region - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, these fields will - * be filled in with the actual AGP texture settings. - * - * \warning - * If these fields are non-zero, but dma_mga_dma_bootstrap::agp_mode - * is zero, it means that PCI memory (most likely through the use of - * an IOMMU) is being used for "AGP" textures. - */ - /*@{ */ - unsigned long texture_handle; /**< Handle used to map AGP textures. */ - __u32 texture_size; /**< Size of the AGP texture region. */ - /*@} */ - - /** - * Requested size of the primary DMA region. - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be - * filled in with the actual AGP mode. If AGP was not available - */ - __u32 primary_size; - - /** - * Requested number of secondary DMA buffers. - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be - * filled in with the actual number of secondary DMA buffers - * allocated. Particularly when PCI DMA is used, this may be - * (subtantially) less than the number requested. - */ - __u32 secondary_bin_count; - - /** - * Requested size of each secondary DMA buffer. - * - * While the kernel \b is free to reduce - * dma_mga_dma_bootstrap::secondary_bin_count, it is \b not allowed - * to reduce dma_mga_dma_bootstrap::secondary_bin_size. - */ - __u32 secondary_bin_size; - - /** - * Bit-wise mask of AGPSTAT2_* values. Currently only \c AGPSTAT2_1X, - * \c AGPSTAT2_2X, and \c AGPSTAT2_4X are supported. If this value is - * zero, it means that PCI DMA should be used, even if AGP is - * possible. - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be - * filled in with the actual AGP mode. If AGP was not available - * (i.e., PCI DMA was used), this value will be zero. - */ - __u32 agp_mode; - - /** - * Desired AGP GART size, measured in megabytes. - */ - __u8 agp_size; -} drm_mga_dma_bootstrap_t; - -typedef struct drm_mga_clear { - unsigned int flags; - unsigned int clear_color; - unsigned int clear_depth; - unsigned int color_mask; - unsigned int depth_mask; -} drm_mga_clear_t; - -typedef struct drm_mga_vertex { - int idx; /* buffer to queue */ - int used; /* bytes in use */ - int discard; /* client finished with buffer? */ -} drm_mga_vertex_t; - -typedef struct drm_mga_indices { - int idx; /* buffer to queue */ - unsigned int start; - unsigned int end; - int discard; /* client finished with buffer? */ -} drm_mga_indices_t; - -typedef struct drm_mga_iload { - int idx; - unsigned int dstorg; - unsigned int length; -} drm_mga_iload_t; - -typedef struct _drm_mga_blit { - unsigned int planemask; - unsigned int srcorg; - unsigned int dstorg; - int src_pitch, dst_pitch; - int delta_sx, delta_sy; - int delta_dx, delta_dy; - int height, ydir; /* flip image vertically */ - int source_pitch, dest_pitch; -} drm_mga_blit_t; - -/* 3.1: An ioctl to get parameters that aren't available to the 3d - * client any other way. - */ -#define MGA_PARAM_IRQ_NR 1 - -/* 3.2: Query the actual card type. The DDX only distinguishes between - * G200 chips and non-G200 chips, which it calls G400. It turns out that - * there are some very sublte differences between the G4x0 chips and the G550 - * chips. Using this parameter query, a client-side driver can detect the - * difference between a G4x0 and a G550. - */ -#define MGA_PARAM_CARD_TYPE 2 - -typedef struct drm_mga_getparam { - int param; - void *value; -} drm_mga_getparam_t; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86/include/libdrm/msm_drm.h b/prebuilts/x86/include/libdrm/msm_drm.h deleted file mode 100644 index c06d0a5..0000000 --- a/prebuilts/x86/include/libdrm/msm_drm.h +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat - * Author: Rob Clark - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __MSM_DRM_H__ -#define __MSM_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints: - * 1) Do not use pointers, use __u64 instead for 32 bit / 64 bit - * user/kernel compatibility - * 2) Keep fields aligned to their size - * 3) Because of how drm_ioctl() works, we can add new fields at - * the end of an ioctl if some care is taken: drm_ioctl() will - * zero out the new fields at the tail of the ioctl, so a zero - * value should have a backwards compatible meaning. And for - * output params, userspace won't see the newly added output - * fields.. so that has to be somehow ok. - */ - -#define MSM_PIPE_NONE 0x00 -#define MSM_PIPE_2D0 0x01 -#define MSM_PIPE_2D1 0x02 -#define MSM_PIPE_3D0 0x10 - -/* The pipe-id just uses the lower bits, so can be OR'd with flags in - * the upper 16 bits (which could be extended further, if needed, maybe - * we extend/overload the pipe-id some day to deal with multiple rings, - * but even then I don't think we need the full lower 16 bits). - */ -#define MSM_PIPE_ID_MASK 0xffff -#define MSM_PIPE_ID(x) ((x) & MSM_PIPE_ID_MASK) -#define MSM_PIPE_FLAGS(x) ((x) & ~MSM_PIPE_ID_MASK) - -/* timeouts are specified in clock-monotonic absolute times (to simplify - * restarting interrupted ioctls). The following struct is logically the - * same as 'struct timespec' but 32/64b ABI safe. - */ -struct drm_msm_timespec { - __s64 tv_sec; /* seconds */ - __s64 tv_nsec; /* nanoseconds */ -}; - -#define MSM_PARAM_GPU_ID 0x01 -#define MSM_PARAM_GMEM_SIZE 0x02 -#define MSM_PARAM_CHIP_ID 0x03 -#define MSM_PARAM_MAX_FREQ 0x04 -#define MSM_PARAM_TIMESTAMP 0x05 -#define MSM_PARAM_GMEM_BASE 0x06 -#define MSM_PARAM_NR_RINGS 0x07 - -struct drm_msm_param { - __u32 pipe; /* in, MSM_PIPE_x */ - __u32 param; /* in, MSM_PARAM_x */ - __u64 value; /* out (get_param) or in (set_param) */ -}; - -/* - * GEM buffers: - */ - -#define MSM_BO_SCANOUT 0x00000001 /* scanout capable */ -#define MSM_BO_GPU_READONLY 0x00000002 -#define MSM_BO_CACHE_MASK 0x000f0000 -/* cache modes */ -#define MSM_BO_CACHED 0x00010000 -#define MSM_BO_WC 0x00020000 -#define MSM_BO_UNCACHED 0x00040000 - -#define MSM_BO_FLAGS (MSM_BO_SCANOUT | \ - MSM_BO_GPU_READONLY | \ - MSM_BO_CACHED | \ - MSM_BO_WC | \ - MSM_BO_UNCACHED) - -struct drm_msm_gem_new { - __u64 size; /* in */ - __u32 flags; /* in, mask of MSM_BO_x */ - __u32 handle; /* out */ -}; - -#define MSM_INFO_IOVA 0x01 - -#define MSM_INFO_FLAGS (MSM_INFO_IOVA) - -struct drm_msm_gem_info { - __u32 handle; /* in */ - __u32 flags; /* in - combination of MSM_INFO_* flags */ - __u64 offset; /* out, mmap() offset or iova */ -}; - -#define MSM_PREP_READ 0x01 -#define MSM_PREP_WRITE 0x02 -#define MSM_PREP_NOSYNC 0x04 - -#define MSM_PREP_FLAGS (MSM_PREP_READ | MSM_PREP_WRITE | MSM_PREP_NOSYNC) - -struct drm_msm_gem_cpu_prep { - __u32 handle; /* in */ - __u32 op; /* in, mask of MSM_PREP_x */ - struct drm_msm_timespec timeout; /* in */ -}; - -struct drm_msm_gem_cpu_fini { - __u32 handle; /* in */ -}; - -/* - * Cmdstream Submission: - */ - -/* The value written into the cmdstream is logically: - * - * ((relocbuf->gpuaddr + reloc_offset) << shift) | or - * - * When we have GPU's w/ >32bit ptrs, it should be possible to deal - * with this by emit'ing two reloc entries with appropriate shift - * values. Or a new MSM_SUBMIT_CMD_x type would also be an option. - * - * NOTE that reloc's must be sorted by order of increasing submit_offset, - * otherwise EINVAL. - */ -struct drm_msm_gem_submit_reloc { - __u32 submit_offset; /* in, offset from submit_bo */ - __u32 or; /* in, value OR'd with result */ - __s32 shift; /* in, amount of left shift (can be negative) */ - __u32 reloc_idx; /* in, index of reloc_bo buffer */ - __u64 reloc_offset; /* in, offset from start of reloc_bo */ -}; - -/* submit-types: - * BUF - this cmd buffer is executed normally. - * IB_TARGET_BUF - this cmd buffer is an IB target. Reloc's are - * processed normally, but the kernel does not setup an IB to - * this buffer in the first-level ringbuffer - * CTX_RESTORE_BUF - only executed if there has been a GPU context - * switch since the last SUBMIT ioctl - */ -#define MSM_SUBMIT_CMD_BUF 0x0001 -#define MSM_SUBMIT_CMD_IB_TARGET_BUF 0x0002 -#define MSM_SUBMIT_CMD_CTX_RESTORE_BUF 0x0003 -struct drm_msm_gem_submit_cmd { - __u32 type; /* in, one of MSM_SUBMIT_CMD_x */ - __u32 submit_idx; /* in, index of submit_bo cmdstream buffer */ - __u32 submit_offset; /* in, offset into submit_bo */ - __u32 size; /* in, cmdstream size */ - __u32 pad; - __u32 nr_relocs; /* in, number of submit_reloc's */ - __u64 relocs; /* in, ptr to array of submit_reloc's */ -}; - -/* Each buffer referenced elsewhere in the cmdstream submit (ie. the - * cmdstream buffer(s) themselves or reloc entries) has one (and only - * one) entry in the submit->bos[] table. - * - * As a optimization, the current buffer (gpu virtual address) can be - * passed back through the 'presumed' field. If on a subsequent reloc, - * userspace passes back a 'presumed' address that is still valid, - * then patching the cmdstream for this entry is skipped. This can - * avoid kernel needing to map/access the cmdstream bo in the common - * case. - */ -#define MSM_SUBMIT_BO_READ 0x0001 -#define MSM_SUBMIT_BO_WRITE 0x0002 - -#define MSM_SUBMIT_BO_FLAGS (MSM_SUBMIT_BO_READ | MSM_SUBMIT_BO_WRITE) - -struct drm_msm_gem_submit_bo { - __u32 flags; /* in, mask of MSM_SUBMIT_BO_x */ - __u32 handle; /* in, GEM handle */ - __u64 presumed; /* in/out, presumed buffer address */ -}; - -/* Valid submit ioctl flags: */ -#define MSM_SUBMIT_NO_IMPLICIT 0x80000000 /* disable implicit sync */ -#define MSM_SUBMIT_FENCE_FD_IN 0x40000000 /* enable input fence_fd */ -#define MSM_SUBMIT_FENCE_FD_OUT 0x20000000 /* enable output fence_fd */ -#define MSM_SUBMIT_SUDO 0x10000000 /* run submitted cmds from RB */ -#define MSM_SUBMIT_FLAGS ( \ - MSM_SUBMIT_NO_IMPLICIT | \ - MSM_SUBMIT_FENCE_FD_IN | \ - MSM_SUBMIT_FENCE_FD_OUT | \ - MSM_SUBMIT_SUDO | \ - 0) - -/* Each cmdstream submit consists of a table of buffers involved, and - * one or more cmdstream buffers. This allows for conditional execution - * (context-restore), and IB buffers needed for per tile/bin draw cmds. - */ -struct drm_msm_gem_submit { - __u32 flags; /* MSM_PIPE_x | MSM_SUBMIT_x */ - __u32 fence; /* out */ - __u32 nr_bos; /* in, number of submit_bo's */ - __u32 nr_cmds; /* in, number of submit_cmd's */ - __u64 bos; /* in, ptr to array of submit_bo's */ - __u64 cmds; /* in, ptr to array of submit_cmd's */ - __s32 fence_fd; /* in/out fence fd (see MSM_SUBMIT_FENCE_FD_IN/OUT) */ - __u32 queueid; /* in, submitqueue id */ -}; - -/* The normal way to synchronize with the GPU is just to CPU_PREP on - * a buffer if you need to access it from the CPU (other cmdstream - * submission from same or other contexts, PAGE_FLIP ioctl, etc, all - * handle the required synchronization under the hood). This ioctl - * mainly just exists as a way to implement the gallium pipe_fence - * APIs without requiring a dummy bo to synchronize on. - */ -struct drm_msm_wait_fence { - __u32 fence; /* in */ - __u32 pad; - struct drm_msm_timespec timeout; /* in */ - __u32 queueid; /* in, submitqueue id */ -}; - -/* madvise provides a way to tell the kernel in case a buffers contents - * can be discarded under memory pressure, which is useful for userspace - * bo cache where we want to optimistically hold on to buffer allocate - * and potential mmap, but allow the pages to be discarded under memory - * pressure. - * - * Typical usage would involve madvise(DONTNEED) when buffer enters BO - * cache, and madvise(WILLNEED) if trying to recycle buffer from BO cache. - * In the WILLNEED case, 'retained' indicates to userspace whether the - * backing pages still exist. - */ -#define MSM_MADV_WILLNEED 0 /* backing pages are needed, status returned in 'retained' */ -#define MSM_MADV_DONTNEED 1 /* backing pages not needed */ -#define __MSM_MADV_PURGED 2 /* internal state */ - -struct drm_msm_gem_madvise { - __u32 handle; /* in, GEM handle */ - __u32 madv; /* in, MSM_MADV_x */ - __u32 retained; /* out, whether backing store still exists */ -}; - -/* - * Draw queues allow the user to set specific submission parameter. Command - * submissions specify a specific submitqueue to use. ID 0 is reserved for - * backwards compatibility as a "default" submitqueue - */ - -#define MSM_SUBMITQUEUE_FLAGS (0) - -struct drm_msm_submitqueue { - __u32 flags; /* in, MSM_SUBMITQUEUE_x */ - __u32 prio; /* in, Priority level */ - __u32 id; /* out, identifier */ -}; - -#define DRM_MSM_GET_PARAM 0x00 -/* placeholder: -#define DRM_MSM_SET_PARAM 0x01 - */ -#define DRM_MSM_GEM_NEW 0x02 -#define DRM_MSM_GEM_INFO 0x03 -#define DRM_MSM_GEM_CPU_PREP 0x04 -#define DRM_MSM_GEM_CPU_FINI 0x05 -#define DRM_MSM_GEM_SUBMIT 0x06 -#define DRM_MSM_WAIT_FENCE 0x07 -#define DRM_MSM_GEM_MADVISE 0x08 -/* placeholder: -#define DRM_MSM_GEM_SVM_NEW 0x09 - */ -#define DRM_MSM_SUBMITQUEUE_NEW 0x0A -#define DRM_MSM_SUBMITQUEUE_CLOSE 0x0B - -#define DRM_IOCTL_MSM_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GET_PARAM, struct drm_msm_param) -#define DRM_IOCTL_MSM_GEM_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_NEW, struct drm_msm_gem_new) -#define DRM_IOCTL_MSM_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_INFO, struct drm_msm_gem_info) -#define DRM_IOCTL_MSM_GEM_CPU_PREP DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_GEM_CPU_PREP, struct drm_msm_gem_cpu_prep) -#define DRM_IOCTL_MSM_GEM_CPU_FINI DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_GEM_CPU_FINI, struct drm_msm_gem_cpu_fini) -#define DRM_IOCTL_MSM_GEM_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_SUBMIT, struct drm_msm_gem_submit) -#define DRM_IOCTL_MSM_WAIT_FENCE DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_WAIT_FENCE, struct drm_msm_wait_fence) -#define DRM_IOCTL_MSM_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_MADVISE, struct drm_msm_gem_madvise) -#define DRM_IOCTL_MSM_SUBMITQUEUE_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_SUBMITQUEUE_NEW, struct drm_msm_submitqueue) -#define DRM_IOCTL_MSM_SUBMITQUEUE_CLOSE DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_SUBMITQUEUE_CLOSE, __u32) - -#if defined(__cplusplus) -} -#endif - -#endif /* __MSM_DRM_H__ */ diff --git a/prebuilts/x86/include/libdrm/nouveau/nouveau.h b/prebuilts/x86/include/libdrm/nouveau/nouveau.h deleted file mode 100644 index 0c632fe..0000000 --- a/prebuilts/x86/include/libdrm/nouveau/nouveau.h +++ /dev/null @@ -1,280 +0,0 @@ -#ifndef __NOUVEAU_H__ -#define __NOUVEAU_H__ - -#include -#include - -/* Supported class information, provided by the kernel */ -struct nouveau_sclass { - int32_t oclass; - int minver; - int maxver; -}; - -/* Client-provided array describing class versions that are desired. - * - * These are used to match against the kernel's list of supported classes. - */ -struct nouveau_mclass { - int32_t oclass; - int version; - void *data; -}; - -struct nouveau_object { - struct nouveau_object *parent; - uint64_t handle; - uint32_t oclass; - uint32_t length; /* deprecated */ - void *data; /* deprecated */ -}; - -int nouveau_object_new(struct nouveau_object *parent, uint64_t handle, - uint32_t oclass, void *data, uint32_t length, - struct nouveau_object **); -void nouveau_object_del(struct nouveau_object **); -int nouveau_object_mthd(struct nouveau_object *, uint32_t mthd, - void *data, uint32_t size); -int nouveau_object_sclass_get(struct nouveau_object *, - struct nouveau_sclass **); -void nouveau_object_sclass_put(struct nouveau_sclass **); -int nouveau_object_mclass(struct nouveau_object *, - const struct nouveau_mclass *); - -struct nouveau_drm { - struct nouveau_object client; - int fd; - uint32_t version; - bool nvif; -}; - -static inline struct nouveau_drm * -nouveau_drm(struct nouveau_object *obj) -{ - while (obj && obj->parent) - obj = obj->parent; - return (struct nouveau_drm *)obj; -} - -int nouveau_drm_new(int fd, struct nouveau_drm **); -void nouveau_drm_del(struct nouveau_drm **); - -struct nouveau_device { - struct nouveau_object object; - int fd; /* deprecated */ - uint32_t lib_version; /* deprecated */ - uint32_t drm_version; /* deprecated */ - uint32_t chipset; - uint64_t vram_size; - uint64_t gart_size; - uint64_t vram_limit; - uint64_t gart_limit; -}; - -int nouveau_device_new(struct nouveau_object *parent, int32_t oclass, - void *data, uint32_t size, struct nouveau_device **); -void nouveau_device_del(struct nouveau_device **); - -int nouveau_getparam(struct nouveau_device *, uint64_t param, uint64_t *value); -int nouveau_setparam(struct nouveau_device *, uint64_t param, uint64_t value); - -/* deprecated */ -int nouveau_device_wrap(int fd, int close, struct nouveau_device **); -int nouveau_device_open(const char *busid, struct nouveau_device **); - -struct nouveau_client { - struct nouveau_device *device; - int id; -}; - -int nouveau_client_new(struct nouveau_device *, struct nouveau_client **); -void nouveau_client_del(struct nouveau_client **); - -union nouveau_bo_config { - struct { -#define NV04_BO_16BPP 0x00000001 -#define NV04_BO_32BPP 0x00000002 -#define NV04_BO_ZETA 0x00000004 - uint32_t surf_flags; - uint32_t surf_pitch; - } nv04; - struct { - uint32_t memtype; - uint32_t tile_mode; - } nv50; - struct { - uint32_t memtype; - uint32_t tile_mode; - } nvc0; - uint32_t data[8]; -}; - -#define NOUVEAU_BO_VRAM 0x00000001 -#define NOUVEAU_BO_GART 0x00000002 -#define NOUVEAU_BO_APER (NOUVEAU_BO_VRAM | NOUVEAU_BO_GART) -#define NOUVEAU_BO_RD 0x00000100 -#define NOUVEAU_BO_WR 0x00000200 -#define NOUVEAU_BO_RDWR (NOUVEAU_BO_RD | NOUVEAU_BO_WR) -#define NOUVEAU_BO_NOBLOCK 0x00000400 -#define NOUVEAU_BO_LOW 0x00001000 -#define NOUVEAU_BO_HIGH 0x00002000 -#define NOUVEAU_BO_OR 0x00004000 -#define NOUVEAU_BO_MAP 0x80000000 -#define NOUVEAU_BO_CONTIG 0x40000000 -#define NOUVEAU_BO_NOSNOOP 0x20000000 -#define NOUVEAU_BO_COHERENT 0x10000000 - -struct nouveau_bo { - struct nouveau_device *device; - uint32_t handle; - uint64_t size; - uint32_t flags; - uint64_t offset; - void *map; - union nouveau_bo_config config; -}; - -int nouveau_bo_new(struct nouveau_device *, uint32_t flags, uint32_t align, - uint64_t size, union nouveau_bo_config *, - struct nouveau_bo **); -int nouveau_bo_wrap(struct nouveau_device *, uint32_t handle, - struct nouveau_bo **); -int nouveau_bo_name_ref(struct nouveau_device *v, uint32_t name, - struct nouveau_bo **); -int nouveau_bo_name_get(struct nouveau_bo *, uint32_t *name); -void nouveau_bo_ref(struct nouveau_bo *, struct nouveau_bo **); -int nouveau_bo_map(struct nouveau_bo *, uint32_t access, - struct nouveau_client *); -int nouveau_bo_wait(struct nouveau_bo *, uint32_t access, - struct nouveau_client *); -int nouveau_bo_prime_handle_ref(struct nouveau_device *, int prime_fd, - struct nouveau_bo **); -int nouveau_bo_set_prime(struct nouveau_bo *, int *prime_fd); - -struct nouveau_list { - struct nouveau_list *prev; - struct nouveau_list *next; -}; - -struct nouveau_bufref { - struct nouveau_list thead; - struct nouveau_bo *bo; - uint32_t packet; - uint32_t flags; - uint32_t data; - uint32_t vor; - uint32_t tor; - uint32_t priv_data; - void *priv; -}; - -struct nouveau_bufctx { - struct nouveau_client *client; - struct nouveau_list head; - struct nouveau_list pending; - struct nouveau_list current; - int relocs; -}; - -int nouveau_bufctx_new(struct nouveau_client *, int bins, - struct nouveau_bufctx **); -void nouveau_bufctx_del(struct nouveau_bufctx **); -struct nouveau_bufref * -nouveau_bufctx_refn(struct nouveau_bufctx *, int bin, - struct nouveau_bo *, uint32_t flags); -struct nouveau_bufref * -nouveau_bufctx_mthd(struct nouveau_bufctx *, int bin, uint32_t packet, - struct nouveau_bo *, uint64_t data, uint32_t flags, - uint32_t vor, uint32_t tor); -void nouveau_bufctx_reset(struct nouveau_bufctx *, int bin); - -struct nouveau_pushbuf_krec; -struct nouveau_pushbuf { - struct nouveau_client *client; - struct nouveau_object *channel; - struct nouveau_bufctx *bufctx; - void (*kick_notify)(struct nouveau_pushbuf *); - void *user_priv; - uint32_t rsvd_kick; - uint32_t flags; - uint32_t *cur; - uint32_t *end; -}; - -struct nouveau_pushbuf_refn { - struct nouveau_bo *bo; - uint32_t flags; -}; - -int nouveau_pushbuf_new(struct nouveau_client *, struct nouveau_object *chan, - int nr, uint32_t size, bool immediate, - struct nouveau_pushbuf **); -void nouveau_pushbuf_del(struct nouveau_pushbuf **); -int nouveau_pushbuf_space(struct nouveau_pushbuf *, uint32_t dwords, - uint32_t relocs, uint32_t pushes); -void nouveau_pushbuf_data(struct nouveau_pushbuf *, struct nouveau_bo *, - uint64_t offset, uint64_t length); -int nouveau_pushbuf_refn(struct nouveau_pushbuf *, - struct nouveau_pushbuf_refn *, int nr); -/* Emits a reloc into the push buffer at the current position, you *must* - * have previously added the referenced buffer to a buffer context, and - * validated it against the current push buffer. - */ -void nouveau_pushbuf_reloc(struct nouveau_pushbuf *, struct nouveau_bo *, - uint32_t data, uint32_t flags, - uint32_t vor, uint32_t tor); -int nouveau_pushbuf_validate(struct nouveau_pushbuf *); -uint32_t nouveau_pushbuf_refd(struct nouveau_pushbuf *, struct nouveau_bo *); -int nouveau_pushbuf_kick(struct nouveau_pushbuf *, struct nouveau_object *chan); -struct nouveau_bufctx * -nouveau_pushbuf_bufctx(struct nouveau_pushbuf *, struct nouveau_bufctx *); - -#define NOUVEAU_DEVICE_CLASS 0x80000000 -#define NOUVEAU_FIFO_CHANNEL_CLASS 0x80000001 -#define NOUVEAU_NOTIFIER_CLASS 0x80000002 - -struct nouveau_fifo { - struct nouveau_object *object; - uint32_t channel; - uint32_t pushbuf; - uint64_t unused1[3]; -}; - -struct nv04_fifo { - struct nouveau_fifo base; - uint32_t vram; - uint32_t gart; - uint32_t notify; -}; - -struct nvc0_fifo { - struct nouveau_fifo base; - uint32_t notify; -}; - -#define NVE0_FIFO_ENGINE_GR 0x00000001 -#define NVE0_FIFO_ENGINE_VP 0x00000002 -#define NVE0_FIFO_ENGINE_PPP 0x00000004 -#define NVE0_FIFO_ENGINE_BSP 0x00000008 -#define NVE0_FIFO_ENGINE_CE0 0x00000010 -#define NVE0_FIFO_ENGINE_CE1 0x00000020 -#define NVE0_FIFO_ENGINE_ENC 0x00000040 - -struct nve0_fifo { - struct { - struct nouveau_fifo base; - uint32_t notify; - }; - uint32_t engine; -}; - -struct nv04_notify { - struct nouveau_object *object; - uint32_t offset; - uint32_t length; -}; - -bool -nouveau_check_dead_channel(struct nouveau_drm *, struct nouveau_object *chan); - -#endif diff --git a/prebuilts/x86/include/libdrm/nouveau/nvif/cl0080.h b/prebuilts/x86/include/libdrm/nouveau/nvif/cl0080.h deleted file mode 100644 index 331620a..0000000 --- a/prebuilts/x86/include/libdrm/nouveau/nvif/cl0080.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef __NVIF_CL0080_H__ -#define __NVIF_CL0080_H__ - -struct nv_device_v0 { - __u8 version; - __u8 pad01[7]; - __u64 device; /* device identifier, ~0 for client default */ -}; - -#define NV_DEVICE_V0_INFO 0x00 -#define NV_DEVICE_V0_TIME 0x01 - -struct nv_device_info_v0 { - __u8 version; -#define NV_DEVICE_INFO_V0_IGP 0x00 -#define NV_DEVICE_INFO_V0_PCI 0x01 -#define NV_DEVICE_INFO_V0_AGP 0x02 -#define NV_DEVICE_INFO_V0_PCIE 0x03 -#define NV_DEVICE_INFO_V0_SOC 0x04 - __u8 platform; - __u16 chipset; /* from NV_PMC_BOOT_0 */ - __u8 revision; /* from NV_PMC_BOOT_0 */ -#define NV_DEVICE_INFO_V0_TNT 0x01 -#define NV_DEVICE_INFO_V0_CELSIUS 0x02 -#define NV_DEVICE_INFO_V0_KELVIN 0x03 -#define NV_DEVICE_INFO_V0_RANKINE 0x04 -#define NV_DEVICE_INFO_V0_CURIE 0x05 -#define NV_DEVICE_INFO_V0_TESLA 0x06 -#define NV_DEVICE_INFO_V0_FERMI 0x07 -#define NV_DEVICE_INFO_V0_KEPLER 0x08 -#define NV_DEVICE_INFO_V0_MAXWELL 0x09 - __u8 family; - __u8 pad06[2]; - __u64 ram_size; - __u64 ram_user; - char chip[16]; - char name[64]; -}; - -struct nv_device_time_v0 { - __u8 version; - __u8 pad01[7]; - __u64 time; -}; -#endif diff --git a/prebuilts/x86/include/libdrm/nouveau/nvif/cl9097.h b/prebuilts/x86/include/libdrm/nouveau/nvif/cl9097.h deleted file mode 100644 index 4057676..0000000 --- a/prebuilts/x86/include/libdrm/nouveau/nvif/cl9097.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef __NVIF_CL9097_H__ -#define __NVIF_CL9097_H__ - -#define FERMI_A_ZBC_COLOR 0x00 -#define FERMI_A_ZBC_DEPTH 0x01 - -struct fermi_a_zbc_color_v0 { - __u8 version; -#define FERMI_A_ZBC_COLOR_V0_FMT_ZERO 0x01 -#define FERMI_A_ZBC_COLOR_V0_FMT_UNORM_ONE 0x02 -#define FERMI_A_ZBC_COLOR_V0_FMT_RF32_GF32_BF32_AF32 0x04 -#define FERMI_A_ZBC_COLOR_V0_FMT_R16_G16_B16_A16 0x08 -#define FERMI_A_ZBC_COLOR_V0_FMT_RN16_GN16_BN16_AN16 0x0c -#define FERMI_A_ZBC_COLOR_V0_FMT_RS16_GS16_BS16_AS16 0x10 -#define FERMI_A_ZBC_COLOR_V0_FMT_RU16_GU16_BU16_AU16 0x14 -#define FERMI_A_ZBC_COLOR_V0_FMT_RF16_GF16_BF16_AF16 0x16 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8R8G8B8 0x18 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8RL8GL8BL8 0x1c -#define FERMI_A_ZBC_COLOR_V0_FMT_A2B10G10R10 0x20 -#define FERMI_A_ZBC_COLOR_V0_FMT_AU2BU10GU10RU10 0x24 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8B8G8R8 0x28 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8BL8GL8RL8 0x2c -#define FERMI_A_ZBC_COLOR_V0_FMT_AN8BN8GN8RN8 0x30 -#define FERMI_A_ZBC_COLOR_V0_FMT_AS8BS8GS8RS8 0x34 -#define FERMI_A_ZBC_COLOR_V0_FMT_AU8BU8GU8RU8 0x38 -#define FERMI_A_ZBC_COLOR_V0_FMT_A2R10G10B10 0x3c -#define FERMI_A_ZBC_COLOR_V0_FMT_BF10GF11RF11 0x40 - __u8 format; - __u8 index; - __u8 pad03[5]; - __u32 ds[4]; - __u32 l2[4]; -}; - -struct fermi_a_zbc_depth_v0 { - __u8 version; -#define FERMI_A_ZBC_DEPTH_V0_FMT_FP32 0x01 - __u8 format; - __u8 index; - __u8 pad03[5]; - __u32 ds; - __u32 l2; -}; -#endif diff --git a/prebuilts/x86/include/libdrm/nouveau/nvif/class.h b/prebuilts/x86/include/libdrm/nouveau/nvif/class.h deleted file mode 100644 index 4179cd6..0000000 --- a/prebuilts/x86/include/libdrm/nouveau/nvif/class.h +++ /dev/null @@ -1,141 +0,0 @@ -#ifndef __NVIF_CLASS_H__ -#define __NVIF_CLASS_H__ - -/* these class numbers are made up by us, and not nvidia-assigned */ -#define NVIF_CLASS_CONTROL /* if0001.h */ -1 -#define NVIF_CLASS_PERFMON /* if0002.h */ -2 -#define NVIF_CLASS_PERFDOM /* if0003.h */ -3 -#define NVIF_CLASS_SW_NV04 /* if0004.h */ -4 -#define NVIF_CLASS_SW_NV10 /* if0005.h */ -5 -#define NVIF_CLASS_SW_NV50 /* if0005.h */ -6 -#define NVIF_CLASS_SW_GF100 /* if0005.h */ -7 - -/* the below match nvidia-assigned (either in hw, or sw) class numbers */ -#define NV_DEVICE /* cl0080.h */ 0x00000080 - -#define NV_DMA_FROM_MEMORY /* cl0002.h */ 0x00000002 -#define NV_DMA_TO_MEMORY /* cl0002.h */ 0x00000003 -#define NV_DMA_IN_MEMORY /* cl0002.h */ 0x0000003d - -#define FERMI_TWOD_A 0x0000902d - -#define FERMI_MEMORY_TO_MEMORY_FORMAT_A 0x00009039 - -#define KEPLER_INLINE_TO_MEMORY_A 0x0000a040 -#define KEPLER_INLINE_TO_MEMORY_B 0x0000a140 - -#define NV04_DISP /* cl0046.h */ 0x00000046 - -#define NV03_CHANNEL_DMA /* cl506b.h */ 0x0000006b -#define NV10_CHANNEL_DMA /* cl506b.h */ 0x0000006e -#define NV17_CHANNEL_DMA /* cl506b.h */ 0x0000176e -#define NV40_CHANNEL_DMA /* cl506b.h */ 0x0000406e -#define NV50_CHANNEL_DMA /* cl506e.h */ 0x0000506e -#define G82_CHANNEL_DMA /* cl826e.h */ 0x0000826e - -#define NV50_CHANNEL_GPFIFO /* cl506f.h */ 0x0000506f -#define G82_CHANNEL_GPFIFO /* cl826f.h */ 0x0000826f -#define FERMI_CHANNEL_GPFIFO /* cl906f.h */ 0x0000906f -#define KEPLER_CHANNEL_GPFIFO_A /* cla06f.h */ 0x0000a06f -#define MAXWELL_CHANNEL_GPFIFO_A /* cla06f.h */ 0x0000b06f - -#define NV50_DISP /* cl5070.h */ 0x00005070 -#define G82_DISP /* cl5070.h */ 0x00008270 -#define GT200_DISP /* cl5070.h */ 0x00008370 -#define GT214_DISP /* cl5070.h */ 0x00008570 -#define GT206_DISP /* cl5070.h */ 0x00008870 -#define GF110_DISP /* cl5070.h */ 0x00009070 -#define GK104_DISP /* cl5070.h */ 0x00009170 -#define GK110_DISP /* cl5070.h */ 0x00009270 -#define GM107_DISP /* cl5070.h */ 0x00009470 -#define GM204_DISP /* cl5070.h */ 0x00009570 - -#define NV31_MPEG 0x00003174 -#define G82_MPEG 0x00008274 - -#define NV74_VP2 0x00007476 - -#define NV50_DISP_CURSOR /* cl507a.h */ 0x0000507a -#define G82_DISP_CURSOR /* cl507a.h */ 0x0000827a -#define GT214_DISP_CURSOR /* cl507a.h */ 0x0000857a -#define GF110_DISP_CURSOR /* cl507a.h */ 0x0000907a -#define GK104_DISP_CURSOR /* cl507a.h */ 0x0000917a - -#define NV50_DISP_OVERLAY /* cl507b.h */ 0x0000507b -#define G82_DISP_OVERLAY /* cl507b.h */ 0x0000827b -#define GT214_DISP_OVERLAY /* cl507b.h */ 0x0000857b -#define GF110_DISP_OVERLAY /* cl507b.h */ 0x0000907b -#define GK104_DISP_OVERLAY /* cl507b.h */ 0x0000917b - -#define NV50_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000507c -#define G82_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000827c -#define GT200_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000837c -#define GT214_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000857c -#define GF110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000907c -#define GK104_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000917c -#define GK110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000927c - -#define NV50_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000507d -#define G82_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000827d -#define GT200_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000837d -#define GT214_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000857d -#define GT206_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000887d -#define GF110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000907d -#define GK104_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000917d -#define GK110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000927d -#define GM107_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000947d -#define GM204_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000957d - -#define NV50_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000507e -#define G82_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000827e -#define GT200_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000837e -#define GT214_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000857e -#define GF110_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ 0x0000907e -#define GK104_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ 0x0000917e - -#define FERMI_A /* cl9097.h */ 0x00009097 -#define FERMI_B /* cl9097.h */ 0x00009197 -#define FERMI_C /* cl9097.h */ 0x00009297 - -#define KEPLER_A /* cl9097.h */ 0x0000a097 -#define KEPLER_B /* cl9097.h */ 0x0000a197 -#define KEPLER_C /* cl9097.h */ 0x0000a297 - -#define MAXWELL_A /* cl9097.h */ 0x0000b097 -#define MAXWELL_B /* cl9097.h */ 0x0000b197 - -#define NV74_BSP 0x000074b0 - -#define GT212_MSVLD 0x000085b1 -#define IGT21A_MSVLD 0x000086b1 -#define G98_MSVLD 0x000088b1 -#define GF100_MSVLD 0x000090b1 -#define GK104_MSVLD 0x000095b1 - -#define GT212_MSPDEC 0x000085b2 -#define G98_MSPDEC 0x000088b2 -#define GF100_MSPDEC 0x000090b2 -#define GK104_MSPDEC 0x000095b2 - -#define GT212_MSPPP 0x000085b3 -#define G98_MSPPP 0x000088b3 -#define GF100_MSPPP 0x000090b3 - -#define G98_SEC 0x000088b4 - -#define GT212_DMA 0x000085b5 -#define FERMI_DMA 0x000090b5 -#define KEPLER_DMA_COPY_A 0x0000a0b5 -#define MAXWELL_DMA_COPY_A 0x0000b0b5 - -#define FERMI_DECOMPRESS 0x000090b8 - -#define FERMI_COMPUTE_A 0x000090c0 -#define FERMI_COMPUTE_B 0x000091c0 -#define KEPLER_COMPUTE_A 0x0000a0c0 -#define KEPLER_COMPUTE_B 0x0000a1c0 -#define MAXWELL_COMPUTE_A 0x0000b0c0 -#define MAXWELL_COMPUTE_B 0x0000b1c0 - -#define NV74_CIPHER 0x000074c1 -#endif diff --git a/prebuilts/x86/include/libdrm/nouveau/nvif/if0002.h b/prebuilts/x86/include/libdrm/nouveau/nvif/if0002.h deleted file mode 100644 index c04c91d..0000000 --- a/prebuilts/x86/include/libdrm/nouveau/nvif/if0002.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef __NVIF_IF0002_H__ -#define __NVIF_IF0002_H__ - -#define NVIF_PERFMON_V0_QUERY_DOMAIN 0x00 -#define NVIF_PERFMON_V0_QUERY_SIGNAL 0x01 -#define NVIF_PERFMON_V0_QUERY_SOURCE 0x02 - -struct nvif_perfmon_query_domain_v0 { - __u8 version; - __u8 id; - __u8 counter_nr; - __u8 iter; - __u16 signal_nr; - __u8 pad05[2]; - char name[64]; -}; - -struct nvif_perfmon_query_signal_v0 { - __u8 version; - __u8 domain; - __u16 iter; - __u8 signal; - __u8 source_nr; - __u8 pad05[2]; - char name[64]; -}; - -struct nvif_perfmon_query_source_v0 { - __u8 version; - __u8 domain; - __u8 signal; - __u8 iter; - __u8 pad04[4]; - __u32 source; - __u32 mask; - char name[64]; -}; -#endif diff --git a/prebuilts/x86/include/libdrm/nouveau/nvif/if0003.h b/prebuilts/x86/include/libdrm/nouveau/nvif/if0003.h deleted file mode 100644 index 0cd03ef..0000000 --- a/prebuilts/x86/include/libdrm/nouveau/nvif/if0003.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __NVIF_IF0003_H__ -#define __NVIF_IF0003_H__ - -struct nvif_perfdom_v0 { - __u8 version; - __u8 domain; - __u8 mode; - __u8 pad03[1]; - struct { - __u8 signal[4]; - __u64 source[4][8]; - __u16 logic_op; - } ctr[4]; -}; - -#define NVIF_PERFDOM_V0_INIT 0x00 -#define NVIF_PERFDOM_V0_SAMPLE 0x01 -#define NVIF_PERFDOM_V0_READ 0x02 - -struct nvif_perfdom_init { -}; - -struct nvif_perfdom_sample { -}; - -struct nvif_perfdom_read_v0 { - __u8 version; - __u8 pad01[7]; - __u32 ctr[4]; - __u32 clk; - __u8 pad04[4]; -}; -#endif diff --git a/prebuilts/x86/include/libdrm/nouveau/nvif/ioctl.h b/prebuilts/x86/include/libdrm/nouveau/nvif/ioctl.h deleted file mode 100644 index c5f5eb8..0000000 --- a/prebuilts/x86/include/libdrm/nouveau/nvif/ioctl.h +++ /dev/null @@ -1,132 +0,0 @@ -#ifndef __NVIF_IOCTL_H__ -#define __NVIF_IOCTL_H__ - -#define NVIF_VERSION_LATEST 0x0000000000000000ULL - -struct nvif_ioctl_v0 { - __u8 version; -#define NVIF_IOCTL_V0_NOP 0x00 -#define NVIF_IOCTL_V0_SCLASS 0x01 -#define NVIF_IOCTL_V0_NEW 0x02 -#define NVIF_IOCTL_V0_DEL 0x03 -#define NVIF_IOCTL_V0_MTHD 0x04 -#define NVIF_IOCTL_V0_RD 0x05 -#define NVIF_IOCTL_V0_WR 0x06 -#define NVIF_IOCTL_V0_MAP 0x07 -#define NVIF_IOCTL_V0_UNMAP 0x08 -#define NVIF_IOCTL_V0_NTFY_NEW 0x09 -#define NVIF_IOCTL_V0_NTFY_DEL 0x0a -#define NVIF_IOCTL_V0_NTFY_GET 0x0b -#define NVIF_IOCTL_V0_NTFY_PUT 0x0c - __u8 type; - __u8 pad02[4]; -#define NVIF_IOCTL_V0_OWNER_NVIF 0x00 -#define NVIF_IOCTL_V0_OWNER_ANY 0xff - __u8 owner; -#define NVIF_IOCTL_V0_ROUTE_NVIF 0x00 -#define NVIF_IOCTL_V0_ROUTE_HIDDEN 0xff - __u8 route; - __u64 token; - __u64 object; - __u8 data[]; /* ioctl data (below) */ -}; - -struct nvif_ioctl_nop_v0 { - __u64 version; -}; - -struct nvif_ioctl_sclass_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 count; - __u8 pad02[6]; - struct nvif_ioctl_sclass_oclass_v0 { - __s32 oclass; - __s16 minver; - __s16 maxver; - } oclass[]; -}; - -struct nvif_ioctl_new_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 pad01[6]; - __u8 route; - __u64 token; - __u64 object; - __u32 handle; - __s32 oclass; - __u8 data[]; /* class data (class.h) */ -}; - -struct nvif_ioctl_del { -}; - -struct nvif_ioctl_rd_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 size; - __u8 pad02[2]; - __u32 data; - __u64 addr; -}; - -struct nvif_ioctl_wr_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 size; - __u8 pad02[2]; - __u32 data; - __u64 addr; -}; - -struct nvif_ioctl_map_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 pad01[3]; - __u32 length; - __u64 handle; -}; - -struct nvif_ioctl_unmap { -}; - -struct nvif_ioctl_ntfy_new_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 event; - __u8 index; - __u8 pad03[5]; - __u8 data[]; /* event request data (event.h) */ -}; - -struct nvif_ioctl_ntfy_del_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 index; - __u8 pad02[6]; -}; - -struct nvif_ioctl_ntfy_get_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 index; - __u8 pad02[6]; -}; - -struct nvif_ioctl_ntfy_put_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 index; - __u8 pad02[6]; -}; - -struct nvif_ioctl_mthd_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 method; - __u8 pad02[6]; - __u8 data[]; /* method data (class.h) */ -}; - -#endif diff --git a/prebuilts/x86/include/libdrm/nouveau/nvif/unpack.h b/prebuilts/x86/include/libdrm/nouveau/nvif/unpack.h deleted file mode 100644 index 751bcf4..0000000 --- a/prebuilts/x86/include/libdrm/nouveau/nvif/unpack.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __NVIF_UNPACK_H__ -#define __NVIF_UNPACK_H__ - -#define nvif_unvers(r,d,s,m) ({ \ - void **_data = (d); __u32 *_size = (s); int _ret = (r); \ - if (_ret == -ENOSYS && *_size == sizeof(m)) { \ - *_data = NULL; \ - *_size = _ret = 0; \ - } \ - _ret; \ -}) - -#define nvif_unpack(r,d,s,m,vl,vh,x) ({ \ - void **_data = (d); __u32 *_size = (s); \ - int _ret = (r), _vl = (vl), _vh = (vh); \ - if (_ret == -ENOSYS && *_size >= sizeof(m) && \ - (m).version >= _vl && (m).version <= _vh) { \ - *_data = (__u8 *)*_data + sizeof(m); \ - *_size = *_size - sizeof(m); \ - if (_ret = 0, !(x)) { \ - _ret = *_size ? -E2BIG : 0; \ - *_data = NULL; \ - *_size = 0; \ - } \ - } \ - _ret; \ -}) -#endif diff --git a/prebuilts/x86/include/libdrm/nouveau_drm.h b/prebuilts/x86/include/libdrm/nouveau_drm.h deleted file mode 100644 index 4f94148..0000000 --- a/prebuilts/x86/include/libdrm/nouveau_drm.h +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright 2005 Stephane Marchesin. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef __NOUVEAU_DRM_H__ -#define __NOUVEAU_DRM_H__ - -#define NOUVEAU_DRM_HEADER_PATCHLEVEL 16 - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -struct drm_nouveau_channel_alloc { - uint32_t fb_ctxdma_handle; - uint32_t tt_ctxdma_handle; - - int channel; - uint32_t pushbuf_domains; - - /* Notifier memory */ - uint32_t notifier_handle; - - /* DRM-enforced subchannel assignments */ - struct { - uint32_t handle; - uint32_t grclass; - } subchan[8]; - uint32_t nr_subchan; -}; - -struct drm_nouveau_channel_free { - int channel; -}; - -struct drm_nouveau_grobj_alloc { - int channel; - uint32_t handle; - int class; -}; - -struct drm_nouveau_notifierobj_alloc { - uint32_t channel; - uint32_t handle; - uint32_t size; - uint32_t offset; -}; - -struct drm_nouveau_gpuobj_free { - int channel; - uint32_t handle; -}; - -#define NOUVEAU_GETPARAM_PCI_VENDOR 3 -#define NOUVEAU_GETPARAM_PCI_DEVICE 4 -#define NOUVEAU_GETPARAM_BUS_TYPE 5 -#define NOUVEAU_GETPARAM_FB_SIZE 8 -#define NOUVEAU_GETPARAM_AGP_SIZE 9 -#define NOUVEAU_GETPARAM_CHIPSET_ID 11 -#define NOUVEAU_GETPARAM_VM_VRAM_BASE 12 -#define NOUVEAU_GETPARAM_GRAPH_UNITS 13 -#define NOUVEAU_GETPARAM_PTIMER_TIME 14 -#define NOUVEAU_GETPARAM_HAS_BO_USAGE 15 -#define NOUVEAU_GETPARAM_HAS_PAGEFLIP 16 -struct drm_nouveau_getparam { - uint64_t param; - uint64_t value; -}; - -struct drm_nouveau_setparam { - uint64_t param; - uint64_t value; -}; - -#define NOUVEAU_GEM_DOMAIN_CPU (1 << 0) -#define NOUVEAU_GEM_DOMAIN_VRAM (1 << 1) -#define NOUVEAU_GEM_DOMAIN_GART (1 << 2) -#define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3) -#define NOUVEAU_GEM_DOMAIN_COHERENT (1 << 4) - -#define NOUVEAU_GEM_TILE_COMP 0x00030000 /* nv50-only */ -#define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00 -#define NOUVEAU_GEM_TILE_16BPP 0x00000001 -#define NOUVEAU_GEM_TILE_32BPP 0x00000002 -#define NOUVEAU_GEM_TILE_ZETA 0x00000004 -#define NOUVEAU_GEM_TILE_NONCONTIG 0x00000008 - -struct drm_nouveau_gem_info { - __u32 handle; - __u32 domain; - __u64 size; - __u64 offset; - __u64 map_handle; - __u32 tile_mode; - __u32 tile_flags; -}; - -struct drm_nouveau_gem_new { - struct drm_nouveau_gem_info info; - __u32 channel_hint; - __u32 align; -}; - -#define NOUVEAU_GEM_MAX_BUFFERS 1024 -struct drm_nouveau_gem_pushbuf_bo_presumed { - __u32 valid; - __u32 domain; - __u64 offset; -}; - -struct drm_nouveau_gem_pushbuf_bo { - __u64 user_priv; - __u32 handle; - __u32 read_domains; - __u32 write_domains; - __u32 valid_domains; - struct drm_nouveau_gem_pushbuf_bo_presumed presumed; -}; - -#define NOUVEAU_GEM_RELOC_LOW (1 << 0) -#define NOUVEAU_GEM_RELOC_HIGH (1 << 1) -#define NOUVEAU_GEM_RELOC_OR (1 << 2) -#define NOUVEAU_GEM_MAX_RELOCS 1024 -struct drm_nouveau_gem_pushbuf_reloc { - __u32 reloc_bo_index; - __u32 reloc_bo_offset; - __u32 bo_index; - __u32 flags; - __u32 data; - __u32 vor; - __u32 tor; -}; - -#define NOUVEAU_GEM_MAX_PUSH 512 -struct drm_nouveau_gem_pushbuf_push { - __u32 bo_index; - __u32 pad; - __u64 offset; - __u64 length; -}; - -struct drm_nouveau_gem_pushbuf { - __u32 channel; - __u32 nr_buffers; - __u64 buffers; - __u32 nr_relocs; - __u32 nr_push; - __u64 relocs; - __u64 push; - __u32 suffix0; - __u32 suffix1; -#define NOUVEAU_GEM_PUSHBUF_SYNC (1ULL << 0) - __u64 vram_available; - __u64 gart_available; -}; - -#define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001 -#define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004 -struct drm_nouveau_gem_cpu_prep { - __u32 handle; - __u32 flags; -}; - -struct drm_nouveau_gem_cpu_fini { - __u32 handle; -}; - -#define DRM_NOUVEAU_GETPARAM 0x00 /* deprecated */ -#define DRM_NOUVEAU_SETPARAM 0x01 /* deprecated */ -#define DRM_NOUVEAU_CHANNEL_ALLOC 0x02 /* deprecated */ -#define DRM_NOUVEAU_CHANNEL_FREE 0x03 /* deprecated */ -#define DRM_NOUVEAU_GROBJ_ALLOC 0x04 /* deprecated */ -#define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC 0x05 /* deprecated */ -#define DRM_NOUVEAU_GPUOBJ_FREE 0x06 /* deprecated */ -#define DRM_NOUVEAU_NVIF 0x07 -#define DRM_NOUVEAU_SVM_INIT 0x08 -#define DRM_NOUVEAU_SVM_BIND 0x09 -#define DRM_NOUVEAU_GEM_NEW 0x40 -#define DRM_NOUVEAU_GEM_PUSHBUF 0x41 -#define DRM_NOUVEAU_GEM_CPU_PREP 0x42 -#define DRM_NOUVEAU_GEM_CPU_FINI 0x43 -#define DRM_NOUVEAU_GEM_INFO 0x44 - -struct drm_nouveau_svm_init { - __u64 unmanaged_addr; - __u64 unmanaged_size; -}; - -struct drm_nouveau_svm_bind { - __u64 header; - __u64 va_start; - __u64 va_end; - __u64 npages; - __u64 stride; - __u64 result; - __u64 reserved0; - __u64 reserved1; -}; - -#define NOUVEAU_SVM_BIND_COMMAND_SHIFT 0 -#define NOUVEAU_SVM_BIND_COMMAND_BITS 8 -#define NOUVEAU_SVM_BIND_COMMAND_MASK ((1 << 8) - 1) -#define NOUVEAU_SVM_BIND_PRIORITY_SHIFT 8 -#define NOUVEAU_SVM_BIND_PRIORITY_BITS 8 -#define NOUVEAU_SVM_BIND_PRIORITY_MASK ((1 << 8) - 1) -#define NOUVEAU_SVM_BIND_TARGET_SHIFT 16 -#define NOUVEAU_SVM_BIND_TARGET_BITS 32 -#define NOUVEAU_SVM_BIND_TARGET_MASK 0xffffffff - -/* - * Below is use to validate ioctl argument, userspace can also use it to make - * sure that no bit are set beyond known fields for a given kernel version. - */ -#define NOUVEAU_SVM_BIND_VALID_BITS 48 -#define NOUVEAU_SVM_BIND_VALID_MASK ((1ULL << NOUVEAU_SVM_BIND_VALID_BITS) - 1) - - -/* - * NOUVEAU_BIND_COMMAND__MIGRATE: synchronous migrate to target memory. - * result: number of page successfuly migrate to the target memory. - */ -#define NOUVEAU_SVM_BIND_COMMAND__MIGRATE 0 - -/* - * NOUVEAU_SVM_BIND_HEADER_TARGET__GPU_VRAM: target the GPU VRAM memory. - */ -#define NOUVEAU_SVM_BIND_TARGET__GPU_VRAM (1UL << 31) - - -#if defined(__cplusplus) -} -#endif - -#endif /* __NOUVEAU_DRM_H__ */ diff --git a/prebuilts/x86/include/libdrm/qxl_drm.h b/prebuilts/x86/include/libdrm/qxl_drm.h deleted file mode 100644 index 880999d..0000000 --- a/prebuilts/x86/include/libdrm/qxl_drm.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright 2013 Red Hat - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef QXL_DRM_H -#define QXL_DRM_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints. - * - * Do not use pointers, use __u64 instead for 32 bit / 64 bit user/kernel - * compatibility Keep fields aligned to their size - */ - -#define QXL_GEM_DOMAIN_CPU 0 -#define QXL_GEM_DOMAIN_VRAM 1 -#define QXL_GEM_DOMAIN_SURFACE 2 - -#define DRM_QXL_ALLOC 0x00 -#define DRM_QXL_MAP 0x01 -#define DRM_QXL_EXECBUFFER 0x02 -#define DRM_QXL_UPDATE_AREA 0x03 -#define DRM_QXL_GETPARAM 0x04 -#define DRM_QXL_CLIENTCAP 0x05 - -#define DRM_QXL_ALLOC_SURF 0x06 - -struct drm_qxl_alloc { - __u32 size; - __u32 handle; /* 0 is an invalid handle */ -}; - -struct drm_qxl_map { - __u64 offset; /* use for mmap system call */ - __u32 handle; - __u32 pad; -}; - -/* - * dest is the bo we are writing the relocation into - * src is bo we are relocating. - * *(dest_handle.base_addr + dest_offset) = physical_address(src_handle.addr + - * src_offset) - */ -#define QXL_RELOC_TYPE_BO 1 -#define QXL_RELOC_TYPE_SURF 2 - -struct drm_qxl_reloc { - __u64 src_offset; /* offset into src_handle or src buffer */ - __u64 dst_offset; /* offset in dest handle */ - __u32 src_handle; /* dest handle to compute address from */ - __u32 dst_handle; /* 0 if to command buffer */ - __u32 reloc_type; - __u32 pad; -}; - -struct drm_qxl_command { - __u64 command; /* void* */ - __u64 relocs; /* struct drm_qxl_reloc* */ - __u32 type; - __u32 command_size; - __u32 relocs_num; - __u32 pad; -}; - -struct drm_qxl_execbuffer { - __u32 flags; /* for future use */ - __u32 commands_num; - __u64 commands; /* struct drm_qxl_command* */ -}; - -struct drm_qxl_update_area { - __u32 handle; - __u32 top; - __u32 left; - __u32 bottom; - __u32 right; - __u32 pad; -}; - -#define QXL_PARAM_NUM_SURFACES 1 /* rom->n_surfaces */ -#define QXL_PARAM_MAX_RELOCS 2 -struct drm_qxl_getparam { - __u64 param; - __u64 value; -}; - -/* these are one bit values */ -struct drm_qxl_clientcap { - __u32 index; - __u32 pad; -}; - -struct drm_qxl_alloc_surf { - __u32 format; - __u32 width; - __u32 height; - __s32 stride; - __u32 handle; - __u32 pad; -}; - -#define DRM_IOCTL_QXL_ALLOC \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_ALLOC, struct drm_qxl_alloc) - -#define DRM_IOCTL_QXL_MAP \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_MAP, struct drm_qxl_map) - -#define DRM_IOCTL_QXL_EXECBUFFER \ - DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_EXECBUFFER,\ - struct drm_qxl_execbuffer) - -#define DRM_IOCTL_QXL_UPDATE_AREA \ - DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_UPDATE_AREA,\ - struct drm_qxl_update_area) - -#define DRM_IOCTL_QXL_GETPARAM \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_GETPARAM,\ - struct drm_qxl_getparam) - -#define DRM_IOCTL_QXL_CLIENTCAP \ - DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_CLIENTCAP,\ - struct drm_qxl_clientcap) - -#define DRM_IOCTL_QXL_ALLOC_SURF \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_ALLOC_SURF,\ - struct drm_qxl_alloc_surf) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86/include/libdrm/r128_drm.h b/prebuilts/x86/include/libdrm/r128_drm.h deleted file mode 100644 index bf431a0..0000000 --- a/prebuilts/x86/include/libdrm/r128_drm.h +++ /dev/null @@ -1,336 +0,0 @@ -/* r128_drm.h -- Public header for the r128 driver -*- linux-c -*- - * Created: Wed Apr 5 19:24:19 2000 by kevin@precisioninsight.com - */ -/* - * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Gareth Hughes - * Kevin E. Martin - */ - -#ifndef __R128_DRM_H__ -#define __R128_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the X server file (r128_sarea.h) - */ -#ifndef __R128_SAREA_DEFINES__ -#define __R128_SAREA_DEFINES__ - -/* What needs to be changed for the current vertex buffer? - */ -#define R128_UPLOAD_CONTEXT 0x001 -#define R128_UPLOAD_SETUP 0x002 -#define R128_UPLOAD_TEX0 0x004 -#define R128_UPLOAD_TEX1 0x008 -#define R128_UPLOAD_TEX0IMAGES 0x010 -#define R128_UPLOAD_TEX1IMAGES 0x020 -#define R128_UPLOAD_CORE 0x040 -#define R128_UPLOAD_MASKS 0x080 -#define R128_UPLOAD_WINDOW 0x100 -#define R128_UPLOAD_CLIPRECTS 0x200 /* handled client-side */ -#define R128_REQUIRE_QUIESCENCE 0x400 -#define R128_UPLOAD_ALL 0x7ff - -#define R128_FRONT 0x1 -#define R128_BACK 0x2 -#define R128_DEPTH 0x4 - -/* Primitive types - */ -#define R128_POINTS 0x1 -#define R128_LINES 0x2 -#define R128_LINE_STRIP 0x3 -#define R128_TRIANGLES 0x4 -#define R128_TRIANGLE_FAN 0x5 -#define R128_TRIANGLE_STRIP 0x6 - -/* Vertex/indirect buffer size - */ -#define R128_BUFFER_SIZE 16384 - -/* Byte offsets for indirect buffer data - */ -#define R128_INDEX_PRIM_OFFSET 20 -#define R128_HOSTDATA_BLIT_OFFSET 32 - -/* Keep these small for testing. - */ -#define R128_NR_SAREA_CLIPRECTS 12 - -/* There are 2 heaps (local/AGP). Each region within a heap is a - * minimum of 64k, and there are at most 64 of them per heap. - */ -#define R128_LOCAL_TEX_HEAP 0 -#define R128_AGP_TEX_HEAP 1 -#define R128_NR_TEX_HEAPS 2 -#define R128_NR_TEX_REGIONS 64 -#define R128_LOG_TEX_GRANULARITY 16 - -#define R128_NR_CONTEXT_REGS 12 - -#define R128_MAX_TEXTURE_LEVELS 11 -#define R128_MAX_TEXTURE_UNITS 2 - -#endif /* __R128_SAREA_DEFINES__ */ - -typedef struct { - /* Context state - can be written in one large chunk */ - unsigned int dst_pitch_offset_c; - unsigned int dp_gui_master_cntl_c; - unsigned int sc_top_left_c; - unsigned int sc_bottom_right_c; - unsigned int z_offset_c; - unsigned int z_pitch_c; - unsigned int z_sten_cntl_c; - unsigned int tex_cntl_c; - unsigned int misc_3d_state_cntl_reg; - unsigned int texture_clr_cmp_clr_c; - unsigned int texture_clr_cmp_msk_c; - unsigned int fog_color_c; - - /* Texture state */ - unsigned int tex_size_pitch_c; - unsigned int constant_color_c; - - /* Setup state */ - unsigned int pm4_vc_fpu_setup; - unsigned int setup_cntl; - - /* Mask state */ - unsigned int dp_write_mask; - unsigned int sten_ref_mask_c; - unsigned int plane_3d_mask_c; - - /* Window state */ - unsigned int window_xy_offset; - - /* Core state */ - unsigned int scale_3d_cntl; -} drm_r128_context_regs_t; - -/* Setup registers for each texture unit - */ -typedef struct { - unsigned int tex_cntl; - unsigned int tex_combine_cntl; - unsigned int tex_size_pitch; - unsigned int tex_offset[R128_MAX_TEXTURE_LEVELS]; - unsigned int tex_border_color; -} drm_r128_texture_regs_t; - -typedef struct drm_r128_sarea { - /* The channel for communication of state information to the kernel - * on firing a vertex buffer. - */ - drm_r128_context_regs_t context_state; - drm_r128_texture_regs_t tex_state[R128_MAX_TEXTURE_UNITS]; - unsigned int dirty; - unsigned int vertsize; - unsigned int vc_format; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[R128_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Counters for client-side throttling of rendering clients. - */ - unsigned int last_frame; - unsigned int last_dispatch; - - struct drm_tex_region tex_list[R128_NR_TEX_HEAPS][R128_NR_TEX_REGIONS + 1]; - unsigned int tex_age[R128_NR_TEX_HEAPS]; - int ctx_owner; - int pfAllowPageFlip; /* number of 3d windows (0,1,2 or more) */ - int pfCurrentPage; /* which buffer is being displayed? */ -} drm_r128_sarea_t; - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (xf86drmR128.h) - */ - -/* Rage 128 specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ -#define DRM_R128_INIT 0x00 -#define DRM_R128_CCE_START 0x01 -#define DRM_R128_CCE_STOP 0x02 -#define DRM_R128_CCE_RESET 0x03 -#define DRM_R128_CCE_IDLE 0x04 -/* 0x05 not used */ -#define DRM_R128_RESET 0x06 -#define DRM_R128_SWAP 0x07 -#define DRM_R128_CLEAR 0x08 -#define DRM_R128_VERTEX 0x09 -#define DRM_R128_INDICES 0x0a -#define DRM_R128_BLIT 0x0b -#define DRM_R128_DEPTH 0x0c -#define DRM_R128_STIPPLE 0x0d -/* 0x0e not used */ -#define DRM_R128_INDIRECT 0x0f -#define DRM_R128_FULLSCREEN 0x10 -#define DRM_R128_CLEAR2 0x11 -#define DRM_R128_GETPARAM 0x12 -#define DRM_R128_FLIP 0x13 - -#define DRM_IOCTL_R128_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INIT, drm_r128_init_t) -#define DRM_IOCTL_R128_CCE_START DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_START) -#define DRM_IOCTL_R128_CCE_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CCE_STOP, drm_r128_cce_stop_t) -#define DRM_IOCTL_R128_CCE_RESET DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_RESET) -#define DRM_IOCTL_R128_CCE_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_IDLE) -/* 0x05 not used */ -#define DRM_IOCTL_R128_RESET DRM_IO( DRM_COMMAND_BASE + DRM_R128_RESET) -#define DRM_IOCTL_R128_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_R128_SWAP) -#define DRM_IOCTL_R128_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR, drm_r128_clear_t) -#define DRM_IOCTL_R128_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_R128_VERTEX, drm_r128_vertex_t) -#define DRM_IOCTL_R128_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INDICES, drm_r128_indices_t) -#define DRM_IOCTL_R128_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_R128_BLIT, drm_r128_blit_t) -#define DRM_IOCTL_R128_DEPTH DRM_IOW( DRM_COMMAND_BASE + DRM_R128_DEPTH, drm_r128_depth_t) -#define DRM_IOCTL_R128_STIPPLE DRM_IOW( DRM_COMMAND_BASE + DRM_R128_STIPPLE, drm_r128_stipple_t) -/* 0x0e not used */ -#define DRM_IOCTL_R128_INDIRECT DRM_IOWR(DRM_COMMAND_BASE + DRM_R128_INDIRECT, drm_r128_indirect_t) -#define DRM_IOCTL_R128_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_R128_FULLSCREEN, drm_r128_fullscreen_t) -#define DRM_IOCTL_R128_CLEAR2 DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR2, drm_r128_clear2_t) -#define DRM_IOCTL_R128_GETPARAM DRM_IOWR( DRM_COMMAND_BASE + DRM_R128_GETPARAM, drm_r128_getparam_t) -#define DRM_IOCTL_R128_FLIP DRM_IO( DRM_COMMAND_BASE + DRM_R128_FLIP) - -typedef struct drm_r128_init { - enum { - R128_INIT_CCE = 0x01, - R128_CLEANUP_CCE = 0x02 - } func; - unsigned long sarea_priv_offset; - int is_pci; - int cce_mode; - int cce_secure; - int ring_size; - int usec_timeout; - - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - unsigned int span_offset; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long ring_offset; - unsigned long ring_rptr_offset; - unsigned long buffers_offset; - unsigned long agp_textures_offset; -} drm_r128_init_t; - -typedef struct drm_r128_cce_stop { - int flush; - int idle; -} drm_r128_cce_stop_t; - -typedef struct drm_r128_clear { - unsigned int flags; - unsigned int clear_color; - unsigned int clear_depth; - unsigned int color_mask; - unsigned int depth_mask; -} drm_r128_clear_t; - -typedef struct drm_r128_vertex { - int prim; - int idx; /* Index of vertex buffer */ - int count; /* Number of vertices in buffer */ - int discard; /* Client finished with buffer? */ -} drm_r128_vertex_t; - -typedef struct drm_r128_indices { - int prim; - int idx; - int start; - int end; - int discard; /* Client finished with buffer? */ -} drm_r128_indices_t; - -typedef struct drm_r128_blit { - int idx; - int pitch; - int offset; - int format; - unsigned short x, y; - unsigned short width, height; -} drm_r128_blit_t; - -typedef struct drm_r128_depth { - enum { - R128_WRITE_SPAN = 0x01, - R128_WRITE_PIXELS = 0x02, - R128_READ_SPAN = 0x03, - R128_READ_PIXELS = 0x04 - } func; - int n; - int *x; - int *y; - unsigned int *buffer; - unsigned char *mask; -} drm_r128_depth_t; - -typedef struct drm_r128_stipple { - unsigned int *mask; -} drm_r128_stipple_t; - -typedef struct drm_r128_indirect { - int idx; - int start; - int end; - int discard; -} drm_r128_indirect_t; - -typedef struct drm_r128_fullscreen { - enum { - R128_INIT_FULLSCREEN = 0x01, - R128_CLEANUP_FULLSCREEN = 0x02 - } func; -} drm_r128_fullscreen_t; - -/* 2.3: An ioctl to get parameters that aren't available to the 3d - * client any other way. - */ -#define R128_PARAM_IRQ_NR 1 - -typedef struct drm_r128_getparam { - int param; - void *value; -} drm_r128_getparam_t; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86/include/libdrm/r600_pci_ids.h b/prebuilts/x86/include/libdrm/r600_pci_ids.h deleted file mode 100644 index a3b2eac..0000000 --- a/prebuilts/x86/include/libdrm/r600_pci_ids.h +++ /dev/null @@ -1,487 +0,0 @@ -CHIPSET(0x9400, R600_9400, R600) -CHIPSET(0x9401, R600_9401, R600) -CHIPSET(0x9402, R600_9402, R600) -CHIPSET(0x9403, R600_9403, R600) -CHIPSET(0x9405, R600_9405, R600) -CHIPSET(0x940A, R600_940A, R600) -CHIPSET(0x940B, R600_940B, R600) -CHIPSET(0x940F, R600_940F, R600) - -CHIPSET(0x94C0, RV610_94C0, RV610) -CHIPSET(0x94C1, RV610_94C1, RV610) -CHIPSET(0x94C3, RV610_94C3, RV610) -CHIPSET(0x94C4, RV610_94C4, RV610) -CHIPSET(0x94C5, RV610_94C5, RV610) -CHIPSET(0x94C6, RV610_94C6, RV610) -CHIPSET(0x94C7, RV610_94C7, RV610) -CHIPSET(0x94C8, RV610_94C8, RV610) -CHIPSET(0x94C9, RV610_94C9, RV610) -CHIPSET(0x94CB, RV610_94CB, RV610) -CHIPSET(0x94CC, RV610_94CC, RV610) -CHIPSET(0x94CD, RV610_94CD, RV610) - -CHIPSET(0x9580, RV630_9580, RV630) -CHIPSET(0x9581, RV630_9581, RV630) -CHIPSET(0x9583, RV630_9583, RV630) -CHIPSET(0x9586, RV630_9586, RV630) -CHIPSET(0x9587, RV630_9587, RV630) -CHIPSET(0x9588, RV630_9588, RV630) -CHIPSET(0x9589, RV630_9589, RV630) -CHIPSET(0x958A, RV630_958A, RV630) -CHIPSET(0x958B, RV630_958B, RV630) -CHIPSET(0x958C, RV630_958C, RV630) -CHIPSET(0x958D, RV630_958D, RV630) -CHIPSET(0x958E, RV630_958E, RV630) -CHIPSET(0x958F, RV630_958F, RV630) - -CHIPSET(0x9500, RV670_9500, RV670) -CHIPSET(0x9501, RV670_9501, RV670) -CHIPSET(0x9504, RV670_9504, RV670) -CHIPSET(0x9505, RV670_9505, RV670) -CHIPSET(0x9506, RV670_9506, RV670) -CHIPSET(0x9507, RV670_9507, RV670) -CHIPSET(0x9508, RV670_9508, RV670) -CHIPSET(0x9509, RV670_9509, RV670) -CHIPSET(0x950F, RV670_950F, RV670) -CHIPSET(0x9511, RV670_9511, RV670) -CHIPSET(0x9515, RV670_9515, RV670) -CHIPSET(0x9517, RV670_9517, RV670) -CHIPSET(0x9519, RV670_9519, RV670) - -CHIPSET(0x95C0, RV620_95C0, RV620) -CHIPSET(0x95C2, RV620_95C2, RV620) -CHIPSET(0x95C4, RV620_95C4, RV620) -CHIPSET(0x95C5, RV620_95C5, RV620) -CHIPSET(0x95C6, RV620_95C6, RV620) -CHIPSET(0x95C7, RV620_95C7, RV620) -CHIPSET(0x95C9, RV620_95C9, RV620) -CHIPSET(0x95CC, RV620_95CC, RV620) -CHIPSET(0x95CD, RV620_95CD, RV620) -CHIPSET(0x95CE, RV620_95CE, RV620) -CHIPSET(0x95CF, RV620_95CF, RV620) - -CHIPSET(0x9590, RV635_9590, RV635) -CHIPSET(0x9591, RV635_9591, RV635) -CHIPSET(0x9593, RV635_9593, RV635) -CHIPSET(0x9595, RV635_9595, RV635) -CHIPSET(0x9596, RV635_9596, RV635) -CHIPSET(0x9597, RV635_9597, RV635) -CHIPSET(0x9598, RV635_9598, RV635) -CHIPSET(0x9599, RV635_9599, RV635) -CHIPSET(0x959B, RV635_959B, RV635) - -CHIPSET(0x9610, RS780_9610, RS780) -CHIPSET(0x9611, RS780_9611, RS780) -CHIPSET(0x9612, RS780_9612, RS780) -CHIPSET(0x9613, RS780_9613, RS780) -CHIPSET(0x9614, RS780_9614, RS780) -CHIPSET(0x9615, RS780_9615, RS780) -CHIPSET(0x9616, RS780_9616, RS780) - -CHIPSET(0x9710, RS880_9710, RS880) -CHIPSET(0x9711, RS880_9711, RS880) -CHIPSET(0x9712, RS880_9712, RS880) -CHIPSET(0x9713, RS880_9713, RS880) -CHIPSET(0x9714, RS880_9714, RS880) -CHIPSET(0x9715, RS880_9715, RS880) - -CHIPSET(0x9440, RV770_9440, RV770) -CHIPSET(0x9441, RV770_9441, RV770) -CHIPSET(0x9442, RV770_9442, RV770) -CHIPSET(0x9443, RV770_9443, RV770) -CHIPSET(0x9444, RV770_9444, RV770) -CHIPSET(0x9446, RV770_9446, RV770) -CHIPSET(0x944A, RV770_944A, RV770) -CHIPSET(0x944B, RV770_944B, RV770) -CHIPSET(0x944C, RV770_944C, RV770) -CHIPSET(0x944E, RV770_944E, RV770) -CHIPSET(0x9450, RV770_9450, RV770) -CHIPSET(0x9452, RV770_9452, RV770) -CHIPSET(0x9456, RV770_9456, RV770) -CHIPSET(0x945A, RV770_945A, RV770) -CHIPSET(0x945B, RV770_945B, RV770) -CHIPSET(0x945E, RV770_945E, RV770) -CHIPSET(0x9460, RV790_9460, RV770) -CHIPSET(0x9462, RV790_9462, RV770) -CHIPSET(0x946A, RV770_946A, RV770) -CHIPSET(0x946B, RV770_946B, RV770) -CHIPSET(0x947A, RV770_947A, RV770) -CHIPSET(0x947B, RV770_947B, RV770) - -CHIPSET(0x9480, RV730_9480, RV730) -CHIPSET(0x9487, RV730_9487, RV730) -CHIPSET(0x9488, RV730_9488, RV730) -CHIPSET(0x9489, RV730_9489, RV730) -CHIPSET(0x948A, RV730_948A, RV730) -CHIPSET(0x948F, RV730_948F, RV730) -CHIPSET(0x9490, RV730_9490, RV730) -CHIPSET(0x9491, RV730_9491, RV730) -CHIPSET(0x9495, RV730_9495, RV730) -CHIPSET(0x9498, RV730_9498, RV730) -CHIPSET(0x949C, RV730_949C, RV730) -CHIPSET(0x949E, RV730_949E, RV730) -CHIPSET(0x949F, RV730_949F, RV730) - -CHIPSET(0x9540, RV710_9540, RV710) -CHIPSET(0x9541, RV710_9541, RV710) -CHIPSET(0x9542, RV710_9542, RV710) -CHIPSET(0x954E, RV710_954E, RV710) -CHIPSET(0x954F, RV710_954F, RV710) -CHIPSET(0x9552, RV710_9552, RV710) -CHIPSET(0x9553, RV710_9553, RV710) -CHIPSET(0x9555, RV710_9555, RV710) -CHIPSET(0x9557, RV710_9557, RV710) -CHIPSET(0x955F, RV710_955F, RV710) - -CHIPSET(0x94A0, RV740_94A0, RV740) -CHIPSET(0x94A1, RV740_94A1, RV740) -CHIPSET(0x94A3, RV740_94A3, RV740) -CHIPSET(0x94B1, RV740_94B1, RV740) -CHIPSET(0x94B3, RV740_94B3, RV740) -CHIPSET(0x94B4, RV740_94B4, RV740) -CHIPSET(0x94B5, RV740_94B5, RV740) -CHIPSET(0x94B9, RV740_94B9, RV740) - -CHIPSET(0x68E0, CEDAR_68E0, CEDAR) -CHIPSET(0x68E1, CEDAR_68E1, CEDAR) -CHIPSET(0x68E4, CEDAR_68E4, CEDAR) -CHIPSET(0x68E5, CEDAR_68E5, CEDAR) -CHIPSET(0x68E8, CEDAR_68E8, CEDAR) -CHIPSET(0x68E9, CEDAR_68E9, CEDAR) -CHIPSET(0x68F1, CEDAR_68F1, CEDAR) -CHIPSET(0x68F2, CEDAR_68F2, CEDAR) -CHIPSET(0x68F8, CEDAR_68F8, CEDAR) -CHIPSET(0x68F9, CEDAR_68F9, CEDAR) -CHIPSET(0x68FA, CEDAR_68FA, CEDAR) -CHIPSET(0x68FE, CEDAR_68FE, CEDAR) - -CHIPSET(0x68C0, REDWOOD_68C0, REDWOOD) -CHIPSET(0x68C1, REDWOOD_68C1, REDWOOD) -CHIPSET(0x68C7, REDWOOD_68C7, REDWOOD) -CHIPSET(0x68C8, REDWOOD_68C8, REDWOOD) -CHIPSET(0x68C9, REDWOOD_68C9, REDWOOD) -CHIPSET(0x68D8, REDWOOD_68D8, REDWOOD) -CHIPSET(0x68D9, REDWOOD_68D9, REDWOOD) -CHIPSET(0x68DA, REDWOOD_68DA, REDWOOD) -CHIPSET(0x68DE, REDWOOD_68DE, REDWOOD) - -CHIPSET(0x68A0, JUNIPER_68A0, JUNIPER) -CHIPSET(0x68A1, JUNIPER_68A1, JUNIPER) -CHIPSET(0x68A8, JUNIPER_68A8, JUNIPER) -CHIPSET(0x68A9, JUNIPER_68A9, JUNIPER) -CHIPSET(0x68B0, JUNIPER_68B0, JUNIPER) -CHIPSET(0x68B8, JUNIPER_68B8, JUNIPER) -CHIPSET(0x68B9, JUNIPER_68B9, JUNIPER) -CHIPSET(0x68BA, JUNIPER_68BA, JUNIPER) -CHIPSET(0x68BE, JUNIPER_68BE, JUNIPER) -CHIPSET(0x68BF, JUNIPER_68BF, JUNIPER) - -CHIPSET(0x6880, CYPRESS_6880, CYPRESS) -CHIPSET(0x6888, CYPRESS_6888, CYPRESS) -CHIPSET(0x6889, CYPRESS_6889, CYPRESS) -CHIPSET(0x688A, CYPRESS_688A, CYPRESS) -CHIPSET(0x688C, CYPRESS_688C, CYPRESS) -CHIPSET(0x688D, CYPRESS_688D, CYPRESS) -CHIPSET(0x6898, CYPRESS_6898, CYPRESS) -CHIPSET(0x6899, CYPRESS_6899, CYPRESS) -CHIPSET(0x689B, CYPRESS_689B, CYPRESS) -CHIPSET(0x689E, CYPRESS_689E, CYPRESS) - -CHIPSET(0x689C, HEMLOCK_689C, HEMLOCK) -CHIPSET(0x689D, HEMLOCK_689D, HEMLOCK) - -CHIPSET(0x9802, PALM_9802, PALM) -CHIPSET(0x9803, PALM_9803, PALM) -CHIPSET(0x9804, PALM_9804, PALM) -CHIPSET(0x9805, PALM_9805, PALM) -CHIPSET(0x9806, PALM_9806, PALM) -CHIPSET(0x9807, PALM_9807, PALM) -CHIPSET(0x9808, PALM_9808, PALM) -CHIPSET(0x9809, PALM_9809, PALM) -CHIPSET(0x980A, PALM_980A, PALM) - -CHIPSET(0x9640, SUMO_9640, SUMO) -CHIPSET(0x9641, SUMO_9641, SUMO) -CHIPSET(0x9642, SUMO2_9642, SUMO2) -CHIPSET(0x9643, SUMO2_9643, SUMO2) -CHIPSET(0x9644, SUMO2_9644, SUMO2) -CHIPSET(0x9645, SUMO2_9645, SUMO2) -CHIPSET(0x9647, SUMO_9647, SUMO) -CHIPSET(0x9648, SUMO_9648, SUMO) -CHIPSET(0x9649, SUMO2_9649, SUMO2) -CHIPSET(0x964a, SUMO_964A, SUMO) -CHIPSET(0x964b, SUMO_964B, SUMO) -CHIPSET(0x964c, SUMO_964C, SUMO) -CHIPSET(0x964e, SUMO_964E, SUMO) -CHIPSET(0x964f, SUMO_964F, SUMO) - -CHIPSET(0x6700, CAYMAN_6700, CAYMAN) -CHIPSET(0x6701, CAYMAN_6701, CAYMAN) -CHIPSET(0x6702, CAYMAN_6702, CAYMAN) -CHIPSET(0x6703, CAYMAN_6703, CAYMAN) -CHIPSET(0x6704, CAYMAN_6704, CAYMAN) -CHIPSET(0x6705, CAYMAN_6705, CAYMAN) -CHIPSET(0x6706, CAYMAN_6706, CAYMAN) -CHIPSET(0x6707, CAYMAN_6707, CAYMAN) -CHIPSET(0x6708, CAYMAN_6708, CAYMAN) -CHIPSET(0x6709, CAYMAN_6709, CAYMAN) -CHIPSET(0x6718, CAYMAN_6718, CAYMAN) -CHIPSET(0x6719, CAYMAN_6719, CAYMAN) -CHIPSET(0x671C, CAYMAN_671C, CAYMAN) -CHIPSET(0x671D, CAYMAN_671D, CAYMAN) -CHIPSET(0x671F, CAYMAN_671F, CAYMAN) - -CHIPSET(0x6720, BARTS_6720, BARTS) -CHIPSET(0x6721, BARTS_6721, BARTS) -CHIPSET(0x6722, BARTS_6722, BARTS) -CHIPSET(0x6723, BARTS_6723, BARTS) -CHIPSET(0x6724, BARTS_6724, BARTS) -CHIPSET(0x6725, BARTS_6725, BARTS) -CHIPSET(0x6726, BARTS_6726, BARTS) -CHIPSET(0x6727, BARTS_6727, BARTS) -CHIPSET(0x6728, BARTS_6728, BARTS) -CHIPSET(0x6729, BARTS_6729, BARTS) -CHIPSET(0x6738, BARTS_6738, BARTS) -CHIPSET(0x6739, BARTS_6739, BARTS) -CHIPSET(0x673E, BARTS_673E, BARTS) - -CHIPSET(0x6740, TURKS_6740, TURKS) -CHIPSET(0x6741, TURKS_6741, TURKS) -CHIPSET(0x6742, TURKS_6742, TURKS) -CHIPSET(0x6743, TURKS_6743, TURKS) -CHIPSET(0x6744, TURKS_6744, TURKS) -CHIPSET(0x6745, TURKS_6745, TURKS) -CHIPSET(0x6746, TURKS_6746, TURKS) -CHIPSET(0x6747, TURKS_6747, TURKS) -CHIPSET(0x6748, TURKS_6748, TURKS) -CHIPSET(0x6749, TURKS_6749, TURKS) -CHIPSET(0x674A, TURKS_674A, TURKS) -CHIPSET(0x6750, TURKS_6750, TURKS) -CHIPSET(0x6751, TURKS_6751, TURKS) -CHIPSET(0x6758, TURKS_6758, TURKS) -CHIPSET(0x6759, TURKS_6759, TURKS) -CHIPSET(0x675B, TURKS_675B, TURKS) -CHIPSET(0x675D, TURKS_675D, TURKS) -CHIPSET(0x675F, TURKS_675F, TURKS) -CHIPSET(0x6840, TURKS_6840, TURKS) -CHIPSET(0x6841, TURKS_6841, TURKS) -CHIPSET(0x6842, TURKS_6842, TURKS) -CHIPSET(0x6843, TURKS_6843, TURKS) -CHIPSET(0x6849, TURKS_6849, TURKS) -CHIPSET(0x6850, TURKS_6850, TURKS) -CHIPSET(0x6858, TURKS_6858, TURKS) -CHIPSET(0x6859, TURKS_6859, TURKS) - -CHIPSET(0x6760, CAICOS_6760, CAICOS) -CHIPSET(0x6761, CAICOS_6761, CAICOS) -CHIPSET(0x6762, CAICOS_6762, CAICOS) -CHIPSET(0x6763, CAICOS_6763, CAICOS) -CHIPSET(0x6764, CAICOS_6764, CAICOS) -CHIPSET(0x6765, CAICOS_6765, CAICOS) -CHIPSET(0x6766, CAICOS_6766, CAICOS) -CHIPSET(0x6767, CAICOS_6767, CAICOS) -CHIPSET(0x6768, CAICOS_6768, CAICOS) -CHIPSET(0x6770, CAICOS_6770, CAICOS) -CHIPSET(0x6771, CAICOS_6771, CAICOS) -CHIPSET(0x6772, CAICOS_6772, CAICOS) -CHIPSET(0x6778, CAICOS_6778, CAICOS) -CHIPSET(0x6779, CAICOS_6779, CAICOS) -CHIPSET(0x677B, CAICOS_677B, CAICOS) - -CHIPSET(0x9900, ARUBA_9900, ARUBA) -CHIPSET(0x9901, ARUBA_9901, ARUBA) -CHIPSET(0x9903, ARUBA_9903, ARUBA) -CHIPSET(0x9904, ARUBA_9904, ARUBA) -CHIPSET(0x9905, ARUBA_9905, ARUBA) -CHIPSET(0x9906, ARUBA_9906, ARUBA) -CHIPSET(0x9907, ARUBA_9907, ARUBA) -CHIPSET(0x9908, ARUBA_9908, ARUBA) -CHIPSET(0x9909, ARUBA_9909, ARUBA) -CHIPSET(0x990A, ARUBA_990A, ARUBA) -CHIPSET(0x990B, ARUBA_990B, ARUBA) -CHIPSET(0x990C, ARUBA_990C, ARUBA) -CHIPSET(0x990D, ARUBA_990D, ARUBA) -CHIPSET(0x990E, ARUBA_990E, ARUBA) -CHIPSET(0x990F, ARUBA_990F, ARUBA) -CHIPSET(0x9910, ARUBA_9910, ARUBA) -CHIPSET(0x9913, ARUBA_9913, ARUBA) -CHIPSET(0x9917, ARUBA_9917, ARUBA) -CHIPSET(0x9918, ARUBA_9918, ARUBA) -CHIPSET(0x9919, ARUBA_9919, ARUBA) -CHIPSET(0x9990, ARUBA_9990, ARUBA) -CHIPSET(0x9991, ARUBA_9991, ARUBA) -CHIPSET(0x9992, ARUBA_9992, ARUBA) -CHIPSET(0x9993, ARUBA_9993, ARUBA) -CHIPSET(0x9994, ARUBA_9994, ARUBA) -CHIPSET(0x9995, ARUBA_9995, ARUBA) -CHIPSET(0x9996, ARUBA_9996, ARUBA) -CHIPSET(0x9997, ARUBA_9997, ARUBA) -CHIPSET(0x9998, ARUBA_9998, ARUBA) -CHIPSET(0x9999, ARUBA_9999, ARUBA) -CHIPSET(0x999A, ARUBA_999A, ARUBA) -CHIPSET(0x999B, ARUBA_999B, ARUBA) -CHIPSET(0x999C, ARUBA_999C, ARUBA) -CHIPSET(0x999D, ARUBA_999D, ARUBA) -CHIPSET(0x99A0, ARUBA_99A0, ARUBA) -CHIPSET(0x99A2, ARUBA_99A2, ARUBA) -CHIPSET(0x99A4, ARUBA_99A4, ARUBA) - -CHIPSET(0x6780, TAHITI_6780, TAHITI) -CHIPSET(0x6784, TAHITI_6784, TAHITI) -CHIPSET(0x6788, TAHITI_6788, TAHITI) -CHIPSET(0x678A, TAHITI_678A, TAHITI) -CHIPSET(0x6790, TAHITI_6790, TAHITI) -CHIPSET(0x6791, TAHITI_6791, TAHITI) -CHIPSET(0x6792, TAHITI_6792, TAHITI) -CHIPSET(0x6798, TAHITI_6798, TAHITI) -CHIPSET(0x6799, TAHITI_6799, TAHITI) -CHIPSET(0x679A, TAHITI_679A, TAHITI) -CHIPSET(0x679B, TAHITI_679B, TAHITI) -CHIPSET(0x679E, TAHITI_679E, TAHITI) -CHIPSET(0x679F, TAHITI_679F, TAHITI) - -CHIPSET(0x6800, PITCAIRN_6800, PITCAIRN) -CHIPSET(0x6801, PITCAIRN_6801, PITCAIRN) -CHIPSET(0x6802, PITCAIRN_6802, PITCAIRN) -CHIPSET(0x6806, PITCAIRN_6806, PITCAIRN) -CHIPSET(0x6808, PITCAIRN_6808, PITCAIRN) -CHIPSET(0x6809, PITCAIRN_6809, PITCAIRN) -CHIPSET(0x6810, PITCAIRN_6810, PITCAIRN) -CHIPSET(0x6811, PITCAIRN_6811, PITCAIRN) -CHIPSET(0x6816, PITCAIRN_6816, PITCAIRN) -CHIPSET(0x6817, PITCAIRN_6817, PITCAIRN) -CHIPSET(0x6818, PITCAIRN_6818, PITCAIRN) -CHIPSET(0x6819, PITCAIRN_6819, PITCAIRN) -CHIPSET(0x684C, PITCAIRN_684C, PITCAIRN) - -CHIPSET(0x6820, VERDE_6820, VERDE) -CHIPSET(0x6821, VERDE_6821, VERDE) -CHIPSET(0x6822, VERDE_6822, VERDE) -CHIPSET(0x6823, VERDE_6823, VERDE) -CHIPSET(0x6824, VERDE_6824, VERDE) -CHIPSET(0x6825, VERDE_6825, VERDE) -CHIPSET(0x6826, VERDE_6826, VERDE) -CHIPSET(0x6827, VERDE_6827, VERDE) -CHIPSET(0x6828, VERDE_6828, VERDE) -CHIPSET(0x6829, VERDE_6829, VERDE) -CHIPSET(0x682A, VERDE_682A, VERDE) -CHIPSET(0x682B, VERDE_682B, VERDE) -CHIPSET(0x682C, VERDE_682C, VERDE) -CHIPSET(0x682D, VERDE_682D, VERDE) -CHIPSET(0x682F, VERDE_682F, VERDE) -CHIPSET(0x6830, VERDE_6830, VERDE) -CHIPSET(0x6831, VERDE_6831, VERDE) -CHIPSET(0x6835, VERDE_6835, VERDE) -CHIPSET(0x6837, VERDE_6837, VERDE) -CHIPSET(0x6838, VERDE_6838, VERDE) -CHIPSET(0x6839, VERDE_6839, VERDE) -CHIPSET(0x683B, VERDE_683B, VERDE) -CHIPSET(0x683D, VERDE_683D, VERDE) -CHIPSET(0x683F, VERDE_683F, VERDE) - -CHIPSET(0x6600, OLAND_6600, OLAND) -CHIPSET(0x6601, OLAND_6601, OLAND) -CHIPSET(0x6602, OLAND_6602, OLAND) -CHIPSET(0x6603, OLAND_6603, OLAND) -CHIPSET(0x6604, OLAND_6604, OLAND) -CHIPSET(0x6605, OLAND_6605, OLAND) -CHIPSET(0x6606, OLAND_6606, OLAND) -CHIPSET(0x6607, OLAND_6607, OLAND) -CHIPSET(0x6608, OLAND_6608, OLAND) -CHIPSET(0x6610, OLAND_6610, OLAND) -CHIPSET(0x6611, OLAND_6611, OLAND) -CHIPSET(0x6613, OLAND_6613, OLAND) -CHIPSET(0x6617, OLAND_6617, OLAND) -CHIPSET(0x6620, OLAND_6620, OLAND) -CHIPSET(0x6621, OLAND_6621, OLAND) -CHIPSET(0x6623, OLAND_6623, OLAND) -CHIPSET(0x6631, OLAND_6631, OLAND) - -CHIPSET(0x6660, HAINAN_6660, HAINAN) -CHIPSET(0x6663, HAINAN_6663, HAINAN) -CHIPSET(0x6664, HAINAN_6664, HAINAN) -CHIPSET(0x6665, HAINAN_6665, HAINAN) -CHIPSET(0x6667, HAINAN_6667, HAINAN) -CHIPSET(0x666F, HAINAN_666F, HAINAN) - -CHIPSET(0x6640, BONAIRE_6640, BONAIRE) -CHIPSET(0x6641, BONAIRE_6641, BONAIRE) -CHIPSET(0x6646, BONAIRE_6646, BONAIRE) -CHIPSET(0x6647, BONAIRE_6647, BONAIRE) -CHIPSET(0x6649, BONAIRE_6649, BONAIRE) -CHIPSET(0x6650, BONAIRE_6650, BONAIRE) -CHIPSET(0x6651, BONAIRE_6651, BONAIRE) -CHIPSET(0x6658, BONAIRE_6658, BONAIRE) -CHIPSET(0x665C, BONAIRE_665C, BONAIRE) -CHIPSET(0x665D, BONAIRE_665D, BONAIRE) -CHIPSET(0x665F, BONAIRE_665F, BONAIRE) - -CHIPSET(0x9830, KABINI_9830, KABINI) -CHIPSET(0x9831, KABINI_9831, KABINI) -CHIPSET(0x9832, KABINI_9832, KABINI) -CHIPSET(0x9833, KABINI_9833, KABINI) -CHIPSET(0x9834, KABINI_9834, KABINI) -CHIPSET(0x9835, KABINI_9835, KABINI) -CHIPSET(0x9836, KABINI_9836, KABINI) -CHIPSET(0x9837, KABINI_9837, KABINI) -CHIPSET(0x9838, KABINI_9838, KABINI) -CHIPSET(0x9839, KABINI_9839, KABINI) -CHIPSET(0x983A, KABINI_983A, KABINI) -CHIPSET(0x983B, KABINI_983B, KABINI) -CHIPSET(0x983C, KABINI_983C, KABINI) -CHIPSET(0x983D, KABINI_983D, KABINI) -CHIPSET(0x983E, KABINI_983E, KABINI) -CHIPSET(0x983F, KABINI_983F, KABINI) - -CHIPSET(0x9850, MULLINS_9850, MULLINS) -CHIPSET(0x9851, MULLINS_9851, MULLINS) -CHIPSET(0x9852, MULLINS_9852, MULLINS) -CHIPSET(0x9853, MULLINS_9853, MULLINS) -CHIPSET(0x9854, MULLINS_9854, MULLINS) -CHIPSET(0x9855, MULLINS_9855, MULLINS) -CHIPSET(0x9856, MULLINS_9856, MULLINS) -CHIPSET(0x9857, MULLINS_9857, MULLINS) -CHIPSET(0x9858, MULLINS_9858, MULLINS) -CHIPSET(0x9859, MULLINS_9859, MULLINS) -CHIPSET(0x985A, MULLINS_985A, MULLINS) -CHIPSET(0x985B, MULLINS_985B, MULLINS) -CHIPSET(0x985C, MULLINS_985C, MULLINS) -CHIPSET(0x985D, MULLINS_985D, MULLINS) -CHIPSET(0x985E, MULLINS_985E, MULLINS) -CHIPSET(0x985F, MULLINS_985F, MULLINS) - -CHIPSET(0x1304, KAVERI_1304, KAVERI) -CHIPSET(0x1305, KAVERI_1305, KAVERI) -CHIPSET(0x1306, KAVERI_1306, KAVERI) -CHIPSET(0x1307, KAVERI_1307, KAVERI) -CHIPSET(0x1309, KAVERI_1309, KAVERI) -CHIPSET(0x130A, KAVERI_130A, KAVERI) -CHIPSET(0x130B, KAVERI_130B, KAVERI) -CHIPSET(0x130C, KAVERI_130C, KAVERI) -CHIPSET(0x130D, KAVERI_130D, KAVERI) -CHIPSET(0x130E, KAVERI_130E, KAVERI) -CHIPSET(0x130F, KAVERI_130F, KAVERI) -CHIPSET(0x1310, KAVERI_1310, KAVERI) -CHIPSET(0x1311, KAVERI_1311, KAVERI) -CHIPSET(0x1312, KAVERI_1312, KAVERI) -CHIPSET(0x1313, KAVERI_1313, KAVERI) -CHIPSET(0x1315, KAVERI_1315, KAVERI) -CHIPSET(0x1316, KAVERI_1316, KAVERI) -CHIPSET(0x1317, KAVERI_1317, KAVERI) -CHIPSET(0x1318, KAVERI_1318, KAVERI) -CHIPSET(0x131B, KAVERI_131B, KAVERI) -CHIPSET(0x131C, KAVERI_131C, KAVERI) -CHIPSET(0x131D, KAVERI_131D, KAVERI) - -CHIPSET(0x67A0, HAWAII_67A0, HAWAII) -CHIPSET(0x67A1, HAWAII_67A1, HAWAII) -CHIPSET(0x67A2, HAWAII_67A2, HAWAII) -CHIPSET(0x67A8, HAWAII_67A8, HAWAII) -CHIPSET(0x67A9, HAWAII_67A9, HAWAII) -CHIPSET(0x67AA, HAWAII_67AA, HAWAII) -CHIPSET(0x67B0, HAWAII_67B0, HAWAII) -CHIPSET(0x67B1, HAWAII_67B1, HAWAII) -CHIPSET(0x67B8, HAWAII_67B8, HAWAII) -CHIPSET(0x67B9, HAWAII_67B9, HAWAII) -CHIPSET(0x67BA, HAWAII_67BA, HAWAII) -CHIPSET(0x67BE, HAWAII_67BE, HAWAII) diff --git a/prebuilts/x86/include/libdrm/radeon_bo.h b/prebuilts/x86/include/libdrm/radeon_bo.h deleted file mode 100644 index 6e20c6c..0000000 --- a/prebuilts/x86/include/libdrm/radeon_bo.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Jérôme Glisse - */ -#ifndef RADEON_BO_H -#define RADEON_BO_H - -#include -#include - -/* bo object */ -#define RADEON_BO_FLAGS_MACRO_TILE 1 -#define RADEON_BO_FLAGS_MICRO_TILE 2 -#define RADEON_BO_FLAGS_MICRO_TILE_SQUARE 0x20 - -struct radeon_bo_manager; -struct radeon_cs; - -struct radeon_bo { - void *ptr; - uint32_t flags; - uint32_t handle; - uint32_t size; -}; - - -void radeon_bo_debug(struct radeon_bo *bo, const char *op); - -struct radeon_bo *radeon_bo_open(struct radeon_bo_manager *bom, - uint32_t handle, - uint32_t size, - uint32_t alignment, - uint32_t domains, - uint32_t flags); - -void radeon_bo_ref(struct radeon_bo *bo); -struct radeon_bo *radeon_bo_unref(struct radeon_bo *bo); -int radeon_bo_map(struct radeon_bo *bo, int write); -int radeon_bo_unmap(struct radeon_bo *bo); -int radeon_bo_wait(struct radeon_bo *bo); -int radeon_bo_is_busy(struct radeon_bo *bo, uint32_t *domain); -int radeon_bo_set_tiling(struct radeon_bo *bo, uint32_t tiling_flags, uint32_t pitch); -int radeon_bo_get_tiling(struct radeon_bo *bo, uint32_t *tiling_flags, uint32_t *pitch); -int radeon_bo_is_static(struct radeon_bo *bo); -int radeon_bo_is_referenced_by_cs(struct radeon_bo *bo, struct radeon_cs *cs); -uint32_t radeon_bo_get_handle(struct radeon_bo *bo); -uint32_t radeon_bo_get_src_domain(struct radeon_bo *bo); -#endif diff --git a/prebuilts/x86/include/libdrm/radeon_bo_gem.h b/prebuilts/x86/include/libdrm/radeon_bo_gem.h deleted file mode 100644 index 08965f3..0000000 --- a/prebuilts/x86/include/libdrm/radeon_bo_gem.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2008 Dave Airlie - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Dave Airlie - * Jérôme Glisse - */ -#ifndef RADEON_BO_GEM_H -#define RADEON_BO_GEM_H - -#include "radeon_bo.h" - -struct radeon_bo_manager *radeon_bo_manager_gem_ctor(int fd); -void radeon_bo_manager_gem_dtor(struct radeon_bo_manager *bom); - -uint32_t radeon_gem_name_bo(struct radeon_bo *bo); -void *radeon_gem_get_reloc_in_cs(struct radeon_bo *bo); -int radeon_gem_set_domain(struct radeon_bo *bo, uint32_t read_domains, uint32_t write_domain); -int radeon_gem_get_kernel_name(struct radeon_bo *bo, uint32_t *name); -int radeon_gem_prime_share_bo(struct radeon_bo *bo, int *handle); -struct radeon_bo *radeon_gem_bo_open_prime(struct radeon_bo_manager *bom, - int fd_handle, - uint32_t size); -#endif diff --git a/prebuilts/x86/include/libdrm/radeon_bo_int.h b/prebuilts/x86/include/libdrm/radeon_bo_int.h deleted file mode 100644 index de981b0..0000000 --- a/prebuilts/x86/include/libdrm/radeon_bo_int.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef RADEON_BO_INT -#define RADEON_BO_INT - -struct radeon_bo_manager { - const struct radeon_bo_funcs *funcs; - int fd; -}; - -struct radeon_bo_int { - void *ptr; - uint32_t flags; - uint32_t handle; - uint32_t size; - /* private members */ - uint32_t alignment; - uint32_t domains; - unsigned cref; - struct radeon_bo_manager *bom; - uint32_t space_accounted; - uint32_t referenced_in_cs; -}; - -/* bo functions */ -struct radeon_bo_funcs { - struct radeon_bo *(*bo_open)(struct radeon_bo_manager *bom, - uint32_t handle, - uint32_t size, - uint32_t alignment, - uint32_t domains, - uint32_t flags); - void (*bo_ref)(struct radeon_bo_int *bo); - struct radeon_bo *(*bo_unref)(struct radeon_bo_int *bo); - int (*bo_map)(struct radeon_bo_int *bo, int write); - int (*bo_unmap)(struct radeon_bo_int *bo); - int (*bo_wait)(struct radeon_bo_int *bo); - int (*bo_is_static)(struct radeon_bo_int *bo); - int (*bo_set_tiling)(struct radeon_bo_int *bo, uint32_t tiling_flags, - uint32_t pitch); - int (*bo_get_tiling)(struct radeon_bo_int *bo, uint32_t *tiling_flags, - uint32_t *pitch); - int (*bo_is_busy)(struct radeon_bo_int *bo, uint32_t *domain); - int (*bo_is_referenced_by_cs)(struct radeon_bo_int *bo, struct radeon_cs *cs); -}; - -#endif diff --git a/prebuilts/x86/include/libdrm/radeon_cs.h b/prebuilts/x86/include/libdrm/radeon_cs.h deleted file mode 100644 index f68a624..0000000 --- a/prebuilts/x86/include/libdrm/radeon_cs.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright © 2008 Nicolai Haehnle - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Aapo Tahkola - * Nicolai Haehnle - * Jérôme Glisse - */ -#ifndef RADEON_CS_H -#define RADEON_CS_H - -#include -#include -#include "drm.h" -#include "radeon_drm.h" -#include "radeon_bo.h" - -struct radeon_cs_reloc { - struct radeon_bo *bo; - uint32_t read_domain; - uint32_t write_domain; - uint32_t flags; -}; - - -#define RADEON_CS_SPACE_OK 0 -#define RADEON_CS_SPACE_OP_TO_BIG 1 -#define RADEON_CS_SPACE_FLUSH 2 - -struct radeon_cs { - uint32_t *packets; - unsigned cdw; - unsigned ndw; - unsigned section_ndw; - unsigned section_cdw; -}; - -#define MAX_SPACE_BOS (32) - -struct radeon_cs_manager; - -extern struct radeon_cs *radeon_cs_create(struct radeon_cs_manager *csm, - uint32_t ndw); - -extern int radeon_cs_begin(struct radeon_cs *cs, - uint32_t ndw, - const char *file, - const char *func, int line); -extern int radeon_cs_end(struct radeon_cs *cs, - const char *file, - const char *func, - int line); -extern int radeon_cs_emit(struct radeon_cs *cs); -extern int radeon_cs_destroy(struct radeon_cs *cs); -extern int radeon_cs_erase(struct radeon_cs *cs); -extern int radeon_cs_need_flush(struct radeon_cs *cs); -extern void radeon_cs_print(struct radeon_cs *cs, FILE *file); -extern void radeon_cs_set_limit(struct radeon_cs *cs, uint32_t domain, uint32_t limit); -extern void radeon_cs_space_set_flush(struct radeon_cs *cs, void (*fn)(void *), void *data); -extern int radeon_cs_write_reloc(struct radeon_cs *cs, - struct radeon_bo *bo, - uint32_t read_domain, - uint32_t write_domain, - uint32_t flags); -extern uint32_t radeon_cs_get_id(struct radeon_cs *cs); -/* - * add a persistent BO to the list - * a persistent BO is one that will be referenced across flushes, - * i.e. colorbuffer, textures etc. - * They get reset when a new "operation" happens, where an operation - * is a state emission with a color/textures etc followed by a bunch of vertices. - */ -void radeon_cs_space_add_persistent_bo(struct radeon_cs *cs, - struct radeon_bo *bo, - uint32_t read_domains, - uint32_t write_domain); - -/* reset the persistent BO list */ -void radeon_cs_space_reset_bos(struct radeon_cs *cs); - -/* do a space check with the current persistent BO list */ -int radeon_cs_space_check(struct radeon_cs *cs); - -/* do a space check with the current persistent BO list and a temporary BO - * a temporary BO is like a DMA buffer, which gets flushed with the - * command buffer */ -int radeon_cs_space_check_with_bo(struct radeon_cs *cs, - struct radeon_bo *bo, - uint32_t read_domains, - uint32_t write_domain); - -static inline void radeon_cs_write_dword(struct radeon_cs *cs, uint32_t dword) -{ - cs->packets[cs->cdw++] = dword; - if (cs->section_ndw) { - cs->section_cdw++; - } -} - -static inline void radeon_cs_write_qword(struct radeon_cs *cs, uint64_t qword) -{ - memcpy(cs->packets + cs->cdw, &qword, sizeof(uint64_t)); - cs->cdw += 2; - if (cs->section_ndw) { - cs->section_cdw += 2; - } -} - -static inline void radeon_cs_write_table(struct radeon_cs *cs, - const void *data, uint32_t size) -{ - memcpy(cs->packets + cs->cdw, data, size * 4); - cs->cdw += size; - if (cs->section_ndw) { - cs->section_cdw += size; - } -} -#endif diff --git a/prebuilts/x86/include/libdrm/radeon_cs_gem.h b/prebuilts/x86/include/libdrm/radeon_cs_gem.h deleted file mode 100644 index 5dea38a..0000000 --- a/prebuilts/x86/include/libdrm/radeon_cs_gem.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright © 2008 Nicolai Haehnle - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Aapo Tahkola - * Nicolai Haehnle - * Jérôme Glisse - */ -#ifndef RADEON_CS_GEM_H -#define RADEON_CS_GEM_H - -#include "radeon_cs.h" - -struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd); -void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm); - -#endif diff --git a/prebuilts/x86/include/libdrm/radeon_cs_int.h b/prebuilts/x86/include/libdrm/radeon_cs_int.h deleted file mode 100644 index d906ad4..0000000 --- a/prebuilts/x86/include/libdrm/radeon_cs_int.h +++ /dev/null @@ -1,67 +0,0 @@ - -#ifndef _RADEON_CS_INT_H_ -#define _RADEON_CS_INT_H_ - -struct radeon_cs_space_check { - struct radeon_bo_int *bo; - uint32_t read_domains; - uint32_t write_domain; - uint32_t new_accounted; -}; - -struct radeon_cs_int { - /* keep first two in same place */ - uint32_t *packets; - unsigned cdw; - unsigned ndw; - unsigned section_ndw; - unsigned section_cdw; - /* private members */ - struct radeon_cs_manager *csm; - void *relocs; - unsigned crelocs; - unsigned relocs_total_size; - const char *section_file; - const char *section_func; - int section_line; - struct radeon_cs_space_check bos[MAX_SPACE_BOS]; - int bo_count; - void (*space_flush_fn)(void *); - void *space_flush_data; - uint32_t id; -}; - -/* cs functions */ -struct radeon_cs_funcs { - struct radeon_cs_int *(*cs_create)(struct radeon_cs_manager *csm, - uint32_t ndw); - int (*cs_write_reloc)(struct radeon_cs_int *cs, - struct radeon_bo *bo, - uint32_t read_domain, - uint32_t write_domain, - uint32_t flags); - int (*cs_begin)(struct radeon_cs_int *cs, - uint32_t ndw, - const char *file, - const char *func, - int line); - int (*cs_end)(struct radeon_cs_int *cs, - const char *file, const char *func, - int line); - - - int (*cs_emit)(struct radeon_cs_int *cs); - int (*cs_destroy)(struct radeon_cs_int *cs); - int (*cs_erase)(struct radeon_cs_int *cs); - int (*cs_need_flush)(struct radeon_cs_int *cs); - void (*cs_print)(struct radeon_cs_int *cs, FILE *file); -}; - -struct radeon_cs_manager { - const struct radeon_cs_funcs *funcs; - int fd; - int32_t vram_limit, gart_limit; - int32_t vram_write_used, gart_write_used; - int32_t read_used; -}; -#endif diff --git a/prebuilts/x86/include/libdrm/radeon_drm.h b/prebuilts/x86/include/libdrm/radeon_drm.h deleted file mode 100644 index a1e385d..0000000 --- a/prebuilts/x86/include/libdrm/radeon_drm.h +++ /dev/null @@ -1,1079 +0,0 @@ -/* radeon_drm.h -- Public header for the radeon driver -*- linux-c -*- - * - * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Fremont, California. - * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Kevin E. Martin - * Gareth Hughes - * Keith Whitwell - */ - -#ifndef __RADEON_DRM_H__ -#define __RADEON_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the X server file (radeon_sarea.h) - */ -#ifndef __RADEON_SAREA_DEFINES__ -#define __RADEON_SAREA_DEFINES__ - -/* Old style state flags, required for sarea interface (1.1 and 1.2 - * clears) and 1.2 drm_vertex2 ioctl. - */ -#define RADEON_UPLOAD_CONTEXT 0x00000001 -#define RADEON_UPLOAD_VERTFMT 0x00000002 -#define RADEON_UPLOAD_LINE 0x00000004 -#define RADEON_UPLOAD_BUMPMAP 0x00000008 -#define RADEON_UPLOAD_MASKS 0x00000010 -#define RADEON_UPLOAD_VIEWPORT 0x00000020 -#define RADEON_UPLOAD_SETUP 0x00000040 -#define RADEON_UPLOAD_TCL 0x00000080 -#define RADEON_UPLOAD_MISC 0x00000100 -#define RADEON_UPLOAD_TEX0 0x00000200 -#define RADEON_UPLOAD_TEX1 0x00000400 -#define RADEON_UPLOAD_TEX2 0x00000800 -#define RADEON_UPLOAD_TEX0IMAGES 0x00001000 -#define RADEON_UPLOAD_TEX1IMAGES 0x00002000 -#define RADEON_UPLOAD_TEX2IMAGES 0x00004000 -#define RADEON_UPLOAD_CLIPRECTS 0x00008000 /* handled client-side */ -#define RADEON_REQUIRE_QUIESCENCE 0x00010000 -#define RADEON_UPLOAD_ZBIAS 0x00020000 /* version 1.2 and newer */ -#define RADEON_UPLOAD_ALL 0x003effff -#define RADEON_UPLOAD_CONTEXT_ALL 0x003e01ff - -/* New style per-packet identifiers for use in cmd_buffer ioctl with - * the RADEON_EMIT_PACKET command. Comments relate new packets to old - * state bits and the packet size: - */ -#define RADEON_EMIT_PP_MISC 0 /* context/7 */ -#define RADEON_EMIT_PP_CNTL 1 /* context/3 */ -#define RADEON_EMIT_RB3D_COLORPITCH 2 /* context/1 */ -#define RADEON_EMIT_RE_LINE_PATTERN 3 /* line/2 */ -#define RADEON_EMIT_SE_LINE_WIDTH 4 /* line/1 */ -#define RADEON_EMIT_PP_LUM_MATRIX 5 /* bumpmap/1 */ -#define RADEON_EMIT_PP_ROT_MATRIX_0 6 /* bumpmap/2 */ -#define RADEON_EMIT_RB3D_STENCILREFMASK 7 /* masks/3 */ -#define RADEON_EMIT_SE_VPORT_XSCALE 8 /* viewport/6 */ -#define RADEON_EMIT_SE_CNTL 9 /* setup/2 */ -#define RADEON_EMIT_SE_CNTL_STATUS 10 /* setup/1 */ -#define RADEON_EMIT_RE_MISC 11 /* misc/1 */ -#define RADEON_EMIT_PP_TXFILTER_0 12 /* tex0/6 */ -#define RADEON_EMIT_PP_BORDER_COLOR_0 13 /* tex0/1 */ -#define RADEON_EMIT_PP_TXFILTER_1 14 /* tex1/6 */ -#define RADEON_EMIT_PP_BORDER_COLOR_1 15 /* tex1/1 */ -#define RADEON_EMIT_PP_TXFILTER_2 16 /* tex2/6 */ -#define RADEON_EMIT_PP_BORDER_COLOR_2 17 /* tex2/1 */ -#define RADEON_EMIT_SE_ZBIAS_FACTOR 18 /* zbias/2 */ -#define RADEON_EMIT_SE_TCL_OUTPUT_VTX_FMT 19 /* tcl/11 */ -#define RADEON_EMIT_SE_TCL_MATERIAL_EMMISSIVE_RED 20 /* material/17 */ -#define R200_EMIT_PP_TXCBLEND_0 21 /* tex0/4 */ -#define R200_EMIT_PP_TXCBLEND_1 22 /* tex1/4 */ -#define R200_EMIT_PP_TXCBLEND_2 23 /* tex2/4 */ -#define R200_EMIT_PP_TXCBLEND_3 24 /* tex3/4 */ -#define R200_EMIT_PP_TXCBLEND_4 25 /* tex4/4 */ -#define R200_EMIT_PP_TXCBLEND_5 26 /* tex5/4 */ -#define R200_EMIT_PP_TXCBLEND_6 27 /* /4 */ -#define R200_EMIT_PP_TXCBLEND_7 28 /* /4 */ -#define R200_EMIT_TCL_LIGHT_MODEL_CTL_0 29 /* tcl/7 */ -#define R200_EMIT_TFACTOR_0 30 /* tf/7 */ -#define R200_EMIT_VTX_FMT_0 31 /* vtx/5 */ -#define R200_EMIT_VAP_CTL 32 /* vap/1 */ -#define R200_EMIT_MATRIX_SELECT_0 33 /* msl/5 */ -#define R200_EMIT_TEX_PROC_CTL_2 34 /* tcg/5 */ -#define R200_EMIT_TCL_UCP_VERT_BLEND_CTL 35 /* tcl/1 */ -#define R200_EMIT_PP_TXFILTER_0 36 /* tex0/6 */ -#define R200_EMIT_PP_TXFILTER_1 37 /* tex1/6 */ -#define R200_EMIT_PP_TXFILTER_2 38 /* tex2/6 */ -#define R200_EMIT_PP_TXFILTER_3 39 /* tex3/6 */ -#define R200_EMIT_PP_TXFILTER_4 40 /* tex4/6 */ -#define R200_EMIT_PP_TXFILTER_5 41 /* tex5/6 */ -#define R200_EMIT_PP_TXOFFSET_0 42 /* tex0/1 */ -#define R200_EMIT_PP_TXOFFSET_1 43 /* tex1/1 */ -#define R200_EMIT_PP_TXOFFSET_2 44 /* tex2/1 */ -#define R200_EMIT_PP_TXOFFSET_3 45 /* tex3/1 */ -#define R200_EMIT_PP_TXOFFSET_4 46 /* tex4/1 */ -#define R200_EMIT_PP_TXOFFSET_5 47 /* tex5/1 */ -#define R200_EMIT_VTE_CNTL 48 /* vte/1 */ -#define R200_EMIT_OUTPUT_VTX_COMP_SEL 49 /* vtx/1 */ -#define R200_EMIT_PP_TAM_DEBUG3 50 /* tam/1 */ -#define R200_EMIT_PP_CNTL_X 51 /* cst/1 */ -#define R200_EMIT_RB3D_DEPTHXY_OFFSET 52 /* cst/1 */ -#define R200_EMIT_RE_AUX_SCISSOR_CNTL 53 /* cst/1 */ -#define R200_EMIT_RE_SCISSOR_TL_0 54 /* cst/2 */ -#define R200_EMIT_RE_SCISSOR_TL_1 55 /* cst/2 */ -#define R200_EMIT_RE_SCISSOR_TL_2 56 /* cst/2 */ -#define R200_EMIT_SE_VAP_CNTL_STATUS 57 /* cst/1 */ -#define R200_EMIT_SE_VTX_STATE_CNTL 58 /* cst/1 */ -#define R200_EMIT_RE_POINTSIZE 59 /* cst/1 */ -#define R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0 60 /* cst/4 */ -#define R200_EMIT_PP_CUBIC_FACES_0 61 -#define R200_EMIT_PP_CUBIC_OFFSETS_0 62 -#define R200_EMIT_PP_CUBIC_FACES_1 63 -#define R200_EMIT_PP_CUBIC_OFFSETS_1 64 -#define R200_EMIT_PP_CUBIC_FACES_2 65 -#define R200_EMIT_PP_CUBIC_OFFSETS_2 66 -#define R200_EMIT_PP_CUBIC_FACES_3 67 -#define R200_EMIT_PP_CUBIC_OFFSETS_3 68 -#define R200_EMIT_PP_CUBIC_FACES_4 69 -#define R200_EMIT_PP_CUBIC_OFFSETS_4 70 -#define R200_EMIT_PP_CUBIC_FACES_5 71 -#define R200_EMIT_PP_CUBIC_OFFSETS_5 72 -#define RADEON_EMIT_PP_TEX_SIZE_0 73 -#define RADEON_EMIT_PP_TEX_SIZE_1 74 -#define RADEON_EMIT_PP_TEX_SIZE_2 75 -#define R200_EMIT_RB3D_BLENDCOLOR 76 -#define R200_EMIT_TCL_POINT_SPRITE_CNTL 77 -#define RADEON_EMIT_PP_CUBIC_FACES_0 78 -#define RADEON_EMIT_PP_CUBIC_OFFSETS_T0 79 -#define RADEON_EMIT_PP_CUBIC_FACES_1 80 -#define RADEON_EMIT_PP_CUBIC_OFFSETS_T1 81 -#define RADEON_EMIT_PP_CUBIC_FACES_2 82 -#define RADEON_EMIT_PP_CUBIC_OFFSETS_T2 83 -#define R200_EMIT_PP_TRI_PERF_CNTL 84 -#define R200_EMIT_PP_AFS_0 85 -#define R200_EMIT_PP_AFS_1 86 -#define R200_EMIT_ATF_TFACTOR 87 -#define R200_EMIT_PP_TXCTLALL_0 88 -#define R200_EMIT_PP_TXCTLALL_1 89 -#define R200_EMIT_PP_TXCTLALL_2 90 -#define R200_EMIT_PP_TXCTLALL_3 91 -#define R200_EMIT_PP_TXCTLALL_4 92 -#define R200_EMIT_PP_TXCTLALL_5 93 -#define R200_EMIT_VAP_PVS_CNTL 94 -#define RADEON_MAX_STATE_PACKETS 95 - -/* Commands understood by cmd_buffer ioctl. More can be added but - * obviously these can't be removed or changed: - */ -#define RADEON_CMD_PACKET 1 /* emit one of the register packets above */ -#define RADEON_CMD_SCALARS 2 /* emit scalar data */ -#define RADEON_CMD_VECTORS 3 /* emit vector data */ -#define RADEON_CMD_DMA_DISCARD 4 /* discard current dma buf */ -#define RADEON_CMD_PACKET3 5 /* emit hw packet */ -#define RADEON_CMD_PACKET3_CLIP 6 /* emit hw packet wrapped in cliprects */ -#define RADEON_CMD_SCALARS2 7 /* r200 stopgap */ -#define RADEON_CMD_WAIT 8 /* emit hw wait commands -- note: - * doesn't make the cpu wait, just - * the graphics hardware */ -#define RADEON_CMD_VECLINEAR 9 /* another r200 stopgap */ - -typedef union { - int i; - struct { - unsigned char cmd_type, pad0, pad1, pad2; - } header; - struct { - unsigned char cmd_type, packet_id, pad0, pad1; - } packet; - struct { - unsigned char cmd_type, offset, stride, count; - } scalars; - struct { - unsigned char cmd_type, offset, stride, count; - } vectors; - struct { - unsigned char cmd_type, addr_lo, addr_hi, count; - } veclinear; - struct { - unsigned char cmd_type, buf_idx, pad0, pad1; - } dma; - struct { - unsigned char cmd_type, flags, pad0, pad1; - } wait; -} drm_radeon_cmd_header_t; - -#define RADEON_WAIT_2D 0x1 -#define RADEON_WAIT_3D 0x2 - -/* Allowed parameters for R300_CMD_PACKET3 - */ -#define R300_CMD_PACKET3_CLEAR 0 -#define R300_CMD_PACKET3_RAW 1 - -/* Commands understood by cmd_buffer ioctl for R300. - * The interface has not been stabilized, so some of these may be removed - * and eventually reordered before stabilization. - */ -#define R300_CMD_PACKET0 1 -#define R300_CMD_VPU 2 /* emit vertex program upload */ -#define R300_CMD_PACKET3 3 /* emit a packet3 */ -#define R300_CMD_END3D 4 /* emit sequence ending 3d rendering */ -#define R300_CMD_CP_DELAY 5 -#define R300_CMD_DMA_DISCARD 6 -#define R300_CMD_WAIT 7 -# define R300_WAIT_2D 0x1 -# define R300_WAIT_3D 0x2 -/* these two defines are DOING IT WRONG - however - * we have userspace which relies on using these. - * The wait interface is backwards compat new - * code should use the NEW_WAIT defines below - * THESE ARE NOT BIT FIELDS - */ -# define R300_WAIT_2D_CLEAN 0x3 -# define R300_WAIT_3D_CLEAN 0x4 - -# define R300_NEW_WAIT_2D_3D 0x3 -# define R300_NEW_WAIT_2D_2D_CLEAN 0x4 -# define R300_NEW_WAIT_3D_3D_CLEAN 0x6 -# define R300_NEW_WAIT_2D_2D_CLEAN_3D_3D_CLEAN 0x8 - -#define R300_CMD_SCRATCH 8 -#define R300_CMD_R500FP 9 - -typedef union { - unsigned int u; - struct { - unsigned char cmd_type, pad0, pad1, pad2; - } header; - struct { - unsigned char cmd_type, count, reglo, reghi; - } packet0; - struct { - unsigned char cmd_type, count, adrlo, adrhi; - } vpu; - struct { - unsigned char cmd_type, packet, pad0, pad1; - } packet3; - struct { - unsigned char cmd_type, packet; - unsigned short count; /* amount of packet2 to emit */ - } delay; - struct { - unsigned char cmd_type, buf_idx, pad0, pad1; - } dma; - struct { - unsigned char cmd_type, flags, pad0, pad1; - } wait; - struct { - unsigned char cmd_type, reg, n_bufs, flags; - } scratch; - struct { - unsigned char cmd_type, count, adrlo, adrhi_flags; - } r500fp; -} drm_r300_cmd_header_t; - -#define RADEON_FRONT 0x1 -#define RADEON_BACK 0x2 -#define RADEON_DEPTH 0x4 -#define RADEON_STENCIL 0x8 -#define RADEON_CLEAR_FASTZ 0x80000000 -#define RADEON_USE_HIERZ 0x40000000 -#define RADEON_USE_COMP_ZBUF 0x20000000 - -#define R500FP_CONSTANT_TYPE (1 << 1) -#define R500FP_CONSTANT_CLAMP (1 << 2) - -/* Primitive types - */ -#define RADEON_POINTS 0x1 -#define RADEON_LINES 0x2 -#define RADEON_LINE_STRIP 0x3 -#define RADEON_TRIANGLES 0x4 -#define RADEON_TRIANGLE_FAN 0x5 -#define RADEON_TRIANGLE_STRIP 0x6 - -/* Vertex/indirect buffer size - */ -#define RADEON_BUFFER_SIZE 65536 - -/* Byte offsets for indirect buffer data - */ -#define RADEON_INDEX_PRIM_OFFSET 20 - -#define RADEON_SCRATCH_REG_OFFSET 32 - -#define R600_SCRATCH_REG_OFFSET 256 - -#define RADEON_NR_SAREA_CLIPRECTS 12 - -/* There are 2 heaps (local/GART). Each region within a heap is a - * minimum of 64k, and there are at most 64 of them per heap. - */ -#define RADEON_LOCAL_TEX_HEAP 0 -#define RADEON_GART_TEX_HEAP 1 -#define RADEON_NR_TEX_HEAPS 2 -#define RADEON_NR_TEX_REGIONS 64 -#define RADEON_LOG_TEX_GRANULARITY 16 - -#define RADEON_MAX_TEXTURE_LEVELS 12 -#define RADEON_MAX_TEXTURE_UNITS 3 - -#define RADEON_MAX_SURFACES 8 - -/* Blits have strict offset rules. All blit offset must be aligned on - * a 1K-byte boundary. - */ -#define RADEON_OFFSET_SHIFT 10 -#define RADEON_OFFSET_ALIGN (1 << RADEON_OFFSET_SHIFT) -#define RADEON_OFFSET_MASK (RADEON_OFFSET_ALIGN - 1) - -#endif /* __RADEON_SAREA_DEFINES__ */ - -typedef struct { - unsigned int red; - unsigned int green; - unsigned int blue; - unsigned int alpha; -} radeon_color_regs_t; - -typedef struct { - /* Context state */ - unsigned int pp_misc; /* 0x1c14 */ - unsigned int pp_fog_color; - unsigned int re_solid_color; - unsigned int rb3d_blendcntl; - unsigned int rb3d_depthoffset; - unsigned int rb3d_depthpitch; - unsigned int rb3d_zstencilcntl; - - unsigned int pp_cntl; /* 0x1c38 */ - unsigned int rb3d_cntl; - unsigned int rb3d_coloroffset; - unsigned int re_width_height; - unsigned int rb3d_colorpitch; - unsigned int se_cntl; - - /* Vertex format state */ - unsigned int se_coord_fmt; /* 0x1c50 */ - - /* Line state */ - unsigned int re_line_pattern; /* 0x1cd0 */ - unsigned int re_line_state; - - unsigned int se_line_width; /* 0x1db8 */ - - /* Bumpmap state */ - unsigned int pp_lum_matrix; /* 0x1d00 */ - - unsigned int pp_rot_matrix_0; /* 0x1d58 */ - unsigned int pp_rot_matrix_1; - - /* Mask state */ - unsigned int rb3d_stencilrefmask; /* 0x1d7c */ - unsigned int rb3d_ropcntl; - unsigned int rb3d_planemask; - - /* Viewport state */ - unsigned int se_vport_xscale; /* 0x1d98 */ - unsigned int se_vport_xoffset; - unsigned int se_vport_yscale; - unsigned int se_vport_yoffset; - unsigned int se_vport_zscale; - unsigned int se_vport_zoffset; - - /* Setup state */ - unsigned int se_cntl_status; /* 0x2140 */ - - /* Misc state */ - unsigned int re_top_left; /* 0x26c0 */ - unsigned int re_misc; -} drm_radeon_context_regs_t; - -typedef struct { - /* Zbias state */ - unsigned int se_zbias_factor; /* 0x1dac */ - unsigned int se_zbias_constant; -} drm_radeon_context2_regs_t; - -/* Setup registers for each texture unit - */ -typedef struct { - unsigned int pp_txfilter; - unsigned int pp_txformat; - unsigned int pp_txoffset; - unsigned int pp_txcblend; - unsigned int pp_txablend; - unsigned int pp_tfactor; - unsigned int pp_border_color; -} drm_radeon_texture_regs_t; - -typedef struct { - unsigned int start; - unsigned int finish; - unsigned int prim:8; - unsigned int stateidx:8; - unsigned int numverts:16; /* overloaded as offset/64 for elt prims */ - unsigned int vc_format; /* vertex format */ -} drm_radeon_prim_t; - -typedef struct { - drm_radeon_context_regs_t context; - drm_radeon_texture_regs_t tex[RADEON_MAX_TEXTURE_UNITS]; - drm_radeon_context2_regs_t context2; - unsigned int dirty; -} drm_radeon_state_t; - -typedef struct { - /* The channel for communication of state information to the - * kernel on firing a vertex buffer with either of the - * obsoleted vertex/index ioctls. - */ - drm_radeon_context_regs_t context_state; - drm_radeon_texture_regs_t tex_state[RADEON_MAX_TEXTURE_UNITS]; - unsigned int dirty; - unsigned int vertsize; - unsigned int vc_format; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[RADEON_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Counters for client-side throttling of rendering clients. - */ - unsigned int last_frame; - unsigned int last_dispatch; - unsigned int last_clear; - - struct drm_tex_region tex_list[RADEON_NR_TEX_HEAPS][RADEON_NR_TEX_REGIONS + - 1]; - unsigned int tex_age[RADEON_NR_TEX_HEAPS]; - int ctx_owner; - int pfState; /* number of 3d windows (0,1,2ormore) */ - int pfCurrentPage; /* which buffer is being displayed? */ - int crtc2_base; /* CRTC2 frame offset */ - int tiling_enabled; /* set by drm, read by 2d + 3d clients */ -} drm_radeon_sarea_t; - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (xf86drmRadeon.h) - * - * KW: actually it's illegal to change any of this (backwards compatibility). - */ - -/* Radeon specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ -#define DRM_RADEON_CP_INIT 0x00 -#define DRM_RADEON_CP_START 0x01 -#define DRM_RADEON_CP_STOP 0x02 -#define DRM_RADEON_CP_RESET 0x03 -#define DRM_RADEON_CP_IDLE 0x04 -#define DRM_RADEON_RESET 0x05 -#define DRM_RADEON_FULLSCREEN 0x06 -#define DRM_RADEON_SWAP 0x07 -#define DRM_RADEON_CLEAR 0x08 -#define DRM_RADEON_VERTEX 0x09 -#define DRM_RADEON_INDICES 0x0A -#define DRM_RADEON_NOT_USED -#define DRM_RADEON_STIPPLE 0x0C -#define DRM_RADEON_INDIRECT 0x0D -#define DRM_RADEON_TEXTURE 0x0E -#define DRM_RADEON_VERTEX2 0x0F -#define DRM_RADEON_CMDBUF 0x10 -#define DRM_RADEON_GETPARAM 0x11 -#define DRM_RADEON_FLIP 0x12 -#define DRM_RADEON_ALLOC 0x13 -#define DRM_RADEON_FREE 0x14 -#define DRM_RADEON_INIT_HEAP 0x15 -#define DRM_RADEON_IRQ_EMIT 0x16 -#define DRM_RADEON_IRQ_WAIT 0x17 -#define DRM_RADEON_CP_RESUME 0x18 -#define DRM_RADEON_SETPARAM 0x19 -#define DRM_RADEON_SURF_ALLOC 0x1a -#define DRM_RADEON_SURF_FREE 0x1b -/* KMS ioctl */ -#define DRM_RADEON_GEM_INFO 0x1c -#define DRM_RADEON_GEM_CREATE 0x1d -#define DRM_RADEON_GEM_MMAP 0x1e -#define DRM_RADEON_GEM_PREAD 0x21 -#define DRM_RADEON_GEM_PWRITE 0x22 -#define DRM_RADEON_GEM_SET_DOMAIN 0x23 -#define DRM_RADEON_GEM_WAIT_IDLE 0x24 -#define DRM_RADEON_CS 0x26 -#define DRM_RADEON_INFO 0x27 -#define DRM_RADEON_GEM_SET_TILING 0x28 -#define DRM_RADEON_GEM_GET_TILING 0x29 -#define DRM_RADEON_GEM_BUSY 0x2a -#define DRM_RADEON_GEM_VA 0x2b -#define DRM_RADEON_GEM_OP 0x2c -#define DRM_RADEON_GEM_USERPTR 0x2d - -#define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t) -#define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START) -#define DRM_IOCTL_RADEON_CP_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_STOP, drm_radeon_cp_stop_t) -#define DRM_IOCTL_RADEON_CP_RESET DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_RESET) -#define DRM_IOCTL_RADEON_CP_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_IDLE) -#define DRM_IOCTL_RADEON_RESET DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_RESET) -#define DRM_IOCTL_RADEON_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FULLSCREEN, drm_radeon_fullscreen_t) -#define DRM_IOCTL_RADEON_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_SWAP) -#define DRM_IOCTL_RADEON_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CLEAR, drm_radeon_clear_t) -#define DRM_IOCTL_RADEON_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX, drm_radeon_vertex_t) -#define DRM_IOCTL_RADEON_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INDICES, drm_radeon_indices_t) -#define DRM_IOCTL_RADEON_STIPPLE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_STIPPLE, drm_radeon_stipple_t) -#define DRM_IOCTL_RADEON_INDIRECT DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INDIRECT, drm_radeon_indirect_t) -#define DRM_IOCTL_RADEON_TEXTURE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_TEXTURE, drm_radeon_texture_t) -#define DRM_IOCTL_RADEON_VERTEX2 DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX2, drm_radeon_vertex2_t) -#define DRM_IOCTL_RADEON_CMDBUF DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CMDBUF, drm_radeon_cmd_buffer_t) -#define DRM_IOCTL_RADEON_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GETPARAM, drm_radeon_getparam_t) -#define DRM_IOCTL_RADEON_FLIP DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_FLIP) -#define DRM_IOCTL_RADEON_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_ALLOC, drm_radeon_mem_alloc_t) -#define DRM_IOCTL_RADEON_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FREE, drm_radeon_mem_free_t) -#define DRM_IOCTL_RADEON_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INIT_HEAP, drm_radeon_mem_init_heap_t) -#define DRM_IOCTL_RADEON_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_IRQ_EMIT, drm_radeon_irq_emit_t) -#define DRM_IOCTL_RADEON_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_IRQ_WAIT, drm_radeon_irq_wait_t) -#define DRM_IOCTL_RADEON_CP_RESUME DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_RESUME) -#define DRM_IOCTL_RADEON_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SETPARAM, drm_radeon_setparam_t) -#define DRM_IOCTL_RADEON_SURF_ALLOC DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_ALLOC, drm_radeon_surface_alloc_t) -#define DRM_IOCTL_RADEON_SURF_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_FREE, drm_radeon_surface_free_t) -/* KMS */ -#define DRM_IOCTL_RADEON_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_INFO, struct drm_radeon_gem_info) -#define DRM_IOCTL_RADEON_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_CREATE, struct drm_radeon_gem_create) -#define DRM_IOCTL_RADEON_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_MMAP, struct drm_radeon_gem_mmap) -#define DRM_IOCTL_RADEON_GEM_PREAD DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PREAD, struct drm_radeon_gem_pread) -#define DRM_IOCTL_RADEON_GEM_PWRITE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PWRITE, struct drm_radeon_gem_pwrite) -#define DRM_IOCTL_RADEON_GEM_SET_DOMAIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_DOMAIN, struct drm_radeon_gem_set_domain) -#define DRM_IOCTL_RADEON_GEM_WAIT_IDLE DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_GEM_WAIT_IDLE, struct drm_radeon_gem_wait_idle) -#define DRM_IOCTL_RADEON_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_CS, struct drm_radeon_cs) -#define DRM_IOCTL_RADEON_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INFO, struct drm_radeon_info) -#define DRM_IOCTL_RADEON_GEM_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_TILING, struct drm_radeon_gem_set_tiling) -#define DRM_IOCTL_RADEON_GEM_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_GET_TILING, struct drm_radeon_gem_get_tiling) -#define DRM_IOCTL_RADEON_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_BUSY, struct drm_radeon_gem_busy) -#define DRM_IOCTL_RADEON_GEM_VA DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_VA, struct drm_radeon_gem_va) -#define DRM_IOCTL_RADEON_GEM_OP DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_OP, struct drm_radeon_gem_op) -#define DRM_IOCTL_RADEON_GEM_USERPTR DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_USERPTR, struct drm_radeon_gem_userptr) - -typedef struct drm_radeon_init { - enum { - RADEON_INIT_CP = 0x01, - RADEON_CLEANUP_CP = 0x02, - RADEON_INIT_R200_CP = 0x03, - RADEON_INIT_R300_CP = 0x04, - RADEON_INIT_R600_CP = 0x05 - } func; - unsigned long sarea_priv_offset; - int is_pci; - int cp_mode; - int gart_size; - int ring_size; - int usec_timeout; - - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long ring_offset; - unsigned long ring_rptr_offset; - unsigned long buffers_offset; - unsigned long gart_textures_offset; -} drm_radeon_init_t; - -typedef struct drm_radeon_cp_stop { - int flush; - int idle; -} drm_radeon_cp_stop_t; - -typedef struct drm_radeon_fullscreen { - enum { - RADEON_INIT_FULLSCREEN = 0x01, - RADEON_CLEANUP_FULLSCREEN = 0x02 - } func; -} drm_radeon_fullscreen_t; - -#define CLEAR_X1 0 -#define CLEAR_Y1 1 -#define CLEAR_X2 2 -#define CLEAR_Y2 3 -#define CLEAR_DEPTH 4 - -typedef union drm_radeon_clear_rect { - float f[5]; - unsigned int ui[5]; -} drm_radeon_clear_rect_t; - -typedef struct drm_radeon_clear { - unsigned int flags; - unsigned int clear_color; - unsigned int clear_depth; - unsigned int color_mask; - unsigned int depth_mask; /* misnamed field: should be stencil */ - drm_radeon_clear_rect_t *depth_boxes; -} drm_radeon_clear_t; - -typedef struct drm_radeon_vertex { - int prim; - int idx; /* Index of vertex buffer */ - int count; /* Number of vertices in buffer */ - int discard; /* Client finished with buffer? */ -} drm_radeon_vertex_t; - -typedef struct drm_radeon_indices { - int prim; - int idx; - int start; - int end; - int discard; /* Client finished with buffer? */ -} drm_radeon_indices_t; - -/* v1.2 - obsoletes drm_radeon_vertex and drm_radeon_indices - * - allows multiple primitives and state changes in a single ioctl - * - supports driver change to emit native primitives - */ -typedef struct drm_radeon_vertex2 { - int idx; /* Index of vertex buffer */ - int discard; /* Client finished with buffer? */ - int nr_states; - drm_radeon_state_t *state; - int nr_prims; - drm_radeon_prim_t *prim; -} drm_radeon_vertex2_t; - -/* v1.3 - obsoletes drm_radeon_vertex2 - * - allows arbitrarily large cliprect list - * - allows updating of tcl packet, vector and scalar state - * - allows memory-efficient description of state updates - * - allows state to be emitted without a primitive - * (for clears, ctx switches) - * - allows more than one dma buffer to be referenced per ioctl - * - supports tcl driver - * - may be extended in future versions with new cmd types, packets - */ -typedef struct drm_radeon_cmd_buffer { - int bufsz; - char *buf; - int nbox; - struct drm_clip_rect *boxes; -} drm_radeon_cmd_buffer_t; - -typedef struct drm_radeon_tex_image { - unsigned int x, y; /* Blit coordinates */ - unsigned int width, height; - const void *data; -} drm_radeon_tex_image_t; - -typedef struct drm_radeon_texture { - unsigned int offset; - int pitch; - int format; - int width; /* Texture image coordinates */ - int height; - drm_radeon_tex_image_t *image; -} drm_radeon_texture_t; - -typedef struct drm_radeon_stipple { - unsigned int *mask; -} drm_radeon_stipple_t; - -typedef struct drm_radeon_indirect { - int idx; - int start; - int end; - int discard; -} drm_radeon_indirect_t; - -/* enum for card type parameters */ -#define RADEON_CARD_PCI 0 -#define RADEON_CARD_AGP 1 -#define RADEON_CARD_PCIE 2 - -/* 1.3: An ioctl to get parameters that aren't available to the 3d - * client any other way. - */ -#define RADEON_PARAM_GART_BUFFER_OFFSET 1 /* card offset of 1st GART buffer */ -#define RADEON_PARAM_LAST_FRAME 2 -#define RADEON_PARAM_LAST_DISPATCH 3 -#define RADEON_PARAM_LAST_CLEAR 4 -/* Added with DRM version 1.6. */ -#define RADEON_PARAM_IRQ_NR 5 -#define RADEON_PARAM_GART_BASE 6 /* card offset of GART base */ -/* Added with DRM version 1.8. */ -#define RADEON_PARAM_REGISTER_HANDLE 7 /* for drmMap() */ -#define RADEON_PARAM_STATUS_HANDLE 8 -#define RADEON_PARAM_SAREA_HANDLE 9 -#define RADEON_PARAM_GART_TEX_HANDLE 10 -#define RADEON_PARAM_SCRATCH_OFFSET 11 -#define RADEON_PARAM_CARD_TYPE 12 -#define RADEON_PARAM_VBLANK_CRTC 13 /* VBLANK CRTC */ -#define RADEON_PARAM_FB_LOCATION 14 /* FB location */ -#define RADEON_PARAM_NUM_GB_PIPES 15 /* num GB pipes */ -#define RADEON_PARAM_DEVICE_ID 16 -#define RADEON_PARAM_NUM_Z_PIPES 17 /* num Z pipes */ - -typedef struct drm_radeon_getparam { - int param; - void *value; -} drm_radeon_getparam_t; - -/* 1.6: Set up a memory manager for regions of shared memory: - */ -#define RADEON_MEM_REGION_GART 1 -#define RADEON_MEM_REGION_FB 2 - -typedef struct drm_radeon_mem_alloc { - int region; - int alignment; - int size; - int *region_offset; /* offset from start of fb or GART */ -} drm_radeon_mem_alloc_t; - -typedef struct drm_radeon_mem_free { - int region; - int region_offset; -} drm_radeon_mem_free_t; - -typedef struct drm_radeon_mem_init_heap { - int region; - int size; - int start; -} drm_radeon_mem_init_heap_t; - -/* 1.6: Userspace can request & wait on irq's: - */ -typedef struct drm_radeon_irq_emit { - int *irq_seq; -} drm_radeon_irq_emit_t; - -typedef struct drm_radeon_irq_wait { - int irq_seq; -} drm_radeon_irq_wait_t; - -/* 1.10: Clients tell the DRM where they think the framebuffer is located in - * the card's address space, via a new generic ioctl to set parameters - */ - -typedef struct drm_radeon_setparam { - unsigned int param; - __s64 value; -} drm_radeon_setparam_t; - -#define RADEON_SETPARAM_FB_LOCATION 1 /* determined framebuffer location */ -#define RADEON_SETPARAM_SWITCH_TILING 2 /* enable/disable color tiling */ -#define RADEON_SETPARAM_PCIGART_LOCATION 3 /* PCI Gart Location */ -#define RADEON_SETPARAM_NEW_MEMMAP 4 /* Use new memory map */ -#define RADEON_SETPARAM_PCIGART_TABLE_SIZE 5 /* PCI GART Table Size */ -#define RADEON_SETPARAM_VBLANK_CRTC 6 /* VBLANK CRTC */ -/* 1.14: Clients can allocate/free a surface - */ -typedef struct drm_radeon_surface_alloc { - unsigned int address; - unsigned int size; - unsigned int flags; -} drm_radeon_surface_alloc_t; - -typedef struct drm_radeon_surface_free { - unsigned int address; -} drm_radeon_surface_free_t; - -#define DRM_RADEON_VBLANK_CRTC1 1 -#define DRM_RADEON_VBLANK_CRTC2 2 - -/* - * Kernel modesetting world below. - */ -#define RADEON_GEM_DOMAIN_CPU 0x1 -#define RADEON_GEM_DOMAIN_GTT 0x2 -#define RADEON_GEM_DOMAIN_VRAM 0x4 - -struct drm_radeon_gem_info { - __u64 gart_size; - __u64 vram_size; - __u64 vram_visible; -}; - -#define RADEON_GEM_NO_BACKING_STORE (1 << 0) -#define RADEON_GEM_GTT_UC (1 << 1) -#define RADEON_GEM_GTT_WC (1 << 2) -/* BO is expected to be accessed by the CPU */ -#define RADEON_GEM_CPU_ACCESS (1 << 3) -/* CPU access is not expected to work for this BO */ -#define RADEON_GEM_NO_CPU_ACCESS (1 << 4) - -struct drm_radeon_gem_create { - __u64 size; - __u64 alignment; - __u32 handle; - __u32 initial_domain; - __u32 flags; -}; - -/* - * This is not a reliable API and you should expect it to fail for any - * number of reasons and have fallback path that do not use userptr to - * perform any operation. - */ -#define RADEON_GEM_USERPTR_READONLY (1 << 0) -#define RADEON_GEM_USERPTR_ANONONLY (1 << 1) -#define RADEON_GEM_USERPTR_VALIDATE (1 << 2) -#define RADEON_GEM_USERPTR_REGISTER (1 << 3) - -struct drm_radeon_gem_userptr { - __u64 addr; - __u64 size; - __u32 flags; - __u32 handle; -}; - -#define RADEON_TILING_MACRO 0x1 -#define RADEON_TILING_MICRO 0x2 -#define RADEON_TILING_SWAP_16BIT 0x4 -#define RADEON_TILING_R600_NO_SCANOUT RADEON_TILING_SWAP_16BIT -#define RADEON_TILING_SWAP_32BIT 0x8 -/* this object requires a surface when mapped - i.e. front buffer */ -#define RADEON_TILING_SURFACE 0x10 -#define RADEON_TILING_MICRO_SQUARE 0x20 -#define RADEON_TILING_EG_BANKW_SHIFT 8 -#define RADEON_TILING_EG_BANKW_MASK 0xf -#define RADEON_TILING_EG_BANKH_SHIFT 12 -#define RADEON_TILING_EG_BANKH_MASK 0xf -#define RADEON_TILING_EG_MACRO_TILE_ASPECT_SHIFT 16 -#define RADEON_TILING_EG_MACRO_TILE_ASPECT_MASK 0xf -#define RADEON_TILING_EG_TILE_SPLIT_SHIFT 24 -#define RADEON_TILING_EG_TILE_SPLIT_MASK 0xf -#define RADEON_TILING_EG_STENCIL_TILE_SPLIT_SHIFT 28 -#define RADEON_TILING_EG_STENCIL_TILE_SPLIT_MASK 0xf - -struct drm_radeon_gem_set_tiling { - __u32 handle; - __u32 tiling_flags; - __u32 pitch; -}; - -struct drm_radeon_gem_get_tiling { - __u32 handle; - __u32 tiling_flags; - __u32 pitch; -}; - -struct drm_radeon_gem_mmap { - __u32 handle; - __u32 pad; - __u64 offset; - __u64 size; - __u64 addr_ptr; -}; - -struct drm_radeon_gem_set_domain { - __u32 handle; - __u32 read_domains; - __u32 write_domain; -}; - -struct drm_radeon_gem_wait_idle { - __u32 handle; - __u32 pad; -}; - -struct drm_radeon_gem_busy { - __u32 handle; - __u32 domain; -}; - -struct drm_radeon_gem_pread { - /** Handle for the object being read. */ - __u32 handle; - __u32 pad; - /** Offset into the object to read from */ - __u64 offset; - /** Length of data to read */ - __u64 size; - /** Pointer to write the data into. */ - /* void *, but pointers are not 32/64 compatible */ - __u64 data_ptr; -}; - -struct drm_radeon_gem_pwrite { - /** Handle for the object being written to. */ - __u32 handle; - __u32 pad; - /** Offset into the object to write to */ - __u64 offset; - /** Length of data to write */ - __u64 size; - /** Pointer to read the data from. */ - /* void *, but pointers are not 32/64 compatible */ - __u64 data_ptr; -}; - -/* Sets or returns a value associated with a buffer. */ -struct drm_radeon_gem_op { - __u32 handle; /* buffer */ - __u32 op; /* RADEON_GEM_OP_* */ - __u64 value; /* input or return value */ -}; - -#define RADEON_GEM_OP_GET_INITIAL_DOMAIN 0 -#define RADEON_GEM_OP_SET_INITIAL_DOMAIN 1 - -#define RADEON_VA_MAP 1 -#define RADEON_VA_UNMAP 2 - -#define RADEON_VA_RESULT_OK 0 -#define RADEON_VA_RESULT_ERROR 1 -#define RADEON_VA_RESULT_VA_EXIST 2 - -#define RADEON_VM_PAGE_VALID (1 << 0) -#define RADEON_VM_PAGE_READABLE (1 << 1) -#define RADEON_VM_PAGE_WRITEABLE (1 << 2) -#define RADEON_VM_PAGE_SYSTEM (1 << 3) -#define RADEON_VM_PAGE_SNOOPED (1 << 4) - -struct drm_radeon_gem_va { - __u32 handle; - __u32 operation; - __u32 vm_id; - __u32 flags; - __u64 offset; -}; - -#define RADEON_CHUNK_ID_RELOCS 0x01 -#define RADEON_CHUNK_ID_IB 0x02 -#define RADEON_CHUNK_ID_FLAGS 0x03 -#define RADEON_CHUNK_ID_CONST_IB 0x04 - -/* The first dword of RADEON_CHUNK_ID_FLAGS is a uint32 of these flags: */ -#define RADEON_CS_KEEP_TILING_FLAGS 0x01 -#define RADEON_CS_USE_VM 0x02 -#define RADEON_CS_END_OF_FRAME 0x04 /* a hint from userspace which CS is the last one */ -/* The second dword of RADEON_CHUNK_ID_FLAGS is a uint32 that sets the ring type */ -#define RADEON_CS_RING_GFX 0 -#define RADEON_CS_RING_COMPUTE 1 -#define RADEON_CS_RING_DMA 2 -#define RADEON_CS_RING_UVD 3 -#define RADEON_CS_RING_VCE 4 -/* The third dword of RADEON_CHUNK_ID_FLAGS is a sint32 that sets the priority */ -/* 0 = normal, + = higher priority, - = lower priority */ - -struct drm_radeon_cs_chunk { - __u32 chunk_id; - __u32 length_dw; - __u64 chunk_data; -}; - -/* drm_radeon_cs_reloc.flags */ -#define RADEON_RELOC_PRIO_MASK (0xf << 0) - -struct drm_radeon_cs_reloc { - __u32 handle; - __u32 read_domains; - __u32 write_domain; - __u32 flags; -}; - -struct drm_radeon_cs { - __u32 num_chunks; - __u32 cs_id; - /* this points to __u64 * which point to cs chunks */ - __u64 chunks; - /* updates to the limits after this CS ioctl */ - __u64 gart_limit; - __u64 vram_limit; -}; - -#define RADEON_INFO_DEVICE_ID 0x00 -#define RADEON_INFO_NUM_GB_PIPES 0x01 -#define RADEON_INFO_NUM_Z_PIPES 0x02 -#define RADEON_INFO_ACCEL_WORKING 0x03 -#define RADEON_INFO_CRTC_FROM_ID 0x04 -#define RADEON_INFO_ACCEL_WORKING2 0x05 -#define RADEON_INFO_TILING_CONFIG 0x06 -#define RADEON_INFO_WANT_HYPERZ 0x07 -#define RADEON_INFO_WANT_CMASK 0x08 /* get access to CMASK on r300 */ -#define RADEON_INFO_CLOCK_CRYSTAL_FREQ 0x09 /* clock crystal frequency */ -#define RADEON_INFO_NUM_BACKENDS 0x0a /* DB/backends for r600+ - need for OQ */ -#define RADEON_INFO_NUM_TILE_PIPES 0x0b /* tile pipes for r600+ */ -#define RADEON_INFO_FUSION_GART_WORKING 0x0c /* fusion writes to GTT were broken before this */ -#define RADEON_INFO_BACKEND_MAP 0x0d /* pipe to backend map, needed by mesa */ -/* virtual address start, va < start are reserved by the kernel */ -#define RADEON_INFO_VA_START 0x0e -/* maximum size of ib using the virtual memory cs */ -#define RADEON_INFO_IB_VM_MAX_SIZE 0x0f -/* max pipes - needed for compute shaders */ -#define RADEON_INFO_MAX_PIPES 0x10 -/* timestamp for GL_ARB_timer_query (OpenGL), returns the current GPU clock */ -#define RADEON_INFO_TIMESTAMP 0x11 -/* max shader engines (SE) - needed for geometry shaders, etc. */ -#define RADEON_INFO_MAX_SE 0x12 -/* max SH per SE */ -#define RADEON_INFO_MAX_SH_PER_SE 0x13 -/* fast fb access is enabled */ -#define RADEON_INFO_FASTFB_WORKING 0x14 -/* query if a RADEON_CS_RING_* submission is supported */ -#define RADEON_INFO_RING_WORKING 0x15 -/* SI tile mode array */ -#define RADEON_INFO_SI_TILE_MODE_ARRAY 0x16 -/* query if CP DMA is supported on the compute ring */ -#define RADEON_INFO_SI_CP_DMA_COMPUTE 0x17 -/* CIK macrotile mode array */ -#define RADEON_INFO_CIK_MACROTILE_MODE_ARRAY 0x18 -/* query the number of render backends */ -#define RADEON_INFO_SI_BACKEND_ENABLED_MASK 0x19 -/* max engine clock - needed for OpenCL */ -#define RADEON_INFO_MAX_SCLK 0x1a -/* version of VCE firmware */ -#define RADEON_INFO_VCE_FW_VERSION 0x1b -/* version of VCE feedback */ -#define RADEON_INFO_VCE_FB_VERSION 0x1c -#define RADEON_INFO_NUM_BYTES_MOVED 0x1d -#define RADEON_INFO_VRAM_USAGE 0x1e -#define RADEON_INFO_GTT_USAGE 0x1f -#define RADEON_INFO_ACTIVE_CU_COUNT 0x20 -#define RADEON_INFO_CURRENT_GPU_TEMP 0x21 -#define RADEON_INFO_CURRENT_GPU_SCLK 0x22 -#define RADEON_INFO_CURRENT_GPU_MCLK 0x23 -#define RADEON_INFO_READ_REG 0x24 -#define RADEON_INFO_VA_UNMAP_WORKING 0x25 -#define RADEON_INFO_GPU_RESET_COUNTER 0x26 - -struct drm_radeon_info { - __u32 request; - __u32 pad; - __u64 value; -}; - -/* Those correspond to the tile index to use, this is to explicitly state - * the API that is implicitly defined by the tile mode array. - */ -#define SI_TILE_MODE_COLOR_LINEAR_ALIGNED 8 -#define SI_TILE_MODE_COLOR_1D 13 -#define SI_TILE_MODE_COLOR_1D_SCANOUT 9 -#define SI_TILE_MODE_COLOR_2D_8BPP 14 -#define SI_TILE_MODE_COLOR_2D_16BPP 15 -#define SI_TILE_MODE_COLOR_2D_32BPP 16 -#define SI_TILE_MODE_COLOR_2D_64BPP 17 -#define SI_TILE_MODE_COLOR_2D_SCANOUT_16BPP 11 -#define SI_TILE_MODE_COLOR_2D_SCANOUT_32BPP 12 -#define SI_TILE_MODE_DEPTH_STENCIL_1D 4 -#define SI_TILE_MODE_DEPTH_STENCIL_2D 0 -#define SI_TILE_MODE_DEPTH_STENCIL_2D_2AA 3 -#define SI_TILE_MODE_DEPTH_STENCIL_2D_4AA 3 -#define SI_TILE_MODE_DEPTH_STENCIL_2D_8AA 2 - -#define CIK_TILE_MODE_DEPTH_STENCIL_1D 5 - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86/include/libdrm/radeon_surface.h b/prebuilts/x86/include/libdrm/radeon_surface.h deleted file mode 100644 index af7cab6..0000000 --- a/prebuilts/x86/include/libdrm/radeon_surface.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright © 2011 Red Hat All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Jérôme Glisse - */ -#ifndef RADEON_SURFACE_H -#define RADEON_SURFACE_H - -/* Note : - * - * For texture array, the n layer are stored one after the other within each - * mipmap level. 0 value for field than can be hint is always valid. - */ - -#define RADEON_SURF_MAX_LEVEL 32 - -#define RADEON_SURF_TYPE_MASK 0xFF -#define RADEON_SURF_TYPE_SHIFT 0 -#define RADEON_SURF_TYPE_1D 0 -#define RADEON_SURF_TYPE_2D 1 -#define RADEON_SURF_TYPE_3D 2 -#define RADEON_SURF_TYPE_CUBEMAP 3 -#define RADEON_SURF_TYPE_1D_ARRAY 4 -#define RADEON_SURF_TYPE_2D_ARRAY 5 -#define RADEON_SURF_MODE_MASK 0xFF -#define RADEON_SURF_MODE_SHIFT 8 -#define RADEON_SURF_MODE_LINEAR 0 -#define RADEON_SURF_MODE_LINEAR_ALIGNED 1 -#define RADEON_SURF_MODE_1D 2 -#define RADEON_SURF_MODE_2D 3 -#define RADEON_SURF_SCANOUT (1 << 16) -#define RADEON_SURF_ZBUFFER (1 << 17) -#define RADEON_SURF_SBUFFER (1 << 18) -#define RADEON_SURF_Z_OR_SBUFFER (RADEON_SURF_ZBUFFER | RADEON_SURF_SBUFFER) -#define RADEON_SURF_HAS_SBUFFER_MIPTREE (1 << 19) -#define RADEON_SURF_HAS_TILE_MODE_INDEX (1 << 20) -#define RADEON_SURF_FMASK (1 << 21) - -#define RADEON_SURF_GET(v, field) (((v) >> RADEON_SURF_ ## field ## _SHIFT) & RADEON_SURF_ ## field ## _MASK) -#define RADEON_SURF_SET(v, field) (((v) & RADEON_SURF_ ## field ## _MASK) << RADEON_SURF_ ## field ## _SHIFT) -#define RADEON_SURF_CLR(v, field) ((v) & ~(RADEON_SURF_ ## field ## _MASK << RADEON_SURF_ ## field ## _SHIFT)) - -/* first field up to mode need to match r6 struct so that we can reuse - * same function for linear & linear aligned - */ -struct radeon_surface_level { - uint64_t offset; - uint64_t slice_size; - uint32_t npix_x; - uint32_t npix_y; - uint32_t npix_z; - uint32_t nblk_x; - uint32_t nblk_y; - uint32_t nblk_z; - uint32_t pitch_bytes; - uint32_t mode; -}; - -enum si_tiling_mode { - SI_TILING_AUTO = 0, - - SI_TILING_COLOR_1D, - SI_TILING_COLOR_1D_SCANOUT, - SI_TILING_COLOR_2D_8BPP, - SI_TILING_COLOR_2D_16BPP, - SI_TILING_COLOR_2D_32BPP, - SI_TILING_COLOR_2D_64BPP, - SI_TILING_COLOR_2D_SCANOUT_16BPP, - SI_TILING_COLOR_2D_SCANOUT_32BPP, - SI_TILING_COLOR_LINEAR, - - SI_TILING_STENCIL_1D, - SI_TILING_STENCIL_2D, - SI_TILING_STENCIL_2D_2AA, - SI_TILING_STENCIL_2D_4AA, - SI_TILING_STENCIL_2D_8AA, - - SI_TILING_DEPTH_1D, - SI_TILING_DEPTH_2D, - SI_TILING_DEPTH_2D_2AA, - SI_TILING_DEPTH_2D_4AA, - SI_TILING_DEPTH_2D_8AA, - - SI_TILING_LAST_MODE, -}; - -struct radeon_surface { - uint32_t npix_x; - uint32_t npix_y; - uint32_t npix_z; - uint32_t blk_w; - uint32_t blk_h; - uint32_t blk_d; - uint32_t array_size; - uint32_t last_level; - uint32_t bpe; - uint32_t nsamples; - uint32_t flags; - /* Following is updated/fill by the allocator. It's allowed to - * set some of the value but they are use as hint and can be - * overridden (things lile bankw/bankh on evergreen for - * instance). - */ - uint64_t bo_size; - uint64_t bo_alignment; - /* apply to eg */ - uint32_t bankw; - uint32_t bankh; - uint32_t mtilea; - uint32_t tile_split; - uint32_t stencil_tile_split; - uint64_t stencil_offset; - struct radeon_surface_level level[RADEON_SURF_MAX_LEVEL]; - struct radeon_surface_level stencil_level[RADEON_SURF_MAX_LEVEL]; - uint32_t tiling_index[RADEON_SURF_MAX_LEVEL]; - uint32_t stencil_tiling_index[RADEON_SURF_MAX_LEVEL]; -}; - -struct radeon_surface_manager *radeon_surface_manager_new(int fd); -void radeon_surface_manager_free(struct radeon_surface_manager *surf_man); -int radeon_surface_init(struct radeon_surface_manager *surf_man, - struct radeon_surface *surf); -int radeon_surface_best(struct radeon_surface_manager *surf_man, - struct radeon_surface *surf); - -#endif diff --git a/prebuilts/x86/include/libdrm/savage_drm.h b/prebuilts/x86/include/libdrm/savage_drm.h deleted file mode 100644 index 1a91234..0000000 --- a/prebuilts/x86/include/libdrm/savage_drm.h +++ /dev/null @@ -1,220 +0,0 @@ -/* savage_drm.h -- Public header for the savage driver - * - * Copyright 2004 Felix Kuehling - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sub license, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL FELIX KUEHLING BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef __SAVAGE_DRM_H__ -#define __SAVAGE_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef __SAVAGE_SAREA_DEFINES__ -#define __SAVAGE_SAREA_DEFINES__ - -/* 2 heaps (1 for card, 1 for agp), each divided into up to 128 - * regions, subject to a minimum region size of (1<<16) == 64k. - * - * Clients may subdivide regions internally, but when sharing between - * clients, the region size is the minimum granularity. - */ - -#define SAVAGE_CARD_HEAP 0 -#define SAVAGE_AGP_HEAP 1 -#define SAVAGE_NR_TEX_HEAPS 2 -#define SAVAGE_NR_TEX_REGIONS 16 -#define SAVAGE_LOG_MIN_TEX_REGION_SIZE 16 - -#endif /* __SAVAGE_SAREA_DEFINES__ */ - -typedef struct _drm_savage_sarea { - /* LRU lists for texture memory in agp space and on the card. - */ - struct drm_tex_region texList[SAVAGE_NR_TEX_HEAPS][SAVAGE_NR_TEX_REGIONS + - 1]; - unsigned int texAge[SAVAGE_NR_TEX_HEAPS]; - - /* Mechanism to validate card state. - */ - int ctxOwner; -} drm_savage_sarea_t, *drm_savage_sarea_ptr; - -/* Savage-specific ioctls - */ -#define DRM_SAVAGE_BCI_INIT 0x00 -#define DRM_SAVAGE_BCI_CMDBUF 0x01 -#define DRM_SAVAGE_BCI_EVENT_EMIT 0x02 -#define DRM_SAVAGE_BCI_EVENT_WAIT 0x03 - -#define DRM_IOCTL_SAVAGE_BCI_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_INIT, drm_savage_init_t) -#define DRM_IOCTL_SAVAGE_BCI_CMDBUF DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_CMDBUF, drm_savage_cmdbuf_t) -#define DRM_IOCTL_SAVAGE_BCI_EVENT_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_SAVAGE_BCI_EVENT_EMIT, drm_savage_event_emit_t) -#define DRM_IOCTL_SAVAGE_BCI_EVENT_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_EVENT_WAIT, drm_savage_event_wait_t) - -#define SAVAGE_DMA_PCI 1 -#define SAVAGE_DMA_AGP 3 -typedef struct drm_savage_init { - enum { - SAVAGE_INIT_BCI = 1, - SAVAGE_CLEANUP_BCI = 2 - } func; - unsigned int sarea_priv_offset; - - /* some parameters */ - unsigned int cob_size; - unsigned int bci_threshold_lo, bci_threshold_hi; - unsigned int dma_type; - - /* frame buffer layout */ - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - - /* local textures */ - unsigned int texture_offset; - unsigned int texture_size; - - /* physical locations of non-permanent maps */ - unsigned long status_offset; - unsigned long buffers_offset; - unsigned long agp_textures_offset; - unsigned long cmd_dma_offset; -} drm_savage_init_t; - -typedef union drm_savage_cmd_header drm_savage_cmd_header_t; -typedef struct drm_savage_cmdbuf { - /* command buffer in client's address space */ - drm_savage_cmd_header_t *cmd_addr; - unsigned int size; /* size of the command buffer in 64bit units */ - - unsigned int dma_idx; /* DMA buffer index to use */ - int discard; /* discard DMA buffer when done */ - /* vertex buffer in client's address space */ - unsigned int *vb_addr; - unsigned int vb_size; /* size of client vertex buffer in bytes */ - unsigned int vb_stride; /* stride of vertices in 32bit words */ - /* boxes in client's address space */ - struct drm_clip_rect *box_addr; - unsigned int nbox; /* number of clipping boxes */ -} drm_savage_cmdbuf_t; - -#define SAVAGE_WAIT_2D 0x1 /* wait for 2D idle before updating event tag */ -#define SAVAGE_WAIT_3D 0x2 /* wait for 3D idle before updating event tag */ -#define SAVAGE_WAIT_IRQ 0x4 /* emit or wait for IRQ, not implemented yet */ -typedef struct drm_savage_event { - unsigned int count; - unsigned int flags; -} drm_savage_event_emit_t, drm_savage_event_wait_t; - -/* Commands for the cmdbuf ioctl - */ -#define SAVAGE_CMD_STATE 0 /* a range of state registers */ -#define SAVAGE_CMD_DMA_PRIM 1 /* vertices from DMA buffer */ -#define SAVAGE_CMD_VB_PRIM 2 /* vertices from client vertex buffer */ -#define SAVAGE_CMD_DMA_IDX 3 /* indexed vertices from DMA buffer */ -#define SAVAGE_CMD_VB_IDX 4 /* indexed vertices client vertex buffer */ -#define SAVAGE_CMD_CLEAR 5 /* clear buffers */ -#define SAVAGE_CMD_SWAP 6 /* swap buffers */ - -/* Primitive types -*/ -#define SAVAGE_PRIM_TRILIST 0 /* triangle list */ -#define SAVAGE_PRIM_TRISTRIP 1 /* triangle strip */ -#define SAVAGE_PRIM_TRIFAN 2 /* triangle fan */ -#define SAVAGE_PRIM_TRILIST_201 3 /* reorder verts for correct flat - * shading on s3d */ - -/* Skip flags (vertex format) - */ -#define SAVAGE_SKIP_Z 0x01 -#define SAVAGE_SKIP_W 0x02 -#define SAVAGE_SKIP_C0 0x04 -#define SAVAGE_SKIP_C1 0x08 -#define SAVAGE_SKIP_S0 0x10 -#define SAVAGE_SKIP_T0 0x20 -#define SAVAGE_SKIP_ST0 0x30 -#define SAVAGE_SKIP_S1 0x40 -#define SAVAGE_SKIP_T1 0x80 -#define SAVAGE_SKIP_ST1 0xc0 -#define SAVAGE_SKIP_ALL_S3D 0x3f -#define SAVAGE_SKIP_ALL_S4 0xff - -/* Buffer names for clear command - */ -#define SAVAGE_FRONT 0x1 -#define SAVAGE_BACK 0x2 -#define SAVAGE_DEPTH 0x4 - -/* 64-bit command header - */ -union drm_savage_cmd_header { - struct { - unsigned char cmd; /* command */ - unsigned char pad0; - unsigned short pad1; - unsigned short pad2; - unsigned short pad3; - } cmd; /* generic */ - struct { - unsigned char cmd; - unsigned char global; /* need idle engine? */ - unsigned short count; /* number of consecutive registers */ - unsigned short start; /* first register */ - unsigned short pad3; - } state; /* SAVAGE_CMD_STATE */ - struct { - unsigned char cmd; - unsigned char prim; /* primitive type */ - unsigned short skip; /* vertex format (skip flags) */ - unsigned short count; /* number of vertices */ - unsigned short start; /* first vertex in DMA/vertex buffer */ - } prim; /* SAVAGE_CMD_DMA_PRIM, SAVAGE_CMD_VB_PRIM */ - struct { - unsigned char cmd; - unsigned char prim; - unsigned short skip; - unsigned short count; /* number of indices that follow */ - unsigned short pad3; - } idx; /* SAVAGE_CMD_DMA_IDX, SAVAGE_CMD_VB_IDX */ - struct { - unsigned char cmd; - unsigned char pad0; - unsigned short pad1; - unsigned int flags; - } clear0; /* SAVAGE_CMD_CLEAR */ - struct { - unsigned int mask; - unsigned int value; - } clear1; /* SAVAGE_CMD_CLEAR data */ -}; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86/include/libdrm/sis_drm.h b/prebuilts/x86/include/libdrm/sis_drm.h deleted file mode 100644 index 8e51bb9..0000000 --- a/prebuilts/x86/include/libdrm/sis_drm.h +++ /dev/null @@ -1,77 +0,0 @@ -/* sis_drv.h -- Private header for sis driver -*- linux-c -*- */ -/* - * Copyright 2005 Eric Anholt - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - */ - -#ifndef __SIS_DRM_H__ -#define __SIS_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* SiS specific ioctls */ -#define NOT_USED_0_3 -#define DRM_SIS_FB_ALLOC 0x04 -#define DRM_SIS_FB_FREE 0x05 -#define NOT_USED_6_12 -#define DRM_SIS_AGP_INIT 0x13 -#define DRM_SIS_AGP_ALLOC 0x14 -#define DRM_SIS_AGP_FREE 0x15 -#define DRM_SIS_FB_INIT 0x16 - -#define DRM_IOCTL_SIS_FB_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_FB_ALLOC, drm_sis_mem_t) -#define DRM_IOCTL_SIS_FB_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_FB_FREE, drm_sis_mem_t) -#define DRM_IOCTL_SIS_AGP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_AGP_INIT, drm_sis_agp_t) -#define DRM_IOCTL_SIS_AGP_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_AGP_ALLOC, drm_sis_mem_t) -#define DRM_IOCTL_SIS_AGP_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_AGP_FREE, drm_sis_mem_t) -#define DRM_IOCTL_SIS_FB_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_FB_INIT, drm_sis_fb_t) -/* -#define DRM_IOCTL_SIS_FLIP DRM_IOW( 0x48, drm_sis_flip_t) -#define DRM_IOCTL_SIS_FLIP_INIT DRM_IO( 0x49) -#define DRM_IOCTL_SIS_FLIP_FINAL DRM_IO( 0x50) -*/ - -typedef struct { - int context; - unsigned int offset; - unsigned int size; - unsigned long free; -} drm_sis_mem_t; - -typedef struct { - unsigned int offset, size; -} drm_sis_agp_t; - -typedef struct { - unsigned int offset, size; -} drm_sis_fb_t; - -#if defined(__cplusplus) -} -#endif - -#endif /* __SIS_DRM_H__ */ diff --git a/prebuilts/x86/include/libdrm/tegra_drm.h b/prebuilts/x86/include/libdrm/tegra_drm.h deleted file mode 100644 index 94cfc30..0000000 --- a/prebuilts/x86/include/libdrm/tegra_drm.h +++ /dev/null @@ -1,1060 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/* Copyright (c) 2012-2020 NVIDIA Corporation */ - -#ifndef _UAPI_TEGRA_DRM_H_ -#define _UAPI_TEGRA_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Tegra DRM legacy UAPI. Only enabled with STAGING */ - -#define DRM_TEGRA_GEM_CREATE_TILED (1 << 0) -#define DRM_TEGRA_GEM_CREATE_BOTTOM_UP (1 << 1) - -/** - * struct drm_tegra_gem_create - parameters for the GEM object creation IOCTL - */ -struct drm_tegra_gem_create { - /** - * @size: - * - * The size, in bytes, of the buffer object to be created. - */ - __u64 size; - - /** - * @flags: - * - * A bitmask of flags that influence the creation of GEM objects: - * - * DRM_TEGRA_GEM_CREATE_TILED - * Use the 16x16 tiling format for this buffer. - * - * DRM_TEGRA_GEM_CREATE_BOTTOM_UP - * The buffer has a bottom-up layout. - */ - __u32 flags; - - /** - * @handle: - * - * The handle of the created GEM object. Set by the kernel upon - * successful completion of the IOCTL. - */ - __u32 handle; -}; - -/** - * struct drm_tegra_gem_mmap - parameters for the GEM mmap IOCTL - */ -struct drm_tegra_gem_mmap { - /** - * @handle: - * - * Handle of the GEM object to obtain an mmap offset for. - */ - __u32 handle; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; - - /** - * @offset: - * - * The mmap offset for the given GEM object. Set by the kernel upon - * successful completion of the IOCTL. - */ - __u64 offset; -}; - -/** - * struct drm_tegra_syncpt_read - parameters for the read syncpoint IOCTL - */ -struct drm_tegra_syncpt_read { - /** - * @id: - * - * ID of the syncpoint to read the current value from. - */ - __u32 id; - - /** - * @value: - * - * The current syncpoint value. Set by the kernel upon successful - * completion of the IOCTL. - */ - __u32 value; -}; - -/** - * struct drm_tegra_syncpt_incr - parameters for the increment syncpoint IOCTL - */ -struct drm_tegra_syncpt_incr { - /** - * @id: - * - * ID of the syncpoint to increment. - */ - __u32 id; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_syncpt_wait - parameters for the wait syncpoint IOCTL - */ -struct drm_tegra_syncpt_wait { - /** - * @id: - * - * ID of the syncpoint to wait on. - */ - __u32 id; - - /** - * @thresh: - * - * Threshold value for which to wait. - */ - __u32 thresh; - - /** - * @timeout: - * - * Timeout, in milliseconds, to wait. - */ - __u32 timeout; - - /** - * @value: - * - * The new syncpoint value after the wait. Set by the kernel upon - * successful completion of the IOCTL. - */ - __u32 value; -}; - -#define DRM_TEGRA_NO_TIMEOUT (0xffffffff) - -/** - * struct drm_tegra_open_channel - parameters for the open channel IOCTL - */ -struct drm_tegra_open_channel { - /** - * @client: - * - * The client ID for this channel. - */ - __u32 client; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; - - /** - * @context: - * - * The application context of this channel. Set by the kernel upon - * successful completion of the IOCTL. This context needs to be passed - * to the DRM_TEGRA_CHANNEL_CLOSE or the DRM_TEGRA_SUBMIT IOCTLs. - */ - __u64 context; -}; - -/** - * struct drm_tegra_close_channel - parameters for the close channel IOCTL - */ -struct drm_tegra_close_channel { - /** - * @context: - * - * The application context of this channel. This is obtained from the - * DRM_TEGRA_OPEN_CHANNEL IOCTL. - */ - __u64 context; -}; - -/** - * struct drm_tegra_get_syncpt - parameters for the get syncpoint IOCTL - */ -struct drm_tegra_get_syncpt { - /** - * @context: - * - * The application context identifying the channel for which to obtain - * the syncpoint ID. - */ - __u64 context; - - /** - * @index: - * - * Index of the client syncpoint for which to obtain the ID. - */ - __u32 index; - - /** - * @id: - * - * The ID of the given syncpoint. Set by the kernel upon successful - * completion of the IOCTL. - */ - __u32 id; -}; - -/** - * struct drm_tegra_get_syncpt_base - parameters for the get wait base IOCTL - */ -struct drm_tegra_get_syncpt_base { - /** - * @context: - * - * The application context identifying for which channel to obtain the - * wait base. - */ - __u64 context; - - /** - * @syncpt: - * - * ID of the syncpoint for which to obtain the wait base. - */ - __u32 syncpt; - - /** - * @id: - * - * The ID of the wait base corresponding to the client syncpoint. Set - * by the kernel upon successful completion of the IOCTL. - */ - __u32 id; -}; - -/** - * struct drm_tegra_syncpt - syncpoint increment operation - */ -struct drm_tegra_syncpt { - /** - * @id: - * - * ID of the syncpoint to operate on. - */ - __u32 id; - - /** - * @incrs: - * - * Number of increments to perform for the syncpoint. - */ - __u32 incrs; -}; - -/** - * struct drm_tegra_cmdbuf - structure describing a command buffer - */ -struct drm_tegra_cmdbuf { - /** - * @handle: - * - * Handle to a GEM object containing the command buffer. - */ - __u32 handle; - - /** - * @offset: - * - * Offset, in bytes, into the GEM object identified by @handle at - * which the command buffer starts. - */ - __u32 offset; - - /** - * @words: - * - * Number of 32-bit words in this command buffer. - */ - __u32 words; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_reloc - GEM object relocation structure - */ -struct drm_tegra_reloc { - struct { - /** - * @cmdbuf.handle: - * - * Handle to the GEM object containing the command buffer for - * which to perform this GEM object relocation. - */ - __u32 handle; - - /** - * @cmdbuf.offset: - * - * Offset, in bytes, into the command buffer at which to - * insert the relocated address. - */ - __u32 offset; - } cmdbuf; - struct { - /** - * @target.handle: - * - * Handle to the GEM object to be relocated. - */ - __u32 handle; - - /** - * @target.offset: - * - * Offset, in bytes, into the target GEM object at which the - * relocated data starts. - */ - __u32 offset; - } target; - - /** - * @shift: - * - * The number of bits by which to shift relocated addresses. - */ - __u32 shift; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_waitchk - wait check structure - */ -struct drm_tegra_waitchk { - /** - * @handle: - * - * Handle to the GEM object containing a command stream on which to - * perform the wait check. - */ - __u32 handle; - - /** - * @offset: - * - * Offset, in bytes, of the location in the command stream to perform - * the wait check on. - */ - __u32 offset; - - /** - * @syncpt: - * - * ID of the syncpoint to wait check. - */ - __u32 syncpt; - - /** - * @thresh: - * - * Threshold value for which to check. - */ - __u32 thresh; -}; - -/** - * struct drm_tegra_submit - job submission structure - */ -struct drm_tegra_submit { - /** - * @context: - * - * The application context identifying the channel to use for the - * execution of this job. - */ - __u64 context; - - /** - * @num_syncpts: - * - * The number of syncpoints operated on by this job. This defines the - * length of the array pointed to by @syncpts. - */ - __u32 num_syncpts; - - /** - * @num_cmdbufs: - * - * The number of command buffers to execute as part of this job. This - * defines the length of the array pointed to by @cmdbufs. - */ - __u32 num_cmdbufs; - - /** - * @num_relocs: - * - * The number of relocations to perform before executing this job. - * This defines the length of the array pointed to by @relocs. - */ - __u32 num_relocs; - - /** - * @num_waitchks: - * - * The number of wait checks to perform as part of this job. This - * defines the length of the array pointed to by @waitchks. - */ - __u32 num_waitchks; - - /** - * @waitchk_mask: - * - * Bitmask of valid wait checks. - */ - __u32 waitchk_mask; - - /** - * @timeout: - * - * Timeout, in milliseconds, before this job is cancelled. - */ - __u32 timeout; - - /** - * @syncpts: - * - * A pointer to an array of &struct drm_tegra_syncpt structures that - * specify the syncpoint operations performed as part of this job. - * The number of elements in the array must be equal to the value - * given by @num_syncpts. - */ - __u64 syncpts; - - /** - * @cmdbufs: - * - * A pointer to an array of &struct drm_tegra_cmdbuf structures that - * define the command buffers to execute as part of this job. The - * number of elements in the array must be equal to the value given - * by @num_syncpts. - */ - __u64 cmdbufs; - - /** - * @relocs: - * - * A pointer to an array of &struct drm_tegra_reloc structures that - * specify the relocations that need to be performed before executing - * this job. The number of elements in the array must be equal to the - * value given by @num_relocs. - */ - __u64 relocs; - - /** - * @waitchks: - * - * A pointer to an array of &struct drm_tegra_waitchk structures that - * specify the wait checks to be performed while executing this job. - * The number of elements in the array must be equal to the value - * given by @num_waitchks. - */ - __u64 waitchks; - - /** - * @fence: - * - * The threshold of the syncpoint associated with this job after it - * has been completed. Set by the kernel upon successful completion of - * the IOCTL. This can be used with the DRM_TEGRA_SYNCPT_WAIT IOCTL to - * wait for this job to be finished. - */ - __u32 fence; - - /** - * @reserved: - * - * This field is reserved for future use. Must be 0. - */ - __u32 reserved[5]; -}; - -#define DRM_TEGRA_GEM_TILING_MODE_PITCH 0 -#define DRM_TEGRA_GEM_TILING_MODE_TILED 1 -#define DRM_TEGRA_GEM_TILING_MODE_BLOCK 2 - -/** - * struct drm_tegra_gem_set_tiling - parameters for the set tiling IOCTL - */ -struct drm_tegra_gem_set_tiling { - /** - * @handle: - * - * Handle to the GEM object for which to set the tiling parameters. - */ - __u32 handle; - - /** - * @mode: - * - * The tiling mode to set. Must be one of: - * - * DRM_TEGRA_GEM_TILING_MODE_PITCH - * pitch linear format - * - * DRM_TEGRA_GEM_TILING_MODE_TILED - * 16x16 tiling format - * - * DRM_TEGRA_GEM_TILING_MODE_BLOCK - * 16Bx2 tiling format - */ - __u32 mode; - - /** - * @value: - * - * The value to set for the tiling mode parameter. - */ - __u32 value; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_gem_get_tiling - parameters for the get tiling IOCTL - */ -struct drm_tegra_gem_get_tiling { - /** - * @handle: - * - * Handle to the GEM object for which to query the tiling parameters. - */ - __u32 handle; - - /** - * @mode: - * - * The tiling mode currently associated with the GEM object. Set by - * the kernel upon successful completion of the IOCTL. - */ - __u32 mode; - - /** - * @value: - * - * The tiling mode parameter currently associated with the GEM object. - * Set by the kernel upon successful completion of the IOCTL. - */ - __u32 value; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -#define DRM_TEGRA_GEM_BOTTOM_UP (1 << 0) -#define DRM_TEGRA_GEM_FLAGS (DRM_TEGRA_GEM_BOTTOM_UP) - -/** - * struct drm_tegra_gem_set_flags - parameters for the set flags IOCTL - */ -struct drm_tegra_gem_set_flags { - /** - * @handle: - * - * Handle to the GEM object for which to set the flags. - */ - __u32 handle; - - /** - * @flags: - * - * The flags to set for the GEM object. - */ - __u32 flags; -}; - -/** - * struct drm_tegra_gem_get_flags - parameters for the get flags IOCTL - */ -struct drm_tegra_gem_get_flags { - /** - * @handle: - * - * Handle to the GEM object for which to query the flags. - */ - __u32 handle; - - /** - * @flags: - * - * The flags currently associated with the GEM object. Set by the - * kernel upon successful completion of the IOCTL. - */ - __u32 flags; -}; - -#define DRM_TEGRA_GEM_CREATE 0x00 -#define DRM_TEGRA_GEM_MMAP 0x01 -#define DRM_TEGRA_SYNCPT_READ 0x02 -#define DRM_TEGRA_SYNCPT_INCR 0x03 -#define DRM_TEGRA_SYNCPT_WAIT 0x04 -#define DRM_TEGRA_OPEN_CHANNEL 0x05 -#define DRM_TEGRA_CLOSE_CHANNEL 0x06 -#define DRM_TEGRA_GET_SYNCPT 0x07 -#define DRM_TEGRA_SUBMIT 0x08 -#define DRM_TEGRA_GET_SYNCPT_BASE 0x09 -#define DRM_TEGRA_GEM_SET_TILING 0x0a -#define DRM_TEGRA_GEM_GET_TILING 0x0b -#define DRM_TEGRA_GEM_SET_FLAGS 0x0c -#define DRM_TEGRA_GEM_GET_FLAGS 0x0d - -#define DRM_IOCTL_TEGRA_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_CREATE, struct drm_tegra_gem_create) -#define DRM_IOCTL_TEGRA_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_MMAP, struct drm_tegra_gem_mmap) -#define DRM_IOCTL_TEGRA_SYNCPT_READ DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_READ, struct drm_tegra_syncpt_read) -#define DRM_IOCTL_TEGRA_SYNCPT_INCR DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_INCR, struct drm_tegra_syncpt_incr) -#define DRM_IOCTL_TEGRA_SYNCPT_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_WAIT, struct drm_tegra_syncpt_wait) -#define DRM_IOCTL_TEGRA_OPEN_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_OPEN_CHANNEL, struct drm_tegra_open_channel) -#define DRM_IOCTL_TEGRA_CLOSE_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_CLOSE_CHANNEL, struct drm_tegra_close_channel) -#define DRM_IOCTL_TEGRA_GET_SYNCPT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT, struct drm_tegra_get_syncpt) -#define DRM_IOCTL_TEGRA_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SUBMIT, struct drm_tegra_submit) -#define DRM_IOCTL_TEGRA_GET_SYNCPT_BASE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT_BASE, struct drm_tegra_get_syncpt_base) -#define DRM_IOCTL_TEGRA_GEM_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_TILING, struct drm_tegra_gem_set_tiling) -#define DRM_IOCTL_TEGRA_GEM_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_TILING, struct drm_tegra_gem_get_tiling) -#define DRM_IOCTL_TEGRA_GEM_SET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_FLAGS, struct drm_tegra_gem_set_flags) -#define DRM_IOCTL_TEGRA_GEM_GET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_FLAGS, struct drm_tegra_gem_get_flags) - -/* New Tegra DRM UAPI */ - -/* - * Reported by the driver in the `capabilities` field. - * - * DRM_TEGRA_CHANNEL_CAP_CACHE_COHERENT: If set, the engine is cache coherent - * with regard to the system memory. - */ -#define DRM_TEGRA_CHANNEL_CAP_CACHE_COHERENT (1 << 0) - -struct drm_tegra_channel_open { - /** - * @host1x_class: [in] - * - * Host1x class of the engine that will be programmed using this - * channel. - */ - __u32 host1x_class; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * @context: [out] - * - * Opaque identifier corresponding to the opened channel. - */ - __u32 context; - - /** - * @version: [out] - * - * Version of the engine hardware. This can be used by userspace - * to determine how the engine needs to be programmed. - */ - __u32 version; - - /** - * @capabilities: [out] - * - * Flags describing the hardware capabilities. - */ - __u32 capabilities; - __u32 padding; -}; - -struct drm_tegra_channel_close { - /** - * @context: [in] - * - * Identifier of the channel to close. - */ - __u32 context; - __u32 padding; -}; - -/* - * Mapping flags that can be used to influence how the mapping is created. - * - * DRM_TEGRA_CHANNEL_MAP_READ: create mapping that allows HW read access - * DRM_TEGRA_CHANNEL_MAP_WRITE: create mapping that allows HW write access - */ -#define DRM_TEGRA_CHANNEL_MAP_READ (1 << 0) -#define DRM_TEGRA_CHANNEL_MAP_WRITE (1 << 1) -#define DRM_TEGRA_CHANNEL_MAP_READ_WRITE (DRM_TEGRA_CHANNEL_MAP_READ | \ - DRM_TEGRA_CHANNEL_MAP_WRITE) - -struct drm_tegra_channel_map { - /** - * @context: [in] - * - * Identifier of the channel to which make memory available for. - */ - __u32 context; - - /** - * @handle: [in] - * - * GEM handle of the memory to map. - */ - __u32 handle; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * @mapping: [out] - * - * Identifier corresponding to the mapping, to be used for - * relocations or unmapping later. - */ - __u32 mapping; -}; - -struct drm_tegra_channel_unmap { - /** - * @context: [in] - * - * Channel identifier of the channel to unmap memory from. - */ - __u32 context; - - /** - * @mapping: [in] - * - * Mapping identifier of the memory mapping to unmap. - */ - __u32 mapping; -}; - -/* Submission */ - -/** - * Specify that bit 39 of the patched-in address should be set to switch - * swizzling between Tegra and non-Tegra sector layout on systems that store - * surfaces in system memory in non-Tegra sector layout. - */ -#define DRM_TEGRA_SUBMIT_RELOC_SECTOR_LAYOUT (1 << 0) - -struct drm_tegra_submit_buf { - /** - * @mapping: [in] - * - * Identifier of the mapping to use in the submission. - */ - __u32 mapping; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * Information for relocation patching. - */ - struct { - /** - * @target_offset: [in] - * - * Offset from the start of the mapping of the data whose - * address is to be patched into the gather. - */ - __u64 target_offset; - - /** - * @gather_offset_words: [in] - * - * Offset in words from the start of the gather data to - * where the address should be patched into. - */ - __u32 gather_offset_words; - - /** - * @shift: [in] - * - * Number of bits the address should be shifted right before - * patching in. - */ - __u32 shift; - } reloc; -}; - -/** - * Execute `words` words of Host1x opcodes specified in the `gather_data_ptr` - * buffer. Each GATHER_UPTR command uses successive words from the buffer. - */ -#define DRM_TEGRA_SUBMIT_CMD_GATHER_UPTR 0 -/** - * Wait for a syncpoint to reach a value before continuing with further - * commands. - */ -#define DRM_TEGRA_SUBMIT_CMD_WAIT_SYNCPT 1 -/** - * Wait for a syncpoint to reach a value before continuing with further - * commands. The threshold is calculated relative to the start of the job. - */ -#define DRM_TEGRA_SUBMIT_CMD_WAIT_SYNCPT_RELATIVE 2 - -struct drm_tegra_submit_cmd_gather_uptr { - __u32 words; - __u32 reserved[3]; -}; - -struct drm_tegra_submit_cmd_wait_syncpt { - __u32 id; - __u32 value; - __u32 reserved[2]; -}; - -struct drm_tegra_submit_cmd { - /** - * @type: [in] - * - * Command type to execute. One of the DRM_TEGRA_SUBMIT_CMD* - * defines. - */ - __u32 type; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - union { - struct drm_tegra_submit_cmd_gather_uptr gather_uptr; - struct drm_tegra_submit_cmd_wait_syncpt wait_syncpt; - __u32 reserved[4]; - }; -}; - -struct drm_tegra_submit_syncpt { - /** - * @id: [in] - * - * ID of the syncpoint that the job will increment. - */ - __u32 id; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * @increments: [in] - * - * Number of times the job will increment this syncpoint. - */ - __u32 increments; - - /** - * @value: [out] - * - * Value the syncpoint will have once the job has completed all - * its specified syncpoint increments. - * - * Note that the kernel may increment the syncpoint before or after - * the job. These increments are not reflected in this field. - * - * If the job hangs or times out, not all of the increments may - * get executed. - */ - __u32 value; -}; - -struct drm_tegra_channel_submit { - /** - * @context: [in] - * - * Identifier of the channel to submit this job to. - */ - __u32 context; - - /** - * @num_bufs: [in] - * - * Number of elements in the `bufs_ptr` array. - */ - __u32 num_bufs; - - /** - * @num_cmds: [in] - * - * Number of elements in the `cmds_ptr` array. - */ - __u32 num_cmds; - - /** - * @gather_data_words: [in] - * - * Number of 32-bit words in the `gather_data_ptr` array. - */ - __u32 gather_data_words; - - /** - * @bufs_ptr: [in] - * - * Pointer to an array of drm_tegra_submit_buf structures. - */ - __u64 bufs_ptr; - - /** - * @cmds_ptr: [in] - * - * Pointer to an array of drm_tegra_submit_cmd structures. - */ - __u64 cmds_ptr; - - /** - * @gather_data_ptr: [in] - * - * Pointer to an array of Host1x opcodes to be used by GATHER_UPTR - * commands. - */ - __u64 gather_data_ptr; - - /** - * @syncobj_in: [in] - * - * Handle for DRM syncobj that will be waited before submission. - * Ignored if zero. - */ - __u32 syncobj_in; - - /** - * @syncobj_out: [in] - * - * Handle for DRM syncobj that will have its fence replaced with - * the job's completion fence. Ignored if zero. - */ - __u32 syncobj_out; - - /** - * @syncpt_incr: [in,out] - * - * Information about the syncpoint the job will increment. - */ - struct drm_tegra_submit_syncpt syncpt; -}; - -struct drm_tegra_syncpoint_allocate { - /** - * @id: [out] - * - * ID of allocated syncpoint. - */ - __u32 id; - __u32 padding; -}; - -struct drm_tegra_syncpoint_free { - /** - * @id: [in] - * - * ID of syncpoint to free. - */ - __u32 id; - __u32 padding; -}; - -struct drm_tegra_syncpoint_wait { - /** - * @timeout: [in] - * - * Absolute timestamp at which the wait will time out. - */ - __s64 timeout_ns; - - /** - * @id: [in] - * - * ID of syncpoint to wait on. - */ - __u32 id; - - /** - * @threshold: [in] - * - * Threshold to wait for. - */ - __u32 threshold; - - /** - * @value: [out] - * - * Value of the syncpoint upon wait completion. - */ - __u32 value; - - __u32 padding; -}; - -#define DRM_IOCTL_TEGRA_CHANNEL_OPEN DRM_IOWR(DRM_COMMAND_BASE + 0x10, struct drm_tegra_channel_open) -#define DRM_IOCTL_TEGRA_CHANNEL_CLOSE DRM_IOWR(DRM_COMMAND_BASE + 0x11, struct drm_tegra_channel_close) -#define DRM_IOCTL_TEGRA_CHANNEL_MAP DRM_IOWR(DRM_COMMAND_BASE + 0x12, struct drm_tegra_channel_map) -#define DRM_IOCTL_TEGRA_CHANNEL_UNMAP DRM_IOWR(DRM_COMMAND_BASE + 0x13, struct drm_tegra_channel_unmap) -#define DRM_IOCTL_TEGRA_CHANNEL_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + 0x14, struct drm_tegra_channel_submit) - -#define DRM_IOCTL_TEGRA_SYNCPOINT_ALLOCATE DRM_IOWR(DRM_COMMAND_BASE + 0x20, struct drm_tegra_syncpoint_allocate) -#define DRM_IOCTL_TEGRA_SYNCPOINT_FREE DRM_IOWR(DRM_COMMAND_BASE + 0x21, struct drm_tegra_syncpoint_free) -#define DRM_IOCTL_TEGRA_SYNCPOINT_WAIT DRM_IOWR(DRM_COMMAND_BASE + 0x22, struct drm_tegra_syncpoint_wait) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86/include/libdrm/vc4_drm.h b/prebuilts/x86/include/libdrm/vc4_drm.h deleted file mode 100644 index 31f50de..0000000 --- a/prebuilts/x86/include/libdrm/vc4_drm.h +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright © 2014-2015 Broadcom - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef _VC4_DRM_H_ -#define _VC4_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_VC4_SUBMIT_CL 0x00 -#define DRM_VC4_WAIT_SEQNO 0x01 -#define DRM_VC4_WAIT_BO 0x02 -#define DRM_VC4_CREATE_BO 0x03 -#define DRM_VC4_MMAP_BO 0x04 -#define DRM_VC4_CREATE_SHADER_BO 0x05 -#define DRM_VC4_GET_HANG_STATE 0x06 -#define DRM_VC4_GET_PARAM 0x07 -#define DRM_VC4_SET_TILING 0x08 -#define DRM_VC4_GET_TILING 0x09 -#define DRM_VC4_LABEL_BO 0x0a -#define DRM_VC4_GEM_MADVISE 0x0b -#define DRM_VC4_PERFMON_CREATE 0x0c -#define DRM_VC4_PERFMON_DESTROY 0x0d -#define DRM_VC4_PERFMON_GET_VALUES 0x0e - -#define DRM_IOCTL_VC4_SUBMIT_CL DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SUBMIT_CL, struct drm_vc4_submit_cl) -#define DRM_IOCTL_VC4_WAIT_SEQNO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_SEQNO, struct drm_vc4_wait_seqno) -#define DRM_IOCTL_VC4_WAIT_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_BO, struct drm_vc4_wait_bo) -#define DRM_IOCTL_VC4_CREATE_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_CREATE_BO, struct drm_vc4_create_bo) -#define DRM_IOCTL_VC4_MMAP_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_MMAP_BO, struct drm_vc4_mmap_bo) -#define DRM_IOCTL_VC4_CREATE_SHADER_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_CREATE_SHADER_BO, struct drm_vc4_create_shader_bo) -#define DRM_IOCTL_VC4_GET_HANG_STATE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_HANG_STATE, struct drm_vc4_get_hang_state) -#define DRM_IOCTL_VC4_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_PARAM, struct drm_vc4_get_param) -#define DRM_IOCTL_VC4_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SET_TILING, struct drm_vc4_set_tiling) -#define DRM_IOCTL_VC4_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_TILING, struct drm_vc4_get_tiling) -#define DRM_IOCTL_VC4_LABEL_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_LABEL_BO, struct drm_vc4_label_bo) -#define DRM_IOCTL_VC4_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GEM_MADVISE, struct drm_vc4_gem_madvise) -#define DRM_IOCTL_VC4_PERFMON_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_CREATE, struct drm_vc4_perfmon_create) -#define DRM_IOCTL_VC4_PERFMON_DESTROY DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_DESTROY, struct drm_vc4_perfmon_destroy) -#define DRM_IOCTL_VC4_PERFMON_GET_VALUES DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_GET_VALUES, struct drm_vc4_perfmon_get_values) - -struct drm_vc4_submit_rcl_surface { - __u32 hindex; /* Handle index, or ~0 if not present. */ - __u32 offset; /* Offset to start of buffer. */ - /* - * Bits for either render config (color_write) or load/store packet. - * Bits should all be 0 for MSAA load/stores. - */ - __u16 bits; - -#define VC4_SUBMIT_RCL_SURFACE_READ_IS_FULL_RES (1 << 0) - __u16 flags; -}; - -/** - * struct drm_vc4_submit_cl - ioctl argument for submitting commands to the 3D - * engine. - * - * Drivers typically use GPU BOs to store batchbuffers / command lists and - * their associated state. However, because the VC4 lacks an MMU, we have to - * do validation of memory accesses by the GPU commands. If we were to store - * our commands in BOs, we'd need to do uncached readback from them to do the - * validation process, which is too expensive. Instead, userspace accumulates - * commands and associated state in plain memory, then the kernel copies the - * data to its own address space, and then validates and stores it in a GPU - * BO. - */ -struct drm_vc4_submit_cl { - /* Pointer to the binner command list. - * - * This is the first set of commands executed, which runs the - * coordinate shader to determine where primitives land on the screen, - * then writes out the state updates and draw calls necessary per tile - * to the tile allocation BO. - */ - __u64 bin_cl; - - /* Pointer to the shader records. - * - * Shader records are the structures read by the hardware that contain - * pointers to uniforms, shaders, and vertex attributes. The - * reference to the shader record has enough information to determine - * how many pointers are necessary (fixed number for shaders/uniforms, - * and an attribute count), so those BO indices into bo_handles are - * just stored as __u32s before each shader record passed in. - */ - __u64 shader_rec; - - /* Pointer to uniform data and texture handles for the textures - * referenced by the shader. - * - * For each shader state record, there is a set of uniform data in the - * order referenced by the record (FS, VS, then CS). Each set of - * uniform data has a __u32 index into bo_handles per texture - * sample operation, in the order the QPU_W_TMUn_S writes appear in - * the program. Following the texture BO handle indices is the actual - * uniform data. - * - * The individual uniform state blocks don't have sizes passed in, - * because the kernel has to determine the sizes anyway during shader - * code validation. - */ - __u64 uniforms; - __u64 bo_handles; - - /* Size in bytes of the binner command list. */ - __u32 bin_cl_size; - /* Size in bytes of the set of shader records. */ - __u32 shader_rec_size; - /* Number of shader records. - * - * This could just be computed from the contents of shader_records and - * the address bits of references to them from the bin CL, but it - * keeps the kernel from having to resize some allocations it makes. - */ - __u32 shader_rec_count; - /* Size in bytes of the uniform state. */ - __u32 uniforms_size; - - /* Number of BO handles passed in (size is that times 4). */ - __u32 bo_handle_count; - - /* RCL setup: */ - __u16 width; - __u16 height; - __u8 min_x_tile; - __u8 min_y_tile; - __u8 max_x_tile; - __u8 max_y_tile; - struct drm_vc4_submit_rcl_surface color_read; - struct drm_vc4_submit_rcl_surface color_write; - struct drm_vc4_submit_rcl_surface zs_read; - struct drm_vc4_submit_rcl_surface zs_write; - struct drm_vc4_submit_rcl_surface msaa_color_write; - struct drm_vc4_submit_rcl_surface msaa_zs_write; - __u32 clear_color[2]; - __u32 clear_z; - __u8 clear_s; - - __u32 pad:24; - -#define VC4_SUBMIT_CL_USE_CLEAR_COLOR (1 << 0) -/* By default, the kernel gets to choose the order that the tiles are - * rendered in. If this is set, then the tiles will be rendered in a - * raster order, with the right-to-left vs left-to-right and - * top-to-bottom vs bottom-to-top dictated by - * VC4_SUBMIT_CL_RCL_ORDER_INCREASING_*. This allows overlapping - * blits to be implemented using the 3D engine. - */ -#define VC4_SUBMIT_CL_FIXED_RCL_ORDER (1 << 1) -#define VC4_SUBMIT_CL_RCL_ORDER_INCREASING_X (1 << 2) -#define VC4_SUBMIT_CL_RCL_ORDER_INCREASING_Y (1 << 3) - __u32 flags; - - /* Returned value of the seqno of this render job (for the - * wait ioctl). - */ - __u64 seqno; - - /* ID of the perfmon to attach to this job. 0 means no perfmon. */ - __u32 perfmonid; - - /* Syncobj handle to wait on. If set, processing of this render job - * will not start until the syncobj is signaled. 0 means ignore. - */ - __u32 in_sync; - - /* Syncobj handle to export fence to. If set, the fence in the syncobj - * will be replaced with a fence that signals upon completion of this - * render job. 0 means ignore. - */ - __u32 out_sync; - - __u32 pad2; -}; - -/** - * struct drm_vc4_wait_seqno - ioctl argument for waiting for - * DRM_VC4_SUBMIT_CL completion using its returned seqno. - * - * timeout_ns is the timeout in nanoseconds, where "0" means "don't - * block, just return the status." - */ -struct drm_vc4_wait_seqno { - __u64 seqno; - __u64 timeout_ns; -}; - -/** - * struct drm_vc4_wait_bo - ioctl argument for waiting for - * completion of the last DRM_VC4_SUBMIT_CL on a BO. - * - * This is useful for cases where multiple processes might be - * rendering to a BO and you want to wait for all rendering to be - * completed. - */ -struct drm_vc4_wait_bo { - __u32 handle; - __u32 pad; - __u64 timeout_ns; -}; - -/** - * struct drm_vc4_create_bo - ioctl argument for creating VC4 BOs. - * - * There are currently no values for the flags argument, but it may be - * used in a future extension. - */ -struct drm_vc4_create_bo { - __u32 size; - __u32 flags; - /** Returned GEM handle for the BO. */ - __u32 handle; - __u32 pad; -}; - -/** - * struct drm_vc4_mmap_bo - ioctl argument for mapping VC4 BOs. - * - * This doesn't actually perform an mmap. Instead, it returns the - * offset you need to use in an mmap on the DRM device node. This - * means that tools like valgrind end up knowing about the mapped - * memory. - * - * There are currently no values for the flags argument, but it may be - * used in a future extension. - */ -struct drm_vc4_mmap_bo { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 flags; - /** offset into the drm node to use for subsequent mmap call. */ - __u64 offset; -}; - -/** - * struct drm_vc4_create_shader_bo - ioctl argument for creating VC4 - * shader BOs. - * - * Since allowing a shader to be overwritten while it's also being - * executed from would allow privlege escalation, shaders must be - * created using this ioctl, and they can't be mmapped later. - */ -struct drm_vc4_create_shader_bo { - /* Size of the data argument. */ - __u32 size; - /* Flags, currently must be 0. */ - __u32 flags; - - /* Pointer to the data. */ - __u64 data; - - /** Returned GEM handle for the BO. */ - __u32 handle; - /* Pad, must be 0. */ - __u32 pad; -}; - -struct drm_vc4_get_hang_state_bo { - __u32 handle; - __u32 paddr; - __u32 size; - __u32 pad; -}; - -/** - * struct drm_vc4_hang_state - ioctl argument for collecting state - * from a GPU hang for analysis. -*/ -struct drm_vc4_get_hang_state { - /** Pointer to array of struct drm_vc4_get_hang_state_bo. */ - __u64 bo; - /** - * On input, the size of the bo array. Output is the number - * of bos to be returned. - */ - __u32 bo_count; - - __u32 start_bin, start_render; - - __u32 ct0ca, ct0ea; - __u32 ct1ca, ct1ea; - __u32 ct0cs, ct1cs; - __u32 ct0ra0, ct1ra0; - - __u32 bpca, bpcs; - __u32 bpoa, bpos; - - __u32 vpmbase; - - __u32 dbge; - __u32 fdbgo; - __u32 fdbgb; - __u32 fdbgr; - __u32 fdbgs; - __u32 errstat; - - /* Pad that we may save more registers into in the future. */ - __u32 pad[16]; -}; - -#define DRM_VC4_PARAM_V3D_IDENT0 0 -#define DRM_VC4_PARAM_V3D_IDENT1 1 -#define DRM_VC4_PARAM_V3D_IDENT2 2 -#define DRM_VC4_PARAM_SUPPORTS_BRANCHES 3 -#define DRM_VC4_PARAM_SUPPORTS_ETC1 4 -#define DRM_VC4_PARAM_SUPPORTS_THREADED_FS 5 -#define DRM_VC4_PARAM_SUPPORTS_FIXED_RCL_ORDER 6 -#define DRM_VC4_PARAM_SUPPORTS_MADVISE 7 -#define DRM_VC4_PARAM_SUPPORTS_PERFMON 8 - -struct drm_vc4_get_param { - __u32 param; - __u32 pad; - __u64 value; -}; - -struct drm_vc4_get_tiling { - __u32 handle; - __u32 flags; - __u64 modifier; -}; - -struct drm_vc4_set_tiling { - __u32 handle; - __u32 flags; - __u64 modifier; -}; - -/** - * struct drm_vc4_label_bo - Attach a name to a BO for debug purposes. - */ -struct drm_vc4_label_bo { - __u32 handle; - __u32 len; - __u64 name; -}; - -/* - * States prefixed with '__' are internal states and cannot be passed to the - * DRM_IOCTL_VC4_GEM_MADVISE ioctl. - */ -#define VC4_MADV_WILLNEED 0 -#define VC4_MADV_DONTNEED 1 -#define __VC4_MADV_PURGED 2 -#define __VC4_MADV_NOTSUPP 3 - -struct drm_vc4_gem_madvise { - __u32 handle; - __u32 madv; - __u32 retained; - __u32 pad; -}; - -enum { - VC4_PERFCNT_FEP_VALID_PRIMS_NO_RENDER, - VC4_PERFCNT_FEP_VALID_PRIMS_RENDER, - VC4_PERFCNT_FEP_CLIPPED_QUADS, - VC4_PERFCNT_FEP_VALID_QUADS, - VC4_PERFCNT_TLB_QUADS_NOT_PASSING_STENCIL, - VC4_PERFCNT_TLB_QUADS_NOT_PASSING_Z_AND_STENCIL, - VC4_PERFCNT_TLB_QUADS_PASSING_Z_AND_STENCIL, - VC4_PERFCNT_TLB_QUADS_ZERO_COVERAGE, - VC4_PERFCNT_TLB_QUADS_NON_ZERO_COVERAGE, - VC4_PERFCNT_TLB_QUADS_WRITTEN_TO_COLOR_BUF, - VC4_PERFCNT_PLB_PRIMS_OUTSIDE_VIEWPORT, - VC4_PERFCNT_PLB_PRIMS_NEED_CLIPPING, - VC4_PERFCNT_PSE_PRIMS_REVERSED, - VC4_PERFCNT_QPU_TOTAL_IDLE_CYCLES, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_VERTEX_COORD_SHADING, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_FRAGMENT_SHADING, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_EXEC_VALID_INST, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_TMUS, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_SCOREBOARD, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_VARYINGS, - VC4_PERFCNT_QPU_TOTAL_INST_CACHE_HIT, - VC4_PERFCNT_QPU_TOTAL_INST_CACHE_MISS, - VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_HIT, - VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_MISS, - VC4_PERFCNT_TMU_TOTAL_TEXT_QUADS_PROCESSED, - VC4_PERFCNT_TMU_TOTAL_TEXT_CACHE_MISS, - VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VDW_STALLED, - VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VCD_STALLED, - VC4_PERFCNT_L2C_TOTAL_L2_CACHE_HIT, - VC4_PERFCNT_L2C_TOTAL_L2_CACHE_MISS, - VC4_PERFCNT_NUM_EVENTS, -}; - -#define DRM_VC4_MAX_PERF_COUNTERS 16 - -struct drm_vc4_perfmon_create { - __u32 id; - __u32 ncounters; - __u8 events[DRM_VC4_MAX_PERF_COUNTERS]; -}; - -struct drm_vc4_perfmon_destroy { - __u32 id; -}; - -/* - * Returns the values of the performance counters tracked by this - * perfmon (as an array of ncounters u64 values). - * - * No implicit synchronization is performed, so the user has to - * guarantee that any jobs using this perfmon have already been - * completed (probably by blocking on the seqno returned by the - * last exec that used the perfmon). - */ -struct drm_vc4_perfmon_get_values { - __u32 id; - __u64 values_ptr; -}; - -#if defined(__cplusplus) -} -#endif - -#endif /* _VC4_DRM_H_ */ diff --git a/prebuilts/x86/include/libdrm/via_drm.h b/prebuilts/x86/include/libdrm/via_drm.h deleted file mode 100644 index 8b69e81..0000000 --- a/prebuilts/x86/include/libdrm/via_drm.h +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. - * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sub license, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ -#ifndef _VIA_DRM_H_ -#define _VIA_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: These defines must be the same as what the Xserver uses. - * if you change them, you must change the defines in the Xserver. - */ - -#ifndef _VIA_DEFINES_ -#define _VIA_DEFINES_ - -#include "via_drmclient.h" - -#define VIA_NR_SAREA_CLIPRECTS 8 -#define VIA_NR_XVMC_PORTS 10 -#define VIA_NR_XVMC_LOCKS 5 -#define VIA_MAX_CACHELINE_SIZE 64 -#define XVMCLOCKPTR(saPriv,lockNo) \ - ((__volatile__ struct drm_hw_lock *)(((((unsigned long) (saPriv)->XvMCLockArea) + \ - (VIA_MAX_CACHELINE_SIZE - 1)) & \ - ~(VIA_MAX_CACHELINE_SIZE - 1)) + \ - VIA_MAX_CACHELINE_SIZE*(lockNo))) - -/* Each region is a minimum of 64k, and there are at most 64 of them. - */ -#define VIA_NR_TEX_REGIONS 64 -#define VIA_LOG_MIN_TEX_REGION_SIZE 16 -#endif - -#define VIA_UPLOAD_TEX0IMAGE 0x1 /* handled clientside */ -#define VIA_UPLOAD_TEX1IMAGE 0x2 /* handled clientside */ -#define VIA_UPLOAD_CTX 0x4 -#define VIA_UPLOAD_BUFFERS 0x8 -#define VIA_UPLOAD_TEX0 0x10 -#define VIA_UPLOAD_TEX1 0x20 -#define VIA_UPLOAD_CLIPRECTS 0x40 -#define VIA_UPLOAD_ALL 0xff - -/* VIA specific ioctls */ -#define DRM_VIA_ALLOCMEM 0x00 -#define DRM_VIA_FREEMEM 0x01 -#define DRM_VIA_AGP_INIT 0x02 -#define DRM_VIA_FB_INIT 0x03 -#define DRM_VIA_MAP_INIT 0x04 -#define DRM_VIA_DEC_FUTEX 0x05 -#define NOT_USED -#define DRM_VIA_DMA_INIT 0x07 -#define DRM_VIA_CMDBUFFER 0x08 -#define DRM_VIA_FLUSH 0x09 -#define DRM_VIA_PCICMD 0x0a -#define DRM_VIA_CMDBUF_SIZE 0x0b -#define NOT_USED -#define DRM_VIA_WAIT_IRQ 0x0d -#define DRM_VIA_DMA_BLIT 0x0e -#define DRM_VIA_BLIT_SYNC 0x0f - -#define DRM_IOCTL_VIA_ALLOCMEM DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_ALLOCMEM, drm_via_mem_t) -#define DRM_IOCTL_VIA_FREEMEM DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_FREEMEM, drm_via_mem_t) -#define DRM_IOCTL_VIA_AGP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_AGP_INIT, drm_via_agp_t) -#define DRM_IOCTL_VIA_FB_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_FB_INIT, drm_via_fb_t) -#define DRM_IOCTL_VIA_MAP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_MAP_INIT, drm_via_init_t) -#define DRM_IOCTL_VIA_DEC_FUTEX DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_DEC_FUTEX, drm_via_futex_t) -#define DRM_IOCTL_VIA_DMA_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_DMA_INIT, drm_via_dma_init_t) -#define DRM_IOCTL_VIA_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_CMDBUFFER, drm_via_cmdbuffer_t) -#define DRM_IOCTL_VIA_FLUSH DRM_IO( DRM_COMMAND_BASE + DRM_VIA_FLUSH) -#define DRM_IOCTL_VIA_PCICMD DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_PCICMD, drm_via_cmdbuffer_t) -#define DRM_IOCTL_VIA_CMDBUF_SIZE DRM_IOWR( DRM_COMMAND_BASE + DRM_VIA_CMDBUF_SIZE, \ - drm_via_cmdbuf_size_t) -#define DRM_IOCTL_VIA_WAIT_IRQ DRM_IOWR( DRM_COMMAND_BASE + DRM_VIA_WAIT_IRQ, drm_via_irqwait_t) -#define DRM_IOCTL_VIA_DMA_BLIT DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_DMA_BLIT, drm_via_dmablit_t) -#define DRM_IOCTL_VIA_BLIT_SYNC DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_BLIT_SYNC, drm_via_blitsync_t) - -/* Indices into buf.Setup where various bits of state are mirrored per - * context and per buffer. These can be fired at the card as a unit, - * or in a piecewise fashion as required. - */ - -#define VIA_TEX_SETUP_SIZE 8 - -/* Flags for clear ioctl - */ -#define VIA_FRONT 0x1 -#define VIA_BACK 0x2 -#define VIA_DEPTH 0x4 -#define VIA_STENCIL 0x8 -#define VIA_MEM_VIDEO 0 /* matches drm constant */ -#define VIA_MEM_AGP 1 /* matches drm constant */ -#define VIA_MEM_SYSTEM 2 -#define VIA_MEM_MIXED 3 -#define VIA_MEM_UNKNOWN 4 - -typedef struct { - __u32 offset; - __u32 size; -} drm_via_agp_t; - -typedef struct { - __u32 offset; - __u32 size; -} drm_via_fb_t; - -typedef struct { - __u32 context; - __u32 type; - __u32 size; - unsigned long index; - unsigned long offset; -} drm_via_mem_t; - -typedef struct _drm_via_init { - enum { - VIA_INIT_MAP = 0x01, - VIA_CLEANUP_MAP = 0x02 - } func; - - unsigned long sarea_priv_offset; - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long agpAddr; -} drm_via_init_t; - -typedef struct _drm_via_futex { - enum { - VIA_FUTEX_WAIT = 0x00, - VIA_FUTEX_WAKE = 0X01 - } func; - __u32 ms; - __u32 lock; - __u32 val; -} drm_via_futex_t; - -typedef struct _drm_via_dma_init { - enum { - VIA_INIT_DMA = 0x01, - VIA_CLEANUP_DMA = 0x02, - VIA_DMA_INITIALIZED = 0x03 - } func; - - unsigned long offset; - unsigned long size; - unsigned long reg_pause_addr; -} drm_via_dma_init_t; - -typedef struct _drm_via_cmdbuffer { - char *buf; - unsigned long size; -} drm_via_cmdbuffer_t; - -/* Warning: If you change the SAREA structure you must change the Xserver - * structure as well */ - -typedef struct _drm_via_tex_region { - unsigned char next, prev; /* indices to form a circular LRU */ - unsigned char inUse; /* owned by a client, or free? */ - int age; /* tracked by clients to update local LRU's */ -} drm_via_tex_region_t; - -typedef struct _drm_via_sarea { - unsigned int dirty; - unsigned int nbox; - struct drm_clip_rect boxes[VIA_NR_SAREA_CLIPRECTS]; - drm_via_tex_region_t texList[VIA_NR_TEX_REGIONS + 1]; - int texAge; /* last time texture was uploaded */ - int ctxOwner; /* last context to upload state */ - int vertexPrim; - - /* - * Below is for XvMC. - * We want the lock integers alone on, and aligned to, a cache line. - * Therefore this somewhat strange construct. - */ - - char XvMCLockArea[VIA_MAX_CACHELINE_SIZE * (VIA_NR_XVMC_LOCKS + 1)]; - - unsigned int XvMCDisplaying[VIA_NR_XVMC_PORTS]; - unsigned int XvMCSubPicOn[VIA_NR_XVMC_PORTS]; - unsigned int XvMCCtxNoGrabbed; /* Last context to hold decoder */ - - /* Used by the 3d driver only at this point, for pageflipping: - */ - unsigned int pfCurrentOffset; -} drm_via_sarea_t; - -typedef struct _drm_via_cmdbuf_size { - enum { - VIA_CMDBUF_SPACE = 0x01, - VIA_CMDBUF_LAG = 0x02 - } func; - int wait; - __u32 size; -} drm_via_cmdbuf_size_t; - -typedef enum { - VIA_IRQ_ABSOLUTE = 0x0, - VIA_IRQ_RELATIVE = 0x1, - VIA_IRQ_SIGNAL = 0x10000000, - VIA_IRQ_FORCE_SEQUENCE = 0x20000000 -} via_irq_seq_type_t; - -#define VIA_IRQ_FLAGS_MASK 0xF0000000 - -enum drm_via_irqs { - drm_via_irq_hqv0 = 0, - drm_via_irq_hqv1, - drm_via_irq_dma0_dd, - drm_via_irq_dma0_td, - drm_via_irq_dma1_dd, - drm_via_irq_dma1_td, - drm_via_irq_num -}; - -struct drm_via_wait_irq_request { - unsigned irq; - via_irq_seq_type_t type; - __u32 sequence; - __u32 signal; -}; - -typedef union drm_via_irqwait { - struct drm_via_wait_irq_request request; - struct drm_wait_vblank_reply reply; -} drm_via_irqwait_t; - -typedef struct drm_via_blitsync { - __u32 sync_handle; - unsigned engine; -} drm_via_blitsync_t; - -/* - * Below,"flags" is currently unused but will be used for possible future - * extensions like kernel space bounce buffers for bad alignments and - * blit engine busy-wait polling for better latency in the absence of - * interrupts. - */ - -typedef struct drm_via_dmablit { - __u32 num_lines; - __u32 line_length; - - __u32 fb_addr; - __u32 fb_stride; - - unsigned char *mem_addr; - __u32 mem_stride; - - __u32 flags; - int to_fb; - - drm_via_blitsync_t sync; -} drm_via_dmablit_t; - -#if defined(__cplusplus) -} -#endif - -#endif /* _VIA_DRM_H_ */ diff --git a/prebuilts/x86/include/libdrm/virtgpu_drm.h b/prebuilts/x86/include/libdrm/virtgpu_drm.h deleted file mode 100644 index f06a789..0000000 --- a/prebuilts/x86/include/libdrm/virtgpu_drm.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright 2013 Red Hat - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef VIRTGPU_DRM_H -#define VIRTGPU_DRM_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints. - * - * Do not use pointers, use __u64 instead for 32 bit / 64 bit user/kernel - * compatibility Keep fields aligned to their size - */ - -#define DRM_VIRTGPU_MAP 0x01 -#define DRM_VIRTGPU_EXECBUFFER 0x02 -#define DRM_VIRTGPU_GETPARAM 0x03 -#define DRM_VIRTGPU_RESOURCE_CREATE 0x04 -#define DRM_VIRTGPU_RESOURCE_INFO 0x05 -#define DRM_VIRTGPU_TRANSFER_FROM_HOST 0x06 -#define DRM_VIRTGPU_TRANSFER_TO_HOST 0x07 -#define DRM_VIRTGPU_WAIT 0x08 -#define DRM_VIRTGPU_GET_CAPS 0x09 - -#define VIRTGPU_EXECBUF_FENCE_FD_IN 0x01 -#define VIRTGPU_EXECBUF_FENCE_FD_OUT 0x02 -#define VIRTGPU_EXECBUF_FLAGS (\ - VIRTGPU_EXECBUF_FENCE_FD_IN |\ - VIRTGPU_EXECBUF_FENCE_FD_OUT |\ - 0) - -struct drm_virtgpu_map { - __u64 offset; /* use for mmap system call */ - __u32 handle; - __u32 pad; -}; - -struct drm_virtgpu_execbuffer { - __u32 flags; - __u32 size; - __u64 command; /* void* */ - __u64 bo_handles; - __u32 num_bo_handles; - __s32 fence_fd; /* in/out fence fd (see VIRTGPU_EXECBUF_FENCE_FD_IN/OUT) */ -}; - -#define VIRTGPU_PARAM_3D_FEATURES 1 /* do we have 3D features in the hw */ -#define VIRTGPU_PARAM_CAPSET_QUERY_FIX 2 /* do we have the capset fix */ - -struct drm_virtgpu_getparam { - __u64 param; - __u64 value; -}; - -/* NO_BO flags? NO resource flag? */ -/* resource flag for y_0_top */ -struct drm_virtgpu_resource_create { - __u32 target; - __u32 format; - __u32 bind; - __u32 width; - __u32 height; - __u32 depth; - __u32 array_size; - __u32 last_level; - __u32 nr_samples; - __u32 flags; - __u32 bo_handle; /* if this is set - recreate a new resource attached to this bo ? */ - __u32 res_handle; /* returned by kernel */ - __u32 size; /* validate transfer in the host */ - __u32 stride; /* validate transfer in the host */ -}; - -struct drm_virtgpu_resource_info { - __u32 bo_handle; - __u32 res_handle; - __u32 size; - __u32 stride; -}; - -struct drm_virtgpu_3d_box { - __u32 x; - __u32 y; - __u32 z; - __u32 w; - __u32 h; - __u32 d; -}; - -struct drm_virtgpu_3d_transfer_to_host { - __u32 bo_handle; - struct drm_virtgpu_3d_box box; - __u32 level; - __u32 offset; -}; - -struct drm_virtgpu_3d_transfer_from_host { - __u32 bo_handle; - struct drm_virtgpu_3d_box box; - __u32 level; - __u32 offset; -}; - -#define VIRTGPU_WAIT_NOWAIT 1 /* like it */ -struct drm_virtgpu_3d_wait { - __u32 handle; /* 0 is an invalid handle */ - __u32 flags; -}; - -struct drm_virtgpu_get_caps { - __u32 cap_set_id; - __u32 cap_set_ver; - __u64 addr; - __u32 size; - __u32 pad; -}; - -#define DRM_IOCTL_VIRTGPU_MAP \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_MAP, struct drm_virtgpu_map) - -#define DRM_IOCTL_VIRTGPU_EXECBUFFER \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_EXECBUFFER,\ - struct drm_virtgpu_execbuffer) - -#define DRM_IOCTL_VIRTGPU_GETPARAM \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GETPARAM,\ - struct drm_virtgpu_getparam) - -#define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE, \ - struct drm_virtgpu_resource_create) - -#define DRM_IOCTL_VIRTGPU_RESOURCE_INFO \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_INFO, \ - struct drm_virtgpu_resource_info) - -#define DRM_IOCTL_VIRTGPU_TRANSFER_FROM_HOST \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_TRANSFER_FROM_HOST, \ - struct drm_virtgpu_3d_transfer_from_host) - -#define DRM_IOCTL_VIRTGPU_TRANSFER_TO_HOST \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_TRANSFER_TO_HOST, \ - struct drm_virtgpu_3d_transfer_to_host) - -#define DRM_IOCTL_VIRTGPU_WAIT \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_WAIT, \ - struct drm_virtgpu_3d_wait) - -#define DRM_IOCTL_VIRTGPU_GET_CAPS \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GET_CAPS, \ - struct drm_virtgpu_get_caps) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86/include/libdrm/vmwgfx_drm.h b/prebuilts/x86/include/libdrm/vmwgfx_drm.h deleted file mode 100644 index 2b8d47e..0000000 --- a/prebuilts/x86/include/libdrm/vmwgfx_drm.h +++ /dev/null @@ -1,1128 +0,0 @@ -/************************************************************************** - * - * Copyright © 2009-2015 VMware, Inc., Palo Alto, CA., USA - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **************************************************************************/ - -#ifndef __VMWGFX_DRM_H__ -#define __VMWGFX_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_VMW_MAX_SURFACE_FACES 6 -#define DRM_VMW_MAX_MIP_LEVELS 24 - - -#define DRM_VMW_GET_PARAM 0 -#define DRM_VMW_ALLOC_DMABUF 1 -#define DRM_VMW_UNREF_DMABUF 2 -#define DRM_VMW_HANDLE_CLOSE 2 -#define DRM_VMW_CURSOR_BYPASS 3 -/* guarded by DRM_VMW_PARAM_NUM_STREAMS != 0*/ -#define DRM_VMW_CONTROL_STREAM 4 -#define DRM_VMW_CLAIM_STREAM 5 -#define DRM_VMW_UNREF_STREAM 6 -/* guarded by DRM_VMW_PARAM_3D == 1 */ -#define DRM_VMW_CREATE_CONTEXT 7 -#define DRM_VMW_UNREF_CONTEXT 8 -#define DRM_VMW_CREATE_SURFACE 9 -#define DRM_VMW_UNREF_SURFACE 10 -#define DRM_VMW_REF_SURFACE 11 -#define DRM_VMW_EXECBUF 12 -#define DRM_VMW_GET_3D_CAP 13 -#define DRM_VMW_FENCE_WAIT 14 -#define DRM_VMW_FENCE_SIGNALED 15 -#define DRM_VMW_FENCE_UNREF 16 -#define DRM_VMW_FENCE_EVENT 17 -#define DRM_VMW_PRESENT 18 -#define DRM_VMW_PRESENT_READBACK 19 -#define DRM_VMW_UPDATE_LAYOUT 20 -#define DRM_VMW_CREATE_SHADER 21 -#define DRM_VMW_UNREF_SHADER 22 -#define DRM_VMW_GB_SURFACE_CREATE 23 -#define DRM_VMW_GB_SURFACE_REF 24 -#define DRM_VMW_SYNCCPU 25 -#define DRM_VMW_CREATE_EXTENDED_CONTEXT 26 - -/*************************************************************************/ -/** - * DRM_VMW_GET_PARAM - get device information. - * - * DRM_VMW_PARAM_FIFO_OFFSET: - * Offset to use to map the first page of the FIFO read-only. - * The fifo is mapped using the mmap() system call on the drm device. - * - * DRM_VMW_PARAM_OVERLAY_IOCTL: - * Does the driver support the overlay ioctl. - */ - -#define DRM_VMW_PARAM_NUM_STREAMS 0 -#define DRM_VMW_PARAM_NUM_FREE_STREAMS 1 -#define DRM_VMW_PARAM_3D 2 -#define DRM_VMW_PARAM_HW_CAPS 3 -#define DRM_VMW_PARAM_FIFO_CAPS 4 -#define DRM_VMW_PARAM_MAX_FB_SIZE 5 -#define DRM_VMW_PARAM_FIFO_HW_VERSION 6 -#define DRM_VMW_PARAM_MAX_SURF_MEMORY 7 -#define DRM_VMW_PARAM_3D_CAPS_SIZE 8 -#define DRM_VMW_PARAM_MAX_MOB_MEMORY 9 -#define DRM_VMW_PARAM_MAX_MOB_SIZE 10 -#define DRM_VMW_PARAM_SCREEN_TARGET 11 -#define DRM_VMW_PARAM_DX 12 - -/** - * enum drm_vmw_handle_type - handle type for ref ioctls - * - */ -enum drm_vmw_handle_type { - DRM_VMW_HANDLE_LEGACY = 0, - DRM_VMW_HANDLE_PRIME = 1 -}; - -/** - * struct drm_vmw_getparam_arg - * - * @value: Returned value. //Out - * @param: Parameter to query. //In. - * - * Argument to the DRM_VMW_GET_PARAM Ioctl. - */ - -struct drm_vmw_getparam_arg { - __u64 value; - __u32 param; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_CONTEXT - Create a host context. - * - * Allocates a device unique context id, and queues a create context command - * for the host. Does not wait for host completion. - */ - -/** - * struct drm_vmw_context_arg - * - * @cid: Device unique context ID. - * - * Output argument to the DRM_VMW_CREATE_CONTEXT Ioctl. - * Input argument to the DRM_VMW_UNREF_CONTEXT Ioctl. - */ - -struct drm_vmw_context_arg { - __s32 cid; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_CONTEXT - Create a host context. - * - * Frees a global context id, and queues a destroy host command for the host. - * Does not wait for host completion. The context ID can be used directly - * in the command stream and shows up as the same context ID on the host. - */ - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_SURFACE - Create a host suface. - * - * Allocates a device unique surface id, and queues a create surface command - * for the host. Does not wait for host completion. The surface ID can be - * used directly in the command stream and shows up as the same surface - * ID on the host. - */ - -/** - * struct drm_wmv_surface_create_req - * - * @flags: Surface flags as understood by the host. - * @format: Surface format as understood by the host. - * @mip_levels: Number of mip levels for each face. - * An unused face should have 0 encoded. - * @size_addr: Address of a user-space array of sruct drm_vmw_size - * cast to an __u64 for 32-64 bit compatibility. - * The size of the array should equal the total number of mipmap levels. - * @shareable: Boolean whether other clients (as identified by file descriptors) - * may reference this surface. - * @scanout: Boolean whether the surface is intended to be used as a - * scanout. - * - * Input data to the DRM_VMW_CREATE_SURFACE Ioctl. - * Output data from the DRM_VMW_REF_SURFACE Ioctl. - */ - -struct drm_vmw_surface_create_req { - __u32 flags; - __u32 format; - __u32 mip_levels[DRM_VMW_MAX_SURFACE_FACES]; - __u64 size_addr; - __s32 shareable; - __s32 scanout; -}; - -/** - * struct drm_wmv_surface_arg - * - * @sid: Surface id of created surface or surface to destroy or reference. - * @handle_type: Handle type for DRM_VMW_REF_SURFACE Ioctl. - * - * Output data from the DRM_VMW_CREATE_SURFACE Ioctl. - * Input argument to the DRM_VMW_UNREF_SURFACE Ioctl. - * Input argument to the DRM_VMW_REF_SURFACE Ioctl. - */ - -struct drm_vmw_surface_arg { - __s32 sid; - enum drm_vmw_handle_type handle_type; -}; - -/** - * struct drm_vmw_size ioctl. - * - * @width - mip level width - * @height - mip level height - * @depth - mip level depth - * - * Description of a mip level. - * Input data to the DRM_WMW_CREATE_SURFACE Ioctl. - */ - -struct drm_vmw_size { - __u32 width; - __u32 height; - __u32 depth; - __u32 pad64; -}; - -/** - * union drm_vmw_surface_create_arg - * - * @rep: Output data as described above. - * @req: Input data as described above. - * - * Argument to the DRM_VMW_CREATE_SURFACE Ioctl. - */ - -union drm_vmw_surface_create_arg { - struct drm_vmw_surface_arg rep; - struct drm_vmw_surface_create_req req; -}; - -/*************************************************************************/ -/** - * DRM_VMW_REF_SURFACE - Reference a host surface. - * - * Puts a reference on a host surface with a give sid, as previously - * returned by the DRM_VMW_CREATE_SURFACE ioctl. - * A reference will make sure the surface isn't destroyed while we hold - * it and will allow the calling client to use the surface ID in the command - * stream. - * - * On successful return, the Ioctl returns the surface information given - * in the DRM_VMW_CREATE_SURFACE ioctl. - */ - -/** - * union drm_vmw_surface_reference_arg - * - * @rep: Output data as described above. - * @req: Input data as described above. - * - * Argument to the DRM_VMW_REF_SURFACE Ioctl. - */ - -union drm_vmw_surface_reference_arg { - struct drm_vmw_surface_create_req rep; - struct drm_vmw_surface_arg req; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_SURFACE - Unreference a host surface. - * - * Clear a reference previously put on a host surface. - * When all references are gone, including the one implicitly placed - * on creation, - * a destroy surface command will be queued for the host. - * Does not wait for completion. - */ - -/*************************************************************************/ -/** - * DRM_VMW_EXECBUF - * - * Submit a command buffer for execution on the host, and return a - * fence seqno that when signaled, indicates that the command buffer has - * executed. - */ - -/** - * struct drm_vmw_execbuf_arg - * - * @commands: User-space address of a command buffer cast to an __u64. - * @command-size: Size in bytes of the command buffer. - * @throttle-us: Sleep until software is less than @throttle_us - * microseconds ahead of hardware. The driver may round this value - * to the nearest kernel tick. - * @fence_rep: User-space address of a struct drm_vmw_fence_rep cast to an - * __u64. - * @version: Allows expanding the execbuf ioctl parameters without breaking - * backwards compatibility, since user-space will always tell the kernel - * which version it uses. - * @flags: Execbuf flags. - * @imported_fence_fd: FD for a fence imported from another device - * - * Argument to the DRM_VMW_EXECBUF Ioctl. - */ - -#define DRM_VMW_EXECBUF_VERSION 2 - -#define DRM_VMW_EXECBUF_FLAG_IMPORT_FENCE_FD (1 << 0) -#define DRM_VMW_EXECBUF_FLAG_EXPORT_FENCE_FD (1 << 1) - -struct drm_vmw_execbuf_arg { - __u64 commands; - __u32 command_size; - __u32 throttle_us; - __u64 fence_rep; - __u32 version; - __u32 flags; - __u32 context_handle; - __s32 imported_fence_fd; -}; - -/** - * struct drm_vmw_fence_rep - * - * @handle: Fence object handle for fence associated with a command submission. - * @mask: Fence flags relevant for this fence object. - * @seqno: Fence sequence number in fifo. A fence object with a lower - * seqno will signal the EXEC flag before a fence object with a higher - * seqno. This can be used by user-space to avoid kernel calls to determine - * whether a fence has signaled the EXEC flag. Note that @seqno will - * wrap at 32-bit. - * @passed_seqno: The highest seqno number processed by the hardware - * so far. This can be used to mark user-space fence objects as signaled, and - * to determine whether a fence seqno might be stale. - * @fd: FD associated with the fence, -1 if not exported - * @error: This member should've been set to -EFAULT on submission. - * The following actions should be take on completion: - * error == -EFAULT: Fence communication failed. The host is synchronized. - * Use the last fence id read from the FIFO fence register. - * error != 0 && error != -EFAULT: - * Fence submission failed. The host is synchronized. Use the fence_seq member. - * error == 0: All is OK, The host may not be synchronized. - * Use the fence_seq member. - * - * Input / Output data to the DRM_VMW_EXECBUF Ioctl. - */ - -struct drm_vmw_fence_rep { - __u32 handle; - __u32 mask; - __u32 seqno; - __u32 passed_seqno; - __s32 fd; - __s32 error; -}; - -/*************************************************************************/ -/** - * DRM_VMW_ALLOC_DMABUF - * - * Allocate a DMA buffer that is visible also to the host. - * NOTE: The buffer is - * identified by a handle and an offset, which are private to the guest, but - * usable in the command stream. The guest kernel may translate these - * and patch up the command stream accordingly. In the future, the offset may - * be zero at all times, or it may disappear from the interface before it is - * fixed. - * - * The DMA buffer may stay user-space mapped in the guest at all times, - * and is thus suitable for sub-allocation. - * - * DMA buffers are mapped using the mmap() syscall on the drm device. - */ - -/** - * struct drm_vmw_alloc_dmabuf_req - * - * @size: Required minimum size of the buffer. - * - * Input data to the DRM_VMW_ALLOC_DMABUF Ioctl. - */ - -struct drm_vmw_alloc_dmabuf_req { - __u32 size; - __u32 pad64; -}; - -/** - * struct drm_vmw_dmabuf_rep - * - * @map_handle: Offset to use in the mmap() call used to map the buffer. - * @handle: Handle unique to this buffer. Used for unreferencing. - * @cur_gmr_id: GMR id to use in the command stream when this buffer is - * referenced. See not above. - * @cur_gmr_offset: Offset to use in the command stream when this buffer is - * referenced. See note above. - * - * Output data from the DRM_VMW_ALLOC_DMABUF Ioctl. - */ - -struct drm_vmw_dmabuf_rep { - __u64 map_handle; - __u32 handle; - __u32 cur_gmr_id; - __u32 cur_gmr_offset; - __u32 pad64; -}; - -/** - * union drm_vmw_dmabuf_arg - * - * @req: Input data as described above. - * @rep: Output data as described above. - * - * Argument to the DRM_VMW_ALLOC_DMABUF Ioctl. - */ - -union drm_vmw_alloc_dmabuf_arg { - struct drm_vmw_alloc_dmabuf_req req; - struct drm_vmw_dmabuf_rep rep; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_DMABUF - Free a DMA buffer. - * - */ - -/** - * struct drm_vmw_unref_dmabuf_arg - * - * @handle: Handle indicating what buffer to free. Obtained from the - * DRM_VMW_ALLOC_DMABUF Ioctl. - * - * Argument to the DRM_VMW_UNREF_DMABUF Ioctl. - */ - -struct drm_vmw_unref_dmabuf_arg { - __u32 handle; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CONTROL_STREAM - Control overlays, aka streams. - * - * This IOCTL controls the overlay units of the svga device. - * The SVGA overlay units does not work like regular hardware units in - * that they do not automatically read back the contents of the given dma - * buffer. But instead only read back for each call to this ioctl, and - * at any point between this call being made and a following call that - * either changes the buffer or disables the stream. - */ - -/** - * struct drm_vmw_rect - * - * Defines a rectangle. Used in the overlay ioctl to define - * source and destination rectangle. - */ - -struct drm_vmw_rect { - __s32 x; - __s32 y; - __u32 w; - __u32 h; -}; - -/** - * struct drm_vmw_control_stream_arg - * - * @stream_id: Stearm to control - * @enabled: If false all following arguments are ignored. - * @handle: Handle to buffer for getting data from. - * @format: Format of the overlay as understood by the host. - * @width: Width of the overlay. - * @height: Height of the overlay. - * @size: Size of the overlay in bytes. - * @pitch: Array of pitches, the two last are only used for YUV12 formats. - * @offset: Offset from start of dma buffer to overlay. - * @src: Source rect, must be within the defined area above. - * @dst: Destination rect, x and y may be negative. - * - * Argument to the DRM_VMW_CONTROL_STREAM Ioctl. - */ - -struct drm_vmw_control_stream_arg { - __u32 stream_id; - __u32 enabled; - - __u32 flags; - __u32 color_key; - - __u32 handle; - __u32 offset; - __s32 format; - __u32 size; - __u32 width; - __u32 height; - __u32 pitch[3]; - - __u32 pad64; - struct drm_vmw_rect src; - struct drm_vmw_rect dst; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CURSOR_BYPASS - Give extra information about cursor bypass. - * - */ - -#define DRM_VMW_CURSOR_BYPASS_ALL (1 << 0) -#define DRM_VMW_CURSOR_BYPASS_FLAGS (1) - -/** - * struct drm_vmw_cursor_bypass_arg - * - * @flags: Flags. - * @crtc_id: Crtc id, only used if DMR_CURSOR_BYPASS_ALL isn't passed. - * @xpos: X position of cursor. - * @ypos: Y position of cursor. - * @xhot: X hotspot. - * @yhot: Y hotspot. - * - * Argument to the DRM_VMW_CURSOR_BYPASS Ioctl. - */ - -struct drm_vmw_cursor_bypass_arg { - __u32 flags; - __u32 crtc_id; - __s32 xpos; - __s32 ypos; - __s32 xhot; - __s32 yhot; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CLAIM_STREAM - Claim a single stream. - */ - -/** - * struct drm_vmw_context_arg - * - * @stream_id: Device unique context ID. - * - * Output argument to the DRM_VMW_CREATE_CONTEXT Ioctl. - * Input argument to the DRM_VMW_UNREF_CONTEXT Ioctl. - */ - -struct drm_vmw_stream_arg { - __u32 stream_id; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_STREAM - Unclaim a stream. - * - * Return a single stream that was claimed by this process. Also makes - * sure that the stream has been stopped. - */ - -/*************************************************************************/ -/** - * DRM_VMW_GET_3D_CAP - * - * Read 3D capabilities from the FIFO - * - */ - -/** - * struct drm_vmw_get_3d_cap_arg - * - * @buffer: Pointer to a buffer for capability data, cast to an __u64 - * @size: Max size to copy - * - * Input argument to the DRM_VMW_GET_3D_CAP_IOCTL - * ioctls. - */ - -struct drm_vmw_get_3d_cap_arg { - __u64 buffer; - __u32 max_size; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_WAIT - * - * Waits for a fence object to signal. The wait is interruptible, so that - * signals may be delivered during the interrupt. The wait may timeout, - * in which case the calls returns -EBUSY. If the wait is restarted, - * that is restarting without resetting @cookie_valid to zero, - * the timeout is computed from the first call. - * - * The flags argument to the DRM_VMW_FENCE_WAIT ioctl indicates what to wait - * on: - * DRM_VMW_FENCE_FLAG_EXEC: All commands ahead of the fence in the command - * stream - * have executed. - * DRM_VMW_FENCE_FLAG_QUERY: All query results resulting from query finish - * commands - * in the buffer given to the EXECBUF ioctl returning the fence object handle - * are available to user-space. - * - * DRM_VMW_WAIT_OPTION_UNREF: If this wait option is given, and the - * fenc wait ioctl returns 0, the fence object has been unreferenced after - * the wait. - */ - -#define DRM_VMW_FENCE_FLAG_EXEC (1 << 0) -#define DRM_VMW_FENCE_FLAG_QUERY (1 << 1) - -#define DRM_VMW_WAIT_OPTION_UNREF (1 << 0) - -/** - * struct drm_vmw_fence_wait_arg - * - * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. - * @cookie_valid: Must be reset to 0 on first call. Left alone on restart. - * @kernel_cookie: Set to 0 on first call. Left alone on restart. - * @timeout_us: Wait timeout in microseconds. 0 for indefinite timeout. - * @lazy: Set to 1 if timing is not critical. Allow more than a kernel tick - * before returning. - * @flags: Fence flags to wait on. - * @wait_options: Options that control the behaviour of the wait ioctl. - * - * Input argument to the DRM_VMW_FENCE_WAIT ioctl. - */ - -struct drm_vmw_fence_wait_arg { - __u32 handle; - __s32 cookie_valid; - __u64 kernel_cookie; - __u64 timeout_us; - __s32 lazy; - __s32 flags; - __s32 wait_options; - __s32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_SIGNALED - * - * Checks if a fence object is signaled.. - */ - -/** - * struct drm_vmw_fence_signaled_arg - * - * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. - * @flags: Fence object flags input to DRM_VMW_FENCE_SIGNALED ioctl - * @signaled: Out: Flags signaled. - * @sequence: Out: Highest sequence passed so far. Can be used to signal the - * EXEC flag of user-space fence objects. - * - * Input/Output argument to the DRM_VMW_FENCE_SIGNALED and DRM_VMW_FENCE_UNREF - * ioctls. - */ - -struct drm_vmw_fence_signaled_arg { - __u32 handle; - __u32 flags; - __s32 signaled; - __u32 passed_seqno; - __u32 signaled_flags; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_UNREF - * - * Unreferences a fence object, and causes it to be destroyed if there are no - * other references to it. - * - */ - -/** - * struct drm_vmw_fence_arg - * - * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. - * - * Input/Output argument to the DRM_VMW_FENCE_UNREF ioctl.. - */ - -struct drm_vmw_fence_arg { - __u32 handle; - __u32 pad64; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_EVENT - * - * Queues an event on a fence to be delivered on the drm character device - * when the fence has signaled the DRM_VMW_FENCE_FLAG_EXEC flag. - * Optionally the approximate time when the fence signaled is - * given by the event. - */ - -/* - * The event type - */ -#define DRM_VMW_EVENT_FENCE_SIGNALED 0x80000000 - -struct drm_vmw_event_fence { - struct drm_event base; - __u64 user_data; - __u32 tv_sec; - __u32 tv_usec; -}; - -/* - * Flags that may be given to the command. - */ -/* Request fence signaled time on the event. */ -#define DRM_VMW_FE_FLAG_REQ_TIME (1 << 0) - -/** - * struct drm_vmw_fence_event_arg - * - * @fence_rep: Pointer to fence_rep structure cast to __u64 or 0 if - * the fence is not supposed to be referenced by user-space. - * @user_info: Info to be delivered with the event. - * @handle: Attach the event to this fence only. - * @flags: A set of flags as defined above. - */ -struct drm_vmw_fence_event_arg { - __u64 fence_rep; - __u64 user_data; - __u32 handle; - __u32 flags; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_PRESENT - * - * Executes an SVGA present on a given fb for a given surface. The surface - * is placed on the framebuffer. Cliprects are given relative to the given - * point (the point disignated by dest_{x|y}). - * - */ - -/** - * struct drm_vmw_present_arg - * @fb_id: framebuffer id to present / read back from. - * @sid: Surface id to present from. - * @dest_x: X placement coordinate for surface. - * @dest_y: Y placement coordinate for surface. - * @clips_ptr: Pointer to an array of clip rects cast to an __u64. - * @num_clips: Number of cliprects given relative to the framebuffer origin, - * in the same coordinate space as the frame buffer. - * @pad64: Unused 64-bit padding. - * - * Input argument to the DRM_VMW_PRESENT ioctl. - */ - -struct drm_vmw_present_arg { - __u32 fb_id; - __u32 sid; - __s32 dest_x; - __s32 dest_y; - __u64 clips_ptr; - __u32 num_clips; - __u32 pad64; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_PRESENT_READBACK - * - * Executes an SVGA present readback from a given fb to the dma buffer - * currently bound as the fb. If there is no dma buffer bound to the fb, - * an error will be returned. - * - */ - -/** - * struct drm_vmw_present_arg - * @fb_id: fb_id to present / read back from. - * @num_clips: Number of cliprects. - * @clips_ptr: Pointer to an array of clip rects cast to an __u64. - * @fence_rep: Pointer to a struct drm_vmw_fence_rep, cast to an __u64. - * If this member is NULL, then the ioctl should not return a fence. - */ - -struct drm_vmw_present_readback_arg { - __u32 fb_id; - __u32 num_clips; - __u64 clips_ptr; - __u64 fence_rep; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UPDATE_LAYOUT - Update layout - * - * Updates the preferred modes and connection status for connectors. The - * command consists of one drm_vmw_update_layout_arg pointing to an array - * of num_outputs drm_vmw_rect's. - */ - -/** - * struct drm_vmw_update_layout_arg - * - * @num_outputs: number of active connectors - * @rects: pointer to array of drm_vmw_rect cast to an __u64 - * - * Input argument to the DRM_VMW_UPDATE_LAYOUT Ioctl. - */ -struct drm_vmw_update_layout_arg { - __u32 num_outputs; - __u32 pad64; - __u64 rects; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_SHADER - Create shader - * - * Creates a shader and optionally binds it to a dma buffer containing - * the shader byte-code. - */ - -/** - * enum drm_vmw_shader_type - Shader types - */ -enum drm_vmw_shader_type { - drm_vmw_shader_type_vs = 0, - drm_vmw_shader_type_ps, -}; - - -/** - * struct drm_vmw_shader_create_arg - * - * @shader_type: Shader type of the shader to create. - * @size: Size of the byte-code in bytes. - * where the shader byte-code starts - * @buffer_handle: Buffer handle identifying the buffer containing the - * shader byte-code - * @shader_handle: On successful completion contains a handle that - * can be used to subsequently identify the shader. - * @offset: Offset in bytes into the buffer given by @buffer_handle, - * - * Input / Output argument to the DRM_VMW_CREATE_SHADER Ioctl. - */ -struct drm_vmw_shader_create_arg { - enum drm_vmw_shader_type shader_type; - __u32 size; - __u32 buffer_handle; - __u32 shader_handle; - __u64 offset; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_SHADER - Unreferences a shader - * - * Destroys a user-space reference to a shader, optionally destroying - * it. - */ - -/** - * struct drm_vmw_shader_arg - * - * @handle: Handle identifying the shader to destroy. - * - * Input argument to the DRM_VMW_UNREF_SHADER ioctl. - */ -struct drm_vmw_shader_arg { - __u32 handle; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_GB_SURFACE_CREATE - Create a host guest-backed surface. - * - * Allocates a surface handle and queues a create surface command - * for the host on the first use of the surface. The surface ID can - * be used as the surface ID in commands referencing the surface. - */ - -/** - * enum drm_vmw_surface_flags - * - * @drm_vmw_surface_flag_shareable: Whether the surface is shareable - * @drm_vmw_surface_flag_scanout: Whether the surface is a scanout - * surface. - * @drm_vmw_surface_flag_create_buffer: Create a backup buffer if none is - * given. - */ -enum drm_vmw_surface_flags { - drm_vmw_surface_flag_shareable = (1 << 0), - drm_vmw_surface_flag_scanout = (1 << 1), - drm_vmw_surface_flag_create_buffer = (1 << 2) -}; - -/** - * struct drm_vmw_gb_surface_create_req - * - * @svga3d_flags: SVGA3d surface flags for the device. - * @format: SVGA3d format. - * @mip_level: Number of mip levels for all faces. - * @drm_surface_flags Flags as described above. - * @multisample_count Future use. Set to 0. - * @autogen_filter Future use. Set to 0. - * @buffer_handle Buffer handle of backup buffer. SVGA3D_INVALID_ID - * if none. - * @base_size Size of the base mip level for all faces. - * @array_size Must be zero for non-DX hardware, and if non-zero - * svga3d_flags must have proper bind flags setup. - * - * Input argument to the DRM_VMW_GB_SURFACE_CREATE Ioctl. - * Part of output argument for the DRM_VMW_GB_SURFACE_REF Ioctl. - */ -struct drm_vmw_gb_surface_create_req { - __u32 svga3d_flags; - __u32 format; - __u32 mip_levels; - enum drm_vmw_surface_flags drm_surface_flags; - __u32 multisample_count; - __u32 autogen_filter; - __u32 buffer_handle; - __u32 array_size; - struct drm_vmw_size base_size; -}; - -/** - * struct drm_vmw_gb_surface_create_rep - * - * @handle: Surface handle. - * @backup_size: Size of backup buffers for this surface. - * @buffer_handle: Handle of backup buffer. SVGA3D_INVALID_ID if none. - * @buffer_size: Actual size of the buffer identified by - * @buffer_handle - * @buffer_map_handle: Offset into device address space for the buffer - * identified by @buffer_handle. - * - * Part of output argument for the DRM_VMW_GB_SURFACE_REF ioctl. - * Output argument for the DRM_VMW_GB_SURFACE_CREATE ioctl. - */ -struct drm_vmw_gb_surface_create_rep { - __u32 handle; - __u32 backup_size; - __u32 buffer_handle; - __u32 buffer_size; - __u64 buffer_map_handle; -}; - -/** - * union drm_vmw_gb_surface_create_arg - * - * @req: Input argument as described above. - * @rep: Output argument as described above. - * - * Argument to the DRM_VMW_GB_SURFACE_CREATE ioctl. - */ -union drm_vmw_gb_surface_create_arg { - struct drm_vmw_gb_surface_create_rep rep; - struct drm_vmw_gb_surface_create_req req; -}; - -/*************************************************************************/ -/** - * DRM_VMW_GB_SURFACE_REF - Reference a host surface. - * - * Puts a reference on a host surface with a given handle, as previously - * returned by the DRM_VMW_GB_SURFACE_CREATE ioctl. - * A reference will make sure the surface isn't destroyed while we hold - * it and will allow the calling client to use the surface handle in - * the command stream. - * - * On successful return, the Ioctl returns the surface information given - * to and returned from the DRM_VMW_GB_SURFACE_CREATE ioctl. - */ - -/** - * struct drm_vmw_gb_surface_reference_arg - * - * @creq: The data used as input when the surface was created, as described - * above at "struct drm_vmw_gb_surface_create_req" - * @crep: Additional data output when the surface was created, as described - * above at "struct drm_vmw_gb_surface_create_rep" - * - * Output Argument to the DRM_VMW_GB_SURFACE_REF ioctl. - */ -struct drm_vmw_gb_surface_ref_rep { - struct drm_vmw_gb_surface_create_req creq; - struct drm_vmw_gb_surface_create_rep crep; -}; - -/** - * union drm_vmw_gb_surface_reference_arg - * - * @req: Input data as described above at "struct drm_vmw_surface_arg" - * @rep: Output data as described above at "struct drm_vmw_gb_surface_ref_rep" - * - * Argument to the DRM_VMW_GB_SURFACE_REF Ioctl. - */ -union drm_vmw_gb_surface_reference_arg { - struct drm_vmw_gb_surface_ref_rep rep; - struct drm_vmw_surface_arg req; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_SYNCCPU - Sync a DMA buffer / MOB for CPU access. - * - * Idles any previously submitted GPU operations on the buffer and - * by default blocks command submissions that reference the buffer. - * If the file descriptor used to grab a blocking CPU sync is closed, the - * cpu sync is released. - * The flags argument indicates how the grab / release operation should be - * performed: - */ - -/** - * enum drm_vmw_synccpu_flags - Synccpu flags: - * - * @drm_vmw_synccpu_read: Sync for read. If sync is done for read only, it's a - * hint to the kernel to allow command submissions that references the buffer - * for read-only. - * @drm_vmw_synccpu_write: Sync for write. Block all command submissions - * referencing this buffer. - * @drm_vmw_synccpu_dontblock: Don't wait for GPU idle, but rather return - * -EBUSY should the buffer be busy. - * @drm_vmw_synccpu_allow_cs: Allow command submission that touches the buffer - * while the buffer is synced for CPU. This is similar to the GEM bo idle - * behavior. - */ -enum drm_vmw_synccpu_flags { - drm_vmw_synccpu_read = (1 << 0), - drm_vmw_synccpu_write = (1 << 1), - drm_vmw_synccpu_dontblock = (1 << 2), - drm_vmw_synccpu_allow_cs = (1 << 3) -}; - -/** - * enum drm_vmw_synccpu_op - Synccpu operations: - * - * @drm_vmw_synccpu_grab: Grab the buffer for CPU operations - * @drm_vmw_synccpu_release: Release a previous grab. - */ -enum drm_vmw_synccpu_op { - drm_vmw_synccpu_grab, - drm_vmw_synccpu_release -}; - -/** - * struct drm_vmw_synccpu_arg - * - * @op: The synccpu operation as described above. - * @handle: Handle identifying the buffer object. - * @flags: Flags as described above. - */ -struct drm_vmw_synccpu_arg { - enum drm_vmw_synccpu_op op; - enum drm_vmw_synccpu_flags flags; - __u32 handle; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_EXTENDED_CONTEXT - Create a host context. - * - * Allocates a device unique context id, and queues a create context command - * for the host. Does not wait for host completion. - */ -enum drm_vmw_extended_context { - drm_vmw_context_legacy, - drm_vmw_context_dx -}; - -/** - * union drm_vmw_extended_context_arg - * - * @req: Context type. - * @rep: Context identifier. - * - * Argument to the DRM_VMW_CREATE_EXTENDED_CONTEXT Ioctl. - */ -union drm_vmw_extended_context_arg { - enum drm_vmw_extended_context req; - struct drm_vmw_context_arg rep; -}; - -/*************************************************************************/ -/* - * DRM_VMW_HANDLE_CLOSE - Close a user-space handle and release its - * underlying resource. - * - * Note that this ioctl is overlaid on the DRM_VMW_UNREF_DMABUF Ioctl. - * The ioctl arguments therefore need to be identical in layout. - * - */ - -/** - * struct drm_vmw_handle_close_arg - * - * @handle: Handle to close. - * - * Argument to the DRM_VMW_HANDLE_CLOSE Ioctl. - */ -struct drm_vmw_handle_close_arg { - __u32 handle; - __u32 pad64; -}; - - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86/include/libpostproc/postprocess.h b/prebuilts/x86/include/libpostproc/postprocess.h deleted file mode 100644 index 348ee7c..0000000 --- a/prebuilts/x86/include/libpostproc/postprocess.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2001-2003 Michael Niedermayer (michaelni@gmx.at) - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef POSTPROC_POSTPROCESS_H -#define POSTPROC_POSTPROCESS_H - -/** - * @file - * @ingroup lpp - * external API header - */ - -/** - * @defgroup lpp libpostproc - * Video postprocessing library. - * - * @{ - */ - -#include "libpostproc/version.h" - -/** - * Return the LIBPOSTPROC_VERSION_INT constant. - */ -unsigned postproc_version(void); - -/** - * Return the libpostproc build-time configuration. - */ -const char *postproc_configuration(void); - -/** - * Return the libpostproc license. - */ -const char *postproc_license(void); - -#define PP_QUALITY_MAX 6 - -#include - -typedef void pp_context; -typedef void pp_mode; - -#if LIBPOSTPROC_VERSION_INT < (52<<16) -typedef pp_context pp_context_t; -typedef pp_mode pp_mode_t; -extern const char *const pp_help; ///< a simple help text -#else -extern const char pp_help[]; ///< a simple help text -#endif - -void pp_postprocess(const uint8_t * src[3], const int srcStride[3], - uint8_t * dst[3], const int dstStride[3], - int horizontalSize, int verticalSize, - const int8_t *QP_store, int QP_stride, - pp_mode *mode, pp_context *ppContext, int pict_type); - - -/** - * Return a pp_mode or NULL if an error occurred. - * - * @param name the string after "-pp" on the command line - * @param quality a number from 0 to PP_QUALITY_MAX - */ -pp_mode *pp_get_mode_by_name_and_quality(const char *name, int quality); -void pp_free_mode(pp_mode *mode); - -pp_context *pp_get_context(int width, int height, int flags); -void pp_free_context(pp_context *ppContext); - -#define PP_CPU_CAPS_MMX 0x80000000 -#define PP_CPU_CAPS_MMX2 0x20000000 -#define PP_CPU_CAPS_3DNOW 0x40000000 -#define PP_CPU_CAPS_ALTIVEC 0x10000000 -#define PP_CPU_CAPS_AUTO 0x00080000 - -#define PP_FORMAT 0x00000008 -#define PP_FORMAT_420 (0x00000011|PP_FORMAT) -#define PP_FORMAT_422 (0x00000001|PP_FORMAT) -#define PP_FORMAT_411 (0x00000002|PP_FORMAT) -#define PP_FORMAT_444 (0x00000000|PP_FORMAT) -#define PP_FORMAT_440 (0x00000010|PP_FORMAT) - -#define PP_PICT_TYPE_QP2 0x00000010 ///< MPEG2 style QScale - -/** - * @} - */ - -#endif /* POSTPROC_POSTPROCESS_H */ diff --git a/prebuilts/x86/include/libpostproc/version.h b/prebuilts/x86/include/libpostproc/version.h deleted file mode 100644 index 812f8e0..0000000 --- a/prebuilts/x86/include/libpostproc/version.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef POSTPROC_VERSION_H -#define POSTPROC_VERSION_H - -/** - * @file - * Libpostproc version macros - */ - -#include "libavutil/avutil.h" - -#define LIBPOSTPROC_VERSION_MAJOR 55 -#define LIBPOSTPROC_VERSION_MINOR 9 -#define LIBPOSTPROC_VERSION_MICRO 100 - -#define LIBPOSTPROC_VERSION_INT AV_VERSION_INT(LIBPOSTPROC_VERSION_MAJOR, \ - LIBPOSTPROC_VERSION_MINOR, \ - LIBPOSTPROC_VERSION_MICRO) -#define LIBPOSTPROC_VERSION AV_VERSION(LIBPOSTPROC_VERSION_MAJOR, \ - LIBPOSTPROC_VERSION_MINOR, \ - LIBPOSTPROC_VERSION_MICRO) -#define LIBPOSTPROC_BUILD LIBPOSTPROC_VERSION_INT - -#define LIBPOSTPROC_IDENT "postproc" AV_STRINGIFY(LIBPOSTPROC_VERSION) - -#endif /* POSTPROC_VERSION_H */ diff --git a/prebuilts/x86/include/libswresample/swresample.h b/prebuilts/x86/include/libswresample/swresample.h deleted file mode 100644 index c7b84fb..0000000 --- a/prebuilts/x86/include/libswresample/swresample.h +++ /dev/null @@ -1,579 +0,0 @@ -/* - * Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at) - * - * This file is part of libswresample - * - * libswresample is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * libswresample is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with libswresample; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWRESAMPLE_SWRESAMPLE_H -#define SWRESAMPLE_SWRESAMPLE_H - -/** - * @file - * @ingroup lswr - * libswresample public header - */ - -/** - * @defgroup lswr libswresample - * @{ - * - * Audio resampling, sample format conversion and mixing library. - * - * Interaction with lswr is done through SwrContext, which is - * allocated with swr_alloc() or swr_alloc_set_opts(). It is opaque, so all parameters - * must be set with the @ref avoptions API. - * - * The first thing you will need to do in order to use lswr is to allocate - * SwrContext. This can be done with swr_alloc() or swr_alloc_set_opts(). If you - * are using the former, you must set options through the @ref avoptions API. - * The latter function provides the same feature, but it allows you to set some - * common options in the same statement. - * - * For example the following code will setup conversion from planar float sample - * format to interleaved signed 16-bit integer, downsampling from 48kHz to - * 44.1kHz and downmixing from 5.1 channels to stereo (using the default mixing - * matrix). This is using the swr_alloc() function. - * @code - * SwrContext *swr = swr_alloc(); - * av_opt_set_channel_layout(swr, "in_channel_layout", AV_CH_LAYOUT_5POINT1, 0); - * av_opt_set_channel_layout(swr, "out_channel_layout", AV_CH_LAYOUT_STEREO, 0); - * av_opt_set_int(swr, "in_sample_rate", 48000, 0); - * av_opt_set_int(swr, "out_sample_rate", 44100, 0); - * av_opt_set_sample_fmt(swr, "in_sample_fmt", AV_SAMPLE_FMT_FLTP, 0); - * av_opt_set_sample_fmt(swr, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0); - * @endcode - * - * The same job can be done using swr_alloc_set_opts() as well: - * @code - * SwrContext *swr = swr_alloc_set_opts(NULL, // we're allocating a new context - * AV_CH_LAYOUT_STEREO, // out_ch_layout - * AV_SAMPLE_FMT_S16, // out_sample_fmt - * 44100, // out_sample_rate - * AV_CH_LAYOUT_5POINT1, // in_ch_layout - * AV_SAMPLE_FMT_FLTP, // in_sample_fmt - * 48000, // in_sample_rate - * 0, // log_offset - * NULL); // log_ctx - * @endcode - * - * Once all values have been set, it must be initialized with swr_init(). If - * you need to change the conversion parameters, you can change the parameters - * using @ref AVOptions, as described above in the first example; or by using - * swr_alloc_set_opts(), but with the first argument the allocated context. - * You must then call swr_init() again. - * - * The conversion itself is done by repeatedly calling swr_convert(). - * Note that the samples may get buffered in swr if you provide insufficient - * output space or if sample rate conversion is done, which requires "future" - * samples. Samples that do not require future input can be retrieved at any - * time by using swr_convert() (in_count can be set to 0). - * At the end of conversion the resampling buffer can be flushed by calling - * swr_convert() with NULL in and 0 in_count. - * - * The samples used in the conversion process can be managed with the libavutil - * @ref lavu_sampmanip "samples manipulation" API, including av_samples_alloc() - * function used in the following example. - * - * The delay between input and output, can at any time be found by using - * swr_get_delay(). - * - * The following code demonstrates the conversion loop assuming the parameters - * from above and caller-defined functions get_input() and handle_output(): - * @code - * uint8_t **input; - * int in_samples; - * - * while (get_input(&input, &in_samples)) { - * uint8_t *output; - * int out_samples = av_rescale_rnd(swr_get_delay(swr, 48000) + - * in_samples, 44100, 48000, AV_ROUND_UP); - * av_samples_alloc(&output, NULL, 2, out_samples, - * AV_SAMPLE_FMT_S16, 0); - * out_samples = swr_convert(swr, &output, out_samples, - * input, in_samples); - * handle_output(output, out_samples); - * av_freep(&output); - * } - * @endcode - * - * When the conversion is finished, the conversion - * context and everything associated with it must be freed with swr_free(). - * A swr_close() function is also available, but it exists mainly for - * compatibility with libavresample, and is not required to be called. - * - * There will be no memory leak if the data is not completely flushed before - * swr_free(). - */ - -#include -#include "libavutil/channel_layout.h" -#include "libavutil/frame.h" -#include "libavutil/samplefmt.h" - -#include "libswresample/version.h" - -/** - * @name Option constants - * These constants are used for the @ref avoptions interface for lswr. - * @{ - * - */ - -#define SWR_FLAG_RESAMPLE 1 ///< Force resampling even if equal sample rate -//TODO use int resample ? -//long term TODO can we enable this dynamically? - -/** Dithering algorithms */ -enum SwrDitherType { - SWR_DITHER_NONE = 0, - SWR_DITHER_RECTANGULAR, - SWR_DITHER_TRIANGULAR, - SWR_DITHER_TRIANGULAR_HIGHPASS, - - SWR_DITHER_NS = 64, ///< not part of API/ABI - SWR_DITHER_NS_LIPSHITZ, - SWR_DITHER_NS_F_WEIGHTED, - SWR_DITHER_NS_MODIFIED_E_WEIGHTED, - SWR_DITHER_NS_IMPROVED_E_WEIGHTED, - SWR_DITHER_NS_SHIBATA, - SWR_DITHER_NS_LOW_SHIBATA, - SWR_DITHER_NS_HIGH_SHIBATA, - SWR_DITHER_NB, ///< not part of API/ABI -}; - -/** Resampling Engines */ -enum SwrEngine { - SWR_ENGINE_SWR, /**< SW Resampler */ - SWR_ENGINE_SOXR, /**< SoX Resampler */ - SWR_ENGINE_NB, ///< not part of API/ABI -}; - -/** Resampling Filter Types */ -enum SwrFilterType { - SWR_FILTER_TYPE_CUBIC, /**< Cubic */ - SWR_FILTER_TYPE_BLACKMAN_NUTTALL, /**< Blackman Nuttall windowed sinc */ - SWR_FILTER_TYPE_KAISER, /**< Kaiser windowed sinc */ -}; - -/** - * @} - */ - -/** - * The libswresample context. Unlike libavcodec and libavformat, this structure - * is opaque. This means that if you would like to set options, you must use - * the @ref avoptions API and cannot directly set values to members of the - * structure. - */ -typedef struct SwrContext SwrContext; - -/** - * Get the AVClass for SwrContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - * @return the AVClass of SwrContext - */ -const AVClass *swr_get_class(void); - -/** - * @name SwrContext constructor functions - * @{ - */ - -/** - * Allocate SwrContext. - * - * If you use this function you will need to set the parameters (manually or - * with swr_alloc_set_opts()) before calling swr_init(). - * - * @see swr_alloc_set_opts(), swr_init(), swr_free() - * @return NULL on error, allocated context otherwise - */ -struct SwrContext *swr_alloc(void); - -/** - * Initialize context after user parameters have been set. - * @note The context must be configured using the AVOption API. - * - * @see av_opt_set_int() - * @see av_opt_set_dict() - * - * @param[in,out] s Swr context to initialize - * @return AVERROR error code in case of failure. - */ -int swr_init(struct SwrContext *s); - -/** - * Check whether an swr context has been initialized or not. - * - * @param[in] s Swr context to check - * @see swr_init() - * @return positive if it has been initialized, 0 if not initialized - */ -int swr_is_initialized(struct SwrContext *s); - -/** - * Allocate SwrContext if needed and set/reset common parameters. - * - * This function does not require s to be allocated with swr_alloc(). On the - * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters - * on the allocated context. - * - * @param s existing Swr context if available, or NULL if not - * @param out_ch_layout output channel layout (AV_CH_LAYOUT_*) - * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*). - * @param out_sample_rate output sample rate (frequency in Hz) - * @param in_ch_layout input channel layout (AV_CH_LAYOUT_*) - * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*). - * @param in_sample_rate input sample rate (frequency in Hz) - * @param log_offset logging level offset - * @param log_ctx parent logging context, can be NULL - * - * @see swr_init(), swr_free() - * @return NULL on error, allocated context otherwise - */ -struct SwrContext *swr_alloc_set_opts(struct SwrContext *s, - int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate, - int64_t in_ch_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate, - int log_offset, void *log_ctx); - -/** - * @} - * - * @name SwrContext destructor functions - * @{ - */ - -/** - * Free the given SwrContext and set the pointer to NULL. - * - * @param[in] s a pointer to a pointer to Swr context - */ -void swr_free(struct SwrContext **s); - -/** - * Closes the context so that swr_is_initialized() returns 0. - * - * The context can be brought back to life by running swr_init(), - * swr_init() can also be used without swr_close(). - * This function is mainly provided for simplifying the usecase - * where one tries to support libavresample and libswresample. - * - * @param[in,out] s Swr context to be closed - */ -void swr_close(struct SwrContext *s); - -/** - * @} - * - * @name Core conversion functions - * @{ - */ - -/** Convert audio. - * - * in and in_count can be set to 0 to flush the last few samples out at the - * end. - * - * If more input is provided than output space, then the input will be buffered. - * You can avoid this buffering by using swr_get_out_samples() to retrieve an - * upper bound on the required number of output samples for the given number of - * input samples. Conversion will run directly without copying whenever possible. - * - * @param s allocated Swr context, with parameters set - * @param out output buffers, only the first one need be set in case of packed audio - * @param out_count amount of space available for output in samples per channel - * @param in input buffers, only the first one need to be set in case of packed audio - * @param in_count number of input samples available in one channel - * - * @return number of samples output per channel, negative value on error - */ -int swr_convert(struct SwrContext *s, uint8_t **out, int out_count, - const uint8_t **in , int in_count); - -/** - * Convert the next timestamp from input to output - * timestamps are in 1/(in_sample_rate * out_sample_rate) units. - * - * @note There are 2 slightly differently behaving modes. - * @li When automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) - * in this case timestamps will be passed through with delays compensated - * @li When automatic timestamp compensation is used, (min_compensation < FLT_MAX) - * in this case the output timestamps will match output sample numbers. - * See ffmpeg-resampler(1) for the two modes of compensation. - * - * @param s[in] initialized Swr context - * @param pts[in] timestamp for the next input sample, INT64_MIN if unknown - * @see swr_set_compensation(), swr_drop_output(), and swr_inject_silence() are - * function used internally for timestamp compensation. - * @return the output timestamp for the next output sample - */ -int64_t swr_next_pts(struct SwrContext *s, int64_t pts); - -/** - * @} - * - * @name Low-level option setting functions - * These functons provide a means to set low-level options that is not possible - * with the AVOption API. - * @{ - */ - -/** - * Activate resampling compensation ("soft" compensation). This function is - * internally called when needed in swr_next_pts(). - * - * @param[in,out] s allocated Swr context. If it is not initialized, - * or SWR_FLAG_RESAMPLE is not set, swr_init() is - * called with the flag set. - * @param[in] sample_delta delta in PTS per sample - * @param[in] compensation_distance number of samples to compensate for - * @return >= 0 on success, AVERROR error codes if: - * @li @c s is NULL, - * @li @c compensation_distance is less than 0, - * @li @c compensation_distance is 0 but sample_delta is not, - * @li compensation unsupported by resampler, or - * @li swr_init() fails when called. - */ -int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensation_distance); - -/** - * Set a customized input channel mapping. - * - * @param[in,out] s allocated Swr context, not yet initialized - * @param[in] channel_map customized input channel mapping (array of channel - * indexes, -1 for a muted channel) - * @return >= 0 on success, or AVERROR error code in case of failure. - */ -int swr_set_channel_mapping(struct SwrContext *s, const int *channel_map); - -/** - * Generate a channel mixing matrix. - * - * This function is the one used internally by libswresample for building the - * default mixing matrix. It is made public just as a utility function for - * building custom matrices. - * - * @param in_layout input channel layout - * @param out_layout output channel layout - * @param center_mix_level mix level for the center channel - * @param surround_mix_level mix level for the surround channel(s) - * @param lfe_mix_level mix level for the low-frequency effects channel - * @param rematrix_maxval if 1.0, coefficients will be normalized to prevent - * overflow. if INT_MAX, coefficients will not be - * normalized. - * @param[out] matrix mixing coefficients; matrix[i + stride * o] is - * the weight of input channel i in output channel o. - * @param stride distance between adjacent input channels in the - * matrix array - * @param matrix_encoding matrixed stereo downmix mode (e.g. dplii) - * @param log_ctx parent logging context, can be NULL - * @return 0 on success, negative AVERROR code on failure - */ -int swr_build_matrix(uint64_t in_layout, uint64_t out_layout, - double center_mix_level, double surround_mix_level, - double lfe_mix_level, double rematrix_maxval, - double rematrix_volume, double *matrix, - int stride, enum AVMatrixEncoding matrix_encoding, - void *log_ctx); - -/** - * Set a customized remix matrix. - * - * @param s allocated Swr context, not yet initialized - * @param matrix remix coefficients; matrix[i + stride * o] is - * the weight of input channel i in output channel o - * @param stride offset between lines of the matrix - * @return >= 0 on success, or AVERROR error code in case of failure. - */ -int swr_set_matrix(struct SwrContext *s, const double *matrix, int stride); - -/** - * @} - * - * @name Sample handling functions - * @{ - */ - -/** - * Drops the specified number of output samples. - * - * This function, along with swr_inject_silence(), is called by swr_next_pts() - * if needed for "hard" compensation. - * - * @param s allocated Swr context - * @param count number of samples to be dropped - * - * @return >= 0 on success, or a negative AVERROR code on failure - */ -int swr_drop_output(struct SwrContext *s, int count); - -/** - * Injects the specified number of silence samples. - * - * This function, along with swr_drop_output(), is called by swr_next_pts() - * if needed for "hard" compensation. - * - * @param s allocated Swr context - * @param count number of samples to be dropped - * - * @return >= 0 on success, or a negative AVERROR code on failure - */ -int swr_inject_silence(struct SwrContext *s, int count); - -/** - * Gets the delay the next input sample will experience relative to the next output sample. - * - * Swresample can buffer data if more input has been provided than available - * output space, also converting between sample rates needs a delay. - * This function returns the sum of all such delays. - * The exact delay is not necessarily an integer value in either input or - * output sample rate. Especially when downsampling by a large value, the - * output sample rate may be a poor choice to represent the delay, similarly - * for upsampling and the input sample rate. - * - * @param s swr context - * @param base timebase in which the returned delay will be: - * @li if it's set to 1 the returned delay is in seconds - * @li if it's set to 1000 the returned delay is in milliseconds - * @li if it's set to the input sample rate then the returned - * delay is in input samples - * @li if it's set to the output sample rate then the returned - * delay is in output samples - * @li if it's the least common multiple of in_sample_rate and - * out_sample_rate then an exact rounding-free delay will be - * returned - * @returns the delay in 1 / @c base units. - */ -int64_t swr_get_delay(struct SwrContext *s, int64_t base); - -/** - * Find an upper bound on the number of samples that the next swr_convert - * call will output, if called with in_samples of input samples. This - * depends on the internal state, and anything changing the internal state - * (like further swr_convert() calls) will may change the number of samples - * swr_get_out_samples() returns for the same number of input samples. - * - * @param in_samples number of input samples. - * @note any call to swr_inject_silence(), swr_convert(), swr_next_pts() - * or swr_set_compensation() invalidates this limit - * @note it is recommended to pass the correct available buffer size - * to all functions like swr_convert() even if swr_get_out_samples() - * indicates that less would be used. - * @returns an upper bound on the number of samples that the next swr_convert - * will output or a negative value to indicate an error - */ -int swr_get_out_samples(struct SwrContext *s, int in_samples); - -/** - * @} - * - * @name Configuration accessors - * @{ - */ - -/** - * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. - * - * This is useful to check if the build-time libswresample has the same version - * as the run-time one. - * - * @returns the unsigned int-typed version - */ -unsigned swresample_version(void); - -/** - * Return the swr build-time configuration. - * - * @returns the build-time @c ./configure flags - */ -const char *swresample_configuration(void); - -/** - * Return the swr license. - * - * @returns the license of libswresample, determined at build-time - */ -const char *swresample_license(void); - -/** - * @} - * - * @name AVFrame based API - * @{ - */ - -/** - * Convert the samples in the input AVFrame and write them to the output AVFrame. - * - * Input and output AVFrames must have channel_layout, sample_rate and format set. - * - * If the output AVFrame does not have the data pointers allocated the nb_samples - * field will be set using av_frame_get_buffer() - * is called to allocate the frame. - * - * The output AVFrame can be NULL or have fewer allocated samples than required. - * In this case, any remaining samples not written to the output will be added - * to an internal FIFO buffer, to be returned at the next call to this function - * or to swr_convert(). - * - * If converting sample rate, there may be data remaining in the internal - * resampling delay buffer. swr_get_delay() tells the number of - * remaining samples. To get this data as output, call this function or - * swr_convert() with NULL input. - * - * If the SwrContext configuration does not match the output and - * input AVFrame settings the conversion does not take place and depending on - * which AVFrame is not matching AVERROR_OUTPUT_CHANGED, AVERROR_INPUT_CHANGED - * or the result of a bitwise-OR of them is returned. - * - * @see swr_delay() - * @see swr_convert() - * @see swr_get_delay() - * - * @param swr audio resample context - * @param output output AVFrame - * @param input input AVFrame - * @return 0 on success, AVERROR on failure or nonmatching - * configuration. - */ -int swr_convert_frame(SwrContext *swr, - AVFrame *output, const AVFrame *input); - -/** - * Configure or reconfigure the SwrContext using the information - * provided by the AVFrames. - * - * The original resampling context is reset even on failure. - * The function calls swr_close() internally if the context is open. - * - * @see swr_close(); - * - * @param swr audio resample context - * @param output output AVFrame - * @param input input AVFrame - * @return 0 on success, AVERROR on failure. - */ -int swr_config_frame(SwrContext *swr, const AVFrame *out, const AVFrame *in); - -/** - * @} - * @} - */ - -#endif /* SWRESAMPLE_SWRESAMPLE_H */ diff --git a/prebuilts/x86/include/libswresample/version.h b/prebuilts/x86/include/libswresample/version.h deleted file mode 100644 index 0a99e0f..0000000 --- a/prebuilts/x86/include/libswresample/version.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Version macros. - * - * This file is part of libswresample - * - * libswresample is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * libswresample is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with libswresample; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWRESAMPLE_VERSION_H -#define SWRESAMPLE_VERSION_H - -/** - * @file - * Libswresample version macros - */ - -#include "libavutil/avutil.h" - -#define LIBSWRESAMPLE_VERSION_MAJOR 3 -#define LIBSWRESAMPLE_VERSION_MINOR 9 -#define LIBSWRESAMPLE_VERSION_MICRO 100 - -#define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ - LIBSWRESAMPLE_VERSION_MINOR, \ - LIBSWRESAMPLE_VERSION_MICRO) -#define LIBSWRESAMPLE_VERSION AV_VERSION(LIBSWRESAMPLE_VERSION_MAJOR, \ - LIBSWRESAMPLE_VERSION_MINOR, \ - LIBSWRESAMPLE_VERSION_MICRO) -#define LIBSWRESAMPLE_BUILD LIBSWRESAMPLE_VERSION_INT - -#define LIBSWRESAMPLE_IDENT "SwR" AV_STRINGIFY(LIBSWRESAMPLE_VERSION) - -#endif /* SWRESAMPLE_VERSION_H */ diff --git a/prebuilts/x86/include/libswscale/swscale.h b/prebuilts/x86/include/libswscale/swscale.h deleted file mode 100644 index 7713f51..0000000 --- a/prebuilts/x86/include/libswscale/swscale.h +++ /dev/null @@ -1,336 +0,0 @@ -/* - * Copyright (C) 2001-2011 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_SWSCALE_H -#define SWSCALE_SWSCALE_H - -/** - * @file - * @ingroup libsws - * external API header - */ - -#include - -#include "libavutil/avutil.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "version.h" - -/** - * @defgroup libsws libswscale - * Color conversion and scaling library. - * - * @{ - * - * Return the LIBSWSCALE_VERSION_INT constant. - */ -unsigned swscale_version(void); - -/** - * Return the libswscale build-time configuration. - */ -const char *swscale_configuration(void); - -/** - * Return the libswscale license. - */ -const char *swscale_license(void); - -/* values for the flags, the stuff on the command line is different */ -#define SWS_FAST_BILINEAR 1 -#define SWS_BILINEAR 2 -#define SWS_BICUBIC 4 -#define SWS_X 8 -#define SWS_POINT 0x10 -#define SWS_AREA 0x20 -#define SWS_BICUBLIN 0x40 -#define SWS_GAUSS 0x80 -#define SWS_SINC 0x100 -#define SWS_LANCZOS 0x200 -#define SWS_SPLINE 0x400 - -#define SWS_SRC_V_CHR_DROP_MASK 0x30000 -#define SWS_SRC_V_CHR_DROP_SHIFT 16 - -#define SWS_PARAM_DEFAULT 123456 - -#define SWS_PRINT_INFO 0x1000 - -//the following 3 flags are not completely implemented -//internal chrominance subsampling info -#define SWS_FULL_CHR_H_INT 0x2000 -//input subsampling info -#define SWS_FULL_CHR_H_INP 0x4000 -#define SWS_DIRECT_BGR 0x8000 -#define SWS_ACCURATE_RND 0x40000 -#define SWS_BITEXACT 0x80000 -#define SWS_ERROR_DIFFUSION 0x800000 - -#define SWS_MAX_REDUCE_CUTOFF 0.002 - -#define SWS_CS_ITU709 1 -#define SWS_CS_FCC 4 -#define SWS_CS_ITU601 5 -#define SWS_CS_ITU624 5 -#define SWS_CS_SMPTE170M 5 -#define SWS_CS_SMPTE240M 7 -#define SWS_CS_DEFAULT 5 -#define SWS_CS_BT2020 9 - -/** - * Return a pointer to yuv<->rgb coefficients for the given colorspace - * suitable for sws_setColorspaceDetails(). - * - * @param colorspace One of the SWS_CS_* macros. If invalid, - * SWS_CS_DEFAULT is used. - */ -const int *sws_getCoefficients(int colorspace); - -// when used for filters they must have an odd number of elements -// coeffs cannot be shared between vectors -typedef struct SwsVector { - double *coeff; ///< pointer to the list of coefficients - int length; ///< number of coefficients in the vector -} SwsVector; - -// vectors can be shared -typedef struct SwsFilter { - SwsVector *lumH; - SwsVector *lumV; - SwsVector *chrH; - SwsVector *chrV; -} SwsFilter; - -struct SwsContext; - -/** - * Return a positive value if pix_fmt is a supported input format, 0 - * otherwise. - */ -int sws_isSupportedInput(enum AVPixelFormat pix_fmt); - -/** - * Return a positive value if pix_fmt is a supported output format, 0 - * otherwise. - */ -int sws_isSupportedOutput(enum AVPixelFormat pix_fmt); - -/** - * @param[in] pix_fmt the pixel format - * @return a positive value if an endianness conversion for pix_fmt is - * supported, 0 otherwise. - */ -int sws_isSupportedEndiannessConversion(enum AVPixelFormat pix_fmt); - -/** - * Allocate an empty SwsContext. This must be filled and passed to - * sws_init_context(). For filling see AVOptions, options.c and - * sws_setColorspaceDetails(). - */ -struct SwsContext *sws_alloc_context(void); - -/** - * Initialize the swscaler context sws_context. - * - * @return zero or positive value on success, a negative value on - * error - */ -av_warn_unused_result -int sws_init_context(struct SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter); - -/** - * Free the swscaler context swsContext. - * If swsContext is NULL, then does nothing. - */ -void sws_freeContext(struct SwsContext *swsContext); - -/** - * Allocate and return an SwsContext. You need it to perform - * scaling/conversion operations using sws_scale(). - * - * @param srcW the width of the source image - * @param srcH the height of the source image - * @param srcFormat the source image format - * @param dstW the width of the destination image - * @param dstH the height of the destination image - * @param dstFormat the destination image format - * @param flags specify which algorithm and options to use for rescaling - * @param param extra parameters to tune the used scaler - * For SWS_BICUBIC param[0] and [1] tune the shape of the basis - * function, param[0] tunes f(1) and param[1] f´(1) - * For SWS_GAUSS param[0] tunes the exponent and thus cutoff - * frequency - * For SWS_LANCZOS param[0] tunes the width of the window function - * @return a pointer to an allocated context, or NULL in case of error - * @note this function is to be removed after a saner alternative is - * written - */ -struct SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat, - int dstW, int dstH, enum AVPixelFormat dstFormat, - int flags, SwsFilter *srcFilter, - SwsFilter *dstFilter, const double *param); - -/** - * Scale the image slice in srcSlice and put the resulting scaled - * slice in the image in dst. A slice is a sequence of consecutive - * rows in an image. - * - * Slices have to be provided in sequential order, either in - * top-bottom or bottom-top order. If slices are provided in - * non-sequential order the behavior of the function is undefined. - * - * @param c the scaling context previously created with - * sws_getContext() - * @param srcSlice the array containing the pointers to the planes of - * the source slice - * @param srcStride the array containing the strides for each plane of - * the source image - * @param srcSliceY the position in the source image of the slice to - * process, that is the number (counted starting from - * zero) in the image of the first row of the slice - * @param srcSliceH the height of the source slice, that is the number - * of rows in the slice - * @param dst the array containing the pointers to the planes of - * the destination image - * @param dstStride the array containing the strides for each plane of - * the destination image - * @return the height of the output slice - */ -int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], - const int srcStride[], int srcSliceY, int srcSliceH, - uint8_t *const dst[], const int dstStride[]); - -/** - * @param dstRange flag indicating the while-black range of the output (1=jpeg / 0=mpeg) - * @param srcRange flag indicating the while-black range of the input (1=jpeg / 0=mpeg) - * @param table the yuv2rgb coefficients describing the output yuv space, normally ff_yuv2rgb_coeffs[x] - * @param inv_table the yuv2rgb coefficients describing the input yuv space, normally ff_yuv2rgb_coeffs[x] - * @param brightness 16.16 fixed point brightness correction - * @param contrast 16.16 fixed point contrast correction - * @param saturation 16.16 fixed point saturation correction - * @return -1 if not supported - */ -int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], - int srcRange, const int table[4], int dstRange, - int brightness, int contrast, int saturation); - -/** - * @return -1 if not supported - */ -int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, - int *srcRange, int **table, int *dstRange, - int *brightness, int *contrast, int *saturation); - -/** - * Allocate and return an uninitialized vector with length coefficients. - */ -SwsVector *sws_allocVec(int length); - -/** - * Return a normalized Gaussian curve used to filter stuff - * quality = 3 is high quality, lower is lower quality. - */ -SwsVector *sws_getGaussianVec(double variance, double quality); - -/** - * Scale all the coefficients of a by the scalar value. - */ -void sws_scaleVec(SwsVector *a, double scalar); - -/** - * Scale all the coefficients of a so that their sum equals height. - */ -void sws_normalizeVec(SwsVector *a, double height); - -#if FF_API_SWS_VECTOR -attribute_deprecated SwsVector *sws_getConstVec(double c, int length); -attribute_deprecated SwsVector *sws_getIdentityVec(void); -attribute_deprecated void sws_convVec(SwsVector *a, SwsVector *b); -attribute_deprecated void sws_addVec(SwsVector *a, SwsVector *b); -attribute_deprecated void sws_subVec(SwsVector *a, SwsVector *b); -attribute_deprecated void sws_shiftVec(SwsVector *a, int shift); -attribute_deprecated SwsVector *sws_cloneVec(SwsVector *a); -attribute_deprecated void sws_printVec2(SwsVector *a, AVClass *log_ctx, int log_level); -#endif - -void sws_freeVec(SwsVector *a); - -SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, - float lumaSharpen, float chromaSharpen, - float chromaHShift, float chromaVShift, - int verbose); -void sws_freeFilter(SwsFilter *filter); - -/** - * Check if context can be reused, otherwise reallocate a new one. - * - * If context is NULL, just calls sws_getContext() to get a new - * context. Otherwise, checks if the parameters are the ones already - * saved in context. If that is the case, returns the current - * context. Otherwise, frees context and gets a new context with - * the new parameters. - * - * Be warned that srcFilter and dstFilter are not checked, they - * are assumed to remain the same. - */ -struct SwsContext *sws_getCachedContext(struct SwsContext *context, - int srcW, int srcH, enum AVPixelFormat srcFormat, - int dstW, int dstH, enum AVPixelFormat dstFormat, - int flags, SwsFilter *srcFilter, - SwsFilter *dstFilter, const double *param); - -/** - * Convert an 8-bit paletted frame into a frame with a color depth of 32 bits. - * - * The output frame will have the same packed format as the palette. - * - * @param src source frame buffer - * @param dst destination frame buffer - * @param num_pixels number of pixels to convert - * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src - */ -void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); - -/** - * Convert an 8-bit paletted frame into a frame with a color depth of 24 bits. - * - * With the palette format "ABCD", the destination frame ends up with the format "ABC". - * - * @param src source frame buffer - * @param dst destination frame buffer - * @param num_pixels number of pixels to convert - * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src - */ -void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); - -/** - * Get the AVClass for swsContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *sws_get_class(void); - -/** - * @} - */ - -#endif /* SWSCALE_SWSCALE_H */ diff --git a/prebuilts/x86/include/libswscale/version.h b/prebuilts/x86/include/libswscale/version.h deleted file mode 100644 index bc61201..0000000 --- a/prebuilts/x86/include/libswscale/version.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_VERSION_H -#define SWSCALE_VERSION_H - -/** - * @file - * swscale version macros - */ - -#include "libavutil/version.h" - -#define LIBSWSCALE_VERSION_MAJOR 5 -#define LIBSWSCALE_VERSION_MINOR 9 -#define LIBSWSCALE_VERSION_MICRO 100 - -#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_VERSION AV_VERSION(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_BUILD LIBSWSCALE_VERSION_INT - -#define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ - -#ifndef FF_API_SWS_VECTOR -#define FF_API_SWS_VECTOR (LIBSWSCALE_VERSION_MAJOR < 6) -#endif - -#endif /* SWSCALE_VERSION_H */ diff --git a/prebuilts/x86/include/va/va.h b/prebuilts/x86/include/va/va.h deleted file mode 100644 index 957dc53..0000000 --- a/prebuilts/x86/include/va/va.h +++ /dev/null @@ -1,5269 +0,0 @@ -/* - * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -/* - * Video Acceleration (VA) API Specification - * - * Rev. 0.30 - * - * - * Revision History: - * rev 0.10 (12/10/2006 Jonathan Bian) - Initial draft - * rev 0.11 (12/15/2006 Jonathan Bian) - Fixed some errors - * rev 0.12 (02/05/2007 Jonathan Bian) - Added VC-1 data structures for slice level decode - * rev 0.13 (02/28/2007 Jonathan Bian) - Added GetDisplay() - * rev 0.14 (04/13/2007 Jonathan Bian) - Fixed MPEG-2 PictureParameter structure, cleaned up a few funcs. - * rev 0.15 (04/20/2007 Jonathan Bian) - Overhauled buffer management - * rev 0.16 (05/02/2007 Jonathan Bian) - Added error codes and fixed some issues with configuration - * rev 0.17 (05/07/2007 Jonathan Bian) - Added H.264/AVC data structures for slice level decode. - * rev 0.18 (05/14/2007 Jonathan Bian) - Added data structures for MPEG-4 slice level decode - * and MPEG-2 motion compensation. - * rev 0.19 (08/06/2007 Jonathan Bian) - Removed extra type for bitplane data. - * rev 0.20 (08/08/2007 Jonathan Bian) - Added missing fields to VC-1 PictureParameter structure. - * rev 0.21 (08/20/2007 Jonathan Bian) - Added image and subpicture support. - * rev 0.22 (08/27/2007 Jonathan Bian) - Added support for chroma-keying and global alpha. - * rev 0.23 (09/11/2007 Jonathan Bian) - Fixed some issues with images and subpictures. - * rev 0.24 (09/18/2007 Jonathan Bian) - Added display attributes. - * rev 0.25 (10/18/2007 Jonathan Bian) - Changed to use IDs only for some types. - * rev 0.26 (11/07/2007 Waldo Bastian) - Change vaCreateBuffer semantics - * rev 0.27 (11/19/2007 Matt Sottek) - Added DeriveImage - * rev 0.28 (12/06/2007 Jonathan Bian) - Added new versions of PutImage and AssociateSubpicture - * to enable scaling - * rev 0.29 (02/07/2008 Jonathan Bian) - VC1 parameter fixes, - * added VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED - * rev 0.30 (03/01/2009 Jonathan Bian) - Added encoding support for H.264 BP and MPEG-4 SP and fixes - * for ISO C conformance. - * rev 0.31 (09/02/2009 Gwenole Beauchesne) - VC-1/H264 fields change for VDPAU and XvBA backend - * Application needs to relink with the new library. - * - * rev 0.31.1 (03/29/2009) - Data structure for JPEG encode - * rev 0.31.2 (01/13/2011 Anthony Pabon)- Added a flag to indicate Subpicture coordinates are screen - * screen relative rather than source video relative. - * rev 0.32.0 (01/13/2011 Xiang Haihao) - Add profile into VAPictureParameterBufferVC1 - * update VAAPI to 0.32.0 - * - * Acknowledgements: - * Some concepts borrowed from XvMC and XvImage. - * Waldo Bastian (Intel), Matt Sottek (Intel), Austin Yuan (Intel), and Gwenole Beauchesne (SDS) - * contributed to various aspects of the API. - */ - -/** - * \file va.h - * \brief The Core API - * - * This file contains the \ref api_core "Core API". - */ - -#ifndef _VA_H_ -#define _VA_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(__GNUC__) && !defined(__COVERITY__) -#define va_deprecated __attribute__((deprecated)) -#if __GNUC__ >= 6 -#define va_deprecated_enum va_deprecated -#else -#define va_deprecated_enum -#endif -#else -#define va_deprecated -#define va_deprecated_enum -#endif - -/** - * \mainpage Video Acceleration (VA) API - * - * \section intro Introduction - * - * The main motivation for VA-API (Video Acceleration API) is to - * enable hardware accelerated video decode and encode at various - * entry-points (VLD, IDCT, Motion Compensation etc.) for the - * prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 - * AVC/H.264, VC-1/VMW3, and JPEG, HEVC/H265, VP8, VP9) and video pre/post - * processing - * - * VA-API is split into several modules: - * - \ref api_core - * - Encoder (H264, HEVC, JPEG, MPEG2, VP8, VP9) - * - \ref api_enc_h264 - * - \ref api_enc_hevc - * - \ref api_enc_jpeg - * - \ref api_enc_mpeg2 - * - \ref api_enc_vp8 - * - \ref api_enc_vp9 - * - \ref api_enc_av1 - * - Decoder (HEVC, JPEG, VP8, VP9, AV1) - * - \ref api_dec_hevc - * - \ref api_dec_jpeg - * - \ref api_dec_vp8 - * - \ref api_dec_vp9 - * - \ref api_dec_av1 - * - \ref api_vpp - * - \ref api_prot - * - FEI (H264, HEVC) - * - \ref api_fei - * - \ref api_fei_h264 - * - \ref api_fei_hevc - * - * \section threading Multithreading Guide - * All VAAPI functions implemented in libva are thread-safe. For any VAAPI - * function that requires the implementation of a backend (e.g. hardware driver), - * the backend must ensure that its implementation is also thread-safe. If the - * backend implementation of a VAAPI function is not thread-safe then this should - * be considered as a bug against the backend implementation. - * - * It is assumed that none of the VAAPI functions will be called from signal - * handlers. - * - * Thread-safety in this context means that when VAAPI is being called by multiple - * concurrent threads, it will not crash or hang the OS, and VAAPI internal - * data structures will not be corrupted. When multiple threads are operating on - * the same VAAPI objects, it is the application's responsibility to synchronize - * these operations in order to generate the expected results. For example, using - * a single VAContext from multiple threads may generate unexpected results. - * - * Following pseudo code illustrates a multithreaded transcoding scenario, where - * one thread is handling the decoding operation and another thread is handling - * the encoding operation, while synchronizing the use of a common pool of - * surfaces. - * - * \code - * // Initialization - * dpy = vaGetDisplayDRM(fd); - * vaInitialize(dpy, ...); - * - * // Create surfaces required for decoding and subsequence encoding - * vaCreateSurfaces(dpy, VA_RT_FORMAT_YUV420, width, height, &surfaces[0], ...); - * - * // Set up a queue for the surfaces shared between decode and encode threads - * surface_queue = queue_create(); - * - * // Create decode_thread - * pthread_create(&decode_thread, NULL, decode, ...); - * - * // Create encode_thread - * pthread_create(&encode_thread, NULL, encode, ...); - * - * // Decode thread function - * decode() { - * // Find the decode entrypoint for H.264 - * vaQueryConfigEntrypoints(dpy, h264_profile, entrypoints, ...); - * - * // Create a config for H.264 decode - * vaCreateConfig(dpy, h264_profile, VAEntrypointVLD, ...); - * - * // Create a context for decode - * vaCreateContext(dpy, config, width, height, VA_PROGRESSIVE, surfaces, - * num_surfaces, &decode_context); - * - * // Decode frames in the bitstream - * for (;;) { - * // Parse one frame and decode - * vaBeginPicture(dpy, decode_context, surfaces[surface_index]); - * vaRenderPicture(dpy, decode_context, buf, ...); - * vaEndPicture(dpy, decode_context); - * // Poll the decoding status and enqueue the surface in display order after - * // decoding is complete - * vaQuerySurfaceStatus(); - * enqueue(surface_queue, surface_index); - * } - * } - * - * // Encode thread function - * encode() { - * // Find the encode entrypoint for HEVC - * vaQueryConfigEntrypoints(dpy, hevc_profile, entrypoints, ...); - * - * // Create a config for HEVC encode - * vaCreateConfig(dpy, hevc_profile, VAEntrypointEncSlice, ...); - * - * // Create a context for encode - * vaCreateContext(dpy, config, width, height, VA_PROGRESSIVE, surfaces, - * num_surfaces, &encode_context); - * - * // Encode frames produced by the decoder - * for (;;) { - * // Dequeue the surface enqueued by the decoder - * surface_index = dequeue(surface_queue); - * // Encode using this surface as the source - * vaBeginPicture(dpy, encode_context, surfaces[surface_index]); - * vaRenderPicture(dpy, encode_context, buf, ...); - * vaEndPicture(dpy, encode_context); - * } - * } - * \endcode - */ - -/** - * \defgroup api_core Core API - * - * @{ - */ - -/** -Overview - -The VA API is intended to provide an interface between a video decode/encode/processing -application (client) and a hardware accelerator (server), to off-load -video decode/encode/processing operations from the host to the hardware accelerator at various -entry-points. - -The basic operation steps are: - -- Negotiate a mutually acceptable configuration with the server to lock - down profile, entrypoints, and other attributes that will not change on - a frame-by-frame basis. -- Create a video decode, encode or processing context which represents a - "virtualized" hardware device -- Get and fill the render buffers with the corresponding data (depending on - profiles and entrypoints) -- Pass the render buffers to the server to handle the current frame - -Initialization & Configuration Management - -- Find out supported profiles -- Find out entrypoints for a given profile -- Find out configuration attributes for a given profile/entrypoint pair -- Create a configuration for use by the application - -*/ - -typedef void* VADisplay; /* window system dependent */ - -typedef int VAStatus; /** Return status type from functions */ -/** Values for the return status */ -#define VA_STATUS_SUCCESS 0x00000000 -#define VA_STATUS_ERROR_OPERATION_FAILED 0x00000001 -#define VA_STATUS_ERROR_ALLOCATION_FAILED 0x00000002 -#define VA_STATUS_ERROR_INVALID_DISPLAY 0x00000003 -#define VA_STATUS_ERROR_INVALID_CONFIG 0x00000004 -#define VA_STATUS_ERROR_INVALID_CONTEXT 0x00000005 -#define VA_STATUS_ERROR_INVALID_SURFACE 0x00000006 -#define VA_STATUS_ERROR_INVALID_BUFFER 0x00000007 -#define VA_STATUS_ERROR_INVALID_IMAGE 0x00000008 -#define VA_STATUS_ERROR_INVALID_SUBPICTURE 0x00000009 -#define VA_STATUS_ERROR_ATTR_NOT_SUPPORTED 0x0000000a -#define VA_STATUS_ERROR_MAX_NUM_EXCEEDED 0x0000000b -#define VA_STATUS_ERROR_UNSUPPORTED_PROFILE 0x0000000c -#define VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT 0x0000000d -#define VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT 0x0000000e -#define VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE 0x0000000f -#define VA_STATUS_ERROR_SURFACE_BUSY 0x00000010 -#define VA_STATUS_ERROR_FLAG_NOT_SUPPORTED 0x00000011 -#define VA_STATUS_ERROR_INVALID_PARAMETER 0x00000012 -#define VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 0x00000013 -#define VA_STATUS_ERROR_UNIMPLEMENTED 0x00000014 -#define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING 0x00000015 -#define VA_STATUS_ERROR_INVALID_IMAGE_FORMAT 0x00000016 -#define VA_STATUS_ERROR_DECODING_ERROR 0x00000017 -#define VA_STATUS_ERROR_ENCODING_ERROR 0x00000018 -/** - * \brief An invalid/unsupported value was supplied. - * - * This is a catch-all error code for invalid or unsupported values. - * e.g. value exceeding the valid range, invalid type in the context - * of generic attribute values. - */ -#define VA_STATUS_ERROR_INVALID_VALUE 0x00000019 -/** \brief An unsupported filter was supplied. */ -#define VA_STATUS_ERROR_UNSUPPORTED_FILTER 0x00000020 -/** \brief An invalid filter chain was supplied. */ -#define VA_STATUS_ERROR_INVALID_FILTER_CHAIN 0x00000021 -/** \brief Indicate HW busy (e.g. run multiple encoding simultaneously). */ -#define VA_STATUS_ERROR_HW_BUSY 0x00000022 -/** \brief An unsupported memory type was supplied. */ -#define VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE 0x00000024 -/** \brief Indicate allocated buffer size is not enough for input or output. */ -#define VA_STATUS_ERROR_NOT_ENOUGH_BUFFER 0x00000025 -/** \brief Indicate an operation isn't completed because time-out interval elapsed. */ -#define VA_STATUS_ERROR_TIMEDOUT 0x00000026 -#define VA_STATUS_ERROR_UNKNOWN 0xFFFFFFFF - -/** - * 1. De-interlacing flags for vaPutSurface() - * 2. Surface sample type for input/output surface flag - * - Progressive: VA_FRAME_PICTURE - * - Interleaved: VA_TOP_FIELD_FIRST, VA_BOTTOM_FIELD_FIRST - * - Field: VA_TOP_FIELD, VA_BOTTOM_FIELD -*/ -#define VA_FRAME_PICTURE 0x00000000 -#define VA_TOP_FIELD 0x00000001 -#define VA_BOTTOM_FIELD 0x00000002 -#define VA_TOP_FIELD_FIRST 0x00000004 -#define VA_BOTTOM_FIELD_FIRST 0x00000008 - -/** - * Enabled the positioning/cropping/blending feature: - * 1, specify the video playback position in the isurface - * 2, specify the cropping info for video playback - * 3, encoded video will blend with background color - */ -#define VA_ENABLE_BLEND 0x00000004 /* video area blend with the constant color */ - -/** - * Clears the drawable with background color. - * for hardware overlay based implementation this flag - * can be used to turn off the overlay - */ -#define VA_CLEAR_DRAWABLE 0x00000008 - -/** Color space conversion flags for vaPutSurface() */ -#define VA_SRC_COLOR_MASK 0x000000f0 -#define VA_SRC_BT601 0x00000010 -#define VA_SRC_BT709 0x00000020 -#define VA_SRC_SMPTE_240 0x00000040 - -/** Scaling flags for vaPutSurface() */ -#define VA_FILTER_SCALING_DEFAULT 0x00000000 -#define VA_FILTER_SCALING_FAST 0x00000100 -#define VA_FILTER_SCALING_HQ 0x00000200 -#define VA_FILTER_SCALING_NL_ANAMORPHIC 0x00000300 -#define VA_FILTER_SCALING_MASK 0x00000f00 - -/** Interpolation method for scaling */ -#define VA_FILTER_INTERPOLATION_DEFAULT 0x00000000 -#define VA_FILTER_INTERPOLATION_NEAREST_NEIGHBOR 0x00001000 -#define VA_FILTER_INTERPOLATION_BILINEAR 0x00002000 -#define VA_FILTER_INTERPOLATION_ADVANCED 0x00003000 -#define VA_FILTER_INTERPOLATION_MASK 0x0000f000 - -/** Padding size in 4-bytes */ -#define VA_PADDING_LOW 4 -#define VA_PADDING_MEDIUM 8 -#define VA_PADDING_HIGH 16 -#define VA_PADDING_LARGE 32 - -/** operation options */ -/** synchronization, block call, output should be ready after execution function return*/ -#define VA_EXEC_SYNC 0x0 -/** asynchronization,application should call additonal sync operation to access output */ -#define VA_EXEC_ASYNC 0x1 - -/** operation mode */ -#define VA_EXEC_MODE_DEFAULT 0x0 -#define VA_EXEC_MODE_POWER_SAVING 0x1 -#define VA_EXEC_MODE_PERFORMANCE 0x2 - -/* Values used to describe device features. */ -/** The feature is not supported by the device. - * - * Any corresponding feature flag must not be set. - */ -#define VA_FEATURE_NOT_SUPPORTED 0 -/** The feature is supported by the device. - * - * The user may decide whether or not to use this feature. - * - * Note that support for a feature only indicates that the hardware - * is able to use it; whether it is actually a positive change to - * enable it in a given situation will depend on other factors - * including the input provided by the user. - */ -#define VA_FEATURE_SUPPORTED 1 -/** The feature is required by the device. - * - * The device does not support not enabling this feature, so any - * corresponding feature flag must be set and any additional - * configuration needed by the feature must be supplied. - */ -#define VA_FEATURE_REQUIRED 2 - -/** - * Returns a short english description of error_status - */ -const char *vaErrorStr(VAStatus error_status); - -typedef struct _VARectangle { - int16_t x; - int16_t y; - uint16_t width; - uint16_t height; -} VARectangle; - -/** \brief Generic motion vector data structure. */ -typedef struct _VAMotionVector { - /** \mv0[0]: horizontal motion vector for past reference */ - /** \mv0[1]: vertical motion vector for past reference */ - /** \mv1[0]: horizontal motion vector for future reference */ - /** \mv1[1]: vertical motion vector for future reference */ - int16_t mv0[2]; /* past reference */ - int16_t mv1[2]; /* future reference */ -} VAMotionVector; - -/** Type of a message callback, used for both error and info log. */ -typedef void (*VAMessageCallback)(void *user_context, const char *message); - -/** - * Set the callback for error messages, or NULL for no logging. - * Returns the previous one, or NULL if it was disabled. - */ -VAMessageCallback vaSetErrorCallback(VADisplay dpy, VAMessageCallback callback, void *user_context); - -/** - * Set the callback for info messages, or NULL for no logging. - * Returns the previous one, or NULL if it was disabled. - */ -VAMessageCallback vaSetInfoCallback(VADisplay dpy, VAMessageCallback callback, void *user_context); - -/** - * Initialization: - * A display must be obtained by calling vaGetDisplay() before calling - * vaInitialize() and other functions. This connects the API to the - * native window system. - * For X Windows, native_dpy would be from XOpenDisplay() - */ -typedef void* VANativeDisplay; /* window system dependent */ - -int vaDisplayIsValid(VADisplay dpy); - -/** - * Set the override driver name instead of queried driver driver. - */ -VAStatus vaSetDriverName(VADisplay dpy, - char *driver_name - ); - -/** - * Initialize the library - */ -VAStatus vaInitialize( - VADisplay dpy, - int *major_version, /* out */ - int *minor_version /* out */ -); - -/** - * After this call, all library internal resources will be cleaned up - */ -VAStatus vaTerminate( - VADisplay dpy -); - -/** - * vaQueryVendorString returns a pointer to a zero-terminated string - * describing some aspects of the VA implemenation on a specific - * hardware accelerator. The format of the returned string is vendor - * specific and at the discretion of the implementer. - * e.g. for the Intel GMA500 implementation, an example would be: - * "Intel GMA500 - 2.0.0.32L.0005" - */ -const char *vaQueryVendorString( - VADisplay dpy -); - -typedef int (*VAPrivFunc)(void); - -/** - * Return a function pointer given a function name in the library. - * This allows private interfaces into the library - */ -VAPrivFunc vaGetLibFunc( - VADisplay dpy, - const char *func -); - -/** Currently defined profiles */ -typedef enum { - /** \brief Profile ID used for video processing. */ - VAProfileNone = -1, - VAProfileMPEG2Simple = 0, - VAProfileMPEG2Main = 1, - VAProfileMPEG4Simple = 2, - VAProfileMPEG4AdvancedSimple = 3, - VAProfileMPEG4Main = 4, - VAProfileH264Baseline va_deprecated_enum = 5, - VAProfileH264Main = 6, - VAProfileH264High = 7, - VAProfileVC1Simple = 8, - VAProfileVC1Main = 9, - VAProfileVC1Advanced = 10, - VAProfileH263Baseline = 11, - VAProfileJPEGBaseline = 12, - VAProfileH264ConstrainedBaseline = 13, - VAProfileVP8Version0_3 = 14, - VAProfileH264MultiviewHigh = 15, - VAProfileH264StereoHigh = 16, - VAProfileHEVCMain = 17, - VAProfileHEVCMain10 = 18, - VAProfileVP9Profile0 = 19, - VAProfileVP9Profile1 = 20, - VAProfileVP9Profile2 = 21, - VAProfileVP9Profile3 = 22, - VAProfileHEVCMain12 = 23, - VAProfileHEVCMain422_10 = 24, - VAProfileHEVCMain422_12 = 25, - VAProfileHEVCMain444 = 26, - VAProfileHEVCMain444_10 = 27, - VAProfileHEVCMain444_12 = 28, - VAProfileHEVCSccMain = 29, - VAProfileHEVCSccMain10 = 30, - VAProfileHEVCSccMain444 = 31, - VAProfileAV1Profile0 = 32, - VAProfileAV1Profile1 = 33, - VAProfileHEVCSccMain444_10 = 34, - /** \brief Profile ID used for protected video playback. */ - VAProfileProtected = 35 -} VAProfile; - -/** - * Currently defined entrypoints - */ -typedef enum { - VAEntrypointVLD = 1, - VAEntrypointIZZ = 2, - VAEntrypointIDCT = 3, - VAEntrypointMoComp = 4, - VAEntrypointDeblocking = 5, - VAEntrypointEncSlice = 6, /* slice level encode */ - VAEntrypointEncPicture = 7, /* pictuer encode, JPEG, etc */ - /* - * For an implementation that supports a low power/high performance variant - * for slice level encode, it can choose to expose the - * VAEntrypointEncSliceLP entrypoint. Certain encoding tools may not be - * available with this entrypoint (e.g. interlace, MBAFF) and the - * application can query the encoding configuration attributes to find - * out more details if this entrypoint is supported. - */ - VAEntrypointEncSliceLP = 8, - VAEntrypointVideoProc = 10, /**< Video pre/post-processing. */ - /** - * \brief VAEntrypointFEI - * - * The purpose of FEI (Flexible Encoding Infrastructure) is to allow applications to - * have more controls and trade off quality for speed with their own IPs. - * The application can optionally provide input to ENC for extra encode control - * and get the output from ENC. Application can chose to modify the ENC - * output/PAK input during encoding, but the performance impact is significant. - * - * On top of the existing buffers for normal encode, there will be - * one extra input buffer (VAEncMiscParameterFEIFrameControl) and - * three extra output buffers (VAEncFEIMVBufferType, VAEncFEIMBModeBufferType - * and VAEncFEIDistortionBufferType) for VAEntrypointFEI entry function. - * If separate PAK is set, two extra input buffers - * (VAEncFEIMVBufferType, VAEncFEIMBModeBufferType) are needed for PAK input. - **/ - VAEntrypointFEI = 11, - /** - * \brief VAEntrypointStats - * - * A pre-processing function for getting some statistics and motion vectors is added, - * and some extra controls for Encode pipeline are provided. The application can - * optionally call the statistics function to get motion vectors and statistics like - * variances, distortions before calling Encode function via this entry point. - * - * Checking whether Statistics is supported can be performed with vaQueryConfigEntrypoints(). - * If Statistics entry point is supported, then the list of returned entry-points will - * include #VAEntrypointStats. Supported pixel format, maximum resolution and statistics - * specific attributes can be obtained via normal attribute query. One input buffer - * (VAStatsStatisticsParameterBufferType) and one or two output buffers - * (VAStatsStatisticsBufferType, VAStatsStatisticsBottomFieldBufferType (for interlace only) - * and VAStatsMVBufferType) are needed for this entry point. - **/ - VAEntrypointStats = 12, - /** - * \brief VAEntrypointProtectedTEEComm - * - * A function for communicating with TEE (Trusted Execution Environment). - **/ - VAEntrypointProtectedTEEComm = 13, - /** - * \brief VAEntrypointProtectedContent - * - * A function for protected content to decrypt encrypted content. - **/ - VAEntrypointProtectedContent = 14, -} VAEntrypoint; - -/** Currently defined configuration attribute types */ -typedef enum { - VAConfigAttribRTFormat = 0, - VAConfigAttribSpatialResidual = 1, - VAConfigAttribSpatialClipping = 2, - VAConfigAttribIntraResidual = 3, - VAConfigAttribEncryption = 4, - VAConfigAttribRateControl = 5, - - /** @name Attributes for decoding */ - /**@{*/ - /** - * \brief Slice Decoding mode. Read/write. - * - * This attribute determines what mode the driver supports for slice - * decoding, through vaGetConfigAttributes(); and what mode the user - * will be providing to the driver, through vaCreateConfig(), if the - * driver supports those. If this attribute is not set by the user then - * it is assumed that VA_DEC_SLICE_MODE_NORMAL mode is used. - * - * See \c VA_DEC_SLICE_MODE_xxx for the list of slice decoding modes. - */ - VAConfigAttribDecSliceMode = 6, - /** - * \brief JPEG decoding attribute. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * JPEG implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValDecJPEG union. - */ - VAConfigAttribDecJPEG = 7, - /** - * \brief Decode processing support. Read/write. - * - * This attribute determines if the driver supports video processing - * with decoding using the decoding context in a single call, through - * vaGetConfigAttributes(); and if the user may use this feature, - * through vaCreateConfig(), if the driver supports the user scenario. - * The user will essentially create a regular decode VAContext. Therefore, - * the parameters of vaCreateContext() such as picture_width, picture_height - * and render_targets are in relation to the decode output parameters - * (not processing output parameters) as normal. - * If this attribute is not set by the user then it is assumed that no - * extra processing is done after decoding for this decode context. - * - * Since essentially the application is creating a decoder config and context, - * all function calls that take in the config (e.g. vaQuerySurfaceAttributes()) - * or context are in relation to the decoder, except those video processing - * function specified in the next paragraph. - * - * Once the decode config and context are created, the user must further - * query the supported processing filters using vaQueryVideoProcFilters(), - * vaQueryVideoProcFilterCaps(), vaQueryVideoProcPipelineCaps() by specifying - * the created decode context. The user must provide processing information - * and extra processing output surfaces as "additional_outputs" to the driver - * through VAProcPipelineParameterBufferType. The render_target specified - * at vaBeginPicture() time refers to the decode output surface. The - * target surface for the output of processing needs to be a different - * surface since the decode process requires the original reconstructed buffer. - * The “surface” member of VAProcPipelineParameterBuffer should be set to the - * same as “render_target” set in vaBeginPicture(), but the driver may choose - * to ignore this parameter. - */ - VAConfigAttribDecProcessing = 8, - /** @name Attributes for encoding */ - /**@{*/ - /** - * \brief Packed headers mode. Read/write. - * - * This attribute determines what packed headers the driver supports, - * through vaGetConfigAttributes(); and what packed headers the user - * will be providing to the driver, through vaCreateConfig(), if the - * driver supports those. - * - * See \c VA_ENC_PACKED_HEADER_xxx for the list of packed headers. - */ - VAConfigAttribEncPackedHeaders = 10, - /** - * \brief Interlaced mode. Read/write. - * - * This attribute determines what kind of interlaced encoding mode - * the driver supports. - * - * See \c VA_ENC_INTERLACED_xxx for the list of interlaced modes. - */ - VAConfigAttribEncInterlaced = 11, - /** - * \brief Maximum number of reference frames. Read-only. - * - * This attribute determines the maximum number of reference - * frames supported for encoding. - * - * Note: for H.264 encoding, the value represents the maximum number - * of reference frames for both the reference picture list 0 (bottom - * 16 bits) and the reference picture list 1 (top 16 bits). - */ - VAConfigAttribEncMaxRefFrames = 13, - /** - * \brief Maximum number of slices per frame. Read-only. - * - * This attribute determines the maximum number of slices the - * driver can support to encode a single frame. - */ - VAConfigAttribEncMaxSlices = 14, - /** - * \brief Slice structure. Read-only. - * - * This attribute determines slice structures supported by the - * driver for encoding. This attribute is a hint to the user so - * that he can choose a suitable surface size and how to arrange - * the encoding process of multiple slices per frame. - * - * More specifically, for H.264 encoding, this attribute - * determines the range of accepted values to - * VAEncSliceParameterBufferH264::macroblock_address and - * VAEncSliceParameterBufferH264::num_macroblocks. - * - * See \c VA_ENC_SLICE_STRUCTURE_xxx for the supported slice - * structure types. - */ - VAConfigAttribEncSliceStructure = 15, - /** - * \brief Macroblock information. Read-only. - * - * This attribute determines whether the driver supports extra - * encoding information per-macroblock. e.g. QP. - * - * More specifically, for H.264 encoding, if the driver returns a non-zero - * value for this attribute, this means the application can create - * additional #VAEncMacroblockParameterBufferH264 buffers referenced - * through VAEncSliceParameterBufferH264::macroblock_info. - */ - VAConfigAttribEncMacroblockInfo = 16, - /** - * \brief Maximum picture width. Read-only. - * - * This attribute determines the maximum picture width the driver supports - * for a given configuration. - */ - VAConfigAttribMaxPictureWidth = 18, - /** - * \brief Maximum picture height. Read-only. - * - * This attribute determines the maximum picture height the driver supports - * for a given configuration. - */ - VAConfigAttribMaxPictureHeight = 19, - /** - * \brief JPEG encoding attribute. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * JPEG implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncJPEG union. - */ - VAConfigAttribEncJPEG = 20, - /** - * \brief Encoding quality range attribute. Read-only. - * - * This attribute conveys whether the driver supports different quality level settings - * for encoding. A value less than or equal to 1 means that the encoder only has a single - * quality setting, and a value greater than 1 represents the number of quality levels - * that can be configured. e.g. a value of 2 means there are two distinct quality levels. - */ - VAConfigAttribEncQualityRange = 21, - /** - * \brief Encoding quantization attribute. Read-only. - * - * This attribute conveys whether the driver supports certain types of quantization methods - * for encoding (e.g. trellis). See \c VA_ENC_QUANTIZATION_xxx for the list of quantization methods - */ - VAConfigAttribEncQuantization = 22, - /** - * \brief Encoding intra refresh attribute. Read-only. - * - * This attribute conveys whether the driver supports certain types of intra refresh methods - * for encoding (e.g. adaptive intra refresh or rolling intra refresh). - * See \c VA_ENC_INTRA_REFRESH_xxx for intra refresh methods - */ - VAConfigAttribEncIntraRefresh = 23, - /** - * \brief Encoding skip frame attribute. Read-only. - * - * This attribute conveys whether the driver supports sending skip frame parameters - * (VAEncMiscParameterTypeSkipFrame) to the encoder's rate control, when the user has - * externally skipped frames. - */ - VAConfigAttribEncSkipFrame = 24, - /** - * \brief Encoding region-of-interest (ROI) attribute. Read-only. - * - * This attribute conveys whether the driver supports region-of-interest (ROI) encoding, - * based on user provided ROI rectangles. The attribute value is partitioned into fields - * as defined in the VAConfigAttribValEncROI union. - * - * If ROI encoding is supported, the ROI information is passed to the driver using - * VAEncMiscParameterTypeROI. - */ - VAConfigAttribEncROI = 25, - /** - * \brief Encoding extended rate control attribute. Read-only. - * - * This attribute conveys whether the driver supports any extended rate control features - * The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncRateControlExt union. - */ - VAConfigAttribEncRateControlExt = 26, - /** - * \brief Processing rate reporting attribute. Read-only. - * - * This attribute conveys whether the driver supports reporting of - * encode/decode processing rate based on certain set of parameters - * (i.e. levels, I frame internvals) for a given configuration. - * If this is supported, vaQueryProcessingRate() can be used to get - * encode or decode processing rate. - * See \c VA_PROCESSING_RATE_xxx for encode/decode processing rate - */ - VAConfigAttribProcessingRate = 27, - /** - * \brief Encoding dirty rectangle. Read-only. - * - * This attribute conveys whether the driver supports dirty rectangle. - * encoding, based on user provided ROI rectangles which indicate the rectangular areas - * where the content has changed as compared to the previous picture. The regions of the - * picture that are not covered by dirty rect rectangles are assumed to have not changed - * compared to the previous picture. The encoder may do some optimizations based on - * this information. The attribute value returned indicates the number of regions that - * are supported. e.g. A value of 0 means dirty rect encoding is not supported. If dirty - * rect encoding is supported, the ROI information is passed to the driver using - * VAEncMiscParameterTypeDirtyRect. - */ - VAConfigAttribEncDirtyRect = 28, - /** - * \brief Parallel Rate Control (hierachical B) attribute. Read-only. - * - * This attribute conveys whether the encoder supports parallel rate control. - * It is a integer value 0 - unsupported, > 0 - maximum layer supported. - * This is the way when hireachical B frames are encoded, multiple independent B frames - * on the same layer may be processed at same time. If supported, app may enable it by - * setting enable_parallel_brc in VAEncMiscParameterRateControl,and the number of B frames - * per layer per GOP will be passed to driver through VAEncMiscParameterParallelRateControl - * structure.Currently three layers are defined. - */ - VAConfigAttribEncParallelRateControl = 29, - /** - * \brief Dynamic Scaling Attribute. Read-only. - * - * This attribute conveys whether encoder is capable to determine dynamic frame - * resolutions adaptive to bandwidth utilization and processing power, etc. - * It is a boolean value 0 - unsupported, 1 - supported. - * If it is supported,for VP9, suggested frame resolution can be retrieved from VACodedBufferVP9Status. - */ - VAConfigAttribEncDynamicScaling = 30, - /** - * \brief frame size tolerance support - * it indicates the tolerance of frame size - */ - VAConfigAttribFrameSizeToleranceSupport = 31, - /** - * \brief Encode function type for FEI. - * - * This attribute conveys whether the driver supports different function types for encode. - * It can be VA_FEI_FUNCTION_ENC, VA_FEI_FUNCTION_PAK, or VA_FEI_FUNCTION_ENC_PAK. Currently - * it is for FEI entry point only. - * Default is VA_FEI_FUNCTION_ENC_PAK. - */ - VAConfigAttribFEIFunctionType = 32, - /** - * \brief Maximum number of FEI MV predictors. Read-only. - * - * This attribute determines the maximum number of MV predictors the driver - * can support to encode a single frame. 0 means no MV predictor is supported. - * Currently it is for FEI entry point only. - */ - VAConfigAttribFEIMVPredictors = 33, - /** - * \brief Statistics attribute. Read-only. - * - * This attribute exposes a number of capabilities of the VAEntrypointStats entry - * point. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValStats union. Currently it is for VAEntrypointStats only. - */ - VAConfigAttribStats = 34, - /** - * \brief Tile Support Attribute. Read-only. - * - * This attribute conveys whether encoder is capable to support tiles. - * If not supported, the tile related parameters sent to encoder, such as - * tiling structure, should be ignored. 0 - unsupported, 1 - supported. - */ - VAConfigAttribEncTileSupport = 35, - /** - * \brief whether accept rouding setting from application. Read-only. - * This attribute is for encode quality, if it is report, - * application can change the rounding setting by VAEncMiscParameterTypeCustomRoundingControl - */ - VAConfigAttribCustomRoundingControl = 36, - /** - * \brief Encoding QP info block size attribute. Read-only. - * This attribute conveys the block sizes that underlying driver - * support for QP info for buffer #VAEncQpBuffer. - */ - VAConfigAttribQPBlockSize = 37, - /** - * \brief encode max frame size attribute. Read-only - * attribute value \c VAConfigAttribValMaxFrameSize represent max frame size support - */ - VAConfigAttribMaxFrameSize = 38, - /** \brief inter frame prediction directrion attribute. Read-only. - * this attribute conveys the prediction direction (backward or forword) for specific config - * the value could be VA_PREDICTION_DIRECTION_XXXX. it can be combined with VAConfigAttribEncMaxRefFrames - * to describe reference list , and the prediction direction. if this attrib is not present,both direction - * should be supported, no restriction. - * for example: normal HEVC encoding , maximum reference frame number in reflist 0 and reflist 1 is deduced - * by VAConfigAttribEncMaxRefFrames. so there are typical P frame, B frame, - * if VAConfigAttribPredictionDirection is also present. it will stipulate prediction direction in both - * reference list. if only one prediction direction present(such as PREVIOUS),all reference frame should be - * previous frame (PoC < current). - */ - VAConfigAttribPredictionDirection = 39, - /** \brief combined submission of multiple frames from different streams, it is optimization for different HW - * implementation, multiple frames encode/decode can improve HW concurrency - */ - VAConfigAttribMultipleFrame = 40, - /** \brief priority setting for the context. Read-Write - * attribute value is \c VAConfigAttribValContextPriority - * this setting also could be update by \c VAContextParameterUpdateBuffer - */ - VAConfigAttribContextPriority = 41, - /** \brief AV1 decoding features. Read-only. - * - * This attribute describes the supported features of an - * AV1 decoder configuration. The value returned uses the - * VAConfigAttribValDecAV1Features type. - */ - VAConfigAttribDecAV1Features = 42, - /** \brief TEE could be any HW secure device. Read-only */ - VAConfigAttribTEEType = 43, - /** \brief TEE type client is a specific module supporting specific functions in TEE. Read-only*/ - VAConfigAttribTEETypeClient = 44, - /** - * \brief Cipher algorithm of the protected content session. - * - * This attribute specifies the cipher algorithm of the protected content session. It - * could be \c VA_PC_CIPHER_AES, etc.... - */ - VAConfigAttribProtectedContentCipherAlgorithm = 45, - /** - * \brief Cipher block size of the protected content session. - * - * This attribute specifies the block size of the protected content session. It could be - * \c VA_PC_BLOCK_SIZE_128, \c VA_PC_BLOCK_SIZE_192, or \c VA_PC_BLOCK_SIZE_256, etc.... - */ - VAConfigAttribProtectedContentCipherBlockSize = 46, - /** - * \brief Cipher mode of the protected content session. - * - * This attribute specifies the cipher mode of the protected content session. It could - * be \c VA_PC_CIPHER_MODE_ECB, \c VA_PC_CIPHER_MODE_CBC, \c VA_PC_CIPHER_MODE_CTR, etc... - */ - VAConfigAttribProtectedContentCipherMode = 47, - /** - * \brief Decryption sample type of the protected content session. - * - * This attribute specifies the decryption sample type of the protected content session. - * It could be \c VA_PC_SAMPLE_TYPE_FULLSAMPLE or \c VA_PC_SAMPLE_TYPE_SUBSAMPLE. - */ - VAConfigAttribProtectedContentCipherSampleType = 48, - /** - * \brief Special usage attribute of the protected session. - * - * The attribute specifies the flow for the protected session could be used. For - * example, it could be \c VA_PC_USAGE_DEFAULT, \c VA_PC_USAGE_WIDEVINE, etc.... - */ - VAConfigAttribProtectedContentUsage = 49, - - /** \brief HEVC/H.265 encoding features. Read-only. - * - * This attribute describes the supported features of an - * HEVC/H.265 encoder configuration. The value returned uses the - * VAConfigAttribValEncHEVCFeatures type. - * - * If this attribute is supported by a driver then it must also - * support the VAConfigAttribEncHEVCBlockSizes attribute. - */ - VAConfigAttribEncHEVCFeatures = 50, - /** \brief HEVC/H.265 encoding block sizes. Read-only. - * - * This attribute describes the supported coding tree and transform - * block sizes of an HEVC/H.265 encoder configuration. The value - * returned uses the VAConfigAttribValEncHEVCBlockSizes type. - * - * If this attribute is supported by a driver then it must also - * support the VAConfigAttribEncHEVCFeatures attribute. - */ - VAConfigAttribEncHEVCBlockSizes = 51, - /** - * \brief AV1 encoding attribute. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * AV1 implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncAV1 union. - */ - VAConfigAttribEncAV1 = 52, - /** - * \brief AV1 encoding attribute extend1. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * AV1 implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncAV1Ext1 union. - */ - VAConfigAttribEncAV1Ext1 = 53, - /** - * \brief AV1 encoding attribute extend2. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * AV1 implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncAV1Ext2 union. - */ - VAConfigAttribEncAV1Ext2 = 54, - /** \brief Settings per block attribute for Encoding. Read-only. - * - * This attribute describes whether to support delta qp per block, - * the supported size of delta qp block and the size of delta QP in bytes. - * The value returned uses the VAConfigAttribValEncPerBlockControl type. - */ - VAConfigAttribEncPerBlockControl = 55, - /**@}*/ - VAConfigAttribTypeMax -} VAConfigAttribType; - -/** - * Configuration attributes - * If there is more than one value for an attribute, a default - * value will be assigned to the attribute if the client does not - * specify the attribute when creating a configuration - */ -typedef struct _VAConfigAttrib { - VAConfigAttribType type; - uint32_t value; /* OR'd flags (bits) for this attribute */ -} VAConfigAttrib; - -/* Attribute values for VAConfigAttribRTFormat. */ - -#define VA_RT_FORMAT_YUV420 0x00000001 ///< YUV 4:2:0 8-bit. -#define VA_RT_FORMAT_YUV422 0x00000002 ///< YUV 4:2:2 8-bit. -#define VA_RT_FORMAT_YUV444 0x00000004 ///< YUV 4:4:4 8-bit. -#define VA_RT_FORMAT_YUV411 0x00000008 ///< YUV 4:1:1 8-bit. -#define VA_RT_FORMAT_YUV400 0x00000010 ///< Greyscale 8-bit. -#define VA_RT_FORMAT_YUV420_10 0x00000100 ///< YUV 4:2:0 10-bit. -#define VA_RT_FORMAT_YUV422_10 0x00000200 ///< YUV 4:2:2 10-bit. -#define VA_RT_FORMAT_YUV444_10 0x00000400 ///< YUV 4:4:4 10-bit. -#define VA_RT_FORMAT_YUV420_12 0x00001000 ///< YUV 4:2:0 12-bit. -#define VA_RT_FORMAT_YUV422_12 0x00002000 ///< YUV 4:2:2 12-bit. -#define VA_RT_FORMAT_YUV444_12 0x00004000 ///< YUV 4:4:4 12-bit. - -#define VA_RT_FORMAT_RGB16 0x00010000 ///< Packed RGB, 16 bits per pixel. -#define VA_RT_FORMAT_RGB32 0x00020000 ///< Packed RGB, 32 bits per pixel, 8 bits per colour sample. -#define VA_RT_FORMAT_RGBP 0x00100000 ///< Planar RGB, 8 bits per sample. -#define VA_RT_FORMAT_RGB32_10 0x00200000 ///< Packed RGB, 32 bits per pixel, 10 bits per colour sample. - -#define VA_RT_FORMAT_PROTECTED 0x80000000 - -#define VA_RT_FORMAT_RGB32_10BPP VA_RT_FORMAT_RGB32_10 ///< @deprecated use VA_RT_FORMAT_RGB32_10 instead. -#define VA_RT_FORMAT_YUV420_10BPP VA_RT_FORMAT_YUV420_10 ///< @deprecated use VA_RT_FORMAT_YUV420_10 instead. - -/** @name Attribute values for VAConfigAttribRateControl */ -/**@{*/ -/** \brief Driver does not support any form of rate control. */ -#define VA_RC_NONE 0x00000001 -/** \brief Constant bitrate. */ -#define VA_RC_CBR 0x00000002 -/** \brief Variable bitrate. */ -#define VA_RC_VBR 0x00000004 -/** \brief Video conference mode. */ -#define VA_RC_VCM 0x00000008 -/** \brief Constant QP. */ -#define VA_RC_CQP 0x00000010 -/** \brief Variable bitrate with peak rate higher than average bitrate. */ -#define VA_RC_VBR_CONSTRAINED 0x00000020 -/** \brief Intelligent Constant Quality. Provided an initial ICQ_quality_factor, - * adjusts QP at a frame and MB level based on motion to improve subjective quality. */ -#define VA_RC_ICQ 0x00000040 -/** \brief Macroblock based rate control. Per MB control is decided - * internally in the encoder. It may be combined with other RC modes, except CQP. */ -#define VA_RC_MB 0x00000080 -/** \brief Constant Frame Size, it is used for small tolerent */ -#define VA_RC_CFS 0x00000100 -/** \brief Parallel BRC, for hierachical B. - * - * For hierachical B, B frames can be refered by other B frames. - * Currently three layers of hierachy are defined: - * B0 - regular B, no reference to other B frames. - * B1 - reference to only I, P and regular B0 frames. - * B2 - reference to any other frames, including B1. - * In Hierachical B structure, B frames on the same layer can be processed - * simultaneously. And BRC would adjust accordingly. This is so called - * Parallel BRC. */ -#define VA_RC_PARALLEL 0x00000200 -/** \brief Quality defined VBR - * Use Quality factor to determine the good enough QP for each MB such that - * good enough quality can be obtained without waste of bits - * for this BRC mode, you must set all legacy VBR parameters - * and reuse quality_factor in \c VAEncMiscParameterRateControl - * */ -#define VA_RC_QVBR 0x00000400 -/** \brief Average VBR - * Average variable bitrate control algorithm focuses on overall encoding - * quality while meeting the specified target bitrate, within the accuracy - * range, after a convergence period. - * bits_per_second in VAEncMiscParameterRateControl is target bitrate for AVBR. - * Convergence is specified in the unit of frame. - * window_size in VAEncMiscParameterRateControl is equal to convergence for AVBR. - * Accuracy is in the range of [1,100], 1 means one percent, and so on. - * target_percentage in VAEncMiscParameterRateControl is equal to accuracy for AVBR. - * */ -#define VA_RC_AVBR 0x00000800 -/** \brief Transport Controlled BRC - * Specific bitrate control for real time streaming. - * TCBRC can instantly react to channel change to remove or significantly reduce the delay. - * Application (transport) provides channel feedback to driver through TargetFrameSize. - * When channel condition is very good (almost no constraint on instant frame size), - * the app should set target frame size as zero. Otherwise, channel capacity divided by fps - * should be used. - * */ -#define VA_RC_TCBRC 0x00001000 - -/**@}*/ - -/** @name Attribute values for VAConfigAttribDecSliceMode */ -/**@{*/ -/** \brief Driver supports normal mode for slice decoding */ -#define VA_DEC_SLICE_MODE_NORMAL 0x00000001 -/** \brief Driver supports base mode for slice decoding */ -#define VA_DEC_SLICE_MODE_BASE 0x00000002 - -/** @name Attribute values for VAConfigAttribDecJPEG */ -/**@{*/ -typedef union _VAConfigAttribValDecJPEG { - struct { - /** \brief Set to (1 << VA_ROTATION_xxx) for supported rotation angles. */ - uint32_t rotation : 4; - /** \brief Reserved for future use. */ - uint32_t reserved : 28; - } bits; - uint32_t value; -} VAConfigAttribValDecJPEG; -/** @name Attribute values for VAConfigAttribDecProcessing */ -/**@{*/ -/** \brief No decoding + processing in a single decoding call. */ -#define VA_DEC_PROCESSING_NONE 0x00000000 -/** \brief Decode + processing in a single decoding call. */ -#define VA_DEC_PROCESSING 0x00000001 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncPackedHeaders */ -/**@{*/ -/** \brief Driver does not support any packed headers mode. */ -#define VA_ENC_PACKED_HEADER_NONE 0x00000000 -/** - * \brief Driver supports packed sequence headers. e.g. SPS for H.264. - * - * Application must provide it to driver once this flag is returned through - * vaGetConfigAttributes() - */ -#define VA_ENC_PACKED_HEADER_SEQUENCE 0x00000001 -/** - * \brief Driver supports packed picture headers. e.g. PPS for H.264. - * - * Application must provide it to driver once this falg is returned through - * vaGetConfigAttributes() - */ -#define VA_ENC_PACKED_HEADER_PICTURE 0x00000002 -/** - * \brief Driver supports packed slice headers. e.g. slice_header() for H.264. - * - * Application must provide it to driver once this flag is returned through - * vaGetConfigAttributes() - */ -#define VA_ENC_PACKED_HEADER_SLICE 0x00000004 -/** - * \brief Driver supports misc packed headers. e.g. SEI for H.264. - * - * @deprecated - * This is a deprecated packed header flag, All applications can use - * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed - * header data buffer to the driver - */ -#define VA_ENC_PACKED_HEADER_MISC 0x00000008 -/** \brief Driver supports raw packed header, see VAEncPackedHeaderRawData */ -#define VA_ENC_PACKED_HEADER_RAW_DATA 0x00000010 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncInterlaced */ -/**@{*/ -/** \brief Driver does not support interlaced coding. */ -#define VA_ENC_INTERLACED_NONE 0x00000000 -/** \brief Driver supports interlaced frame coding. */ -#define VA_ENC_INTERLACED_FRAME 0x00000001 -/** \brief Driver supports interlaced field coding. */ -#define VA_ENC_INTERLACED_FIELD 0x00000002 -/** \brief Driver supports macroblock adaptive frame field coding. */ -#define VA_ENC_INTERLACED_MBAFF 0x00000004 -/** \brief Driver supports picture adaptive frame field coding. */ -#define VA_ENC_INTERLACED_PAFF 0x00000008 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncSliceStructure */ -/**@{*/ -/** \brief Driver supports a power-of-two number of rows per slice. */ -#define VA_ENC_SLICE_STRUCTURE_POWER_OF_TWO_ROWS 0x00000001 -/** \brief Driver supports an arbitrary number of macroblocks per slice. */ -#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS 0x00000002 -/** \brief Driver support 1 row per slice */ -#define VA_ENC_SLICE_STRUCTURE_EQUAL_ROWS 0x00000004 -/** \brief Driver support max encoded slice size per slice */ -#define VA_ENC_SLICE_STRUCTURE_MAX_SLICE_SIZE 0x00000008 -/** \brief Driver supports an arbitrary number of rows per slice. */ -#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_ROWS 0x00000010 -/** \brief Driver supports any number of rows per slice but they must be the same -* for all slices except for the last one, which must be equal or smaller -* to the previous slices. */ -#define VA_ENC_SLICE_STRUCTURE_EQUAL_MULTI_ROWS 0x00000020 -/**@}*/ - -/** \brief Attribute value for VAConfigAttribMaxFrameSize */ -typedef union _VAConfigAttribValMaxFrameSize { - struct { - /** \brief support max frame size - * if max_frame_size == 1, VAEncMiscParameterTypeMaxFrameSize/VAEncMiscParameterBufferMaxFrameSize - * could be used to set the frame size, if multiple_pass also equal 1, VAEncMiscParameterTypeMultiPassFrameSize - * VAEncMiscParameterBufferMultiPassFrameSize could be used to set frame size and pass information - */ - uint32_t max_frame_size : 1; - /** \brief multiple_pass support */ - uint32_t multiple_pass : 1; - /** \brief reserved bits for future, must be zero*/ - uint32_t reserved : 30; - } bits; - uint32_t value; -} VAConfigAttribValMaxFrameSize; - -/** \brief Attribute value for VAConfigAttribEncJPEG */ -typedef union _VAConfigAttribValEncJPEG { - struct { - /** \brief set to 1 for arithmatic coding. */ - uint32_t arithmatic_coding_mode : 1; - /** \brief set to 1 for progressive dct. */ - uint32_t progressive_dct_mode : 1; - /** \brief set to 1 for non-interleaved. */ - uint32_t non_interleaved_mode : 1; - /** \brief set to 1 for differential. */ - uint32_t differential_mode : 1; - uint32_t max_num_components : 3; - uint32_t max_num_scans : 4; - uint32_t max_num_huffman_tables : 3; - uint32_t max_num_quantization_tables : 3; - } bits; - uint32_t value; -} VAConfigAttribValEncJPEG; - -/** @name Attribute values for VAConfigAttribEncQuantization */ -/**@{*/ -/** \brief Driver does not support special types of quantization */ -#define VA_ENC_QUANTIZATION_NONE 0x00000000 -/** \brief Driver supports trellis quantization */ -#define VA_ENC_QUANTIZATION_TRELLIS_SUPPORTED 0x00000001 -/**@}*/ - -/** @name Attribute values for VAConfigAttribPredictionDirection */ -/**@{*/ -/** \brief Driver support forward reference frame (inter frame for vpx, P frame for H26x MPEG) - * can work with the VAConfigAttribEncMaxRefFrames. for example: low delay B frame of HEVC. - * these value can be OR'd together. typical value should be VA_PREDICTION_DIRECTION_PREVIOUS - * or VA_PREDICTION_DIRECTION_PREVIOUS | VA_PREDICTION_DIRECTION_FUTURE, theoretically, there - * are no stream only include future reference frame. - */ -#define VA_PREDICTION_DIRECTION_PREVIOUS 0x00000001 -/** \brief Driver support backward prediction frame/slice */ -#define VA_PREDICTION_DIRECTION_FUTURE 0x00000002 -/** \brief Dirver require both reference list must be not empty for inter frame */ -#define VA_PREDICTION_DIRECTION_BI_NOT_EMPTY 0x00000004 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncIntraRefresh */ -/**@{*/ -/** \brief Driver does not support intra refresh */ -#define VA_ENC_INTRA_REFRESH_NONE 0x00000000 -/** \brief Driver supports column based rolling intra refresh */ -#define VA_ENC_INTRA_REFRESH_ROLLING_COLUMN 0x00000001 -/** \brief Driver supports row based rolling intra refresh */ -#define VA_ENC_INTRA_REFRESH_ROLLING_ROW 0x00000002 -/** \brief Driver supports adaptive intra refresh */ -#define VA_ENC_INTRA_REFRESH_ADAPTIVE 0x00000010 -/** \brief Driver supports cyclic intra refresh */ -#define VA_ENC_INTRA_REFRESH_CYCLIC 0x00000020 -/** \brief Driver supports intra refresh of P frame*/ -#define VA_ENC_INTRA_REFRESH_P_FRAME 0x00010000 -/** \brief Driver supports intra refresh of B frame */ -#define VA_ENC_INTRA_REFRESH_B_FRAME 0x00020000 -/** \brief Driver supports intra refresh of multiple reference encoder */ -#define VA_ENC_INTRA_REFRESH_MULTI_REF 0x00040000 - -/**@}*/ - -/** \brief Attribute value for VAConfigAttribEncROI */ -typedef union _VAConfigAttribValEncROI { - struct { - /** \brief The number of ROI regions supported, 0 if ROI is not supported. */ - uint32_t num_roi_regions : 8; - /** - * \brief A flag indicates whether ROI priority is supported - * - * \ref roi_rc_priority_support equal to 1 specifies the underlying driver supports - * ROI priority when VAConfigAttribRateControl != VA_RC_CQP, user can use \c roi_value - * in #VAEncROI to set ROI priority. \ref roi_rc_priority_support equal to 0 specifies - * the underlying driver doesn't support ROI priority. - * - * User should ignore \ref roi_rc_priority_support when VAConfigAttribRateControl == VA_RC_CQP - * because ROI delta QP is always required when VAConfigAttribRateControl == VA_RC_CQP. - */ - uint32_t roi_rc_priority_support : 1; - /** - * \brief A flag indicates whether ROI delta QP is supported - * - * \ref roi_rc_qp_delta_support equal to 1 specifies the underlying driver supports - * ROI delta QP when VAConfigAttribRateControl != VA_RC_CQP, user can use \c roi_value - * in #VAEncROI to set ROI delta QP. \ref roi_rc_qp_delta_support equal to 0 specifies - * the underlying driver doesn't support ROI delta QP. - * - * User should ignore \ref roi_rc_qp_delta_support when VAConfigAttribRateControl == VA_RC_CQP - * because ROI delta QP is always required when VAConfigAttribRateControl == VA_RC_CQP. - */ - uint32_t roi_rc_qp_delta_support : 1; - uint32_t reserved : 22; - } bits; - uint32_t value; -} VAConfigAttribValEncROI; - -/** \brief Attribute value for VAConfigAttribEncRateControlExt */ -typedef union _VAConfigAttribValEncRateControlExt { - struct { - /** - * \brief The maximum number of temporal layers minus 1 - * - * \ref max_num_temporal_layers_minus1 plus 1 specifies the maximum number of temporal - * layers that supported by the underlying driver. \ref max_num_temporal_layers_minus1 - * equal to 0 implies the underlying driver doesn't support encoding with temporal layer. - */ - uint32_t max_num_temporal_layers_minus1 : 8; - - /** - * /brief support temporal layer bit-rate control flag - * - * \ref temporal_layer_bitrate_control_flag equal to 1 specifies the underlying driver - * can support bit-rate control per temporal layer when (#VAConfigAttribRateControl == #VA_RC_CBR || - * #VAConfigAttribRateControl == #VA_RC_VBR). - * - * The underlying driver must set \ref temporal_layer_bitrate_control_flag to 0 when - * \c max_num_temporal_layers_minus1 is equal to 0 - * - * To use bit-rate control per temporal layer, an application must send the right layer - * structure via #VAEncMiscParameterTemporalLayerStructure at the beginning of a coded sequence - * and then followed by #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate structures - * for each layer, using the \c temporal_id field as the layer identifier. Otherwise - * the driver doesn't use bitrate control per temporal layer if an application doesn't send the - * layer structure via #VAEncMiscParameterTemporalLayerStructure to the driver. The driver returns - * VA_STATUS_ERROR_INVALID_PARAMETER if an application sends a wrong layer structure or doesn't send - * #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate for each layer. - * - * The driver will ignore #VAEncMiscParameterTemporalLayerStructure and the \c temporal_id field - * in #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate if - * \ref temporal_layer_bitrate_control_flag is equal to 0 or #VAConfigAttribRateControl == #VA_RC_CQP - */ - uint32_t temporal_layer_bitrate_control_flag : 1; - uint32_t reserved : 23; - } bits; - uint32_t value; -} VAConfigAttribValEncRateControlExt; - -/** \brief Attribute value for VAConfigAttribMultipleFrame*/ -typedef union _VAConfigAttribValMultipleFrame { - struct { - /** \brief max num of concurrent frames from different stream */ - uint32_t max_num_concurrent_frames : 8; - /** \brief indicate whether all stream must support same quality level - * if mixed_quality_level == 0, same quality level setting for multple streams is required - * if mixed_quality_level == 1, different stream can have different quality level*/ - uint32_t mixed_quality_level : 1; - /** \brief reserved bit for future, must be zero */ - uint32_t reserved : 23; - } bits; - uint32_t value; -} VAConfigAttribValMultipleFrame; - -/** brief Attribute value VAConfigAttribValContextPriority */ -typedef union _VAConfigAttribValContextPriority { - struct { - /** \brief the priority , for the Query operation (read) it represents highest priority - * for the set operation (write), value should be [0~highest priority] , 0 is lowest priority*/ - uint32_t priority : 16; - /** \brief reserved bits for future, must be zero*/ - uint32_t reserved : 16; - } bits; - uint32_t value; -} VAConfigAttribValContextPriority; - -/** brief Attribute value VAConfigAttribEncPerBlockControl */ -typedef union _VAConfigAttribValEncPerBlockControl { - struct { - /** \brief whether to support dela qp per block */ - uint32_t delta_qp_support : 1; - /** \brief supported size of delta qp block */ - uint32_t log2_delta_qp_block_size : 4; - /** \brief size of delta qp per block in bytes*/ - uint32_t delta_qp_size_in_bytes : 3; - /** \brief reserved bit for future, must be zero */ - uint32_t reserved : 24; - } bits; - uint32_t value; -} VAConfigAttribValEncPerBlockControl; - -/** @name Attribute values for VAConfigAttribProtectedContentCipherAlgorithm */ -/** \brief AES cipher */ -#define VA_PC_CIPHER_AES 0x00000001 - -/** @name Attribute values for VAConfigAttribProtectedContentCipherBlockSize */ -/** \brief 128 bits block size */ -#define VA_PC_BLOCK_SIZE_128 0x00000001 -/** \brief 192 bits block size */ -#define VA_PC_BLOCK_SIZE_192 0x00000002 -/** \brief 256 bits block size */ -#define VA_PC_BLOCK_SIZE_256 0x00000004 - -/** @name Attribute values for VAConfigAttribProtectedContentCipherMode */ -/** \brief AES ECB */ -#define VA_PC_CIPHER_MODE_ECB 0x00000001 -/** \brief AES CBC */ -#define VA_PC_CIPHER_MODE_CBC 0x00000002 -/** \brief AES CTR */ -#define VA_PC_CIPHER_MODE_CTR 0x00000004 - -/** @name Attribute values for VAConfigAttribProtectedContentCipherSampleType */ -/** \brief Full sample */ -#define VA_PC_SAMPLE_TYPE_FULLSAMPLE 0x00000001 -/** \brief Sub sample */ -#define VA_PC_SAMPLE_TYPE_SUBSAMPLE 0x00000002 - -/** @name Attribute values for VAConfigAttribProtectedContentUsage */ -/** \brief Default usage */ -#define VA_PC_USAGE_DEFAULT 0x00000000 -/** \brief Widevine */ -#define VA_PC_USAGE_WIDEVINE 0x00000001 - -/** @name Attribute values for VAConfigAttribProcessingRate. */ -/**@{*/ -/** \brief Driver does not support processing rate report */ -#define VA_PROCESSING_RATE_NONE 0x00000000 -/** \brief Driver supports encode processing rate report */ -#define VA_PROCESSING_RATE_ENCODE 0x00000001 -/** \brief Driver supports decode processing rate report */ -#define VA_PROCESSING_RATE_DECODE 0x00000002 -/**@}*/ -/** - * if an attribute is not applicable for a given - * profile/entrypoint pair, then set the value to the following - */ -#define VA_ATTRIB_NOT_SUPPORTED 0x80000000 - -/** Get maximum number of profiles supported by the implementation */ -int vaMaxNumProfiles( - VADisplay dpy -); - -/** Get maximum number of entrypoints supported by the implementation */ -int vaMaxNumEntrypoints( - VADisplay dpy -); - -/** Get maximum number of attributs supported by the implementation */ -int vaMaxNumConfigAttributes( - VADisplay dpy -); - -/** - * Query supported profiles - * The caller must provide a "profile_list" array that can hold at - * least vaMaxNumProfile() entries. The actual number of profiles - * returned in "profile_list" is returned in "num_profile". - */ -VAStatus vaQueryConfigProfiles( - VADisplay dpy, - VAProfile *profile_list, /* out */ - int *num_profiles /* out */ -); - -/** - * Query supported entrypoints for a given profile - * The caller must provide an "entrypoint_list" array that can hold at - * least vaMaxNumEntrypoints() entries. The actual number of entrypoints - * returned in "entrypoint_list" is returned in "num_entrypoints". - */ -VAStatus vaQueryConfigEntrypoints( - VADisplay dpy, - VAProfile profile, - VAEntrypoint *entrypoint_list, /* out */ - int *num_entrypoints /* out */ -); - -/** - * Get attributes for a given profile/entrypoint pair - * The caller must provide an "attrib_list" with all attributes to be - * retrieved. Upon return, the attributes in "attrib_list" have been - * updated with their value. Unknown attributes or attributes that are - * not supported for the given profile/entrypoint pair will have their - * value set to VA_ATTRIB_NOT_SUPPORTED - */ -VAStatus vaGetConfigAttributes( - VADisplay dpy, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, /* in/out */ - int num_attribs -); - -/** Generic ID type, can be re-typed for specific implementation */ -typedef unsigned int VAGenericID; - -typedef VAGenericID VAConfigID; - -/** - * Create a configuration for the video decode/encode/processing pipeline - * it passes in the attribute list that specifies the attributes it cares - * about, with the rest taking default values. - */ -VAStatus vaCreateConfig( - VADisplay dpy, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, - int num_attribs, - VAConfigID *config_id /* out */ -); - -/** - * Free resources associdated with a given config - */ -VAStatus vaDestroyConfig( - VADisplay dpy, - VAConfigID config_id -); - -/** - * Query all attributes for a given configuration - * The profile of the configuration is returned in "profile" - * The entrypoint of the configuration is returned in "entrypoint" - * The caller must provide an "attrib_list" array that can hold at least - * vaMaxNumConfigAttributes() entries. The actual number of attributes - * returned in "attrib_list" is returned in "num_attribs" - */ -VAStatus vaQueryConfigAttributes( - VADisplay dpy, - VAConfigID config_id, - VAProfile *profile, /* out */ - VAEntrypoint *entrypoint, /* out */ - VAConfigAttrib *attrib_list,/* out */ - int *num_attribs /* out */ -); - - -/** - * Contexts and Surfaces - * - * Context represents a "virtual" video decode, encode or video processing - * pipeline. Surfaces are render targets for a given context. The data in the - * surfaces are not accessible to the client except if derived image is supported - * and the internal data format of the surface is implementation specific. - * - * Surfaces are provided as a hint of what surfaces will be used when the context - * is created through vaCreateContext(). A surface may be used by different contexts - * at the same time as soon as application can make sure the operations are synchronized - * between different contexts, e.g. a surface is used as the output of a decode context - * and the input of a video process context. Surfaces can only be destroyed after all - * contexts using these surfaces have been destroyed. - * - * Both contexts and surfaces are identified by unique IDs and its - * implementation specific internals are kept opaque to the clients - */ - -typedef VAGenericID VAContextID; - -typedef VAGenericID VASurfaceID; - -#define VA_INVALID_ID 0xffffffff -#define VA_INVALID_SURFACE VA_INVALID_ID - -/** \brief Generic value types. */ -typedef enum { - VAGenericValueTypeInteger = 1, /**< 32-bit signed integer. */ - VAGenericValueTypeFloat, /**< 32-bit floating-point value. */ - VAGenericValueTypePointer, /**< Generic pointer type */ - VAGenericValueTypeFunc /**< Pointer to function */ -} VAGenericValueType; - -/** \brief Generic function type. */ -typedef void (*VAGenericFunc)(void); - -/** \brief Generic value. */ -typedef struct _VAGenericValue { - /** \brief Value type. See #VAGenericValueType. */ - VAGenericValueType type; - /** \brief Value holder. */ - union { - /** \brief 32-bit signed integer. */ - int32_t i; - /** \brief 32-bit float. */ - float f; - /** \brief Generic pointer. */ - void *p; - /** \brief Pointer to function. */ - VAGenericFunc fn; - } value; -} VAGenericValue; - -/** @name Surface attribute flags */ -/**@{*/ -/** \brief Surface attribute is not supported. */ -#define VA_SURFACE_ATTRIB_NOT_SUPPORTED 0x00000000 -/** \brief Surface attribute can be got through vaQuerySurfaceAttributes(). */ -#define VA_SURFACE_ATTRIB_GETTABLE 0x00000001 -/** \brief Surface attribute can be set through vaCreateSurfaces(). */ -#define VA_SURFACE_ATTRIB_SETTABLE 0x00000002 -/**@}*/ - -/** \brief Surface attribute types. */ -typedef enum { - VASurfaceAttribNone = 0, - /** - * \brief Pixel format as a FOURCC (int, read/write). - * - * When vaQuerySurfaceAttributes() is called, the driver will return one - * PixelFormat attribute per supported pixel format. - * - * When provided as an input to vaCreateSurfaces(), the driver will - * allocate a surface with the provided pixel format. - */ - VASurfaceAttribPixelFormat, - /** \brief Minimal width in pixels (int, read-only). */ - VASurfaceAttribMinWidth, - /** \brief Maximal width in pixels (int, read-only). */ - VASurfaceAttribMaxWidth, - /** \brief Minimal height in pixels (int, read-only). */ - VASurfaceAttribMinHeight, - /** \brief Maximal height in pixels (int, read-only). */ - VASurfaceAttribMaxHeight, - /** \brief Surface memory type expressed in bit fields (int, read/write). */ - VASurfaceAttribMemoryType, - /** \brief External buffer descriptor (pointer, write). - * - * Refer to the documentation for the memory type being created to - * determine what descriptor structure to pass here. If not otherwise - * stated, the common VASurfaceAttribExternalBuffers should be used. - */ - VASurfaceAttribExternalBufferDescriptor, - /** \brief Surface usage hint, gives the driver a hint of intended usage - * to optimize allocation (e.g. tiling) (int, read/write). */ - VASurfaceAttribUsageHint, - /** \brief List of possible DRM format modifiers (pointer, write). - * - * The value must be a pointer to a VADRMFormatModifierList. This can only - * be used when allocating a new buffer, it's invalid to use this attribute - * when importing an existing buffer. - */ - VASurfaceAttribDRMFormatModifiers, - /** \brief Number of surface attributes. */ - VASurfaceAttribCount -} VASurfaceAttribType; - -/** \brief Surface attribute. */ -typedef struct _VASurfaceAttrib { - /** \brief Type. */ - VASurfaceAttribType type; - /** \brief Flags. See "Surface attribute flags". */ - uint32_t flags; - /** \brief Value. See "Surface attribute types" for the expected types. */ - VAGenericValue value; -} VASurfaceAttrib; - -/** - * @name VASurfaceAttribMemoryType values in bit fields. - * Bit 0:7 are reserved for generic types, Bit 31:28 are reserved for - * Linux DRM, Bit 23:20 are reserved for Android. DRM and Android specific - * types are defined in DRM and Android header files. - */ -/**@{*/ -/** \brief VA memory type (default) is supported. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_VA 0x00000001 -/** \brief V4L2 buffer memory type is supported. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_V4L2 0x00000002 -/** \brief User pointer memory type is supported. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_USER_PTR 0x00000004 -/**@}*/ - -/** - * \brief VASurfaceAttribExternalBuffers structure for - * the VASurfaceAttribExternalBufferDescriptor attribute. - */ -typedef struct _VASurfaceAttribExternalBuffers { - /** \brief pixel format in fourcc. */ - uint32_t pixel_format; - /** \brief width in pixels. */ - uint32_t width; - /** \brief height in pixels. */ - uint32_t height; - /** \brief total size of the buffer in bytes. */ - uint32_t data_size; - /** \brief number of planes for planar layout */ - uint32_t num_planes; - /** \brief pitch for each plane in bytes */ - uint32_t pitches[4]; - /** \brief offset for each plane in bytes */ - uint32_t offsets[4]; - /** \brief buffer handles or user pointers */ - uintptr_t *buffers; - /** \brief number of elements in the "buffers" array */ - uint32_t num_buffers; - /** \brief flags. See "Surface external buffer descriptor flags". */ - uint32_t flags; - /** \brief reserved for passing private data */ - void *private_data; -} VASurfaceAttribExternalBuffers; - -/** @name VASurfaceAttribExternalBuffers flags */ -/**@{*/ -/** \brief Enable memory tiling */ -#define VA_SURFACE_EXTBUF_DESC_ENABLE_TILING 0x00000001 -/** \brief Memory is cacheable */ -#define VA_SURFACE_EXTBUF_DESC_CACHED 0x00000002 -/** \brief Memory is non-cacheable */ -#define VA_SURFACE_EXTBUF_DESC_UNCACHED 0x00000004 -/** \brief Memory is write-combined */ -#define VA_SURFACE_EXTBUF_DESC_WC 0x00000008 -/** \brief Memory is protected */ -#define VA_SURFACE_EXTBUF_DESC_PROTECTED 0x80000000 - -/** @name VASurfaceAttribUsageHint attribute usage hint flags */ -/**@{*/ -/** \brief Surface usage not indicated. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_GENERIC 0x00000000 -/** \brief Surface used by video decoder. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_DECODER 0x00000001 -/** \brief Surface used by video encoder. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_ENCODER 0x00000002 -/** \brief Surface read by video post-processing. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_VPP_READ 0x00000004 -/** \brief Surface written by video post-processing. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_VPP_WRITE 0x00000008 -/** \brief Surface used for display. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_DISPLAY 0x00000010 -/** \brief Surface used for export to third-party APIs, e.g. via - * vaExportSurfaceHandle(). */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_EXPORT 0x00000020 - -/**@}*/ - -/** - * \brief Queries surface attributes for the supplied config. - * - * This function queries for all supported attributes for the - * supplied VA @config. In particular, if the underlying hardware - * supports the creation of VA surfaces in various formats, then - * this function will enumerate all pixel formats that are supported. - * - * The \c attrib_list array is allocated by the user and \c - * num_attribs shall be initialized to the number of allocated - * elements in that array. Upon successful return, the actual number - * of attributes will be overwritten into \c num_attribs. Otherwise, - * \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and \c num_attribs - * is adjusted to the number of elements that would be returned if - * enough space was available. - * - * Note: it is perfectly valid to pass NULL to the \c attrib_list - * argument when vaQuerySurfaceAttributes() is used to determine the - * actual number of elements that need to be allocated. - * - * @param[in] dpy the VA display - * @param[in] config the config identifying a codec or a video - * processing pipeline - * @param[out] attrib_list the output array of #VASurfaceAttrib elements - * @param[in,out] num_attribs the number of elements allocated on - * input, the number of elements actually filled in output - */ -VAStatus -vaQuerySurfaceAttributes( - VADisplay dpy, - VAConfigID config, - VASurfaceAttrib *attrib_list, - unsigned int *num_attribs -); - -/** - * \brief Creates an array of surfaces - * - * Creates an array of surfaces. The optional list of attributes shall - * be constructed based on what the underlying hardware could expose - * through vaQuerySurfaceAttributes(). - * - * @param[in] dpy the VA display - * @param[in] format the desired surface format. See \c VA_RT_FORMAT_* - * @param[in] width the surface width - * @param[in] height the surface height - * @param[out] surfaces the array of newly created surfaces - * @param[in] num_surfaces the number of surfaces to create - * @param[in] attrib_list the list of (optional) attributes, or \c NULL - * @param[in] num_attribs the number of attributes supplied in - * \c attrib_list, or zero - */ -VAStatus -vaCreateSurfaces( - VADisplay dpy, - unsigned int format, - unsigned int width, - unsigned int height, - VASurfaceID *surfaces, - unsigned int num_surfaces, - VASurfaceAttrib *attrib_list, - unsigned int num_attribs -); - -/** - * vaDestroySurfaces - Destroy resources associated with surfaces. - * Surfaces can only be destroyed after all contexts using these surfaces have been - * destroyed. - * dpy: display - * surfaces: array of surfaces to destroy - * num_surfaces: number of surfaces in the array to be destroyed. - */ -VAStatus vaDestroySurfaces( - VADisplay dpy, - VASurfaceID *surfaces, - int num_surfaces -); - -#define VA_PROGRESSIVE 0x1 -/** - * vaCreateContext - Create a context - * dpy: display - * config_id: configuration for the context - * picture_width: coded picture width - * picture_height: coded picture height - * flag: any combination of the following: - * VA_PROGRESSIVE (only progressive frame pictures in the sequence when set) - * render_targets: a hint for render targets (surfaces) tied to the context - * num_render_targets: number of render targets in the above array - * context: created context id upon return - */ -VAStatus vaCreateContext( - VADisplay dpy, - VAConfigID config_id, - int picture_width, - int picture_height, - int flag, - VASurfaceID *render_targets, - int num_render_targets, - VAContextID *context /* out */ -); - -/** - * vaDestroyContext - Destroy a context - * dpy: display - * context: context to be destroyed - */ -VAStatus vaDestroyContext( - VADisplay dpy, - VAContextID context -); - -//Multi-frame context -typedef VAGenericID VAMFContextID; -/** - * vaCreateMFContext - Create a multi-frame context - * interface encapsulating common for all streams memory objects and structures - * required for single GPU task submission from several VAContextID's. - * Allocation: This call only creates an instance, doesn't allocate any additional memory. - * Support identification: Application can identify multi-frame feature support by ability - * to create multi-frame context. If driver supports multi-frame - call successful, - * mf_context != NULL and VAStatus = VA_STATUS_SUCCESS, otherwise if multi-frame processing - * not supported driver returns VA_STATUS_ERROR_UNIMPLEMENTED and mf_context = NULL. - * return values: - * VA_STATUS_SUCCESS - operation successful. - * VA_STATUS_ERROR_UNIMPLEMENTED - no support for multi-frame. - * dpy: display adapter. - * mf_context: Multi-Frame context encapsulating all associated context - * for multi-frame submission. - */ -VAStatus vaCreateMFContext( - VADisplay dpy, - VAMFContextID *mf_context /* out */ -); - -/** - * vaMFAddContext - Provide ability to associate each context used for - * Multi-Frame submission and common Multi-Frame context. - * Try to add context to understand if it is supported. - * Allocation: this call allocates and/or reallocates all memory objects - * common for all contexts associated with particular Multi-Frame context. - * All memory required for each context(pixel buffers, internal driver - * buffers required for processing) allocated during standard vaCreateContext call for each context. - * Runtime dependency - if current implementation doesn't allow to run different entry points/profile, - * first context added will set entry point/profile for whole Multi-Frame context, - * all other entry points and profiles can be rejected to be added. - * Return values: - * VA_STATUS_SUCCESS - operation successful, context was added. - * VA_STATUS_ERROR_OPERATION_FAILED - something unexpected happened - application have to close - * current mf_context and associated contexts and start working with new ones. - * VA_STATUS_ERROR_INVALID_CONTEXT - ContextID is invalid, means: - * 1 - mf_context is not valid context or - * 2 - driver can't suport different VAEntrypoint or VAProfile simultaneosly - * and current context contradicts with previously added, application can continue with current mf_context - * and other contexts passed this call, rejected context can continue work in stand-alone - * mode or other mf_context. - * VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT - particular context being added was created with with - * unsupported VAEntrypoint. Application can continue with current mf_context - * and other contexts passed this call, rejected context can continue work in stand-alone - * mode. - * VA_STATUS_ERROR_UNSUPPORTED_PROFILE - Current context with Particular VAEntrypoint is supported - * but VAProfile is not supported. Application can continue with current mf_context - * and other contexts passed this call, rejected context can continue work in stand-alone - * mode. - * dpy: display adapter. - * context: context being associated with Multi-Frame context. - * mf_context: - multi-frame context used to associate contexts for multi-frame submission. - */ -VAStatus vaMFAddContext( - VADisplay dpy, - VAMFContextID mf_context, - VAContextID context -); - -/** - * vaMFReleaseContext - Removes context from multi-frame and - * association with multi-frame context. - * After association removed vaEndPicture will submit tasks, but not vaMFSubmit. - * Return values: - * VA_STATUS_SUCCESS - operation successful, context was removed. - * VA_STATUS_ERROR_OPERATION_FAILED - something unexpected happened. - * application need to destroy this VAMFContextID and all assotiated VAContextID - * dpy: display - * mf_context: VAMFContextID where context is added - * context: VAContextID to be added - */ -VAStatus vaMFReleaseContext( - VADisplay dpy, - VAMFContextID mf_context, - VAContextID context -); - -/** - * Buffers - * Buffers are used to pass various types of data from the - * client to the server. The server maintains a data store - * for each buffer created, and the client idenfies a buffer - * through a unique buffer id assigned by the server. - */ - -typedef VAGenericID VABufferID; - -typedef enum { - VAPictureParameterBufferType = 0, - VAIQMatrixBufferType = 1, - VABitPlaneBufferType = 2, - VASliceGroupMapBufferType = 3, - VASliceParameterBufferType = 4, - VASliceDataBufferType = 5, - VAMacroblockParameterBufferType = 6, - VAResidualDataBufferType = 7, - VADeblockingParameterBufferType = 8, - VAImageBufferType = 9, - VAProtectedSliceDataBufferType = 10, - VAQMatrixBufferType = 11, - VAHuffmanTableBufferType = 12, - VAProbabilityBufferType = 13, - - /* Following are encode buffer types */ - VAEncCodedBufferType = 21, - VAEncSequenceParameterBufferType = 22, - VAEncPictureParameterBufferType = 23, - VAEncSliceParameterBufferType = 24, - VAEncPackedHeaderParameterBufferType = 25, - VAEncPackedHeaderDataBufferType = 26, - VAEncMiscParameterBufferType = 27, - VAEncMacroblockParameterBufferType = 28, - VAEncMacroblockMapBufferType = 29, - - /** - * \brief Encoding QP buffer - * - * This buffer contains QP per MB for encoding. Currently - * VAEncQPBufferH264 is defined for H.264 encoding, see - * #VAEncQPBufferH264 for details - */ - VAEncQPBufferType = 30, - /* Following are video processing buffer types */ - /** - * \brief Video processing pipeline parameter buffer. - * - * This buffer describes the video processing pipeline. See - * #VAProcPipelineParameterBuffer for details. - */ - VAProcPipelineParameterBufferType = 41, - /** - * \brief Video filter parameter buffer. - * - * This buffer describes the video filter parameters. All buffers - * inherit from #VAProcFilterParameterBufferBase, thus including - * a unique filter buffer type. - * - * The default buffer used by most filters is #VAProcFilterParameterBuffer. - * Filters requiring advanced parameters include, but are not limited to, - * deinterlacing (#VAProcFilterParameterBufferDeinterlacing), - * color balance (#VAProcFilterParameterBufferColorBalance), etc. - */ - VAProcFilterParameterBufferType = 42, - /** - * \brief FEI specific buffer types - */ - VAEncFEIMVBufferType = 43, - VAEncFEIMBCodeBufferType = 44, - VAEncFEIDistortionBufferType = 45, - VAEncFEIMBControlBufferType = 46, - VAEncFEIMVPredictorBufferType = 47, - VAStatsStatisticsParameterBufferType = 48, - /** \brief Statistics output for VAEntrypointStats progressive and top field of interlaced case*/ - VAStatsStatisticsBufferType = 49, - /** \brief Statistics output for VAEntrypointStats bottom field of interlaced case*/ - VAStatsStatisticsBottomFieldBufferType = 50, - VAStatsMVBufferType = 51, - VAStatsMVPredictorBufferType = 52, - /** Force MB's to be non skip for encode.it's per-mb control buffer, The width of the MB map - * Surface is (width of the Picture in MB unit) * 1 byte, multiple of 64 bytes. - * The height is (height of the picture in MB unit). The picture is either - * frame or non-interleaved top or bottom field. If the application provides this - *surface, it will override the "skipCheckDisable" setting in VAEncMiscParameterEncQuality. - */ - VAEncMacroblockDisableSkipMapBufferType = 53, - /** - * \brief HEVC FEI CTB level cmd buffer - * it is CTB level information for future usage. - */ - VAEncFEICTBCmdBufferType = 54, - /** - * \brief HEVC FEI CU level data buffer - * it's CTB level information for future usage - */ - VAEncFEICURecordBufferType = 55, - /** decode stream out buffer, intermedia data of decode, it may include MV, MB mode etc. - * it can be used to detect motion and analyze the frame contain */ - VADecodeStreamoutBufferType = 56, - - /** \brief HEVC Decoding Subset Parameter buffer type - * - * The subsets parameter buffer is concatenation with one or multiple - * subset entry point offsets. All the offset values are layed out one - * by one according to slice order with first slice segment first, second - * slice segment second, etc... The entry number is indicated by parameter - * \ref num_entry_point_offsets. And the first entry position of the entry - * point offsets for any slice segment is indicated by parameter - * entry_offset_to_subset_array in VAPictureParameterBufferHEVC data structure. - */ - VASubsetsParameterBufferType = 57, - /** \brief adjust context parameters dynamically - * - * this parameter is used to update context parameters, detail parameter is in - * \c VAContextParameterUpdateBuffer - */ - VAContextParameterUpdateBufferType = 58, - /** - * \brief Protected session execution buffer type - * - * It's for TEE execution usage (vaProtectedSessionExecute()). The buffer structure is in - * \c VAProtectedSessionExecuteBuffer - */ - VAProtectedSessionExecuteBufferType = 59, - - /** \brief Encryption parameters buffer for protected content session. - * - * Refer to \c VAEncryptionParameters - */ - VAEncryptionParameterBufferType = 60, - - /** - * \brief Encoding delta QP per block buffer - * - * This buffer only could be created and accepted - * when \c VAConfigAttribValEncPerBlockControl delta_qp_support == 1. - * This input buffer contains delta QP per block for encoding. - * The supported size of delta QP block and the size of delta QP - * must be quried from \c VAConfigAttribValEncPerBlockControl. - */ - VAEncDeltaQpPerBlockBufferType = 61, - - VABufferTypeMax -} VABufferType; - -/** \brief update the context parameter - * this structure is used to update context parameters, such as priority of the context - * backend driver should keep the parameter unchanged if there no new - * parameter updated. - */ -typedef struct _VAContextParameterUpdateBuffer { - union { - struct { - /** \brief indicate whether context priority changed */ - uint32_t context_priority_update : 1; - /** \brief Reserved bits for future use, must be zero */ - uint32_t reserved : 31; - } bits; - uint32_t value; - } flags; - /** \brief task/context priority */ - VAConfigAttribValContextPriority context_priority; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved[VA_PADDING_MEDIUM]; -} VAContextParameterUpdateBuffer; - -/** - * These ENCRYPTION_TYPEs are used for the attribute values for - * \c VAConfigAttribEncryption and for encryption_type in - * VAEncryptionParameters. - * - * When used for \c VAConfigAttribEncryption, it be used via - * vaQueryConfigEntrypoints to check which type are supported for specific - * profile or not. - * - * When used for encryption_type in VAEncryptionParameters, it tells driver - * the parameters in VAEncryptionParameters are used for which encryption type. - */ -#define VA_ENCRYPTION_TYPE_FULLSAMPLE_CTR 0x00000001 /* AES CTR fullsample */ -#define VA_ENCRYPTION_TYPE_FULLSAMPLE_CBC 0x00000002 /* AES CBC fullsample */ -#define VA_ENCRYPTION_TYPE_SUBSAMPLE_CTR 0x00000004 /* AES CTR fullsample */ -#define VA_ENCRYPTION_TYPE_SUBSAMPLE_CBC 0x00000008 /* AES CBC fullsample */ - -/** \brief structure for encrypted segment info. */ -typedef struct _VAEncryptionSegmentInfo { - /** \brief The offset relative to the start of the bitstream input in - * bytes of the start of the segment */ - uint32_t segment_start_offset; - /** \brief The length of the segments in bytes */ - uint32_t segment_length; - /** \brief The length in bytes of the remainder of an incomplete block - * from a previous segment*/ - uint32_t partial_aes_block_size; - /** \brief The length in bytes of the initial clear data */ - uint32_t init_byte_length; - /** \brief This will be AES counter for secure decode and secure encode - * when numSegments equals 1, valid size is specified by - * \c key_blob_size */ - uint8_t aes_cbc_iv_or_ctr[64]; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAEncryptionSegmentInfo; - -/** \brief Encryption parameters buffer for VAEncryptionParameterBufferType */ -typedef struct _VAEncryptionParameters { - /** \brief Encryption type, refer to \c VA_ENCRYPTION_TYPE_FULLSAMPLE_CTR, - * \c VA_ENCRYPTION_TYPE_FULLSAMPLE_CBC, \c VA_ENCRYPTION_TYPE_SUBSAMPLE_CTR, - * or \c VA_ENCRYPTION_TYPE_SUBSAMPLE_CBC */ - uint32_t encryption_type; - /** \brief The number of sengments */ - uint32_t num_segments; - /** \brief Pointer of segments */ - VAEncryptionSegmentInfo *segment_info; - /** \brief The status report index reserved for CENC fullsample workload. - * The related structures and definitions are vendor specific. - */ - uint32_t status_report_index; - /** \brief CENC counter length */ - uint32_t size_of_length; - /** \brief Wrapped decrypt blob (Snd)kb, valid size is specified by - * \c key_blob_size */ - uint8_t wrapped_decrypt_blob[64]; - /** \brief Wrapped Key blob info (Sne)kb, valid size is specified by - * \c key_blob_size */ - uint8_t wrapped_encrypt_blob[64]; - /** \brief key blob size - * It could be \c VA_PC_BLOCK_SIZE_128, \c VA_PC_BLOCK_SIZE_192, or - * \c VA_PC_BLOCK_SIZE_256 - */ - uint32_t key_blob_size; - /** \brief Indicates the number of 16-byte BLOCKS that are encrypted in any - * given encrypted region of segments. - * If this value is zero: - * 1. All bytes in encrypted region of segments are encrypted, i.e. the - * CENC or CBC1 scheme is being used - * 2. blocks_stripe_clear must also be zero. - * If this value is non-zero, blocks_stripe_clear must also be non-zero. - */ - uint32_t blocks_stripe_encrypted; - /** \brief Indicates the number of 16-byte BLOCKS that are clear in any given - * encrypted region of segments, as defined by the CENS and CBCS schemes in - * the common encryption spec. - * If this value is zero, all bytes in encrypted region of segments are - * encrypted, i.e. the CENC or CBC1 scheme is being used. - */ - uint32_t blocks_stripe_clear; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAEncryptionParameters; - -/** - * Processing rate parameter for encode. - */ -typedef struct _VAProcessingRateParameterEnc { - /** \brief Profile level */ - uint8_t level_idc; - uint8_t reserved[3]; - /** \brief quality level. When set to 0, default quality - * level is used. - */ - uint32_t quality_level; - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; -} VAProcessingRateParameterEnc; - -/** - * Processing rate parameter for decode. - */ -typedef struct _VAProcessingRateParameterDec { - /** \brief Profile level */ - uint8_t level_idc; - uint8_t reserved0[3]; - uint32_t reserved; -} VAProcessingRateParameterDec; - -typedef struct _VAProcessingRateParameter { - union { - VAProcessingRateParameterEnc proc_buf_enc; - VAProcessingRateParameterDec proc_buf_dec; - }; -} VAProcessingRateParameter; - -/** - * \brief Queries processing rate for the supplied config. - * - * This function queries the processing rate based on parameters in - * \c proc_buf for the given \c config. Upon successful return, the processing - * rate value will be stored in \c processing_rate. Processing rate is - * specified as the number of macroblocks/CTU per second. - * - * If NULL is passed to the \c proc_buf, the default processing rate for the - * given configuration will be returned. - * - * @param[in] dpy the VA display - * @param[in] config the config identifying a codec or a video - * processing pipeline - * @param[in] proc_buf the buffer that contains the parameters for - either the encode or decode processing rate - * @param[out] processing_rate processing rate in number of macroblocks per - second constrained by parameters specified in proc_buf - * - */ -VAStatus -vaQueryProcessingRate( - VADisplay dpy, - VAConfigID config, - VAProcessingRateParameter *proc_buf, - unsigned int *processing_rate -); - -typedef enum { - VAEncMiscParameterTypeFrameRate = 0, - VAEncMiscParameterTypeRateControl = 1, - VAEncMiscParameterTypeMaxSliceSize = 2, - VAEncMiscParameterTypeAIR = 3, - /** \brief Buffer type used to express a maximum frame size (in bits). */ - VAEncMiscParameterTypeMaxFrameSize = 4, - /** \brief Buffer type used for HRD parameters. */ - VAEncMiscParameterTypeHRD = 5, - VAEncMiscParameterTypeQualityLevel = 6, - /** \brief Buffer type used for Rolling intra refresh */ - VAEncMiscParameterTypeRIR = 7, - /** \brief Buffer type used for quantization parameters, it's per-sequence parameter*/ - VAEncMiscParameterTypeQuantization = 8, - /** \brief Buffer type used for sending skip frame parameters to the encoder's - * rate control, when the user has externally skipped frames. */ - VAEncMiscParameterTypeSkipFrame = 9, - /** \brief Buffer type used for region-of-interest (ROI) parameters. */ - VAEncMiscParameterTypeROI = 10, - /** \brief Buffer type used to express a maximum frame size (in bytes) settings for multiple pass. */ - VAEncMiscParameterTypeMultiPassFrameSize = 11, - /** \brief Buffer type used for temporal layer structure */ - VAEncMiscParameterTypeTemporalLayerStructure = 12, - /** \brief Buffer type used for dirty region-of-interest (ROI) parameters. */ - VAEncMiscParameterTypeDirtyRect = 13, - /** \brief Buffer type used for parallel BRC parameters. */ - VAEncMiscParameterTypeParallelBRC = 14, - /** \brief Set MB partion mode mask and Half-pel/Quant-pel motion search */ - VAEncMiscParameterTypeSubMbPartPel = 15, - /** \brief set encode quality tuning */ - VAEncMiscParameterTypeEncQuality = 16, - /** \brief Buffer type used for encoder rounding offset parameters. */ - VAEncMiscParameterTypeCustomRoundingControl = 17, - /** \brief Buffer type used for FEI input frame level parameters */ - VAEncMiscParameterTypeFEIFrameControl = 18, - /** \brief encode extension buffer, ect. MPEG2 Sequence extenstion data */ - VAEncMiscParameterTypeExtensionData = 19 -} VAEncMiscParameterType; - -/** \brief Packed header type. */ -typedef enum { - /** \brief Packed sequence header. */ - VAEncPackedHeaderSequence = 1, - /** \brief Packed picture header. */ - VAEncPackedHeaderPicture = 2, - /** \brief Packed slice header. */ - VAEncPackedHeaderSlice = 3, - /** - * \brief Packed raw header. - * - * Packed raw data header can be used by the client to insert a header - * into the bitstream data buffer at the point it is passed, the driver - * will handle the raw packed header based on "has_emulation_bytes" field - * in the packed header parameter structure. - */ - VAEncPackedHeaderRawData = 4, - /** - * \brief Misc packed header. See codec-specific definitions. - * - * @deprecated - * This is a deprecated packed header type. All applications can use - * \c VAEncPackedHeaderRawData to insert a codec-specific packed header - */ - VAEncPackedHeaderMiscMask va_deprecated_enum = 0x80000000, -} VAEncPackedHeaderType; - -/** \brief Packed header parameter. */ -typedef struct _VAEncPackedHeaderParameterBuffer { - /** Type of the packed header buffer. See #VAEncPackedHeaderType. */ - uint32_t type; - /** \brief Size of the #VAEncPackedHeaderDataBuffer in bits. */ - uint32_t bit_length; - /** \brief Flag: buffer contains start code emulation prevention bytes? */ - uint8_t has_emulation_bytes; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPackedHeaderParameterBuffer; - -/** - * For application, e.g. set a new bitrate - * VABufferID buf_id; - * VAEncMiscParameterBuffer *misc_param; - * VAEncMiscParameterRateControl *misc_rate_ctrl; - * - * vaCreateBuffer(dpy, context, VAEncMiscParameterBufferType, - * sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParameterRateControl), - * 1, NULL, &buf_id); - * - * vaMapBuffer(dpy,buf_id,(void **)&misc_param); - * misc_param->type = VAEncMiscParameterTypeRateControl; - * misc_rate_ctrl= (VAEncMiscParameterRateControl *)misc_param->data; - * misc_rate_ctrl->bits_per_second = 6400000; - * vaUnmapBuffer(dpy, buf_id); - * vaRenderPicture(dpy, context, &buf_id, 1); - */ -typedef struct _VAEncMiscParameterBuffer { - VAEncMiscParameterType type; - uint32_t data[]; -} VAEncMiscParameterBuffer; - -/** \brief Temporal layer Structure*/ -typedef struct _VAEncMiscParameterTemporalLayerStructure { - /** \brief The number of temporal layers */ - uint32_t number_of_layers; - /** \brief The length of the array defining frame layer membership. Should be 1-32 */ - uint32_t periodicity; - /** - * \brief The array indicating the layer id for each frame - * - * The layer id for the first frame in a coded sequence is always 0, so layer_id[] specifies the layer - * ids for frames starting from the 2nd frame. - */ - uint32_t layer_id[32]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterTemporalLayerStructure; - - -/** \brief Rate control parameters */ -typedef struct _VAEncMiscParameterRateControl { - /** The maximum bit-rate which the the rate controller should generate. */ - uint32_t bits_per_second; - /** The target bit-rate which the rate controller should generate, as a percentage of the - * maximum bit-rate. - * - * In CBR mode this value is ignored (treated as 100%). - */ - uint32_t target_percentage; - /** Rate control window size in milliseconds. - * - * The rate controller will attempt to guarantee that the target and maximum bit-rates are - * correct over this window. - */ - uint32_t window_size; - /** Initial quantiser value used at the start of the stream. - * - * Ignored if set to zero. - */ - uint32_t initial_qp; - /** Minimum quantiser value to use. - * - * The quantiser will not go below the value - if this limit is hit, the output bitrate may - * be lower than the target. Ignored if set to zero. - */ - uint32_t min_qp; - /** Basic unit size. - * - * Only used by some drivers - see driver documentation for details. Set to zero if unused. - */ - uint32_t basic_unit_size; - union { - struct { - /** Force rate controller reset. - * - * The next frame will be treated as the start of a new stream, with all rate - * controller state reset to its initial values. - */ - uint32_t reset : 1; - /** Disable frame skip in rate control mode. */ - uint32_t disable_frame_skip : 1; - /** Disable bit stuffing in rate control mode. */ - uint32_t disable_bit_stuffing : 1; - /** Macroblock-level rate control. - * - * 0: use default, 1: always enable, 2: always disable, other: reserved. - * - * This feature is only available if VAConfigAttribRateControl has the - * \ref VA_RC_MB bit set. - */ - uint32_t mb_rate_control : 4; - /** The temporal layer that these rate control parameters apply to. */ - uint32_t temporal_id : 8; - /** Ensure that intra frames also conform to the constant frame size. */ - uint32_t cfs_I_frames : 1; - /** Enable parallel rate control for hierarchical B frames. - * - * See \ref VA_RC_PARALLEL. - */ - uint32_t enable_parallel_brc : 1; - uint32_t enable_dynamic_scaling : 1; - /** Frame tolerance mode. - * - * Indicates the tolerance the application has to variations in the frame size. - * For example, wireless display scenarios may require very steady bit rate to - * reduce buffering time. It affects the rate control algorithm used, - * but may or may not have an effect based on the combination of other BRC - * parameters. Only valid when the driver reports support for - * #VAConfigAttribFrameSizeToleranceSupport. - * - * equals 0 -- normal mode; - * equals 1 -- maps to sliding window; - * equals 2 -- maps to low delay mode; - * other -- invalid. - */ - uint32_t frame_tolerance_mode : 2; - /** Reserved for future use, must be zero. */ - uint32_t reserved : 12; - } bits; - uint32_t value; - } rc_flags; - /** Initial quality factor used in ICQ mode. - * - * This value must be between 1 and 51. - * this value will be deprecated in future, to use quality_factor instead of it. - */ - uint32_t ICQ_quality_factor; - /** Maximum quantiser value to use. - * - * The quantiser will not go above this value - if this limit is hit, the output bitrate - * may exceed the target. Ignored if set to zero. - */ - uint32_t max_qp; - /** Quality factor - * - * the range will be different for different codec - */ - uint32_t quality_factor; - /** Target frame size - * - * Desired frame size in bytes. - * This parameter can be used in some RC modes (like Transport Controlled BRC) - * where feedback from the app is required. - * Zero value means no limits. - * - */ - uint32_t target_frame_size; - /** Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterRateControl; - -/** Encode framerate parameters. - * - * Sets the encode framerate used by the rate controller. This should be - * provided in all modes using a bitrate target (variable framerate is not - * supported). - */ -typedef struct _VAEncMiscParameterFrameRate { - /** Encode framerate. - * - * The framerate is specified as a number of frames per second, as a - * fraction. The denominator of the fraction is given in the top half - * (the high two bytes) of the framerate field, and the numerator is - * given in the bottom half (the low two bytes). - * - * That is: - * denominator = framerate >> 16 & 0xffff; - * numerator = framerate & 0xffff; - * fps = numerator / denominator; - * - * For example, if framerate is set to (100 << 16 | 750), this is - * 750 / 100, hence 7.5fps. - * - * If the denominator is zero (the high two bytes are both zero) then - * it takes the value one instead, so the framerate is just the integer - * in the low 2 bytes. - */ - uint32_t framerate; - union { - struct { - /** The temporal layer that these framerate parameters apply to. */ - uint32_t temporal_id : 8; - /** Reserved for future use, must be zero. */ - uint32_t reserved : 24; - } bits; - uint32_t value; - } framerate_flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterFrameRate; - -/** - * Allow a maximum slice size to be specified (in bits). - * The encoder will attempt to make sure that individual slices do not exceed this size - * Or to signal applicate if the slice size exceed this size, see "status" of VACodedBufferSegment - */ -typedef struct _VAEncMiscParameterMaxSliceSize { - uint32_t max_slice_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterMaxSliceSize; - -typedef struct _VAEncMiscParameterAIR { - uint32_t air_num_mbs; - uint32_t air_threshold; - uint32_t air_auto; /* if set to 1 then hardware auto-tune the AIR threshold */ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterAIR; - -/* - * \brief Rolling intra refresh data structure for encoding. - */ -typedef struct _VAEncMiscParameterRIR { - union { - struct - /** - * \brief Indicate if intra refresh is enabled in column/row. - * - * App should query VAConfigAttribEncIntraRefresh to confirm RIR support - * by the driver before sending this structure. - */ - { - /* \brief enable RIR in column */ - uint32_t enable_rir_column : 1; - /* \brief enable RIR in row */ - uint32_t enable_rir_row : 1; - uint32_t reserved : 30; - } bits; - uint32_t value; - } rir_flags; - /** - * \brief Indicates the column or row location in MB. It is ignored if - * rir_flags is 0. - */ - uint16_t intra_insertion_location; - /** - * \brief Indicates the number of columns or rows in MB. It is ignored if - * rir_flags is 0. - */ - uint16_t intra_insert_size; - /** - * \brief indicates the Qp difference for inserted intra columns or rows. - * App can use this to adjust intra Qp based on bitrate & max frame size. - */ - uint8_t qp_delta_for_inserted_intra; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterRIR; - -/** HRD / VBV buffering parameters for encoding. - * - * This sets the HRD / VBV parameters which will be used by the rate - * controller for encoding. It should be specified in modes using a bitrate - * target when the buffering of the output stream needs to be constrained. - * - * If not provided, the encoder may use arbitrary amounts of buffering. - */ -typedef struct _VAEncMiscParameterHRD { - /** The initial fullness of the HRD coded picture buffer, in bits. - * - * This sets how full the CPB is when encoding begins - that is, how much - * buffering will happen on the decoder side before the first frame. - * The CPB fullness will be reset to this value after any rate control - * reset (a change in parameters or an explicit reset). - * - * For H.264, it should match the value of initial_cpb_removal_delay in - * buffering_period SEI messages. - */ - uint32_t initial_buffer_fullness; - /** The HRD coded picture buffer size, in bits. - * - * For H.264, it should match the value of cpb_size_value_minus1 in the VUI - * parameters. - */ - uint32_t buffer_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterHRD; - -/** - * \brief Defines a maximum frame size (in bits). - * - * This misc parameter buffer defines the maximum size of a frame (in - * bits). The encoder will try to make sure that each frame does not - * exceed this size. Otherwise, if the frame size exceeds this size, - * the \c status flag of #VACodedBufferSegment will contain - * #VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW. - */ -typedef struct _VAEncMiscParameterBufferMaxFrameSize { - /** \brief Type. Shall be set to #VAEncMiscParameterTypeMaxFrameSize. */ - /** duplicated with VAEncMiscParameterBuffer, should be deprecated*/ - va_deprecated VAEncMiscParameterType type; - /** \brief Maximum size of a frame (in bits). */ - uint32_t max_frame_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferMaxFrameSize; - -/** - * \brief Maximum frame size (in bytes) settings for multiple pass. - * - * This misc parameter buffer defines the maximum size of a frame (in - * bytes) settings for multiple pass. currently only AVC encoder can - * support this settings in multiple pass case. If the frame size exceeds - * this size, the encoder will do more pak passes to adjust the QP value - * to control the frame size. - */ -typedef struct _VAEncMiscParameterBufferMultiPassFrameSize { - /** \brief Type. Shall be set to #VAEncMiscParameterTypeMultiPassMaxFrameSize. */ - /** duplicated with VAEncMiscParameterBuffer, should be deprecated*/ - va_deprecated VAEncMiscParameterType type; - /** \brief Maximum size of a frame (in byte) */ - uint32_t max_frame_size; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved; - /** \brief number of passes, every pass has different QP, currently AVC encoder can support up to 4 passes */ - uint8_t num_passes; - /** \brief delta QP list for every pass */ - uint8_t *delta_qp; - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferMultiPassFrameSize; - -/** - * \brief Encoding quality level. - * - * The encoding quality could be set through this structure, if the implementation - * supports multiple quality levels. The quality level set through this structure is - * persistent over the entire coded sequence, or until a new structure is being sent. - * The quality level range can be queried through the VAConfigAttribEncQualityRange - * attribute. A lower value means higher quality, and a value of 1 represents the highest - * quality. The quality level setting is used as a trade-off between quality and speed/power - * consumption, with higher quality corresponds to lower speed and higher power consumption. - */ -typedef struct _VAEncMiscParameterBufferQualityLevel { - /** \brief Encoding quality level setting. When set to 0, default quality - * level is used. - */ - uint32_t quality_level; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferQualityLevel; - -/** - * \brief Quantization settings for encoding. - * - * Some encoders support special types of quantization such as trellis, and this structure - * can be used by the app to control these special types of quantization by the encoder. - */ -typedef struct _VAEncMiscParameterQuantization { - union { - /* if no flags is set then quantization is determined by the driver */ - struct { - /* \brief disable trellis for all frames/fields */ - uint32_t disable_trellis : 1; - /* \brief enable trellis for I frames/fields */ - uint32_t enable_trellis_I : 1; - /* \brief enable trellis for P frames/fields */ - uint32_t enable_trellis_P : 1; - /* \brief enable trellis for B frames/fields */ - uint32_t enable_trellis_B : 1; - uint32_t reserved : 28; - } bits; - uint32_t value; - } quantization_flags; - uint32_t va_reserved; -} VAEncMiscParameterQuantization; - -/** - * \brief Encoding skip frame. - * - * The application may choose to skip frames externally to the encoder (e.g. drop completely or - * code as all skip's). For rate control purposes the encoder will need to know the size and number - * of skipped frames. Skip frame(s) indicated through this structure is applicable only to the - * current frame. It is allowed for the application to still send in packed headers for the driver to - * pack, although no frame will be encoded (e.g. for HW to encrypt the frame). - */ -typedef struct _VAEncMiscParameterSkipFrame { - /** \brief Indicates skip frames as below. - * 0: Encode as normal, no skip. - * 1: One or more frames were skipped prior to the current frame, encode the current frame as normal. - * 2: The current frame is to be skipped, do not encode it but pack/encrypt the packed header contents - * (all except VAEncPackedHeaderSlice) which could contain actual frame contents (e.g. pack the frame - * in VAEncPackedHeaderPicture). */ - uint8_t skip_frame_flag; - /** \brief The number of frames skipped prior to the current frame. Valid when skip_frame_flag = 1. */ - uint8_t num_skip_frames; - /** \brief When skip_frame_flag = 1, the size of the skipped frames in bits. When skip_frame_flag = 2, - * the size of the current skipped frame that is to be packed/encrypted in bits. */ - uint32_t size_skip_frames; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterSkipFrame; - -/** - * \brief Encoding region-of-interest (ROI). - * - * The encoding ROI can be set through VAEncMiscParameterBufferROI, if the implementation - * supports ROI input. The ROI set through this structure is applicable only to the - * current frame or field, so must be sent every frame or field to be applied. The number of - * supported ROIs can be queried through the VAConfigAttribEncROI. The encoder will use the - * ROI information to adjust the QP values of the MB's that fall within the ROIs. - */ -typedef struct _VAEncROI { - /** \brief Defines the ROI boundary in pixels, the driver will map it to appropriate - * codec coding units. It is relative to frame coordinates for the frame case and - * to field coordinates for the field case. */ - VARectangle roi_rectangle; - /** - * \brief ROI value - * - * \ref roi_value specifies ROI delta QP or ROI priority. - * -- ROI delta QP is the value that will be added on top of the frame level QP. - * -- ROI priority specifies the priority of a region, it can be positive (more important) - * or negative (less important) values and is compared with non-ROI region (taken as value 0), - * E.g. ROI region with \ref roi_value -3 is less important than the non-ROI region (\ref roi_value - * implied to be 0) which is less important than ROI region with roi_value +2. For overlapping - * regions, the roi_value that is first in the ROI array will have priority. - * - * \ref roi_value always specifes ROI delta QP when VAConfigAttribRateControl == VA_RC_CQP, no matter - * the value of \c roi_value_is_qp_delta in #VAEncMiscParameterBufferROI. - * - * \ref roi_value depends on \c roi_value_is_qp_delta in #VAEncMiscParameterBufferROI when - * VAConfigAttribRateControl != VA_RC_CQP. \ref roi_value specifies ROI_delta QP if \c roi_value_is_qp_delta - * in VAEncMiscParameterBufferROI is 1, otherwise \ref roi_value specifies ROI priority. - */ - int8_t roi_value; -} VAEncROI; - -typedef struct _VAEncMiscParameterBufferROI { - /** \brief Number of ROIs being sent.*/ - uint32_t num_roi; - - /** \brief Valid when VAConfigAttribRateControl != VA_RC_CQP, then the encoder's - * rate control will determine actual delta QPs. Specifies the max/min allowed delta - * QPs. */ - int8_t max_delta_qp; - int8_t min_delta_qp; - - /** \brief Pointer to a VAEncROI array with num_roi elements. It is relative to frame - * coordinates for the frame case and to field coordinates for the field case.*/ - VAEncROI *roi; - union { - struct { - /** - * \brief An indication for roi value. - * - * \ref roi_value_is_qp_delta equal to 1 indicates \c roi_value in #VAEncROI should - * be used as ROI delta QP. \ref roi_value_is_qp_delta equal to 0 indicates \c roi_value - * in #VAEncROI should be used as ROI priority. - * - * \ref roi_value_is_qp_delta is only available when VAConfigAttribRateControl != VA_RC_CQP, - * the setting must comply with \c roi_rc_priority_support and \c roi_rc_qp_delta_support in - * #VAConfigAttribValEncROI. The underlying driver should ignore this field - * when VAConfigAttribRateControl == VA_RC_CQP. - */ - uint32_t roi_value_is_qp_delta : 1; - uint32_t reserved : 31; - } bits; - uint32_t value; - } roi_flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferROI; -/* - * \brief Dirty rectangle data structure for encoding. - * - * The encoding dirty rect can be set through VAEncMiscParameterBufferDirtyRect, if the - * implementation supports dirty rect input. The rect set through this structure is applicable - * only to the current frame or field, so must be sent every frame or field to be applied. - * The number of supported rects can be queried through the VAConfigAttribEncDirtyRect. The - * encoder will use the rect information to know those rectangle areas have changed while the - * areas not covered by dirty rect rectangles are assumed to have not changed compared to the - * previous picture. The encoder may do some internal optimizations. - */ -typedef struct _VAEncMiscParameterBufferDirtyRect { - /** \brief Number of Rectangle being sent.*/ - uint32_t num_roi_rectangle; - - /** \brief Pointer to a VARectangle array with num_roi_rectangle elements.*/ - VARectangle *roi_rectangle; -} VAEncMiscParameterBufferDirtyRect; - -/** \brief Attribute value for VAConfigAttribEncParallelRateControl */ -typedef struct _VAEncMiscParameterParallelRateControl { - /** brief Number of layers*/ - uint32_t num_layers; - /** brief Number of B frames per layer per GOP. - * - * it should be allocated by application, and the is num_layers. - * num_b_in_gop[0] is the number of regular B which refers to only I or P frames. */ - uint32_t *num_b_in_gop; -} VAEncMiscParameterParallelRateControl; - -/** per frame encoder quality controls, once set they will persist for all future frames - *till it is updated again. */ -typedef struct _VAEncMiscParameterEncQuality { - union { - struct { - /** Use raw frames for reference instead of reconstructed frames. - * it only impact motion estimation (ME) stage, and will not impact MC stage - * so the reconstruct picture will can match with decode side */ - uint32_t useRawPicForRef : 1; - /** Disables skip check for ME stage, it will increase the bistream size - * but will improve the qulity */ - uint32_t skipCheckDisable : 1; - /** Indicates app will override default driver FTQ settings using FTQEnable. - * FTQ is forward transform quantization */ - uint32_t FTQOverride : 1; - /** Enables/disables FTQ. */ - uint32_t FTQEnable : 1; - /** Indicates the app will provide the Skip Threshold LUT to use when FTQ is - * enabled (FTQSkipThresholdLUT), else default driver thresholds will be used. */ - uint32_t FTQSkipThresholdLUTInput : 1; - /** Indicates the app will provide the Skip Threshold LUT to use when FTQ is - * disabled (NonFTQSkipThresholdLUT), else default driver thresholds will be used. */ - uint32_t NonFTQSkipThresholdLUTInput : 1; - uint32_t ReservedBit : 1; - /** Control to enable the ME mode decision algorithm to bias to fewer B Direct/Skip types. - * Applies only to B frames, all other frames will ignore this setting. */ - uint32_t directBiasAdjustmentEnable : 1; - /** Enables global motion bias. global motion also is called HME (Heirarchical Motion Estimation ) - * HME is used to handle large motions and avoiding local minima in the video encoding process - * down scaled the input and reference picture, then do ME. the result will be a predictor to next level HME or ME - * current interface divide the HME to 3 level. UltraHME , SuperHME, and HME, result of UltraHME will be input of SurperHME, - * result of superHME will be a input for HME. HME result will be input of ME. it is a switch for HMEMVCostScalingFactor - * can change the HME bias inside RDO stage*/ - uint32_t globalMotionBiasAdjustmentEnable : 1; - /** MV cost scaling ratio for HME ( predictors. It is used when - * globalMotionBiasAdjustmentEnable == 1, else it is ignored. Values are: - * 0: set MV cost to be 0 for HME predictor. - * 1: scale MV cost to be 1/2 of the default value for HME predictor. - * 2: scale MV cost to be 1/4 of the default value for HME predictor. - * 3: scale MV cost to be 1/8 of the default value for HME predictor. */ - uint32_t HMEMVCostScalingFactor : 2; - /**disable HME, if it is disabled. Super*ultraHME should also be disabled */ - uint32_t HMEDisable : 1; - /**disable Super HME, if it is disabled, ultraHME should be disabled */ - uint32_t SuperHMEDisable : 1; - /** disable Ultra HME */ - uint32_t UltraHMEDisable : 1; - /** disable panic mode. Panic mode happened when there are extreme BRC (bit rate control) requirement - * frame size cant achieve the target of BRC. when Panic mode is triggered, Coefficients will - * be set to zero. disable panic mode will improve quality but will impact BRC */ - uint32_t PanicModeDisable : 1; - /** Force RepartitionCheck - * 0: DEFAULT - follow driver default settings. - * 1: FORCE_ENABLE - enable this feature totally for all cases. - * 2: FORCE_DISABLE - disable this feature totally for all cases. */ - uint32_t ForceRepartitionCheck : 2; - - }; - uint32_t encControls; - }; - - /** Maps QP to skip thresholds when FTQ is enabled. Valid range is 0-255. */ - uint8_t FTQSkipThresholdLUT[52]; - /** Maps QP to skip thresholds when FTQ is disabled. Valid range is 0-65535. */ - uint16_t NonFTQSkipThresholdLUT[52]; - - uint32_t reserved[VA_PADDING_HIGH]; // Reserved for future use. - -} VAEncMiscParameterEncQuality; - -/** - * \brief Custom Encoder Rounding Offset Control. - * Application may use this structure to set customized rounding - * offset parameters for quantization. - * Valid when \c VAConfigAttribCustomRoundingControl equals 1. - */ -typedef struct _VAEncMiscParameterCustomRoundingControl { - union { - struct { - /** \brief Enable customized rounding offset for intra blocks. - * If 0, default value would be taken by driver for intra - * rounding offset. - */ - uint32_t enable_custom_rouding_intra : 1 ; - - /** \brief Intra rounding offset - * Ignored if \c enable_custom_rouding_intra equals 0. - */ - uint32_t rounding_offset_intra : 7; - - /** \brief Enable customized rounding offset for inter blocks. - * If 0, default value would be taken by driver for inter - * rounding offset. - */ - uint32_t enable_custom_rounding_inter : 1 ; - - /** \brief Inter rounding offset - * Ignored if \c enable_custom_rouding_inter equals 0. - */ - uint32_t rounding_offset_inter : 7; - - /* Reserved */ - uint32_t reserved : 16; - } bits; - uint32_t value; - } rounding_offset_setting; -} VAEncMiscParameterCustomRoundingControl; - -/** - * There will be cases where the bitstream buffer will not have enough room to hold - * the data for the entire slice, and the following flags will be used in the slice - * parameter to signal to the server for the possible cases. - * If a slice parameter buffer and slice data buffer pair is sent to the server with - * the slice data partially in the slice data buffer (BEGIN and MIDDLE cases below), - * then a slice parameter and data buffer needs to be sent again to complete this slice. - */ -#define VA_SLICE_DATA_FLAG_ALL 0x00 /* whole slice is in the buffer */ -#define VA_SLICE_DATA_FLAG_BEGIN 0x01 /* The beginning of the slice is in the buffer but the end if not */ -#define VA_SLICE_DATA_FLAG_MIDDLE 0x02 /* Neither beginning nor end of the slice is in the buffer */ -#define VA_SLICE_DATA_FLAG_END 0x04 /* end of the slice is in the buffer */ - -/* Codec-independent Slice Parameter Buffer base */ -typedef struct _VASliceParameterBufferBase { - uint32_t slice_data_size; /* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset; /* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX definitions */ -} VASliceParameterBufferBase; - -/********************************** - * JPEG common data structures - **********************************/ -/** - * \brief Huffman table for JPEG decoding. - * - * This structure holds the complete Huffman tables. This is an - * aggregation of all Huffman table (DHT) segments maintained by the - * application. i.e. up to 2 Huffman tables are stored in there for - * baseline profile. - * - * The #load_huffman_table array can be used as a hint to notify the - * VA driver implementation about which table(s) actually changed - * since the last submission of this buffer. - */ -typedef struct _VAHuffmanTableBufferJPEGBaseline { - /** \brief Specifies which #huffman_table is valid. */ - uint8_t load_huffman_table[2]; - /** \brief Huffman tables indexed by table identifier (Th). */ - struct { - /** @name DC table (up to 12 categories) */ - /**@{*/ - /** \brief Number of Huffman codes of length i + 1 (Li). */ - uint8_t num_dc_codes[16]; - /** \brief Value associated with each Huffman code (Vij). */ - uint8_t dc_values[12]; - /**@}*/ - /** @name AC table (2 special codes + up to 16 * 10 codes) */ - /**@{*/ - /** \brief Number of Huffman codes of length i + 1 (Li). */ - uint8_t num_ac_codes[16]; - /** \brief Value associated with each Huffman code (Vij). */ - uint8_t ac_values[162]; - /** \brief Padding to 4-byte boundaries. Must be set to zero. */ - uint8_t pad[2]; - /**@}*/ - } huffman_table[2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAHuffmanTableBufferJPEGBaseline; - -/**************************** - * MPEG-2 data structures - ****************************/ - -/* MPEG-2 Picture Parameter Buffer */ -/* - * For each frame or field, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferMPEG2 { - uint16_t horizontal_size; - uint16_t vertical_size; - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - /* meanings of the following fields are the same as in the standard */ - int32_t picture_coding_type; - int32_t f_code; /* pack all four fcode into this */ - union { - struct { - uint32_t intra_dc_precision : 2; - uint32_t picture_structure : 2; - uint32_t top_field_first : 1; - uint32_t frame_pred_frame_dct : 1; - uint32_t concealment_motion_vectors : 1; - uint32_t q_scale_type : 1; - uint32_t intra_vlc_format : 1; - uint32_t alternate_scan : 1; - uint32_t repeat_first_field : 1; - uint32_t progressive_frame : 1; - uint32_t is_first_field : 1; /* indicate whether the current field - * is the first field for field picture - */ - } bits; - uint32_t value; - } picture_coding_extension; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureParameterBufferMPEG2; - -/** MPEG-2 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferMPEG2 { - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_intra_quantiser_matrix; - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_non_intra_quantiser_matrix; - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_chroma_intra_quantiser_matrix; - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_chroma_non_intra_quantiser_matrix; - /** \brief Luminance intra matrix, in zig-zag scan order. */ - uint8_t intra_quantiser_matrix[64]; - /** \brief Luminance non-intra matrix, in zig-zag scan order. */ - uint8_t non_intra_quantiser_matrix[64]; - /** \brief Chroma intra matrix, in zig-zag scan order. */ - uint8_t chroma_intra_quantiser_matrix[64]; - /** \brief Chroma non-intra matrix, in zig-zag scan order. */ - uint8_t chroma_non_intra_quantiser_matrix[64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferMPEG2; - -/** MPEG-2 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferMPEG2 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset;/* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - uint32_t slice_horizontal_position; - uint32_t slice_vertical_position; - int32_t quantiser_scale_code; - int32_t intra_slice_flag; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferMPEG2; - -/** MPEG-2 Macroblock Parameter Buffer */ -typedef struct _VAMacroblockParameterBufferMPEG2 { - uint16_t macroblock_address; - /* - * macroblock_address (in raster scan order) - * top-left: 0 - * bottom-right: picture-height-in-mb*picture-width-in-mb - 1 - */ - uint8_t macroblock_type; /* see definition below */ - union { - struct { - uint32_t frame_motion_type : 2; - uint32_t field_motion_type : 2; - uint32_t dct_type : 1; - } bits; - uint32_t value; - } macroblock_modes; - uint8_t motion_vertical_field_select; - /* - * motion_vertical_field_select: - * see section 6.3.17.2 in the spec - * only the lower 4 bits are used - * bit 0: first vector forward - * bit 1: first vector backward - * bit 2: second vector forward - * bit 3: second vector backward - */ - int16_t PMV[2][2][2]; /* see Table 7-7 in the spec */ - uint16_t coded_block_pattern; - /* - * The bitplanes for coded_block_pattern are described - * in Figure 6.10-12 in the spec - */ - - /* Number of skipped macroblocks after this macroblock */ - uint16_t num_skipped_macroblocks; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAMacroblockParameterBufferMPEG2; - -/* - * OR'd flags for macroblock_type (section 6.3.17.1 in the spec) - */ -#define VA_MB_TYPE_MOTION_FORWARD 0x02 -#define VA_MB_TYPE_MOTION_BACKWARD 0x04 -#define VA_MB_TYPE_MOTION_PATTERN 0x08 -#define VA_MB_TYPE_MOTION_INTRA 0x10 - -/** - * MPEG-2 Residual Data Buffer - * For each macroblock, there wil be 64 shorts (16-bit) in the - * residual data buffer - */ - -/**************************** - * MPEG-4 Part 2 data structures - ****************************/ - -/* MPEG-4 Picture Parameter Buffer */ -/* - * For each frame or field, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferMPEG4 { - uint16_t vop_width; - uint16_t vop_height; - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - union { - struct { - uint32_t short_video_header : 1; - uint32_t chroma_format : 2; - uint32_t interlaced : 1; - uint32_t obmc_disable : 1; - uint32_t sprite_enable : 2; - uint32_t sprite_warping_accuracy : 2; - uint32_t quant_type : 1; - uint32_t quarter_sample : 1; - uint32_t data_partitioned : 1; - uint32_t reversible_vlc : 1; - uint32_t resync_marker_disable : 1; - } bits; - uint32_t value; - } vol_fields; - uint8_t no_of_sprite_warping_points; - int16_t sprite_trajectory_du[3]; - int16_t sprite_trajectory_dv[3]; - uint8_t quant_precision; - union { - struct { - uint32_t vop_coding_type : 2; - uint32_t backward_reference_vop_coding_type : 2; - uint32_t vop_rounding_type : 1; - uint32_t intra_dc_vlc_thr : 3; - uint32_t top_field_first : 1; - uint32_t alternate_vertical_scan_flag : 1; - } bits; - uint32_t value; - } vop_fields; - uint8_t vop_fcode_forward; - uint8_t vop_fcode_backward; - uint16_t vop_time_increment_resolution; - /* short header related */ - uint8_t num_gobs_in_vop; - uint8_t num_macroblocks_in_gob; - /* for direct mode prediction */ - int16_t TRB; - int16_t TRD; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureParameterBufferMPEG4; - -/** MPEG-4 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferMPEG4 { - /** Same as the MPEG-4:2 bitstream syntax element. */ - int32_t load_intra_quant_mat; - /** Same as the MPEG-4:2 bitstream syntax element. */ - int32_t load_non_intra_quant_mat; - /** The matrix for intra blocks, in zig-zag scan order. */ - uint8_t intra_quant_mat[64]; - /** The matrix for non-intra blocks, in zig-zag scan order. */ - uint8_t non_intra_quant_mat[64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferMPEG4; - -/** MPEG-4 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferMPEG4 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset;/* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - uint32_t macroblock_number; - int32_t quant_scale; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferMPEG4; - -/** - VC-1 data structures -*/ - -typedef enum /* see 7.1.1.32 */ -{ - VAMvMode1Mv = 0, - VAMvMode1MvHalfPel = 1, - VAMvMode1MvHalfPelBilinear = 2, - VAMvModeMixedMv = 3, - VAMvModeIntensityCompensation = 4 -} VAMvModeVC1; - -/** VC-1 Picture Parameter Buffer */ -/* - * For each picture, and before any slice data, a picture parameter - * buffer must be send. Multiple picture parameter buffers may be - * sent for a single picture. In that case picture parameters will - * apply to all slice data that follow it until a new picture - * parameter buffer is sent. - * - * Notes: - * pic_quantizer_type should be set to the applicable quantizer - * type as defined by QUANTIZER (J.1.19) and either - * PQUANTIZER (7.1.1.8) or PQINDEX (7.1.1.6) - */ -typedef struct _VAPictureParameterBufferVC1 { - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - /* if out-of-loop post-processing is done on the render - target, then we need to keep the in-loop decoded - picture as a reference picture */ - VASurfaceID inloop_decoded_picture; - - /* sequence layer for AP or meta data for SP and MP */ - union { - struct { - uint32_t pulldown : 1; /* SEQUENCE_LAYER::PULLDOWN */ - uint32_t interlace : 1; /* SEQUENCE_LAYER::INTERLACE */ - uint32_t tfcntrflag : 1; /* SEQUENCE_LAYER::TFCNTRFLAG */ - uint32_t finterpflag : 1; /* SEQUENCE_LAYER::FINTERPFLAG */ - uint32_t psf : 1; /* SEQUENCE_LAYER::PSF */ - uint32_t multires : 1; /* METADATA::MULTIRES */ - uint32_t overlap : 1; /* METADATA::OVERLAP */ - uint32_t syncmarker : 1; /* METADATA::SYNCMARKER */ - uint32_t rangered : 1; /* METADATA::RANGERED */ - uint32_t max_b_frames : 3; /* METADATA::MAXBFRAMES */ - uint32_t profile : 2; /* SEQUENCE_LAYER::PROFILE or The MSB of METADATA::PROFILE */ - } bits; - uint32_t value; - } sequence_fields; - - uint16_t coded_width; /* ENTRY_POINT_LAYER::CODED_WIDTH */ - uint16_t coded_height; /* ENTRY_POINT_LAYER::CODED_HEIGHT */ - union { - struct { - uint32_t broken_link : 1; /* ENTRY_POINT_LAYER::BROKEN_LINK */ - uint32_t closed_entry : 1; /* ENTRY_POINT_LAYER::CLOSED_ENTRY */ - uint32_t panscan_flag : 1; /* ENTRY_POINT_LAYER::PANSCAN_FLAG */ - uint32_t loopfilter : 1; /* ENTRY_POINT_LAYER::LOOPFILTER */ - } bits; - uint32_t value; - } entrypoint_fields; - uint8_t conditional_overlap_flag; /* ENTRY_POINT_LAYER::CONDOVER */ - uint8_t fast_uvmc_flag; /* ENTRY_POINT_LAYER::FASTUVMC */ - union { - struct { - uint32_t luma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPY_FLAG */ - uint32_t luma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPY */ - uint32_t chroma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPUV_FLAG */ - uint32_t chroma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPUV */ - } bits; - uint32_t value; - } range_mapping_fields; - - uint8_t b_picture_fraction; /* Index for PICTURE_LAYER::BFRACTION value in Table 40 (7.1.1.14) */ - uint8_t cbp_table; /* PICTURE_LAYER::CBPTAB/ICBPTAB */ - uint8_t mb_mode_table; /* PICTURE_LAYER::MBMODETAB */ - uint8_t range_reduction_frame;/* PICTURE_LAYER::RANGEREDFRM */ - uint8_t rounding_control; /* PICTURE_LAYER::RNDCTRL */ - uint8_t post_processing; /* PICTURE_LAYER::POSTPROC */ - uint8_t picture_resolution_index; /* PICTURE_LAYER::RESPIC */ - uint8_t luma_scale; /* PICTURE_LAYER::LUMSCALE */ - uint8_t luma_shift; /* PICTURE_LAYER::LUMSHIFT */ - - union { - struct { - uint32_t picture_type : 3; /* PICTURE_LAYER::PTYPE */ - uint32_t frame_coding_mode : 3; /* PICTURE_LAYER::FCM */ - uint32_t top_field_first : 1; /* PICTURE_LAYER::TFF */ - uint32_t is_first_field : 1; /* set to 1 if it is the first field */ - uint32_t intensity_compensation : 1; /* PICTURE_LAYER::INTCOMP */ - } bits; - uint32_t value; - } picture_fields; - union { - struct { - uint32_t mv_type_mb : 1; /* PICTURE::MVTYPEMB */ - uint32_t direct_mb : 1; /* PICTURE::DIRECTMB */ - uint32_t skip_mb : 1; /* PICTURE::SKIPMB */ - uint32_t field_tx : 1; /* PICTURE::FIELDTX */ - uint32_t forward_mb : 1; /* PICTURE::FORWARDMB */ - uint32_t ac_pred : 1; /* PICTURE::ACPRED */ - uint32_t overflags : 1; /* PICTURE::OVERFLAGS */ - } flags; - uint32_t value; - } raw_coding; - union { - struct { - uint32_t bp_mv_type_mb : 1; /* PICTURE::MVTYPEMB */ - uint32_t bp_direct_mb : 1; /* PICTURE::DIRECTMB */ - uint32_t bp_skip_mb : 1; /* PICTURE::SKIPMB */ - uint32_t bp_field_tx : 1; /* PICTURE::FIELDTX */ - uint32_t bp_forward_mb : 1; /* PICTURE::FORWARDMB */ - uint32_t bp_ac_pred : 1; /* PICTURE::ACPRED */ - uint32_t bp_overflags : 1; /* PICTURE::OVERFLAGS */ - } flags; - uint32_t value; - } bitplane_present; /* signal what bitplane is being passed via the bitplane buffer */ - union { - struct { - uint32_t reference_distance_flag : 1;/* PICTURE_LAYER::REFDIST_FLAG */ - uint32_t reference_distance : 5;/* PICTURE_LAYER::REFDIST */ - uint32_t num_reference_pictures: 1;/* PICTURE_LAYER::NUMREF */ - uint32_t reference_field_pic_indicator : 1;/* PICTURE_LAYER::REFFIELD */ - } bits; - uint32_t value; - } reference_fields; - union { - struct { - uint32_t mv_mode : 3; /* PICTURE_LAYER::MVMODE */ - uint32_t mv_mode2 : 3; /* PICTURE_LAYER::MVMODE2 */ - uint32_t mv_table : 3; /* PICTURE_LAYER::MVTAB/IMVTAB */ - uint32_t two_mv_block_pattern_table: 2; /* PICTURE_LAYER::2MVBPTAB */ - uint32_t four_mv_switch : 1; /* PICTURE_LAYER::4MVSWITCH */ - uint32_t four_mv_block_pattern_table : 2; /* PICTURE_LAYER::4MVBPTAB */ - uint32_t extended_mv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_MV */ - uint32_t extended_mv_range : 2; /* PICTURE_LAYER::MVRANGE */ - uint32_t extended_dmv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_DMV */ - uint32_t extended_dmv_range : 2; /* PICTURE_LAYER::DMVRANGE */ - } bits; - uint32_t value; - } mv_fields; - union { - struct { - uint32_t dquant : 2; /* ENTRY_POINT_LAYER::DQUANT */ - uint32_t quantizer : 2; /* ENTRY_POINT_LAYER::QUANTIZER */ - uint32_t half_qp : 1; /* PICTURE_LAYER::HALFQP */ - uint32_t pic_quantizer_scale : 5;/* PICTURE_LAYER::PQUANT */ - uint32_t pic_quantizer_type : 1;/* PICTURE_LAYER::PQUANTIZER */ - uint32_t dq_frame : 1; /* VOPDQUANT::DQUANTFRM */ - uint32_t dq_profile : 2; /* VOPDQUANT::DQPROFILE */ - uint32_t dq_sb_edge : 2; /* VOPDQUANT::DQSBEDGE */ - uint32_t dq_db_edge : 2; /* VOPDQUANT::DQDBEDGE */ - uint32_t dq_binary_level : 1; /* VOPDQUANT::DQBILEVEL */ - uint32_t alt_pic_quantizer : 5;/* VOPDQUANT::ALTPQUANT */ - } bits; - uint32_t value; - } pic_quantizer_fields; - union { - struct { - uint32_t variable_sized_transform_flag : 1;/* ENTRY_POINT_LAYER::VSTRANSFORM */ - uint32_t mb_level_transform_type_flag : 1;/* PICTURE_LAYER::TTMBF */ - uint32_t frame_level_transform_type : 2;/* PICTURE_LAYER::TTFRM */ - uint32_t transform_ac_codingset_idx1 : 2;/* PICTURE_LAYER::TRANSACFRM */ - uint32_t transform_ac_codingset_idx2 : 2;/* PICTURE_LAYER::TRANSACFRM2 */ - uint32_t intra_transform_dc_table : 1;/* PICTURE_LAYER::TRANSDCTAB */ - } bits; - uint32_t value; - } transform_fields; - - uint8_t luma_scale2; /* PICTURE_LAYER::LUMSCALE2 */ - uint8_t luma_shift2; /* PICTURE_LAYER::LUMSHIFT2 */ - uint8_t intensity_compensation_field; /* Index for PICTURE_LAYER::INTCOMPFIELD value in Table 109 (9.1.1.48) */ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 1]; -} VAPictureParameterBufferVC1; - -/** VC-1 Bitplane Buffer -There will be at most three bitplanes coded in any picture header. To send -the bitplane data more efficiently, each byte is divided in two nibbles, with -each nibble carrying three bitplanes for one macroblock. The following table -shows the bitplane data arrangement within each nibble based on the picture -type. - -Picture Type Bit3 Bit2 Bit1 Bit0 -I or BI OVERFLAGS ACPRED FIELDTX -P MYTYPEMB SKIPMB DIRECTMB -B FORWARDMB SKIPMB DIRECTMB - -Within each byte, the lower nibble is for the first MB and the upper nibble is -for the second MB. E.g. the lower nibble of the first byte in the bitplane -buffer is for Macroblock #1 and the upper nibble of the first byte is for -Macroblock #2 in the first row. -*/ - -/* VC-1 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferVC1 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset;/* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - uint32_t slice_vertical_position; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferVC1; - -/* VC-1 Slice Data Buffer */ -/* -This is simplely a buffer containing raw bit-stream bytes -*/ - -/**************************** - * H.264/AVC data structures - ****************************/ - -typedef struct _VAPictureH264 { - VASurfaceID picture_id; - uint32_t frame_idx; - uint32_t flags; - int32_t TopFieldOrderCnt; - int32_t BottomFieldOrderCnt; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureH264; -/* flags in VAPictureH264 could be OR of the following */ -#define VA_PICTURE_H264_INVALID 0x00000001 -#define VA_PICTURE_H264_TOP_FIELD 0x00000002 -#define VA_PICTURE_H264_BOTTOM_FIELD 0x00000004 -#define VA_PICTURE_H264_SHORT_TERM_REFERENCE 0x00000008 -#define VA_PICTURE_H264_LONG_TERM_REFERENCE 0x00000010 - -/** H.264 Picture Parameter Buffer */ -/* - * For each picture, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferH264 { - VAPictureH264 CurrPic; - VAPictureH264 ReferenceFrames[16]; /* in DPB */ - uint16_t picture_width_in_mbs_minus1; - uint16_t picture_height_in_mbs_minus1; - uint8_t bit_depth_luma_minus8; - uint8_t bit_depth_chroma_minus8; - uint8_t num_ref_frames; - union { - struct { - uint32_t chroma_format_idc : 2; - uint32_t residual_colour_transform_flag : 1; /* Renamed to separate_colour_plane_flag in newer standard versions. */ - uint32_t gaps_in_frame_num_value_allowed_flag : 1; - uint32_t frame_mbs_only_flag : 1; - uint32_t mb_adaptive_frame_field_flag : 1; - uint32_t direct_8x8_inference_flag : 1; - uint32_t MinLumaBiPredSize8x8 : 1; /* see A.3.3.2 */ - uint32_t log2_max_frame_num_minus4 : 4; - uint32_t pic_order_cnt_type : 2; - uint32_t log2_max_pic_order_cnt_lsb_minus4 : 4; - uint32_t delta_pic_order_always_zero_flag : 1; - } bits; - uint32_t value; - } seq_fields; - // FMO is not supported. - va_deprecated uint8_t num_slice_groups_minus1; - va_deprecated uint8_t slice_group_map_type; - va_deprecated uint16_t slice_group_change_rate_minus1; - int8_t pic_init_qp_minus26; - int8_t pic_init_qs_minus26; - int8_t chroma_qp_index_offset; - int8_t second_chroma_qp_index_offset; - union { - struct { - uint32_t entropy_coding_mode_flag : 1; - uint32_t weighted_pred_flag : 1; - uint32_t weighted_bipred_idc : 2; - uint32_t transform_8x8_mode_flag : 1; - uint32_t field_pic_flag : 1; - uint32_t constrained_intra_pred_flag : 1; - uint32_t pic_order_present_flag : 1; /* Renamed to bottom_field_pic_order_in_frame_present_flag in newer standard versions. */ - uint32_t deblocking_filter_control_present_flag : 1; - uint32_t redundant_pic_cnt_present_flag : 1; - uint32_t reference_pic_flag : 1; /* nal_ref_idc != 0 */ - } bits; - uint32_t value; - } pic_fields; - uint16_t frame_num; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAPictureParameterBufferH264; - -/** H.264 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferH264 { - /** \brief 4x4 scaling list, in raster scan order. */ - uint8_t ScalingList4x4[6][16]; - /** \brief 8x8 scaling list, in raster scan order. */ - uint8_t ScalingList8x8[2][64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferH264; - -/** H.264 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferH264 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - /** \brief Byte offset to the NAL Header Unit for this slice. */ - uint32_t slice_data_offset; - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - /** - * \brief Bit offset from NAL Header Unit to the begining of slice_data(). - * - * This bit offset is relative to and includes the NAL unit byte - * and represents the number of bits parsed in the slice_header() - * after the removal of any emulation prevention bytes in - * there. However, the slice data buffer passed to the hardware is - * the original bitstream, thus including any emulation prevention - * bytes. - */ - uint16_t slice_data_bit_offset; - uint16_t first_mb_in_slice; - uint8_t slice_type; - uint8_t direct_spatial_mv_pred_flag; - /** - * H264/AVC syntax element - * - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l0_default_active_minus1. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** - * H264/AVC syntax element - * - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l1_default_active_minus1. - */ - uint8_t num_ref_idx_l1_active_minus1; - uint8_t cabac_init_idc; - int8_t slice_qp_delta; - uint8_t disable_deblocking_filter_idc; - int8_t slice_alpha_c0_offset_div2; - int8_t slice_beta_offset_div2; - VAPictureH264 RefPicList0[32]; /* See 8.2.4.2 */ - VAPictureH264 RefPicList1[32]; /* See 8.2.4.2 */ - uint8_t luma_log2_weight_denom; - uint8_t chroma_log2_weight_denom; - uint8_t luma_weight_l0_flag; - int16_t luma_weight_l0[32]; - int16_t luma_offset_l0[32]; - uint8_t chroma_weight_l0_flag; - int16_t chroma_weight_l0[32][2]; - int16_t chroma_offset_l0[32][2]; - uint8_t luma_weight_l1_flag; - int16_t luma_weight_l1[32]; - int16_t luma_offset_l1[32]; - uint8_t chroma_weight_l1_flag; - int16_t chroma_weight_l1[32][2]; - int16_t chroma_offset_l1[32][2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferH264; - -/**************************** - * Common encode data structures - ****************************/ -typedef enum { - VAEncPictureTypeIntra = 0, - VAEncPictureTypePredictive = 1, - VAEncPictureTypeBidirectional = 2, -} VAEncPictureType; - -/** - * \brief Encode Slice Parameter Buffer. - * - * @deprecated - * This is a deprecated encode slice parameter buffer, All applications - * \c can use VAEncSliceParameterBufferXXX (XXX = MPEG2, HEVC, H264, JPEG) - */ -typedef struct _VAEncSliceParameterBuffer { - uint32_t start_row_number; /* starting MB row number for this slice */ - uint32_t slice_height; /* slice height measured in MB */ - union { - struct { - uint32_t is_intra : 1; - uint32_t disable_deblocking_filter_idc : 2; - uint32_t uses_long_term_ref : 1; - uint32_t is_long_term_ref : 1; - } bits; - uint32_t value; - } slice_flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSliceParameterBuffer; - - -/**************************** - * H.263 specific encode data structures - ****************************/ - -typedef struct _VAEncSequenceParameterBufferH263 { - uint32_t intra_period; - uint32_t bits_per_second; - uint32_t frame_rate; - uint32_t initial_qp; - uint32_t min_qp; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferH263; - -typedef struct _VAEncPictureParameterBufferH263 { - VASurfaceID reference_picture; - VASurfaceID reconstructed_picture; - VABufferID coded_buf; - uint16_t picture_width; - uint16_t picture_height; - VAEncPictureType picture_type; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferH263; - -/**************************** - * MPEG-4 specific encode data structures - ****************************/ - -typedef struct _VAEncSequenceParameterBufferMPEG4 { - uint8_t profile_and_level_indication; - uint32_t intra_period; - uint32_t video_object_layer_width; - uint32_t video_object_layer_height; - uint32_t vop_time_increment_resolution; - uint32_t fixed_vop_rate; - uint32_t fixed_vop_time_increment; - uint32_t bits_per_second; - uint32_t frame_rate; - uint32_t initial_qp; - uint32_t min_qp; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferMPEG4; - -typedef struct _VAEncPictureParameterBufferMPEG4 { - VASurfaceID reference_picture; - VASurfaceID reconstructed_picture; - VABufferID coded_buf; - uint16_t picture_width; - uint16_t picture_height; - uint32_t modulo_time_base; /* number of 1s */ - uint32_t vop_time_increment; - VAEncPictureType picture_type; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferMPEG4; - - - -/** Buffer functions */ - -/** - * Creates a buffer for "num_elements" elements of "size" bytes and - * initalize with "data". - * if "data" is null, then the contents of the buffer data store - * are undefined. - * Basically there are two ways to get buffer data to the server side. One is - * to call vaCreateBuffer() with a non-null "data", which results the data being - * copied to the data store on the server side. A different method that - * eliminates this copy is to pass null as "data" when calling vaCreateBuffer(), - * and then use vaMapBuffer() to map the data store from the server side to the - * client address space for access. - * The user must call vaDestroyBuffer() to destroy a buffer. - * Note: image buffers are created by the library, not the client. Please see - * vaCreateImage on how image buffers are managed. - */ -VAStatus vaCreateBuffer( - VADisplay dpy, - VAContextID context, - VABufferType type, /* in */ - unsigned int size, /* in */ - unsigned int num_elements, /* in */ - void *data, /* in */ - VABufferID *buf_id /* out */ -); - -/** - * Create a buffer for given width & height get unit_size, pitch, buf_id for 2D buffer - * for permb qp buffer, it will return unit_size for one MB or LCU and the pitch for alignments - * can call vaMapBuffer with this Buffer ID to get virtual address. - * e.g. AVC 1080P encode, 1920x1088, the size in MB is 120x68,but inside driver, - * maybe it should align with 256, and one byte present one Qp.so, call the function. - * then get unit_size = 1, pitch = 256. call vaMapBuffer to get the virtual address (pBuf). - * then read write the memory like 2D. the size is 256x68, application can only use 120x68 - * pBuf + 256 is the start of next line. - * different driver implementation maybe return different unit_size and pitch - */ -VAStatus vaCreateBuffer2( - VADisplay dpy, - VAContextID context, - VABufferType type, - unsigned int width, - unsigned int height, - unsigned int *unit_size, - unsigned int *pitch, - VABufferID *buf_id -); - -/** - * Convey to the server how many valid elements are in the buffer. - * e.g. if multiple slice parameters are being held in a single buffer, - * this will communicate to the server the number of slice parameters - * that are valid in the buffer. - */ -VAStatus vaBufferSetNumElements( - VADisplay dpy, - VABufferID buf_id, /* in */ - unsigned int num_elements /* in */ -); - - -/** - * device independent data structure for codedbuffer - */ - -/* - * FICTURE_AVE_QP(bit7-0): The average Qp value used during this frame - * LARGE_SLICE(bit8):At least one slice in the current frame was large - * enough for the encoder to attempt to limit its size. - * SLICE_OVERFLOW(bit9): At least one slice in the current frame has - * exceeded the maximum slice size specified. - * BITRATE_OVERFLOW(bit10): The peak bitrate was exceeded for this frame. - * BITRATE_HIGH(bit11): The frame size got within the safety margin of the maximum size (VCM only) - * AIR_MB_OVER_THRESHOLD: the number of MBs adapted to Intra MB - */ -#define VA_CODED_BUF_STATUS_PICTURE_AVE_QP_MASK 0xff -#define VA_CODED_BUF_STATUS_LARGE_SLICE_MASK 0x100 -#define VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK 0x200 -#define VA_CODED_BUF_STATUS_BITRATE_OVERFLOW 0x400 -#define VA_CODED_BUF_STATUS_BITRATE_HIGH 0x800 -/** - * \brief The frame has exceeded the maximum requested size. - * - * This flag indicates that the encoded frame size exceeds the value - * specified through a misc parameter buffer of type - * #VAEncMiscParameterTypeMaxFrameSize. - */ -#define VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW 0x1000 -/** - * \brief the bitstream is bad or corrupt. - */ -#define VA_CODED_BUF_STATUS_BAD_BITSTREAM 0x8000 -#define VA_CODED_BUF_STATUS_AIR_MB_OVER_THRESHOLD 0xff0000 - -/** - * \brief The coded buffer segment status contains frame encoding passes number - * - * This is the mask to get the number of encoding passes from the coded - * buffer segment status. - * NUMBER_PASS(bit24~bit27): the number for encoding passes executed for the coded frame. - * - */ -#define VA_CODED_BUF_STATUS_NUMBER_PASSES_MASK 0xf000000 - -/** - * \brief The coded buffer segment contains a single NAL unit. - * - * This flag indicates that the coded buffer segment contains a - * single NAL unit. This flag might be useful to the user for - * processing the coded buffer. - */ -#define VA_CODED_BUF_STATUS_SINGLE_NALU 0x10000000 - -/** - * \brief Coded buffer segment. - * - * #VACodedBufferSegment is an element of a linked list describing - * some information on the coded buffer. The coded buffer segment - * could contain either a single NAL unit, or more than one NAL unit. - * It is recommended (but not required) to return a single NAL unit - * in a coded buffer segment, and the implementation should set the - * VA_CODED_BUF_STATUS_SINGLE_NALU status flag if that is the case. - */ -typedef struct _VACodedBufferSegment { - /** - * \brief Size of the data buffer in this segment (in bytes). - */ - uint32_t size; - /** \brief Bit offset into the data buffer where the video data starts. */ - uint32_t bit_offset; - /** \brief Status set by the driver. See \c VA_CODED_BUF_STATUS_*. */ - uint32_t status; - /** \brief Reserved for future use. */ - uint32_t reserved; - /** \brief Pointer to the start of the data buffer. */ - void *buf; - /** - * \brief Pointer to the next #VACodedBufferSegment element, - * or \c NULL if there is none. - */ - void *next; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VACodedBufferSegment; - -/** - * Map data store of the buffer into the client's address space - * vaCreateBuffer() needs to be called with "data" set to NULL before - * calling vaMapBuffer() - * - * if buffer type is VAEncCodedBufferType, pbuf points to link-list of - * VACodedBufferSegment, and the list is terminated if "next" is NULL - */ -VAStatus vaMapBuffer( - VADisplay dpy, - VABufferID buf_id, /* in */ - void **pbuf /* out */ -); - -/** - * After client making changes to a mapped data store, it needs to - * "Unmap" it to let the server know that the data is ready to be - * consumed by the server - */ -VAStatus vaUnmapBuffer( - VADisplay dpy, - VABufferID buf_id /* in */ -); - -/** - * After this call, the buffer is deleted and this buffer_id is no longer valid - * - * A buffer can be re-used and sent to the server by another Begin/Render/End - * sequence if vaDestroyBuffer() is not called with this buffer. - * - * Note re-using a shared buffer (e.g. a slice data buffer) between the host and the - * hardware accelerator can result in performance dropping. - */ -VAStatus vaDestroyBuffer( - VADisplay dpy, - VABufferID buffer_id -); - -/** \brief VA buffer information */ -typedef struct { - /** \brief Buffer handle */ - uintptr_t handle; - /** \brief Buffer type (See \ref VABufferType). */ - uint32_t type; - /** - * \brief Buffer memory type (See \ref VASurfaceAttribMemoryType). - * - * On input to vaAcquireBufferHandle(), this field can serve as a hint - * to specify the set of memory types the caller is interested in. - * On successful return from vaAcquireBufferHandle(), the field is - * updated with the best matching memory type. - */ - uint32_t mem_type; - /** \brief Size of the underlying buffer. */ - size_t mem_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VABufferInfo; - -/** - * \brief Acquires buffer handle for external API usage - * - * Locks the VA buffer object \ref buf_id for external API usage like - * EGL or OpenCL (OCL). This function is a synchronization point. This - * means that any pending operation is guaranteed to be completed - * prior to returning from the function. - * - * If the referenced VA buffer object is the backing store of a VA - * surface, then this function acts as if vaSyncSurface() on the - * parent surface was called first. - * - * The \ref VABufferInfo argument shall be zero'ed on input. On - * successful output, the data structure is filled in with all the - * necessary buffer level implementation details like handle, type, - * memory type and memory size. - * - * Note: the external API implementation, or the application, can - * express the memory types it is interested in by filling in the \ref - * mem_type field accordingly. On successful output, the memory type - * that fits best the request and that was used is updated in the \ref - * VABufferInfo data structure. If none of the supplied memory types - * is supported, then a \ref VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE - * error is returned. - * - * The \ref VABufferInfo data is valid until vaReleaseBufferHandle() - * is called. Besides, no additional operation is allowed on any of - * the buffer parent object until vaReleaseBufferHandle() is called. - * e.g. decoding into a VA surface backed with the supplied VA buffer - * object \ref buf_id would fail with a \ref VA_STATUS_ERROR_SURFACE_BUSY - * error. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied - * - \ref VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation - * does not support exporting buffers of the specified type - * - \ref VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE: none of the requested - * memory types in \ref VABufferInfo.mem_type was supported - * - * @param[in] dpy the VA display - * @param[in] buf_id the VA buffer - * @param[in,out] buf_info the associated VA buffer information - * @return VA_STATUS_SUCCESS if successful - */ -VAStatus -vaAcquireBufferHandle(VADisplay dpy, VABufferID buf_id, VABufferInfo *buf_info); - -/** - * \brief Releases buffer after usage from external API - * - * Unlocks the VA buffer object \ref buf_id from external API usage like - * EGL or OpenCL (OCL). This function is a synchronization point. This - * means that any pending operation is guaranteed to be completed - * prior to returning from the function. - * - * The \ref VABufferInfo argument shall point to the original data - * structure that was obtained from vaAcquireBufferHandle(), unaltered. - * This is necessary so that the VA driver implementation could - * deallocate any resources that were needed. - * - * In any case, returning from this function invalidates any contents - * in \ref VABufferInfo. i.e. the underlyng buffer handle is no longer - * valid. Therefore, VA driver implementations are free to reset this - * data structure to safe defaults. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied - * - \ref VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation - * does not support exporting buffers of the specified type - * - * @param[in] dpy the VA display - * @param[in] buf_id the VA buffer - * @return VA_STATUS_SUCCESS if successful - */ -VAStatus -vaReleaseBufferHandle(VADisplay dpy, VABufferID buf_id); - -/** @name vaExportSurfaceHandle() flags - * - * @{ - */ -/** Export surface to be read by external API. */ -#define VA_EXPORT_SURFACE_READ_ONLY 0x0001 -/** Export surface to be written by external API. */ -#define VA_EXPORT_SURFACE_WRITE_ONLY 0x0002 -/** Export surface to be both read and written by external API. */ -#define VA_EXPORT_SURFACE_READ_WRITE 0x0003 -/** Export surface with separate layers. - * - * For example, NV12 surfaces should be exported as two separate - * planes for luma and chroma. - */ -#define VA_EXPORT_SURFACE_SEPARATE_LAYERS 0x0004 -/** Export surface with composed layers. - * - * For example, NV12 surfaces should be exported as a single NV12 - * composed object. - */ -#define VA_EXPORT_SURFACE_COMPOSED_LAYERS 0x0008 - -/** @} */ - -/** - * \brief Export a handle to a surface for use with an external API - * - * The exported handles are owned by the caller, and the caller is - * responsible for freeing them when no longer needed (e.g. by closing - * DRM PRIME file descriptors). - * - * This does not perform any synchronisation. If the contents of the - * surface will be read, vaSyncSurface() must be called before doing so. - * If the contents of the surface are written, then all operations must - * be completed externally before using the surface again by via VA-API - * functions. - * - * @param[in] dpy VA display. - * @param[in] surface_id Surface to export. - * @param[in] mem_type Memory type to export to. - * @param[in] flags Combination of flags to apply - * (VA_EXPORT_SURFACE_*). - * @param[out] descriptor Pointer to the descriptor structure to fill - * with the handle details. The type of this structure depends on - * the value of mem_type. - * - * @return Status code: - * - VA_STATUS_SUCCESS: Success. - * - VA_STATUS_ERROR_INVALID_DISPLAY: The display is not valid. - * - VA_STATUS_ERROR_UNIMPLEMENTED: The driver does not implement - * this interface. - * - VA_STATUS_ERROR_INVALID_SURFACE: The surface is not valid, or - * the surface is not exportable in the specified way. - * - VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE: The driver does not - * support exporting surfaces to the specified memory type. - */ -VAStatus vaExportSurfaceHandle(VADisplay dpy, - VASurfaceID surface_id, - uint32_t mem_type, uint32_t flags, - void *descriptor); - -/** - * Render (Video Decode/Encode/Processing) Pictures - * - * A picture represents either a frame or a field. - * - * The Begin/Render/End sequence sends the video decode/encode/processing buffers - * to the server - */ - -/** - * Get ready for a video pipeline - * - decode a picture to a target surface - * - encode a picture from a target surface - * - process a picture to a target surface - */ -VAStatus vaBeginPicture( - VADisplay dpy, - VAContextID context, - VASurfaceID render_target -); - -/** - * Send video decode, encode or processing buffers to the server. - */ -VAStatus vaRenderPicture( - VADisplay dpy, - VAContextID context, - VABufferID *buffers, - int num_buffers -); - -/** - * Make the end of rendering for a picture. - * The server should start processing all pending operations for this - * surface. This call is non-blocking. The client can start another - * Begin/Render/End sequence on a different render target. - * if VAContextID used in this function previously successfully passed - * vaMFAddContext call, real processing will be started during vaMFSubmit - */ -VAStatus vaEndPicture( - VADisplay dpy, - VAContextID context -); - -/** - * Make the end of rendering for a pictures in contexts passed with submission. - * The server should start processing all pending operations for contexts. - * All contexts passed should be associated through vaMFAddContext - * and call sequence Begin/Render/End performed. - * This call is non-blocking. The client can start another - * Begin/Render/End/vaMFSubmit sequence on a different render targets. - * Return values: - * VA_STATUS_SUCCESS - operation successful, context was removed. - * VA_STATUS_ERROR_INVALID_CONTEXT - mf_context or one of contexts are invalid - * due to mf_context not created or one of contexts not assotiated with mf_context - * through vaAddContext. - * VA_STATUS_ERROR_INVALID_PARAMETER - one of context has not submitted it's frame - * through vaBeginPicture vaRenderPicture vaEndPicture call sequence. - * dpy: display - * mf_context: Multi-Frame context - * contexts: list of contexts submitting their tasks for multi-frame operation. - * num_contexts: number of passed contexts. - */ -VAStatus vaMFSubmit( - VADisplay dpy, - VAMFContextID mf_context, - VAContextID * contexts, - int num_contexts -); - -/* - -Synchronization - -*/ - -/** - * This function blocks until all pending operations on the render target - * have been completed. Upon return it is safe to use the render target for a - * different picture. - */ -VAStatus vaSyncSurface( - VADisplay dpy, - VASurfaceID render_target -); - -/** \brief Indicates an infinite timeout. */ -#define VA_TIMEOUT_INFINITE 0xFFFFFFFFFFFFFFFF - -/** - * \brief Synchronizes pending operations associated with the supplied surface. - * - * This function blocks during specified timeout (in nanoseconds) until - * all pending operations on the render target have been completed. - * If timeout is zero, the function returns immediately. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_SURFACE: an invalid surface was supplied - * - \ref VA_STATUS_ERROR_TIMEDOUT: synchronization is still in progress, - * client should call the function again to complete synchronization - * - * @param[in] dpy the VA display - * @param[in] surface the surface for which synchronization is performed - * @param[in] timeout_ns the timeout in nanoseconds - * - */ -VAStatus vaSyncSurface2( - VADisplay dpy, - VASurfaceID surface, - uint64_t timeout_ns -); - -typedef enum { - VASurfaceRendering = 1, /* Rendering in progress */ - VASurfaceDisplaying = 2, /* Displaying in progress (not safe to render into it) */ - /* this status is useful if surface is used as the source */ - /* of an overlay */ - VASurfaceReady = 4, /* not being rendered or displayed */ - VASurfaceSkipped = 8 /* Indicate a skipped frame during encode */ -} VASurfaceStatus; - -/** - * Find out any pending ops on the render target - */ -VAStatus vaQuerySurfaceStatus( - VADisplay dpy, - VASurfaceID render_target, - VASurfaceStatus *status /* out */ -); - -typedef enum { - VADecodeSliceMissing = 0, - VADecodeMBError = 1, -} VADecodeErrorType; - -/** - * Client calls vaQuerySurfaceError with VA_STATUS_ERROR_DECODING_ERROR, server side returns - * an array of structure VASurfaceDecodeMBErrors, and the array is terminated by setting status=-1 -*/ -typedef struct _VASurfaceDecodeMBErrors { - int32_t status; /* 1 if hardware has returned detailed info below, -1 means this record is invalid */ - uint32_t start_mb; /* start mb address with errors */ - uint32_t end_mb; /* end mb address with errors */ - VADecodeErrorType decode_error_type; - uint32_t num_mb; /* number of mbs with errors */ - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW - 1]; -} VASurfaceDecodeMBErrors; - -/** - * After the application gets VA_STATUS_ERROR_DECODING_ERROR after calling vaSyncSurface(), - * it can call vaQuerySurfaceError to find out further details on the particular error. - * VA_STATUS_ERROR_DECODING_ERROR should be passed in as "error_status", - * upon the return, error_info will point to an array of _VASurfaceDecodeMBErrors structure, - * which is allocated and filled by libVA with detailed information on the missing or error macroblocks. - * The array is terminated if "status==-1" is detected. - */ -VAStatus vaQuerySurfaceError( - VADisplay dpy, - VASurfaceID surface, - VAStatus error_status, - void **error_info -); - -/** - * \brief Synchronizes pending operations associated with the supplied buffer. - * - * This function blocks during specified timeout (in nanoseconds) until - * all pending operations on the supplied buffer have been completed. - * If timeout is zero, the function returns immediately. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied - * - \ref VA_STATUS_ERROR_TIMEDOUT: synchronization is still in progress, - * client should call the function again to complete synchronization - * - * @param[in] dpy the VA display - * @param[in] buf_id the buffer for which synchronization is performed - * @param[in] timeout_ns the timeout in nanoseconds - * - */ -VAStatus vaSyncBuffer( - VADisplay dpy, - VABufferID buf_id, - uint64_t timeout_ns -); - -/** - * Notes about synchronization interfaces: - * vaSyncSurface: - * 1. Allows to synchronize output surface (i.e. from decoding or VP) - * 2. Allows to synchronize all bitstreams being encoded from the given input surface (1->N pipelines). - * - * vaSyncSurface2: - * 1. The same as vaSyncSurface but allows to specify a timeout - * - * vaSyncBuffer: - * 1. Allows to synchronize output buffer (e.g. bitstream from encoding). - * Comparing to vaSyncSurface this function synchronizes given bitstream only. - */ - -/** - * Images and Subpictures - * VAImage is used to either get the surface data to client memory, or - * to copy image data in client memory to a surface. - * Both images, subpictures and surfaces follow the same 2D coordinate system where origin - * is at the upper left corner with positive X to the right and positive Y down - */ -#define VA_FOURCC(ch0, ch1, ch2, ch3) \ - ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \ - ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigned char) (ch3) << 24 )) - -/* Pre-defined fourcc codes. */ - -/** NV12: two-plane 8-bit YUV 4:2:0. - * The first plane contains Y, the second plane contains U and V in pairs of bytes. - */ -#define VA_FOURCC_NV12 0x3231564E -/** NV21: two-plane 8-bit YUV 4:2:0. - * Same as NV12, but with U and V swapped. - */ -#define VA_FOURCC_NV21 0x3132564E - -/** AI44: packed 4-bit YA. - * - * The bottom half of each byte contains luma, the top half contains alpha. - */ -#define VA_FOURCC_AI44 0x34344149 - -/** RGBA: packed 8-bit RGBA. - * - * Four bytes per pixel: red, green, blue, alpha. - */ -#define VA_FOURCC_RGBA 0x41424752 -/** RGBX: packed 8-bit RGB. - * - * Four bytes per pixel: red, green, blue, unspecified. - */ -#define VA_FOURCC_RGBX 0x58424752 -/** BGRA: packed 8-bit RGBA. - * - * Four bytes per pixel: blue, green, red, alpha. - */ -#define VA_FOURCC_BGRA 0x41524742 -/** BGRX: packed 8-bit RGB. - * - * Four bytes per pixel: blue, green, red, unspecified. - */ -#define VA_FOURCC_BGRX 0x58524742 -/** ARGB: packed 8-bit RGBA. - * - * Four bytes per pixel: alpha, red, green, blue. - */ -#define VA_FOURCC_ARGB 0x42475241 -/** XRGB: packed 8-bit RGB. - * - * Four bytes per pixel: unspecified, red, green, blue. - */ -#define VA_FOURCC_XRGB 0x42475258 -/** ABGR: packed 8-bit RGBA. - * - * Four bytes per pixel: alpha, blue, green, red. - */ -#define VA_FOURCC_ABGR 0x52474241 -/** XBGR: packed 8-bit RGB. - * - * Four bytes per pixel: unspecified, blue, green, red. - */ -#define VA_FOURCC_XBGR 0x52474258 - -/** UYUV: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: U, Y, U, V. - */ -#define VA_FOURCC_UYVY 0x59565955 -/** YUY2: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: Y, U, Y, V. - */ -#define VA_FOURCC_YUY2 0x32595559 -/** AYUV: packed 8-bit YUVA 4:4:4. - * - * Four bytes per pixel: A, Y, U, V. - */ -#define VA_FOURCC_AYUV 0x56555941 -/** NV11: two-plane 8-bit YUV 4:1:1. - * - * The first plane contains Y, the second plane contains U and V in pairs of bytes. - */ -#define VA_FOURCC_NV11 0x3131564e -/** YV12: three-plane 8-bit YUV 4:2:0. - * - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_YV12 0x32315659 -/** P208: two-plane 8-bit YUV 4:2:2. - * - * The first plane contains Y, the second plane contains U and V in pairs of bytes. - */ -#define VA_FOURCC_P208 0x38303250 -/** I420: three-plane 8-bit YUV 4:2:0. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_I420 0x30323449 -/** YV24: three-plane 8-bit YUV 4:4:4. - * - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_YV24 0x34325659 -/** YV32: four-plane 8-bit YUVA 4:4:4 - * - * The four planes contain Y, V, U and A respectively. - */ -#define VA_FOURCC_YV32 0x32335659 -/** Y800: 8-bit greyscale. - */ -#define VA_FOURCC_Y800 0x30303859 -/** IMC3: three-plane 8-bit YUV 4:2:0. - * - * Equivalent to YV12, but with the additional constraint that the pitch of all three planes - * must be the same. - */ -#define VA_FOURCC_IMC3 0x33434D49 -/** 411P: three-plane 8-bit YUV 4:1:1. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_411P 0x50313134 -/** 411R: three-plane 8-bit YUV. - * - * The subsampling is the transpose of 4:1:1 - full chroma appears on every fourth line. - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_411R 0x52313134 -/** 422H: three-plane 8-bit YUV 4:2:2. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_422H 0x48323234 -/** 422V: three-plane 8-bit YUV 4:4:0. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_422V 0x56323234 -/** 444P: three-plane 8-bit YUV 4:4:4. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_444P 0x50343434 - -/** RGBP: three-plane 8-bit RGB. - * - * The three planes contain red, green and blue respectively. - */ -#define VA_FOURCC_RGBP 0x50424752 -/** BGRP: three-plane 8-bit RGB. - * - * The three planes contain blue, green and red respectively. - */ -#define VA_FOURCC_BGRP 0x50524742 -/** RG16: packed 5/6-bit RGB. - * - * Each pixel is a two-byte little-endian value. - * Red, green and blue are found in bits 15:11, 10:5, 4:0 respectively. - */ -#define VA_FOURCC_RGB565 0x36314752 -/** BG16: packed 5/6-bit RGB. - * - * Each pixel is a two-byte little-endian value. - * Blue, green and red are found in bits 15:11, 10:5, 4:0 respectively. - */ -#define VA_FOURCC_BGR565 0x36314742 - -/** Y210: packed 10-bit YUV 4:2:2. - * - * Eight bytes represent a pair of pixels. Each sample is a two-byte little-endian value, - * with the bottom six bits ignored. The samples are in the order Y, U, Y, V. - */ -#define VA_FOURCC_Y210 0x30313259 -/** Y212: packed 12-bit YUV 4:2:2. - * - * Eight bytes represent a pair of pixels. Each sample is a two-byte little-endian value. - * The samples are in the order Y, U, Y, V. - */ -#define VA_FOURCC_Y212 0x32313259 -/** Y216: packed 16-bit YUV 4:2:2. - * - * Eight bytes represent a pair of pixels. Each sample is a two-byte little-endian value. - * The samples are in the order Y, U, Y, V. - */ -#define VA_FOURCC_Y216 0x36313259 -/** Y410: packed 10-bit YUVA 4:4:4. - * - * Each pixel is a four-byte little-endian value. - * A, V, Y, U are found in bits 31:30, 29:20, 19:10, 9:0 respectively. - */ -#define VA_FOURCC_Y410 0x30313459 -/** Y412 packed 12-bit YUVA 4:4:4. - * - * Each pixel is a set of four samples, each of which is a two-byte little-endian value. - * The samples are in the order A, V, Y, U. - */ -#define VA_FOURCC_Y412 0x32313459 -/** Y416: packed 16-bit YUVA 4:4:4. - * - * Each pixel is a set of four samples, each of which is a two-byte little-endian value. - * The samples are in the order A, V, Y, U. - */ -#define VA_FOURCC_Y416 0x36313459 - -/** YV16: three-plane 8-bit YUV 4:2:2. - * - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_YV16 0x36315659 -/** P010: two-plane 10-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value with the bottom six bits ignored. - * The first plane contains Y, the second plane contains U and V in pairs of samples. - */ -#define VA_FOURCC_P010 0x30313050 -/** P012: two-plane 12-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value with the bottom four bits ignored. - * The first plane contains Y, the second plane contains U and V in pairs of samples. - */ -#define VA_FOURCC_P012 0x32313050 -/** P016: two-plane 16-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value. The first plane contains Y, the second - * plane contains U and V in pairs of samples. - */ -#define VA_FOURCC_P016 0x36313050 - -/** I010: three-plane 10-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value with the top six bits ignored. - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_I010 0x30313049 - -/** IYUV: three-plane 8-bit YUV 4:2:0. - * - * @deprecated Use I420 instead. - */ -#define VA_FOURCC_IYUV 0x56555949 -/** - * 10-bit Pixel RGB formats. - */ -#define VA_FOURCC_A2R10G10B10 0x30335241 /* VA_FOURCC('A','R','3','0') */ -/** - * 10-bit Pixel BGR formats. - */ -#define VA_FOURCC_A2B10G10R10 0x30334241 /* VA_FOURCC('A','B','3','0') */ -/** - * 10-bit Pixel RGB formats without alpha. - */ -#define VA_FOURCC_X2R10G10B10 0x30335258 /* VA_FOURCC('X','R','3','0') */ -/** - * 10-bit Pixel BGR formats without alpha. - */ -#define VA_FOURCC_X2B10G10R10 0x30334258 /* VA_FOURCC('X','B','3','0') */ - -/** Y8: 8-bit greyscale. - * - * Only a single sample, 8 bit Y plane for monochrome images - */ -#define VA_FOURCC_Y8 0x20203859 -/** Y16: 16-bit greyscale. - * - * Only a single sample, 16 bit Y plane for monochrome images - */ -#define VA_FOURCC_Y16 0x20363159 -/** VYUV: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: V, Y, U, V. - */ -#define VA_FOURCC_VYUY 0x59555956 -/** YVYU: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: Y, V, Y, U. - */ -#define VA_FOURCC_YVYU 0x55595659 -/** AGRB64: three-plane 16-bit ARGB 16:16:16:16 - * - * The four planes contain: alpha, red, green, blue respectively. - */ -#define VA_FOURCC_ARGB64 0x34475241 -/** ABGR64: three-plane 16-bit ABGR 16:16:16:16 - * - * The four planes contain: alpha, blue, green, red respectively. - */ -#define VA_FOURCC_ABGR64 0x34474241 -/** XYUV: packed 8-bit YUVX 4:4:4. - * - * Four bytes per pixel: X, Y, U, V. - */ -#define VA_FOURCC_XYUV 0x56555958 - -/* byte order */ -#define VA_LSB_FIRST 1 -#define VA_MSB_FIRST 2 - -typedef struct _VAImageFormat { - uint32_t fourcc; - uint32_t byte_order; /* VA_LSB_FIRST, VA_MSB_FIRST */ - uint32_t bits_per_pixel; - /* for RGB formats */ - uint32_t depth; /* significant bits per pixel */ - uint32_t red_mask; - uint32_t green_mask; - uint32_t blue_mask; - uint32_t alpha_mask; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAImageFormat; - -typedef VAGenericID VAImageID; - -typedef struct _VAImage { - VAImageID image_id; /* uniquely identify this image */ - VAImageFormat format; - VABufferID buf; /* image data buffer */ - /* - * Image data will be stored in a buffer of type VAImageBufferType to facilitate - * data store on the server side for optimal performance. The buffer will be - * created by the CreateImage function, and proper storage allocated based on the image - * size and format. This buffer is managed by the library implementation, and - * accessed by the client through the buffer Map/Unmap functions. - */ - uint16_t width; - uint16_t height; - uint32_t data_size; - uint32_t num_planes; /* can not be greater than 3 */ - /* - * An array indicating the scanline pitch in bytes for each plane. - * Each plane may have a different pitch. Maximum 3 planes for planar formats - */ - uint32_t pitches[3]; - /* - * An array indicating the byte offset from the beginning of the image data - * to the start of each plane. - */ - uint32_t offsets[3]; - - /* The following fields are only needed for paletted formats */ - int32_t num_palette_entries; /* set to zero for non-palette images */ - /* - * Each component is one byte and entry_bytes indicates the number of components in - * each entry (eg. 3 for YUV palette entries). set to zero for non-palette images - */ - int32_t entry_bytes; - /* - * An array of ascii characters describing the order of the components within the bytes. - * Only entry_bytes characters of the string are used. - */ - int8_t component_order[4]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAImage; - -/** Get maximum number of image formats supported by the implementation */ -int vaMaxNumImageFormats( - VADisplay dpy -); - -/** - * Query supported image formats - * The caller must provide a "format_list" array that can hold at - * least vaMaxNumImageFormats() entries. The actual number of formats - * returned in "format_list" is returned in "num_formats". - */ -VAStatus vaQueryImageFormats( - VADisplay dpy, - VAImageFormat *format_list, /* out */ - int *num_formats /* out */ -); - -/** - * Create a VAImage structure - * The width and height fields returned in the VAImage structure may get - * enlarged for some YUV formats. Upon return from this function, - * image->buf has been created and proper storage allocated by the library. - * The client can access the image through the Map/Unmap calls. - */ -VAStatus vaCreateImage( - VADisplay dpy, - VAImageFormat *format, - int width, - int height, - VAImage *image /* out */ -); - -/** - * Should call DestroyImage before destroying the surface it is bound to - */ -VAStatus vaDestroyImage( - VADisplay dpy, - VAImageID image -); - -VAStatus vaSetImagePalette( - VADisplay dpy, - VAImageID image, - /* - * pointer to an array holding the palette data. The size of the array is - * num_palette_entries * entry_bytes in size. The order of the components - * in the palette is described by the component_order in VAImage struct - */ - unsigned char *palette -); - -/** - * Retrive surface data into a VAImage - * Image must be in a format supported by the implementation - */ -VAStatus vaGetImage( - VADisplay dpy, - VASurfaceID surface, - int x, /* coordinates of the upper left source pixel */ - int y, - unsigned int width, /* width and height of the region */ - unsigned int height, - VAImageID image -); - -/** - * Copy data from a VAImage to a surface - * Image must be in a format supported by the implementation - * Returns a VA_STATUS_ERROR_SURFACE_BUSY if the surface - * shouldn't be rendered into when this is called - */ -VAStatus vaPutImage( - VADisplay dpy, - VASurfaceID surface, - VAImageID image, - int src_x, - int src_y, - unsigned int src_width, - unsigned int src_height, - int dest_x, - int dest_y, - unsigned int dest_width, - unsigned int dest_height -); - -/** - * Derive an VAImage from an existing surface. - * This interface will derive a VAImage and corresponding image buffer from - * an existing VA Surface. The image buffer can then be mapped/unmapped for - * direct CPU access. This operation is only possible on implementations with - * direct rendering capabilities and internal surface formats that can be - * represented with a VAImage. When the operation is not possible this interface - * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back - * to using vaCreateImage + vaPutImage to accomplish the same task in an - * indirect manner. - * - * Implementations should only return success when the resulting image buffer - * would be useable with vaMap/Unmap. - * - * When directly accessing a surface special care must be taken to insure - * proper synchronization with the graphics hardware. Clients should call - * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent - * rendering or currently being displayed by an overlay. - * - * Additionally nothing about the contents of a surface should be assumed - * following a vaPutSurface. Implementations are free to modify the surface for - * scaling or subpicture blending within a call to vaPutImage. - * - * Calls to vaPutImage or vaGetImage using the same surface from which the image - * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or - * vaGetImage with other surfaces is supported. - * - * An image created with vaDeriveImage should be freed with vaDestroyImage. The - * image and image buffer structures will be destroyed; however, the underlying - * surface will remain unchanged until freed with vaDestroySurfaces. - */ -VAStatus vaDeriveImage( - VADisplay dpy, - VASurfaceID surface, - VAImage *image /* out */ -); - -/** - * Subpictures - * Subpicture is a special type of image that can be blended - * with a surface during vaPutSurface(). Subpicture can be used to render - * DVD sub-titles or closed captioning text etc. - */ - -typedef VAGenericID VASubpictureID; - -/** Get maximum number of subpicture formats supported by the implementation */ -int vaMaxNumSubpictureFormats( - VADisplay dpy -); - -/** flags for subpictures */ -#define VA_SUBPICTURE_CHROMA_KEYING 0x0001 -#define VA_SUBPICTURE_GLOBAL_ALPHA 0x0002 -#define VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD 0x0004 -/** - * Query supported subpicture formats - * The caller must provide a "format_list" array that can hold at - * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag - * for each format to indicate additional capabilities for that format. The actual - * number of formats returned in "format_list" is returned in "num_formats". - * flags: returned value to indicate addtional capabilities - * VA_SUBPICTURE_CHROMA_KEYING - supports chroma-keying - * VA_SUBPICTURE_GLOBAL_ALPHA - supports global alpha - * VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD - supports unscaled screen relative subpictures for On Screen Display - */ - -VAStatus vaQuerySubpictureFormats( - VADisplay dpy, - VAImageFormat *format_list, /* out */ - unsigned int *flags, /* out */ - unsigned int *num_formats /* out */ -); - -/** - * Subpictures are created with an image associated. - */ -VAStatus vaCreateSubpicture( - VADisplay dpy, - VAImageID image, - VASubpictureID *subpicture /* out */ -); - -/** - * Destroy the subpicture before destroying the image it is assocated to - */ -VAStatus vaDestroySubpicture( - VADisplay dpy, - VASubpictureID subpicture -); - -/** - * Bind an image to the subpicture. This image will now be associated with - * the subpicture instead of the one at creation. - */ -VAStatus vaSetSubpictureImage( - VADisplay dpy, - VASubpictureID subpicture, - VAImageID image -); - -/** - * If chromakey is enabled, then the area where the source value falls within - * the chromakey [min, max] range is transparent - * The chromakey component format is the following: - * For RGB: [0:7] Red [8:15] Blue [16:23] Green - * For YUV: [0:7] V [8:15] U [16:23] Y - * The chromakey mask can be used to mask out certain components for chromakey - * comparision - */ -VAStatus vaSetSubpictureChromakey( - VADisplay dpy, - VASubpictureID subpicture, - unsigned int chromakey_min, - unsigned int chromakey_max, - unsigned int chromakey_mask -); - -/** - * Global alpha value is between 0 and 1. A value of 1 means fully opaque and - * a value of 0 means fully transparent. If per-pixel alpha is also specified then - * the overall alpha is per-pixel alpha multiplied by the global alpha - */ -VAStatus vaSetSubpictureGlobalAlpha( - VADisplay dpy, - VASubpictureID subpicture, - float global_alpha -); - -/** - * vaAssociateSubpicture associates the subpicture with target_surfaces. - * It defines the region mapping between the subpicture and the target - * surfaces through source and destination rectangles (with the same width and height). - * Both will be displayed at the next call to vaPutSurface. Additional - * associations before the call to vaPutSurface simply overrides the association. - */ -VAStatus vaAssociateSubpicture( - VADisplay dpy, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces, - int16_t src_x, /* upper left offset in subpicture */ - int16_t src_y, - uint16_t src_width, - uint16_t src_height, - int16_t dest_x, /* upper left offset in surface */ - int16_t dest_y, - uint16_t dest_width, - uint16_t dest_height, - /* - * whether to enable chroma-keying, global-alpha, or screen relative mode - * see VA_SUBPICTURE_XXX values - */ - uint32_t flags -); - -/** - * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces. - */ -VAStatus vaDeassociateSubpicture( - VADisplay dpy, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces -); - -/** - * Display attributes - * Display attributes are used to control things such as contrast, hue, saturation, - * brightness etc. in the rendering process. The application can query what - * attributes are supported by the driver, and then set the appropriate attributes - * before calling vaPutSurface() - * - * Display attributes can also be used to query/set platform or display adaptor (vaDisplay) - * related information. These attributes do not depend on vaConfig, and could not be used - * for vaPutSurface. Application can use vaQueryDisplayAttributes/vaGetDisplayAttributes - * at anytime after vaInitialize, but (for settable attributes) vaSetDisplayAttributes should be - * called after vaInitialize and before any other function call. - * - * To distinguish these two types of display attributes, display adaptor related attributes - * should be marked as "HW attribute" in the description. - */ - -/* PowerVR IEP Lite attributes */ -typedef enum { - VADISPLAYATTRIB_BLE_OFF = 0x00, - VADISPLAYATTRIB_BLE_LOW, - VADISPLAYATTRIB_BLE_MEDIUM, - VADISPLAYATTRIB_BLE_HIGH, - VADISPLAYATTRIB_BLE_NONE, -} VADisplayAttribBLEMode; - -/** attribute value for VADisplayAttribRotation */ -#define VA_ROTATION_NONE 0x00000000 -#define VA_ROTATION_90 0x00000001 -#define VA_ROTATION_180 0x00000002 -#define VA_ROTATION_270 0x00000003 -/**@}*/ - -/** - * @name Mirroring directions - * - * Those values could be used for VADisplayAttribMirror attribute or - * VAProcPipelineParameterBuffer::mirror_state. - - */ -/**@{*/ -/** \brief No Mirroring. */ -#define VA_MIRROR_NONE 0x00000000 -/** \brief Horizontal Mirroring. */ -#define VA_MIRROR_HORIZONTAL 0x00000001 -/** \brief Vertical Mirroring. */ -#define VA_MIRROR_VERTICAL 0x00000002 -/**@}*/ - -/** attribute value for VADisplayAttribOutOfLoopDeblock */ -#define VA_OOL_DEBLOCKING_FALSE 0x00000000 -#define VA_OOL_DEBLOCKING_TRUE 0x00000001 - -/** Render mode */ -#define VA_RENDER_MODE_UNDEFINED 0 -#define VA_RENDER_MODE_LOCAL_OVERLAY 1 -#define VA_RENDER_MODE_LOCAL_GPU 2 -#define VA_RENDER_MODE_EXTERNAL_OVERLAY 4 -#define VA_RENDER_MODE_EXTERNAL_GPU 8 - -/** Render device */ -#define VA_RENDER_DEVICE_UNDEFINED 0 -#define VA_RENDER_DEVICE_LOCAL 1 -#define VA_RENDER_DEVICE_EXTERNAL 2 - -/**\brief sub device info - * Sub-device is the concept basing on the "device" behind "vaDisplay". - * If a device could be divided to several sub devices, the task of - * decode/encode/vpp could be assigned on one sub-device. So, application - * could choose the sub device before any other operations. After that, - * all of the task execution/resource allocation will be dispatched to - * the sub device. If application does not choose the sub device, driver - * will assign one as default. - * - * If the value == VA_ATTRIB_NOT_SUPPORTED, it mean that the attribute - * is unsupport or UNKNOWN. - */ - -typedef union _VADisplayAttribValSubDevice { - struct { - /** \brief current sub device index, read - write */ - uint32_t current_sub_device : 4; - /** \brief sub devices count, read - only */ - uint32_t sub_device_count : 4; - /** \brief reserved bits for future, must be zero*/ - uint32_t reserved : 8; - /** \brief bit mask to indicate which sub_device is available, read only - * \code - * VADisplayAttribValSubDevice reg; - * VADisplayAttribute reg_attr; - * reg_attr.type = VADisplayAttribSubDevice; - * vaGetDisplayAttributes(dpy, ®_attr, 1); - * reg.value = reg_attr.value; - * - * for(int i = 0; i < reg.bits.sub_device_count; i ++ ){ - * if((1< -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_H_ */ diff --git a/prebuilts/x86/include/va/va_android.h b/prebuilts/x86/include/va/va_android.h deleted file mode 100644 index dfed8fd..0000000 --- a/prebuilts/x86/include/va/va_android.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef _VA_ANDROID_H_ -#define _VA_ANDROID_H_ - -#include - -/** \brief Android Gralloc buffer memory type. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_ANDROID_GRALLOC 0x00100000 -/** \brief Android ION buffer memory type. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_ANDROID_ION 0x00200000 - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Returns a suitable VADisplay for VA API - */ -VADisplay vaGetDisplay( - void *android_dpy -); - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_ANDROID_H_ */ diff --git a/prebuilts/x86/include/va/va_backend.h b/prebuilts/x86/include/va/va_backend.h deleted file mode 100644 index 149b6a3..0000000 --- a/prebuilts/x86/include/va/va_backend.h +++ /dev/null @@ -1,695 +0,0 @@ -/* - * Copyright (c) 2007 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * Video Decode Acceleration -Backend API - */ - -#ifndef _VA_BACKEND_H_ -#define _VA_BACKEND_H_ - -#include - -typedef struct VADriverContext *VADriverContextP; -typedef struct VADisplayContext *VADisplayContextP; - -/** \brief VA display types. */ -enum { - /** \brief Mask to major identifier for VA display type. */ - VA_DISPLAY_MAJOR_MASK = 0xf0, - - /** \brief VA/X11 API is used, through vaGetDisplay() entry-point. */ - VA_DISPLAY_X11 = 0x10, - /** \brief VA/GLX API is used, through vaGetDisplayGLX() entry-point. */ - VA_DISPLAY_GLX = (VA_DISPLAY_X11 | (1 << 0)), - /** \brief VA/Android API is used, through vaGetDisplay() entry-point. */ - VA_DISPLAY_ANDROID = 0x20, - /** \brief VA/DRM API is used, through vaGetDisplayDRM() entry-point. */ - VA_DISPLAY_DRM = 0x30, - /** \brief VA/DRM API is used, with a render-node device path */ - VA_DISPLAY_DRM_RENDERNODES = (VA_DISPLAY_DRM | (1 << 0)), - /** \brief VA/Wayland API is used, through vaGetDisplayWl() entry-point. */ - VA_DISPLAY_WAYLAND = 0x40, -}; - -struct VADriverVTable { - VAStatus(*vaTerminate)(VADriverContextP ctx); - - VAStatus(*vaQueryConfigProfiles)( - VADriverContextP ctx, - VAProfile *profile_list, /* out */ - int *num_profiles /* out */ - ); - - VAStatus(*vaQueryConfigEntrypoints)( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint *entrypoint_list, /* out */ - int *num_entrypoints /* out */ - ); - - VAStatus(*vaGetConfigAttributes)( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, /* in/out */ - int num_attribs - ); - - VAStatus(*vaCreateConfig)( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, - int num_attribs, - VAConfigID *config_id /* out */ - ); - - VAStatus(*vaDestroyConfig)( - VADriverContextP ctx, - VAConfigID config_id - ); - - VAStatus(*vaQueryConfigAttributes)( - VADriverContextP ctx, - VAConfigID config_id, - VAProfile *profile, /* out */ - VAEntrypoint *entrypoint, /* out */ - VAConfigAttrib *attrib_list, /* out */ - int *num_attribs /* out */ - ); - - VAStatus(*vaCreateSurfaces)( - VADriverContextP ctx, - int width, - int height, - int format, - int num_surfaces, - VASurfaceID *surfaces /* out */ - ); - - VAStatus(*vaDestroySurfaces)( - VADriverContextP ctx, - VASurfaceID *surface_list, - int num_surfaces - ); - - VAStatus(*vaCreateContext)( - VADriverContextP ctx, - VAConfigID config_id, - int picture_width, - int picture_height, - int flag, - VASurfaceID *render_targets, - int num_render_targets, - VAContextID *context /* out */ - ); - - VAStatus(*vaDestroyContext)( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus(*vaCreateBuffer)( - VADriverContextP ctx, - VAContextID context, /* in */ - VABufferType type, /* in */ - unsigned int size, /* in */ - unsigned int num_elements, /* in */ - void *data, /* in */ - VABufferID *buf_id - ); - - VAStatus(*vaBufferSetNumElements)( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - unsigned int num_elements /* in */ - ); - - VAStatus(*vaMapBuffer)( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - void **pbuf /* out */ - ); - - VAStatus(*vaUnmapBuffer)( - VADriverContextP ctx, - VABufferID buf_id /* in */ - ); - - VAStatus(*vaDestroyBuffer)( - VADriverContextP ctx, - VABufferID buffer_id - ); - - VAStatus(*vaBeginPicture)( - VADriverContextP ctx, - VAContextID context, - VASurfaceID render_target - ); - - VAStatus(*vaRenderPicture)( - VADriverContextP ctx, - VAContextID context, - VABufferID *buffers, - int num_buffers - ); - - VAStatus(*vaEndPicture)( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus(*vaSyncSurface)( - VADriverContextP ctx, - VASurfaceID render_target - ); - - VAStatus(*vaQuerySurfaceStatus)( - VADriverContextP ctx, - VASurfaceID render_target, - VASurfaceStatus *status /* out */ - ); - - VAStatus(*vaQuerySurfaceError)( - VADriverContextP ctx, - VASurfaceID render_target, - VAStatus error_status, - void **error_info /*out*/ - ); - - VAStatus(*vaPutSurface)( - VADriverContextP ctx, - VASurfaceID surface, - void* draw, /* Drawable of window system */ - short srcx, - short srcy, - unsigned short srcw, - unsigned short srch, - short destx, - short desty, - unsigned short destw, - unsigned short desth, - VARectangle *cliprects, /* client supplied clip list */ - unsigned int number_cliprects, /* number of clip rects in the clip list */ - unsigned int flags /* de-interlacing flags */ - ); - - VAStatus(*vaQueryImageFormats)( - VADriverContextP ctx, - VAImageFormat *format_list, /* out */ - int *num_formats /* out */ - ); - - VAStatus(*vaCreateImage)( - VADriverContextP ctx, - VAImageFormat *format, - int width, - int height, - VAImage *image /* out */ - ); - - VAStatus(*vaDeriveImage)( - VADriverContextP ctx, - VASurfaceID surface, - VAImage *image /* out */ - ); - - VAStatus(*vaDestroyImage)( - VADriverContextP ctx, - VAImageID image - ); - - VAStatus(*vaSetImagePalette)( - VADriverContextP ctx, - VAImageID image, - /* - * pointer to an array holding the palette data. The size of the array is - * num_palette_entries * entry_bytes in size. The order of the components - * in the palette is described by the component_order in VAImage struct - */ - unsigned char *palette - ); - - VAStatus(*vaGetImage)( - VADriverContextP ctx, - VASurfaceID surface, - int x, /* coordinates of the upper left source pixel */ - int y, - unsigned int width, /* width and height of the region */ - unsigned int height, - VAImageID image - ); - - VAStatus(*vaPutImage)( - VADriverContextP ctx, - VASurfaceID surface, - VAImageID image, - int src_x, - int src_y, - unsigned int src_width, - unsigned int src_height, - int dest_x, - int dest_y, - unsigned int dest_width, - unsigned int dest_height - ); - - VAStatus(*vaQuerySubpictureFormats)( - VADriverContextP ctx, - VAImageFormat *format_list, /* out */ - unsigned int *flags, /* out */ - unsigned int *num_formats /* out */ - ); - - VAStatus(*vaCreateSubpicture)( - VADriverContextP ctx, - VAImageID image, - VASubpictureID *subpicture /* out */ - ); - - VAStatus(*vaDestroySubpicture)( - VADriverContextP ctx, - VASubpictureID subpicture - ); - - VAStatus(*vaSetSubpictureImage)( - VADriverContextP ctx, - VASubpictureID subpicture, - VAImageID image - ); - - VAStatus(*vaSetSubpictureChromakey)( - VADriverContextP ctx, - VASubpictureID subpicture, - unsigned int chromakey_min, - unsigned int chromakey_max, - unsigned int chromakey_mask - ); - - VAStatus(*vaSetSubpictureGlobalAlpha)( - VADriverContextP ctx, - VASubpictureID subpicture, - float global_alpha - ); - - VAStatus(*vaAssociateSubpicture)( - VADriverContextP ctx, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces, - short src_x, /* upper left offset in subpicture */ - short src_y, - unsigned short src_width, - unsigned short src_height, - short dest_x, /* upper left offset in surface */ - short dest_y, - unsigned short dest_width, - unsigned short dest_height, - /* - * whether to enable chroma-keying or global-alpha - * see VA_SUBPICTURE_XXX values - */ - unsigned int flags - ); - - VAStatus(*vaDeassociateSubpicture)( - VADriverContextP ctx, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces - ); - - VAStatus(*vaQueryDisplayAttributes)( - VADriverContextP ctx, - VADisplayAttribute *attr_list, /* out */ - int *num_attributes /* out */ - ); - - VAStatus(*vaGetDisplayAttributes)( - VADriverContextP ctx, - VADisplayAttribute *attr_list, /* in/out */ - int num_attributes - ); - - VAStatus(*vaSetDisplayAttributes)( - VADriverContextP ctx, - VADisplayAttribute *attr_list, - int num_attributes - ); - - /* used by va trace */ - VAStatus(*vaBufferInfo)( - VADriverContextP ctx, /* in */ - VABufferID buf_id, /* in */ - VABufferType *type, /* out */ - unsigned int *size, /* out */ - unsigned int *num_elements /* out */ - ); - - /* lock/unlock surface for external access */ - VAStatus(*vaLockSurface)( - VADriverContextP ctx, - VASurfaceID surface, - unsigned int *fourcc, /* out for follow argument */ - unsigned int *luma_stride, - unsigned int *chroma_u_stride, - unsigned int *chroma_v_stride, - unsigned int *luma_offset, - unsigned int *chroma_u_offset, - unsigned int *chroma_v_offset, - unsigned int *buffer_name, /* if it is not NULL, assign the low lever - * surface buffer name - */ - void **buffer /* if it is not NULL, map the surface buffer for - * CPU access - */ - ); - - VAStatus(*vaUnlockSurface)( - VADriverContextP ctx, - VASurfaceID surface - ); - - /* DEPRECATED */ - VAStatus - (*vaGetSurfaceAttributes)( - VADriverContextP dpy, - VAConfigID config, - VASurfaceAttrib *attrib_list, - unsigned int num_attribs - ); - - VAStatus - (*vaCreateSurfaces2)( - VADriverContextP ctx, - unsigned int format, - unsigned int width, - unsigned int height, - VASurfaceID *surfaces, - unsigned int num_surfaces, - VASurfaceAttrib *attrib_list, - unsigned int num_attribs - ); - - VAStatus - (*vaQuerySurfaceAttributes)( - VADriverContextP dpy, - VAConfigID config, - VASurfaceAttrib *attrib_list, - unsigned int *num_attribs - ); - - VAStatus - (*vaAcquireBufferHandle)( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - VABufferInfo * buf_info /* in/out */ - ); - - VAStatus - (*vaReleaseBufferHandle)( - VADriverContextP ctx, - VABufferID buf_id /* in */ - ); - - VAStatus(*vaCreateMFContext)( - VADriverContextP ctx, - VAMFContextID *mfe_context /* out */ - ); - - VAStatus(*vaMFAddContext)( - VADriverContextP ctx, - VAMFContextID mf_context, - VAContextID context - ); - - VAStatus(*vaMFReleaseContext)( - VADriverContextP ctx, - VAMFContextID mf_context, - VAContextID context - ); - - VAStatus(*vaMFSubmit)( - VADriverContextP ctx, - VAMFContextID mf_context, - VAContextID *contexts, - int num_contexts - ); - VAStatus(*vaCreateBuffer2)( - VADriverContextP ctx, - VAContextID context, /* in */ - VABufferType type, /* in */ - unsigned int width, /* in */ - unsigned int height, /* in */ - unsigned int *unit_size, /* out */ - unsigned int *pitch, /* out */ - VABufferID *buf_id /* out */ - ); - - VAStatus(*vaQueryProcessingRate)( - VADriverContextP ctx, /* in */ - VAConfigID config_id, /* in */ - VAProcessingRateParameter *proc_buf,/* in */ - unsigned int *processing_rate /* out */ - ); - - VAStatus - (*vaExportSurfaceHandle)( - VADriverContextP ctx, - VASurfaceID surface_id, /* in */ - uint32_t mem_type, /* in */ - uint32_t flags, /* in */ - void *descriptor /* out */ - ); - VAStatus(*vaSyncSurface2)( - VADriverContextP ctx, - VASurfaceID surface, - uint64_t timeout_ns - ); - - VAStatus(*vaSyncBuffer)( - VADriverContextP ctx, - VABufferID buf_id, - uint64_t timeout_ns - ); - - VAStatus - (*vaCopy)( - VADriverContextP ctx, /* in */ - VACopyObject *dst, /* in */ - VACopyObject *src, /* in */ - VACopyOption option /* in */ - ); - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[54]; -}; - -struct VADriverContext { - void *pDriverData; - - /** - * The core VA implementation hooks. - * - * This structure is allocated from libva with calloc(). - */ - struct VADriverVTable *vtable; - - /** - * The VA/GLX implementation hooks. - * - * This structure is intended for drivers that implement the - * VA/GLX API. The driver implementation is responsible for the - * allocation and deallocation of this structure. - */ - struct VADriverVTableGLX *vtable_glx; - - /** - * The VA/EGL implementation hooks. - * - * This structure is intended for drivers that implement the - * VA/EGL API. The driver implementation is responsible for the - * allocation and deallocation of this structure. - */ - struct VADriverVTableEGL *vtable_egl; - - /** - * The third-party/private implementation hooks. - * - * This structure is intended for drivers that implement the - * private API. The driver implementation is responsible for the - * allocation and deallocation of this structure. - */ - void *vtable_tpi; - - void *native_dpy; - int x11_screen; - int version_major; - int version_minor; - int max_profiles; - int max_entrypoints; - int max_attributes; - int max_image_formats; - int max_subpic_formats; - int max_display_attributes; - const char *str_vendor; - - void *handle; /* dlopen handle */ - - /** - * \brief DRM state. - * - * This field holds driver specific data for DRM-based - * drivers. This structure is allocated from libva with - * calloc(). Do not deallocate from within VA driver - * implementations. - * - * All structures shall be derived from struct drm_state. So, for - * instance, this field holds a dri_state structure for VA/X11 - * drivers that use the DRM protocol. - */ - void *drm_state; - - void *glx; /* opaque for GLX code */ - - /** \brief VA display type. */ - unsigned long display_type; - - /** - * The VA/Wayland implementation hooks. - * - * This structure is intended for drivers that implement the - * VA/Wayland API. libVA allocates this structure with calloc() - * and owns the resulting memory. - */ - struct VADriverVTableWayland *vtable_wayland; - - /** - * \brief The VA/VPP implementation hooks. - * - * This structure is allocated from libva with calloc(). - */ - struct VADriverVTableVPP *vtable_vpp; - - char *override_driver_name; - - void *pDisplayContext; - - /** - * Error callback. - * - * This is set by libva when the driver is opened, and will not be - * changed thereafter. The driver can call it with an error message, - * which will be propagated to the API user through their error - * callbacks, or sent to a default output if no callback is available. - * - * It is expected that end users will always be able to see these - * messages, so it should be called only for serious errors. For - * example, hardware problems or fatal configuration errors. - * - * @param pDriverContext Pointer to the driver context structure - * being used by the current driver. - * @param message Message to send to the API user. This must be a - * null-terminated string. - */ - void (*error_callback)(VADriverContextP pDriverContext, - const char *message); - /** - * Info callback. - * - * This has the same behaviour as the error callback, but has its - * own set of callbacks to the API user. - * - * It should be used for informational messages which may be useful - * for an application programmer or for debugging. For example, minor - * configuration errors, or information about the reason when another - * API call generates an error return. It is not expected that end - * users will see these messages. - * - * @param pDriverContext Pointer to the driver context structure - * being used by the current driver. - * @param message Message to send to the API user. This must be a - * null-terminated string. - */ - void (*info_callback)(VADriverContextP pDriverContext, - const char *message); - - /** - * \brief The VA/Protected implementation hooks. - * - * This structure is allocated from libva with calloc(). - */ - struct VADriverVTableProt *vtable_prot; - - unsigned long reserved[37]; /* reserve for future add-ins, decrease the subscript accordingly */ -}; - -#define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */ -struct VADisplayContext { - int vadpy_magic; - - VADisplayContextP pNext; - VADriverContextP pDriverContext; - - int (*vaIsValid)( - VADisplayContextP ctx - ); - - void (*vaDestroy)( - VADisplayContextP ctx - ); - - VAStatus(*vaGetDriverName)( - VADisplayContextP ctx, - char **driver_name - ); - - void *opaque; /* opaque for display extensions (e.g. GLX) */ - void *vatrace; /* opaque for VA trace context */ - void *vafool; /* opaque for VA fool context */ - - VAMessageCallback error_callback; - void *error_callback_user_context; - VAMessageCallback info_callback; - void *info_callback_user_context; - VAStatus(*vaGetNumCandidates)( - VADisplayContextP ctx, - int * num_candidates - ); - - VAStatus(*vaGetDriverNameByIndex)( - VADisplayContextP ctx, - char **driver_name, - int candidate_index - ); - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[30]; -}; - -typedef VAStatus(*VADriverInit)( - VADriverContextP driver_context -); - -#endif /* _VA_BACKEND_H_ */ diff --git a/prebuilts/x86/include/va/va_backend_prot.h b/prebuilts/x86/include/va/va_backend_prot.h deleted file mode 100644 index 93447e1..0000000 --- a/prebuilts/x86/include/va/va_backend_prot.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2020 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_BACKEND_PROT_H -#define VA_BACKEND_PROT_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \brief VTable version for VA/PROTECTION hooks. */ -#define VA_DRIVER_VTABLE_PROT_VERSION 1 - -struct VADriverVTableProt { - unsigned int version; - - VAStatus - (*vaCreateProtectedSession)( - VADriverContextP ctx, - VAConfigID config_id, - VAProtectedSessionID *protected_session - ); - - VAStatus - (*vaDestroyProtectedSession)( - VADriverContextP ctx, - VAProtectedSessionID protected_session - ); - - VAStatus - (*vaAttachProtectedSession)( - VADriverContextP ctx, - VAContextID context, - VAProtectedSessionID protected_session - ); - - VAStatus - (*vaDetachProtectedSession)( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus - (*vaProtectedSessionExecute)( - VADriverContextP ctx, - VAProtectedSessionID protected_session, - VABufferID buf_id - ); - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[VA_PADDING_MEDIUM]; -}; - -#ifdef __cplusplus -} -#endif - -#endif /* VA_BACKEND_PROT_H */ diff --git a/prebuilts/x86/include/va/va_backend_vpp.h b/prebuilts/x86/include/va/va_backend_vpp.h deleted file mode 100644 index 8ed10d5..0000000 --- a/prebuilts/x86/include/va/va_backend_vpp.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_BACKEND_VPP_H -#define VA_BACKEND_VPP_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \brief VTable version for VA/VPP hooks. */ -#define VA_DRIVER_VTABLE_VPP_VERSION 1 - -struct VADriverVTableVPP { - unsigned int version; - - VAStatus - (*vaQueryVideoProcFilters)( - VADriverContextP ctx, - VAContextID context, - VAProcFilterType *filters, - unsigned int *num_filters - ); - - VAStatus - (*vaQueryVideoProcFilterCaps)( - VADriverContextP ctx, - VAContextID context, - VAProcFilterType type, - void *filter_caps, - unsigned int *num_filter_caps - ); - - VAStatus - (*vaQueryVideoProcPipelineCaps)( - VADriverContextP ctx, - VAContextID context, - VABufferID *filters, - unsigned int num_filters, - VAProcPipelineCaps *pipeline_caps - ); - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[16]; -}; - -#ifdef __cplusplus -} -#endif - -#endif /* VA_BACKEND_VPP_H */ diff --git a/prebuilts/x86/include/va/va_compat.h b/prebuilts/x86/include/va/va_compat.h deleted file mode 100644 index 41a3f73..0000000 --- a/prebuilts/x86/include/va/va_compat.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_compat.h - * \brief The Compatibility API - * - * This file contains the \ref api_compat "Compatibility API". - */ - -#ifndef VA_COMPAT_H -#define VA_COMPAT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_compat Compatibility API - * - * The Compatibility API allows older programs that are not ported to - * the current API to still build and run correctly. In particular, - * this exposes older API to allow for backwards source compatibility. - * - * @{ - */ - -/** - * Makes a string literal out of the macro argument - */ -#define VA_CPP_HELPER_STRINGIFY(x) \ - VA_CPP_HELPER_STRINGIFY_(x) -#define VA_CPP_HELPER_STRINGIFY_(x) \ - #x - -/** - * Concatenates two macro arguments at preprocessing time. - */ -#define VA_CPP_HELPER_CONCAT(a, b) \ - VA_CPP_HELPER_CONCAT_(a, b) -#define VA_CPP_HELPER_CONCAT_(a, b) \ - a ## b - -/** - * Generates the number of macro arguments at preprocessing time. - * - * - * Note: this doesn't work for macros with no arguments - */ -#define VA_CPP_HELPER_N_ARGS(...) \ - VA_CPP_HELPER_N_ARGS_(__VA_ARGS__, VA_CPP_HELPER_N_ARGS_LIST_REV()) -#define VA_CPP_HELPER_N_ARGS_(...) \ - VA_CPP_HELPER_N_ARGS_LIST(__VA_ARGS__) -#define VA_CPP_HELPER_N_ARGS_LIST(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a12, a13, a14, a15, a16, N, ...) N -#define VA_CPP_HELPER_N_ARGS_LIST_REV() \ - 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 - -/** - * Generates a versioned function alias. - * - * VA_CPP_HELPER_ALIAS(vaSomeFunction, 0,32,0) will generate - * .symber vaSomeFunction_0_32_0, vaSomeFunction@VA_API_0.32.0 - */ -#define VA_CPP_HELPER_ALIAS(func, major, minor, micro) \ - VA_CPP_HELPER_ALIAS_(func, major, minor, micro, "@") -#define VA_CPP_HELPER_ALIAS_DEFAULT(func, major, minor, micro) \ - VA_CPP_HELPER_ALIAS_(func, major, minor, micro, "@@") -#define VA_CPP_HELPER_ALIAS_(func, major, minor, micro, binding) \ - asm(".symver " #func "_" #major "_" #minor "_" #micro ", " \ - #func binding "VA_API_" #major "." #minor "." #micro) - -/* vaCreateSurfaces() */ - -#ifndef VA_COMPAT_DISABLED -#define vaCreateSurfaces(dpy, ...) \ - VA_CPP_HELPER_CONCAT(vaCreateSurfaces, \ - VA_CPP_HELPER_N_ARGS(dpy, __VA_ARGS__)) \ - (dpy, __VA_ARGS__) -#endif - -#define vaCreateSurfaces6(dpy, width, height, format, num_surfaces, surfaces) \ - (vaCreateSurfaces)(dpy, format, width, height, surfaces, num_surfaces, \ - NULL, 0) - -#define vaCreateSurfaces8(dpy, format, width, height, surfaces, num_surfaces, attribs, num_attribs) \ - (vaCreateSurfaces)(dpy, format, width, height, surfaces, num_surfaces, \ - attribs, num_attribs) - -/*@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_COMPAT_H */ diff --git a/prebuilts/x86/include/va/va_dec_av1.h b/prebuilts/x86/include/va/va_dec_av1.h deleted file mode 100644 index c195538..0000000 --- a/prebuilts/x86/include/va/va_dec_av1.h +++ /dev/null @@ -1,695 +0,0 @@ -/* - * Copyright (c) 2019 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_av1.h - * \brief The AV1 decoding API - * - * This file contains the \ref api_dec_av1 "AV1 decoding API". - */ - -#ifndef VA_DEC_AV1_H -#define VA_DEC_AV1_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_dec_av1 AV1 decoding API - * - * This AV1 decoding API supports 8-bit/10bit 420 format only. - * - * @{ - */ - -/** Attribute value for VAConfigAttribDecAV1Features. - * - * This attribute decribes the supported features of a AV1 - * decoder configuration. - * - */ -typedef union VAConfigAttribValDecAV1Features { - struct { - /** large scale tile - * - * This conveys whether AV1 large scale tile is supported by HW. - * 0 - unsupported, 1 - supported. - */ - uint32_t lst_support : 2; - /* Reserved for future use. */ - uint32_t reserved : 30; - } bits; - uint32_t value; -} VAConfigAttribValDecAV1Features; - -/** - * \brief AV1 Decoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * App should send a surface with this data structure down to VAAPI once - * per frame. - * - */ - -/** \brief Segmentation Information - */ -typedef struct _VASegmentationStructAV1 { - union { - struct { - /** Indicates whether segmentation map related syntax elements - * are present or not for current frame. If equal to 0, - * the segmentation map related syntax elements are - * not present for the current frame and the control flags of - * segmentation map related tables feature_data[][], and - * feature_mask[] are not valid and shall be ignored by accelerator. - */ - uint32_t enabled : 1; - /** Value 1 indicates that the segmentation map are updated - * during the decoding of this frame. - * Value 0 means that the segmentation map from the previous - * frame is used. - */ - uint32_t update_map : 1; - /** Value 1 indicates that the updates to the segmentation map - * are coded relative to the existing segmentation map. - * Value 0 indicates that the new segmentation map is coded - * without reference to the existing segmentation map. - */ - uint32_t temporal_update : 1; - /** Value 1 indicates that new parameters are about to be - * specified for each segment. - * Value 0 indicates that the segmentation parameters - * should keep their existing values. - */ - uint32_t update_data : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 28; - } bits; - uint32_t value; - } segment_info_fields; - - /** \brief Segmentation parameters for current frame. - * feature_data[segment_id][feature_id] - * where segment_id has value range [0..7] indicating the segment id. - * and feature_id is defined as - typedef enum { - SEG_LVL_ALT_Q, // Use alternate Quantizer .... - SEG_LVL_ALT_LF_Y_V, // Use alternate loop filter value on y plane vertical - SEG_LVL_ALT_LF_Y_H, // Use alternate loop filter value on y plane horizontal - SEG_LVL_ALT_LF_U, // Use alternate loop filter value on u plane - SEG_LVL_ALT_LF_V, // Use alternate loop filter value on v plane - SEG_LVL_REF_FRAME, // Optional Segment reference frame - SEG_LVL_SKIP, // Optional Segment (0,0) + skip mode - SEG_LVL_GLOBALMV, - SEG_LVL_MAX - } SEG_LVL_FEATURES; - * feature_data[][] is equivalent to variable FeatureData[][] in spec, - * which is after clip3() operation. - * Clip3(x, y, z) = (z < x)? x : ((z > y)? y : z); - * The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = { - * 255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, 7, 0, 0 } - */ - int16_t feature_data[8][8]; - - /** \brief indicates if a feature is enabled or not. - * Each bit field itself is the feature_id. Index is segment_id. - * feature_mask[segment_id] & (1 << feature_id) equal to 1 specify that the feature of - * feature_id for segment of segment_id is enabled, otherwise disabled. - */ - uint8_t feature_mask[8]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VASegmentationStructAV1; - -/** \brief Film Grain Information - */ -typedef struct _VAFilmGrainStructAV1 { - union { - struct { - /** \brief Specify whether or not film grain is applied on current frame. - * If set to 0, all the rest parameters should be set to zero - * and ignored. - */ - uint32_t apply_grain : 1; - uint32_t chroma_scaling_from_luma : 1; - uint32_t grain_scaling_minus_8 : 2; - uint32_t ar_coeff_lag : 2; - uint32_t ar_coeff_shift_minus_6 : 2; - uint32_t grain_scale_shift : 2; - uint32_t overlap_flag : 1; - uint32_t clip_to_restricted_range : 1; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 20; - } bits; - uint32_t value; - } film_grain_info_fields; - - uint16_t grain_seed; - /* value range [0..14] */ - uint8_t num_y_points; - uint8_t point_y_value[14]; - uint8_t point_y_scaling[14]; - /* value range [0..10] */ - uint8_t num_cb_points; - uint8_t point_cb_value[10]; - uint8_t point_cb_scaling[10]; - /* value range [0..10] */ - uint8_t num_cr_points; - uint8_t point_cr_value[10]; - uint8_t point_cr_scaling[10]; - /* value range [-128..127] */ - int8_t ar_coeffs_y[24]; - int8_t ar_coeffs_cb[25]; - int8_t ar_coeffs_cr[25]; - uint8_t cb_mult; - uint8_t cb_luma_mult; - uint16_t cb_offset; - uint8_t cr_mult; - uint8_t cr_luma_mult; - uint16_t cr_offset; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VAFilmGrainStructAV1; - -typedef enum { - /** identity transformation, 0-parameter */ - VAAV1TransformationIdentity = 0, - /** translational motion, 2-parameter */ - VAAV1TransformationTranslation = 1, - /** simplified affine with rotation + zoom only, 4-parameter */ - VAAV1TransformationRotzoom = 2, - /** affine, 6-parameter */ - VAAV1TransformationAffine = 3, - /** transformation count */ - VAAV1TransformationCount -} VAAV1TransformationType; - -typedef struct _VAWarpedMotionParamsAV1 { - - /** \brief Specify the type of warped motion */ - VAAV1TransformationType wmtype; - - /** \brief Specify warp motion parameters - * wm.wmmat[] corresponds to gm_params[][] in spec. - * Details in AV1 spec section 5.9.24 or refer to libaom code - * https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c - */ - int32_t wmmat[8]; - - /* valid or invalid on affine set */ - uint8_t invalid; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VAWarpedMotionParamsAV1; - -/** - * \brief AV1 Decoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters and should be sent once - * per frame. - * - */ -typedef struct _VADecPictureParameterBufferAV1 { - /**@{*/ - - /** \brief sequence level information - */ - - /** \brief AV1 bit stream profile - */ - uint8_t profile; - - uint8_t order_hint_bits_minus_1; - - /** \brief bit depth index - * value range [0..2] - * 0 - bit depth 8; - * 1 - bit depth 10; - * 2 - bit depth 12; - */ - uint8_t bit_depth_idx; - - /** \brief corresponds to AV1 spec variable of the same name. */ - uint8_t matrix_coefficients; - - union { - struct { - uint32_t still_picture : 1; - uint32_t use_128x128_superblock : 1; - uint32_t enable_filter_intra : 1; - uint32_t enable_intra_edge_filter : 1; - - /** read_compound_tools */ - uint32_t enable_interintra_compound : 1; - uint32_t enable_masked_compound : 1; - - uint32_t enable_dual_filter : 1; - uint32_t enable_order_hint : 1; - uint32_t enable_jnt_comp : 1; - uint32_t enable_cdef : 1; - uint32_t mono_chrome : 1; - uint32_t color_range : 1; - uint32_t subsampling_x : 1; - uint32_t subsampling_y : 1; - va_deprecated uint32_t chroma_sample_position : 1; - uint32_t film_grain_params_present : 1; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 16; - } fields; - uint32_t value; - } seq_info_fields; - - /** \brief Picture level information - */ - - /** \brief buffer description of decoded current picture - */ - VASurfaceID current_frame; - - /** \brief display buffer of current picture - * Used for film grain applied decoded picture. - * Valid only when apply_grain equals 1. - */ - VASurfaceID current_display_picture; - - /** \brief number of anchor frames for large scale tile - * This parameter gives the number of entries of anchor_frames_list[]. - * Value range [0..128]. - */ - uint8_t anchor_frames_num; - - /** \brief anchor frame list for large scale tile - * For large scale tile applications, the anchor frames could come from - * previously decoded frames in current sequence (aka. internal), or - * from external sources. - * For external anchor frames, application should call API - * vaCreateBuffer() to generate frame buffers and populate them with - * pixel frames. And this process may happen multiple times. - * The array anchor_frames_list[] is used to register all the available - * anchor frames from both external and internal, up to the current - * frame instance. If a previously registerred anchor frame is no longer - * needed, it should be removed from the list. But it does not prevent - * applications from relacing the frame buffer with new anchor frames. - * Please note that the internal anchor frames may not still be present - * in the current DPB buffer. But if it is in the anchor_frames_list[], - * it should not be replaced with other frames or removed from memory - * until it is not shown in the list. - * This number of entries of the list is given by parameter anchor_frames_num. - */ - VASurfaceID *anchor_frames_list; - - /** \brief Picture resolution minus 1 - * Picture original resolution. If SuperRes is enabled, - * this is the upscaled resolution. - * value range [0..65535] - */ - uint16_t frame_width_minus1; - uint16_t frame_height_minus1; - - /** \brief Output frame buffer size in unit of tiles - * Valid only when large_scale_tile equals 1. - * value range [0..65535] - */ - uint16_t output_frame_width_in_tiles_minus_1; - uint16_t output_frame_height_in_tiles_minus_1; - - /** \brief Surface indices of reference frames in DPB. - * - * Contains a list of uncompressed frame buffer surface indices as references. - * Application needs to make sure all the entries point to valid frames - * except for intra frames by checking ref_frame_id[]. If missing frame - * is identified, application may choose to perform error recovery by - * pointing problematic index to an alternative frame buffer. - * Driver is not responsible to validate reference frames' id. - */ - VASurfaceID ref_frame_map[8]; - - /** \brief Reference frame indices. - * - * Contains a list of indices into ref_frame_map[8]. - * It specifies the reference frame correspondence. - * The indices of the array are defined as [LAST_FRAME – LAST_FRAME, - * LAST2_FRAME – LAST_FRAME, …, ALTREF_FRAME – LAST_FRAME], where each - * symbol is defined as: - * enum{INTRA_FRAME = 0, LAST_FRAME, LAST2_FRAME, LAST3_FRAME, GOLDEN_FRAME, - * BWDREF_FRAME, ALTREF2_FRAME, ALTREF_FRAME}; - */ - uint8_t ref_frame_idx[7]; - - /** \brief primary reference frame index - * Index into ref_frame_idx[], specifying which reference frame contains - * propagated info that should be loaded at the start of the frame. - * When value equals PRIMARY_REF_NONE (7), it indicates there is - * no primary reference frame. - * value range [0..7] - */ - uint8_t primary_ref_frame; - - uint8_t order_hint; - - VASegmentationStructAV1 seg_info; - VAFilmGrainStructAV1 film_grain_info; - - /** \brief tile structure - * When uniform_tile_spacing_flag == 1, width_in_sbs_minus_1[] and - * height_in_sbs_minus_1[] should be ignored, which will be generated - * by driver based on tile_cols and tile_rows. - */ - uint8_t tile_cols; - uint8_t tile_rows; - - /* The width/height of a tile minus 1 in units of superblocks. Though the - * maximum number of tiles is 64, since ones of the last tile are computed - * from ones of the other tiles and frame_width/height, they are not - * necessarily specified. - */ - uint16_t width_in_sbs_minus_1[63]; - uint16_t height_in_sbs_minus_1[63]; - - /** \brief number of tiles minus 1 in large scale tile list - * Same as AV1 semantic element. - * Valid only when large_scale_tiles == 1. - */ - uint16_t tile_count_minus_1; - - /* specify the tile index for context updating */ - uint16_t context_update_tile_id; - - union { - struct { - /** \brief flags for current picture - * same syntax and semantic as those in AV1 code - */ - - /** \brief Frame Type - * 0: KEY_FRAME; - * 1: INTER_FRAME; - * 2: INTRA_ONLY_FRAME; - * 3: SWITCH_FRAME - * For SWITCH_FRAME, application shall set error_resilient_mode = 1, - * refresh_frame_flags, etc. appropriately. And driver will convert it - * to INTER_FRAME. - */ - uint32_t frame_type : 2; - uint32_t show_frame : 1; - uint32_t showable_frame : 1; - uint32_t error_resilient_mode : 1; - uint32_t disable_cdf_update : 1; - uint32_t allow_screen_content_tools : 1; - uint32_t force_integer_mv : 1; - uint32_t allow_intrabc : 1; - uint32_t use_superres : 1; - uint32_t allow_high_precision_mv : 1; - uint32_t is_motion_mode_switchable : 1; - uint32_t use_ref_frame_mvs : 1; - /* disable_frame_end_update_cdf is coded as refresh_frame_context. */ - uint32_t disable_frame_end_update_cdf : 1; - uint32_t uniform_tile_spacing_flag : 1; - uint32_t allow_warped_motion : 1; - /** \brief indicate if current frame in large scale tile mode */ - uint32_t large_scale_tile : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 15; - } bits; - uint32_t value; - } pic_info_fields; - - /** \brief Supper resolution scale denominator. - * When use_superres=1, superres_scale_denominator must be in the range [9..16]. - * When use_superres=0, superres_scale_denominator must be 8. - */ - uint8_t superres_scale_denominator; - - /** \brief Interpolation filter. - * value range [0..4] - */ - uint8_t interp_filter; - - /** \brief luma loop filter levels. - * value range [0..63]. - */ - uint8_t filter_level[2]; - - /** \brief chroma loop filter levels. - * value range [0..63]. - */ - uint8_t filter_level_u; - uint8_t filter_level_v; - - union { - struct { - /** \brief flags for reference pictures - * same syntax and semantic as those in AV1 code - */ - uint8_t sharpness_level : 3; - uint8_t mode_ref_delta_enabled : 1; - uint8_t mode_ref_delta_update : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint8_t reserved : 3; - } bits; - uint8_t value; - } loop_filter_info_fields; - - /** \brief The adjustment needed for the filter level based on - * the chosen reference frame. - * value range [-64..63]. - */ - int8_t ref_deltas[8]; - - /** \brief The adjustment needed for the filter level based on - * the chosen mode. - * value range [-64..63]. - */ - int8_t mode_deltas[2]; - - /** \brief quantization - */ - /** \brief Y AC index - * value range [0..255] - */ - uint8_t base_qindex; - /** \brief Y DC delta from Y AC - * value range [-64..63] - */ - int8_t y_dc_delta_q; - /** \brief U DC delta from Y AC - * value range [-64..63] - */ - int8_t u_dc_delta_q; - /** \brief U AC delta from Y AC - * value range [-64..63] - */ - int8_t u_ac_delta_q; - /** \brief V DC delta from Y AC - * value range [-64..63] - */ - int8_t v_dc_delta_q; - /** \brief V AC delta from Y AC - * value range [-64..63] - */ - int8_t v_ac_delta_q; - - /** \brief quantization_matrix - */ - union { - struct { - uint16_t using_qmatrix : 1; - /** \brief qm level - * value range [0..15] - * Invalid if using_qmatrix equals 0. - */ - uint16_t qm_y : 4; - uint16_t qm_u : 4; - uint16_t qm_v : 4; - - /** \brief Reserved bytes for future use, must be zero */ - uint16_t reserved : 3; - } bits; - uint16_t value; - } qmatrix_fields; - - union { - struct { - /** \brief delta_q parameters - */ - uint32_t delta_q_present_flag : 1; - uint32_t log2_delta_q_res : 2; - - /** \brief delta_lf parameters - */ - uint32_t delta_lf_present_flag : 1; - uint32_t log2_delta_lf_res : 2; - - /** \brief CONFIG_LOOPFILTER_LEVEL - */ - uint32_t delta_lf_multi : 1; - - /** \brief read_tx_mode - * value range [0..2] - */ - uint32_t tx_mode : 2; - - /* AV1 frame reference mode semantic */ - uint32_t reference_select : 1; - - uint32_t reduced_tx_set_used : 1; - - uint32_t skip_mode_present : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 20; - } bits; - uint32_t value; - } mode_control_fields; - - /** \brief CDEF parameters - */ - /* value range [0..3] */ - uint8_t cdef_damping_minus_3; - /* value range [0..3] */ - uint8_t cdef_bits; - - /** Encode cdef strength: - * - * The cdef_y_strengths[] and cdef_uv_strengths[] are expected to be packed - * with both primary and secondary strength. The secondary strength is - * given in the lower two bits and the primary strength is given in the next - * four bits. - * - * cdef_y_strengths[] & cdef_uv_strengths[] should be derived as: - * (cdef_y_strengths[]) = (cdef_y_pri_strength[] << 2) | (cdef_y_sec_strength[] & 0x03) - * (cdef_uv_strengths[]) = (cdef_uv_pri_strength[] << 2) | (cdef_uv_sec_strength[] & 0x03) - * In which, cdef_y_pri_strength[]/cdef_y_sec_strength[]/cdef_uv_pri_strength[]/cdef_uv_sec_strength[] - * are variables defined in AV1 Spec 5.9.19. The cdef_y_strengths[] & cdef_uv_strengths[] - * are corresponding to LIBAOM variables cm->cdef_strengths[] & cm->cdef_uv_strengths[] respectively. - */ - /* value range [0..63] */ - uint8_t cdef_y_strengths[8]; - /* value range [0..63] */ - uint8_t cdef_uv_strengths[8]; - - /** \brief loop restoration parameters - */ - union { - struct { - uint16_t yframe_restoration_type : 2; - uint16_t cbframe_restoration_type : 2; - uint16_t crframe_restoration_type : 2; - uint16_t lr_unit_shift : 2; - uint16_t lr_uv_shift : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint16_t reserved : 7; - } bits; - uint16_t value; - } loop_restoration_fields; - - /** \brief global motion - */ - VAWarpedMotionParamsAV1 wm[7]; - - /**@}*/ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VADecPictureParameterBufferAV1; - - -/** - * \brief AV1 Slice Parameter Buffer Structure - * - * This structure conveys parameters related to bit stream data and should be - * sent once per tile. - * - * It uses the name VASliceParameterBufferAV1 to be consistent with other codec, - * but actually means VATileParameterBufferAV1. - * - * Slice data buffer of VASliceDataBufferType is used - * to send the bitstream. - * - * Please note that host decoder is responsible to parse out the - * per tile information. And the bit stream in sent to driver in per - * tile granularity. - */ -typedef struct _VASliceParameterBufferAV1 { - /**@{*/ - /** \brief The byte count of current tile in the bitstream buffer, - * starting from first byte of the buffer. - * It uses the name slice_data_size to be consistent with other codec, - * but actually means tile_data_size. - */ - uint32_t slice_data_size; - /** - * offset to the first byte of the data buffer. - */ - uint32_t slice_data_offset; - /** - * see VA_SLICE_DATA_FLAG_XXX definitions - */ - uint32_t slice_data_flag; - - uint16_t tile_row; - uint16_t tile_column; - - va_deprecated uint16_t tg_start; - va_deprecated uint16_t tg_end; - /** \brief anchor frame index for large scale tile. - * index into an array AnchorFrames of the frames that the tile uses - * for prediction. - * valid only when large_scale_tile equals 1. - */ - uint8_t anchor_frame_idx; - - /** \brief tile index in the tile list. - * Valid only when large_scale_tile is enabled. - * Driver uses this field to decide the tile output location. - */ - uint16_t tile_idx_in_tile_list; - - /**@}*/ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferAV1; - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_AV1_H */ diff --git a/prebuilts/x86/include/va/va_dec_hevc.h b/prebuilts/x86/include/va/va_dec_hevc.h deleted file mode 100644 index eef0530..0000000 --- a/prebuilts/x86/include/va/va_dec_hevc.h +++ /dev/null @@ -1,616 +0,0 @@ -/* - * Copyright (c) 2014 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_hevc.h - * \brief The HEVC decoding API - * - * This file contains the \ref api_dec_hevc "HEVC decoding API". - */ - -#ifndef VA_DEC_HEVC_H -#define VA_DEC_HEVC_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_dec_hevc HEVC decoding API - * - * This HEVC decoding API supports Main and Main Still Picture profiles. - * And it supports both short slice format and long slice format. - * - * @{ - */ - -/** - * \brief HEVC Decoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters and should be sent once - * per frame. - * - */ -typedef struct _VAPictureParameterBufferHEVC { - /** \brief buffer description of decoded current picture - * only VA_PICTURE_HEVC_FIELD_PIC and VA_PICTURE_HEVC_BOTTOM_FIELD - * of "flags" fields are meaningful. - */ - VAPictureHEVC CurrPic; - /** \brief buffer description of reference frames in DPB */ - VAPictureHEVC ReferenceFrames[15]; - /** \brief picture width, shall be integer multiple of minimum CB size. */ - uint16_t pic_width_in_luma_samples; - /** \brief picture height, shall be integer multiple of minimum CB size. */ - uint16_t pic_height_in_luma_samples; - - - union { - struct { - /** following flags have same syntax and semantic as those in HEVC spec */ - uint32_t chroma_format_idc : 2; - uint32_t separate_colour_plane_flag : 1; - uint32_t pcm_enabled_flag : 1; - uint32_t scaling_list_enabled_flag : 1; - uint32_t transform_skip_enabled_flag : 1; - uint32_t amp_enabled_flag : 1; - uint32_t strong_intra_smoothing_enabled_flag : 1; - uint32_t sign_data_hiding_enabled_flag : 1; - uint32_t constrained_intra_pred_flag : 1; - uint32_t cu_qp_delta_enabled_flag : 1; - uint32_t weighted_pred_flag : 1; - uint32_t weighted_bipred_flag : 1; - uint32_t transquant_bypass_enabled_flag : 1; - uint32_t tiles_enabled_flag : 1; - uint32_t entropy_coding_sync_enabled_flag : 1; - uint32_t pps_loop_filter_across_slices_enabled_flag : 1; - uint32_t loop_filter_across_tiles_enabled_flag : 1; - uint32_t pcm_loop_filter_disabled_flag : 1; - /** set based on sps_max_num_reorder_pics of current temporal layer. */ - uint32_t NoPicReorderingFlag : 1; - /** picture has no B slices */ - uint32_t NoBiPredFlag : 1; - - uint32_t ReservedBits : 11; - } bits; - uint32_t value; - } pic_fields; - - /** following parameters have same syntax with those in HEVC spec */ - /** \brief DPB size for current temporal layer */ - uint8_t sps_max_dec_pic_buffering_minus1; - uint8_t bit_depth_luma_minus8; - uint8_t bit_depth_chroma_minus8; - uint8_t pcm_sample_bit_depth_luma_minus1; - uint8_t pcm_sample_bit_depth_chroma_minus1; - uint8_t log2_min_luma_coding_block_size_minus3; - uint8_t log2_diff_max_min_luma_coding_block_size; - uint8_t log2_min_transform_block_size_minus2; - uint8_t log2_diff_max_min_transform_block_size; - uint8_t log2_min_pcm_luma_coding_block_size_minus3; - uint8_t log2_diff_max_min_pcm_luma_coding_block_size; - uint8_t max_transform_hierarchy_depth_intra; - uint8_t max_transform_hierarchy_depth_inter; - int8_t init_qp_minus26; - uint8_t diff_cu_qp_delta_depth; - int8_t pps_cb_qp_offset; - int8_t pps_cr_qp_offset; - uint8_t log2_parallel_merge_level_minus2; - uint8_t num_tile_columns_minus1; - uint8_t num_tile_rows_minus1; - /** - * when uniform_spacing_flag equals 1, application should populate - * column_width_minus[], and row_height_minus1[] with approperiate values. - */ - uint16_t column_width_minus1[19]; - uint16_t row_height_minus1[21]; - - /** - * The Following Parameters are needed for Short Slice Format Only. - * Only format decoding can ignore them. - */ - - /** - * \brief Parameters needed for parsing slice segment headers - */ - union { - struct { - /** following parameters have same syntax with those in HEVC spec */ - uint32_t lists_modification_present_flag : 1; - uint32_t long_term_ref_pics_present_flag : 1; - uint32_t sps_temporal_mvp_enabled_flag : 1; - uint32_t cabac_init_present_flag : 1; - uint32_t output_flag_present_flag : 1; - uint32_t dependent_slice_segments_enabled_flag : 1; - uint32_t pps_slice_chroma_qp_offsets_present_flag : 1; - uint32_t sample_adaptive_offset_enabled_flag : 1; - uint32_t deblocking_filter_override_enabled_flag : 1; - uint32_t pps_disable_deblocking_filter_flag : 1; - uint32_t slice_segment_header_extension_present_flag : 1; - - /** current picture with NUT between 16 and 21 inclusive */ - uint32_t RapPicFlag : 1; - /** current picture with NUT between 19 and 20 inclusive */ - uint32_t IdrPicFlag : 1; - /** current picture has only intra slices */ - uint32_t IntraPicFlag : 1; - - uint32_t ReservedBits : 18; - } bits; - uint32_t value; - } slice_parsing_fields; - - /** following parameters have same syntax with those in HEVC spec */ - uint8_t log2_max_pic_order_cnt_lsb_minus4; - uint8_t num_short_term_ref_pic_sets; - uint8_t num_long_term_ref_pic_sps; - uint8_t num_ref_idx_l0_default_active_minus1; - uint8_t num_ref_idx_l1_default_active_minus1; - int8_t pps_beta_offset_div2; - int8_t pps_tc_offset_div2; - uint8_t num_extra_slice_header_bits; - - /** - * \brief number of bits that structure - * short_term_ref_pic_set( num_short_term_ref_pic_sets ) takes in slice - * segment header when short_term_ref_pic_set_sps_flag equals 0. - * if short_term_ref_pic_set_sps_flag equals 1, the value should be 0. - * the bit count is calculated after emulation prevention bytes are removed - * from bit streams. - * This variable is used for accelorater to skip parsing the - * short_term_ref_pic_set( num_short_term_ref_pic_sets ) structure. - */ - uint32_t st_rps_bits; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAPictureParameterBufferHEVC; - -/** - * \brief HEVC Decoding Picture Parameter Buffer Structure for Range Extension - * - * This structure conveys picture level HEVC Range Extension parameters - * and should be sent once per frame. This data structure should be sent - * together with VAPictureParameterBufferHEVC in a single buffer of - * \ref VAPictureParameterBufferHEVCExtension since each frame - * of HEVC range extension contains both picture level parameters and picture - * level range extension parameters. They should be parsed together. The buffer - * type is same as \ref VAPictureParameterBufferHEVC. - * - */ -typedef struct _VAPictureParameterBufferHEVCRext { - union { - struct { - /** \brief HEVC range extension flags - * The following flags bears the same syntax and semantics as - * those defined in HEVC bit stream spec. - */ - uint32_t transform_skip_rotation_enabled_flag : 1; - uint32_t transform_skip_context_enabled_flag : 1; - uint32_t implicit_rdpcm_enabled_flag : 1; - uint32_t explicit_rdpcm_enabled_flag : 1; - uint32_t extended_precision_processing_flag : 1; - uint32_t intra_smoothing_disabled_flag : 1; - uint32_t high_precision_offsets_enabled_flag : 1; - uint32_t persistent_rice_adaptation_enabled_flag : 1; - uint32_t cabac_bypass_alignment_enabled_flag : 1; - uint32_t cross_component_prediction_enabled_flag : 1; - uint32_t chroma_qp_offset_list_enabled_flag : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 21; - } bits; - uint32_t value; - } range_extension_pic_fields; - - /** \brief HEVC range extension flags - * The following flags bears the same syntax and semantics as - * those defined in HEVC bit stream spec. - */ - uint8_t diff_cu_chroma_qp_offset_depth; - uint8_t chroma_qp_offset_list_len_minus1; - uint8_t log2_sao_offset_scale_luma; - uint8_t log2_sao_offset_scale_chroma; - uint8_t log2_max_transform_skip_block_size_minus2; - int8_t cb_qp_offset_list[6]; - int8_t cr_qp_offset_list[6]; -} VAPictureParameterBufferHEVCRext; - -/** - *\brief HEVC Decoding Picture Parameter Buffer Structure for - *Screen Content extension - * - *This structure conveys picture level HEVC Scc parameters - *and should be sent once per frame. This data structure should be sent - *together with VAPictureParameterBufferHEVC and VAPictureParameterBufferHEVCRext - *in a single buffer of \ref VAPictureParameterBufferHEVCExtension since each - *frame of HEVC SCC contains picture level parameters, picture level range - *extension parameters and picture level Scc parameters. They should be parsed - *together and the buffer type is same as \ref VAPictureParameterBufferHEVC. - * - */ -typedef struct _VAPictureParameterBufferHEVCScc { - union { - struct { - /** \brief HEVC Scc extension flags - * The following flags bears the same syntax and semantics as - * those defined in HEVC bit stream spec. - */ - /* indicates if intra block copy (IBC) is enabled or not. */ - uint32_t pps_curr_pic_ref_enabled_flag : 1; - /* indicates if Palette Mode is enabled or not. */ - uint32_t palette_mode_enabled_flag : 1; - /* controls the presence and inference of the use_integer_mv_flag syntax - * in slice segment header that specifies the resolution of motion - * vectors for inter prediction. - */ - uint32_t motion_vector_resolution_control_idc : 2; - /* specifies that the intra boundary filtering process is - * disabled or not for intra prediction. - */ - uint32_t intra_boundary_filtering_disabled_flag : 1; - /* specifies that an adaptive colour transform may be applied - * to the residual in the decoding process. - */ - uint32_t residual_adaptive_colour_transform_enabled_flag : 1; - - /* specifies that slice_act_y_qp_offset, slice_act_cb_qp_offset, - * slice_act_cr_qp_offset are present in the slice header - */ - uint32_t pps_slice_act_qp_offsets_present_flag : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 25; - } bits; - uint32_t value; - } screen_content_pic_fields; - - /* specifies the maximum allowed palette size. */ - uint8_t palette_max_size; - /* Correspond to HEVC syntax elements of the same names. - * It specifies the difference between the maximum allowed palette - * predictor size and the maximum allowed palette size. - * App needs to enforce that the variable PaletteMaxPredictorSize, - * which is derived as follows: - * PaletteMaxPredictorSize = palette_max_size + delta_palette_max_predictor_size - * should have a value range of [0..128]. - */ - uint8_t delta_palette_max_predictor_size; - /** \brief Size of initial palette predictor. - * It is derived from pps_num_palette_predictor_initializer or - * sps_num_palette_predictor_initializer_minus1. - * Details in HEVC SCC spec section 9.3.2.3. - */ - uint8_t predictor_palette_size; - /** \brief Palette predictor initializer. - * It is derived from pps_palette_predictor_initializers[][] - * or sps_palette_predictor_initializers[][]. - * Details in HEVC SCC spec section 9.3.2.3. - */ - uint16_t predictor_palette_entries[3][128]; - /* are used to determine the offsets that are applied to the - * quantization parameter values for the luma, Cb and Cr - * components, respectively. - */ - int8_t pps_act_y_qp_offset_plus5; - int8_t pps_act_cb_qp_offset_plus5; - int8_t pps_act_cr_qp_offset_plus3; -} VAPictureParameterBufferHEVCScc; - -/** - * \brief HEVC Decoding Picture Parameter Buffer Structure including Extensions - * - * This structure conveys picture level HEVC parameters including basic version 1 - * and range extension and screen content extension. - * The data buffer should be sent once per frame. - * - */ -typedef struct _VAPictureParameterBufferHEVCExtension { - /** \brief basic HEVC picture parameters data structure - */ - VAPictureParameterBufferHEVC base; - - /** \brief HEVC range extension picture parameters data structure - */ - VAPictureParameterBufferHEVCRext rext; - - /** \brief HEVC screen content picture parameters data structure - */ - VAPictureParameterBufferHEVCScc scc; -} VAPictureParameterBufferHEVCExtension; - -/** - * \brief HEVC Slice Parameter Buffer Structure For Long Format - * - * VASliceParameterBufferHEVC structure should be accompanied by a - * slice data buffer, which holds the whole raw slice NAL unit bit streams - * including start code prefix and emulation prevention bytes not removed. - * - * This structure conveys parameters related to slice segment header and should - * be sent once per slice. - * - * For short format, this data structure is not sent by application. - * - */ -typedef struct _VASliceParameterBufferHEVC { - /** @name Codec-independent Slice Parameter Buffer base. */ - - /**@{*/ - - /** \brief Number of bytes in the slice data buffer for this slice - * counting from and including NAL unit header. - */ - uint32_t slice_data_size; - /** \brief The offset to the NAL unit header for this slice */ - uint32_t slice_data_offset; - /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_XXX. */ - uint32_t slice_data_flag; - /** - * \brief Byte offset from NAL unit header to the begining of slice_data(). - * - * This byte offset is relative to and includes the NAL unit header - * and represents the number of bytes parsed in the slice_header() - * after the removal of any emulation prevention bytes in - * there. However, the slice data buffer passed to the hardware is - * the original bitstream, thus including any emulation prevention - * bytes. - */ - uint32_t slice_data_byte_offset; - /** HEVC syntax element. */ - uint32_t slice_segment_address; - /** \brief index into ReferenceFrames[] - * RefPicList[0][] corresponds to RefPicList0[] of HEVC variable. - * RefPicList[1][] corresponds to RefPicList1[] of HEVC variable. - * value range [0..14, 0xFF], where 0xFF indicates invalid entry. - */ - uint8_t RefPicList[2][15]; - union { - uint32_t value; - struct { - /** current slice is last slice of picture. */ - uint32_t LastSliceOfPic : 1; - /** HEVC syntax element. */ - uint32_t dependent_slice_segment_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_type : 2; - /** HEVC syntax element. */ - uint32_t color_plane_id : 2; - /** HEVC syntax element. */ - uint32_t slice_sao_luma_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_sao_chroma_flag : 1; - /** HEVC syntax element. */ - uint32_t mvd_l1_zero_flag : 1; - /** HEVC syntax element. */ - uint32_t cabac_init_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_temporal_mvp_enabled_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_deblocking_filter_disabled_flag : 1; - /** HEVC syntax element. */ - uint32_t collocated_from_l0_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_loop_filter_across_slices_enabled_flag : 1; - uint32_t reserved : 18; - } fields; - } LongSliceFlags; - - /** HEVC syntax element. Collocated Reference Picture Index. - * index to RefPicList[0][] or RefPicList[1][]. - * when slice_temporal_mvp_enabled_flag equals 0, it should take value 0xFF. - * value range [0..14, 0xFF]. - */ - uint8_t collocated_ref_idx; - /** HEVC syntax element. - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l0_default_active_minus1. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** HEVC syntax element. - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l1_default_active_minus1. - */ - uint8_t num_ref_idx_l1_active_minus1; - /** HEVC syntax element. */ - int8_t slice_qp_delta; - /** HEVC syntax element. */ - int8_t slice_cb_qp_offset; - /** HEVC syntax element. */ - int8_t slice_cr_qp_offset; - /** HEVC syntax element. */ - int8_t slice_beta_offset_div2; - /** HEVC syntax element. */ - int8_t slice_tc_offset_div2; - /** HEVC syntax element. */ - uint8_t luma_log2_weight_denom; - /** HEVC syntax element. */ - int8_t delta_chroma_log2_weight_denom; - /** HEVC syntax element. */ - int8_t delta_luma_weight_l0[15]; - /** HEVC syntax element. */ - int8_t luma_offset_l0[15]; - /** HEVC syntax element. */ - int8_t delta_chroma_weight_l0[15][2]; - /** corresponds to HEVC spec variable of the same name. */ - int8_t ChromaOffsetL0[15][2]; - /** HEVC syntax element. */ - int8_t delta_luma_weight_l1[15]; - /** HEVC syntax element. */ - int8_t luma_offset_l1[15]; - /** HEVC syntax element. */ - int8_t delta_chroma_weight_l1[15][2]; - /** corresponds to HEVC spec variable of the same name. */ - int8_t ChromaOffsetL1[15][2]; - /** HEVC syntax element. */ - uint8_t five_minus_max_num_merge_cand; - /** HEVC syntax element. */ - uint16_t num_entry_point_offsets; - /** HEVC syntax element. */ - uint16_t entry_offset_to_subset_array; - /** \brief Number of emulation prevention bytes in slice header. */ - uint16_t slice_data_num_emu_prevn_bytes; - /**@}*/ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW - 2]; -} VASliceParameterBufferHEVC; - -/** - * \brief HEVC Extented Slice Parameter Buffer Structure For Long Format - * - * This data structure contains extension profiles (range extension and screen content). - * - * VASliceParameterBufferHEVCRext structure should be accompanied by a - * slice data buffer, which holds the whole raw slice NAL unit bit streams - * including start code prefix and emulation prevention bytes not removed. - * - * This structure conveys parameters related to slice segment header and should - * be sent once per slice with VASliceParameterBufferHEVC in a single buffer of - * \ref VASliceParameterBufferHEVCExtension and the buffer type is same as \ref - * VASliceParameterBufferHEVC. - * - * For short format, this data structure is not sent by application. - * - */ -typedef struct _VASliceParameterBufferHEVCRext { - /* below four parameters are used to replace data types of the - * corresponding parameters of those in \# VASliceParameterBufferHEVC. - */ - int16_t luma_offset_l0[15]; - int16_t ChromaOffsetL0[15][2]; - int16_t luma_offset_l1[15]; - int16_t ChromaOffsetL1[15][2]; - - union { - struct { - uint32_t cu_chroma_qp_offset_enabled_flag : 1; - uint32_t use_integer_mv_flag : 1; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 30; - } bits; - uint32_t value; - } slice_ext_flags; - - /** \brief Screen Content Extension parameters. - * data range [-12..12] - */ - int8_t slice_act_y_qp_offset; - int8_t slice_act_cb_qp_offset; - int8_t slice_act_cr_qp_offset; -} VASliceParameterBufferHEVCRext; - -/** - * \brief HEVC Decoding Slice Parameter Buffer Structure For Long Format including Extensions - * - * This data structure contains both baseline HEVC profiles (main, main10) - * and extension profiles (range extension and screen content). - * - * VASliceParameterBufferHEVCExtension structure should be accompanied by a - * slice data buffer, which holds the whole raw slice NAL unit bit streams - * including start code prefix and emulation prevention bytes not removed. - * - * This structure conveys parameters related to slice segment header and should - * be sent once per slice. For HEVC range extension and HEVC Scc decoding, - * application should parse both basic slice parameters and extented slice - * parameters into this buffer structure and sent it. - * - * For short format, this data structure is not sent by application. - * - */ -typedef struct _VASliceParameterBufferHEVCExtension { - /** \brief baseline HEVC slice parameters data structure */ - VASliceParameterBufferHEVC base; - - /** \brief extented HEVC slice parameters data structure */ - VASliceParameterBufferHEVCRext rext; -} VASliceParameterBufferHEVCExtension; - -/** - * \brief HEVC Inverse Quantization Matrix Buffer Structure - * - * This structure is sent once per frame, - * and only when scaling_list_enabled_flag = 1. - * When sps_scaling_list_data_present_flag = 0, app still - * needs to send in this structure with default matrix values. - * - * Matrix entries are in raster scan order which follows HEVC spec. - */ -typedef struct _VAIQMatrixBufferHEVC { - /** - * \brief scaling lists, - * corresponds to same HEVC spec syntax element - * ScalingList[ i ][ MatrixID ][ j ]. - * - * \brief 4x4 scaling, - * correspongs i = 0, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 15, inclusive. - */ - uint8_t ScalingList4x4[6][16]; - /** - * \brief 8x8 scaling, - * correspongs i = 1, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t ScalingList8x8[6][64]; - /** - * \brief 16x16 scaling, - * correspongs i = 2, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t ScalingList16x16[6][64]; - /** - * \brief 32x32 scaling, - * correspongs i = 3, MatrixID is in the range of 0 to 1, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t ScalingList32x32[2][64]; - /** - * \brief DC values of the 16x16 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 2 and matrixID in the range of 0 to 5, inclusive. - */ - uint8_t ScalingListDC16x16[6]; - /** - * \brief DC values of the 32x32 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 3 and matrixID in the range of 0 to 1, inclusive. - */ - uint8_t ScalingListDC32x32[2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferHEVC; - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_HEVC_H */ diff --git a/prebuilts/x86/include/va/va_dec_jpeg.h b/prebuilts/x86/include/va/va_dec_jpeg.h deleted file mode 100644 index 7bb26c2..0000000 --- a/prebuilts/x86/include/va/va_dec_jpeg.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_jpeg.h - * \brief The JPEG decoding API - * - * This file contains the \ref api_dec_jpeg "JPEG decoding API". - */ - -#ifndef VA_DEC_JPEG_H -#define VA_DEC_JPEG_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_dec_jpeg JPEG decoding API - * - * This JPEG decoding API supports Baseline profile only. - * - * @{ - */ - -/** - * \brief Picture parameter for JPEG decoding. - * - * This structure holds information from the frame header, along with - * definitions from additional segments. - */ -typedef struct _VAPictureParameterBufferJPEGBaseline { - /** \brief Picture width in pixels. */ - uint16_t picture_width; - /** \brief Picture height in pixels. */ - uint16_t picture_height; - - struct { - /** \brief Component identifier (Ci). */ - uint8_t component_id; - /** \brief Horizontal sampling factor (Hi). */ - uint8_t h_sampling_factor; - /** \brief Vertical sampling factor (Vi). */ - uint8_t v_sampling_factor; - /* \brief Quantization table selector (Tqi). */ - uint8_t quantiser_table_selector; - } components[255]; - /** \brief Number of components in frame (Nf). */ - uint8_t num_components; - - /** \brief Input color space 0: YUV, 1: RGB, 2: BGR, others: reserved */ - uint8_t color_space; - /** \brief Set to VA_ROTATION_* for a single rotation angle reported by VAConfigAttribDecJPEG. */ - uint32_t rotation; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 1]; -} VAPictureParameterBufferJPEGBaseline; - -/** - * \brief Quantization table for JPEG decoding. - * - * This structure holds the complete quantization tables. This is an - * aggregation of all quantization table (DQT) segments maintained by - * the application. i.e. up to 4 quantization tables are stored in - * there for baseline profile. - * - * The #load_quantization_table array can be used as a hint to notify - * the VA driver implementation about which table(s) actually changed - * since the last submission of this buffer. - * - * The #quantiser_table values are specified in zig-zag scan order. - */ -typedef struct _VAIQMatrixBufferJPEGBaseline { - /** \brief Specifies which #quantiser_table is valid. */ - uint8_t load_quantiser_table[4]; - /** \brief Quanziation tables indexed by table identifier (Tqi). */ - uint8_t quantiser_table[4][64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferJPEGBaseline; - -/** - * \brief Slice parameter for JPEG decoding. - * - * This structure holds information from the scan header, along with - * definitions from additional segments. The associated slice data - * buffer holds all entropy coded segments (ECS) in the scan. - */ -typedef struct _VASliceParameterBufferJPEGBaseline { - /** @name Codec-independent Slice Parameter Buffer base. */ - /**@{*/ - /** \brief Number of bytes in the slice data buffer for this slice. */ - uint32_t slice_data_size; - /** \brief The offset to the first byte of the first MCU. */ - uint32_t slice_data_offset; - /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_xxx. */ - uint32_t slice_data_flag; - /**@}*/ - - /** \brief Scan horizontal position. */ - uint32_t slice_horizontal_position; - /** \brief Scan vertical position. */ - uint32_t slice_vertical_position; - - struct { - /** \brief Scan component selector (Csj). */ - uint8_t component_selector; - /** \brief DC entropy coding table selector (Tdj). */ - uint8_t dc_table_selector; - /** \brief AC entropy coding table selector (Taj). */ - uint8_t ac_table_selector; - } components[4]; - /** \brief Number of components in scan (Ns). */ - uint8_t num_components; - - /** \brief Restart interval definition (Ri). */ - uint16_t restart_interval; - /** \brief Number of MCUs in a scan. */ - uint32_t num_mcus; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferJPEGBaseline; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_JPEG_H */ diff --git a/prebuilts/x86/include/va/va_dec_vp8.h b/prebuilts/x86/include/va/va_dec_vp8.h deleted file mode 100644 index 8004f7d..0000000 --- a/prebuilts/x86/include/va/va_dec_vp8.h +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_vp.h - * \brief VP8 decoding API - * - * This file contains the \ref api_dec_vp8 "VP8 decoding API". - */ - -#ifndef VA_DEC_VP8_H -#define VA_DEC_VP8_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_dec_vp8 VP8 decoding API - * - * @{ - */ - -/** - * \brief VPX Bool Coder Context structure - * - * This common structure is defined for potential sharing by other VP formats - * - */ -typedef struct _VABoolCoderContextVPX { - /* partition 0 "range" */ - uint8_t range; - /* partition 0 "value" */ - uint8_t value; - /* - * 'partition 0 number of shifts before an output byte is available' - * it is the number of remaining bits in 'value' for decoding, range [0, 7]. - */ - - uint8_t count; -} VABoolCoderContextVPX; - -/** - * \brief VP8 Decoding Picture Parameter Buffer Structure - * - * This structure conveys frame level parameters and should be sent once - * per frame. - * - */ -typedef struct _VAPictureParameterBufferVP8 { - /* frame width in pixels */ - uint32_t frame_width; - /* frame height in pixels */ - uint32_t frame_height; - - /* specifies the "last" reference frame */ - VASurfaceID last_ref_frame; - /* specifies the "golden" reference frame */ - VASurfaceID golden_ref_frame; - /* specifies the "alternate" referrence frame */ - VASurfaceID alt_ref_frame; - /* specifies the out-of-loop deblocked frame, not used currently */ - VASurfaceID out_of_loop_frame; - - union { - struct { - /* same as key_frame in bitstream syntax, 0 means a key frame */ - uint32_t key_frame : 1; - /* same as version in bitstream syntax */ - uint32_t version : 3; - /* same as segmentation_enabled in bitstream syntax */ - uint32_t segmentation_enabled : 1; - /* same as update_mb_segmentation_map in bitstream syntax */ - uint32_t update_mb_segmentation_map : 1; - /* same as update_segment_feature_data in bitstream syntax */ - uint32_t update_segment_feature_data : 1; - /* same as filter_type in bitstream syntax */ - uint32_t filter_type : 1; - /* same as sharpness_level in bitstream syntax */ - uint32_t sharpness_level : 3; - /* same as loop_filter_adj_enable in bitstream syntax */ - uint32_t loop_filter_adj_enable : 1; - /* same as mode_ref_lf_delta_update in bitstream syntax */ - uint32_t mode_ref_lf_delta_update : 1; - /* same as sign_bias_golden in bitstream syntax */ - uint32_t sign_bias_golden : 1; - /* same as sign_bias_alternate in bitstream syntax */ - uint32_t sign_bias_alternate : 1; - /* same as mb_no_coeff_skip in bitstream syntax */ - uint32_t mb_no_coeff_skip : 1; - /* flag to indicate that loop filter should be disabled */ - uint32_t loop_filter_disable : 1; - } bits; - uint32_t value; - } pic_fields; - - /* - * probabilities of the segment_id decoding tree and same as - * mb_segment_tree_probs in the spec. - */ - uint8_t mb_segment_tree_probs[3]; - - /* Post-adjustment loop filter levels for the 4 segments */ - uint8_t loop_filter_level[4]; - /* loop filter deltas for reference frame based MB level adjustment */ - int8_t loop_filter_deltas_ref_frame[4]; - /* loop filter deltas for coding mode based MB level adjustment */ - int8_t loop_filter_deltas_mode[4]; - - /* same as prob_skip_false in bitstream syntax */ - uint8_t prob_skip_false; - /* same as prob_intra in bitstream syntax */ - uint8_t prob_intra; - /* same as prob_last in bitstream syntax */ - uint8_t prob_last; - /* same as prob_gf in bitstream syntax */ - uint8_t prob_gf; - - /* - * list of 4 probabilities of the luma intra prediction mode decoding - * tree and same as y_mode_probs in frame header - */ - uint8_t y_mode_probs[4]; - /* - * list of 3 probabilities of the chroma intra prediction mode decoding - * tree and same as uv_mode_probs in frame header - */ - uint8_t uv_mode_probs[3]; - /* - * updated mv decoding probabilities and same as mv_probs in - * frame header - */ - uint8_t mv_probs[2][19]; - - VABoolCoderContextVPX bool_coder_ctx; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureParameterBufferVP8; - -/** - * \brief VP8 Slice Parameter Buffer Structure - * - * This structure conveys parameters related to data partitions and should be - * sent once per frame. Slice data buffer of VASliceDataBufferType is used - * to send the partition data. - * - */ -typedef struct _VASliceParameterBufferVP8 { - /* - * number of bytes in the slice data buffer for the partitions - */ - uint32_t slice_data_size; - /* - * offset to the first byte of partition data (control partition) - */ - uint32_t slice_data_offset; - /* - * see VA_SLICE_DATA_FLAG_XXX definitions - */ - uint32_t slice_data_flag; - /* - * offset to the first bit of MB from the first byte of partition data(slice_data_offset) - */ - uint32_t macroblock_offset; - - /* - * Partitions - * (1<lvl[seg][ref][mode] in VP9 code, - * where m is [ref], and n is [mode] in FilterLevel[m][n]. - */ - uint8_t filter_level[4][2]; - /** \brief Specifies per segment Luma AC quantization scale. - * Corresponding to y_dequant[qindex][1] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t luma_ac_quant_scale; - /** \brief Specifies per segment Luma DC quantization scale. - * Corresponding to y_dequant[qindex][0] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t luma_dc_quant_scale; - /** \brief Specifies per segment Chroma AC quantization scale. - * Corresponding to uv_dequant[qindex][1] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t chroma_ac_quant_scale; - /** \brief Specifies per segment Chroma DC quantization scale. - * Corresponding to uv_dequant[qindex][0] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t chroma_dc_quant_scale; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VASegmentParameterVP9; - - - -/** - * \brief VP9 Slice Parameter Buffer Structure - * - * This structure conveys parameters related to segmentation data and should be - * sent once per frame. - * - * When segmentation is disabled, only SegParam[0] has valid values, - * all other entries should be populated with 0. - * Otherwise, all eight entries should be valid. - * - * Slice data buffer of VASliceDataBufferType is used - * to send the bitstream which should include whole or part of partition 0 - * (at least compressed header) to the end of frame. - * - */ -typedef struct _VASliceParameterBufferVP9 { - /** \brief The byte count of current frame in the bitstream buffer, - * starting from first byte of the buffer. - * It uses the name slice_data_size to be consitent with other codec, - * but actually means frame_data_size. - */ - uint32_t slice_data_size; - /** - * offset to the first byte of partition data (control partition) - */ - uint32_t slice_data_offset; - /** - * see VA_SLICE_DATA_FLAG_XXX definitions - */ - uint32_t slice_data_flag; - - /** - * \brief per segment information - */ - VASegmentParameterVP9 seg_param[8]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VASliceParameterBufferVP9; - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_VP9_H */ diff --git a/prebuilts/x86/include/va/va_drm.h b/prebuilts/x86/include/va/va_drm.h deleted file mode 100644 index a39c5a2..0000000 --- a/prebuilts/x86/include/va/va_drm.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * va_drm.h - Raw DRM API - * - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_DRM_H -#define VA_DRM_H - -#include - -/** - * \file va_drm.h - * \brief The raw DRM API - * - * This file contains the \ref api_drm "Raw DRM API". - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Returns a VA display derived from the specified DRM connection. - * - * This function returns a (possibly cached) VA display from the - * specified DRM connection @fd. - * - * @param[in] fd the DRM connection descriptor - * @return the VA display - */ -VADisplay -vaGetDisplayDRM(int fd); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DRM_H */ diff --git a/prebuilts/x86/include/va/va_drmcommon.h b/prebuilts/x86/include/va/va_drmcommon.h deleted file mode 100644 index 0bda458..0000000 --- a/prebuilts/x86/include/va/va_drmcommon.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - * va_drmcommon.h - Common utilities for DRM-based drivers - * - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_DRM_COMMON_H -#define VA_DRM_COMMON_H - -#include - - -/** \brief DRM authentication type. */ -enum { - /** \brief Disconnected. */ - VA_DRM_AUTH_NONE = 0, - /** - * \brief Connected. Authenticated with DRI1 protocol. - * - * @deprecated - * This is a deprecated authentication type. All DRI-based drivers have - * been migrated to use the DRI2 protocol. Newly written drivers shall - * use DRI2 protocol only, or a custom authentication means. e.g. opt - * for authenticating on the VA driver side, instead of libva side. - */ - VA_DRM_AUTH_DRI1 = 1, - /** - * \brief Connected. Authenticated with DRI2 protocol. - * - * This is only useful to VA/X11 drivers. The libva-x11 library provides - * a helper function VA_DRI2Authenticate() for authenticating the - * connection. However, DRI2 conformant drivers don't need to call that - * function since authentication happens on the libva side, implicitly. - */ - VA_DRM_AUTH_DRI2 = 2, - /** - * \brief Connected. Authenticated with some alternate raw protocol. - * - * This authentication mode is mainly used in non-VA/X11 drivers. - * Authentication happens through some alternative method, at the - * discretion of the VA driver implementation. - */ - VA_DRM_AUTH_CUSTOM = 3 -}; - -/** \brief Base DRM state. */ -struct drm_state { - /** \brief DRM connection descriptor. */ - int fd; - /** \brief DRM authentication type. */ - int auth_type; - /** \brief Reserved bytes for future use, must be zero */ - int va_reserved[8]; -}; - -/** \brief Kernel DRM buffer memory type. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM 0x10000000 -/** \brief DRM PRIME memory type (old version) - * - * This supports only single objects with restricted memory layout. - * Used with VASurfaceAttribExternalBuffers. - */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME 0x20000000 -/** \brief DRM PRIME memory type - * - * Used with VADRMPRIMESurfaceDescriptor. - */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 0x40000000 - -/** - * \brief External buffer descriptor for a DRM PRIME surface. - * - * For export, call vaExportSurfaceHandle() with mem_type set to - * VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 and pass a pointer to an - * instance of this structure to fill. - * If VA_EXPORT_SURFACE_SEPARATE_LAYERS is specified on export, each - * layer will contain exactly one plane. For example, an NV12 - * surface will be exported as two layers, one of DRM_FORMAT_R8 and - * one of DRM_FORMAT_GR88. - * If VA_EXPORT_SURFACE_COMPOSED_LAYERS is specified on export, - * there will be exactly one layer. - * - * For import, call vaCreateSurfaces() with the MemoryType attribute - * set to VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 and the - * ExternalBufferDescriptor attribute set to point to an array of - * num_surfaces instances of this structure. - * The number of planes which need to be provided for a given layer - * is dependent on both the format and the format modifier used for - * the objects containing it. For example, the format DRM_FORMAT_RGBA - * normally requires one plane, but with the format modifier - * I915_FORMAT_MOD_Y_TILED_CCS it requires two planes - the first - * being the main data plane and the second containing the color - * control surface. - * Note that a given driver may only support a subset of possible - * representations of a particular format. For example, it may only - * support NV12 surfaces when they are contained within a single DRM - * object, and therefore fail to create such surfaces if the two - * planes are in different DRM objects. - * Note that backend driver will retrieve the resource represent by fd, - * and a valid surface ID is generated. Backend driver will not close - * the file descriptor. Application should handle the release of the fd. - * releasing the fd will not impact the existence of the surface. - */ -typedef struct _VADRMPRIMESurfaceDescriptor { - /** Pixel format fourcc of the whole surface (VA_FOURCC_*). */ - uint32_t fourcc; - /** Width of the surface in pixels. */ - uint32_t width; - /** Height of the surface in pixels. */ - uint32_t height; - /** Number of distinct DRM objects making up the surface. */ - uint32_t num_objects; - /** Description of each object. */ - struct { - /** DRM PRIME file descriptor for this object. */ - int fd; - /** Total size of this object (may include regions which are - * not part of the surface). */ - uint32_t size; - /** Format modifier applied to this object. */ - uint64_t drm_format_modifier; - } objects[4]; - /** Number of layers making up the surface. */ - uint32_t num_layers; - /** Description of each layer in the surface. */ - struct { - /** DRM format fourcc of this layer (DRM_FOURCC_*). */ - uint32_t drm_format; - /** Number of planes in this layer. */ - uint32_t num_planes; - /** Index in the objects array of the object containing each - * plane. */ - uint32_t object_index[4]; - /** Offset within the object of each plane. */ - uint32_t offset[4]; - /** Pitch of each plane. */ - uint32_t pitch[4]; - } layers[4]; -} VADRMPRIMESurfaceDescriptor; - -/** - * \brief List of DRM format modifiers. - * - * To allocate surfaces with one of the modifiers specified in the array, call - * vaCreateSurfaces() with the VASurfaceAttribDRMFormatModifiers attribute set - * to point to an array of num_surfaces instances of this structure. The driver - * will select the optimal modifier in the list. - * - * DRM format modifiers are defined in drm_fourcc.h in the Linux kernel. - */ -typedef struct _VADRMFormatModifierList { - /** Number of modifiers. */ - uint32_t num_modifiers; - /** Array of modifiers. */ - uint64_t *modifiers; -} VADRMFormatModifierList; - - -#endif /* VA_DRM_COMMON_H */ diff --git a/prebuilts/x86/include/va/va_egl.h b/prebuilts/x86/include/va/va_egl.h deleted file mode 100644 index d6acb7d..0000000 --- a/prebuilts/x86/include/va/va_egl.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2007 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef _VA_EGL_H_ -#define _VA_EGL_H_ - -#warning The APIs / data structures included in this file are deprecated - -#endif /* _VA_EGL_H_ */ diff --git a/prebuilts/x86/include/va/va_enc_av1.h b/prebuilts/x86/include/va/va_enc_av1.h deleted file mode 100644 index 6a845b7..0000000 --- a/prebuilts/x86/include/va/va_enc_av1.h +++ /dev/null @@ -1,995 +0,0 @@ -/* - * Copyright (c) 2021 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_av1.h - * \brief AV1 encoding API - * - * This file contains the \ref api_enc_av1 "AV1 encoding API". - * - */ - -#ifndef VA_ENC_AV1_H -#define VA_ENC_AV1_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_enc_av1 AV1 encoding API - * - * This AV1 encoding API supports 8-bit/10bit 420 format only. - * - * @{ - */ - -/** \brief Attribute value for VAConfigAttribEncAV1. - * - * This attribute decribes the supported features of an AV1 - * encoder configuration. - * - * All of the field values in this attribute are VA_FEATURE_* values, - * indicating support for the corresponding feature. - * - */ -typedef union _VAConfigAttribValEncAV1 { - struct { - /** - * \brief Use 128x128 superblock. - * - * Allows setting use_128x128_superblock in the SPS. - */ - uint32_t support_128x128_superblock : 2; - /** - * \brief Intra filter. - * Allows setting enable_filter_intra in the SPS. - */ - uint32_t support_filter_intra : 2; - /** - * \brief Intra edge filter. - * Allows setting enable_intra_edge_filter in the SPS. - */ - uint32_t support_intra_edge_filter : 2; - /** - * \brief Interintra compound. - * Allows setting enable_interintra_compound in the SPS. - */ - uint32_t support_interintra_compound : 2; - /** - * \brief Masked compound. - * Allows setting enable_masked_compound in the SPS. - */ - uint32_t support_masked_compound : 2; - /** - * \brief Warped motion. - * Allows setting enable_warped_motion in the SPS. - */ - uint32_t support_warped_motion : 2; - /** - * \brief Palette mode. - * Allows setting palette_mode in the PPS. - */ - uint32_t support_palette_mode : 2; - /** - * \brief Dual filter. - * Allows setting enable_dual_filter in the SPS. - */ - uint32_t support_dual_filter : 2; - /** - * \brief Jnt compound. - * Allows setting enable_jnt_comp in the SPS. - */ - uint32_t support_jnt_comp : 2; - /** - * \brief Refrence frame mvs. - * Allows setting enable_ref_frame_mvs in the SPS. - */ - uint32_t support_ref_frame_mvs : 2; - /** - * \brief Super resolution. - * Allows setting enable_superres in the SPS. - */ - uint32_t support_superres : 2; - /** - * \brief Restoration. - * Allows setting enable_restoration in the SPS. - */ - uint32_t support_restoration : 2; - /** - * \brief Allow intraBC. - * Allows setting allow_intrabc in the PPS. - */ - uint32_t support_allow_intrabc : 2; - /** - * \brief Cdef channel strength. - * Allows setting cdef_y_strengths and cdef_uv_strengths in PPS. - */ - uint32_t support_cdef_channel_strength : 2; - /** \brief Reserved bits for future, must be zero. */ - uint32_t reserved : 4; - } bits; - uint32_t value; -} VAConfigAttribValEncAV1; - -/** \brief Attribute value for VAConfigAttribEncAV1Ext1. */ -typedef union _VAConfigAttribValEncAV1Ext1 { - struct { - /** - * \brief Fields indicate which types of interpolation filter are supported. - * (interpolation_filter & 0x01) == 1: eight_tap filter is supported, 0: not. - * (interpolation_filter & 0x02) == 1: eight_tap_smooth filter is supported, 0: not. - * (interpolation_filter & 0x04) == 1: eight_sharp filter is supported, 0: not. - * (interpolation_filter & 0x08) == 1: bilinear filter is supported, 0: not. - * (interpolation_filter & 0x10) == 1: switchable filter is supported, 0: not. - */ - uint32_t interpolation_filter : 5; - /** - * \brief Min segmentId block size accepted. - * Application need to send seg_id_block_size in PPS equal or larger than this value. - */ - uint32_t min_segid_block_size_accepted : 8; - /** - * \brief Type of segment feature supported. - * (segment_feature_support & 0x01) == 1: SEG_LVL_ALT_Q is supported, 0: not. - * (segment_feature_support & 0x02) == 1: SEG_LVL_ALT_LF_Y_V is supported, 0: not. - * (segment_feature_support & 0x04) == 1: SEG_LVL_ALT_LF_Y_H is supported, 0: not. - * (segment_feature_support & 0x08) == 1: SEG_LVL_ALT_LF_U is supported, 0: not. - * (segment_feature_support & 0x10) == 1: SEG_LVL_ALT_LF_V is supported, 0: not. - * (segment_feature_support & 0x20) == 1: SEG_LVL_REF_FRAME is supported, 0: not. - * (segment_feature_support & 0x40) == 1: SEG_LVL_SKIP is supported, 0: not. - * (segment_feature_support & 0x80) == 1: SEG_LVL_GLOBALMV is supported, 0: not. - */ - uint32_t segment_feature_support : 8; - /** \brief Reserved bits for future, must be zero. */ - uint32_t reserved : 11; - } bits; - uint32_t value; -} VAConfigAttribValEncAV1Ext1; - -/** \brief Attribute value for VAConfigAttribEncAV1Ext2. */ -typedef union _VAConfigAttribValEncAV1Ext2 { - struct { - /** - * \brief Tile size bytes minus1. - * Specify the number of bytes needed to code tile size supported. - * This value need to be set in frame header obu. - */ - uint32_t tile_size_bytes_minus1 : 2; - /** - * \brief Tile size bytes minus1. - * Specify the fixed number of bytes needed to code syntax obu_size. - */ - uint32_t obu_size_bytes_minus1 : 2; - /** - * \brief tx_mode supported. - * (tx_mode_support & 0x01) == 1: ONLY_4X4 is supported, 0: not. - * (tx_mode_support & 0x02) == 1: TX_MODE_LARGEST is supported, 0: not. - * (tx_mode_support & 0x04) == 1: TX_MODE_SELECT is supported, 0: not. - */ - uint32_t tx_mode_support : 3; - /** - * \brief Max tile num minus1. - * Specify the max number of tile supported by driver. - */ - uint32_t max_tile_num_minus1 : 13; - /** \brief Reserved bits for future, must be zero. */ - uint32_t reserved : 12; - } bits; - uint32_t value; -} VAConfigAttribValEncAV1Ext2; - -/** - * \brief Packed header types specific to AV1 encoding. - * - * Types of packed headers generally used for AV1 encoding. - * - */ -typedef enum { - /** - * \brief Packed Sequence Parameter Set (SPS). - * - * The corresponding packed header data buffer shall contain the - * complete sequence_header_obu() syntax element. - * - */ - VAEncPackedHeaderAV1_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - * The corresponding packed header data buffer shall contain the - * complete frame_header_obu() syntax element. - * - */ - VAEncPackedHeaderAV1_PPS = VAEncPackedHeaderPicture, -} VAEncPackedHeaderTypeAV1; - -/** - * \brief AV1 Encoding Sequence Parameter Buffer Structure. - * - * This structure conveys sequence level parameters. - * - */ -typedef struct _VAEncSequenceParameterBufferAV1 { - /** \brief AV1 profile setting. - * value range [0..2]. - */ - uint8_t seq_profile; - - /** \brief Level Setting of current operation point. - * value range [0..23]. - */ - uint8_t seq_level_idx; - - /** \brief Tier Setting of current operation point. - * value range [0..1]. - */ - uint8_t seq_tier; - - uint8_t reserved8b; - - /** \brief Period between intra_only frames. */ - uint32_t intra_period; - - /** \brief Period between I/P frames. - * For hierarchical structure, this is the anchor frame distance. - */ - uint32_t ip_period; - - /* \brief RC related fields. RC modes are set with VAConfigAttribRateControl. */ - /* For AV1, CBR implies HRD conformance and VBR implies no HRD conformance. */ - - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for CBR mode or - * initial max bitrate value for VBR mode in this sequence. - * i.e. if the encoder pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - - union { - struct { - /** \brief Still picture encoding, no inter frame referencing. */ - uint32_t still_picture : 1; - /** \brief Force using 128x128 or 64x64 Supper block */ - uint32_t use_128x128_superblock : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_filter_intra : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_intra_edge_filter : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_interintra_compound : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_masked_compound : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_warped_motion : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_dual_filter : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_order_hint : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_jnt_comp : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_ref_frame_mvs : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_superres : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_cdef : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_restoration : 1; - /** \brief Sepcify number of bits for every channel(Y, U or V). */ - uint32_t bit_depth_minus8 : 3; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t subsampling_x : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t subsampling_y : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t reserved_bits : 13; - } bits; - uint32_t value; - } seq_fields; - - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..7]. - */ - uint8_t order_hint_bits_minus_1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAEncSequenceParameterBufferAV1; - -#define VA_AV1_MAX_SEGMENTS 8 -#define VA_AV1_SEG_LVL_MAX 8 - -/** - * \brief Segment parameters - */ -typedef struct _VAEncSegParamAV1 { - union { - struct { - /** \brief Indicates if segmentation is enabled in the current frame. - * If disabled, all the below parameters in the structure should - * be set to 0, and ignored by driver. - */ - uint8_t segmentation_enabled : 1; - - /** - * When segmentation_enabled equals 1 and segment_number > 0, - * this parameter equals 1 indicates the segmentation map may - * come from application, and that "Segment map data buffer" - * should be provided with populated segment_id. If equals 0, - * segmentation map should be inherited from a reference frame - * (specified by \c primary_ref_frame). When segmentation_enabled or - * segment_number equals 0, this parameter should be set to 0 - * and ignored by driver. - */ - uint8_t segmentation_update_map : 1; - /** - * When segmentation_update_map equals 1, this parameter equaling 1 - * indicates segment id per block will be determined either from - * reference frame or from app. Equaling 0 means segment id per block - * will come from app. When segmentation_temporal_update equals 0, - * this parameter should be set to 0 and ignored by driver. - */ - uint8_t segmentation_temporal_update : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint8_t reserved : 5; - - } bits; - uint8_t value; - } seg_flags; - - /** - * If segmentation_enabled equals 1, this parameter indicates - * the number of segments conveyed through VAAPI. In this case, - * if segment_number equals 0, it will force the driver to determine - * how many segments would be created as well as the segmentation map - * to be generated. Also the driver shall write the segmentation_params() - * syntax in the uncompressed header at \c bit_offset_segmentation (back-annotation). - * In application, the rest parameters in this structure should be all - * set to 0 and ignored by driver. And app should NOT send the - * "Segment map data buffer". In packed uncompressed header - * bitstream, app should write syntax element segmentation_enabled - * as 0 and segmentation_params() should be only 1-bit-long. - * If segment_number > 0, and segmentation_update_map = 1, app should provide - * the "Segment map data buffer" and populate the rest of the - * current data structure. And that underline encoder would honor - * the segmentation parameters feature_data[0..segment_number-1][] - * and feature_mask[0..segment_number-1], etc. - * Value range [0..8]. - */ - uint8_t segment_number; - - /** \brief segment parameters. - * feature_data[][] is equivalent to variable FeatureData[][] in spec, - * which is after clip3() operation. - * Clip3(x, y, z) = (z y)? y : z); - * The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = { - * 255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, - * MAX_LOOP_FILTER, 7, 0, 0 } - */ - int16_t feature_data[VA_AV1_MAX_SEGMENTS][VA_AV1_SEG_LVL_MAX]; - - /** \brief Bit field to indicate each feature is enabled or not per - * segment_id. Each bit is the feature_id. - */ - uint8_t feature_mask[VA_AV1_MAX_SEGMENTS]; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSegParamAV1; - -/** - * \brief Segment map data buffer. - * - * This buffer is optional depending on the value of av1_segments.segmentation_enabled. - * If av1_segments.segmentation_enabled in the picture parameters equals 1, - * and RateControlMethod is not CQP and this surface is not provided by App, - * the encoder will determine the per block segmentation map. In this case, - * App should not provide the segmentation parameter data structure - * in frame header as well. If av1_segments.segmentation_enabled equals 1 - * and the segmentation map buffer is provided, app should embed the - * segmentation info in frame header, populate the VAEncSegParamAV1 structure with - * #VAEncMacroblockMapBufferType and the driver as well as the underline encoder - * should honor what is given by the app. - */ -typedef struct _VAEncSegMapBufferAV1 { - /** \brief Segment map data size. */ - uint32_t segmentMapDataSize; - - /** - * \brief Segment map. - * Size of this map is indicated by \ref segmentMapDataSize and each element - * in this map contains the segment id of a particular block. - * The element is indexed by raster scan order. - * The value of each entry should be in the range [0..7], inclusive. - */ - uint8_t *pSegmentMap; -} VAEncSegMapBufferAV1; - -typedef enum { - /** \brief Identity transformation, 0-parameter. */ - VAAV1EncTransformationIdentity = 0, - /** \brief Translational motion, 2-parameter. */ - VAAV1EncTransformationTranslation = 1, - /** \brief Simplified affine with rotation + zoom only, 4-parameter. */ - VAAV1EncTransformationRotzoom = 2, - /** \brief Affine, 6-parameter. */ - VAAV1EncTransformationAffine = 3, - /** \brief Transformation count. */ - VAAV1EncTransformationCount -} VAEncTransformationTypeAV1; - -typedef struct _VAEncWarpedMotionParamsAV1{ - - /** \brief Specify the type of warped motion. */ - VAEncTransformationTypeAV1 wmtype; - - /** \brief Specify warp motion parameters. - * wm.wmmat[] corresponds to gm_params[][] in spec. - * Details in AV1 spec section 5.9.24 or refer to libaom code - * https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c. - */ - int32_t wmmat[8]; - - /** \brief Valid or invalid on affine set. */ - uint8_t invalid; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VAEncWarpedMotionParamsAV1; - -/** - * \brief Reference frame control. - * - * Suggest which frame to be used as reference along with preferred search order. - * - * search_idx#: index into ref_frame_idx[] to indicate that frame will be included - * in the reference list if value in range [1..7]. Invalid when value is 0. - * The order of the search_idx# indicates the preferred search order. - * - */ -typedef union { - struct - { - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx0 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx1 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx2 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx3 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx4 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx5 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx6 : 3; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t Reserved : 11; - } fields; - uint32_t value; -} VARefFrameCtrlAV1; - -/** - * \brief AV1 Encoding Picture Parameter Buffer Structure. - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferAV1 -{ - /** \brief AV1 encoder may support SupRes and dynamic scaling function. - * For SupRes, underline encoder is responsible to do downscaling. - * For dynamic scaling, app should provide the scaled raw source. - */ - /** \brief Raw source frame width in pixels. */ - uint16_t frame_width_minus_1; - /** \brief Raw source frame height in pixels. */ - uint16_t frame_height_minus_1; - - /** \brief Surface to store reconstructed frame, not used for enc only case. */ - VASurfaceID reconstructed_frame; - - /** \brief Buffer to store coded data. */ - VABufferID coded_buf; - - /** \brief Reference frame buffers. - * Each entry of the array specifies the surface index of the picture - * that is referred by current picture or will be referred by any future - * picture. The valid entries take value from 0 to 127, inclusive. - * Non-valid entries, those do not point to pictures which are referred - * by current picture or future pictures, should take value 0xFF. - * Other values are not allowed. - * - * Application should update this array based on the refreshing - * information expected. - */ - VASurfaceID reference_frames[8]; - - /** \brief Reference index list. - * Contains a list of indices into refernce_frames[]. - * Indice with refernce frames range: [LAST_FRAME - LAST_FRAME, - * LAST2_FRAME - LAST_FRAME, ..., ALTREF2_FRAME - LAST_FRAME]. - * #define LAST_FRAME 1 - * #define LAST2_FRAME 2 - * #define LAST3_FRAME 3 - * #define GOLDEN_FRAME 4 - * #define BWDREF_FRAME 5 - * #define ALTREF_FRAME 6 - * #define ALTREF2_FRAME 7 - * value range [0..7]. - */ - uint8_t ref_frame_idx[7]; - - uint8_t reserved8bits0; - - /** \brief primary reference frame. - * Index into reference_frames[] - * segment id map, context table, etc. come from the reference - * frame pointed by this index. - * value range [0..7]. - */ - uint8_t primary_ref_frame; - - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint8_t order_hint; - - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint8_t refresh_frame_flags; - - uint8_t reserved8bits1; - - /** \brief Suggest which frames to be used as references. - * see struct #VARefFrameCtrl for details. - */ - VARefFrameCtrlAV1 ref_frame_ctrl_l0; - VARefFrameCtrlAV1 ref_frame_ctrl_l1; - - union { - struct { - /** \brief frame type. - * 0: key_frame. - * 1: inter_frame. - * 2: intra_only frame. - * 3: switch_frame (app needs to set error_resilient_mode = 1, - * refresh_frame_flags, etc approperately.). - */ - uint32_t frame_type : 2; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t error_resilient_mode : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t disable_cdf_update : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t use_superres : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t allow_high_precision_mv : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t use_ref_frame_mvs : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t disable_frame_end_update_cdf : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t reduced_tx_set : 1; - - /** \brief For single tile group, app may choose to use one frame obu - * to replace one frame header obu + one tile group obu. - * Invalid if num_tile_groups_minus1 > 0. - */ - uint32_t enable_frame_obu : 1; - - /** \brief Indicate the current frame will be used as a long term reference. */ - uint32_t long_term_reference : 1; - /** \brief If the encoded frame will not be referred by other frames, - * its recon may not be generated in order to save memory bandwidth. - */ - uint32_t disable_frame_recon : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t allow_intrabc : 1; - /** \brief Equal to 1 indicates that intra blocks may use palette encoding. - * Otherwise disable palette encoding. - */ - uint32_t palette_mode_enable : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t reserved : 18; - } bits; - uint32_t value; - } picture_flags; - - /** \brief Block size for each Segment ID in Segment Map. - * 0: 16x16 block size, default value; - * 1: 32x32 block size; - * 2: 64x64 block size; - * 3: 8x8 block size. - */ - uint8_t seg_id_block_size; - - /** \brief Number of tile groups minus 1. - * value range [0..255]. - */ - uint8_t num_tile_groups_minus1; - - /** \brief Temporal id of the frame.*/ - uint8_t temporal_id; - - /** \brief Deblock filter parameters. - * value range [0..63]. - */ - uint8_t filter_level[2]; - uint8_t filter_level_u; - uint8_t filter_level_v; - - union { - struct { - /** \brief Sharpness level for deblock filter. - * value range [0..7]. - */ - uint8_t sharpness_level : 3; - uint8_t mode_ref_delta_enabled : 1; - uint8_t mode_ref_delta_update : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint8_t reserved : 3; - } bits; - uint8_t value; - } loop_filter_flags; - - /** \brief Super resolution scale denominator. - * value range [9..16]. - */ - uint8_t superres_scale_denominator; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint8_t interpolation_filter; - - /** \brief Loop filter ref deltas. - * value range [-63..63]. - */ - int8_t ref_deltas[8]; - - /** \brief Loop filter mode deltas. - * value range [-63..63]. - */ - int8_t mode_deltas[2]; - - /** \brief Quantization params. */ - uint8_t base_qindex; - int8_t y_dc_delta_q; - int8_t u_dc_delta_q; - int8_t u_ac_delta_q; - int8_t v_dc_delta_q; - int8_t v_ac_delta_q; - - /** \brief Min value for base q index for BRC. - * value range [1..255]. - */ - uint8_t min_base_qindex; - - /** \brief Max value for base q index for BRC. - * value range [1..255]. - */ - uint8_t max_base_qindex; - - /** \brief Quantization matrix. */ - union { - struct { - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint16_t using_qmatrix : 1; - /** \brief Following parameters only valid when using_qmatrix == 1. */ - uint16_t qm_y : 4; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint16_t qm_u : 4; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint16_t qm_v : 4; - /** \brief Reserved bytes for future use, must be zero. */ - uint16_t reserved : 3; - } bits; - uint16_t value; - } qmatrix_flags; - - uint16_t reserved16bits1; - - union { - struct { - /** \brief Specify whether quantizer index delta values are present. - * value range [0..1]. */ - uint32_t delta_q_present : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. */ - uint32_t delta_q_res : 2; - - /** \brief Specify whether loop filter delta values are present. - * value range [0..1]. */ - uint32_t delta_lf_present : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. */ - uint32_t delta_lf_res : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. */ - uint32_t delta_lf_multi : 1; - - /** \brief Corresponds to AV1 syntax element of the same name. - * 0: ONLY_4X4; - * 1: TX_MODE_LARGEST; - * 2: TX_MODE_SELECT; - * 3: Invalid. - */ - uint32_t tx_mode : 2; - - /** \brief Indicates whether to use single or compound reference prediction. - * 0: SINGLE_REFERENCE; - * 1: COMPOUND_REFERENCE; - * 2: REFERENCE_MODE_SELECT. - * 3: Invalid. - * - * Value 2 means driver make decision to use single reference or compound reference. - */ - uint32_t reference_mode : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint32_t skip_mode_present : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t reserved : 20; - } bits; - uint32_t value; - } mode_control_flags; - - /** \brief Segmentation parameters. */ - VAEncSegParamAV1 segments; - - /** \brief Number of tile columns. */ - uint8_t tile_cols; - /** \brief Number of tile rows. */ - uint8_t tile_rows; - - uint16_t reserved16bits2; - - /** \brief The last tile column or row size needs to be derived. */ - uint16_t width_in_sbs_minus_1[63]; - uint16_t height_in_sbs_minus_1[63]; - - /** \brief specify which tile to use for the CDF update. - * value range [0..127]*/ - uint16_t context_update_tile_id; - - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. - */ - uint8_t cdef_damping_minus_3; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. - */ - uint8_t cdef_bits; - /** \brief CDEF Y strengths. - * value range [0..63]*/ - uint8_t cdef_y_strengths[8]; - /** \brief CDEF UV strengths. - * value range [0..63]*/ - uint8_t cdef_uv_strengths[8]; - - union { - struct { - /** \brief Restoration type for Y frame. - * value range [0..3]. - */ - uint16_t yframe_restoration_type : 2; - /** \brief Restoration type for Cb frame. - * value range [0..3]. - */ - uint16_t cbframe_restoration_type : 2; - /** \brief Restoration type for Cr frame. - * value range [0..3]. - */ - uint16_t crframe_restoration_type : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..2]. - */ - uint16_t lr_unit_shift : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint16_t lr_uv_shift : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint16_t reserved : 7; - } bits; - uint16_t value; - } loop_restoration_flags; - - /** \brief Global motion. */ - VAEncWarpedMotionParamsAV1 wm[7]; - - /** - * Offset in bits for syntax base_q_idx in packed frame header bit stream - * from the start of the packed header data. - * In BRC mode, this parameter should be set and driver will update base_q_idx in - * uncompressed header according to this offset. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_qindex; - /** - * Offset in bits for syntax segmentation_enabled of frame header OBU - * in packed frame header bit stream from the start of the packed header data. - * Valid only in auto segmentation mode. Other than that, this parameter - * should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_segmentation; - /** - * Offset in bits for syntax loop_filter_params() in packed frame - * header bit stream from the start of the packed header data. - * In BRC mode, this parameter should be set and driver will update filter params - * in packed frame header according to this offset. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_loopfilter_params; - /** - * In BRC mode, underline encoder should generate the approperiate - * CDEF values and write back into uncompressed header. And app - * should provide default CDEF values in packed header. This parameter - * should point to the starting bit of cdef_params() syntax structure - * in packed header. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_cdef_params; - /** - * In BRC mode, this parameter indicates the actual bit usage of - * cdef_params() syntax structure in packed uncompressed header. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t size_in_bits_cdef_params; - - /** - * Offset in bytes for syntax obu_size of frame header OBU in packed - * frame header bit stream from the start of the packed header. The frame - * header OBU size depends on the encoded tile sizes. It applies to both - * Frame Header OBU and Frame OBU if obu_size needs to be updated by - * underline encoder. Otherwise, app can set it to 0 and ignored by driver. - * - * In BRC mode, obu_size needs to be updated and this parameter should be set. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t byte_offset_frame_hdr_obu_size; - - /** - * Frame header OBU bit stream size in bits. The frame header obu packed bit - * stream contains an obu header, a 4-byte long obu_size field, frame_header_obu() - * syntax chain, and a trailing bit if not inside a frame obu. If \c enable_frame_obu == 1, - * the value should include and up to the last bit of frame_header_obu() and - * excluding the bits generated by byte_alignment(). If \c enable_frame_obu == 0, - * the value should include and up to the trailing bit at the end of the frame - * header obu. The size will be used by encoder to calculate the final frame - * header size after bit shifting due to auto segmentation. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t size_in_bits_frame_hdr_obu; - - /** \brief Tile Group OBU header */ - union { - struct { - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint8_t obu_extension_flag : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint8_t obu_has_size_field : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..7]. - */ - uint8_t temporal_id : 3; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..2]. - */ - uint8_t spatial_id : 2; - /** \brief Reserved bytes for future use, must be zero. */ - uint8_t reserved : 1; - } bits; - uint8_t value; - } tile_group_obu_hdr_info; - - /** \brief The number of frames skipped prior to the current frame. - * It includes only the skipped frames that were not counted before. - * App may generate the "show_existing_frame" short frame header OBUs - * and send to driver with the next frame. Default value 0. - */ - uint8_t number_skip_frames; - - uint16_t reserved16bits3; - - /** \brief Indicates the application forced frame size change in bytes. - * When the value is positive, the frame size is reduced. Otherwise, the frame - * size increases. The parameter can be used when application skips frames with - * setting of NumSkipFrames. And application can also use it for other scenarios - * such as inserting "show_existing_frame" at very end of the sequence. - */ - int32_t skip_frames_reduced_size; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAEncPictureParameterBufferAV1; - -/** - * \brief Tile Group Buffer. - */ -typedef struct _VAEncTileGroupBufferAV1 { - /** \brief Tile group start location. - * The position of the first tile in current tile group - * in raster scan order across the frame. - * value range [0..127]. - */ - uint8_t tg_start; - /** \brief Tile group end location. - * The position of the last tile in current tile group - * in raster scan order across the frame. - * value range [0..127]. - */ - uint8_t tg_end; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncTileGroupBufferAV1; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_AV1_H */ diff --git a/prebuilts/x86/include/va/va_enc_h264.h b/prebuilts/x86/include/va/va_enc_h264.h deleted file mode 100644 index 46a6704..0000000 --- a/prebuilts/x86/include/va/va_enc_h264.h +++ /dev/null @@ -1,659 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_h264.h - * \brief The H.264 encoding API - * - * This file contains the \ref api_enc_h264 "H.264 encoding API". - */ - -#ifndef VA_ENC_H264_H -#define VA_ENC_H264_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_h264 H.264 encoding API - * - * @{ - */ - -/** - * @name Picture flags - * - * Those flags flags are meant to signal when a picture marks the end - * of a sequence, a stream, or even both at once. - * - * @{ - */ -/** - * \brief Marks the last picture in the sequence. - * - * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame. - */ -#define H264_LAST_PICTURE_EOSEQ 0x01 -/** - * \brief Marks the last picture in the stream. - * - * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame. - */ -#define H264_LAST_PICTURE_EOSTREAM 0x02 -/**@}*/ - -/** - * \brief Packed header types specific to H.264 encoding. - * - * Types of packed headers generally used for H.264 encoding. Each - * associated packed header data buffer shall contain the start code - * prefix 0x000001 followed by the complete NAL unit, thus also - * including the \c nal_unit_type. - * - * Note: the start code prefix can contain an arbitrary number of leading - * zeros. The driver will skip them for emulation prevention bytes insertion, - * if necessary. - */ -typedef enum { - /** - * \brief Packed Sequence Parameter Set (SPS). - * - * The corresponding packed header data buffer shall contain the - * complete seq_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 7. - */ - VAEncPackedHeaderH264_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - * The corresponding packed header data buffer shall contain the - * complete pic_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 8. - */ - VAEncPackedHeaderH264_PPS = VAEncPackedHeaderPicture, - /** - * \brief Packed slice header. - * - * The corresponding packed header data buffer shall contain the - * \c slice_header() syntax element only, along with any start - * code prefix and NAL unit type preceeding it. i.e. this means - * that the buffer does not contain any of the \c slice_data() or - * the \c rbsp_slice_trailing_bits(). - * - * Note: packed \c nal_unit_type shall be equal to 1 (non-IDR - * picture), or 5 (IDR picture). - */ - VAEncPackedHeaderH264_Slice = VAEncPackedHeaderSlice, - /** - * \brief Packed Supplemental Enhancement Information (SEI). - * - * The corresponding packed header data buffer shall contain the - * complete sei_rbsp() syntax element, thus including several - * sei_message() elements if necessary. - * - * Note: packed \c nal_unit_type shall be equal to 6. - * - * @deprecated - * This is a deprecated packed header flag, All applications can use - * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed - * SEI header data buffer to the driver - */ - VAEncPackedHeaderH264_SEI va_deprecated_enum = (0x80000000 | 1), -} VAEncPackedHeaderTypeH264; - -/** - * \brief Sequence parameter for H.264 encoding in baseline, main & high - * profiles. - * - * This structure holds information for \c seq_parameter_set_data() as - * defined by the H.264 specification. - * - * If packed sequence headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c seq_scaling_matrix_present_flag is set to \c 1, then a - * #VAIQMatrixBufferH264 buffer shall also be provided within the same - * \c vaRenderPicture() call as this sequence parameter buffer. - */ -typedef struct _VAEncSequenceParameterBufferH264 { - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t seq_parameter_set_id; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t level_idc; - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between IDR frames. */ - uint32_t intra_idr_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t max_num_ref_frames; - /** \brief Picture width in macroblocks. */ - uint16_t picture_width_in_mbs; - /** \brief Picture height in macroblocks. */ - uint16_t picture_height_in_mbs; - - union { - struct { - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t chroma_format_idc : 2; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_mbs_only_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t mb_adaptive_frame_field_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t seq_scaling_matrix_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t direct_8x8_inference_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t log2_max_frame_num_minus4 : 4; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t pic_order_cnt_type : 2; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t log2_max_pic_order_cnt_lsb_minus4 : 4; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t delta_pic_order_always_zero_flag : 1; - } bits; - uint32_t value; - } seq_fields; - - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t bit_depth_luma_minus8; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t bit_depth_chroma_minus8; - - /** if pic_order_cnt_type == 1 */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t num_ref_frames_in_pic_order_cnt_cycle; - /** \brief Same as the H.264 bitstream syntax element. */ - int32_t offset_for_non_ref_pic; - /** \brief Same as the H.264 bitstream syntax element. */ - int32_t offset_for_top_to_bottom_field; - /** \brief Same as the H.264 bitstream syntax element. */ - int32_t offset_for_ref_frame[256]; - /**@}*/ - - /** @name Cropping (optional) */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t frame_cropping_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_left_offset; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_right_offset; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_top_offset; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_bottom_offset; - /**@}*/ - - /** @name VUI parameters (optional) */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t vui_parameters_present_flag; - union { - struct { - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t aspect_ratio_info_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t timing_info_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t bitstream_restriction_flag : 1; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_horizontal : 5; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_vertical : 5; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t fixed_frame_rate_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t low_delay_hrd_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t motion_vectors_over_pic_boundaries_flag: 1; - /** \brief Reserved for future use, must be zero */ - uint32_t reserved : 16; - } bits; - uint32_t value; - } vui_fields; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t aspect_ratio_idc; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t sar_width; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t sar_height; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t num_units_in_tick; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t time_scale; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - /**@}*/ -} VAEncSequenceParameterBufferH264; - -/** - * \brief Picture parameter for H.264 encoding in baseline, main & high - * profiles. - * - * This structure holds information for \c pic_parameter_set_rbsp() as - * defined by the H.264 specification. - * - * If packed picture headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c pic_scaling_matrix_present_flag is set to \c 1, then a - * #VAIQMatrixBufferH264 buffer shall also be provided within the same - * \c vaRenderPicture() call as this picture parameter buffer. - */ -typedef struct _VAEncPictureParameterBufferH264 { - /** - * \brief Information about the picture to be encoded. - * - * See #VAPictureH264 for further description of each field. - * Note that CurrPic.picture_id represents the reconstructed - * (decoded) picture. User provides a scratch VA surface ID here. - */ - VAPictureH264 CurrPic; - /** - * \brief Decoded Picture Buffer (DPB). - * - * This array represents the list of reconstructed (decoded) - * frames used as reference. It is important to keep track of - * reconstructed frames so that they can be used later on as - * reference for P or B-frames encoding. - */ - VAPictureH264 ReferenceFrames[16]; - /** - * \brief Output encoded bitstream. - * - * \ref coded_buf has type #VAEncCodedBufferType. It should be - * large enough to hold the compressed NAL slice and possibly SPS - * and PPS NAL units. - */ - VABufferID coded_buf; - - /** \brief The picture parameter set referred to in the slice header. */ - uint8_t pic_parameter_set_id; - /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */ - uint8_t seq_parameter_set_id; - - /** - * \brief OR'd flags describing whether the picture is the last one or not. - * - * This fields holds 0 if the picture to be encoded is not the last - * one in the stream or sequence. Otherwise, it is a combination of - * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM. - */ - uint8_t last_picture; - - /** \brief The picture identifier. - * Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive. - */ - uint16_t frame_num; - - /** \brief \c pic_init_qp_minus26 + 26. */ - uint8_t pic_init_qp; - /** \brief Maximum reference index for reference picture list 0. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** \brief Maximum reference index for reference picture list 1. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l1_active_minus1; - - /** \brief Range: -12 to 12, inclusive. */ - int8_t chroma_qp_index_offset; - /** \brief Range: -12 to 12, inclusive. */ - int8_t second_chroma_qp_index_offset; - - union { - struct { - /** \brief Is picture an IDR picture? */ - uint32_t idr_pic_flag : 1; - /** \brief Is picture a reference picture? */ - uint32_t reference_pic_flag : 2; - /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */ - uint32_t entropy_coding_mode_flag : 1; - /** \brief Is weighted prediction applied to P slices? */ - uint32_t weighted_pred_flag : 1; - /** \brief Range: 0 to 2, inclusive. */ - uint32_t weighted_bipred_idc : 2; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t constrained_intra_pred_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t transform_8x8_mode_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t deblocking_filter_control_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t redundant_pic_cnt_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t pic_order_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t pic_scaling_matrix_present_flag : 1; - } bits; - uint32_t value; - } pic_fields; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferH264; - -typedef struct _VAEncQPBufferH264 { - /* - * \brief This structure holds QP per 16x16 macroblock. Buffer size shall be - * sufficient to fit the slice or frame to be encoded depending on if it is a - * slice level or frame level encoding. - */ - uint8_t qp; -} VAEncQPBufferH264; - -/** - * \brief Slice parameter for H.264 encoding in baseline, main & high profiles. - * - * This structure holds information for \c - * slice_layer_without_partitioning_rbsp() as defined by the H.264 - * specification. - * - * If packed slice headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSlice ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If per-macroblock encoder configuration is needed, \c macroblock_info - * references a buffer of type #VAEncMacroblockParameterBufferH264. This - * buffer is not passed to vaRenderPicture() and it can be re-used - * without re-allocating the whole buffer. - */ -typedef struct _VAEncSliceParameterBufferH264 { - /** \brief Starting MB address for this slice. */ - uint32_t macroblock_address; - /** \brief Number of macroblocks in this slice. */ - uint32_t num_macroblocks; - /** - * \brief Per-MB encoder configuration buffer, or \c VA_INVALID_ID. - * - * If per-MB encoder configuration is needed, then \ref macroblock_info - * references a buffer of type #VAEncMacroblockParameterBufferH264 - * (\c VAEncMacroblockParameterBufferType). Otherwise, buffer id - * is set to \c VA_INVALID_ID and per-MB configuration is derived - * from this slice parameter. - * - * The \c macroblock_info buffer must hold \ref num_macroblocks - * elements. - */ - VABufferID macroblock_info; - /** \brief Slice type. - * Range: 0..2, 5..7, i.e. no switching slices. - */ - uint8_t slice_type; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t pic_parameter_set_id; - /** \brief Same as the H.264 bitstream syntax element. */ - uint16_t idr_pic_id; - - /** @name If pic_order_cnt_type == 0 */ - /**@{*/ - /** \brief The picture order count modulo MaxPicOrderCntLsb. */ - uint16_t pic_order_cnt_lsb; - /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */ - int32_t delta_pic_order_cnt_bottom; - /**@}*/ - /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */ - /**@{*/ - /** \brief [0]: top, [1]: bottom. */ - int32_t delta_pic_order_cnt[2]; - /**@}*/ - - /** @name If slice_type == B */ - /**@{*/ - uint8_t direct_spatial_mv_pred_flag; - /**@}*/ - - /** @name If slice_type == P */ - /**@{*/ - /** \brief Specifies if - * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or - * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are - * overriden by the values for this slice. - */ - uint8_t num_ref_idx_active_override_flag; - /** \brief Maximum reference index for reference picture list 0. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** \brief Maximum reference index for reference picture list 1. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l1_active_minus1; - /** \brief Reference picture list 0 (for P slices). */ - VAPictureH264 RefPicList0[32]; - /** \brief Reference picture list 1 (for B slices). */ - VAPictureH264 RefPicList1[32]; - /**@}*/ - - /** @name pred_weight_table() */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t luma_log2_weight_denom; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t chroma_log2_weight_denom; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t luma_weight_l0_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_weight_l0[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_offset_l0[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t chroma_weight_l0_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_weight_l0[32][2]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_offset_l0[32][2]; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t luma_weight_l1_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_weight_l1[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_offset_l1[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t chroma_weight_l1_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_weight_l1[32][2]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_offset_l1[32][2]; - /**@}*/ - - /** \brief Range: 0 to 2, inclusive. */ - uint8_t cabac_init_idc; - /** \brief Same as the H.264 bitstream syntax element. */ - int8_t slice_qp_delta; - /** @name If deblocking_filter_control_present_flag */ - /**@{*/ - /** \brief Range: 0 to 2, inclusive. */ - uint8_t disable_deblocking_filter_idc; - /** \brief Same as the H.264 bitstream syntax element. */ - int8_t slice_alpha_c0_offset_div2; - /** \brief Same as the H.264 bitstream syntax element. */ - int8_t slice_beta_offset_div2; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - /**@}*/ -} VAEncSliceParameterBufferH264; - -/** - * @name Macroblock neighbour availability bits - * - * \anchor api_enc_h264_mb_pred_avail_bits - * Definitions for macroblock neighbour availability bits used in - * intra prediction mode (non MBAFF only). - * - * @{ - */ -/** \brief References macroblock in the top-left corner. */ -#define VA_MB_PRED_AVAIL_TOP_LEFT (1 << 2) -/** \brief References macroblock above the current macroblock. */ -#define VA_MB_PRED_AVAIL_TOP (1 << 4) -/** \brief References macroblock in the top-right corner. */ -#define VA_MB_PRED_AVAIL_TOP_RIGHT (1 << 3) -/** \brief References macroblock on the left of the current macroblock. */ -#define VA_MB_PRED_AVAIL_LEFT (1 << 6) -/**@}*/ - -/** - * \brief Macroblock parameter for H.264 encoding in baseline, main & high - * profiles. - * - * This structure holds per-macroblock information. The buffer must be - * allocated with as many elements (macroblocks) as necessary to fit - * the slice to be encoded. Besides, the per-macroblock records must - * be written in a strict raster order and with no gap. i.e. every - * macroblock, regardless of its type, shall have an entry. - */ -typedef struct _VAEncMacroblockParameterBufferH264 { - /** - * \brief Quantization parameter. - * - * Requested quantization parameter. Range: 0 to 51, inclusive. - * If \ref qp is set to 0xff, then the actual value is derived - * from the slice-level value: \c pic_init_qp + \c slice_qp_delta. - */ - uint8_t qp; - - union { - /** @name Data for intra macroblock */ - /**@{*/ - union { - struct { - /** - * \brief Flag specified to override MB neighbour - * availability bits from VME stage. - * - * This flag specifies that macroblock neighbour - * availability bits from the VME stage are overriden - * by the \ref pred_avail_flags hereunder. - */ - uint32_t pred_avail_override_flag : 1; - /** - * \brief Bitwise representation of which macroblocks - * are available for intra prediction. - * - * If the slice is intra-coded, this field represents - * the macroblocks available for intra prediction. - * See \ref api_enc_h264_mb_pred_avail_bits - * "macroblock neighbour availability" bit definitions. - */ - uint32_t pred_avail_flags : 8; - } bits; - uint32_t value; - } intra_fields; - /**@}*/ - - /** @name Data for inter macroblock */ - /**@{*/ - union { - struct { - uint32_t reserved; - } bits; - uint32_t value; - } inter_fields; - /**@}*/ - } info; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMacroblockParameterBufferH264; - -/** - * \brief MB partition modes and 1/2 1/4 motion search configuration - * - * Specifies MB partition modes that are disabled. Specifies Half-pel - * mode and Quarter-pel mode searching - */ -typedef struct _VAEncMiscParameterSubMbPartPelH264 { - uint32_t disable_inter_sub_mb_partition; - union { - struct { - uint32_t disable_16x16_inter_mb_partition : 1; - uint32_t disable_16x8_inter_mb_partition : 1; - uint32_t disable_8x16_inter_mb_partition : 1; - uint32_t disable_8x8_inter_mb_partition : 1; - uint32_t disable_8x4_inter_mb_partition : 1; - uint32_t disable_4x8_inter_mb_partition : 1; - uint32_t disable_4x4_inter_mb_partition : 1; - uint32_t reserved : 1; - } bits; - uint8_t value; - } inter_sub_mb_partition_mask; - - /** - * \brief Precison of motion search - * 0:Integer mode searching - * 1:Half-pel mode searching - * 2:Reserved - * 3:Quarter-pel mode searching - */ - uint32_t enable_sub_pel_mode; - uint8_t sub_pel_mode; - uint8_t reserved[3]; -} VAEncMiscParameterSubMbPartPelH264; -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_H264_H */ diff --git a/prebuilts/x86/include/va/va_enc_hevc.h b/prebuilts/x86/include/va/va_enc_hevc.h deleted file mode 100644 index 96b5ae5..0000000 --- a/prebuilts/x86/include/va/va_enc_hevc.h +++ /dev/null @@ -1,958 +0,0 @@ -/* - * Copyright (c) 2007-2014 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_hevc.h - * \brief The HEVC encoding API - * - * This file contains the \ref api_enc_hevc "HEVC encoding API". - * - */ - -#ifndef VA_ENC_HEVC_H -#define VA_ENC_HEVC_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_enc_hevc HEVC encoding API - * - * @{ - */ - -/** Attribute value for VAConfigAttribEncHEVCFeatures. - * - * This attribute decribes the supported features of an HEVC/H.265 - * encoder configuration. - * - * All of the field values in this attribute are VA_FEATURE_* values, - * indicating support for the corresponding feature. - */ -typedef union VAConfigAttribValEncHEVCFeatures { - struct { - /** Separate colour planes. - * - * Allows setting separate_colour_plane_flag in the SPS. - */ - uint32_t separate_colour_planes : 2; - /** Scaling lists. - * - * Allows scaling_list() elements to be present in both the SPS - * and the PPS. The decoded form of the scaling lists must also - * be supplied in a VAQMatrixBufferHEVC buffer when scaling lists - * are enabled. - */ - uint32_t scaling_lists : 2; - /** Asymmetric motion partitions. - * - * Allows setting amp_enabled_flag in the SPS. - */ - uint32_t amp : 2; - /** Sample adaptive offset filter. - * - * Allows setting slice_sao_luma_flag and slice_sao_chroma_flag - * in slice headers. - */ - uint32_t sao : 2; - /** PCM sample blocks. - * - * Allows setting pcm_enabled_flag in the SPS. When enabled - * PCM parameters must be supplied with the sequence parameters, - * including block sizes which may be further constrained as - * noted in the VAConfigAttribEncHEVCBlockSizes attribute. - */ - uint32_t pcm : 2; - /** Temporal motion vector Prediction. - * - * Allows setting slice_temporal_mvp_enabled_flag in slice - * headers. - */ - uint32_t temporal_mvp : 2; - /** Strong intra smoothing. - * - * Allows setting strong_intra_smoothing_enabled_flag in the SPS. - */ - uint32_t strong_intra_smoothing : 2; - /** Dependent slices. - * - * Allows setting dependent_slice_segment_flag in slice headers. - */ - uint32_t dependent_slices : 2; - /** Sign data hiding. - * - * Allows setting sign_data_hiding_enable_flag in the PPS. - */ - uint32_t sign_data_hiding : 2; - /** Constrained intra prediction. - * - * Allows setting constrained_intra_pred_flag in the PPS. - */ - uint32_t constrained_intra_pred : 2; - /** Transform skipping. - * - * Allows setting transform_skip_enabled_flag in the PPS. - */ - uint32_t transform_skip : 2; - /** QP delta within coding units. - * - * Allows setting cu_qp_delta_enabled_flag in the PPS. - */ - uint32_t cu_qp_delta : 2; - /** Weighted prediction. - * - * Allows setting weighted_pred_flag and weighted_bipred_flag in - * the PPS. The pred_weight_table() data must be supplied with - * every slice header when weighted prediction is enabled. - */ - uint32_t weighted_prediction : 2; - /** Transform and quantisation bypass. - * - * Allows setting transquant_bypass_enabled_flag in the PPS. - */ - uint32_t transquant_bypass : 2; - /** Deblocking filter disable. - * - * Allows setting slice_deblocking_filter_disabled_flag. - */ - uint32_t deblocking_filter_disable : 2; - /* Reserved,should not be used, avoid conflict with VA_ATTRIB_NOT_SUPPORTED. */ - uint32_t reserved : 2; - } bits; - uint32_t value; -} VAConfigAttribValEncHEVCFeatures; - -/** Attribute value for VAConfigAttribEncHEVCBlockSizes. - * - * This attribute describes the supported coding tree and transform block - * sizes of an HEVC/H.265 encoder configuration - */ -typedef union VAConfigAttribValEncHEVCBlockSizes { - struct { - /** Largest supported size of coding tree blocks. - * - * CtbLog2SizeY must not be larger than this. - */ - uint32_t log2_max_coding_tree_block_size_minus3 : 2; - /** Smallest supported size of coding tree blocks. - * - * CtbLog2SizeY must not be smaller than this. - * - * This may be the same as the maximum size, indicating that only - * one CTB size is supported. - */ - uint32_t log2_min_coding_tree_block_size_minus3 : 2; - - /** Smallest supported size of luma coding blocks. - * - * MinCbLog2SizeY must not be smaller than this. - */ - uint32_t log2_min_luma_coding_block_size_minus3 : 2; - - /** Largest supported size of luma transform blocks. - * - * MaxTbLog2SizeY must not be larger than this. - */ - uint32_t log2_max_luma_transform_block_size_minus2 : 2; - /** Smallest supported size of luma transform blocks. - * - * MinTbLog2SizeY must not be smaller than this. - */ - uint32_t log2_min_luma_transform_block_size_minus2 : 2; - - /** Largest supported transform hierarchy depth in inter - * coding units. - * - * max_transform_hierarchy_depth_inter must not be larger - * than this. - */ - uint32_t max_max_transform_hierarchy_depth_inter : 2; - /** Smallest supported transform hierarchy depth in inter - * coding units. - * - * max_transform_hierarchy_depth_inter must not be smaller - * than this. - */ - uint32_t min_max_transform_hierarchy_depth_inter : 2; - - /** Largest supported transform hierarchy depth in intra - * coding units. - * - * max_transform_hierarchy_depth_intra must not be larger - * than this. - */ - uint32_t max_max_transform_hierarchy_depth_intra : 2; - /** Smallest supported transform hierarchy depth in intra - * coding units. - * - * max_transform_hierarchy_depth_intra must not be smaller - * than this. - */ - uint32_t min_max_transform_hierarchy_depth_intra : 2; - - /** Largest supported size of PCM coding blocks. - * - * Log2MaxIpcmCbSizeY must not be larger than this. - */ - uint32_t log2_max_pcm_coding_block_size_minus3 : 2; - /** Smallest supported size of PCM coding blocks. - * - * Log2MinIpcmCbSizeY must not be smaller than this. - */ - uint32_t log2_min_pcm_coding_block_size_minus3 : 2; - - /** Reserved for future use. */ - uint32_t reserved : 10; - } bits; - uint32_t value; -} VAConfigAttribValEncHEVCBlockSizes; - -/** - * @name Picture flags - * - * Those flags flags are meant to signal when a picture marks the end - * of a sequence, a stream, or even both at once. - * - * @{ - */ -/** - * \brief Marks the last picture in the sequence. - * - * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame. - */ -#define HEVC_LAST_PICTURE_EOSEQ 0x01 -/** - * \brief Marks the last picture in the stream. - * - * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame. - */ -#define HEVC_LAST_PICTURE_EOSTREAM 0x02 -/**@}*/ - -/** - * \brief Packed header types specific to HEVC encoding. - * - * Types of packed headers generally used for HEVC encoding. Each - * associated packed header data buffer shall contain the start code - * prefix 0x000001 followed by the complete NAL unit, thus also - * including the \c nal_unit_type. - * - * Note: the start code prefix can contain an arbitrary number of leading - * zeros. The driver will skip them for emulation prevention bytes insertion, - * if necessary. - */ -typedef enum { - /** - * \brief Packed Video Parameter Set (VPS). - * - * The corresponding packed header data buffer shall contain the - * complete video_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 32. - */ - VAEncPackedHeaderHEVC_VPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Sequence Parameter Set (SPS). - * - * The corresponding packed header data buffer shall contain the - * complete seq_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 33. - */ - VAEncPackedHeaderHEVC_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - * The corresponding packed header data buffer shall contain the - * complete pic_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 34. - */ - VAEncPackedHeaderHEVC_PPS = VAEncPackedHeaderPicture, - /** - * \brief Packed slice header. - * - * The corresponding packed header data buffer shall contain the - * \c slice_header() syntax element only, along with any start - * code prefix and NAL unit type preceeding it. i.e. this means - * that the buffer does not contain any of the \c slice_data() or - * the \c rbsp_slice_trailing_bits(). - * - * Note: packed \c nal_unit_type shall be equal to 0 to 9 (non-IRAP - * picture), or 16 to 21 (IRAP picture). - */ - VAEncPackedHeaderHEVC_Slice = VAEncPackedHeaderSlice, - /** - * \brief Packed Supplemental Enhancement Information (SEI). - * - * The corresponding packed header data buffer shall contain the - * complete sei_rbsp() syntax element, thus including several - * sei_message() elements if necessary. - * - * Note: packed \c nal_unit_type shall be equal to 39 or 40. - * - * @deprecated - * This is a deprecated packed header flag, All applications can use - * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed - * SEI header data buffer to the driver - */ - VAEncPackedHeaderHEVC_SEI va_deprecated_enum = (0x80000000 | 1), -} VAEncPackedHeaderTypeHEVC; - -/** - * \brief Sequence parameter for HEVC encoding in main & main 10 - * profiles. - * - * This structure holds information for \c seq_parameter_set_data() as - * defined by the HEVC specification. - * - * If packed sequence headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c seq_scaling_matrix_present_flag is set to \c 1, then a - * #VAQMatrixBufferHEVC buffer shall also be provided within the same - * \c vaRenderPicture() call as this sequence parameter buffer. - */ -typedef struct _VAEncSequenceParameterBufferHEVC { - /** \brief Same as the HEVC bitstream syntax element. - * value range [1..2]. - */ - uint8_t general_profile_idc; - /** \brief Same as the HEVC bitstream syntax element. - * general_level_idc shall be set equal to a value of 30 times the level - * numbers allowed [1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 5.2, 6, 6.1, 6.2] - */ - uint8_t general_level_idc; - /** \brief Same as the HEVC bitstream syntax element. - * Only value 0 is allowed for level value below 4, exclusive. - */ - uint8_t general_tier_flag; - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between IDR frames. */ - uint32_t intra_idr_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - /** \brief Picture width in pixel samples. - * Its value must be multiple of min CU size. - */ - uint16_t pic_width_in_luma_samples; - /** \brief Picture height in pixel samples. - * Its value must be multiple of min CU size. - */ - uint16_t pic_height_in_luma_samples; - - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t chroma_format_idc : 2; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t separate_colour_plane_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t bit_depth_luma_minus8 : 3; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t bit_depth_chroma_minus8 : 3; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t scaling_list_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t strong_intra_smoothing_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t amp_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sample_adaptive_offset_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_loop_filter_disabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sps_temporal_mvp_enabled_flag : 1; - /** \brief Indicates whether or not the encoding is in low delay mode. - * 0 normal sequence - * 1 no random access B will be coded . and the coding type could be only I, P or LDB - * this flag only indicates the frame coding type of the sequence. - */ - uint32_t low_delay_seq : 1; - /** \brief Indicates whether or not the encoding is in dyadic hierarchical GOP structure - * the default value 0, BRC would treat is as flat structure. if HierachicalFlag == 1, - * application would enable Qp Modulation - */ - uint32_t hierachical_flag : 1; - /** \brief keep for future , should be set to 0 */ - uint32_t reserved_bits : 14; - } bits; - uint32_t value; - } seq_fields; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [0..3] - */ - uint8_t log2_min_luma_coding_block_size_minus3; - - /** \brief Same as the HEVC bitstream syntax element. - */ - uint8_t log2_diff_max_min_luma_coding_block_size; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [0..3] - */ - uint8_t log2_min_transform_block_size_minus2; - - /** \brief Same as the HEVC bitstream syntax element. - */ - uint8_t log2_diff_max_min_transform_block_size; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [2] - */ - uint8_t max_transform_hierarchy_depth_inter; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [2] - */ - uint8_t max_transform_hierarchy_depth_intra; - - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_sample_bit_depth_luma_minus1; - - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_sample_bit_depth_chroma_minus1; - - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t log2_min_pcm_luma_coding_block_size_minus3; - - /** \brief Derived from the HEVC bitstream syntax element. - * log2_min_pcm_luma_coding_block_size_minus3 + - * log2_diff_max_min_pcm_luma_coding_block_size - */ - uint32_t log2_max_pcm_luma_coding_block_size_minus3; - - /** @name VUI parameters (optional) */ - /**@{*/ - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t vui_parameters_present_flag; - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t aspect_ratio_info_present_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t neutral_chroma_indication_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t field_seq_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t vui_timing_info_present_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t bitstream_restriction_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t tiles_fixed_structure_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t motion_vectors_over_pic_boundaries_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t restricted_ref_pic_lists_flag : 1; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_horizontal : 5; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_vertical : 5; - } bits; - uint32_t value; - } vui_fields; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t aspect_ratio_idc; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sar_width; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sar_height; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t vui_num_units_in_tick; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t vui_time_scale; - /** \brief Same as the HEVC bitstream syntax element. */ - uint16_t min_spatial_segmentation_idc; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t max_bytes_per_pic_denom; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t max_bits_per_min_cu_denom; - - /** \brief SCC flags to enable/disable features, including IBC and palette mode at present.*/ - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t palette_mode_enabled_flag : 1; - /** \brief Reserved bits for future use, must be zero */ - uint32_t reserved : 31; - } bits; - uint32_t value; - } scc_fields; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 1]; - /**@}*/ -} VAEncSequenceParameterBufferHEVC; - -/**************************** - * HEVC data structures - ****************************/ -/** - * \brief Picture parameter for HEVC encoding in main & main 10 - * profiles. - * - * This structure holds information for \c pic_parameter_set_rbsp() as - * defined by the HEVC specification. - * - * If packed picture headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c pic_scaling_matrix_present_flag is set to \c 1, then a - * #VAQMatrixBufferHEVC buffer shall also be provided within the same - * \c vaRenderPicture() call as this picture parameter buffer. - */ -typedef struct _VAEncPictureParameterBufferHEVC { - /** - * \brief Information about the picture to be encoded. - * - * See #VAPictureHEVC for further description of each field. - * Note that decoded_curr_pic.picture_id represents the reconstructed - * (decoded) picture. User provides a scratch VA surface ID here. - * Long term reference and RPS related fields should be set to 0 - * and ignored. - */ - VAPictureHEVC decoded_curr_pic; - /** - * \brief Decoded Picture Buffer (DPB). - * - * This array represents the list of reconstructed (decoded) - * frames used as reference. It is important to keep track of - * reconstructed frames so that they can be used later on as - * reference for P or B-frames encoding. - */ - VAPictureHEVC reference_frames[15]; - /** - * \brief Output encoded bitstream. - * - * \ref coded_buf has type #VAEncCodedBufferType. It should be - * large enough to hold the compressed NAL slice and possibly VPS, SPS - * and PPS NAL units, and other NAL units such as SEI. - */ - VABufferID coded_buf; - - /** \brief collocated reference picture buffer index of ReferenceFrames[]. - * Please note it is different from HEVC syntac element collocated_ref_idx. - * When the HEVC syntax element slice_temporal_mvp_enable_flag takes value 0, - * collocated_ref_pic_index should take value 0xFF. . - * Range: [0..14, 0xFF] - */ - uint8_t collocated_ref_pic_index; - - /** - * \brief OR'd flags describing whether the picture is the last one or not. - * - * This fields holds 0 if the picture to be encoded is not the last - * one in the stream or sequence. Otherwise, it is a combination of - * \ref HEVC_LAST_PICTURE_EOSEQ or \ref HEVC_LAST_PICTURE_EOSTREAM. - */ - uint8_t last_picture; - - /** \brief \c init_qp_minus26 + 26. */ - uint8_t pic_init_qp; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t diff_cu_qp_delta_depth; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - int8_t pps_cb_qp_offset; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - int8_t pps_cr_qp_offset; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t num_tile_columns_minus1; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t num_tile_rows_minus1; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t column_width_minus1[19]; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t row_height_minus1[21]; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t log2_parallel_merge_level_minus2; - - /** \brief Application may set the CTU bit size limit based on - * spec requirement (A.3.2), or other value for special purpose. - * If the value is set 0, no bit size limit is checked. - */ - uint8_t ctu_max_bitsize_allowed; - - /** \brief Maximum reference index for reference picture list 0. - * value range: [0..14]. - */ - uint8_t num_ref_idx_l0_default_active_minus1; - - /** \brief Maximum reference index for reference picture list 1. - * value range: [0..14]. - */ - uint8_t num_ref_idx_l1_default_active_minus1; - - /** \brief PPS header - * Used by GPU to generate new slice headers in slice size control. - * value range: [0..63]. - */ - uint8_t slice_pic_parameter_set_id; - - /** \brief NAL unit type - * Used by GPU to generate new slice headers in slice size control. - * value range: [0..63]. - */ - uint8_t nal_unit_type; - - union { - struct { - /** \brief Is picture an IDR picture? */ - uint32_t idr_pic_flag : 1; - /** \brief Picture type. - * I - 1; - * P - 2; - * B - 3; - * B1 - 4; - * B2 - 5; - * B1 and B2 are frame types for hierachical B, explanation - * can refer to num_b_in_gop[]. - */ - uint32_t coding_type : 3; - /** \brief Is picture a reference picture? */ - uint32_t reference_pic_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t dependent_slice_segments_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t sign_data_hiding_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t constrained_intra_pred_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t transform_skip_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t cu_qp_delta_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t weighted_pred_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t weighted_bipred_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t transquant_bypass_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t tiles_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t entropy_coding_sync_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t loop_filter_across_tiles_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t pps_loop_filter_across_slices_enabled_flag : 1; - /** \brief A combination of HEVC syntax element of - * sps_scaling_list_data_present_flag and - * pps_scaling_list_data_present_flag - * when scaling_list_enable_flag is 0, it must be 0. - */ - uint32_t scaling_list_data_present_flag : 1; - /** \brief indicate the current picture contains significant - * screen contents (text, characters, etc.) or animated image. - * GPU may want to treat them differently from normal video. - * For example, encoder may choose a small transform unit size - * and may use transform skip mode. - */ - uint32_t screen_content_flag : 1; - /** - * When either weighted_pred_flag or weighted_bipred_flag is - * turned on, the flag enable_gpu_weighted_prediction requests - * GPU to determine weighted prediction factors. In this case, - * the following parameters in slice control data structure - * shall be ignored: - * luma_log2_weight_denom, delta_chroma_log2_weight_denom, - * luma_offset_l0[15], luma_offset_l1[15], - * delta_luma_weight_l0[15], delta_luma_weight_l1[15], - * chroma_offset_l0[15][2], chroma_offset_l1[15][2], - * and delta_chroma_weight_l0[15][2], delta_chroma_weight_l1[15][2]. - */ - uint32_t enable_gpu_weighted_prediction : 1; - /** \brief HEVC syntax element in slice segment header - * GPU uses it to generate new slice headers in slice size control. - */ - uint32_t no_output_of_prior_pics_flag : 1; - uint32_t reserved : 11; - } bits; - uint32_t value; - } pic_fields; - - /** \brief When hierachical_level_plus1 > 0, hierachical_level_plus1-1 indicates - *the current frame's level.when it > 0. B1, B2 setting in CodingType can be treated as B, - *hirachical level is determined by this variable.When hierachical_level_plus1 == 0, - *hierarchical level information still comes from coding_type. - */ - uint8_t hierarchical_level_plus1; - /** \brief Reserved bytes for future use, must be zero */ - uint8_t va_byte_reserved; - /** \brief SCC flags to enable/disable feature, only IBC at present.*/ - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint16_t pps_curr_pic_ref_enabled_flag : 1; - /** \brief Reserved bits for future use, must be zero */ - uint16_t reserved : 15; - } bits; - uint16_t value; - } scc_fields; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH - 1]; -} VAEncPictureParameterBufferHEVC; - -/** - * \brief Slice parameter for HEVC encoding in main & main 10 profiles. - * - * This structure holds information for \c - * slice_segment_layer_rbsp() as defined by the HEVC - * specification. - * - * If packed slice headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSlice ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - */ -typedef struct _VAEncSliceParameterBufferHEVC { - /** \brief Starting CTU address for this slice. */ - uint32_t slice_segment_address; - /** \brief Number of CTUs in this slice. */ - uint32_t num_ctu_in_slice; - - /** \brief Slice type. - * Corresponds to HEVC syntax element of the same name. - */ - uint8_t slice_type; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t slice_pic_parameter_set_id; - - /** \brief Maximum reference index for reference picture list 0. - * Range: 0 to 14, inclusive. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** \brief Maximum reference index for reference picture list 1. - * Range: 0 to 14, inclusive. - */ - uint8_t num_ref_idx_l1_active_minus1; - /** \brief Reference picture list 0 (for P slices). */ - VAPictureHEVC ref_pic_list0[15]; - /** \brief Reference picture list 1 (for B slices). */ - VAPictureHEVC ref_pic_list1[15]; - /**@}*/ - - /** @name pred_weight_table() */ - /**@{*/ - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t luma_log2_weight_denom; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_chroma_log2_weight_denom; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_luma_weight_l0[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t luma_offset_l0[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_chroma_weight_l0[15][2]; - /** \brief Same as the HEVC spec variable ChromaOffsetL0[]. */ - int8_t chroma_offset_l0[15][2]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_luma_weight_l1[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t luma_offset_l1[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_chroma_weight_l1[15][2]; - /** \brief Same as the HEVC spec variable ChromaOffsetL1[]. */ - int8_t chroma_offset_l1[15][2]; - /**@}*/ - - /** \brief Corresponds to HEVC spec variable MaxNumMergeCand. - * Range: [1..5]. - */ - uint8_t max_num_merge_cand; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_qp_delta; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_cb_qp_offset; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_cr_qp_offset; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_beta_offset_div2; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_tc_offset_div2; - - union { - struct { - /** \brief Indicates if current slice is the last one in picture */ - uint32_t last_slice_of_pic_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name */ - uint32_t dependent_slice_segment_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name */ - uint32_t colour_plane_id : 2; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_temporal_mvp_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_sao_luma_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_sao_chroma_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. - * if this flag is set to 0, num_ref_idx_l0_active_minus1 should be - * equal to num_ref_idx_l0_default_active_minus1 - * as well as for that for l1. - */ - uint32_t num_ref_idx_active_override_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t mvd_l1_zero_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t cabac_init_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_deblocking_filter_disabled_flag : 2; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_loop_filter_across_slices_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t collocated_from_l0_flag : 1; - } bits; - uint32_t value; - } slice_fields; - - - /** - * \brief bit offset of syntax element pred_weight_table() in slice segment header. - * It aligns with the starting position of the current packed slice header. - * It is used when encoder prefers to override the weighted prediction parameters passed in - * from application. - * Please refer to enable_gpu_weighted_prediction in VAEncPictureParameterBufferHEVC. - */ - uint32_t pred_weight_table_bit_offset; - /** - * \brief bit length of syntax element pred_weight_table() in slice segment header. - * It is used when encoder prefers to override the weighted prediction parameters passed in - * from application. - * Please refer to enable_gpu_weighted_prediction in VAEncPictureParameterBufferHEVC. - */ - uint32_t pred_weight_table_bit_length; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 2]; - /**@}*/ -} VAEncSliceParameterBufferHEVC; - -/** - * \brief HEVC Quantization Matrix Buffer Structure - * - * This structure is sent once per frame, - * and only when scaling_list_enabled_flag = 1 and scaling_list_data_present_flag = 1. - * Only when scaling_list_data_present_flag = 1, app still - * needs to send in this structure. When scaling_list_enabled_flag = 1 and - * scaling_list_data_present_flag = 0, driver is responsible to generate - * the default scaling list values. - * - * Matrix entries are in raster scan order which follows HEVC spec. - */ -typedef struct _VAQMatrixBufferHEVC { - /** - * \brief scaling lists, - * corresponds to same HEVC spec syntax element - * ScalingList[ i ][ MatrixID ][ j ]. - * - * \brief 4x4 scaling, - */ - uint8_t scaling_lists_4x4[3][2][16]; - /** - * \brief 8x8 scaling, - */ - uint8_t scaling_lists_8x8[3][2][64]; - /** - * \brief 16x16 scaling, - * correspongs i = 2, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t scaling_lists_16x16[3][2][64]; - /** - * \brief 32x32 scaling, - * correspongs i = 3, MatrixID is in the range of 0 to 1, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t scaling_lists_32x32[2][64]; - /** - * \brief DC values of the 16x16 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 2 and matrixID in the range of 0 to 5, inclusive. - */ - uint8_t scaling_list_dc_16x16[3][2]; - /** - * \brief DC values of the 32x32 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 3 and matrixID in the range of 0 to 1, inclusive. - */ - uint8_t scaling_list_dc_32x32[2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAQMatrixBufferHEVC; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_HEVC_H */ diff --git a/prebuilts/x86/include/va/va_enc_jpeg.h b/prebuilts/x86/include/va/va_enc_jpeg.h deleted file mode 100644 index ec02191..0000000 --- a/prebuilts/x86/include/va/va_enc_jpeg.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (c) 2007-2013 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_jpeg.h - * \brief JPEG encoding API - * - * This file contains the \ref api_enc_jpeg "JPEG encoding API". - */ - -#ifndef VA_ENC_JPEG_H -#define VA_ENC_JPEG_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_jpeg JPEG encoding API - * - * @{ - */ - -/** - * \brief JPEG Encoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferJPEG { - /** \brief holds reconstructed picture. */ - VASurfaceID reconstructed_picture; - /** \brief picture width. */ - uint16_t picture_width; - /** \brief picture height. */ - uint16_t picture_height; - /** \brief holds coded data. */ - VABufferID coded_buf; - - /** - * \brief pic_flags - * - */ - union { - struct { - /** - * \brief profile: - * 0 - Baseline, 1 - Extended, 2 - Lossless, 3 - Hierarchical - */ - uint32_t profile : 2; - /** - * \brief progressive: - * 0 - sequential, 1 - extended, 2 - progressive - */ - uint32_t progressive : 1; - /** - * \brief huffman: - * 0 - arithmetic, 1 - huffman - */ - uint32_t huffman : 1; - /** - * \brief interleaved: - * 0 - non interleaved, 1 - interleaved - */ - uint32_t interleaved : 1; - /** - * \brief differential: - * 0 - non differential, 1 - differential - */ - uint32_t differential : 1; - } bits; - uint32_t value; - } pic_flags; - - /** \brief number of bits per sample. */ - uint8_t sample_bit_depth; - /** \brief total number of scans in image. */ - uint8_t num_scan; - /** \brief number of image components in frame. */ - uint16_t num_components; - /** \brief Component identifier (Ci). */ - uint8_t component_id[4]; - /** \brief Quantization table selector (Tqi). */ - uint8_t quantiser_table_selector[4]; - /** \brief number from 1 to 100 that specifies quality of image. */ - uint8_t quality; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferJPEG; - - -/** - * \brief Slice parameter for JPEG encoding. - * - * This structure conveys slice (scan) level parameters. - * - */ -typedef struct _VAEncSliceParameterBufferJPEG { - /** \brief Restart interval definition (Ri). */ - uint16_t restart_interval; - /** \brief number of image components in a scan. */ - uint16_t num_components; - struct { - /** \brief Scan component selector (Csj). */ - uint8_t component_selector; - /** \brief DC entropy coding table selector (Tdj). */ - uint8_t dc_table_selector; - /** \brief AC entropy coding table selector (Taj). */ - uint8_t ac_table_selector; - } components[4]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSliceParameterBufferJPEG; - -/** - * \brief Quantization table for JPEG encoding. - * - */ -typedef struct _VAQMatrixBufferJPEG { - /** \brief load luma quantization table. */ - int32_t load_lum_quantiser_matrix; - /** \brief load chroma quantization table. */ - int32_t load_chroma_quantiser_matrix; - /** \brief luma quantization table. */ - uint8_t lum_quantiser_matrix[64]; - /** \brief chroma quantization table. */ - uint8_t chroma_quantiser_matrix[64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAQMatrixBufferJPEG; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_JPEG_H */ diff --git a/prebuilts/x86/include/va/va_enc_mpeg2.h b/prebuilts/x86/include/va/va_enc_mpeg2.h deleted file mode 100644 index 669df03..0000000 --- a/prebuilts/x86/include/va/va_enc_mpeg2.h +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_mpeg2.h - * \brief The MPEG-2 encoding API - * - * This file contains the \ref api_enc_mpeg2 "MPEG-2 encoding API". - */ - -#ifndef _VA_ENC_MPEG2_H_ -#define _VA_ENC_MPEG2_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_mpeg2 MPEG-2 encoding API - * - * @{ - */ - -/** - * \brief MPEG-2 Quantization Matrix Buffer - * - */ -typedef VAIQMatrixBufferMPEG2 VAQMatrixBufferMPEG2; - -/** - * \brief Packed header types specific to MPEG-2 encoding. - * - * Types of packed headers generally used for MPEG-2 encoding. - */ -typedef enum { - /** - * \brief Packed Sequence Parameter Set (SPS). - * - */ - VAEncPackedHeaderMPEG2_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - */ - VAEncPackedHeaderMPEG2_PPS = VAEncPackedHeaderPicture, - /** - * \brief Packed slice header. - * - */ - VAEncPackedHeaderMPEG2_Slice = VAEncPackedHeaderSlice, -} VAEncPackedHeaderTypeMPEG2; - -/** - * \brief Sequence parameter for MPEG-2 encoding - * - * This structure holds information for \c sequence_header() and - * sequence_extension(). - * - * If packed sequence headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - */ -typedef struct _VAEncSequenceParameterBufferMPEG2 { - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; - /** \brief Picture width. - * - * A 14bits unsigned inter, the lower 12bits - * is horizontal_size_value, and the upper - * 2bits is \c horizontal_size_extension - * - */ - uint16_t picture_width; - /** \brief Picture height. - * - * A 14bits unsigned inter, the lower 12bits - * is vertical_size_value, and the upper 2bits is - * vertical_size_size_extension - * - */ - uint16_t picture_height; - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * bits_per_second may be derived from bit_rate. - * - */ - uint32_t bits_per_second; - /** - * \brief Frame rate - * - * Derived from frame_rate_value, frame_rate_extension_n and - * frame_rate_extension_d - * - */ - float frame_rate; - /** \brief Same as the element in sequence_header() */ - uint16_t aspect_ratio_information; - /** \brief Define the size of VBV */ - uint32_t vbv_buffer_size; - - union { - struct { - /** \brief Same as the element in Sequence extension() */ - uint32_t profile_and_level_indication : 8; - /** \brief Same as the element in Sequence extension() */ - uint32_t progressive_sequence : 1; - /** \brief Same as the element in Sequence extension() */ - uint32_t chroma_format : 2; - /** \brief Same as the element in Sequence extension() */ - uint32_t low_delay : 1; - /** \brief Same as the element in Sequence extension() */ - uint32_t frame_rate_extension_n : 2; - /** \brief Same as the element in Sequence extension() */ - uint32_t frame_rate_extension_d : 5; - } bits; - uint32_t value; - } sequence_extension; - - /** \brief Flag to indicate the following GOP header are being updated */ - uint32_t new_gop_header; - - union { - struct { - /** \brief Time code */ - uint32_t time_code : 25; - /** \brief Same as the element in GOP header */ - uint32_t closed_gop : 1; - /** \brief SAme as the element in GOP header */ - uint32_t broken_link : 1; - } bits; - uint32_t value; - } gop_header; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferMPEG2; - -/** - * \brief Picture parameter for MPEG-2 encoding - * - * This structure holds information for picture_header() and - * picture_coding_extension() - * - * If packed picture headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - */ -typedef struct _VAEncPictureParameterBufferMPEG2 { - /** \brief Forward reference picture */ - VASurfaceID forward_reference_picture; - /** \brief Backward reference picture */ - VASurfaceID backward_reference_picture; - /** \brief Reconstructed(decoded) picture */ - VASurfaceID reconstructed_picture; - /** - * \brief Output encoded bitstream. - * - * \ref coded_buf has type #VAEncCodedBufferType. It should be - * large enough to hold the compressed NAL slice and possibly SPS - * and PPS NAL units. - */ - VABufferID coded_buf; - /** - * \brief Flag to indicate the picture is the last one or not. - * - * This fields holds 0 if the picture to be encoded is not - * the last one in the stream. Otherwise, it - * is \ref MPEG2_LAST_PICTURE_EOSTREAM. - */ - uint8_t last_picture; - /** \brief Picture type */ - VAEncPictureType picture_type; - /** \brief Same as the element in picture_header() */ - uint32_t temporal_reference; - /** \brief Same as the element in picture_header() */ - uint32_t vbv_delay; - /** \brief Same as the element in Picture coding extension */ - uint8_t f_code[2][2]; - union { - struct { - /** \brief Same as the element in Picture coding extension */ - uint32_t intra_dc_precision : 2; - /** \brief Same as the element in Picture coding extension */ - uint32_t picture_structure : 2; - /** \brief Same as the element in Picture coding extension */ - uint32_t top_field_first : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t frame_pred_frame_dct : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t concealment_motion_vectors : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t q_scale_type : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t intra_vlc_format : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t alternate_scan : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t repeat_first_field : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t progressive_frame : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t composite_display_flag : 1; - } bits; - uint32_t value; - } picture_coding_extension; - - /* \brief Parameters for composite display - * - * Valid only when omposite_display_flag is 1 - */ - union { - struct { - /** \brief Same as the element in Picture coding extension */ - uint32_t v_axis : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t field_sequence : 3; - /** \brief Same as the element in Picture coding extension */ - uint32_t sub_carrier : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t burst_amplitude : 7; - /** \brief Same as the element in Picture coding extension */ - uint32_t sub_carrier_phase : 8; - } bits; - uint32_t value; - } composite_display; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferMPEG2; - -/** - * \brief Slice parameter for MPEG-2 encoding - * - */ -typedef struct _VAEncSliceParameterBufferMPEG2 { - /** \brief Starting MB address for this slice. */ - uint32_t macroblock_address; - /** \brief Number of macroblocks in this slice. */ - uint32_t num_macroblocks; - /** \brief Same as the element in slice() */ - int32_t quantiser_scale_code; - /** \brief Flag to indicate intra slice */ - int32_t is_intra_slice; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSliceParameterBufferMPEG2; - -typedef struct _VAEncMiscParameterExtensionDataSeqDisplayMPEG2 { - /** should always be 0x02 to identify it is Sequence Display Extension ISO-13818 */ - uint8_t extension_start_code_identifier; - /** these field should follow ISO-13818 6.3.6 */ - uint8_t video_format; - uint8_t colour_description; - uint8_t colour_primaries; - uint8_t transfer_characteristics; - uint8_t matrix_coefficients; - uint16_t display_horizontal_size; - uint16_t display_vertical_size; -} VAEncMiscParameterExtensionDataSeqDisplayMPEG2; -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_ENC_MPEG2_H_ */ diff --git a/prebuilts/x86/include/va/va_enc_vp8.h b/prebuilts/x86/include/va/va_enc_vp8.h deleted file mode 100644 index 84ce05f..0000000 --- a/prebuilts/x86/include/va/va_enc_vp8.h +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_vp8.h - * \brief VP8 encoding API - * - * This file contains the \ref api_enc_vp8 "VP8 encoding API". - */ - -#ifndef VA_ENC_VP8_H -#define VA_ENC_VP8_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_vp8 VP8 encoding API - * - * @{ - */ - -/** - * \brief VP8 Encoding Sequence Parameter Buffer Structure - * - * This structure conveys sequence level parameters. - * - */ -typedef struct _VAEncSequenceParameterBufferVP8 { - /* frame width in pixels */ - uint32_t frame_width; - /* frame height in pixels */ - uint32_t frame_height; - /* horizontal scale */ - uint32_t frame_width_scale; - /* vertical scale */ - uint32_t frame_height_scale; - - /* whether to enable error resilience features */ - uint32_t error_resilient; - /* auto keyframe placement, non-zero means enable auto keyframe placement */ - uint32_t kf_auto; - /* keyframe minimum interval */ - uint32_t kf_min_dist; - /* keyframe maximum interval */ - uint32_t kf_max_dist; - - - /* RC related fields. RC modes are set with VAConfigAttribRateControl */ - /* For VP8, CBR implies HRD conformance and VBR implies no HRD conformance */ - - /** - * Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - /* Period between I frames. */ - uint32_t intra_period; - - /* reference and reconstructed frame buffers - * Used for driver auto reference management when configured through - * VAConfigAttribEncAutoReference. - */ - VASurfaceID reference_frames[4]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferVP8; - - -/** - * \brief VP8 Encoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferVP8 { - /* surface to store reconstructed frame */ - VASurfaceID reconstructed_frame; - - /* - * surfaces to store reference frames in non auto reference mode - * VA_INVALID_SURFACE can be used to denote an invalid reference frame. - */ - VASurfaceID ref_last_frame; - VASurfaceID ref_gf_frame; - VASurfaceID ref_arf_frame; - - /* buffer to store coded data */ - VABufferID coded_buf; - - union { - struct { - /* force this frame to be a keyframe */ - uint32_t force_kf : 1; - /* don't reference the last frame */ - uint32_t no_ref_last : 1; - /* don't reference the golden frame */ - uint32_t no_ref_gf : 1; - /* don't reference the alternate reference frame */ - uint32_t no_ref_arf : 1; - /* The temporal id the frame belongs to. */ - uint32_t temporal_id : 8; - /** - * following two flags indicate the reference order - * LastRef is specified by 01b; - * GoldRef is specified by 10b; - * AltRef is specified by 11b; - * first_ref specifies the reference frame which is searched first. - * second_ref specifies the reference frame which is searched second - * if there is. - */ - uint32_t first_ref : 2; - uint32_t second_ref : 2; - /** \brief Reserved for future use, must be zero */ - uint32_t reserved : 16; - } bits; - uint32_t value; - } ref_flags; - - union { - struct { - /* version */ - uint32_t frame_type : 1; - uint32_t version : 3; - /* show_frame */ - uint32_t show_frame : 1; - /* color_space */ - uint32_t color_space : 1; - /* 0: bicubic, 1: bilinear, other: none */ - uint32_t recon_filter_type : 2; - /* 0: no loop fitler, 1: simple loop filter */ - uint32_t loop_filter_type : 2; - /* 0: disabled, 1: normal, 2: simple */ - uint32_t auto_partitions : 1; - /* same as log2_nbr_of_dct_partitions in frame header syntax */ - uint32_t num_token_partitions : 2; - - /** - * The following fields correspond to the same VP8 syntax elements - * in the frame header. - */ - /** - * 0: clamping of reconstruction pixels is disabled, - * 1: clamping enabled. - */ - uint32_t clamping_type : 1; - /* indicate segmentation is enabled for the current frame. */ - uint32_t segmentation_enabled : 1; - /** - * Determines if the MB segmentation map is updated in the current - * frame. - */ - uint32_t update_mb_segmentation_map : 1; - /** - * Indicates if the segment feature data is updated in the current - * frame. - */ - uint32_t update_segment_feature_data : 1; - /** - * indicates if the MB level loop filter adjustment is enabled for - * the current frame (0 off, 1 on). - */ - uint32_t loop_filter_adj_enable : 1; - /** - * Determines whether updated token probabilities are used only for - * this frame or until further update. - * It may be used by application to enable error resilient mode. - * In this mode probability updates are allowed only at Key Frames. - */ - uint32_t refresh_entropy_probs : 1; - /** - * Determines if the current decoded frame refreshes the golden frame. - */ - uint32_t refresh_golden_frame : 1; - /** - * Determines if the current decoded frame refreshes the alternate - * reference frame. - */ - uint32_t refresh_alternate_frame : 1; - /** - * Determines if the current decoded frame refreshes the last frame - * reference buffer. - */ - uint32_t refresh_last : 1; - /** - * Determines if the golden reference is replaced by another reference. - */ - uint32_t copy_buffer_to_golden : 2; - /** - * Determines if the alternate reference is replaced by another reference. - */ - uint32_t copy_buffer_to_alternate : 2; - /** - * Controls the sign of motion vectors when the golden frame is referenced. - */ - uint32_t sign_bias_golden : 1; - /** - * Controls the sign of motion vectors when the alternate frame is - * referenced. - */ - uint32_t sign_bias_alternate : 1; - /** - * Enables or disables the skipping of macroblocks containing no - * non-zero coefficients. - */ - uint32_t mb_no_coeff_skip : 1; - /** - * Enforces unconditional per-MB loop filter delta update setting frame - * header flags mode_ref_lf_delta_update, all mb_mode_delta_update_flag[4], - * and all ref_frame_delta_update_flag[4] to 1. - * Since loop filter deltas are not automatically refreshed to default - * values at key frames, dropped frame with delta update may prevent - * correct decoding from the next key frame. - * Encoder application is advised to set this flag to 1 at key frames. - */ - uint32_t forced_lf_adjustment : 1; - uint32_t reserved : 2; - } bits; - uint32_t value; - } pic_flags; - - /** - * Contains a list of 4 loop filter level values (updated value if applicable) - * controlling the deblocking filter strength. Each entry represents a segment. - * When segmentation is disabled, use entry 0. - * When loop_filter_level is 0, loop filter shall be disabled. - */ - int8_t loop_filter_level[4]; - - /** - * Contains a list of 4 delta values for reference frame based MB-level - * loop filter adjustment. - * If no update, then set to 0. - */ - int8_t ref_lf_delta[4]; - - /** - * Contains a list of 4 delta values for coding mode based MB-level loop - * filter adjustment. - * If no update, then set to 0. - */ - int8_t mode_lf_delta[4]; - - /** - * Controls the deblocking filter sensitivity. - * Corresponds to the same VP8 syntax element in frame header. - */ - uint8_t sharpness_level; - - /** - * Application supplied maximum clamp value for Qindex used in quantization. - * Qindex will not be allowed to exceed this value. - * It has a valid range [0..127] inclusive. - */ - uint8_t clamp_qindex_high; - - /** - * Application supplied minimum clamp value for Qindex used in quantization. - * Qindex will not be allowed to be lower than this value. - * It has a valid range [0..127] inclusive. - * Condition clamp_qindex_low <= clamp_qindex_high must be guaranteed, - * otherwise they are ignored. - */ - uint8_t clamp_qindex_low; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferVP8; - - -/** - * \brief VP8 MB Segmentation ID Buffer - * - * application provides buffer containing the initial segmentation id for each - * MB, in raster scan order. Rate control may reassign it. - * For an 640x480 video, the buffer has 1200 entries. - * the value of each entry should be in the range [0..3], inclusive. - * If segmentation is not enabled, application does not need to provide it. - */ -typedef struct _VAEncMBMapBufferVP8 { - /** - * number of MBs in the frame. - * It is also the number of entries of mb_segment_id[]; - */ - uint32_t num_mbs; - /** - * per MB Segmentation ID Buffer - */ - uint8_t *mb_segment_id; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMBMapBufferVP8; - - -/** - * \brief VP8 Quantization Matrix Buffer Structure - * - * Contains quantization index for yac(0-3) for each segment and quantization - * index deltas, ydc(0), y2dc(1), y2ac(2), uvdc(3), uvac(4) that are applied - * to all segments. When segmentation is disabled, only quantization_index[0] - * will be used. This structure is sent once per frame. - */ -typedef struct _VAQMatrixBufferVP8 { - uint16_t quantization_index[4]; - int16_t quantization_index_delta[5]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAQMatrixBufferVP8; - - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_VP8_H */ diff --git a/prebuilts/x86/include/va/va_enc_vp9.h b/prebuilts/x86/include/va/va_enc_vp9.h deleted file mode 100644 index 107ab0c..0000000 --- a/prebuilts/x86/include/va/va_enc_vp9.h +++ /dev/null @@ -1,603 +0,0 @@ -/* - * Copyright (c) 2007-2015 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_vp9.h - * \brief VP9 encoding API - * - * This file contains the \ref api_enc_vp9 "VP9 encoding API". - * - */ - -#ifndef VA_ENC_VP9_H -#define VA_ENC_VP9_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_vp9 VP9 encoding API - * - * @{ - */ - -/** - * \brief VP9 Encoding Status Data Buffer Structure - * - * This structure is used to convey status data from encoder to application. - * Driver allocates VACodedBufferVP9Status as a private data buffer. - * Driver encapsulates the status buffer with a VACodedBufferSegment, - * and sets VACodedBufferSegment.status to be VA_CODED_BUF_STATUS_CODEC_SPECIFIC. - * And driver associates status data segment to the bit stream buffer segment - * by setting VACodedBufferSegment.next of coded_buf (bit stream) to the private - * buffer segment of status data. - * Application accesses it by calling VAMapBuffer() with VAEncCodedBufferType. - */ -typedef struct _VACodedBufferVP9Status { - /** Final quantization index used (yac), determined by BRC. - * Application is providing quantization index deltas - * ydc(0), y2dc(1), y2ac(2), uvdc(3), uvac(4) that are applied to all segments - * and segmentation qi deltas, they will not be changed by BRC. - */ - uint16_t base_qp_index; - - /** Final loopfilter levels for the frame, if segmentation is disabled only - * index 0 is used. - * If loop_filter_level is 0, it indicates loop filter is disabled. - */ - uint8_t loop_filter_level; - - /** - * Long term reference frame indication from BRC. BRC recommends the - * current frame that is being queried is a good candidate for a long - * term reference. - */ - uint8_t long_term_indication; - - /* suggested next frame width */ - uint16_t next_frame_width; - - /* suggested next frame height */ - uint16_t next_frame_height; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VACodedBufferVP9Status; - -/** - * \brief VP9 Encoding Sequence Parameter Buffer Structure - * - * This structure conveys sequence level parameters. - * - */ -typedef struct _VAEncSequenceParameterBufferVP9 { - /** \brief Frame size note: - * Picture resolution may change frame by frame. - * Application needs to allocate surfaces and frame buffers based on - * max frame resolution in case resolution changes for later frames. - * The source and recon surfaces allocated should be 64x64(SB) aligned - * on both horizontal and vertical directions. - * But buffers on the surfaces need to be aligned to CU boundaries. - */ - /* maximum frame width in pixels for the whole sequence */ - uint32_t max_frame_width; - - /* maximum frame height in pixels for the whole sequence */ - uint32_t max_frame_height; - - /* auto keyframe placement, non-zero means enable auto keyframe placement */ - uint32_t kf_auto; - - /* keyframe minimum interval */ - uint32_t kf_min_dist; - - /* keyframe maximum interval */ - uint32_t kf_max_dist; - - - /* RC related fields. RC modes are set with VAConfigAttribRateControl */ - /* For VP9, CBR implies HRD conformance and VBR implies no HRD conformance */ - - /** - * Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - - /* Period between key frames */ - uint32_t intra_period; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferVP9; - - -/** - * \brief VP9 Encoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferVP9 { - /** VP9 encoder may support dynamic scaling function. - * If enabled (enable_dynamic_scaling is set), application may request - * GPU encodes picture with a different resolution from the raw source. - * GPU should handle the scaling process of source and - * all reference frames. - */ - /* raw source frame width in pixels */ - uint32_t frame_width_src; - /* raw source frame height in pixels */ - uint32_t frame_height_src; - - /* to be encoded frame width in pixels */ - uint32_t frame_width_dst; - /* to be encoded frame height in pixels */ - uint32_t frame_height_dst; - - /* surface to store reconstructed frame, not used for enc only case */ - VASurfaceID reconstructed_frame; - - /** \brief reference frame buffers - * Each entry of the array specifies the surface index of the picture - * that is referred by current picture or will be referred by any future - * picture. The valid entries take value from 0 to 127, inclusive. - * Non-valid entries, those do not point to pictures which are referred - * by current picture or future pictures, should take value 0xFF. - * Other values are not allowed. - * - * Application should update this array based on the refreshing - * information expected. - */ - VASurfaceID reference_frames[8]; - - /* buffer to store coded data */ - VABufferID coded_buf; - - union { - struct { - /* force this frame to be a keyframe */ - uint32_t force_kf : 1; - - /** \brief Indiates which frames to be used as reference. - * (Ref_frame_ctrl & 0x01) ? 1: last frame as reference frame, 0: not. - * (Ref_frame_ctrl & 0x02) ? 1: golden frame as reference frame, 0: not. - * (Ref_frame_ctrl & 0x04) ? 1: alt frame as reference frame, 0: not. - * L0 is for forward prediction. - * L1 is for backward prediction. - */ - uint32_t ref_frame_ctrl_l0 : 3; - uint32_t ref_frame_ctrl_l1 : 3; - - /** \brief Last Reference Frame index - * Specifies the index to RefFrameList[] which points to the LAST - * reference frame. It corresponds to active_ref_idx[0] in VP9 code. - */ - uint32_t ref_last_idx : 3; - - /** \brief Specifies the Sign Bias of the LAST reference frame. - * It corresponds to ref_frame_sign_bias[LAST_FRAME] in VP9 code. - */ - uint32_t ref_last_sign_bias : 1; - - /** \brief GOLDEN Reference Frame index - * Specifies the index to RefFrameList[] which points to the Golden - * reference frame. It corresponds to active_ref_idx[1] in VP9 code. - */ - uint32_t ref_gf_idx : 3; - - /** \brief Specifies the Sign Bias of the GOLDEN reference frame. - * It corresponds to ref_frame_sign_bias[GOLDEN_FRAME] in VP9 code. - */ - uint32_t ref_gf_sign_bias : 1; - - /** \brief Alternate Reference Frame index - * Specifies the index to RefFrameList[] which points to the Alternate - * reference frame. It corresponds to active_ref_idx[2] in VP9 code. - */ - uint32_t ref_arf_idx : 3; - - /** \brief Specifies the Sign Bias of the ALTERNATE reference frame. - * It corresponds to ref_frame_sign_bias[ALTREF_FRAME] in VP9 code. - */ - uint32_t ref_arf_sign_bias : 1; - - /* The temporal id the frame belongs to */ - uint32_t temporal_id : 8; - - uint32_t reserved : 5; - } bits; - uint32_t value; - } ref_flags; - - union { - struct { - /** - * Indicates if the current frame is a key frame or not. - * Corresponds to the same VP9 syntax element in frame tag. - */ - uint32_t frame_type : 1; - - /** \brief show_frame - * 0: current frame is not for display - * 1: current frame is for display - */ - uint32_t show_frame : 1; - - /** - * The following fields correspond to the same VP9 syntax elements - * in the frame header. - */ - uint32_t error_resilient_mode : 1; - - /** \brief Indicate intra-only for inter pictures. - * Must be 0 for key frames. - * 0: inter frame use both intra and inter blocks - * 1: inter frame use only intra blocks. - */ - uint32_t intra_only : 1; - - /** \brief Indicate high precision mode for Motion Vector prediction - * 0: normal mode - * 1: high precision mode - */ - uint32_t allow_high_precision_mv : 1; - - /** \brief Motion Compensation Filter type - * 0: eight-tap (only this mode is supported now.) - * 1: eight-tap-smooth - * 2: eight-tap-sharp - * 3: bilinear - * 4: switchable - */ - uint32_t mcomp_filter_type : 3; - uint32_t frame_parallel_decoding_mode : 1; - uint32_t reset_frame_context : 2; - uint32_t refresh_frame_context : 1; - uint32_t frame_context_idx : 2; - uint32_t segmentation_enabled : 1; - - /* corresponds to variable temporal_update in VP9 code. - * Indicates whether Segment ID is from bitstream or from previous - * frame. - * 0: Segment ID from bitstream - * 1: Segment ID from previous frame - */ - uint32_t segmentation_temporal_update : 1; - - /* corresponds to variable update_mb_segmentation_map in VP9 code. - * Indicates how hardware determines segmentation ID - * 0: intra block - segment id is 0; - * inter block - segment id from previous frame - * 1: intra block - segment id from bitstream (app or GPU decides) - * inter block - depends on segmentation_temporal_update - */ - uint32_t segmentation_update_map : 1; - - /** \brief Specifies if the picture is coded in lossless mode. - * - * lossless_mode = base_qindex == 0 && y_dc_delta_q == 0 \ - * && uv_dc_delta_q == 0 && uv_ac_delta_q == 0; - * Where base_qindex, y_dc_delta_q, uv_dc_delta_q and uv_ac_delta_q - * are all variables in VP9 code. - * - * When enabled, tx_mode needs to be set to 4x4 only and all - * tu_size in CU record set to 4x4 for entire frame. - * Software also has to program such that final_qindex=0 and - * final_filter_level=0 following the Quant Scale and - * Filter Level Table in Segmentation State section. - * Hardware forces Hadamard Tx when this bit is set. - * When lossless_mode is on, BRC has to be turned off. - * 0: normal mode - * 1: lossless mode - */ - uint32_t lossless_mode : 1; - - /** \brief MV prediction mode. Corresponds to VP9 variable with same name. - * comp_prediction_mode = 0: single prediction ony, - * comp_prediction_mode = 1: compound prediction, - * comp_prediction_mode = 2: hybrid prediction - * - * Not mandatory. App may suggest the setting based on power or - * performance. Kernal may use it as a guildline and decide the proper - * setting on its own. - */ - uint32_t comp_prediction_mode : 2; - - /** \brief Indicate how segmentation is specified - * 0 application specifies segmentation partitioning and - * relevant parameters. - * 1 GPU may decide on segmentation. If application already - * provides segmentation information, GPU may choose to - * honor it and further split into more levels if possible. - */ - uint32_t auto_segmentation : 1; - - /** \brief Indicate super frame syntax should be inserted - * 0 current frame is not encapsulated in super frame structure - * 1 current fame is to be encapsulated in super frame structure. - * super frame index syntax will be inserted by encoder at - * the end of current frame. - */ - uint32_t super_frame_flag : 1; - - uint32_t reserved : 10; - } bits; - uint32_t value; - } pic_flags; - - /** \brief indicate which frames in DPB should be refreshed. - * same syntax and semantic as in VP9 code. - */ - uint8_t refresh_frame_flags; - - /** \brief Base Q index in the VP9 term. - * Added with per segment delta Q index to get Q index of Luma AC. - */ - uint8_t luma_ac_qindex; - - /** - * Q index delta from base Q index in the VP9 term for Luma DC. - */ - int8_t luma_dc_qindex_delta; - - /** - * Q index delta from base Q index in the VP9 term for Chroma AC. - */ - int8_t chroma_ac_qindex_delta; - - /** - * Q index delta from base Q index in the VP9 term for Chroma DC. - */ - int8_t chroma_dc_qindex_delta; - - /** \brief filter level - * Corresponds to the same VP9 syntax element in frame header. - */ - uint8_t filter_level; - - /** - * Controls the deblocking filter sensitivity. - * Corresponds to the same VP9 syntax element in frame header. - */ - uint8_t sharpness_level; - - /** \brief Loop filter level reference delta values. - * Contains a list of 4 delta values for reference frame based block-level - * loop filter adjustment. - * If no update, set to 0. - * value range [-63..63] - */ - int8_t ref_lf_delta[4]; - - /** \brief Loop filter level mode delta values. - * Contains a list of 4 delta values for coding mode based MB-level loop - * filter adjustment. - * If no update, set to 0. - * value range [-63..63] - */ - int8_t mode_lf_delta[2]; - - /** - * Offset from starting position of output bitstream in bits where - * ref_lf_delta[] should be inserted. This offset should cover any metadata - * ahead of uncompressed header in inserted bit stream buffer (the offset - * should be same as that for final output bitstream buffer). - * - * In BRC mode, always insert ref_lf_delta[] (This implies uncompressed - * header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1). - */ - uint16_t bit_offset_ref_lf_delta; - - /** - * Offset from starting position of output bitstream in bits where - * mode_lf_delta[] should be inserted. - * - * In BRC mode, always insert mode_lf_delta[] (This implies uncompressed - * header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1). - */ - uint16_t bit_offset_mode_lf_delta; - - /** - * Offset from starting position of output bitstream in bits where (loop) - * filter_level should be inserted. - */ - uint16_t bit_offset_lf_level; - - /** - * Offset from starting position of output bitstream in bits where - * Base Qindex should be inserted. - */ - uint16_t bit_offset_qindex; - - /** - * Offset from starting position of output bitstream in bits where - * First Partition Size should be inserted. - */ - uint16_t bit_offset_first_partition_size; - - /** - * Offset from starting position of output bitstream in bits where - * segmentation_enabled is located in bitstream. When auto_segmentation - * is enabled, GPU uses this offset to locate and update the - * segmentation related information. - */ - uint16_t bit_offset_segmentation; - - /** \brief length in bit of segmentation portion from the location - * in bit stream where segmentation_enabled syntax is coded. - * When auto_segmentation is enabled, GPU uses this bit size to locate - * and update the information after segmentation. - */ - uint16_t bit_size_segmentation; - - - /** \brief log2 of number of tile rows - * Corresponds to the same VP9 syntax element in frame header. - * value range [0..2] - */ - uint8_t log2_tile_rows; - - /** \brief log2 of number of tile columns - * Corresponds to the same VP9 syntax element in frame header. - * value range [0..6] - */ - uint8_t log2_tile_columns; - - /** \brief indicate frame-skip happens - * Application may choose to drop/skip one or mulitple encoded frames or - * to-be-encoded frame due to various reasons such as insufficient - * bandwidth. - * Application uses the following three flags to inform GPU about frame-skip. - * - * value range of skip_frame_flag: [0..2] - * 0 - encode as normal, no skip; - * 1 - one or more frames were skipped by application prior to the - * current frame. Encode the current frame as normal. The driver - * will pass the number_skip_frames and skip_frames_size - * to bit rate control for adjustment. - * 2 - the current frame is to be skipped. Do not encode it but encrypt - * the packed header contents. This is for the secure encoding case - * where application generates a frame of all skipped blocks. - * The packed header will contain the skipped frame. - */ - uint8_t skip_frame_flag; - - /** \brief The number of frames skipped prior to the current frame. - * It includes only the skipped frames that were not counted before, - * and does not include the frame with skip_frame_flag == 2. - * Valid when skip_frame_flag = 1. - */ - uint8_t number_skip_frames; - - /** \brief When skip_frame_flag = 1, the size of the skipped frames in bits. - * It includes only the skipped frames that were not counted before, - * and does not include the frame size with skip_frame_flag = 2. - * When skip_frame_flag = 2, it is the size of the current skipped frame - * that is to be encrypted. - */ - uint32_t skip_frames_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAEncPictureParameterBufferVP9; - - -/** - * \brief Per segment parameters - */ -typedef struct _VAEncSegParamVP9 { - union { - struct { - /** \brief Indicates if per segment reference frame indicator is enabled. - * Corresponding to variable feature_enabled when - * j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code. - */ - uint8_t segment_reference_enabled : 1; - - /** \brief Specifies per segment reference indication. - * 0: reserved - * 1: Last ref - * 2: golden - * 3: altref - * Value can be derived from variable data when - * j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code. - * value range: [0..3] - */ - uint8_t segment_reference : 2; - - /** \brief Indicates if per segment skip mode is enabled. - * Corresponding to variable feature_enabled when - * j == SEG_LVL_SKIP in function setup_segmentation() VP9 code. - */ - uint8_t segment_reference_skipped : 1; - - uint8_t reserved : 4; - - } bits; - uint8_t value; - } seg_flags; - - /** \brief Specifies per segment Loop Filter Delta. - * Must be 0 when segmentation_enabled == 0. - * value range: [-63..63] - */ - int8_t segment_lf_level_delta; - - /** \brief Specifies per segment QIndex Delta. - * Must be 0 when segmentation_enabled == 0. - * value range: [-255..255] - */ - int16_t segment_qindex_delta; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSegParamVP9; - -/** - * Structure to convey all segment related information. - * If segmentation is disabled, this data structure is still required. - * In this case, only seg_data[0] contains valid data. - * This buffer is sent once per frame. - * - * The buffer is created with VABufferType VAQMatrixBufferType. - * - */ -typedef struct _VAEncMiscParameterTypeVP9PerSegmantParam { - /** - * Parameters for 8 segments. - */ - VAEncSegParamVP9 seg_data[8]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterTypeVP9PerSegmantParam; - - -/** - * \brief VP9 Block Segmentation ID Buffer - * - * The application provides a buffer of VAEncMacroblockMapBufferType containing - * the initial segmentation id for each 8x8 block, one byte each, in raster scan order. - * Rate control may reassign it. For example, a 640x480 video, the buffer has 4800 entries. - * The value of each entry should be in the range [0..7], inclusive. - * If segmentation is not enabled, the application does not need to provide it. - */ - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_VP9_H */ diff --git a/prebuilts/x86/include/va/va_fei.h b/prebuilts/x86/include/va/va_fei.h deleted file mode 100644 index 5563cc9..0000000 --- a/prebuilts/x86/include/va/va_fei.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (c) 2007-2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_fei.h - * \brief The FEI encoding common API - */ - -#ifndef VA_FEI_H -#define VA_FEI_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_fei FEI encoding common API - * - * @{ - */ - -/** - * \brief FEI specific attribute definitions - */ -/** @name Attribute values for VAConfigAttribFEIFunctionType - * - * This is only for VAEntrypointFEI - * The desired type should be passed to driver when creating the configuration. - * If VA_FEI_FUNCTION_ENC_PAK is set, VA_FEI_FUNCTION_ENC and VA_FEI_FUNCTION_PAK - * will be ignored if set also. Combination of VA_FEI_FUNCTION_ENC and VA_FEI_FUNCTION_PAK - * is not valid. If VA_FEI_FUNCTION_ENC is set, there will be no bitstream output. - * If VA_FEI_FUNCTION_PAK is set, two extra input buffers for PAK are needed: - * VAEncFEIMVBufferType and VAEncFEIMBCodeBufferType. - * VA_FEI_FUNCTION_ENC_PAK is recommended for best performance. - * - **/ -/**@{*/ -/** \brief ENC only is supported */ -#define VA_FEI_FUNCTION_ENC 0x00000001 -/** \brief PAK only is supported */ -#define VA_FEI_FUNCTION_PAK 0x00000002 -/** \brief ENC_PAK is supported */ -#define VA_FEI_FUNCTION_ENC_PAK 0x00000004 - -/**@}*/ - -/** \brief Attribute value for VAConfigAttribStats */ -typedef union _VAConfigAttribValStats { - struct { - /** \brief Max number of past reference frames that are supported. */ - uint32_t max_num_past_references : 4; - /** \brief Max number of future reference frames that are supported. */ - uint32_t max_num_future_references : 4; - /** \brief Number of supported output buffers for VAStatsStatisticsParameter->outputs */ - uint32_t num_outputs : 3; - /** \brief Interlaced content is supported */ - uint32_t interlaced : 1; - uint32_t reserved : 20; - } bits; - uint32_t value; -} VAConfigAttribValStats; - -typedef struct _VAPictureStats { - VASurfaceID picture_id; - /* - * see flags below. - */ - uint32_t flags; -} VAPictureStats; -/* flags in VAPictureStats could be one of the following */ -#define VA_PICTURE_STATS_INVALID 0x00000001 -#define VA_PICTURE_STATS_PROGRESSIVE 0x00000000 -#define VA_PICTURE_STATS_TOP_FIELD 0x00000002 -#define VA_PICTURE_STATS_BOTTOM_FIELD 0x00000004 -/** \brief picutre surface content updated indicator. - * The picture surface content is updated, it means temporary buffer like downscaled pixel data in driver - * internal needs be forced freshing - **/ -#define VA_PICTURE_STATS_CONTENT_UPDATED 0x00000010 - -/** \brief Motion Vector and Statistics frame level controls. - * common part VAStatsStatisticsParameterBufferType for a MB or CTB - **/ -typedef struct _VAStatsStatisticsParameter { - /** \brief Source surface ID. */ - VAPictureStats input; - - /** \brief Past reference surface ID pointer. */ - VAPictureStats *past_references; - - /** \brief Past reference surface number */ - uint32_t num_past_references; - - /** \brief Statistics output for past reference surface. - * Only enabling statistics output for past reference picture when *past_ref_stat_buf is a valid - * VABufferID, it is needed in case app wants statistics data of both reference and current pictures - * in very special use cases for better performance. - * The output layout is defined by VAStatsStatisticsBufferType(for progressive and top field of - * interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case), only - * pixel_average_16x16/pixel_average_8x8 and variance_16x16/variance_8x8 data are valid. - **/ - VABufferID *past_ref_stat_buf; - - /** \brief Future reference surface ID pointer. */ - VAPictureStats *future_references; - - /** \brief Future reference surface number */ - uint32_t num_future_references; - - /** \brief Statistics output for future reference surface. - * Only enabling statistics output for future reference picture when *past_ref_stat_buf is a valid - * VABufferID, it is needed in case app wants statistics data of both reference and current pictures - * in very special use cases for better performance. - * The output layout is defined by VAStatsStatisticsBufferType(for progressive and top field of - * interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case), only - * pixel_average_16x16/pixel_average_8x8 and variance_16x16/variance_8x8 data are valid. - **/ - VABufferID *future_ref_stat_buf; - - /** \brief ID of the output buffer. - * The number of outputs is determined by below DisableMVOutput and DisableStatisticsOutput. - * The output layout is defined by VAStatsMVBufferType, VAStatsStatisticsBufferType(for progressive and - * top field of interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case). - **/ - VABufferID *outputs; - - /** \brief MV predictor. It is valid only when mv_predictor_ctrl is not 0. - * Each block has a pair of MVs, one for past and one for future reference - * as defined by VAMotionVector. The block is in raster scan order. - * Buffer size shall not be less than the number of blocks multiplied by sizeof(VAMotionVector). - **/ - VABufferID mv_predictor; - - /** \brief QP input buffer. It is valid only when mb_qp is set to 1. - * The data in this buffer correspond to the input source. - * One QP per MB or CTB block in raster scan order, each QP is a signed char (8-bit) value. - **/ - VABufferID qp; -} VAStatsStatisticsParameter; - -#ifdef __cplusplus -} -#endif - -#endif /* VA_FEI_H */ diff --git a/prebuilts/x86/include/va/va_fei_h264.h b/prebuilts/x86/include/va/va_fei_h264.h deleted file mode 100644 index ddb8e8c..0000000 --- a/prebuilts/x86/include/va/va_fei_h264.h +++ /dev/null @@ -1,504 +0,0 @@ -/* - * Copyright (c) 2007-2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_fei_h264.h - * \brief The FEI encoding H264 special API - */ - -#ifndef VA_FEI_H264_H -#define VA_FEI_H264_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "va_fei.h" - -/** - * \defgroup api_fei_h264 H.264 FEI encoding API - * - * @{ - */ - -/** \brief FEI frame level control buffer for H.264 */ -typedef struct _VAEncMiscParameterFEIFrameControlH264 { - uint32_t function; /* one of the VAConfigAttribFEIFunctionType values */ - /** \brief MB (16x16) control input buffer. It is valid only when (mb_input | mb_size_ctrl) - * is set to 1. The data in this buffer correspond to the input source. 16x16 MB is in raster scan order, - * each MB control data structure is defined by VAEncFEIMBControlH264. - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMBControlH264). - * Note: if mb_qp is set, VAEncQPBufferH264 is expected. - */ - VABufferID mb_ctrl; - /** \brief distortion output of MB ENC or ENC_PAK. - * Each 16x16 block has one distortion data with VAEncFEIDistortionH264 layout - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIDistortionH264). - */ - VABufferID distortion; - /** \brief MVs data output of MB ENC. - * Each 16x16 block has one MVs data with layout VAMotionVector - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAMotionVector) * 16. - */ - VABufferID mv_data; - /** \brief MBCode data output of MB ENC. - * Each 16x16 block has one MB Code data with layout VAEncFEIMBCodeH264 - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMBCodeH264). - */ - VABufferID mb_code_data; - /** \brief QP input buffer with layout VAEncQPBufferH264. It is valid only when mb_qp is set to 1. - * The data in this buffer correspond to the input source. - * One QP per 16x16 block in raster scan order, each QP is a signed char (8-bit) value. - **/ - VABufferID qp; - /** \brief MV predictor. It is valid only when mv_predictor_enable is set to 1. - * Each 16x16 block has one or more pair of motion vectors and the corresponding - * reference indexes as defined by VAEncFEIMVPredictorH264. 16x16 block is in raster scan order. - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMVPredictorH264). */ - VABufferID mv_predictor; - - /** \brief number of MV predictors. It must not be greater than maximum supported MV predictor. */ - uint32_t num_mv_predictors_l0 : 16; - uint32_t num_mv_predictors_l1 : 16; - - /** \brief motion search method definition - * 0: default value, diamond search - * 1: full search - * 2: diamond search - **/ - uint32_t search_path : 8; - /** \brief maximum number of Search Units, valid range is [1, 63] - * 0 is treated as 1. reference search locations are grouped in a predefined pattern, - * and all locations within the same group must be either all are chosen or all are skipped. - * These predefined groups are called search unit (SU).*/ - uint32_t len_sp : 8; - uint32_t reserved0 : 16; - /** \brief defines the bit-mask for disabling sub-partition - * The lower 4 bits are for the major partitions (sub-macroblock) and the higher 3 bits for minor partitions (with sub-partition for 4x(8x8) sub-macroblocks. - * xxxxxx1 : 16x16 sub-macroblock disabled - * xxxxx1x : 2x(16x8) sub-macroblock within 16x16 disabled - * xxxx1xx : 2x(8x16) sub-macroblock within 16x16 disabled - * xxx1xxx : 1x(8x8) sub-partition for 4x(8x8) within 16x16 disabled - * xx1xxxx : 2x(8x4) sub-partition for 4x(8x8) within 16x16 disabled - * x1xxxxx : 2x(4x8) sub-partition for 4x(8x8) within 16x16 disabled - * 1xxxxxx : 4x(4x4) sub-partition for 4x(8x8) within 16x16 disabled - * 1111111 : Invalid - * 0000000 : default value */ - uint32_t sub_mb_part_mask : 7; - /** specifies which Luma Intra partition is enabled/disabled for intra mode decision. - * xxxx1: luma_intra_16x16 disabled - * xxx1x: luma_intra_8x8 disabled - * xx1xx: luma_intra_4x4 disabled - * xx111: intra prediction is disabled */ - uint32_t intra_part_mask : 5; - /** when set to 1, neighbor MV will be used as predictor; when set to 0, no neighbor MV will be used as predictor.*/ - uint32_t multi_pred_l0 : 1; - /** when set to 1, neighbor MV will be used as predictor; when set to 0, no neighbor MV will be used as predictor.*/ - uint32_t multi_pred_l1 : 1; - /**defines the half/quarter pel modes. The mode is inclusive, ie., higher precision mode samples lower precision locations. - * 00b: integer mode searching - * 01b: half-pel mode searching - * 10b: reserved - * 11b: quarter-pel mode searching */ - uint32_t sub_pel_mode : 2; - /** specifies distortion measure adjustments used for the inter motion search SAD comparison. - * 00b: none - * 10b: Haar transform adjusted*/ - uint32_t inter_sad : 2; - /** specifies distortion measure adjustments used for the intra motion search SAD comparison. - * 00b: none - * 10b: Haar transform adjusted*/ - uint32_t intra_sad : 2; - /** specifies if the output distortion is the raw distortion or cost adjusted distortion. - * 0: Raw Distortion without Cost - * 1: Distortion with added Cost */ - uint32_t distortion_type : 1; - /** when set to 1, enables the additional calls on Fraction & Bidirectional Refinement*/ - uint32_t repartition_check_enable : 1; - /** defines whether adaptive searching is enabled for IME(Integer Motion Estimation). - * 0: disable - * 1: enable */ - uint32_t adaptive_search : 1; - /** enables using the motion vector as an extra predictor provided by the host. If it is set, - * host needs to provide a buffer with motion vectors and the associated reference index for - * each 16x16 block as defined . The host can call processing function to get motion vectors and use as predictor. - * 0: MV predictor disabled - * 1: MV predictor enabled */ - uint32_t mv_predictor_enable : 1; - /** enables using the QP buffer to set the QP for each block*/ - uint32_t mb_qp : 1; - /** enable mb_ctrl buffer to handle MB*/ - uint32_t mb_input : 1; - /** when this flag is set, mb_ctrl must be set too and a buffer with per MB input - * needs to be provided and MaxSizeInWord and */ - uint32_t mb_size_ctrl : 1; - /** when this flag is set, extra distortion between the current MB and co-located MB is provided. - * Extra distortion output has performance impact, set it only when it is needed.*/ - uint32_t colocated_mb_distortion : 1; - uint32_t reserved1 : 4; - - /** \brief motion search window(ref_width * ref_height) */ - uint32_t ref_width : 8; - uint32_t ref_height : 8; - /** \brief predefined motion search windows. If selected, len_sp, window(ref_width * ref_eight) - * and search_path setting are ignored. - * 0: not use predefined search window - * 1: Tiny, len_sp=4, 24x24 window and diamond search - * 2: Small, len_sp=9, 28x28 window and diamond search - * 3: Diamond, len_sp=16, 48x40 window and diamond search - * 4: Large Diamond, len_sp=32, 48x40 window and diamond search - * 5: Exhaustive, len_sp=48, 48x40 window and full search - * 6: Extend Diamond, len_sp=16, 64x40 window and diamond search - * 7: Extend Large Diamond, len_sp=32, 64x40 window and diamond search - * 8: Extend Exhaustive, len_sp=48, 64x40 window and full search - **/ - uint32_t search_window : 4; - uint32_t reserved2 : 12; - - /** \brief max frame size control with multi passes QP setting */ - uint32_t max_frame_size; - /** \brief number of passes, every pass has different QP */ - uint32_t num_passes; - /** \brief delta QP list for every pass */ - uint8_t *delta_qp; - uint32_t reserved3[VA_PADDING_LOW]; -} VAEncMiscParameterFEIFrameControlH264; - -/** \brief FEI MB level control data structure */ -typedef struct _VAEncFEIMBControlH264 { - /** \brief when set, correposndent MB is coded as intra */ - uint32_t force_to_intra : 1; - /** \brief when set, correposndent MB is coded as skip */ - uint32_t force_to_skip : 1; - /** \brief specifies whether this macroblock should be coded as a non-skipped macroblock. */ - uint32_t force_to_nonskip : 1; - uint32_t enable_direct_bias_adjustment : 1; - uint32_t enable_motion_bias_adjustment : 1; - uint32_t ext_mv_cost_scaling_factor : 3; - uint32_t reserved0 : 24; - - uint32_t reserved1; - - uint32_t reserved2; - - uint32_t reserved3 : 16; - /** \brief when mb_size_ctrl is set, size here is used to budget accumulatively. Set to 0xFF if don't care. */ - uint32_t target_size_in_word : 8; - /** \brief specifies the max size of each MB */ - uint32_t max_size_in_word : 8; -} VAEncFEIMBControlH264; - - -/** \brief Application can use this definition as reference to allocate the buffer - * based on MaxNumPredictor returned from attribute VAConfigAttribFEIMVPredictors query. - **/ -typedef struct _VAEncFEIMVPredictorH264 { - /** \brief Reference index corresponding to the entry of RefPicList0 & RefPicList1 in VAEncSliceParameterBufferH264. - * Note that RefPicList0 & RefPicList1 needs to be the same for all slices. - * ref_idx_l0_x : index to RefPicList0; ref_idx_l1_x : index to RefPicList1; x : 0 - MaxNumPredictor. - **/ - struct { - uint8_t ref_idx_l0 : 4; - uint8_t ref_idx_l1 : 4; - } ref_idx[4]; /* index is predictor number */ - uint32_t reserved; - /** \brief MV. MaxNumPredictor must be the returned value from attribute VAConfigAttribFEIMVPredictors query. - * Even application doesn't use the maximum predictors, the VAFEIMVPredictorH264 structure size - * has to be defined as maximum so each MB can be at a fixed location. - * Note that 0x8000 must be used for correspondent intra block. - **/ - VAMotionVector mv[4]; /* MaxNumPredictor is 4 */ -} VAEncFEIMVPredictorH264; - -/** \brief FEI output */ -/** - * Motion vector output is per 4x4 block. For each 4x4 block there is a pair of MVs - * for RefPicList0 and RefPicList1 and each MV is 4 bytes including horizontal and vertical directions. - * Depending on Subblock partition, for the shape that is not 4x4, the MV is replicated - * so each 4x4 block has a pair of MVs. The 16x16 block has 32 MVs (128 bytes). - * 0x8000 is used for correspondent intra block. The 16x16 block is in raster scan order, - * within the 16x16 block, each 4x4 block MV is ordered as below in memory. - * The buffer size shall be greater than or equal to the number of 16x16 blocks multiplied by 128 bytes. - * Note that, when separate ENC and PAK is enabled, the exact layout of this buffer is needed for PAK input. - * App can reuse this buffer, or copy to a different buffer as PAK input. - * Layout is defined as Generic motion vector data structure VAMotionVector - * 16x16 Block - * ----------------------------------------- - * | 1 | 2 | 5 | 6 | - * ----------------------------------------- - * | 3 | 4 | 7 | 8 | - * ----------------------------------------- - * | 9 | 10 | 13 | 14 | - * ----------------------------------------- - * | 11 | 12 | 15 | 16 | - * ----------------------------------------- - **/ - -/** \brief VAEncFEIMBCodeH264 defines the data structure for VAEncFEIMBCodeBufferType per 16x16 MB block. - * it is output buffer of ENC and ENC_PAK modes, it's also input buffer of PAK mode. - * The 16x16 block is in raster scan order. Buffer size shall not be less than the number of 16x16 blocks - * multiplied by sizeof(VAEncFEIMBCodeH264). Note that, when separate ENC and PAK is enabled, - * the exact layout of this buffer is needed for PAK input. App can reuse this buffer, - * or copy to a different buffer as PAK input, reserved elements must not be modified when used as PAK input. - **/ -typedef struct _VAEncFEIMBCodeH264 { - //DWORD 0~2 - uint32_t reserved0[3]; - - //DWORD 3 - uint32_t inter_mb_mode : 2; - uint32_t mb_skip_flag : 1; - uint32_t reserved1 : 1; - uint32_t intra_mb_mode : 2; - uint32_t reserved2 : 1; - uint32_t field_mb_polarity_flag : 1; - uint32_t mb_type : 5; - uint32_t intra_mb_flag : 1; - uint32_t field_mb_flag : 1; - uint32_t transform8x8_flag : 1; - uint32_t reserved3 : 1; - uint32_t dc_block_coded_cr_flag : 1; - uint32_t dc_block_coded_cb_flag : 1; - uint32_t dc_block_coded_y_flag : 1; - uint32_t reserved4 : 12; - - //DWORD 4 - uint32_t horz_origin : 8; - uint32_t vert_origin : 8; - uint32_t cbp_y : 16; - - //DWORD 5 - uint32_t cbp_cb : 16; - uint32_t cbp_cr : 16; - - //DWORD 6 - uint32_t qp_prime_y : 8; - uint32_t reserved5 : 17; - uint32_t mb_skip_conv_disable : 1; - uint32_t is_last_mb : 1; - uint32_t enable_coefficient_clamp : 1; - uint32_t direct8x8_pattern : 4; - - //DWORD 7 8 and 9 - union { - /* Intra MBs */ - struct { - uint32_t luma_intra_pred_modes0 : 16; - uint32_t luma_intra_pred_modes1 : 16; - - uint32_t luma_intra_pred_modes2 : 16; - uint32_t luma_intra_pred_modes3 : 16; - - uint32_t chroma_intra_pred_mode : 2; - uint32_t intra_pred_avail_flag : 5; - uint32_t intra_pred_avail_flagF : 1; - uint32_t reserved6 : 24; - } intra_mb; - - /* Inter MBs */ - struct { - uint32_t sub_mb_shapes : 8; - uint32_t sub_mb_pred_modes : 8; - uint32_t reserved7 : 16; - - uint32_t ref_idx_l0_0 : 8; - uint32_t ref_idx_l0_1 : 8; - uint32_t ref_idx_l0_2 : 8; - uint32_t ref_idx_l0_3 : 8; - - uint32_t ref_idx_l1_0 : 8; - uint32_t ref_idx_l1_1 : 8; - uint32_t ref_idx_l1_2 : 8; - uint32_t ref_idx_l1_3 : 8; - } inter_mb; - } mb_mode; - - //DWORD 10 - uint32_t reserved8 : 16; - uint32_t target_size_in_word : 8; - uint32_t max_size_in_word : 8; - - //DWORD 11~14 - uint32_t reserved9[4]; - - //DWORD 15 - uint32_t reserved10; -} VAEncFEIMBCodeH264; // 64 bytes - -/** \brief VAEncFEIDistortionH264 defines the data structure for VAEncFEIDistortionBufferType per 16x16 MB block. - * It is output buffer of ENC and ENC_PAK modes, The 16x16 block is in raster scan order. - * Buffer size shall not be less than the number of 16x16 blocks multiple by sizeof(VAEncFEIDistortionH264). - **/ -typedef struct _VAEncFEIDistortionH264 { - /** \brief Inter-prediction-distortion associated with motion vector i (co-located with subblock_4x4_i). - * Its meaning is determined by sub-shape. It must be zero if the corresponding sub-shape is not chosen. - **/ - uint16_t inter_distortion[16]; - uint32_t best_inter_distortion : 16; - uint32_t best_intra_distortion : 16; - uint32_t colocated_mb_distortion : 16; - uint32_t reserved0 : 16; - uint32_t reserved1[2]; -} VAEncFEIDistortionH264; // 48 bytes - -/** \brief Motion Vector and Statistics frame level controls. - * VAStatsStatisticsParameterBufferType for H264 16x16 block - **/ -typedef struct _VAStatsStatisticsParameterH264 { - VAStatsStatisticsParameter stats_params; - - uint32_t frame_qp : 8; - /** \brief length of search path */ - uint32_t len_sp : 8; - /** \brief motion search method definition - * 0: default value, diamond search - * 1: full search - * 2: diamond search - **/ - uint32_t search_path : 8; - uint32_t reserved0 : 8; - - uint32_t sub_mb_part_mask : 7; - /** \brief sub pixel mode definition - * 00b: integer mode searching - * 01b: half-pel mode searching - * 10b: reserved - * 11b: quarter-pel mode searching - **/ - uint32_t sub_pel_mode : 2; - /** \brief distortion measure adjustment for inter search SAD comparison - * 00b: none - * 01b: reserved - * 10b: Haar transform adjusted - * 11b: reserved - **/ - uint32_t inter_sad : 2; - /** \brief distortion measure adjustment for intra search SAD comparison - * 00b: none - * 01b: reserved - * 10b: Haar transform adjusted - * 11b: reserved - **/ - uint32_t intra_sad : 2; - uint32_t adaptive_search : 1; - /** \brief indicate if future or/and past MV in mv_predictor buffer is valid. - * 0: MV predictor disabled - * 1: MV predictor enabled for past reference - * 2: MV predictor enabled for future reference - * 3: MV predictor enabled for both past and future references - **/ - uint32_t mv_predictor_ctrl : 3; - uint32_t mb_qp : 1; - /** \brief forward transform enable - * 0: disable - * 1: enable, needs frame_qp or mb_qp input for transform - **/ - uint32_t ft_enable : 1; - /** \brief luma intra mode partition mask - * xxxx1: luma_intra_16x16 disabled - * xxx1x: luma_intra_8x8 disabled - * xx1xx: luma_intra_4x4 disabled - * xx111: intra prediction is disabled - **/ - uint32_t intra_part_mask : 5; - uint32_t reserved1 : 8; - - /** \brief motion search window(ref_width * ref_height) */ - uint32_t ref_width : 8; - uint32_t ref_height : 8; - /** \brief predefined motion search windows. If selected, len_sp, window(ref_width * ref_eight) - * and search_path setting are ignored. - * 0: not use predefined search window - * 1: Tiny, len_sp=4, 24x24 window and diamond search - * 2: Small, len_sp=9, 28x28 window and diamond search - * 3: Diamond, len_sp=16, 48x40 window and diamond search - * 4: Large Diamond, len_sp=32, 48x40 window and diamond search - * 5: Exhaustive, len_sp=48, 48x40 window and full search - * 6: Extend Diamond, len_sp=16, 64x40 window and diamond search - * 7: Extend Large Diamond, len_sp=32, 64x40 window and diamond search - * 8: Extend Exhaustive, len_sp=48, 64x40 window and full search - **/ - uint32_t search_window : 4; - uint32_t reserved2 : 12; - - /** \brief MVOutput. When set to 1, MV output is NOT provided */ - uint32_t disable_mv_output : 1; - /** \brief StatisticsOutput. When set to 1, Statistics output is NOT provided. */ - uint32_t disable_statistics_output : 1; - /** \brief block 8x8 data enabling in statistics output */ - uint32_t enable_8x8_statistics : 1; - uint32_t reserved3 : 29; - uint32_t reserved4[2]; -} VAStatsStatisticsParameterH264; - -/** \brief VAStatsStatisticsH264. H264 Statistics buffer layout for VAStatsStatisticsBufferType - * and VAStatsStatisticsBottomFieldBufferType(for interlaced only). - * Statistics output is per 16x16 block. Data structure per 16x16 block is defined below. - * The 16x16 block is in raster scan order. The buffer size shall be greater than or equal to - * the number of 16x16 blocks multiplied by sizeof(VAStatsStatisticsH264). - **/ -typedef struct _VAStatsStatisticsH264 { - /** \brief past reference */ - uint32_t best_inter_distortion0 : 16; - uint32_t inter_mode0 : 16; - - /** \brief future reference */ - uint32_t best_inter_distortion1 : 16; - uint32_t inter_mode1 : 16; - - uint32_t best_intra_distortion : 16; - uint32_t intra_mode : 16; - - uint32_t num_non_zero_coef : 16; - uint32_t reserved0 : 16; - - uint32_t sum_coef; - - /** \brief DWORD 5 flat info **/ - uint32_t mb_is_flat : 1; - uint32_t reserved1 : 31; - - /** \brief DWORD 6 variance for block16x16**/ - uint32_t variance_16x16; - /** \brief DWORD 7 ~ 10, variance for block8x8 **/ - uint32_t variance_8x8[4]; - - /** \brief DWORD 11 pixel_average for block16x16 **/ - uint32_t pixel_average_16x16; - /** \brief DWORD 12 ~ 15, pixel_average for block8x8 **/ - uint32_t pixel_average_8x8[4]; -} VAStatsStatisticsH264; // 64 bytes - - -#ifdef __cplusplus -} -#endif - -#endif /* VA_FEI_H264_H */ diff --git a/prebuilts/x86/include/va/va_fei_hevc.h b/prebuilts/x86/include/va/va_fei_hevc.h deleted file mode 100644 index 6ba9047..0000000 --- a/prebuilts/x86/include/va/va_fei_hevc.h +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Copyright (c) 2007-2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_fei_hevc.h - * \brief The FEI encoding HEVC special API - */ - - -#ifndef __VA_FEI_HEVC_H__ -#define __VA_FEI_HEVC_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "va_fei.h" - -/** - * \defgroup api_fei_hevc HEVC FEI encoding API - * - * @{ - */ - -/** \brief FEI frame level control buffer for HEVC */ -typedef struct _VAEncMiscParameterFEIFrameControlHEVC { - /* one of the VAConfigAttribFEIFunctionType values */ - uint32_t function; - /** \brief CTB control input buffer. It is valid only when per_ctb_input - * is set to 1. The data in this buffer correspond to the input source. CTB is in raster scan order, - * each CTB control data structure is defined by VAEncFEICTBControlHEVC. - * Buffer size shall not be less than the number of CTBs multiplied by - * sizeof(VAEncFEICTBControlHEVC). - */ - VABufferID ctb_ctrl; - /** \brief CTB cmd per CTB data output of ENC - * it is reserved for CTB level information - * it should include CU split information and other CTB datas . - * Each CTB block has one CTB cmd data. - */ - VABufferID ctb_cmd; - /** \brief CU record data output of ENC - * it is reserved for CU level information - * it should include CU detail data. include mode,MV, reference etc. - * Each CTB block has one CU record data. - */ - VABufferID cu_record; - /** \brief distortion output of ENC or ENC_PAK. - * Each CTB has one distortion data with VAEncFEIDistortionHevc - * Buffer size shall not be less than the number of CTBs multiplied by - * sizeof(VAEncFEIDistortionHevc). - */ - VABufferID distortion; - /** \brief Qp input buffer. It is valid only when per_block_qp is set to 1. - * The data in this buffer correspond to the input source. - * One Qp per block block is in raster scan order, each Qp is a signed char (8-bit) value. - **/ - VABufferID qp; - /** \brief MV predictor. It is valid only when mv_predictor_input is set to non-zero. - * Each CTB block has one or more pair of motion vectors and the corresponding - * reference indexes as defined by VAEncFEIMVPredictorHEVC. 32x32 block is in raster scan order. - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMVPredictorHEVC). */ - VABufferID mv_predictor; - - /** \brief number of MV predictors L0 and L1. the maximum number of motion vector predictor for a 16x16, 32x32 or - * 64x64 block is four, it must not be greater than maximum supported MV predictor, - **/ - uint32_t num_mv_predictors_l0 : 16; - uint32_t num_mv_predictors_l1 : 16; - - /** \brief control parameters */ - uint32_t search_path : 8; - uint32_t len_sp : 8; - uint32_t reserved0 : 16; - - /** \brief multi pred l0/1 - * 0000: no internal MV predictor will be used - * 0001: spatial MV predictors - * 0100/1000: Reserved - **/ - uint32_t multi_pred_l0 : 4; - uint32_t multi_pred_l1 : 4; - /** \brief defines the motion vector precision, like integer/half/quarter pel. - * 00b: integer pel - * 01b: half-pel - * 10b: reserved - * 11b: quarter-pel - */ - uint32_t sub_pel_mode : 2; - uint32_t adaptive_search : 1; - /** \brief mv_predictor_input - * 000: MV predictor disabled - * 001: MV predictor enabled per 16x16 block - * 010: MV predictor enabled per 32x32 block - * 011: MV predictor enabled per 64x64 block - * 111: MV predictor enabled, block size can vary and is determined by BlockSize in motion vector predictor buffer - * 100/101/110: Reserved - **/ - uint32_t mv_predictor_input : 3; - /** \brief enables per CTB or CU qp */ - uint32_t per_block_qp : 1; - /** \brief enables the per CTB input , if 1, need ctb_ctrl to be a real surface ID*/ - uint32_t per_ctb_input : 1; - /** when this flag is set, extra distortion between current CTB and co-located CTB is provided. - * Extra distortion output has performance impact, set it only when it is needed */ - uint32_t colocated_ctb_distortion : 1; - /** brief specifies whether this CTB should be forced to split to remove Inter big LCU: do not check Inter 32x32 - * PUs. Every 32x32 LCU is split at least once. It can be used to improved performance. - * 0: ENC determined block type - * 1: Force to split - **/ - uint32_t force_lcu_split : 1; - /** \brief enables CU64x64 check */ - uint32_t enable_cu64_check : 1; - /** \brief enables CU64x64 asymmetric motion partition check */ - uint32_t enable_cu64_amp_check : 1; - /** \brief specifies if check the 64x64 merge candidate - * 0: after skip check, - * 1: only skip check for 64x64 - Default: 0. This field is used by LCU64 bi-directional. - **/ - uint32_t cu64_skip_check_only : 1; - uint32_t reserved1 : 11; - /** specifies the search region width in pixels. - * When bidirectional search is enabled, this applies to both search regions */ - uint32_t ref_width : 8; - /** specifies the reference region height in pixels. When bidirectional search is enabled, - * this applies to both search regions. */ - uint32_t ref_height : 8; - /** \brief search window similar for AVC - * defines predefined search windows. If it is selected, RefWidth, RefHeight, LenSP and SearchPath are ignored. - * 0 : not use predefined search window - * 1 : Tiny – (4 SUs) 24x24 window diamond search - * 2 : Small – (9 SUs) 28x28 window diamond search - * 3 : Diamond – (16 SUs) 48x40 window diamond search - * 4 : Large Diamond – (32 SUs) 48x40 window diamond search - * 5 : Exhaustive – 48x40 window full search - * 6 : (64 SUs) 64x64 window full search - * Note: option 1, 2, 3 and 4 are valid only when CAP parameter SearchWindow64Support is 0. - * And option 6 is valid only when SearchWindow64Support is 1.*/ - uint32_t search_window : 8; - /** \brief number of internal MV predictors for IME searches */ - uint32_t max_num_ime_search_center : 3; - /** \brief fast intra prediction enabling bit. It is used as a trade-off between speed and quality. - * The flag will be ignored if it's unsupported in the driver*/ - uint32_t fast_intra_mode : 1; - uint32_t reserved2 : 4; - - /** \brief specifies number of splits that encoder could be run concurrently - * 1: level 1, default value - * 2: level 2 - * 4: level 3 - **/ - uint32_t num_concurrent_enc_frame_partition : 8; - uint32_t reserved3 : 24; - - /** \brief max frame size control with multi passes QP setting */ - uint32_t max_frame_size; - /** \brief number of passes, every pass has different QP */ - uint32_t num_passes; - /** \brief delta QP list for every pass */ - uint8_t *delta_qp; - - uint32_t reserved4[2]; -} VAEncMiscParameterFEIFrameControlHEVC; - -/** \brief Application can use this definition as reference to allocate the buffer - * based on MaxNumPredictor returned from attribute VAConfigAttribFEIMVPredictors query. - * this buffer allocation is always based on 16x16 block even block size is indicated as 32x32 or 64x64, and buffer - * layout is always in 32x32 block raster scan order even block size is 16x16 or 64x64. If 32x32 block size is set, - * only the data in the first 16x16 block (block 0) is used for 32x32 block. If 64x64 block size is set - * MV layout is still in 32x32 raster scan order, the same as 32x32 and the first 16x16 - * block within each 32x32 block needs to have intended MV data (four 32x32 blocks will have the same MV data in the - * correspondent first 16x16 block). Data structure for each 16x16 block is defined as below (same as AVC except - * BlockSize/Reserved bits). - **/ -typedef struct _VAEncFEIMVPredictorHEVC { - /** \brief Feference index corresponding to the entry of RefPicList0 & RefPicList1 in slice header (final reference - * list). Note that RefPicList0 & RefPicList1 needs to be the same for all slices. - * Ref0xIndex – RefPicList0; Ref1xIndex – RefPicList1; x – 0 ~ MaxNumPredictor */ - struct { - uint8_t ref_idx_l0 : 4; - uint8_t ref_idx_l1 : 4; - } ref_idx[4]; /* index is predictor number */ - /** \brief Valid only when MVPredictor is set to 011 for HEVC. Only valid in the first 16x16 block. - * 00: MV predictor disabled for this 32x32 block - * 01: MV predictor enabled per 16x16 block for this 32x32 block - * 10: MV predictor enabled per 32x32 block, the rest of 16x16 block data within this 32x32 block are ignored - * 11: Reserved */ - uint32_t block_size : 2; - uint32_t reserved : 30; - - VAMotionVector mv[4]; /* MaxNumPredictor is 4 */ -} VAEncFEIMVPredictorHEVC; //40 bytes - -/** \brief FEI CTB level control data structure */ -typedef struct _VAEncFEICTBControlHEVC { - // DWORD 0 - uint32_t force_to_intra : 1; - uint32_t force_to_inter : 1; - uint32_t force_to_skip : 1; - /** \brief force all coeff to zero */ - uint32_t force_to_zero_coeff : 1; - uint32_t reserved0 : 28; - // DWORD 1 - uint32_t reserved1; - // DWORD 2 - uint32_t reserved2; - // DWORD 3 - uint32_t reserved3; -} VAEncFEICTBControlHEVC; - -/** \brief VAEncFEIDistortionHevc defines the data structure for VAEncFEIDistortionBufferType per CTB block. - * It is output buffer of ENC and ENC_PAK modes, The CTB block is in raster scan order. - * Buffer size shall not be less than the number of CTB blocks multiple by sizeof(VAEncFEIDistortionHevc). - **/ -typedef struct _VAEncFEIDistortionHevc { - /** best CTB distortion */ - uint32_t best_distortion; - /** only when colocated_ctb_distortion in VAEncMiscParameterFEIFrameControlHEVC is set */ - uint32_t colocated_ctb_distortion; -} VAEncFEIDistortionHevc; -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/prebuilts/x86/include/va/va_prot.h b/prebuilts/x86/include/va/va_prot.h deleted file mode 100644 index 5c59bb0..0000000 --- a/prebuilts/x86/include/va/va_prot.h +++ /dev/null @@ -1,515 +0,0 @@ -/* - * Copyright (c) 2020 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_prot.h - * \brief Protected content API. - * - * This file contains the \ref api_prot "Protected content API". - */ - -#ifndef VA_PROT_H -#define VA_PROT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_prot Protected content API - * - * @{ - * \section prolouge Prolouge - * Video streaming is ubiquitous and the support for video streaming is widely - * available across client open systems such as PCs, MACs, Chromebooks etc. and - * closed systems such as settop box, smart TVs, DVDs etc. By default, - * video streaming is not considered premium due to various constraints such as - * resolution, quality, production cost etc. but recently streaming of premium - * video(1080p+) has become norm. The streaming of premium video in open systems - * such as PCs, MACs, Chromebooks etc. makes video particularly susceptible to - * piracy (due to non-video playback usages of such systems) resulting in - * millions of dollars of loss to content creators. - * - * Digital Rights Management(DRM) has been proposed to stop piracy of premium - * video streams across a wide spectrum. There are some known open/closed DRM - * standards such as [Widevine by Google](https://www.widevine.com/), - * [PlayReady by Microsoft](https://www.microsoft.com/playready/), - * [FairPlay by Apple](https://developer.apple.com/streaming/fps/), - * [Merlin by Sony](https://www.marlin-community.com/), etc... Each DRM - * standard has its properties but all DRM standards support a common - * mechanism. This common mechanism involves cryptographical method for - * authenticating the client system, delivering bitstream and required - * cryptographic assets to client system and then cryptographically processing - * bitstream in client system. The cryptographic methods used in these steps - * are asymmetric such as RSA, DH etc. and symmetric such as AES CTR, CBC etc. - * encryption mechanisms. The authentication of client system, delivery of - * bitstream and cryptographic assets to client system is performed using - * asymmetric cryptographic mechanism while bitstream is encrypted and processed - * using symmetric cryptographic. In DRM world, authentication of client system, - * delivery of bitstream and required cryptographic assets to client system is - * loosely called provisioning and license acquisition while the processing of - * cryptographically secure bitstream is divided as video decryption/decoding, - * audio decryption/playback, video display. Besides DRM standards, Video/Audio - * bitstream encryption standard such as - * [Common Encryption Standard(CENC)](https://www.iso.org/standard/76597.html) - * provides a mechanism to normalize bitstream encryption methods across vendors - * while providing flexibility. - * - * \section DRM Pipeline - * Most DRM standards execute the following deep pipeline to playback - * contents on client systems from streaming servers - provisioning uses - * provisioning servers, licence aquisition uses license servers, video - * bitstream delivery uses content servers and decryption/decoding, audio - * bitstream delivery uses content servers and decyption/playback, - * display/playback. The system level HWDRM sequence diagram is following - - * ![HWDRM sequence diagram](https://user-images.githubusercontent.com/75039699/102427278-df284e80-3fc5-11eb-9a3e-129b5f6b567a.png) - * and HWDRM pipeline view is following - - * ![HWDRM pipeline view](https://user-images.githubusercontent.com/75039699/102427357-04b55800-3fc6-11eb-8b8c-f34fc44ec061.png) - * - * \section LibVA Protected Content APIs - * The LibVA Protected APIs are designed to enable DRM capabilities or - * facilitate isolated communicaiton with TEE. - * The VAEntrypointProtectedTEEComm is to define interfaces for Application - * to TEE direct communication to perform various TEE centric operations - * such as standalone provisioning of platform at factory or provisioning - * TEE for other usages, providing TEE capabilities etc. - * The VAEntrypointProtectedContent is to define interfaces for protected - * video playback using HWDRM. This entry point co-ordinates assets across - * TEE/GPU/Display for HWDRM playback. - * - * The difference between Protected Content and Protected TEE Communication - * is that Protected Content Entrypoint does not provide isolated entry - * point for TEE and invokes TEE only from HWDRM perspective. - * - * Protected Content Entrypoint - * The most of DRM standards execute following deep pipeline to playback - * contents on client systems from streaming servers - provisioning uses - * provisioning servers, licence aquisition uses license servers, video - * bitstream delivery uses content servers and decryption/decoding, audio - * bitstream delivery uses content servers and decyption/playback, - * display/playback. - * - * The Provisioning and License aquisition implementations are Independent - * Hardware Vendor (IHV) specific but most IHVs use some form of Trusted - * Execution Environment (TEE) to prepare client platform or system for DRM - * content playback. The provisioning operations use provisioning servers (as - * instructed in DRM standard) and client system TEE. The communication between - * provisioning servers and client system TEE uses asymmetic cryptographic - * mechanism. This step provides a way to establish root-of-trust between - * client system and streaming servers. Once root-of-trust is established then - * client system requests for license aquisition for a particular streaming - * title. The license aquisition involves communication between licensing - * servers and TEE using asymmetic cryptographic mechanism. At end of this step, - * client system TEE has required assets to decrypt/decode. Although these - * communication does not direcly involve video aspect of GPU but **facilitate - * GPU required assets to playback premium contents**. - * - * To support DRM standard requirements in playback pipeline, OSes and HWs - * incorporate various methods to protect full playback pipeline. These - * methods of protection could be SW based or HW based. The SW based protection - * mechanism of DRMs is called SWDRM while HW based protection mechanism is - * called HWDRM. There is no previous support in LibVA to support either DRM - * mechanism. - * - * For DRM capabilities, APIs inolve creation of protected session to - * communicate with TEE and then using these protected sessions to process - * video/audio data. The philophashy behind these API is to leverage existing - * LibVA infrastructure as much as possible. - * - * Note: TEE could be any secure HW device such as ME-FW or FPGA Secure - * Enclave or NPU Secure Enclave. There are 2 concepts here – TEE Type such - * as ME-FW or FPGA or NPU; TEE Type Client such as for AMT or HDCP or - * something else etc. - * - * \section description Detailed Description - * The Protected content API provides a general mechanism for opening - * protected session with TEE and if required then \ref priming GPU/Display. - * The behavior of protected session API depends on parameterization/ - * configuration of protected session. Just for TEE tasks, protected - * session is parameterized/configured as TEE Communication while for - * HWDRM, protected session is parameterized/confgured as Protected - * Content. - * - * TEE Communication Entrypoint - * With TEE Communication parameterization/configuration, client - * executes TEE workloads in TEE with TEE Communication protected - * session. - * - * Protected Content Entrypoint - * With Protected Content parameterization/configuration, client - * executes HWDRM playback workloads HW accelerating protected video - * content decryption/decoding with protected content session. - * - * Before calling vaCreateProtectedSession, VAConfigID is obtained using - * existing libva mechanism to determine configuration parameters of - * protected session. The VAConfigID is determined in this way so that - * Protected Session implementation aligns with existing libva implementation. - * After obtaining VAConfigID, Protected Session needs to be created but - * note this is a session and not a context. Refer VAProtectedSessionID - * for more details. - * - * Note:- Protected session represents session object that has all security - * information needed for Secure Enclave to operate certain operations. - * - * \subsection priming Priming - * Priming is used to refer various types of initializations. For example, - * if license acquisition is being performed then priming means that TEE is - * already provisioned aka TEE has some sort of "cryptographic" whitelist of - * servers that TEE will use to do license acquisition for video playback. If - * HWDRM video playback is being performed then priming means that HWDRM - * eco-system TEE/GPU/Display has proper keys to do proper video playback etc. - * - * Protected content API uses the following paradigm for protected content - * session: - * - \ref api_pc_caps - * - \ref api_pc_setup - * - \ref api_pc_exec - * - \ref api_pc_attach - * - * \subsection api_pc_caps Query for supported cipher mode, block size, mode - * - * Checking whether protected content is supported can be performed with - * vaQueryConfigEntrypoints() and the profile argument set to - * #VAProfileProtected. If protected content is supported, then the list of - * returned entry-points will include #VAEntrypointProtectedContent - * - * \code - * VAEntrypoint *entrypoints; - * int i, num_entrypoints, supportsProtectedContent = 0; - * - * num_entrypoints = vaMaxNumEntrypoints(); - * entrypoints = malloc(num_entrypoints * sizeof(entrypoints[0]); - * vaQueryConfigEntrypoints(va_dpy, VAProfileProtected, entrypoints, - * &num_entrypoints); - * - * for (i = 0; !supportsProtectedContent && i < num_entrypoints; i++) { - * if (entrypoints[i] == VAEntrypointProtectedContent) - * supportsProtectedContent = 1; - * } - * \endcode - * - * Then, the vaGetConfigAttributes() function is used to query the protected - * session capabilities. - * - * \code - * VAConfigAttrib attribs; - * attribs[0].type = VAConfigAttribProtectedContentCipherAlgorithm; - * attribs[1].type = VAConfigAttribProtectedContentCipherBlockSize; - * attribs[2].type = VAConfigAttribProtectedContentCipherMode; - * attribs[3].type = VAConfigAttribProtectedContentCipherSampleType; - * attribs[4].type = VAConfigAttribProtectedContentUsage; - * vaGetConfigAttributes(va_dpy, VAProfileProtected, - * VAEntrypointProtectedContent, attribs, 5); - * if ((attribs[1].value & VA_PC_CIPHER_AES) == 0) { - * // not find desired cipher algorithm - * assert(0); - * } - * if ((attribs[2].value & VA_PC_BLOCK_SIZE_128) == 0) { - * // not find desired block size - * assert(0); - * } - * if ((attribs[3].value & VA_PC_CIPHER_MODE_CBC) == 0) { - * // not find desired counter mode - * assert(0); - * } - * if ((attribs[4].value & VA_PC_SAMPLE_TYPE_SUBSAMPLE) == 0) { - * // not find desired sample type - * assert(0); - * } - * if ((attribs[5].value & VA_PC_USAGE_WIDEVINE) == 0) { - * // not find desired usage - * assert(0); - * } - * \endcode - * - * \subsection api_pc_setup Set up a protected content session - * - * TEE Communication Entrypoint - * The protected content session provides a TEE session that is used to extract - * TEE information. This information could be used to peform TEE operations. - * - * Protected Content Entrypoint - * The protected content session can be attached to VA decode/encode/vp context - * to do decryption/protection in the pipeline. - * Before creating a protected content session, it needs to create a config - * first via vaCreateConfig(). Then using this config id to create a protected - * content session via vaCreateProtectedSession(). - * - * The general control flow is demonstrated by the following pseudo-code: - * \code - * // Create config - * VAConfigID config_id; - * - * attribs[0].value = VA_PC_CIPHER_AES; - * attribs[1].value = VA_PC_BLOCK_SIZE_128; - * attribs[2].value = VA_PC_CIPHER_MODE_CBC; - * attribs[3].value = VA_PC_SAMPLE_TYPE_SUBSAMPLE; - * attribs[4].value = VA_PC_USAGE_WIDEVINE; - * va_status = vaCreateConfig(va_dpy, VAProfileProtected, - * VAEntrypointProtectedContent, attribs, 5, &config_id); - * CHECK_VASTATUS(va_status, "vaCreateConfig"); - * \endcode - * - * Once the config is set up, we can create protected content session via - vaCreateProtectedSession(). - * \code - * // Create a protected session - * VAProtectedSessionID crypto_session; - * - * va_status = vaCreateProtectedSession(va_dpy, config_id, &crypto_session); - * CHECK_VASTATUS(va_status, "vaCreateProtectedSession"); - * \endcode - * - * \subsection api_pc_exec TEE communication via vaProtectedSessionExecute() - * - * TEE Communication Entrypoint - * App needs to communicate with TEE to get TEE information or \ref priming - * "prime" TEE with information that will be utilized for future TEE - * operations/tasks. - * - * Protected Content Entrypoint - * Before starting decryption/encryption operation in GPU, app may need to - * communicate with TEE to get encrypted assets for \ref priming HWDRM pipeline - * for decryption. App need to call vaProtectedSessionExecute() to get this - * asset. The following pseudo-code demonstrates getting session assets via - * vaProtectedSessionExecute() as an example. - * - * In this example, the vaCreateBuffer is called with exec_buffer mainly becasue TEE - * Communication Entrypoint buffers are CPU bound and buffer size is small enough to - * have extra copy operation without impacting performance. - * - * \code - * uint32_t app_id = 0xFF; - * VABufferID buffer; - * VAProtectedSessionExecuteBuffer exec_buff = {0}; - * - * exec_buff.function_id = GET_SESSION_ID; - * exec_buff.input.data = nullptr; - * exec_buff.input.data_size = 0; - * exec_buff.output.data = &app_id; - * exec_buff.output.max_data_size = sizeof(app_id); - * va_status = vaCreateBuffer( - * va_dpy, - * crypto_session, - * (VABufferType) VAProtectedSessionExecuteBufferType, - * sizeof(exec_buff), - * 1, - * &exec_buff, - * &buffer); - * - * va_status = vaProtectedSessionExecute(va_dpy, crypto_session, buffer); - * - * vaDestroyBuffer(va_dpy, buffer); - * \endcode - * - * \subsection api_pc_attach Attach/Detach protected content session to the VA - * context which want to enable/disable decryption/protection - * - * Protected content session is attached to VA decode/encode/vp context to - * enable protected decoding/encoding/video processing per frame or entire - * stream. If protected session attached per frame then application has 2 - * options for decoding/encoding skip processing i.e. accomodating clear - * frames - 1. Application could do detach after each frame is processed - * to process clear frame 2. Application could remains attached to decode/ - * encode session but specify enryption byte length to 0. - * The video processing does not has option #2 mainly because API does - * not provide skip processing. - * - * \code - * vaAttachProtectedSession(va_dpy, decode_ctx, crypto_session); - * foreach (iteration) { - * vaBeginPicture(va_dpy, decode_ctx, surface); - * ... - * vaRenderPicture(va_dpy, decode_ctx, &buf_id1, 1); - * vaRenderPicture(va_dpy, decode_ctx, &buf_id2, 1); - * // Buffer holding encryption parameters, i.e. VAEncryptionParameterBufferType buffer - * vaRenderPicture(va_dpy, decode_ctx, &buf_id_enc_param, 1); - * ... - * vaEndPicture(va_dpy, decode_ctx); - * } - * vaDetachProtectedSession(va_dpy, decode_ctx); - * \endcode - * - * or it could be frame-by-frame attaching/detaching as following: - * - * \code - * foreach (iteration) { - * if (encrypted) - * vaAttachProtectedSession(va_dpy, decode_ctx, crypto_session); - - * vaBeginPicture(va_dpy, decode_ctx, surface); - * ... - * vaRenderPicture(va_dpy, decode_ctx, &buf_id1, 1); - * vaRenderPicture(va_dpy, decode_ctx, &buf_id2, 1); - * // Buffer holding encryption parameters, i.e. VAEncryptionParameterBufferType buffer - * vaRenderPicture(va_dpy, decode_ctx, &buf_id_enc_param, 1); - * ... - * vaEndPicture(va_dpy, decode_ctx); - * - * if (encrypted) - * vaDetachProtectedSession(va_dpy, decode_ctx); - - * // check encrypted variable for next frame - * } - * \endcode - */ - -/** - * ProtectedSessions and Contexts - * - * According to #VAContextID, Context represents a "virtual" video decode, - * encode or video processing pipeline. Surfaces are render targets for a given - * context. The data in the surfaces are not accessible to the client except if - * derived image is supported and the internal data format of the surface is - * implementation specific. Application can create a video decode, encode or - * processing context which represents a "virtualized" hardware device. - * - * Since Protected Session does not virtualize any HW device or build any - * pipeline but rather accessorize existing virtualized HW device or pipeline - * to operate in protected mode so we decided to create separate function. - * Beside this, a virtualized HW device or pipeline could own several protected - * sessions and operate in those protected modes without ever re-creating - * virtualization of HW device or re-building HW pipeline (an unique protected - * environment multiplexing capability in Intel HW). - * - * The returned protected_session represents a notion of Host and TEE clients - * while representing protection status in GPU and Display. - * - * Both contexts and protected sessions are identified by unique IDs and its - * implementation specific internals are kept opaque to the clients - */ -typedef VAGenericID VAProtectedSessionID; - -/** \brief TEE Execucte Function ID. */ -typedef enum _VA_TEE_EXEC_FUNCTION_ID { - VA_TEE_EXECUTE_FUNCTION_ID_PASS_THROUGH = 0x00000001, - VA_TEE_EXECUTE_FUNCTION_ID_GET_FIRMWARE_VERSION = 0x00000002, - -} VA_TEE_EXECUTE_FUNCTION_ID; - -/** \brief Input/Output buffer of VAProtectedSessionExecuteBuffer */ -typedef struct _VAProtectedSessionBuffer { - /* - * This is used when this buffer refer to output buffer. The maximum size of - * data that the driver can return in the output buffer. It is not used for - * input buffer. - */ - uint32_t max_data_size; - /* - * If it is used for input buffer, it is the size of the input data. If it is - * used for output buffer, it is the returns size of the output data written - * by the driver. - */ - uint32_t data_size; - /* - * data pointer of this buffer - */ - void *data; - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProtectedSessionBuffer; - -/** \brief Buffer for vaProtectedSessionExecute() */ -typedef struct _VAProtectedSessionExecuteBuffer { - /** \brief Specify the function to execute. It is IHV's implementation - * specific */ - uint32_t function_id; - /** \brief Input buffer */ - VAProtectedSessionBuffer input; - /** \brief Output buffer */ - VAProtectedSessionBuffer output; - /** \brief Return the result of this function. The status result is IHV's - * implementation specific */ - uint32_t status; - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProtectedSessionExecuteBuffer; - -/** - * \brief Create a protected session - * - * Create a protected session - * - * @param[in] dpy the VA display - * @param[in] config_id configuration for the protected session - * @param[out] protected_session created protected session id upon return - */ -VAStatus vaCreateProtectedSession(VADisplay dpy, VAConfigID config_id, - VAProtectedSessionID *protected_session); - -/** - * \brief Destroy a protected session - * - * Destroy a protected session - * - * @param[in] dpy the VA display - * @param[in] protected_session protected session to be destroyed - */ -VAStatus vaDestroyProtectedSession(VADisplay dpy, - VAProtectedSessionID protected_session); - -/** - * \brief Attach a protected content session to VA context - * - * Attach a protected content session to the context to enable - * decryption/protection - * - * @param[in] dpy the VA display - * @param[in] id the VA decode/encode/vp context - * @param[in] protected_session the protected session to attach - */ -VAStatus vaAttachProtectedSession(VADisplay dpy, VAGenericID id, - VAProtectedSessionID protected_session); - -/** - * \brief Detach the protected content session from the VA context - * - * Detach protected content session of the context to disable - * decryption/protection - * - * @param[in] dpy the VA display - * @param[in] id TEE client id to be detached - */ -VAStatus vaDetachProtectedSession(VADisplay dpy, VAGenericID id); - -/** - * \brief Execute provides a general mechanism for TEE client tasks execution. - * - * vaProtectedSessionExecute provides a mechanism for TEE clients to execute - * specific tasks. The implementation may differ between IHVs. - * This is a synchronous API. - * - * @param[in] dpy the VA display - * @param[in] protected_session the protected session - * @param[in,out] buf_id the VA buffer - */ -VAStatus vaProtectedSessionExecute(VADisplay dpy, - VAProtectedSessionID protected_session, - VABufferID buf_id); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_PROT_H */ diff --git a/prebuilts/x86/include/va/va_str.h b/prebuilts/x86/include/va/va_str.h deleted file mode 100644 index 1bfe583..0000000 --- a/prebuilts/x86/include/va/va_str.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - - -#ifndef _VA_STR_H_ -#define _VA_STR_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -const char *vaProfileStr(VAProfile profile); - -const char *vaEntrypointStr(VAEntrypoint entrypoint); - -const char *vaConfigAttribTypeStr(VAConfigAttribType configAttribType); - -const char *vaBufferTypeStr(VABufferType bufferType); - -const char *vaStatusStr(VAStatus status); - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_STR_H_ */ diff --git a/prebuilts/x86/include/va/va_tpi.h b/prebuilts/x86/include/va/va_tpi.h deleted file mode 100644 index fb165ad..0000000 --- a/prebuilts/x86/include/va/va_tpi.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef _VA_TPI_H_ -#define _VA_TPI_H_ - -#warning The APIs / data structures included in this file are deprecated - -#endif diff --git a/prebuilts/x86/include/va/va_version.h b/prebuilts/x86/include/va/va_version.h deleted file mode 100644 index ab2ec18..0000000 --- a/prebuilts/x86/include/va/va_version.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_VERSION_H -#define VA_VERSION_H - -/** - * VA_MAJOR_VERSION: - * - * The major version of VA-API (1, if %VA_VERSION is 1.2.3) - */ -#define VA_MAJOR_VERSION 1 - -/** - * VA_MINOR_VERSION: - * - * The minor version of VA-API (2, if %VA_VERSION is 1.2.3) - */ -#define VA_MINOR_VERSION 15 - -/** - * VA_MICRO_VERSION: - * - * The micro version of VA-API (3, if %VA_VERSION is 1.2.3) - */ -#define VA_MICRO_VERSION 0 - -/** - * VA_VERSION: - * - * The full version of VA-API, like 1.2.3 - */ -#define VA_VERSION 1.15.0 - -/** - * VA_VERSION_S: - * - * The full version of VA-API, in string form (suited for string - * concatenation) - */ -#define VA_VERSION_S "1.15.0" - -/** - * VA_VERSION_HEX: - * - * Numerically encoded version of VA-API, like 0x010203 - */ -#define VA_VERSION_HEX ((VA_MAJOR_VERSION << 24) | \ - (VA_MINOR_VERSION << 16) | \ - (VA_MICRO_VERSION << 8)) - -/** - * VA_CHECK_VERSION: - * @major: major version, like 1 in 1.2.3 - * @minor: minor version, like 2 in 1.2.3 - * @micro: micro version, like 3 in 1.2.3 - * - * Evaluates to %TRUE if the version of VA-API is greater than - * @major, @minor and @micro - */ -#define VA_CHECK_VERSION(major,minor,micro) \ - (VA_MAJOR_VERSION > (major) || \ - (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION > (minor)) || \ - (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION == (minor) && VA_MICRO_VERSION >= (micro))) - -#endif /* VA_VERSION_H */ diff --git a/prebuilts/x86/include/va/va_vpp.h b/prebuilts/x86/include/va/va_vpp.h deleted file mode 100644 index 193dc5f..0000000 --- a/prebuilts/x86/include/va/va_vpp.h +++ /dev/null @@ -1,1590 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_vpp.h - * \brief The video processing API - * - * This file contains the \ref api_vpp "Video processing API". - */ - -#ifndef VA_VPP_H -#define VA_VPP_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_vpp Video processing API - * - * @{ - * - * The video processing API uses the same paradigm as for decoding: - * - Query for supported filters; - * - Set up a video processing pipeline; - * - Send video processing parameters through VA buffers. - * - * \section api_vpp_caps Query for supported filters - * - * Checking whether video processing is supported can be performed - * with vaQueryConfigEntrypoints() and the profile argument set to - * #VAProfileNone. If video processing is supported, then the list of - * returned entry-points will include #VAEntrypointVideoProc. - * - * \code - * VAEntrypoint *entrypoints; - * int i, num_entrypoints, supportsVideoProcessing = 0; - * - * num_entrypoints = vaMaxNumEntrypoints(); - * entrypoints = malloc(num_entrypoints * sizeof(entrypoints[0]); - * vaQueryConfigEntrypoints(va_dpy, VAProfileNone, - * entrypoints, &num_entrypoints); - * - * for (i = 0; !supportsVideoProcessing && i < num_entrypoints; i++) { - * if (entrypoints[i] == VAEntrypointVideoProc) - * supportsVideoProcessing = 1; - * } - * \endcode - * - * Then, the vaQueryVideoProcFilters() function is used to query the - * list of video processing filters. - * - * \code - * VAProcFilterType filters[VAProcFilterCount]; - * unsigned int num_filters = VAProcFilterCount; - * - * // num_filters shall be initialized to the length of the array - * vaQueryVideoProcFilters(va_dpy, vpp_ctx, &filters, &num_filters); - * \endcode - * - * Finally, individual filter capabilities can be checked with - * vaQueryVideoProcFilterCaps(). - * - * \code - * VAProcFilterCap denoise_caps; - * unsigned int num_denoise_caps = 1; - * vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, - * VAProcFilterNoiseReduction, - * &denoise_caps, &num_denoise_caps - * ); - * - * VAProcFilterCapDeinterlacing deinterlacing_caps[VAProcDeinterlacingCount]; - * unsigned int num_deinterlacing_caps = VAProcDeinterlacingCount; - * vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, - * VAProcFilterDeinterlacing, - * &deinterlacing_caps, &num_deinterlacing_caps - * ); - * \endcode - * - * \section api_vpp_setup Set up a video processing pipeline - * - * A video processing pipeline buffer is created for each source - * surface we want to process. However, buffers holding filter - * parameters can be created once and for all. Rationale is to avoid - * multiple creation/destruction chains of filter buffers and also - * because filter parameters generally won't change frame after - * frame. e.g. this makes it possible to implement a checkerboard of - * videos where the same filters are applied to each video source. - * - * The general control flow is demonstrated by the following pseudo-code: - * \code - * // Create filters - * VABufferID denoise_filter, deint_filter; - * VABufferID filter_bufs[VAProcFilterCount]; - * unsigned int num_filter_bufs; - * - * for (i = 0; i < num_filters; i++) { - * switch (filters[i]) { - * case VAProcFilterNoiseReduction: { // Noise reduction filter - * VAProcFilterParameterBuffer denoise; - * denoise.type = VAProcFilterNoiseReduction; - * denoise.value = 0.5; - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcFilterParameterBufferType, sizeof(denoise), 1, - * &denoise, &denoise_filter - * ); - * filter_bufs[num_filter_bufs++] = denoise_filter; - * break; - * } - * - * case VAProcFilterDeinterlacing: // Motion-adaptive deinterlacing - * for (j = 0; j < num_deinterlacing_caps; j++) { - * VAProcFilterCapDeinterlacing * const cap = &deinterlacing_caps[j]; - * if (cap->type != VAProcDeinterlacingMotionAdaptive) - * continue; - * - * VAProcFilterParameterBufferDeinterlacing deint; - * deint.type = VAProcFilterDeinterlacing; - * deint.algorithm = VAProcDeinterlacingMotionAdaptive; - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcFilterParameterBufferType, sizeof(deint), 1, - * &deint, &deint_filter - * ); - * filter_bufs[num_filter_bufs++] = deint_filter; - * } - * } - * } - * \endcode - * - * Once the video processing pipeline is set up, the caller shall check the - * implied capabilities and requirements with vaQueryVideoProcPipelineCaps(). - * This function can be used to validate the number of reference frames are - * needed by the specified deinterlacing algorithm, the supported color - * primaries, etc. - * \code - * // Create filters - * VAProcPipelineCaps pipeline_caps; - * VASurfaceID *forward_references; - * unsigned int num_forward_references; - * VASurfaceID *backward_references; - * unsigned int num_backward_references; - * VAProcColorStandardType in_color_standards[VAProcColorStandardCount]; - * VAProcColorStandardType out_color_standards[VAProcColorStandardCount]; - * - * pipeline_caps.input_color_standards = NULL; - * pipeline_caps.num_input_color_standards = ARRAY_ELEMS(in_color_standards); - * pipeline_caps.output_color_standards = NULL; - * pipeline_caps.num_output_color_standards = ARRAY_ELEMS(out_color_standards); - * vaQueryVideoProcPipelineCaps(va_dpy, vpp_ctx, - * filter_bufs, num_filter_bufs, - * &pipeline_caps - * ); - * - * num_forward_references = pipeline_caps.num_forward_references; - * forward_references = - * malloc(num__forward_references * sizeof(VASurfaceID)); - * num_backward_references = pipeline_caps.num_backward_references; - * backward_references = - * malloc(num_backward_references * sizeof(VASurfaceID)); - * \endcode - * - * \section api_vpp_submit Send video processing parameters through VA buffers - * - * Video processing pipeline parameters are submitted for each source - * surface to process. Video filter parameters can also change, per-surface. - * e.g. the list of reference frames used for deinterlacing. - * - * \code - * foreach (iteration) { - * vaBeginPicture(va_dpy, vpp_ctx, vpp_surface); - * foreach (surface) { - * VARectangle output_region; - * VABufferID pipeline_buf; - * VAProcPipelineParameterBuffer *pipeline_param; - * - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcPipelineParameterBuffer, sizeof(*pipeline_param), 1, - * NULL, &pipeline_buf - * ); - * - * // Setup output region for this surface - * // e.g. upper left corner for the first surface - * output_region.x = BORDER; - * output_region.y = BORDER; - * output_region.width = - * (vpp_surface_width - (Nx_surfaces + 1) * BORDER) / Nx_surfaces; - * output_region.height = - * (vpp_surface_height - (Ny_surfaces + 1) * BORDER) / Ny_surfaces; - * - * vaMapBuffer(va_dpy, pipeline_buf, &pipeline_param); - * pipeline_param->surface = surface; - * pipeline_param->surface_region = NULL; - * pipeline_param->output_region = &output_region; - * pipeline_param->output_background_color = 0; - * if (first surface to render) - * pipeline_param->output_background_color = 0xff000000; // black - * pipeline_param->filter_flags = VA_FILTER_SCALING_HQ; - * pipeline_param->filters = filter_bufs; - * pipeline_param->num_filters = num_filter_bufs; - * vaUnmapBuffer(va_dpy, pipeline_buf); - * - * // Update reference frames for deinterlacing, if necessary - * pipeline_param->forward_references = forward_references; - * pipeline_param->num_forward_references = num_forward_references_used; - * pipeline_param->backward_references = backward_references; - * pipeline_param->num_backward_references = num_bacward_references_used; - * - * // Apply filters - * vaRenderPicture(va_dpy, vpp_ctx, &pipeline_buf, 1); - * } - * vaEndPicture(va_dpy, vpp_ctx); - * } - * \endcode - */ - -/** \brief Video filter types. */ -typedef enum _VAProcFilterType { - VAProcFilterNone = 0, - /** \brief Noise reduction filter. */ - VAProcFilterNoiseReduction, - /** \brief Deinterlacing filter. */ - VAProcFilterDeinterlacing, - /** \brief Sharpening filter. */ - VAProcFilterSharpening, - /** \brief Color balance parameters. */ - VAProcFilterColorBalance, - /** \brief Skin Tone Enhancement. */ - VAProcFilterSkinToneEnhancement, - /** \brief Total Color Correction. */ - VAProcFilterTotalColorCorrection, - /** \brief Human Vision System(HVS) Noise reduction filter. */ - VAProcFilterHVSNoiseReduction, - /** \brief High Dynamic Range Tone Mapping. */ - VAProcFilterHighDynamicRangeToneMapping, - /** \brief Three-Dimensional Look Up Table (3DLUT). */ - VAProcFilter3DLUT, - /** \brief Number of video filters. */ - VAProcFilterCount -} VAProcFilterType; - -/** \brief Deinterlacing types. */ -typedef enum _VAProcDeinterlacingType { - VAProcDeinterlacingNone = 0, - /** \brief Bob deinterlacing algorithm. */ - VAProcDeinterlacingBob, - /** \brief Weave deinterlacing algorithm. */ - VAProcDeinterlacingWeave, - /** \brief Motion adaptive deinterlacing algorithm. */ - VAProcDeinterlacingMotionAdaptive, - /** \brief Motion compensated deinterlacing algorithm. */ - VAProcDeinterlacingMotionCompensated, - /** \brief Number of deinterlacing algorithms. */ - VAProcDeinterlacingCount -} VAProcDeinterlacingType; - -/** \brief Color balance types. */ -typedef enum _VAProcColorBalanceType { - VAProcColorBalanceNone = 0, - /** \brief Hue. */ - VAProcColorBalanceHue, - /** \brief Saturation. */ - VAProcColorBalanceSaturation, - /** \brief Brightness. */ - VAProcColorBalanceBrightness, - /** \brief Contrast. */ - VAProcColorBalanceContrast, - /** \brief Automatically adjusted saturation. */ - VAProcColorBalanceAutoSaturation, - /** \brief Automatically adjusted brightness. */ - VAProcColorBalanceAutoBrightness, - /** \brief Automatically adjusted contrast. */ - VAProcColorBalanceAutoContrast, - /** \brief Number of color balance attributes. */ - VAProcColorBalanceCount -} VAProcColorBalanceType; - -/** \brief Color standard types. - * - * These define a set of color properties corresponding to particular - * video standards. - * - * Where matrix_coefficients is specified, it applies only to YUV data - - * RGB data always use the identity matrix (matrix_coefficients = 0). - */ -typedef enum _VAProcColorStandardType { - VAProcColorStandardNone = 0, - /** \brief ITU-R BT.601. - * - * It is unspecified whether this will use 525-line or 625-line values; - * specify the colour primaries and matrix coefficients explicitly if - * it is known which one is required. - * - * Equivalent to: - * colour_primaries = 5 or 6 - * transfer_characteristics = 6 - * matrix_coefficients = 5 or 6 - */ - VAProcColorStandardBT601, - /** \brief ITU-R BT.709. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 1 - * matrix_coefficients = 1 - */ - VAProcColorStandardBT709, - /** \brief ITU-R BT.470-2 System M. - * - * Equivalent to: - * colour_primaries = 4 - * transfer_characteristics = 4 - * matrix_coefficients = 4 - */ - VAProcColorStandardBT470M, - /** \brief ITU-R BT.470-2 System B, G. - * - * Equivalent to: - * colour_primaries = 5 - * transfer_characteristics = 5 - * matrix_coefficients = 5 - */ - VAProcColorStandardBT470BG, - /** \brief SMPTE-170M. - * - * Equivalent to: - * colour_primaries = 6 - * transfer_characteristics = 6 - * matrix_coefficients = 6 - */ - VAProcColorStandardSMPTE170M, - /** \brief SMPTE-240M. - * - * Equivalent to: - * colour_primaries = 7 - * transfer_characteristics = 7 - * matrix_coefficients = 7 - */ - VAProcColorStandardSMPTE240M, - /** \brief Generic film. - * - * Equivalent to: - * colour_primaries = 8 - * transfer_characteristics = 1 - * matrix_coefficients = 1 - */ - VAProcColorStandardGenericFilm, - /** \brief sRGB. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 13 - * matrix_coefficients = 0 - */ - VAProcColorStandardSRGB, - /** \brief stRGB. - * - * ??? - */ - VAProcColorStandardSTRGB, - /** \brief xvYCC601. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 11 - * matrix_coefficients = 5 - */ - VAProcColorStandardXVYCC601, - /** \brief xvYCC709. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 11 - * matrix_coefficients = 1 - */ - VAProcColorStandardXVYCC709, - /** \brief ITU-R BT.2020. - * - * Equivalent to: - * colour_primaries = 9 - * transfer_characteristics = 14 - * matrix_coefficients = 9 - */ - VAProcColorStandardBT2020, - /** \brief Explicitly specified color properties. - * - * Use corresponding color properties section. - * For example, HDR10 content: - * colour_primaries = 9 (BT2020) - * transfer_characteristics = 16 (SMPTE ST2084) - * matrix_coefficients = 9 - */ - VAProcColorStandardExplicit, - /** \brief Number of color standards. */ - VAProcColorStandardCount -} VAProcColorStandardType; - -/** \brief Total color correction types. */ -typedef enum _VAProcTotalColorCorrectionType { - VAProcTotalColorCorrectionNone = 0, - /** \brief Red Saturation. */ - VAProcTotalColorCorrectionRed, - /** \brief Green Saturation. */ - VAProcTotalColorCorrectionGreen, - /** \brief Blue Saturation. */ - VAProcTotalColorCorrectionBlue, - /** \brief Cyan Saturation. */ - VAProcTotalColorCorrectionCyan, - /** \brief Magenta Saturation. */ - VAProcTotalColorCorrectionMagenta, - /** \brief Yellow Saturation. */ - VAProcTotalColorCorrectionYellow, - /** \brief Number of color correction attributes. */ - VAProcTotalColorCorrectionCount -} VAProcTotalColorCorrectionType; - -/** \brief High Dynamic Range Metadata types. */ -typedef enum _VAProcHighDynamicRangeMetadataType { - VAProcHighDynamicRangeMetadataNone = 0, - /** \brief Metadata type for HDR10. */ - VAProcHighDynamicRangeMetadataHDR10, - /** \brief Number of Metadata type. */ - VAProcHighDynamicRangeMetadataTypeCount -} VAProcHighDynamicRangeMetadataType; - -/** \brief Video Processing Mode. */ -typedef enum _VAProcMode { - /** - * \brief Default Mode. - * In this mode, pipeline is decided in driver to the appropriate mode. - * e.g. a mode that's a balance between power and performance. - */ - VAProcDefaultMode = 0, - /** - * \brief Power Saving Mode. - * In this mode, pipeline is optimized for power saving. - */ - VAProcPowerSavingMode, - /** - * \brief Performance Mode. - * In this mode, pipeline is optimized for performance. - */ - VAProcPerformanceMode -} VAProcMode; - -/** @name Video blending flags */ -/**@{*/ -/** \brief Global alpha blending. */ -#define VA_BLEND_GLOBAL_ALPHA 0x0001 -/** \brief Premultiplied alpha blending (RGBA surfaces only). */ -#define VA_BLEND_PREMULTIPLIED_ALPHA 0x0002 -/** \brief Luma color key (YUV surfaces only). */ -#define VA_BLEND_LUMA_KEY 0x0010 -/**@}*/ - -/** \brief Video blending state definition. */ -typedef struct _VABlendState { - /** \brief Video blending flags. */ - unsigned int flags; - /** - * \brief Global alpha value. - * - * Valid if \flags has VA_BLEND_GLOBAL_ALPHA. - * Valid range is 0.0 to 1.0 inclusive. - */ - float global_alpha; - /** - * \brief Minimum luma value. - * - * Valid if \flags has VA_BLEND_LUMA_KEY. - * Valid range is 0.0 to 1.0 inclusive. - * \ref min_luma shall be set to a sensible value lower than \ref max_luma. - */ - float min_luma; - /** - * \brief Maximum luma value. - * - * Valid if \flags has VA_BLEND_LUMA_KEY. - * Valid range is 0.0 to 1.0 inclusive. - * \ref max_luma shall be set to a sensible value larger than \ref min_luma. - */ - float max_luma; -} VABlendState; - -/** @name Video pipeline flags */ -/**@{*/ -/** \brief Specifies whether to apply subpictures when processing a surface. */ -#define VA_PROC_PIPELINE_SUBPICTURES 0x00000001 -/** - * \brief Specifies whether to apply power or performance - * optimizations to a pipeline. - * - * When processing several surfaces, it may be necessary to prioritize - * more certain pipelines than others. This flag is only a hint to the - * video processor so that it can omit certain filters to save power - * for example. Typically, this flag could be used with video surfaces - * decoded from a secondary bitstream. - */ -#define VA_PROC_PIPELINE_FAST 0x00000002 -/**@}*/ - -/** @name Video filter flags */ -/**@{*/ -/** \brief Specifies whether the filter shall be present in the pipeline. */ -#define VA_PROC_FILTER_MANDATORY 0x00000001 -/**@}*/ - -/** @name Pipeline end flags */ -/**@{*/ -/** \brief Specifies the pipeline is the last. */ -#define VA_PIPELINE_FLAG_END 0x00000004 -/**@}*/ - -/** @name Chroma Siting flag */ -/**@{*/ -/** vertical chroma sitting take bit 0-1, horizontal chroma sitting take bit 2-3 - * vertical chromma siting | horizontal chroma sitting to be chroma sitting */ -#define VA_CHROMA_SITING_UNKNOWN 0x00 -/** \brief Chroma samples are co-sited vertically on the top with the luma samples. */ -#define VA_CHROMA_SITING_VERTICAL_TOP 0x01 -/** \brief Chroma samples are not co-sited vertically with the luma samples. */ -#define VA_CHROMA_SITING_VERTICAL_CENTER 0x02 -/** \brief Chroma samples are co-sited vertically on the bottom with the luma samples. */ -#define VA_CHROMA_SITING_VERTICAL_BOTTOM 0x03 -/** \brief Chroma samples are co-sited horizontally on the left with the luma samples. */ -#define VA_CHROMA_SITING_HORIZONTAL_LEFT 0x04 -/** \brief Chroma samples are not co-sited horizontally with the luma samples. */ -#define VA_CHROMA_SITING_HORIZONTAL_CENTER 0x08 -/**@}*/ - -/** - * This is to indicate that the color-space conversion uses full range or reduced range. - * VA_SOURCE_RANGE_FULL(Full range): Y/Cb/Cr is in [0, 255]. It is mainly used - * for JPEG/JFIF formats. The combination with the BT601 flag means that - * JPEG/JFIF color-space conversion matrix is used. - * VA_SOURCE_RANGE_REDUCED(Reduced range): Y is in [16, 235] and Cb/Cr is in [16, 240]. - * It is mainly used for the YUV->RGB color-space conversion in SDTV/HDTV/UHDTV. - */ -#define VA_SOURCE_RANGE_UNKNOWN 0 -#define VA_SOURCE_RANGE_REDUCED 1 -#define VA_SOURCE_RANGE_FULL 2 - -/** @name Tone Mapping flags multiple HDR mode*/ -/**@{*/ -/** \brief Tone Mapping from HDR content to HDR display. */ -#define VA_TONE_MAPPING_HDR_TO_HDR 0x0001 -/** \brief Tone Mapping from HDR content to SDR display. */ -#define VA_TONE_MAPPING_HDR_TO_SDR 0x0002 -/** \brief Tone Mapping from HDR content to EDR display. */ -#define VA_TONE_MAPPING_HDR_TO_EDR 0x0004 -/** \brief Tone Mapping from SDR content to HDR display. */ -#define VA_TONE_MAPPING_SDR_TO_HDR 0x0008 -/**@}*/ - -/** \brief Video processing pipeline capabilities. */ -typedef struct _VAProcPipelineCaps { - /** \brief Pipeline flags. See VAProcPipelineParameterBuffer::pipeline_flags. */ - uint32_t pipeline_flags; - /** \brief Extra filter flags. See VAProcPipelineParameterBuffer::filter_flags. */ - uint32_t filter_flags; - /** \brief Number of forward reference frames that are needed. */ - uint32_t num_forward_references; - /** \brief Number of backward reference frames that are needed. */ - uint32_t num_backward_references; - /** \brief List of color standards supported on input. */ - VAProcColorStandardType *input_color_standards; - /** \brief Number of elements in \ref input_color_standards array. */ - uint32_t num_input_color_standards; - /** \brief List of color standards supported on output. */ - VAProcColorStandardType *output_color_standards; - /** \brief Number of elements in \ref output_color_standards array. */ - uint32_t num_output_color_standards; - - /** - * \brief Rotation flags. - * - * For each rotation angle supported by the underlying hardware, - * the corresponding bit is set in \ref rotation_flags. See - * "Rotation angles" for a description of rotation angles. - * - * A value of 0 means the underlying hardware does not support any - * rotation. Otherwise, a check for a specific rotation angle can be - * performed as follows: - * - * \code - * VAProcPipelineCaps pipeline_caps; - * ... - * vaQueryVideoProcPipelineCaps(va_dpy, vpp_ctx, - * filter_bufs, num_filter_bufs, - * &pipeline_caps - * ); - * ... - * if (pipeline_caps.rotation_flags & (1 << VA_ROTATION_xxx)) { - * // Clockwise rotation by xxx degrees is supported - * ... - * } - * \endcode - */ - uint32_t rotation_flags; - /** \brief Blend flags. See "Video blending flags". */ - uint32_t blend_flags; - /** - * \brief Mirroring flags. - * - * For each mirroring direction supported by the underlying hardware, - * the corresponding bit is set in \ref mirror_flags. See - * "Mirroring directions" for a description of mirroring directions. - * - */ - uint32_t mirror_flags; - /** \brief Number of additional output surfaces supported by the pipeline */ - uint32_t num_additional_outputs; - - /** \brief Number of elements in \ref input_pixel_format array. */ - uint32_t num_input_pixel_formats; - /** \brief List of input pixel formats in fourcc. */ - uint32_t *input_pixel_format; - /** \brief Number of elements in \ref output_pixel_format array. */ - uint32_t num_output_pixel_formats; - /** \brief List of output pixel formats in fourcc. */ - uint32_t *output_pixel_format; - - /** \brief Max supported input width in pixels. */ - uint32_t max_input_width; - /** \brief Max supported input height in pixels. */ - uint32_t max_input_height; - /** \brief Min supported input width in pixels. */ - uint32_t min_input_width; - /** \brief Min supported input height in pixels. */ - uint32_t min_input_height; - - /** \brief Max supported output width in pixels. */ - uint32_t max_output_width; - /** \brief Max supported output height in pixels. */ - uint32_t max_output_height; - /** \brief Min supported output width in pixels. */ - uint32_t min_output_width; - /** \brief Min supported output height in pixels. */ - uint32_t min_output_height; - /** \brief Reserved bytes for future use, must be zero */ -#if defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__) || defined(__LP64__) - uint32_t va_reserved[VA_PADDING_HIGH - 2]; -#else - uint32_t va_reserved[VA_PADDING_HIGH]; -#endif -} VAProcPipelineCaps; - -/** \brief Specification of values supported by the filter. */ -typedef struct _VAProcFilterValueRange { - /** \brief Minimum value supported, inclusive. */ - float min_value; - /** \brief Maximum value supported, inclusive. */ - float max_value; - /** \brief Default value. */ - float default_value; - /** \brief Step value that alters the filter behaviour in a sensible way. */ - float step; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterValueRange; - -typedef struct _VAProcColorProperties { - /** Chroma sample location.\c VA_CHROMA_SITING_VERTICAL_XXX | VA_CHROMA_SITING_HORIZONTAL_XXX */ - uint8_t chroma_sample_location; - /** Color range. \c VA_SOURCE_RANGE_XXX*/ - uint8_t color_range; - /** Colour primaries. - * - * See ISO/IEC 23001-8 or ITU H.273, section 8.1 and table 2. - * Only used if the color standard in use is \c VAColorStandardExplicit. - * Below list the typical colour primaries for the reference. - * --------------------------------------------------------------------------------- - * | Value | Primaries | Informative Remark | - * -------------------------------------------------------------------------------- - * | 1 |primary x y |Rec.ITU-R BT.709-5 | - * | |green 0.300 0.600 |IEC 61966-2-1(sRGB or sYCC) | - * | |blue 0.150 0.060 | | - * | |red 0.640 0.330 | | - * | |whiteD65 0.3127 0.3290 | | - * --------------------------------------------------------------------------------- - * | 6 |primary x y |Rec.ITU-R BT.601-6 525 | - * | |green 0.310 0.595 | | - * | |blue 0.155 0.070 | | - * | |red 0.630 0.340 | | - * | |whiteD65 0.3127 0.3290 | | - * --------------------------------------------------------------------------------- - * | 9 |primary x y |Rec.ITU-R BT.2020 | - * | |green 0.170 0.797 | | - * | |blue 0.131 0.046 | | - * | |red 0.708 0.292 | | - * | |whiteD65 0.3127 0.3290 | | - * --------------------------------------------------------------------------------- - */ - uint8_t colour_primaries; - /** Transfer characteristics. - * - * See ISO/IEC 23001-8 or ITU H.273, section 8.2 and table 3. - * Only used if the color standard in use is \c VAColorStandardExplicit. - * Below list the typical transfer characteristics for the reference. - * ----------------------------------------------------------- - * | Value | Informative Remark | - * ----------------------------------------------------------- - * | 1 |Rec.ITU-R BT.709-5 | - * | |colour gamut system | - * ----------------------------------------------------------- - * | 4 |Assumed display gamma 2.2 | - * ----------------------------------------------------------- - * | 6 |Rec.ITU-R BT.601-6 525 or 625 | - * ----------------------------------------------------------- - * | 8 |Linear transfer characteristics | - * ----------------------------------------------------------- - * | 13 |IEC 61966-2-1(sRGB or sYCC) | - * ----------------------------------------------------------- - * | 14,15 |Rec.ITU-R BT.2020 | - * ----------------------------------------------------------- - * | 16 |SMPTE ST 2084 for 10,12,14 and 16bit system | - * ----------------------------------------------------------- - */ - uint8_t transfer_characteristics; - /** Matrix coefficients. - * - * See ISO/IEC 23001-8 or ITU H.273, section 8.3 and table 4. - * Only used if the color standard in use is \c VAColorStandardExplicit. - */ - uint8_t matrix_coefficients; - /** Reserved bytes for future use, must be zero. */ - uint8_t reserved[3]; -} VAProcColorProperties; - -/** \brief Describes High Dynamic Range Meta Data for HDR10. - * - * Specifies the colour volume(the colour primaries, white point and luminance range) of - * a display considered to be the mastering display for the associated video content -e.g., - * the colour volume of a display that was used for viewing while authoring the video content. - * See ITU-T H.265 D.3.27 Mastering display colour volume SEI message semantics. - * - * Specifies upper bounds for the nominal light level of the content. See ITU-T H.265 D.3.35 - * Content light level information SEI message semantics. - * - * This structure can be used to indicate the HDR10 metadata for 1) the content which was authored; - * 2) the display on which the content will be presented. If it is for display, max_content_light_level - * and max_pic_average_light_level are ignored. - */ -typedef struct _VAHdrMetaDataHDR10 { - /** - * \brief X chromaticity coordinate of the mastering display. - * - * Index value c equal to 0 should correspond to the green primary. - * Index value c equal to 1 should correspond to the blue primary. - * Index value c equal to 2 should correspond to the red primary. - * The value for display_primaries_x shall be in the range of 0 to 50000 inclusive. - */ - uint16_t display_primaries_x[3]; - /** - * \brief Y chromaticity coordinate of the mastering display. - * - * Index value c equal to 0 should correspond to the green primary. - * Index value c equal to 1 should correspond to the blue primary. - * Index value c equal to 2 should correspond to the red primary. - * The value for display_primaries_y shall be in the range of 0 to 50000 inclusive. - */ - uint16_t display_primaries_y[3]; - /** - * \brief X chromaticity coordinate of the white point of the mastering display. - * - * The value for white_point_x shall be in the range of 0 to 50000 inclusive. - */ - uint16_t white_point_x; - /** - * \brief Y chromaticity coordinate of the white point of the mastering display. - * - * The value for white_point_y shall be in the range of 0 to 50000 inclusive. - */ - uint16_t white_point_y; - /** - * \brief The maximum display luminance of the mastering display. - * - * The value is in units of 0.0001 candelas per square metre. - */ - uint32_t max_display_mastering_luminance; - /** - * \brief The minumum display luminance of the mastering display. - * - * The value is in units of 0.0001 candelas per square metre. - */ - uint32_t min_display_mastering_luminance; - /** - * \brief The maximum content light level (MaxCLL). - * - * The value is in units of 1 candelas per square metre. - */ - uint16_t max_content_light_level; - /** - * \brief The maximum picture average light level (MaxFALL). - * - * The value is in units of 1 candelas per square metre. - */ - uint16_t max_pic_average_light_level; - /** Resevered */ - uint16_t reserved[VA_PADDING_HIGH]; -} VAHdrMetaDataHDR10; - -/** \brief Capabilities specification for the High Dynamic Range filter. */ -typedef struct _VAProcFilterCapHighDynamicRange { - /** \brief high dynamic range type. */ - VAProcHighDynamicRangeMetadataType metadata_type; - /** - * \brief flag for high dynamic range tone mapping - * - * The flag is the combination of VA_TONE_MAPPING_XXX_TO_XXX. - * It could be VA_TONE_MAPPING_HDR_TO_HDR | VA_TONE_MAPPING_HDR_TO_SDR. - * SDR content to SDR display is always supported by default since it is legacy path. - */ - uint16_t caps_flag; - /** \brief Reserved bytes for future use, must be zero */ - uint16_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterCapHighDynamicRange; - -/** \brief High Dynamic Range Meta Data. */ -typedef struct _VAHdrMetaData { - /** \brief high dynamic range metadata type, HDR10 etc. */ - VAProcHighDynamicRangeMetadataType metadata_type; - /** - * \brief Pointer to high dynamic range metadata. - * - * The pointer could point to VAHdrMetaDataHDR10 or other HDR meta data. - */ - void* metadata; - /** - * \brief Size of high dynamic range metadata. - */ - uint32_t metadata_size; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved[VA_PADDING_LOW]; -} VAHdrMetaData; - -/** - * \brief Video processing pipeline configuration. - * - * This buffer defines a video processing pipeline. The actual filters to - * be applied are provided in the \c filters field, they can be re-used - * in other processing pipelines. - * - * The target surface is specified by the \c render_target argument of - * \c vaBeginPicture(). The general usage model is described as follows: - * - \c vaBeginPicture(): specify the target surface that receives the - * processed output; - * - \c vaRenderPicture(): specify a surface to be processed and composed - * into the \c render_target. Use as many \c vaRenderPicture() calls as - * necessary surfaces to compose ; - * - \c vaEndPicture(): tell the driver to start processing the surfaces - * with the requested filters. - * - * If a filter (e.g. noise reduction) needs to be applied with different - * values for multiple surfaces, the application needs to create as many - * filter parameter buffers as necessary. i.e. the filter parameters shall - * not change between two calls to \c vaRenderPicture(). - * - * For composition usage models, the first surface to process will generally - * use an opaque background color, i.e. \c output_background_color set with - * the most significant byte set to \c 0xff. For instance, \c 0xff000000 for - * a black background. Then, subsequent surfaces would use a transparent - * background color. - */ -typedef struct _VAProcPipelineParameterBuffer { - /** - * \brief Source surface ID. - * - * ID of the source surface to process. If subpictures are associated - * with the video surfaces then they shall be rendered to the target - * surface, if the #VA_PROC_PIPELINE_SUBPICTURES pipeline flag is set. - */ - VASurfaceID surface; - /** - * \brief Region within the source surface to be processed. - * - * Pointer to a #VARectangle defining the region within the source - * surface to be processed. If NULL, \c surface_region implies the - * whole surface. - */ - const VARectangle *surface_region; - /** - * \brief Requested input color standard. - * - * Color properties are implicitly converted throughout the processing - * pipeline. The video processor chooses the best moment to apply - * this conversion. The set of supported color standards for input shall - * be queried with vaQueryVideoProcPipelineCaps(). - * - * If this is set to VAProcColorStandardExplicit, the color properties - * are specified explicitly in surface_color_properties instead. - */ - VAProcColorStandardType surface_color_standard; - /** - * \brief Region within the output surface. - * - * Pointer to a #VARectangle defining the region within the output - * surface that receives the processed pixels. If NULL, \c output_region - * implies the whole surface. - * - * Note that any pixels residing outside the specified region will - * be filled in with the \ref output_background_color. - */ - const VARectangle *output_region; - /** - * \brief Background color. - * - * Background color used to fill in pixels that reside outside of the - * specified \ref output_region. The color is specified in ARGB format: - * [31:24] alpha, [23:16] red, [15:8] green, [7:0] blue. - * - * Unless the alpha value is zero or the \ref output_region represents - * the whole target surface size, implementations shall not render the - * source surface to the target surface directly. Rather, in order to - * maintain the exact semantics of \ref output_background_color, the - * driver shall use a temporary surface and fill it in with the - * appropriate background color. Next, the driver will blend this - * temporary surface into the target surface. - */ - uint32_t output_background_color; - /** - * \brief Requested output color standard. - * - * If this is set to VAProcColorStandardExplicit, the color properties - * are specified explicitly in output_color_properties instead. - */ - VAProcColorStandardType output_color_standard; - /** - * \brief Pipeline filters. See video pipeline flags. - * - * Flags to control the pipeline, like whether to apply subpictures - * or not, notify the driver that it can opt for power optimizations, - * should this be needed. - */ - uint32_t pipeline_flags; - /** - * \brief Extra filter flags. See vaPutSurface() flags. - * - * Filter flags are used as a fast path, wherever possible, to use - * vaPutSurface() flags instead of explicit filter parameter buffers. - * - * Allowed filter flags API-wise. Use vaQueryVideoProcPipelineCaps() - * to check for implementation details: - * - Bob-deinterlacing: \c VA_FRAME_PICTURE, \c VA_TOP_FIELD, - * \c VA_BOTTOM_FIELD. Note that any deinterlacing filter - * (#VAProcFilterDeinterlacing) will override those flags. - * - Color space conversion: \c VA_SRC_BT601, \c VA_SRC_BT709, - * \c VA_SRC_SMPTE_240. - * - Scaling: \c VA_FILTER_SCALING_DEFAULT, \c VA_FILTER_SCALING_FAST, - * \c VA_FILTER_SCALING_HQ, \c VA_FILTER_SCALING_NL_ANAMORPHIC. - * - Interpolation Method: \c VA_FILTER_INTERPOLATION_DEFAULT, - * \c VA_FILTER_INTERPOLATION_NEAREST_NEIGHBOR, - * \c VA_FILTER_INTERPOLATION_BILINEAR, \c VA_FILTER_INTERPOLATION_ADVANCED. - */ - uint32_t filter_flags; - /** - * \brief Array of filters to apply to the surface. - * - * The list of filters shall be ordered in the same way the driver expects - * them. i.e. as was returned from vaQueryVideoProcFilters(). - * Otherwise, a #VA_STATUS_ERROR_INVALID_FILTER_CHAIN is returned - * from vaRenderPicture() with this buffer. - * - * #VA_STATUS_ERROR_UNSUPPORTED_FILTER is returned if the list - * contains an unsupported filter. - * - */ - VABufferID *filters; - /** \brief Actual number of filters. */ - uint32_t num_filters; - /** \brief Array of forward reference frames (past frames). */ - VASurfaceID *forward_references; - /** \brief Number of forward reference frames that were supplied. */ - uint32_t num_forward_references; - /** \brief Array of backward reference frames (future frames). */ - VASurfaceID *backward_references; - /** \brief Number of backward reference frames that were supplied. */ - uint32_t num_backward_references; - /** - * \brief Rotation state. See rotation angles. - * - * The rotation angle is clockwise. There is no specific rotation - * center for this operation. Rather, The source \ref surface is - * first rotated by the specified angle and then scaled to fit the - * \ref output_region. - * - * This means that the top-left hand corner (0,0) of the output - * (rotated) surface is expressed as follows: - * - \ref VA_ROTATION_NONE: (0,0) is the top left corner of the - * source surface -- no rotation is performed ; - * - \ref VA_ROTATION_90: (0,0) is the bottom-left corner of the - * source surface ; - * - \ref VA_ROTATION_180: (0,0) is the bottom-right corner of the - * source surface -- the surface is flipped around the X axis ; - * - \ref VA_ROTATION_270: (0,0) is the top-right corner of the - * source surface. - * - * Check VAProcPipelineCaps::rotation_flags first prior to - * defining a specific rotation angle. Otherwise, the hardware can - * perfectly ignore this variable if it does not support any - * rotation. - */ - uint32_t rotation_state; - /** - * \brief blending state. See "Video blending state definition". - * - * If \ref blend_state is NULL, then default operation mode depends - * on the source \ref surface format: - * - RGB: per-pixel alpha blending ; - * - YUV: no blending, i.e override the underlying pixels. - * - * Otherwise, \ref blend_state is a pointer to a #VABlendState - * structure that shall be live until vaEndPicture(). - * - * Implementation note: the driver is responsible for checking the - * blend state flags against the actual source \ref surface format. - * e.g. premultiplied alpha blending is only applicable to RGB - * surfaces, and luma keying is only applicable to YUV surfaces. - * If a mismatch occurs, then #VA_STATUS_ERROR_INVALID_BLEND_STATE - * is returned. - */ - const VABlendState *blend_state; - /** - * \bried mirroring state. See "Mirroring directions". - * - * Mirroring of an image can be performed either along the - * horizontal or vertical axis. It is assumed that the rotation - * operation is always performed before the mirroring operation. - */ - uint32_t mirror_state; - /** \brief Array of additional output surfaces. */ - VASurfaceID *additional_outputs; - /** \brief Number of additional output surfaces. */ - uint32_t num_additional_outputs; - /** - * \brief Flag to indicate the input surface flag - * - * bit0~3: Surface sample type - * - 0000: Progressive --> VA_FRAME_PICTURE - * - 0001: Single Top Field --> VA_TOP_FIELD - * - 0010: Single Bottom Field --> VA_BOTTOM_FIELD - * - 0100: Interleaved Top Field First --> VA_TOP_FIELD_FIRST - * - 1000: Interleaved Bottom Field First --> VA_BOTTOM_FIELD_FIRST - * - * For interlaced scaling, examples as follow: - * - 1. Interleaved to Interleaved (Suppose input is top field first) - * -- set input_surface_flag as VA_TOP_FIELD_FIRST - * -- set output_surface_flag as VA_TOP_FIELD_FIRST - * - 2. Interleaved to Field (Suppose input is top field first) - * An interleaved frame need to be passed twice. - * First cycle to get the first field: - * -- set input_surface_flag as VA_TOP_FIELD_FIRST - * -- set output_surface_flag as VA_TOP_FIELD - * Second cycle to get the second field: - * -- set input_surface_flag as VA_TOP_FIELD_FIRST - * -- set output_surface_flag as VA_BOTTOM_FIELD - * - 3. Field to Interleaved (Suppose first field is top field) - * -- create two surfaces, one for top field, the other for bottom field - * -- set surface with the first field surface id - * -- set backward_reference with the second field surface id - * -- set input_surface_flag as VA_TOP_FIELD - * -- set output_surface_flag as VA_TOP_FIELD_FIRST - * - 4. Field to Field: - * -- set flag according to each frame. - * - * bit31: Surface encryption - * - 0: non-protected - * - 1: protected - * - * bit4~30 for future - */ - uint32_t input_surface_flag; - /** - * \brief Flag to indicate the output surface flag - * - * bit0~3: Surface sample type - * - 0000: Progressive --> VA_FRAME_PICTURE - * - 0001: Top Field --> VA_TOP_FIELD - * - 0010: Bottom Field --> VA_BOTTOM_FIELD - * - 0100: Top Field First --> VA_TOP_FIELD_FIRST - * - 1000: Bottom Field First --> VA_BOTTOM_FIELD_FIRST - * - * bit31: Surface encryption - * - 0: non-protected - * - 1: protected - * - * bit4~30 for future - */ - uint32_t output_surface_flag; - /** - * \brief Input Color Properties. See "VAProcColorProperties". - */ - VAProcColorProperties input_color_properties; - /** - * \brief Output Color Properties. See "VAProcColorProperties". - */ - VAProcColorProperties output_color_properties; - /** - * \brief Processing mode. See "VAProcMode". - */ - VAProcMode processing_mode; - /** - * \brief Output High Dynamic Metadata. - * - * If output_metadata is NULL, then output default to SDR. - */ - VAHdrMetaData *output_hdr_metadata; - - /** \brief Reserved bytes for future use, must be zero */ -#if defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__)|| defined(__LP64__) - uint32_t va_reserved[VA_PADDING_LARGE - 16]; -#else - uint32_t va_reserved[VA_PADDING_LARGE - 13]; -#endif -} VAProcPipelineParameterBuffer; - -/** - * \brief Filter parameter buffer base. - * - * This is a helper structure used by driver implementations only. - * Users are not supposed to allocate filter parameter buffers of this - * type. - */ -typedef struct _VAProcFilterParameterBufferBase { - /** \brief Filter type. */ - VAProcFilterType type; -} VAProcFilterParameterBufferBase; - -/** - * \brief Default filter parametrization. - * - * Unless there is a filter-specific parameter buffer, - * #VAProcFilterParameterBuffer is the default type to use. - */ -typedef struct _VAProcFilterParameterBuffer { - /** \brief Filter type. */ - VAProcFilterType type; - /** \brief Value. */ - float value; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterParameterBuffer; - -/** @name De-interlacing flags */ -/**@{*/ -/** - * \brief Bottom field first in the input frame. - * if this is not set then assumes top field first. - */ -#define VA_DEINTERLACING_BOTTOM_FIELD_FIRST 0x0001 -/** - * \brief Bottom field used in deinterlacing. - * if this is not set then assumes top field is used. - */ -#define VA_DEINTERLACING_BOTTOM_FIELD 0x0002 -/** - * \brief A single field is stored in the input frame. - * if this is not set then assumes the frame contains two interleaved fields. - */ -#define VA_DEINTERLACING_ONE_FIELD 0x0004 -/** - * \brief Film Mode Detection is enabled. If enabled, driver performs inverse - * of various pulldowns, such as 3:2 pulldown. - * if this is not set then assumes FMD is disabled. - */ -#define VA_DEINTERLACING_FMD_ENABLE 0x0008 - -//Scene change parameter for ADI on Linux, if enabled, driver use spatial DI(Bob), instead of ADI. if not, use old behavior for ADI -//Input stream is TFF(set flags = 0), SRC0,1,2,3 are interlaced frame (top +bottom fields), DSTs are progressive frames -//30i->30p -//SRC0 -> BOBDI, no reference, set flag = 0, output DST0 -//SRC1 -> ADI, reference frame=SRC0, set flags = 0, call VP, output DST1 -//SRC2 -> ADI, reference frame=SRC1, set flags = 0x0010(decimal 16), call VP, output DST2(T4) -//SRC3 -> ADI, reference frame=SRC2, set flags = 0, call VP, output DST3 -//30i->60p -//SRC0 -> BOBDI, no reference, set flag = 0, output DST0 -//SRC0 -> BOBDI, no reference, set flag =0x0002, output DST1 - -//SRC1 -> ADI, reference frame =SRC0, set flags = 0, call VP, output DST2 -//SRC1 -> ADI, reference frame =SRC0, set flags = 0x0012(decimal18), call VP, output DST3(B3) - -//SRC2 -> ADI, reference frame =SRC1, set flags = 0x0010(decimal 16), call VP, output DST4(T4) -//SRC2 -> ADI, reference frame =SRC1, set flags = 0x0002, call VP, output DST5 - -//SRC3 -> ADI, reference frame =SRC2, set flags = 0, call VP, output DST6 -//SRC3 -> ADI, reference frame =SRC1, set flags = 0x0002, call VP, output DST7 - -#define VA_DEINTERLACING_SCD_ENABLE 0x0010 - -/**@}*/ - -/** \brief Deinterlacing filter parametrization. */ -typedef struct _VAProcFilterParameterBufferDeinterlacing { - /** \brief Filter type. Shall be set to #VAProcFilterDeinterlacing. */ - VAProcFilterType type; - /** \brief Deinterlacing algorithm. */ - VAProcDeinterlacingType algorithm; - /** \brief Deinterlacing flags. */ - uint32_t flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterParameterBufferDeinterlacing; - -/** - * \brief Color balance filter parametrization. - * - * This buffer defines color balance attributes. A VA buffer can hold - * several color balance attributes by creating a VA buffer of desired - * number of elements. This can be achieved by the following pseudo-code: - * - * \code - * enum { kHue, kSaturation, kBrightness, kContrast }; - * - * // Initial color balance parameters - * static const VAProcFilterParameterBufferColorBalance colorBalanceParams[4] = - * { - * [kHue] = - * { VAProcFilterColorBalance, VAProcColorBalanceHue, 0.5 }, - * [kSaturation] = - * { VAProcFilterColorBalance, VAProcColorBalanceSaturation, 0.5 }, - * [kBrightness] = - * { VAProcFilterColorBalance, VAProcColorBalanceBrightness, 0.5 }, - * [kSaturation] = - * { VAProcFilterColorBalance, VAProcColorBalanceSaturation, 0.5 } - * }; - * - * // Create buffer - * VABufferID colorBalanceBuffer; - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcFilterParameterBufferType, sizeof(*pColorBalanceParam), 4, - * colorBalanceParams, - * &colorBalanceBuffer - * ); - * - * VAProcFilterParameterBufferColorBalance *pColorBalanceParam; - * vaMapBuffer(va_dpy, colorBalanceBuffer, &pColorBalanceParam); - * { - * // Change brightness only - * pColorBalanceBuffer[kBrightness].value = 0.75; - * } - * vaUnmapBuffer(va_dpy, colorBalanceBuffer); - * \endcode - */ -typedef struct _VAProcFilterParameterBufferColorBalance { - /** \brief Filter type. Shall be set to #VAProcFilterColorBalance. */ - VAProcFilterType type; - /** \brief Color balance attribute. */ - VAProcColorBalanceType attrib; - /** - * \brief Color balance value. - * - * Special case for automatically adjusted attributes. e.g. - * #VAProcColorBalanceAutoSaturation, - * #VAProcColorBalanceAutoBrightness, - * #VAProcColorBalanceAutoContrast. - * - If \ref value is \c 1.0 +/- \c FLT_EPSILON, the attribute is - * automatically adjusted and overrides any other attribute of - * the same type that would have been set explicitly; - * - If \ref value is \c 0.0 +/- \c FLT_EPSILON, the attribute is - * disabled and other attribute of the same type is used instead. - */ - float value; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterParameterBufferColorBalance; - -/** \brief Total color correction filter parametrization. */ -typedef struct _VAProcFilterParameterBufferTotalColorCorrection { - /** \brief Filter type. Shall be set to #VAProcFilterTotalColorCorrection. */ - VAProcFilterType type; - /** \brief Color to correct. */ - VAProcTotalColorCorrectionType attrib; - /** \brief Color correction value. */ - float value; -} VAProcFilterParameterBufferTotalColorCorrection; - -/** @name Video Processing Human Vision System (HVS) Denoise Mode.*/ -/**@{*/ -/** - * \brief Default Mode. - * This mode is decided in driver to the appropriate mode. - */ -#define VA_PROC_HVS_DENOISE_DEFAULT 0x0000 -/** - * \brief Auto BDRate Mode. - * Indicates auto BD rate improvement in pre-processing (such as before video encoding), ignore Strength. - */ -#define VA_PROC_HVS_DENOISE_AUTO_BDRATE 0x0001 -/** - * \brief Auto Subjective Mode. - * Indicates auto subjective quality improvement in pre-processing (such as before video encoding), ignore Strength. - */ -#define VA_PROC_HVS_DENOISE_AUTO_SUBJECTIVE 0x0002 -/** - * \brief Manual Mode. - * Indicates manual mode, allow to adjust the denoise strength manually (need to set Strength explicitly). - */ -#define VA_PROC_HVS_DENOISE_MANUAL 0x0003 -/**@}*/ - -/** \brief Human Vision System(HVS) Noise reduction filter parametrization. */ -typedef struct _VAProcFilterParameterBufferHVSNoiseReduction { - /** \brief Filter type. Shall be set to #VAProcFilterHVSNoiseReduction. */ - VAProcFilterType type; - /** \brief QP for encoding, used for HVS Denoise */ - uint16_t qp; - /** - * \brief QP to Noise Reduction Strength Mode, used for Human Vision System Based Noise Reduction. - * Controls Noise Reduction strength of conservative and aggressive mode. - * It is an integer from [0-16]. - * Value 0 means completely turn off Noise Reduction; - * Value 16 means the most aggressive mode of Noise Reduction; - * Value 10 is the default value. - */ - uint16_t strength; - /** - * \brief HVS Denoise Mode which controls denoise method. - * It is a value of VA_PROC_HVS_DENOISE_xxx. - * Please see the definition of VA_PROC_HVS_DENOISE_xxx. - */ - uint16_t mode; - /** \brief Reserved bytes for future use, must be zero */ - uint16_t va_reserved[VA_PADDING_HIGH - 1]; -} VAProcFilterParameterBufferHVSNoiseReduction; - -/** \brief High Dynamic Range(HDR) Tone Mapping filter parametrization. */ -typedef struct _VAProcFilterParameterBufferHDRToneMapping { - /** \brief Filter type. Shall be set to #VAProcFilterHighDynamicRangeToneMapping.*/ - VAProcFilterType type; - /** - * \brief High Dynamic Range metadata, could be HDR10 etc. - * - * This metadata is mainly for the input surface. Given that dynamic metadata is changing - * on frame-by-frame or scene-by-scene basis for HDR10 plus, differentiate the metadata - * for the input and output. - */ - VAHdrMetaData data; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterParameterBufferHDRToneMapping; - -/** @name 3DLUT Channel Layout and Mapping */ -/**@{*/ -/** \brief 3DLUT Channel Layout is unknown. */ -#define VA_3DLUT_CHANNEL_UNKNOWN 0x00000000 -/** \brief 3DLUT Channel Layout is R, G, B, the default layout. Map RGB to RGB. */ -#define VA_3DLUT_CHANNEL_RGB_RGB 0x00000001 -/** \brief 3DLUT Channel Layout is Y, U, V. Map YUV to RGB. */ -#define VA_3DLUT_CHANNEL_YUV_RGB 0x00000002 -/** \brief 3DLUT Channel Layout is V, U, Y. Map VUY to RGB. */ -#define VA_3DLUT_CHANNEL_VUY_RGB 0x00000004 -/**@}*/ - -/** - * \brief 3DLUT filter parametrization. - * - * 3DLUT (Three Dimensional Look Up Table) is often used when converting an image or a video frame - * from one color representation to another, for example, when converting log and gamma encodings, - * changing the color space, applying a color correction, changing the dynamic range, gamut mapping etc. - * - * This buffer defines 3DLUT attributes and memory layout. The typical 3DLUT has fixed number(lut_size) - * per dimension and memory layout is 3 dimensional array as 3dlut[stride_0][stride_1][stride_2] (lut_size - * shall be smaller than stride_0/1/2). - * - * API user should query hardware capability by using the VAProcFilterCap3DLUT to get the 3DLUT attributes - * which hardware supports, and use these attributes. For example, if the user queries hardware, the API user - * could get caps with 3dlut[33][33][64] (lut_size = 33, lut_stride[0/1/2] = 33/33/64). API user shall not - * use the attributes which hardware can not support. - * - * 3DLUT is usually used to transform input RGB/YUV values in one color space to output RGB values in another - * color space. Based on 1) the format and color space of VPP input and output and 2) 3DLUT memory layout and - * channel mapping, driver will enable some color space conversion implicitly if needed. For example, the input of - * VPP is P010 format in BT2020 color space, the output of VPP is NV12 in BT709 color space and the 3DLUT channel - * mapping is VA_3DLUT_CHANNEL_RGB_RGB, driver could build the data pipeline as P010(BT2020)->RGB(BT2020) - * ->3DULT(BT709)->NV12(BT709). Please note, the limitation of 3DLUT filter color space is that the color space of - * 3DLUT filter input data needs to be same as the input data of VPP; the color space of 3DLUT filter output data - * needs to be same as the output data of VPP; format does not have such limitation. - */ -typedef struct _VAProcFilterParameterBuffer3DLUT { - /** \brief Filter type. Shall be set to #VAProcFilter3DLUT.*/ - VAProcFilterType type; - - /** \brief lut_surface contains 3DLUT data in the 3DLUT memory layout, must be linear */ - VASurfaceID lut_surface; - /** - * \brief lut_size is the number of valid points on every dimension of the three dimensional look up table. - * The size of LUT (lut_size) shall be same among every dimension of the three dimensional look up table. - * The size of LUT (lut_size) shall be smaller than lut_stride[0/1/2]. - */ - uint16_t lut_size; - /** - * \brief lut_stride are the number of points on every dimension of the three dimensional look up table. - * Three dimension can has 3 different stride, lut3d[lut_stride[0]][lut_stride[1]][lut_stride[2]]. - * But the valid point shall start from 0, the range of valid point is [0, lut_size-1] for every dimension. - */ - uint16_t lut_stride[3]; - /** \brief bit_depth is the number of bits for every channel R, G or B (or Y, U, V) */ - uint16_t bit_depth; - /** \brief num_channel is the number of channels */ - uint16_t num_channel; - - /** \brief channel_mapping defines the mapping of input and output channels, could be one of VA_3DLUT_CHANNEL_XXX*/ - uint32_t channel_mapping; - - /** \brief reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterParameterBuffer3DLUT; - -/** \brief Capabilities specification for the 3DLUT filter. */ -typedef struct _VAProcFilterCap3DLUT { - /** \brief lut_size is the number of valid points on every dimension of the three dimensional look up table. */ - uint16_t lut_size; - /** \brief lut_stride are the number of points on every dimension of the three dimensional look up table. lut3d[lut_stride[0]][lut_stride[1]][lut_stride[2]]*/ - uint16_t lut_stride[3]; - /** \brief bit_depth is the number of bits for every channel R, G or B (or Y, U, V) */ - uint16_t bit_depth; - /** \brief num_channel is the number of channels */ - uint16_t num_channel; - /** \brief channel_mapping defines the mapping of channels, could be some combination of VA_3DLUT_CHANNEL_XXX*/ - uint32_t channel_mapping; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterCap3DLUT; - -/** - * \brief Default filter cap specification (single range value). - * - * Unless there is a filter-specific cap structure, #VAProcFilterCap is the - * default type to use for output caps from vaQueryVideoProcFilterCaps(). - */ -typedef struct _VAProcFilterCap { - /** \brief Range of supported values for the filter. */ - VAProcFilterValueRange range; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterCap; - -/** \brief Capabilities specification for the deinterlacing filter. */ -typedef struct _VAProcFilterCapDeinterlacing { - /** \brief Deinterlacing algorithm. */ - VAProcDeinterlacingType type; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterCapDeinterlacing; - -/** \brief Capabilities specification for the color balance filter. */ -typedef struct _VAProcFilterCapColorBalance { - /** \brief Color balance operation. */ - VAProcColorBalanceType type; - /** \brief Range of supported values for the specified operation. */ - VAProcFilterValueRange range; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterCapColorBalance; - -/** \brief Capabilities specification for the Total Color Correction filter. */ -typedef struct _VAProcFilterCapTotalColorCorrection { - /** \brief Color to correct. */ - VAProcTotalColorCorrectionType type; - /** \brief Range of supported values for the specified color. */ - VAProcFilterValueRange range; -} VAProcFilterCapTotalColorCorrection; - -/** - * \brief Queries video processing filters. - * - * This function returns the list of video processing filters supported - * by the driver. The \c filters array is allocated by the user and - * \c num_filters shall be initialized to the number of allocated - * elements in that array. Upon successful return, the actual number - * of filters will be overwritten into \c num_filters. Otherwise, - * \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and \c num_filters - * is adjusted to the number of elements that would be returned if enough - * space was available. - * - * The list of video processing filters supported by the driver shall - * be ordered in the way they can be iteratively applied. This is needed - * for both correctness, i.e. some filters would not mean anything if - * applied at the beginning of the pipeline; but also for performance - * since some filters can be applied in a single pass (e.g. noise - * reduction + deinterlacing). - * - * @param[in] dpy the VA display - * @param[in] context the video processing context - * @param[out] filters the output array of #VAProcFilterType elements - * @param[in,out] num_filters the number of elements allocated on input, - * the number of elements actually filled in on output - */ -VAStatus -vaQueryVideoProcFilters( - VADisplay dpy, - VAContextID context, - VAProcFilterType *filters, - unsigned int *num_filters -); - -/** - * \brief Queries video filter capabilities. - * - * This function returns the list of capabilities supported by the driver - * for a specific video filter. The \c filter_caps array is allocated by - * the user and \c num_filter_caps shall be initialized to the number - * of allocated elements in that array. Upon successful return, the - * actual number of filters will be overwritten into \c num_filter_caps. - * Otherwise, \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and - * \c num_filter_caps is adjusted to the number of elements that would be - * returned if enough space was available. - * - * @param[in] dpy the VA display - * @param[in] context the video processing context - * @param[in] type the video filter type - * @param[out] filter_caps the output array of #VAProcFilterCap elements - * @param[in,out] num_filter_caps the number of elements allocated on input, - * the number of elements actually filled in output - */ -VAStatus -vaQueryVideoProcFilterCaps( - VADisplay dpy, - VAContextID context, - VAProcFilterType type, - void *filter_caps, - unsigned int *num_filter_caps -); - -/** - * \brief Queries video processing pipeline capabilities. - * - * This function returns the video processing pipeline capabilities. The - * \c filters array defines the video processing pipeline and is an array - * of buffers holding filter parameters. - * - * Note: the #VAProcPipelineCaps structure contains user-provided arrays. - * If non-NULL, the corresponding \c num_* fields shall be filled in on - * input with the number of elements allocated. Upon successful return, - * the actual number of elements will be overwritten into the \c num_* - * fields. Otherwise, \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned - * and \c num_* fields are adjusted to the number of elements that would - * be returned if enough space was available. - * - * @param[in] dpy the VA display - * @param[in] context the video processing context - * @param[in] filters the array of VA buffers defining the video - * processing pipeline - * @param[in] num_filters the number of elements in filters - * @param[in,out] pipeline_caps the video processing pipeline capabilities - */ -VAStatus -vaQueryVideoProcPipelineCaps( - VADisplay dpy, - VAContextID context, - VABufferID *filters, - unsigned int num_filters, - VAProcPipelineCaps *pipeline_caps -); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_VPP_H */ diff --git a/prebuilts/x86/include/x264.h b/prebuilts/x86/include/x264.h deleted file mode 100644 index 5aa2a8d..0000000 --- a/prebuilts/x86/include/x264.h +++ /dev/null @@ -1,1019 +0,0 @@ -/***************************************************************************** - * x264.h: x264 public header - ***************************************************************************** - * Copyright (C) 2003-2022 x264 project - * - * Authors: Laurent Aimar - * Loren Merritt - * Fiona Glaser - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA. - * - * This program is also available under a commercial proprietary license. - * For more information, contact us at licensing@x264.com. - *****************************************************************************/ - -#ifndef X264_X264_H -#define X264_X264_H - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(_STDINT_H) && !defined(_STDINT_H_) && !defined(_STDINT_H_INCLUDED) && !defined(_STDINT) &&\ - !defined(_SYS_STDINT_H_) && !defined(_INTTYPES_H) && !defined(_INTTYPES_H_) && !defined(_INTTYPES) -# ifdef _MSC_VER -# pragma message("You must include stdint.h or inttypes.h before x264.h") -# else -# warning You must include stdint.h or inttypes.h before x264.h -# endif -#endif - -#include - -#include "x264_config.h" - -#define X264_BUILD 164 - -#ifdef _WIN32 -# define X264_DLL_IMPORT __declspec(dllimport) -# define X264_DLL_EXPORT __declspec(dllexport) -#else -# if defined(__GNUC__) && (__GNUC__ >= 4) -# define X264_DLL_IMPORT -# define X264_DLL_EXPORT __attribute__((visibility("default"))) -# else -# define X264_DLL_IMPORT -# define X264_DLL_EXPORT -# endif -#endif - -/* Application developers planning to link against a shared library version of - * libx264 from a Microsoft Visual Studio or similar development environment - * will need to define X264_API_IMPORTS before including this header. - * This clause does not apply to MinGW, similar development environments, or non - * Windows platforms. */ -#ifdef X264_API_IMPORTS -# define X264_API X264_DLL_IMPORT -#else -# ifdef X264_API_EXPORTS -# define X264_API X264_DLL_EXPORT -# else -# define X264_API -# endif -#endif - -/* x264_t: - * opaque handler for encoder */ -typedef struct x264_t x264_t; - -/**************************************************************************** - * NAL structure and functions - ****************************************************************************/ - -enum nal_unit_type_e -{ - NAL_UNKNOWN = 0, - NAL_SLICE = 1, - NAL_SLICE_DPA = 2, - NAL_SLICE_DPB = 3, - NAL_SLICE_DPC = 4, - NAL_SLICE_IDR = 5, /* ref_idc != 0 */ - NAL_SEI = 6, /* ref_idc == 0 */ - NAL_SPS = 7, - NAL_PPS = 8, - NAL_AUD = 9, - NAL_FILLER = 12, - /* ref_idc == 0 for 6,9,10,11,12 */ -}; -enum nal_priority_e -{ - NAL_PRIORITY_DISPOSABLE = 0, - NAL_PRIORITY_LOW = 1, - NAL_PRIORITY_HIGH = 2, - NAL_PRIORITY_HIGHEST = 3, -}; - -/* The data within the payload is already NAL-encapsulated; the ref_idc and type - * are merely in the struct for easy access by the calling application. - * All data returned in an x264_nal_t, including the data in p_payload, is no longer - * valid after the next call to x264_encoder_encode. Thus it must be used or copied - * before calling x264_encoder_encode or x264_encoder_headers again. */ -typedef struct x264_nal_t -{ - int i_ref_idc; /* nal_priority_e */ - int i_type; /* nal_unit_type_e */ - int b_long_startcode; - int i_first_mb; /* If this NAL is a slice, the index of the first MB in the slice. */ - int i_last_mb; /* If this NAL is a slice, the index of the last MB in the slice. */ - - /* Size of payload (including any padding) in bytes. */ - int i_payload; - /* If param->b_annexb is set, Annex-B bytestream with startcode. - * Otherwise, startcode is replaced with a 4-byte size. - * This size is the size used in mp4/similar muxing; it is equal to i_payload-4 */ - uint8_t *p_payload; - - /* Size of padding in bytes. */ - int i_padding; -} x264_nal_t; - -/**************************************************************************** - * Encoder parameters - ****************************************************************************/ -/* CPU flags */ - -/* x86 */ -#define X264_CPU_MMX (1U<<0) -#define X264_CPU_MMX2 (1U<<1) /* MMX2 aka MMXEXT aka ISSE */ -#define X264_CPU_MMXEXT X264_CPU_MMX2 -#define X264_CPU_SSE (1U<<2) -#define X264_CPU_SSE2 (1U<<3) -#define X264_CPU_LZCNT (1U<<4) -#define X264_CPU_SSE3 (1U<<5) -#define X264_CPU_SSSE3 (1U<<6) -#define X264_CPU_SSE4 (1U<<7) /* SSE4.1 */ -#define X264_CPU_SSE42 (1U<<8) /* SSE4.2 */ -#define X264_CPU_AVX (1U<<9) /* Requires OS support even if YMM registers aren't used */ -#define X264_CPU_XOP (1U<<10) /* AMD XOP */ -#define X264_CPU_FMA4 (1U<<11) /* AMD FMA4 */ -#define X264_CPU_FMA3 (1U<<12) -#define X264_CPU_BMI1 (1U<<13) -#define X264_CPU_BMI2 (1U<<14) -#define X264_CPU_AVX2 (1U<<15) -#define X264_CPU_AVX512 (1U<<16) /* AVX-512 {F, CD, BW, DQ, VL}, requires OS support */ -/* x86 modifiers */ -#define X264_CPU_CACHELINE_32 (1U<<17) /* avoid memory loads that span the border between two cachelines */ -#define X264_CPU_CACHELINE_64 (1U<<18) /* 32/64 is the size of a cacheline in bytes */ -#define X264_CPU_SSE2_IS_SLOW (1U<<19) /* avoid most SSE2 functions on Athlon64 */ -#define X264_CPU_SSE2_IS_FAST (1U<<20) /* a few functions are only faster on Core2 and Phenom */ -#define X264_CPU_SLOW_SHUFFLE (1U<<21) /* The Conroe has a slow shuffle unit (relative to overall SSE performance) */ -#define X264_CPU_STACK_MOD4 (1U<<22) /* if stack is only mod4 and not mod16 */ -#define X264_CPU_SLOW_ATOM (1U<<23) /* The Atom is terrible: slow SSE unaligned loads, slow - * SIMD multiplies, slow SIMD variable shifts, slow pshufb, - * cacheline split penalties -- gather everything here that - * isn't shared by other CPUs to avoid making half a dozen - * new SLOW flags. */ -#define X264_CPU_SLOW_PSHUFB (1U<<24) /* such as on the Intel Atom */ -#define X264_CPU_SLOW_PALIGNR (1U<<25) /* such as on the AMD Bobcat */ - -/* PowerPC */ -#define X264_CPU_ALTIVEC 0x0000001U - -/* ARM and AArch64 */ -#define X264_CPU_ARMV6 0x0000001U -#define X264_CPU_NEON 0x0000002U /* ARM NEON */ -#define X264_CPU_FAST_NEON_MRC 0x0000004U /* Transfer from NEON to ARM register is fast (Cortex-A9) */ -#define X264_CPU_ARMV8 0x0000008U - -/* MIPS */ -#define X264_CPU_MSA 0x0000001U /* MIPS MSA */ - -/* Analyse flags */ -#define X264_ANALYSE_I4x4 0x0001U /* Analyse i4x4 */ -#define X264_ANALYSE_I8x8 0x0002U /* Analyse i8x8 (requires 8x8 transform) */ -#define X264_ANALYSE_PSUB16x16 0x0010U /* Analyse p16x8, p8x16 and p8x8 */ -#define X264_ANALYSE_PSUB8x8 0x0020U /* Analyse p8x4, p4x8, p4x4 */ -#define X264_ANALYSE_BSUB16x16 0x0100U /* Analyse b16x8, b8x16 and b8x8 */ - -#define X264_DIRECT_PRED_NONE 0 -#define X264_DIRECT_PRED_SPATIAL 1 -#define X264_DIRECT_PRED_TEMPORAL 2 -#define X264_DIRECT_PRED_AUTO 3 -#define X264_ME_DIA 0 -#define X264_ME_HEX 1 -#define X264_ME_UMH 2 -#define X264_ME_ESA 3 -#define X264_ME_TESA 4 -#define X264_CQM_FLAT 0 -#define X264_CQM_JVT 1 -#define X264_CQM_CUSTOM 2 -#define X264_RC_CQP 0 -#define X264_RC_CRF 1 -#define X264_RC_ABR 2 -#define X264_QP_AUTO 0 -#define X264_AQ_NONE 0 -#define X264_AQ_VARIANCE 1 -#define X264_AQ_AUTOVARIANCE 2 -#define X264_AQ_AUTOVARIANCE_BIASED 3 -#define X264_B_ADAPT_NONE 0 -#define X264_B_ADAPT_FAST 1 -#define X264_B_ADAPT_TRELLIS 2 -#define X264_WEIGHTP_NONE 0 -#define X264_WEIGHTP_SIMPLE 1 -#define X264_WEIGHTP_SMART 2 -#define X264_B_PYRAMID_NONE 0 -#define X264_B_PYRAMID_STRICT 1 -#define X264_B_PYRAMID_NORMAL 2 -#define X264_KEYINT_MIN_AUTO 0 -#define X264_KEYINT_MAX_INFINITE (1<<30) - -/* AVC-Intra flavors */ -#define X264_AVCINTRA_FLAVOR_PANASONIC 0 -#define X264_AVCINTRA_FLAVOR_SONY 1 - -static const char * const x264_direct_pred_names[] = { "none", "spatial", "temporal", "auto", 0 }; -static const char * const x264_motion_est_names[] = { "dia", "hex", "umh", "esa", "tesa", 0 }; -static const char * const x264_b_pyramid_names[] = { "none", "strict", "normal", 0 }; -static const char * const x264_overscan_names[] = { "undef", "show", "crop", 0 }; -static const char * const x264_vidformat_names[] = { "component", "pal", "ntsc", "secam", "mac", "undef", 0 }; -static const char * const x264_fullrange_names[] = { "off", "on", 0 }; -static const char * const x264_colorprim_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "film", "bt2020", "smpte428", - "smpte431", "smpte432", 0 }; -static const char * const x264_transfer_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "linear", "log100", "log316", - "iec61966-2-4", "bt1361e", "iec61966-2-1", "bt2020-10", "bt2020-12", "smpte2084", "smpte428", "arib-std-b67", 0 }; -static const char * const x264_colmatrix_names[] = { "GBR", "bt709", "undef", "", "fcc", "bt470bg", "smpte170m", "smpte240m", "YCgCo", "bt2020nc", "bt2020c", - "smpte2085", "chroma-derived-nc", "chroma-derived-c", "ICtCp", 0 }; -static const char * const x264_nal_hrd_names[] = { "none", "vbr", "cbr", 0 }; -static const char * const x264_avcintra_flavor_names[] = { "panasonic", "sony", 0 }; - -/* Colorspace type */ -#define X264_CSP_MASK 0x00ff /* */ -#define X264_CSP_NONE 0x0000 /* Invalid mode */ -#define X264_CSP_I400 0x0001 /* monochrome 4:0:0 */ -#define X264_CSP_I420 0x0002 /* yuv 4:2:0 planar */ -#define X264_CSP_YV12 0x0003 /* yvu 4:2:0 planar */ -#define X264_CSP_NV12 0x0004 /* yuv 4:2:0, with one y plane and one packed u+v */ -#define X264_CSP_NV21 0x0005 /* yuv 4:2:0, with one y plane and one packed v+u */ -#define X264_CSP_I422 0x0006 /* yuv 4:2:2 planar */ -#define X264_CSP_YV16 0x0007 /* yvu 4:2:2 planar */ -#define X264_CSP_NV16 0x0008 /* yuv 4:2:2, with one y plane and one packed u+v */ -#define X264_CSP_YUYV 0x0009 /* yuyv 4:2:2 packed */ -#define X264_CSP_UYVY 0x000a /* uyvy 4:2:2 packed */ -#define X264_CSP_V210 0x000b /* 10-bit yuv 4:2:2 packed in 32 */ -#define X264_CSP_I444 0x000c /* yuv 4:4:4 planar */ -#define X264_CSP_YV24 0x000d /* yvu 4:4:4 planar */ -#define X264_CSP_BGR 0x000e /* packed bgr 24bits */ -#define X264_CSP_BGRA 0x000f /* packed bgr 32bits */ -#define X264_CSP_RGB 0x0010 /* packed rgb 24bits */ -#define X264_CSP_MAX 0x0011 /* end of list */ -#define X264_CSP_VFLIP 0x1000 /* the csp is vertically flipped */ -#define X264_CSP_HIGH_DEPTH 0x2000 /* the csp has a depth of 16 bits per pixel component */ - -/* Slice type */ -#define X264_TYPE_AUTO 0x0000 /* Let x264 choose the right type */ -#define X264_TYPE_IDR 0x0001 -#define X264_TYPE_I 0x0002 -#define X264_TYPE_P 0x0003 -#define X264_TYPE_BREF 0x0004 /* Non-disposable B-frame */ -#define X264_TYPE_B 0x0005 -#define X264_TYPE_KEYFRAME 0x0006 /* IDR or I depending on b_open_gop option */ -#define IS_X264_TYPE_I(x) ((x)==X264_TYPE_I || (x)==X264_TYPE_IDR || (x)==X264_TYPE_KEYFRAME) -#define IS_X264_TYPE_B(x) ((x)==X264_TYPE_B || (x)==X264_TYPE_BREF) - -/* Log level */ -#define X264_LOG_NONE (-1) -#define X264_LOG_ERROR 0 -#define X264_LOG_WARNING 1 -#define X264_LOG_INFO 2 -#define X264_LOG_DEBUG 3 - -/* Threading */ -#define X264_THREADS_AUTO 0 /* Automatically select optimal number of threads */ -#define X264_SYNC_LOOKAHEAD_AUTO (-1) /* Automatically select optimal lookahead thread buffer size */ - -/* HRD */ -#define X264_NAL_HRD_NONE 0 -#define X264_NAL_HRD_VBR 1 -#define X264_NAL_HRD_CBR 2 - -/* Zones: override ratecontrol or other options for specific sections of the video. - * See x264_encoder_reconfig() for which options can be changed. - * If zones overlap, whichever comes later in the list takes precedence. */ -typedef struct x264_zone_t -{ - int i_start, i_end; /* range of frame numbers */ - int b_force_qp; /* whether to use qp vs bitrate factor */ - int i_qp; - float f_bitrate_factor; - struct x264_param_t *param; -} x264_zone_t; - -typedef struct x264_param_t -{ - /* CPU flags */ - uint32_t cpu; - int i_threads; /* encode multiple frames in parallel */ - int i_lookahead_threads; /* multiple threads for lookahead analysis */ - int b_sliced_threads; /* Whether to use slice-based threading. */ - int b_deterministic; /* whether to allow non-deterministic optimizations when threaded */ - int b_cpu_independent; /* force canonical behavior rather than cpu-dependent optimal algorithms */ - int i_sync_lookahead; /* threaded lookahead buffer */ - - /* Video Properties */ - int i_width; - int i_height; - int i_csp; /* CSP of encoded bitstream */ - int i_bitdepth; - int i_level_idc; - int i_frame_total; /* number of frames to encode if known, else 0 */ - - /* NAL HRD - * Uses Buffering and Picture Timing SEIs to signal HRD - * The HRD in H.264 was not designed with VFR in mind. - * It is therefore not recommendeded to use NAL HRD with VFR. - * Furthermore, reconfiguring the VBV (via x264_encoder_reconfig) - * will currently generate invalid HRD. */ - int i_nal_hrd; - - struct - { - /* they will be reduced to be 0 < x <= 65535 and prime */ - int i_sar_height; - int i_sar_width; - - int i_overscan; /* 0=undef, 1=no overscan, 2=overscan */ - - /* see h264 annex E for the values of the following */ - int i_vidformat; - int b_fullrange; - int i_colorprim; - int i_transfer; - int i_colmatrix; - int i_chroma_loc; /* both top & bottom */ - } vui; - - /* Bitstream parameters */ - int i_frame_reference; /* Maximum number of reference frames */ - int i_dpb_size; /* Force a DPB size larger than that implied by B-frames and reference frames. - * Useful in combination with interactive error resilience. */ - int i_keyint_max; /* Force an IDR keyframe at this interval */ - int i_keyint_min; /* Scenecuts closer together than this are coded as I, not IDR. */ - int i_scenecut_threshold; /* how aggressively to insert extra I frames */ - int b_intra_refresh; /* Whether or not to use periodic intra refresh instead of IDR frames. */ - - int i_bframe; /* how many b-frame between 2 references pictures */ - int i_bframe_adaptive; - int i_bframe_bias; - int i_bframe_pyramid; /* Keep some B-frames as references: 0=off, 1=strict hierarchical, 2=normal */ - int b_open_gop; - int b_bluray_compat; - int i_avcintra_class; - int i_avcintra_flavor; - - int b_deblocking_filter; - int i_deblocking_filter_alphac0; /* [-6, 6] -6 light filter, 6 strong */ - int i_deblocking_filter_beta; /* [-6, 6] idem */ - - int b_cabac; - int i_cabac_init_idc; - - int b_interlaced; - int b_constrained_intra; - - int i_cqm_preset; - char *psz_cqm_file; /* filename (in UTF-8) of CQM file, JM format */ - uint8_t cqm_4iy[16]; /* used only if i_cqm_preset == X264_CQM_CUSTOM */ - uint8_t cqm_4py[16]; - uint8_t cqm_4ic[16]; - uint8_t cqm_4pc[16]; - uint8_t cqm_8iy[64]; - uint8_t cqm_8py[64]; - uint8_t cqm_8ic[64]; - uint8_t cqm_8pc[64]; - - /* Log */ - void (*pf_log)( void *, int i_level, const char *psz, va_list ); - void *p_log_private; - int i_log_level; - int b_full_recon; /* fully reconstruct frames, even when not necessary for encoding. Implied by psz_dump_yuv */ - char *psz_dump_yuv; /* filename (in UTF-8) for reconstructed frames */ - - /* Encoder analyser parameters */ - struct - { - unsigned int intra; /* intra partitions */ - unsigned int inter; /* inter partitions */ - - int b_transform_8x8; - int i_weighted_pred; /* weighting for P-frames */ - int b_weighted_bipred; /* implicit weighting for B-frames */ - int i_direct_mv_pred; /* spatial vs temporal mv prediction */ - int i_chroma_qp_offset; - - int i_me_method; /* motion estimation algorithm to use (X264_ME_*) */ - int i_me_range; /* integer pixel motion estimation search range (from predicted mv) */ - int i_mv_range; /* maximum length of a mv (in pixels). -1 = auto, based on level */ - int i_mv_range_thread; /* minimum space between threads. -1 = auto, based on number of threads. */ - int i_subpel_refine; /* subpixel motion estimation quality */ - int b_chroma_me; /* chroma ME for subpel and mode decision in P-frames */ - int b_mixed_references; /* allow each mb partition to have its own reference number */ - int i_trellis; /* trellis RD quantization */ - int b_fast_pskip; /* early SKIP detection on P-frames */ - int b_dct_decimate; /* transform coefficient thresholding on P-frames */ - int i_noise_reduction; /* adaptive pseudo-deadzone */ - float f_psy_rd; /* Psy RD strength */ - float f_psy_trellis; /* Psy trellis strength */ - int b_psy; /* Toggle all psy optimizations */ - - int b_mb_info; /* Use input mb_info data in x264_picture_t */ - int b_mb_info_update; /* Update the values in mb_info according to the results of encoding. */ - - /* the deadzone size that will be used in luma quantization */ - int i_luma_deadzone[2]; /* {inter, intra} */ - - int b_psnr; /* compute and print PSNR stats */ - int b_ssim; /* compute and print SSIM stats */ - } analyse; - - /* Rate control parameters */ - struct - { - int i_rc_method; /* X264_RC_* */ - - int i_qp_constant; /* 0=lossless */ - int i_qp_min; /* min allowed QP value */ - int i_qp_max; /* max allowed QP value */ - int i_qp_step; /* max QP step between frames */ - - int i_bitrate; - float f_rf_constant; /* 1pass VBR, nominal QP */ - float f_rf_constant_max; /* In CRF mode, maximum CRF as caused by VBV */ - float f_rate_tolerance; - int i_vbv_max_bitrate; - int i_vbv_buffer_size; - float f_vbv_buffer_init; /* <=1: fraction of buffer_size. >1: kbit */ - float f_ip_factor; - float f_pb_factor; - - /* VBV filler: force CBR VBV and use filler bytes to ensure hard-CBR. - * Implied by NAL-HRD CBR. */ - int b_filler; - - int i_aq_mode; /* psy adaptive QP. (X264_AQ_*) */ - float f_aq_strength; - int b_mb_tree; /* Macroblock-tree ratecontrol. */ - int i_lookahead; - - /* 2pass */ - int b_stat_write; /* Enable stat writing in psz_stat_out */ - char *psz_stat_out; /* output filename (in UTF-8) of the 2pass stats file */ - int b_stat_read; /* Read stat from psz_stat_in and use it */ - char *psz_stat_in; /* input filename (in UTF-8) of the 2pass stats file */ - - /* 2pass params (same as ffmpeg ones) */ - float f_qcompress; /* 0.0 => cbr, 1.0 => constant qp */ - float f_qblur; /* temporally blur quants */ - float f_complexity_blur; /* temporally blur complexity */ - x264_zone_t *zones; /* ratecontrol overrides */ - int i_zones; /* number of zone_t's */ - char *psz_zones; /* alternate method of specifying zones */ - } rc; - - /* Cropping Rectangle parameters: added to those implicitly defined by - non-mod16 video resolutions. */ - struct - { - int i_left; - int i_top; - int i_right; - int i_bottom; - } crop_rect; - - /* frame packing arrangement flag */ - int i_frame_packing; - - /* mastering display SEI: Primary and white point chromaticity coordinates - in 0.00002 increments. Brightness units are 0.0001 cd/m^2. */ - struct - { - int b_mastering_display; /* enable writing this SEI */ - int i_green_x; - int i_green_y; - int i_blue_x; - int i_blue_y; - int i_red_x; - int i_red_y; - int i_white_x; - int i_white_y; - int64_t i_display_max; - int64_t i_display_min; - } mastering_display; - - /* content light level SEI */ - struct - { - int b_cll; /* enable writing this SEI */ - int i_max_cll; - int i_max_fall; - } content_light_level; - - /* alternative transfer SEI */ - int i_alternative_transfer; - - /* Muxing parameters */ - int b_aud; /* generate access unit delimiters */ - int b_repeat_headers; /* put SPS/PPS before each keyframe */ - int b_annexb; /* if set, place start codes (4 bytes) before NAL units, - * otherwise place size (4 bytes) before NAL units. */ - int i_sps_id; /* SPS and PPS id number */ - int b_vfr_input; /* VFR input. If 1, use timebase and timestamps for ratecontrol purposes. - * If 0, use fps only. */ - int b_pulldown; /* use explicitly set timebase for CFR */ - uint32_t i_fps_num; - uint32_t i_fps_den; - uint32_t i_timebase_num; /* Timebase numerator */ - uint32_t i_timebase_den; /* Timebase denominator */ - - int b_tff; - - /* Pulldown: - * The correct pic_struct must be passed with each input frame. - * The input timebase should be the timebase corresponding to the output framerate. This should be constant. - * e.g. for 3:2 pulldown timebase should be 1001/30000 - * The PTS passed with each frame must be the PTS of the frame after pulldown is applied. - * Frame doubling and tripling require b_vfr_input set to zero (see H.264 Table D-1) - * - * Pulldown changes are not clearly defined in H.264. Therefore, it is the calling app's responsibility to manage this. - */ - - int b_pic_struct; - - /* Fake Interlaced. - * - * Used only when b_interlaced=0. Setting this flag makes it possible to flag the stream as PAFF interlaced yet - * encode all frames progessively. It is useful for encoding 25p and 30p Blu-Ray streams. - */ - - int b_fake_interlaced; - - /* Don't optimize header parameters based on video content, e.g. ensure that splitting an input video, compressing - * each part, and stitching them back together will result in identical SPS/PPS. This is necessary for stitching - * with container formats that don't allow multiple SPS/PPS. */ - int b_stitchable; - - int b_opencl; /* use OpenCL when available */ - int i_opencl_device; /* specify count of GPU devices to skip, for CLI users */ - void *opencl_device_id; /* pass explicit cl_device_id as void*, for API users */ - char *psz_clbin_file; /* filename (in UTF-8) of the compiled OpenCL kernel cache file */ - - /* Slicing parameters */ - int i_slice_max_size; /* Max size per slice in bytes; includes estimated NAL overhead. */ - int i_slice_max_mbs; /* Max number of MBs per slice; overrides i_slice_count. */ - int i_slice_min_mbs; /* Min number of MBs per slice */ - int i_slice_count; /* Number of slices per frame: forces rectangular slices. */ - int i_slice_count_max; /* Absolute cap on slices per frame; stops applying slice-max-size - * and slice-max-mbs if this is reached. */ - - /* Optional callback for freeing this x264_param_t when it is done being used. - * Only used when the x264_param_t sits in memory for an indefinite period of time, - * i.e. when an x264_param_t is passed to x264_t in an x264_picture_t or in zones. - * Not used when x264_encoder_reconfig is called directly. */ - void (*param_free)( void* ); - - /* Optional low-level callback for low-latency encoding. Called for each output NAL unit - * immediately after the NAL unit is finished encoding. This allows the calling application - * to begin processing video data (e.g. by sending packets over a network) before the frame - * is done encoding. - * - * This callback MUST do the following in order to work correctly: - * 1) Have available an output buffer of at least size nal->i_payload*3/2 + 5 + 64. - * 2) Call x264_nal_encode( h, dst, nal ), where dst is the output buffer. - * After these steps, the content of nal is valid and can be used in the same way as if - * the NAL unit were output by x264_encoder_encode. - * - * This does not need to be synchronous with the encoding process: the data pointed to - * by nal (both before and after x264_nal_encode) will remain valid until the next - * x264_encoder_encode call. The callback must be re-entrant. - * - * This callback does not work with frame-based threads; threads must be disabled - * or sliced-threads enabled. This callback also does not work as one would expect - * with HRD -- since the buffering period SEI cannot be calculated until the frame - * is finished encoding, it will not be sent via this callback. - * - * Note also that the NALs are not necessarily returned in order when sliced threads is - * enabled. Accordingly, the variable i_first_mb and i_last_mb are available in - * x264_nal_t to help the calling application reorder the slices if necessary. - * - * When this callback is enabled, x264_encoder_encode does not return valid NALs; - * the calling application is expected to acquire all output NALs through the callback. - * - * It is generally sensible to combine this callback with a use of slice-max-mbs or - * slice-max-size. - * - * The opaque pointer is the opaque pointer from the input frame associated with this - * NAL unit. This helps distinguish between nalu_process calls from different sources, - * e.g. if doing multiple encodes in one process. - */ - void (*nalu_process)( x264_t *h, x264_nal_t *nal, void *opaque ); - - /* For internal use only */ - void *opaque; -} x264_param_t; - -X264_API void x264_nal_encode( x264_t *h, uint8_t *dst, x264_nal_t *nal ); - -/**************************************************************************** - * H.264 level restriction information - ****************************************************************************/ - -typedef struct x264_level_t -{ - uint8_t level_idc; - int32_t mbps; /* max macroblock processing rate (macroblocks/sec) */ - int32_t frame_size; /* max frame size (macroblocks) */ - int32_t dpb; /* max decoded picture buffer (mbs) */ - int32_t bitrate; /* max bitrate (kbit/sec) */ - int32_t cpb; /* max vbv buffer (kbit) */ - uint16_t mv_range; /* max vertical mv component range (pixels) */ - uint8_t mvs_per_2mb; /* max mvs per 2 consecutive mbs. */ - uint8_t slice_rate; /* ?? */ - uint8_t mincr; /* min compression ratio */ - uint8_t bipred8x8; /* limit bipred to >=8x8 */ - uint8_t direct8x8; /* limit b_direct to >=8x8 */ - uint8_t frame_only; /* forbid interlacing */ -} x264_level_t; - -/* all of the levels defined in the standard, terminated by .level_idc=0 */ -X264_API extern const x264_level_t x264_levels[]; - -/**************************************************************************** - * Basic parameter handling functions - ****************************************************************************/ - -/* x264_param_default: - * fill x264_param_t with default values and do CPU detection */ -X264_API void x264_param_default( x264_param_t * ); - -/* x264_param_parse: - * set one parameter by name. - * returns 0 on success, or returns one of the following errors. - * note: BAD_VALUE occurs only if it can't even parse the value, - * numerical range is not checked until x264_encoder_open() or - * x264_encoder_reconfig(). - * value=NULL means "true" for boolean options, but is a BAD_VALUE for non-booleans. - * can allocate memory which should be freed by call of x264_param_cleanup. */ -#define X264_PARAM_BAD_NAME (-1) -#define X264_PARAM_BAD_VALUE (-2) -#define X264_PARAM_ALLOC_FAILED (-3) -X264_API int x264_param_parse( x264_param_t *, const char *name, const char *value ); - -/* x264_param_cleanup: - * Cleans up and frees allocated members of x264_param_t. - * This *does not* free the x264_param_t itself, as it may exist on the - * stack. It only frees any members of the struct that were allocated by - * x264 itself, in e.g. x264_param_parse(). */ -X264_API void x264_param_cleanup( x264_param_t *param ); - -/**************************************************************************** - * Advanced parameter handling functions - ****************************************************************************/ - -/* These functions expose the full power of x264's preset-tune-profile system for - * easy adjustment of large numbers of internal parameters. - * - * In order to replicate x264CLI's option handling, these functions MUST be called - * in the following order: - * 1) x264_param_default_preset - * 2) Custom user options (via param_parse or directly assigned variables) - * 3) x264_param_apply_fastfirstpass - * 4) x264_param_apply_profile - * - * Additionally, x264CLI does not apply step 3 if the preset chosen is "placebo" - * or --slow-firstpass is set. */ - -/* x264_param_default_preset: - * The same as x264_param_default, but also use the passed preset and tune - * to modify the default settings. - * (either can be NULL, which implies no preset or no tune, respectively) - * - * Currently available presets are, ordered from fastest to slowest: */ -static const char * const x264_preset_names[] = { "ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo", 0 }; - -/* The presets can also be indexed numerically, as in: - * x264_param_default_preset( ¶m, "3", ... ) - * with ultrafast mapping to "0" and placebo mapping to "9". This mapping may - * of course change if new presets are added in between, but will always be - * ordered from fastest to slowest. - * - * Warning: the speed of these presets scales dramatically. Ultrafast is a full - * 100 times faster than placebo! - * - * Currently available tunings are: */ -static const char * const x264_tune_names[] = { "film", "animation", "grain", "stillimage", "psnr", "ssim", "fastdecode", "zerolatency", 0 }; - -/* Multiple tunings can be used if separated by a delimiter in ",./-+", - * however multiple psy tunings cannot be used. - * film, animation, grain, stillimage, psnr, and ssim are psy tunings. - * - * returns 0 on success, negative on failure (e.g. invalid preset/tune name). */ -X264_API int x264_param_default_preset( x264_param_t *, const char *preset, const char *tune ); - -/* x264_param_apply_fastfirstpass: - * If first-pass mode is set (rc.b_stat_read == 0, rc.b_stat_write == 1), - * modify the encoder settings to disable options generally not useful on - * the first pass. */ -X264_API void x264_param_apply_fastfirstpass( x264_param_t * ); - -/* x264_param_apply_profile: - * Applies the restrictions of the given profile. - * Currently available profiles are, from most to least restrictive: */ -static const char * const x264_profile_names[] = { "baseline", "main", "high", "high10", "high422", "high444", 0 }; - -/* (can be NULL, in which case the function will do nothing) - * - * Does NOT guarantee that the given profile will be used: if the restrictions - * of "High" are applied to settings that are already Baseline-compatible, the - * stream will remain baseline. In short, it does not increase settings, only - * decrease them. - * - * returns 0 on success, negative on failure (e.g. invalid profile name). */ -X264_API int x264_param_apply_profile( x264_param_t *, const char *profile ); - -/**************************************************************************** - * Picture structures and functions - ****************************************************************************/ - -/* x264_chroma_format: - * Specifies the chroma formats that x264 supports encoding. When this - * value is non-zero, then it represents a X264_CSP_* that is the only - * chroma format that x264 supports encoding. If the value is 0 then - * there are no restrictions. */ -X264_API extern const int x264_chroma_format; - -enum pic_struct_e -{ - PIC_STRUCT_AUTO = 0, // automatically decide (default) - PIC_STRUCT_PROGRESSIVE = 1, // progressive frame - // "TOP" and "BOTTOM" are not supported in x264 (PAFF only) - PIC_STRUCT_TOP_BOTTOM = 4, // top field followed by bottom - PIC_STRUCT_BOTTOM_TOP = 5, // bottom field followed by top - PIC_STRUCT_TOP_BOTTOM_TOP = 6, // top field, bottom field, top field repeated - PIC_STRUCT_BOTTOM_TOP_BOTTOM = 7, // bottom field, top field, bottom field repeated - PIC_STRUCT_DOUBLE = 8, // double frame - PIC_STRUCT_TRIPLE = 9, // triple frame -}; - -typedef struct x264_hrd_t -{ - double cpb_initial_arrival_time; - double cpb_final_arrival_time; - double cpb_removal_time; - - double dpb_output_time; -} x264_hrd_t; - -/* Arbitrary user SEI: - * Payload size is in bytes and the payload pointer must be valid. - * Payload types and syntax can be found in Annex D of the H.264 Specification. - * SEI payload alignment bits as described in Annex D must be included at the - * end of the payload if needed. - * The payload should not be NAL-encapsulated. - * Payloads are written first in order of input, apart from in the case when HRD - * is enabled where payloads are written after the Buffering Period SEI. */ - -typedef struct x264_sei_payload_t -{ - int payload_size; - int payload_type; - uint8_t *payload; -} x264_sei_payload_t; - -typedef struct x264_sei_t -{ - int num_payloads; - x264_sei_payload_t *payloads; - /* In: optional callback to free each payload AND x264_sei_payload_t when used. */ - void (*sei_free)( void* ); -} x264_sei_t; - -typedef struct x264_image_t -{ - int i_csp; /* Colorspace */ - int i_plane; /* Number of image planes */ - int i_stride[4]; /* Strides for each plane */ - uint8_t *plane[4]; /* Pointers to each plane */ -} x264_image_t; - -typedef struct x264_image_properties_t -{ - /* All arrays of data here are ordered as follows: - * each array contains one offset per macroblock, in raster scan order. In interlaced - * mode, top-field MBs and bottom-field MBs are interleaved at the row level. - * Macroblocks are 16x16 blocks of pixels (with respect to the luma plane). For the - * purposes of calculating the number of macroblocks, width and height are rounded up to - * the nearest 16. If in interlaced mode, height is rounded up to the nearest 32 instead. */ - - /* In: an array of quantizer offsets to be applied to this image during encoding. - * These are added on top of the decisions made by x264. - * Offsets can be fractional; they are added before QPs are rounded to integer. - * Adaptive quantization must be enabled to use this feature. Behavior if quant - * offsets differ between encoding passes is undefined. */ - float *quant_offsets; - /* In: optional callback to free quant_offsets when used. - * Useful if one wants to use a different quant_offset array for each frame. */ - void (*quant_offsets_free)( void* ); - - /* In: optional array of flags for each macroblock. - * Allows specifying additional information for the encoder such as which macroblocks - * remain unchanged. Usable flags are listed below. - * x264_param_t.analyse.b_mb_info must be set to use this, since x264 needs to track - * extra data internally to make full use of this information. - * - * Out: if b_mb_info_update is set, x264 will update this array as a result of encoding. - * - * For "MBINFO_CONSTANT", it will remove this flag on any macroblock whose decoded - * pixels have changed. This can be useful for e.g. noting which areas of the - * frame need to actually be blitted. Note: this intentionally ignores the effects - * of deblocking for the current frame, which should be fine unless one needs exact - * pixel-perfect accuracy. - * - * Results for MBINFO_CONSTANT are currently only set for P-frames, and are not - * guaranteed to enumerate all blocks which haven't changed. (There may be false - * negatives, but no false positives.) - */ - uint8_t *mb_info; - /* In: optional callback to free mb_info when used. */ - void (*mb_info_free)( void* ); - - /* The macroblock is constant and remains unchanged from the previous frame. */ - #define X264_MBINFO_CONSTANT (1U<<0) - /* More flags may be added in the future. */ - - /* Out: SSIM of the the frame luma (if x264_param_t.b_ssim is set) */ - double f_ssim; - /* Out: Average PSNR of the frame (if x264_param_t.b_psnr is set) */ - double f_psnr_avg; - /* Out: PSNR of Y, U, and V (if x264_param_t.b_psnr is set) */ - double f_psnr[3]; - - /* Out: Average effective CRF of the encoded frame */ - double f_crf_avg; -} x264_image_properties_t; - -typedef struct x264_picture_t -{ - /* In: force picture type (if not auto) - * If x264 encoding parameters are violated in the forcing of picture types, - * x264 will correct the input picture type and log a warning. - * Out: type of the picture encoded */ - int i_type; - /* In: force quantizer for != X264_QP_AUTO */ - int i_qpplus1; - /* In: pic_struct, for pulldown/doubling/etc...used only if b_pic_struct=1. - * use pic_struct_e for pic_struct inputs - * Out: pic_struct element associated with frame */ - int i_pic_struct; - /* Out: whether this frame is a keyframe. Important when using modes that result in - * SEI recovery points being used instead of IDR frames. */ - int b_keyframe; - /* In: user pts, Out: pts of encoded picture (user)*/ - int64_t i_pts; - /* Out: frame dts. When the pts of the first frame is close to zero, - * initial frames may have a negative dts which must be dealt with by any muxer */ - int64_t i_dts; - /* In: custom encoding parameters to be set from this frame forwards - (in coded order, not display order). If NULL, continue using - parameters from the previous frame. Some parameters, such as - aspect ratio, can only be changed per-GOP due to the limitations - of H.264 itself; in this case, the caller must force an IDR frame - if it needs the changed parameter to apply immediately. */ - x264_param_t *param; - /* In: raw image data */ - /* Out: reconstructed image data. x264 may skip part of the reconstruction process, - e.g. deblocking, in frames where it isn't necessary. To force complete - reconstruction, at a small speed cost, set b_full_recon. */ - x264_image_t img; - /* In: optional information to modify encoder decisions for this frame - * Out: information about the encoded frame */ - x264_image_properties_t prop; - /* Out: HRD timing information. Output only when i_nal_hrd is set. */ - x264_hrd_t hrd_timing; - /* In: arbitrary user SEI (e.g subtitles, AFDs) */ - x264_sei_t extra_sei; - /* private user data. copied from input to output frames. */ - void *opaque; -} x264_picture_t; - -/* x264_picture_init: - * initialize an x264_picture_t. Needs to be done if the calling application - * allocates its own x264_picture_t as opposed to using x264_picture_alloc. */ -X264_API void x264_picture_init( x264_picture_t *pic ); - -/* x264_picture_alloc: - * alloc data for a picture. You must call x264_picture_clean on it. - * returns 0 on success, or -1 on malloc failure or invalid colorspace. */ -X264_API int x264_picture_alloc( x264_picture_t *pic, int i_csp, int i_width, int i_height ); - -/* x264_picture_clean: - * free associated resource for a x264_picture_t allocated with - * x264_picture_alloc ONLY */ -X264_API void x264_picture_clean( x264_picture_t *pic ); - -/**************************************************************************** - * Encoder functions - ****************************************************************************/ - -/* Force a link error in the case of linking against an incompatible API version. - * Glue #defines exist to force correct macro expansion; the final output of the macro - * is x264_encoder_open_##X264_BUILD (for purposes of dlopen). */ -#define x264_encoder_glue1(x,y) x##y -#define x264_encoder_glue2(x,y) x264_encoder_glue1(x,y) -#define x264_encoder_open x264_encoder_glue2(x264_encoder_open_,X264_BUILD) - -/* x264_encoder_open: - * create a new encoder handler, all parameters from x264_param_t are copied */ -X264_API x264_t *x264_encoder_open( x264_param_t * ); - -/* x264_encoder_reconfig: - * various parameters from x264_param_t are copied. - * this takes effect immediately, on whichever frame is encoded next; - * due to delay, this may not be the next frame passed to encoder_encode. - * if the change should apply to some particular frame, use x264_picture_t->param instead. - * returns 0 on success, negative on parameter validation error. - * not all parameters can be changed; see the actual function for a detailed breakdown. - * - * since not all parameters can be changed, moving from preset to preset may not always - * fully copy all relevant parameters, but should still work usably in practice. however, - * more so than for other presets, many of the speed shortcuts used in ultrafast cannot be - * switched out of; using reconfig to switch between ultrafast and other presets is not - * recommended without a more fine-grained breakdown of parameters to take this into account. */ -X264_API int x264_encoder_reconfig( x264_t *, x264_param_t * ); -/* x264_encoder_parameters: - * copies the current internal set of parameters to the pointer provided - * by the caller. useful when the calling application needs to know - * how x264_encoder_open has changed the parameters, or the current state - * of the encoder after multiple x264_encoder_reconfig calls. - * note that the data accessible through pointers in the returned param struct - * (e.g. filenames) should not be modified by the calling application. */ -X264_API void x264_encoder_parameters( x264_t *, x264_param_t * ); -/* x264_encoder_headers: - * return the SPS and PPS that will be used for the whole stream. - * *pi_nal is the number of NAL units outputted in pp_nal. - * returns the number of bytes in the returned NALs. - * returns negative on error. - * the payloads of all output NALs are guaranteed to be sequential in memory. */ -X264_API int x264_encoder_headers( x264_t *, x264_nal_t **pp_nal, int *pi_nal ); -/* x264_encoder_encode: - * encode one picture. - * *pi_nal is the number of NAL units outputted in pp_nal. - * returns the number of bytes in the returned NALs. - * returns negative on error and zero if no NAL units returned. - * the payloads of all output NALs are guaranteed to be sequential in memory. */ -X264_API int x264_encoder_encode( x264_t *, x264_nal_t **pp_nal, int *pi_nal, x264_picture_t *pic_in, x264_picture_t *pic_out ); -/* x264_encoder_close: - * close an encoder handler */ -X264_API void x264_encoder_close( x264_t * ); -/* x264_encoder_delayed_frames: - * return the number of currently delayed (buffered) frames - * this should be used at the end of the stream, to know when you have all the encoded frames. */ -X264_API int x264_encoder_delayed_frames( x264_t * ); -/* x264_encoder_maximum_delayed_frames( x264_t * ): - * return the maximum number of delayed (buffered) frames that can occur with the current - * parameters. */ -X264_API int x264_encoder_maximum_delayed_frames( x264_t * ); -/* x264_encoder_intra_refresh: - * If an intra refresh is not in progress, begin one with the next P-frame. - * If an intra refresh is in progress, begin one as soon as the current one finishes. - * Requires that b_intra_refresh be set. - * - * Useful for interactive streaming where the client can tell the server that packet loss has - * occurred. In this case, keyint can be set to an extremely high value so that intra refreshes - * only occur when calling x264_encoder_intra_refresh. - * - * In multi-pass encoding, if x264_encoder_intra_refresh is called differently in each pass, - * behavior is undefined. - * - * Should not be called during an x264_encoder_encode. */ -X264_API void x264_encoder_intra_refresh( x264_t * ); -/* x264_encoder_invalidate_reference: - * An interactive error resilience tool, designed for use in a low-latency one-encoder-few-clients - * system. When the client has packet loss or otherwise incorrectly decodes a frame, the encoder - * can be told with this command to "forget" the frame and all frames that depend on it, referencing - * only frames that occurred before the loss. This will force a keyframe if no frames are left to - * reference after the aforementioned "forgetting". - * - * It is strongly recommended to use a large i_dpb_size in this case, which allows the encoder to - * keep around extra, older frames to fall back on in case more recent frames are all invalidated. - * Unlike increasing i_frame_reference, this does not increase the number of frames used for motion - * estimation and thus has no speed impact. It is also recommended to set a very large keyframe - * interval, so that keyframes are not used except as necessary for error recovery. - * - * x264_encoder_invalidate_reference is not currently compatible with the use of B-frames or intra - * refresh. - * - * In multi-pass encoding, if x264_encoder_invalidate_reference is called differently in each pass, - * behavior is undefined. - * - * Should not be called during an x264_encoder_encode, but multiple calls can be made simultaneously. - * - * Returns 0 on success, negative on failure. */ -X264_API int x264_encoder_invalidate_reference( x264_t *, int64_t pts ); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/prebuilts/x86/include/x264_config.h b/prebuilts/x86/include/x264_config.h deleted file mode 100644 index 4b4b60e..0000000 --- a/prebuilts/x86/include/x264_config.h +++ /dev/null @@ -1,8 +0,0 @@ -#define X264_GPL 1 -#define X264_INTERLACED 1 -#define X264_BIT_DEPTH 0 -#define X264_CHROMA_FORMAT 0 -#define X264_REV 3094 -#define X264_REV_DIFF 0 -#define X264_VERSION " r3094 bfc87b7" -#define X264_POINTVER "0.164.3094 bfc87b7" diff --git a/prebuilts/x86/include/xf86drm.h b/prebuilts/x86/include/xf86drm.h deleted file mode 100644 index 1631396..0000000 --- a/prebuilts/x86/include/xf86drm.h +++ /dev/null @@ -1,966 +0,0 @@ -/** - * \file xf86drm.h - * OS-independent header for DRM user-level library interface. - * - * \author Rickard E. (Rik) Faith - */ - -/* - * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - */ - -#ifndef _XF86DRM_H_ -#define _XF86DRM_H_ - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef DRM_MAX_MINOR -#define DRM_MAX_MINOR 16 -#endif - -#if defined(__linux__) - -#define DRM_IOCTL_NR(n) _IOC_NR(n) -#define DRM_IOC_VOID _IOC_NONE -#define DRM_IOC_READ _IOC_READ -#define DRM_IOC_WRITE _IOC_WRITE -#define DRM_IOC_READWRITE _IOC_READ|_IOC_WRITE -#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) - -#else /* One of the *BSDs */ - -#include -#define DRM_IOCTL_NR(n) ((n) & 0xff) -#define DRM_IOC_VOID IOC_VOID -#define DRM_IOC_READ IOC_OUT -#define DRM_IOC_WRITE IOC_IN -#define DRM_IOC_READWRITE IOC_INOUT -#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) - -#endif - - /* Defaults, if nothing set in xf86config */ -#define DRM_DEV_UID 0 -#define DRM_DEV_GID 0 -/* Default /dev/dri directory permissions 0755 */ -#define DRM_DEV_DIRMODE \ - (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH) -#define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) - -#ifdef __OpenBSD__ -#define DRM_DIR_NAME "/dev" -#define DRM_PRIMARY_MINOR_NAME "drm" -#define DRM_CONTROL_MINOR_NAME "drmC" -#define DRM_RENDER_MINOR_NAME "drmR" -#else -#define DRM_DIR_NAME "/dev/dri" -#define DRM_PRIMARY_MINOR_NAME "card" -#define DRM_CONTROL_MINOR_NAME "controlD" -#define DRM_RENDER_MINOR_NAME "renderD" -#define DRM_PROC_NAME "/proc/dri/" /* For backward Linux compatibility */ -#endif - -#define DRM_DEV_NAME "%s/" DRM_PRIMARY_MINOR_NAME "%d" -#define DRM_CONTROL_DEV_NAME "%s/" DRM_CONTROL_MINOR_NAME "%d" -#define DRM_RENDER_DEV_NAME "%s/" DRM_RENDER_MINOR_NAME "%d" - -#define DRM_NODE_NAME_MAX \ - (sizeof(DRM_DIR_NAME) + 1 /* slash */ \ - + MAX3(sizeof(DRM_PRIMARY_MINOR_NAME), \ - sizeof(DRM_CONTROL_MINOR_NAME), \ - sizeof(DRM_RENDER_MINOR_NAME)) \ - + sizeof("144") /* highest possible node number */ \ - + 1) /* NULL-terminator */ - -#define DRM_ERR_NO_DEVICE (-1001) -#define DRM_ERR_NO_ACCESS (-1002) -#define DRM_ERR_NOT_ROOT (-1003) -#define DRM_ERR_INVALID (-1004) -#define DRM_ERR_NO_FD (-1005) - -#define DRM_AGP_NO_HANDLE 0 - -typedef unsigned int drmSize, *drmSizePtr; /**< For mapped regions */ -typedef void *drmAddress, **drmAddressPtr; /**< For mapped regions */ - -#if (__GNUC__ >= 3) -#define DRM_PRINTFLIKE(f, a) __attribute__ ((format(__printf__, f, a))) -#else -#define DRM_PRINTFLIKE(f, a) -#endif - -typedef struct _drmServerInfo { - int (*debug_print)(const char *format, va_list ap) DRM_PRINTFLIKE(1,0); - int (*load_module)(const char *name); - void (*get_perms)(gid_t *, mode_t *); -} drmServerInfo, *drmServerInfoPtr; - -typedef struct drmHashEntry { - int fd; - void (*f)(int, void *, void *); - void *tagTable; -} drmHashEntry; - -extern int drmIoctl(int fd, unsigned long request, void *arg); -extern void *drmGetHashTable(void); -extern drmHashEntry *drmGetEntry(int fd); - -/** - * Driver version information. - * - * \sa drmGetVersion() and drmSetVersion(). - */ -typedef struct _drmVersion { - int version_major; /**< Major version */ - int version_minor; /**< Minor version */ - int version_patchlevel; /**< Patch level */ - int name_len; /**< Length of name buffer */ - char *name; /**< Name of driver */ - int date_len; /**< Length of date buffer */ - char *date; /**< User-space buffer to hold date */ - int desc_len; /**< Length of desc buffer */ - char *desc; /**< User-space buffer to hold desc */ -} drmVersion, *drmVersionPtr; - -typedef struct _drmStats { - unsigned long count; /**< Number of data */ - struct { - unsigned long value; /**< Value from kernel */ - const char *long_format; /**< Suggested format for long_name */ - const char *long_name; /**< Long name for value */ - const char *rate_format; /**< Suggested format for rate_name */ - const char *rate_name; /**< Short name for value per second */ - int isvalue; /**< True if value (vs. counter) */ - const char *mult_names; /**< Multiplier names (e.g., "KGM") */ - int mult; /**< Multiplier value (e.g., 1024) */ - int verbose; /**< Suggest only in verbose output */ - } data[15]; -} drmStatsT; - - - /* All of these enums *MUST* match with the - kernel implementation -- so do *NOT* - change them! (The drmlib implementation - will just copy the flags instead of - translating them.) */ -typedef enum { - DRM_FRAME_BUFFER = 0, /**< WC, no caching, no core dump */ - DRM_REGISTERS = 1, /**< no caching, no core dump */ - DRM_SHM = 2, /**< shared, cached */ - DRM_AGP = 3, /**< AGP/GART */ - DRM_SCATTER_GATHER = 4, /**< PCI scatter/gather */ - DRM_CONSISTENT = 5 /**< PCI consistent */ -} drmMapType; - -typedef enum { - DRM_RESTRICTED = 0x0001, /**< Cannot be mapped to client-virtual */ - DRM_READ_ONLY = 0x0002, /**< Read-only in client-virtual */ - DRM_LOCKED = 0x0004, /**< Physical pages locked */ - DRM_KERNEL = 0x0008, /**< Kernel requires access */ - DRM_WRITE_COMBINING = 0x0010, /**< Use write-combining, if available */ - DRM_CONTAINS_LOCK = 0x0020, /**< SHM page that contains lock */ - DRM_REMOVABLE = 0x0040 /**< Removable mapping */ -} drmMapFlags; - -/** - * \warning These values *MUST* match drm.h - */ -typedef enum { - /** \name Flags for DMA buffer dispatch */ - /*@{*/ - DRM_DMA_BLOCK = 0x01, /**< - * Block until buffer dispatched. - * - * \note the buffer may not yet have been - * processed by the hardware -- getting a - * hardware lock with the hardware quiescent - * will ensure that the buffer has been - * processed. - */ - DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */ - DRM_DMA_PRIORITY = 0x04, /**< High priority dispatch */ - /*@}*/ - - /** \name Flags for DMA buffer request */ - /*@{*/ - DRM_DMA_WAIT = 0x10, /**< Wait for free buffers */ - DRM_DMA_SMALLER_OK = 0x20, /**< Smaller-than-requested buffers OK */ - DRM_DMA_LARGER_OK = 0x40 /**< Larger-than-requested buffers OK */ - /*@}*/ -} drmDMAFlags; - -typedef enum { - DRM_PAGE_ALIGN = 0x01, - DRM_AGP_BUFFER = 0x02, - DRM_SG_BUFFER = 0x04, - DRM_FB_BUFFER = 0x08, - DRM_PCI_BUFFER_RO = 0x10 -} drmBufDescFlags; - -typedef enum { - DRM_LOCK_READY = 0x01, /**< Wait until hardware is ready for DMA */ - DRM_LOCK_QUIESCENT = 0x02, /**< Wait until hardware quiescent */ - DRM_LOCK_FLUSH = 0x04, /**< Flush this context's DMA queue first */ - DRM_LOCK_FLUSH_ALL = 0x08, /**< Flush all DMA queues first */ - /* These *HALT* flags aren't supported yet - -- they will be used to support the - full-screen DGA-like mode. */ - DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */ - DRM_HALT_CUR_QUEUES = 0x20 /**< Halt all current queues */ -} drmLockFlags; - -typedef enum { - DRM_CONTEXT_PRESERVED = 0x01, /**< This context is preserved and - never swapped. */ - DRM_CONTEXT_2DONLY = 0x02 /**< This context is for 2D rendering only. */ -} drm_context_tFlags, *drm_context_tFlagsPtr; - -typedef struct _drmBufDesc { - int count; /**< Number of buffers of this size */ - int size; /**< Size in bytes */ - int low_mark; /**< Low water mark */ - int high_mark; /**< High water mark */ -} drmBufDesc, *drmBufDescPtr; - -typedef struct _drmBufInfo { - int count; /**< Number of buffers described in list */ - drmBufDescPtr list; /**< List of buffer descriptions */ -} drmBufInfo, *drmBufInfoPtr; - -typedef struct _drmBuf { - int idx; /**< Index into the master buffer list */ - int total; /**< Buffer size */ - int used; /**< Amount of buffer in use (for DMA) */ - drmAddress address; /**< Address */ -} drmBuf, *drmBufPtr; - -/** - * Buffer mapping information. - * - * Used by drmMapBufs() and drmUnmapBufs() to store information about the - * mapped buffers. - */ -typedef struct _drmBufMap { - int count; /**< Number of buffers mapped */ - drmBufPtr list; /**< Buffers */ -} drmBufMap, *drmBufMapPtr; - -typedef struct _drmLock { - volatile unsigned int lock; - char padding[60]; - /* This is big enough for most current (and future?) architectures: - DEC Alpha: 32 bytes - Intel Merced: ? - Intel P5/PPro/PII/PIII: 32 bytes - Intel StrongARM: 32 bytes - Intel i386/i486: 16 bytes - MIPS: 32 bytes (?) - Motorola 68k: 16 bytes - Motorola PowerPC: 32 bytes - Sun SPARC: 32 bytes - */ -} drmLock, *drmLockPtr; - -/** - * Indices here refer to the offset into - * list in drmBufInfo - */ -typedef struct _drmDMAReq { - drm_context_t context; /**< Context handle */ - int send_count; /**< Number of buffers to send */ - int *send_list; /**< List of handles to buffers */ - int *send_sizes; /**< Lengths of data to send, in bytes */ - drmDMAFlags flags; /**< Flags */ - int request_count; /**< Number of buffers requested */ - int request_size; /**< Desired size of buffers requested */ - int *request_list; /**< Buffer information */ - int *request_sizes; /**< Minimum acceptable sizes */ - int granted_count; /**< Number of buffers granted at this size */ -} drmDMAReq, *drmDMAReqPtr; - -typedef struct _drmRegion { - drm_handle_t handle; - unsigned int offset; - drmSize size; - drmAddress map; -} drmRegion, *drmRegionPtr; - -typedef struct _drmTextureRegion { - unsigned char next; - unsigned char prev; - unsigned char in_use; - unsigned char padding; /**< Explicitly pad this out */ - unsigned int age; -} drmTextureRegion, *drmTextureRegionPtr; - - -typedef enum { - DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */ - DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */ - /* bits 1-6 are reserved for high crtcs */ - DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e, - DRM_VBLANK_EVENT = 0x4000000, /**< Send event instead of blocking */ - DRM_VBLANK_FLIP = 0x8000000, /**< Scheduled buffer swap should flip */ - DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */ - DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */ - DRM_VBLANK_SIGNAL = 0x40000000 /* Send signal instead of blocking */ -} drmVBlankSeqType; -#define DRM_VBLANK_HIGH_CRTC_SHIFT 1 - -typedef struct _drmVBlankReq { - drmVBlankSeqType type; - unsigned int sequence; - unsigned long signal; -} drmVBlankReq, *drmVBlankReqPtr; - -typedef struct _drmVBlankReply { - drmVBlankSeqType type; - unsigned int sequence; - long tval_sec; - long tval_usec; -} drmVBlankReply, *drmVBlankReplyPtr; - -typedef union _drmVBlank { - drmVBlankReq request; - drmVBlankReply reply; -} drmVBlank, *drmVBlankPtr; - -typedef struct _drmSetVersion { - int drm_di_major; - int drm_di_minor; - int drm_dd_major; - int drm_dd_minor; -} drmSetVersion, *drmSetVersionPtr; - -#define __drm_dummy_lock(lock) (*(__volatile__ unsigned int *)lock) - -#define DRM_LOCK_HELD 0x80000000U /**< Hardware lock is held */ -#define DRM_LOCK_CONT 0x40000000U /**< Hardware lock is contended */ - -#if defined(__GNUC__) && (__GNUC__ >= 2) -# if defined(__i386) || defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__) - /* Reflect changes here to drmP.h */ -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - int __dummy; /* Can't mark eax as clobbered */ \ - __asm__ __volatile__( \ - "lock ; cmpxchg %4,%1\n\t" \ - "setnz %0" \ - : "=d" (__ret), \ - "=m" (__drm_dummy_lock(lock)), \ - "=a" (__dummy) \ - : "2" (old), \ - "r" (new)); \ - } while (0) - -#elif defined(__alpha__) - -#define DRM_CAS(lock, old, new, ret) \ - do { \ - int tmp, old32; \ - __asm__ __volatile__( \ - " addl $31, %5, %3\n" \ - "1: ldl_l %0, %2\n" \ - " cmpeq %0, %3, %1\n" \ - " beq %1, 2f\n" \ - " mov %4, %0\n" \ - " stl_c %0, %2\n" \ - " beq %0, 3f\n" \ - " mb\n" \ - "2: cmpeq %1, 0, %1\n" \ - ".subsection 2\n" \ - "3: br 1b\n" \ - ".previous" \ - : "=&r"(tmp), "=&r"(ret), \ - "=m"(__drm_dummy_lock(lock)), \ - "=&r"(old32) \ - : "r"(new), "r"(old) \ - : "memory"); \ - } while (0) - -#elif defined(__sparc__) - -#define DRM_CAS(lock,old,new,__ret) \ -do { register unsigned int __old __asm("o0"); \ - register unsigned int __new __asm("o1"); \ - register volatile unsigned int *__lock __asm("o2"); \ - __old = old; \ - __new = new; \ - __lock = (volatile unsigned int *)lock; \ - __asm__ __volatile__( \ - /*"cas [%2], %3, %0"*/ \ - ".word 0xd3e29008\n\t" \ - /*"membar #StoreStore | #StoreLoad"*/ \ - ".word 0x8143e00a" \ - : "=&r" (__new) \ - : "0" (__new), \ - "r" (__lock), \ - "r" (__old) \ - : "memory"); \ - __ret = (__new != __old); \ -} while(0) - -#elif defined(__ia64__) - -#ifdef __INTEL_COMPILER -/* this currently generates bad code (missing stop bits)... */ -#include - -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - unsigned long __result, __old = (old) & 0xffffffff; \ - __mf(); \ - __result = _InterlockedCompareExchange_acq(&__drm_dummy_lock(lock), (new), __old);\ - __ret = (__result) != (__old); \ -/* __ret = (__sync_val_compare_and_swap(&__drm_dummy_lock(lock), \ - (old), (new)) \ - != (old)); */\ - } while (0) - -#else -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - unsigned int __result, __old = (old); \ - __asm__ __volatile__( \ - "mf\n" \ - "mov ar.ccv=%2\n" \ - ";;\n" \ - "cmpxchg4.acq %0=%1,%3,ar.ccv" \ - : "=r" (__result), "=m" (__drm_dummy_lock(lock)) \ - : "r" ((unsigned long)__old), "r" (new) \ - : "memory"); \ - __ret = (__result) != (__old); \ - } while (0) - -#endif - -#elif defined(__powerpc__) - -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - __asm__ __volatile__( \ - "sync;" \ - "0: lwarx %0,0,%1;" \ - " xor. %0,%3,%0;" \ - " bne 1f;" \ - " stwcx. %2,0,%1;" \ - " bne- 0b;" \ - "1: " \ - "sync;" \ - : "=&r"(__ret) \ - : "r"(lock), "r"(new), "r"(old) \ - : "cr0", "memory"); \ - } while (0) - -# elif defined (__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ - || defined (__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \ - || defined (__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) \ - || defined (__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ - || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ - || defined(__ARM_ARCH_7EM__) - /* excluding ARMv4/ARMv5 and lower (lacking ldrex/strex support) */ - #undef DRM_DEV_MODE - #define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) - - #define DRM_CAS(lock,old,new,__ret) \ - do { \ - __asm__ __volatile__ ( \ - "1: ldrex %0, [%1]\n" \ - " teq %0, %2\n" \ - " ite eq\n" \ - " strexeq %0, %3, [%1]\n" \ - " movne %0, #1\n" \ - : "=&r" (__ret) \ - : "r" (lock), "r" (old), "r" (new) \ - : "cc","memory"); \ - } while (0) - -#endif /* architecture */ -#endif /* __GNUC__ >= 2 */ - -#ifndef DRM_CAS -#define DRM_CAS(lock,old,new,ret) do { ret=1; } while (0) /* FAST LOCK FAILS */ -#endif - -#if defined(__alpha__) -#define DRM_CAS_RESULT(_result) long _result -#elif defined(__powerpc__) -#define DRM_CAS_RESULT(_result) int _result -#else -#define DRM_CAS_RESULT(_result) char _result -#endif - -#define DRM_LIGHT_LOCK(fd,lock,context) \ - do { \ - DRM_CAS_RESULT(__ret); \ - DRM_CAS(lock,context,DRM_LOCK_HELD|context,__ret); \ - if (__ret) drmGetLock(fd,context,0); \ - } while(0) - - /* This one counts fast locks -- for - benchmarking only. */ -#define DRM_LIGHT_LOCK_COUNT(fd,lock,context,count) \ - do { \ - DRM_CAS_RESULT(__ret); \ - DRM_CAS(lock,context,DRM_LOCK_HELD|context,__ret); \ - if (__ret) drmGetLock(fd,context,0); \ - else ++count; \ - } while(0) - -#define DRM_LOCK(fd,lock,context,flags) \ - do { \ - if (flags) drmGetLock(fd,context,flags); \ - else DRM_LIGHT_LOCK(fd,lock,context); \ - } while(0) - -#define DRM_UNLOCK(fd,lock,context) \ - do { \ - DRM_CAS_RESULT(__ret); \ - DRM_CAS(lock,DRM_LOCK_HELD|context,context,__ret); \ - if (__ret) drmUnlock(fd,context); \ - } while(0) - - /* Simple spin locks */ -#define DRM_SPINLOCK(spin,val) \ - do { \ - DRM_CAS_RESULT(__ret); \ - do { \ - DRM_CAS(spin,0,val,__ret); \ - if (__ret) while ((spin)->lock); \ - } while (__ret); \ - } while(0) - -#define DRM_SPINLOCK_TAKE(spin,val) \ - do { \ - DRM_CAS_RESULT(__ret); \ - int cur; \ - do { \ - cur = (*spin).lock; \ - DRM_CAS(spin,cur,val,__ret); \ - } while (__ret); \ - } while(0) - -#define DRM_SPINLOCK_COUNT(spin,val,count,__ret) \ - do { \ - int __i; \ - __ret = 1; \ - for (__i = 0; __ret && __i < count; __i++) { \ - DRM_CAS(spin,0,val,__ret); \ - if (__ret) for (;__i < count && (spin)->lock; __i++); \ - } \ - } while(0) - -#define DRM_SPINUNLOCK(spin,val) \ - do { \ - DRM_CAS_RESULT(__ret); \ - if ((*spin).lock == val) { /* else server stole lock */ \ - do { \ - DRM_CAS(spin,val,0,__ret); \ - } while (__ret); \ - } \ - } while(0) - - - -/* General user-level programmer's API: unprivileged */ -extern int drmAvailable(void); -extern int drmOpen(const char *name, const char *busid); - -#define DRM_NODE_PRIMARY 0 -#define DRM_NODE_CONTROL 1 -#define DRM_NODE_RENDER 2 -#define DRM_NODE_MAX 3 - -extern int drmOpenWithType(const char *name, const char *busid, - int type); - -extern int drmOpenControl(int minor); -extern int drmOpenRender(int minor); -extern int drmClose(int fd); -extern drmVersionPtr drmGetVersion(int fd); -extern drmVersionPtr drmGetLibVersion(int fd); -extern int drmGetCap(int fd, uint64_t capability, uint64_t *value); -extern void drmFreeVersion(drmVersionPtr); -extern int drmGetMagic(int fd, drm_magic_t * magic); -extern char *drmGetBusid(int fd); -extern int drmGetInterruptFromBusID(int fd, int busnum, int devnum, - int funcnum); -extern int drmGetMap(int fd, int idx, drm_handle_t *offset, - drmSize *size, drmMapType *type, - drmMapFlags *flags, drm_handle_t *handle, - int *mtrr); -extern int drmGetClient(int fd, int idx, int *auth, int *pid, - int *uid, unsigned long *magic, - unsigned long *iocs); -extern int drmGetStats(int fd, drmStatsT *stats); -extern int drmSetInterfaceVersion(int fd, drmSetVersion *version); -extern int drmCommandNone(int fd, unsigned long drmCommandIndex); -extern int drmCommandRead(int fd, unsigned long drmCommandIndex, - void *data, unsigned long size); -extern int drmCommandWrite(int fd, unsigned long drmCommandIndex, - void *data, unsigned long size); -extern int drmCommandWriteRead(int fd, unsigned long drmCommandIndex, - void *data, unsigned long size); - -/* General user-level programmer's API: X server (root) only */ -extern void drmFreeBusid(const char *busid); -extern int drmSetBusid(int fd, const char *busid); -extern int drmAuthMagic(int fd, drm_magic_t magic); -extern int drmAddMap(int fd, - drm_handle_t offset, - drmSize size, - drmMapType type, - drmMapFlags flags, - drm_handle_t * handle); -extern int drmRmMap(int fd, drm_handle_t handle); -extern int drmAddContextPrivateMapping(int fd, drm_context_t ctx_id, - drm_handle_t handle); - -extern int drmAddBufs(int fd, int count, int size, - drmBufDescFlags flags, - int agp_offset); -extern int drmMarkBufs(int fd, double low, double high); -extern int drmCreateContext(int fd, drm_context_t * handle); -extern int drmSetContextFlags(int fd, drm_context_t context, - drm_context_tFlags flags); -extern int drmGetContextFlags(int fd, drm_context_t context, - drm_context_tFlagsPtr flags); -extern int drmAddContextTag(int fd, drm_context_t context, void *tag); -extern int drmDelContextTag(int fd, drm_context_t context); -extern void *drmGetContextTag(int fd, drm_context_t context); -extern drm_context_t * drmGetReservedContextList(int fd, int *count); -extern void drmFreeReservedContextList(drm_context_t *); -extern int drmSwitchToContext(int fd, drm_context_t context); -extern int drmDestroyContext(int fd, drm_context_t handle); -extern int drmCreateDrawable(int fd, drm_drawable_t * handle); -extern int drmDestroyDrawable(int fd, drm_drawable_t handle); -extern int drmUpdateDrawableInfo(int fd, drm_drawable_t handle, - drm_drawable_info_type_t type, - unsigned int num, void *data); -extern int drmCtlInstHandler(int fd, int irq); -extern int drmCtlUninstHandler(int fd); -extern int drmSetClientCap(int fd, uint64_t capability, - uint64_t value); - -extern int drmCrtcGetSequence(int fd, uint32_t crtcId, - uint64_t *sequence, uint64_t *ns); -extern int drmCrtcQueueSequence(int fd, uint32_t crtcId, - uint32_t flags, uint64_t sequence, - uint64_t *sequence_queued, - uint64_t user_data); -/* General user-level programmer's API: authenticated client and/or X */ -extern int drmMap(int fd, - drm_handle_t handle, - drmSize size, - drmAddressPtr address); -extern int drmUnmap(drmAddress address, drmSize size); -extern drmBufInfoPtr drmGetBufInfo(int fd); -extern drmBufMapPtr drmMapBufs(int fd); -extern int drmUnmapBufs(drmBufMapPtr bufs); -extern int drmDMA(int fd, drmDMAReqPtr request); -extern int drmFreeBufs(int fd, int count, int *list); -extern int drmGetLock(int fd, - drm_context_t context, - drmLockFlags flags); -extern int drmUnlock(int fd, drm_context_t context); -extern int drmFinish(int fd, int context, drmLockFlags flags); -extern int drmGetContextPrivateMapping(int fd, drm_context_t ctx_id, - drm_handle_t * handle); - -/* AGP/GART support: X server (root) only */ -extern int drmAgpAcquire(int fd); -extern int drmAgpRelease(int fd); -extern int drmAgpEnable(int fd, unsigned long mode); -extern int drmAgpAlloc(int fd, unsigned long size, - unsigned long type, unsigned long *address, - drm_handle_t *handle); -extern int drmAgpFree(int fd, drm_handle_t handle); -extern int drmAgpBind(int fd, drm_handle_t handle, - unsigned long offset); -extern int drmAgpUnbind(int fd, drm_handle_t handle); - -/* AGP/GART info: authenticated client and/or X */ -extern int drmAgpVersionMajor(int fd); -extern int drmAgpVersionMinor(int fd); -extern unsigned long drmAgpGetMode(int fd); -extern unsigned long drmAgpBase(int fd); /* Physical location */ -extern unsigned long drmAgpSize(int fd); /* Bytes */ -extern unsigned long drmAgpMemoryUsed(int fd); -extern unsigned long drmAgpMemoryAvail(int fd); -extern unsigned int drmAgpVendorId(int fd); -extern unsigned int drmAgpDeviceId(int fd); - -/* PCI scatter/gather support: X server (root) only */ -extern int drmScatterGatherAlloc(int fd, unsigned long size, - drm_handle_t *handle); -extern int drmScatterGatherFree(int fd, drm_handle_t handle); - -extern int drmWaitVBlank(int fd, drmVBlankPtr vbl); - -/* Support routines */ -extern void drmSetServerInfo(drmServerInfoPtr info); -extern int drmError(int err, const char *label); -extern void *drmMalloc(int size); -extern void drmFree(void *pt); - -/* Hash table routines */ -extern void *drmHashCreate(void); -extern int drmHashDestroy(void *t); -extern int drmHashLookup(void *t, unsigned long key, void **value); -extern int drmHashInsert(void *t, unsigned long key, void *value); -extern int drmHashDelete(void *t, unsigned long key); -extern int drmHashFirst(void *t, unsigned long *key, void **value); -extern int drmHashNext(void *t, unsigned long *key, void **value); - -/* PRNG routines */ -extern void *drmRandomCreate(unsigned long seed); -extern int drmRandomDestroy(void *state); -extern unsigned long drmRandom(void *state); -extern double drmRandomDouble(void *state); - -/* Skip list routines */ - -extern void *drmSLCreate(void); -extern int drmSLDestroy(void *l); -extern int drmSLLookup(void *l, unsigned long key, void **value); -extern int drmSLInsert(void *l, unsigned long key, void *value); -extern int drmSLDelete(void *l, unsigned long key); -extern int drmSLNext(void *l, unsigned long *key, void **value); -extern int drmSLFirst(void *l, unsigned long *key, void **value); -extern void drmSLDump(void *l); -extern int drmSLLookupNeighbors(void *l, unsigned long key, - unsigned long *prev_key, void **prev_value, - unsigned long *next_key, void **next_value); - -extern int drmOpenOnce(void *unused, const char *BusID, int *newlyopened); -extern int drmOpenOnceWithType(const char *BusID, int *newlyopened, int type); -extern void drmCloseOnce(int fd); -extern void drmMsg(const char *format, ...) DRM_PRINTFLIKE(1, 2); - -extern int drmSetMaster(int fd); -extern int drmDropMaster(int fd); -extern int drmIsMaster(int fd); - -#define DRM_EVENT_CONTEXT_VERSION 4 - -typedef struct _drmEventContext { - - /* This struct is versioned so we can add more pointers if we - * add more events. */ - int version; - - void (*vblank_handler)(int fd, - unsigned int sequence, - unsigned int tv_sec, - unsigned int tv_usec, - void *user_data); - - void (*page_flip_handler)(int fd, - unsigned int sequence, - unsigned int tv_sec, - unsigned int tv_usec, - void *user_data); - - void (*page_flip_handler2)(int fd, - unsigned int sequence, - unsigned int tv_sec, - unsigned int tv_usec, - unsigned int crtc_id, - void *user_data); - - void (*sequence_handler)(int fd, - uint64_t sequence, - uint64_t ns, - uint64_t user_data); -} drmEventContext, *drmEventContextPtr; - -extern int drmHandleEvent(int fd, drmEventContextPtr evctx); - -extern char *drmGetDeviceNameFromFd(int fd); - -/* Improved version of drmGetDeviceNameFromFd which attributes for any type of - * device/node - card, control or renderD. - */ -extern char *drmGetDeviceNameFromFd2(int fd); -extern int drmGetNodeTypeFromFd(int fd); - -/* Convert between GEM handles and DMA-BUF file descriptors. - * - * Warning: since GEM handles are not reference-counted and are unique per - * DRM file description, the caller is expected to perform its own reference - * counting. drmPrimeFDToHandle is guaranteed to return the same handle for - * different FDs if they reference the same underlying buffer object. This - * could even be a buffer object originally created on the same DRM FD. - * - * When sharing a DRM FD with an API such as EGL or GBM, the caller must not - * use drmPrimeHandleToFD nor drmPrimeFDToHandle. A single user-space - * reference-counting implementation is necessary to avoid double-closing GEM - * handles. - * - * Two processes can't share the same DRM FD and both use it to create or - * import GEM handles, even when using a single user-space reference-counting - * implementation like GBM, because GBM doesn't share its state between - * processes. - */ -extern int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd); -extern int drmPrimeFDToHandle(int fd, int prime_fd, uint32_t *handle); - -extern int drmCloseBufferHandle(int fd, uint32_t handle); - -extern char *drmGetPrimaryDeviceNameFromFd(int fd); -extern char *drmGetRenderDeviceNameFromFd(int fd); - -#define DRM_BUS_PCI 0 -#define DRM_BUS_USB 1 -#define DRM_BUS_PLATFORM 2 -#define DRM_BUS_HOST1X 3 - -typedef struct _drmPciBusInfo { - uint16_t domain; - uint8_t bus; - uint8_t dev; - uint8_t func; -} drmPciBusInfo, *drmPciBusInfoPtr; - -typedef struct _drmPciDeviceInfo { - uint16_t vendor_id; - uint16_t device_id; - uint16_t subvendor_id; - uint16_t subdevice_id; - uint8_t revision_id; -} drmPciDeviceInfo, *drmPciDeviceInfoPtr; - -typedef struct _drmUsbBusInfo { - uint8_t bus; - uint8_t dev; -} drmUsbBusInfo, *drmUsbBusInfoPtr; - -typedef struct _drmUsbDeviceInfo { - uint16_t vendor; - uint16_t product; -} drmUsbDeviceInfo, *drmUsbDeviceInfoPtr; - -#define DRM_PLATFORM_DEVICE_NAME_LEN 512 - -typedef struct _drmPlatformBusInfo { - char fullname[DRM_PLATFORM_DEVICE_NAME_LEN]; -} drmPlatformBusInfo, *drmPlatformBusInfoPtr; - -typedef struct _drmPlatformDeviceInfo { - char **compatible; /* NULL terminated list of compatible strings */ -} drmPlatformDeviceInfo, *drmPlatformDeviceInfoPtr; - -#define DRM_HOST1X_DEVICE_NAME_LEN 512 - -typedef struct _drmHost1xBusInfo { - char fullname[DRM_HOST1X_DEVICE_NAME_LEN]; -} drmHost1xBusInfo, *drmHost1xBusInfoPtr; - -typedef struct _drmHost1xDeviceInfo { - char **compatible; /* NULL terminated list of compatible strings */ -} drmHost1xDeviceInfo, *drmHost1xDeviceInfoPtr; - -typedef struct _drmDevice { - char **nodes; /* DRM_NODE_MAX sized array */ - int available_nodes; /* DRM_NODE_* bitmask */ - int bustype; - union { - drmPciBusInfoPtr pci; - drmUsbBusInfoPtr usb; - drmPlatformBusInfoPtr platform; - drmHost1xBusInfoPtr host1x; - } businfo; - union { - drmPciDeviceInfoPtr pci; - drmUsbDeviceInfoPtr usb; - drmPlatformDeviceInfoPtr platform; - drmHost1xDeviceInfoPtr host1x; - } deviceinfo; -} drmDevice, *drmDevicePtr; - -extern int drmGetDevice(int fd, drmDevicePtr *device); -extern void drmFreeDevice(drmDevicePtr *device); - -extern int drmGetDevices(drmDevicePtr devices[], int max_devices); -extern void drmFreeDevices(drmDevicePtr devices[], int count); - -#define DRM_DEVICE_GET_PCI_REVISION (1 << 0) -extern int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device); -extern int drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices); - -extern int drmGetDeviceFromDevId(dev_t dev_id, uint32_t flags, drmDevicePtr *device); - -extern int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b); - -extern int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle); -extern int drmSyncobjDestroy(int fd, uint32_t handle); -extern int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd); -extern int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle); - -extern int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd); -extern int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd); -extern int drmSyncobjWait(int fd, uint32_t *handles, unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); -extern int drmSyncobjReset(int fd, const uint32_t *handles, uint32_t handle_count); -extern int drmSyncobjSignal(int fd, const uint32_t *handles, uint32_t handle_count); -extern int drmSyncobjTimelineSignal(int fd, const uint32_t *handles, - uint64_t *points, uint32_t handle_count); -extern int drmSyncobjTimelineWait(int fd, uint32_t *handles, uint64_t *points, - unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); -extern int drmSyncobjQuery(int fd, uint32_t *handles, uint64_t *points, - uint32_t handle_count); -extern int drmSyncobjQuery2(int fd, uint32_t *handles, uint64_t *points, - uint32_t handle_count, uint32_t flags); -extern int drmSyncobjTransfer(int fd, - uint32_t dst_handle, uint64_t dst_point, - uint32_t src_handle, uint64_t src_point, - uint32_t flags); - -extern char * -drmGetFormatModifierVendor(uint64_t modifier); - -extern char * -drmGetFormatModifierName(uint64_t modifier); - -#ifndef fourcc_mod_get_vendor -#define fourcc_mod_get_vendor(modifier) \ - (((modifier) >> 56) & 0xff) -#endif - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86/include/xf86drmMode.h b/prebuilts/x86/include/xf86drmMode.h deleted file mode 100644 index 4617d1e..0000000 --- a/prebuilts/x86/include/xf86drmMode.h +++ /dev/null @@ -1,504 +0,0 @@ -/* - * \file xf86drmMode.h - * Header for DRM modesetting interface. - * - * \author Jakob Bornecrantz - * - * \par Acknowledgements: - * Feb 2007, Dave Airlie - */ - -/* - * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas. - * Copyright (c) 2007-2008 Dave Airlie - * Copyright (c) 2007-2008 Jakob Bornecrantz - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - * - */ - -#ifndef _XF86DRMMODE_H_ -#define _XF86DRMMODE_H_ - -#if defined(__cplusplus) -extern "C" { -#endif - -#include -#include -#include -#include -#include - -/* - * This is the interface for modesetting for drm. - * - * It aims to provide a randr1.2 compatible interface for modesettings in the - * kernel, the interface is also meant to be used by libraries like EGL. - * - * More information can be found in randrproto.txt which can be found here: - * http://gitweb.freedesktop.org/?p=xorg/proto/randrproto.git - * - * There are some major differences to be noted. Unlike the randr1.2 proto you - * need to create the memory object of the framebuffer yourself with the ttm - * buffer object interface. This object needs to be pinned. - */ - -/* - * Feature defines - * - * Just because these are defined doesn't mean that the kernel - * can do that feature, its just for new code vs old libdrm. - */ -#define DRM_MODE_FEATURE_KMS 1 -#define DRM_MODE_FEATURE_DIRTYFB 1 - - -typedef struct _drmModeRes { - - int count_fbs; - uint32_t *fbs; - - int count_crtcs; - uint32_t *crtcs; - - int count_connectors; - uint32_t *connectors; - - int count_encoders; - uint32_t *encoders; - - uint32_t min_width, max_width; - uint32_t min_height, max_height; -} drmModeRes, *drmModeResPtr; - -typedef struct _drmModeModeInfo { - uint32_t clock; - uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew; - uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan; - - uint32_t vrefresh; - - uint32_t flags; - uint32_t type; - char name[DRM_DISPLAY_MODE_LEN]; -} drmModeModeInfo, *drmModeModeInfoPtr; - -typedef struct _drmModeFB { - uint32_t fb_id; - uint32_t width, height; - uint32_t pitch; - uint32_t bpp; - uint32_t depth; - /* driver specific handle */ - uint32_t handle; -} drmModeFB, *drmModeFBPtr; - -typedef struct _drmModeFB2 { - uint32_t fb_id; - uint32_t width, height; - uint32_t pixel_format; /* fourcc code from drm_fourcc.h */ - uint64_t modifier; /* applies to all buffers */ - uint32_t flags; - - /* per-plane GEM handle; may be duplicate entries for multiple planes */ - uint32_t handles[4]; - uint32_t pitches[4]; /* bytes */ - uint32_t offsets[4]; /* bytes */ -} drmModeFB2, *drmModeFB2Ptr; - -typedef struct drm_clip_rect drmModeClip, *drmModeClipPtr; - -typedef struct _drmModePropertyBlob { - uint32_t id; - uint32_t length; - void *data; -} drmModePropertyBlobRes, *drmModePropertyBlobPtr; - -typedef struct _drmModeProperty { - uint32_t prop_id; - uint32_t flags; - char name[DRM_PROP_NAME_LEN]; - int count_values; - uint64_t *values; /* store the blob lengths */ - int count_enums; - struct drm_mode_property_enum *enums; - int count_blobs; - uint32_t *blob_ids; /* store the blob IDs */ -} drmModePropertyRes, *drmModePropertyPtr; - -static inline uint32_t drmModeGetPropertyType(const drmModePropertyRes *prop) -{ - return prop->flags & (DRM_MODE_PROP_LEGACY_TYPE | DRM_MODE_PROP_EXTENDED_TYPE); -} - -static inline int drm_property_type_is(const drmModePropertyPtr property, - uint32_t type) -{ - return drmModeGetPropertyType(property) == type; -} - -typedef struct _drmModeCrtc { - uint32_t crtc_id; - uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */ - - uint32_t x, y; /**< Position on the framebuffer */ - uint32_t width, height; - int mode_valid; - drmModeModeInfo mode; - - int gamma_size; /**< Number of gamma stops */ - -} drmModeCrtc, *drmModeCrtcPtr; - -typedef struct _drmModeEncoder { - uint32_t encoder_id; - uint32_t encoder_type; - uint32_t crtc_id; - uint32_t possible_crtcs; - uint32_t possible_clones; -} drmModeEncoder, *drmModeEncoderPtr; - -/** - * Describes the connector status. - * - * DRM_MODE_CONNECTED means that the connector has a sink plugged in. - * DRM_MODE_DISCONNECTED means the contrary. DRM_MODE_UNKNOWNCONNECTION is used - * when it could be either. - * - * User-space should first try to enable DRM_MODE_CONNECTED connectors and - * ignore other connectors. If there are no DRM_MODE_CONNECTED connectors, - * user-space should then try to probe and enable DRM_MODE_UNKNOWNCONNECTION - * connectors. - */ -typedef enum { - DRM_MODE_CONNECTED = 1, - DRM_MODE_DISCONNECTED = 2, - DRM_MODE_UNKNOWNCONNECTION = 3 -} drmModeConnection; - -typedef enum { - DRM_MODE_SUBPIXEL_UNKNOWN = 1, - DRM_MODE_SUBPIXEL_HORIZONTAL_RGB = 2, - DRM_MODE_SUBPIXEL_HORIZONTAL_BGR = 3, - DRM_MODE_SUBPIXEL_VERTICAL_RGB = 4, - DRM_MODE_SUBPIXEL_VERTICAL_BGR = 5, - DRM_MODE_SUBPIXEL_NONE = 6 -} drmModeSubPixel; - -typedef struct _drmModeConnector { - uint32_t connector_id; - uint32_t encoder_id; /**< Encoder currently connected to */ - uint32_t connector_type; - uint32_t connector_type_id; - drmModeConnection connection; - uint32_t mmWidth, mmHeight; /**< HxW in millimeters */ - drmModeSubPixel subpixel; - - int count_modes; - drmModeModeInfoPtr modes; - - int count_props; - uint32_t *props; /**< List of property ids */ - uint64_t *prop_values; /**< List of property values */ - - int count_encoders; - uint32_t *encoders; /**< List of encoder ids */ -} drmModeConnector, *drmModeConnectorPtr; - -#define DRM_PLANE_TYPE_OVERLAY 0 -#define DRM_PLANE_TYPE_PRIMARY 1 -#define DRM_PLANE_TYPE_CURSOR 2 - -typedef struct _drmModeObjectProperties { - uint32_t count_props; - uint32_t *props; - uint64_t *prop_values; -} drmModeObjectProperties, *drmModeObjectPropertiesPtr; - -typedef struct _drmModeFormatModifierIterator { - uint32_t fmt_idx, mod_idx; - uint32_t fmt; - uint64_t mod; -} drmModeFormatModifierIterator; - -typedef struct _drmModePlane { - uint32_t count_formats; - uint32_t *formats; - uint32_t plane_id; - - uint32_t crtc_id; - uint32_t fb_id; - - uint32_t crtc_x, crtc_y; - uint32_t x, y; - - uint32_t possible_crtcs; - uint32_t gamma_size; -} drmModePlane, *drmModePlanePtr; - -typedef struct _drmModePlaneRes { - uint32_t count_planes; - uint32_t *planes; -} drmModePlaneRes, *drmModePlaneResPtr; - -extern void drmModeFreeModeInfo( drmModeModeInfoPtr ptr ); -extern void drmModeFreeResources( drmModeResPtr ptr ); -extern void drmModeFreeFB( drmModeFBPtr ptr ); -extern void drmModeFreeFB2( drmModeFB2Ptr ptr ); -extern void drmModeFreeCrtc( drmModeCrtcPtr ptr ); -extern void drmModeFreeConnector( drmModeConnectorPtr ptr ); -extern void drmModeFreeEncoder( drmModeEncoderPtr ptr ); -extern void drmModeFreePlane( drmModePlanePtr ptr ); -extern void drmModeFreePlaneResources(drmModePlaneResPtr ptr); - -/** - * Check whether the DRM node supports Kernel Mode-Setting. - * - * Returns 1 if suitable for KMS, 0 otherwise. - */ -extern int drmIsKMS(int fd); - -/** - * Retrieves all of the resources associated with a card. - */ -extern drmModeResPtr drmModeGetResources(int fd); - -/* - * FrameBuffer manipulation. - */ - -/** - * Retrieve information about framebuffer bufferId - */ -extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId); -extern drmModeFB2Ptr drmModeGetFB2(int fd, uint32_t bufferId); - -/** - * Creates a new framebuffer with an buffer object as its scanout buffer. - */ -extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth, - uint8_t bpp, uint32_t pitch, uint32_t bo_handle, - uint32_t *buf_id); -/* ...with a specific pixel format */ -extern int drmModeAddFB2(int fd, uint32_t width, uint32_t height, - uint32_t pixel_format, const uint32_t bo_handles[4], - const uint32_t pitches[4], const uint32_t offsets[4], - uint32_t *buf_id, uint32_t flags); - -/* ...with format modifiers */ -int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height, - uint32_t pixel_format, const uint32_t bo_handles[4], - const uint32_t pitches[4], const uint32_t offsets[4], - const uint64_t modifier[4], uint32_t *buf_id, - uint32_t flags); - -/** - * Destroies the given framebuffer. - */ -extern int drmModeRmFB(int fd, uint32_t bufferId); - -/** - * Mark a region of a framebuffer as dirty. - */ -extern int drmModeDirtyFB(int fd, uint32_t bufferId, - drmModeClipPtr clips, uint32_t num_clips); - - -/* - * Crtc functions - */ - -/** - * Retrieve information about the ctrt crtcId - */ -extern drmModeCrtcPtr drmModeGetCrtc(int fd, uint32_t crtcId); - -/** - * Set the mode on a crtc crtcId with the given mode modeId. - */ -int drmModeSetCrtc(int fd, uint32_t crtcId, uint32_t bufferId, - uint32_t x, uint32_t y, uint32_t *connectors, int count, - drmModeModeInfoPtr mode); - -/* - * Cursor functions - */ - -/** - * Set the cursor on crtc - */ -int drmModeSetCursor(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height); - -int drmModeSetCursor2(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height, int32_t hot_x, int32_t hot_y); -/** - * Move the cursor on crtc - */ -int drmModeMoveCursor(int fd, uint32_t crtcId, int x, int y); - -/** - * Encoder functions - */ -drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id); - -/* - * Connector manipulation - */ - -/** - * Retrieve all information about the connector connectorId. This will do a - * forced probe on the connector to retrieve remote information such as EDIDs - * from the display device. - */ -extern drmModeConnectorPtr drmModeGetConnector(int fd, - uint32_t connectorId); - -/** - * Retrieve current information, i.e the currently active mode and encoder, - * about the connector connectorId. This will not do any probing on the - * connector or remote device, and only reports what is currently known. - * For the complete set of modes and encoders associated with the connector - * use drmModeGetConnector() which will do a probe to determine any display - * link changes first. - */ -extern drmModeConnectorPtr drmModeGetConnectorCurrent(int fd, - uint32_t connector_id); - -/** - * Get a bitmask of CRTCs a connector is compatible with. - * - * The bits reference CRTC indices. If the n-th CRTC is compatible with the - * connector, the n-th bit will be set. The indices are taken from the array - * returned by drmModeGetResources(). The indices are different from the object - * IDs. - * - * Zero is returned on error. - */ -extern uint32_t drmModeConnectorGetPossibleCrtcs(int fd, - const drmModeConnector *connector); - -/** - * Attaches the given mode to an connector. - */ -extern int drmModeAttachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info); - -/** - * Detaches a mode from the connector - * must be unused, by the given mode. - */ -extern int drmModeDetachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info); - -extern drmModePropertyPtr drmModeGetProperty(int fd, uint32_t propertyId); -extern void drmModeFreeProperty(drmModePropertyPtr ptr); - -extern drmModePropertyBlobPtr drmModeGetPropertyBlob(int fd, uint32_t blob_id); -extern bool drmModeFormatModifierBlobIterNext(const drmModePropertyBlobRes *blob, - drmModeFormatModifierIterator *iter); -extern void drmModeFreePropertyBlob(drmModePropertyBlobPtr ptr); -extern int drmModeConnectorSetProperty(int fd, uint32_t connector_id, uint32_t property_id, - uint64_t value); -extern int drmCheckModesettingSupported(const char *busid); - -extern int drmModeCrtcSetGamma(int fd, uint32_t crtc_id, uint32_t size, - uint16_t *red, uint16_t *green, uint16_t *blue); -extern int drmModeCrtcGetGamma(int fd, uint32_t crtc_id, uint32_t size, - uint16_t *red, uint16_t *green, uint16_t *blue); -extern int drmModePageFlip(int fd, uint32_t crtc_id, uint32_t fb_id, - uint32_t flags, void *user_data); -extern int drmModePageFlipTarget(int fd, uint32_t crtc_id, uint32_t fb_id, - uint32_t flags, void *user_data, - uint32_t target_vblank); - -extern drmModePlaneResPtr drmModeGetPlaneResources(int fd); -extern drmModePlanePtr drmModeGetPlane(int fd, uint32_t plane_id); -extern int drmModeSetPlane(int fd, uint32_t plane_id, uint32_t crtc_id, - uint32_t fb_id, uint32_t flags, - int32_t crtc_x, int32_t crtc_y, - uint32_t crtc_w, uint32_t crtc_h, - uint32_t src_x, uint32_t src_y, - uint32_t src_w, uint32_t src_h); - -extern drmModeObjectPropertiesPtr drmModeObjectGetProperties(int fd, - uint32_t object_id, - uint32_t object_type); -extern void drmModeFreeObjectProperties(drmModeObjectPropertiesPtr ptr); -extern int drmModeObjectSetProperty(int fd, uint32_t object_id, - uint32_t object_type, uint32_t property_id, - uint64_t value); - - -typedef struct _drmModeAtomicReq drmModeAtomicReq, *drmModeAtomicReqPtr; - -extern drmModeAtomicReqPtr drmModeAtomicAlloc(void); -extern drmModeAtomicReqPtr drmModeAtomicDuplicate(const drmModeAtomicReqPtr req); -extern int drmModeAtomicMerge(drmModeAtomicReqPtr base, - const drmModeAtomicReqPtr augment); -extern void drmModeAtomicFree(drmModeAtomicReqPtr req); -extern int drmModeAtomicGetCursor(const drmModeAtomicReqPtr req); -extern void drmModeAtomicSetCursor(drmModeAtomicReqPtr req, int cursor); -extern int drmModeAtomicAddProperty(drmModeAtomicReqPtr req, - uint32_t object_id, - uint32_t property_id, - uint64_t value); -extern int drmModeAtomicCommit(int fd, - const drmModeAtomicReqPtr req, - uint32_t flags, - void *user_data); - -extern int drmModeCreatePropertyBlob(int fd, const void *data, size_t size, - uint32_t *id); -extern int drmModeDestroyPropertyBlob(int fd, uint32_t id); - -/* - * DRM mode lease APIs. These create and manage new drm_masters with - * access to a subset of the available DRM resources - */ - -extern int drmModeCreateLease(int fd, const uint32_t *objects, int num_objects, int flags, uint32_t *lessee_id); - -typedef struct drmModeLesseeList { - uint32_t count; - uint32_t lessees[]; -} drmModeLesseeListRes, *drmModeLesseeListPtr; - -extern drmModeLesseeListPtr drmModeListLessees(int fd); - -typedef struct drmModeObjectList { - uint32_t count; - uint32_t objects[]; -} drmModeObjectListRes, *drmModeObjectListPtr; - -extern drmModeObjectListPtr drmModeGetLease(int fd); - -extern int drmModeRevokeLease(int fd, uint32_t lessee_id); - -/** - * Get a string describing a connector type. - * - * NULL is returned if the connector type is unsupported. Callers should handle - * this gracefully, e.g. by falling back to "Unknown" or printing the raw value. - */ -extern const char * -drmModeGetConnectorTypeName(uint32_t connector_type); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/gbm.h b/prebuilts/x86_64/include/gbm.h deleted file mode 100644 index 829c4cb..0000000 --- a/prebuilts/x86_64/include/gbm.h +++ /dev/null @@ -1,461 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Benjamin Franzke - */ - -#ifndef _GBM_H_ -#define _GBM_H_ - -#define __GBM__ 1 - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * \file gbm.h - * \brief Generic Buffer Manager - */ - -struct gbm_device; -struct gbm_bo; -struct gbm_surface; - -/** - * \mainpage The Generic Buffer Manager - * - * This module provides an abstraction that the caller can use to request a - * buffer from the underlying memory management system for the platform. - * - * This allows the creation of portable code whilst still allowing access to - * the underlying memory manager. - */ - -/** - * Abstraction representing the handle to a buffer allocated by the - * manager - */ -union gbm_bo_handle { - void *ptr; - int32_t s32; - uint32_t u32; - int64_t s64; - uint64_t u64; -}; - -/** Format of the allocated buffer */ -enum gbm_bo_format { - /** RGB with 8 bits per channel in a 32 bit value */ - GBM_BO_FORMAT_XRGB8888, - /** ARGB with 8 bits per channel in a 32 bit value */ - GBM_BO_FORMAT_ARGB8888 -}; - - -/** - * The FourCC format codes are taken from the drm_fourcc.h definition, and - * re-namespaced. New GBM formats must not be added, unless they are - * identical ports from drm_fourcc. - */ -#define __gbm_fourcc_code(a,b,c,d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | \ - ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24)) - -#define GBM_FORMAT_BIG_ENDIAN (1<<31) /* format is big endian instead of little endian */ - -/* color index */ -#define GBM_FORMAT_C8 __gbm_fourcc_code('C', '8', ' ', ' ') /* [7:0] C */ - -/* 8 bpp Red */ -#define GBM_FORMAT_R8 __gbm_fourcc_code('R', '8', ' ', ' ') /* [7:0] R */ - -/* 16 bpp Red */ -#define GBM_FORMAT_R16 __gbm_fourcc_code('R', '1', '6', ' ') /* [15:0] R little endian */ - -/* 16 bpp RG */ -#define GBM_FORMAT_GR88 __gbm_fourcc_code('G', 'R', '8', '8') /* [15:0] G:R 8:8 little endian */ - -/* 32 bpp RG */ -#define GBM_FORMAT_RG1616 __gbm_fourcc_code('R', 'G', '3', '2') /* [31:0] R:G 16:16 little endian */ -#define GBM_FORMAT_GR1616 __gbm_fourcc_code('G', 'R', '3', '2') /* [31:0] G:R 16:16 little endian */ - -/* 8 bpp RGB */ -#define GBM_FORMAT_RGB332 __gbm_fourcc_code('R', 'G', 'B', '8') /* [7:0] R:G:B 3:3:2 */ -#define GBM_FORMAT_BGR233 __gbm_fourcc_code('B', 'G', 'R', '8') /* [7:0] B:G:R 2:3:3 */ - -/* 16 bpp RGB */ -#define GBM_FORMAT_XRGB4444 __gbm_fourcc_code('X', 'R', '1', '2') /* [15:0] x:R:G:B 4:4:4:4 little endian */ -#define GBM_FORMAT_XBGR4444 __gbm_fourcc_code('X', 'B', '1', '2') /* [15:0] x:B:G:R 4:4:4:4 little endian */ -#define GBM_FORMAT_RGBX4444 __gbm_fourcc_code('R', 'X', '1', '2') /* [15:0] R:G:B:x 4:4:4:4 little endian */ -#define GBM_FORMAT_BGRX4444 __gbm_fourcc_code('B', 'X', '1', '2') /* [15:0] B:G:R:x 4:4:4:4 little endian */ - -#define GBM_FORMAT_ARGB4444 __gbm_fourcc_code('A', 'R', '1', '2') /* [15:0] A:R:G:B 4:4:4:4 little endian */ -#define GBM_FORMAT_ABGR4444 __gbm_fourcc_code('A', 'B', '1', '2') /* [15:0] A:B:G:R 4:4:4:4 little endian */ -#define GBM_FORMAT_RGBA4444 __gbm_fourcc_code('R', 'A', '1', '2') /* [15:0] R:G:B:A 4:4:4:4 little endian */ -#define GBM_FORMAT_BGRA4444 __gbm_fourcc_code('B', 'A', '1', '2') /* [15:0] B:G:R:A 4:4:4:4 little endian */ - -#define GBM_FORMAT_XRGB1555 __gbm_fourcc_code('X', 'R', '1', '5') /* [15:0] x:R:G:B 1:5:5:5 little endian */ -#define GBM_FORMAT_XBGR1555 __gbm_fourcc_code('X', 'B', '1', '5') /* [15:0] x:B:G:R 1:5:5:5 little endian */ -#define GBM_FORMAT_RGBX5551 __gbm_fourcc_code('R', 'X', '1', '5') /* [15:0] R:G:B:x 5:5:5:1 little endian */ -#define GBM_FORMAT_BGRX5551 __gbm_fourcc_code('B', 'X', '1', '5') /* [15:0] B:G:R:x 5:5:5:1 little endian */ - -#define GBM_FORMAT_ARGB1555 __gbm_fourcc_code('A', 'R', '1', '5') /* [15:0] A:R:G:B 1:5:5:5 little endian */ -#define GBM_FORMAT_ABGR1555 __gbm_fourcc_code('A', 'B', '1', '5') /* [15:0] A:B:G:R 1:5:5:5 little endian */ -#define GBM_FORMAT_RGBA5551 __gbm_fourcc_code('R', 'A', '1', '5') /* [15:0] R:G:B:A 5:5:5:1 little endian */ -#define GBM_FORMAT_BGRA5551 __gbm_fourcc_code('B', 'A', '1', '5') /* [15:0] B:G:R:A 5:5:5:1 little endian */ - -#define GBM_FORMAT_RGB565 __gbm_fourcc_code('R', 'G', '1', '6') /* [15:0] R:G:B 5:6:5 little endian */ -#define GBM_FORMAT_BGR565 __gbm_fourcc_code('B', 'G', '1', '6') /* [15:0] B:G:R 5:6:5 little endian */ - -/* 24 bpp RGB */ -#define GBM_FORMAT_RGB888 __gbm_fourcc_code('R', 'G', '2', '4') /* [23:0] R:G:B little endian */ -#define GBM_FORMAT_BGR888 __gbm_fourcc_code('B', 'G', '2', '4') /* [23:0] B:G:R little endian */ - -/* 32 bpp RGB */ -#define GBM_FORMAT_XRGB8888 __gbm_fourcc_code('X', 'R', '2', '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */ -#define GBM_FORMAT_XBGR8888 __gbm_fourcc_code('X', 'B', '2', '4') /* [31:0] x:B:G:R 8:8:8:8 little endian */ -#define GBM_FORMAT_RGBX8888 __gbm_fourcc_code('R', 'X', '2', '4') /* [31:0] R:G:B:x 8:8:8:8 little endian */ -#define GBM_FORMAT_BGRX8888 __gbm_fourcc_code('B', 'X', '2', '4') /* [31:0] B:G:R:x 8:8:8:8 little endian */ - -#define GBM_FORMAT_ARGB8888 __gbm_fourcc_code('A', 'R', '2', '4') /* [31:0] A:R:G:B 8:8:8:8 little endian */ -#define GBM_FORMAT_ABGR8888 __gbm_fourcc_code('A', 'B', '2', '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */ -#define GBM_FORMAT_RGBA8888 __gbm_fourcc_code('R', 'A', '2', '4') /* [31:0] R:G:B:A 8:8:8:8 little endian */ -#define GBM_FORMAT_BGRA8888 __gbm_fourcc_code('B', 'A', '2', '4') /* [31:0] B:G:R:A 8:8:8:8 little endian */ - -#define GBM_FORMAT_XRGB2101010 __gbm_fourcc_code('X', 'R', '3', '0') /* [31:0] x:R:G:B 2:10:10:10 little endian */ -#define GBM_FORMAT_XBGR2101010 __gbm_fourcc_code('X', 'B', '3', '0') /* [31:0] x:B:G:R 2:10:10:10 little endian */ -#define GBM_FORMAT_RGBX1010102 __gbm_fourcc_code('R', 'X', '3', '0') /* [31:0] R:G:B:x 10:10:10:2 little endian */ -#define GBM_FORMAT_BGRX1010102 __gbm_fourcc_code('B', 'X', '3', '0') /* [31:0] B:G:R:x 10:10:10:2 little endian */ - -#define GBM_FORMAT_ARGB2101010 __gbm_fourcc_code('A', 'R', '3', '0') /* [31:0] A:R:G:B 2:10:10:10 little endian */ -#define GBM_FORMAT_ABGR2101010 __gbm_fourcc_code('A', 'B', '3', '0') /* [31:0] A:B:G:R 2:10:10:10 little endian */ -#define GBM_FORMAT_RGBA1010102 __gbm_fourcc_code('R', 'A', '3', '0') /* [31:0] R:G:B:A 10:10:10:2 little endian */ -#define GBM_FORMAT_BGRA1010102 __gbm_fourcc_code('B', 'A', '3', '0') /* [31:0] B:G:R:A 10:10:10:2 little endian */ - -/* 64 bpp RGB */ -#define GBM_FORMAT_XBGR16161616 __gbm_fourcc_code('X', 'B', '4', '8') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define GBM_FORMAT_ABGR16161616 __gbm_fourcc_code('A', 'B', '4', '8') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* - * Floating point 64bpp RGB - * IEEE 754-2008 binary16 half-precision float - * [15:0] sign:exponent:mantissa 1:5:10 - */ -#define GBM_FORMAT_XBGR16161616F __gbm_fourcc_code('X', 'B', '4', 'H') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define GBM_FORMAT_ABGR16161616F __gbm_fourcc_code('A', 'B', '4', 'H') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* packed YCbCr */ -#define GBM_FORMAT_YUYV __gbm_fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */ -#define GBM_FORMAT_YVYU __gbm_fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */ -#define GBM_FORMAT_UYVY __gbm_fourcc_code('U', 'Y', 'V', 'Y') /* [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian */ -#define GBM_FORMAT_VYUY __gbm_fourcc_code('V', 'Y', 'U', 'Y') /* [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian */ - -#define GBM_FORMAT_AYUV __gbm_fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */ - -/* - * 2 plane YCbCr - * index 0 = Y plane, [7:0] Y - * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian - * or - * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian - */ -#define GBM_FORMAT_NV12 __gbm_fourcc_code('N', 'V', '1', '2') /* 2x2 subsampled Cr:Cb plane */ -#define GBM_FORMAT_NV21 __gbm_fourcc_code('N', 'V', '2', '1') /* 2x2 subsampled Cb:Cr plane */ -#define GBM_FORMAT_NV16 __gbm_fourcc_code('N', 'V', '1', '6') /* 2x1 subsampled Cr:Cb plane */ -#define GBM_FORMAT_NV61 __gbm_fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */ - -/* - * 3 plane YCbCr - * index 0: Y plane, [7:0] Y - * index 1: Cb plane, [7:0] Cb - * index 2: Cr plane, [7:0] Cr - * or - * index 1: Cr plane, [7:0] Cr - * index 2: Cb plane, [7:0] Cb - */ -#define GBM_FORMAT_YUV410 __gbm_fourcc_code('Y', 'U', 'V', '9') /* 4x4 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU410 __gbm_fourcc_code('Y', 'V', 'U', '9') /* 4x4 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV411 __gbm_fourcc_code('Y', 'U', '1', '1') /* 4x1 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU411 __gbm_fourcc_code('Y', 'V', '1', '1') /* 4x1 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV420 __gbm_fourcc_code('Y', 'U', '1', '2') /* 2x2 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU420 __gbm_fourcc_code('Y', 'V', '1', '2') /* 2x2 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV422 __gbm_fourcc_code('Y', 'U', '1', '6') /* 2x1 subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU422 __gbm_fourcc_code('Y', 'V', '1', '6') /* 2x1 subsampled Cr (1) and Cb (2) planes */ -#define GBM_FORMAT_YUV444 __gbm_fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */ -#define GBM_FORMAT_YVU444 __gbm_fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */ - -struct gbm_format_name_desc { - char name[5]; -}; - -/** - * Flags to indicate the intended use for the buffer - these are passed into - * gbm_bo_create(). The caller must set the union of all the flags that are - * appropriate - * - * \sa Use gbm_device_is_format_supported() to check if the combination of format - * and use flags are supported - */ -enum gbm_bo_flags { - /** - * Buffer is going to be presented to the screen using an API such as KMS - */ - GBM_BO_USE_SCANOUT = (1 << 0), - /** - * Buffer is going to be used as cursor - */ - GBM_BO_USE_CURSOR = (1 << 1), - /** - * Deprecated - */ - GBM_BO_USE_CURSOR_64X64 = GBM_BO_USE_CURSOR, - /** - * Buffer is to be used for rendering - for example it is going to be used - * as the storage for a color buffer - */ - GBM_BO_USE_RENDERING = (1 << 2), - /** - * Buffer can be used for gbm_bo_write. This is guaranteed to work - * with GBM_BO_USE_CURSOR, but may not work for other combinations. - */ - GBM_BO_USE_WRITE = (1 << 3), - /** - * Buffer is linear, i.e. not tiled. - */ - GBM_BO_USE_LINEAR = (1 << 4), - /** - * Buffer is protected, i.e. encrypted and not readable by CPU or any - * other non-secure / non-trusted components nor by non-trusted OpenGL, - * OpenCL, and Vulkan applications. - */ - GBM_BO_USE_PROTECTED = (1 << 5), -}; - -int -gbm_device_get_fd(struct gbm_device *gbm); - -const char * -gbm_device_get_backend_name(struct gbm_device *gbm); - -int -gbm_device_is_format_supported(struct gbm_device *gbm, - uint32_t format, uint32_t flags); - -int -gbm_device_get_format_modifier_plane_count(struct gbm_device *gbm, - uint32_t format, - uint64_t modifier); - -void -gbm_device_destroy(struct gbm_device *gbm); - -struct gbm_device * -gbm_create_device(int fd); - -struct gbm_bo * -gbm_bo_create(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); - -struct gbm_bo * -gbm_bo_create_with_modifiers(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count); - -struct gbm_bo * -gbm_bo_create_with_modifiers2(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count, - uint32_t flags); - -#define GBM_BO_IMPORT_WL_BUFFER 0x5501 -#define GBM_BO_IMPORT_EGL_IMAGE 0x5502 -#define GBM_BO_IMPORT_FD 0x5503 -#define GBM_BO_IMPORT_FD_MODIFIER 0x5504 - -struct gbm_import_fd_data { - int fd; - uint32_t width; - uint32_t height; - uint32_t stride; - uint32_t format; -}; - -#define GBM_MAX_PLANES 4 - -struct gbm_import_fd_modifier_data { - uint32_t width; - uint32_t height; - uint32_t format; - uint32_t num_fds; - int fds[GBM_MAX_PLANES]; - int strides[GBM_MAX_PLANES]; - int offsets[GBM_MAX_PLANES]; - uint64_t modifier; -}; - -struct gbm_bo * -gbm_bo_import(struct gbm_device *gbm, uint32_t type, - void *buffer, uint32_t flags); - -/** - * Flags to indicate the type of mapping for the buffer - these are - * passed into gbm_bo_map(). The caller must set the union of all the - * flags that are appropriate. - * - * These flags are independent of the GBM_BO_USE_* creation flags. However, - * mapping the buffer may require copying to/from a staging buffer. - * - * See also: pipe_map_flags - */ -enum gbm_bo_transfer_flags { - /** - * Buffer contents read back (or accessed directly) at transfer - * create time. - */ - GBM_BO_TRANSFER_READ = (1 << 0), - /** - * Buffer contents will be written back at unmap time - * (or modified as a result of being accessed directly). - */ - GBM_BO_TRANSFER_WRITE = (1 << 1), - /** - * Read/modify/write - */ - GBM_BO_TRANSFER_READ_WRITE = (GBM_BO_TRANSFER_READ | GBM_BO_TRANSFER_WRITE), -}; - -void * -gbm_bo_map(struct gbm_bo *bo, - uint32_t x, uint32_t y, uint32_t width, uint32_t height, - uint32_t flags, uint32_t *stride, void **map_data); - -void -gbm_bo_unmap(struct gbm_bo *bo, void *map_data); - -uint32_t -gbm_bo_get_width(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_height(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_stride(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_stride_for_plane(struct gbm_bo *bo, int plane); - -uint32_t -gbm_bo_get_format(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_bpp(struct gbm_bo *bo); - -uint32_t -gbm_bo_get_offset(struct gbm_bo *bo, int plane); - -struct gbm_device * -gbm_bo_get_device(struct gbm_bo *bo); - -union gbm_bo_handle -gbm_bo_get_handle(struct gbm_bo *bo); - -int -gbm_bo_get_fd(struct gbm_bo *bo); - -uint64_t -gbm_bo_get_modifier(struct gbm_bo *bo); - -int -gbm_bo_get_plane_count(struct gbm_bo *bo); - -union gbm_bo_handle -gbm_bo_get_handle_for_plane(struct gbm_bo *bo, int plane); - -int -gbm_bo_get_fd_for_plane(struct gbm_bo *bo, int plane); - -int -gbm_bo_write(struct gbm_bo *bo, const void *buf, size_t count); - -void -gbm_bo_set_user_data(struct gbm_bo *bo, void *data, - void (*destroy_user_data)(struct gbm_bo *, void *)); - -void * -gbm_bo_get_user_data(struct gbm_bo *bo); - -void -gbm_bo_destroy(struct gbm_bo *bo); - -struct gbm_surface * -gbm_surface_create(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, uint32_t flags); - -struct gbm_surface * -gbm_surface_create_with_modifiers(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count); - -struct gbm_surface * -gbm_surface_create_with_modifiers2(struct gbm_device *gbm, - uint32_t width, uint32_t height, - uint32_t format, - const uint64_t *modifiers, - const unsigned int count, - uint32_t flags); - -struct gbm_bo * -gbm_surface_lock_front_buffer(struct gbm_surface *surface); - -void -gbm_surface_release_buffer(struct gbm_surface *surface, struct gbm_bo *bo); - -int -gbm_surface_has_free_buffers(struct gbm_surface *surface); - -void -gbm_surface_destroy(struct gbm_surface *surface); - -char * -gbm_format_get_name(uint32_t gbm_format, struct gbm_format_name_desc *desc); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/libavcodec/ac3_parser.h b/prebuilts/x86_64/include/libavcodec/ac3_parser.h deleted file mode 100644 index ff8cc4c..0000000 --- a/prebuilts/x86_64/include/libavcodec/ac3_parser.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * AC-3 parser prototypes - * Copyright (c) 2003 Fabrice Bellard - * Copyright (c) 2003 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AC3_PARSER_H -#define AVCODEC_AC3_PARSER_H - -#include -#include - -/** - * Extract the bitstream ID and the frame size from AC-3 data. - */ -int av_ac3_parse_header(const uint8_t *buf, size_t size, - uint8_t *bitstream_id, uint16_t *frame_size); - - -#endif /* AVCODEC_AC3_PARSER_H */ diff --git a/prebuilts/x86_64/include/libavcodec/adts_parser.h b/prebuilts/x86_64/include/libavcodec/adts_parser.h deleted file mode 100644 index f85becd..0000000 --- a/prebuilts/x86_64/include/libavcodec/adts_parser.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_ADTS_PARSER_H -#define AVCODEC_ADTS_PARSER_H - -#include -#include - -#define AV_AAC_ADTS_HEADER_SIZE 7 - -/** - * Extract the number of samples and frames from AAC data. - * @param[in] buf pointer to AAC data buffer - * @param[out] samples Pointer to where number of samples is written - * @param[out] frames Pointer to where number of frames is written - * @return Returns 0 on success, error code on failure. - */ -int av_adts_header_parse(const uint8_t *buf, uint32_t *samples, - uint8_t *frames); - -#endif /* AVCODEC_ADTS_PARSER_H */ diff --git a/prebuilts/x86_64/include/libavcodec/avcodec.h b/prebuilts/x86_64/include/libavcodec/avcodec.h deleted file mode 100644 index 8a71c04..0000000 --- a/prebuilts/x86_64/include/libavcodec/avcodec.h +++ /dev/null @@ -1,4184 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVCODEC_H -#define AVCODEC_AVCODEC_H - -/** - * @file - * @ingroup libavc - * Libavcodec external API header - */ - -#include -#include "libavutil/samplefmt.h" -#include "libavutil/attributes.h" -#include "libavutil/avutil.h" -#include "libavutil/buffer.h" -#include "libavutil/cpu.h" -#include "libavutil/channel_layout.h" -#include "libavutil/dict.h" -#include "libavutil/frame.h" -#include "libavutil/hwcontext.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" - -#include "bsf.h" -#include "codec.h" -#include "codec_desc.h" -#include "codec_par.h" -#include "codec_id.h" -#include "packet.h" -#include "version.h" - -/** - * @defgroup libavc libavcodec - * Encoding/Decoding Library - * - * @{ - * - * @defgroup lavc_decoding Decoding - * @{ - * @} - * - * @defgroup lavc_encoding Encoding - * @{ - * @} - * - * @defgroup lavc_codec Codecs - * @{ - * @defgroup lavc_codec_native Native Codecs - * @{ - * @} - * @defgroup lavc_codec_wrappers External library wrappers - * @{ - * @} - * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge - * @{ - * @} - * @} - * @defgroup lavc_internal Internal - * @{ - * @} - * @} - */ - -/** - * @ingroup libavc - * @defgroup lavc_encdec send/receive encoding and decoding API overview - * @{ - * - * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/ - * avcodec_receive_packet() functions provide an encode/decode API, which - * decouples input and output. - * - * The API is very similar for encoding/decoding and audio/video, and works as - * follows: - * - Set up and open the AVCodecContext as usual. - * - Send valid input: - * - For decoding, call avcodec_send_packet() to give the decoder raw - * compressed data in an AVPacket. - * - For encoding, call avcodec_send_frame() to give the encoder an AVFrame - * containing uncompressed audio or video. - * - * In both cases, it is recommended that AVPackets and AVFrames are - * refcounted, or libavcodec might have to copy the input data. (libavformat - * always returns refcounted AVPackets, and av_frame_get_buffer() allocates - * refcounted AVFrames.) - * - Receive output in a loop. Periodically call one of the avcodec_receive_*() - * functions and process their output: - * - For decoding, call avcodec_receive_frame(). On success, it will return - * an AVFrame containing uncompressed audio or video data. - * - For encoding, call avcodec_receive_packet(). On success, it will return - * an AVPacket with a compressed frame. - * - * Repeat this call until it returns AVERROR(EAGAIN) or an error. The - * AVERROR(EAGAIN) return value means that new input data is required to - * return new output. In this case, continue with sending input. For each - * input frame/packet, the codec will typically return 1 output frame/packet, - * but it can also be 0 or more than 1. - * - * At the beginning of decoding or encoding, the codec might accept multiple - * input frames/packets without returning a frame, until its internal buffers - * are filled. This situation is handled transparently if you follow the steps - * outlined above. - * - * In theory, sending input can result in EAGAIN - this should happen only if - * not all output was received. You can use this to structure alternative decode - * or encode loops other than the one suggested above. For example, you could - * try sending new input on each iteration, and try to receive output if that - * returns EAGAIN. - * - * End of stream situations. These require "flushing" (aka draining) the codec, - * as the codec might buffer multiple frames or packets internally for - * performance or out of necessity (consider B-frames). - * This is handled as follows: - * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding) - * or avcodec_send_frame() (encoding) functions. This will enter draining - * mode. - * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet() - * (encoding) in a loop until AVERROR_EOF is returned. The functions will - * not return AVERROR(EAGAIN), unless you forgot to enter draining mode. - * - Before decoding can be resumed again, the codec has to be reset with - * avcodec_flush_buffers(). - * - * Using the API as outlined above is highly recommended. But it is also - * possible to call functions outside of this rigid schema. For example, you can - * call avcodec_send_packet() repeatedly without calling - * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed - * until the codec's internal buffer has been filled up (which is typically of - * size 1 per output frame, after initial input), and then reject input with - * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to - * read at least some output. - * - * Not all codecs will follow a rigid and predictable dataflow; the only - * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on - * one end implies that a receive/send call on the other end will succeed, or - * at least will not fail with AVERROR(EAGAIN). In general, no codec will - * permit unlimited buffering of input or output. - * - * This API replaces the following legacy functions: - * - avcodec_decode_video2() and avcodec_decode_audio4(): - * Use avcodec_send_packet() to feed input to the decoder, then use - * avcodec_receive_frame() to receive decoded frames after each packet. - * Unlike with the old video decoding API, multiple frames might result from - * a packet. For audio, splitting the input packet into frames by partially - * decoding packets becomes transparent to the API user. You never need to - * feed an AVPacket to the API twice (unless it is rejected with AVERROR(EAGAIN) - then - * no data was read from the packet). - * Additionally, sending a flush/draining packet is required only once. - * - avcodec_encode_video2()/avcodec_encode_audio2(): - * Use avcodec_send_frame() to feed input to the encoder, then use - * avcodec_receive_packet() to receive encoded packets. - * Providing user-allocated buffers for avcodec_receive_packet() is not - * possible. - * - The new API does not handle subtitles yet. - * - * Mixing new and old function calls on the same AVCodecContext is not allowed, - * and will result in undefined behavior. - * - * Some codecs might require using the new API; using the old API will return - * an error when calling it. All codecs support the new API. - * - * A codec is not allowed to return AVERROR(EAGAIN) for both sending and receiving. This - * would be an invalid state, which could put the codec user into an endless - * loop. The API has no concept of time either: it cannot happen that trying to - * do avcodec_send_packet() results in AVERROR(EAGAIN), but a repeated call 1 second - * later accepts the packet (with no other receive/flush API calls involved). - * The API is a strict state machine, and the passage of time is not supposed - * to influence it. Some timing-dependent behavior might still be deemed - * acceptable in certain cases. But it must never result in both send/receive - * returning EAGAIN at the same time at any point. It must also absolutely be - * avoided that the current state is "unstable" and can "flip-flop" between - * the send/receive APIs allowing progress. For example, it's not allowed that - * the codec randomly decides that it actually wants to consume a packet now - * instead of returning a frame, after it just returned AVERROR(EAGAIN) on an - * avcodec_send_packet() call. - * @} - */ - -/** - * @defgroup lavc_core Core functions/structures. - * @ingroup libavc - * - * Basic definitions, functions for querying libavcodec capabilities, - * allocating core structures, etc. - * @{ - */ - -/** - * @ingroup lavc_decoding - * Required number of additionally allocated bytes at the end of the input bitstream for decoding. - * This is mainly needed because some optimized bitstream readers read - * 32 or 64 bit at once and could read over the end.
- * Note: If the first 23 bits of the additional bytes are not 0, then damaged - * MPEG bitstreams could cause overread and segfault. - */ -#define AV_INPUT_BUFFER_PADDING_SIZE 64 - -/** - * @ingroup lavc_encoding - * minimum encoding buffer size - * Used to avoid some checks during header writing. - */ -#define AV_INPUT_BUFFER_MIN_SIZE 16384 - -/** - * @ingroup lavc_decoding - */ -enum AVDiscard{ - /* We leave some space between them for extensions (drop some - * keyframes for intra-only or drop just some bidir frames). */ - AVDISCARD_NONE =-16, ///< discard nothing - AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi - AVDISCARD_NONREF = 8, ///< discard all non reference - AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames - AVDISCARD_NONINTRA= 24, ///< discard all non intra frames - AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes - AVDISCARD_ALL = 48, ///< discard all -}; - -enum AVAudioServiceType { - AV_AUDIO_SERVICE_TYPE_MAIN = 0, - AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, - AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, - AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, - AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, - AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, - AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, - AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, - AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, - AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI -}; - -/** - * @ingroup lavc_encoding - */ -typedef struct RcOverride{ - int start_frame; - int end_frame; - int qscale; // If this is 0 then quality_factor will be used instead. - float quality_factor; -} RcOverride; - -/* encoding support - These flags can be passed in AVCodecContext.flags before initialization. - Note: Not everything is supported yet. -*/ - -/** - * Allow decoders to produce frames with data planes that are not aligned - * to CPU requirements (e.g. due to cropping). - */ -#define AV_CODEC_FLAG_UNALIGNED (1 << 0) -/** - * Use fixed qscale. - */ -#define AV_CODEC_FLAG_QSCALE (1 << 1) -/** - * 4 MV per MB allowed / advanced prediction for H.263. - */ -#define AV_CODEC_FLAG_4MV (1 << 2) -/** - * Output even those frames that might be corrupted. - */ -#define AV_CODEC_FLAG_OUTPUT_CORRUPT (1 << 3) -/** - * Use qpel MC. - */ -#define AV_CODEC_FLAG_QPEL (1 << 4) -/** - * Don't output frames whose parameters differ from first - * decoded frame in stream. - */ -#define AV_CODEC_FLAG_DROPCHANGED (1 << 5) -/** - * Use internal 2pass ratecontrol in first pass mode. - */ -#define AV_CODEC_FLAG_PASS1 (1 << 9) -/** - * Use internal 2pass ratecontrol in second pass mode. - */ -#define AV_CODEC_FLAG_PASS2 (1 << 10) -/** - * loop filter. - */ -#define AV_CODEC_FLAG_LOOP_FILTER (1 << 11) -/** - * Only decode/encode grayscale. - */ -#define AV_CODEC_FLAG_GRAY (1 << 13) -/** - * error[?] variables will be set during encoding. - */ -#define AV_CODEC_FLAG_PSNR (1 << 15) -/** - * Input bitstream might be truncated at a random location - * instead of only at frame boundaries. - */ -#define AV_CODEC_FLAG_TRUNCATED (1 << 16) -/** - * Use interlaced DCT. - */ -#define AV_CODEC_FLAG_INTERLACED_DCT (1 << 18) -/** - * Force low delay. - */ -#define AV_CODEC_FLAG_LOW_DELAY (1 << 19) -/** - * Place global headers in extradata instead of every keyframe. - */ -#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22) -/** - * Use only bitexact stuff (except (I)DCT). - */ -#define AV_CODEC_FLAG_BITEXACT (1 << 23) -/* Fx : Flag for H.263+ extra options */ -/** - * H.263 advanced intra coding / MPEG-4 AC prediction - */ -#define AV_CODEC_FLAG_AC_PRED (1 << 24) -/** - * interlaced motion estimation - */ -#define AV_CODEC_FLAG_INTERLACED_ME (1 << 29) -#define AV_CODEC_FLAG_CLOSED_GOP (1U << 31) - -/** - * Allow non spec compliant speedup tricks. - */ -#define AV_CODEC_FLAG2_FAST (1 << 0) -/** - * Skip bitstream encoding. - */ -#define AV_CODEC_FLAG2_NO_OUTPUT (1 << 2) -/** - * Place global headers at every keyframe instead of in extradata. - */ -#define AV_CODEC_FLAG2_LOCAL_HEADER (1 << 3) - -/** - * timecode is in drop frame format. DEPRECATED!!!! - */ -#define AV_CODEC_FLAG2_DROP_FRAME_TIMECODE (1 << 13) - -/** - * Input bitstream might be truncated at a packet boundaries - * instead of only at frame boundaries. - */ -#define AV_CODEC_FLAG2_CHUNKS (1 << 15) -/** - * Discard cropping information from SPS. - */ -#define AV_CODEC_FLAG2_IGNORE_CROP (1 << 16) - -/** - * Show all frames before the first keyframe - */ -#define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) -/** - * Export motion vectors through frame side data - */ -#define AV_CODEC_FLAG2_EXPORT_MVS (1 << 28) -/** - * Do not skip samples and export skip information as frame side data - */ -#define AV_CODEC_FLAG2_SKIP_MANUAL (1 << 29) -/** - * Do not reset ASS ReadOrder field on flush (subtitles decoding) - */ -#define AV_CODEC_FLAG2_RO_FLUSH_NOOP (1 << 30) - -/* Unsupported options : - * Syntax Arithmetic coding (SAC) - * Reference Picture Selection - * Independent Segment Decoding */ -/* /Fx */ -/* codec capabilities */ - -/* Exported side data. - These flags can be passed in AVCodecContext.export_side_data before initialization. -*/ -/** - * Export motion vectors through frame side data - */ -#define AV_CODEC_EXPORT_DATA_MVS (1 << 0) -/** - * Export encoder Producer Reference Time through packet side data - */ -#define AV_CODEC_EXPORT_DATA_PRFT (1 << 1) -/** - * Decoding only. - * Export the AVVideoEncParams structure through frame side data. - */ -#define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS (1 << 2) -/** - * Decoding only. - * Do not apply film grain, export it instead. - */ -#define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) - -/** - * Pan Scan area. - * This specifies the area which should be displayed. - * Note there may be multiple such areas for one frame. - */ -typedef struct AVPanScan { - /** - * id - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int id; - - /** - * width and height in 1/16 pel - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int width; - int height; - - /** - * position of the top left corner in 1/16 pel for up to 3 fields/frames - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int16_t position[3][2]; -} AVPanScan; - -/** - * This structure describes the bitrate properties of an encoded bitstream. It - * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD - * parameters for H.264/HEVC. - */ -typedef struct AVCPBProperties { - /** - * Maximum bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ -#if FF_API_UNSANITIZED_BITRATES - int max_bitrate; -#else - int64_t max_bitrate; -#endif - /** - * Minimum bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ -#if FF_API_UNSANITIZED_BITRATES - int min_bitrate; -#else - int64_t min_bitrate; -#endif - /** - * Average bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ -#if FF_API_UNSANITIZED_BITRATES - int avg_bitrate; -#else - int64_t avg_bitrate; -#endif - - /** - * The size of the buffer to which the ratecontrol is applied, in bits. - * Zero if unknown or unspecified. - */ - int buffer_size; - - /** - * The delay between the time the packet this structure is associated with - * is received and the time when it should be decoded, in periods of a 27MHz - * clock. - * - * UINT64_MAX when unknown or unspecified. - */ - uint64_t vbv_delay; -} AVCPBProperties; - -/** - * This structure supplies correlation between a packet timestamp and a wall clock - * production time. The definition follows the Producer Reference Time ('prft') - * as defined in ISO/IEC 14496-12 - */ -typedef struct AVProducerReferenceTime { - /** - * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()). - */ - int64_t wallclock; - int flags; -} AVProducerReferenceTime; - -/** - * The decoder will keep a reference to the frame and may reuse it later. - */ -#define AV_GET_BUFFER_FLAG_REF (1 << 0) - -/** - * The encoder will keep a reference to the packet and may reuse it later. - */ -#define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0) - -struct AVCodecInternal; - -/** - * main external API structure. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from user - * applications. - * The name string for AVOptions options matches the associated command line - * parameter name and can be found in libavcodec/options_table.h - * The AVOption/command line parameter names differ in some cases from the C - * structure field names for historic reasons or brevity. - * sizeof(AVCodecContext) must not be used outside libav*. - */ -typedef struct AVCodecContext { - /** - * information on struct for av_log - * - set by avcodec_alloc_context3 - */ - const AVClass *av_class; - int log_level_offset; - - enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ - const struct AVCodec *codec; - enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ - - /** - * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). - * This is used to work around some encoder bugs. - * A demuxer should set this to what is stored in the field used to identify the codec. - * If there are multiple such fields in a container then the demuxer should choose the one - * which maximizes the information about the used codec. - * If the codec tag field in a container is larger than 32 bits then the demuxer should - * remap the longer ID to 32 bits with a table or other structure. Alternatively a new - * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated - * first. - * - encoding: Set by user, if not then the default based on codec_id will be used. - * - decoding: Set by user, will be converted to uppercase by libavcodec during init. - */ - unsigned int codec_tag; - - void *priv_data; - - /** - * Private context used for internal data. - * - * Unlike priv_data, this is not codec-specific. It is used in general - * libavcodec functions. - */ - struct AVCodecInternal *internal; - - /** - * Private data of the user, can be used to carry app specific stuff. - * - encoding: Set by user. - * - decoding: Set by user. - */ - void *opaque; - - /** - * the average bitrate - * - encoding: Set by user; unused for constant quantizer encoding. - * - decoding: Set by user, may be overwritten by libavcodec - * if this info is available in the stream - */ - int64_t bit_rate; - - /** - * number of bits the bitstream is allowed to diverge from the reference. - * the reference can be CBR (for CBR pass1) or VBR (for pass2) - * - encoding: Set by user; unused for constant quantizer encoding. - * - decoding: unused - */ - int bit_rate_tolerance; - - /** - * Global quality for codecs which cannot change it per frame. - * This should be proportional to MPEG-1/2/4 qscale. - * - encoding: Set by user. - * - decoding: unused - */ - int global_quality; - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int compression_level; -#define FF_COMPRESSION_DEFAULT -1 - - /** - * AV_CODEC_FLAG_*. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int flags; - - /** - * AV_CODEC_FLAG2_* - * - encoding: Set by user. - * - decoding: Set by user. - */ - int flags2; - - /** - * some codecs need / can use extradata like Huffman tables. - * MJPEG: Huffman tables - * rv10: additional flags - * MPEG-4: global headers (they can be in the bitstream or here) - * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger - * than extradata_size to avoid problems if it is read with the bitstream reader. - * The bytewise contents of extradata must not depend on the architecture or CPU endianness. - * Must be allocated with the av_malloc() family of functions. - * - encoding: Set/allocated/freed by libavcodec. - * - decoding: Set/allocated/freed by user. - */ - uint8_t *extradata; - int extradata_size; - - /** - * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. For fixed-fps content, - * timebase should be 1/framerate and timestamp increments should be - * identically 1. - * This often, but not always is the inverse of the frame rate or field rate - * for video. 1/time_base is not the average frame rate if the frame rate is not - * constant. - * - * Like containers, elementary streams also can store timestamps, 1/time_base - * is the unit in which these timestamps are specified. - * As example of such codec time base see ISO/IEC 14496-2:2001(E) - * vop_time_increment_resolution and fixed_vop_rate - * (fixed_vop_rate == 0 implies that it is different from the framerate) - * - * - encoding: MUST be set by user. - * - decoding: the use of this field for decoding is deprecated. - * Use framerate instead. - */ - AVRational time_base; - - /** - * For some codecs, the time base is closer to the field rate than the frame rate. - * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration - * if no telecine is used ... - * - * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. - */ - int ticks_per_frame; - - /** - * Codec delay. - * - * Encoding: Number of frames delay there will be from the encoder input to - * the decoder output. (we assume the decoder matches the spec) - * Decoding: Number of frames delay in addition to what a standard decoder - * as specified in the spec would produce. - * - * Video: - * Number of frames the decoded output will be delayed relative to the - * encoded input. - * - * Audio: - * For encoding, this field is unused (see initial_padding). - * - * For decoding, this is the number of samples the decoder needs to - * output before the decoder's output is valid. When seeking, you should - * start decoding this many samples prior to your desired seek point. - * - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int delay; - - - /* video only */ - /** - * picture width / height. - * - * @note Those fields may not match the values of the last - * AVFrame output by avcodec_decode_video2 due frame - * reordering. - * - * - encoding: MUST be set by user. - * - decoding: May be set by the user before opening the decoder if known e.g. - * from the container. Some decoders will require the dimensions - * to be set by the caller. During decoding, the decoder may - * overwrite those values as required while parsing the data. - */ - int width, height; - - /** - * Bitstream width / height, may be different from width/height e.g. when - * the decoded frame is cropped before being output or lowres is enabled. - * - * @note Those field may not match the value of the last - * AVFrame output by avcodec_receive_frame() due frame - * reordering. - * - * - encoding: unused - * - decoding: May be set by the user before opening the decoder if known - * e.g. from the container. During decoding, the decoder may - * overwrite those values as required while parsing the data. - */ - int coded_width, coded_height; - - /** - * the number of pictures in a group of pictures, or 0 for intra_only - * - encoding: Set by user. - * - decoding: unused - */ - int gop_size; - - /** - * Pixel format, see AV_PIX_FMT_xxx. - * May be set by the demuxer if known from headers. - * May be overridden by the decoder if it knows better. - * - * @note This field may not match the value of the last - * AVFrame output by avcodec_receive_frame() due frame - * reordering. - * - * - encoding: Set by user. - * - decoding: Set by user if known, overridden by libavcodec while - * parsing the data. - */ - enum AVPixelFormat pix_fmt; - - /** - * If non NULL, 'draw_horiz_band' is called by the libavcodec - * decoder to draw a horizontal band. It improves cache usage. Not - * all codecs can do that. You must check the codec capabilities - * beforehand. - * When multithreading is used, it may be called from multiple threads - * at the same time; threads might draw different parts of the same AVFrame, - * or multiple AVFrames, and there is no guarantee that slices will be drawn - * in order. - * The function is also used by hardware acceleration APIs. - * It is called at least once during frame decoding to pass - * the data needed for hardware render. - * In that mode instead of pixel data, AVFrame points to - * a structure specific to the acceleration API. The application - * reads the structure and can change some fields to indicate progress - * or mark state. - * - encoding: unused - * - decoding: Set by user. - * @param height the height of the slice - * @param y the y position of the slice - * @param type 1->top field, 2->bottom field, 3->frame - * @param offset offset into the AVFrame.data from which the slice should be read - */ - void (*draw_horiz_band)(struct AVCodecContext *s, - const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], - int y, int type, int height); - - /** - * callback to negotiate the pixelFormat - * @param fmt is the list of formats which are supported by the codec, - * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. - * The first is always the native one. - * @note The callback may be called again immediately if initialization for - * the selected (hardware-accelerated) pixel format failed. - * @warning Behavior is undefined if the callback returns a value not - * in the fmt list of formats. - * @return the chosen format - * - encoding: unused - * - decoding: Set by user, if not set the native format will be chosen. - */ - enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - - /** - * maximum number of B-frames between non-B-frames - * Note: The output will be delayed by max_b_frames+1 relative to the input. - * - encoding: Set by user. - * - decoding: unused - */ - int max_b_frames; - - /** - * qscale factor between IP and B-frames - * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). - * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). - * - encoding: Set by user. - * - decoding: unused - */ - float b_quant_factor; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int b_frame_strategy; -#endif - - /** - * qscale offset between IP and B-frames - * - encoding: Set by user. - * - decoding: unused - */ - float b_quant_offset; - - /** - * Size of the frame reordering buffer in the decoder. - * For MPEG-2 it is 1 IPB or 0 low delay IP. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int has_b_frames; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int mpeg_quant; -#endif - - /** - * qscale factor between P- and I-frames - * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + offset). - * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). - * - encoding: Set by user. - * - decoding: unused - */ - float i_quant_factor; - - /** - * qscale offset between P and I-frames - * - encoding: Set by user. - * - decoding: unused - */ - float i_quant_offset; - - /** - * luminance masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float lumi_masking; - - /** - * temporary complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float temporal_cplx_masking; - - /** - * spatial complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float spatial_cplx_masking; - - /** - * p block masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float p_masking; - - /** - * darkness masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float dark_masking; - - /** - * slice count - * - encoding: Set by libavcodec. - * - decoding: Set by user (or 0). - */ - int slice_count; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int prediction_method; -#define FF_PRED_LEFT 0 -#define FF_PRED_PLANE 1 -#define FF_PRED_MEDIAN 2 -#endif - - /** - * slice offsets in the frame in bytes - * - encoding: Set/allocated by libavcodec. - * - decoding: Set/allocated by user (or NULL). - */ - int *slice_offset; - - /** - * sample aspect ratio (0 if unknown) - * That is the width of a pixel divided by the height of the pixel. - * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - AVRational sample_aspect_ratio; - - /** - * motion estimation comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_cmp; - /** - * subpixel motion estimation comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_sub_cmp; - /** - * macroblock comparison function (not supported yet) - * - encoding: Set by user. - * - decoding: unused - */ - int mb_cmp; - /** - * interlaced DCT comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int ildct_cmp; -#define FF_CMP_SAD 0 -#define FF_CMP_SSE 1 -#define FF_CMP_SATD 2 -#define FF_CMP_DCT 3 -#define FF_CMP_PSNR 4 -#define FF_CMP_BIT 5 -#define FF_CMP_RD 6 -#define FF_CMP_ZERO 7 -#define FF_CMP_VSAD 8 -#define FF_CMP_VSSE 9 -#define FF_CMP_NSSE 10 -#define FF_CMP_W53 11 -#define FF_CMP_W97 12 -#define FF_CMP_DCTMAX 13 -#define FF_CMP_DCT264 14 -#define FF_CMP_MEDIAN_SAD 15 -#define FF_CMP_CHROMA 256 - - /** - * ME diamond size & shape - * - encoding: Set by user. - * - decoding: unused - */ - int dia_size; - - /** - * amount of previous MV predictors (2a+1 x 2a+1 square) - * - encoding: Set by user. - * - decoding: unused - */ - int last_predictor_count; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int pre_me; -#endif - - /** - * motion estimation prepass comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_pre_cmp; - - /** - * ME prepass diamond size & shape - * - encoding: Set by user. - * - decoding: unused - */ - int pre_dia_size; - - /** - * subpel ME quality - * - encoding: Set by user. - * - decoding: unused - */ - int me_subpel_quality; - - /** - * maximum motion estimation search range in subpel units - * If 0 then no limit. - * - * - encoding: Set by user. - * - decoding: unused - */ - int me_range; - - /** - * slice flags - * - encoding: unused - * - decoding: Set by user. - */ - int slice_flags; -#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display -#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG-2 field pics) -#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1) - - /** - * macroblock decision mode - * - encoding: Set by user. - * - decoding: unused - */ - int mb_decision; -#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp -#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits -#define FF_MB_DECISION_RD 2 ///< rate distortion - - /** - * custom intra quantization matrix - * Must be allocated with the av_malloc() family of functions, and will be freed in - * avcodec_free_context(). - * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. - * - decoding: Set/allocated/freed by libavcodec. - */ - uint16_t *intra_matrix; - - /** - * custom inter quantization matrix - * Must be allocated with the av_malloc() family of functions, and will be freed in - * avcodec_free_context(). - * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. - * - decoding: Set/allocated/freed by libavcodec. - */ - uint16_t *inter_matrix; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int scenechange_threshold; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int noise_reduction; -#endif - - /** - * precision of the intra DC coefficient - 8 - * - encoding: Set by user. - * - decoding: Set by libavcodec - */ - int intra_dc_precision; - - /** - * Number of macroblock rows at the top which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_top; - - /** - * Number of macroblock rows at the bottom which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_bottom; - - /** - * minimum MB Lagrange multiplier - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmin; - - /** - * maximum MB Lagrange multiplier - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmax; - -#if FF_API_PRIVATE_OPT - /** - * @deprecated use encoder private options instead - */ - attribute_deprecated - int me_penalty_compensation; -#endif - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int bidir_refine; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int brd_scale; -#endif - - /** - * minimum GOP size - * - encoding: Set by user. - * - decoding: unused - */ - int keyint_min; - - /** - * number of reference frames - * - encoding: Set by user. - * - decoding: Set by lavc. - */ - int refs; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int chromaoffset; -#endif - - /** - * Note: Value depends upon the compare function used for fullpel ME. - * - encoding: Set by user. - * - decoding: unused - */ - int mv0_threshold; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int b_sensitivity; -#endif - - /** - * Chromaticity coordinates of the source primaries. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorPrimaries color_primaries; - - /** - * Color Transfer Characteristic. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorTransferCharacteristic color_trc; - - /** - * YUV colorspace type. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorSpace colorspace; - - /** - * MPEG vs JPEG YUV range. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorRange color_range; - - /** - * This defines the location of chroma samples. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVChromaLocation chroma_sample_location; - - /** - * Number of slices. - * Indicates number of picture subdivisions. Used for parallelized - * decoding. - * - encoding: Set by user - * - decoding: unused - */ - int slices; - - /** Field order - * - encoding: set by libavcodec - * - decoding: Set by user. - */ - enum AVFieldOrder field_order; - - /* audio only */ - int sample_rate; ///< samples per second - int channels; ///< number of audio channels - - /** - * audio sample format - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - enum AVSampleFormat sample_fmt; ///< sample format - - /* The following data should not be initialized. */ - /** - * Number of samples per channel in an audio frame. - * - * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame - * except the last must contain exactly frame_size samples per channel. - * May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the - * frame size is not restricted. - * - decoding: may be set by some decoders to indicate constant frame size - */ - int frame_size; - - /** - * Frame counter, set by libavcodec. - * - * - decoding: total number of frames returned from the decoder so far. - * - encoding: total number of frames passed to the encoder so far. - * - * @note the counter is not incremented if encoding/decoding resulted in - * an error. - */ - int frame_number; - - /** - * number of bytes per packet if constant and known or 0 - * Used by some WAV based audio codecs. - */ - int block_align; - - /** - * Audio cutoff bandwidth (0 means "automatic") - * - encoding: Set by user. - * - decoding: unused - */ - int cutoff; - - /** - * Audio channel layout. - * - encoding: set by user. - * - decoding: set by user, may be overwritten by libavcodec. - */ - uint64_t channel_layout; - - /** - * Request decoder to use this channel layout if it can (0 for default) - * - encoding: unused - * - decoding: Set by user. - */ - uint64_t request_channel_layout; - - /** - * Type of service that the audio stream conveys. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - enum AVAudioServiceType audio_service_type; - - /** - * desired sample format - * - encoding: Not used. - * - decoding: Set by user. - * Decoder will decode to this format if it can. - */ - enum AVSampleFormat request_sample_fmt; - - /** - * This callback is called at the beginning of each frame to get data - * buffer(s) for it. There may be one contiguous buffer for all the data or - * there may be a buffer per each data plane or anything in between. What - * this means is, you may set however many entries in buf[] you feel necessary. - * Each buffer must be reference-counted using the AVBuffer API (see description - * of buf[] below). - * - * The following fields will be set in the frame before this callback is - * called: - * - format - * - width, height (video only) - * - sample_rate, channel_layout, nb_samples (audio only) - * Their values may differ from the corresponding values in - * AVCodecContext. This callback must use the frame values, not the codec - * context values, to calculate the required buffer size. - * - * This callback must fill the following fields in the frame: - * - data[] - * - linesize[] - * - extended_data: - * * if the data is planar audio with more than 8 channels, then this - * callback must allocate and fill extended_data to contain all pointers - * to all data planes. data[] must hold as many pointers as it can. - * extended_data must be allocated with av_malloc() and will be freed in - * av_frame_unref(). - * * otherwise extended_data must point to data - * - buf[] must contain one or more pointers to AVBufferRef structures. Each of - * the frame's data and extended_data pointers must be contained in these. That - * is, one AVBufferRef for each allocated chunk of memory, not necessarily one - * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(), - * and av_buffer_ref(). - * - extended_buf and nb_extended_buf must be allocated with av_malloc() by - * this callback and filled with the extra buffers if there are more - * buffers than buf[] can hold. extended_buf will be freed in - * av_frame_unref(). - * - * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call - * avcodec_default_get_buffer2() instead of providing buffers allocated by - * some other means. - * - * Each data plane must be aligned to the maximum required by the target - * CPU. - * - * @see avcodec_default_get_buffer2() - * - * Video: - * - * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused - * (read and/or written to if it is writable) later by libavcodec. - * - * avcodec_align_dimensions2() should be used to find the required width and - * height, as they normally need to be rounded up to the next multiple of 16. - * - * Some decoders do not support linesizes changing between frames. - * - * If frame multithreading is used, this callback may be called from a - * different thread, but not from more than one at once. Does not need to be - * reentrant. - * - * @see avcodec_align_dimensions2() - * - * Audio: - * - * Decoders request a buffer of a particular size by setting - * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, - * however, utilize only part of the buffer by setting AVFrame.nb_samples - * to a smaller value in the output frame. - * - * As a convenience, av_samples_get_buffer_size() and - * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() - * functions to find the required data size and to fill data pointers and - * linesize. In AVFrame.linesize, only linesize[0] may be set for audio - * since all planes must be the same size. - * - * @see av_samples_get_buffer_size(), av_samples_fill_arrays() - * - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - */ - int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags); - -#if FF_API_OLD_ENCDEC - /** - * If non-zero, the decoded audio and video frames returned from - * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted - * and are valid indefinitely. The caller must free them with - * av_frame_unref() when they are not needed anymore. - * Otherwise, the decoded frames must not be freed by the caller and are - * only valid until the next decode call. - * - * This is always automatically enabled if avcodec_receive_frame() is used. - * - * - encoding: unused - * - decoding: set by the caller before avcodec_open2(). - */ - attribute_deprecated - int refcounted_frames; -#endif - - /* - encoding parameters */ - float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) - float qblur; ///< amount of qscale smoothing over time (0.0-1.0) - - /** - * minimum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmin; - - /** - * maximum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmax; - - /** - * maximum quantizer difference between frames - * - encoding: Set by user. - * - decoding: unused - */ - int max_qdiff; - - /** - * decoder bitstream buffer size - * - encoding: Set by user. - * - decoding: unused - */ - int rc_buffer_size; - - /** - * ratecontrol override, see RcOverride - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - int rc_override_count; - RcOverride *rc_override; - - /** - * maximum bitrate - * - encoding: Set by user. - * - decoding: Set by user, may be overwritten by libavcodec. - */ - int64_t rc_max_rate; - - /** - * minimum bitrate - * - encoding: Set by user. - * - decoding: unused - */ - int64_t rc_min_rate; - - /** - * Ratecontrol attempt to use, at maximum, of what can be used without an underflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_max_available_vbv_use; - - /** - * Ratecontrol attempt to use, at least, times the amount needed to prevent a vbv overflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_min_vbv_overflow_use; - - /** - * Number of bits which should be loaded into the rc buffer before decoding starts. - * - encoding: Set by user. - * - decoding: unused - */ - int rc_initial_buffer_occupancy; - -#if FF_API_CODER_TYPE -#define FF_CODER_TYPE_VLC 0 -#define FF_CODER_TYPE_AC 1 -#define FF_CODER_TYPE_RAW 2 -#define FF_CODER_TYPE_RLE 3 - /** - * @deprecated use encoder private options instead - */ - attribute_deprecated - int coder_type; -#endif /* FF_API_CODER_TYPE */ - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int context_model; -#endif - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_threshold; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_factor; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_exp; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int frame_skip_cmp; -#endif /* FF_API_PRIVATE_OPT */ - - /** - * trellis RD quantization - * - encoding: Set by user. - * - decoding: unused - */ - int trellis; - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int min_prediction_order; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int max_prediction_order; - - /** @deprecated use encoder private options instead */ - attribute_deprecated - int64_t timecode_frame_start; -#endif - -#if FF_API_RTP_CALLBACK - /** - * @deprecated unused - */ - /* The RTP callback: This function is called */ - /* every time the encoder has a packet to send. */ - /* It depends on the encoder if the data starts */ - /* with a Start Code (it should). H.263 does. */ - /* mb_nb contains the number of macroblocks */ - /* encoded in the RTP payload. */ - attribute_deprecated - void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb); -#endif - -#if FF_API_PRIVATE_OPT - /** @deprecated use encoder private options instead */ - attribute_deprecated - int rtp_payload_size; /* The size of the RTP payload: the coder will */ - /* do its best to deliver a chunk with size */ - /* below rtp_payload_size, the chunk will start */ - /* with a start code on some codecs like H.263. */ - /* This doesn't take account of any particular */ - /* headers inside the transmitted RTP payload. */ -#endif - -#if FF_API_STAT_BITS - /* statistics, used for 2-pass encoding */ - attribute_deprecated - int mv_bits; - attribute_deprecated - int header_bits; - attribute_deprecated - int i_tex_bits; - attribute_deprecated - int p_tex_bits; - attribute_deprecated - int i_count; - attribute_deprecated - int p_count; - attribute_deprecated - int skip_count; - attribute_deprecated - int misc_bits; - - /** @deprecated this field is unused */ - attribute_deprecated - int frame_bits; -#endif - - /** - * pass1 encoding statistics output buffer - * - encoding: Set by libavcodec. - * - decoding: unused - */ - char *stats_out; - - /** - * pass2 encoding statistics input buffer - * Concatenated stuff from stats_out of pass1 should be placed here. - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - char *stats_in; - - /** - * Work around bugs in encoders which sometimes cannot be detected automatically. - * - encoding: Set by user - * - decoding: Set by user - */ - int workaround_bugs; -#define FF_BUG_AUTODETECT 1 ///< autodetection -#define FF_BUG_XVID_ILACE 4 -#define FF_BUG_UMP4 8 -#define FF_BUG_NO_PADDING 16 -#define FF_BUG_AMV 32 -#define FF_BUG_QPEL_CHROMA 64 -#define FF_BUG_STD_QPEL 128 -#define FF_BUG_QPEL_CHROMA2 256 -#define FF_BUG_DIRECT_BLOCKSIZE 512 -#define FF_BUG_EDGE 1024 -#define FF_BUG_HPEL_CHROMA 2048 -#define FF_BUG_DC_CLIP 4096 -#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders. -#define FF_BUG_TRUNCATED 16384 -#define FF_BUG_IEDGE 32768 - - /** - * strictly follow the standard (MPEG-4, ...). - * - encoding: Set by user. - * - decoding: Set by user. - * Setting this to STRICT or higher means the encoder and decoder will - * generally do stupid things, whereas setting it to unofficial or lower - * will mean the encoder might produce output that is not supported by all - * spec-compliant decoders. Decoders don't differentiate between normal, - * unofficial and experimental (that is, they always try to decode things - * when they can) unless they are explicitly asked to behave stupidly - * (=strictly conform to the specs) - */ - int strict_std_compliance; -#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. -#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. -#define FF_COMPLIANCE_NORMAL 0 -#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions -#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. - - /** - * error concealment flags - * - encoding: unused - * - decoding: Set by user. - */ - int error_concealment; -#define FF_EC_GUESS_MVS 1 -#define FF_EC_DEBLOCK 2 -#define FF_EC_FAVOR_INTER 256 - - /** - * debug - * - encoding: Set by user. - * - decoding: Set by user. - */ - int debug; -#define FF_DEBUG_PICT_INFO 1 -#define FF_DEBUG_RC 2 -#define FF_DEBUG_BITSTREAM 4 -#define FF_DEBUG_MB_TYPE 8 -#define FF_DEBUG_QP 16 -#define FF_DEBUG_DCT_COEFF 0x00000040 -#define FF_DEBUG_SKIP 0x00000080 -#define FF_DEBUG_STARTCODE 0x00000100 -#define FF_DEBUG_ER 0x00000400 -#define FF_DEBUG_MMCO 0x00000800 -#define FF_DEBUG_BUGS 0x00001000 -#define FF_DEBUG_BUFFERS 0x00008000 -#define FF_DEBUG_THREADS 0x00010000 -#define FF_DEBUG_GREEN_MD 0x00800000 -#define FF_DEBUG_NOMC 0x01000000 - - /** - * Error recognition; may misdetect some more or less valid parts as errors. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int err_recognition; - -/** - * Verify checksums embedded in the bitstream (could be of either encoded or - * decoded data, depending on the codec) and print an error message on mismatch. - * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the - * decoder returning an error. - */ -#define AV_EF_CRCCHECK (1<<0) -#define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations -#define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length -#define AV_EF_EXPLODE (1<<3) ///< abort decoding on minor error detection - -#define AV_EF_IGNORE_ERR (1<<15) ///< ignore errors and continue -#define AV_EF_CAREFUL (1<<16) ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors -#define AV_EF_COMPLIANT (1<<17) ///< consider all spec non compliances as errors -#define AV_EF_AGGRESSIVE (1<<18) ///< consider things that a sane encoder should not do as an error - - - /** - * opaque 64-bit number (generally a PTS) that will be reordered and - * output in AVFrame.reordered_opaque - * - encoding: Set by libavcodec to the reordered_opaque of the input - * frame corresponding to the last returned packet. Only - * supported by encoders with the - * AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability. - * - decoding: Set by user. - */ - int64_t reordered_opaque; - - /** - * Hardware accelerator in use - * - encoding: unused. - * - decoding: Set by libavcodec - */ - const struct AVHWAccel *hwaccel; - - /** - * Hardware accelerator context. - * For some hardware accelerators, a global context needs to be - * provided by the user. In that case, this holds display-dependent - * data FFmpeg cannot instantiate itself. Please refer to the - * FFmpeg HW accelerator documentation to know how to fill this - * is. e.g. for VA API, this is a struct vaapi_context. - * - encoding: unused - * - decoding: Set by user - */ - void *hwaccel_context; - - /** - * error - * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR. - * - decoding: unused - */ - uint64_t error[AV_NUM_DATA_POINTERS]; - - /** - * DCT algorithm, see FF_DCT_* below - * - encoding: Set by user. - * - decoding: unused - */ - int dct_algo; -#define FF_DCT_AUTO 0 -#define FF_DCT_FASTINT 1 -#define FF_DCT_INT 2 -#define FF_DCT_MMX 3 -#define FF_DCT_ALTIVEC 5 -#define FF_DCT_FAAN 6 - - /** - * IDCT algorithm, see FF_IDCT_* below. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int idct_algo; -#define FF_IDCT_AUTO 0 -#define FF_IDCT_INT 1 -#define FF_IDCT_SIMPLE 2 -#define FF_IDCT_SIMPLEMMX 3 -#define FF_IDCT_ARM 7 -#define FF_IDCT_ALTIVEC 8 -#define FF_IDCT_SIMPLEARM 10 -#define FF_IDCT_XVID 14 -#define FF_IDCT_SIMPLEARMV5TE 16 -#define FF_IDCT_SIMPLEARMV6 17 -#define FF_IDCT_FAAN 20 -#define FF_IDCT_SIMPLENEON 22 -#define FF_IDCT_NONE 24 /* Used by XvMC to extract IDCT coefficients with FF_IDCT_PERM_NONE */ -#define FF_IDCT_SIMPLEAUTO 128 - - /** - * bits per sample/pixel from the demuxer (needed for huffyuv). - * - encoding: Set by libavcodec. - * - decoding: Set by user. - */ - int bits_per_coded_sample; - - /** - * Bits per sample/pixel of internal libavcodec pixel/sample format. - * - encoding: set by user. - * - decoding: set by libavcodec. - */ - int bits_per_raw_sample; - - /** - * low resolution decoding, 1-> 1/2 size, 2->1/4 size - * - encoding: unused - * - decoding: Set by user. - */ - int lowres; - -#if FF_API_CODED_FRAME - /** - * the picture in the bitstream - * - encoding: Set by libavcodec. - * - decoding: unused - * - * @deprecated use the quality factor packet side data instead - */ - attribute_deprecated AVFrame *coded_frame; -#endif - - /** - * thread count - * is used to decide how many independent tasks should be passed to execute() - * - encoding: Set by user. - * - decoding: Set by user. - */ - int thread_count; - - /** - * Which multithreading methods to use. - * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, - * so clients which cannot provide future frames should not use it. - * - * - encoding: Set by user, otherwise the default is used. - * - decoding: Set by user, otherwise the default is used. - */ - int thread_type; -#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once -#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once - - /** - * Which multithreading methods are in use by the codec. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int active_thread_type; - -#if FF_API_THREAD_SAFE_CALLBACKS - /** - * Set by the client if its custom get_buffer() callback can be called - * synchronously from another thread, which allows faster multithreaded decoding. - * draw_horiz_band() will be called from other threads regardless of this setting. - * Ignored if the default get_buffer() is used. - * - encoding: Set by user. - * - decoding: Set by user. - * - * @deprecated the custom get_buffer2() callback should always be - * thread-safe. Thread-unsafe get_buffer2() implementations will be - * invalid starting with LIBAVCODEC_VERSION_MAJOR=60; in other words, - * libavcodec will behave as if this field was always set to 1. - * Callers that want to be forward compatible with future libavcodec - * versions should wrap access to this field in - * #if LIBAVCODEC_VERSION_MAJOR < 60 - */ - attribute_deprecated - int thread_safe_callbacks; -#endif - - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. - * @param count the number of things to execute - * - encoding: Set by libavcodec, user can override. - * - decoding: Set by libavcodec, user can override. - */ - int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size); - - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. - * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. - * @param c context passed also to func - * @param count the number of things to execute - * @param arg2 argument passed unchanged to func - * @param ret return values of executed functions, must have space for "count" values. May be NULL. - * @param func function that will be called count times, with jobnr from 0 to count-1. - * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no - * two instances of func executing at the same time will have the same threadnr. - * @return always 0 currently, but code should handle a future improvement where when any call to func - * returns < 0 no further calls to func may be done and < 0 is returned. - * - encoding: Set by libavcodec, user can override. - * - decoding: Set by libavcodec, user can override. - */ - int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count); - - /** - * noise vs. sse weight for the nsse comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int nsse_weight; - - /** - * profile - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int profile; -#define FF_PROFILE_UNKNOWN -99 -#define FF_PROFILE_RESERVED -100 - -#define FF_PROFILE_AAC_MAIN 0 -#define FF_PROFILE_AAC_LOW 1 -#define FF_PROFILE_AAC_SSR 2 -#define FF_PROFILE_AAC_LTP 3 -#define FF_PROFILE_AAC_HE 4 -#define FF_PROFILE_AAC_HE_V2 28 -#define FF_PROFILE_AAC_LD 22 -#define FF_PROFILE_AAC_ELD 38 -#define FF_PROFILE_MPEG2_AAC_LOW 128 -#define FF_PROFILE_MPEG2_AAC_HE 131 - -#define FF_PROFILE_DNXHD 0 -#define FF_PROFILE_DNXHR_LB 1 -#define FF_PROFILE_DNXHR_SQ 2 -#define FF_PROFILE_DNXHR_HQ 3 -#define FF_PROFILE_DNXHR_HQX 4 -#define FF_PROFILE_DNXHR_444 5 - -#define FF_PROFILE_DTS 20 -#define FF_PROFILE_DTS_ES 30 -#define FF_PROFILE_DTS_96_24 40 -#define FF_PROFILE_DTS_HD_HRA 50 -#define FF_PROFILE_DTS_HD_MA 60 -#define FF_PROFILE_DTS_EXPRESS 70 - -#define FF_PROFILE_MPEG2_422 0 -#define FF_PROFILE_MPEG2_HIGH 1 -#define FF_PROFILE_MPEG2_SS 2 -#define FF_PROFILE_MPEG2_SNR_SCALABLE 3 -#define FF_PROFILE_MPEG2_MAIN 4 -#define FF_PROFILE_MPEG2_SIMPLE 5 - -#define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag -#define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag - -#define FF_PROFILE_H264_BASELINE 66 -#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED) -#define FF_PROFILE_H264_MAIN 77 -#define FF_PROFILE_H264_EXTENDED 88 -#define FF_PROFILE_H264_HIGH 100 -#define FF_PROFILE_H264_HIGH_10 110 -#define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_MULTIVIEW_HIGH 118 -#define FF_PROFILE_H264_HIGH_422 122 -#define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_STEREO_HIGH 128 -#define FF_PROFILE_H264_HIGH_444 144 -#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244 -#define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_CAVLC_444 44 - -#define FF_PROFILE_VC1_SIMPLE 0 -#define FF_PROFILE_VC1_MAIN 1 -#define FF_PROFILE_VC1_COMPLEX 2 -#define FF_PROFILE_VC1_ADVANCED 3 - -#define FF_PROFILE_MPEG4_SIMPLE 0 -#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1 -#define FF_PROFILE_MPEG4_CORE 2 -#define FF_PROFILE_MPEG4_MAIN 3 -#define FF_PROFILE_MPEG4_N_BIT 4 -#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5 -#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6 -#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7 -#define FF_PROFILE_MPEG4_HYBRID 8 -#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9 -#define FF_PROFILE_MPEG4_CORE_SCALABLE 10 -#define FF_PROFILE_MPEG4_ADVANCED_CODING 11 -#define FF_PROFILE_MPEG4_ADVANCED_CORE 12 -#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13 -#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14 -#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15 - -#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 1 -#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 2 -#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 32768 -#define FF_PROFILE_JPEG2000_DCINEMA_2K 3 -#define FF_PROFILE_JPEG2000_DCINEMA_4K 4 - -#define FF_PROFILE_VP9_0 0 -#define FF_PROFILE_VP9_1 1 -#define FF_PROFILE_VP9_2 2 -#define FF_PROFILE_VP9_3 3 - -#define FF_PROFILE_HEVC_MAIN 1 -#define FF_PROFILE_HEVC_MAIN_10 2 -#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 -#define FF_PROFILE_HEVC_REXT 4 - -#define FF_PROFILE_VVC_MAIN_10 1 -#define FF_PROFILE_VVC_MAIN_10_444 33 - -#define FF_PROFILE_AV1_MAIN 0 -#define FF_PROFILE_AV1_HIGH 1 -#define FF_PROFILE_AV1_PROFESSIONAL 2 - -#define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT 0xc0 -#define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1 -#define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT 0xc2 -#define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS 0xc3 -#define FF_PROFILE_MJPEG_JPEG_LS 0xf7 - -#define FF_PROFILE_SBC_MSBC 1 - -#define FF_PROFILE_PRORES_PROXY 0 -#define FF_PROFILE_PRORES_LT 1 -#define FF_PROFILE_PRORES_STANDARD 2 -#define FF_PROFILE_PRORES_HQ 3 -#define FF_PROFILE_PRORES_4444 4 -#define FF_PROFILE_PRORES_XQ 5 - -#define FF_PROFILE_ARIB_PROFILE_A 0 -#define FF_PROFILE_ARIB_PROFILE_C 1 - -#define FF_PROFILE_KLVA_SYNC 0 -#define FF_PROFILE_KLVA_ASYNC 1 - - /** - * level - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int level; -#define FF_LEVEL_UNKNOWN -99 - - /** - * Skip loop filtering for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_loop_filter; - - /** - * Skip IDCT/dequantization for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_idct; - - /** - * Skip decoding for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_frame; - - /** - * Header containing style information for text subtitles. - * For SUBTITLE_ASS subtitle type, it should contain the whole ASS - * [Script Info] and [V4+ Styles] section, plus the [Events] line and - * the Format line following. It shouldn't include any Dialogue line. - * - encoding: Set/allocated/freed by user (before avcodec_open2()) - * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2()) - */ - uint8_t *subtitle_header; - int subtitle_header_size; - -#if FF_API_VBV_DELAY - /** - * VBV delay coded in the last frame (in periods of a 27 MHz clock). - * Used for compliant TS muxing. - * - encoding: Set by libavcodec. - * - decoding: unused. - * @deprecated this value is now exported as a part of - * AV_PKT_DATA_CPB_PROPERTIES packet side data - */ - attribute_deprecated - uint64_t vbv_delay; -#endif - -#if FF_API_SIDEDATA_ONLY_PKT - /** - * Encoding only and set by default. Allow encoders to output packets - * that do not contain any encoded data, only side data. - * - * Some encoders need to output such packets, e.g. to update some stream - * parameters at the end of encoding. - * - * @deprecated this field disables the default behaviour and - * it is kept only for compatibility. - */ - attribute_deprecated - int side_data_only_packets; -#endif - - /** - * Audio only. The number of "priming" samples (padding) inserted by the - * encoder at the beginning of the audio. I.e. this number of leading - * decoded samples must be discarded by the caller to get the original audio - * without leading padding. - * - * - decoding: unused - * - encoding: Set by libavcodec. The timestamps on the output packets are - * adjusted by the encoder so that they always refer to the - * first sample of the data actually contained in the packet, - * including any added padding. E.g. if the timebase is - * 1/samplerate and the timestamp of the first input sample is - * 0, the timestamp of the first output packet will be - * -initial_padding. - */ - int initial_padding; - - /** - * - decoding: For codecs that store a framerate value in the compressed - * bitstream, the decoder may export it here. { 0, 1} when - * unknown. - * - encoding: May be used to signal the framerate of CFR content to an - * encoder. - */ - AVRational framerate; - - /** - * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx. - * - encoding: unused. - * - decoding: Set by libavcodec before calling get_format() - */ - enum AVPixelFormat sw_pix_fmt; - - /** - * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. - * - encoding unused. - * - decoding set by user. - */ - AVRational pkt_timebase; - - /** - * AVCodecDescriptor - * - encoding: unused. - * - decoding: set by libavcodec. - */ - const AVCodecDescriptor *codec_descriptor; - - /** - * Current statistics for PTS correction. - * - decoding: maintained and used by libavcodec, not intended to be used by user apps - * - encoding: unused - */ - int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far - int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far - int64_t pts_correction_last_pts; /// PTS of the last frame - int64_t pts_correction_last_dts; /// DTS of the last frame - - /** - * Character encoding of the input subtitles file. - * - decoding: set by user - * - encoding: unused - */ - char *sub_charenc; - - /** - * Subtitles character encoding mode. Formats or codecs might be adjusting - * this setting (if they are doing the conversion themselves for instance). - * - decoding: set by libavcodec - * - encoding: unused - */ - int sub_charenc_mode; -#define FF_SUB_CHARENC_MODE_DO_NOTHING -1 ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance) -#define FF_SUB_CHARENC_MODE_AUTOMATIC 0 ///< libavcodec will select the mode itself -#define FF_SUB_CHARENC_MODE_PRE_DECODER 1 ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv -#define FF_SUB_CHARENC_MODE_IGNORE 2 ///< neither convert the subtitles, nor check them for valid UTF-8 - - /** - * Skip processing alpha if supported by codec. - * Note that if the format uses pre-multiplied alpha (common with VP6, - * and recommended due to better video quality/compression) - * the image will look as if alpha-blended onto a black background. - * However for formats that do not use pre-multiplied alpha - * there might be serious artefacts (though e.g. libswscale currently - * assumes pre-multiplied alpha anyway). - * - * - decoding: set by user - * - encoding: unused - */ - int skip_alpha; - - /** - * Number of samples to skip after a discontinuity - * - decoding: unused - * - encoding: set by libavcodec - */ - int seek_preroll; - -#if FF_API_DEBUG_MV - /** - * @deprecated unused - */ - attribute_deprecated - int debug_mv; -#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames -#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames -#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames -#endif - - /** - * custom intra quantization matrix - * - encoding: Set by user, can be NULL. - * - decoding: unused. - */ - uint16_t *chroma_intra_matrix; - - /** - * dump format separator. - * can be ", " or "\n " or anything else - * - encoding: Set by user. - * - decoding: Set by user. - */ - uint8_t *dump_separator; - - /** - * ',' separated list of allowed decoders. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *codec_whitelist; - - /** - * Properties of the stream that gets decoded - * - encoding: unused - * - decoding: set by libavcodec - */ - unsigned properties; -#define FF_CODEC_PROPERTY_LOSSLESS 0x00000001 -#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002 - - /** - * Additional data associated with the entire coded stream. - * - * - decoding: unused - * - encoding: may be set by libavcodec after avcodec_open2(). - */ - AVPacketSideData *coded_side_data; - int nb_coded_side_data; - - /** - * A reference to the AVHWFramesContext describing the input (for encoding) - * or output (decoding) frames. The reference is set by the caller and - * afterwards owned (and freed) by libavcodec - it should never be read by - * the caller after being set. - * - * - decoding: This field should be set by the caller from the get_format() - * callback. The previous reference (if any) will always be - * unreffed by libavcodec before the get_format() call. - * - * If the default get_buffer2() is used with a hwaccel pixel - * format, then this AVHWFramesContext will be used for - * allocating the frame buffers. - * - * - encoding: For hardware encoders configured to use a hwaccel pixel - * format, this field should be set by the caller to a reference - * to the AVHWFramesContext describing input frames. - * AVHWFramesContext.format must be equal to - * AVCodecContext.pix_fmt. - * - * This field should be set before avcodec_open2() is called. - */ - AVBufferRef *hw_frames_ctx; - - /** - * Control the form of AVSubtitle.rects[N]->ass - * - decoding: set by user - * - encoding: unused - */ - int sub_text_format; -#define FF_SUB_TEXT_FMT_ASS 0 -#if FF_API_ASS_TIMING -#define FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS 1 -#endif - - /** - * Audio only. The amount of padding (in samples) appended by the encoder to - * the end of the audio. I.e. this number of decoded samples must be - * discarded by the caller from the end of the stream to get the original - * audio without any trailing padding. - * - * - decoding: unused - * - encoding: unused - */ - int trailing_padding; - - /** - * The number of pixels per image to maximally accept. - * - * - decoding: set by user - * - encoding: set by user - */ - int64_t max_pixels; - - /** - * A reference to the AVHWDeviceContext describing the device which will - * be used by a hardware encoder/decoder. The reference is set by the - * caller and afterwards owned (and freed) by libavcodec. - * - * This should be used if either the codec device does not require - * hardware frames or any that are used are to be allocated internally by - * libavcodec. If the user wishes to supply any of the frames used as - * encoder input or decoder output then hw_frames_ctx should be used - * instead. When hw_frames_ctx is set in get_format() for a decoder, this - * field will be ignored while decoding the associated stream segment, but - * may again be used on a following one after another get_format() call. - * - * For both encoders and decoders this field should be set before - * avcodec_open2() is called and must not be written to thereafter. - * - * Note that some decoders may require this field to be set initially in - * order to support hw_frames_ctx at all - in that case, all frames - * contexts used must be created on the same device. - */ - AVBufferRef *hw_device_ctx; - - /** - * Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated - * decoding (if active). - * - encoding: unused - * - decoding: Set by user (either before avcodec_open2(), or in the - * AVCodecContext.get_format callback) - */ - int hwaccel_flags; - - /** - * Video decoding only. Certain video codecs support cropping, meaning that - * only a sub-rectangle of the decoded frame is intended for display. This - * option controls how cropping is handled by libavcodec. - * - * When set to 1 (the default), libavcodec will apply cropping internally. - * I.e. it will modify the output frame width/height fields and offset the - * data pointers (only by as much as possible while preserving alignment, or - * by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that - * the frames output by the decoder refer only to the cropped area. The - * crop_* fields of the output frames will be zero. - * - * When set to 0, the width/height fields of the output frames will be set - * to the coded dimensions and the crop_* fields will describe the cropping - * rectangle. Applying the cropping is left to the caller. - * - * @warning When hardware acceleration with opaque output frames is used, - * libavcodec is unable to apply cropping from the top/left border. - * - * @note when this option is set to zero, the width/height fields of the - * AVCodecContext and output AVFrames have different meanings. The codec - * context fields store display dimensions (with the coded dimensions in - * coded_width/height), while the frame fields store the coded dimensions - * (with the display dimensions being determined by the crop_* fields). - */ - int apply_cropping; - - /* - * Video decoding only. Sets the number of extra hardware frames which - * the decoder will allocate for use by the caller. This must be set - * before avcodec_open2() is called. - * - * Some hardware decoders require all frames that they will use for - * output to be defined in advance before decoding starts. For such - * decoders, the hardware frame pool must therefore be of a fixed size. - * The extra frames set here are on top of any number that the decoder - * needs internally in order to operate normally (for example, frames - * used as reference pictures). - */ - int extra_hw_frames; - - /** - * The percentage of damaged samples to discard a frame. - * - * - decoding: set by user - * - encoding: unused - */ - int discard_damaged_percentage; - - /** - * The number of samples per frame to maximally accept. - * - * - decoding: set by user - * - encoding: set by user - */ - int64_t max_samples; - - /** - * Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of - * metadata exported in frame, packet, or coded stream side data by - * decoders and encoders. - * - * - decoding: set by user - * - encoding: set by user - */ - int export_side_data; - - /** - * This callback is called at the beginning of each packet to get a data - * buffer for it. - * - * The following field will be set in the packet before this callback is - * called: - * - size - * This callback must use the above value to calculate the required buffer size, - * which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes. - * - * This callback must fill the following fields in the packet: - * - data: alignment requirements for AVPacket apply, if any. Some architectures and - * encoders may benefit from having aligned data. - * - buf: must contain a pointer to an AVBufferRef structure. The packet's - * data pointer must be contained in it. See: av_buffer_create(), av_buffer_alloc(), - * and av_buffer_ref(). - * - * If AV_CODEC_CAP_DR1 is not set then get_encode_buffer() must call - * avcodec_default_get_encode_buffer() instead of providing a buffer allocated by - * some other means. - * - * The flags field may contain a combination of AV_GET_ENCODE_BUFFER_FLAG_ flags. - * They may be used for example to hint what use the buffer may get after being - * created. - * Implementations of this callback may ignore flags they don't understand. - * If AV_GET_ENCODE_BUFFER_FLAG_REF is set in flags then the packet may be reused - * (read and/or written to if it is writable) later by libavcodec. - * - * This callback must be thread-safe, as when frame threading is used, it may - * be called from multiple threads simultaneously. - * - * @see avcodec_default_get_encode_buffer() - * - * - encoding: Set by libavcodec, user can override. - * - decoding: unused - */ - int (*get_encode_buffer)(struct AVCodecContext *s, AVPacket *pkt, int flags); -} AVCodecContext; - -#if FF_API_CODEC_GET_SET -/** - * Accessors for some AVCodecContext fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_pkt_timebase (AVCodecContext *avctx, AVRational val); - -attribute_deprecated -const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc); - -attribute_deprecated -unsigned av_codec_get_codec_properties(const AVCodecContext *avctx); - -attribute_deprecated -int av_codec_get_lowres(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_lowres(AVCodecContext *avctx, int val); - -attribute_deprecated -int av_codec_get_seek_preroll(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_seek_preroll(AVCodecContext *avctx, int val); - -attribute_deprecated -uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx); -attribute_deprecated -void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val); -#endif - -struct AVSubtitle; - -#if FF_API_CODEC_GET_SET -attribute_deprecated -int av_codec_get_max_lowres(const AVCodec *codec); -#endif - -struct MpegEncContext; - -/** - * @defgroup lavc_hwaccel AVHWAccel - * - * @note Nothing in this structure should be accessed by the user. At some - * point in future it will not be externally visible at all. - * - * @{ - */ -typedef struct AVHWAccel { - /** - * Name of the hardware accelerated codec. - * The name is globally unique among encoders and among decoders (but an - * encoder and a decoder can share the same name). - */ - const char *name; - - /** - * Type of codec implemented by the hardware accelerator. - * - * See AVMEDIA_TYPE_xxx - */ - enum AVMediaType type; - - /** - * Codec implemented by the hardware accelerator. - * - * See AV_CODEC_ID_xxx - */ - enum AVCodecID id; - - /** - * Supported pixel format. - * - * Only hardware accelerated formats are supported here. - */ - enum AVPixelFormat pix_fmt; - - /** - * Hardware accelerated codec capabilities. - * see AV_HWACCEL_CODEC_CAP_* - */ - int capabilities; - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavcodec and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * Allocate a custom buffer - */ - int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame); - - /** - * Called at the beginning of each frame or field picture. - * - * Meaningful frame information (codec specific) is guaranteed to - * be parsed at this point. This function is mandatory. - * - * Note that buf can be NULL along with buf_size set to 0. - * Otherwise, this means the whole frame is available at this point. - * - * @param avctx the codec context - * @param buf the frame data buffer base - * @param buf_size the size of the frame in bytes - * @return zero if successful, a negative value otherwise - */ - int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); - - /** - * Callback for parameter data (SPS/PPS/VPS etc). - * - * Useful for hardware decoders which keep persistent state about the - * video parameters, and need to receive any changes to update that state. - * - * @param avctx the codec context - * @param type the nal unit type - * @param buf the nal unit data buffer - * @param buf_size the size of the nal unit in bytes - * @return zero if successful, a negative value otherwise - */ - int (*decode_params)(AVCodecContext *avctx, int type, const uint8_t *buf, uint32_t buf_size); - - /** - * Callback for each slice. - * - * Meaningful slice information (codec specific) is guaranteed to - * be parsed at this point. This function is mandatory. - * The only exception is XvMC, that works on MB level. - * - * @param avctx the codec context - * @param buf the slice data buffer base - * @param buf_size the size of the slice in bytes - * @return zero if successful, a negative value otherwise - */ - int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); - - /** - * Called at the end of each frame or field picture. - * - * The whole picture is parsed at this point and can now be sent - * to the hardware accelerator. This function is mandatory. - * - * @param avctx the codec context - * @return zero if successful, a negative value otherwise - */ - int (*end_frame)(AVCodecContext *avctx); - - /** - * Size of per-frame hardware accelerator private data. - * - * Private data is allocated with av_mallocz() before - * AVCodecContext.get_buffer() and deallocated after - * AVCodecContext.release_buffer(). - */ - int frame_priv_data_size; - - /** - * Called for every Macroblock in a slice. - * - * XvMC uses it to replace the ff_mpv_reconstruct_mb(). - * Instead of decoding to raw picture, MB parameters are - * stored in an array provided by the video driver. - * - * @param s the mpeg context - */ - void (*decode_mb)(struct MpegEncContext *s); - - /** - * Initialize the hwaccel private data. - * - * This will be called from ff_get_format(), after hwaccel and - * hwaccel_context are set and the hwaccel private data in AVCodecInternal - * is allocated. - */ - int (*init)(AVCodecContext *avctx); - - /** - * Uninitialize the hwaccel private data. - * - * This will be called from get_format() or avcodec_close(), after hwaccel - * and hwaccel_context are already uninitialized. - */ - int (*uninit)(AVCodecContext *avctx); - - /** - * Size of the private data to allocate in - * AVCodecInternal.hwaccel_priv_data. - */ - int priv_data_size; - - /** - * Internal hwaccel capabilities. - */ - int caps_internal; - - /** - * Fill the given hw_frames context with current codec parameters. Called - * from get_format. Refer to avcodec_get_hw_frames_parameters() for - * details. - * - * This CAN be called before AVHWAccel.init is called, and you must assume - * that avctx->hwaccel_priv_data is invalid. - */ - int (*frame_params)(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx); -} AVHWAccel; - -/** - * HWAccel is experimental and is thus avoided in favor of non experimental - * codecs - */ -#define AV_HWACCEL_CODEC_CAP_EXPERIMENTAL 0x0200 - -/** - * Hardware acceleration should be used for decoding even if the codec level - * used is unknown or higher than the maximum supported level reported by the - * hardware driver. - * - * It's generally a good idea to pass this flag unless you have a specific - * reason not to, as hardware tends to under-report supported levels. - */ -#define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0) - -/** - * Hardware acceleration can output YUV pixel formats with a different chroma - * sampling than 4:2:0 and/or other than 8 bits per component. - */ -#define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1) - -/** - * Hardware acceleration should still be attempted for decoding when the - * codec profile does not match the reported capabilities of the hardware. - * - * For example, this can be used to try to decode baseline profile H.264 - * streams in hardware - it will often succeed, because many streams marked - * as baseline profile actually conform to constrained baseline profile. - * - * @warning If the stream is actually not supported then the behaviour is - * undefined, and may include returning entirely incorrect output - * while indicating success. - */ -#define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) - -/** - * @} - */ - -#if FF_API_AVPICTURE -/** - * @defgroup lavc_picture AVPicture - * - * Functions for working with AVPicture - * @{ - */ - -/** - * Picture data structure. - * - * Up to four components can be stored into it, the last component is - * alpha. - * @deprecated use AVFrame or imgutils functions instead - */ -typedef struct AVPicture { - attribute_deprecated - uint8_t *data[AV_NUM_DATA_POINTERS]; ///< pointers to the image data planes - attribute_deprecated - int linesize[AV_NUM_DATA_POINTERS]; ///< number of bytes per line -} AVPicture; - -/** - * @} - */ -#endif - -enum AVSubtitleType { - SUBTITLE_NONE, - - SUBTITLE_BITMAP, ///< A bitmap, pict will be set - - /** - * Plain text, the text field must be set by the decoder and is - * authoritative. ass and pict fields may contain approximations. - */ - SUBTITLE_TEXT, - - /** - * Formatted text, the ass field must be set by the decoder and is - * authoritative. pict and text fields may contain approximations. - */ - SUBTITLE_ASS, -}; - -#define AV_SUBTITLE_FLAG_FORCED 0x00000001 - -typedef struct AVSubtitleRect { - int x; ///< top left corner of pict, undefined when pict is not set - int y; ///< top left corner of pict, undefined when pict is not set - int w; ///< width of pict, undefined when pict is not set - int h; ///< height of pict, undefined when pict is not set - int nb_colors; ///< number of colors in pict, undefined when pict is not set - -#if FF_API_AVPICTURE - /** - * @deprecated unused - */ - attribute_deprecated - AVPicture pict; -#endif - /** - * data+linesize for the bitmap of this subtitle. - * Can be set for text/ass as well once they are rendered. - */ - uint8_t *data[4]; - int linesize[4]; - - enum AVSubtitleType type; - - char *text; ///< 0 terminated plain UTF-8 text - - /** - * 0 terminated ASS/SSA compatible event line. - * The presentation of this is unaffected by the other values in this - * struct. - */ - char *ass; - - int flags; -} AVSubtitleRect; - -typedef struct AVSubtitle { - uint16_t format; /* 0 = graphics */ - uint32_t start_display_time; /* relative to packet pts, in ms */ - uint32_t end_display_time; /* relative to packet pts, in ms */ - unsigned num_rects; - AVSubtitleRect **rects; - int64_t pts; ///< Same as packet pts, in AV_TIME_BASE -} AVSubtitle; - -#if FF_API_NEXT -/** - * If c is NULL, returns the first registered codec, - * if c is non-NULL, returns the next registered codec after c, - * or NULL if c is the last one. - */ -attribute_deprecated -AVCodec *av_codec_next(const AVCodec *c); -#endif - -/** - * Return the LIBAVCODEC_VERSION_INT constant. - */ -unsigned avcodec_version(void); - -/** - * Return the libavcodec build-time configuration. - */ -const char *avcodec_configuration(void); - -/** - * Return the libavcodec license. - */ -const char *avcodec_license(void); - -#if FF_API_NEXT -/** - * @deprecated Calling this function is unnecessary. - */ -attribute_deprecated -void avcodec_register(AVCodec *codec); - -/** - * @deprecated Calling this function is unnecessary. - */ -attribute_deprecated -void avcodec_register_all(void); -#endif - -/** - * Allocate an AVCodecContext and set its fields to default values. The - * resulting struct should be freed with avcodec_free_context(). - * - * @param codec if non-NULL, allocate private data and initialize defaults - * for the given codec. It is illegal to then call avcodec_open2() - * with a different codec. - * If NULL, then the codec-specific defaults won't be initialized, - * which may result in suboptimal default settings (this is - * important mainly for encoders, e.g. libx264). - * - * @return An AVCodecContext filled with default values or NULL on failure. - */ -AVCodecContext *avcodec_alloc_context3(const AVCodec *codec); - -/** - * Free the codec context and everything associated with it and write NULL to - * the provided pointer. - */ -void avcodec_free_context(AVCodecContext **avctx); - -#if FF_API_GET_CONTEXT_DEFAULTS -/** - * @deprecated This function should not be used, as closing and opening a codec - * context multiple time is not supported. A new codec context should be - * allocated for each new use. - */ -int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec); -#endif - -/** - * Get the AVClass for AVCodecContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avcodec_get_class(void); - -#if FF_API_GET_FRAME_CLASS -/** - * @deprecated This function should not be used. - */ -attribute_deprecated -const AVClass *avcodec_get_frame_class(void); -#endif - -/** - * Get the AVClass for AVSubtitleRect. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avcodec_get_subtitle_rect_class(void); - -#if FF_API_COPY_CONTEXT -/** - * Copy the settings of the source AVCodecContext into the destination - * AVCodecContext. The resulting destination codec context will be - * unopened, i.e. you are required to call avcodec_open2() before you - * can use this AVCodecContext to decode/encode video/audio data. - * - * @param dest target codec context, should be initialized with - * avcodec_alloc_context3(NULL), but otherwise uninitialized - * @param src source codec context - * @return AVERROR() on error (e.g. memory allocation error), 0 on success - * - * @deprecated The semantics of this function are ill-defined and it should not - * be used. If you need to transfer the stream parameters from one codec context - * to another, use an intermediate AVCodecParameters instance and the - * avcodec_parameters_from_context() / avcodec_parameters_to_context() - * functions. - */ -attribute_deprecated -int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src); -#endif - -/** - * Fill the parameters struct based on the values from the supplied codec - * context. Any allocated fields in par are freed and replaced with duplicates - * of the corresponding fields in codec. - * - * @return >= 0 on success, a negative AVERROR code on failure - */ -int avcodec_parameters_from_context(AVCodecParameters *par, - const AVCodecContext *codec); - -/** - * Fill the codec context based on the values from the supplied codec - * parameters. Any allocated fields in codec that have a corresponding field in - * par are freed and replaced with duplicates of the corresponding field in par. - * Fields in codec that do not have a counterpart in par are not touched. - * - * @return >= 0 on success, a negative AVERROR code on failure. - */ -int avcodec_parameters_to_context(AVCodecContext *codec, - const AVCodecParameters *par); - -/** - * Initialize the AVCodecContext to use the given AVCodec. Prior to using this - * function the context has to be allocated with avcodec_alloc_context3(). - * - * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), - * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for - * retrieving a codec. - * - * @warning This function is not thread safe! - * - * @note Always call this function before using decoding routines (such as - * @ref avcodec_receive_frame()). - * - * @code - * av_dict_set(&opts, "b", "2.5M", 0); - * codec = avcodec_find_decoder(AV_CODEC_ID_H264); - * if (!codec) - * exit(1); - * - * context = avcodec_alloc_context3(codec); - * - * if (avcodec_open2(context, codec, opts) < 0) - * exit(1); - * @endcode - * - * @param avctx The context to initialize. - * @param codec The codec to open this context for. If a non-NULL codec has been - * previously passed to avcodec_alloc_context3() or - * for this context, then this parameter MUST be either NULL or - * equal to the previously passed codec. - * @param options A dictionary filled with AVCodecContext and codec-private options. - * On return this object will be filled with options that were not found. - * - * @return zero on success, a negative value on error - * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), - * av_dict_set(), av_opt_find(). - */ -int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options); - -/** - * Close a given AVCodecContext and free all the data associated with it - * (but not the AVCodecContext itself). - * - * Calling this function on an AVCodecContext that hasn't been opened will free - * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL - * codec. Subsequent calls will do nothing. - * - * @note Do not use this function. Use avcodec_free_context() to destroy a - * codec context (either open or closed). Opening and closing a codec context - * multiple times is not supported anymore -- use multiple codec contexts - * instead. - */ -int avcodec_close(AVCodecContext *avctx); - -/** - * Free all allocated data in the given subtitle struct. - * - * @param sub AVSubtitle to free. - */ -void avsubtitle_free(AVSubtitle *sub); - -/** - * @} - */ - -/** - * @addtogroup lavc_decoding - * @{ - */ - -/** - * The default callback for AVCodecContext.get_buffer2(). It is made public so - * it can be called by custom get_buffer2() implementations for decoders without - * AV_CODEC_CAP_DR1 set. - */ -int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags); - -/** - * The default callback for AVCodecContext.get_encode_buffer(). It is made public so - * it can be called by custom get_encode_buffer() implementations for encoders without - * AV_CODEC_CAP_DR1 set. - */ -int avcodec_default_get_encode_buffer(AVCodecContext *s, AVPacket *pkt, int flags); - -/** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you do not use any horizontal - * padding. - * - * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. - */ -void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height); - -/** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you also ensure that all - * line sizes are a multiple of the respective linesize_align[i]. - * - * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. - */ -void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, - int linesize_align[AV_NUM_DATA_POINTERS]); - -/** - * Converts AVChromaLocation to swscale x/y chroma position. - * - * The positions represent the chroma (0,0) position in a coordinates system - * with luma (0,0) representing the origin and luma(1,1) representing 256,256 - * - * @param xpos horizontal chroma sample position - * @param ypos vertical chroma sample position - */ -int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos); - -/** - * Converts swscale x/y chroma position to AVChromaLocation. - * - * The positions represent the chroma (0,0) position in a coordinates system - * with luma (0,0) representing the origin and luma(1,1) representing 256,256 - * - * @param xpos horizontal chroma sample position - * @param ypos vertical chroma sample position - */ -enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos); - -#if FF_API_OLD_ENCDEC -/** - * Decode the audio frame of size avpkt->size from avpkt->data into frame. - * - * Some decoders may support multiple frames in a single AVPacket. Such - * decoders would then just decode the first frame and the return value would be - * less than the packet size. In this case, avcodec_decode_audio4 has to be - * called again with an AVPacket containing the remaining data in order to - * decode the second frame, etc... Even if no frames are returned, the packet - * needs to be fed to the decoder with remaining data until it is completely - * consumed or an error occurs. - * - * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input - * and output. This means that for some packets they will not immediately - * produce decoded output and need to be flushed at the end of decoding to get - * all the decoded data. Flushing is done by calling this function with packets - * with avpkt->data set to NULL and avpkt->size set to 0 until it stops - * returning samples. It is safe to flush even those decoders that are not - * marked with AV_CODEC_CAP_DELAY, then no samples will be returned. - * - * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE - * larger than the actual read bytes because some optimized bitstream - * readers read 32 or 64 bits at once and could read over the end. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx the codec context - * @param[out] frame The AVFrame in which to store decoded audio samples. - * The decoder will allocate a buffer for the decoded frame by - * calling the AVCodecContext.get_buffer2() callback. - * When AVCodecContext.refcounted_frames is set to 1, the frame is - * reference counted and the returned reference belongs to the - * caller. The caller must release the frame using av_frame_unref() - * when the frame is no longer needed. The caller may safely write - * to the frame if av_frame_is_writable() returns 1. - * When AVCodecContext.refcounted_frames is set to 0, the returned - * reference belongs to the decoder and is valid only until the - * next call to this function or until closing or flushing the - * decoder. The caller may not write to it. - * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is - * non-zero. Note that this field being set to zero - * does not mean that an error has occurred. For - * decoders with AV_CODEC_CAP_DELAY set, no given decode - * call is guaranteed to produce a frame. - * @param[in] avpkt The input AVPacket containing the input buffer. - * At least avpkt->data and avpkt->size should be set. Some - * decoders might also require additional fields to be set. - * @return A negative error code is returned if an error occurred during - * decoding, otherwise the number of bytes consumed from the input - * AVPacket is returned. - * -* @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). - */ -attribute_deprecated -int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, - int *got_frame_ptr, const AVPacket *avpkt); - -/** - * Decode the video frame of size avpkt->size from avpkt->data into picture. - * Some decoders may support multiple frames in a single AVPacket, such - * decoders would then just decode the first frame. - * - * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than - * the actual read bytes because some optimized bitstream readers read 32 or 64 - * bits at once and could read over the end. - * - * @warning The end of the input buffer buf should be set to 0 to ensure that - * no overreading happens for damaged MPEG streams. - * - * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay - * between input and output, these need to be fed with avpkt->data=NULL, - * avpkt->size=0 at the end to return the remaining frames. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx the codec context - * @param[out] picture The AVFrame in which the decoded video frame will be stored. - * Use av_frame_alloc() to get an AVFrame. The codec will - * allocate memory for the actual bitmap by calling the - * AVCodecContext.get_buffer2() callback. - * When AVCodecContext.refcounted_frames is set to 1, the frame is - * reference counted and the returned reference belongs to the - * caller. The caller must release the frame using av_frame_unref() - * when the frame is no longer needed. The caller may safely write - * to the frame if av_frame_is_writable() returns 1. - * When AVCodecContext.refcounted_frames is set to 0, the returned - * reference belongs to the decoder and is valid only until the - * next call to this function or until closing or flushing the - * decoder. The caller may not write to it. - * - * @param[in] avpkt The input AVPacket containing the input buffer. - * You can create such packet with av_init_packet() and by then setting - * data and size, some decoders might in addition need other fields like - * flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least - * fields possible. - * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. - * @return On error a negative value is returned, otherwise the number of bytes - * used or zero if no frame could be decompressed. - * - * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). - */ -attribute_deprecated -int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, - int *got_picture_ptr, - const AVPacket *avpkt); -#endif - -/** - * Decode a subtitle message. - * Return a negative value on error, otherwise return the number of bytes used. - * If no subtitle could be decompressed, got_sub_ptr is zero. - * Otherwise, the subtitle is stored in *sub. - * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for - * simplicity, because the performance difference is expected to be negligible - * and reusing a get_buffer written for video codecs would probably perform badly - * due to a potentially very different allocation pattern. - * - * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input - * and output. This means that for some packets they will not immediately - * produce decoded output and need to be flushed at the end of decoding to get - * all the decoded data. Flushing is done by calling this function with packets - * with avpkt->data set to NULL and avpkt->size set to 0 until it stops - * returning subtitles. It is safe to flush even those decoders that are not - * marked with AV_CODEC_CAP_DELAY, then no subtitles will be returned. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx the codec context - * @param[out] sub The preallocated AVSubtitle in which the decoded subtitle will be stored, - * must be freed with avsubtitle_free if *got_sub_ptr is set. - * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. - * @param[in] avpkt The input AVPacket containing the input buffer. - */ -int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, - int *got_sub_ptr, - AVPacket *avpkt); - -/** - * Supply raw packet data as input to a decoder. - * - * Internally, this call will copy relevant AVCodecContext fields, which can - * influence decoding per-packet, and apply them when the packet is actually - * decoded. (For example AVCodecContext.skip_frame, which might direct the - * decoder to drop the frame contained by the packet sent with this function.) - * - * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE - * larger than the actual read bytes because some optimized bitstream - * readers read 32 or 64 bits at once and could read over the end. - * - * @warning Do not mix this API with the legacy API (like avcodec_decode_video2()) - * on the same AVCodecContext. It will return unexpected results now - * or in future libavcodec versions. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx codec context - * @param[in] avpkt The input AVPacket. Usually, this will be a single video - * frame, or several complete audio frames. - * Ownership of the packet remains with the caller, and the - * decoder will not write to the packet. The decoder may create - * a reference to the packet data (or copy it if the packet is - * not reference-counted). - * Unlike with older APIs, the packet is always fully consumed, - * and if it contains multiple frames (e.g. some audio codecs), - * will require you to call avcodec_receive_frame() multiple - * times afterwards before you can send a new packet. - * It can be NULL (or an AVPacket with data set to NULL and - * size set to 0); in this case, it is considered a flush - * packet, which signals the end of the stream. Sending the - * first flush packet will return success. Subsequent ones are - * unnecessary and will return AVERROR_EOF. If the decoder - * still has frames buffered, it will return them after sending - * a flush packet. - * - * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): input is not accepted in the current state - user - * must read output with avcodec_receive_frame() (once - * all output is read, the packet should be resent, and - * the call will not fail with EAGAIN). - * AVERROR_EOF: the decoder has been flushed, and no new packets can - * be sent to it (also returned if more than 1 flush - * packet is sent) - * AVERROR(EINVAL): codec not opened, it is an encoder, or requires flush - * AVERROR(ENOMEM): failed to add packet to internal queue, or similar - * other errors: legitimate decoding errors - */ -int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); - -/** - * Return decoded output data from a decoder. - * - * @param avctx codec context - * @param frame This will be set to a reference-counted video or audio - * frame (depending on the decoder type) allocated by the - * decoder. Note that the function will always call - * av_frame_unref(frame) before doing anything else. - * - * @return - * 0: success, a frame was returned - * AVERROR(EAGAIN): output is not available in this state - user must try - * to send new input - * AVERROR_EOF: the decoder has been fully flushed, and there will be - * no more output frames - * AVERROR(EINVAL): codec not opened, or it is an encoder - * AVERROR_INPUT_CHANGED: current decoded frame has changed parameters - * with respect to first decoded frame. Applicable - * when flag AV_CODEC_FLAG_DROPCHANGED is set. - * other negative values: legitimate decoding errors - */ -int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); - -/** - * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet() - * to retrieve buffered output packets. - * - * @param avctx codec context - * @param[in] frame AVFrame containing the raw audio or video frame to be encoded. - * Ownership of the frame remains with the caller, and the - * encoder will not write to the frame. The encoder may create - * a reference to the frame data (or copy it if the frame is - * not reference-counted). - * It can be NULL, in which case it is considered a flush - * packet. This signals the end of the stream. If the encoder - * still has packets buffered, it will return them after this - * call. Once flushing mode has been entered, additional flush - * packets are ignored, and sending frames will return - * AVERROR_EOF. - * - * For audio: - * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame - * can have any number of samples. - * If it is not set, frame->nb_samples must be equal to - * avctx->frame_size for all frames except the last. - * The final frame may be smaller than avctx->frame_size. - * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): input is not accepted in the current state - user - * must read output with avcodec_receive_packet() (once - * all output is read, the packet should be resent, and - * the call will not fail with EAGAIN). - * AVERROR_EOF: the encoder has been flushed, and no new frames can - * be sent to it - * AVERROR(EINVAL): codec not opened, refcounted_frames not set, it is a - * decoder, or requires flush - * AVERROR(ENOMEM): failed to add packet to internal queue, or similar - * other errors: legitimate encoding errors - */ -int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame); - -/** - * Read encoded data from the encoder. - * - * @param avctx codec context - * @param avpkt This will be set to a reference-counted packet allocated by the - * encoder. Note that the function will always call - * av_packet_unref(avpkt) before doing anything else. - * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): output is not available in the current state - user - * must try to send input - * AVERROR_EOF: the encoder has been fully flushed, and there will be - * no more output packets - * AVERROR(EINVAL): codec not opened, or it is a decoder - * other errors: legitimate encoding errors - */ -int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt); - -/** - * Create and return a AVHWFramesContext with values adequate for hardware - * decoding. This is meant to get called from the get_format callback, and is - * a helper for preparing a AVHWFramesContext for AVCodecContext.hw_frames_ctx. - * This API is for decoding with certain hardware acceleration modes/APIs only. - * - * The returned AVHWFramesContext is not initialized. The caller must do this - * with av_hwframe_ctx_init(). - * - * Calling this function is not a requirement, but makes it simpler to avoid - * codec or hardware API specific details when manually allocating frames. - * - * Alternatively to this, an API user can set AVCodecContext.hw_device_ctx, - * which sets up AVCodecContext.hw_frames_ctx fully automatically, and makes - * it unnecessary to call this function or having to care about - * AVHWFramesContext initialization at all. - * - * There are a number of requirements for calling this function: - * - * - It must be called from get_format with the same avctx parameter that was - * passed to get_format. Calling it outside of get_format is not allowed, and - * can trigger undefined behavior. - * - The function is not always supported (see description of return values). - * Even if this function returns successfully, hwaccel initialization could - * fail later. (The degree to which implementations check whether the stream - * is actually supported varies. Some do this check only after the user's - * get_format callback returns.) - * - The hw_pix_fmt must be one of the choices suggested by get_format. If the - * user decides to use a AVHWFramesContext prepared with this API function, - * the user must return the same hw_pix_fmt from get_format. - * - The device_ref passed to this function must support the given hw_pix_fmt. - * - After calling this API function, it is the user's responsibility to - * initialize the AVHWFramesContext (returned by the out_frames_ref parameter), - * and to set AVCodecContext.hw_frames_ctx to it. If done, this must be done - * before returning from get_format (this is implied by the normal - * AVCodecContext.hw_frames_ctx API rules). - * - The AVHWFramesContext parameters may change every time time get_format is - * called. Also, AVCodecContext.hw_frames_ctx is reset before get_format. So - * you are inherently required to go through this process again on every - * get_format call. - * - It is perfectly possible to call this function without actually using - * the resulting AVHWFramesContext. One use-case might be trying to reuse a - * previously initialized AVHWFramesContext, and calling this API function - * only to test whether the required frame parameters have changed. - * - Fields that use dynamically allocated values of any kind must not be set - * by the user unless setting them is explicitly allowed by the documentation. - * If the user sets AVHWFramesContext.free and AVHWFramesContext.user_opaque, - * the new free callback must call the potentially set previous free callback. - * This API call may set any dynamically allocated fields, including the free - * callback. - * - * The function will set at least the following fields on AVHWFramesContext - * (potentially more, depending on hwaccel API): - * - * - All fields set by av_hwframe_ctx_alloc(). - * - Set the format field to hw_pix_fmt. - * - Set the sw_format field to the most suited and most versatile format. (An - * implication is that this will prefer generic formats over opaque formats - * with arbitrary restrictions, if possible.) - * - Set the width/height fields to the coded frame size, rounded up to the - * API-specific minimum alignment. - * - Only _if_ the hwaccel requires a pre-allocated pool: set the initial_pool_size - * field to the number of maximum reference surfaces possible with the codec, - * plus 1 surface for the user to work (meaning the user can safely reference - * at most 1 decoded surface at a time), plus additional buffering introduced - * by frame threading. If the hwaccel does not require pre-allocation, the - * field is left to 0, and the decoder will allocate new surfaces on demand - * during decoding. - * - Possibly AVHWFramesContext.hwctx fields, depending on the underlying - * hardware API. - * - * Essentially, out_frames_ref returns the same as av_hwframe_ctx_alloc(), but - * with basic frame parameters set. - * - * The function is stateless, and does not change the AVCodecContext or the - * device_ref AVHWDeviceContext. - * - * @param avctx The context which is currently calling get_format, and which - * implicitly contains all state needed for filling the returned - * AVHWFramesContext properly. - * @param device_ref A reference to the AVHWDeviceContext describing the device - * which will be used by the hardware decoder. - * @param hw_pix_fmt The hwaccel format you are going to return from get_format. - * @param out_frames_ref On success, set to a reference to an _uninitialized_ - * AVHWFramesContext, created from the given device_ref. - * Fields will be set to values required for decoding. - * Not changed if an error is returned. - * @return zero on success, a negative value on error. The following error codes - * have special semantics: - * AVERROR(ENOENT): the decoder does not support this functionality. Setup - * is always manual, or it is a decoder which does not - * support setting AVCodecContext.hw_frames_ctx at all, - * or it is a software format. - * AVERROR(EINVAL): it is known that hardware decoding is not supported for - * this configuration, or the device_ref is not supported - * for the hwaccel referenced by hw_pix_fmt. - */ -int avcodec_get_hw_frames_parameters(AVCodecContext *avctx, - AVBufferRef *device_ref, - enum AVPixelFormat hw_pix_fmt, - AVBufferRef **out_frames_ref); - - - -/** - * @defgroup lavc_parsing Frame parsing - * @{ - */ - -enum AVPictureStructure { - AV_PICTURE_STRUCTURE_UNKNOWN, //< unknown - AV_PICTURE_STRUCTURE_TOP_FIELD, //< coded as top field - AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field - AV_PICTURE_STRUCTURE_FRAME, //< coded as frame -}; - -typedef struct AVCodecParserContext { - void *priv_data; - struct AVCodecParser *parser; - int64_t frame_offset; /* offset of the current frame */ - int64_t cur_offset; /* current offset - (incremented by each av_parser_parse()) */ - int64_t next_frame_offset; /* offset of the next frame */ - /* video info */ - int pict_type; /* XXX: Put it back in AVCodecContext. */ - /** - * This field is used for proper frame duration computation in lavf. - * It signals, how much longer the frame duration of the current frame - * is compared to normal frame duration. - * - * frame_duration = (1 + repeat_pict) * time_base - * - * It is used by codecs like H.264 to display telecined material. - */ - int repeat_pict; /* XXX: Put it back in AVCodecContext. */ - int64_t pts; /* pts of the current frame */ - int64_t dts; /* dts of the current frame */ - - /* private data */ - int64_t last_pts; - int64_t last_dts; - int fetch_timestamp; - -#define AV_PARSER_PTS_NB 4 - int cur_frame_start_index; - int64_t cur_frame_offset[AV_PARSER_PTS_NB]; - int64_t cur_frame_pts[AV_PARSER_PTS_NB]; - int64_t cur_frame_dts[AV_PARSER_PTS_NB]; - - int flags; -#define PARSER_FLAG_COMPLETE_FRAMES 0x0001 -#define PARSER_FLAG_ONCE 0x0002 -/// Set if the parser has a valid file offset -#define PARSER_FLAG_FETCHED_OFFSET 0x0004 -#define PARSER_FLAG_USE_CODEC_TS 0x1000 - - int64_t offset; ///< byte offset from starting packet start - int64_t cur_frame_end[AV_PARSER_PTS_NB]; - - /** - * Set by parser to 1 for key frames and 0 for non-key frames. - * It is initialized to -1, so if the parser doesn't set this flag, - * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames - * will be used. - */ - int key_frame; - -#if FF_API_CONVERGENCE_DURATION - /** - * @deprecated unused - */ - attribute_deprecated - int64_t convergence_duration; -#endif - - // Timestamp generation support: - /** - * Synchronization point for start of timestamp generation. - * - * Set to >0 for sync point, 0 for no sync point and <0 for undefined - * (default). - * - * For example, this corresponds to presence of H.264 buffering period - * SEI message. - */ - int dts_sync_point; - - /** - * Offset of the current timestamp against last timestamp sync point in - * units of AVCodecContext.time_base. - * - * Set to INT_MIN when dts_sync_point unused. Otherwise, it must - * contain a valid timestamp offset. - * - * Note that the timestamp of sync point has usually a nonzero - * dts_ref_dts_delta, which refers to the previous sync point. Offset of - * the next frame after timestamp sync point will be usually 1. - * - * For example, this corresponds to H.264 cpb_removal_delay. - */ - int dts_ref_dts_delta; - - /** - * Presentation delay of current frame in units of AVCodecContext.time_base. - * - * Set to INT_MIN when dts_sync_point unused. Otherwise, it must - * contain valid non-negative timestamp delta (presentation time of a frame - * must not lie in the past). - * - * This delay represents the difference between decoding and presentation - * time of the frame. - * - * For example, this corresponds to H.264 dpb_output_delay. - */ - int pts_dts_delta; - - /** - * Position of the packet in file. - * - * Analogous to cur_frame_pts/dts - */ - int64_t cur_frame_pos[AV_PARSER_PTS_NB]; - - /** - * Byte position of currently parsed frame in stream. - */ - int64_t pos; - - /** - * Previous frame byte position. - */ - int64_t last_pos; - - /** - * Duration of the current frame. - * For audio, this is in units of 1 / AVCodecContext.sample_rate. - * For all other types, this is in units of AVCodecContext.time_base. - */ - int duration; - - enum AVFieldOrder field_order; - - /** - * Indicate whether a picture is coded as a frame, top field or bottom field. - * - * For example, H.264 field_pic_flag equal to 0 corresponds to - * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag - * equal to 1 and bottom_field_flag equal to 0 corresponds to - * AV_PICTURE_STRUCTURE_TOP_FIELD. - */ - enum AVPictureStructure picture_structure; - - /** - * Picture number incremented in presentation or output order. - * This field may be reinitialized at the first picture of a new sequence. - * - * For example, this corresponds to H.264 PicOrderCnt. - */ - int output_picture_number; - - /** - * Dimensions of the decoded video intended for presentation. - */ - int width; - int height; - - /** - * Dimensions of the coded video. - */ - int coded_width; - int coded_height; - - /** - * The format of the coded data, corresponds to enum AVPixelFormat for video - * and for enum AVSampleFormat for audio. - * - * Note that a decoder can have considerable freedom in how exactly it - * decodes the data, so the format reported here might be different from the - * one returned by a decoder. - */ - int format; -} AVCodecParserContext; - -typedef struct AVCodecParser { - int codec_ids[5]; /* several codec IDs are permitted */ - int priv_data_size; - int (*parser_init)(AVCodecParserContext *s); - /* This callback never returns an error, a negative value means that - * the frame start was in a previous packet. */ - int (*parser_parse)(AVCodecParserContext *s, - AVCodecContext *avctx, - const uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size); - void (*parser_close)(AVCodecParserContext *s); - int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size); -#if FF_API_NEXT - attribute_deprecated - struct AVCodecParser *next; -#endif -} AVCodecParser; - -/** - * Iterate over all registered codec parsers. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered codec parser or NULL when the iteration is - * finished - */ -const AVCodecParser *av_parser_iterate(void **opaque); - -#if FF_API_NEXT -attribute_deprecated -AVCodecParser *av_parser_next(const AVCodecParser *c); - -attribute_deprecated -void av_register_codec_parser(AVCodecParser *parser); -#endif -AVCodecParserContext *av_parser_init(int codec_id); - -/** - * Parse a packet. - * - * @param s parser context. - * @param avctx codec context. - * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. - * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. - * @param buf input buffer. - * @param buf_size buffer size in bytes without the padding. I.e. the full buffer - size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE. - To signal EOF, this should be 0 (so that the last frame - can be output). - * @param pts input presentation timestamp. - * @param dts input decoding timestamp. - * @param pos input byte position in stream. - * @return the number of bytes of the input bitstream used. - * - * Example: - * @code - * while(in_len){ - * len = av_parser_parse2(myparser, AVCodecContext, &data, &size, - * in_data, in_len, - * pts, dts, pos); - * in_data += len; - * in_len -= len; - * - * if(size) - * decode_frame(data, size); - * } - * @endcode - */ -int av_parser_parse2(AVCodecParserContext *s, - AVCodecContext *avctx, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, - int64_t pts, int64_t dts, - int64_t pos); - -#if FF_API_PARSER_CHANGE -/** - * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed - * @deprecated Use dump_extradata, remove_extra or extract_extradata - * bitstream filters instead. - */ -attribute_deprecated -int av_parser_change(AVCodecParserContext *s, - AVCodecContext *avctx, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, int keyframe); -#endif -void av_parser_close(AVCodecParserContext *s); - -/** - * @} - * @} - */ - -/** - * @addtogroup lavc_encoding - * @{ - */ - -#if FF_API_OLD_ENCDEC -/** - * Encode a frame of audio. - * - * Takes input samples from frame and writes the next output packet, if - * available, to avpkt. The output packet does not necessarily contain data for - * the most recent frame, as encoders can delay, split, and combine input frames - * internally as needed. - * - * @param avctx codec context - * @param avpkt output AVPacket. - * The user can supply an output buffer by setting - * avpkt->data and avpkt->size prior to calling the - * function, but if the size of the user-provided data is not - * large enough, encoding will fail. If avpkt->data and - * avpkt->size are set, avpkt->destruct must also be set. All - * other AVPacket fields will be reset by the encoder using - * av_init_packet(). If avpkt->data is NULL, the encoder will - * allocate it. The encoder will set avpkt->size to the size - * of the output packet. - * - * If this function fails or produces no output, avpkt will be - * freed using av_packet_unref(). - * @param[in] frame AVFrame containing the raw audio data to be encoded. - * May be NULL when flushing an encoder that has the - * AV_CODEC_CAP_DELAY capability set. - * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame - * can have any number of samples. - * If it is not set, frame->nb_samples must be equal to - * avctx->frame_size for all frames except the last. - * The final frame may be smaller than avctx->frame_size. - * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the - * output packet is non-empty, and to 0 if it is - * empty. If the function returns an error, the - * packet can be assumed to be invalid, and the - * value of got_packet_ptr is undefined and should - * not be used. - * @return 0 on success, negative error code on failure - * - * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. - * If allowed and required, set AVCodecContext.get_encode_buffer to - * a custom function to pass user supplied output buffers. - */ -attribute_deprecated -int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, - const AVFrame *frame, int *got_packet_ptr); - -/** - * Encode a frame of video. - * - * Takes input raw video data from frame and writes the next output packet, if - * available, to avpkt. The output packet does not necessarily contain data for - * the most recent frame, as encoders can delay and reorder input frames - * internally as needed. - * - * @param avctx codec context - * @param avpkt output AVPacket. - * The user can supply an output buffer by setting - * avpkt->data and avpkt->size prior to calling the - * function, but if the size of the user-provided data is not - * large enough, encoding will fail. All other AVPacket fields - * will be reset by the encoder using av_init_packet(). If - * avpkt->data is NULL, the encoder will allocate it. - * The encoder will set avpkt->size to the size of the - * output packet. The returned data (if any) belongs to the - * caller, he is responsible for freeing it. - * - * If this function fails or produces no output, avpkt will be - * freed using av_packet_unref(). - * @param[in] frame AVFrame containing the raw video data to be encoded. - * May be NULL when flushing an encoder that has the - * AV_CODEC_CAP_DELAY capability set. - * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the - * output packet is non-empty, and to 0 if it is - * empty. If the function returns an error, the - * packet can be assumed to be invalid, and the - * value of got_packet_ptr is undefined and should - * not be used. - * @return 0 on success, negative error code on failure - * - * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. - * If allowed and required, set AVCodecContext.get_encode_buffer to - * a custom function to pass user supplied output buffers. - */ -attribute_deprecated -int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, - const AVFrame *frame, int *got_packet_ptr); -#endif - -int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, - const AVSubtitle *sub); - - -/** - * @} - */ - -#if FF_API_AVPICTURE -/** - * @addtogroup lavc_picture - * @{ - */ - -/** - * @deprecated unused - */ -attribute_deprecated -int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated unused - */ -attribute_deprecated -void avpicture_free(AVPicture *picture); - -/** - * @deprecated use av_image_fill_arrays() instead. - */ -attribute_deprecated -int avpicture_fill(AVPicture *picture, const uint8_t *ptr, - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated use av_image_copy_to_buffer() instead. - */ -attribute_deprecated -int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt, - int width, int height, - unsigned char *dest, int dest_size); - -/** - * @deprecated use av_image_get_buffer_size() instead. - */ -attribute_deprecated -int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated av_image_copy() instead. - */ -attribute_deprecated -void av_picture_copy(AVPicture *dst, const AVPicture *src, - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * @deprecated unused - */ -attribute_deprecated -int av_picture_crop(AVPicture *dst, const AVPicture *src, - enum AVPixelFormat pix_fmt, int top_band, int left_band); - -/** - * @deprecated unused - */ -attribute_deprecated -int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt, - int padtop, int padbottom, int padleft, int padright, int *color); - -/** - * @} - */ -#endif - -/** - * @defgroup lavc_misc Utility functions - * @ingroup libavc - * - * Miscellaneous utility functions related to both encoding and decoding - * (or neither). - * @{ - */ - -/** - * @defgroup lavc_misc_pixfmt Pixel formats - * - * Functions for working with pixel formats. - * @{ - */ - -#if FF_API_GETCHROMA -/** - * @deprecated Use av_pix_fmt_get_chroma_sub_sample - */ - -attribute_deprecated -void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift); -#endif - -/** - * Return a value representing the fourCC code associated to the - * pixel format pix_fmt, or 0 if no associated fourCC code can be - * found. - */ -unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt); - -/** - * Find the best pixel format to convert to given a certain source pixel - * format. When converting from one pixel format to another, information loss - * may occur. For example, when converting from RGB24 to GRAY, the color - * information will be lost. Similarly, other losses occur when converting from - * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of - * the given pixel formats should be used to suffer the least amount of loss. - * The pixel formats from which it chooses one, are determined by the - * pix_fmt_list parameter. - * - * - * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. - * @return The best pixel format to convert to or -1 if none was found. - */ -enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list, - enum AVPixelFormat src_pix_fmt, - int has_alpha, int *loss_ptr); - -#if FF_API_AVCODEC_PIX_FMT -/** - * @deprecated see av_get_pix_fmt_loss() - */ -attribute_deprecated -int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, - int has_alpha); -/** - * @deprecated see av_find_best_pix_fmt_of_2() - */ -attribute_deprecated -enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); - -attribute_deprecated -enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); -#endif - -enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - -/** - * @} - */ - -#if FF_API_TAG_STRING -/** - * Put a string representing the codec tag codec_tag in buf. - * - * @param buf buffer to place codec tag in - * @param buf_size size in bytes of buf - * @param codec_tag codec tag to assign - * @return the length of the string that would have been generated if - * enough space had been available, excluding the trailing null - * - * @deprecated see av_fourcc_make_string() and av_fourcc2str(). - */ -attribute_deprecated -size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag); -#endif - -void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); - -/** - * Return a name for the specified profile, if available. - * - * @param codec the codec that is searched for the given profile - * @param profile the profile value for which a name is requested - * @return A name for the profile if found, NULL otherwise. - */ -const char *av_get_profile_name(const AVCodec *codec, int profile); - -/** - * Return a name for the specified profile, if available. - * - * @param codec_id the ID of the codec to which the requested profile belongs - * @param profile the profile value for which a name is requested - * @return A name for the profile if found, NULL otherwise. - * - * @note unlike av_get_profile_name(), which searches a list of profiles - * supported by a specific decoder or encoder implementation, this - * function searches the list of profiles from the AVCodecDescriptor - */ -const char *avcodec_profile_name(enum AVCodecID codec_id, int profile); - -int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); -int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); -//FIXME func typedef - -/** - * Fill AVFrame audio data and linesize pointers. - * - * The buffer buf must be a preallocated buffer with a size big enough - * to contain the specified samples amount. The filled AVFrame data - * pointers will point to this buffer. - * - * AVFrame extended_data channel pointers are allocated if necessary for - * planar audio. - * - * @param frame the AVFrame - * frame->nb_samples must be set prior to calling the - * function. This function fills in frame->data, - * frame->extended_data, frame->linesize[0]. - * @param nb_channels channel count - * @param sample_fmt sample format - * @param buf buffer to use for frame data - * @param buf_size size of buffer - * @param align plane size sample alignment (0 = default) - * @return >=0 on success, negative error code on failure - * @todo return the size in bytes required to store the samples in - * case of success, at the next libavutil bump - */ -int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, - enum AVSampleFormat sample_fmt, const uint8_t *buf, - int buf_size, int align); - -/** - * Reset the internal codec state / flush internal buffers. Should be called - * e.g. when seeking or when switching to a different stream. - * - * @note for decoders, when refcounted frames are not used - * (i.e. avctx->refcounted_frames is 0), this invalidates the frames previously - * returned from the decoder. When refcounted frames are used, the decoder just - * releases any references it might keep internally, but the caller's reference - * remains valid. - * - * @note for encoders, this function will only do something if the encoder - * declares support for AV_CODEC_CAP_ENCODER_FLUSH. When called, the encoder - * will drain any remaining packets, and can then be re-used for a different - * stream (as opposed to sending a null frame which will leave the encoder - * in a permanent EOF state after draining). This can be desirable if the - * cost of tearing down and replacing the encoder instance is high. - */ -void avcodec_flush_buffers(AVCodecContext *avctx); - -/** - * Return codec bits per sample. - * - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ -int av_get_bits_per_sample(enum AVCodecID codec_id); - -/** - * Return the PCM codec associated with a sample format. - * @param be endianness, 0 for little, 1 for big, - * -1 (or anything else) for native - * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE - */ -enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be); - -/** - * Return codec bits per sample. - * Only return non-zero if the bits per sample is exactly correct, not an - * approximation. - * - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ -int av_get_exact_bits_per_sample(enum AVCodecID codec_id); - -/** - * Return audio frame duration. - * - * @param avctx codec context - * @param frame_bytes size of the frame, or 0 if unknown - * @return frame duration, in samples, if known. 0 if not able to - * determine. - */ -int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); - -/** - * This function is the same as av_get_audio_frame_duration(), except it works - * with AVCodecParameters instead of an AVCodecContext. - */ -int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes); - -#if FF_API_OLD_BSF -typedef struct AVBitStreamFilterContext { - void *priv_data; - const struct AVBitStreamFilter *filter; - AVCodecParserContext *parser; - struct AVBitStreamFilterContext *next; - /** - * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter(). - * Not for access by library users. - */ - char *args; -} AVBitStreamFilterContext; - -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use the new bitstream filtering API (using AVBSFContext). - */ -attribute_deprecated -void av_register_bitstream_filter(AVBitStreamFilter *bsf); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_get_by_name(), av_bsf_alloc(), and av_bsf_init() - * from the new bitstream filtering API (using AVBSFContext). - */ -attribute_deprecated -AVBitStreamFilterContext *av_bitstream_filter_init(const char *name); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_send_packet() and av_bsf_receive_packet() from the - * new bitstream filtering API (using AVBSFContext). - */ -attribute_deprecated -int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, - AVCodecContext *avctx, const char *args, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, int keyframe); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_free() from the new bitstream filtering API (using - * AVBSFContext). - */ -attribute_deprecated -void av_bitstream_filter_close(AVBitStreamFilterContext *bsf); -/** - * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) - * is deprecated. Use av_bsf_iterate() from the new bitstream filtering API (using - * AVBSFContext). - */ -attribute_deprecated -const AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f); -#endif - -#if FF_API_NEXT -attribute_deprecated -const AVBitStreamFilter *av_bsf_next(void **opaque); -#endif - -/* memory */ - -/** - * Same behaviour av_fast_malloc but the buffer has additional - * AV_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0. - * - * In addition the whole buffer will initially and after resizes - * be 0-initialized so that no uninitialized data will ever appear. - */ -void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Same behaviour av_fast_padded_malloc except that buffer will always - * be 0-initialized after call. - */ -void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); - -/** - * Encode extradata length to a buffer. Used by xiph codecs. - * - * @param s buffer to write to; must be at least (v/255+1) bytes long - * @param v size of extradata in bytes - * @return number of bytes written to the buffer. - */ -unsigned int av_xiphlacing(unsigned char *s, unsigned int v); - -#if FF_API_USER_VISIBLE_AVHWACCEL -/** - * Register the hardware accelerator hwaccel. - * - * @deprecated This function doesn't do anything. - */ -attribute_deprecated -void av_register_hwaccel(AVHWAccel *hwaccel); - -/** - * If hwaccel is NULL, returns the first registered hardware accelerator, - * if hwaccel is non-NULL, returns the next registered hardware accelerator - * after hwaccel, or NULL if hwaccel is the last one. - * - * @deprecated AVHWaccel structures contain no user-serviceable parts, so - * this function should not be used. - */ -attribute_deprecated -AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel); -#endif - -#if FF_API_LOCKMGR -/** - * Lock operation used by lockmgr - * - * @deprecated Deprecated together with av_lockmgr_register(). - */ -enum AVLockOp { - AV_LOCK_CREATE, ///< Create a mutex - AV_LOCK_OBTAIN, ///< Lock the mutex - AV_LOCK_RELEASE, ///< Unlock the mutex - AV_LOCK_DESTROY, ///< Free mutex resources -}; - -/** - * Register a user provided lock manager supporting the operations - * specified by AVLockOp. The "mutex" argument to the function points - * to a (void *) where the lockmgr should store/get a pointer to a user - * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the - * value left by the last call for all other ops. If the lock manager is - * unable to perform the op then it should leave the mutex in the same - * state as when it was called and return a non-zero value. However, - * when called with AV_LOCK_DESTROY the mutex will always be assumed to - * have been successfully destroyed. If av_lockmgr_register succeeds - * it will return a non-negative value, if it fails it will return a - * negative value and destroy all mutex and unregister all callbacks. - * av_lockmgr_register is not thread-safe, it must be called from a - * single thread before any calls which make use of locking are used. - * - * @param cb User defined callback. av_lockmgr_register invokes calls - * to this callback and the previously registered callback. - * The callback will be used to create more than one mutex - * each of which must be backed by its own underlying locking - * mechanism (i.e. do not use a single static object to - * implement your lock manager). If cb is set to NULL the - * lockmgr will be unregistered. - * - * @deprecated This function does nothing, and always returns 0. Be sure to - * build with thread support to get basic thread safety. - */ -attribute_deprecated -int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)); -#endif - -/** - * @return a positive value if s is open (i.e. avcodec_open2() was called on it - * with no corresponding avcodec_close()), 0 otherwise. - */ -int avcodec_is_open(AVCodecContext *s); - -/** - * Allocate a CPB properties structure and initialize its fields to default - * values. - * - * @param size if non-NULL, the size of the allocated struct will be written - * here. This is useful for embedding it in side data. - * - * @return the newly allocated struct or NULL on failure - */ -AVCPBProperties *av_cpb_properties_alloc(size_t *size); - -/** - * @} - */ - -#endif /* AVCODEC_AVCODEC_H */ diff --git a/prebuilts/x86_64/include/libavcodec/avdct.h b/prebuilts/x86_64/include/libavcodec/avdct.h deleted file mode 100644 index 6411fab..0000000 --- a/prebuilts/x86_64/include/libavcodec/avdct.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVDCT_H -#define AVCODEC_AVDCT_H - -#include "libavutil/opt.h" - -/** - * AVDCT context. - * @note function pointers can be NULL if the specific features have been - * disabled at build time. - */ -typedef struct AVDCT { - const AVClass *av_class; - - void (*idct)(int16_t *block /* align 16 */); - - /** - * IDCT input permutation. - * Several optimized IDCTs need a permutated input (relative to the - * normal order of the reference IDCT). - * This permutation must be performed before the idct_put/add. - * Note, normally this can be merged with the zigzag/alternate scan
- * An example to avoid confusion: - * - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...) - * - (x -> reference DCT -> reference IDCT -> x) - * - (x -> reference DCT -> simple_mmx_perm = idct_permutation - * -> simple_idct_mmx -> x) - * - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant - * -> simple_idct_mmx -> ...) - */ - uint8_t idct_permutation[64]; - - void (*fdct)(int16_t *block /* align 16 */); - - - /** - * DCT algorithm. - * must use AVOptions to set this field. - */ - int dct_algo; - - /** - * IDCT algorithm. - * must use AVOptions to set this field. - */ - int idct_algo; - - void (*get_pixels)(int16_t *block /* align 16 */, - const uint8_t *pixels /* align 8 */, - ptrdiff_t line_size); - - int bits_per_sample; - - void (*get_pixels_unaligned)(int16_t *block /* align 16 */, - const uint8_t *pixels, - ptrdiff_t line_size); -} AVDCT; - -/** - * Allocates a AVDCT context. - * This needs to be initialized with avcodec_dct_init() after optionally - * configuring it with AVOptions. - * - * To free it use av_free() - */ -AVDCT *avcodec_dct_alloc(void); -int avcodec_dct_init(AVDCT *); - -const AVClass *avcodec_dct_get_class(void); - -#endif /* AVCODEC_AVDCT_H */ diff --git a/prebuilts/x86_64/include/libavcodec/avfft.h b/prebuilts/x86_64/include/libavcodec/avfft.h deleted file mode 100644 index 0c0f9b8..0000000 --- a/prebuilts/x86_64/include/libavcodec/avfft.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVFFT_H -#define AVCODEC_AVFFT_H - -/** - * @file - * @ingroup lavc_fft - * FFT functions - */ - -/** - * @defgroup lavc_fft FFT functions - * @ingroup lavc_misc - * - * @{ - */ - -typedef float FFTSample; - -typedef struct FFTComplex { - FFTSample re, im; -} FFTComplex; - -typedef struct FFTContext FFTContext; - -/** - * Set up a complex FFT. - * @param nbits log2 of the length of the input array - * @param inverse if 0 perform the forward transform, if 1 perform the inverse - */ -FFTContext *av_fft_init(int nbits, int inverse); - -/** - * Do the permutation needed BEFORE calling ff_fft_calc(). - */ -void av_fft_permute(FFTContext *s, FFTComplex *z); - -/** - * Do a complex FFT with the parameters defined in av_fft_init(). The - * input data must be permuted before. No 1.0/sqrt(n) normalization is done. - */ -void av_fft_calc(FFTContext *s, FFTComplex *z); - -void av_fft_end(FFTContext *s); - -FFTContext *av_mdct_init(int nbits, int inverse, double scale); -void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_mdct_end(FFTContext *s); - -/* Real Discrete Fourier Transform */ - -enum RDFTransformType { - DFT_R2C, - IDFT_C2R, - IDFT_R2C, - DFT_C2R, -}; - -typedef struct RDFTContext RDFTContext; - -/** - * Set up a real FFT. - * @param nbits log2 of the length of the input array - * @param trans the type of transform - */ -RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans); -void av_rdft_calc(RDFTContext *s, FFTSample *data); -void av_rdft_end(RDFTContext *s); - -/* Discrete Cosine Transform */ - -typedef struct DCTContext DCTContext; - -enum DCTTransformType { - DCT_II = 0, - DCT_III, - DCT_I, - DST_I, -}; - -/** - * Set up DCT. - * - * @param nbits size of the input array: - * (1 << nbits) for DCT-II, DCT-III and DST-I - * (1 << nbits) + 1 for DCT-I - * @param type the type of transform - * - * @note the first element of the input of DST-I is ignored - */ -DCTContext *av_dct_init(int nbits, enum DCTTransformType type); -void av_dct_calc(DCTContext *s, FFTSample *data); -void av_dct_end (DCTContext *s); - -/** - * @} - */ - -#endif /* AVCODEC_AVFFT_H */ diff --git a/prebuilts/x86_64/include/libavcodec/bsf.h b/prebuilts/x86_64/include/libavcodec/bsf.h deleted file mode 100644 index 3b5faa8..0000000 --- a/prebuilts/x86_64/include/libavcodec/bsf.h +++ /dev/null @@ -1,325 +0,0 @@ -/* - * Bitstream filters public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_BSF_H -#define AVCODEC_BSF_H - -#include "libavutil/dict.h" -#include "libavutil/log.h" -#include "libavutil/rational.h" - -#include "codec_id.h" -#include "codec_par.h" -#include "packet.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -typedef struct AVBSFInternal AVBSFInternal; - -/** - * The bitstream filter state. - * - * This struct must be allocated with av_bsf_alloc() and freed with - * av_bsf_free(). - * - * The fields in the struct will only be changed (by the caller or by the - * filter) as described in their documentation, and are to be considered - * immutable otherwise. - */ -typedef struct AVBSFContext { - /** - * A class for logging and AVOptions - */ - const AVClass *av_class; - - /** - * The bitstream filter this context is an instance of. - */ - const struct AVBitStreamFilter *filter; - - /** - * Opaque libavcodec internal data. Must not be touched by the caller in any - * way. - */ - AVBSFInternal *internal; - - /** - * Opaque filter-specific private data. If filter->priv_class is non-NULL, - * this is an AVOptions-enabled struct. - */ - void *priv_data; - - /** - * Parameters of the input stream. This field is allocated in - * av_bsf_alloc(), it needs to be filled by the caller before - * av_bsf_init(). - */ - AVCodecParameters *par_in; - - /** - * Parameters of the output stream. This field is allocated in - * av_bsf_alloc(), it is set by the filter in av_bsf_init(). - */ - AVCodecParameters *par_out; - - /** - * The timebase used for the timestamps of the input packets. Set by the - * caller before av_bsf_init(). - */ - AVRational time_base_in; - - /** - * The timebase used for the timestamps of the output packets. Set by the - * filter in av_bsf_init(). - */ - AVRational time_base_out; -} AVBSFContext; - -typedef struct AVBitStreamFilter { - const char *name; - - /** - * A list of codec ids supported by the filter, terminated by - * AV_CODEC_ID_NONE. - * May be NULL, in that case the bitstream filter works with any codec id. - */ - const enum AVCodecID *codec_ids; - - /** - * A class for the private data, used to declare bitstream filter private - * AVOptions. This field is NULL for bitstream filters that do not declare - * any options. - * - * If this field is non-NULL, the first member of the filter private data - * must be a pointer to AVClass, which will be set by libavcodec generic - * code to this class. - */ - const AVClass *priv_class; - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavcodec and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - int priv_data_size; - int (*init)(AVBSFContext *ctx); - int (*filter)(AVBSFContext *ctx, AVPacket *pkt); - void (*close)(AVBSFContext *ctx); - void (*flush)(AVBSFContext *ctx); -} AVBitStreamFilter; - -/** - * @return a bitstream filter with the specified name or NULL if no such - * bitstream filter exists. - */ -const AVBitStreamFilter *av_bsf_get_by_name(const char *name); - -/** - * Iterate over all registered bitstream filters. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered bitstream filter or NULL when the iteration is - * finished - */ -const AVBitStreamFilter *av_bsf_iterate(void **opaque); - -/** - * Allocate a context for a given bitstream filter. The caller must fill in the - * context parameters as described in the documentation and then call - * av_bsf_init() before sending any data to the filter. - * - * @param filter the filter for which to allocate an instance. - * @param ctx a pointer into which the pointer to the newly-allocated context - * will be written. It must be freed with av_bsf_free() after the - * filtering is done. - * - * @return 0 on success, a negative AVERROR code on failure - */ -int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx); - -/** - * Prepare the filter for use, after all the parameters and options have been - * set. - */ -int av_bsf_init(AVBSFContext *ctx); - -/** - * Submit a packet for filtering. - * - * After sending each packet, the filter must be completely drained by calling - * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or - * AVERROR_EOF. - * - * @param pkt the packet to filter. The bitstream filter will take ownership of - * the packet and reset the contents of pkt. pkt is not touched if an error occurs. - * If pkt is empty (i.e. NULL, or pkt->data is NULL and pkt->side_data_elems zero), - * it signals the end of the stream (i.e. no more non-empty packets will be sent; - * sending more empty packets does nothing) and will cause the filter to output - * any packets it may have buffered internally. - * - * @return 0 on success. AVERROR(EAGAIN) if packets need to be retrieved from the - * filter (using av_bsf_receive_packet()) before new input can be consumed. Another - * negative AVERROR value if an error occurs. - */ -int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt); - -/** - * Retrieve a filtered packet. - * - * @param[out] pkt this struct will be filled with the contents of the filtered - * packet. It is owned by the caller and must be freed using - * av_packet_unref() when it is no longer needed. - * This parameter should be "clean" (i.e. freshly allocated - * with av_packet_alloc() or unreffed with av_packet_unref()) - * when this function is called. If this function returns - * successfully, the contents of pkt will be completely - * overwritten by the returned data. On failure, pkt is not - * touched. - * - * @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the - * filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there - * will be no further output from the filter. Another negative AVERROR value if - * an error occurs. - * - * @note one input packet may result in several output packets, so after sending - * a packet with av_bsf_send_packet(), this function needs to be called - * repeatedly until it stops returning 0. It is also possible for a filter to - * output fewer packets than were sent to it, so this function may return - * AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call. - */ -int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt); - -/** - * Reset the internal bitstream filter state. Should be called e.g. when seeking. - */ -void av_bsf_flush(AVBSFContext *ctx); - -/** - * Free a bitstream filter context and everything associated with it; write NULL - * into the supplied pointer. - */ -void av_bsf_free(AVBSFContext **ctx); - -/** - * Get the AVClass for AVBSFContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *av_bsf_get_class(void); - -/** - * Structure for chain/list of bitstream filters. - * Empty list can be allocated by av_bsf_list_alloc(). - */ -typedef struct AVBSFList AVBSFList; - -/** - * Allocate empty list of bitstream filters. - * The list must be later freed by av_bsf_list_free() - * or finalized by av_bsf_list_finalize(). - * - * @return Pointer to @ref AVBSFList on success, NULL in case of failure - */ -AVBSFList *av_bsf_list_alloc(void); - -/** - * Free list of bitstream filters. - * - * @param lst Pointer to pointer returned by av_bsf_list_alloc() - */ -void av_bsf_list_free(AVBSFList **lst); - -/** - * Append bitstream filter to the list of bitstream filters. - * - * @param lst List to append to - * @param bsf Filter context to be appended - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_append(AVBSFList *lst, AVBSFContext *bsf); - -/** - * Construct new bitstream filter context given it's name and options - * and append it to the list of bitstream filters. - * - * @param lst List to append to - * @param bsf_name Name of the bitstream filter - * @param options Options for the bitstream filter, can be set to NULL - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_append2(AVBSFList *lst, const char * bsf_name, AVDictionary **options); -/** - * Finalize list of bitstream filters. - * - * This function will transform @ref AVBSFList to single @ref AVBSFContext, - * so the whole chain of bitstream filters can be treated as single filter - * freshly allocated by av_bsf_alloc(). - * If the call is successful, @ref AVBSFList structure is freed and lst - * will be set to NULL. In case of failure, caller is responsible for - * freeing the structure by av_bsf_list_free() - * - * @param lst Filter list structure to be transformed - * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure - * representing the chain of bitstream filters - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf); - -/** - * Parse string describing list of bitstream filters and create single - * @ref AVBSFContext describing the whole chain of bitstream filters. - * Resulting @ref AVBSFContext can be treated as any other @ref AVBSFContext freshly - * allocated by av_bsf_alloc(). - * - * @param str String describing chain of bitstream filters in format - * `bsf1[=opt1=val1:opt2=val2][,bsf2]` - * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure - * representing the chain of bitstream filters - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf); - -/** - * Get null/pass-through bitstream filter. - * - * @param[out] bsf Pointer to be set to new instance of pass-through bitstream filter - * - * @return - */ -int av_bsf_get_null_filter(AVBSFContext **bsf); - -/** - * @} - */ - -#endif // AVCODEC_BSF_H diff --git a/prebuilts/x86_64/include/libavcodec/codec.h b/prebuilts/x86_64/include/libavcodec/codec.h deleted file mode 100644 index 50a22f6..0000000 --- a/prebuilts/x86_64/include/libavcodec/codec.h +++ /dev/null @@ -1,480 +0,0 @@ -/* - * AVCodec public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_H -#define AVCODEC_CODEC_H - -#include - -#include "libavutil/avutil.h" -#include "libavutil/hwcontext.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" -#include "libavutil/samplefmt.h" - -#include "libavcodec/codec_id.h" -#include "libavcodec/version.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * Decoder can use draw_horiz_band callback. - */ -#define AV_CODEC_CAP_DRAW_HORIZ_BAND (1 << 0) -/** - * Codec uses get_buffer() or get_encode_buffer() for allocating buffers and - * supports custom allocators. - * If not set, it might not use get_buffer() or get_encode_buffer() at all, or - * use operations that assume the buffer was allocated by - * avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer. - */ -#define AV_CODEC_CAP_DR1 (1 << 1) -#define AV_CODEC_CAP_TRUNCATED (1 << 3) -/** - * Encoder or decoder requires flushing with NULL input at the end in order to - * give the complete and correct output. - * - * NOTE: If this flag is not set, the codec is guaranteed to never be fed with - * with NULL data. The user can still send NULL data to the public encode - * or decode function, but libavcodec will not pass it along to the codec - * unless this flag is set. - * - * Decoders: - * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, - * avpkt->size=0 at the end to get the delayed data until the decoder no longer - * returns frames. - * - * Encoders: - * The encoder needs to be fed with NULL data at the end of encoding until the - * encoder no longer returns data. - * - * NOTE: For encoders implementing the AVCodec.encode2() function, setting this - * flag also means that the encoder must set the pts and duration for - * each output packet. If this flag is not set, the pts and duration will - * be determined by libavcodec from the input frame. - */ -#define AV_CODEC_CAP_DELAY (1 << 5) -/** - * Codec can be fed a final frame with a smaller size. - * This can be used to prevent truncation of the last audio samples. - */ -#define AV_CODEC_CAP_SMALL_LAST_FRAME (1 << 6) - -/** - * Codec can output multiple frames per AVPacket - * Normally demuxers return one frame at a time, demuxers which do not do - * are connected to a parser to split what they return into proper frames. - * This flag is reserved to the very rare category of codecs which have a - * bitstream that cannot be split into frames without timeconsuming - * operations like full decoding. Demuxers carrying such bitstreams thus - * may return multiple frames in a packet. This has many disadvantages like - * prohibiting stream copy in many cases thus it should only be considered - * as a last resort. - */ -#define AV_CODEC_CAP_SUBFRAMES (1 << 8) -/** - * Codec is experimental and is thus avoided in favor of non experimental - * encoders - */ -#define AV_CODEC_CAP_EXPERIMENTAL (1 << 9) -/** - * Codec should fill in channel configuration and samplerate instead of container - */ -#define AV_CODEC_CAP_CHANNEL_CONF (1 << 10) -/** - * Codec supports frame-level multithreading. - */ -#define AV_CODEC_CAP_FRAME_THREADS (1 << 12) -/** - * Codec supports slice-based (or partition-based) multithreading. - */ -#define AV_CODEC_CAP_SLICE_THREADS (1 << 13) -/** - * Codec supports changed parameters at any point. - */ -#define AV_CODEC_CAP_PARAM_CHANGE (1 << 14) -/** - * Codec supports multithreading through a method other than slice- or - * frame-level multithreading. Typically this marks wrappers around - * multithreading-capable external libraries. - */ -#define AV_CODEC_CAP_OTHER_THREADS (1 << 15) -#if FF_API_AUTO_THREADS -#define AV_CODEC_CAP_AUTO_THREADS AV_CODEC_CAP_OTHER_THREADS -#endif -/** - * Audio encoder supports receiving a different number of samples in each call. - */ -#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16) -/** - * Decoder is not a preferred choice for probing. - * This indicates that the decoder is not a good choice for probing. - * It could for example be an expensive to spin up hardware decoder, - * or it could simply not provide a lot of useful information about - * the stream. - * A decoder marked with this flag should only be used as last resort - * choice for probing. - */ -#define AV_CODEC_CAP_AVOID_PROBING (1 << 17) - -#if FF_API_UNUSED_CODEC_CAPS -/** - * Deprecated and unused. Use AVCodecDescriptor.props instead - */ -#define AV_CODEC_CAP_INTRA_ONLY 0x40000000 -/** - * Deprecated and unused. Use AVCodecDescriptor.props instead - */ -#define AV_CODEC_CAP_LOSSLESS 0x80000000 -#endif - -/** - * Codec is backed by a hardware implementation. Typically used to - * identify a non-hwaccel hardware decoder. For information about hwaccels, use - * avcodec_get_hw_config() instead. - */ -#define AV_CODEC_CAP_HARDWARE (1 << 18) - -/** - * Codec is potentially backed by a hardware implementation, but not - * necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the - * implementation provides some sort of internal fallback. - */ -#define AV_CODEC_CAP_HYBRID (1 << 19) - -/** - * This codec takes the reordered_opaque field from input AVFrames - * and returns it in the corresponding field in AVCodecContext after - * encoding. - */ -#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20) - -/** - * This encoder can be flushed using avcodec_flush_buffers(). If this flag is - * not set, the encoder must be closed and reopened to ensure that no frames - * remain pending. - */ -#define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21) - -/** - * AVProfile. - */ -typedef struct AVProfile { - int profile; - const char *name; ///< short name for the profile -} AVProfile; - -typedef struct AVCodecDefault AVCodecDefault; - -struct AVCodecContext; -struct AVSubtitle; -struct AVPacket; - -/** - * AVCodec. - */ -typedef struct AVCodec { - /** - * Name of the codec implementation. - * The name is globally unique among encoders and among decoders (but an - * encoder and a decoder can share the same name). - * This is the primary way to find a codec from the user perspective. - */ - const char *name; - /** - * Descriptive name for the codec, meant to be more human readable than name. - * You should use the NULL_IF_CONFIG_SMALL() macro to define it. - */ - const char *long_name; - enum AVMediaType type; - enum AVCodecID id; - /** - * Codec capabilities. - * see AV_CODEC_CAP_* - */ - int capabilities; - const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} - const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 - const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 - const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 - const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 - uint8_t max_lowres; ///< maximum value for lowres supported by the decoder - const AVClass *priv_class; ///< AVClass for the private context - const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} - - /** - * Group name of the codec implementation. - * This is a short symbolic name of the wrapper backing this codec. A - * wrapper uses some kind of external implementation for the codec, such - * as an external library, or a codec implementation provided by the OS or - * the hardware. - * If this field is NULL, this is a builtin, libavcodec native codec. - * If non-NULL, this will be the suffix in AVCodec.name in most cases - * (usually AVCodec.name will be of the form "_"). - */ - const char *wrapper_name; - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavcodec and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - int priv_data_size; -#if FF_API_NEXT - struct AVCodec *next; -#endif - /** - * @name Frame-level threading support functions - * @{ - */ - /** - * Copy necessary context variables from a previous thread context to the current one. - * If not defined, the next thread will start automatically; otherwise, the codec - * must call ff_thread_finish_setup(). - * - * dst and src will (rarely) point to the same context, in which case memcpy should be skipped. - */ - int (*update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src); - /** @} */ - - /** - * Private codec-specific defaults. - */ - const AVCodecDefault *defaults; - - /** - * Initialize codec static data, called from av_codec_iterate(). - * - * This is not intended for time consuming operations as it is - * run for every codec regardless of that codec being used. - */ - void (*init_static_data)(struct AVCodec *codec); - - int (*init)(struct AVCodecContext *); - int (*encode_sub)(struct AVCodecContext *, uint8_t *buf, int buf_size, - const struct AVSubtitle *sub); - /** - * Encode data to an AVPacket. - * - * @param avctx codec context - * @param avpkt output AVPacket - * @param[in] frame AVFrame containing the raw data to be encoded - * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a - * non-empty packet was returned in avpkt. - * @return 0 on success, negative error code on failure - */ - int (*encode2)(struct AVCodecContext *avctx, struct AVPacket *avpkt, - const struct AVFrame *frame, int *got_packet_ptr); - /** - * Decode picture or subtitle data. - * - * @param avctx codec context - * @param outdata codec type dependent output struct - * @param[out] got_frame_ptr decoder sets to 0 or 1 to indicate that a - * non-empty frame or subtitle was returned in - * outdata. - * @param[in] avpkt AVPacket containing the data to be decoded - * @return amount of bytes read from the packet on success, negative error - * code on failure - */ - int (*decode)(struct AVCodecContext *avctx, void *outdata, - int *got_frame_ptr, struct AVPacket *avpkt); - int (*close)(struct AVCodecContext *); - /** - * Encode API with decoupled frame/packet dataflow. This function is called - * to get one output packet. It should call ff_encode_get_frame() to obtain - * input data. - */ - int (*receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt); - - /** - * Decode API with decoupled packet/frame dataflow. This function is called - * to get one output frame. It should call ff_decode_get_packet() to obtain - * input data. - */ - int (*receive_frame)(struct AVCodecContext *avctx, struct AVFrame *frame); - /** - * Flush buffers. - * Will be called when seeking - */ - void (*flush)(struct AVCodecContext *); - /** - * Internal codec capabilities. - * See FF_CODEC_CAP_* in internal.h - */ - int caps_internal; - - /** - * Decoding only, a comma-separated list of bitstream filters to apply to - * packets before decoding. - */ - const char *bsfs; - - /** - * Array of pointers to hardware configurations supported by the codec, - * or NULL if no hardware supported. The array is terminated by a NULL - * pointer. - * - * The user can only access this field via avcodec_get_hw_config(). - */ - const struct AVCodecHWConfigInternal *const *hw_configs; - - /** - * List of supported codec_tags, terminated by FF_CODEC_TAGS_END. - */ - const uint32_t *codec_tags; -} AVCodec; - -/** - * Iterate over all registered codecs. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered codec or NULL when the iteration is - * finished - */ -const AVCodec *av_codec_iterate(void **opaque); - -/** - * Find a registered decoder with a matching codec ID. - * - * @param id AVCodecID of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_decoder(enum AVCodecID id); - -/** - * Find a registered decoder with the specified name. - * - * @param name name of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_decoder_by_name(const char *name); - -/** - * Find a registered encoder with a matching codec ID. - * - * @param id AVCodecID of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_encoder(enum AVCodecID id); - -/** - * Find a registered encoder with the specified name. - * - * @param name name of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_encoder_by_name(const char *name); -/** - * @return a non-zero number if codec is an encoder, zero otherwise - */ -int av_codec_is_encoder(const AVCodec *codec); - -/** - * @return a non-zero number if codec is a decoder, zero otherwise - */ -int av_codec_is_decoder(const AVCodec *codec); - -enum { - /** - * The codec supports this format via the hw_device_ctx interface. - * - * When selecting this format, AVCodecContext.hw_device_ctx should - * have been set to a device of the specified type before calling - * avcodec_open2(). - */ - AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX = 0x01, - /** - * The codec supports this format via the hw_frames_ctx interface. - * - * When selecting this format for a decoder, - * AVCodecContext.hw_frames_ctx should be set to a suitable frames - * context inside the get_format() callback. The frames context - * must have been created on a device of the specified type. - * - * When selecting this format for an encoder, - * AVCodecContext.hw_frames_ctx should be set to the context which - * will be used for the input frames before calling avcodec_open2(). - */ - AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = 0x02, - /** - * The codec supports this format by some internal method. - * - * This format can be selected without any additional configuration - - * no device or frames context is required. - */ - AV_CODEC_HW_CONFIG_METHOD_INTERNAL = 0x04, - /** - * The codec supports this format by some ad-hoc method. - * - * Additional settings and/or function calls are required. See the - * codec-specific documentation for details. (Methods requiring - * this sort of configuration are deprecated and others should be - * used in preference.) - */ - AV_CODEC_HW_CONFIG_METHOD_AD_HOC = 0x08, -}; - -typedef struct AVCodecHWConfig { - /** - * For decoders, a hardware pixel format which that decoder may be - * able to decode to if suitable hardware is available. - * - * For encoders, a pixel format which the encoder may be able to - * accept. If set to AV_PIX_FMT_NONE, this applies to all pixel - * formats supported by the codec. - */ - enum AVPixelFormat pix_fmt; - /** - * Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible - * setup methods which can be used with this configuration. - */ - int methods; - /** - * The device type associated with the configuration. - * - * Must be set for AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX and - * AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, otherwise unused. - */ - enum AVHWDeviceType device_type; -} AVCodecHWConfig; - -/** - * Retrieve supported hardware configurations for a codec. - * - * Values of index from zero to some maximum return the indexed configuration - * descriptor; all other values return NULL. If the codec does not support - * any hardware configurations then it will always return NULL. - */ -const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *codec, int index); - -/** - * @} - */ - -#endif /* AVCODEC_CODEC_H */ diff --git a/prebuilts/x86_64/include/libavcodec/codec_desc.h b/prebuilts/x86_64/include/libavcodec/codec_desc.h deleted file mode 100644 index 126b52d..0000000 --- a/prebuilts/x86_64/include/libavcodec/codec_desc.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Codec descriptors public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_DESC_H -#define AVCODEC_CODEC_DESC_H - -#include "libavutil/avutil.h" - -#include "codec_id.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * This struct describes the properties of a single codec described by an - * AVCodecID. - * @see avcodec_descriptor_get() - */ -typedef struct AVCodecDescriptor { - enum AVCodecID id; - enum AVMediaType type; - /** - * Name of the codec described by this descriptor. It is non-empty and - * unique for each codec descriptor. It should contain alphanumeric - * characters and '_' only. - */ - const char *name; - /** - * A more descriptive name for this codec. May be NULL. - */ - const char *long_name; - /** - * Codec properties, a combination of AV_CODEC_PROP_* flags. - */ - int props; - /** - * MIME type(s) associated with the codec. - * May be NULL; if not, a NULL-terminated array of MIME types. - * The first item is always non-NULL and is the preferred MIME type. - */ - const char *const *mime_types; - /** - * If non-NULL, an array of profiles recognized for this codec. - * Terminated with FF_PROFILE_UNKNOWN. - */ - const struct AVProfile *profiles; -} AVCodecDescriptor; - -/** - * Codec uses only intra compression. - * Video and audio codecs only. - */ -#define AV_CODEC_PROP_INTRA_ONLY (1 << 0) -/** - * Codec supports lossy compression. Audio and video codecs only. - * @note a codec may support both lossy and lossless - * compression modes - */ -#define AV_CODEC_PROP_LOSSY (1 << 1) -/** - * Codec supports lossless compression. Audio and video codecs only. - */ -#define AV_CODEC_PROP_LOSSLESS (1 << 2) -/** - * Codec supports frame reordering. That is, the coded order (the order in which - * the encoded packets are output by the encoders / stored / input to the - * decoders) may be different from the presentation order of the corresponding - * frames. - * - * For codecs that do not have this property set, PTS and DTS should always be - * equal. - */ -#define AV_CODEC_PROP_REORDER (1 << 3) -/** - * Subtitle codec is bitmap based - * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. - */ -#define AV_CODEC_PROP_BITMAP_SUB (1 << 16) -/** - * Subtitle codec is text based. - * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. - */ -#define AV_CODEC_PROP_TEXT_SUB (1 << 17) - -/** - * @return descriptor for given codec ID or NULL if no descriptor exists. - */ -const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id); - -/** - * Iterate over all codec descriptors known to libavcodec. - * - * @param prev previous descriptor. NULL to get the first descriptor. - * - * @return next descriptor or NULL after the last descriptor - */ -const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev); - -/** - * @return codec descriptor with the given name or NULL if no such descriptor - * exists. - */ -const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name); - -/** - * @} - */ - -#endif // AVCODEC_CODEC_DESC_H diff --git a/prebuilts/x86_64/include/libavcodec/codec_id.h b/prebuilts/x86_64/include/libavcodec/codec_id.h deleted file mode 100644 index ab7bc68..0000000 --- a/prebuilts/x86_64/include/libavcodec/codec_id.h +++ /dev/null @@ -1,592 +0,0 @@ -/* - * Codec IDs - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_ID_H -#define AVCODEC_CODEC_ID_H - -#include "libavutil/avutil.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * Identify the syntax and semantics of the bitstream. - * The principle is roughly: - * Two decoders with the same ID can decode the same streams. - * Two encoders with the same ID can encode compatible streams. - * There may be slight deviations from the principle due to implementation - * details. - * - * If you add a codec ID to this list, add it so that - * 1. no value of an existing codec ID changes (that would break ABI), - * 2. it is as close as possible to similar codecs - * - * After adding new codec IDs, do not forget to add an entry to the codec - * descriptor list and bump libavcodec minor version. - */ -enum AVCodecID { - AV_CODEC_ID_NONE, - - /* video codecs */ - AV_CODEC_ID_MPEG1VIDEO, - AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding - AV_CODEC_ID_H261, - AV_CODEC_ID_H263, - AV_CODEC_ID_RV10, - AV_CODEC_ID_RV20, - AV_CODEC_ID_MJPEG, - AV_CODEC_ID_MJPEGB, - AV_CODEC_ID_LJPEG, - AV_CODEC_ID_SP5X, - AV_CODEC_ID_JPEGLS, - AV_CODEC_ID_MPEG4, - AV_CODEC_ID_RAWVIDEO, - AV_CODEC_ID_MSMPEG4V1, - AV_CODEC_ID_MSMPEG4V2, - AV_CODEC_ID_MSMPEG4V3, - AV_CODEC_ID_WMV1, - AV_CODEC_ID_WMV2, - AV_CODEC_ID_H263P, - AV_CODEC_ID_H263I, - AV_CODEC_ID_FLV1, - AV_CODEC_ID_SVQ1, - AV_CODEC_ID_SVQ3, - AV_CODEC_ID_DVVIDEO, - AV_CODEC_ID_HUFFYUV, - AV_CODEC_ID_CYUV, - AV_CODEC_ID_H264, - AV_CODEC_ID_INDEO3, - AV_CODEC_ID_VP3, - AV_CODEC_ID_THEORA, - AV_CODEC_ID_ASV1, - AV_CODEC_ID_ASV2, - AV_CODEC_ID_FFV1, - AV_CODEC_ID_4XM, - AV_CODEC_ID_VCR1, - AV_CODEC_ID_CLJR, - AV_CODEC_ID_MDEC, - AV_CODEC_ID_ROQ, - AV_CODEC_ID_INTERPLAY_VIDEO, - AV_CODEC_ID_XAN_WC3, - AV_CODEC_ID_XAN_WC4, - AV_CODEC_ID_RPZA, - AV_CODEC_ID_CINEPAK, - AV_CODEC_ID_WS_VQA, - AV_CODEC_ID_MSRLE, - AV_CODEC_ID_MSVIDEO1, - AV_CODEC_ID_IDCIN, - AV_CODEC_ID_8BPS, - AV_CODEC_ID_SMC, - AV_CODEC_ID_FLIC, - AV_CODEC_ID_TRUEMOTION1, - AV_CODEC_ID_VMDVIDEO, - AV_CODEC_ID_MSZH, - AV_CODEC_ID_ZLIB, - AV_CODEC_ID_QTRLE, - AV_CODEC_ID_TSCC, - AV_CODEC_ID_ULTI, - AV_CODEC_ID_QDRAW, - AV_CODEC_ID_VIXL, - AV_CODEC_ID_QPEG, - AV_CODEC_ID_PNG, - AV_CODEC_ID_PPM, - AV_CODEC_ID_PBM, - AV_CODEC_ID_PGM, - AV_CODEC_ID_PGMYUV, - AV_CODEC_ID_PAM, - AV_CODEC_ID_FFVHUFF, - AV_CODEC_ID_RV30, - AV_CODEC_ID_RV40, - AV_CODEC_ID_VC1, - AV_CODEC_ID_WMV3, - AV_CODEC_ID_LOCO, - AV_CODEC_ID_WNV1, - AV_CODEC_ID_AASC, - AV_CODEC_ID_INDEO2, - AV_CODEC_ID_FRAPS, - AV_CODEC_ID_TRUEMOTION2, - AV_CODEC_ID_BMP, - AV_CODEC_ID_CSCD, - AV_CODEC_ID_MMVIDEO, - AV_CODEC_ID_ZMBV, - AV_CODEC_ID_AVS, - AV_CODEC_ID_SMACKVIDEO, - AV_CODEC_ID_NUV, - AV_CODEC_ID_KMVC, - AV_CODEC_ID_FLASHSV, - AV_CODEC_ID_CAVS, - AV_CODEC_ID_JPEG2000, - AV_CODEC_ID_VMNC, - AV_CODEC_ID_VP5, - AV_CODEC_ID_VP6, - AV_CODEC_ID_VP6F, - AV_CODEC_ID_TARGA, - AV_CODEC_ID_DSICINVIDEO, - AV_CODEC_ID_TIERTEXSEQVIDEO, - AV_CODEC_ID_TIFF, - AV_CODEC_ID_GIF, - AV_CODEC_ID_DXA, - AV_CODEC_ID_DNXHD, - AV_CODEC_ID_THP, - AV_CODEC_ID_SGI, - AV_CODEC_ID_C93, - AV_CODEC_ID_BETHSOFTVID, - AV_CODEC_ID_PTX, - AV_CODEC_ID_TXD, - AV_CODEC_ID_VP6A, - AV_CODEC_ID_AMV, - AV_CODEC_ID_VB, - AV_CODEC_ID_PCX, - AV_CODEC_ID_SUNRAST, - AV_CODEC_ID_INDEO4, - AV_CODEC_ID_INDEO5, - AV_CODEC_ID_MIMIC, - AV_CODEC_ID_RL2, - AV_CODEC_ID_ESCAPE124, - AV_CODEC_ID_DIRAC, - AV_CODEC_ID_BFI, - AV_CODEC_ID_CMV, - AV_CODEC_ID_MOTIONPIXELS, - AV_CODEC_ID_TGV, - AV_CODEC_ID_TGQ, - AV_CODEC_ID_TQI, - AV_CODEC_ID_AURA, - AV_CODEC_ID_AURA2, - AV_CODEC_ID_V210X, - AV_CODEC_ID_TMV, - AV_CODEC_ID_V210, - AV_CODEC_ID_DPX, - AV_CODEC_ID_MAD, - AV_CODEC_ID_FRWU, - AV_CODEC_ID_FLASHSV2, - AV_CODEC_ID_CDGRAPHICS, - AV_CODEC_ID_R210, - AV_CODEC_ID_ANM, - AV_CODEC_ID_BINKVIDEO, - AV_CODEC_ID_IFF_ILBM, -#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM - AV_CODEC_ID_KGV1, - AV_CODEC_ID_YOP, - AV_CODEC_ID_VP8, - AV_CODEC_ID_PICTOR, - AV_CODEC_ID_ANSI, - AV_CODEC_ID_A64_MULTI, - AV_CODEC_ID_A64_MULTI5, - AV_CODEC_ID_R10K, - AV_CODEC_ID_MXPEG, - AV_CODEC_ID_LAGARITH, - AV_CODEC_ID_PRORES, - AV_CODEC_ID_JV, - AV_CODEC_ID_DFA, - AV_CODEC_ID_WMV3IMAGE, - AV_CODEC_ID_VC1IMAGE, - AV_CODEC_ID_UTVIDEO, - AV_CODEC_ID_BMV_VIDEO, - AV_CODEC_ID_VBLE, - AV_CODEC_ID_DXTORY, - AV_CODEC_ID_V410, - AV_CODEC_ID_XWD, - AV_CODEC_ID_CDXL, - AV_CODEC_ID_XBM, - AV_CODEC_ID_ZEROCODEC, - AV_CODEC_ID_MSS1, - AV_CODEC_ID_MSA1, - AV_CODEC_ID_TSCC2, - AV_CODEC_ID_MTS2, - AV_CODEC_ID_CLLC, - AV_CODEC_ID_MSS2, - AV_CODEC_ID_VP9, - AV_CODEC_ID_AIC, - AV_CODEC_ID_ESCAPE130, - AV_CODEC_ID_G2M, - AV_CODEC_ID_WEBP, - AV_CODEC_ID_HNM4_VIDEO, - AV_CODEC_ID_HEVC, -#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC - AV_CODEC_ID_FIC, - AV_CODEC_ID_ALIAS_PIX, - AV_CODEC_ID_BRENDER_PIX, - AV_CODEC_ID_PAF_VIDEO, - AV_CODEC_ID_EXR, - AV_CODEC_ID_VP7, - AV_CODEC_ID_SANM, - AV_CODEC_ID_SGIRLE, - AV_CODEC_ID_MVC1, - AV_CODEC_ID_MVC2, - AV_CODEC_ID_HQX, - AV_CODEC_ID_TDSC, - AV_CODEC_ID_HQ_HQA, - AV_CODEC_ID_HAP, - AV_CODEC_ID_DDS, - AV_CODEC_ID_DXV, - AV_CODEC_ID_SCREENPRESSO, - AV_CODEC_ID_RSCC, - AV_CODEC_ID_AVS2, - AV_CODEC_ID_PGX, - AV_CODEC_ID_AVS3, - AV_CODEC_ID_MSP2, - AV_CODEC_ID_VVC, -#define AV_CODEC_ID_H266 AV_CODEC_ID_VVC - - AV_CODEC_ID_Y41P = 0x8000, - AV_CODEC_ID_AVRP, - AV_CODEC_ID_012V, - AV_CODEC_ID_AVUI, - AV_CODEC_ID_AYUV, - AV_CODEC_ID_TARGA_Y216, - AV_CODEC_ID_V308, - AV_CODEC_ID_V408, - AV_CODEC_ID_YUV4, - AV_CODEC_ID_AVRN, - AV_CODEC_ID_CPIA, - AV_CODEC_ID_XFACE, - AV_CODEC_ID_SNOW, - AV_CODEC_ID_SMVJPEG, - AV_CODEC_ID_APNG, - AV_CODEC_ID_DAALA, - AV_CODEC_ID_CFHD, - AV_CODEC_ID_TRUEMOTION2RT, - AV_CODEC_ID_M101, - AV_CODEC_ID_MAGICYUV, - AV_CODEC_ID_SHEERVIDEO, - AV_CODEC_ID_YLC, - AV_CODEC_ID_PSD, - AV_CODEC_ID_PIXLET, - AV_CODEC_ID_SPEEDHQ, - AV_CODEC_ID_FMVC, - AV_CODEC_ID_SCPR, - AV_CODEC_ID_CLEARVIDEO, - AV_CODEC_ID_XPM, - AV_CODEC_ID_AV1, - AV_CODEC_ID_BITPACKED, - AV_CODEC_ID_MSCC, - AV_CODEC_ID_SRGC, - AV_CODEC_ID_SVG, - AV_CODEC_ID_GDV, - AV_CODEC_ID_FITS, - AV_CODEC_ID_IMM4, - AV_CODEC_ID_PROSUMER, - AV_CODEC_ID_MWSC, - AV_CODEC_ID_WCMV, - AV_CODEC_ID_RASC, - AV_CODEC_ID_HYMT, - AV_CODEC_ID_ARBC, - AV_CODEC_ID_AGM, - AV_CODEC_ID_LSCR, - AV_CODEC_ID_VP4, - AV_CODEC_ID_IMM5, - AV_CODEC_ID_MVDV, - AV_CODEC_ID_MVHA, - AV_CODEC_ID_CDTOONS, - AV_CODEC_ID_MV30, - AV_CODEC_ID_NOTCHLC, - AV_CODEC_ID_PFM, - AV_CODEC_ID_MOBICLIP, - AV_CODEC_ID_PHOTOCD, - AV_CODEC_ID_IPU, - AV_CODEC_ID_ARGO, - AV_CODEC_ID_CRI, - AV_CODEC_ID_SIMBIOSIS_IMX, - AV_CODEC_ID_SGA_VIDEO, - - /* various PCM "codecs" */ - AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs - AV_CODEC_ID_PCM_S16LE = 0x10000, - AV_CODEC_ID_PCM_S16BE, - AV_CODEC_ID_PCM_U16LE, - AV_CODEC_ID_PCM_U16BE, - AV_CODEC_ID_PCM_S8, - AV_CODEC_ID_PCM_U8, - AV_CODEC_ID_PCM_MULAW, - AV_CODEC_ID_PCM_ALAW, - AV_CODEC_ID_PCM_S32LE, - AV_CODEC_ID_PCM_S32BE, - AV_CODEC_ID_PCM_U32LE, - AV_CODEC_ID_PCM_U32BE, - AV_CODEC_ID_PCM_S24LE, - AV_CODEC_ID_PCM_S24BE, - AV_CODEC_ID_PCM_U24LE, - AV_CODEC_ID_PCM_U24BE, - AV_CODEC_ID_PCM_S24DAUD, - AV_CODEC_ID_PCM_ZORK, - AV_CODEC_ID_PCM_S16LE_PLANAR, - AV_CODEC_ID_PCM_DVD, - AV_CODEC_ID_PCM_F32BE, - AV_CODEC_ID_PCM_F32LE, - AV_CODEC_ID_PCM_F64BE, - AV_CODEC_ID_PCM_F64LE, - AV_CODEC_ID_PCM_BLURAY, - AV_CODEC_ID_PCM_LXF, - AV_CODEC_ID_S302M, - AV_CODEC_ID_PCM_S8_PLANAR, - AV_CODEC_ID_PCM_S24LE_PLANAR, - AV_CODEC_ID_PCM_S32LE_PLANAR, - AV_CODEC_ID_PCM_S16BE_PLANAR, - - AV_CODEC_ID_PCM_S64LE = 0x10800, - AV_CODEC_ID_PCM_S64BE, - AV_CODEC_ID_PCM_F16LE, - AV_CODEC_ID_PCM_F24LE, - AV_CODEC_ID_PCM_VIDC, - AV_CODEC_ID_PCM_SGA, - - /* various ADPCM codecs */ - AV_CODEC_ID_ADPCM_IMA_QT = 0x11000, - AV_CODEC_ID_ADPCM_IMA_WAV, - AV_CODEC_ID_ADPCM_IMA_DK3, - AV_CODEC_ID_ADPCM_IMA_DK4, - AV_CODEC_ID_ADPCM_IMA_WS, - AV_CODEC_ID_ADPCM_IMA_SMJPEG, - AV_CODEC_ID_ADPCM_MS, - AV_CODEC_ID_ADPCM_4XM, - AV_CODEC_ID_ADPCM_XA, - AV_CODEC_ID_ADPCM_ADX, - AV_CODEC_ID_ADPCM_EA, - AV_CODEC_ID_ADPCM_G726, - AV_CODEC_ID_ADPCM_CT, - AV_CODEC_ID_ADPCM_SWF, - AV_CODEC_ID_ADPCM_YAMAHA, - AV_CODEC_ID_ADPCM_SBPRO_4, - AV_CODEC_ID_ADPCM_SBPRO_3, - AV_CODEC_ID_ADPCM_SBPRO_2, - AV_CODEC_ID_ADPCM_THP, - AV_CODEC_ID_ADPCM_IMA_AMV, - AV_CODEC_ID_ADPCM_EA_R1, - AV_CODEC_ID_ADPCM_EA_R3, - AV_CODEC_ID_ADPCM_EA_R2, - AV_CODEC_ID_ADPCM_IMA_EA_SEAD, - AV_CODEC_ID_ADPCM_IMA_EA_EACS, - AV_CODEC_ID_ADPCM_EA_XAS, - AV_CODEC_ID_ADPCM_EA_MAXIS_XA, - AV_CODEC_ID_ADPCM_IMA_ISS, - AV_CODEC_ID_ADPCM_G722, - AV_CODEC_ID_ADPCM_IMA_APC, - AV_CODEC_ID_ADPCM_VIMA, - - AV_CODEC_ID_ADPCM_AFC = 0x11800, - AV_CODEC_ID_ADPCM_IMA_OKI, - AV_CODEC_ID_ADPCM_DTK, - AV_CODEC_ID_ADPCM_IMA_RAD, - AV_CODEC_ID_ADPCM_G726LE, - AV_CODEC_ID_ADPCM_THP_LE, - AV_CODEC_ID_ADPCM_PSX, - AV_CODEC_ID_ADPCM_AICA, - AV_CODEC_ID_ADPCM_IMA_DAT4, - AV_CODEC_ID_ADPCM_MTAF, - AV_CODEC_ID_ADPCM_AGM, - AV_CODEC_ID_ADPCM_ARGO, - AV_CODEC_ID_ADPCM_IMA_SSI, - AV_CODEC_ID_ADPCM_ZORK, - AV_CODEC_ID_ADPCM_IMA_APM, - AV_CODEC_ID_ADPCM_IMA_ALP, - AV_CODEC_ID_ADPCM_IMA_MTF, - AV_CODEC_ID_ADPCM_IMA_CUNNING, - AV_CODEC_ID_ADPCM_IMA_MOFLEX, - - /* AMR */ - AV_CODEC_ID_AMR_NB = 0x12000, - AV_CODEC_ID_AMR_WB, - - /* RealAudio codecs*/ - AV_CODEC_ID_RA_144 = 0x13000, - AV_CODEC_ID_RA_288, - - /* various DPCM codecs */ - AV_CODEC_ID_ROQ_DPCM = 0x14000, - AV_CODEC_ID_INTERPLAY_DPCM, - AV_CODEC_ID_XAN_DPCM, - AV_CODEC_ID_SOL_DPCM, - - AV_CODEC_ID_SDX2_DPCM = 0x14800, - AV_CODEC_ID_GREMLIN_DPCM, - AV_CODEC_ID_DERF_DPCM, - - /* audio codecs */ - AV_CODEC_ID_MP2 = 0x15000, - AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 - AV_CODEC_ID_AAC, - AV_CODEC_ID_AC3, - AV_CODEC_ID_DTS, - AV_CODEC_ID_VORBIS, - AV_CODEC_ID_DVAUDIO, - AV_CODEC_ID_WMAV1, - AV_CODEC_ID_WMAV2, - AV_CODEC_ID_MACE3, - AV_CODEC_ID_MACE6, - AV_CODEC_ID_VMDAUDIO, - AV_CODEC_ID_FLAC, - AV_CODEC_ID_MP3ADU, - AV_CODEC_ID_MP3ON4, - AV_CODEC_ID_SHORTEN, - AV_CODEC_ID_ALAC, - AV_CODEC_ID_WESTWOOD_SND1, - AV_CODEC_ID_GSM, ///< as in Berlin toast format - AV_CODEC_ID_QDM2, - AV_CODEC_ID_COOK, - AV_CODEC_ID_TRUESPEECH, - AV_CODEC_ID_TTA, - AV_CODEC_ID_SMACKAUDIO, - AV_CODEC_ID_QCELP, - AV_CODEC_ID_WAVPACK, - AV_CODEC_ID_DSICINAUDIO, - AV_CODEC_ID_IMC, - AV_CODEC_ID_MUSEPACK7, - AV_CODEC_ID_MLP, - AV_CODEC_ID_GSM_MS, /* as found in WAV */ - AV_CODEC_ID_ATRAC3, - AV_CODEC_ID_APE, - AV_CODEC_ID_NELLYMOSER, - AV_CODEC_ID_MUSEPACK8, - AV_CODEC_ID_SPEEX, - AV_CODEC_ID_WMAVOICE, - AV_CODEC_ID_WMAPRO, - AV_CODEC_ID_WMALOSSLESS, - AV_CODEC_ID_ATRAC3P, - AV_CODEC_ID_EAC3, - AV_CODEC_ID_SIPR, - AV_CODEC_ID_MP1, - AV_CODEC_ID_TWINVQ, - AV_CODEC_ID_TRUEHD, - AV_CODEC_ID_MP4ALS, - AV_CODEC_ID_ATRAC1, - AV_CODEC_ID_BINKAUDIO_RDFT, - AV_CODEC_ID_BINKAUDIO_DCT, - AV_CODEC_ID_AAC_LATM, - AV_CODEC_ID_QDMC, - AV_CODEC_ID_CELT, - AV_CODEC_ID_G723_1, - AV_CODEC_ID_G729, - AV_CODEC_ID_8SVX_EXP, - AV_CODEC_ID_8SVX_FIB, - AV_CODEC_ID_BMV_AUDIO, - AV_CODEC_ID_RALF, - AV_CODEC_ID_IAC, - AV_CODEC_ID_ILBC, - AV_CODEC_ID_OPUS, - AV_CODEC_ID_COMFORT_NOISE, - AV_CODEC_ID_TAK, - AV_CODEC_ID_METASOUND, - AV_CODEC_ID_PAF_AUDIO, - AV_CODEC_ID_ON2AVC, - AV_CODEC_ID_DSS_SP, - AV_CODEC_ID_CODEC2, - - AV_CODEC_ID_FFWAVESYNTH = 0x15800, - AV_CODEC_ID_SONIC, - AV_CODEC_ID_SONIC_LS, - AV_CODEC_ID_EVRC, - AV_CODEC_ID_SMV, - AV_CODEC_ID_DSD_LSBF, - AV_CODEC_ID_DSD_MSBF, - AV_CODEC_ID_DSD_LSBF_PLANAR, - AV_CODEC_ID_DSD_MSBF_PLANAR, - AV_CODEC_ID_4GV, - AV_CODEC_ID_INTERPLAY_ACM, - AV_CODEC_ID_XMA1, - AV_CODEC_ID_XMA2, - AV_CODEC_ID_DST, - AV_CODEC_ID_ATRAC3AL, - AV_CODEC_ID_ATRAC3PAL, - AV_CODEC_ID_DOLBY_E, - AV_CODEC_ID_APTX, - AV_CODEC_ID_APTX_HD, - AV_CODEC_ID_SBC, - AV_CODEC_ID_ATRAC9, - AV_CODEC_ID_HCOM, - AV_CODEC_ID_ACELP_KELVIN, - AV_CODEC_ID_MPEGH_3D_AUDIO, - AV_CODEC_ID_SIREN, - AV_CODEC_ID_HCA, - AV_CODEC_ID_FASTAUDIO, - - /* subtitle codecs */ - AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. - AV_CODEC_ID_DVD_SUBTITLE = 0x17000, - AV_CODEC_ID_DVB_SUBTITLE, - AV_CODEC_ID_TEXT, ///< raw UTF-8 text - AV_CODEC_ID_XSUB, - AV_CODEC_ID_SSA, - AV_CODEC_ID_MOV_TEXT, - AV_CODEC_ID_HDMV_PGS_SUBTITLE, - AV_CODEC_ID_DVB_TELETEXT, - AV_CODEC_ID_SRT, - - AV_CODEC_ID_MICRODVD = 0x17800, - AV_CODEC_ID_EIA_608, - AV_CODEC_ID_JACOSUB, - AV_CODEC_ID_SAMI, - AV_CODEC_ID_REALTEXT, - AV_CODEC_ID_STL, - AV_CODEC_ID_SUBVIEWER1, - AV_CODEC_ID_SUBVIEWER, - AV_CODEC_ID_SUBRIP, - AV_CODEC_ID_WEBVTT, - AV_CODEC_ID_MPL2, - AV_CODEC_ID_VPLAYER, - AV_CODEC_ID_PJS, - AV_CODEC_ID_ASS, - AV_CODEC_ID_HDMV_TEXT_SUBTITLE, - AV_CODEC_ID_TTML, - AV_CODEC_ID_ARIB_CAPTION, - - /* other specific kind of codecs (generally used for attachments) */ - AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs. - AV_CODEC_ID_TTF = 0x18000, - - AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program stream. - AV_CODEC_ID_EPG, - AV_CODEC_ID_BINTEXT = 0x18800, - AV_CODEC_ID_XBIN, - AV_CODEC_ID_IDF, - AV_CODEC_ID_OTF, - AV_CODEC_ID_SMPTE_KLV, - AV_CODEC_ID_DVD_NAV, - AV_CODEC_ID_TIMED_ID3, - AV_CODEC_ID_BIN_DATA, - - - AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it - - AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS - * stream (only used by libavformat) */ - AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems - * stream (only used by libavformat) */ - AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. - AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket -}; - -/** - * Get the type of the given codec. - */ -enum AVMediaType avcodec_get_type(enum AVCodecID codec_id); - -/** - * Get the name of a codec. - * @return a static string identifying the codec; never NULL - */ -const char *avcodec_get_name(enum AVCodecID id); - -/** - * @} - */ - -#endif // AVCODEC_CODEC_ID_H diff --git a/prebuilts/x86_64/include/libavcodec/codec_par.h b/prebuilts/x86_64/include/libavcodec/codec_par.h deleted file mode 100644 index 948758e..0000000 --- a/prebuilts/x86_64/include/libavcodec/codec_par.h +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Codec parameters public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_PAR_H -#define AVCODEC_CODEC_PAR_H - -#include - -#include "libavutil/avutil.h" -#include "libavutil/rational.h" -#include "libavutil/pixfmt.h" - -#include "codec_id.h" - -/** - * @addtogroup lavc_core - */ - -enum AVFieldOrder { - AV_FIELD_UNKNOWN, - AV_FIELD_PROGRESSIVE, - AV_FIELD_TT, //< Top coded_first, top displayed first - AV_FIELD_BB, //< Bottom coded first, bottom displayed first - AV_FIELD_TB, //< Top coded first, bottom displayed first - AV_FIELD_BT, //< Bottom coded first, top displayed first -}; - -/** - * This struct describes the properties of an encoded stream. - * - * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must - * be allocated with avcodec_parameters_alloc() and freed with - * avcodec_parameters_free(). - */ -typedef struct AVCodecParameters { - /** - * General type of the encoded data. - */ - enum AVMediaType codec_type; - /** - * Specific type of the encoded data (the codec used). - */ - enum AVCodecID codec_id; - /** - * Additional information about the codec (corresponds to the AVI FOURCC). - */ - uint32_t codec_tag; - - /** - * Extra binary data needed for initializing the decoder, codec-dependent. - * - * Must be allocated with av_malloc() and will be freed by - * avcodec_parameters_free(). The allocated size of extradata must be at - * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding - * bytes zeroed. - */ - uint8_t *extradata; - /** - * Size of the extradata content in bytes. - */ - int extradata_size; - - /** - * - video: the pixel format, the value corresponds to enum AVPixelFormat. - * - audio: the sample format, the value corresponds to enum AVSampleFormat. - */ - int format; - - /** - * The average bitrate of the encoded data (in bits per second). - */ - int64_t bit_rate; - - /** - * The number of bits per sample in the codedwords. - * - * This is basically the bitrate per sample. It is mandatory for a bunch of - * formats to actually decode them. It's the number of bits for one sample in - * the actual coded bitstream. - * - * This could be for example 4 for ADPCM - * For PCM formats this matches bits_per_raw_sample - * Can be 0 - */ - int bits_per_coded_sample; - - /** - * This is the number of valid bits in each output sample. If the - * sample format has more bits, the least significant bits are additional - * padding bits, which are always 0. Use right shifts to reduce the sample - * to its actual size. For example, audio formats with 24 bit samples will - * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32. - * To get the original sample use "(int32_t)sample >> 8"." - * - * For ADPCM this might be 12 or 16 or similar - * Can be 0 - */ - int bits_per_raw_sample; - - /** - * Codec-specific bitstream restrictions that the stream conforms to. - */ - int profile; - int level; - - /** - * Video only. The dimensions of the video frame in pixels. - */ - int width; - int height; - - /** - * Video only. The aspect ratio (width / height) which a single pixel - * should have when displayed. - * - * When the aspect ratio is unknown / undefined, the numerator should be - * set to 0 (the denominator may have any value). - */ - AVRational sample_aspect_ratio; - - /** - * Video only. The order of the fields in interlaced video. - */ - enum AVFieldOrder field_order; - - /** - * Video only. Additional colorspace characteristics. - */ - enum AVColorRange color_range; - enum AVColorPrimaries color_primaries; - enum AVColorTransferCharacteristic color_trc; - enum AVColorSpace color_space; - enum AVChromaLocation chroma_location; - - /** - * Video only. Number of delayed frames. - */ - int video_delay; - - /** - * Audio only. The channel layout bitmask. May be 0 if the channel layout is - * unknown or unspecified, otherwise the number of bits set must be equal to - * the channels field. - */ - uint64_t channel_layout; - /** - * Audio only. The number of audio channels. - */ - int channels; - /** - * Audio only. The number of audio samples per second. - */ - int sample_rate; - /** - * Audio only. The number of bytes per coded audio frame, required by some - * formats. - * - * Corresponds to nBlockAlign in WAVEFORMATEX. - */ - int block_align; - /** - * Audio only. Audio frame size, if known. Required by some formats to be static. - */ - int frame_size; - - /** - * Audio only. The amount of padding (in samples) inserted by the encoder at - * the beginning of the audio. I.e. this number of leading decoded samples - * must be discarded by the caller to get the original audio without leading - * padding. - */ - int initial_padding; - /** - * Audio only. The amount of padding (in samples) appended by the encoder to - * the end of the audio. I.e. this number of decoded samples must be - * discarded by the caller from the end of the stream to get the original - * audio without any trailing padding. - */ - int trailing_padding; - /** - * Audio only. Number of samples to skip after a discontinuity. - */ - int seek_preroll; -} AVCodecParameters; - -/** - * Allocate a new AVCodecParameters and set its fields to default values - * (unknown/invalid/0). The returned struct must be freed with - * avcodec_parameters_free(). - */ -AVCodecParameters *avcodec_parameters_alloc(void); - -/** - * Free an AVCodecParameters instance and everything associated with it and - * write NULL to the supplied pointer. - */ -void avcodec_parameters_free(AVCodecParameters **par); - -/** - * Copy the contents of src to dst. Any allocated fields in dst are freed and - * replaced with newly allocated duplicates of the corresponding fields in src. - * - * @return >= 0 on success, a negative AVERROR code on failure. - */ -int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src); - - -/** - * @} - */ - -#endif // AVCODEC_CODEC_PAR_H diff --git a/prebuilts/x86_64/include/libavcodec/d3d11va.h b/prebuilts/x86_64/include/libavcodec/d3d11va.h deleted file mode 100644 index 6816b6c..0000000 --- a/prebuilts/x86_64/include/libavcodec/d3d11va.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Direct3D11 HW acceleration - * - * copyright (c) 2009 Laurent Aimar - * copyright (c) 2015 Steve Lhomme - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_D3D11VA_H -#define AVCODEC_D3D11VA_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_d3d11va - * Public libavcodec D3D11VA header. - */ - -#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0602 -#endif - -#include -#include - -/** - * @defgroup lavc_codec_hwaccel_d3d11va Direct3D11 - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for Direct3D11 and old UVD/UVD+ ATI video cards -#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for Direct3D11 and old Intel GPUs with ClearVideo interface - -/** - * This structure is used to provides the necessary configurations and data - * to the Direct3D11 FFmpeg HWAccel implementation. - * - * The application must make it available as AVCodecContext.hwaccel_context. - * - * Use av_d3d11va_alloc_context() exclusively to allocate an AVD3D11VAContext. - */ -typedef struct AVD3D11VAContext { - /** - * D3D11 decoder object - */ - ID3D11VideoDecoder *decoder; - - /** - * D3D11 VideoContext - */ - ID3D11VideoContext *video_context; - - /** - * D3D11 configuration used to create the decoder - */ - D3D11_VIDEO_DECODER_CONFIG *cfg; - - /** - * The number of surface in the surface array - */ - unsigned surface_count; - - /** - * The array of Direct3D surfaces used to create the decoder - */ - ID3D11VideoDecoderOutputView **surface; - - /** - * A bit field configuring the workarounds needed for using the decoder - */ - uint64_t workaround; - - /** - * Private to the FFmpeg AVHWAccel implementation - */ - unsigned report_id; - - /** - * Mutex to access video_context - */ - HANDLE context_mutex; -} AVD3D11VAContext; - -/** - * Allocate an AVD3D11VAContext. - * - * @return Newly-allocated AVD3D11VAContext or NULL on failure. - */ -AVD3D11VAContext *av_d3d11va_alloc_context(void); - -/** - * @} - */ - -#endif /* AVCODEC_D3D11VA_H */ diff --git a/prebuilts/x86_64/include/libavcodec/dirac.h b/prebuilts/x86_64/include/libavcodec/dirac.h deleted file mode 100644 index e6d9d34..0000000 --- a/prebuilts/x86_64/include/libavcodec/dirac.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2007 Marco Gerards - * Copyright (C) 2009 David Conrad - * Copyright (C) 2011 Jordi Ortiz - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DIRAC_H -#define AVCODEC_DIRAC_H - -/** - * @file - * Interface to Dirac Decoder/Encoder - * @author Marco Gerards - * @author David Conrad - * @author Jordi Ortiz - */ - -#include "avcodec.h" - -/** - * The spec limits the number of wavelet decompositions to 4 for both - * level 1 (VC-2) and 128 (long-gop default). - * 5 decompositions is the maximum before >16-bit buffers are needed. - * Schroedinger allows this for DD 9,7 and 13,7 wavelets only, limiting - * the others to 4 decompositions (or 3 for the fidelity filter). - * - * We use this instead of MAX_DECOMPOSITIONS to save some memory. - */ -#define MAX_DWT_LEVELS 5 - -/** - * Parse code values: - * - * Dirac Specification -> - * 9.6.1 Table 9.1 - * - * VC-2 Specification -> - * 10.4.1 Table 10.1 - */ - -enum DiracParseCodes { - DIRAC_PCODE_SEQ_HEADER = 0x00, - DIRAC_PCODE_END_SEQ = 0x10, - DIRAC_PCODE_AUX = 0x20, - DIRAC_PCODE_PAD = 0x30, - DIRAC_PCODE_PICTURE_CODED = 0x08, - DIRAC_PCODE_PICTURE_RAW = 0x48, - DIRAC_PCODE_PICTURE_LOW_DEL = 0xC8, - DIRAC_PCODE_PICTURE_HQ = 0xE8, - DIRAC_PCODE_INTER_NOREF_CO1 = 0x0A, - DIRAC_PCODE_INTER_NOREF_CO2 = 0x09, - DIRAC_PCODE_INTER_REF_CO1 = 0x0D, - DIRAC_PCODE_INTER_REF_CO2 = 0x0E, - DIRAC_PCODE_INTRA_REF_CO = 0x0C, - DIRAC_PCODE_INTRA_REF_RAW = 0x4C, - DIRAC_PCODE_INTRA_REF_PICT = 0xCC, - DIRAC_PCODE_MAGIC = 0x42424344, -}; - -typedef struct DiracVersionInfo { - int major; - int minor; -} DiracVersionInfo; - -typedef struct AVDiracSeqHeader { - unsigned width; - unsigned height; - uint8_t chroma_format; ///< 0: 444 1: 422 2: 420 - - uint8_t interlaced; - uint8_t top_field_first; - - uint8_t frame_rate_index; ///< index into dirac_frame_rate[] - uint8_t aspect_ratio_index; ///< index into dirac_aspect_ratio[] - - uint16_t clean_width; - uint16_t clean_height; - uint16_t clean_left_offset; - uint16_t clean_right_offset; - - uint8_t pixel_range_index; ///< index into dirac_pixel_range_presets[] - uint8_t color_spec_index; ///< index into dirac_color_spec_presets[] - - int profile; - int level; - - AVRational framerate; - AVRational sample_aspect_ratio; - - enum AVPixelFormat pix_fmt; - enum AVColorRange color_range; - enum AVColorPrimaries color_primaries; - enum AVColorTransferCharacteristic color_trc; - enum AVColorSpace colorspace; - - DiracVersionInfo version; - int bit_depth; -} AVDiracSeqHeader; - -/** - * Parse a Dirac sequence header. - * - * @param dsh this function will allocate and fill an AVDiracSeqHeader struct - * and write it into this pointer. The caller must free it with - * av_free(). - * @param buf the data buffer - * @param buf_size the size of the data buffer in bytes - * @param log_ctx if non-NULL, this function will log errors here - * @return 0 on success, a negative AVERROR code on failure - */ -int av_dirac_parse_sequence_header(AVDiracSeqHeader **dsh, - const uint8_t *buf, size_t buf_size, - void *log_ctx); - -#endif /* AVCODEC_DIRAC_H */ diff --git a/prebuilts/x86_64/include/libavcodec/dv_profile.h b/prebuilts/x86_64/include/libavcodec/dv_profile.h deleted file mode 100644 index 9380a66..0000000 --- a/prebuilts/x86_64/include/libavcodec/dv_profile.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DV_PROFILE_H -#define AVCODEC_DV_PROFILE_H - -#include - -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" -#include "avcodec.h" - -/* minimum number of bytes to read from a DV stream in order to - * determine the profile */ -#define DV_PROFILE_BYTES (6 * 80) /* 6 DIF blocks */ - - -/* - * AVDVProfile is used to express the differences between various - * DV flavors. For now it's primarily used for differentiating - * 525/60 and 625/50, but the plans are to use it for various - * DV specs as well (e.g. SMPTE314M vs. IEC 61834). - */ -typedef struct AVDVProfile { - int dsf; /* value of the dsf in the DV header */ - int video_stype; /* stype for VAUX source pack */ - int frame_size; /* total size of one frame in bytes */ - int difseg_size; /* number of DIF segments per DIF channel */ - int n_difchan; /* number of DIF channels per frame */ - AVRational time_base; /* 1/framerate */ - int ltc_divisor; /* FPS from the LTS standpoint */ - int height; /* picture height in pixels */ - int width; /* picture width in pixels */ - AVRational sar[2]; /* sample aspect ratios for 4:3 and 16:9 */ - enum AVPixelFormat pix_fmt; /* picture pixel format */ - int bpm; /* blocks per macroblock */ - const uint8_t *block_sizes; /* AC block sizes, in bits */ - int audio_stride; /* size of audio_shuffle table */ - int audio_min_samples[3]; /* min amount of audio samples */ - /* for 48kHz, 44.1kHz and 32kHz */ - int audio_samples_dist[5]; /* how many samples are supposed to be */ - /* in each frame in a 5 frames window */ - const uint8_t (*audio_shuffle)[9]; /* PCM shuffling table */ -} AVDVProfile; - -/** - * Get a DV profile for the provided compressed frame. - * - * @param sys the profile used for the previous frame, may be NULL - * @param frame the compressed data buffer - * @param buf_size size of the buffer in bytes - * @return the DV profile for the supplied data or NULL on failure - */ -const AVDVProfile *av_dv_frame_profile(const AVDVProfile *sys, - const uint8_t *frame, unsigned buf_size); - -/** - * Get a DV profile for the provided stream parameters. - */ -const AVDVProfile *av_dv_codec_profile(int width, int height, enum AVPixelFormat pix_fmt); - -/** - * Get a DV profile for the provided stream parameters. - * The frame rate is used as a best-effort parameter. - */ -const AVDVProfile *av_dv_codec_profile2(int width, int height, enum AVPixelFormat pix_fmt, AVRational frame_rate); - -#endif /* AVCODEC_DV_PROFILE_H */ diff --git a/prebuilts/x86_64/include/libavcodec/dxva2.h b/prebuilts/x86_64/include/libavcodec/dxva2.h deleted file mode 100644 index 22c9399..0000000 --- a/prebuilts/x86_64/include/libavcodec/dxva2.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * DXVA2 HW acceleration - * - * copyright (c) 2009 Laurent Aimar - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DXVA2_H -#define AVCODEC_DXVA2_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_dxva2 - * Public libavcodec DXVA2 header. - */ - -#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0602 -#endif - -#include -#include -#include - -/** - * @defgroup lavc_codec_hwaccel_dxva2 DXVA2 - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards -#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for DXVA2 and old Intel GPUs with ClearVideo interface - -/** - * This structure is used to provides the necessary configurations and data - * to the DXVA2 FFmpeg HWAccel implementation. - * - * The application must make it available as AVCodecContext.hwaccel_context. - */ -struct dxva_context { - /** - * DXVA2 decoder object - */ - IDirectXVideoDecoder *decoder; - - /** - * DXVA2 configuration used to create the decoder - */ - const DXVA2_ConfigPictureDecode *cfg; - - /** - * The number of surface in the surface array - */ - unsigned surface_count; - - /** - * The array of Direct3D surfaces used to create the decoder - */ - LPDIRECT3DSURFACE9 *surface; - - /** - * A bit field configuring the workarounds needed for using the decoder - */ - uint64_t workaround; - - /** - * Private to the FFmpeg AVHWAccel implementation - */ - unsigned report_id; -}; - -/** - * @} - */ - -#endif /* AVCODEC_DXVA2_H */ diff --git a/prebuilts/x86_64/include/libavcodec/jni.h b/prebuilts/x86_64/include/libavcodec/jni.h deleted file mode 100644 index dd99e92..0000000 --- a/prebuilts/x86_64/include/libavcodec/jni.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * JNI public API functions - * - * Copyright (c) 2015-2016 Matthieu Bouron - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_JNI_H -#define AVCODEC_JNI_H - -/* - * Manually set a Java virtual machine which will be used to retrieve the JNI - * environment. Once a Java VM is set it cannot be changed afterwards, meaning - * you can call multiple times av_jni_set_java_vm with the same Java VM pointer - * however it will error out if you try to set a different Java VM. - * - * @param vm Java virtual machine - * @param log_ctx context used for logging, can be NULL - * @return 0 on success, < 0 otherwise - */ -int av_jni_set_java_vm(void *vm, void *log_ctx); - -/* - * Get the Java virtual machine which has been set with av_jni_set_java_vm. - * - * @param vm Java virtual machine - * @return a pointer to the Java virtual machine - */ -void *av_jni_get_java_vm(void *log_ctx); - -#endif /* AVCODEC_JNI_H */ diff --git a/prebuilts/x86_64/include/libavcodec/mediacodec.h b/prebuilts/x86_64/include/libavcodec/mediacodec.h deleted file mode 100644 index 4c8545d..0000000 --- a/prebuilts/x86_64/include/libavcodec/mediacodec.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Android MediaCodec public API - * - * Copyright (c) 2016 Matthieu Bouron - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_MEDIACODEC_H -#define AVCODEC_MEDIACODEC_H - -#include "libavcodec/avcodec.h" - -/** - * This structure holds a reference to a android/view/Surface object that will - * be used as output by the decoder. - * - */ -typedef struct AVMediaCodecContext { - - /** - * android/view/Surface object reference. - */ - void *surface; - -} AVMediaCodecContext; - -/** - * Allocate and initialize a MediaCodec context. - * - * When decoding with MediaCodec is finished, the caller must free the - * MediaCodec context with av_mediacodec_default_free. - * - * @return a pointer to a newly allocated AVMediaCodecContext on success, NULL otherwise - */ -AVMediaCodecContext *av_mediacodec_alloc_context(void); - -/** - * Convenience function that sets up the MediaCodec context. - * - * @param avctx codec context - * @param ctx MediaCodec context to initialize - * @param surface reference to an android/view/Surface - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_default_init(AVCodecContext *avctx, AVMediaCodecContext *ctx, void *surface); - -/** - * This function must be called to free the MediaCodec context initialized with - * av_mediacodec_default_init(). - * - * @param avctx codec context - */ -void av_mediacodec_default_free(AVCodecContext *avctx); - -/** - * Opaque structure representing a MediaCodec buffer to render. - */ -typedef struct MediaCodecBuffer AVMediaCodecBuffer; - -/** - * Release a MediaCodec buffer and render it to the surface that is associated - * with the decoder. This function should only be called once on a given - * buffer, once released the underlying buffer returns to the codec, thus - * subsequent calls to this function will have no effect. - * - * @param buffer the buffer to render - * @param render 1 to release and render the buffer to the surface or 0 to - * discard the buffer - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_release_buffer(AVMediaCodecBuffer *buffer, int render); - -/** - * Release a MediaCodec buffer and render it at the given time to the surface - * that is associated with the decoder. The timestamp must be within one second - * of the current java/lang/System#nanoTime() (which is implemented using - * CLOCK_MONOTONIC on Android). See the Android MediaCodec documentation - * of android/media/MediaCodec#releaseOutputBuffer(int,long) for more details. - * - * @param buffer the buffer to render - * @param time timestamp in nanoseconds of when to render the buffer - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_render_buffer_at_time(AVMediaCodecBuffer *buffer, int64_t time); - -#endif /* AVCODEC_MEDIACODEC_H */ diff --git a/prebuilts/x86_64/include/libavcodec/packet.h b/prebuilts/x86_64/include/libavcodec/packet.h deleted file mode 100644 index ca18ae6..0000000 --- a/prebuilts/x86_64/include/libavcodec/packet.h +++ /dev/null @@ -1,774 +0,0 @@ -/* - * AVPacket public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_PACKET_H -#define AVCODEC_PACKET_H - -#include -#include - -#include "libavutil/attributes.h" -#include "libavutil/buffer.h" -#include "libavutil/dict.h" -#include "libavutil/rational.h" - -#include "libavcodec/version.h" - -/** - * @defgroup lavc_packet AVPacket - * - * Types and functions for working with AVPacket. - * @{ - */ -enum AVPacketSideDataType { - /** - * An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE - * bytes worth of palette. This side data signals that a new palette is - * present. - */ - AV_PKT_DATA_PALETTE, - - /** - * The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format - * that the extradata buffer was changed and the receiving side should - * act upon it appropriately. The new extradata is embedded in the side - * data buffer and should be immediately used for processing the current - * frame or packet. - */ - AV_PKT_DATA_NEW_EXTRADATA, - - /** - * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: - * @code - * u32le param_flags - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) - * s32le channel_count - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) - * u64le channel_layout - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) - * s32le sample_rate - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) - * s32le width - * s32le height - * @endcode - */ - AV_PKT_DATA_PARAM_CHANGE, - - /** - * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of - * structures with info about macroblocks relevant to splitting the - * packet into smaller packets on macroblock edges (e.g. as for RFC 2190). - * That is, it does not necessarily contain info about all macroblocks, - * as long as the distance between macroblocks in the info is smaller - * than the target payload size. - * Each MB info structure is 12 bytes, and is laid out as follows: - * @code - * u32le bit offset from the start of the packet - * u8 current quantizer at the start of the macroblock - * u8 GOB number - * u16le macroblock address within the GOB - * u8 horizontal MV predictor - * u8 vertical MV predictor - * u8 horizontal MV predictor for block number 3 - * u8 vertical MV predictor for block number 3 - * @endcode - */ - AV_PKT_DATA_H263_MB_INFO, - - /** - * This side data should be associated with an audio stream and contains - * ReplayGain information in form of the AVReplayGain struct. - */ - AV_PKT_DATA_REPLAYGAIN, - - /** - * This side data contains a 3x3 transformation matrix describing an affine - * transformation that needs to be applied to the decoded video frames for - * correct presentation. - * - * See libavutil/display.h for a detailed description of the data. - */ - AV_PKT_DATA_DISPLAYMATRIX, - - /** - * This side data should be associated with a video stream and contains - * Stereoscopic 3D information in form of the AVStereo3D struct. - */ - AV_PKT_DATA_STEREO3D, - - /** - * This side data should be associated with an audio stream and corresponds - * to enum AVAudioServiceType. - */ - AV_PKT_DATA_AUDIO_SERVICE_TYPE, - - /** - * This side data contains quality related information from the encoder. - * @code - * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad). - * u8 picture type - * u8 error count - * u16 reserved - * u64le[error count] sum of squared differences between encoder in and output - * @endcode - */ - AV_PKT_DATA_QUALITY_STATS, - - /** - * This side data contains an integer value representing the stream index - * of a "fallback" track. A fallback track indicates an alternate - * track to use when the current track can not be decoded for some reason. - * e.g. no decoder available for codec. - */ - AV_PKT_DATA_FALLBACK_TRACK, - - /** - * This side data corresponds to the AVCPBProperties struct. - */ - AV_PKT_DATA_CPB_PROPERTIES, - - /** - * Recommmends skipping the specified number of samples - * @code - * u32le number of samples to skip from start of this packet - * u32le number of samples to skip from end of this packet - * u8 reason for start skip - * u8 reason for end skip (0=padding silence, 1=convergence) - * @endcode - */ - AV_PKT_DATA_SKIP_SAMPLES, - - /** - * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that - * the packet may contain "dual mono" audio specific to Japanese DTV - * and if it is true, recommends only the selected channel to be used. - * @code - * u8 selected channels (0=mail/left, 1=sub/right, 2=both) - * @endcode - */ - AV_PKT_DATA_JP_DUALMONO, - - /** - * A list of zero terminated key/value strings. There is no end marker for - * the list, so it is required to rely on the side data size to stop. - */ - AV_PKT_DATA_STRINGS_METADATA, - - /** - * Subtitle event position - * @code - * u32le x1 - * u32le y1 - * u32le x2 - * u32le y2 - * @endcode - */ - AV_PKT_DATA_SUBTITLE_POSITION, - - /** - * Data found in BlockAdditional element of matroska container. There is - * no end marker for the data, so it is required to rely on the side data - * size to recognize the end. 8 byte id (as found in BlockAddId) followed - * by data. - */ - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, - - /** - * The optional first identifier line of a WebVTT cue. - */ - AV_PKT_DATA_WEBVTT_IDENTIFIER, - - /** - * The optional settings (rendering instructions) that immediately - * follow the timestamp specifier of a WebVTT cue. - */ - AV_PKT_DATA_WEBVTT_SETTINGS, - - /** - * A list of zero terminated key/value strings. There is no end marker for - * the list, so it is required to rely on the side data size to stop. This - * side data includes updated metadata which appeared in the stream. - */ - AV_PKT_DATA_METADATA_UPDATE, - - /** - * MPEGTS stream ID as uint8_t, this is required to pass the stream ID - * information from the demuxer to the corresponding muxer. - */ - AV_PKT_DATA_MPEGTS_STREAM_ID, - - /** - * Mastering display metadata (based on SMPTE-2086:2014). This metadata - * should be associated with a video stream and contains data in the form - * of the AVMasteringDisplayMetadata struct. - */ - AV_PKT_DATA_MASTERING_DISPLAY_METADATA, - - /** - * This side data should be associated with a video stream and corresponds - * to the AVSphericalMapping structure. - */ - AV_PKT_DATA_SPHERICAL, - - /** - * Content light level (based on CTA-861.3). This metadata should be - * associated with a video stream and contains data in the form of the - * AVContentLightMetadata struct. - */ - AV_PKT_DATA_CONTENT_LIGHT_LEVEL, - - /** - * ATSC A53 Part 4 Closed Captions. This metadata should be associated with - * a video stream. A53 CC bitstream is stored as uint8_t in AVPacketSideData.data. - * The number of bytes of CC data is AVPacketSideData.size. - */ - AV_PKT_DATA_A53_CC, - - /** - * This side data is encryption initialization data. - * The format is not part of ABI, use av_encryption_init_info_* methods to - * access. - */ - AV_PKT_DATA_ENCRYPTION_INIT_INFO, - - /** - * This side data contains encryption info for how to decrypt the packet. - * The format is not part of ABI, use av_encryption_info_* methods to access. - */ - AV_PKT_DATA_ENCRYPTION_INFO, - - /** - * Active Format Description data consisting of a single byte as specified - * in ETSI TS 101 154 using AVActiveFormatDescription enum. - */ - AV_PKT_DATA_AFD, - - /** - * Producer Reference Time data corresponding to the AVProducerReferenceTime struct, - * usually exported by some encoders (on demand through the prft flag set in the - * AVCodecContext export_side_data field). - */ - AV_PKT_DATA_PRFT, - - /** - * ICC profile data consisting of an opaque octet buffer following the - * format described by ISO 15076-1. - */ - AV_PKT_DATA_ICC_PROFILE, - - /** - * DOVI configuration - * ref: - * dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2, section 2.2 - * dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2, section 3.3 - * Tags are stored in struct AVDOVIDecoderConfigurationRecord. - */ - AV_PKT_DATA_DOVI_CONF, - - /** - * Timecode which conforms to SMPTE ST 12-1:2014. The data is an array of 4 uint32_t - * where the first uint32_t describes how many (1-3) of the other timecodes are used. - * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() - * function in libavutil/timecode.h. - */ - AV_PKT_DATA_S12M_TIMECODE, - - /** - * The number of side data types. - * This is not part of the public API/ABI in the sense that it may - * change when new side data types are added. - * This must stay the last enum value. - * If its value becomes huge, some code using it - * needs to be updated as it assumes it to be smaller than other limits. - */ - AV_PKT_DATA_NB -}; - -#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED - -typedef struct AVPacketSideData { - uint8_t *data; -#if FF_API_BUFFER_SIZE_T - int size; -#else - size_t size; -#endif - enum AVPacketSideDataType type; -} AVPacketSideData; - -/** - * This structure stores compressed data. It is typically exported by demuxers - * and then passed as input to decoders, or received as output from encoders and - * then passed to muxers. - * - * For video, it should typically contain one compressed frame. For audio it may - * contain several compressed frames. Encoders are allowed to output empty - * packets, with no compressed data, containing only side data - * (e.g. to update some stream parameters at the end of encoding). - * - * The semantics of data ownership depends on the buf field. - * If it is set, the packet data is dynamically allocated and is - * valid indefinitely until a call to av_packet_unref() reduces the - * reference count to 0. - * - * If the buf field is not set av_packet_ref() would make a copy instead - * of increasing the reference count. - * - * The side data is always allocated with av_malloc(), copied by - * av_packet_ref() and freed by av_packet_unref(). - * - * sizeof(AVPacket) being a part of the public ABI is deprecated. once - * av_init_packet() is removed, new packets will only be able to be allocated - * with av_packet_alloc(), and new fields may be added to the end of the struct - * with a minor bump. - * - * @see av_packet_alloc - * @see av_packet_ref - * @see av_packet_unref - */ -typedef struct AVPacket { - /** - * A reference to the reference-counted buffer where the packet data is - * stored. - * May be NULL, then the packet data is not reference-counted. - */ - AVBufferRef *buf; - /** - * Presentation timestamp in AVStream->time_base units; the time at which - * the decompressed packet will be presented to the user. - * Can be AV_NOPTS_VALUE if it is not stored in the file. - * pts MUST be larger or equal to dts as presentation cannot happen before - * decompression, unless one wants to view hex dumps. Some formats misuse - * the terms dts and pts/cts to mean something different. Such timestamps - * must be converted to true pts/dts before they are stored in AVPacket. - */ - int64_t pts; - /** - * Decompression timestamp in AVStream->time_base units; the time at which - * the packet is decompressed. - * Can be AV_NOPTS_VALUE if it is not stored in the file. - */ - int64_t dts; - uint8_t *data; - int size; - int stream_index; - /** - * A combination of AV_PKT_FLAG values - */ - int flags; - /** - * Additional packet data that can be provided by the container. - * Packet can contain several types of side information. - */ - AVPacketSideData *side_data; - int side_data_elems; - - /** - * Duration of this packet in AVStream->time_base units, 0 if unknown. - * Equals next_pts - this_pts in presentation order. - */ - int64_t duration; - - int64_t pos; ///< byte position in stream, -1 if unknown - -#if FF_API_CONVERGENCE_DURATION - /** - * @deprecated Same as the duration field, but as int64_t. This was required - * for Matroska subtitles, whose duration values could overflow when the - * duration field was still an int. - */ - attribute_deprecated - int64_t convergence_duration; -#endif -} AVPacket; - -#if FF_API_INIT_PACKET -attribute_deprecated -typedef struct AVPacketList { - AVPacket pkt; - struct AVPacketList *next; -} AVPacketList; -#endif - -#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe -#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted -/** - * Flag is used to discard packets which are required to maintain valid - * decoder state but are not required for output and should be dropped - * after decoding. - **/ -#define AV_PKT_FLAG_DISCARD 0x0004 -/** - * The packet comes from a trusted source. - * - * Otherwise-unsafe constructs such as arbitrary pointers to data - * outside the packet may be followed. - */ -#define AV_PKT_FLAG_TRUSTED 0x0008 -/** - * Flag is used to indicate packets that contain frames that can - * be discarded by the decoder. I.e. Non-reference frames. - */ -#define AV_PKT_FLAG_DISPOSABLE 0x0010 - -enum AVSideDataParamChangeFlags { - AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001, - AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002, - AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004, - AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008, -}; - -/** - * Allocate an AVPacket and set its fields to default values. The resulting - * struct must be freed using av_packet_free(). - * - * @return An AVPacket filled with default values or NULL on failure. - * - * @note this only allocates the AVPacket itself, not the data buffers. Those - * must be allocated through other means such as av_new_packet. - * - * @see av_new_packet - */ -AVPacket *av_packet_alloc(void); - -/** - * Create a new packet that references the same data as src. - * - * This is a shortcut for av_packet_alloc()+av_packet_ref(). - * - * @return newly created AVPacket on success, NULL on error. - * - * @see av_packet_alloc - * @see av_packet_ref - */ -AVPacket *av_packet_clone(const AVPacket *src); - -/** - * Free the packet, if the packet is reference counted, it will be - * unreferenced first. - * - * @param pkt packet to be freed. The pointer will be set to NULL. - * @note passing NULL is a no-op. - */ -void av_packet_free(AVPacket **pkt); - -#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 - -/** - * Allocate the payload of a packet and initialize its fields with - * default values. - * - * @param pkt packet - * @param size wanted payload size - * @return 0 if OK, AVERROR_xxx otherwise - */ -int av_new_packet(AVPacket *pkt, int size); - -/** - * Reduce packet size, correctly zeroing padding - * - * @param pkt packet - * @param size new size - */ -void av_shrink_packet(AVPacket *pkt, int size); - -/** - * Increase packet size, correctly zeroing padding - * - * @param pkt packet - * @param grow_by number of bytes by which to increase the size of the packet - */ -int av_grow_packet(AVPacket *pkt, int grow_by); - -/** - * Initialize a reference-counted packet from av_malloc()ed data. - * - * @param pkt packet to be initialized. This function will set the data, size, - * and buf fields, all others are left untouched. - * @param data Data allocated by av_malloc() to be used as packet data. If this - * function returns successfully, the data is owned by the underlying AVBuffer. - * The caller may not access the data through other means. - * @param size size of data in bytes, without the padding. I.e. the full buffer - * size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE. - * - * @return 0 on success, a negative AVERROR on error - */ -int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size); - -#if FF_API_AVPACKET_OLD_API -/** - * @warning This is a hack - the packet memory allocation stuff is broken. The - * packet is allocated if it was not really allocated. - * - * @deprecated Use av_packet_ref or av_packet_make_refcounted - */ -attribute_deprecated -int av_dup_packet(AVPacket *pkt); -/** - * Copy packet, including contents - * - * @return 0 on success, negative AVERROR on fail - * - * @deprecated Use av_packet_ref - */ -attribute_deprecated -int av_copy_packet(AVPacket *dst, const AVPacket *src); - -/** - * Copy packet side data - * - * @return 0 on success, negative AVERROR on fail - * - * @deprecated Use av_packet_copy_props - */ -attribute_deprecated -int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src); - -/** - * Free a packet. - * - * @deprecated Use av_packet_unref - * - * @param pkt packet to free - */ -attribute_deprecated -void av_free_packet(AVPacket *pkt); -#endif -/** - * Allocate new information of a packet. - * - * @param pkt packet - * @param type side information type - * @param size side information size - * @return pointer to fresh allocated data or NULL otherwise - */ -uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, -#if FF_API_BUFFER_SIZE_T - int size); -#else - size_t size); -#endif - -/** - * Wrap an existing array as a packet side data. - * - * @param pkt packet - * @param type side information type - * @param data the side data array. It must be allocated with the av_malloc() - * family of functions. The ownership of the data is transferred to - * pkt. - * @param size side information size - * @return a non-negative number on success, a negative AVERROR code on - * failure. On failure, the packet is unchanged and the data remains - * owned by the caller. - */ -int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - uint8_t *data, size_t size); - -/** - * Shrink the already allocated side data buffer - * - * @param pkt packet - * @param type side information type - * @param size new side information size - * @return 0 on success, < 0 on failure - */ -int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, -#if FF_API_BUFFER_SIZE_T - int size); -#else - size_t size); -#endif - -/** - * Get side information from packet. - * - * @param pkt packet - * @param type desired side information type - * @param size If supplied, *size will be set to the size of the side data - * or to zero if the desired side data is not present. - * @return pointer to data if present or NULL otherwise - */ -uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, -#if FF_API_BUFFER_SIZE_T - int *size); -#else - size_t *size); -#endif - -#if FF_API_MERGE_SD_API -attribute_deprecated -int av_packet_merge_side_data(AVPacket *pkt); - -attribute_deprecated -int av_packet_split_side_data(AVPacket *pkt); -#endif - -const char *av_packet_side_data_name(enum AVPacketSideDataType type); - -/** - * Pack a dictionary for use in side_data. - * - * @param dict The dictionary to pack. - * @param size pointer to store the size of the returned data - * @return pointer to data if successful, NULL otherwise - */ -#if FF_API_BUFFER_SIZE_T -uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size); -#else -uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size); -#endif -/** - * Unpack a dictionary from side_data. - * - * @param data data from side_data - * @param size size of the data - * @param dict the metadata storage dictionary - * @return 0 on success, < 0 on failure - */ -#if FF_API_BUFFER_SIZE_T -int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict); -#else -int av_packet_unpack_dictionary(const uint8_t *data, size_t size, - AVDictionary **dict); -#endif - -/** - * Convenience function to free all the side data stored. - * All the other fields stay untouched. - * - * @param pkt packet - */ -void av_packet_free_side_data(AVPacket *pkt); - -/** - * Setup a new reference to the data described by a given packet - * - * If src is reference-counted, setup dst as a new reference to the - * buffer in src. Otherwise allocate a new buffer in dst and copy the - * data from src into it. - * - * All the other fields are copied from src. - * - * @see av_packet_unref - * - * @param dst Destination packet. Will be completely overwritten. - * @param src Source packet - * - * @return 0 on success, a negative AVERROR on error. On error, dst - * will be blank (as if returned by av_packet_alloc()). - */ -int av_packet_ref(AVPacket *dst, const AVPacket *src); - -/** - * Wipe the packet. - * - * Unreference the buffer referenced by the packet and reset the - * remaining packet fields to their default values. - * - * @param pkt The packet to be unreferenced. - */ -void av_packet_unref(AVPacket *pkt); - -/** - * Move every field in src to dst and reset src. - * - * @see av_packet_unref - * - * @param src Source packet, will be reset - * @param dst Destination packet - */ -void av_packet_move_ref(AVPacket *dst, AVPacket *src); - -/** - * Copy only "properties" fields from src to dst. - * - * Properties for the purpose of this function are all the fields - * beside those related to the packet data (buf, data, size) - * - * @param dst Destination packet - * @param src Source packet - * - * @return 0 on success AVERROR on failure. - */ -int av_packet_copy_props(AVPacket *dst, const AVPacket *src); - -/** - * Ensure the data described by a given packet is reference counted. - * - * @note This function does not ensure that the reference will be writable. - * Use av_packet_make_writable instead for that purpose. - * - * @see av_packet_ref - * @see av_packet_make_writable - * - * @param pkt packet whose data should be made reference counted. - * - * @return 0 on success, a negative AVERROR on error. On failure, the - * packet is unchanged. - */ -int av_packet_make_refcounted(AVPacket *pkt); - -/** - * Create a writable reference for the data described by a given packet, - * avoiding data copy if possible. - * - * @param pkt Packet whose data should be made writable. - * - * @return 0 on success, a negative AVERROR on failure. On failure, the - * packet is unchanged. - */ -int av_packet_make_writable(AVPacket *pkt); - -/** - * Convert valid timing fields (timestamps / durations) in a packet from one - * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be - * ignored. - * - * @param pkt packet on which the conversion will be performed - * @param tb_src source timebase, in which the timing fields in pkt are - * expressed - * @param tb_dst destination timebase, to which the timing fields will be - * converted - */ -void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst); - -/** - * @} - */ - -#endif // AVCODEC_PACKET_H diff --git a/prebuilts/x86_64/include/libavcodec/qsv.h b/prebuilts/x86_64/include/libavcodec/qsv.h deleted file mode 100644 index b77158e..0000000 --- a/prebuilts/x86_64/include/libavcodec/qsv.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Intel MediaSDK QSV public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_QSV_H -#define AVCODEC_QSV_H - -#include - -#include "libavutil/buffer.h" - -/** - * This struct is used for communicating QSV parameters between libavcodec and - * the caller. It is managed by the caller and must be assigned to - * AVCodecContext.hwaccel_context. - * - decoding: hwaccel_context must be set on return from the get_format() - * callback - * - encoding: hwaccel_context must be set before avcodec_open2() - */ -typedef struct AVQSVContext { - /** - * If non-NULL, the session to use for encoding or decoding. - * Otherwise, libavcodec will try to create an internal session. - */ - mfxSession session; - - /** - * The IO pattern to use. - */ - int iopattern; - - /** - * Extra buffers to pass to encoder or decoder initialization. - */ - mfxExtBuffer **ext_buffers; - int nb_ext_buffers; - - /** - * Encoding only. If this field is set to non-zero by the caller, libavcodec - * will create an mfxExtOpaqueSurfaceAlloc extended buffer and pass it to - * the encoder initialization. This only makes sense if iopattern is also - * set to MFX_IOPATTERN_IN_OPAQUE_MEMORY. - * - * The number of allocated opaque surfaces will be the sum of the number - * required by the encoder and the user-provided value nb_opaque_surfaces. - * The array of the opaque surfaces will be exported to the caller through - * the opaque_surfaces field. - */ - int opaque_alloc; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. Before - * calling avcodec_open2(), the caller should set this field to the number - * of extra opaque surfaces to allocate beyond what is required by the - * encoder. - * - * On return from avcodec_open2(), this field will be set by libavcodec to - * the total number of allocated opaque surfaces. - */ - int nb_opaque_surfaces; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. On return - * from avcodec_open2(), this field will be used by libavcodec to export the - * array of the allocated opaque surfaces to the caller, so they can be - * passed to other parts of the pipeline. - * - * The buffer reference exported here is owned and managed by libavcodec, - * the callers should make their own reference with av_buffer_ref() and free - * it with av_buffer_unref() when it is no longer needed. - * - * The buffer data is an nb_opaque_surfaces-sized array of mfxFrameSurface1. - */ - AVBufferRef *opaque_surfaces; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. On return - * from avcodec_open2(), this field will be set to the surface type used in - * the opaque allocation request. - */ - int opaque_alloc_type; -} AVQSVContext; - -/** - * Allocate a new context. - * - * It must be freed by the caller with av_free(). - */ -AVQSVContext *av_qsv_alloc_context(void); - -#endif /* AVCODEC_QSV_H */ diff --git a/prebuilts/x86_64/include/libavcodec/vaapi.h b/prebuilts/x86_64/include/libavcodec/vaapi.h deleted file mode 100644 index 2cf7da5..0000000 --- a/prebuilts/x86_64/include/libavcodec/vaapi.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Video Acceleration API (shared data between FFmpeg and the video player) - * HW decode acceleration for MPEG-2, MPEG-4, H.264 and VC-1 - * - * Copyright (C) 2008-2009 Splitted-Desktop Systems - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VAAPI_H -#define AVCODEC_VAAPI_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_vaapi - * Public libavcodec VA API header. - */ - -#include -#include "libavutil/attributes.h" -#include "version.h" - -#if FF_API_STRUCT_VAAPI_CONTEXT - -/** - * @defgroup lavc_codec_hwaccel_vaapi VA API Decoding - * @ingroup lavc_codec_hwaccel - * @{ - */ - -/** - * This structure is used to share data between the FFmpeg library and - * the client video application. - * This shall be zero-allocated and available as - * AVCodecContext.hwaccel_context. All user members can be set once - * during initialization or through each AVCodecContext.get_buffer() - * function call. In any case, they must be valid prior to calling - * decoding functions. - * - * Deprecated: use AVCodecContext.hw_frames_ctx instead. - */ -struct attribute_deprecated vaapi_context { - /** - * Window system dependent data - * - * - encoding: unused - * - decoding: Set by user - */ - void *display; - - /** - * Configuration ID - * - * - encoding: unused - * - decoding: Set by user - */ - uint32_t config_id; - - /** - * Context ID (video decode pipeline) - * - * - encoding: unused - * - decoding: Set by user - */ - uint32_t context_id; -}; - -/* @} */ - -#endif /* FF_API_STRUCT_VAAPI_CONTEXT */ - -#endif /* AVCODEC_VAAPI_H */ diff --git a/prebuilts/x86_64/include/libavcodec/vdpau.h b/prebuilts/x86_64/include/libavcodec/vdpau.h deleted file mode 100644 index 4d99943..0000000 --- a/prebuilts/x86_64/include/libavcodec/vdpau.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * The Video Decode and Presentation API for UNIX (VDPAU) is used for - * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1. - * - * Copyright (C) 2008 NVIDIA - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VDPAU_H -#define AVCODEC_VDPAU_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_vdpau - * Public libavcodec VDPAU header. - */ - - -/** - * @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer - * @ingroup lavc_codec_hwaccel - * - * VDPAU hardware acceleration has two modules - * - VDPAU decoding - * - VDPAU presentation - * - * The VDPAU decoding module parses all headers using FFmpeg - * parsing mechanisms and uses VDPAU for the actual decoding. - * - * As per the current implementation, the actual decoding - * and rendering (API calls) are done as part of the VDPAU - * presentation (vo_vdpau.c) module. - * - * @{ - */ - -#include - -#include "libavutil/avconfig.h" -#include "libavutil/attributes.h" - -#include "avcodec.h" -#include "version.h" - -struct AVCodecContext; -struct AVFrame; - -typedef int (*AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *, - const VdpPictureInfo *, uint32_t, - const VdpBitstreamBuffer *); - -/** - * This structure is used to share data between the libavcodec library and - * the client video application. - * The user shall allocate the structure via the av_alloc_vdpau_hwaccel - * function and make it available as - * AVCodecContext.hwaccel_context. Members can be set by the user once - * during initialization or through each AVCodecContext.get_buffer() - * function call. In any case, they must be valid prior to calling - * decoding functions. - * - * The size of this structure is not a part of the public ABI and must not - * be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an - * AVVDPAUContext. - */ -typedef struct AVVDPAUContext { - /** - * VDPAU decoder handle - * - * Set by user. - */ - VdpDecoder decoder; - - /** - * VDPAU decoder render callback - * - * Set by the user. - */ - VdpDecoderRender *render; - - AVVDPAU_Render2 render2; -} AVVDPAUContext; - -/** - * @brief allocation function for AVVDPAUContext - * - * Allows extending the struct without breaking API/ABI - */ -AVVDPAUContext *av_alloc_vdpaucontext(void); - -AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *); -void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2); - -/** - * Associate a VDPAU device with a codec context for hardware acceleration. - * This function is meant to be called from the get_format() codec callback, - * or earlier. It can also be called after avcodec_flush_buffers() to change - * the underlying VDPAU device mid-stream (e.g. to recover from non-transparent - * display preemption). - * - * @note get_format() must return AV_PIX_FMT_VDPAU if this function completes - * successfully. - * - * @param avctx decoding context whose get_format() callback is invoked - * @param device VDPAU device handle to use for hardware acceleration - * @param get_proc_address VDPAU device driver - * @param flags zero of more OR'd AV_HWACCEL_FLAG_* flags - * - * @return 0 on success, an AVERROR code on failure. - */ -int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device, - VdpGetProcAddress *get_proc_address, unsigned flags); - -/** - * Gets the parameters to create an adequate VDPAU video surface for the codec - * context using VDPAU hardware decoding acceleration. - * - * @note Behavior is undefined if the context was not successfully bound to a - * VDPAU device using av_vdpau_bind_context(). - * - * @param avctx the codec context being used for decoding the stream - * @param type storage space for the VDPAU video surface chroma type - * (or NULL to ignore) - * @param width storage space for the VDPAU video surface pixel width - * (or NULL to ignore) - * @param height storage space for the VDPAU video surface pixel height - * (or NULL to ignore) - * - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type, - uint32_t *width, uint32_t *height); - -/** - * Allocate an AVVDPAUContext. - * - * @return Newly-allocated AVVDPAUContext or NULL on failure. - */ -AVVDPAUContext *av_vdpau_alloc_context(void); - -#if FF_API_VDPAU_PROFILE -/** - * Get a decoder profile that should be used for initializing a VDPAU decoder. - * Should be called from the AVCodecContext.get_format() callback. - * - * @deprecated Use av_vdpau_bind_context() instead. - * - * @param avctx the codec context being used for decoding the stream - * @param profile a pointer into which the result will be written on success. - * The contents of profile are undefined if this function returns - * an error. - * - * @return 0 on success (non-negative), a negative AVERROR on failure. - */ -attribute_deprecated -int av_vdpau_get_profile(AVCodecContext *avctx, VdpDecoderProfile *profile); -#endif - -/* @}*/ - -#endif /* AVCODEC_VDPAU_H */ diff --git a/prebuilts/x86_64/include/libavcodec/version.h b/prebuilts/x86_64/include/libavcodec/version.h deleted file mode 100644 index cfdde46..0000000 --- a/prebuilts/x86_64/include/libavcodec/version.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VERSION_H -#define AVCODEC_VERSION_H - -/** - * @file - * @ingroup libavc - * Libavcodec version macros. - */ - -#include "libavutil/version.h" - -#define LIBAVCODEC_VERSION_MAJOR 58 -#define LIBAVCODEC_VERSION_MINOR 134 -#define LIBAVCODEC_VERSION_MICRO 100 - -#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ - LIBAVCODEC_VERSION_MINOR, \ - LIBAVCODEC_VERSION_MICRO) -#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \ - LIBAVCODEC_VERSION_MINOR, \ - LIBAVCODEC_VERSION_MICRO) -#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT - -#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - */ - -#ifndef FF_API_AVCTX_TIMEBASE -#define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CODED_FRAME -#define FF_API_CODED_FRAME (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_SIDEDATA_ONLY_PKT -#define FF_API_SIDEDATA_ONLY_PKT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_VDPAU_PROFILE -#define FF_API_VDPAU_PROFILE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CONVERGENCE_DURATION -#define FF_API_CONVERGENCE_DURATION (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVPICTURE -#define FF_API_AVPICTURE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVPACKET_OLD_API -#define FF_API_AVPACKET_OLD_API (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_RTP_CALLBACK -#define FF_API_RTP_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_VBV_DELAY -#define FF_API_VBV_DELAY (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CODER_TYPE -#define FF_API_CODER_TYPE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_STAT_BITS -#define FF_API_STAT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_PRIVATE_OPT -#define FF_API_PRIVATE_OPT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_ASS_TIMING -#define FF_API_ASS_TIMING (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_BSF -#define FF_API_OLD_BSF (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_COPY_CONTEXT -#define FF_API_COPY_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_GET_CONTEXT_DEFAULTS -#define FF_API_GET_CONTEXT_DEFAULTS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_NVENC_OLD_NAME -#define FF_API_NVENC_OLD_NAME (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_STRUCT_VAAPI_CONTEXT -#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_MERGE_SD_API -#define FF_API_MERGE_SD_API (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_TAG_STRING -#define FF_API_TAG_STRING (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_GETCHROMA -#define FF_API_GETCHROMA (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CODEC_GET_SET -#define FF_API_CODEC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_USER_VISIBLE_AVHWACCEL -#define FF_API_USER_VISIBLE_AVHWACCEL (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LOCKMGR -#define FF_API_LOCKMGR (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_NEXT -#define FF_API_NEXT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_UNSANITIZED_BITRATES -#define FF_API_UNSANITIZED_BITRATES (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OPENH264_SLICE_MODE -#define FF_API_OPENH264_SLICE_MODE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OPENH264_CABAC -#define FF_API_OPENH264_CABAC (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_UNUSED_CODEC_CAPS -#define FF_API_UNUSED_CODEC_CAPS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVPRIV_PUT_BITS -#define FF_API_AVPRIV_PUT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_ENCDEC -#define FF_API_OLD_ENCDEC (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVCODEC_PIX_FMT -#define FF_API_AVCODEC_PIX_FMT (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_MPV_RC_STRATEGY -#define FF_API_MPV_RC_STRATEGY (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_PARSER_CHANGE -#define FF_API_PARSER_CHANGE (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_THREAD_SAFE_CALLBACKS -#define FF_API_THREAD_SAFE_CALLBACKS (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_DEBUG_MV -#define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_GET_FRAME_CLASS -#define FF_API_GET_FRAME_CLASS (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_AUTO_THREADS -#define FF_API_AUTO_THREADS (LIBAVCODEC_VERSION_MAJOR < 60) -#endif -#ifndef FF_API_INIT_PACKET -#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 60) -#endif - -#endif /* AVCODEC_VERSION_H */ diff --git a/prebuilts/x86_64/include/libavcodec/videotoolbox.h b/prebuilts/x86_64/include/libavcodec/videotoolbox.h deleted file mode 100644 index af2db0d..0000000 --- a/prebuilts/x86_64/include/libavcodec/videotoolbox.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Videotoolbox hardware acceleration - * - * copyright (c) 2012 Sebastien Zwickert - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VIDEOTOOLBOX_H -#define AVCODEC_VIDEOTOOLBOX_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_videotoolbox - * Public libavcodec Videotoolbox header. - */ - -#include - -#define Picture QuickdrawPicture -#include -#undef Picture - -#include "libavcodec/avcodec.h" - -/** - * This struct holds all the information that needs to be passed - * between the caller and libavcodec for initializing Videotoolbox decoding. - * Its size is not a part of the public ABI, it must be allocated with - * av_videotoolbox_alloc_context() and freed with av_free(). - */ -typedef struct AVVideotoolboxContext { - /** - * Videotoolbox decompression session object. - * Created and freed the caller. - */ - VTDecompressionSessionRef session; - - /** - * The output callback that must be passed to the session. - * Set by av_videottoolbox_default_init() - */ - VTDecompressionOutputCallback output_callback; - - /** - * CVPixelBuffer Format Type that Videotoolbox will use for decoded frames. - * set by the caller. If this is set to 0, then no specific format is - * requested from the decoder, and its native format is output. - */ - OSType cv_pix_fmt_type; - - /** - * CoreMedia Format Description that Videotoolbox will use to create the decompression session. - * Set by the caller. - */ - CMVideoFormatDescriptionRef cm_fmt_desc; - - /** - * CoreMedia codec type that Videotoolbox will use to create the decompression session. - * Set by the caller. - */ - int cm_codec_type; -} AVVideotoolboxContext; - -/** - * Allocate and initialize a Videotoolbox context. - * - * This function should be called from the get_format() callback when the caller - * selects the AV_PIX_FMT_VIDETOOLBOX format. The caller must then create - * the decoder object (using the output callback provided by libavcodec) that - * will be used for Videotoolbox-accelerated decoding. - * - * When decoding with Videotoolbox is finished, the caller must destroy the decoder - * object and free the Videotoolbox context using av_free(). - * - * @return the newly allocated context or NULL on failure - */ -AVVideotoolboxContext *av_videotoolbox_alloc_context(void); - -/** - * This is a convenience function that creates and sets up the Videotoolbox context using - * an internal implementation. - * - * @param avctx the corresponding codec context - * - * @return >= 0 on success, a negative AVERROR code on failure - */ -int av_videotoolbox_default_init(AVCodecContext *avctx); - -/** - * This is a convenience function that creates and sets up the Videotoolbox context using - * an internal implementation. - * - * @param avctx the corresponding codec context - * @param vtctx the Videotoolbox context to use - * - * @return >= 0 on success, a negative AVERROR code on failure - */ -int av_videotoolbox_default_init2(AVCodecContext *avctx, AVVideotoolboxContext *vtctx); - -/** - * This function must be called to free the Videotoolbox context initialized with - * av_videotoolbox_default_init(). - * - * @param avctx the corresponding codec context - */ -void av_videotoolbox_default_free(AVCodecContext *avctx); - -/** - * @} - */ - -#endif /* AVCODEC_VIDEOTOOLBOX_H */ diff --git a/prebuilts/x86_64/include/libavcodec/vorbis_parser.h b/prebuilts/x86_64/include/libavcodec/vorbis_parser.h deleted file mode 100644 index 789932a..0000000 --- a/prebuilts/x86_64/include/libavcodec/vorbis_parser.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * A public API for Vorbis parsing - * - * Determines the duration for each packet. - */ - -#ifndef AVCODEC_VORBIS_PARSER_H -#define AVCODEC_VORBIS_PARSER_H - -#include - -typedef struct AVVorbisParseContext AVVorbisParseContext; - -/** - * Allocate and initialize the Vorbis parser using headers in the extradata. - */ -AVVorbisParseContext *av_vorbis_parse_init(const uint8_t *extradata, - int extradata_size); - -/** - * Free the parser and everything associated with it. - */ -void av_vorbis_parse_free(AVVorbisParseContext **s); - -#define VORBIS_FLAG_HEADER 0x00000001 -#define VORBIS_FLAG_COMMENT 0x00000002 -#define VORBIS_FLAG_SETUP 0x00000004 - -/** - * Get the duration for a Vorbis packet. - * - * If @p flags is @c NULL, - * special frames are considered invalid. - * - * @param s Vorbis parser context - * @param buf buffer containing a Vorbis frame - * @param buf_size size of the buffer - * @param flags flags for special frames - */ -int av_vorbis_parse_frame_flags(AVVorbisParseContext *s, const uint8_t *buf, - int buf_size, int *flags); - -/** - * Get the duration for a Vorbis packet. - * - * @param s Vorbis parser context - * @param buf buffer containing a Vorbis frame - * @param buf_size size of the buffer - */ -int av_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf, - int buf_size); - -void av_vorbis_parse_reset(AVVorbisParseContext *s); - -#endif /* AVCODEC_VORBIS_PARSER_H */ diff --git a/prebuilts/x86_64/include/libavcodec/xvmc.h b/prebuilts/x86_64/include/libavcodec/xvmc.h deleted file mode 100644 index 465ee78..0000000 --- a/prebuilts/x86_64/include/libavcodec/xvmc.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (C) 2003 Ivan Kalvachev - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_XVMC_H -#define AVCODEC_XVMC_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_xvmc - * Public libavcodec XvMC header. - */ - -#include - -#include "libavutil/attributes.h" -#include "version.h" -#include "avcodec.h" - -/** - * @defgroup lavc_codec_hwaccel_xvmc XvMC - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct - the number is 1337 speak for the letters IDCT MCo (motion compensation) */ - -struct attribute_deprecated xvmc_pix_fmt { - /** The field contains the special constant value AV_XVMC_ID. - It is used as a test that the application correctly uses the API, - and that there is no corruption caused by pixel routines. - - application - set during initialization - - libavcodec - unchanged - */ - int xvmc_id; - - /** Pointer to the block array allocated by XvMCCreateBlocks(). - The array has to be freed by XvMCDestroyBlocks(). - Each group of 64 values represents one data block of differential - pixel information (in MoCo mode) or coefficients for IDCT. - - application - set the pointer during initialization - - libavcodec - fills coefficients/pixel data into the array - */ - short* data_blocks; - - /** Pointer to the macroblock description array allocated by - XvMCCreateMacroBlocks() and freed by XvMCDestroyMacroBlocks(). - - application - set the pointer during initialization - - libavcodec - fills description data into the array - */ - XvMCMacroBlock* mv_blocks; - - /** Number of macroblock descriptions that can be stored in the mv_blocks - array. - - application - set during initialization - - libavcodec - unchanged - */ - int allocated_mv_blocks; - - /** Number of blocks that can be stored at once in the data_blocks array. - - application - set during initialization - - libavcodec - unchanged - */ - int allocated_data_blocks; - - /** Indicate that the hardware would interpret data_blocks as IDCT - coefficients and perform IDCT on them. - - application - set during initialization - - libavcodec - unchanged - */ - int idct; - - /** In MoCo mode it indicates that intra macroblocks are assumed to be in - unsigned format; same as the XVMC_INTRA_UNSIGNED flag. - - application - set during initialization - - libavcodec - unchanged - */ - int unsigned_intra; - - /** Pointer to the surface allocated by XvMCCreateSurface(). - It has to be freed by XvMCDestroySurface() on application exit. - It identifies the frame and its state on the video hardware. - - application - set during initialization - - libavcodec - unchanged - */ - XvMCSurface* p_surface; - -/** Set by the decoder before calling ff_draw_horiz_band(), - needed by the XvMCRenderSurface function. */ -//@{ - /** Pointer to the surface used as past reference - - application - unchanged - - libavcodec - set - */ - XvMCSurface* p_past_surface; - - /** Pointer to the surface used as future reference - - application - unchanged - - libavcodec - set - */ - XvMCSurface* p_future_surface; - - /** top/bottom field or frame - - application - unchanged - - libavcodec - set - */ - unsigned int picture_structure; - - /** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence - - application - unchanged - - libavcodec - set - */ - unsigned int flags; -//}@ - - /** Number of macroblock descriptions in the mv_blocks array - that have already been passed to the hardware. - - application - zeroes it on get_buffer(). - A successful ff_draw_horiz_band() may increment it - with filled_mb_block_num or zero both. - - libavcodec - unchanged - */ - int start_mv_blocks_num; - - /** Number of new macroblock descriptions in the mv_blocks array (after - start_mv_blocks_num) that are filled by libavcodec and have to be - passed to the hardware. - - application - zeroes it on get_buffer() or after successful - ff_draw_horiz_band(). - - libavcodec - increment with one of each stored MB - */ - int filled_mv_blocks_num; - - /** Number of the next free data block; one data block consists of - 64 short values in the data_blocks array. - All blocks before this one have already been claimed by placing their - position into the corresponding block description structure field, - that are part of the mv_blocks array. - - application - zeroes it on get_buffer(). - A successful ff_draw_horiz_band() may zero it together - with start_mb_blocks_num. - - libavcodec - each decoded macroblock increases it by the number - of coded blocks it contains. - */ - int next_free_data_block_num; -}; - -/** - * @} - */ - -#endif /* AVCODEC_XVMC_H */ diff --git a/prebuilts/x86_64/include/libavdevice/avdevice.h b/prebuilts/x86_64/include/libavdevice/avdevice.h deleted file mode 100644 index 85a4dcc..0000000 --- a/prebuilts/x86_64/include/libavdevice/avdevice.h +++ /dev/null @@ -1,519 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVDEVICE_AVDEVICE_H -#define AVDEVICE_AVDEVICE_H - -#include "version.h" - -/** - * @file - * @ingroup lavd - * Main libavdevice API header - */ - -/** - * @defgroup lavd libavdevice - * Special devices muxing/demuxing library. - * - * Libavdevice is a complementary library to @ref libavf "libavformat". It - * provides various "special" platform-specific muxers and demuxers, e.g. for - * grabbing devices, audio capture and playback etc. As a consequence, the - * (de)muxers in libavdevice are of the AVFMT_NOFILE type (they use their own - * I/O functions). The filename passed to avformat_open_input() often does not - * refer to an actually existing file, but has some special device-specific - * meaning - e.g. for xcbgrab it is the display name. - * - * To use libavdevice, simply call avdevice_register_all() to register all - * compiled muxers and demuxers. They all use standard libavformat API. - * - * @{ - */ - -#include "libavutil/log.h" -#include "libavutil/opt.h" -#include "libavutil/dict.h" -#include "libavformat/avformat.h" - -/** - * Return the LIBAVDEVICE_VERSION_INT constant. - */ -unsigned avdevice_version(void); - -/** - * Return the libavdevice build-time configuration. - */ -const char *avdevice_configuration(void); - -/** - * Return the libavdevice license. - */ -const char *avdevice_license(void); - -/** - * Initialize libavdevice and register all the input and output devices. - */ -void avdevice_register_all(void); - -/** - * Audio input devices iterator. - * - * If d is NULL, returns the first registered input audio/video device, - * if d is non-NULL, returns the next registered input audio/video device after d - * or NULL if d is the last one. - */ -AVInputFormat *av_input_audio_device_next(AVInputFormat *d); - -/** - * Video input devices iterator. - * - * If d is NULL, returns the first registered input audio/video device, - * if d is non-NULL, returns the next registered input audio/video device after d - * or NULL if d is the last one. - */ -AVInputFormat *av_input_video_device_next(AVInputFormat *d); - -/** - * Audio output devices iterator. - * - * If d is NULL, returns the first registered output audio/video device, - * if d is non-NULL, returns the next registered output audio/video device after d - * or NULL if d is the last one. - */ -AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d); - -/** - * Video output devices iterator. - * - * If d is NULL, returns the first registered output audio/video device, - * if d is non-NULL, returns the next registered output audio/video device after d - * or NULL if d is the last one. - */ -AVOutputFormat *av_output_video_device_next(AVOutputFormat *d); - -typedef struct AVDeviceRect { - int x; /**< x coordinate of top left corner */ - int y; /**< y coordinate of top left corner */ - int width; /**< width */ - int height; /**< height */ -} AVDeviceRect; - -/** - * Message types used by avdevice_app_to_dev_control_message(). - */ -enum AVAppToDevMessageType { - /** - * Dummy message. - */ - AV_APP_TO_DEV_NONE = MKBETAG('N','O','N','E'), - - /** - * Window size change message. - * - * Message is sent to the device every time the application changes the size - * of the window device renders to. - * Message should also be sent right after window is created. - * - * data: AVDeviceRect: new window size. - */ - AV_APP_TO_DEV_WINDOW_SIZE = MKBETAG('G','E','O','M'), - - /** - * Repaint request message. - * - * Message is sent to the device when window has to be repainted. - * - * data: AVDeviceRect: area required to be repainted. - * NULL: whole area is required to be repainted. - */ - AV_APP_TO_DEV_WINDOW_REPAINT = MKBETAG('R','E','P','A'), - - /** - * Request pause/play. - * - * Application requests pause/unpause playback. - * Mostly usable with devices that have internal buffer. - * By default devices are not paused. - * - * data: NULL - */ - AV_APP_TO_DEV_PAUSE = MKBETAG('P', 'A', 'U', ' '), - AV_APP_TO_DEV_PLAY = MKBETAG('P', 'L', 'A', 'Y'), - AV_APP_TO_DEV_TOGGLE_PAUSE = MKBETAG('P', 'A', 'U', 'T'), - - /** - * Volume control message. - * - * Set volume level. It may be device-dependent if volume - * is changed per stream or system wide. Per stream volume - * change is expected when possible. - * - * data: double: new volume with range of 0.0 - 1.0. - */ - AV_APP_TO_DEV_SET_VOLUME = MKBETAG('S', 'V', 'O', 'L'), - - /** - * Mute control messages. - * - * Change mute state. It may be device-dependent if mute status - * is changed per stream or system wide. Per stream mute status - * change is expected when possible. - * - * data: NULL. - */ - AV_APP_TO_DEV_MUTE = MKBETAG(' ', 'M', 'U', 'T'), - AV_APP_TO_DEV_UNMUTE = MKBETAG('U', 'M', 'U', 'T'), - AV_APP_TO_DEV_TOGGLE_MUTE = MKBETAG('T', 'M', 'U', 'T'), - - /** - * Get volume/mute messages. - * - * Force the device to send AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED or - * AV_DEV_TO_APP_MUTE_STATE_CHANGED command respectively. - * - * data: NULL. - */ - AV_APP_TO_DEV_GET_VOLUME = MKBETAG('G', 'V', 'O', 'L'), - AV_APP_TO_DEV_GET_MUTE = MKBETAG('G', 'M', 'U', 'T'), -}; - -/** - * Message types used by avdevice_dev_to_app_control_message(). - */ -enum AVDevToAppMessageType { - /** - * Dummy message. - */ - AV_DEV_TO_APP_NONE = MKBETAG('N','O','N','E'), - - /** - * Create window buffer message. - * - * Device requests to create a window buffer. Exact meaning is device- - * and application-dependent. Message is sent before rendering first - * frame and all one-shot initializations should be done here. - * Application is allowed to ignore preferred window buffer size. - * - * @note: Application is obligated to inform about window buffer size - * with AV_APP_TO_DEV_WINDOW_SIZE message. - * - * data: AVDeviceRect: preferred size of the window buffer. - * NULL: no preferred size of the window buffer. - */ - AV_DEV_TO_APP_CREATE_WINDOW_BUFFER = MKBETAG('B','C','R','E'), - - /** - * Prepare window buffer message. - * - * Device requests to prepare a window buffer for rendering. - * Exact meaning is device- and application-dependent. - * Message is sent before rendering of each frame. - * - * data: NULL. - */ - AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER = MKBETAG('B','P','R','E'), - - /** - * Display window buffer message. - * - * Device requests to display a window buffer. - * Message is sent when new frame is ready to be displayed. - * Usually buffers need to be swapped in handler of this message. - * - * data: NULL. - */ - AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER = MKBETAG('B','D','I','S'), - - /** - * Destroy window buffer message. - * - * Device requests to destroy a window buffer. - * Message is sent when device is about to be destroyed and window - * buffer is not required anymore. - * - * data: NULL. - */ - AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER = MKBETAG('B','D','E','S'), - - /** - * Buffer fullness status messages. - * - * Device signals buffer overflow/underflow. - * - * data: NULL. - */ - AV_DEV_TO_APP_BUFFER_OVERFLOW = MKBETAG('B','O','F','L'), - AV_DEV_TO_APP_BUFFER_UNDERFLOW = MKBETAG('B','U','F','L'), - - /** - * Buffer readable/writable. - * - * Device informs that buffer is readable/writable. - * When possible, device informs how many bytes can be read/write. - * - * @warning Device may not inform when number of bytes than can be read/write changes. - * - * data: int64_t: amount of bytes available to read/write. - * NULL: amount of bytes available to read/write is not known. - */ - AV_DEV_TO_APP_BUFFER_READABLE = MKBETAG('B','R','D',' '), - AV_DEV_TO_APP_BUFFER_WRITABLE = MKBETAG('B','W','R',' '), - - /** - * Mute state change message. - * - * Device informs that mute state has changed. - * - * data: int: 0 for not muted state, non-zero for muted state. - */ - AV_DEV_TO_APP_MUTE_STATE_CHANGED = MKBETAG('C','M','U','T'), - - /** - * Volume level change message. - * - * Device informs that volume level has changed. - * - * data: double: new volume with range of 0.0 - 1.0. - */ - AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED = MKBETAG('C','V','O','L'), -}; - -/** - * Send control message from application to device. - * - * @param s device context. - * @param type message type. - * @param data message data. Exact type depends on message type. - * @param data_size size of message data. - * @return >= 0 on success, negative on error. - * AVERROR(ENOSYS) when device doesn't implement handler of the message. - */ -int avdevice_app_to_dev_control_message(struct AVFormatContext *s, - enum AVAppToDevMessageType type, - void *data, size_t data_size); - -/** - * Send control message from device to application. - * - * @param s device context. - * @param type message type. - * @param data message data. Can be NULL. - * @param data_size size of message data. - * @return >= 0 on success, negative on error. - * AVERROR(ENOSYS) when application doesn't implement handler of the message. - */ -int avdevice_dev_to_app_control_message(struct AVFormatContext *s, - enum AVDevToAppMessageType type, - void *data, size_t data_size); - -#if FF_API_DEVICE_CAPABILITIES -/** - * Following API allows user to probe device capabilities (supported codecs, - * pixel formats, sample formats, resolutions, channel counts, etc). - * It is build on top op AVOption API. - * Queried capabilities make it possible to set up converters of video or audio - * parameters that fit to the device. - * - * List of capabilities that can be queried: - * - Capabilities valid for both audio and video devices: - * - codec: supported audio/video codecs. - * type: AV_OPT_TYPE_INT (AVCodecID value) - * - Capabilities valid for audio devices: - * - sample_format: supported sample formats. - * type: AV_OPT_TYPE_INT (AVSampleFormat value) - * - sample_rate: supported sample rates. - * type: AV_OPT_TYPE_INT - * - channels: supported number of channels. - * type: AV_OPT_TYPE_INT - * - channel_layout: supported channel layouts. - * type: AV_OPT_TYPE_INT64 - * - Capabilities valid for video devices: - * - pixel_format: supported pixel formats. - * type: AV_OPT_TYPE_INT (AVPixelFormat value) - * - window_size: supported window sizes (describes size of the window size presented to the user). - * type: AV_OPT_TYPE_IMAGE_SIZE - * - frame_size: supported frame sizes (describes size of provided video frames). - * type: AV_OPT_TYPE_IMAGE_SIZE - * - fps: supported fps values - * type: AV_OPT_TYPE_RATIONAL - * - * Value of the capability may be set by user using av_opt_set() function - * and AVDeviceCapabilitiesQuery object. Following queries will - * limit results to the values matching already set capabilities. - * For example, setting a codec may impact number of formats or fps values - * returned during next query. Setting invalid value may limit results to zero. - * - * Example of the usage basing on opengl output device: - * - * @code - * AVFormatContext *oc = NULL; - * AVDeviceCapabilitiesQuery *caps = NULL; - * AVOptionRanges *ranges; - * int ret; - * - * if ((ret = avformat_alloc_output_context2(&oc, NULL, "opengl", NULL)) < 0) - * goto fail; - * if (avdevice_capabilities_create(&caps, oc, NULL) < 0) - * goto fail; - * - * //query codecs - * if (av_opt_query_ranges(&ranges, caps, "codec", AV_OPT_MULTI_COMPONENT_RANGE)) < 0) - * goto fail; - * //pick codec here and set it - * av_opt_set(caps, "codec", AV_CODEC_ID_RAWVIDEO, 0); - * - * //query format - * if (av_opt_query_ranges(&ranges, caps, "pixel_format", AV_OPT_MULTI_COMPONENT_RANGE)) < 0) - * goto fail; - * //pick format here and set it - * av_opt_set(caps, "pixel_format", AV_PIX_FMT_YUV420P, 0); - * - * //query and set more capabilities - * - * fail: - * //clean up code - * avdevice_capabilities_free(&query, oc); - * avformat_free_context(oc); - * @endcode - */ - -/** - * Structure describes device capabilities. - * - * It is used by devices in conjunction with av_device_capabilities AVOption table - * to implement capabilities probing API based on AVOption API. Should not be used directly. - */ -typedef struct AVDeviceCapabilitiesQuery { - const AVClass *av_class; - AVFormatContext *device_context; - enum AVCodecID codec; - enum AVSampleFormat sample_format; - enum AVPixelFormat pixel_format; - int sample_rate; - int channels; - int64_t channel_layout; - int window_width; - int window_height; - int frame_width; - int frame_height; - AVRational fps; -} AVDeviceCapabilitiesQuery; - -/** - * AVOption table used by devices to implement device capabilities API. Should not be used by a user. - */ -attribute_deprecated -extern const AVOption av_device_capabilities[]; - -/** - * Initialize capabilities probing API based on AVOption API. - * - * avdevice_capabilities_free() must be called when query capabilities API is - * not used anymore. - * - * @param[out] caps Device capabilities data. Pointer to a NULL pointer must be passed. - * @param s Context of the device. - * @param device_options An AVDictionary filled with device-private options. - * On return this parameter will be destroyed and replaced with a dict - * containing options that were not found. May be NULL. - * The same options must be passed later to avformat_write_header() for output - * devices or avformat_open_input() for input devices, or at any other place - * that affects device-private options. - * - * @return >= 0 on success, negative otherwise. - */ -attribute_deprecated -int avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s, - AVDictionary **device_options); - -/** - * Free resources created by avdevice_capabilities_create() - * - * @param caps Device capabilities data to be freed. - * @param s Context of the device. - */ -attribute_deprecated -void avdevice_capabilities_free(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s); -#endif - -/** - * Structure describes basic parameters of the device. - */ -typedef struct AVDeviceInfo { - char *device_name; /**< device name, format depends on device */ - char *device_description; /**< human friendly name */ -} AVDeviceInfo; - -/** - * List of devices. - */ -typedef struct AVDeviceInfoList { - AVDeviceInfo **devices; /**< list of autodetected devices */ - int nb_devices; /**< number of autodetected devices */ - int default_device; /**< index of default device or -1 if no default */ -} AVDeviceInfoList; - -/** - * List devices. - * - * Returns available device names and their parameters. - * - * @note: Some devices may accept system-dependent device names that cannot be - * autodetected. The list returned by this function cannot be assumed to - * be always completed. - * - * @param s device context. - * @param[out] device_list list of autodetected devices. - * @return count of autodetected devices, negative on error. - */ -int avdevice_list_devices(struct AVFormatContext *s, AVDeviceInfoList **device_list); - -/** - * Convenient function to free result of avdevice_list_devices(). - * - * @param devices device list to be freed. - */ -void avdevice_free_list_devices(AVDeviceInfoList **device_list); - -/** - * List devices. - * - * Returns available device names and their parameters. - * These are convinient wrappers for avdevice_list_devices(). - * Device context is allocated and deallocated internally. - * - * @param device device format. May be NULL if device name is set. - * @param device_name device name. May be NULL if device format is set. - * @param device_options An AVDictionary filled with device-private options. May be NULL. - * The same options must be passed later to avformat_write_header() for output - * devices or avformat_open_input() for input devices, or at any other place - * that affects device-private options. - * @param[out] device_list list of autodetected devices - * @return count of autodetected devices, negative on error. - * @note device argument takes precedence over device_name when both are set. - */ -int avdevice_list_input_sources(struct AVInputFormat *device, const char *device_name, - AVDictionary *device_options, AVDeviceInfoList **device_list); -int avdevice_list_output_sinks(struct AVOutputFormat *device, const char *device_name, - AVDictionary *device_options, AVDeviceInfoList **device_list); - -/** - * @} - */ - -#endif /* AVDEVICE_AVDEVICE_H */ diff --git a/prebuilts/x86_64/include/libavdevice/version.h b/prebuilts/x86_64/include/libavdevice/version.h deleted file mode 100644 index c310c5e..0000000 --- a/prebuilts/x86_64/include/libavdevice/version.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVDEVICE_VERSION_H -#define AVDEVICE_VERSION_H - -/** - * @file - * @ingroup lavd - * Libavdevice version macros - */ - -#include "libavutil/version.h" - -#define LIBAVDEVICE_VERSION_MAJOR 58 -#define LIBAVDEVICE_VERSION_MINOR 13 -#define LIBAVDEVICE_VERSION_MICRO 100 - -#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \ - LIBAVDEVICE_VERSION_MINOR, \ - LIBAVDEVICE_VERSION_MICRO) -#define LIBAVDEVICE_VERSION AV_VERSION(LIBAVDEVICE_VERSION_MAJOR, \ - LIBAVDEVICE_VERSION_MINOR, \ - LIBAVDEVICE_VERSION_MICRO) -#define LIBAVDEVICE_BUILD LIBAVDEVICE_VERSION_INT - -#define LIBAVDEVICE_IDENT "Lavd" AV_STRINGIFY(LIBAVDEVICE_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ -#ifndef FF_API_DEVICE_CAPABILITIES -#define FF_API_DEVICE_CAPABILITIES (LIBAVDEVICE_VERSION_MAJOR < 60) -#endif - -#endif /* AVDEVICE_VERSION_H */ diff --git a/prebuilts/x86_64/include/libavfilter/avfilter.h b/prebuilts/x86_64/include/libavfilter/avfilter.h deleted file mode 100644 index be12424..0000000 --- a/prebuilts/x86_64/include/libavfilter/avfilter.h +++ /dev/null @@ -1,1178 +0,0 @@ -/* - * filter layer - * Copyright (c) 2007 Bobby Bingham - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_AVFILTER_H -#define AVFILTER_AVFILTER_H - -/** - * @file - * @ingroup lavfi - * Main libavfilter public API header - */ - -/** - * @defgroup lavfi libavfilter - * Graph-based frame editing library. - * - * @{ - */ - -#include - -#include "libavutil/attributes.h" -#include "libavutil/avutil.h" -#include "libavutil/buffer.h" -#include "libavutil/dict.h" -#include "libavutil/frame.h" -#include "libavutil/log.h" -#include "libavutil/samplefmt.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" - -#include "libavfilter/version.h" - -/** - * Return the LIBAVFILTER_VERSION_INT constant. - */ -unsigned avfilter_version(void); - -/** - * Return the libavfilter build-time configuration. - */ -const char *avfilter_configuration(void); - -/** - * Return the libavfilter license. - */ -const char *avfilter_license(void); - -typedef struct AVFilterContext AVFilterContext; -typedef struct AVFilterLink AVFilterLink; -typedef struct AVFilterPad AVFilterPad; -typedef struct AVFilterFormats AVFilterFormats; -typedef struct AVFilterChannelLayouts AVFilterChannelLayouts; - -/** - * Get the number of elements in a NULL-terminated array of AVFilterPads (e.g. - * AVFilter.inputs/outputs). - */ -int avfilter_pad_count(const AVFilterPad *pads); - -/** - * Get the name of an AVFilterPad. - * - * @param pads an array of AVFilterPads - * @param pad_idx index of the pad in the array; it is the caller's - * responsibility to ensure the index is valid - * - * @return name of the pad_idx'th pad in pads - */ -const char *avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx); - -/** - * Get the type of an AVFilterPad. - * - * @param pads an array of AVFilterPads - * @param pad_idx index of the pad in the array; it is the caller's - * responsibility to ensure the index is valid - * - * @return type of the pad_idx'th pad in pads - */ -enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx); - -/** - * The number of the filter inputs is not determined just by AVFilter.inputs. - * The filter might add additional inputs during initialization depending on the - * options supplied to it. - */ -#define AVFILTER_FLAG_DYNAMIC_INPUTS (1 << 0) -/** - * The number of the filter outputs is not determined just by AVFilter.outputs. - * The filter might add additional outputs during initialization depending on - * the options supplied to it. - */ -#define AVFILTER_FLAG_DYNAMIC_OUTPUTS (1 << 1) -/** - * The filter supports multithreading by splitting frames into multiple parts - * and processing them concurrently. - */ -#define AVFILTER_FLAG_SLICE_THREADS (1 << 2) -/** - * Some filters support a generic "enable" expression option that can be used - * to enable or disable a filter in the timeline. Filters supporting this - * option have this flag set. When the enable expression is false, the default - * no-op filter_frame() function is called in place of the filter_frame() - * callback defined on each input pad, thus the frame is passed unchanged to - * the next filters. - */ -#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC (1 << 16) -/** - * Same as AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC, except that the filter will - * have its filter_frame() callback(s) called as usual even when the enable - * expression is false. The filter will disable filtering within the - * filter_frame() callback(s) itself, for example executing code depending on - * the AVFilterContext->is_disabled value. - */ -#define AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL (1 << 17) -/** - * Handy mask to test whether the filter supports or no the timeline feature - * (internally or generically). - */ -#define AVFILTER_FLAG_SUPPORT_TIMELINE (AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL) - -/** - * Filter definition. This defines the pads a filter contains, and all the - * callback functions used to interact with the filter. - */ -typedef struct AVFilter { - /** - * Filter name. Must be non-NULL and unique among filters. - */ - const char *name; - - /** - * A description of the filter. May be NULL. - * - * You should use the NULL_IF_CONFIG_SMALL() macro to define it. - */ - const char *description; - - /** - * List of inputs, terminated by a zeroed element. - * - * NULL if there are no (static) inputs. Instances of filters with - * AVFILTER_FLAG_DYNAMIC_INPUTS set may have more inputs than present in - * this list. - */ - const AVFilterPad *inputs; - /** - * List of outputs, terminated by a zeroed element. - * - * NULL if there are no (static) outputs. Instances of filters with - * AVFILTER_FLAG_DYNAMIC_OUTPUTS set may have more outputs than present in - * this list. - */ - const AVFilterPad *outputs; - - /** - * A class for the private data, used to declare filter private AVOptions. - * This field is NULL for filters that do not declare any options. - * - * If this field is non-NULL, the first member of the filter private data - * must be a pointer to AVClass, which will be set by libavfilter generic - * code to this class. - */ - const AVClass *priv_class; - - /** - * A combination of AVFILTER_FLAG_* - */ - int flags; - - /***************************************************************** - * All fields below this line are not part of the public API. They - * may not be used outside of libavfilter and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * Filter pre-initialization function - * - * This callback will be called immediately after the filter context is - * allocated, to allow allocating and initing sub-objects. - * - * If this callback is not NULL, the uninit callback will be called on - * allocation failure. - * - * @return 0 on success, - * AVERROR code on failure (but the code will be - * dropped and treated as ENOMEM by the calling code) - */ - int (*preinit)(AVFilterContext *ctx); - - /** - * Filter initialization function. - * - * This callback will be called only once during the filter lifetime, after - * all the options have been set, but before links between filters are - * established and format negotiation is done. - * - * Basic filter initialization should be done here. Filters with dynamic - * inputs and/or outputs should create those inputs/outputs here based on - * provided options. No more changes to this filter's inputs/outputs can be - * done after this callback. - * - * This callback must not assume that the filter links exist or frame - * parameters are known. - * - * @ref AVFilter.uninit "uninit" is guaranteed to be called even if - * initialization fails, so this callback does not have to clean up on - * failure. - * - * @return 0 on success, a negative AVERROR on failure - */ - int (*init)(AVFilterContext *ctx); - - /** - * Should be set instead of @ref AVFilter.init "init" by the filters that - * want to pass a dictionary of AVOptions to nested contexts that are - * allocated during init. - * - * On return, the options dict should be freed and replaced with one that - * contains all the options which could not be processed by this filter (or - * with NULL if all the options were processed). - * - * Otherwise the semantics is the same as for @ref AVFilter.init "init". - */ - int (*init_dict)(AVFilterContext *ctx, AVDictionary **options); - - /** - * Filter uninitialization function. - * - * Called only once right before the filter is freed. Should deallocate any - * memory held by the filter, release any buffer references, etc. It does - * not need to deallocate the AVFilterContext.priv memory itself. - * - * This callback may be called even if @ref AVFilter.init "init" was not - * called or failed, so it must be prepared to handle such a situation. - */ - void (*uninit)(AVFilterContext *ctx); - - /** - * Query formats supported by the filter on its inputs and outputs. - * - * This callback is called after the filter is initialized (so the inputs - * and outputs are fixed), shortly before the format negotiation. This - * callback may be called more than once. - * - * This callback must set AVFilterLink.outcfg.formats on every input link and - * AVFilterLink.incfg.formats on every output link to a list of pixel/sample - * formats that the filter supports on that link. For audio links, this - * filter must also set @ref AVFilterLink.incfg.samplerates "in_samplerates" / - * @ref AVFilterLink.outcfg.samplerates "out_samplerates" and - * @ref AVFilterLink.incfg.channel_layouts "in_channel_layouts" / - * @ref AVFilterLink.outcfg.channel_layouts "out_channel_layouts" analogously. - * - * This callback may be NULL for filters with one input, in which case - * libavfilter assumes that it supports all input formats and preserves - * them on output. - * - * @return zero on success, a negative value corresponding to an - * AVERROR code otherwise - */ - int (*query_formats)(AVFilterContext *); - - int priv_size; ///< size of private data to allocate for the filter - - int flags_internal; ///< Additional flags for avfilter internal use only. - -#if FF_API_NEXT - /** - * Used by the filter registration system. Must not be touched by any other - * code. - */ - struct AVFilter *next; -#endif - - /** - * Make the filter instance process a command. - * - * @param cmd the command to process, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param res a buffer with size res_size where the filter(s) can return a response. This must not change when the command is not supported. - * @param flags if AVFILTER_CMD_FLAG_FAST is set and the command would be - * time consuming then a filter should treat it like an unsupported command - * - * @returns >=0 on success otherwise an error code. - * AVERROR(ENOSYS) on unsupported commands - */ - int (*process_command)(AVFilterContext *, const char *cmd, const char *arg, char *res, int res_len, int flags); - - /** - * Filter initialization function, alternative to the init() - * callback. Args contains the user-supplied parameters, opaque is - * used for providing binary data. - */ - int (*init_opaque)(AVFilterContext *ctx, void *opaque); - - /** - * Filter activation function. - * - * Called when any processing is needed from the filter, instead of any - * filter_frame and request_frame on pads. - * - * The function must examine inlinks and outlinks and perform a single - * step of processing. If there is nothing to do, the function must do - * nothing and not return an error. If more steps are or may be - * possible, it must use ff_filter_set_ready() to schedule another - * activation. - */ - int (*activate)(AVFilterContext *ctx); -} AVFilter; - -/** - * Process multiple parts of the frame concurrently. - */ -#define AVFILTER_THREAD_SLICE (1 << 0) - -typedef struct AVFilterInternal AVFilterInternal; - -/** An instance of a filter */ -struct AVFilterContext { - const AVClass *av_class; ///< needed for av_log() and filters common options - - const AVFilter *filter; ///< the AVFilter of which this is an instance - - char *name; ///< name of this filter instance - - AVFilterPad *input_pads; ///< array of input pads - AVFilterLink **inputs; ///< array of pointers to input links - unsigned nb_inputs; ///< number of input pads - - AVFilterPad *output_pads; ///< array of output pads - AVFilterLink **outputs; ///< array of pointers to output links - unsigned nb_outputs; ///< number of output pads - - void *priv; ///< private data for use by the filter - - struct AVFilterGraph *graph; ///< filtergraph this filter belongs to - - /** - * Type of multithreading being allowed/used. A combination of - * AVFILTER_THREAD_* flags. - * - * May be set by the caller before initializing the filter to forbid some - * or all kinds of multithreading for this filter. The default is allowing - * everything. - * - * When the filter is initialized, this field is combined using bit AND with - * AVFilterGraph.thread_type to get the final mask used for determining - * allowed threading types. I.e. a threading type needs to be set in both - * to be allowed. - * - * After the filter is initialized, libavfilter sets this field to the - * threading type that is actually used (0 for no multithreading). - */ - int thread_type; - - /** - * An opaque struct for libavfilter internal use. - */ - AVFilterInternal *internal; - - struct AVFilterCommand *command_queue; - - char *enable_str; ///< enable expression string - void *enable; ///< parsed expression (AVExpr*) - double *var_values; ///< variable values for the enable expression - int is_disabled; ///< the enabled state from the last expression evaluation - - /** - * For filters which will create hardware frames, sets the device the - * filter should create them in. All other filters will ignore this field: - * in particular, a filter which consumes or processes hardware frames will - * instead use the hw_frames_ctx field in AVFilterLink to carry the - * hardware context information. - */ - AVBufferRef *hw_device_ctx; - - /** - * Max number of threads allowed in this filter instance. - * If <= 0, its value is ignored. - * Overrides global number of threads set per filter graph. - */ - int nb_threads; - - /** - * Ready status of the filter. - * A non-0 value means that the filter needs activating; - * a higher value suggests a more urgent activation. - */ - unsigned ready; - - /** - * Sets the number of extra hardware frames which the filter will - * allocate on its output links for use in following filters or by - * the caller. - * - * Some hardware filters require all frames that they will use for - * output to be defined in advance before filtering starts. For such - * filters, any hardware frame pools used for output must therefore be - * of fixed size. The extra frames set here are on top of any number - * that the filter needs internally in order to operate normally. - * - * This field must be set before the graph containing this filter is - * configured. - */ - int extra_hw_frames; -}; - -/** - * Lists of formats / etc. supported by an end of a link. - * - * This structure is directly part of AVFilterLink, in two copies: - * one for the source filter, one for the destination filter. - - * These lists are used for negotiating the format to actually be used, - * which will be loaded into the format and channel_layout members of - * AVFilterLink, when chosen. - */ -typedef struct AVFilterFormatsConfig { - - /** - * List of supported formats (pixel or sample). - */ - AVFilterFormats *formats; - - /** - * Lists of supported sample rates, only for audio. - */ - AVFilterFormats *samplerates; - - /** - * Lists of supported channel layouts, only for audio. - */ - AVFilterChannelLayouts *channel_layouts; - -} AVFilterFormatsConfig; - -/** - * A link between two filters. This contains pointers to the source and - * destination filters between which this link exists, and the indexes of - * the pads involved. In addition, this link also contains the parameters - * which have been negotiated and agreed upon between the filter, such as - * image dimensions, format, etc. - * - * Applications must not normally access the link structure directly. - * Use the buffersrc and buffersink API instead. - * In the future, access to the header may be reserved for filters - * implementation. - */ -struct AVFilterLink { - AVFilterContext *src; ///< source filter - AVFilterPad *srcpad; ///< output pad on the source filter - - AVFilterContext *dst; ///< dest filter - AVFilterPad *dstpad; ///< input pad on the dest filter - - enum AVMediaType type; ///< filter media type - - /* These parameters apply only to video */ - int w; ///< agreed upon image width - int h; ///< agreed upon image height - AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio - /* These parameters apply only to audio */ - uint64_t channel_layout; ///< channel layout of current buffer (see libavutil/channel_layout.h) - int sample_rate; ///< samples per second - - int format; ///< agreed upon media format - - /** - * Define the time base used by the PTS of the frames/samples - * which will pass through this link. - * During the configuration stage, each filter is supposed to - * change only the output timebase, while the timebase of the - * input link is assumed to be an unchangeable property. - */ - AVRational time_base; - - /***************************************************************** - * All fields below this line are not part of the public API. They - * may not be used outside of libavfilter and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * Lists of supported formats / etc. supported by the input filter. - */ - AVFilterFormatsConfig incfg; - - /** - * Lists of supported formats / etc. supported by the output filter. - */ - AVFilterFormatsConfig outcfg; - - /** stage of the initialization of the link properties (dimensions, etc) */ - enum { - AVLINK_UNINIT = 0, ///< not started - AVLINK_STARTINIT, ///< started, but incomplete - AVLINK_INIT ///< complete - } init_state; - - /** - * Graph the filter belongs to. - */ - struct AVFilterGraph *graph; - - /** - * Current timestamp of the link, as defined by the most recent - * frame(s), in link time_base units. - */ - int64_t current_pts; - - /** - * Current timestamp of the link, as defined by the most recent - * frame(s), in AV_TIME_BASE units. - */ - int64_t current_pts_us; - - /** - * Index in the age array. - */ - int age_index; - - /** - * Frame rate of the stream on the link, or 1/0 if unknown or variable; - * if left to 0/0, will be automatically copied from the first input - * of the source filter if it exists. - * - * Sources should set it to the best estimation of the real frame rate. - * If the source frame rate is unknown or variable, set this to 1/0. - * Filters should update it if necessary depending on their function. - * Sinks can use it to set a default output frame rate. - * It is similar to the r_frame_rate field in AVStream. - */ - AVRational frame_rate; - - /** - * Buffer partially filled with samples to achieve a fixed/minimum size. - */ - AVFrame *partial_buf; - - /** - * Size of the partial buffer to allocate. - * Must be between min_samples and max_samples. - */ - int partial_buf_size; - - /** - * Minimum number of samples to filter at once. If filter_frame() is - * called with fewer samples, it will accumulate them in partial_buf. - * This field and the related ones must not be changed after filtering - * has started. - * If 0, all related fields are ignored. - */ - int min_samples; - - /** - * Maximum number of samples to filter at once. If filter_frame() is - * called with more samples, it will split them. - */ - int max_samples; - - /** - * Number of channels. - */ - int channels; - - /** - * Number of past frames sent through the link. - */ - int64_t frame_count_in, frame_count_out; - - /** - * A pointer to a FFFramePool struct. - */ - void *frame_pool; - - /** - * True if a frame is currently wanted on the output of this filter. - * Set when ff_request_frame() is called by the output, - * cleared when a frame is filtered. - */ - int frame_wanted_out; - - /** - * For hwaccel pixel formats, this should be a reference to the - * AVHWFramesContext describing the frames. - */ - AVBufferRef *hw_frames_ctx; - -#ifndef FF_INTERNAL_FIELDS - - /** - * Internal structure members. - * The fields below this limit are internal for libavfilter's use - * and must in no way be accessed by applications. - */ - char reserved[0xF000]; - -#else /* FF_INTERNAL_FIELDS */ - - /** - * Queue of frames waiting to be filtered. - */ - FFFrameQueue fifo; - - /** - * If set, the source filter can not generate a frame as is. - * The goal is to avoid repeatedly calling the request_frame() method on - * the same link. - */ - int frame_blocked_in; - - /** - * Link input status. - * If not zero, all attempts of filter_frame will fail with the - * corresponding code. - */ - int status_in; - - /** - * Timestamp of the input status change. - */ - int64_t status_in_pts; - - /** - * Link output status. - * If not zero, all attempts of request_frame will fail with the - * corresponding code. - */ - int status_out; - -#endif /* FF_INTERNAL_FIELDS */ - -}; - -/** - * Link two filters together. - * - * @param src the source filter - * @param srcpad index of the output pad on the source filter - * @param dst the destination filter - * @param dstpad index of the input pad on the destination filter - * @return zero on success - */ -int avfilter_link(AVFilterContext *src, unsigned srcpad, - AVFilterContext *dst, unsigned dstpad); - -/** - * Free the link in *link, and set its pointer to NULL. - */ -void avfilter_link_free(AVFilterLink **link); - -#if FF_API_FILTER_GET_SET -/** - * Get the number of channels of a link. - * @deprecated Use av_buffersink_get_channels() - */ -attribute_deprecated -int avfilter_link_get_channels(AVFilterLink *link); -#endif -#if FF_API_FILTER_LINK_SET_CLOSED -/** - * Set the closed field of a link. - * @deprecated applications are not supposed to mess with links, they should - * close the sinks. - */ -attribute_deprecated -void avfilter_link_set_closed(AVFilterLink *link, int closed); -#endif -/** - * Negotiate the media format, dimensions, etc of all inputs to a filter. - * - * @param filter the filter to negotiate the properties for its inputs - * @return zero on successful negotiation - */ -int avfilter_config_links(AVFilterContext *filter); - -#define AVFILTER_CMD_FLAG_ONE 1 ///< Stop once a filter understood the command (for target=all for example), fast filters are favored automatically -#define AVFILTER_CMD_FLAG_FAST 2 ///< Only execute command when its fast (like a video out that supports contrast adjustment in hw) - -/** - * Make the filter instance process a command. - * It is recommended to use avfilter_graph_send_command(). - */ -int avfilter_process_command(AVFilterContext *filter, const char *cmd, const char *arg, char *res, int res_len, int flags); - -/** - * Iterate over all registered filters. - * - * @param opaque a pointer where libavfilter will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered filter or NULL when the iteration is - * finished - */ -const AVFilter *av_filter_iterate(void **opaque); - -#if FF_API_NEXT -/** Initialize the filter system. Register all builtin filters. */ -attribute_deprecated -void avfilter_register_all(void); - -/** - * Register a filter. This is only needed if you plan to use - * avfilter_get_by_name later to lookup the AVFilter structure by name. A - * filter can still by instantiated with avfilter_graph_alloc_filter even if it - * is not registered. - * - * @param filter the filter to register - * @return 0 if the registration was successful, a negative value - * otherwise - */ -attribute_deprecated -int avfilter_register(AVFilter *filter); - -/** - * Iterate over all registered filters. - * @return If prev is non-NULL, next registered filter after prev or NULL if - * prev is the last filter. If prev is NULL, return the first registered filter. - */ -attribute_deprecated -const AVFilter *avfilter_next(const AVFilter *prev); -#endif - -/** - * Get a filter definition matching the given name. - * - * @param name the filter name to find - * @return the filter definition, if any matching one is registered. - * NULL if none found. - */ -const AVFilter *avfilter_get_by_name(const char *name); - - -/** - * Initialize a filter with the supplied parameters. - * - * @param ctx uninitialized filter context to initialize - * @param args Options to initialize the filter with. This must be a - * ':'-separated list of options in the 'key=value' form. - * May be NULL if the options have been set directly using the - * AVOptions API or there are no options that need to be set. - * @return 0 on success, a negative AVERROR on failure - */ -int avfilter_init_str(AVFilterContext *ctx, const char *args); - -/** - * Initialize a filter with the supplied dictionary of options. - * - * @param ctx uninitialized filter context to initialize - * @param options An AVDictionary filled with options for this filter. On - * return this parameter will be destroyed and replaced with - * a dict containing options that were not found. This dictionary - * must be freed by the caller. - * May be NULL, then this function is equivalent to - * avfilter_init_str() with the second parameter set to NULL. - * @return 0 on success, a negative AVERROR on failure - * - * @note This function and avfilter_init_str() do essentially the same thing, - * the difference is in manner in which the options are passed. It is up to the - * calling code to choose whichever is more preferable. The two functions also - * behave differently when some of the provided options are not declared as - * supported by the filter. In such a case, avfilter_init_str() will fail, but - * this function will leave those extra options in the options AVDictionary and - * continue as usual. - */ -int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options); - -/** - * Free a filter context. This will also remove the filter from its - * filtergraph's list of filters. - * - * @param filter the filter to free - */ -void avfilter_free(AVFilterContext *filter); - -/** - * Insert a filter in the middle of an existing link. - * - * @param link the link into which the filter should be inserted - * @param filt the filter to be inserted - * @param filt_srcpad_idx the input pad on the filter to connect - * @param filt_dstpad_idx the output pad on the filter to connect - * @return zero on success - */ -int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, - unsigned filt_srcpad_idx, unsigned filt_dstpad_idx); - -/** - * @return AVClass for AVFilterContext. - * - * @see av_opt_find(). - */ -const AVClass *avfilter_get_class(void); - -typedef struct AVFilterGraphInternal AVFilterGraphInternal; - -/** - * A function pointer passed to the @ref AVFilterGraph.execute callback to be - * executed multiple times, possibly in parallel. - * - * @param ctx the filter context the job belongs to - * @param arg an opaque parameter passed through from @ref - * AVFilterGraph.execute - * @param jobnr the index of the job being executed - * @param nb_jobs the total number of jobs - * - * @return 0 on success, a negative AVERROR on error - */ -typedef int (avfilter_action_func)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs); - -/** - * A function executing multiple jobs, possibly in parallel. - * - * @param ctx the filter context to which the jobs belong - * @param func the function to be called multiple times - * @param arg the argument to be passed to func - * @param ret a nb_jobs-sized array to be filled with return values from each - * invocation of func - * @param nb_jobs the number of jobs to execute - * - * @return 0 on success, a negative AVERROR on error - */ -typedef int (avfilter_execute_func)(AVFilterContext *ctx, avfilter_action_func *func, - void *arg, int *ret, int nb_jobs); - -typedef struct AVFilterGraph { - const AVClass *av_class; - AVFilterContext **filters; - unsigned nb_filters; - - char *scale_sws_opts; ///< sws options to use for the auto-inserted scale filters -#if FF_API_LAVR_OPTS - attribute_deprecated char *resample_lavr_opts; ///< libavresample options to use for the auto-inserted resample filters -#endif - - /** - * Type of multithreading allowed for filters in this graph. A combination - * of AVFILTER_THREAD_* flags. - * - * May be set by the caller at any point, the setting will apply to all - * filters initialized after that. The default is allowing everything. - * - * When a filter in this graph is initialized, this field is combined using - * bit AND with AVFilterContext.thread_type to get the final mask used for - * determining allowed threading types. I.e. a threading type needs to be - * set in both to be allowed. - */ - int thread_type; - - /** - * Maximum number of threads used by filters in this graph. May be set by - * the caller before adding any filters to the filtergraph. Zero (the - * default) means that the number of threads is determined automatically. - */ - int nb_threads; - - /** - * Opaque object for libavfilter internal use. - */ - AVFilterGraphInternal *internal; - - /** - * Opaque user data. May be set by the caller to an arbitrary value, e.g. to - * be used from callbacks like @ref AVFilterGraph.execute. - * Libavfilter will not touch this field in any way. - */ - void *opaque; - - /** - * This callback may be set by the caller immediately after allocating the - * graph and before adding any filters to it, to provide a custom - * multithreading implementation. - * - * If set, filters with slice threading capability will call this callback - * to execute multiple jobs in parallel. - * - * If this field is left unset, libavfilter will use its internal - * implementation, which may or may not be multithreaded depending on the - * platform and build options. - */ - avfilter_execute_func *execute; - - char *aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions - - /** - * Private fields - * - * The following fields are for internal use only. - * Their type, offset, number and semantic can change without notice. - */ - - AVFilterLink **sink_links; - int sink_links_count; - - unsigned disable_auto_convert; -} AVFilterGraph; - -/** - * Allocate a filter graph. - * - * @return the allocated filter graph on success or NULL. - */ -AVFilterGraph *avfilter_graph_alloc(void); - -/** - * Create a new filter instance in a filter graph. - * - * @param graph graph in which the new filter will be used - * @param filter the filter to create an instance of - * @param name Name to give to the new instance (will be copied to - * AVFilterContext.name). This may be used by the caller to identify - * different filters, libavfilter itself assigns no semantics to - * this parameter. May be NULL. - * - * @return the context of the newly created filter instance (note that it is - * also retrievable directly through AVFilterGraph.filters or with - * avfilter_graph_get_filter()) on success or NULL on failure. - */ -AVFilterContext *avfilter_graph_alloc_filter(AVFilterGraph *graph, - const AVFilter *filter, - const char *name); - -/** - * Get a filter instance identified by instance name from graph. - * - * @param graph filter graph to search through. - * @param name filter instance name (should be unique in the graph). - * @return the pointer to the found filter instance or NULL if it - * cannot be found. - */ -AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, const char *name); - -/** - * Create and add a filter instance into an existing graph. - * The filter instance is created from the filter filt and inited - * with the parameter args. opaque is currently ignored. - * - * In case of success put in *filt_ctx the pointer to the created - * filter instance, otherwise set *filt_ctx to NULL. - * - * @param name the instance name to give to the created filter instance - * @param graph_ctx the filter graph - * @return a negative AVERROR error code in case of failure, a non - * negative value otherwise - */ -int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt, - const char *name, const char *args, void *opaque, - AVFilterGraph *graph_ctx); - -/** - * Enable or disable automatic format conversion inside the graph. - * - * Note that format conversion can still happen inside explicitly inserted - * scale and aresample filters. - * - * @param flags any of the AVFILTER_AUTO_CONVERT_* constants - */ -void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags); - -enum { - AVFILTER_AUTO_CONVERT_ALL = 0, /**< all automatic conversions enabled */ - AVFILTER_AUTO_CONVERT_NONE = -1, /**< all automatic conversions disabled */ -}; - -/** - * Check validity and configure all the links and formats in the graph. - * - * @param graphctx the filter graph - * @param log_ctx context used for logging - * @return >= 0 in case of success, a negative AVERROR code otherwise - */ -int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx); - -/** - * Free a graph, destroy its links, and set *graph to NULL. - * If *graph is NULL, do nothing. - */ -void avfilter_graph_free(AVFilterGraph **graph); - -/** - * A linked-list of the inputs/outputs of the filter chain. - * - * This is mainly useful for avfilter_graph_parse() / avfilter_graph_parse2(), - * where it is used to communicate open (unlinked) inputs and outputs from and - * to the caller. - * This struct specifies, per each not connected pad contained in the graph, the - * filter context and the pad index required for establishing a link. - */ -typedef struct AVFilterInOut { - /** unique name for this input/output in the list */ - char *name; - - /** filter context associated to this input/output */ - AVFilterContext *filter_ctx; - - /** index of the filt_ctx pad to use for linking */ - int pad_idx; - - /** next input/input in the list, NULL if this is the last */ - struct AVFilterInOut *next; -} AVFilterInOut; - -/** - * Allocate a single AVFilterInOut entry. - * Must be freed with avfilter_inout_free(). - * @return allocated AVFilterInOut on success, NULL on failure. - */ -AVFilterInOut *avfilter_inout_alloc(void); - -/** - * Free the supplied list of AVFilterInOut and set *inout to NULL. - * If *inout is NULL, do nothing. - */ -void avfilter_inout_free(AVFilterInOut **inout); - -/** - * Add a graph described by a string to a graph. - * - * @note The caller must provide the lists of inputs and outputs, - * which therefore must be known before calling the function. - * - * @note The inputs parameter describes inputs of the already existing - * part of the graph; i.e. from the point of view of the newly created - * part, they are outputs. Similarly the outputs parameter describes - * outputs of the already existing filters, which are provided as - * inputs to the parsed filters. - * - * @param graph the filter graph where to link the parsed graph context - * @param filters string to be parsed - * @param inputs linked list to the inputs of the graph - * @param outputs linked list to the outputs of the graph - * @return zero on success, a negative AVERROR code on error - */ -int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, - AVFilterInOut *inputs, AVFilterInOut *outputs, - void *log_ctx); - -/** - * Add a graph described by a string to a graph. - * - * In the graph filters description, if the input label of the first - * filter is not specified, "in" is assumed; if the output label of - * the last filter is not specified, "out" is assumed. - * - * @param graph the filter graph where to link the parsed graph context - * @param filters string to be parsed - * @param inputs pointer to a linked list to the inputs of the graph, may be NULL. - * If non-NULL, *inputs is updated to contain the list of open inputs - * after the parsing, should be freed with avfilter_inout_free(). - * @param outputs pointer to a linked list to the outputs of the graph, may be NULL. - * If non-NULL, *outputs is updated to contain the list of open outputs - * after the parsing, should be freed with avfilter_inout_free(). - * @return non negative on success, a negative AVERROR code on error - */ -int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters, - AVFilterInOut **inputs, AVFilterInOut **outputs, - void *log_ctx); - -/** - * Add a graph described by a string to a graph. - * - * @param[in] graph the filter graph where to link the parsed graph context - * @param[in] filters string to be parsed - * @param[out] inputs a linked list of all free (unlinked) inputs of the - * parsed graph will be returned here. It is to be freed - * by the caller using avfilter_inout_free(). - * @param[out] outputs a linked list of all free (unlinked) outputs of the - * parsed graph will be returned here. It is to be freed by the - * caller using avfilter_inout_free(). - * @return zero on success, a negative AVERROR code on error - * - * @note This function returns the inputs and outputs that are left - * unlinked after parsing the graph and the caller then deals with - * them. - * @note This function makes no reference whatsoever to already - * existing parts of the graph and the inputs parameter will on return - * contain inputs of the newly parsed part of the graph. Analogously - * the outputs parameter will contain outputs of the newly created - * filters. - */ -int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters, - AVFilterInOut **inputs, - AVFilterInOut **outputs); - -/** - * Send a command to one or more filter instances. - * - * @param graph the filter graph - * @param target the filter(s) to which the command should be sent - * "all" sends to all filters - * otherwise it can be a filter or filter instance name - * which will send the command to all matching filters. - * @param cmd the command to send, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param res a buffer with size res_size where the filter(s) can return a response. - * - * @returns >=0 on success otherwise an error code. - * AVERROR(ENOSYS) on unsupported commands - */ -int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags); - -/** - * Queue a command for one or more filter instances. - * - * @param graph the filter graph - * @param target the filter(s) to which the command should be sent - * "all" sends to all filters - * otherwise it can be a filter or filter instance name - * which will send the command to all matching filters. - * @param cmd the command to sent, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param ts time at which the command should be sent to the filter - * - * @note As this executes commands after this function returns, no return code - * from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported. - */ -int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts); - - -/** - * Dump a graph into a human-readable string representation. - * - * @param graph the graph to dump - * @param options formatting options; currently ignored - * @return a string, or NULL in case of memory allocation failure; - * the string must be freed using av_free - */ -char *avfilter_graph_dump(AVFilterGraph *graph, const char *options); - -/** - * Request a frame on the oldest sink link. - * - * If the request returns AVERROR_EOF, try the next. - * - * Note that this function is not meant to be the sole scheduling mechanism - * of a filtergraph, only a convenience function to help drain a filtergraph - * in a balanced way under normal circumstances. - * - * Also note that AVERROR_EOF does not mean that frames did not arrive on - * some of the sinks during the process. - * When there are multiple sink links, in case the requested link - * returns an EOF, this may cause a filter to flush pending frames - * which are sent to another sink link, although unrequested. - * - * @return the return value of ff_request_frame(), - * or AVERROR_EOF if all links returned AVERROR_EOF - */ -int avfilter_graph_request_oldest(AVFilterGraph *graph); - -/** - * @} - */ - -#endif /* AVFILTER_AVFILTER_H */ diff --git a/prebuilts/x86_64/include/libavfilter/buffersink.h b/prebuilts/x86_64/include/libavfilter/buffersink.h deleted file mode 100644 index 69ed0f2..0000000 --- a/prebuilts/x86_64/include/libavfilter/buffersink.h +++ /dev/null @@ -1,205 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_BUFFERSINK_H -#define AVFILTER_BUFFERSINK_H - -/** - * @file - * @ingroup lavfi_buffersink - * memory buffer sink API for audio and video - */ - -#include "avfilter.h" - -/** - * @defgroup lavfi_buffersink Buffer sink API - * @ingroup lavfi - * @{ - * - * The buffersink and abuffersink filters are there to connect filter graphs - * to applications. They have a single input, connected to the graph, and no - * output. Frames must be extracted using av_buffersink_get_frame() or - * av_buffersink_get_samples(). - * - * The format negotiated by the graph during configuration can be obtained - * using the accessor functions: - * - av_buffersink_get_time_base(), - * - av_buffersink_get_format(), - * - av_buffersink_get_frame_rate(), - * - av_buffersink_get_w(), - * - av_buffersink_get_h(), - * - av_buffersink_get_sample_aspect_ratio(), - * - av_buffersink_get_channels(), - * - av_buffersink_get_channel_layout(), - * - av_buffersink_get_sample_rate(). - * - * The format can be constrained by setting options, using av_opt_set() and - * related functions with the AV_OPT_SEARCH_CHILDREN flag. - * - pix_fmts (int list), - * - sample_fmts (int list), - * - sample_rates (int list), - * - channel_layouts (int64_t), - * - channel_counts (int list), - * - all_channel_counts (bool). - * Most of these options are of type binary, and should be set using - * av_opt_set_int_list() or av_opt_set_bin(). If they are not set, all - * corresponding formats are accepted. - * - * As a special case, if neither channel_layouts nor channel_counts is set, - * all valid channel layouts are accepted, but channel counts without a - * layout are not, unless all_channel_counts is set. - * Also, channel_layouts must not contain a channel layout already accepted - * by a value in channel_counts; for example, if channel_counts contains 2, - * then channel_layouts must not contain stereo. - */ - -/** - * Get a frame with filtered data from sink and put it in frame. - * - * @param ctx pointer to a buffersink or abuffersink filter context. - * @param frame pointer to an allocated frame that will be filled with data. - * The data must be freed using av_frame_unref() / av_frame_free() - * @param flags a combination of AV_BUFFERSINK_FLAG_* flags - * - * @return >= 0 in for success, a negative AVERROR code for failure. - */ -int av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags); - -/** - * Tell av_buffersink_get_buffer_ref() to read video/samples buffer - * reference, but not remove it from the buffer. This is useful if you - * need only to read a video/samples buffer, without to fetch it. - */ -#define AV_BUFFERSINK_FLAG_PEEK 1 - -/** - * Tell av_buffersink_get_buffer_ref() not to request a frame from its input. - * If a frame is already buffered, it is read (and removed from the buffer), - * but if no frame is present, return AVERROR(EAGAIN). - */ -#define AV_BUFFERSINK_FLAG_NO_REQUEST 2 - -#if FF_API_BUFFERSINK_ALLOC -/** - * Deprecated and unused struct to use for initializing a buffersink context. - */ -typedef struct AVBufferSinkParams { - const enum AVPixelFormat *pixel_fmts; ///< list of allowed pixel formats, terminated by AV_PIX_FMT_NONE -} AVBufferSinkParams; - -/** - * Create an AVBufferSinkParams structure. - * - * Must be freed with av_free(). - */ -attribute_deprecated -AVBufferSinkParams *av_buffersink_params_alloc(void); - -/** - * Deprecated and unused struct to use for initializing an abuffersink context. - */ -typedef struct AVABufferSinkParams { - const enum AVSampleFormat *sample_fmts; ///< list of allowed sample formats, terminated by AV_SAMPLE_FMT_NONE - const int64_t *channel_layouts; ///< list of allowed channel layouts, terminated by -1 - const int *channel_counts; ///< list of allowed channel counts, terminated by -1 - int all_channel_counts; ///< if not 0, accept any channel count or layout - int *sample_rates; ///< list of allowed sample rates, terminated by -1 -} AVABufferSinkParams; - -/** - * Create an AVABufferSinkParams structure. - * - * Must be freed with av_free(). - */ -attribute_deprecated -AVABufferSinkParams *av_abuffersink_params_alloc(void); -#endif - -/** - * Set the frame size for an audio buffer sink. - * - * All calls to av_buffersink_get_buffer_ref will return a buffer with - * exactly the specified number of samples, or AVERROR(EAGAIN) if there is - * not enough. The last buffer at EOF will be padded with 0. - */ -void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size); - -/** - * @defgroup lavfi_buffersink_accessors Buffer sink accessors - * Get the properties of the stream - * @{ - */ - -enum AVMediaType av_buffersink_get_type (const AVFilterContext *ctx); -AVRational av_buffersink_get_time_base (const AVFilterContext *ctx); -int av_buffersink_get_format (const AVFilterContext *ctx); - -AVRational av_buffersink_get_frame_rate (const AVFilterContext *ctx); -int av_buffersink_get_w (const AVFilterContext *ctx); -int av_buffersink_get_h (const AVFilterContext *ctx); -AVRational av_buffersink_get_sample_aspect_ratio (const AVFilterContext *ctx); - -int av_buffersink_get_channels (const AVFilterContext *ctx); -uint64_t av_buffersink_get_channel_layout (const AVFilterContext *ctx); -int av_buffersink_get_sample_rate (const AVFilterContext *ctx); - -AVBufferRef * av_buffersink_get_hw_frames_ctx (const AVFilterContext *ctx); - -/** @} */ - -/** - * Get a frame with filtered data from sink and put it in frame. - * - * @param ctx pointer to a context of a buffersink or abuffersink AVFilter. - * @param frame pointer to an allocated frame that will be filled with data. - * The data must be freed using av_frame_unref() / av_frame_free() - * - * @return - * - >= 0 if a frame was successfully returned. - * - AVERROR(EAGAIN) if no frames are available at this point; more - * input frames must be added to the filtergraph to get more output. - * - AVERROR_EOF if there will be no more output frames on this sink. - * - A different negative AVERROR code in other failure cases. - */ -int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame); - -/** - * Same as av_buffersink_get_frame(), but with the ability to specify the number - * of samples read. This function is less efficient than - * av_buffersink_get_frame(), because it copies the data around. - * - * @param ctx pointer to a context of the abuffersink AVFilter. - * @param frame pointer to an allocated frame that will be filled with data. - * The data must be freed using av_frame_unref() / av_frame_free() - * frame will contain exactly nb_samples audio samples, except at - * the end of stream, when it can contain less than nb_samples. - * - * @return The return codes have the same meaning as for - * av_buffersink_get_frame(). - * - * @warning do not mix this function with av_buffersink_get_frame(). Use only one or - * the other with a single sink, not both. - */ -int av_buffersink_get_samples(AVFilterContext *ctx, AVFrame *frame, int nb_samples); - -/** - * @} - */ - -#endif /* AVFILTER_BUFFERSINK_H */ diff --git a/prebuilts/x86_64/include/libavfilter/buffersrc.h b/prebuilts/x86_64/include/libavfilter/buffersrc.h deleted file mode 100644 index 08fbd18..0000000 --- a/prebuilts/x86_64/include/libavfilter/buffersrc.h +++ /dev/null @@ -1,209 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_BUFFERSRC_H -#define AVFILTER_BUFFERSRC_H - -/** - * @file - * @ingroup lavfi_buffersrc - * Memory buffer source API. - */ - -#include "avfilter.h" - -/** - * @defgroup lavfi_buffersrc Buffer source API - * @ingroup lavfi - * @{ - */ - -enum { - - /** - * Do not check for format changes. - */ - AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT = 1, - - /** - * Immediately push the frame to the output. - */ - AV_BUFFERSRC_FLAG_PUSH = 4, - - /** - * Keep a reference to the frame. - * If the frame if reference-counted, create a new reference; otherwise - * copy the frame data. - */ - AV_BUFFERSRC_FLAG_KEEP_REF = 8, - -}; - -/** - * Get the number of failed requests. - * - * A failed request is when the request_frame method is called while no - * frame is present in the buffer. - * The number is reset when a frame is added. - */ -unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src); - -/** - * This structure contains the parameters describing the frames that will be - * passed to this filter. - * - * It should be allocated with av_buffersrc_parameters_alloc() and freed with - * av_free(). All the allocated fields in it remain owned by the caller. - */ -typedef struct AVBufferSrcParameters { - /** - * video: the pixel format, value corresponds to enum AVPixelFormat - * audio: the sample format, value corresponds to enum AVSampleFormat - */ - int format; - /** - * The timebase to be used for the timestamps on the input frames. - */ - AVRational time_base; - - /** - * Video only, the display dimensions of the input frames. - */ - int width, height; - - /** - * Video only, the sample (pixel) aspect ratio. - */ - AVRational sample_aspect_ratio; - - /** - * Video only, the frame rate of the input video. This field must only be - * set to a non-zero value if input stream has a known constant framerate - * and should be left at its initial value if the framerate is variable or - * unknown. - */ - AVRational frame_rate; - - /** - * Video with a hwaccel pixel format only. This should be a reference to an - * AVHWFramesContext instance describing the input frames. - */ - AVBufferRef *hw_frames_ctx; - - /** - * Audio only, the audio sampling rate in samples per second. - */ - int sample_rate; - - /** - * Audio only, the audio channel layout - */ - uint64_t channel_layout; -} AVBufferSrcParameters; - -/** - * Allocate a new AVBufferSrcParameters instance. It should be freed by the - * caller with av_free(). - */ -AVBufferSrcParameters *av_buffersrc_parameters_alloc(void); - -/** - * Initialize the buffersrc or abuffersrc filter with the provided parameters. - * This function may be called multiple times, the later calls override the - * previous ones. Some of the parameters may also be set through AVOptions, then - * whatever method is used last takes precedence. - * - * @param ctx an instance of the buffersrc or abuffersrc filter - * @param param the stream parameters. The frames later passed to this filter - * must conform to those parameters. All the allocated fields in - * param remain owned by the caller, libavfilter will make internal - * copies or references when necessary. - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *param); - -/** - * Add a frame to the buffer source. - * - * @param ctx an instance of the buffersrc filter - * @param frame frame to be added. If the frame is reference counted, this - * function will make a new reference to it. Otherwise the frame data will be - * copied. - * - * @return 0 on success, a negative AVERROR on error - * - * This function is equivalent to av_buffersrc_add_frame_flags() with the - * AV_BUFFERSRC_FLAG_KEEP_REF flag. - */ -av_warn_unused_result -int av_buffersrc_write_frame(AVFilterContext *ctx, const AVFrame *frame); - -/** - * Add a frame to the buffer source. - * - * @param ctx an instance of the buffersrc filter - * @param frame frame to be added. If the frame is reference counted, this - * function will take ownership of the reference(s) and reset the frame. - * Otherwise the frame data will be copied. If this function returns an error, - * the input frame is not touched. - * - * @return 0 on success, a negative AVERROR on error. - * - * @note the difference between this function and av_buffersrc_write_frame() is - * that av_buffersrc_write_frame() creates a new reference to the input frame, - * while this function takes ownership of the reference passed to it. - * - * This function is equivalent to av_buffersrc_add_frame_flags() without the - * AV_BUFFERSRC_FLAG_KEEP_REF flag. - */ -av_warn_unused_result -int av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame); - -/** - * Add a frame to the buffer source. - * - * By default, if the frame is reference-counted, this function will take - * ownership of the reference(s) and reset the frame. This can be controlled - * using the flags. - * - * If this function returns an error, the input frame is not touched. - * - * @param buffer_src pointer to a buffer source context - * @param frame a frame, or NULL to mark EOF - * @param flags a combination of AV_BUFFERSRC_FLAG_* - * @return >= 0 in case of success, a negative AVERROR code - * in case of failure - */ -av_warn_unused_result -int av_buffersrc_add_frame_flags(AVFilterContext *buffer_src, - AVFrame *frame, int flags); - -/** - * Close the buffer source after EOF. - * - * This is similar to passing NULL to av_buffersrc_add_frame_flags() - * except it takes the timestamp of the EOF, i.e. the timestamp of the end - * of the last frame. - */ -int av_buffersrc_close(AVFilterContext *ctx, int64_t pts, unsigned flags); - -/** - * @} - */ - -#endif /* AVFILTER_BUFFERSRC_H */ diff --git a/prebuilts/x86_64/include/libavfilter/version.h b/prebuilts/x86_64/include/libavfilter/version.h deleted file mode 100644 index 33bb98e..0000000 --- a/prebuilts/x86_64/include/libavfilter/version.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_VERSION_H -#define AVFILTER_VERSION_H - -/** - * @file - * @ingroup lavfi - * Libavfilter version macros - */ - -#include "libavutil/version.h" - -#define LIBAVFILTER_VERSION_MAJOR 7 -#define LIBAVFILTER_VERSION_MINOR 110 -#define LIBAVFILTER_VERSION_MICRO 100 - - -#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ - LIBAVFILTER_VERSION_MINOR, \ - LIBAVFILTER_VERSION_MICRO) -#define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \ - LIBAVFILTER_VERSION_MINOR, \ - LIBAVFILTER_VERSION_MICRO) -#define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT - -#define LIBAVFILTER_IDENT "Lavfi" AV_STRINGIFY(LIBAVFILTER_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ - -#ifndef FF_API_OLD_FILTER_OPTS_ERROR -#define FF_API_OLD_FILTER_OPTS_ERROR (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_LAVR_OPTS -#define FF_API_LAVR_OPTS (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_FILTER_GET_SET -#define FF_API_FILTER_GET_SET (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_SWS_PARAM_OPTION -#define FF_API_SWS_PARAM_OPTION (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_NEXT -#define FF_API_NEXT (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_FILTER_LINK_SET_CLOSED -#define FF_API_FILTER_LINK_SET_CLOSED (LIBAVFILTER_VERSION_MAJOR < 8) -#endif -#ifndef FF_API_BUFFERSINK_ALLOC -#define FF_API_BUFFERSINK_ALLOC (LIBAVFILTER_VERSION_MAJOR < 9) -#endif - -#endif /* AVFILTER_VERSION_H */ diff --git a/prebuilts/x86_64/include/libavformat/avformat.h b/prebuilts/x86_64/include/libavformat/avformat.h deleted file mode 100644 index 56708c0..0000000 --- a/prebuilts/x86_64/include/libavformat/avformat.h +++ /dev/null @@ -1,3012 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFORMAT_AVFORMAT_H -#define AVFORMAT_AVFORMAT_H - -/** - * @file - * @ingroup libavf - * Main libavformat public API header - */ - -/** - * @defgroup libavf libavformat - * I/O and Muxing/Demuxing Library - * - * Libavformat (lavf) is a library for dealing with various media container - * formats. Its main two purposes are demuxing - i.e. splitting a media file - * into component streams, and the reverse process of muxing - writing supplied - * data in a specified container format. It also has an @ref lavf_io - * "I/O module" which supports a number of protocols for accessing the data (e.g. - * file, tcp, http and others). - * Unless you are absolutely sure you won't use libavformat's network - * capabilities, you should also call avformat_network_init(). - * - * A supported input format is described by an AVInputFormat struct, conversely - * an output format is described by AVOutputFormat. You can iterate over all - * input/output formats using the av_demuxer_iterate / av_muxer_iterate() functions. - * The protocols layer is not part of the public API, so you can only get the names - * of supported protocols with the avio_enum_protocols() function. - * - * Main lavf structure used for both muxing and demuxing is AVFormatContext, - * which exports all information about the file being read or written. As with - * most Libavformat structures, its size is not part of public ABI, so it cannot be - * allocated on stack or directly with av_malloc(). To create an - * AVFormatContext, use avformat_alloc_context() (some functions, like - * avformat_open_input() might do that for you). - * - * Most importantly an AVFormatContext contains: - * @li the @ref AVFormatContext.iformat "input" or @ref AVFormatContext.oformat - * "output" format. It is either autodetected or set by user for input; - * always set by user for output. - * @li an @ref AVFormatContext.streams "array" of AVStreams, which describe all - * elementary streams stored in the file. AVStreams are typically referred to - * using their index in this array. - * @li an @ref AVFormatContext.pb "I/O context". It is either opened by lavf or - * set by user for input, always set by user for output (unless you are dealing - * with an AVFMT_NOFILE format). - * - * @section lavf_options Passing options to (de)muxers - * It is possible to configure lavf muxers and demuxers using the @ref avoptions - * mechanism. Generic (format-independent) libavformat options are provided by - * AVFormatContext, they can be examined from a user program by calling - * av_opt_next() / av_opt_find() on an allocated AVFormatContext (or its AVClass - * from avformat_get_class()). Private (format-specific) options are provided by - * AVFormatContext.priv_data if and only if AVInputFormat.priv_class / - * AVOutputFormat.priv_class of the corresponding format struct is non-NULL. - * Further options may be provided by the @ref AVFormatContext.pb "I/O context", - * if its AVClass is non-NULL, and the protocols layer. See the discussion on - * nesting in @ref avoptions documentation to learn how to access those. - * - * @section urls - * URL strings in libavformat are made of a scheme/protocol, a ':', and a - * scheme specific string. URLs without a scheme and ':' used for local files - * are supported but deprecated. "file:" should be used for local files. - * - * It is important that the scheme string is not taken from untrusted - * sources without checks. - * - * Note that some schemes/protocols are quite powerful, allowing access to - * both local and remote files, parts of them, concatenations of them, local - * audio and video devices and so on. - * - * @{ - * - * @defgroup lavf_decoding Demuxing - * @{ - * Demuxers read a media file and split it into chunks of data (@em packets). A - * @ref AVPacket "packet" contains one or more encoded frames which belongs to a - * single elementary stream. In the lavf API this process is represented by the - * avformat_open_input() function for opening a file, av_read_frame() for - * reading a single packet and finally avformat_close_input(), which does the - * cleanup. - * - * @section lavf_decoding_open Opening a media file - * The minimum information required to open a file is its URL, which - * is passed to avformat_open_input(), as in the following code: - * @code - * const char *url = "file:in.mp3"; - * AVFormatContext *s = NULL; - * int ret = avformat_open_input(&s, url, NULL, NULL); - * if (ret < 0) - * abort(); - * @endcode - * The above code attempts to allocate an AVFormatContext, open the - * specified file (autodetecting the format) and read the header, exporting the - * information stored there into s. Some formats do not have a header or do not - * store enough information there, so it is recommended that you call the - * avformat_find_stream_info() function which tries to read and decode a few - * frames to find missing information. - * - * In some cases you might want to preallocate an AVFormatContext yourself with - * avformat_alloc_context() and do some tweaking on it before passing it to - * avformat_open_input(). One such case is when you want to use custom functions - * for reading input data instead of lavf internal I/O layer. - * To do that, create your own AVIOContext with avio_alloc_context(), passing - * your reading callbacks to it. Then set the @em pb field of your - * AVFormatContext to newly created AVIOContext. - * - * Since the format of the opened file is in general not known until after - * avformat_open_input() has returned, it is not possible to set demuxer private - * options on a preallocated context. Instead, the options should be passed to - * avformat_open_input() wrapped in an AVDictionary: - * @code - * AVDictionary *options = NULL; - * av_dict_set(&options, "video_size", "640x480", 0); - * av_dict_set(&options, "pixel_format", "rgb24", 0); - * - * if (avformat_open_input(&s, url, NULL, &options) < 0) - * abort(); - * av_dict_free(&options); - * @endcode - * This code passes the private options 'video_size' and 'pixel_format' to the - * demuxer. They would be necessary for e.g. the rawvideo demuxer, since it - * cannot know how to interpret raw video data otherwise. If the format turns - * out to be something different than raw video, those options will not be - * recognized by the demuxer and therefore will not be applied. Such unrecognized - * options are then returned in the options dictionary (recognized options are - * consumed). The calling program can handle such unrecognized options as it - * wishes, e.g. - * @code - * AVDictionaryEntry *e; - * if (e = av_dict_get(options, "", NULL, AV_DICT_IGNORE_SUFFIX)) { - * fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key); - * abort(); - * } - * @endcode - * - * After you have finished reading the file, you must close it with - * avformat_close_input(). It will free everything associated with the file. - * - * @section lavf_decoding_read Reading from an opened file - * Reading data from an opened AVFormatContext is done by repeatedly calling - * av_read_frame() on it. Each call, if successful, will return an AVPacket - * containing encoded data for one AVStream, identified by - * AVPacket.stream_index. This packet may be passed straight into the libavcodec - * decoding functions avcodec_send_packet() or avcodec_decode_subtitle2() if the - * caller wishes to decode the data. - * - * AVPacket.pts, AVPacket.dts and AVPacket.duration timing information will be - * set if known. They may also be unset (i.e. AV_NOPTS_VALUE for - * pts/dts, 0 for duration) if the stream does not provide them. The timing - * information will be in AVStream.time_base units, i.e. it has to be - * multiplied by the timebase to convert them to seconds. - * - * A packet returned by av_read_frame() is always reference-counted, - * i.e. AVPacket.buf is set and the user may keep it indefinitely. - * The packet must be freed with av_packet_unref() when it is no - * longer needed. - * - * @section lavf_decoding_seek Seeking - * @} - * - * @defgroup lavf_encoding Muxing - * @{ - * Muxers take encoded data in the form of @ref AVPacket "AVPackets" and write - * it into files or other output bytestreams in the specified container format. - * - * The main API functions for muxing are avformat_write_header() for writing the - * file header, av_write_frame() / av_interleaved_write_frame() for writing the - * packets and av_write_trailer() for finalizing the file. - * - * At the beginning of the muxing process, the caller must first call - * avformat_alloc_context() to create a muxing context. The caller then sets up - * the muxer by filling the various fields in this context: - * - * - The @ref AVFormatContext.oformat "oformat" field must be set to select the - * muxer that will be used. - * - Unless the format is of the AVFMT_NOFILE type, the @ref AVFormatContext.pb - * "pb" field must be set to an opened IO context, either returned from - * avio_open2() or a custom one. - * - Unless the format is of the AVFMT_NOSTREAMS type, at least one stream must - * be created with the avformat_new_stream() function. The caller should fill - * the @ref AVStream.codecpar "stream codec parameters" information, such as the - * codec @ref AVCodecParameters.codec_type "type", @ref AVCodecParameters.codec_id - * "id" and other parameters (e.g. width / height, the pixel or sample format, - * etc.) as known. The @ref AVStream.time_base "stream timebase" should - * be set to the timebase that the caller desires to use for this stream (note - * that the timebase actually used by the muxer can be different, as will be - * described later). - * - It is advised to manually initialize only the relevant fields in - * AVCodecParameters, rather than using @ref avcodec_parameters_copy() during - * remuxing: there is no guarantee that the codec context values remain valid - * for both input and output format contexts. - * - The caller may fill in additional information, such as @ref - * AVFormatContext.metadata "global" or @ref AVStream.metadata "per-stream" - * metadata, @ref AVFormatContext.chapters "chapters", @ref - * AVFormatContext.programs "programs", etc. as described in the - * AVFormatContext documentation. Whether such information will actually be - * stored in the output depends on what the container format and the muxer - * support. - * - * When the muxing context is fully set up, the caller must call - * avformat_write_header() to initialize the muxer internals and write the file - * header. Whether anything actually is written to the IO context at this step - * depends on the muxer, but this function must always be called. Any muxer - * private options must be passed in the options parameter to this function. - * - * The data is then sent to the muxer by repeatedly calling av_write_frame() or - * av_interleaved_write_frame() (consult those functions' documentation for - * discussion on the difference between them; only one of them may be used with - * a single muxing context, they should not be mixed). Do note that the timing - * information on the packets sent to the muxer must be in the corresponding - * AVStream's timebase. That timebase is set by the muxer (in the - * avformat_write_header() step) and may be different from the timebase - * requested by the caller. - * - * Once all the data has been written, the caller must call av_write_trailer() - * to flush any buffered packets and finalize the output file, then close the IO - * context (if any) and finally free the muxing context with - * avformat_free_context(). - * @} - * - * @defgroup lavf_io I/O Read/Write - * @{ - * @section lavf_io_dirlist Directory listing - * The directory listing API makes it possible to list files on remote servers. - * - * Some of possible use cases: - * - an "open file" dialog to choose files from a remote location, - * - a recursive media finder providing a player with an ability to play all - * files from a given directory. - * - * @subsection lavf_io_dirlist_open Opening a directory - * At first, a directory needs to be opened by calling avio_open_dir() - * supplied with a URL and, optionally, ::AVDictionary containing - * protocol-specific parameters. The function returns zero or positive - * integer and allocates AVIODirContext on success. - * - * @code - * AVIODirContext *ctx = NULL; - * if (avio_open_dir(&ctx, "smb://example.com/some_dir", NULL) < 0) { - * fprintf(stderr, "Cannot open directory.\n"); - * abort(); - * } - * @endcode - * - * This code tries to open a sample directory using smb protocol without - * any additional parameters. - * - * @subsection lavf_io_dirlist_read Reading entries - * Each directory's entry (i.e. file, another directory, anything else - * within ::AVIODirEntryType) is represented by AVIODirEntry. - * Reading consecutive entries from an opened AVIODirContext is done by - * repeatedly calling avio_read_dir() on it. Each call returns zero or - * positive integer if successful. Reading can be stopped right after the - * NULL entry has been read -- it means there are no entries left to be - * read. The following code reads all entries from a directory associated - * with ctx and prints their names to standard output. - * @code - * AVIODirEntry *entry = NULL; - * for (;;) { - * if (avio_read_dir(ctx, &entry) < 0) { - * fprintf(stderr, "Cannot list directory.\n"); - * abort(); - * } - * if (!entry) - * break; - * printf("%s\n", entry->name); - * avio_free_directory_entry(&entry); - * } - * @endcode - * @} - * - * @defgroup lavf_codec Demuxers - * @{ - * @defgroup lavf_codec_native Native Demuxers - * @{ - * @} - * @defgroup lavf_codec_wrappers External library wrappers - * @{ - * @} - * @} - * @defgroup lavf_protos I/O Protocols - * @{ - * @} - * @defgroup lavf_internal Internal - * @{ - * @} - * @} - */ - -#include -#include /* FILE */ -#include "libavcodec/avcodec.h" -#include "libavutil/dict.h" -#include "libavutil/log.h" - -#include "avio.h" -#include "libavformat/version.h" - -struct AVFormatContext; - -struct AVDeviceInfoList; -struct AVDeviceCapabilitiesQuery; - -/** - * @defgroup metadata_api Public Metadata API - * @{ - * @ingroup libavf - * The metadata API allows libavformat to export metadata tags to a client - * application when demuxing. Conversely it allows a client application to - * set metadata when muxing. - * - * Metadata is exported or set as pairs of key/value strings in the 'metadata' - * fields of the AVFormatContext, AVStream, AVChapter and AVProgram structs - * using the @ref lavu_dict "AVDictionary" API. Like all strings in FFmpeg, - * metadata is assumed to be UTF-8 encoded Unicode. Note that metadata - * exported by demuxers isn't checked to be valid UTF-8 in most cases. - * - * Important concepts to keep in mind: - * - Keys are unique; there can never be 2 tags with the same key. This is - * also meant semantically, i.e., a demuxer should not knowingly produce - * several keys that are literally different but semantically identical. - * E.g., key=Author5, key=Author6. In this example, all authors must be - * placed in the same tag. - * - Metadata is flat, not hierarchical; there are no subtags. If you - * want to store, e.g., the email address of the child of producer Alice - * and actor Bob, that could have key=alice_and_bobs_childs_email_address. - * - Several modifiers can be applied to the tag name. This is done by - * appending a dash character ('-') and the modifier name in the order - * they appear in the list below -- e.g. foo-eng-sort, not foo-sort-eng. - * - language -- a tag whose value is localized for a particular language - * is appended with the ISO 639-2/B 3-letter language code. - * For example: Author-ger=Michael, Author-eng=Mike - * The original/default language is in the unqualified "Author" tag. - * A demuxer should set a default if it sets any translated tag. - * - sorting -- a modified version of a tag that should be used for - * sorting will have '-sort' appended. E.g. artist="The Beatles", - * artist-sort="Beatles, The". - * - Some protocols and demuxers support metadata updates. After a successful - * call to av_read_frame(), AVFormatContext.event_flags or AVStream.event_flags - * will be updated to indicate if metadata changed. In order to detect metadata - * changes on a stream, you need to loop through all streams in the AVFormatContext - * and check their individual event_flags. - * - * - Demuxers attempt to export metadata in a generic format, however tags - * with no generic equivalents are left as they are stored in the container. - * Follows a list of generic tag names: - * - @verbatim - album -- name of the set this work belongs to - album_artist -- main creator of the set/album, if different from artist. - e.g. "Various Artists" for compilation albums. - artist -- main creator of the work - comment -- any additional description of the file. - composer -- who composed the work, if different from artist. - copyright -- name of copyright holder. - creation_time-- date when the file was created, preferably in ISO 8601. - date -- date when the work was created, preferably in ISO 8601. - disc -- number of a subset, e.g. disc in a multi-disc collection. - encoder -- name/settings of the software/hardware that produced the file. - encoded_by -- person/group who created the file. - filename -- original name of the file. - genre -- . - language -- main language in which the work is performed, preferably - in ISO 639-2 format. Multiple languages can be specified by - separating them with commas. - performer -- artist who performed the work, if different from artist. - E.g for "Also sprach Zarathustra", artist would be "Richard - Strauss" and performer "London Philharmonic Orchestra". - publisher -- name of the label/publisher. - service_name -- name of the service in broadcasting (channel name). - service_provider -- name of the service provider in broadcasting. - title -- name of the work. - track -- number of this work in the set, can be in form current/total. - variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of - @endverbatim - * - * Look in the examples section for an application example how to use the Metadata API. - * - * @} - */ - -/* packet functions */ - - -/** - * Allocate and read the payload of a packet and initialize its - * fields with default values. - * - * @param s associated IO context - * @param pkt packet - * @param size desired payload size - * @return >0 (read size) if OK, AVERROR_xxx otherwise - */ -int av_get_packet(AVIOContext *s, AVPacket *pkt, int size); - - -/** - * Read data and append it to the current content of the AVPacket. - * If pkt->size is 0 this is identical to av_get_packet. - * Note that this uses av_grow_packet and thus involves a realloc - * which is inefficient. Thus this function should only be used - * when there is no reasonable way to know (an upper bound of) - * the final size. - * - * @param s associated IO context - * @param pkt packet - * @param size amount of data to read - * @return >0 (read size) if OK, AVERROR_xxx otherwise, previous data - * will not be lost even if an error occurs. - */ -int av_append_packet(AVIOContext *s, AVPacket *pkt, int size); - -/*************************************************/ -/* input/output formats */ - -struct AVCodecTag; - -/** - * This structure contains the data a format has to probe a file. - */ -typedef struct AVProbeData { - const char *filename; - unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */ - int buf_size; /**< Size of buf except extra allocated bytes */ - const char *mime_type; /**< mime_type, when known. */ -} AVProbeData; - -#define AVPROBE_SCORE_RETRY (AVPROBE_SCORE_MAX/4) -#define AVPROBE_SCORE_STREAM_RETRY (AVPROBE_SCORE_MAX/4-1) - -#define AVPROBE_SCORE_EXTENSION 50 ///< score for file extension -#define AVPROBE_SCORE_MIME 75 ///< score for file mime type -#define AVPROBE_SCORE_MAX 100 ///< maximum score - -#define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer - -/// Demuxer will use avio_open, no opened file should be provided by the caller. -#define AVFMT_NOFILE 0x0001 -#define AVFMT_NEEDNUMBER 0x0002 /**< Needs '%d' in filename. */ -#define AVFMT_SHOW_IDS 0x0008 /**< Show format stream IDs numbers. */ -#define AVFMT_GLOBALHEADER 0x0040 /**< Format wants global header. */ -#define AVFMT_NOTIMESTAMPS 0x0080 /**< Format does not need / have any timestamps. */ -#define AVFMT_GENERIC_INDEX 0x0100 /**< Use generic index building code. */ -#define AVFMT_TS_DISCONT 0x0200 /**< Format allows timestamp discontinuities. Note, muxers always require valid (monotone) timestamps */ -#define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */ -#define AVFMT_NODIMENSIONS 0x0800 /**< Format does not need width/height */ -#define AVFMT_NOSTREAMS 0x1000 /**< Format does not require any streams */ -#define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fall back on binary search via read_timestamp */ -#define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fall back on generic search */ -#define AVFMT_NO_BYTE_SEEK 0x8000 /**< Format does not allow seeking by bytes */ -#define AVFMT_ALLOW_FLUSH 0x10000 /**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. */ -#define AVFMT_TS_NONSTRICT 0x20000 /**< Format does not require strictly - increasing timestamps, but they must - still be monotonic */ -#define AVFMT_TS_NEGATIVE 0x40000 /**< Format allows muxing negative - timestamps. If not set the timestamp - will be shifted in av_write_frame and - av_interleaved_write_frame so they - start from 0. - The user or muxer can override this through - AVFormatContext.avoid_negative_ts - */ - -#define AVFMT_SEEK_TO_PTS 0x4000000 /**< Seeking is based on PTS */ - -/** - * @addtogroup lavf_encoding - * @{ - */ -typedef struct AVOutputFormat { - const char *name; - /** - * Descriptive name for the format, meant to be more human-readable - * than name. You should use the NULL_IF_CONFIG_SMALL() macro - * to define it. - */ - const char *long_name; - const char *mime_type; - const char *extensions; /**< comma-separated filename extensions */ - /* output support */ - enum AVCodecID audio_codec; /**< default audio codec */ - enum AVCodecID video_codec; /**< default video codec */ - enum AVCodecID subtitle_codec; /**< default subtitle codec */ - /** - * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, - * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, - * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, - * AVFMT_TS_NONSTRICT, AVFMT_TS_NEGATIVE - */ - int flags; - - /** - * List of supported codec_id-codec_tag pairs, ordered by "better - * choice first". The arrays are all terminated by AV_CODEC_ID_NONE. - */ - const struct AVCodecTag * const *codec_tag; - - - const AVClass *priv_class; ///< AVClass for the private context - - /***************************************************************** - * No fields below this line are 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. - ***************************************************************** - */ - /** - * The ff_const59 define is not part of the public API and will - * be removed without further warning. - */ -#if FF_API_AVIOFORMAT -#define ff_const59 -#else -#define ff_const59 const -#endif -#if FF_API_NEXT - ff_const59 struct AVOutputFormat *next; -#endif - /** - * size of private data so that it can be allocated in the wrapper - */ - int priv_data_size; - - int (*write_header)(struct AVFormatContext *); - /** - * Write a packet. If AVFMT_ALLOW_FLUSH is set in flags, - * pkt can be NULL in order to flush data buffered in the muxer. - * When flushing, return 0 if there still is more data to flush, - * or 1 if everything was flushed and there is no more buffered - * data. - */ - int (*write_packet)(struct AVFormatContext *, AVPacket *pkt); - int (*write_trailer)(struct AVFormatContext *); - /** - * A format-specific function for interleavement. - * If unset, packets will be interleaved by dts. - */ - int (*interleave_packet)(struct AVFormatContext *, AVPacket *out, - AVPacket *in, int flush); - /** - * Test if the given codec can be stored in this container. - * - * @return 1 if the codec is supported, 0 if it is not. - * A negative number if unknown. - * MKTAG('A', 'P', 'I', 'C') if the codec is only supported as AV_DISPOSITION_ATTACHED_PIC - */ - int (*query_codec)(enum AVCodecID id, int std_compliance); - - void (*get_output_timestamp)(struct AVFormatContext *s, int stream, - int64_t *dts, int64_t *wall); - /** - * Allows sending messages from application to device. - */ - int (*control_message)(struct AVFormatContext *s, int type, - void *data, size_t data_size); - - /** - * Write an uncoded AVFrame. - * - * See av_write_uncoded_frame() for details. - * - * The library will free *frame afterwards, but the muxer can prevent it - * by setting the pointer to NULL. - */ - int (*write_uncoded_frame)(struct AVFormatContext *, int stream_index, - AVFrame **frame, unsigned flags); - /** - * Returns device list with it properties. - * @see avdevice_list_devices() for more details. - */ - int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); -#if LIBAVFORMAT_VERSION_MAJOR < 59 - /** - * Initialize device capabilities submodule. - * @see avdevice_capabilities_create() for more details. - */ - int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); - /** - * Free device capabilities submodule. - * @see avdevice_capabilities_free() for more details. - */ - int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); -#endif - enum AVCodecID data_codec; /**< default data codec */ - /** - * Initialize format. May allocate data here, and set any AVFormatContext or - * AVStream parameters that need to be set before packets are sent. - * This method must not write output. - * - * Return 0 if streams were fully configured, 1 if not, negative AVERROR on failure - * - * Any allocations made here must be freed in deinit(). - */ - int (*init)(struct AVFormatContext *); - /** - * Deinitialize format. If present, this is called whenever the muxer is being - * destroyed, regardless of whether or not the header has been written. - * - * If a trailer is being written, this is called after write_trailer(). - * - * This is called if init() fails as well. - */ - void (*deinit)(struct AVFormatContext *); - /** - * Set up any necessary bitstream filtering and extract any extra data needed - * for the global header. - * Return 0 if more packets from this stream must be checked; 1 if not. - */ - int (*check_bitstream)(struct AVFormatContext *, const AVPacket *pkt); -} AVOutputFormat; -/** - * @} - */ - -/** - * @addtogroup lavf_decoding - * @{ - */ -typedef struct AVInputFormat { - /** - * A comma separated list of short names for the format. New names - * may be appended with a minor bump. - */ - const char *name; - - /** - * Descriptive name for the format, meant to be more human-readable - * than name. You should use the NULL_IF_CONFIG_SMALL() macro - * to define it. - */ - const char *long_name; - - /** - * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, - * AVFMT_NOTIMESTAMPS, AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, - * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS. - */ - int flags; - - /** - * If extensions are defined, then no probe is done. You should - * usually not use extension format guessing because it is not - * reliable enough - */ - const char *extensions; - - const struct AVCodecTag * const *codec_tag; - - const AVClass *priv_class; ///< AVClass for the private context - - /** - * Comma-separated list of mime types. - * It is used check for matching mime types while probing. - * @see av_probe_input_format2 - */ - const char *mime_type; - - /***************************************************************** - * No fields below this line are 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. - ***************************************************************** - */ -#if FF_API_NEXT - ff_const59 struct AVInputFormat *next; -#endif - - /** - * Raw demuxers store their codec ID here. - */ - int raw_codec_id; - - /** - * Size of private data so that it can be allocated in the wrapper. - */ - int priv_data_size; - - /** - * Tell if a given file has a chance of being parsed as this format. - * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes - * big so you do not have to check for that unless you need more. - */ - int (*read_probe)(const AVProbeData *); - - /** - * Read the format header and initialize the AVFormatContext - * structure. Return 0 if OK. 'avformat_new_stream' should be - * called to create new streams. - */ - int (*read_header)(struct AVFormatContext *); - - /** - * Read one packet and put it in 'pkt'. pts and flags are also - * set. 'avformat_new_stream' can be called only if the flag - * AVFMTCTX_NOHEADER is used and only in the calling thread (not in a - * background thread). - * @return 0 on success, < 0 on error. - * Upon returning an error, pkt must be unreferenced by the caller. - */ - int (*read_packet)(struct AVFormatContext *, AVPacket *pkt); - - /** - * Close the stream. The AVFormatContext and AVStreams are not - * freed by this function - */ - int (*read_close)(struct AVFormatContext *); - - /** - * Seek to a given timestamp relative to the frames in - * stream component stream_index. - * @param stream_index Must not be -1. - * @param flags Selects which direction should be preferred if no exact - * match is available. - * @return >= 0 on success (but not necessarily the new offset) - */ - int (*read_seek)(struct AVFormatContext *, - int stream_index, int64_t timestamp, int flags); - - /** - * Get the next timestamp in stream[stream_index].time_base units. - * @return the timestamp or AV_NOPTS_VALUE if an error occurred - */ - int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index, - int64_t *pos, int64_t pos_limit); - - /** - * Start/resume playing - only meaningful if using a network-based format - * (RTSP). - */ - int (*read_play)(struct AVFormatContext *); - - /** - * Pause playing - only meaningful if using a network-based format - * (RTSP). - */ - int (*read_pause)(struct AVFormatContext *); - - /** - * Seek to timestamp ts. - * Seeking will be done so that the point from which all active streams - * can be presented successfully will be closest to ts and within min/max_ts. - * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. - */ - int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); - - /** - * Returns device list with it properties. - * @see avdevice_list_devices() for more details. - */ - int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - /** - * Initialize device capabilities submodule. - * @see avdevice_capabilities_create() for more details. - */ - int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); - - /** - * Free device capabilities submodule. - * @see avdevice_capabilities_free() for more details. - */ - int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); -#endif -} AVInputFormat; -/** - * @} - */ - -enum AVStreamParseType { - AVSTREAM_PARSE_NONE, - AVSTREAM_PARSE_FULL, /**< full parsing and repack */ - AVSTREAM_PARSE_HEADERS, /**< Only parse headers, do not repack. */ - AVSTREAM_PARSE_TIMESTAMPS, /**< full parsing and interpolation of timestamps for frames not starting on a packet boundary */ - AVSTREAM_PARSE_FULL_ONCE, /**< full parsing and repack of the first frame only, only implemented for H.264 currently */ - AVSTREAM_PARSE_FULL_RAW, /**< full parsing and repack with timestamp and position generation by parser for raw - this assumes that each packet in the file contains no demuxer level headers and - just codec level data, otherwise position generation would fail */ -}; - -typedef struct AVIndexEntry { - int64_t pos; - int64_t timestamp; /**< - * Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are available - * when seeking to this entry. That means preferable PTS on keyframe based formats. - * But demuxers can choose to store a different timestamp, if it is more convenient for the implementation or nothing better - * is known - */ -#define AVINDEX_KEYFRAME 0x0001 -#define AVINDEX_DISCARD_FRAME 0x0002 /** - * Flag is used to indicate which frame should be discarded after decoding. - */ - int flags:2; - int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment). - int min_distance; /**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. */ -} AVIndexEntry; - -#define AV_DISPOSITION_DEFAULT 0x0001 -#define AV_DISPOSITION_DUB 0x0002 -#define AV_DISPOSITION_ORIGINAL 0x0004 -#define AV_DISPOSITION_COMMENT 0x0008 -#define AV_DISPOSITION_LYRICS 0x0010 -#define AV_DISPOSITION_KARAOKE 0x0020 - -/** - * Track should be used during playback by default. - * Useful for subtitle track that should be displayed - * even when user did not explicitly ask for subtitles. - */ -#define AV_DISPOSITION_FORCED 0x0040 -#define AV_DISPOSITION_HEARING_IMPAIRED 0x0080 /**< stream for hearing impaired audiences */ -#define AV_DISPOSITION_VISUAL_IMPAIRED 0x0100 /**< stream for visual impaired audiences */ -#define AV_DISPOSITION_CLEAN_EFFECTS 0x0200 /**< stream without voice */ -/** - * The stream is stored in the file as an attached picture/"cover art" (e.g. - * APIC frame in ID3v2). The first (usually only) packet associated with it - * will be returned among the first few packets read from the file unless - * seeking takes place. It can also be accessed at any time in - * AVStream.attached_pic. - */ -#define AV_DISPOSITION_ATTACHED_PIC 0x0400 -/** - * The stream is sparse, and contains thumbnail images, often corresponding - * to chapter markers. Only ever used with AV_DISPOSITION_ATTACHED_PIC. - */ -#define AV_DISPOSITION_TIMED_THUMBNAILS 0x0800 - -typedef struct AVStreamInternal AVStreamInternal; - -/** - * To specify text track kind (different from subtitles default). - */ -#define AV_DISPOSITION_CAPTIONS 0x10000 -#define AV_DISPOSITION_DESCRIPTIONS 0x20000 -#define AV_DISPOSITION_METADATA 0x40000 -#define AV_DISPOSITION_DEPENDENT 0x80000 ///< dependent audio stream (mix_type=0 in mpegts) -#define AV_DISPOSITION_STILL_IMAGE 0x100000 ///< still images in video stream (still_picture_flag=1 in mpegts) - -/** - * Options for behavior on timestamp wrap detection. - */ -#define AV_PTS_WRAP_IGNORE 0 ///< ignore the wrap -#define AV_PTS_WRAP_ADD_OFFSET 1 ///< add the format specific offset on wrap detection -#define AV_PTS_WRAP_SUB_OFFSET -1 ///< subtract the format specific offset on wrap detection - -/** - * Stream structure. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVStream) must not be used outside libav*. - */ -typedef struct AVStream { - int index; /**< stream index in AVFormatContext */ - /** - * Format-specific stream ID. - * decoding: set by libavformat - * encoding: set by the user, replaced by libavformat if left unset - */ - int id; -#if FF_API_LAVF_AVCTX - /** - * @deprecated use the codecpar struct instead - */ - attribute_deprecated - AVCodecContext *codec; -#endif - void *priv_data; - - /** - * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. - * - * decoding: set by libavformat - * encoding: May be set by the caller before avformat_write_header() to - * provide a hint to the muxer about the desired timebase. In - * avformat_write_header(), the muxer will overwrite this field - * with the timebase that will actually be used for the timestamps - * written into the file (which may or may not be related to the - * user-provided one, depending on the format). - */ - AVRational time_base; - - /** - * Decoding: pts of the first frame of the stream in presentation order, in stream time base. - * Only set this if you are absolutely 100% sure that the value you set - * it to really is the pts of the first frame. - * This may be undefined (AV_NOPTS_VALUE). - * @note The ASF header does NOT contain a correct start_time the ASF - * demuxer must NOT set this. - */ - int64_t start_time; - - /** - * Decoding: duration of the stream, in stream time base. - * If a source file does not specify a duration, but does specify - * a bitrate, this value will be estimated from bitrate and file size. - * - * Encoding: May be set by the caller before avformat_write_header() to - * provide a hint to the muxer about the estimated duration. - */ - int64_t duration; - - int64_t nb_frames; ///< number of frames in this stream if known or 0 - - int disposition; /**< AV_DISPOSITION_* bit field */ - - enum AVDiscard discard; ///< Selects which packets can be discarded at will and do not need to be demuxed. - - /** - * sample aspect ratio (0 if unknown) - * - encoding: Set by user. - * - decoding: Set by libavformat. - */ - AVRational sample_aspect_ratio; - - AVDictionary *metadata; - - /** - * Average framerate - * - * - demuxing: May be set by libavformat when creating the stream or in - * avformat_find_stream_info(). - * - muxing: May be set by the caller before avformat_write_header(). - */ - AVRational avg_frame_rate; - - /** - * For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet - * will contain the attached picture. - * - * decoding: set by libavformat, must not be modified by the caller. - * encoding: unused - */ - AVPacket attached_pic; - - /** - * An array of side data that applies to the whole stream (i.e. the - * container does not allow it to change between packets). - * - * There may be no overlap between the side data in this array and side data - * in the packets. I.e. a given side data is either exported by the muxer - * (demuxing) / set by the caller (muxing) in this array, then it never - * appears in the packets, or the side data is exported / sent through - * the packets (always in the first packet where the value becomes known or - * changes), then it does not appear in this array. - * - * - demuxing: Set by libavformat when the stream is created. - * - muxing: May be set by the caller before avformat_write_header(). - * - * Freed by libavformat in avformat_free_context(). - * - * @see av_format_inject_global_side_data() - */ - AVPacketSideData *side_data; - /** - * The number of elements in the AVStream.side_data array. - */ - int nb_side_data; - - /** - * Flags indicating events happening on the stream, a combination of - * AVSTREAM_EVENT_FLAG_*. - * - * - demuxing: may be set by the demuxer in avformat_open_input(), - * avformat_find_stream_info() and av_read_frame(). Flags must be cleared - * by the user once the event has been handled. - * - muxing: may be set by the user after avformat_write_header(). to - * indicate a user-triggered event. The muxer will clear the flags for - * events it has handled in av_[interleaved]_write_frame(). - */ - int event_flags; -/** - * - demuxing: the demuxer read new metadata from the file and updated - * AVStream.metadata accordingly - * - muxing: the user updated AVStream.metadata and wishes the muxer to write - * it into the file - */ -#define AVSTREAM_EVENT_FLAG_METADATA_UPDATED 0x0001 -/** - * - demuxing: new packets for this stream were read from the file. This - * event is informational only and does not guarantee that new packets - * for this stream will necessarily be returned from av_read_frame(). - */ -#define AVSTREAM_EVENT_FLAG_NEW_PACKETS (1 << 1) - - /** - * Real base framerate of the stream. - * This is the lowest framerate with which all timestamps can be - * represented accurately (it is the least common multiple of all - * framerates in the stream). Note, this value is just a guess! - * For example, if the time base is 1/90000 and all frames have either - * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. - */ - AVRational r_frame_rate; - -#if FF_API_LAVF_FFSERVER - /** - * String containing pairs of key and values describing recommended encoder configuration. - * Pairs are separated by ','. - * Keys are separated from values by '='. - * - * @deprecated unused - */ - attribute_deprecated - char *recommended_encoder_configuration; -#endif - - /** - * Codec parameters associated with this stream. Allocated and freed by - * libavformat in avformat_new_stream() and avformat_free_context() - * respectively. - * - * - demuxing: filled by libavformat on stream creation or in - * avformat_find_stream_info() - * - muxing: filled by the caller before avformat_write_header() - */ - AVCodecParameters *codecpar; - - /***************************************************************** - * 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. - * Internal note: be aware that physically removing these fields - * will break ABI. Replace removed fields with dummy fields, and - * add new fields to AVStreamInternal. - ***************************************************************** - */ - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - // kept for ABI compatibility only, do not access in any way - void *unused; -#endif - - int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */ - - // Timestamp generation support: - /** - * Timestamp corresponding to the last dts sync point. - * - * Initialized when AVCodecParserContext.dts_sync_point >= 0 and - * a DTS is received from the underlying container. Otherwise set to - * AV_NOPTS_VALUE by default. - */ - int64_t first_dts; - int64_t cur_dts; - int64_t last_IP_pts; - int last_IP_duration; - - /** - * Number of packets to buffer for codec probing - */ - int probe_packets; - - /** - * Number of frames that have been demuxed during avformat_find_stream_info() - */ - int codec_info_nb_frames; - - /* av_read_frame() support */ - enum AVStreamParseType need_parsing; - struct AVCodecParserContext *parser; - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - // kept for ABI compatibility only, do not access in any way - void *unused7; - AVProbeData unused6; - int64_t unused5[16+1]; -#endif - AVIndexEntry *index_entries; /**< Only used if the format does not - support seeking natively. */ - int nb_index_entries; - unsigned int index_entries_allocated_size; - - /** - * Stream Identifier - * This is the MPEG-TS stream identifier +1 - * 0 means unknown - */ - int stream_identifier; - -#if LIBAVFORMAT_VERSION_MAJOR < 59 - // kept for ABI compatibility only, do not access in any way - int unused8; - int unused9; - int unused10; -#endif - - /** - * An opaque field for libavformat internal usage. - * Must not be accessed in any way by callers. - */ - AVStreamInternal *internal; -} AVStream; - -#if FF_API_FORMAT_GET_SET -/** - * Accessors for some AVStream fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -AVRational av_stream_get_r_frame_rate(const AVStream *s); -attribute_deprecated -void av_stream_set_r_frame_rate(AVStream *s, AVRational r); -#if FF_API_LAVF_FFSERVER -attribute_deprecated -char* av_stream_get_recommended_encoder_configuration(const AVStream *s); -attribute_deprecated -void av_stream_set_recommended_encoder_configuration(AVStream *s, char *configuration); -#endif -#endif - -struct AVCodecParserContext *av_stream_get_parser(const AVStream *s); - -/** - * Returns the pts of the last muxed packet + its duration - * - * the retuned value is undefined when used with a demuxer. - */ -int64_t av_stream_get_end_pts(const AVStream *st); - -#define AV_PROGRAM_RUNNING 1 - -/** - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVProgram) must not be used outside libav*. - */ -typedef struct AVProgram { - int id; - int flags; - enum AVDiscard discard; ///< selects which program to discard and which to feed to the caller - unsigned int *stream_index; - unsigned int nb_stream_indexes; - AVDictionary *metadata; - - int program_num; - int pmt_pid; - int pcr_pid; - int pmt_version; - - /***************************************************************** - * 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. - ***************************************************************** - */ - int64_t start_time; - int64_t end_time; - - int64_t pts_wrap_reference; ///< reference dts for wrap detection - int pts_wrap_behavior; ///< behavior on wrap detection -} AVProgram; - -#define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present - (streams are added dynamically) */ -#define AVFMTCTX_UNSEEKABLE 0x0002 /**< signal that the stream is definitely - not seekable, and attempts to call the - seek function will fail. For some - network protocols (e.g. HLS), this can - change dynamically at runtime. */ - -typedef struct AVChapter { -#if FF_API_CHAPTER_ID_INT - int id; ///< unique ID to identify the chapter -#else - int64_t id; ///< unique ID to identify the chapter -#endif - AVRational time_base; ///< time base in which the start/end timestamps are specified - int64_t start, end; ///< chapter start/end time in time_base units - AVDictionary *metadata; -} AVChapter; - - -/** - * Callback used by devices to communicate with application. - */ -typedef int (*av_format_control_message)(struct AVFormatContext *s, int type, - void *data, size_t data_size); - -typedef int (*AVOpenCallback)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, - const AVIOInterruptCB *int_cb, AVDictionary **options); - -/** - * The duration of a video can be estimated through various ways, and this enum can be used - * to know how the duration was estimated. - */ -enum AVDurationEstimationMethod { - AVFMT_DURATION_FROM_PTS, ///< Duration accurately estimated from PTSes - AVFMT_DURATION_FROM_STREAM, ///< Duration estimated from a stream with a known duration - AVFMT_DURATION_FROM_BITRATE ///< Duration estimated from bitrate (less accurate) -}; - -typedef struct AVFormatInternal AVFormatInternal; - -/** - * Format I/O context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVFormatContext) must not be used outside libav*, use - * avformat_alloc_context() to create an AVFormatContext. - * - * Fields can be accessed through AVOptions (av_opt*), - * the name string used matches the associated command line parameter name and - * can be found in libavformat/options_table.h. - * The AVOption/command line parameter names differ in some cases from the C - * structure field names for historic reasons or brevity. - */ -typedef struct AVFormatContext { - /** - * A class for logging and @ref avoptions. Set by avformat_alloc_context(). - * Exports (de)muxer private options if they exist. - */ - const AVClass *av_class; - - /** - * The input container format. - * - * Demuxing only, set by avformat_open_input(). - */ - ff_const59 struct AVInputFormat *iformat; - - /** - * The output container format. - * - * Muxing only, must be set by the caller before avformat_write_header(). - */ - ff_const59 struct AVOutputFormat *oformat; - - /** - * Format private data. This is an AVOptions-enabled struct - * if and only if iformat/oformat.priv_class is not NULL. - * - * - muxing: set by avformat_write_header() - * - demuxing: set by avformat_open_input() - */ - void *priv_data; - - /** - * I/O context. - * - * - demuxing: either set by the user before avformat_open_input() (then - * the user must close it manually) or set by avformat_open_input(). - * - muxing: set by the user before avformat_write_header(). The caller must - * take care of closing / freeing the IO context. - * - * Do NOT set this field if AVFMT_NOFILE flag is set in - * iformat/oformat.flags. In such a case, the (de)muxer will handle - * I/O in some other way and this field will be NULL. - */ - AVIOContext *pb; - - /* stream info */ - /** - * Flags signalling stream properties. A combination of AVFMTCTX_*. - * Set by libavformat. - */ - int ctx_flags; - - /** - * Number of elements in AVFormatContext.streams. - * - * Set by avformat_new_stream(), must not be modified by any other code. - */ - unsigned int nb_streams; - /** - * A list of all streams in the file. New streams are created with - * avformat_new_stream(). - * - * - demuxing: streams are created by libavformat in avformat_open_input(). - * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also - * appear in av_read_frame(). - * - muxing: streams are created by the user before avformat_write_header(). - * - * Freed by libavformat in avformat_free_context(). - */ - AVStream **streams; - -#if FF_API_FORMAT_FILENAME - /** - * input or output filename - * - * - demuxing: set by avformat_open_input() - * - muxing: may be set by the caller before avformat_write_header() - * - * @deprecated Use url instead. - */ - attribute_deprecated - char filename[1024]; -#endif - - /** - * input or output URL. Unlike the old filename field, this field has no - * length restriction. - * - * - demuxing: set by avformat_open_input(), initialized to an empty - * string if url parameter was NULL in avformat_open_input(). - * - muxing: may be set by the caller before calling avformat_write_header() - * (or avformat_init_output() if that is called first) to a string - * which is freeable by av_free(). Set to an empty string if it - * was NULL in avformat_init_output(). - * - * Freed by libavformat in avformat_free_context(). - */ - char *url; - - /** - * Position of the first frame of the component, in - * AV_TIME_BASE fractional seconds. NEVER set this value directly: - * It is deduced from the AVStream values. - * - * Demuxing only, set by libavformat. - */ - int64_t start_time; - - /** - * Duration of the stream, in AV_TIME_BASE fractional - * seconds. Only set this value if you know none of the individual stream - * durations and also do not set any of them. This is deduced from the - * AVStream values if not set. - * - * Demuxing only, set by libavformat. - */ - int64_t duration; - - /** - * Total stream bitrate in bit/s, 0 if not - * available. Never set it directly if the file_size and the - * duration are known as FFmpeg can compute it automatically. - */ - int64_t bit_rate; - - unsigned int packet_size; - int max_delay; - - /** - * Flags modifying the (de)muxer behaviour. A combination of AVFMT_FLAG_*. - * Set by the user before avformat_open_input() / avformat_write_header(). - */ - int flags; -#define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames. -#define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index. -#define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input. -#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS -#define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container -#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled -#define AVFMT_FLAG_NOBUFFER 0x0040 ///< Do not buffer frames when possible -#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it. -#define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted -#define AVFMT_FLAG_FLUSH_PACKETS 0x0200 ///< Flush the AVIOContext every packet. -/** - * When muxing, try to avoid writing any random/volatile data to the output. - * This includes any random IDs, real-time timestamps/dates, muxer version, etc. - * - * This flag is mainly intended for testing. - */ -#define AVFMT_FLAG_BITEXACT 0x0400 -#if FF_API_LAVF_MP4A_LATM -#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Deprecated, does nothing. -#endif -#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down) -#if FF_API_LAVF_PRIV_OPT -#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (deprecated, will do nothing once av_demuxer_open() is removed) -#endif -#if FF_API_LAVF_KEEPSIDE_FLAG -#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Deprecated, does nothing. -#endif -#define AVFMT_FLAG_FAST_SEEK 0x80000 ///< Enable fast, but inaccurate seeks for some formats -#define AVFMT_FLAG_SHORTEST 0x100000 ///< Stop muxing when the shortest stream stops. -#define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Add bitstream filters as requested by the muxer - - /** - * Maximum size of the data read from input for determining - * the input container format. - * Demuxing only, set by the caller before avformat_open_input(). - */ - int64_t probesize; - - /** - * Maximum duration (in AV_TIME_BASE units) of the data read - * from input in avformat_find_stream_info(). - * Demuxing only, set by the caller before avformat_find_stream_info(). - * Can be set to 0 to let avformat choose using a heuristic. - */ - int64_t max_analyze_duration; - - const uint8_t *key; - int keylen; - - unsigned int nb_programs; - AVProgram **programs; - - /** - * Forced video codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID video_codec_id; - - /** - * Forced audio codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID audio_codec_id; - - /** - * Forced subtitle codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID subtitle_codec_id; - - /** - * Maximum amount of memory in bytes to use for the index of each stream. - * If the index exceeds this size, entries will be discarded as - * needed to maintain a smaller size. This can lead to slower or less - * accurate seeking (depends on demuxer). - * Demuxers for which a full in-memory index is mandatory will ignore - * this. - * - muxing: unused - * - demuxing: set by user - */ - unsigned int max_index_size; - - /** - * Maximum amount of memory in bytes to use for buffering frames - * obtained from realtime capture devices. - */ - unsigned int max_picture_buffer; - - /** - * Number of chapters in AVChapter array. - * When muxing, chapters are normally written in the file header, - * so nb_chapters should normally be initialized before write_header - * is called. Some muxers (e.g. mov and mkv) can also write chapters - * in the trailer. To write chapters in the trailer, nb_chapters - * must be zero when write_header is called and non-zero when - * write_trailer is called. - * - muxing: set by user - * - demuxing: set by libavformat - */ - unsigned int nb_chapters; - AVChapter **chapters; - - /** - * Metadata that applies to the whole file. - * - * - demuxing: set by libavformat in avformat_open_input() - * - muxing: may be set by the caller before avformat_write_header() - * - * Freed by libavformat in avformat_free_context(). - */ - AVDictionary *metadata; - - /** - * Start time of the stream in real world time, in microseconds - * since the Unix epoch (00:00 1st January 1970). That is, pts=0 in the - * stream was captured at this real world time. - * - muxing: Set by the caller before avformat_write_header(). If set to - * either 0 or AV_NOPTS_VALUE, then the current wall-time will - * be used. - * - demuxing: Set by libavformat. AV_NOPTS_VALUE if unknown. Note that - * the value may become known after some number of frames - * have been received. - */ - int64_t start_time_realtime; - - /** - * The number of frames used for determining the framerate in - * avformat_find_stream_info(). - * Demuxing only, set by the caller before avformat_find_stream_info(). - */ - int fps_probe_size; - - /** - * Error recognition; higher values will detect more errors but may - * misdetect some more or less valid parts as errors. - * Demuxing only, set by the caller before avformat_open_input(). - */ - int error_recognition; - - /** - * Custom interrupt callbacks for the I/O layer. - * - * demuxing: set by the user before avformat_open_input(). - * muxing: set by the user before avformat_write_header() - * (mainly useful for AVFMT_NOFILE formats). The callback - * should also be passed to avio_open2() if it's used to - * open the file. - */ - AVIOInterruptCB interrupt_callback; - - /** - * Flags to enable debugging. - */ - int debug; -#define FF_FDEBUG_TS 0x0001 - - /** - * Maximum buffering duration for interleaving. - * - * To ensure all the streams are interleaved correctly, - * av_interleaved_write_frame() will wait until it has at least one packet - * for each stream before actually writing any packets to the output file. - * When some streams are "sparse" (i.e. there are large gaps between - * successive packets), this can result in excessive buffering. - * - * This field specifies the maximum difference between the timestamps of the - * first and the last packet in the muxing queue, above which libavformat - * will output a packet regardless of whether it has queued a packet for all - * the streams. - * - * Muxing only, set by the caller before avformat_write_header(). - */ - int64_t max_interleave_delta; - - /** - * Allow non-standard and experimental extension - * @see AVCodecContext.strict_std_compliance - */ - int strict_std_compliance; - - /** - * Flags indicating events happening on the file, a combination of - * AVFMT_EVENT_FLAG_*. - * - * - demuxing: may be set by the demuxer in avformat_open_input(), - * avformat_find_stream_info() and av_read_frame(). Flags must be cleared - * by the user once the event has been handled. - * - muxing: may be set by the user after avformat_write_header() to - * indicate a user-triggered event. The muxer will clear the flags for - * events it has handled in av_[interleaved]_write_frame(). - */ - int event_flags; -/** - * - demuxing: the demuxer read new metadata from the file and updated - * AVFormatContext.metadata accordingly - * - muxing: the user updated AVFormatContext.metadata and wishes the muxer to - * write it into the file - */ -#define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001 - - /** - * Maximum number of packets to read while waiting for the first timestamp. - * Decoding only. - */ - int max_ts_probe; - - /** - * Avoid negative timestamps during muxing. - * Any value of the AVFMT_AVOID_NEG_TS_* constants. - * Note, this only works when using av_interleaved_write_frame. (interleave_packet_per_dts is in use) - * - muxing: Set by user - * - demuxing: unused - */ - int avoid_negative_ts; -#define AVFMT_AVOID_NEG_TS_AUTO -1 ///< Enabled when required by target format -#define AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE 1 ///< Shift timestamps so they are non negative -#define AVFMT_AVOID_NEG_TS_MAKE_ZERO 2 ///< Shift timestamps so that they start at 0 - - /** - * Transport stream id. - * This will be moved into demuxer private options. Thus no API/ABI compatibility - */ - int ts_id; - - /** - * Audio preload in microseconds. - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int audio_preload; - - /** - * Max chunk time in microseconds. - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int max_chunk_duration; - - /** - * Max chunk size in bytes - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int max_chunk_size; - - /** - * forces the use of wallclock timestamps as pts/dts of packets - * This has undefined results in the presence of B frames. - * - encoding: unused - * - decoding: Set by user - */ - int use_wallclock_as_timestamps; - - /** - * avio flags, used to force AVIO_FLAG_DIRECT. - * - encoding: unused - * - decoding: Set by user - */ - int avio_flags; - - /** - * The duration field can be estimated through various ways, and this field can be used - * to know how the duration was estimated. - * - encoding: unused - * - decoding: Read by user - */ - enum AVDurationEstimationMethod duration_estimation_method; - - /** - * Skip initial bytes when opening stream - * - encoding: unused - * - decoding: Set by user - */ - int64_t skip_initial_bytes; - - /** - * Correct single timestamp overflows - * - encoding: unused - * - decoding: Set by user - */ - unsigned int correct_ts_overflow; - - /** - * Force seeking to any (also non key) frames. - * - encoding: unused - * - decoding: Set by user - */ - int seek2any; - - /** - * Flush the I/O context after each packet. - * - encoding: Set by user - * - decoding: unused - */ - int flush_packets; - - /** - * format probing score. - * The maximal score is AVPROBE_SCORE_MAX, its set when the demuxer probes - * the format. - * - encoding: unused - * - decoding: set by avformat, read by user - */ - int probe_score; - - /** - * number of bytes to read maximally to identify format. - * - encoding: unused - * - decoding: set by user - */ - int format_probesize; - - /** - * ',' separated list of allowed decoders. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *codec_whitelist; - - /** - * ',' separated list of allowed demuxers. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *format_whitelist; - - /** - * An opaque field for libavformat internal usage. - * Must not be accessed in any way by callers. - */ - AVFormatInternal *internal; - - /** - * IO repositioned flag. - * This is set by avformat when the underlaying IO context read pointer - * is repositioned, for example when doing byte based seeking. - * Demuxers can use the flag to detect such changes. - */ - int io_repositioned; - - /** - * Forced video codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *video_codec; - - /** - * Forced audio codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *audio_codec; - - /** - * Forced subtitle codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *subtitle_codec; - - /** - * Forced data codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - AVCodec *data_codec; - - /** - * Number of bytes to be written as padding in a metadata header. - * Demuxing: Unused. - * Muxing: Set by user via av_format_set_metadata_header_padding. - */ - int metadata_header_padding; - - /** - * User data. - * This is a place for some private data of the user. - */ - void *opaque; - - /** - * Callback used by devices to communicate with application. - */ - av_format_control_message control_message_cb; - - /** - * Output timestamp offset, in microseconds. - * Muxing: set by user - */ - int64_t output_ts_offset; - - /** - * dump format separator. - * can be ", " or "\n " or anything else - * - muxing: Set by user. - * - demuxing: Set by user. - */ - uint8_t *dump_separator; - - /** - * Forced Data codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID data_codec_id; - -#if FF_API_OLD_OPEN_CALLBACKS - /** - * Called to open further IO contexts when needed for demuxing. - * - * This can be set by the user application to perform security checks on - * the URLs before opening them. - * The function should behave like avio_open2(), AVFormatContext is provided - * as contextual information and to reach AVFormatContext.opaque. - * - * If NULL then some simple checks are used together with avio_open2(). - * - * Must not be accessed directly from outside avformat. - * @See av_format_set_open_cb() - * - * Demuxing: Set by user. - * - * @deprecated Use io_open and io_close. - */ - attribute_deprecated - int (*open_cb)(struct AVFormatContext *s, AVIOContext **p, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options); -#endif - - /** - * ',' separated list of allowed protocols. - * - encoding: unused - * - decoding: set by user - */ - char *protocol_whitelist; - - /** - * A callback for opening new IO streams. - * - * Whenever a muxer or a demuxer needs to open an IO stream (typically from - * avformat_open_input() for demuxers, but for certain formats can happen at - * other times as well), it will call this callback to obtain an IO context. - * - * @param s the format context - * @param pb on success, the newly opened IO context should be returned here - * @param url the url to open - * @param flags a combination of AVIO_FLAG_* - * @param options a dictionary of additional options, with the same - * semantics as in avio_open2() - * @return 0 on success, a negative AVERROR code on failure - * - * @note Certain muxers and demuxers do nesting, i.e. they open one or more - * additional internal format contexts. Thus the AVFormatContext pointer - * passed to this callback may be different from the one facing the caller. - * It will, however, have the same 'opaque' field. - */ - int (*io_open)(struct AVFormatContext *s, AVIOContext **pb, const char *url, - int flags, AVDictionary **options); - - /** - * A callback for closing the streams opened with AVFormatContext.io_open(). - */ - void (*io_close)(struct AVFormatContext *s, AVIOContext *pb); - - /** - * ',' separated list of disallowed protocols. - * - encoding: unused - * - decoding: set by user - */ - char *protocol_blacklist; - - /** - * The maximum number of streams. - * - encoding: unused - * - decoding: set by user - */ - int max_streams; - - /** - * Skip duration calcuation in estimate_timings_from_pts. - * - encoding: unused - * - decoding: set by user - */ - int skip_estimate_duration_from_pts; - - /** - * Maximum number of packets that can be probed - * - encoding: unused - * - decoding: set by user - */ - int max_probe_packets; -} AVFormatContext; - -#if FF_API_FORMAT_GET_SET -/** - * Accessors for some AVFormatContext fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -int av_format_get_probe_score(const AVFormatContext *s); -attribute_deprecated -AVCodec * av_format_get_video_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_video_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -AVCodec * av_format_get_audio_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_audio_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -AVCodec * av_format_get_subtitle_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_subtitle_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -AVCodec * av_format_get_data_codec(const AVFormatContext *s); -attribute_deprecated -void av_format_set_data_codec(AVFormatContext *s, AVCodec *c); -attribute_deprecated -int av_format_get_metadata_header_padding(const AVFormatContext *s); -attribute_deprecated -void av_format_set_metadata_header_padding(AVFormatContext *s, int c); -attribute_deprecated -void * av_format_get_opaque(const AVFormatContext *s); -attribute_deprecated -void av_format_set_opaque(AVFormatContext *s, void *opaque); -attribute_deprecated -av_format_control_message av_format_get_control_message_cb(const AVFormatContext *s); -attribute_deprecated -void av_format_set_control_message_cb(AVFormatContext *s, av_format_control_message callback); -#if FF_API_OLD_OPEN_CALLBACKS -attribute_deprecated AVOpenCallback av_format_get_open_cb(const AVFormatContext *s); -attribute_deprecated void av_format_set_open_cb(AVFormatContext *s, AVOpenCallback callback); -#endif -#endif - -/** - * This function will cause global side data to be injected in the next packet - * of each stream as well as after any subsequent seek. - */ -void av_format_inject_global_side_data(AVFormatContext *s); - -/** - * Returns the method used to set ctx->duration. - * - * @return AVFMT_DURATION_FROM_PTS, AVFMT_DURATION_FROM_STREAM, or AVFMT_DURATION_FROM_BITRATE. - */ -enum AVDurationEstimationMethod av_fmt_ctx_get_duration_estimation_method(const AVFormatContext* ctx); - -/** - * @defgroup lavf_core Core functions - * @ingroup libavf - * - * Functions for querying libavformat capabilities, allocating core structures, - * etc. - * @{ - */ - -/** - * Return the LIBAVFORMAT_VERSION_INT constant. - */ -unsigned avformat_version(void); - -/** - * Return the libavformat build-time configuration. - */ -const char *avformat_configuration(void); - -/** - * Return the libavformat license. - */ -const char *avformat_license(void); - -#if FF_API_NEXT -/** - * Initialize libavformat and register all the muxers, demuxers and - * protocols. If you do not call this function, then you can select - * exactly which formats you want to support. - * - * @see av_register_input_format() - * @see av_register_output_format() - */ -attribute_deprecated -void av_register_all(void); - -attribute_deprecated -void av_register_input_format(AVInputFormat *format); -attribute_deprecated -void av_register_output_format(AVOutputFormat *format); -#endif - -/** - * Do global initialization of network libraries. This is optional, - * and not recommended anymore. - * - * This functions only exists to work around thread-safety issues - * with older GnuTLS or OpenSSL libraries. If libavformat is linked - * to newer versions of those libraries, or if you do not use them, - * calling this function is unnecessary. Otherwise, you need to call - * this function before any other threads using them are started. - * - * This function will be deprecated once support for older GnuTLS and - * OpenSSL libraries is removed, and this function has no purpose - * anymore. - */ -int avformat_network_init(void); - -/** - * Undo the initialization done by avformat_network_init. Call it only - * once for each time you called avformat_network_init. - */ -int avformat_network_deinit(void); - -#if FF_API_NEXT -/** - * If f is NULL, returns the first registered input format, - * if f is non-NULL, returns the next registered input format after f - * or NULL if f is the last one. - */ -attribute_deprecated -AVInputFormat *av_iformat_next(const AVInputFormat *f); - -/** - * If f is NULL, returns the first registered output format, - * if f is non-NULL, returns the next registered output format after f - * or NULL if f is the last one. - */ -attribute_deprecated -AVOutputFormat *av_oformat_next(const AVOutputFormat *f); -#endif - -/** - * Iterate over all registered muxers. - * - * @param opaque a pointer where libavformat will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered muxer or NULL when the iteration is - * finished - */ -const AVOutputFormat *av_muxer_iterate(void **opaque); - -/** - * Iterate over all registered demuxers. - * - * @param opaque a pointer where libavformat will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered demuxer or NULL when the iteration is - * finished - */ -const AVInputFormat *av_demuxer_iterate(void **opaque); - -/** - * Allocate an AVFormatContext. - * avformat_free_context() can be used to free the context and everything - * allocated by the framework within it. - */ -AVFormatContext *avformat_alloc_context(void); - -/** - * Free an AVFormatContext and all its streams. - * @param s context to free - */ -void avformat_free_context(AVFormatContext *s); - -/** - * Get the AVClass for AVFormatContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avformat_get_class(void); - -/** - * Add a new stream to a media file. - * - * When demuxing, it is called by the demuxer in read_header(). If the - * flag AVFMTCTX_NOHEADER is set in s.ctx_flags, then it may also - * be called in read_packet(). - * - * When muxing, should be called by the user before avformat_write_header(). - * - * User is required to call avcodec_close() and avformat_free_context() to - * clean up the allocation by avformat_new_stream(). - * - * @param s media file handle - * @param c If non-NULL, the AVCodecContext corresponding to the new stream - * will be initialized to use this codec. This is needed for e.g. codec-specific - * defaults to be set, so codec should be provided if it is known. - * - * @return newly created stream or NULL on error. - */ -AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c); - -/** - * Wrap an existing array as stream side data. - * - * @param st stream - * @param type side information type - * @param data the side data array. It must be allocated with the av_malloc() - * family of functions. The ownership of the data is transferred to - * st. - * @param size side information size - * @return zero on success, a negative AVERROR code on failure. On failure, - * the stream is unchanged and the data remains owned by the caller. - */ -int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type, - uint8_t *data, size_t size); - -/** - * Allocate new information from stream. - * - * @param stream stream - * @param type desired side information type - * @param size side information size - * @return pointer to fresh allocated data or NULL otherwise - */ -uint8_t *av_stream_new_side_data(AVStream *stream, -#if FF_API_BUFFER_SIZE_T - enum AVPacketSideDataType type, int size); -#else - enum AVPacketSideDataType type, size_t size); -#endif -/** - * Get side information from stream. - * - * @param stream stream - * @param type desired side information type - * @param size If supplied, *size will be set to the size of the side data - * or to zero if the desired side data is not present. - * @return pointer to data if present or NULL otherwise - */ -uint8_t *av_stream_get_side_data(const AVStream *stream, -#if FF_API_BUFFER_SIZE_T - enum AVPacketSideDataType type, int *size); -#else - enum AVPacketSideDataType type, size_t *size); -#endif - -AVProgram *av_new_program(AVFormatContext *s, int id); - -/** - * @} - */ - - -/** - * Allocate an AVFormatContext for an output format. - * avformat_free_context() can be used to free the context and - * everything allocated by the framework within it. - * - * @param *ctx is set to the created format context, or to NULL in - * case of failure - * @param oformat format to use for allocating the context, if NULL - * format_name and filename are used instead - * @param format_name the name of output format to use for allocating the - * context, if NULL filename is used instead - * @param filename the name of the filename to use for allocating the - * context, may be NULL - * @return >= 0 in case of success, a negative AVERROR code in case of - * failure - */ -int avformat_alloc_output_context2(AVFormatContext **ctx, ff_const59 AVOutputFormat *oformat, - const char *format_name, const char *filename); - -/** - * @addtogroup lavf_decoding - * @{ - */ - -/** - * Find AVInputFormat based on the short name of the input format. - */ -ff_const59 AVInputFormat *av_find_input_format(const char *short_name); - -/** - * Guess the file format. - * - * @param pd data to be probed - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - */ -ff_const59 AVInputFormat *av_probe_input_format(ff_const59 AVProbeData *pd, int is_opened); - -/** - * Guess the file format. - * - * @param pd data to be probed - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - * @param score_max A probe score larger that this is required to accept a - * detection, the variable is set to the actual detection - * score afterwards. - * If the score is <= AVPROBE_SCORE_MAX / 4 it is recommended - * to retry with a larger probe buffer. - */ -ff_const59 AVInputFormat *av_probe_input_format2(ff_const59 AVProbeData *pd, int is_opened, int *score_max); - -/** - * Guess the file format. - * - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - * @param score_ret The score of the best detection. - */ -ff_const59 AVInputFormat *av_probe_input_format3(ff_const59 AVProbeData *pd, int is_opened, int *score_ret); - -/** - * Probe a bytestream to determine the input format. Each time a probe returns - * with a score that is too low, the probe buffer size is increased and another - * attempt is made. When the maximum probe size is reached, the input format - * with the highest score is returned. - * - * @param pb the bytestream to probe - * @param fmt the input format is put here - * @param url the url of the stream - * @param logctx the log context - * @param offset the offset within the bytestream to probe from - * @param max_probe_size the maximum probe buffer size (zero for default) - * @return the score in case of success, a negative value corresponding to an - * the maximal score is AVPROBE_SCORE_MAX - * AVERROR code otherwise - */ -int av_probe_input_buffer2(AVIOContext *pb, ff_const59 AVInputFormat **fmt, - const char *url, void *logctx, - unsigned int offset, unsigned int max_probe_size); - -/** - * Like av_probe_input_buffer2() but returns 0 on success - */ -int av_probe_input_buffer(AVIOContext *pb, ff_const59 AVInputFormat **fmt, - const char *url, void *logctx, - unsigned int offset, unsigned int max_probe_size); - -/** - * Open an input stream and read the header. The codecs are not opened. - * The stream must be closed with avformat_close_input(). - * - * @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context). - * May be a pointer to NULL, in which case an AVFormatContext is allocated by this - * function and written into ps. - * Note that a user-supplied AVFormatContext will be freed on failure. - * @param url URL of the stream to open. - * @param fmt If non-NULL, this parameter forces a specific input format. - * Otherwise the format is autodetected. - * @param options A dictionary filled with AVFormatContext and demuxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return 0 on success, a negative AVERROR on failure. - * - * @note If you want to use custom IO, preallocate the format context and set its pb field. - */ -int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options); - -#if FF_API_DEMUXER_OPEN -/** - * @deprecated Use an AVDictionary to pass options to a demuxer. - */ -attribute_deprecated -int av_demuxer_open(AVFormatContext *ic); -#endif - -/** - * Read packets of a media file to get stream information. This - * is useful for file formats with no headers such as MPEG. This - * function also computes the real framerate in case of MPEG-2 repeat - * frame mode. - * The logical file position is not changed by this function; - * examined packets may be buffered for later processing. - * - * @param ic media file handle - * @param options If non-NULL, an ic.nb_streams long array of pointers to - * dictionaries, where i-th member contains options for - * codec corresponding to i-th stream. - * On return each dictionary will be filled with options that were not found. - * @return >=0 if OK, AVERROR_xxx on error - * - * @note this function isn't guaranteed to open all the codecs, so - * options being non-empty at return is a perfectly normal behavior. - * - * @todo Let the user decide somehow what information is needed so that - * we do not waste time getting stuff the user does not need. - */ -int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options); - -/** - * Find the programs which belong to a given stream. - * - * @param ic media file handle - * @param last the last found program, the search will start after this - * program, or from the beginning if it is NULL - * @param s stream index - * @return the next program which belongs to s, NULL if no program is found or - * the last program is not among the programs of ic. - */ -AVProgram *av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s); - -void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int idx); - -/** - * Find the "best" stream in the file. - * The best stream is determined according to various heuristics as the most - * likely to be what the user expects. - * If the decoder parameter is non-NULL, av_find_best_stream will find the - * default decoder for the stream's codec; streams for which no decoder can - * be found are ignored. - * - * @param ic media file handle - * @param type stream type: video, audio, subtitles, etc. - * @param wanted_stream_nb user-requested stream number, - * or -1 for automatic selection - * @param related_stream try to find a stream related (eg. in the same - * program) to this one, or -1 if none - * @param decoder_ret if non-NULL, returns the decoder for the - * selected stream - * @param flags flags; none are currently defined - * @return the non-negative stream number in case of success, - * AVERROR_STREAM_NOT_FOUND if no stream with the requested type - * could be found, - * AVERROR_DECODER_NOT_FOUND if streams were found but no decoder - * @note If av_find_best_stream returns successfully and decoder_ret is not - * NULL, then *decoder_ret is guaranteed to be set to a valid AVCodec. - */ -int av_find_best_stream(AVFormatContext *ic, - enum AVMediaType type, - int wanted_stream_nb, - int related_stream, - AVCodec **decoder_ret, - int flags); - -/** - * Return the next frame of a stream. - * This function returns what is stored in the file, and does not validate - * that what is there are valid frames for the decoder. It will split what is - * stored in the file into frames and return one for each call. It will not - * omit invalid data between valid frames so as to give the decoder the maximum - * information possible for decoding. - * - * On success, the returned packet is reference-counted (pkt->buf is set) and - * valid indefinitely. The packet must be freed with av_packet_unref() when - * it is no longer needed. For video, the packet contains exactly one frame. - * For audio, it contains an integer number of frames if each frame has - * a known fixed size (e.g. PCM or ADPCM data). If the audio frames have - * a variable size (e.g. MPEG audio), then it contains one frame. - * - * pkt->pts, pkt->dts and pkt->duration are always set to correct - * values in AVStream.time_base units (and guessed if the format cannot - * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format - * has B-frames, so it is better to rely on pkt->dts if you do not - * decompress the payload. - * - * @return 0 if OK, < 0 on error or end of file. On error, pkt will be blank - * (as if it came from av_packet_alloc()). - * - * @note pkt will be initialized, so it may be uninitialized, but it must not - * contain data that needs to be freed. - */ -int av_read_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Seek to the keyframe at timestamp. - * 'timestamp' in 'stream_index'. - * - * @param s media file handle - * @param stream_index If stream_index is (-1), a default - * stream is selected, and timestamp is automatically converted - * from AV_TIME_BASE units to the stream specific time_base. - * @param timestamp Timestamp in AVStream.time_base units - * or, if no stream is specified, in AV_TIME_BASE units. - * @param flags flags which select direction and seeking mode - * @return >= 0 on success - */ -int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, - int flags); - -/** - * Seek to timestamp ts. - * Seeking will be done so that the point from which all active streams - * can be presented successfully will be closest to ts and within min/max_ts. - * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. - * - * If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in bytes and - * are the file position (this may not be supported by all demuxers). - * If flags contain AVSEEK_FLAG_FRAME, then all timestamps are in frames - * in the stream with stream_index (this may not be supported by all demuxers). - * Otherwise all timestamps are in units of the stream selected by stream_index - * or if stream_index is -1, in AV_TIME_BASE units. - * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as - * keyframes (this may not be supported by all demuxers). - * If flags contain AVSEEK_FLAG_BACKWARD, it is ignored. - * - * @param s media file handle - * @param stream_index index of the stream which is used as time base reference - * @param min_ts smallest acceptable timestamp - * @param ts target timestamp - * @param max_ts largest acceptable timestamp - * @param flags flags - * @return >=0 on success, error code otherwise - * - * @note This is part of the new seek API which is still under construction. - */ -int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); - -/** - * Discard all internally buffered data. This can be useful when dealing with - * discontinuities in the byte stream. Generally works only with formats that - * can resync. This includes headerless formats like MPEG-TS/TS but should also - * work with NUT, Ogg and in a limited way AVI for example. - * - * The set of streams, the detected duration, stream parameters and codecs do - * not change when calling this function. If you want a complete reset, it's - * better to open a new AVFormatContext. - * - * This does not flush the AVIOContext (s->pb). If necessary, call - * avio_flush(s->pb) before calling this function. - * - * @param s media file handle - * @return >=0 on success, error code otherwise - */ -int avformat_flush(AVFormatContext *s); - -/** - * Start playing a network-based stream (e.g. RTSP stream) at the - * current position. - */ -int av_read_play(AVFormatContext *s); - -/** - * Pause a network-based stream (e.g. RTSP stream). - * - * Use av_read_play() to resume it. - */ -int av_read_pause(AVFormatContext *s); - -/** - * Close an opened input AVFormatContext. Free it and all its contents - * and set *s to NULL. - */ -void avformat_close_input(AVFormatContext **s); -/** - * @} - */ - -#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward -#define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes -#define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes -#define AVSEEK_FLAG_FRAME 8 ///< seeking based on frame number - -/** - * @addtogroup lavf_encoding - * @{ - */ - -#define AVSTREAM_INIT_IN_WRITE_HEADER 0 ///< stream parameters initialized in avformat_write_header -#define AVSTREAM_INIT_IN_INIT_OUTPUT 1 ///< stream parameters initialized in avformat_init_output - -/** - * Allocate the stream private data and write the stream header to - * an output media file. - * - * @param s Media file handle, must be allocated with avformat_alloc_context(). - * Its oformat field must be set to the desired output format; - * Its pb field must be set to an already opened AVIOContext. - * @param options An AVDictionary filled with AVFormatContext and muxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return AVSTREAM_INIT_IN_WRITE_HEADER on success if the codec had not already been fully initialized in avformat_init, - * AVSTREAM_INIT_IN_INIT_OUTPUT on success if the codec had already been fully initialized in avformat_init, - * negative AVERROR on failure. - * - * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_init_output. - */ -av_warn_unused_result -int avformat_write_header(AVFormatContext *s, AVDictionary **options); - -/** - * Allocate the stream private data and initialize the codec, but do not write the header. - * May optionally be used before avformat_write_header to initialize stream parameters - * before actually writing the header. - * If using this function, do not pass the same options to avformat_write_header. - * - * @param s Media file handle, must be allocated with avformat_alloc_context(). - * Its oformat field must be set to the desired output format; - * Its pb field must be set to an already opened AVIOContext. - * @param options An AVDictionary filled with AVFormatContext and muxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return AVSTREAM_INIT_IN_WRITE_HEADER on success if the codec requires avformat_write_header to fully initialize, - * AVSTREAM_INIT_IN_INIT_OUTPUT on success if the codec has been fully initialized, - * negative AVERROR on failure. - * - * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_write_header. - */ -av_warn_unused_result -int avformat_init_output(AVFormatContext *s, AVDictionary **options); - -/** - * Write a packet to an output media file. - * - * This function passes the packet directly to the muxer, without any buffering - * or reordering. The caller is responsible for correctly interleaving the - * packets if the format requires it. Callers that want libavformat to handle - * the interleaving should call av_interleaved_write_frame() instead of this - * function. - * - * @param s media file handle - * @param pkt The packet containing the data to be written. Note that unlike - * av_interleaved_write_frame(), this function does not take - * ownership of the packet passed to it (though some muxers may make - * an internal reference to the input packet). - *
- * This parameter can be NULL (at any time, not just at the end), in - * order to immediately flush data buffered within the muxer, for - * muxers that buffer up data internally before writing it to the - * output. - *
- * Packet's @ref AVPacket.stream_index "stream_index" field must be - * set to the index of the corresponding stream in @ref - * AVFormatContext.streams "s->streams". - *
- * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") - * must be set to correct values in the stream's timebase (unless the - * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then - * they can be set to AV_NOPTS_VALUE). - * The dts for subsequent packets passed to this function must be strictly - * increasing when compared in their respective timebases (unless the - * output format is flagged with the AVFMT_TS_NONSTRICT, then they - * merely have to be nondecreasing). @ref AVPacket.duration - * "duration") should also be set if known. - * @return < 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush - * - * @see av_interleaved_write_frame() - */ -int av_write_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Write a packet to an output media file ensuring correct interleaving. - * - * This function will buffer the packets internally as needed to make sure the - * packets in the output file are properly interleaved in the order of - * increasing dts. Callers doing their own interleaving should call - * av_write_frame() instead of this function. - * - * Using this function instead of av_write_frame() can give muxers advance - * knowledge of future packets, improving e.g. the behaviour of the mp4 - * muxer for VFR content in fragmenting mode. - * - * @param s media file handle - * @param pkt The packet containing the data to be written. - *
- * If the packet is reference-counted, this function will take - * ownership of this reference and unreference it later when it sees - * fit. - * The caller must not access the data through this reference after - * this function returns. If the packet is not reference-counted, - * libavformat will make a copy. - *
- * This parameter can be NULL (at any time, not just at the end), to - * flush the interleaving queues. - *
- * Packet's @ref AVPacket.stream_index "stream_index" field must be - * set to the index of the corresponding stream in @ref - * AVFormatContext.streams "s->streams". - *
- * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") - * must be set to correct values in the stream's timebase (unless the - * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then - * they can be set to AV_NOPTS_VALUE). - * The dts for subsequent packets in one stream must be strictly - * increasing (unless the output format is flagged with the - * AVFMT_TS_NONSTRICT, then they merely have to be nondecreasing). - * @ref AVPacket.duration "duration") should also be set if known. - * - * @return 0 on success, a negative AVERROR on error. Libavformat will always - * take care of freeing the packet, even if this function fails. - * - * @see av_write_frame(), AVFormatContext.max_interleave_delta - */ -int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Write an uncoded frame to an output media file. - * - * The frame must be correctly interleaved according to the container - * specification; if not, av_interleaved_write_uncoded_frame() must be used. - * - * See av_interleaved_write_uncoded_frame() for details. - */ -int av_write_uncoded_frame(AVFormatContext *s, int stream_index, - AVFrame *frame); - -/** - * Write an uncoded frame to an output media file. - * - * If the muxer supports it, this function makes it possible to write an AVFrame - * structure directly, without encoding it into a packet. - * It is mostly useful for devices and similar special muxers that use raw - * video or PCM data and will not serialize it into a byte stream. - * - * To test whether it is possible to use it with a given muxer and stream, - * use av_write_uncoded_frame_query(). - * - * The caller gives up ownership of the frame and must not access it - * afterwards. - * - * @return >=0 for success, a negative code on error - */ -int av_interleaved_write_uncoded_frame(AVFormatContext *s, int stream_index, - AVFrame *frame); - -/** - * Test whether a muxer supports uncoded frame. - * - * @return >=0 if an uncoded frame can be written to that muxer and stream, - * <0 if not - */ -int av_write_uncoded_frame_query(AVFormatContext *s, int stream_index); - -/** - * Write the stream trailer to an output media file and free the - * file private data. - * - * May only be called after a successful call to avformat_write_header. - * - * @param s media file handle - * @return 0 if OK, AVERROR_xxx on error - */ -int av_write_trailer(AVFormatContext *s); - -/** - * Return the output format in the list of registered output formats - * which best matches the provided parameters, or return NULL if - * there is no match. - * - * @param short_name if non-NULL checks if short_name matches with the - * names of the registered formats - * @param filename if non-NULL checks if filename terminates with the - * extensions of the registered formats - * @param mime_type if non-NULL checks if mime_type matches with the - * MIME type of the registered formats - */ -ff_const59 AVOutputFormat *av_guess_format(const char *short_name, - const char *filename, - const char *mime_type); - -/** - * Guess the codec ID based upon muxer and filename. - */ -enum AVCodecID av_guess_codec(ff_const59 AVOutputFormat *fmt, const char *short_name, - const char *filename, const char *mime_type, - enum AVMediaType type); - -/** - * Get timing information for the data currently output. - * The exact meaning of "currently output" depends on the format. - * It is mostly relevant for devices that have an internal buffer and/or - * work in real time. - * @param s media file handle - * @param stream stream in the media file - * @param[out] dts DTS of the last packet output for the stream, in stream - * time_base units - * @param[out] wall absolute time when that packet whas output, - * in microsecond - * @return 0 if OK, AVERROR(ENOSYS) if the format does not support it - * Note: some formats or devices may not allow to measure dts and wall - * atomically. - */ -int av_get_output_timestamp(struct AVFormatContext *s, int stream, - int64_t *dts, int64_t *wall); - - -/** - * @} - */ - - -/** - * @defgroup lavf_misc Utility functions - * @ingroup libavf - * @{ - * - * Miscellaneous utility functions related to both muxing and demuxing - * (or neither). - */ - -/** - * Send a nice hexadecimal dump of a buffer to the specified file stream. - * - * @param f The file stream pointer where the dump should be sent to. - * @param buf buffer - * @param size buffer size - * - * @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2 - */ -void av_hex_dump(FILE *f, const uint8_t *buf, int size); - -/** - * Send a nice hexadecimal dump of a buffer to the log. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message, lower values signifying - * higher importance. - * @param buf buffer - * @param size buffer size - * - * @see av_hex_dump, av_pkt_dump2, av_pkt_dump_log2 - */ -void av_hex_dump_log(void *avcl, int level, const uint8_t *buf, int size); - -/** - * Send a nice dump of a packet to the specified file stream. - * - * @param f The file stream pointer where the dump should be sent to. - * @param pkt packet to dump - * @param dump_payload True if the payload must be displayed, too. - * @param st AVStream that the packet belongs to - */ -void av_pkt_dump2(FILE *f, const AVPacket *pkt, int dump_payload, const AVStream *st); - - -/** - * Send a nice dump of a packet to the log. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message, lower values signifying - * higher importance. - * @param pkt packet to dump - * @param dump_payload True if the payload must be displayed, too. - * @param st AVStream that the packet belongs to - */ -void av_pkt_dump_log2(void *avcl, int level, const AVPacket *pkt, int dump_payload, - const AVStream *st); - -/** - * Get the AVCodecID for the given codec tag tag. - * If no codec id is found returns AV_CODEC_ID_NONE. - * - * @param tags list of supported codec_id-codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param tag codec tag to match to a codec ID - */ -enum AVCodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag); - -/** - * Get the codec tag for the given codec id id. - * If no codec tag is found returns 0. - * - * @param tags list of supported codec_id-codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param id codec ID to match to a codec tag - */ -unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum AVCodecID id); - -/** - * Get the codec tag for the given codec id. - * - * @param tags list of supported codec_id - codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param id codec id that should be searched for in the list - * @param tag A pointer to the found tag - * @return 0 if id was not found in tags, > 0 if it was found - */ -int av_codec_get_tag2(const struct AVCodecTag * const *tags, enum AVCodecID id, - unsigned int *tag); - -int av_find_default_stream_index(AVFormatContext *s); - -/** - * Get the index for a specific timestamp. - * - * @param st stream that the timestamp belongs to - * @param timestamp timestamp to retrieve the index for - * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond - * to the timestamp which is <= the requested one, if backward - * is 0, then it will be >= - * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise - * @return < 0 if no such timestamp could be found - */ -int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags); - -/** - * Add an index entry into a sorted list. Update the entry if the list - * already contains it. - * - * @param timestamp timestamp in the time base of the given stream - */ -int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, - int size, int distance, int flags); - - -/** - * Split a URL string into components. - * - * The pointers to buffers for storing individual components may be null, - * in order to ignore that component. Buffers for components not found are - * set to empty strings. If the port is not found, it is set to a negative - * value. - * - * @param proto the buffer for the protocol - * @param proto_size the size of the proto buffer - * @param authorization the buffer for the authorization - * @param authorization_size the size of the authorization buffer - * @param hostname the buffer for the host name - * @param hostname_size the size of the hostname buffer - * @param port_ptr a pointer to store the port number in - * @param path the buffer for the path - * @param path_size the size of the path buffer - * @param url the URL to split - */ -void av_url_split(char *proto, int proto_size, - char *authorization, int authorization_size, - char *hostname, int hostname_size, - int *port_ptr, - char *path, int path_size, - const char *url); - - -/** - * Print detailed information about the input or output format, such as - * duration, bitrate, streams, container, programs, metadata, side data, - * codec and time base. - * - * @param ic the context to analyze - * @param index index of the stream to dump information about - * @param url the URL to print, such as source or destination file - * @param is_output Select whether the specified context is an input(0) or output(1) - */ -void av_dump_format(AVFormatContext *ic, - int index, - const char *url, - int is_output); - - -#define AV_FRAME_FILENAME_FLAGS_MULTIPLE 1 ///< Allow multiple %d - -/** - * Return in 'buf' the path with '%d' replaced by a number. - * - * Also handles the '%0nd' format where 'n' is the total number - * of digits and '%%'. - * - * @param buf destination buffer - * @param buf_size destination buffer size - * @param path numbered sequence string - * @param number frame number - * @param flags AV_FRAME_FILENAME_FLAGS_* - * @return 0 if OK, -1 on format error - */ -int av_get_frame_filename2(char *buf, int buf_size, - const char *path, int number, int flags); - -int av_get_frame_filename(char *buf, int buf_size, - const char *path, int number); - -/** - * Check whether filename actually is a numbered sequence generator. - * - * @param filename possible numbered sequence string - * @return 1 if a valid numbered sequence string, 0 otherwise - */ -int av_filename_number_test(const char *filename); - -/** - * Generate an SDP for an RTP session. - * - * Note, this overwrites the id values of AVStreams in the muxer contexts - * for getting unique dynamic payload types. - * - * @param ac array of AVFormatContexts describing the RTP streams. If the - * array is composed by only one context, such context can contain - * multiple AVStreams (one AVStream per RTP stream). Otherwise, - * all the contexts in the array (an AVCodecContext per RTP stream) - * must contain only one AVStream. - * @param n_files number of AVCodecContexts contained in ac - * @param buf buffer where the SDP will be stored (must be allocated by - * the caller) - * @param size the size of the buffer - * @return 0 if OK, AVERROR_xxx on error - */ -int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size); - -/** - * Return a positive value if the given filename has one of the given - * extensions, 0 otherwise. - * - * @param filename file name to check against the given extensions - * @param extensions a comma-separated list of filename extensions - */ -int av_match_ext(const char *filename, const char *extensions); - -/** - * Test if the given container can store a codec. - * - * @param ofmt container to check for compatibility - * @param codec_id codec to potentially store in container - * @param std_compliance standards compliance level, one of FF_COMPLIANCE_* - * - * @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot. - * A negative number if this information is not available. - */ -int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id, - int std_compliance); - -/** - * @defgroup riff_fourcc RIFF FourCCs - * @{ - * Get the tables mapping RIFF FourCCs to libavcodec AVCodecIDs. 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 - */ -/** - * @return the table mapping RIFF FourCCs for video to libavcodec AVCodecID. - */ -const struct AVCodecTag *avformat_get_riff_video_tags(void); -/** - * @return the table mapping RIFF FourCCs for audio to AVCodecID. - */ -const struct AVCodecTag *avformat_get_riff_audio_tags(void); -/** - * @return the table mapping MOV FourCCs for video to libavcodec AVCodecID. - */ -const struct AVCodecTag *avformat_get_mov_video_tags(void); -/** - * @return the table mapping MOV FourCCs for audio to AVCodecID. - */ -const struct AVCodecTag *avformat_get_mov_audio_tags(void); - -/** - * @} - */ - -/** - * Guess the sample aspect ratio of a frame, based on both the stream and the - * frame aspect ratio. - * - * Since the frame aspect ratio is set by the codec but the stream aspect ratio - * is set by the demuxer, these two may not be equal. This function tries to - * return the value that you should use if you would like to display the frame. - * - * Basic logic is to use the stream aspect ratio if it is set to something sane - * otherwise use the frame aspect ratio. This way a container setting, which is - * usually easy to modify can override the coded value in the frames. - * - * @param format the format context which the stream is part of - * @param stream the stream which the frame is part of - * @param frame the frame with the aspect ratio to be determined - * @return the guessed (valid) sample_aspect_ratio, 0/1 if no idea - */ -AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame); - -/** - * Guess the frame rate, based on both the container and codec information. - * - * @param ctx the format context which the stream is part of - * @param stream the stream which the frame is part of - * @param frame the frame for which the frame rate should be determined, may be NULL - * @return the guessed (valid) frame rate, 0/1 if no idea - */ -AVRational av_guess_frame_rate(AVFormatContext *ctx, AVStream *stream, AVFrame *frame); - -/** - * Check if the stream st contained in s is matched by the stream specifier - * spec. - * - * See the "stream specifiers" chapter in the documentation for the syntax - * of spec. - * - * @return >0 if st is matched by spec; - * 0 if st is not matched by spec; - * AVERROR code if spec is invalid - * - * @note A stream specifier can match several streams in the format. - */ -int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, - const char *spec); - -int avformat_queue_attached_pictures(AVFormatContext *s); - -#if FF_API_OLD_BSF -/** - * Apply a list of bitstream filters to a packet. - * - * @param codec AVCodecContext, usually from an AVStream - * @param pkt the packet to apply filters to. If, on success, the returned - * packet has size == 0 and side_data_elems == 0, it indicates that - * the packet should be dropped - * @param bsfc a NULL-terminated list of filters to apply - * @return >=0 on success; - * AVERROR code on failure - */ -attribute_deprecated -int av_apply_bitstream_filters(AVCodecContext *codec, AVPacket *pkt, - AVBitStreamFilterContext *bsfc); -#endif - -enum AVTimebaseSource { - AVFMT_TBCF_AUTO = -1, - AVFMT_TBCF_DECODER, - AVFMT_TBCF_DEMUXER, -#if FF_API_R_FRAME_RATE - AVFMT_TBCF_R_FRAMERATE, -#endif -}; - -/** - * Transfer internal timing information from one stream to another. - * - * This function is useful when doing stream copy. - * - * @param ofmt target output format for ost - * @param ost output stream which needs timings copy and adjustments - * @param ist reference input stream to copy timings from - * @param copy_tb define from where the stream codec timebase needs to be imported - */ -int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt, - AVStream *ost, const AVStream *ist, - enum AVTimebaseSource copy_tb); - -/** - * Get the internal codec timebase from a stream. - * - * @param st input stream to extract the timebase from - */ -AVRational av_stream_get_codec_timebase(const AVStream *st); - -/** - * @} - */ - -#endif /* AVFORMAT_AVFORMAT_H */ diff --git a/prebuilts/x86_64/include/libavformat/avio.h b/prebuilts/x86_64/include/libavformat/avio.h deleted file mode 100644 index d022820..0000000 --- a/prebuilts/x86_64/include/libavformat/avio.h +++ /dev/null @@ -1,888 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -#ifndef AVFORMAT_AVIO_H -#define AVFORMAT_AVIO_H - -/** - * @file - * @ingroup lavf_io - * Buffered I/O operations - */ - -#include - -#include "libavutil/common.h" -#include "libavutil/dict.h" -#include "libavutil/log.h" - -#include "libavformat/version.h" - -/** - * Seeking works like for a local file. - */ -#define AVIO_SEEKABLE_NORMAL (1 << 0) - -/** - * Seeking by timestamp with avio_seek_time() is possible. - */ -#define AVIO_SEEKABLE_TIME (1 << 1) - -/** - * Callback for checking whether to abort blocking functions. - * AVERROR_EXIT is returned in this case by the interrupted - * function. During blocking operations, callback is called with - * opaque as parameter. If the callback returns 1, the - * blocking operation will be aborted. - * - * No members can be added to this struct without a major bump, if - * new elements have been added after this struct in AVFormatContext - * or AVIOContext. - */ -typedef struct AVIOInterruptCB { - int (*callback)(void*); - void *opaque; -} AVIOInterruptCB; - -/** - * Directory entry types. - */ -enum AVIODirEntryType { - AVIO_ENTRY_UNKNOWN, - AVIO_ENTRY_BLOCK_DEVICE, - AVIO_ENTRY_CHARACTER_DEVICE, - AVIO_ENTRY_DIRECTORY, - AVIO_ENTRY_NAMED_PIPE, - AVIO_ENTRY_SYMBOLIC_LINK, - AVIO_ENTRY_SOCKET, - AVIO_ENTRY_FILE, - AVIO_ENTRY_SERVER, - AVIO_ENTRY_SHARE, - AVIO_ENTRY_WORKGROUP, -}; - -/** - * Describes single entry of the directory. - * - * Only name and type fields are guaranteed be set. - * Rest of fields are protocol or/and platform dependent and might be unknown. - */ -typedef struct AVIODirEntry { - char *name; /**< Filename */ - int type; /**< Type of the entry */ - int utf8; /**< Set to 1 when name is encoded with UTF-8, 0 otherwise. - Name can be encoded with UTF-8 even though 0 is set. */ - int64_t size; /**< File size in bytes, -1 if unknown. */ - int64_t modification_timestamp; /**< Time of last modification in microseconds since unix - epoch, -1 if unknown. */ - int64_t access_timestamp; /**< Time of last access in microseconds since unix epoch, - -1 if unknown. */ - int64_t status_change_timestamp; /**< Time of last status change in microseconds since unix - epoch, -1 if unknown. */ - int64_t user_id; /**< User ID of owner, -1 if unknown. */ - int64_t group_id; /**< Group ID of owner, -1 if unknown. */ - int64_t filemode; /**< Unix file mode, -1 if unknown. */ -} AVIODirEntry; - -typedef struct AVIODirContext { - struct URLContext *url_context; -} AVIODirContext; - -/** - * Different data types that can be returned via the AVIO - * write_data_type callback. - */ -enum AVIODataMarkerType { - /** - * Header data; this needs to be present for the stream to be decodeable. - */ - AVIO_DATA_MARKER_HEADER, - /** - * A point in the output bytestream where a decoder can start decoding - * (i.e. a keyframe). A demuxer/decoder given the data flagged with - * AVIO_DATA_MARKER_HEADER, followed by any AVIO_DATA_MARKER_SYNC_POINT, - * should give decodeable results. - */ - AVIO_DATA_MARKER_SYNC_POINT, - /** - * A point in the output bytestream where a demuxer can start parsing - * (for non self synchronizing bytestream formats). That is, any - * non-keyframe packet start point. - */ - AVIO_DATA_MARKER_BOUNDARY_POINT, - /** - * This is any, unlabelled data. It can either be a muxer not marking - * any positions at all, it can be an actual boundary/sync point - * that the muxer chooses not to mark, or a later part of a packet/fragment - * that is cut into multiple write callbacks due to limited IO buffer size. - */ - AVIO_DATA_MARKER_UNKNOWN, - /** - * Trailer data, which doesn't contain actual content, but only for - * finalizing the output file. - */ - AVIO_DATA_MARKER_TRAILER, - /** - * A point in the output bytestream where the underlying AVIOContext might - * flush the buffer depending on latency or buffering requirements. Typically - * means the end of a packet. - */ - AVIO_DATA_MARKER_FLUSH_POINT, -}; - -/** - * Bytestream IO Context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVIOContext) must not be used outside libav*. - * - * @note None of the function pointers in AVIOContext should be called - * directly, they should only be set by the client application - * when implementing custom I/O. Normally these are set to the - * function pointers specified in avio_alloc_context() - */ -typedef struct AVIOContext { - /** - * A class for private options. - * - * If this AVIOContext is created by avio_open2(), av_class is set and - * passes the options down to protocols. - * - * If this AVIOContext is manually allocated, then av_class may be set by - * the caller. - * - * warning -- this field can be NULL, be sure to not pass this AVIOContext - * to any av_opt_* functions in that case. - */ - const AVClass *av_class; - - /* - * The following shows the relationship between buffer, buf_ptr, - * buf_ptr_max, buf_end, buf_size, and pos, when reading and when writing - * (since AVIOContext is used for both): - * - ********************************************************************************** - * READING - ********************************************************************************** - * - * | buffer_size | - * |---------------------------------------| - * | | - * - * buffer buf_ptr buf_end - * +---------------+-----------------------+ - * |/ / / / / / / /|/ / / / / / /| | - * read buffer: |/ / consumed / | to be read /| | - * |/ / / / / / / /|/ / / / / / /| | - * +---------------+-----------------------+ - * - * pos - * +-------------------------------------------+-----------------+ - * input file: | | | - * +-------------------------------------------+-----------------+ - * - * - ********************************************************************************** - * WRITING - ********************************************************************************** - * - * | buffer_size | - * |--------------------------------------| - * | | - * - * buf_ptr_max - * buffer (buf_ptr) buf_end - * +-----------------------+--------------+ - * |/ / / / / / / / / / / /| | - * write buffer: | / / to be flushed / / | | - * |/ / / / / / / / / / / /| | - * +-----------------------+--------------+ - * buf_ptr can be in this - * due to a backward seek - * - * pos - * +-------------+----------------------------------------------+ - * output file: | | | - * +-------------+----------------------------------------------+ - * - */ - unsigned char *buffer; /**< Start of the buffer. */ - int buffer_size; /**< Maximum buffer size */ - unsigned char *buf_ptr; /**< Current position in the buffer */ - unsigned char *buf_end; /**< End of the data, may be less than - buffer+buffer_size if the read function returned - less data than requested, e.g. for streams where - no more data has been received yet. */ - void *opaque; /**< A private pointer, passed to the read/write/seek/... - functions. */ - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size); - int (*write_packet)(void *opaque, uint8_t *buf, int buf_size); - int64_t (*seek)(void *opaque, int64_t offset, int whence); - int64_t pos; /**< position in the file of the current buffer */ - int eof_reached; /**< true if was unable to read due to error or eof */ - int write_flag; /**< true if open for writing */ - int max_packet_size; - unsigned long checksum; - unsigned char *checksum_ptr; - unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size); - int error; /**< contains the error code or 0 if no error happened */ - /** - * Pause or resume playback for network streaming protocols - e.g. MMS. - */ - int (*read_pause)(void *opaque, int pause); - /** - * Seek to a given timestamp in stream with the specified stream_index. - * Needed for some network streaming protocols which don't support seeking - * to byte position. - */ - int64_t (*read_seek)(void *opaque, int stream_index, - int64_t timestamp, int flags); - /** - * A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. - */ - int seekable; - - /** - * max filesize, used to limit allocations - * This field is internal to libavformat and access from outside is not allowed. - */ - int64_t maxsize; - - /** - * avio_read and avio_write should if possible be satisfied directly - * instead of going through a buffer, and avio_seek will always - * call the underlying seek function directly. - */ - int direct; - - /** - * Bytes read statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int64_t bytes_read; - - /** - * seek statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int seek_count; - - /** - * writeout statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int writeout_count; - - /** - * Original buffer size - * used internally after probing and ensure seekback to reset the buffer size - * This field is internal to libavformat and access from outside is not allowed. - */ - int orig_buffer_size; - - /** - * Threshold to favor readahead over seek. - * This is current internal only, do not use from outside. - */ - int short_seek_threshold; - - /** - * ',' separated list of allowed protocols. - */ - const char *protocol_whitelist; - - /** - * ',' separated list of disallowed protocols. - */ - const char *protocol_blacklist; - - /** - * A callback that is used instead of write_packet. - */ - int (*write_data_type)(void *opaque, uint8_t *buf, int buf_size, - enum AVIODataMarkerType type, int64_t time); - /** - * If set, don't call write_data_type separately for AVIO_DATA_MARKER_BOUNDARY_POINT, - * but ignore them and treat them as AVIO_DATA_MARKER_UNKNOWN (to avoid needlessly - * small chunks of data returned from the callback). - */ - int ignore_boundary_point; - - /** - * Internal, not meant to be used from outside of AVIOContext. - */ - enum AVIODataMarkerType current_type; - int64_t last_time; - - /** - * A callback that is used instead of short_seek_threshold. - * This is current internal only, do not use from outside. - */ - int (*short_seek_get)(void *opaque); - - int64_t written; - - /** - * Maximum reached position before a backward seek in the write buffer, - * used keeping track of already written data for a later flush. - */ - unsigned char *buf_ptr_max; - - /** - * Try to buffer at least this amount of data before flushing it - */ - int min_packet_size; -} AVIOContext; - -/** - * Return the name of the protocol that will handle the passed URL. - * - * NULL is returned if no protocol could be found for the given URL. - * - * @return Name of the protocol or NULL. - */ -const char *avio_find_protocol_name(const char *url); - -/** - * Return AVIO_FLAG_* access flags corresponding to the access permissions - * of the resource in url, or a negative value corresponding to an - * AVERROR code in case of failure. The returned access flags are - * masked by the value in flags. - * - * @note This function is intrinsically unsafe, in the sense that the - * checked resource may change its existence or permission status from - * one call to another. Thus you should not trust the returned value, - * unless you are sure that no other processes are accessing the - * checked resource. - */ -int avio_check(const char *url, int flags); - -/** - * Move or rename a resource. - * - * @note url_src and url_dst should share the same protocol and authority. - * - * @param url_src url to resource to be moved - * @param url_dst new url to resource if the operation succeeded - * @return >=0 on success or negative on error. - */ -int avpriv_io_move(const char *url_src, const char *url_dst); - -/** - * Delete a resource. - * - * @param url resource to be deleted. - * @return >=0 on success or negative on error. - */ -int avpriv_io_delete(const char *url); - -/** - * Open directory for reading. - * - * @param s directory read context. Pointer to a NULL pointer must be passed. - * @param url directory to be listed. - * @param options A dictionary filled with protocol-private options. On return - * this parameter will be destroyed and replaced with a dictionary - * containing options that were not found. May be NULL. - * @return >=0 on success or negative on error. - */ -int avio_open_dir(AVIODirContext **s, const char *url, AVDictionary **options); - -/** - * Get next directory entry. - * - * Returned entry must be freed with avio_free_directory_entry(). In particular - * it may outlive AVIODirContext. - * - * @param s directory read context. - * @param[out] next next entry or NULL when no more entries. - * @return >=0 on success or negative on error. End of list is not considered an - * error. - */ -int avio_read_dir(AVIODirContext *s, AVIODirEntry **next); - -/** - * Close directory. - * - * @note Entries created using avio_read_dir() are not deleted and must be - * freeded with avio_free_directory_entry(). - * - * @param s directory read context. - * @return >=0 on success or negative on error. - */ -int avio_close_dir(AVIODirContext **s); - -/** - * Free entry allocated by avio_read_dir(). - * - * @param entry entry to be freed. - */ -void avio_free_directory_entry(AVIODirEntry **entry); - -/** - * Allocate and initialize an AVIOContext for buffered I/O. It must be later - * freed with avio_context_free(). - * - * @param buffer Memory block for input/output operations via AVIOContext. - * The buffer must be allocated with av_malloc() and friends. - * It may be freed and replaced with a new buffer by libavformat. - * AVIOContext.buffer holds the buffer currently in use, - * which must be later freed with av_free(). - * @param buffer_size The buffer size is very important for performance. - * For protocols with fixed blocksize it should be set to this blocksize. - * For others a typical size is a cache page, e.g. 4kb. - * @param write_flag Set to 1 if the buffer should be writable, 0 otherwise. - * @param opaque An opaque pointer to user-specific data. - * @param read_packet A function for refilling the buffer, may be NULL. - * For stream protocols, must never return 0 but rather - * a proper AVERROR code. - * @param write_packet A function for writing the buffer contents, may be NULL. - * The function may not change the input buffers content. - * @param seek A function for seeking to specified byte position, may be NULL. - * - * @return Allocated AVIOContext or NULL on failure. - */ -AVIOContext *avio_alloc_context( - unsigned char *buffer, - int buffer_size, - int write_flag, - void *opaque, - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), - int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), - int64_t (*seek)(void *opaque, int64_t offset, int whence)); - -/** - * Free the supplied IO context and everything associated with it. - * - * @param s Double pointer to the IO context. This function will write NULL - * into s. - */ -void avio_context_free(AVIOContext **s); - -void avio_w8(AVIOContext *s, int b); -void avio_write(AVIOContext *s, const unsigned char *buf, int size); -void avio_wl64(AVIOContext *s, uint64_t val); -void avio_wb64(AVIOContext *s, uint64_t val); -void avio_wl32(AVIOContext *s, unsigned int val); -void avio_wb32(AVIOContext *s, unsigned int val); -void avio_wl24(AVIOContext *s, unsigned int val); -void avio_wb24(AVIOContext *s, unsigned int val); -void avio_wl16(AVIOContext *s, unsigned int val); -void avio_wb16(AVIOContext *s, unsigned int val); - -/** - * Write a NULL-terminated string. - * @return number of bytes written. - */ -int avio_put_str(AVIOContext *s, const char *str); - -/** - * Convert an UTF-8 string to UTF-16LE and write it. - * @param s the AVIOContext - * @param str NULL-terminated UTF-8 string - * - * @return number of bytes written. - */ -int avio_put_str16le(AVIOContext *s, const char *str); - -/** - * Convert an UTF-8 string to UTF-16BE and write it. - * @param s the AVIOContext - * @param str NULL-terminated UTF-8 string - * - * @return number of bytes written. - */ -int avio_put_str16be(AVIOContext *s, const char *str); - -/** - * Mark the written bytestream as a specific type. - * - * Zero-length ranges are omitted from the output. - * - * @param time the stream time the current bytestream pos corresponds to - * (in AV_TIME_BASE units), or AV_NOPTS_VALUE if unknown or not - * applicable - * @param type the kind of data written starting at the current pos - */ -void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type); - -/** - * ORing this as the "whence" parameter to a seek function causes it to - * return the filesize without seeking anywhere. Supporting this is optional. - * If it is not supported then the seek function will return <0. - */ -#define AVSEEK_SIZE 0x10000 - -/** - * Passing this flag as the "whence" parameter to a seek function causes it to - * seek by any means (like reopening and linear reading) or other normally unreasonable - * means that can be extremely slow. - * This may be ignored by the seek code. - */ -#define AVSEEK_FORCE 0x20000 - -/** - * fseek() equivalent for AVIOContext. - * @return new position or AVERROR. - */ -int64_t avio_seek(AVIOContext *s, int64_t offset, int whence); - -/** - * Skip given number of bytes forward - * @return new position or AVERROR. - */ -int64_t avio_skip(AVIOContext *s, int64_t offset); - -/** - * ftell() equivalent for AVIOContext. - * @return position or AVERROR. - */ -static av_always_inline int64_t avio_tell(AVIOContext *s) -{ - return avio_seek(s, 0, SEEK_CUR); -} - -/** - * Get the filesize. - * @return filesize or AVERROR - */ -int64_t avio_size(AVIOContext *s); - -/** - * Similar to feof() but also returns nonzero on read errors. - * @return non zero if and only if at end of file or a read error happened when reading. - */ -int avio_feof(AVIOContext *s); - -/** - * Writes a formatted string to the context. - * @return number of bytes written, < 0 on error. - */ -int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3); - -/** - * Write a NULL terminated array of strings to the context. - * Usually you don't need to use this function directly but its macro wrapper, - * avio_print. - */ -void avio_print_string_array(AVIOContext *s, const char *strings[]); - -/** - * Write strings (const char *) to the context. - * This is a convenience macro around avio_print_string_array and it - * automatically creates the string array from the variable argument list. - * For simple string concatenations this function is more performant than using - * avio_printf since it does not need a temporary buffer. - */ -#define avio_print(s, ...) \ - avio_print_string_array(s, (const char*[]){__VA_ARGS__, NULL}) - -/** - * Force flushing of buffered data. - * - * For write streams, force the buffered data to be immediately written to the output, - * without to wait to fill the internal buffer. - * - * For read streams, discard all currently buffered data, and advance the - * reported file position to that of the underlying stream. This does not - * read new data, and does not perform any seeks. - */ -void avio_flush(AVIOContext *s); - -/** - * Read size bytes from AVIOContext into buf. - * @return number of bytes read or AVERROR - */ -int avio_read(AVIOContext *s, unsigned char *buf, int size); - -/** - * Read size bytes from AVIOContext into buf. Unlike avio_read(), this is allowed - * to read fewer bytes than requested. The missing bytes can be read in the next - * call. This always tries to read at least 1 byte. - * Useful to reduce latency in certain cases. - * @return number of bytes read or AVERROR - */ -int avio_read_partial(AVIOContext *s, unsigned char *buf, int size); - -/** - * @name Functions for reading from AVIOContext - * @{ - * - * @note return 0 if EOF, so you cannot use it if EOF handling is - * necessary - */ -int avio_r8 (AVIOContext *s); -unsigned int avio_rl16(AVIOContext *s); -unsigned int avio_rl24(AVIOContext *s); -unsigned int avio_rl32(AVIOContext *s); -uint64_t avio_rl64(AVIOContext *s); -unsigned int avio_rb16(AVIOContext *s); -unsigned int avio_rb24(AVIOContext *s); -unsigned int avio_rb32(AVIOContext *s); -uint64_t avio_rb64(AVIOContext *s); -/** - * @} - */ - -/** - * Read a string from pb into buf. The reading will terminate when either - * a NULL character was encountered, maxlen bytes have been read, or nothing - * more can be read from pb. The result is guaranteed to be NULL-terminated, it - * will be truncated if buf is too small. - * Note that the string is not interpreted or validated in any way, it - * might get truncated in the middle of a sequence for multi-byte encodings. - * - * @return number of bytes read (is always <= maxlen). - * If reading ends on EOF or error, the return value will be one more than - * bytes actually read. - */ -int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen); - -/** - * Read a UTF-16 string from pb and convert it to UTF-8. - * The reading will terminate when either a null or invalid character was - * encountered or maxlen bytes have been read. - * @return number of bytes read (is always <= maxlen) - */ -int avio_get_str16le(AVIOContext *pb, int maxlen, char *buf, int buflen); -int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen); - - -/** - * @name URL open modes - * The flags argument to avio_open must be one of the following - * constants, optionally ORed with other flags. - * @{ - */ -#define AVIO_FLAG_READ 1 /**< read-only */ -#define AVIO_FLAG_WRITE 2 /**< write-only */ -#define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) /**< read-write pseudo flag */ -/** - * @} - */ - -/** - * Use non-blocking mode. - * If this flag is set, operations on the context will return - * AVERROR(EAGAIN) if they can not be performed immediately. - * If this flag is not set, operations on the context will never return - * AVERROR(EAGAIN). - * Note that this flag does not affect the opening/connecting of the - * context. Connecting a protocol will always block if necessary (e.g. on - * network protocols) but never hang (e.g. on busy devices). - * Warning: non-blocking protocols is work-in-progress; this flag may be - * silently ignored. - */ -#define AVIO_FLAG_NONBLOCK 8 - -/** - * Use direct mode. - * avio_read and avio_write should if possible be satisfied directly - * instead of going through a buffer, and avio_seek will always - * call the underlying seek function directly. - */ -#define AVIO_FLAG_DIRECT 0x8000 - -/** - * Create and initialize a AVIOContext for accessing the - * resource indicated by url. - * @note When the resource indicated by url has been opened in - * read+write mode, the AVIOContext can be used only for writing. - * - * @param s Used to return the pointer to the created AVIOContext. - * In case of failure the pointed to value is set to NULL. - * @param url resource to access - * @param flags flags which control how the resource indicated by url - * is to be opened - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code in case of failure - */ -int avio_open(AVIOContext **s, const char *url, int flags); - -/** - * Create and initialize a AVIOContext for accessing the - * resource indicated by url. - * @note When the resource indicated by url has been opened in - * read+write mode, the AVIOContext can be used only for writing. - * - * @param s Used to return the pointer to the created AVIOContext. - * In case of failure the pointed to value is set to NULL. - * @param url resource to access - * @param flags flags which control how the resource indicated by url - * is to be opened - * @param int_cb an interrupt callback to be used at the protocols level - * @param options A dictionary filled with protocol-private options. On return - * this parameter will be destroyed and replaced with a dict containing options - * that were not found. May be NULL. - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code in case of failure - */ -int avio_open2(AVIOContext **s, const char *url, int flags, - const AVIOInterruptCB *int_cb, AVDictionary **options); - -/** - * Close the resource accessed by the AVIOContext s and free it. - * This function can only be used if s was opened by avio_open(). - * - * The internal buffer is automatically flushed before closing the - * resource. - * - * @return 0 on success, an AVERROR < 0 on error. - * @see avio_closep - */ -int avio_close(AVIOContext *s); - -/** - * Close the resource accessed by the AVIOContext *s, free it - * and set the pointer pointing to it to NULL. - * This function can only be used if s was opened by avio_open(). - * - * The internal buffer is automatically flushed before closing the - * resource. - * - * @return 0 on success, an AVERROR < 0 on error. - * @see avio_close - */ -int avio_closep(AVIOContext **s); - - -/** - * Open a write only memory stream. - * - * @param s new IO context - * @return zero if no error. - */ -int avio_open_dyn_buf(AVIOContext **s); - -/** - * Return the written size and a pointer to the buffer. - * The AVIOContext stream is left intact. - * The buffer must NOT be freed. - * No padding is added to the buffer. - * - * @param s IO context - * @param pbuffer pointer to a byte buffer - * @return the length of the byte buffer - */ -int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer); - -/** - * Return the written size and a pointer to the buffer. The buffer - * must be freed with av_free(). - * Padding of AV_INPUT_BUFFER_PADDING_SIZE is added to the buffer. - * - * @param s IO context - * @param pbuffer pointer to a byte buffer - * @return the length of the byte buffer - */ -int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer); - -/** - * Iterate through names of available protocols. - * - * @param opaque A private pointer representing current protocol. - * It must be a pointer to NULL on first iteration and will - * be updated by successive calls to avio_enum_protocols. - * @param output If set to 1, iterate over output protocols, - * otherwise over input protocols. - * - * @return A static string containing the name of current protocol or NULL - */ -const char *avio_enum_protocols(void **opaque, int output); - -/** - * Get AVClass by names of available protocols. - * - * @return A AVClass of input protocol name or NULL - */ -const AVClass *avio_protocol_get_class(const char *name); - -/** - * Pause and resume playing - only meaningful if using a network streaming - * protocol (e.g. MMS). - * - * @param h IO context from which to call the read_pause function pointer - * @param pause 1 for pause, 0 for resume - */ -int avio_pause(AVIOContext *h, int pause); - -/** - * Seek to a given timestamp relative to some component stream. - * Only meaningful if using a network streaming protocol (e.g. MMS.). - * - * @param h IO context from which to call the seek function pointers - * @param stream_index The stream index that the timestamp is relative to. - * If stream_index is (-1) the timestamp should be in AV_TIME_BASE - * units from the beginning of the presentation. - * If a stream_index >= 0 is used and the protocol does not support - * seeking based on component streams, the call will fail. - * @param timestamp timestamp in AVStream.time_base units - * or if there is no stream specified then in AV_TIME_BASE units. - * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE - * and AVSEEK_FLAG_ANY. The protocol may silently ignore - * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will - * fail if used and not supported. - * @return >= 0 on success - * @see AVInputFormat::read_seek - */ -int64_t avio_seek_time(AVIOContext *h, int stream_index, - int64_t timestamp, int flags); - -/* Avoid a warning. The header can not be included because it breaks c++. */ -struct AVBPrint; - -/** - * Read contents of h into print buffer, up to max_size bytes, or up to EOF. - * - * @return 0 for success (max_size bytes read or EOF reached), negative error - * code otherwise - */ -int avio_read_to_bprint(AVIOContext *h, struct AVBPrint *pb, size_t max_size); - -/** - * Accept and allocate a client context on a server context. - * @param s the server context - * @param c the client context, must be unallocated - * @return >= 0 on success or a negative value corresponding - * to an AVERROR on failure - */ -int avio_accept(AVIOContext *s, AVIOContext **c); - -/** - * Perform one step of the protocol handshake to accept a new client. - * This function must be called on a client returned by avio_accept() before - * using it as a read/write context. - * It is separate from avio_accept() because it may block. - * A step of the handshake is defined by places where the application may - * decide to change the proceedings. - * For example, on a protocol with a request header and a reply header, each - * one can constitute a step because the application may use the parameters - * from the request to change parameters in the reply; or each individual - * chunk of the request can constitute a step. - * If the handshake is already finished, avio_handshake() does nothing and - * returns 0 immediately. - * - * @param c the client context to perform the handshake on - * @return 0 on a complete and successful handshake - * > 0 if the handshake progressed, but is not complete - * < 0 for an AVERROR code - */ -int avio_handshake(AVIOContext *c); -#endif /* AVFORMAT_AVIO_H */ diff --git a/prebuilts/x86_64/include/libavformat/version.h b/prebuilts/x86_64/include/libavformat/version.h deleted file mode 100644 index 46dc51a..0000000 --- a/prebuilts/x86_64/include/libavformat/version.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFORMAT_VERSION_H -#define AVFORMAT_VERSION_H - -/** - * @file - * @ingroup libavf - * Libavformat version macros - */ - -#include "libavutil/version.h" - -// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) -// Also please add any ticket numbers that you believe might be affected here -#define LIBAVFORMAT_VERSION_MAJOR 58 -#define LIBAVFORMAT_VERSION_MINOR 76 -#define LIBAVFORMAT_VERSION_MICRO 100 - -#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ - LIBAVFORMAT_VERSION_MINOR, \ - LIBAVFORMAT_VERSION_MICRO) -#define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_MAJOR, \ - LIBAVFORMAT_VERSION_MINOR, \ - LIBAVFORMAT_VERSION_MICRO) -#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT - -#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - * - */ -#ifndef FF_API_COMPUTE_PKT_FIELDS2 -#define FF_API_COMPUTE_PKT_FIELDS2 (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_OPEN_CALLBACKS -#define FF_API_OLD_OPEN_CALLBACKS (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_AVCTX -#define FF_API_LAVF_AVCTX (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_HTTP_USER_AGENT -#define FF_API_HTTP_USER_AGENT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_HLS_WRAP -#define FF_API_HLS_WRAP (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_HLS_USE_LOCALTIME -#define FF_API_HLS_USE_LOCALTIME (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_KEEPSIDE_FLAG -#define FF_API_LAVF_KEEPSIDE_FLAG (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_ROTATE_API -#define FF_API_OLD_ROTATE_API (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_FORMAT_GET_SET -#define FF_API_FORMAT_GET_SET (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_AVIO_EOF_0 -#define FF_API_OLD_AVIO_EOF_0 (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_FFSERVER -#define FF_API_LAVF_FFSERVER (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_FORMAT_FILENAME -#define FF_API_FORMAT_FILENAME (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_OLD_RTSP_OPTIONS -#define FF_API_OLD_RTSP_OPTIONS (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_NEXT -#define FF_API_NEXT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_DASH_MIN_SEG_DURATION -#define FF_API_DASH_MIN_SEG_DURATION (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_MP4A_LATM -#define FF_API_LAVF_MP4A_LATM (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_AVIOFORMAT -#define FF_API_AVIOFORMAT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_DEMUXER_OPEN -#define FF_API_DEMUXER_OPEN (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_CHAPTER_ID_INT -#define FF_API_CHAPTER_ID_INT (LIBAVFORMAT_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_LAVF_PRIV_OPT -#define FF_API_LAVF_PRIV_OPT (LIBAVFORMAT_VERSION_MAJOR < 60) -#endif - - -#ifndef FF_API_R_FRAME_RATE -#define FF_API_R_FRAME_RATE 1 -#endif -#endif /* AVFORMAT_VERSION_H */ diff --git a/prebuilts/x86_64/include/libavutil/adler32.h b/prebuilts/x86_64/include/libavutil/adler32.h deleted file mode 100644 index e7a8f83..0000000 --- a/prebuilts/x86_64/include/libavutil/adler32.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * copyright (c) 2006 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_adler32 - * Public header for Adler-32 hash function implementation. - */ - -#ifndef AVUTIL_ADLER32_H -#define AVUTIL_ADLER32_H - -#include -#include -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_adler32 Adler-32 - * @ingroup lavu_hash - * Adler-32 hash function implementation. - * - * @{ - */ - -#if FF_API_CRYPTO_SIZE_T -typedef unsigned long AVAdler; -#else -typedef uint32_t AVAdler; -#endif - -/** - * Calculate the Adler32 checksum of a buffer. - * - * Passing the return value to a subsequent av_adler32_update() call - * allows the checksum of multiple buffers to be calculated as though - * they were concatenated. - * - * @param adler initial checksum value - * @param buf pointer to input buffer - * @param len size of input buffer - * @return updated checksum - */ -AVAdler av_adler32_update(AVAdler adler, const uint8_t *buf, -#if FF_API_CRYPTO_SIZE_T - unsigned int len) av_pure; -#else - size_t len) av_pure; -#endif - -/** - * @} - */ - -#endif /* AVUTIL_ADLER32_H */ diff --git a/prebuilts/x86_64/include/libavutil/aes.h b/prebuilts/x86_64/include/libavutil/aes.h deleted file mode 100644 index 09efbda..0000000 --- a/prebuilts/x86_64/include/libavutil/aes.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * copyright (c) 2007 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AES_H -#define AVUTIL_AES_H - -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_aes AES - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_aes_size; - -struct AVAES; - -/** - * Allocate an AVAES context. - */ -struct AVAES *av_aes_alloc(void); - -/** - * Initialize an AVAES context. - * @param key_bits 128, 192 or 256 - * @param decrypt 0 for encryption, 1 for decryption - */ -int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * @param count number of 16 byte blocks - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_aes_crypt(struct AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_AES_H */ diff --git a/prebuilts/x86_64/include/libavutil/aes_ctr.h b/prebuilts/x86_64/include/libavutil/aes_ctr.h deleted file mode 100644 index e4aae12..0000000 --- a/prebuilts/x86_64/include/libavutil/aes_ctr.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * AES-CTR cipher - * Copyright (c) 2015 Eran Kornblau - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AES_CTR_H -#define AVUTIL_AES_CTR_H - -#include - -#include "attributes.h" -#include "version.h" - -#define AES_CTR_KEY_SIZE (16) -#define AES_CTR_IV_SIZE (8) - -struct AVAESCTR; - -/** - * Allocate an AVAESCTR context. - */ -struct AVAESCTR *av_aes_ctr_alloc(void); - -/** - * Initialize an AVAESCTR context. - * @param key encryption key, must have a length of AES_CTR_KEY_SIZE - */ -int av_aes_ctr_init(struct AVAESCTR *a, const uint8_t *key); - -/** - * Release an AVAESCTR context. - */ -void av_aes_ctr_free(struct AVAESCTR *a); - -/** - * Process a buffer using a previously initialized context. - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param size the size of src and dst - */ -void av_aes_ctr_crypt(struct AVAESCTR *a, uint8_t *dst, const uint8_t *src, int size); - -/** - * Get the current iv - */ -const uint8_t* av_aes_ctr_get_iv(struct AVAESCTR *a); - -/** - * Generate a random iv - */ -void av_aes_ctr_set_random_iv(struct AVAESCTR *a); - -/** - * Forcefully change the 8-byte iv - */ -void av_aes_ctr_set_iv(struct AVAESCTR *a, const uint8_t* iv); - -/** - * Forcefully change the "full" 16-byte iv, including the counter - */ -void av_aes_ctr_set_full_iv(struct AVAESCTR *a, const uint8_t* iv); - -/** - * Increment the top 64 bit of the iv (performed after each frame) - */ -void av_aes_ctr_increment_iv(struct AVAESCTR *a); - -/** - * @} - */ - -#endif /* AVUTIL_AES_CTR_H */ diff --git a/prebuilts/x86_64/include/libavutil/attributes.h b/prebuilts/x86_64/include/libavutil/attributes.h deleted file mode 100644 index 5cb9fe3..0000000 --- a/prebuilts/x86_64/include/libavutil/attributes.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Macro definitions for various function/variable attributes - */ - -#ifndef AVUTIL_ATTRIBUTES_H -#define AVUTIL_ATTRIBUTES_H - -#ifdef __GNUC__ -# define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y)) -# define AV_GCC_VERSION_AT_MOST(x,y) (__GNUC__ < (x) || __GNUC__ == (x) && __GNUC_MINOR__ <= (y)) -#else -# define AV_GCC_VERSION_AT_LEAST(x,y) 0 -# define AV_GCC_VERSION_AT_MOST(x,y) 0 -#endif - -#ifdef __has_builtin -# define AV_HAS_BUILTIN(x) __has_builtin(x) -#else -# define AV_HAS_BUILTIN(x) 0 -#endif - -#ifndef av_always_inline -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_always_inline __attribute__((always_inline)) inline -#elif defined(_MSC_VER) -# define av_always_inline __forceinline -#else -# define av_always_inline inline -#endif -#endif - -#ifndef av_extern_inline -#if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__) -# define av_extern_inline extern inline -#else -# define av_extern_inline inline -#endif -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,4) -# define av_warn_unused_result __attribute__((warn_unused_result)) -#else -# define av_warn_unused_result -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_noinline __attribute__((noinline)) -#elif defined(_MSC_VER) -# define av_noinline __declspec(noinline) -#else -# define av_noinline -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) -# define av_pure __attribute__((pure)) -#else -# define av_pure -#endif - -#if AV_GCC_VERSION_AT_LEAST(2,6) || defined(__clang__) -# define av_const __attribute__((const)) -#else -# define av_const -#endif - -#if AV_GCC_VERSION_AT_LEAST(4,3) || defined(__clang__) -# define av_cold __attribute__((cold)) -#else -# define av_cold -#endif - -#if AV_GCC_VERSION_AT_LEAST(4,1) && !defined(__llvm__) -# define av_flatten __attribute__((flatten)) -#else -# define av_flatten -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define attribute_deprecated __attribute__((deprecated)) -#elif defined(_MSC_VER) -# define attribute_deprecated __declspec(deprecated) -#else -# define attribute_deprecated -#endif - -/** - * Disable warnings about deprecated features - * This is useful for sections of code kept for backward compatibility and - * scheduled for removal. - */ -#ifndef AV_NOWARN_DEPRECATED -#if AV_GCC_VERSION_AT_LEAST(4,6) -# define AV_NOWARN_DEPRECATED(code) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ - code \ - _Pragma("GCC diagnostic pop") -#elif defined(_MSC_VER) -# define AV_NOWARN_DEPRECATED(code) \ - __pragma(warning(push)) \ - __pragma(warning(disable : 4996)) \ - code; \ - __pragma(warning(pop)) -#else -# define AV_NOWARN_DEPRECATED(code) code -#endif -#endif - -#if defined(__GNUC__) || defined(__clang__) -# define av_unused __attribute__((unused)) -#else -# define av_unused -#endif - -/** - * Mark a variable as used and prevent the compiler from optimizing it - * away. This is useful for variables accessed only from inline - * assembler without the compiler being aware. - */ -#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) -# define av_used __attribute__((used)) -#else -# define av_used -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,3) || defined(__clang__) -# define av_alias __attribute__((may_alias)) -#else -# define av_alias -#endif - -#if (defined(__GNUC__) || defined(__clang__)) && !defined(__INTEL_COMPILER) -# define av_uninit(x) x=x -#else -# define av_uninit(x) x -#endif - -#if defined(__GNUC__) || defined(__clang__) -# define av_builtin_constant_p __builtin_constant_p -# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos))) -#else -# define av_builtin_constant_p(x) 0 -# define av_printf_format(fmtpos, attrpos) -#endif - -#if AV_GCC_VERSION_AT_LEAST(2,5) || defined(__clang__) -# define av_noreturn __attribute__((noreturn)) -#else -# define av_noreturn -#endif - -#endif /* AVUTIL_ATTRIBUTES_H */ diff --git a/prebuilts/x86_64/include/libavutil/audio_fifo.h b/prebuilts/x86_64/include/libavutil/audio_fifo.h deleted file mode 100644 index d8a9194..0000000 --- a/prebuilts/x86_64/include/libavutil/audio_fifo.h +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Audio FIFO - * Copyright (c) 2012 Justin Ruggles - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Audio FIFO Buffer - */ - -#ifndef AVUTIL_AUDIO_FIFO_H -#define AVUTIL_AUDIO_FIFO_H - -#include "avutil.h" -#include "fifo.h" -#include "samplefmt.h" - -/** - * @addtogroup lavu_audio - * @{ - * - * @defgroup lavu_audiofifo Audio FIFO Buffer - * @{ - */ - -/** - * Context for an Audio FIFO Buffer. - * - * - Operates at the sample level rather than the byte level. - * - Supports multiple channels with either planar or packed sample format. - * - Automatic reallocation when writing to a full buffer. - */ -typedef struct AVAudioFifo AVAudioFifo; - -/** - * Free an AVAudioFifo. - * - * @param af AVAudioFifo to free - */ -void av_audio_fifo_free(AVAudioFifo *af); - -/** - * Allocate an AVAudioFifo. - * - * @param sample_fmt sample format - * @param channels number of channels - * @param nb_samples initial allocation size, in samples - * @return newly allocated AVAudioFifo, or NULL on error - */ -AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels, - int nb_samples); - -/** - * Reallocate an AVAudioFifo. - * - * @param af AVAudioFifo to reallocate - * @param nb_samples new allocation size, in samples - * @return 0 if OK, or negative AVERROR code on failure - */ -av_warn_unused_result -int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples); - -/** - * Write data to an AVAudioFifo. - * - * The AVAudioFifo will be reallocated automatically if the available space - * is less than nb_samples. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to write to - * @param data audio data plane pointers - * @param nb_samples number of samples to write - * @return number of samples actually written, or negative AVERROR - * code on failure. If successful, the number of samples - * actually written will always be nb_samples. - */ -int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Peek data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to peek - * @return number of samples actually peek, or negative AVERROR code - * on failure. The number of samples actually peek will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Peek data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to peek - * @param offset offset from current read position - * @return number of samples actually peek, or negative AVERROR code - * on failure. The number of samples actually peek will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offset); - -/** - * Read data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to read - * @return number of samples actually read, or negative AVERROR code - * on failure. The number of samples actually read will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Drain data from an AVAudioFifo. - * - * Removes the data without reading it. - * - * @param af AVAudioFifo to drain - * @param nb_samples number of samples to drain - * @return 0 if OK, or negative AVERROR code on failure - */ -int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples); - -/** - * Reset the AVAudioFifo buffer. - * - * This empties all data in the buffer. - * - * @param af AVAudioFifo to reset - */ -void av_audio_fifo_reset(AVAudioFifo *af); - -/** - * Get the current number of samples in the AVAudioFifo available for reading. - * - * @param af the AVAudioFifo to query - * @return number of samples available for reading - */ -int av_audio_fifo_size(AVAudioFifo *af); - -/** - * Get the current number of samples in the AVAudioFifo available for writing. - * - * @param af the AVAudioFifo to query - * @return number of samples available for writing - */ -int av_audio_fifo_space(AVAudioFifo *af); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_AUDIO_FIFO_H */ diff --git a/prebuilts/x86_64/include/libavutil/avassert.h b/prebuilts/x86_64/include/libavutil/avassert.h deleted file mode 100644 index 9abeade..0000000 --- a/prebuilts/x86_64/include/libavutil/avassert.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * copyright (c) 2010 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * simple assert() macros that are a bit more flexible than ISO C assert(). - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_AVASSERT_H -#define AVUTIL_AVASSERT_H - -#include -#include "avutil.h" -#include "log.h" - -/** - * assert() equivalent, that is always enabled. - */ -#define av_assert0(cond) do { \ - if (!(cond)) { \ - av_log(NULL, AV_LOG_PANIC, "Assertion %s failed at %s:%d\n", \ - AV_STRINGIFY(cond), __FILE__, __LINE__); \ - abort(); \ - } \ -} while (0) - - -/** - * assert() equivalent, that does not lie in speed critical code. - * These asserts() thus can be enabled without fearing speed loss. - */ -#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0 -#define av_assert1(cond) av_assert0(cond) -#else -#define av_assert1(cond) ((void)0) -#endif - - -/** - * assert() equivalent, that does lie in speed critical code. - */ -#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 -#define av_assert2(cond) av_assert0(cond) -#define av_assert2_fpu() av_assert0_fpu() -#else -#define av_assert2(cond) ((void)0) -#define av_assert2_fpu() ((void)0) -#endif - -/** - * Assert that floating point operations can be executed. - * - * This will av_assert0() that the cpu is not in MMX state on X86 - */ -void av_assert0_fpu(void); - -#endif /* AVUTIL_AVASSERT_H */ diff --git a/prebuilts/x86_64/include/libavutil/avconfig.h b/prebuilts/x86_64/include/libavutil/avconfig.h deleted file mode 100644 index c289fbb..0000000 --- a/prebuilts/x86_64/include/libavutil/avconfig.h +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated by ffmpeg configure */ -#ifndef AVUTIL_AVCONFIG_H -#define AVUTIL_AVCONFIG_H -#define AV_HAVE_BIGENDIAN 0 -#define AV_HAVE_FAST_UNALIGNED 1 -#endif /* AVUTIL_AVCONFIG_H */ diff --git a/prebuilts/x86_64/include/libavutil/avstring.h b/prebuilts/x86_64/include/libavutil/avstring.h deleted file mode 100644 index fae446c..0000000 --- a/prebuilts/x86_64/include/libavutil/avstring.h +++ /dev/null @@ -1,437 +0,0 @@ -/* - * Copyright (c) 2007 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AVSTRING_H -#define AVUTIL_AVSTRING_H - -#include -#include -#include "attributes.h" -#include "version.h" - -/** - * @addtogroup lavu_string - * @{ - */ - -/** - * Return non-zero if pfx is a prefix of str. If it is, *ptr is set to - * the address of the first character in str after the prefix. - * - * @param str input string - * @param pfx prefix to test - * @param ptr updated if the prefix is matched inside str - * @return non-zero if the prefix matches, zero otherwise - */ -int av_strstart(const char *str, const char *pfx, const char **ptr); - -/** - * Return non-zero if pfx is a prefix of str independent of case. If - * it is, *ptr is set to the address of the first character in str - * after the prefix. - * - * @param str input string - * @param pfx prefix to test - * @param ptr updated if the prefix is matched inside str - * @return non-zero if the prefix matches, zero otherwise - */ -int av_stristart(const char *str, const char *pfx, const char **ptr); - -/** - * Locate the first case-independent occurrence in the string haystack - * of the string needle. A zero-length string needle is considered to - * match at the start of haystack. - * - * This function is a case-insensitive version of the standard strstr(). - * - * @param haystack string to search in - * @param needle string to search for - * @return pointer to the located match within haystack - * or a null pointer if no match - */ -char *av_stristr(const char *haystack, const char *needle); - -/** - * Locate the first occurrence of the string needle in the string haystack - * where not more than hay_length characters are searched. A zero-length - * string needle is considered to match at the start of haystack. - * - * This function is a length-limited version of the standard strstr(). - * - * @param haystack string to search in - * @param needle string to search for - * @param hay_length length of string to search in - * @return pointer to the located match within haystack - * or a null pointer if no match - */ -char *av_strnstr(const char *haystack, const char *needle, size_t hay_length); - -/** - * Copy the string src to dst, but no more than size - 1 bytes, and - * null-terminate dst. - * - * This function is the same as BSD strlcpy(). - * - * @param dst destination buffer - * @param src source string - * @param size size of destination buffer - * @return the length of src - * - * @warning since the return value is the length of src, src absolutely - * _must_ be a properly 0-terminated string, otherwise this will read beyond - * the end of the buffer and possibly crash. - */ -size_t av_strlcpy(char *dst, const char *src, size_t size); - -/** - * Append the string src to the string dst, but to a total length of - * no more than size - 1 bytes, and null-terminate dst. - * - * This function is similar to BSD strlcat(), but differs when - * size <= strlen(dst). - * - * @param dst destination buffer - * @param src source string - * @param size size of destination buffer - * @return the total length of src and dst - * - * @warning since the return value use the length of src and dst, these - * absolutely _must_ be a properly 0-terminated strings, otherwise this - * will read beyond the end of the buffer and possibly crash. - */ -size_t av_strlcat(char *dst, const char *src, size_t size); - -/** - * Append output to a string, according to a format. Never write out of - * the destination buffer, and always put a terminating 0 within - * the buffer. - * @param dst destination buffer (string to which the output is - * appended) - * @param size total size of the destination buffer - * @param fmt printf-compatible format string, specifying how the - * following parameters are used - * @return the length of the string that would have been generated - * if enough space had been available - */ -size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4); - -/** - * Get the count of continuous non zero chars starting from the beginning. - * - * @param len maximum number of characters to check in the string, that - * is the maximum value which is returned by the function - */ -static inline size_t av_strnlen(const char *s, size_t len) -{ - size_t i; - for (i = 0; i < len && s[i]; i++) - ; - return i; -} - -/** - * Print arguments following specified format into a large enough auto - * allocated buffer. It is similar to GNU asprintf(). - * @param fmt printf-compatible format string, specifying how the - * following parameters are used. - * @return the allocated string - * @note You have to free the string yourself with av_free(). - */ -char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2); - -#if FF_API_D2STR -/** - * Convert a number to an av_malloced string. - * @deprecated use av_asprintf() with "%f" or a more specific format - */ -attribute_deprecated -char *av_d2str(double d); -#endif - -/** - * Unescape the given string until a non escaped terminating char, - * and return the token corresponding to the unescaped string. - * - * The normal \ and ' escaping is supported. Leading and trailing - * whitespaces are removed, unless they are escaped with '\' or are - * enclosed between ''. - * - * @param buf the buffer to parse, buf will be updated to point to the - * terminating char - * @param term a 0-terminated list of terminating chars - * @return the malloced unescaped string, which must be av_freed by - * the user, NULL in case of allocation failure - */ -char *av_get_token(const char **buf, const char *term); - -/** - * Split the string into several tokens which can be accessed by - * successive calls to av_strtok(). - * - * A token is defined as a sequence of characters not belonging to the - * set specified in delim. - * - * On the first call to av_strtok(), s should point to the string to - * parse, and the value of saveptr is ignored. In subsequent calls, s - * should be NULL, and saveptr should be unchanged since the previous - * call. - * - * This function is similar to strtok_r() defined in POSIX.1. - * - * @param s the string to parse, may be NULL - * @param delim 0-terminated list of token delimiters, must be non-NULL - * @param saveptr user-provided pointer which points to stored - * information necessary for av_strtok() to continue scanning the same - * string. saveptr is updated to point to the next character after the - * first delimiter found, or to NULL if the string was terminated - * @return the found token, or NULL when no token is found - */ -char *av_strtok(char *s, const char *delim, char **saveptr); - -/** - * Locale-independent conversion of ASCII isdigit. - */ -static inline av_const int av_isdigit(int c) -{ - return c >= '0' && c <= '9'; -} - -/** - * Locale-independent conversion of ASCII isgraph. - */ -static inline av_const int av_isgraph(int c) -{ - return c > 32 && c < 127; -} - -/** - * Locale-independent conversion of ASCII isspace. - */ -static inline av_const int av_isspace(int c) -{ - return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || - c == '\v'; -} - -/** - * Locale-independent conversion of ASCII characters to uppercase. - */ -static inline av_const int av_toupper(int c) -{ - if (c >= 'a' && c <= 'z') - c ^= 0x20; - return c; -} - -/** - * Locale-independent conversion of ASCII characters to lowercase. - */ -static inline av_const int av_tolower(int c) -{ - if (c >= 'A' && c <= 'Z') - c ^= 0x20; - return c; -} - -/** - * Locale-independent conversion of ASCII isxdigit. - */ -static inline av_const int av_isxdigit(int c) -{ - c = av_tolower(c); - return av_isdigit(c) || (c >= 'a' && c <= 'f'); -} - -/** - * Locale-independent case-insensitive compare. - * @note This means only ASCII-range characters are case-insensitive - */ -int av_strcasecmp(const char *a, const char *b); - -/** - * Locale-independent case-insensitive compare. - * @note This means only ASCII-range characters are case-insensitive - */ -int av_strncasecmp(const char *a, const char *b, size_t n); - -/** - * Locale-independent strings replace. - * @note This means only ASCII-range characters are replace - */ -char *av_strireplace(const char *str, const char *from, const char *to); - -/** - * Thread safe basename. - * @param path the string to parse, on DOS both \ and / are considered separators. - * @return pointer to the basename substring. - * If path does not contain a slash, the function returns a copy of path. - * If path is a NULL pointer or points to an empty string, a pointer - * to a string "." is returned. - */ -const char *av_basename(const char *path); - -/** - * Thread safe dirname. - * @param path the string to parse, on DOS both \ and / are considered separators. - * @return A pointer to a string that's the parent directory of path. - * If path is a NULL pointer or points to an empty string, a pointer - * to a string "." is returned. - * @note the function may modify the contents of the path, so copies should be passed. - */ -const char *av_dirname(char *path); - -/** - * Match instances of a name in a comma-separated list of names. - * List entries are checked from the start to the end of the names list, - * the first match ends further processing. If an entry prefixed with '-' - * matches, then 0 is returned. The "ALL" list entry is considered to - * match all names. - * - * @param name Name to look for. - * @param names List of names. - * @return 1 on match, 0 otherwise. - */ -int av_match_name(const char *name, const char *names); - -/** - * Append path component to the existing path. - * Path separator '/' is placed between when needed. - * Resulting string have to be freed with av_free(). - * @param path base path - * @param component component to be appended - * @return new path or NULL on error. - */ -char *av_append_path_component(const char *path, const char *component); - -enum AVEscapeMode { - AV_ESCAPE_MODE_AUTO, ///< Use auto-selected escaping mode. - AV_ESCAPE_MODE_BACKSLASH, ///< Use backslash escaping. - AV_ESCAPE_MODE_QUOTE, ///< Use single-quote escaping. - AV_ESCAPE_MODE_XML, ///< Use XML non-markup character data escaping. -}; - -/** - * Consider spaces special and escape them even in the middle of the - * string. - * - * This is equivalent to adding the whitespace characters to the special - * characters lists, except it is guaranteed to use the exact same list - * of whitespace characters as the rest of libavutil. - */ -#define AV_ESCAPE_FLAG_WHITESPACE (1 << 0) - -/** - * Escape only specified special characters. - * Without this flag, escape also any characters that may be considered - * special by av_get_token(), such as the single quote. - */ -#define AV_ESCAPE_FLAG_STRICT (1 << 1) - -/** - * Within AV_ESCAPE_MODE_XML, additionally escape single quotes for single - * quoted attributes. - */ -#define AV_ESCAPE_FLAG_XML_SINGLE_QUOTES (1 << 2) - -/** - * Within AV_ESCAPE_MODE_XML, additionally escape double quotes for double - * quoted attributes. - */ -#define AV_ESCAPE_FLAG_XML_DOUBLE_QUOTES (1 << 3) - - -/** - * Escape string in src, and put the escaped string in an allocated - * string in *dst, which must be freed with av_free(). - * - * @param dst pointer where an allocated string is put - * @param src string to escape, must be non-NULL - * @param special_chars string containing the special characters which - * need to be escaped, can be NULL - * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. - * Any unknown value for mode will be considered equivalent to - * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without - * notice. - * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_ macros - * @return the length of the allocated string, or a negative error code in case of error - * @see av_bprint_escape() - */ -av_warn_unused_result -int av_escape(char **dst, const char *src, const char *special_chars, - enum AVEscapeMode mode, int flags); - -#define AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES 1 ///< accept codepoints over 0x10FFFF -#define AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS 2 ///< accept non-characters - 0xFFFE and 0xFFFF -#define AV_UTF8_FLAG_ACCEPT_SURROGATES 4 ///< accept UTF-16 surrogates codes -#define AV_UTF8_FLAG_EXCLUDE_XML_INVALID_CONTROL_CODES 8 ///< exclude control codes not accepted by XML - -#define AV_UTF8_FLAG_ACCEPT_ALL \ - AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES|AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS|AV_UTF8_FLAG_ACCEPT_SURROGATES - -/** - * Read and decode a single UTF-8 code point (character) from the - * buffer in *buf, and update *buf to point to the next byte to - * decode. - * - * In case of an invalid byte sequence, the pointer will be updated to - * the next byte after the invalid sequence and the function will - * return an error code. - * - * Depending on the specified flags, the function will also fail in - * case the decoded code point does not belong to a valid range. - * - * @note For speed-relevant code a carefully implemented use of - * GET_UTF8() may be preferred. - * - * @param codep pointer used to return the parsed code in case of success. - * The value in *codep is set even in case the range check fails. - * @param bufp pointer to the address the first byte of the sequence - * to decode, updated by the function to point to the - * byte next after the decoded sequence - * @param buf_end pointer to the end of the buffer, points to the next - * byte past the last in the buffer. This is used to - * avoid buffer overreads (in case of an unfinished - * UTF-8 sequence towards the end of the buffer). - * @param flags a collection of AV_UTF8_FLAG_* flags - * @return >= 0 in case a sequence was successfully read, a negative - * value in case of invalid sequence - */ -av_warn_unused_result -int av_utf8_decode(int32_t *codep, const uint8_t **bufp, const uint8_t *buf_end, - unsigned int flags); - -/** - * Check if a name is in a list. - * @returns 0 if not found, or the 1 based index where it has been found in the - * list. - */ -int av_match_list(const char *name, const char *list, char separator); - -/** - * See libc sscanf manual for more information. - * Locale-independent sscanf implementation. - */ -int av_sscanf(const char *string, const char *format, ...); - -/** - * @} - */ - -#endif /* AVUTIL_AVSTRING_H */ diff --git a/prebuilts/x86_64/include/libavutil/avutil.h b/prebuilts/x86_64/include/libavutil/avutil.h deleted file mode 100644 index 4d63315..0000000 --- a/prebuilts/x86_64/include/libavutil/avutil.h +++ /dev/null @@ -1,365 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AVUTIL_H -#define AVUTIL_AVUTIL_H - -/** - * @file - * @ingroup lavu - * Convenience header that includes @ref lavu "libavutil"'s core. - */ - -/** - * @mainpage - * - * @section ffmpeg_intro Introduction - * - * This document describes the usage of the different libraries - * provided by FFmpeg. - * - * @li @ref libavc "libavcodec" encoding/decoding library - * @li @ref lavfi "libavfilter" graph-based frame editing library - * @li @ref libavf "libavformat" I/O and muxing/demuxing library - * @li @ref lavd "libavdevice" special devices muxing/demuxing library - * @li @ref lavu "libavutil" common utility library - * @li @ref lswr "libswresample" audio resampling, format conversion and mixing - * @li @ref lpp "libpostproc" post processing library - * @li @ref libsws "libswscale" color conversion and scaling library - * - * @section ffmpeg_versioning Versioning and compatibility - * - * Each of the FFmpeg libraries contains a version.h header, which defines a - * major, minor and micro version number with the - * LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO} macros. The major version - * number is incremented with backward incompatible changes - e.g. removing - * parts of the public API, reordering public struct members, etc. The minor - * version number is incremented for backward compatible API changes or major - * new features - e.g. adding a new public function or a new decoder. The micro - * version number is incremented for smaller changes that a calling program - * might still want to check for - e.g. changing behavior in a previously - * unspecified situation. - * - * FFmpeg guarantees backward API and ABI compatibility for each library as long - * as its major version number is unchanged. This means that no public symbols - * will be removed or renamed. Types and names of the public struct members and - * values of public macros and enums will remain the same (unless they were - * explicitly declared as not part of the public API). Documented behavior will - * not change. - * - * In other words, any correct program that works with a given FFmpeg snapshot - * should work just as well without any changes with any later snapshot with the - * same major versions. This applies to both rebuilding the program against new - * FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program - * links against. - * - * However, new public symbols may be added and new members may be appended to - * public structs whose size is not part of public ABI (most public structs in - * FFmpeg). New macros and enum values may be added. Behavior in undocumented - * situations may change slightly (and be documented). All those are accompanied - * by an entry in doc/APIchanges and incrementing either the minor or micro - * version number. - */ - -/** - * @defgroup lavu libavutil - * Common code shared across all FFmpeg libraries. - * - * @note - * libavutil is designed to be modular. In most cases, in order to use the - * functions provided by one component of libavutil you must explicitly include - * the specific header containing that feature. If you are only using - * media-related components, you could simply include libavutil/avutil.h, which - * brings in most of the "core" components. - * - * @{ - * - * @defgroup lavu_crypto Crypto and Hashing - * - * @{ - * @} - * - * @defgroup lavu_math Mathematics - * @{ - * - * @} - * - * @defgroup lavu_string String Manipulation - * - * @{ - * - * @} - * - * @defgroup lavu_mem Memory Management - * - * @{ - * - * @} - * - * @defgroup lavu_data Data Structures - * @{ - * - * @} - * - * @defgroup lavu_video Video related - * - * @{ - * - * @} - * - * @defgroup lavu_audio Audio related - * - * @{ - * - * @} - * - * @defgroup lavu_error Error Codes - * - * @{ - * - * @} - * - * @defgroup lavu_log Logging Facility - * - * @{ - * - * @} - * - * @defgroup lavu_misc Other - * - * @{ - * - * @defgroup preproc_misc Preprocessor String Macros - * - * @{ - * - * @} - * - * @defgroup version_utils Library Version Macros - * - * @{ - * - * @} - */ - - -/** - * @addtogroup lavu_ver - * @{ - */ - -/** - * Return the LIBAVUTIL_VERSION_INT constant. - */ -unsigned avutil_version(void); - -/** - * Return an informative version string. This usually is the actual release - * version number or a git commit description. This string has no fixed format - * and can change any time. It should never be parsed by code. - */ -const char *av_version_info(void); - -/** - * Return the libavutil build-time configuration. - */ -const char *avutil_configuration(void); - -/** - * Return the libavutil license. - */ -const char *avutil_license(void); - -/** - * @} - */ - -/** - * @addtogroup lavu_media Media Type - * @brief Media Type - */ - -enum AVMediaType { - AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA - AVMEDIA_TYPE_VIDEO, - AVMEDIA_TYPE_AUDIO, - AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous - AVMEDIA_TYPE_SUBTITLE, - AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse - AVMEDIA_TYPE_NB -}; - -/** - * Return a string describing the media_type enum, NULL if media_type - * is unknown. - */ -const char *av_get_media_type_string(enum AVMediaType media_type); - -/** - * @defgroup lavu_const Constants - * @{ - * - * @defgroup lavu_enc Encoding specific - * - * @note those definition should move to avcodec - * @{ - */ - -#define FF_LAMBDA_SHIFT 7 -#define FF_LAMBDA_SCALE (1< - -/** - * @defgroup lavu_base64 Base64 - * @ingroup lavu_crypto - * @{ - */ - -/** - * Decode a base64-encoded string. - * - * @param out buffer for decoded data - * @param in null-terminated input string - * @param out_size size in bytes of the out buffer, must be at - * least 3/4 of the length of in, that is AV_BASE64_DECODE_SIZE(strlen(in)) - * @return number of bytes written, or a negative value in case of - * invalid input - */ -int av_base64_decode(uint8_t *out, const char *in, int out_size); - -/** - * Calculate the output size in bytes needed to decode a base64 string - * with length x to a data buffer. - */ -#define AV_BASE64_DECODE_SIZE(x) ((x) * 3LL / 4) - -/** - * Encode data to base64 and null-terminate. - * - * @param out buffer for encoded data - * @param out_size size in bytes of the out buffer (including the - * null terminator), must be at least AV_BASE64_SIZE(in_size) - * @param in input buffer containing the data to encode - * @param in_size size in bytes of the in buffer - * @return out or NULL in case of error - */ -char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size); - -/** - * Calculate the output size needed to base64-encode x bytes to a - * null-terminated string. - */ -#define AV_BASE64_SIZE(x) (((x)+2) / 3 * 4 + 1) - - /** - * @} - */ - -#endif /* AVUTIL_BASE64_H */ diff --git a/prebuilts/x86_64/include/libavutil/blowfish.h b/prebuilts/x86_64/include/libavutil/blowfish.h deleted file mode 100644 index 9e289a4..0000000 --- a/prebuilts/x86_64/include/libavutil/blowfish.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Blowfish algorithm - * Copyright (c) 2012 Samuel Pitoiset - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_BLOWFISH_H -#define AVUTIL_BLOWFISH_H - -#include - -/** - * @defgroup lavu_blowfish Blowfish - * @ingroup lavu_crypto - * @{ - */ - -#define AV_BF_ROUNDS 16 - -typedef struct AVBlowfish { - uint32_t p[AV_BF_ROUNDS + 2]; - uint32_t s[4][256]; -} AVBlowfish; - -/** - * Allocate an AVBlowfish context. - */ -AVBlowfish *av_blowfish_alloc(void); - -/** - * Initialize an AVBlowfish context. - * - * @param ctx an AVBlowfish context - * @param key a key - * @param key_len length of the key - */ -void av_blowfish_init(struct AVBlowfish *ctx, const uint8_t *key, int key_len); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVBlowfish context - * @param xl left four bytes halves of input to be encrypted - * @param xr right four bytes halves of input to be encrypted - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_blowfish_crypt_ecb(struct AVBlowfish *ctx, uint32_t *xl, uint32_t *xr, - int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVBlowfish context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_blowfish_crypt(struct AVBlowfish *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_BLOWFISH_H */ diff --git a/prebuilts/x86_64/include/libavutil/bprint.h b/prebuilts/x86_64/include/libavutil/bprint.h deleted file mode 100644 index c09b1ac..0000000 --- a/prebuilts/x86_64/include/libavutil/bprint.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (c) 2012 Nicolas George - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_BPRINT_H -#define AVUTIL_BPRINT_H - -#include - -#include "attributes.h" -#include "avstring.h" - -/** - * Define a structure with extra padding to a fixed size - * This helps ensuring binary compatibility with future versions. - */ - -#define FF_PAD_STRUCTURE(name, size, ...) \ -struct ff_pad_helper_##name { __VA_ARGS__ }; \ -typedef struct name { \ - __VA_ARGS__ \ - char reserved_padding[size - sizeof(struct ff_pad_helper_##name)]; \ -} name; - -/** - * Buffer to print data progressively - * - * The string buffer grows as necessary and is always 0-terminated. - * The content of the string is never accessed, and thus is - * encoding-agnostic and can even hold binary data. - * - * Small buffers are kept in the structure itself, and thus require no - * memory allocation at all (unless the contents of the buffer is needed - * after the structure goes out of scope). This is almost as lightweight as - * declaring a local "char buf[512]". - * - * The length of the string can go beyond the allocated size: the buffer is - * then truncated, but the functions still keep account of the actual total - * length. - * - * In other words, buf->len can be greater than buf->size and records the - * total length of what would have been to the buffer if there had been - * enough memory. - * - * Append operations do not need to be tested for failure: if a memory - * allocation fails, data stop being appended to the buffer, but the length - * is still updated. This situation can be tested with - * av_bprint_is_complete(). - * - * The size_max field determines several possible behaviours: - * - * size_max = -1 (= UINT_MAX) or any large value will let the buffer be - * reallocated as necessary, with an amortized linear cost. - * - * size_max = 0 prevents writing anything to the buffer: only the total - * length is computed. The write operations can then possibly be repeated in - * a buffer with exactly the necessary size - * (using size_init = size_max = len + 1). - * - * size_max = 1 is automatically replaced by the exact size available in the - * structure itself, thus ensuring no dynamic memory allocation. The - * internal buffer is large enough to hold a reasonable paragraph of text, - * such as the current paragraph. - */ - -FF_PAD_STRUCTURE(AVBPrint, 1024, - char *str; /**< string so far */ - unsigned len; /**< length so far */ - unsigned size; /**< allocated memory */ - unsigned size_max; /**< maximum allocated memory */ - char reserved_internal_buffer[1]; -) - -/** - * Convenience macros for special values for av_bprint_init() size_max - * parameter. - */ -#define AV_BPRINT_SIZE_UNLIMITED ((unsigned)-1) -#define AV_BPRINT_SIZE_AUTOMATIC 1 -#define AV_BPRINT_SIZE_COUNT_ONLY 0 - -/** - * Init a print buffer. - * - * @param buf buffer to init - * @param size_init initial size (including the final 0) - * @param size_max maximum size; - * 0 means do not write anything, just count the length; - * 1 is replaced by the maximum value for automatic storage; - * any large value means that the internal buffer will be - * reallocated as needed up to that limit; -1 is converted to - * UINT_MAX, the largest limit possible. - * Check also AV_BPRINT_SIZE_* macros. - */ -void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max); - -/** - * Init a print buffer using a pre-existing buffer. - * - * The buffer will not be reallocated. - * - * @param buf buffer structure to init - * @param buffer byte buffer to use for the string data - * @param size size of buffer - */ -void av_bprint_init_for_buffer(AVBPrint *buf, char *buffer, unsigned size); - -/** - * Append a formatted string to a print buffer. - */ -void av_bprintf(AVBPrint *buf, const char *fmt, ...) av_printf_format(2, 3); - -/** - * Append a formatted string to a print buffer. - */ -void av_vbprintf(AVBPrint *buf, const char *fmt, va_list vl_arg); - -/** - * Append char c n times to a print buffer. - */ -void av_bprint_chars(AVBPrint *buf, char c, unsigned n); - -/** - * Append data to a print buffer. - * - * param buf bprint buffer to use - * param data pointer to data - * param size size of data - */ -void av_bprint_append_data(AVBPrint *buf, const char *data, unsigned size); - -struct tm; -/** - * Append a formatted date and time to a print buffer. - * - * param buf bprint buffer to use - * param fmt date and time format string, see strftime() - * param tm broken-down time structure to translate - * - * @note due to poor design of the standard strftime function, it may - * produce poor results if the format string expands to a very long text and - * the bprint buffer is near the limit stated by the size_max option. - */ -void av_bprint_strftime(AVBPrint *buf, const char *fmt, const struct tm *tm); - -/** - * Allocate bytes in the buffer for external use. - * - * @param[in] buf buffer structure - * @param[in] size required size - * @param[out] mem pointer to the memory area - * @param[out] actual_size size of the memory area after allocation; - * can be larger or smaller than size - */ -void av_bprint_get_buffer(AVBPrint *buf, unsigned size, - unsigned char **mem, unsigned *actual_size); - -/** - * Reset the string to "" but keep internal allocated data. - */ -void av_bprint_clear(AVBPrint *buf); - -/** - * Test if the print buffer is complete (not truncated). - * - * It may have been truncated due to a memory allocation failure - * or the size_max limit (compare size and size_max if necessary). - */ -static inline int av_bprint_is_complete(const AVBPrint *buf) -{ - return buf->len < buf->size; -} - -/** - * Finalize a print buffer. - * - * The print buffer can no longer be used afterwards, - * but the len and size fields are still valid. - * - * @arg[out] ret_str if not NULL, used to return a permanent copy of the - * buffer contents, or NULL if memory allocation fails; - * if NULL, the buffer is discarded and freed - * @return 0 for success or error code (probably AVERROR(ENOMEM)) - */ -int av_bprint_finalize(AVBPrint *buf, char **ret_str); - -/** - * Escape the content in src and append it to dstbuf. - * - * @param dstbuf already inited destination bprint buffer - * @param src string containing the text to escape - * @param special_chars string containing the special characters which - * need to be escaped, can be NULL - * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. - * Any unknown value for mode will be considered equivalent to - * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without - * notice. - * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_* macros - */ -void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_chars, - enum AVEscapeMode mode, int flags); - -#endif /* AVUTIL_BPRINT_H */ diff --git a/prebuilts/x86_64/include/libavutil/bswap.h b/prebuilts/x86_64/include/libavutil/bswap.h deleted file mode 100644 index 91cb795..0000000 --- a/prebuilts/x86_64/include/libavutil/bswap.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * byte swapping routines - */ - -#ifndef AVUTIL_BSWAP_H -#define AVUTIL_BSWAP_H - -#include -#include "libavutil/avconfig.h" -#include "attributes.h" - -#ifdef HAVE_AV_CONFIG_H - -#include "config.h" - -#if ARCH_AARCH64 -# include "aarch64/bswap.h" -#elif ARCH_ARM -# include "arm/bswap.h" -#elif ARCH_AVR32 -# include "avr32/bswap.h" -#elif ARCH_SH4 -# include "sh4/bswap.h" -#elif ARCH_X86 -# include "x86/bswap.h" -#endif - -#endif /* HAVE_AV_CONFIG_H */ - -#define AV_BSWAP16C(x) (((x) << 8 & 0xff00) | ((x) >> 8 & 0x00ff)) -#define AV_BSWAP32C(x) (AV_BSWAP16C(x) << 16 | AV_BSWAP16C((x) >> 16)) -#define AV_BSWAP64C(x) (AV_BSWAP32C(x) << 32 | AV_BSWAP32C((x) >> 32)) - -#define AV_BSWAPC(s, x) AV_BSWAP##s##C(x) - -#ifndef av_bswap16 -static av_always_inline av_const uint16_t av_bswap16(uint16_t x) -{ - x= (x>>8) | (x<<8); - return x; -} -#endif - -#ifndef av_bswap32 -static av_always_inline av_const uint32_t av_bswap32(uint32_t x) -{ - return AV_BSWAP32C(x); -} -#endif - -#ifndef av_bswap64 -static inline uint64_t av_const av_bswap64(uint64_t x) -{ - return (uint64_t)av_bswap32(x) << 32 | av_bswap32(x >> 32); -} -#endif - -// be2ne ... big-endian to native-endian -// le2ne ... little-endian to native-endian - -#if AV_HAVE_BIGENDIAN -#define av_be2ne16(x) (x) -#define av_be2ne32(x) (x) -#define av_be2ne64(x) (x) -#define av_le2ne16(x) av_bswap16(x) -#define av_le2ne32(x) av_bswap32(x) -#define av_le2ne64(x) av_bswap64(x) -#define AV_BE2NEC(s, x) (x) -#define AV_LE2NEC(s, x) AV_BSWAPC(s, x) -#else -#define av_be2ne16(x) av_bswap16(x) -#define av_be2ne32(x) av_bswap32(x) -#define av_be2ne64(x) av_bswap64(x) -#define av_le2ne16(x) (x) -#define av_le2ne32(x) (x) -#define av_le2ne64(x) (x) -#define AV_BE2NEC(s, x) AV_BSWAPC(s, x) -#define AV_LE2NEC(s, x) (x) -#endif - -#define AV_BE2NE16C(x) AV_BE2NEC(16, x) -#define AV_BE2NE32C(x) AV_BE2NEC(32, x) -#define AV_BE2NE64C(x) AV_BE2NEC(64, x) -#define AV_LE2NE16C(x) AV_LE2NEC(16, x) -#define AV_LE2NE32C(x) AV_LE2NEC(32, x) -#define AV_LE2NE64C(x) AV_LE2NEC(64, x) - -#endif /* AVUTIL_BSWAP_H */ diff --git a/prebuilts/x86_64/include/libavutil/buffer.h b/prebuilts/x86_64/include/libavutil/buffer.h deleted file mode 100644 index 241a80e..0000000 --- a/prebuilts/x86_64/include/libavutil/buffer.h +++ /dev/null @@ -1,353 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_buffer - * refcounted data buffer API - */ - -#ifndef AVUTIL_BUFFER_H -#define AVUTIL_BUFFER_H - -#include -#include - -#include "version.h" - -/** - * @defgroup lavu_buffer AVBuffer - * @ingroup lavu_data - * - * @{ - * AVBuffer is an API for reference-counted data buffers. - * - * There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer - * represents the data buffer itself; it is opaque and not meant to be accessed - * by the caller directly, but only through AVBufferRef. However, the caller may - * e.g. compare two AVBuffer pointers to check whether two different references - * are describing the same data buffer. AVBufferRef represents a single - * reference to an AVBuffer and it is the object that may be manipulated by the - * caller directly. - * - * There are two functions provided for creating a new AVBuffer with a single - * reference -- av_buffer_alloc() to just allocate a new buffer, and - * av_buffer_create() to wrap an existing array in an AVBuffer. From an existing - * reference, additional references may be created with av_buffer_ref(). - * Use av_buffer_unref() to free a reference (this will automatically free the - * data once all the references are freed). - * - * The convention throughout this API and the rest of FFmpeg is such that the - * buffer is considered writable if there exists only one reference to it (and - * it has not been marked as read-only). The av_buffer_is_writable() function is - * provided to check whether this is true and av_buffer_make_writable() will - * automatically create a new writable buffer when necessary. - * Of course nothing prevents the calling code from violating this convention, - * however that is safe only when all the existing references are under its - * control. - * - * @note Referencing and unreferencing the buffers is thread-safe and thus - * may be done from multiple threads simultaneously without any need for - * additional locking. - * - * @note Two different references to the same buffer can point to different - * parts of the buffer (i.e. their AVBufferRef.data will not be equal). - */ - -/** - * A reference counted buffer type. It is opaque and is meant to be used through - * references (AVBufferRef). - */ -typedef struct AVBuffer AVBuffer; - -/** - * A reference to a data buffer. - * - * The size of this struct is not a part of the public ABI and it is not meant - * to be allocated directly. - */ -typedef struct AVBufferRef { - AVBuffer *buffer; - - /** - * The data buffer. It is considered writable if and only if - * this is the only reference to the buffer, in which case - * av_buffer_is_writable() returns 1. - */ - uint8_t *data; - /** - * Size of data in bytes. - */ -#if FF_API_BUFFER_SIZE_T - int size; -#else - size_t size; -#endif -} AVBufferRef; - -/** - * Allocate an AVBuffer of the given size using av_malloc(). - * - * @return an AVBufferRef of given size or NULL when out of memory - */ -#if FF_API_BUFFER_SIZE_T -AVBufferRef *av_buffer_alloc(int size); -#else -AVBufferRef *av_buffer_alloc(size_t size); -#endif - -/** - * Same as av_buffer_alloc(), except the returned buffer will be initialized - * to zero. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferRef *av_buffer_allocz(int size); -#else -AVBufferRef *av_buffer_allocz(size_t size); -#endif - -/** - * Always treat the buffer as read-only, even when it has only one - * reference. - */ -#define AV_BUFFER_FLAG_READONLY (1 << 0) - -/** - * Create an AVBuffer from an existing array. - * - * If this function is successful, data is owned by the AVBuffer. The caller may - * only access data through the returned AVBufferRef and references derived from - * it. - * If this function fails, data is left untouched. - * @param data data array - * @param size size of data in bytes - * @param free a callback for freeing this buffer's data - * @param opaque parameter to be got for processing or passed to free - * @param flags a combination of AV_BUFFER_FLAG_* - * - * @return an AVBufferRef referring to data on success, NULL on failure. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferRef *av_buffer_create(uint8_t *data, int size, -#else -AVBufferRef *av_buffer_create(uint8_t *data, size_t size, -#endif - void (*free)(void *opaque, uint8_t *data), - void *opaque, int flags); - -/** - * Default free callback, which calls av_free() on the buffer data. - * This function is meant to be passed to av_buffer_create(), not called - * directly. - */ -void av_buffer_default_free(void *opaque, uint8_t *data); - -/** - * Create a new reference to an AVBuffer. - * - * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on - * failure. - */ -AVBufferRef *av_buffer_ref(AVBufferRef *buf); - -/** - * Free a given reference and automatically free the buffer if there are no more - * references to it. - * - * @param buf the reference to be freed. The pointer is set to NULL on return. - */ -void av_buffer_unref(AVBufferRef **buf); - -/** - * @return 1 if the caller may write to the data referred to by buf (which is - * true if and only if buf is the only reference to the underlying AVBuffer). - * Return 0 otherwise. - * A positive answer is valid until av_buffer_ref() is called on buf. - */ -int av_buffer_is_writable(const AVBufferRef *buf); - -/** - * @return the opaque parameter set by av_buffer_create. - */ -void *av_buffer_get_opaque(const AVBufferRef *buf); - -int av_buffer_get_ref_count(const AVBufferRef *buf); - -/** - * Create a writable reference from a given buffer reference, avoiding data copy - * if possible. - * - * @param buf buffer reference to make writable. On success, buf is either left - * untouched, or it is unreferenced and a new writable AVBufferRef is - * written in its place. On failure, buf is left untouched. - * @return 0 on success, a negative AVERROR on failure. - */ -int av_buffer_make_writable(AVBufferRef **buf); - -/** - * Reallocate a given buffer. - * - * @param buf a buffer reference to reallocate. On success, buf will be - * unreferenced and a new reference with the required size will be - * written in its place. On failure buf will be left untouched. *buf - * may be NULL, then a new buffer is allocated. - * @param size required new buffer size. - * @return 0 on success, a negative AVERROR on failure. - * - * @note the buffer is actually reallocated with av_realloc() only if it was - * initially allocated through av_buffer_realloc(NULL) and there is only one - * reference to it (i.e. the one passed to this function). In all other cases - * a new buffer is allocated and the data is copied. - */ -#if FF_API_BUFFER_SIZE_T -int av_buffer_realloc(AVBufferRef **buf, int size); -#else -int av_buffer_realloc(AVBufferRef **buf, size_t size); -#endif - -/** - * Ensure dst refers to the same data as src. - * - * When *dst is already equivalent to src, do nothing. Otherwise unreference dst - * and replace it with a new reference to src. - * - * @param dst Pointer to either a valid buffer reference or NULL. On success, - * this will point to a buffer reference equivalent to src. On - * failure, dst will be left untouched. - * @param src A buffer reference to replace dst with. May be NULL, then this - * function is equivalent to av_buffer_unref(dst). - * @return 0 on success - * AVERROR(ENOMEM) on memory allocation failure. - */ -int av_buffer_replace(AVBufferRef **dst, AVBufferRef *src); - -/** - * @} - */ - -/** - * @defgroup lavu_bufferpool AVBufferPool - * @ingroup lavu_data - * - * @{ - * AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers. - * - * Frequently allocating and freeing large buffers may be slow. AVBufferPool is - * meant to solve this in cases when the caller needs a set of buffers of the - * same size (the most obvious use case being buffers for raw video or audio - * frames). - * - * At the beginning, the user must call av_buffer_pool_init() to create the - * buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to - * get a reference to a new buffer, similar to av_buffer_alloc(). This new - * reference works in all aspects the same way as the one created by - * av_buffer_alloc(). However, when the last reference to this buffer is - * unreferenced, it is returned to the pool instead of being freed and will be - * reused for subsequent av_buffer_pool_get() calls. - * - * When the caller is done with the pool and no longer needs to allocate any new - * buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable. - * Once all the buffers are released, it will automatically be freed. - * - * Allocating and releasing buffers with this API is thread-safe as long as - * either the default alloc callback is used, or the user-supplied one is - * thread-safe. - */ - -/** - * The buffer pool. This structure is opaque and not meant to be accessed - * directly. It is allocated with av_buffer_pool_init() and freed with - * av_buffer_pool_uninit(). - */ -typedef struct AVBufferPool AVBufferPool; - -/** - * Allocate and initialize a buffer pool. - * - * @param size size of each buffer in this pool - * @param alloc a function that will be used to allocate new buffers when the - * pool is empty. May be NULL, then the default allocator will be used - * (av_buffer_alloc()). - * @return newly created buffer pool on success, NULL on error. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)); -#else -AVBufferPool *av_buffer_pool_init(size_t size, AVBufferRef* (*alloc)(size_t size)); -#endif - -/** - * Allocate and initialize a buffer pool with a more complex allocator. - * - * @param size size of each buffer in this pool - * @param opaque arbitrary user data used by the allocator - * @param alloc a function that will be used to allocate new buffers when the - * pool is empty. May be NULL, then the default allocator will be - * used (av_buffer_alloc()). - * @param pool_free a function that will be called immediately before the pool - * is freed. I.e. after av_buffer_pool_uninit() is called - * by the caller and all the frames are returned to the pool - * and freed. It is intended to uninitialize the user opaque - * data. May be NULL. - * @return newly created buffer pool on success, NULL on error. - */ -#if FF_API_BUFFER_SIZE_T -AVBufferPool *av_buffer_pool_init2(int size, void *opaque, - AVBufferRef* (*alloc)(void *opaque, int size), -#else -AVBufferPool *av_buffer_pool_init2(size_t size, void *opaque, - AVBufferRef* (*alloc)(void *opaque, size_t size), -#endif - void (*pool_free)(void *opaque)); - -/** - * Mark the pool as being available for freeing. It will actually be freed only - * once all the allocated buffers associated with the pool are released. Thus it - * is safe to call this function while some of the allocated buffers are still - * in use. - * - * @param pool pointer to the pool to be freed. It will be set to NULL. - */ -void av_buffer_pool_uninit(AVBufferPool **pool); - -/** - * Allocate a new AVBuffer, reusing an old buffer from the pool when available. - * This function may be called simultaneously from multiple threads. - * - * @return a reference to the new buffer on success, NULL on error. - */ -AVBufferRef *av_buffer_pool_get(AVBufferPool *pool); - -/** - * Query the original opaque parameter of an allocated buffer in the pool. - * - * @param ref a buffer reference to a buffer returned by av_buffer_pool_get. - * @return the opaque parameter set by the buffer allocator function of the - * buffer pool. - * - * @note the opaque parameter of ref is used by the buffer pool implementation, - * therefore you have to use this function to access the original opaque - * parameter of an allocated buffer. - */ -void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref); - -/** - * @} - */ - -#endif /* AVUTIL_BUFFER_H */ diff --git a/prebuilts/x86_64/include/libavutil/camellia.h b/prebuilts/x86_64/include/libavutil/camellia.h deleted file mode 100644 index e674c9b..0000000 --- a/prebuilts/x86_64/include/libavutil/camellia.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * An implementation of the CAMELLIA algorithm as mentioned in RFC3713 - * Copyright (c) 2014 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CAMELLIA_H -#define AVUTIL_CAMELLIA_H - -#include - - -/** - * @file - * @brief Public header for libavutil CAMELLIA algorithm - * @defgroup lavu_camellia CAMELLIA - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_camellia_size; - -struct AVCAMELLIA; - -/** - * Allocate an AVCAMELLIA context - * To free the struct: av_free(ptr) - */ -struct AVCAMELLIA *av_camellia_alloc(void); - -/** - * Initialize an AVCAMELLIA context. - * - * @param ctx an AVCAMELLIA context - * @param key a key of 16, 24, 32 bytes used for encryption/decryption - * @param key_bits number of keybits: possible are 128, 192, 256 - */ -int av_camellia_init(struct AVCAMELLIA *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVCAMELLIA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 16 byte blocks - * @paran iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_camellia_crypt(struct AVCAMELLIA *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt); - -/** - * @} - */ -#endif /* AVUTIL_CAMELLIA_H */ diff --git a/prebuilts/x86_64/include/libavutil/cast5.h b/prebuilts/x86_64/include/libavutil/cast5.h deleted file mode 100644 index ad5b347..0000000 --- a/prebuilts/x86_64/include/libavutil/cast5.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * An implementation of the CAST128 algorithm as mentioned in RFC2144 - * Copyright (c) 2014 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CAST5_H -#define AVUTIL_CAST5_H - -#include - - -/** - * @file - * @brief Public header for libavutil CAST5 algorithm - * @defgroup lavu_cast5 CAST5 - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_cast5_size; - -struct AVCAST5; - -/** - * Allocate an AVCAST5 context - * To free the struct: av_free(ptr) - */ -struct AVCAST5 *av_cast5_alloc(void); -/** - * Initialize an AVCAST5 context. - * - * @param ctx an AVCAST5 context - * @param key a key of 5,6,...16 bytes used for encryption/decryption - * @param key_bits number of keybits: possible are 40,48,...,128 - * @return 0 on success, less than 0 on failure - */ -int av_cast5_init(struct AVCAST5 *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, ECB mode only - * - * @param ctx an AVCAST5 context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_cast5_crypt(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVCAST5 context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_cast5_crypt2(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); -/** - * @} - */ -#endif /* AVUTIL_CAST5_H */ diff --git a/prebuilts/x86_64/include/libavutil/channel_layout.h b/prebuilts/x86_64/include/libavutil/channel_layout.h deleted file mode 100644 index d39ae11..0000000 --- a/prebuilts/x86_64/include/libavutil/channel_layout.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright (c) 2006 Michael Niedermayer - * Copyright (c) 2008 Peter Ross - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CHANNEL_LAYOUT_H -#define AVUTIL_CHANNEL_LAYOUT_H - -#include - -/** - * @file - * audio channel layout utility functions - */ - -/** - * @addtogroup lavu_audio - * @{ - */ - -/** - * @defgroup channel_masks Audio channel masks - * - * 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. - * - * @{ - */ -#define AV_CH_FRONT_LEFT 0x00000001 -#define AV_CH_FRONT_RIGHT 0x00000002 -#define AV_CH_FRONT_CENTER 0x00000004 -#define AV_CH_LOW_FREQUENCY 0x00000008 -#define AV_CH_BACK_LEFT 0x00000010 -#define AV_CH_BACK_RIGHT 0x00000020 -#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040 -#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080 -#define AV_CH_BACK_CENTER 0x00000100 -#define AV_CH_SIDE_LEFT 0x00000200 -#define AV_CH_SIDE_RIGHT 0x00000400 -#define AV_CH_TOP_CENTER 0x00000800 -#define AV_CH_TOP_FRONT_LEFT 0x00001000 -#define AV_CH_TOP_FRONT_CENTER 0x00002000 -#define AV_CH_TOP_FRONT_RIGHT 0x00004000 -#define AV_CH_TOP_BACK_LEFT 0x00008000 -#define AV_CH_TOP_BACK_CENTER 0x00010000 -#define AV_CH_TOP_BACK_RIGHT 0x00020000 -#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix. -#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT. -#define AV_CH_WIDE_LEFT 0x0000000080000000ULL -#define AV_CH_WIDE_RIGHT 0x0000000100000000ULL -#define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL -#define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL -#define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL -#define AV_CH_TOP_SIDE_LEFT 0x0000001000000000ULL -#define AV_CH_TOP_SIDE_RIGHT 0x0000002000000000ULL -#define AV_CH_BOTTOM_FRONT_CENTER 0x0000004000000000ULL -#define AV_CH_BOTTOM_FRONT_LEFT 0x0000008000000000ULL -#define AV_CH_BOTTOM_FRONT_RIGHT 0x0000010000000000ULL - -/** Channel mask value used for AVCodecContext.request_channel_layout - to indicate that the user requests the channel order of the decoder output - to be the native codec channel order. */ -#define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL - -/** - * @} - * @defgroup channel_mask_c Audio channel layouts - * @{ - * */ -#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT) -#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT0_FRONT (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT0_FRONT (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) -#define 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) -#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT) -#define AV_CH_LAYOUT_22POINT2 (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_BACK_CENTER|AV_CH_LOW_FREQUENCY_2|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_CENTER|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_BOTTOM_FRONT_CENTER|AV_CH_BOTTOM_FRONT_LEFT|AV_CH_BOTTOM_FRONT_RIGHT) - -enum AVMatrixEncoding { - AV_MATRIX_ENCODING_NONE, - AV_MATRIX_ENCODING_DOLBY, - AV_MATRIX_ENCODING_DPLII, - AV_MATRIX_ENCODING_DPLIIX, - AV_MATRIX_ENCODING_DPLIIZ, - AV_MATRIX_ENCODING_DOLBYEX, - AV_MATRIX_ENCODING_DOLBYHEADPHONE, - AV_MATRIX_ENCODING_NB -}; - -/** - * Return a channel layout id that matches name, or 0 if no match is found. - * - * name can be one or several of the following notations, - * separated by '+' or '|': - * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, - * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); - * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, - * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); - * - a number of channels, in decimal, followed by 'c', yielding - * the default channel layout for that number of channels (@see - * av_get_default_channel_layout); - * - a channel layout mask, in hexadecimal starting with "0x" (see the - * AV_CH_* macros). - * - * Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7" - */ -uint64_t av_get_channel_layout(const char *name); - -/** - * Return a channel layout and the number of channels based on the specified name. - * - * This function is similar to (@see av_get_channel_layout), but can also parse - * unknown channel layout specifications. - * - * @param[in] name channel layout specification string - * @param[out] channel_layout parsed channel layout (0 if unknown) - * @param[out] nb_channels number of channels - * - * @return 0 on success, AVERROR(EINVAL) if the parsing fails. - */ -int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, int* nb_channels); - -/** - * Return a description of a channel layout. - * If nb_channels is <= 0, it is guessed from the channel_layout. - * - * @param buf put here the string containing the channel layout - * @param buf_size size in bytes of the buffer - */ -void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout); - -struct AVBPrint; -/** - * Append a description of a channel layout to a bprint buffer. - */ -void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout); - -/** - * Return the number of channels in the channel layout. - */ -int av_get_channel_layout_nb_channels(uint64_t channel_layout); - -/** - * Return default channel layout for a given number of channels. - */ -int64_t av_get_default_channel_layout(int nb_channels); - -/** - * Get the index of a channel in channel_layout. - * - * @param channel a channel layout describing exactly one channel which must be - * present in channel_layout. - * - * @return index of channel in channel_layout on success, a negative AVERROR - * on error. - */ -int av_get_channel_layout_channel_index(uint64_t channel_layout, - uint64_t channel); - -/** - * Get the channel with the given index in channel_layout. - */ -uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index); - -/** - * Get the name of a given channel. - * - * @return channel name on success, NULL on error. - */ -const char *av_get_channel_name(uint64_t channel); - -/** - * Get the description of a given channel. - * - * @param channel a channel layout with a single channel - * @return channel description on success, NULL on error - */ -const char *av_get_channel_description(uint64_t channel); - -/** - * Get the value and name of a standard channel layout. - * - * @param[in] index index in an internal list, starting at 0 - * @param[out] layout channel layout mask - * @param[out] name name of the layout - * @return 0 if the layout exists, - * <0 if index is beyond the limits - */ -int av_get_standard_channel_layout(unsigned index, uint64_t *layout, - const char **name); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_CHANNEL_LAYOUT_H */ diff --git a/prebuilts/x86_64/include/libavutil/common.h b/prebuilts/x86_64/include/libavutil/common.h deleted file mode 100644 index aee353d..0000000 --- a/prebuilts/x86_64/include/libavutil/common.h +++ /dev/null @@ -1,608 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * common internal and external API header - */ - -#ifndef AVUTIL_COMMON_H -#define AVUTIL_COMMON_H - -#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && !defined(UINT64_C) -#error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "attributes.h" -#include "macros.h" -#include "version.h" -#include "libavutil/avconfig.h" - -#if AV_HAVE_BIGENDIAN -# define AV_NE(be, le) (be) -#else -# define AV_NE(be, le) (le) -#endif - -//rounded division & shift -#define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) -/* assume b>0 */ -#define ROUNDED_DIV(a,b) (((a)>=0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) -/* Fast a/(1<=0 and b>=0 */ -#define AV_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \ - : ((a) + (1<<(b)) - 1) >> (b)) -/* Backwards compat. */ -#define FF_CEIL_RSHIFT AV_CEIL_RSHIFT - -#define FFUDIV(a,b) (((a)>0 ?(a):(a)-(b)+1) / (b)) -#define FFUMOD(a,b) ((a)-(b)*FFUDIV(a,b)) - -/** - * Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they - * are not representable as absolute values of their type. This is the same - * as with *abs() - * @see FFNABS() - */ -#define FFABS(a) ((a) >= 0 ? (a) : (-(a))) -#define FFSIGN(a) ((a) > 0 ? 1 : -1) - -/** - * Negative Absolute value. - * this works for all integers of all types. - * As with many macros, this evaluates its argument twice, it thus must not have - * a sideeffect, that is FFNABS(x++) has undefined behavior. - */ -#define FFNABS(a) ((a) <= 0 ? (a) : (-(a))) - -/** - * Unsigned Absolute value. - * This takes the absolute value of a signed int and returns it as a unsigned. - * This also works with INT_MIN which would otherwise not be representable - * As with many macros, this evaluates its argument twice. - */ -#define FFABSU(a) ((a) <= 0 ? -(unsigned)(a) : (unsigned)(a)) -#define FFABS64U(a) ((a) <= 0 ? -(uint64_t)(a) : (uint64_t)(a)) - -/** - * Comparator. - * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 - * if x == y. This is useful for instance in a qsort comparator callback. - * Furthermore, compilers are able to optimize this to branchless code, and - * there is no risk of overflow with signed types. - * As with many macros, this evaluates its argument multiple times, it thus - * must not have a side-effect. - */ -#define FFDIFFSIGN(x,y) (((x)>(y)) - ((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])) - -/* misc math functions */ - -#ifdef HAVE_AV_CONFIG_H -# include "config.h" -# include "intmath.h" -#endif - -#ifndef av_ceil_log2 -# define av_ceil_log2 av_ceil_log2_c -#endif -#ifndef av_clip -# define av_clip av_clip_c -#endif -#ifndef av_clip64 -# define av_clip64 av_clip64_c -#endif -#ifndef av_clip_uint8 -# define av_clip_uint8 av_clip_uint8_c -#endif -#ifndef av_clip_int8 -# define av_clip_int8 av_clip_int8_c -#endif -#ifndef av_clip_uint16 -# define av_clip_uint16 av_clip_uint16_c -#endif -#ifndef av_clip_int16 -# define av_clip_int16 av_clip_int16_c -#endif -#ifndef av_clipl_int32 -# define av_clipl_int32 av_clipl_int32_c -#endif -#ifndef av_clip_intp2 -# define av_clip_intp2 av_clip_intp2_c -#endif -#ifndef av_clip_uintp2 -# define av_clip_uintp2 av_clip_uintp2_c -#endif -#ifndef av_mod_uintp2 -# define av_mod_uintp2 av_mod_uintp2_c -#endif -#ifndef av_sat_add32 -# define av_sat_add32 av_sat_add32_c -#endif -#ifndef av_sat_dadd32 -# define av_sat_dadd32 av_sat_dadd32_c -#endif -#ifndef av_sat_sub32 -# define av_sat_sub32 av_sat_sub32_c -#endif -#ifndef av_sat_dsub32 -# define av_sat_dsub32 av_sat_dsub32_c -#endif -#ifndef av_sat_add64 -# define av_sat_add64 av_sat_add64_c -#endif -#ifndef av_sat_sub64 -# define av_sat_sub64 av_sat_sub64_c -#endif -#ifndef av_clipf -# define av_clipf av_clipf_c -#endif -#ifndef av_clipd -# define av_clipd av_clipd_c -#endif -#ifndef av_popcount -# define av_popcount av_popcount_c -#endif -#ifndef av_popcount64 -# define av_popcount64 av_popcount64_c -#endif -#ifndef av_parity -# define av_parity av_parity_c -#endif - -#ifndef av_log2 -av_const int av_log2(unsigned v); -#endif - -#ifndef av_log2_16bit -av_const int av_log2_16bit(unsigned v); -#endif - -/** - * Clip a signed integer value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const int av_clip_c(int a, int amin, int amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a signed 64bit integer value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a signed integer value into the 0-255 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const uint8_t av_clip_uint8_c(int a) -{ - if (a&(~0xFF)) return (~a)>>31; - else return a; -} - -/** - * Clip a signed integer value into the -128,127 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int8_t av_clip_int8_c(int a) -{ - if ((a+0x80U) & ~0xFF) return (a>>31) ^ 0x7F; - else return a; -} - -/** - * Clip a signed integer value into the 0-65535 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const uint16_t av_clip_uint16_c(int a) -{ - if (a&(~0xFFFF)) return (~a)>>31; - else return a; -} - -/** - * Clip a signed integer value into the -32768,32767 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int16_t av_clip_int16_c(int a) -{ - if ((a+0x8000U) & ~0xFFFF) return (a>>31) ^ 0x7FFF; - else return a; -} - -/** - * Clip a signed 64-bit integer value into the -2147483648,2147483647 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a) -{ - if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF); - else return (int32_t)a; -} - -/** - * Clip a signed integer into the -(2^p),(2^p-1) range. - * @param a value to clip - * @param p bit position to clip at - * @return clipped value - */ -static av_always_inline av_const int av_clip_intp2_c(int a, int p) -{ - if (((unsigned)a + (1 << p)) & ~((2 << p) - 1)) - return (a >> 31) ^ ((1 << p) - 1); - else - return a; -} - -/** - * Clip a signed integer to an unsigned power of two range. - * @param a value to clip - * @param p bit position to clip at - * @return clipped value - */ -static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p) -{ - if (a & ~((1<> 31 & ((1<= 0) - return INT64_MAX ^ (b >> 63); - return s; -#endif -} - -/** - * Subtract two signed 64-bit values with saturation. - * - * @param a one value - * @param b another value - * @return difference with signed saturation - */ -static av_always_inline int64_t av_sat_sub64_c(int64_t a, int64_t b) { -#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_sub_overflow) - int64_t tmp; - return !__builtin_sub_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN); -#else - if (b <= 0 && a >= INT64_MAX + b) - return INT64_MAX; - if (b >= 0 && a <= INT64_MIN + b) - return INT64_MIN; - return a - b; -#endif -} - -/** - * Clip a float value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const float av_clipf_c(float a, float amin, float amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a double value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const double av_clipd_c(double a, double amin, double amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** Compute ceil(log2(x)). - * @param x value used to compute ceil(log2(x)) - * @return computed ceiling of log2(x) - */ -static av_always_inline av_const int av_ceil_log2_c(int x) -{ - return av_log2((x - 1U) << 1); -} - -/** - * Count number of bits set to one in x - * @param x value to count bits of - * @return the number of bits set to one in x - */ -static av_always_inline av_const int av_popcount_c(uint32_t x) -{ - x -= (x >> 1) & 0x55555555; - x = (x & 0x33333333) + ((x >> 2) & 0x33333333); - x = (x + (x >> 4)) & 0x0F0F0F0F; - x += x >> 8; - return (x + (x >> 16)) & 0x3F; -} - -/** - * Count number of bits set to one in x - * @param x value to count bits of - * @return the number of bits set to one in x - */ -static av_always_inline av_const int av_popcount64_c(uint64_t x) -{ - return av_popcount((uint32_t)x) + av_popcount((uint32_t)(x >> 32)); -} - -static av_always_inline av_const int av_parity_c(uint32_t v) -{ - return av_popcount(v) & 1; -} - -#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) -#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) - -/** - * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form. - * - * @param val Output value, must be an lvalue of type uint32_t. - * @param GET_BYTE Expression reading one byte from the input. - * Evaluated up to 7 times (4 for the currently - * assigned Unicode range). With a memory buffer - * input, this could be *ptr++, or if you want to make sure - * that *ptr stops at the end of a NULL terminated string then - * *ptr ? *ptr++ : 0 - * @param ERROR Expression to be evaluated on invalid input, - * typically a goto statement. - * - * @warning ERROR should not contain a loop control statement which - * could interact with the internal while loop, and should force an - * exit from the macro code (e.g. through a goto or a return) in order - * to prevent undefined results. - */ -#define GET_UTF8(val, GET_BYTE, ERROR)\ - val= (GET_BYTE);\ - {\ - uint32_t top = (val & 128) >> 1;\ - if ((val & 0xc0) == 0x80 || val >= 0xFE)\ - {ERROR}\ - while (val & top) {\ - unsigned int tmp = (GET_BYTE) - 128;\ - if(tmp>>6)\ - {ERROR}\ - val= (val<<6) + tmp;\ - top <<= 5;\ - }\ - val &= (top << 1) - 1;\ - } - -/** - * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form. - * - * @param val Output value, must be an lvalue of type uint32_t. - * @param GET_16BIT Expression returning two bytes of UTF-16 data converted - * to native byte order. Evaluated one or two times. - * @param ERROR Expression to be evaluated on invalid input, - * typically a goto statement. - */ -#define GET_UTF16(val, GET_16BIT, ERROR)\ - val = (GET_16BIT);\ - {\ - unsigned int hi = val - 0xD800;\ - if (hi < 0x800) {\ - val = (GET_16BIT) - 0xDC00;\ - if (val > 0x3FFU || hi > 0x3FFU)\ - {ERROR}\ - val += (hi<<10) + 0x10000;\ - }\ - }\ - -/** - * @def PUT_UTF8(val, tmp, PUT_BYTE) - * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long). - * @param val is an input-only argument and should be of type uint32_t. It holds - * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If - * val is given as a function it is executed only once. - * @param tmp is a temporary variable and should be of type uint8_t. It - * represents an intermediate value during conversion that is to be - * output by PUT_BYTE. - * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination. - * It could be a function or a statement, and uses tmp as the input byte. - * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be - * executed up to 4 times for values in the valid UTF-8 range and up to - * 7 times in the general case, depending on the length of the converted - * Unicode character. - */ -#define PUT_UTF8(val, tmp, PUT_BYTE)\ - {\ - int bytes, shift;\ - uint32_t in = val;\ - if (in < 0x80) {\ - tmp = in;\ - PUT_BYTE\ - } else {\ - bytes = (av_log2(in) + 4) / 5;\ - shift = (bytes - 1) * 6;\ - tmp = (256 - (256 >> bytes)) | (in >> shift);\ - PUT_BYTE\ - while (shift >= 6) {\ - shift -= 6;\ - tmp = 0x80 | ((in >> shift) & 0x3f);\ - PUT_BYTE\ - }\ - }\ - } - -/** - * @def PUT_UTF16(val, tmp, PUT_16BIT) - * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes). - * @param val is an input-only argument and should be of type uint32_t. It holds - * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If - * val is given as a function it is executed only once. - * @param tmp is a temporary variable and should be of type uint16_t. It - * represents an intermediate value during conversion that is to be - * output by PUT_16BIT. - * @param PUT_16BIT writes the converted UTF-16 data to any proper destination - * in desired endianness. It could be a function or a statement, and uses tmp - * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;" - * PUT_BYTE will be executed 1 or 2 times depending on input character. - */ -#define PUT_UTF16(val, tmp, PUT_16BIT)\ - {\ - uint32_t in = val;\ - if (in < 0x10000) {\ - tmp = in;\ - PUT_16BIT\ - } else {\ - tmp = 0xD800 | ((in - 0x10000) >> 10);\ - PUT_16BIT\ - tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\ - PUT_16BIT\ - }\ - }\ - - - -#include "mem.h" - -#ifdef HAVE_AV_CONFIG_H -# include "internal.h" -#endif /* HAVE_AV_CONFIG_H */ - -#endif /* AVUTIL_COMMON_H */ diff --git a/prebuilts/x86_64/include/libavutil/cpu.h b/prebuilts/x86_64/include/libavutil/cpu.h deleted file mode 100644 index 83099dd..0000000 --- a/prebuilts/x86_64/include/libavutil/cpu.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 2000, 2001, 2002 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CPU_H -#define AVUTIL_CPU_H - -#include - -#include "attributes.h" - -#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ - - /* lower 16 bits - CPU features */ -#define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX -#define AV_CPU_FLAG_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext -#define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext -#define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW -#define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions -#define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions -#define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster - ///< than regular MMX/SSE (e.g. Core1) -#define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt -#define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions -#define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster - ///< than regular MMX/SSE (e.g. Core1) -#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions -#define AV_CPU_FLAG_SSSE3SLOW 0x4000000 ///< SSSE3 supported, but usually not faster -#define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower -#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions -#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions -#define AV_CPU_FLAG_AESNI 0x80000 ///< Advanced Encryption Standard functions -#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used -#define AV_CPU_FLAG_AVXSLOW 0x8000000 ///< AVX supported, but slow when using YMM registers (e.g. Bulldozer) -#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions -#define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions -#define AV_CPU_FLAG_CMOV 0x1000 ///< supports cmov instruction -#define AV_CPU_FLAG_AVX2 0x8000 ///< AVX2 functions: requires OS support even if YMM registers aren't used -#define AV_CPU_FLAG_FMA3 0x10000 ///< Haswell FMA3 functions -#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1 -#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2 -#define AV_CPU_FLAG_AVX512 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used - -#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard -#define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06 -#define AV_CPU_FLAG_POWER8 0x0004 ///< ISA 2.07 - -#define AV_CPU_FLAG_ARMV5TE (1 << 0) -#define AV_CPU_FLAG_ARMV6 (1 << 1) -#define AV_CPU_FLAG_ARMV6T2 (1 << 2) -#define AV_CPU_FLAG_VFP (1 << 3) -#define AV_CPU_FLAG_VFPV3 (1 << 4) -#define AV_CPU_FLAG_NEON (1 << 5) -#define AV_CPU_FLAG_ARMV8 (1 << 6) -#define AV_CPU_FLAG_VFP_VM (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations -#define AV_CPU_FLAG_SETEND (1 <<16) - -#define AV_CPU_FLAG_MMI (1 << 0) -#define AV_CPU_FLAG_MSA (1 << 1) - -/** - * Return the flags which specify extensions supported by the CPU. - * The returned value is affected by av_force_cpu_flags() if that was used - * before. So av_get_cpu_flags() can easily be used in an application to - * detect the enabled cpu flags. - */ -int av_get_cpu_flags(void); - -/** - * Disables cpu detection and forces the specified flags. - * -1 is a special case that disables forcing of specific flags. - */ -void av_force_cpu_flags(int flags); - -/** - * Set a mask on flags returned by av_get_cpu_flags(). - * This function is mainly useful for testing. - * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible - */ -attribute_deprecated void av_set_cpu_flags_mask(int mask); - -/** - * Parse CPU flags from a string. - * - * The returned flags contain the specified flags as well as related unspecified flags. - * - * This function exists only for compatibility with libav. - * Please use av_parse_cpu_caps() when possible. - * @return a combination of AV_CPU_* flags, negative on error. - */ -attribute_deprecated -int av_parse_cpu_flags(const char *s); - -/** - * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. - * - * @return negative on error. - */ -int av_parse_cpu_caps(unsigned *flags, const char *s); - -/** - * @return the number of logical CPU cores present. - */ -int av_cpu_count(void); - -/** - * Get the maximum data alignment that may be required by FFmpeg. - * - * Note that this is affected by the build configuration and the CPU flags mask, - * so e.g. if the CPU supports AVX, but libavutil has been built with - * --disable-avx or the AV_CPU_FLAG_AVX flag has been disabled through - * av_set_cpu_flags_mask(), then this function will behave as if AVX is not - * present. - */ -size_t av_cpu_max_align(void); - -#endif /* AVUTIL_CPU_H */ diff --git a/prebuilts/x86_64/include/libavutil/crc.h b/prebuilts/x86_64/include/libavutil/crc.h deleted file mode 100644 index 47e22b4..0000000 --- a/prebuilts/x86_64/include/libavutil/crc.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_crc32 - * Public header for CRC hash function implementation. - */ - -#ifndef AVUTIL_CRC_H -#define AVUTIL_CRC_H - -#include -#include -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_crc32 CRC - * @ingroup lavu_hash - * CRC (Cyclic Redundancy Check) hash function implementation. - * - * This module supports numerous CRC polynomials, in addition to the most - * widely used CRC-32-IEEE. See @ref AVCRCId for a list of available - * polynomials. - * - * @{ - */ - -typedef uint32_t AVCRC; - -typedef enum { - AV_CRC_8_ATM, - AV_CRC_16_ANSI, - AV_CRC_16_CCITT, - AV_CRC_32_IEEE, - AV_CRC_32_IEEE_LE, /*< reversed bitorder version of AV_CRC_32_IEEE */ - AV_CRC_16_ANSI_LE, /*< reversed bitorder version of AV_CRC_16_ANSI */ - AV_CRC_24_IEEE, - AV_CRC_8_EBU, - AV_CRC_MAX, /*< Not part of public API! Do not use outside libavutil. */ -}AVCRCId; - -/** - * Initialize a CRC table. - * @param ctx must be an array of size sizeof(AVCRC)*257 or sizeof(AVCRC)*1024 - * @param le If 1, the lowest bit represents the coefficient for the highest - * exponent of the corresponding polynomial (both for poly and - * actual CRC). - * If 0, you must swap the CRC parameter and the result of av_crc - * if you need the standard representation (can be simplified in - * most cases to e.g. bswap16): - * av_bswap32(crc << (32-bits)) - * @param bits number of bits for the CRC - * @param poly generator polynomial without the x**bits coefficient, in the - * representation as specified by le - * @param ctx_size size of ctx in bytes - * @return <0 on failure - */ -int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size); - -/** - * Get an initialized standard CRC table. - * @param crc_id ID of a standard CRC - * @return a pointer to the CRC table or NULL on failure - */ -const AVCRC *av_crc_get_table(AVCRCId crc_id); - -/** - * Calculate the CRC of a block. - * @param crc CRC of previous blocks if any or initial value for CRC - * @return CRC updated with the data from the given block - * - * @see av_crc_init() "le" parameter - */ -uint32_t av_crc(const AVCRC *ctx, uint32_t crc, - const uint8_t *buffer, size_t length) av_pure; - -/** - * @} - */ - -#endif /* AVUTIL_CRC_H */ diff --git a/prebuilts/x86_64/include/libavutil/des.h b/prebuilts/x86_64/include/libavutil/des.h deleted file mode 100644 index 4cf11f5..0000000 --- a/prebuilts/x86_64/include/libavutil/des.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * DES encryption/decryption - * Copyright (c) 2007 Reimar Doeffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_DES_H -#define AVUTIL_DES_H - -#include - -/** - * @defgroup lavu_des DES - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVDES { - uint64_t round_keys[3][16]; - int triple_des; -} AVDES; - -/** - * Allocate an AVDES context. - */ -AVDES *av_des_alloc(void); - -/** - * @brief Initializes an AVDES context. - * - * @param key_bits must be 64 or 192 - * @param decrypt 0 for encryption/CBC-MAC, 1 for decryption - * @return zero on success, negative value otherwise - */ -int av_des_init(struct AVDES *d, const uint8_t *key, int key_bits, int decrypt); - -/** - * @brief Encrypts / decrypts using the DES algorithm. - * - * @param count number of 8 byte blocks - * @param dst destination array, can be equal to src, must be 8-byte aligned - * @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL - * @param iv initialization vector for CBC mode, if NULL then ECB will be used, - * must be 8-byte aligned - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_des_crypt(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @brief Calculates CBC-MAC using the DES algorithm. - * - * @param count number of 8 byte blocks - * @param dst destination array, can be equal to src, must be 8-byte aligned - * @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL - */ -void av_des_mac(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count); - -/** - * @} - */ - -#endif /* AVUTIL_DES_H */ diff --git a/prebuilts/x86_64/include/libavutil/dict.h b/prebuilts/x86_64/include/libavutil/dict.h deleted file mode 100644 index 118f1f0..0000000 --- a/prebuilts/x86_64/include/libavutil/dict.h +++ /dev/null @@ -1,200 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Public dictionary API. - * @deprecated - * AVDictionary is provided for compatibility with libav. It is both in - * implementation as well as API inefficient. It does not scale and is - * extremely slow with large dictionaries. - * It is recommended that new code uses our tree container from tree.c/h - * where applicable, which uses AVL trees to achieve O(log n) performance. - */ - -#ifndef AVUTIL_DICT_H -#define AVUTIL_DICT_H - -#include - -#include "version.h" - -/** - * @addtogroup lavu_dict AVDictionary - * @ingroup lavu_data - * - * @brief Simple key:value store - * - * @{ - * Dictionaries are used for storing key:value pairs. To create - * an AVDictionary, simply pass an address of a NULL pointer to - * av_dict_set(). NULL can be used as an empty dictionary wherever - * a pointer to an AVDictionary is required. - * Use av_dict_get() to retrieve an entry or iterate over all - * entries and finally av_dict_free() to free the dictionary - * and all its contents. - * - @code - AVDictionary *d = NULL; // "create" an empty dictionary - AVDictionaryEntry *t = NULL; - - av_dict_set(&d, "foo", "bar", 0); // add an entry - - char *k = av_strdup("key"); // if your strings are already allocated, - char *v = av_strdup("value"); // you can avoid copying them like this - av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); - - while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) { - <....> // iterate over all entries in d - } - av_dict_free(&d); - @endcode - */ - -#define AV_DICT_MATCH_CASE 1 /**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */ -#define AV_DICT_IGNORE_SUFFIX 2 /**< Return first entry in a dictionary whose first part corresponds to the search key, - ignoring the suffix of the found key string. Only relevant in av_dict_get(). */ -#define AV_DICT_DONT_STRDUP_KEY 4 /**< Take ownership of a key that's been - allocated with av_malloc() or another memory allocation function. */ -#define AV_DICT_DONT_STRDUP_VAL 8 /**< Take ownership of a value that's been - allocated with av_malloc() or another memory allocation function. */ -#define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries. -#define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no - delimiter is added, the strings are simply concatenated. */ -#define AV_DICT_MULTIKEY 64 /**< Allow to store several equal keys in the dictionary */ - -typedef struct AVDictionaryEntry { - char *key; - char *value; -} AVDictionaryEntry; - -typedef struct AVDictionary AVDictionary; - -/** - * Get a dictionary entry with matching key. - * - * The returned entry key or value must not be changed, or it will - * cause undefined behavior. - * - * To iterate through all the dictionary entries, you can set the matching key - * to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag. - * - * @param prev Set to the previous matching element to find the next. - * If set to NULL the first matching element is returned. - * @param key matching key - * @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved - * @return found entry or NULL in case no matching entry was found in the dictionary - */ -AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, - const AVDictionaryEntry *prev, int flags); - -/** - * Get number of entries in dictionary. - * - * @param m dictionary - * @return number of entries in dictionary - */ -int av_dict_count(const AVDictionary *m); - -/** - * Set the given entry in *pm, overwriting an existing entry. - * - * Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set, - * these arguments will be freed on error. - * - * Warning: Adding a new entry to a dictionary invalidates all existing entries - * previously returned with av_dict_get. - * - * @param pm pointer to a pointer to a dictionary struct. If *pm is NULL - * a dictionary struct is allocated and put in *pm. - * @param key entry key to add to *pm (will either be av_strduped or added as a new key depending on flags) - * @param value entry value to add to *pm (will be av_strduped or added as a new key depending on flags). - * Passing a NULL value will cause an existing entry to be deleted. - * @return >= 0 on success otherwise an error code <0 - */ -int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags); - -/** - * Convenience wrapper for av_dict_set that converts the value to a string - * and stores it. - * - * Note: If AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. - */ -int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags); - -/** - * Parse the key/value pairs list and add the parsed entries to a dictionary. - * - * In case of failure, all the successfully set entries are stored in - * *pm. You may need to manually free the created dictionary. - * - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other - * @param flags flags to use when adding to dictionary. - * AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL - * are ignored since the key/value tokens will always - * be duplicated. - * @return 0 on success, negative AVERROR code on failure - */ -int av_dict_parse_string(AVDictionary **pm, const char *str, - const char *key_val_sep, const char *pairs_sep, - int flags); - -/** - * Copy entries from one AVDictionary struct into another. - * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, - * this function will allocate a struct for you and put it in *dst - * @param src pointer to source AVDictionary struct - * @param flags flags to use when setting entries in *dst - * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag - * @return 0 on success, negative AVERROR code on failure. If dst was allocated - * by this function, callers should free the associated memory. - */ -int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags); - -/** - * Free all the memory allocated for an AVDictionary struct - * and all keys and values. - */ -void av_dict_free(AVDictionary **m); - -/** - * Get dictionary entries as a string. - * - * Create a string containing dictionary's entries. - * Such string may be passed back to av_dict_parse_string(). - * @note String is escaped with backslashes ('\'). - * - * @param[in] m dictionary - * @param[out] buffer Pointer to buffer that will be allocated with string containg entries. - * Buffer must be freed by the caller when is no longer needed. - * @param[in] key_val_sep character used to separate key from value - * @param[in] pairs_sep character used to separate two pairs from each other - * @return >= 0 on success, negative on error - * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. - */ -int av_dict_get_string(const AVDictionary *m, char **buffer, - const char key_val_sep, const char pairs_sep); - -/** - * @} - */ - -#endif /* AVUTIL_DICT_H */ diff --git a/prebuilts/x86_64/include/libavutil/display.h b/prebuilts/x86_64/include/libavutil/display.h deleted file mode 100644 index 515adad..0000000 --- a/prebuilts/x86_64/include/libavutil/display.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2014 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Display matrix - */ - -#ifndef AVUTIL_DISPLAY_H -#define AVUTIL_DISPLAY_H - -#include -#include "common.h" - -/** - * @addtogroup lavu_video - * @{ - * - * @defgroup lavu_video_display Display transformation matrix functions - * @{ - */ - -/** - * @addtogroup lavu_video_display - * The display transformation matrix specifies an affine transformation that - * should be applied to video frames for correct presentation. It is compatible - * with the matrices stored in the ISO/IEC 14496-12 container format. - * - * The data is a 3x3 matrix represented as a 9-element array: - * - * @code{.unparsed} - * | a b u | - * (a, b, u, c, d, v, x, y, w) -> | c d v | - * | x y w | - * @endcode - * - * All numbers are stored in native endianness, as 16.16 fixed-point values, - * except for u, v and w, which are stored as 2.30 fixed-point values. - * - * The transformation maps a point (p, q) in the source (pre-transformation) - * frame to the point (p', q') in the destination (post-transformation) frame as - * follows: - * - * @code{.unparsed} - * | a b u | - * (p, q, 1) . | c d v | = z * (p', q', 1) - * | x y w | - * @endcode - * - * The transformation can also be more explicitly written in components as - * follows: - * - * @code{.unparsed} - * p' = (a * p + c * q + x) / z; - * q' = (b * p + d * q + y) / z; - * z = u * p + v * q + w - * @endcode - */ - -/** - * Extract the rotation component of the transformation matrix. - * - * @param matrix the transformation matrix - * @return the angle (in degrees) by which the transformation rotates the frame - * counterclockwise. The angle will be in range [-180.0, 180.0], - * or NaN if the matrix is singular. - * - * @note floating point numbers are inherently inexact, so callers are - * recommended to round the return value to nearest integer before use. - */ -double av_display_rotation_get(const int32_t matrix[9]); - -/** - * Initialize a transformation matrix describing a pure counterclockwise - * rotation by the specified angle (in degrees). - * - * @param matrix an allocated transformation matrix (will be fully overwritten - * by this function) - * @param angle rotation angle in degrees. - */ -void av_display_rotation_set(int32_t matrix[9], double angle); - -/** - * Flip the input matrix horizontally and/or vertically. - * - * @param matrix an allocated transformation matrix - * @param hflip whether the matrix should be flipped horizontally - * @param vflip whether the matrix should be flipped vertically - */ -void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_DISPLAY_H */ diff --git a/prebuilts/x86_64/include/libavutil/dovi_meta.h b/prebuilts/x86_64/include/libavutil/dovi_meta.h deleted file mode 100644 index 299911d..0000000 --- a/prebuilts/x86_64/include/libavutil/dovi_meta.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2020 Vacing Fang - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * DOVI configuration - */ - - -#ifndef AVUTIL_DOVI_META_H -#define AVUTIL_DOVI_META_H - -#include -#include - -/* - * DOVI configuration - * ref: dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2 - dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2 - * @code - * uint8_t dv_version_major, the major version number that the stream complies with - * uint8_t dv_version_minor, the minor version number that the stream complies with - * uint8_t dv_profile, the Dolby Vision profile - * uint8_t dv_level, the Dolby Vision level - * uint8_t rpu_present_flag - * uint8_t el_present_flag - * uint8_t bl_present_flag - * uint8_t dv_bl_signal_compatibility_id - * @endcode - * - * @note The struct must be allocated with av_dovi_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVDOVIDecoderConfigurationRecord { - uint8_t dv_version_major; - uint8_t dv_version_minor; - uint8_t dv_profile; - uint8_t dv_level; - uint8_t rpu_present_flag; - uint8_t el_present_flag; - uint8_t bl_present_flag; - uint8_t dv_bl_signal_compatibility_id; -} AVDOVIDecoderConfigurationRecord; - -/** - * Allocate a AVDOVIDecoderConfigurationRecord structure and initialize its - * fields to default values. - * - * @return the newly allocated struct or NULL on failure - */ -AVDOVIDecoderConfigurationRecord *av_dovi_alloc(size_t *size); - -#endif /* AVUTIL_DOVI_META_H */ diff --git a/prebuilts/x86_64/include/libavutil/downmix_info.h b/prebuilts/x86_64/include/libavutil/downmix_info.h deleted file mode 100644 index 221cf5b..0000000 --- a/prebuilts/x86_64/include/libavutil/downmix_info.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2014 Tim Walker - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_DOWNMIX_INFO_H -#define AVUTIL_DOWNMIX_INFO_H - -#include "frame.h" - -/** - * @file - * audio downmix medatata - */ - -/** - * @addtogroup lavu_audio - * @{ - */ - -/** - * @defgroup downmix_info Audio downmix metadata - * @{ - */ - -/** - * Possible downmix types. - */ -enum AVDownmixType { - AV_DOWNMIX_TYPE_UNKNOWN, /**< Not indicated. */ - AV_DOWNMIX_TYPE_LORO, /**< Lo/Ro 2-channel downmix (Stereo). */ - AV_DOWNMIX_TYPE_LTRT, /**< Lt/Rt 2-channel downmix, Dolby Surround compatible. */ - AV_DOWNMIX_TYPE_DPLII, /**< Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible. */ - AV_DOWNMIX_TYPE_NB /**< Number of downmix types. Not part of ABI. */ -}; - -/** - * This structure describes optional metadata relevant to a downmix procedure. - * - * All fields are set by the decoder to the value indicated in the audio - * bitstream (if present), or to a "sane" default otherwise. - */ -typedef struct AVDownmixInfo { - /** - * Type of downmix preferred by the mastering engineer. - */ - enum AVDownmixType preferred_downmix_type; - - /** - * Absolute scale factor representing the nominal level of the center - * channel during a regular downmix. - */ - double center_mix_level; - - /** - * Absolute scale factor representing the nominal level of the center - * channel during an Lt/Rt compatible downmix. - */ - double center_mix_level_ltrt; - - /** - * Absolute scale factor representing the nominal level of the surround - * channels during a regular downmix. - */ - double surround_mix_level; - - /** - * Absolute scale factor representing the nominal level of the surround - * channels during an Lt/Rt compatible downmix. - */ - double surround_mix_level_ltrt; - - /** - * Absolute scale factor representing the level at which the LFE data is - * mixed into L/R channels during downmixing. - */ - double lfe_mix_level; -} AVDownmixInfo; - -/** - * Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing. - * - * If the side data is absent, it is created and added to the frame. - * - * @param frame the frame for which the side data is to be obtained or created - * - * @return the AVDownmixInfo structure to be edited by the caller, or NULL if - * the structure cannot be allocated. - */ -AVDownmixInfo *av_downmix_info_update_side_data(AVFrame *frame); - -/** - * @} - */ - -/** - * @} - */ - -#endif /* AVUTIL_DOWNMIX_INFO_H */ diff --git a/prebuilts/x86_64/include/libavutil/encryption_info.h b/prebuilts/x86_64/include/libavutil/encryption_info.h deleted file mode 100644 index 8fe7ebf..0000000 --- a/prebuilts/x86_64/include/libavutil/encryption_info.h +++ /dev/null @@ -1,205 +0,0 @@ -/** - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_ENCRYPTION_INFO_H -#define AVUTIL_ENCRYPTION_INFO_H - -#include -#include - -typedef struct AVSubsampleEncryptionInfo { - /** The number of bytes that are clear. */ - unsigned int bytes_of_clear_data; - - /** - * The number of bytes that are protected. If using pattern encryption, - * the pattern applies to only the protected bytes; if not using pattern - * encryption, all these bytes are encrypted. - */ - unsigned int bytes_of_protected_data; -} AVSubsampleEncryptionInfo; - -/** - * This describes encryption info for a packet. This contains frame-specific - * info for how to decrypt the packet before passing it to the decoder. - * - * The size of this struct is not part of the public ABI. - */ -typedef struct AVEncryptionInfo { - /** The fourcc encryption scheme, in big-endian byte order. */ - uint32_t scheme; - - /** - * Only used for pattern encryption. This is the number of 16-byte blocks - * that are encrypted. - */ - uint32_t crypt_byte_block; - - /** - * Only used for pattern encryption. This is the number of 16-byte blocks - * that are clear. - */ - uint32_t skip_byte_block; - - /** - * The ID of the key used to encrypt the packet. This should always be - * 16 bytes long, but may be changed in the future. - */ - uint8_t *key_id; - uint32_t key_id_size; - - /** - * The initialization vector. This may have been zero-filled to be the - * correct block size. This should always be 16 bytes long, but may be - * changed in the future. - */ - uint8_t *iv; - uint32_t iv_size; - - /** - * An array of subsample encryption info specifying how parts of the sample - * are encrypted. If there are no subsamples, then the whole sample is - * encrypted. - */ - AVSubsampleEncryptionInfo *subsamples; - uint32_t subsample_count; -} AVEncryptionInfo; - -/** - * This describes info used to initialize an encryption key system. - * - * The size of this struct is not part of the public ABI. - */ -typedef struct AVEncryptionInitInfo { - /** - * A unique identifier for the key system this is for, can be NULL if it - * is not known. This should always be 16 bytes, but may change in the - * future. - */ - uint8_t* system_id; - uint32_t system_id_size; - - /** - * An array of key IDs this initialization data is for. All IDs are the - * same length. Can be NULL if there are no known key IDs. - */ - uint8_t** key_ids; - /** The number of key IDs. */ - uint32_t num_key_ids; - /** - * The number of bytes in each key ID. This should always be 16, but may - * change in the future. - */ - uint32_t key_id_size; - - /** - * Key-system specific initialization data. This data is copied directly - * from the file and the format depends on the specific key system. This - * can be NULL if there is no initialization data; in that case, there - * will be at least one key ID. - */ - uint8_t* data; - uint32_t data_size; - - /** - * An optional pointer to the next initialization info in the list. - */ - struct AVEncryptionInitInfo *next; -} AVEncryptionInitInfo; - -/** - * Allocates an AVEncryptionInfo structure and sub-pointers to hold the given - * number of subsamples. This will allocate pointers for the key ID, IV, - * and subsample entries, set the size members, and zero-initialize the rest. - * - * @param subsample_count The number of subsamples. - * @param key_id_size The number of bytes in the key ID, should be 16. - * @param iv_size The number of bytes in the IV, should be 16. - * - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_alloc(uint32_t subsample_count, uint32_t key_id_size, uint32_t iv_size); - -/** - * Allocates an AVEncryptionInfo structure with a copy of the given data. - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_clone(const AVEncryptionInfo *info); - -/** - * Frees the given encryption info object. This MUST NOT be used to free the - * side-data data pointer, that should use normal side-data methods. - */ -void av_encryption_info_free(AVEncryptionInfo *info); - -/** - * Creates a copy of the AVEncryptionInfo that is contained in the given side - * data. The resulting object should be passed to av_encryption_info_free() - * when done. - * - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_get_side_data(const uint8_t *side_data, size_t side_data_size); - -/** - * Allocates and initializes side data that holds a copy of the given encryption - * info. The resulting pointer should be either freed using av_free or given - * to av_packet_add_side_data(). - * - * @return The new side-data pointer, or NULL. - */ -uint8_t *av_encryption_info_add_side_data( - const AVEncryptionInfo *info, size_t *side_data_size); - - -/** - * Allocates an AVEncryptionInitInfo structure and sub-pointers to hold the - * given sizes. This will allocate pointers and set all the fields. - * - * @return The new AVEncryptionInitInfo structure, or NULL on error. - */ -AVEncryptionInitInfo *av_encryption_init_info_alloc( - uint32_t system_id_size, uint32_t num_key_ids, uint32_t key_id_size, uint32_t data_size); - -/** - * Frees the given encryption init info object. This MUST NOT be used to free - * the side-data data pointer, that should use normal side-data methods. - */ -void av_encryption_init_info_free(AVEncryptionInitInfo* info); - -/** - * Creates a copy of the AVEncryptionInitInfo that is contained in the given - * side data. The resulting object should be passed to - * av_encryption_init_info_free() when done. - * - * @return The new AVEncryptionInitInfo structure, or NULL on error. - */ -AVEncryptionInitInfo *av_encryption_init_info_get_side_data( - const uint8_t* side_data, size_t side_data_size); - -/** - * Allocates and initializes side data that holds a copy of the given encryption - * init info. The resulting pointer should be either freed using av_free or - * given to av_packet_add_side_data(). - * - * @return The new side-data pointer, or NULL. - */ -uint8_t *av_encryption_init_info_add_side_data( - const AVEncryptionInitInfo *info, size_t *side_data_size); - -#endif /* AVUTIL_ENCRYPTION_INFO_H */ diff --git a/prebuilts/x86_64/include/libavutil/error.h b/prebuilts/x86_64/include/libavutil/error.h deleted file mode 100644 index 71df4da..0000000 --- a/prebuilts/x86_64/include/libavutil/error.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * error code definitions - */ - -#ifndef AVUTIL_ERROR_H -#define AVUTIL_ERROR_H - -#include -#include - -/** - * @addtogroup lavu_error - * - * @{ - */ - - -/* error handling */ -#if EDOM > 0 -#define AVERROR(e) (-(e)) ///< Returns a negative error code from a POSIX error code, to return from library functions. -#define AVUNERROR(e) (-(e)) ///< Returns a POSIX error code from a library function error return value. -#else -/* Some platforms have E* and errno already negated. */ -#define AVERROR(e) (e) -#define AVUNERROR(e) (e) -#endif - -#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d)) - -#define AVERROR_BSF_NOT_FOUND FFERRTAG(0xF8,'B','S','F') ///< Bitstream filter not found -#define AVERROR_BUG FFERRTAG( 'B','U','G','!') ///< Internal bug, also see AVERROR_BUG2 -#define AVERROR_BUFFER_TOO_SMALL FFERRTAG( 'B','U','F','S') ///< Buffer too small -#define AVERROR_DECODER_NOT_FOUND FFERRTAG(0xF8,'D','E','C') ///< Decoder not found -#define AVERROR_DEMUXER_NOT_FOUND FFERRTAG(0xF8,'D','E','M') ///< Demuxer not found -#define AVERROR_ENCODER_NOT_FOUND FFERRTAG(0xF8,'E','N','C') ///< Encoder not found -#define AVERROR_EOF FFERRTAG( 'E','O','F',' ') ///< End of file -#define AVERROR_EXIT FFERRTAG( 'E','X','I','T') ///< Immediate exit was requested; the called function should not be restarted -#define AVERROR_EXTERNAL FFERRTAG( 'E','X','T',' ') ///< Generic error in an external library -#define AVERROR_FILTER_NOT_FOUND FFERRTAG(0xF8,'F','I','L') ///< Filter not found -#define AVERROR_INVALIDDATA FFERRTAG( 'I','N','D','A') ///< Invalid data found when processing input -#define AVERROR_MUXER_NOT_FOUND FFERRTAG(0xF8,'M','U','X') ///< Muxer not found -#define AVERROR_OPTION_NOT_FOUND FFERRTAG(0xF8,'O','P','T') ///< Option not found -#define AVERROR_PATCHWELCOME FFERRTAG( 'P','A','W','E') ///< Not yet implemented in FFmpeg, patches welcome -#define AVERROR_PROTOCOL_NOT_FOUND FFERRTAG(0xF8,'P','R','O') ///< Protocol not found - -#define AVERROR_STREAM_NOT_FOUND FFERRTAG(0xF8,'S','T','R') ///< Stream not found -/** - * This is semantically identical to AVERROR_BUG - * it has been introduced in Libav after our AVERROR_BUG and with a modified value. - */ -#define AVERROR_BUG2 FFERRTAG( 'B','U','G',' ') -#define AVERROR_UNKNOWN FFERRTAG( 'U','N','K','N') ///< Unknown error, typically from an external library -#define AVERROR_EXPERIMENTAL (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it. -#define AVERROR_INPUT_CHANGED (-0x636e6701) ///< Input changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_OUTPUT_CHANGED) -#define AVERROR_OUTPUT_CHANGED (-0x636e6702) ///< Output changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_INPUT_CHANGED) -/* HTTP & RTSP errors */ -#define AVERROR_HTTP_BAD_REQUEST FFERRTAG(0xF8,'4','0','0') -#define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8,'4','0','1') -#define AVERROR_HTTP_FORBIDDEN FFERRTAG(0xF8,'4','0','3') -#define AVERROR_HTTP_NOT_FOUND FFERRTAG(0xF8,'4','0','4') -#define AVERROR_HTTP_OTHER_4XX FFERRTAG(0xF8,'4','X','X') -#define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8,'5','X','X') - -#define AV_ERROR_MAX_STRING_SIZE 64 - -/** - * Put a description of the AVERROR code errnum in errbuf. - * In case of failure the global variable errno is set to indicate the - * error. Even in case of failure av_strerror() will print a generic - * error message indicating the errnum provided to errbuf. - * - * @param errnum error code to describe - * @param errbuf buffer to which description is written - * @param errbuf_size the size in bytes of errbuf - * @return 0 on success, a negative value if a description for errnum - * cannot be found - */ -int av_strerror(int errnum, char *errbuf, size_t errbuf_size); - -/** - * Fill the provided buffer with a string containing an error string - * corresponding to the AVERROR code errnum. - * - * @param errbuf a buffer - * @param errbuf_size size in bytes of errbuf - * @param errnum error code to describe - * @return the buffer in input, filled with the error description - * @see av_strerror() - */ -static inline char *av_make_error_string(char *errbuf, size_t errbuf_size, int errnum) -{ - av_strerror(errnum, errbuf, errbuf_size); - return errbuf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_err2str(errnum) \ - av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum) - -/** - * @} - */ - -#endif /* AVUTIL_ERROR_H */ diff --git a/prebuilts/x86_64/include/libavutil/eval.h b/prebuilts/x86_64/include/libavutil/eval.h deleted file mode 100644 index 068c62c..0000000 --- a/prebuilts/x86_64/include/libavutil/eval.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2002 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * simple arithmetic expression evaluator - */ - -#ifndef AVUTIL_EVAL_H -#define AVUTIL_EVAL_H - -#include "avutil.h" - -typedef struct AVExpr AVExpr; - -/** - * Parse and evaluate an expression. - * Note, this is significantly slower than av_expr_eval(). - * - * @param res a pointer to a double where is put the result value of - * the expression, or NAN in case of error - * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" - * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} - * @param const_values a zero terminated array of values for the identifiers from const_names - * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers - * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 - * @param log_ctx parent logging context - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_expr_parse_and_eval(double *res, const char *s, - const char * const *const_names, const double *const_values, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - void *opaque, int log_offset, void *log_ctx); - -/** - * Parse an expression. - * - * @param expr a pointer where is put an AVExpr containing the parsed - * value in case of successful parsing, or NULL otherwise. - * The pointed to AVExpr must be freed with av_expr_free() by the user - * when it is not needed anymore. - * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" - * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} - * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers - * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments - * @param log_ctx parent logging context - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_expr_parse(AVExpr **expr, const char *s, - const char * const *const_names, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - int log_offset, void *log_ctx); - -/** - * Evaluate a previously parsed expression. - * - * @param const_values a zero terminated array of values for the identifiers from av_expr_parse() const_names - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 - * @return the value of the expression - */ -double av_expr_eval(AVExpr *e, const double *const_values, void *opaque); - -/** - * Track the presence of variables and their number of occurrences in a parsed expression - * - * @param counter a zero-initialized array where the count of each variable will be stored - * @param size size of array - * @return 0 on success, a negative value indicates that no expression or array was passed - * or size was zero - */ -int av_expr_count_vars(AVExpr *e, unsigned *counter, int size); - -/** - * Track the presence of user provided functions and their number of occurrences - * in a parsed expression. - * - * @param counter a zero-initialized array where the count of each function will be stored - * if you passed 5 functions with 2 arguments to av_expr_parse() - * then for arg=2 this will use upto 5 entries. - * @param size size of array - * @param arg number of arguments the counted functions have - * @return 0 on success, a negative value indicates that no expression or array was passed - * or size was zero - */ -int av_expr_count_func(AVExpr *e, unsigned *counter, int size, int arg); - -/** - * Free a parsed expression previously created with av_expr_parse(). - */ -void av_expr_free(AVExpr *e); - -/** - * Parse the string in numstr and return its value as a double. If - * the string is empty, contains only whitespaces, or does not contain - * an initial substring that has the expected syntax for a - * floating-point number, no conversion is performed. In this case, - * returns a value of zero and the value returned in tail is the value - * of numstr. - * - * @param numstr a string representing a number, may contain one of - * the International System number postfixes, for example 'K', 'M', - * 'G'. If 'i' is appended after the postfix, powers of 2 are used - * instead of powers of 10. The 'B' postfix multiplies the value by - * 8, and can be appended after another postfix or used alone. This - * allows using for example 'KB', 'MiB', 'G' and 'B' as postfix. - * @param tail if non-NULL puts here the pointer to the char next - * after the last parsed character - */ -double av_strtod(const char *numstr, char **tail); - -#endif /* AVUTIL_EVAL_H */ diff --git a/prebuilts/x86_64/include/libavutil/ffversion.h b/prebuilts/x86_64/include/libavutil/ffversion.h deleted file mode 100644 index 7c7cb88..0000000 --- a/prebuilts/x86_64/include/libavutil/ffversion.h +++ /dev/null @@ -1,5 +0,0 @@ -/* Automatically generated by version.sh, do not manually edit! */ -#ifndef AVUTIL_FFVERSION_H -#define AVUTIL_FFVERSION_H -#define FFMPEG_VERSION "n4.4.2" -#endif /* AVUTIL_FFVERSION_H */ diff --git a/prebuilts/x86_64/include/libavutil/fifo.h b/prebuilts/x86_64/include/libavutil/fifo.h deleted file mode 100644 index dc7bc6f..0000000 --- a/prebuilts/x86_64/include/libavutil/fifo.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * a very simple circular buffer FIFO implementation - */ - -#ifndef AVUTIL_FIFO_H -#define AVUTIL_FIFO_H - -#include -#include "avutil.h" -#include "attributes.h" - -typedef struct AVFifoBuffer { - uint8_t *buffer; - uint8_t *rptr, *wptr, *end; - uint32_t rndx, wndx; -} AVFifoBuffer; - -/** - * Initialize an AVFifoBuffer. - * @param size of FIFO - * @return AVFifoBuffer or NULL in case of memory allocation failure - */ -AVFifoBuffer *av_fifo_alloc(unsigned int size); - -/** - * Initialize an AVFifoBuffer. - * @param nmemb number of elements - * @param size size of the single element - * @return AVFifoBuffer or NULL in case of memory allocation failure - */ -AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size); - -/** - * Free an AVFifoBuffer. - * @param f AVFifoBuffer to free - */ -void av_fifo_free(AVFifoBuffer *f); - -/** - * Free an AVFifoBuffer and reset pointer to NULL. - * @param f AVFifoBuffer to free - */ -void av_fifo_freep(AVFifoBuffer **f); - -/** - * Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied. - * @param f AVFifoBuffer to reset - */ -void av_fifo_reset(AVFifoBuffer *f); - -/** - * Return the amount of data in bytes in the AVFifoBuffer, that is the - * amount of data you can read from it. - * @param f AVFifoBuffer to read from - * @return size - */ -int av_fifo_size(const AVFifoBuffer *f); - -/** - * Return the amount of space in bytes in the AVFifoBuffer, that is the - * amount of data you can write into it. - * @param f AVFifoBuffer to write into - * @return size - */ -int av_fifo_space(const AVFifoBuffer *f); - -/** - * Feed data at specific position from an AVFifoBuffer to a user-supplied callback. - * Similar as av_fifo_gereric_read but without discarding data. - * @param f AVFifoBuffer to read from - * @param offset offset from current read position - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination - */ -int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_size, void (*func)(void*, void*, int)); - -/** - * Feed data from an AVFifoBuffer to a user-supplied callback. - * Similar as av_fifo_gereric_read but without discarding data. - * @param f AVFifoBuffer to read from - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination - */ -int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); - -/** - * Feed data from an AVFifoBuffer to a user-supplied callback. - * @param f AVFifoBuffer to read from - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination - */ -int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); - -/** - * Feed data from a user-supplied callback to an AVFifoBuffer. - * @param f AVFifoBuffer to write to - * @param src data source; non-const since it may be used as a - * modifiable context by the function defined in func - * @param size number of bytes to write - * @param func generic write function; the first parameter is src, - * the second is dest_buf, the third is dest_buf_size. - * func must return the number of bytes written to dest_buf, or <= 0 to - * indicate no more data available to write. - * If func is NULL, src is interpreted as a simple byte array for source data. - * @return the number of bytes written to the FIFO - */ -int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int)); - -/** - * Resize an AVFifoBuffer. - * In case of reallocation failure, the old FIFO is kept unchanged. - * - * @param f AVFifoBuffer to resize - * @param size new AVFifoBuffer size in bytes - * @return <0 for failure, >=0 otherwise - */ -int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); - -/** - * Enlarge an AVFifoBuffer. - * In case of reallocation failure, the old FIFO is kept unchanged. - * The new fifo size may be larger than the requested size. - * - * @param f AVFifoBuffer to resize - * @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size() - * @return <0 for failure, >=0 otherwise - */ -int av_fifo_grow(AVFifoBuffer *f, unsigned int additional_space); - -/** - * Read and discard the specified amount of data from an AVFifoBuffer. - * @param f AVFifoBuffer to read from - * @param size amount of data to read in bytes - */ -void av_fifo_drain(AVFifoBuffer *f, int size); - -/** - * Return a pointer to the data stored in a FIFO buffer at a certain offset. - * The FIFO buffer is not modified. - * - * @param f AVFifoBuffer to peek at, f must be non-NULL - * @param offs an offset in bytes, its absolute value must be less - * than the used buffer size or the returned pointer will - * point outside to the buffer data. - * The used buffer size can be checked with av_fifo_size(). - */ -static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs) -{ - uint8_t *ptr = f->rptr + offs; - if (ptr >= f->end) - ptr = f->buffer + (ptr - f->end); - else if (ptr < f->buffer) - ptr = f->end - (f->buffer - ptr); - return ptr; -} - -#endif /* AVUTIL_FIFO_H */ diff --git a/prebuilts/x86_64/include/libavutil/file.h b/prebuilts/x86_64/include/libavutil/file.h deleted file mode 100644 index 3ef4a60..0000000 --- a/prebuilts/x86_64/include/libavutil/file.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_FILE_H -#define AVUTIL_FILE_H - -#include - -#include "avutil.h" - -/** - * @file - * Misc file utilities. - */ - -/** - * Read the file with name filename, and put its content in a newly - * allocated buffer or map it with mmap() when available. - * In case of success set *bufptr to the read or mmapped buffer, and - * *size to the size in bytes of the buffer in *bufptr. - * Unlike mmap this function succeeds with zero sized files, in this - * case *bufptr will be set to NULL and *size will be set to 0. - * The returned buffer must be released with av_file_unmap(). - * - * @param log_offset loglevel offset used for logging - * @param log_ctx context used for logging - * @return a non negative number in case of success, a negative value - * corresponding to an AVERROR error code in case of failure - */ -av_warn_unused_result -int av_file_map(const char *filename, uint8_t **bufptr, size_t *size, - int log_offset, void *log_ctx); - -/** - * Unmap or free the buffer bufptr created by av_file_map(). - * - * @param size size in bytes of bufptr, must be the same as returned - * by av_file_map() - */ -void av_file_unmap(uint8_t *bufptr, size_t size); - -/** - * Wrapper to work around the lack of mkstemp() on mingw. - * Also, tries to create file in /tmp first, if possible. - * *prefix can be a character constant; *filename will be allocated internally. - * @return file descriptor of opened file (or negative value corresponding to an - * AVERROR code on error) - * and opened file name in **filename. - * @note On very old libcs it is necessary to set a secure umask before - * calling this, av_tempfile() can't call umask itself as it is used in - * libraries and could interfere with the calling application. - * @deprecated as fd numbers cannot be passed saftely between libs on some platforms - */ -int av_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx); - -#endif /* AVUTIL_FILE_H */ diff --git a/prebuilts/x86_64/include/libavutil/film_grain_params.h b/prebuilts/x86_64/include/libavutil/film_grain_params.h deleted file mode 100644 index 7629e3a..0000000 --- a/prebuilts/x86_64/include/libavutil/film_grain_params.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_FILM_GRAIN_PARAMS_H -#define AVUTIL_FILM_GRAIN_PARAMS_H - -#include "frame.h" - -enum AVFilmGrainParamsType { - AV_FILM_GRAIN_PARAMS_NONE = 0, - - /** - * The union is valid when interpreted as AVFilmGrainAOMParams (codec.aom) - */ - AV_FILM_GRAIN_PARAMS_AV1, -}; - -/** - * This structure describes how to handle film grain synthesis for AOM codecs. - * - * @note The struct must be allocated as part of AVFilmGrainParams using - * av_film_grain_params_alloc(). Its size is not a part of the public ABI. - */ -typedef struct AVFilmGrainAOMParams { - /** - * Number of points, and the scale and value for each point of the - * piecewise linear scaling function for the uma plane. - */ - int num_y_points; - uint8_t y_points[14][2 /* value, scaling */]; - - /** - * Signals whether to derive the chroma scaling function from the luma. - * Not equivalent to copying the luma values and scales. - */ - int chroma_scaling_from_luma; - - /** - * If chroma_scaling_from_luma is set to 0, signals the chroma scaling - * function parameters. - */ - int num_uv_points[2 /* cb, cr */]; - uint8_t uv_points[2 /* cb, cr */][10][2 /* value, scaling */]; - - /** - * Specifies the shift applied to the chroma components. For AV1, its within - * [8; 11] and determines the range and quantization of the film grain. - */ - int scaling_shift; - - /** - * Specifies the auto-regression lag. - */ - int ar_coeff_lag; - - /** - * Luma auto-regression coefficients. The number of coefficients is given by - * 2 * ar_coeff_lag * (ar_coeff_lag + 1). - */ - int8_t ar_coeffs_y[24]; - - /** - * Chroma auto-regression coefficients. The number of coefficients is given by - * 2 * ar_coeff_lag * (ar_coeff_lag + 1) + !!num_y_points. - */ - int8_t ar_coeffs_uv[2 /* cb, cr */][25]; - - /** - * Specifies the range of the auto-regressive coefficients. Values of 6, - * 7, 8 and so on represent a range of [-2, 2), [-1, 1), [-0.5, 0.5) and - * so on. For AV1 must be between 6 and 9. - */ - int ar_coeff_shift; - - /** - * Signals the down shift applied to the generated gaussian numbers during - * synthesis. - */ - int grain_scale_shift; - - /** - * Specifies the luma/chroma multipliers for the index to the component - * scaling function. - */ - int uv_mult[2 /* cb, cr */]; - int uv_mult_luma[2 /* cb, cr */]; - - /** - * Offset used for component scaling function. For AV1 its a 9-bit value - * with a range [-256, 255] - */ - int uv_offset[2 /* cb, cr */]; - - /** - * Signals whether to overlap film grain blocks. - */ - int overlap_flag; - - /** - * Signals to clip to limited color levels after film grain application. - */ - int limit_output_range; -} AVFilmGrainAOMParams; - -/** - * This structure describes how to handle film grain synthesis in video - * for specific codecs. Must be present on every frame where film grain is - * meant to be synthesised for correct presentation. - * - * @note The struct must be allocated with av_film_grain_params_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVFilmGrainParams { - /** - * Specifies the codec for which this structure is valid. - */ - enum AVFilmGrainParamsType type; - - /** - * Seed to use for the synthesis process, if the codec allows for it. - */ - uint64_t seed; - - /** - * Additional fields may be added both here and in any structure included. - * If a codec's film grain structure differs slightly over another - * codec's, fields within may change meaning depending on the type. - */ - union { - AVFilmGrainAOMParams aom; - } codec; -} AVFilmGrainParams; - -/** - * Allocate an AVFilmGrainParams structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * If size is not NULL it will be set to the number of bytes allocated. - * - * @return An AVFilmGrainParams filled with default values or NULL - * on failure. - */ -AVFilmGrainParams *av_film_grain_params_alloc(size_t *size); - -/** - * Allocate a complete AVFilmGrainParams and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVFilmGrainParams structure to be filled by caller. - */ -AVFilmGrainParams *av_film_grain_params_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_FILM_GRAIN_PARAMS_H */ diff --git a/prebuilts/x86_64/include/libavutil/frame.h b/prebuilts/x86_64/include/libavutil/frame.h deleted file mode 100644 index 7d1f8e2..0000000 --- a/prebuilts/x86_64/include/libavutil/frame.h +++ /dev/null @@ -1,997 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_frame - * reference-counted frame API - */ - -#ifndef AVUTIL_FRAME_H -#define AVUTIL_FRAME_H - -#include -#include - -#include "avutil.h" -#include "buffer.h" -#include "dict.h" -#include "rational.h" -#include "samplefmt.h" -#include "pixfmt.h" -#include "version.h" - - -/** - * @defgroup lavu_frame AVFrame - * @ingroup lavu_data - * - * @{ - * AVFrame is an abstraction for reference-counted raw multimedia data. - */ - -enum AVFrameSideDataType { - /** - * The data is the AVPanScan struct defined in libavcodec. - */ - AV_FRAME_DATA_PANSCAN, - /** - * ATSC A53 Part 4 Closed Captions. - * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data. - * The number of bytes of CC data is AVFrameSideData.size. - */ - AV_FRAME_DATA_A53_CC, - /** - * Stereoscopic 3d metadata. - * The data is the AVStereo3D struct defined in libavutil/stereo3d.h. - */ - AV_FRAME_DATA_STEREO3D, - /** - * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h. - */ - AV_FRAME_DATA_MATRIXENCODING, - /** - * Metadata relevant to a downmix procedure. - * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h. - */ - AV_FRAME_DATA_DOWNMIX_INFO, - /** - * ReplayGain information in the form of the AVReplayGain struct. - */ - AV_FRAME_DATA_REPLAYGAIN, - /** - * This side data contains a 3x3 transformation matrix describing an affine - * transformation that needs to be applied to the frame for correct - * presentation. - * - * See libavutil/display.h for a detailed description of the data. - */ - AV_FRAME_DATA_DISPLAYMATRIX, - /** - * Active Format Description data consisting of a single byte as specified - * in ETSI TS 101 154 using AVActiveFormatDescription enum. - */ - AV_FRAME_DATA_AFD, - /** - * Motion vectors exported by some codecs (on demand through the export_mvs - * flag set in the libavcodec AVCodecContext flags2 option). - * The data is the AVMotionVector struct defined in - * libavutil/motion_vector.h. - */ - AV_FRAME_DATA_MOTION_VECTORS, - /** - * Recommmends skipping the specified number of samples. This is exported - * only if the "skip_manual" AVOption is set in libavcodec. - * This has the same format as AV_PKT_DATA_SKIP_SAMPLES. - * @code - * u32le number of samples to skip from start of this packet - * u32le number of samples to skip from end of this packet - * u8 reason for start skip - * u8 reason for end skip (0=padding silence, 1=convergence) - * @endcode - */ - AV_FRAME_DATA_SKIP_SAMPLES, - /** - * This side data must be associated with an audio frame and corresponds to - * enum AVAudioServiceType defined in avcodec.h. - */ - AV_FRAME_DATA_AUDIO_SERVICE_TYPE, - /** - * Mastering display metadata associated with a video frame. The payload is - * an AVMasteringDisplayMetadata type and contains information about the - * mastering display color volume. - */ - AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, - /** - * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. - * This is set on the first frame of a GOP that has a temporal reference of 0. - */ - AV_FRAME_DATA_GOP_TIMECODE, - - /** - * The data represents the AVSphericalMapping structure defined in - * libavutil/spherical.h. - */ - AV_FRAME_DATA_SPHERICAL, - - /** - * Content light level (based on CTA-861.3). This payload contains data in - * the form of the AVContentLightMetadata struct. - */ - AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, - - /** - * The data contains an ICC profile as an opaque octet buffer following the - * format described by ISO 15076-1 with an optional name defined in the - * metadata key entry "name". - */ - AV_FRAME_DATA_ICC_PROFILE, - -#if FF_API_FRAME_QP - /** - * Implementation-specific description of the format of AV_FRAME_QP_TABLE_DATA. - * The contents of this side data are undocumented and internal; use - * av_frame_set_qp_table() and av_frame_get_qp_table() to access this in a - * meaningful way instead. - */ - AV_FRAME_DATA_QP_TABLE_PROPERTIES, - - /** - * Raw QP table data. Its format is described by - * AV_FRAME_DATA_QP_TABLE_PROPERTIES. Use av_frame_set_qp_table() and - * av_frame_get_qp_table() to access this instead. - */ - AV_FRAME_DATA_QP_TABLE_DATA, -#endif - - /** - * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t - * where the first uint32_t describes how many (1-3) of the other timecodes are used. - * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() - * function in libavutil/timecode.h. - */ - AV_FRAME_DATA_S12M_TIMECODE, - - /** - * HDR dynamic metadata associated with a video frame. The payload is - * an AVDynamicHDRPlus type and contains information for color - * volume transform - application 4 of SMPTE 2094-40:2016 standard. - */ - AV_FRAME_DATA_DYNAMIC_HDR_PLUS, - - /** - * Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of - * array element is implied by AVFrameSideData.size / AVRegionOfInterest.self_size. - */ - AV_FRAME_DATA_REGIONS_OF_INTEREST, - - /** - * Encoding parameters for a video frame, as described by AVVideoEncParams. - */ - AV_FRAME_DATA_VIDEO_ENC_PARAMS, - - /** - * User data unregistered metadata associated with a video frame. - * This is the H.26[45] UDU SEI message, and shouldn't be used for any other purpose - * The data is stored as uint8_t in AVFrameSideData.data which is 16 bytes of - * uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of user_data_payload_byte. - */ - AV_FRAME_DATA_SEI_UNREGISTERED, - - /** - * Film grain parameters for a frame, described by AVFilmGrainParams. - * Must be present for every frame which should have film grain applied. - */ - AV_FRAME_DATA_FILM_GRAIN_PARAMS, -}; - -enum AVActiveFormatDescription { - AV_AFD_SAME = 8, - AV_AFD_4_3 = 9, - AV_AFD_16_9 = 10, - AV_AFD_14_9 = 11, - AV_AFD_4_3_SP_14_9 = 13, - AV_AFD_16_9_SP_14_9 = 14, - AV_AFD_SP_4_3 = 15, -}; - - -/** - * Structure to hold side data for an AVFrame. - * - * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added - * to the end with a minor bump. - */ -typedef struct AVFrameSideData { - enum AVFrameSideDataType type; - uint8_t *data; -#if FF_API_BUFFER_SIZE_T - int size; -#else - size_t size; -#endif - AVDictionary *metadata; - AVBufferRef *buf; -} AVFrameSideData; - -/** - * Structure describing a single Region Of Interest. - * - * When multiple regions are defined in a single side-data block, they - * should be ordered from most to least important - some encoders are only - * capable of supporting a limited number of distinct regions, so will have - * to truncate the list. - * - * When overlapping regions are defined, the first region containing a given - * area of the frame applies. - */ -typedef struct AVRegionOfInterest { - /** - * Must be set to the size of this data structure (that is, - * sizeof(AVRegionOfInterest)). - */ - uint32_t self_size; - /** - * Distance in pixels from the top edge of the frame to the top and - * bottom edges and from the left edge of the frame to the left and - * right edges of the rectangle defining this region of interest. - * - * The constraints on a region are encoder dependent, so the region - * actually affected may be slightly larger for alignment or other - * reasons. - */ - int top; - int bottom; - int left; - int right; - /** - * Quantisation offset. - * - * Must be in the range -1 to +1. A value of zero indicates no quality - * change. A negative value asks for better quality (less quantisation), - * while a positive value asks for worse quality (greater quantisation). - * - * The range is calibrated so that the extreme values indicate the - * largest possible offset - if the rest of the frame is encoded with the - * worst possible quality, an offset of -1 indicates that this region - * should be encoded with the best possible quality anyway. Intermediate - * values are then interpolated in some codec-dependent way. - * - * For example, in 10-bit H.264 the quantisation parameter varies between - * -12 and 51. A typical qoffset value of -1/10 therefore indicates that - * this region should be encoded with a QP around one-tenth of the full - * range better than the rest of the frame. So, if most of the frame - * were to be encoded with a QP of around 30, this region would get a QP - * of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3). - * An extreme value of -1 would indicate that this region should be - * encoded with the best possible quality regardless of the treatment of - * the rest of the frame - that is, should be encoded at a QP of -12. - */ - AVRational qoffset; -} AVRegionOfInterest; - -/** - * This structure describes decoded (raw) audio or video data. - * - * AVFrame must be allocated using av_frame_alloc(). Note that this only - * allocates the AVFrame itself, the buffers for the data must be managed - * through other means (see below). - * AVFrame must be freed with av_frame_free(). - * - * AVFrame is typically allocated once and then reused multiple times to hold - * different data (e.g. a single AVFrame to hold frames received from a - * decoder). In such a case, av_frame_unref() will free any references held by - * the frame and reset it to its original clean state before it - * is reused again. - * - * The data described by an AVFrame is usually reference counted through the - * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / - * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at - * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, - * every single data plane must be contained in one of the buffers in - * AVFrame.buf or AVFrame.extended_buf. - * There may be a single buffer for all the data, or one separate buffer for - * each plane, or anything in between. - * - * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added - * to the end with a minor bump. - * - * Fields can be accessed through AVOptions, the name string used, matches the - * C structure field name for fields accessible through AVOptions. The AVClass - * for AVFrame can be obtained from avcodec_get_frame_class() - */ -typedef struct AVFrame { -#define AV_NUM_DATA_POINTERS 8 - /** - * pointer to the picture/channel planes. - * This might be different from the first allocated byte - * - * Some decoders access areas outside 0,0 - width,height, please - * see avcodec_align_dimensions2(). Some filters and swscale can read - * up to 16 bytes beyond the planes, if these filters are to be used, - * then 16 extra bytes must be allocated. - * - * NOTE: Except for hwaccel formats, pointers not needed by the format - * MUST be set to NULL. - */ - uint8_t *data[AV_NUM_DATA_POINTERS]; - - /** - * For video, size in bytes of each picture line. - * For audio, size in bytes of each plane. - * - * For audio, only linesize[0] may be set. For planar audio, each channel - * plane must be the same size. - * - * For video the linesizes should be multiples of the CPUs alignment - * preference, this is 16 or 32 for modern desktop CPUs. - * Some code requires such alignment other code can be slower without - * correct alignment, for yet other it makes no difference. - * - * @note The linesize may be larger than the size of usable data -- there - * may be extra padding present for performance reasons. - */ - int linesize[AV_NUM_DATA_POINTERS]; - - /** - * pointers to the data planes/channels. - * - * For video, this should simply point to data[]. - * - * For planar audio, each channel has a separate data pointer, and - * linesize[0] contains the size of each channel buffer. - * For packed audio, there is just one data pointer, and linesize[0] - * contains the total size of the buffer for all channels. - * - * Note: Both data and extended_data should always be set in a valid frame, - * but for planar audio with more channels that can fit in data, - * extended_data must be used in order to access all channels. - */ - uint8_t **extended_data; - - /** - * @name Video dimensions - * Video frames only. The coded dimensions (in pixels) of the video frame, - * i.e. the size of the rectangle that contains some well-defined values. - * - * @note The part of the frame intended for display/presentation is further - * restricted by the @ref cropping "Cropping rectangle". - * @{ - */ - int width, height; - /** - * @} - */ - - /** - * number of audio samples (per channel) described by this frame - */ - int nb_samples; - - /** - * format of the frame, -1 if unknown or unset - * Values correspond to enum AVPixelFormat for video frames, - * enum AVSampleFormat for audio) - */ - int format; - - /** - * 1 -> keyframe, 0-> not - */ - int key_frame; - - /** - * Picture type of the frame. - */ - enum AVPictureType pict_type; - - /** - * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified. - */ - AVRational sample_aspect_ratio; - - /** - * Presentation timestamp in time_base units (time when frame should be shown to user). - */ - int64_t pts; - -#if FF_API_PKT_PTS - /** - * PTS copied from the AVPacket that was decoded to produce this frame. - * @deprecated use the pts field instead - */ - attribute_deprecated - int64_t pkt_pts; -#endif - - /** - * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used) - * This is also the Presentation time of this AVFrame calculated from - * only AVPacket.dts values without pts values. - */ - int64_t pkt_dts; - - /** - * picture number in bitstream order - */ - int coded_picture_number; - /** - * picture number in display order - */ - int display_picture_number; - - /** - * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) - */ - int quality; - - /** - * for some private data of the user - */ - void *opaque; - -#if FF_API_ERROR_FRAME - /** - * @deprecated unused - */ - attribute_deprecated - uint64_t error[AV_NUM_DATA_POINTERS]; -#endif - - /** - * When decoding, this signals how much the picture must be delayed. - * extra_delay = repeat_pict / (2*fps) - */ - int repeat_pict; - - /** - * The content of the picture is interlaced. - */ - int interlaced_frame; - - /** - * If the content is interlaced, is top field displayed first. - */ - int top_field_first; - - /** - * Tell user application that palette has changed from previous frame. - */ - int palette_has_changed; - - /** - * reordered opaque 64 bits (generally an integer or a double precision float - * PTS but can be anything). - * The user sets AVCodecContext.reordered_opaque to represent the input at - * that time, - * the decoder reorders values as needed and sets AVFrame.reordered_opaque - * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque - */ - int64_t reordered_opaque; - - /** - * Sample rate of the audio data. - */ - int sample_rate; - - /** - * Channel layout of the audio data. - */ - uint64_t channel_layout; - - /** - * AVBuffer references backing the data for this frame. If all elements of - * this array are NULL, then this frame is not reference counted. This array - * must be filled contiguously -- if buf[i] is non-NULL then buf[j] must - * also be non-NULL for all j < i. - * - * There may be at most one AVBuffer per data plane, so for video this array - * always contains all the references. For planar audio with more than - * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in - * this array. Then the extra AVBufferRef pointers are stored in the - * extended_buf array. - */ - AVBufferRef *buf[AV_NUM_DATA_POINTERS]; - - /** - * For planar audio which requires more than AV_NUM_DATA_POINTERS - * AVBufferRef pointers, this array will hold all the references which - * cannot fit into AVFrame.buf. - * - * Note that this is different from AVFrame.extended_data, which always - * contains all the pointers. This array only contains the extra pointers, - * which cannot fit into AVFrame.buf. - * - * This array is always allocated using av_malloc() by whoever constructs - * the frame. It is freed in av_frame_unref(). - */ - AVBufferRef **extended_buf; - /** - * Number of elements in extended_buf. - */ - int nb_extended_buf; - - AVFrameSideData **side_data; - int nb_side_data; - -/** - * @defgroup lavu_frame_flags AV_FRAME_FLAGS - * @ingroup lavu_frame - * Flags describing additional frame properties. - * - * @{ - */ - -/** - * The frame data may be corrupted, e.g. due to decoding errors. - */ -#define AV_FRAME_FLAG_CORRUPT (1 << 0) -/** - * A flag to mark the frames which need to be decoded, but shouldn't be output. - */ -#define AV_FRAME_FLAG_DISCARD (1 << 2) -/** - * @} - */ - - /** - * Frame flags, a combination of @ref lavu_frame_flags - */ - int flags; - - /** - * MPEG vs JPEG YUV range. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorRange color_range; - - enum AVColorPrimaries color_primaries; - - enum AVColorTransferCharacteristic color_trc; - - /** - * YUV colorspace type. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorSpace colorspace; - - enum AVChromaLocation chroma_location; - - /** - * frame timestamp estimated using various heuristics, in stream time base - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int64_t best_effort_timestamp; - - /** - * reordered pos from the last AVPacket that has been input into the decoder - * - encoding: unused - * - decoding: Read by user. - */ - int64_t pkt_pos; - - /** - * duration of the corresponding packet, expressed in - * AVStream->time_base units, 0 if unknown. - * - encoding: unused - * - decoding: Read by user. - */ - int64_t pkt_duration; - - /** - * metadata. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - AVDictionary *metadata; - - /** - * decode error flags of the frame, set to a combination of - * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there - * were errors during the decoding. - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int decode_error_flags; -#define FF_DECODE_ERROR_INVALID_BITSTREAM 1 -#define FF_DECODE_ERROR_MISSING_REFERENCE 2 -#define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4 -#define FF_DECODE_ERROR_DECODE_SLICES 8 - - /** - * number of audio channels, only used for audio. - * - encoding: unused - * - decoding: Read by user. - */ - int channels; - - /** - * size of the corresponding packet containing the compressed - * frame. - * It is set to a negative value if unknown. - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int pkt_size; - -#if FF_API_FRAME_QP - /** - * QP table - */ - attribute_deprecated - int8_t *qscale_table; - /** - * QP store stride - */ - attribute_deprecated - int qstride; - - attribute_deprecated - int qscale_type; - - attribute_deprecated - AVBufferRef *qp_table_buf; -#endif - /** - * For hwaccel-format frames, this should be a reference to the - * AVHWFramesContext describing the frame. - */ - AVBufferRef *hw_frames_ctx; - - /** - * AVBufferRef for free use by the API user. FFmpeg will never check the - * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when - * the frame is unreferenced. av_frame_copy_props() calls create a new - * reference with av_buffer_ref() for the target frame's opaque_ref field. - * - * This is unrelated to the opaque field, although it serves a similar - * purpose. - */ - AVBufferRef *opaque_ref; - - /** - * @anchor cropping - * @name Cropping - * Video frames only. The number of pixels to discard from the the - * top/bottom/left/right border of the frame to obtain the sub-rectangle of - * the frame intended for presentation. - * @{ - */ - size_t crop_top; - size_t crop_bottom; - size_t crop_left; - size_t crop_right; - /** - * @} - */ - - /** - * AVBufferRef for internal use by a single libav* library. - * Must not be used to transfer data between libraries. - * Has to be NULL when ownership of the frame leaves the respective library. - * - * Code outside the FFmpeg libs should never check or change the contents of the buffer ref. - * - * FFmpeg calls av_buffer_unref() on it when the frame is unreferenced. - * av_frame_copy_props() calls create a new reference with av_buffer_ref() - * for the target frame's private_ref field. - */ - AVBufferRef *private_ref; -} AVFrame; - -#if FF_API_FRAME_GET_SET -/** - * Accessors for some AVFrame fields. These used to be provided for ABI - * compatibility, and do not need to be used anymore. - */ -attribute_deprecated -int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame); -attribute_deprecated -void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val); -attribute_deprecated -int64_t av_frame_get_pkt_duration (const AVFrame *frame); -attribute_deprecated -void av_frame_set_pkt_duration (AVFrame *frame, int64_t val); -attribute_deprecated -int64_t av_frame_get_pkt_pos (const AVFrame *frame); -attribute_deprecated -void av_frame_set_pkt_pos (AVFrame *frame, int64_t val); -attribute_deprecated -int64_t av_frame_get_channel_layout (const AVFrame *frame); -attribute_deprecated -void av_frame_set_channel_layout (AVFrame *frame, int64_t val); -attribute_deprecated -int av_frame_get_channels (const AVFrame *frame); -attribute_deprecated -void av_frame_set_channels (AVFrame *frame, int val); -attribute_deprecated -int av_frame_get_sample_rate (const AVFrame *frame); -attribute_deprecated -void av_frame_set_sample_rate (AVFrame *frame, int val); -attribute_deprecated -AVDictionary *av_frame_get_metadata (const AVFrame *frame); -attribute_deprecated -void av_frame_set_metadata (AVFrame *frame, AVDictionary *val); -attribute_deprecated -int av_frame_get_decode_error_flags (const AVFrame *frame); -attribute_deprecated -void av_frame_set_decode_error_flags (AVFrame *frame, int val); -attribute_deprecated -int av_frame_get_pkt_size(const AVFrame *frame); -attribute_deprecated -void av_frame_set_pkt_size(AVFrame *frame, int val); -#if FF_API_FRAME_QP -attribute_deprecated -int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type); -attribute_deprecated -int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type); -#endif -attribute_deprecated -enum AVColorSpace av_frame_get_colorspace(const AVFrame *frame); -attribute_deprecated -void av_frame_set_colorspace(AVFrame *frame, enum AVColorSpace val); -attribute_deprecated -enum AVColorRange av_frame_get_color_range(const AVFrame *frame); -attribute_deprecated -void av_frame_set_color_range(AVFrame *frame, enum AVColorRange val); -#endif - -/** - * Get the name of a colorspace. - * @return a static string identifying the colorspace; can be NULL. - */ -const char *av_get_colorspace_name(enum AVColorSpace val); - -/** - * Allocate an AVFrame and set its fields to default values. The resulting - * struct must be freed using av_frame_free(). - * - * @return An AVFrame filled with default values or NULL on failure. - * - * @note this only allocates the AVFrame itself, not the data buffers. Those - * must be allocated through other means, e.g. with av_frame_get_buffer() or - * manually. - */ -AVFrame *av_frame_alloc(void); - -/** - * Free the frame and any dynamically allocated objects in it, - * e.g. extended_data. If the frame is reference counted, it will be - * unreferenced first. - * - * @param frame frame to be freed. The pointer will be set to NULL. - */ -void av_frame_free(AVFrame **frame); - -/** - * Set up a new reference to the data described by the source frame. - * - * Copy frame properties from src to dst and create a new reference for each - * AVBufferRef from src. - * - * If src is not reference counted, new buffers are allocated and the data is - * copied. - * - * @warning: dst MUST have been either unreferenced with av_frame_unref(dst), - * or newly allocated with av_frame_alloc() before calling this - * function, or undefined behavior will occur. - * - * @return 0 on success, a negative AVERROR on error - */ -int av_frame_ref(AVFrame *dst, const AVFrame *src); - -/** - * Create a new frame that references the same data as src. - * - * This is a shortcut for av_frame_alloc()+av_frame_ref(). - * - * @return newly created AVFrame on success, NULL on error. - */ -AVFrame *av_frame_clone(const AVFrame *src); - -/** - * Unreference all the buffers referenced by frame and reset the frame fields. - */ -void av_frame_unref(AVFrame *frame); - -/** - * Move everything contained in src to dst and reset src. - * - * @warning: dst is not unreferenced, but directly overwritten without reading - * or deallocating its contents. Call av_frame_unref(dst) manually - * before calling this function to ensure that no memory is leaked. - */ -void av_frame_move_ref(AVFrame *dst, AVFrame *src); - -/** - * Allocate new buffer(s) for audio or video data. - * - * The following fields must be set on frame before calling this function: - * - format (pixel format for video, sample format for audio) - * - width and height for video - * - nb_samples and channel_layout for audio - * - * This function will fill AVFrame.data and AVFrame.buf arrays and, if - * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. - * For planar formats, one buffer will be allocated for each plane. - * - * @warning: if frame already has been allocated, calling this function will - * leak memory. In addition, undefined behavior can occur in certain - * cases. - * - * @param frame frame in which to store the new buffers. - * @param align Required buffer size alignment. If equal to 0, alignment will be - * chosen automatically for the current CPU. It is highly - * recommended to pass 0 here unless you know what you are doing. - * - * @return 0 on success, a negative AVERROR on error. - */ -int av_frame_get_buffer(AVFrame *frame, int align); - -/** - * Check if the frame data is writable. - * - * @return A positive value if the frame data is writable (which is true if and - * only if each of the underlying buffers has only one reference, namely the one - * stored in this frame). Return 0 otherwise. - * - * If 1 is returned the answer is valid until av_buffer_ref() is called on any - * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). - * - * @see av_frame_make_writable(), av_buffer_is_writable() - */ -int av_frame_is_writable(AVFrame *frame); - -/** - * Ensure that the frame data is writable, avoiding data copy if possible. - * - * Do nothing if the frame is writable, allocate new buffers and copy the data - * if it is not. - * - * @return 0 on success, a negative AVERROR on error. - * - * @see av_frame_is_writable(), av_buffer_is_writable(), - * av_buffer_make_writable() - */ -int av_frame_make_writable(AVFrame *frame); - -/** - * Copy the frame data from src to dst. - * - * This function does not allocate anything, dst must be already initialized and - * allocated with the same parameters as src. - * - * This function only copies the frame data (i.e. the contents of the data / - * extended data arrays), not any other properties. - * - * @return >= 0 on success, a negative AVERROR on error. - */ -int av_frame_copy(AVFrame *dst, const AVFrame *src); - -/** - * Copy only "metadata" fields from src to dst. - * - * Metadata for the purpose of this function are those fields that do not affect - * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample - * aspect ratio (for video), but not width/height or channel layout. - * Side data is also copied. - */ -int av_frame_copy_props(AVFrame *dst, const AVFrame *src); - -/** - * Get the buffer reference a given data plane is stored in. - * - * @param plane index of the data plane of interest in frame->extended_data. - * - * @return the buffer reference that contains the plane or NULL if the input - * frame is not valid. - */ -AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane); - -/** - * Add a new side data to a frame. - * - * @param frame a frame to which the side data should be added - * @param type type of the added side data - * @param size size of the side data - * - * @return newly added side data on success, NULL on error - */ -AVFrameSideData *av_frame_new_side_data(AVFrame *frame, - enum AVFrameSideDataType type, -#if FF_API_BUFFER_SIZE_T - int size); -#else - size_t size); -#endif - -/** - * Add a new side data to a frame from an existing AVBufferRef - * - * @param frame a frame to which the side data should be added - * @param type the type of the added side data - * @param buf an AVBufferRef to add as side data. The ownership of - * the reference is transferred to the frame. - * - * @return newly added side data on success, NULL on error. On failure - * the frame is unchanged and the AVBufferRef remains owned by - * the caller. - */ -AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame, - enum AVFrameSideDataType type, - AVBufferRef *buf); - -/** - * @return a pointer to the side data of a given type on success, NULL if there - * is no side data with such type in this frame. - */ -AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, - enum AVFrameSideDataType type); - -/** - * Remove and free all side data instances of the given type. - */ -void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type); - - -/** - * Flags for frame cropping. - */ -enum { - /** - * Apply the maximum possible cropping, even if it requires setting the - * AVFrame.data[] entries to unaligned pointers. Passing unaligned data - * to FFmpeg API is generally not allowed, and causes undefined behavior - * (such as crashes). You can pass unaligned data only to FFmpeg APIs that - * are explicitly documented to accept it. Use this flag only if you - * absolutely know what you are doing. - */ - AV_FRAME_CROP_UNALIGNED = 1 << 0, -}; - -/** - * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/ - * crop_bottom fields. If cropping is successful, the function will adjust the - * data pointers and the width/height fields, and set the crop fields to 0. - * - * In all cases, the cropping boundaries will be rounded to the inherent - * alignment of the pixel format. In some cases, such as for opaque hwaccel - * formats, the left/top cropping is ignored. The crop fields are set to 0 even - * if the cropping was rounded or ignored. - * - * @param frame the frame which should be cropped - * @param flags Some combination of AV_FRAME_CROP_* flags, or 0. - * - * @return >= 0 on success, a negative AVERROR on error. If the cropping fields - * were invalid, AVERROR(ERANGE) is returned, and nothing is changed. - */ -int av_frame_apply_cropping(AVFrame *frame, int flags); - -/** - * @return a string identifying the side data type - */ -const char *av_frame_side_data_name(enum AVFrameSideDataType type); - -/** - * @} - */ - -#endif /* AVUTIL_FRAME_H */ diff --git a/prebuilts/x86_64/include/libavutil/hash.h b/prebuilts/x86_64/include/libavutil/hash.h deleted file mode 100644 index af4719e..0000000 --- a/prebuilts/x86_64/include/libavutil/hash.h +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright (C) 2013 Reimar Döffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_hash_generic - * Generic hashing API - */ - -#ifndef AVUTIL_HASH_H -#define AVUTIL_HASH_H - -#include -#include - -#include "version.h" - -/** - * @defgroup lavu_hash Hash Functions - * @ingroup lavu_crypto - * Hash functions useful in multimedia. - * - * Hash functions are widely used in multimedia, from error checking and - * concealment to internal regression testing. libavutil has efficient - * implementations of a variety of hash functions that may be useful for - * FFmpeg and other multimedia applications. - * - * @{ - * - * @defgroup lavu_hash_generic Generic Hashing API - * An abstraction layer for all hash functions supported by libavutil. - * - * If your application needs to support a wide range of different hash - * functions, then the Generic Hashing API is for you. It provides a generic, - * reusable API for @ref lavu_hash "all hash functions" implemented in libavutil. - * If you just need to use one particular hash function, use the @ref lavu_hash - * "individual hash" directly. - * - * @section Sample Code - * - * A basic template for using the Generic Hashing API follows: - * - * @code - * struct AVHashContext *ctx = NULL; - * const char *hash_name = NULL; - * uint8_t *output_buf = NULL; - * - * // Select from a string returned by av_hash_names() - * hash_name = ...; - * - * // Allocate a hash context - * ret = av_hash_alloc(&ctx, hash_name); - * if (ret < 0) - * return ret; - * - * // Initialize the hash context - * av_hash_init(ctx); - * - * // Update the hash context with data - * while (data_left) { - * av_hash_update(ctx, data, size); - * } - * - * // Now we have no more data, so it is time to finalize the hash and get the - * // output. But we need to first allocate an output buffer. Note that you can - * // use any memory allocation function, including malloc(), not just - * // av_malloc(). - * output_buf = av_malloc(av_hash_get_size(ctx)); - * if (!output_buf) - * return AVERROR(ENOMEM); - * - * // Finalize the hash context. - * // You can use any of the av_hash_final*() functions provided, for other - * // output formats. If you do so, be sure to adjust the memory allocation - * // above. See the function documentation below for the exact amount of extra - * // memory needed. - * av_hash_final(ctx, output_buffer); - * - * // Free the context - * av_hash_freep(&ctx); - * @endcode - * - * @section Hash Function-Specific Information - * If the CRC32 hash is selected, the #AV_CRC_32_IEEE polynomial will be - * used. - * - * If the Murmur3 hash is selected, the default seed will be used. See @ref - * lavu_murmur3_seedinfo "Murmur3" for more information. - * - * @{ - */ - -/** - * @example ffhash.c - * This example is a simple command line application that takes one or more - * arguments. It demonstrates a typical use of the hashing API with allocation, - * initialization, updating, and finalizing. - */ - -struct AVHashContext; - -/** - * Allocate a hash context for the algorithm specified by name. - * - * @return >= 0 for success, a negative error code for failure - * - * @note The context is not initialized after a call to this function; you must - * call av_hash_init() to do so. - */ -int av_hash_alloc(struct AVHashContext **ctx, const char *name); - -/** - * Get the names of available hash algorithms. - * - * This function can be used to enumerate the algorithms. - * - * @param[in] i Index of the hash algorithm, starting from 0 - * @return Pointer to a static string or `NULL` if `i` is out of range - */ -const char *av_hash_names(int i); - -/** - * Get the name of the algorithm corresponding to the given hash context. - */ -const char *av_hash_get_name(const struct AVHashContext *ctx); - -/** - * Maximum value that av_hash_get_size() will currently return. - * - * You can use this if you absolutely want or need to use static allocation for - * the output buffer and are fine with not supporting hashes newly added to - * libavutil without recompilation. - * - * @warning - * Adding new hashes with larger sizes, and increasing the macro while doing - * so, will not be considered an ABI change. To prevent your code from - * overflowing a buffer, either dynamically allocate the output buffer with - * av_hash_get_size(), or limit your use of the Hashing API to hashes that are - * already in FFmpeg during the time of compilation. - */ -#define AV_HASH_MAX_SIZE 64 - -/** - * Get the size of the resulting hash value in bytes. - * - * The maximum value this function will currently return is available as macro - * #AV_HASH_MAX_SIZE. - * - * @param[in] ctx Hash context - * @return Size of the hash value in bytes - */ -int av_hash_get_size(const struct AVHashContext *ctx); - -/** - * Initialize or reset a hash context. - * - * @param[in,out] ctx Hash context - */ -void av_hash_init(struct AVHashContext *ctx); - -/** - * Update a hash context with additional data. - * - * @param[in,out] ctx Hash context - * @param[in] src Data to be added to the hash context - * @param[in] len Size of the additional data - */ -#if FF_API_CRYPTO_SIZE_T -void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, int len); -#else -void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, size_t len); -#endif - -/** - * Finalize a hash context and compute the actual hash value. - * - * The minimum size of `dst` buffer is given by av_hash_get_size() or - * #AV_HASH_MAX_SIZE. The use of the latter macro is discouraged. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * - * @see av_hash_final_bin() provides an alternative API - */ -void av_hash_final(struct AVHashContext *ctx, uint8_t *dst); - -/** - * Finalize a hash context and store the actual hash value in a buffer. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * If `size` is smaller than the hash size (given by av_hash_get_size()), the - * hash is truncated; if size is larger, the buffer is padded with 0. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * @param[in] size Number of bytes to write to `dst` - */ -void av_hash_final_bin(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Finalize a hash context and store the hexadecimal representation of the - * actual hash value as a string. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * The string is always 0-terminated. - * - * If `size` is smaller than `2 * hash_size + 1`, where `hash_size` is the - * value returned by av_hash_get_size(), the string will be truncated. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the string will be stored - * @param[in] size Maximum number of bytes to write to `dst` - */ -void av_hash_final_hex(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Finalize a hash context and store the Base64 representation of the - * actual hash value as a string. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * The string is always 0-terminated. - * - * If `size` is smaller than AV_BASE64_SIZE(hash_size), where `hash_size` is - * the value returned by av_hash_get_size(), the string will be truncated. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * @param[in] size Maximum number of bytes to write to `dst` - */ -void av_hash_final_b64(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Free hash context and set hash context pointer to `NULL`. - * - * @param[in,out] ctx Pointer to hash context - */ -void av_hash_freep(struct AVHashContext **ctx); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_HASH_H */ diff --git a/prebuilts/x86_64/include/libavutil/hdr_dynamic_metadata.h b/prebuilts/x86_64/include/libavutil/hdr_dynamic_metadata.h deleted file mode 100644 index 2d72de5..0000000 --- a/prebuilts/x86_64/include/libavutil/hdr_dynamic_metadata.h +++ /dev/null @@ -1,343 +0,0 @@ -/* - * Copyright (c) 2018 Mohammad Izadi - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HDR_DYNAMIC_METADATA_H -#define AVUTIL_HDR_DYNAMIC_METADATA_H - -#include "frame.h" -#include "rational.h" - -/** - * Option for overlapping elliptical pixel selectors in an image. - */ -enum AVHDRPlusOverlapProcessOption { - AV_HDR_PLUS_OVERLAP_PROCESS_WEIGHTED_AVERAGING = 0, - AV_HDR_PLUS_OVERLAP_PROCESS_LAYERING = 1, -}; - -/** - * Represents the percentile at a specific percentage in - * a distribution. - */ -typedef struct AVHDRPlusPercentile { - /** - * The percentage value corresponding to a specific percentile linearized - * RGB value in the processing window in the scene. The value shall be in - * the range of 0 to100, inclusive. - */ - uint8_t percentage; - - /** - * The linearized maxRGB value at a specific percentile in the processing - * window in the scene. The value shall be in the range of 0 to 1, inclusive - * and in multiples of 0.00001. - */ - AVRational percentile; -} AVHDRPlusPercentile; - -/** - * Color transform parameters at a processing window in a dynamic metadata for - * SMPTE 2094-40. - */ -typedef struct AVHDRPlusColorTransformParams { - /** - * The relative x coordinate of the top left pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(width of Picture - 1). The value 1 corresponds - * to the absolute coordinate of width of Picture - 1. The value for - * first processing window shall be 0. - */ - AVRational window_upper_left_corner_x; - - /** - * The relative y coordinate of the top left pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(height of Picture - 1). The value 1 corresponds - * to the absolute coordinate of height of Picture - 1. The value for - * first processing window shall be 0. - */ - AVRational window_upper_left_corner_y; - - /** - * The relative x coordinate of the bottom right pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(width of Picture - 1). The value 1 corresponds - * to the absolute coordinate of width of Picture - 1. The value for - * first processing window shall be 1. - */ - AVRational window_lower_right_corner_x; - - /** - * The relative y coordinate of the bottom right pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(height of Picture - 1). The value 1 corresponds - * to the absolute coordinate of height of Picture - 1. The value for - * first processing window shall be 1. - */ - AVRational window_lower_right_corner_y; - - /** - * The x coordinate of the center position of the concentric internal and - * external ellipses of the elliptical pixel selector in the processing - * window. The value shall be in the range of 0 to (width of Picture - 1), - * inclusive and in multiples of 1 pixel. - */ - uint16_t center_of_ellipse_x; - - /** - * The y coordinate of the center position of the concentric internal and - * external ellipses of the elliptical pixel selector in the processing - * window. The value shall be in the range of 0 to (height of Picture - 1), - * inclusive and in multiples of 1 pixel. - */ - uint16_t center_of_ellipse_y; - - /** - * The clockwise rotation angle in degree of arc with respect to the - * positive direction of the x-axis of the concentric internal and external - * ellipses of the elliptical pixel selector in the processing window. The - * value shall be in the range of 0 to 180, inclusive and in multiples of 1. - */ - uint8_t rotation_angle; - - /** - * The semi-major axis value of the internal ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value shall be - * in the range of 1 to 65535, inclusive and in multiples of 1 pixel. - */ - uint16_t semimajor_axis_internal_ellipse; - - /** - * The semi-major axis value of the external ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value - * shall not be less than semimajor_axis_internal_ellipse of the current - * processing window. The value shall be in the range of 1 to 65535, - * inclusive and in multiples of 1 pixel. - */ - uint16_t semimajor_axis_external_ellipse; - - /** - * The semi-minor axis value of the external ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value shall be - * in the range of 1 to 65535, inclusive and in multiples of 1 pixel. - */ - uint16_t semiminor_axis_external_ellipse; - - /** - * Overlap process option indicates one of the two methods of combining - * rendered pixels in the processing window in an image with at least one - * elliptical pixel selector. For overlapping elliptical pixel selectors - * in an image, overlap_process_option shall have the same value. - */ - enum AVHDRPlusOverlapProcessOption overlap_process_option; - - /** - * The maximum of the color components of linearized RGB values in the - * processing window in the scene. The values should be in the range of 0 to - * 1, inclusive and in multiples of 0.00001. maxscl[ 0 ], maxscl[ 1 ], and - * maxscl[ 2 ] are corresponding to R, G, B color components respectively. - */ - AVRational maxscl[3]; - - /** - * The average of linearized maxRGB values in the processing window in the - * scene. The value should be in the range of 0 to 1, inclusive and in - * multiples of 0.00001. - */ - AVRational average_maxrgb; - - /** - * The number of linearized maxRGB values at given percentiles in the - * processing window in the scene. The maximum value shall be 15. - */ - uint8_t num_distribution_maxrgb_percentiles; - - /** - * The linearized maxRGB values at given percentiles in the - * processing window in the scene. - */ - AVHDRPlusPercentile distribution_maxrgb[15]; - - /** - * The fraction of selected pixels in the image that contains the brightest - * pixel in the scene. The value shall be in the range of 0 to 1, inclusive - * and in multiples of 0.001. - */ - AVRational fraction_bright_pixels; - - /** - * This flag indicates that the metadata for the tone mapping function in - * the processing window is present (for value of 1). - */ - uint8_t tone_mapping_flag; - - /** - * The x coordinate of the separation point between the linear part and the - * curved part of the tone mapping function. The value shall be in the range - * of 0 to 1, excluding 0 and in multiples of 1/4095. - */ - AVRational knee_point_x; - - /** - * The y coordinate of the separation point between the linear part and the - * curved part of the tone mapping function. The value shall be in the range - * of 0 to 1, excluding 0 and in multiples of 1/4095. - */ - AVRational knee_point_y; - - /** - * The number of the intermediate anchor parameters of the tone mapping - * function in the processing window. The maximum value shall be 15. - */ - uint8_t num_bezier_curve_anchors; - - /** - * The intermediate anchor parameters of the tone mapping function in the - * processing window in the scene. The values should be in the range of 0 - * to 1, inclusive and in multiples of 1/1023. - */ - AVRational bezier_curve_anchors[15]; - - /** - * This flag shall be equal to 0 in bitstreams conforming to this version of - * this Specification. Other values are reserved for future use. - */ - uint8_t color_saturation_mapping_flag; - - /** - * The color saturation gain in the processing window in the scene. The - * value shall be in the range of 0 to 63/8, inclusive and in multiples of - * 1/8. The default value shall be 1. - */ - AVRational color_saturation_weight; -} AVHDRPlusColorTransformParams; - -/** - * This struct represents dynamic metadata for color volume transform - - * application 4 of SMPTE 2094-40:2016 standard. - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with - * av_dynamic_hdr_plus_alloc() and its size is not a part of - * the public ABI. - */ -typedef struct AVDynamicHDRPlus { - /** - * Country code by Rec. ITU-T T.35 Annex A. The value shall be 0xB5. - */ - uint8_t itu_t_t35_country_code; - - /** - * Application version in the application defining document in ST-2094 - * suite. The value shall be set to 0. - */ - uint8_t application_version; - - /** - * The number of processing windows. The value shall be in the range - * of 1 to 3, inclusive. - */ - uint8_t num_windows; - - /** - * The color transform parameters for every processing window. - */ - AVHDRPlusColorTransformParams params[3]; - - /** - * The nominal maximum display luminance of the targeted system display, - * in units of 0.0001 candelas per square metre. The value shall be in - * the range of 0 to 10000, inclusive. - */ - AVRational targeted_system_display_maximum_luminance; - - /** - * This flag shall be equal to 0 in bit streams conforming to this version - * of this Specification. The value 1 is reserved for future use. - */ - uint8_t targeted_system_display_actual_peak_luminance_flag; - - /** - * The number of rows in the targeted system_display_actual_peak_luminance - * array. The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_rows_targeted_system_display_actual_peak_luminance; - - /** - * The number of columns in the - * targeted_system_display_actual_peak_luminance array. The value shall be - * in the range of 2 to 25, inclusive. - */ - uint8_t num_cols_targeted_system_display_actual_peak_luminance; - - /** - * The normalized actual peak luminance of the targeted system display. The - * values should be in the range of 0 to 1, inclusive and in multiples of - * 1/15. - */ - AVRational targeted_system_display_actual_peak_luminance[25][25]; - - /** - * This flag shall be equal to 0 in bitstreams conforming to this version of - * this Specification. The value 1 is reserved for future use. - */ - uint8_t mastering_display_actual_peak_luminance_flag; - - /** - * The number of rows in the mastering_display_actual_peak_luminance array. - * The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_rows_mastering_display_actual_peak_luminance; - - /** - * The number of columns in the mastering_display_actual_peak_luminance - * array. The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_cols_mastering_display_actual_peak_luminance; - - /** - * The normalized actual peak luminance of the mastering display used for - * mastering the image essence. The values should be in the range of 0 to 1, - * inclusive and in multiples of 1/15. - */ - AVRational mastering_display_actual_peak_luminance[25][25]; -} AVDynamicHDRPlus; - -/** - * Allocate an AVDynamicHDRPlus structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVDynamicHDRPlus filled with default values or NULL - * on failure. - */ -AVDynamicHDRPlus *av_dynamic_hdr_plus_alloc(size_t *size); - -/** - * Allocate a complete AVDynamicHDRPlus and add it to the frame. - * @param frame The frame which side data is added to. - * - * @return The AVDynamicHDRPlus structure to be filled by caller or NULL - * on failure. - */ -AVDynamicHDRPlus *av_dynamic_hdr_plus_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_HDR_DYNAMIC_METADATA_H */ diff --git a/prebuilts/x86_64/include/libavutil/hmac.h b/prebuilts/x86_64/include/libavutil/hmac.h deleted file mode 100644 index 412e950..0000000 --- a/prebuilts/x86_64/include/libavutil/hmac.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2012 Martin Storsjo - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HMAC_H -#define AVUTIL_HMAC_H - -#include - -#include "version.h" -/** - * @defgroup lavu_hmac HMAC - * @ingroup lavu_crypto - * @{ - */ - -enum AVHMACType { - AV_HMAC_MD5, - AV_HMAC_SHA1, - AV_HMAC_SHA224, - AV_HMAC_SHA256, - AV_HMAC_SHA384, - AV_HMAC_SHA512, -}; - -typedef struct AVHMAC AVHMAC; - -/** - * Allocate an AVHMAC context. - * @param type The hash function used for the HMAC. - */ -AVHMAC *av_hmac_alloc(enum AVHMACType type); - -/** - * Free an AVHMAC context. - * @param ctx The context to free, may be NULL - */ -void av_hmac_free(AVHMAC *ctx); - -/** - * Initialize an AVHMAC context with an authentication key. - * @param ctx The HMAC context - * @param key The authentication key - * @param keylen The length of the key, in bytes - */ -void av_hmac_init(AVHMAC *ctx, const uint8_t *key, unsigned int keylen); - -/** - * Hash data with the HMAC. - * @param ctx The HMAC context - * @param data The data to hash - * @param len The length of the data, in bytes - */ -void av_hmac_update(AVHMAC *ctx, const uint8_t *data, unsigned int len); - -/** - * Finish hashing and output the HMAC digest. - * @param ctx The HMAC context - * @param out The output buffer to write the digest into - * @param outlen The length of the out buffer, in bytes - * @return The number of bytes written to out, or a negative error code. - */ -int av_hmac_final(AVHMAC *ctx, uint8_t *out, unsigned int outlen); - -/** - * Hash an array of data with a key. - * @param ctx The HMAC context - * @param data The data to hash - * @param len The length of the data, in bytes - * @param key The authentication key - * @param keylen The length of the key, in bytes - * @param out The output buffer to write the digest into - * @param outlen The length of the out buffer, in bytes - * @return The number of bytes written to out, or a negative error code. - */ -int av_hmac_calc(AVHMAC *ctx, const uint8_t *data, unsigned int len, - const uint8_t *key, unsigned int keylen, - uint8_t *out, unsigned int outlen); - -/** - * @} - */ - -#endif /* AVUTIL_HMAC_H */ diff --git a/prebuilts/x86_64/include/libavutil/hwcontext.h b/prebuilts/x86_64/include/libavutil/hwcontext.h deleted file mode 100644 index 04d19d8..0000000 --- a/prebuilts/x86_64/include/libavutil/hwcontext.h +++ /dev/null @@ -1,605 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_H -#define AVUTIL_HWCONTEXT_H - -#include "buffer.h" -#include "frame.h" -#include "log.h" -#include "pixfmt.h" - -enum AVHWDeviceType { - AV_HWDEVICE_TYPE_NONE, - AV_HWDEVICE_TYPE_VDPAU, - AV_HWDEVICE_TYPE_CUDA, - AV_HWDEVICE_TYPE_VAAPI, - AV_HWDEVICE_TYPE_DXVA2, - AV_HWDEVICE_TYPE_QSV, - AV_HWDEVICE_TYPE_VIDEOTOOLBOX, - AV_HWDEVICE_TYPE_D3D11VA, - AV_HWDEVICE_TYPE_DRM, - AV_HWDEVICE_TYPE_OPENCL, - AV_HWDEVICE_TYPE_MEDIACODEC, - AV_HWDEVICE_TYPE_VULKAN, -}; - -typedef struct AVHWDeviceInternal AVHWDeviceInternal; - -/** - * This struct aggregates all the (hardware/vendor-specific) "high-level" state, - * i.e. state that is not tied to a concrete processing configuration. - * E.g., in an API that supports hardware-accelerated encoding and decoding, - * this struct will (if possible) wrap the state that is common to both encoding - * and decoding and from which specific instances of encoders or decoders can be - * derived. - * - * This struct is reference-counted with the AVBuffer mechanism. The - * av_hwdevice_ctx_alloc() constructor yields a reference, whose data field - * points to the actual AVHWDeviceContext. Further objects derived from - * AVHWDeviceContext (such as AVHWFramesContext, describing a frame pool with - * specific properties) will hold an internal reference to it. After all the - * references are released, the AVHWDeviceContext itself will be freed, - * optionally invoking a user-specified callback for uninitializing the hardware - * state. - */ -typedef struct AVHWDeviceContext { - /** - * A class for logging. Set by av_hwdevice_ctx_alloc(). - */ - const AVClass *av_class; - - /** - * Private data used internally by libavutil. Must not be accessed in any - * way by the caller. - */ - AVHWDeviceInternal *internal; - - /** - * This field identifies the underlying API used for hardware access. - * - * This field is set when this struct is allocated and never changed - * afterwards. - */ - enum AVHWDeviceType type; - - /** - * The format-specific data, allocated and freed by libavutil along with - * this context. - * - * Should be cast by the user to the format-specific context defined in the - * corresponding header (hwcontext_*.h) and filled as described in the - * documentation before calling av_hwdevice_ctx_init(). - * - * After calling av_hwdevice_ctx_init() this struct should not be modified - * by the caller. - */ - void *hwctx; - - /** - * This field may be set by the caller before calling av_hwdevice_ctx_init(). - * - * If non-NULL, this callback will be called when the last reference to - * this context is unreferenced, immediately before it is freed. - * - * @note when other objects (e.g an AVHWFramesContext) are derived from this - * struct, this callback will be invoked after all such child objects - * are fully uninitialized and their respective destructors invoked. - */ - void (*free)(struct AVHWDeviceContext *ctx); - - /** - * Arbitrary user data, to be used e.g. by the free() callback. - */ - void *user_opaque; -} AVHWDeviceContext; - -typedef struct AVHWFramesInternal AVHWFramesInternal; - -/** - * This struct describes a set or pool of "hardware" frames (i.e. those with - * data not located in normal system memory). All the frames in the pool are - * assumed to be allocated in the same way and interchangeable. - * - * This struct is reference-counted with the AVBuffer mechanism and tied to a - * given AVHWDeviceContext instance. The av_hwframe_ctx_alloc() constructor - * yields a reference, whose data field points to the actual AVHWFramesContext - * struct. - */ -typedef struct AVHWFramesContext { - /** - * A class for logging. - */ - const AVClass *av_class; - - /** - * Private data used internally by libavutil. Must not be accessed in any - * way by the caller. - */ - AVHWFramesInternal *internal; - - /** - * A reference to the parent AVHWDeviceContext. This reference is owned and - * managed by the enclosing AVHWFramesContext, but the caller may derive - * additional references from it. - */ - AVBufferRef *device_ref; - - /** - * The parent AVHWDeviceContext. This is simply a pointer to - * device_ref->data provided for convenience. - * - * Set by libavutil in av_hwframe_ctx_init(). - */ - AVHWDeviceContext *device_ctx; - - /** - * The format-specific data, allocated and freed automatically along with - * this context. - * - * Should be cast by the user to the format-specific context defined in the - * corresponding header (hwframe_*.h) and filled as described in the - * documentation before calling av_hwframe_ctx_init(). - * - * After any frames using this context are created, the contents of this - * struct should not be modified by the caller. - */ - void *hwctx; - - /** - * This field may be set by the caller before calling av_hwframe_ctx_init(). - * - * If non-NULL, this callback will be called when the last reference to - * this context is unreferenced, immediately before it is freed. - */ - void (*free)(struct AVHWFramesContext *ctx); - - /** - * Arbitrary user data, to be used e.g. by the free() callback. - */ - void *user_opaque; - - /** - * A pool from which the frames are allocated by av_hwframe_get_buffer(). - * This field may be set by the caller before calling av_hwframe_ctx_init(). - * The buffers returned by calling av_buffer_pool_get() on this pool must - * have the properties described in the documentation in the corresponding hw - * type's header (hwcontext_*.h). The pool will be freed strictly before - * this struct's free() callback is invoked. - * - * This field may be NULL, then libavutil will attempt to allocate a pool - * internally. Note that certain device types enforce pools allocated at - * fixed size (frame count), which cannot be extended dynamically. In such a - * case, initial_pool_size must be set appropriately. - */ - AVBufferPool *pool; - - /** - * Initial size of the frame pool. If a device type does not support - * dynamically resizing the pool, then this is also the maximum pool size. - * - * May be set by the caller before calling av_hwframe_ctx_init(). Must be - * set if pool is NULL and the device type does not support dynamic pools. - */ - int initial_pool_size; - - /** - * The pixel format identifying the underlying HW surface type. - * - * Must be a hwaccel format, i.e. the corresponding descriptor must have the - * AV_PIX_FMT_FLAG_HWACCEL flag set. - * - * Must be set by the user before calling av_hwframe_ctx_init(). - */ - enum AVPixelFormat format; - - /** - * The pixel format identifying the actual data layout of the hardware - * frames. - * - * Must be set by the caller before calling av_hwframe_ctx_init(). - * - * @note when the underlying API does not provide the exact data layout, but - * only the colorspace/bit depth, this field should be set to the fully - * planar version of that format (e.g. for 8-bit 420 YUV it should be - * AV_PIX_FMT_YUV420P, not AV_PIX_FMT_NV12 or anything else). - */ - enum AVPixelFormat sw_format; - - /** - * The allocated dimensions of the frames in this pool. - * - * Must be set by the user before calling av_hwframe_ctx_init(). - */ - int width, height; -} AVHWFramesContext; - -/** - * Look up an AVHWDeviceType by name. - * - * @param name String name of the device type (case-insensitive). - * @return The type from enum AVHWDeviceType, or AV_HWDEVICE_TYPE_NONE if - * not found. - */ -enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name); - -/** Get the string name of an AVHWDeviceType. - * - * @param type Type from enum AVHWDeviceType. - * @return Pointer to a static string containing the name, or NULL if the type - * is not valid. - */ -const char *av_hwdevice_get_type_name(enum AVHWDeviceType type); - -/** - * Iterate over supported device types. - * - * @param type AV_HWDEVICE_TYPE_NONE initially, then the previous type - * returned by this function in subsequent iterations. - * @return The next usable device type from enum AVHWDeviceType, or - * AV_HWDEVICE_TYPE_NONE if there are no more. - */ -enum AVHWDeviceType av_hwdevice_iterate_types(enum AVHWDeviceType prev); - -/** - * Allocate an AVHWDeviceContext for a given hardware type. - * - * @param type the type of the hardware device to allocate. - * @return a reference to the newly created AVHWDeviceContext on success or NULL - * on failure. - */ -AVBufferRef *av_hwdevice_ctx_alloc(enum AVHWDeviceType type); - -/** - * Finalize the device context before use. This function must be called after - * the context is filled with all the required information and before it is - * used in any way. - * - * @param ref a reference to the AVHWDeviceContext - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwdevice_ctx_init(AVBufferRef *ref); - -/** - * Open a device of the specified type and create an AVHWDeviceContext for it. - * - * This is a convenience function intended to cover the simple cases. Callers - * who need to fine-tune device creation/management should open the device - * manually and then wrap it in an AVHWDeviceContext using - * av_hwdevice_ctx_alloc()/av_hwdevice_ctx_init(). - * - * The returned context is already initialized and ready for use, the caller - * should not call av_hwdevice_ctx_init() on it. The user_opaque/free fields of - * the created AVHWDeviceContext are set by this function and should not be - * touched by the caller. - * - * @param device_ctx On success, a reference to the newly-created device context - * will be written here. The reference is owned by the caller - * and must be released with av_buffer_unref() when no longer - * needed. On failure, NULL will be written to this pointer. - * @param type The type of the device to create. - * @param device A type-specific string identifying the device to open. - * @param opts A dictionary of additional (type-specific) options to use in - * opening the device. The dictionary remains owned by the caller. - * @param flags currently unused - * - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create(AVBufferRef **device_ctx, enum AVHWDeviceType type, - const char *device, AVDictionary *opts, int flags); - -/** - * Create a new device of the specified type from an existing device. - * - * If the source device is a device of the target type or was originally - * derived from such a device (possibly through one or more intermediate - * devices of other types), then this will return a reference to the - * existing device of the same type as is requested. - * - * Otherwise, it will attempt to derive a new device from the given source - * device. If direct derivation to the new type is not implemented, it will - * attempt the same derivation from each ancestor of the source device in - * turn looking for an implemented derivation method. - * - * @param dst_ctx On success, a reference to the newly-created - * AVHWDeviceContext. - * @param type The type of the new device to create. - * @param src_ctx A reference to an existing AVHWDeviceContext which will be - * used to create the new device. - * @param flags Currently unused; should be set to zero. - * @return Zero on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create_derived(AVBufferRef **dst_ctx, - enum AVHWDeviceType type, - AVBufferRef *src_ctx, int flags); - -/** - * Create a new device of the specified type from an existing device. - * - * This function performs the same action as av_hwdevice_ctx_create_derived, - * however, it is able to set options for the new device to be derived. - * - * @param dst_ctx On success, a reference to the newly-created - * AVHWDeviceContext. - * @param type The type of the new device to create. - * @param src_ctx A reference to an existing AVHWDeviceContext which will be - * used to create the new device. - * @param options Options for the new device to create, same format as in - * av_hwdevice_ctx_create. - * @param flags Currently unused; should be set to zero. - * @return Zero on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create_derived_opts(AVBufferRef **dst_ctx, - enum AVHWDeviceType type, - AVBufferRef *src_ctx, - AVDictionary *options, int flags); - -/** - * Allocate an AVHWFramesContext tied to a given device context. - * - * @param device_ctx a reference to a AVHWDeviceContext. This function will make - * a new reference for internal use, the one passed to the - * function remains owned by the caller. - * @return a reference to the newly created AVHWFramesContext on success or NULL - * on failure. - */ -AVBufferRef *av_hwframe_ctx_alloc(AVBufferRef *device_ctx); - -/** - * Finalize the context before use. This function must be called after the - * context is filled with all the required information and before it is attached - * to any frames. - * - * @param ref a reference to the AVHWFramesContext - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwframe_ctx_init(AVBufferRef *ref); - -/** - * Allocate a new frame attached to the given AVHWFramesContext. - * - * @param hwframe_ctx a reference to an AVHWFramesContext - * @param frame an empty (freshly allocated or unreffed) frame to be filled with - * newly allocated buffers. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwframe_get_buffer(AVBufferRef *hwframe_ctx, AVFrame *frame, int flags); - -/** - * Copy data to or from a hw surface. At least one of dst/src must have an - * AVHWFramesContext attached. - * - * If src has an AVHWFramesContext attached, then the format of dst (if set) - * must use one of the formats returned by av_hwframe_transfer_get_formats(src, - * AV_HWFRAME_TRANSFER_DIRECTION_FROM). - * If dst has an AVHWFramesContext attached, then the format of src must use one - * of the formats returned by av_hwframe_transfer_get_formats(dst, - * AV_HWFRAME_TRANSFER_DIRECTION_TO) - * - * dst may be "clean" (i.e. with data/buf pointers unset), in which case the - * data buffers will be allocated by this function using av_frame_get_buffer(). - * If dst->format is set, then this format will be used, otherwise (when - * dst->format is AV_PIX_FMT_NONE) the first acceptable format will be chosen. - * - * The two frames must have matching allocated dimensions (i.e. equal to - * AVHWFramesContext.width/height), since not all device types support - * transferring a sub-rectangle of the whole surface. The display dimensions - * (i.e. AVFrame.width/height) may be smaller than the allocated dimensions, but - * also have to be equal for both frames. When the display dimensions are - * smaller than the allocated dimensions, the content of the padding in the - * destination frame is unspecified. - * - * @param dst the destination frame. dst is not touched on failure. - * @param src the source frame. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR error code on failure. - */ -int av_hwframe_transfer_data(AVFrame *dst, const AVFrame *src, int flags); - -enum AVHWFrameTransferDirection { - /** - * Transfer the data from the queried hw frame. - */ - AV_HWFRAME_TRANSFER_DIRECTION_FROM, - - /** - * Transfer the data to the queried hw frame. - */ - AV_HWFRAME_TRANSFER_DIRECTION_TO, -}; - -/** - * Get a list of possible source or target formats usable in - * av_hwframe_transfer_data(). - * - * @param hwframe_ctx the frame context to obtain the information for - * @param dir the direction of the transfer - * @param formats the pointer to the output format list will be written here. - * The list is terminated with AV_PIX_FMT_NONE and must be freed - * by the caller when no longer needed using av_free(). - * If this function returns successfully, the format list will - * have at least one item (not counting the terminator). - * On failure, the contents of this pointer are unspecified. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_hwframe_transfer_get_formats(AVBufferRef *hwframe_ctx, - enum AVHWFrameTransferDirection dir, - enum AVPixelFormat **formats, int flags); - - -/** - * This struct describes the constraints on hardware frames attached to - * a given device with a hardware-specific configuration. This is returned - * by av_hwdevice_get_hwframe_constraints() and must be freed by - * av_hwframe_constraints_free() after use. - */ -typedef struct AVHWFramesConstraints { - /** - * A list of possible values for format in the hw_frames_ctx, - * terminated by AV_PIX_FMT_NONE. This member will always be filled. - */ - enum AVPixelFormat *valid_hw_formats; - - /** - * A list of possible values for sw_format in the hw_frames_ctx, - * terminated by AV_PIX_FMT_NONE. Can be NULL if this information is - * not known. - */ - enum AVPixelFormat *valid_sw_formats; - - /** - * The minimum size of frames in this hw_frames_ctx. - * (Zero if not known.) - */ - int min_width; - int min_height; - - /** - * The maximum size of frames in this hw_frames_ctx. - * (INT_MAX if not known / no limit.) - */ - int max_width; - int max_height; -} AVHWFramesConstraints; - -/** - * Allocate a HW-specific configuration structure for a given HW device. - * After use, the user must free all members as required by the specific - * hardware structure being used, then free the structure itself with - * av_free(). - * - * @param device_ctx a reference to the associated AVHWDeviceContext. - * @return The newly created HW-specific configuration structure on - * success or NULL on failure. - */ -void *av_hwdevice_hwconfig_alloc(AVBufferRef *device_ctx); - -/** - * Get the constraints on HW frames given a device and the HW-specific - * configuration to be used with that device. If no HW-specific - * configuration is provided, returns the maximum possible capabilities - * of the device. - * - * @param ref a reference to the associated AVHWDeviceContext. - * @param hwconfig a filled HW-specific configuration structure, or NULL - * to return the maximum possible capabilities of the device. - * @return AVHWFramesConstraints structure describing the constraints - * on the device, or NULL if not available. - */ -AVHWFramesConstraints *av_hwdevice_get_hwframe_constraints(AVBufferRef *ref, - const void *hwconfig); - -/** - * Free an AVHWFrameConstraints structure. - * - * @param constraints The (filled or unfilled) AVHWFrameConstraints structure. - */ -void av_hwframe_constraints_free(AVHWFramesConstraints **constraints); - - -/** - * Flags to apply to frame mappings. - */ -enum { - /** - * The mapping must be readable. - */ - AV_HWFRAME_MAP_READ = 1 << 0, - /** - * The mapping must be writeable. - */ - AV_HWFRAME_MAP_WRITE = 1 << 1, - /** - * The mapped frame will be overwritten completely in subsequent - * operations, so the current frame data need not be loaded. Any values - * which are not overwritten are unspecified. - */ - AV_HWFRAME_MAP_OVERWRITE = 1 << 2, - /** - * The mapping must be direct. That is, there must not be any copying in - * the map or unmap steps. Note that performance of direct mappings may - * be much lower than normal memory. - */ - AV_HWFRAME_MAP_DIRECT = 1 << 3, -}; - -/** - * Map a hardware frame. - * - * This has a number of different possible effects, depending on the format - * and origin of the src and dst frames. On input, src should be a usable - * frame with valid buffers and dst should be blank (typically as just created - * by av_frame_alloc()). src should have an associated hwframe context, and - * dst may optionally have a format and associated hwframe context. - * - * If src was created by mapping a frame from the hwframe context of dst, - * then this function undoes the mapping - dst is replaced by a reference to - * the frame that src was originally mapped from. - * - * If both src and dst have an associated hwframe context, then this function - * attempts to map the src frame from its hardware context to that of dst and - * then fill dst with appropriate data to be usable there. This will only be - * possible if the hwframe contexts and associated devices are compatible - - * given compatible devices, av_hwframe_ctx_create_derived() can be used to - * create a hwframe context for dst in which mapping should be possible. - * - * If src has a hwframe context but dst does not, then the src frame is - * mapped to normal memory and should thereafter be usable as a normal frame. - * If the format is set on dst, then the mapping will attempt to create dst - * with that format and fail if it is not possible. If format is unset (is - * AV_PIX_FMT_NONE) then dst will be mapped with whatever the most appropriate - * format to use is (probably the sw_format of the src hwframe context). - * - * A return value of AVERROR(ENOSYS) indicates that the mapping is not - * possible with the given arguments and hwframe setup, while other return - * values indicate that it failed somehow. - * - * @param dst Destination frame, to contain the mapping. - * @param src Source frame, to be mapped. - * @param flags Some combination of AV_HWFRAME_MAP_* flags. - * @return Zero on success, negative AVERROR code on failure. - */ -int av_hwframe_map(AVFrame *dst, const AVFrame *src, int flags); - - -/** - * Create and initialise an AVHWFramesContext as a mapping of another existing - * AVHWFramesContext on a different device. - * - * av_hwframe_ctx_init() should not be called after this. - * - * @param derived_frame_ctx On success, a reference to the newly created - * AVHWFramesContext. - * @param derived_device_ctx A reference to the device to create the new - * AVHWFramesContext on. - * @param source_frame_ctx A reference to an existing AVHWFramesContext - * which will be mapped to the derived context. - * @param flags Some combination of AV_HWFRAME_MAP_* flags, defining the - * mapping parameters to apply to frames which are allocated - * in the derived device. - * @return Zero on success, negative AVERROR code on failure. - */ -int av_hwframe_ctx_create_derived(AVBufferRef **derived_frame_ctx, - enum AVPixelFormat format, - AVBufferRef *derived_device_ctx, - AVBufferRef *source_frame_ctx, - int flags); - -#endif /* AVUTIL_HWCONTEXT_H */ diff --git a/prebuilts/x86_64/include/libavutil/hwcontext_cuda.h b/prebuilts/x86_64/include/libavutil/hwcontext_cuda.h deleted file mode 100644 index cefbe0c..0000000 --- a/prebuilts/x86_64/include/libavutil/hwcontext_cuda.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#ifndef AVUTIL_HWCONTEXT_CUDA_H -#define AVUTIL_HWCONTEXT_CUDA_H - -#ifndef CUDA_VERSION -#include -#endif - -#include "pixfmt.h" - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_CUDA. - * - * This API supports dynamic frame pools. AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a CUdeviceptr. - */ - -typedef struct AVCUDADeviceContextInternal AVCUDADeviceContextInternal; - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVCUDADeviceContext { - CUcontext cuda_ctx; - CUstream stream; - AVCUDADeviceContextInternal *internal; -} AVCUDADeviceContext; - -/** - * AVHWFramesContext.hwctx is currently not used - */ - -/** - * @defgroup hwcontext_cuda Device context creation flags - * - * Flags for av_hwdevice_ctx_create. - * - * @{ - */ - -/** - * Use primary device context instead of creating a new one. - */ -#define AV_CUDA_USE_PRIMARY_CONTEXT (1 << 0) - -/** - * @} - */ - -#endif /* AVUTIL_HWCONTEXT_CUDA_H */ diff --git a/prebuilts/x86_64/include/libavutil/hwcontext_d3d11va.h b/prebuilts/x86_64/include/libavutil/hwcontext_d3d11va.h deleted file mode 100644 index 9f91e9b..0000000 --- a/prebuilts/x86_64/include/libavutil/hwcontext_d3d11va.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_D3D11VA_H -#define AVUTIL_HWCONTEXT_D3D11VA_H - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_D3D11VA. - * - * The default pool implementation will be fixed-size if initial_pool_size is - * set (and allocate elements from an array texture). Otherwise it will allocate - * individual textures. Be aware that decoding requires a single array texture. - * - * Using sw_format==AV_PIX_FMT_YUV420P has special semantics, and maps to - * DXGI_FORMAT_420_OPAQUE. av_hwframe_transfer_data() is not supported for - * this format. Refer to MSDN for details. - * - * av_hwdevice_ctx_create() for this device type supports a key named "debug" - * for the AVDictionary entry. If this is set to any value, the device creation - * code will try to load various supported D3D debugging layers. - */ - -#include -#include - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVD3D11VADeviceContext { - /** - * Device used for texture creation and access. This can also be used to - * set the libavcodec decoding device. - * - * Must be set by the user. This is the only mandatory field - the other - * device context fields are set from this and are available for convenience. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11Device *device; - - /** - * If unset, this will be set from the device field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11DeviceContext *device_context; - - /** - * If unset, this will be set from the device field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11VideoDevice *video_device; - - /** - * If unset, this will be set from the device_context field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11VideoContext *video_context; - - /** - * Callbacks for locking. They protect accesses to device_context and - * video_context calls. They also protect access to the internal staging - * texture (for av_hwframe_transfer_data() calls). They do NOT protect - * access to hwcontext or decoder state in general. - * - * If unset on init, the hwcontext implementation will set them to use an - * internal mutex. - * - * The underlying lock must be recursive. lock_ctx is for free use by the - * locking implementation. - */ - void (*lock)(void *lock_ctx); - void (*unlock)(void *lock_ctx); - void *lock_ctx; -} AVD3D11VADeviceContext; - -/** - * D3D11 frame descriptor for pool allocation. - * - * In user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer pointing at an object of this type describing the - * planes of the frame. - * - * This has no use outside of custom allocation, and AVFrame AVBufferRef do not - * necessarily point to an instance of this struct. - */ -typedef struct AVD3D11FrameDescriptor { - /** - * The texture in which the frame is located. The reference count is - * managed by the AVBufferRef, and destroying the reference will release - * the interface. - * - * Normally stored in AVFrame.data[0]. - */ - ID3D11Texture2D *texture; - - /** - * The index into the array texture element representing the frame, or 0 - * if the texture is not an array texture. - * - * Normally stored in AVFrame.data[1] (cast from intptr_t). - */ - intptr_t index; -} AVD3D11FrameDescriptor; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVD3D11VAFramesContext { - /** - * The canonical texture used for pool allocation. If this is set to NULL - * on init, the hwframes implementation will allocate and set an array - * texture if initial_pool_size > 0. - * - * The only situation when the API user should set this is: - * - the user wants to do manual pool allocation (setting - * AVHWFramesContext.pool), instead of letting AVHWFramesContext - * allocate the pool - * - of an array texture - * - and wants it to use it for decoding - * - this has to be done before calling av_hwframe_ctx_init() - * - * Deallocating the AVHWFramesContext will always release this interface, - * and it does not matter whether it was user-allocated. - * - * This is in particular used by the libavcodec D3D11VA hwaccel, which - * requires a single array texture. It will create ID3D11VideoDecoderOutputView - * objects for each array texture element on decoder initialization. - */ - ID3D11Texture2D *texture; - - /** - * D3D11_TEXTURE2D_DESC.BindFlags used for texture creation. The user must - * at least set D3D11_BIND_DECODER if the frames context is to be used for - * video decoding. - * This field is ignored/invalid if a user-allocated texture is provided. - */ - UINT BindFlags; - - /** - * D3D11_TEXTURE2D_DESC.MiscFlags used for texture creation. - * This field is ignored/invalid if a user-allocated texture is provided. - */ - UINT MiscFlags; -} AVD3D11VAFramesContext; - -#endif /* AVUTIL_HWCONTEXT_D3D11VA_H */ diff --git a/prebuilts/x86_64/include/libavutil/hwcontext_drm.h b/prebuilts/x86_64/include/libavutil/hwcontext_drm.h deleted file mode 100644 index 42709f2..0000000 --- a/prebuilts/x86_64/include/libavutil/hwcontext_drm.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_DRM_H -#define AVUTIL_HWCONTEXT_DRM_H - -#include -#include - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_DRM. - * - * Internal frame allocation is not currently supported - all frames - * must be allocated by the user. Thus AVHWFramesContext is always - * NULL, though this may change if support for frame allocation is - * added in future. - */ - -enum { - /** - * The maximum number of layers/planes in a DRM frame. - */ - AV_DRM_MAX_PLANES = 4 -}; - -/** - * DRM object descriptor. - * - * Describes a single DRM object, addressing it as a PRIME file - * descriptor. - */ -typedef struct AVDRMObjectDescriptor { - /** - * DRM PRIME fd for the object. - */ - int fd; - /** - * Total size of the object. - * - * (This includes any parts not which do not contain image data.) - */ - size_t size; - /** - * Format modifier applied to the object (DRM_FORMAT_MOD_*). - * - * If the format modifier is unknown then this should be set to - * DRM_FORMAT_MOD_INVALID. - */ - uint64_t format_modifier; -} AVDRMObjectDescriptor; - -/** - * DRM plane descriptor. - * - * Describes a single plane of a layer, which is contained within - * a single object. - */ -typedef struct AVDRMPlaneDescriptor { - /** - * Index of the object containing this plane in the objects - * array of the enclosing frame descriptor. - */ - int object_index; - /** - * Offset within that object of this plane. - */ - ptrdiff_t offset; - /** - * Pitch (linesize) of this plane. - */ - ptrdiff_t pitch; -} AVDRMPlaneDescriptor; - -/** - * DRM layer descriptor. - * - * Describes a single layer within a frame. This has the structure - * defined by its format, and will contain one or more planes. - */ -typedef struct AVDRMLayerDescriptor { - /** - * Format of the layer (DRM_FORMAT_*). - */ - uint32_t format; - /** - * Number of planes in the layer. - * - * This must match the number of planes required by format. - */ - int nb_planes; - /** - * Array of planes in this layer. - */ - AVDRMPlaneDescriptor planes[AV_DRM_MAX_PLANES]; -} AVDRMLayerDescriptor; - -/** - * DRM frame descriptor. - * - * This is used as the data pointer for AV_PIX_FMT_DRM_PRIME frames. - * It is also used by user-allocated frame pools - allocating in - * AVHWFramesContext.pool must return AVBufferRefs which contain - * an object of this type. - * - * The fields of this structure should be set such it can be - * imported directly by EGL using the EGL_EXT_image_dma_buf_import - * and EGL_EXT_image_dma_buf_import_modifiers extensions. - * (Note that the exact layout of a particular format may vary between - * platforms - we only specify that the same platform should be able - * to import it.) - * - * The total number of planes must not exceed AV_DRM_MAX_PLANES, and - * the order of the planes by increasing layer index followed by - * increasing plane index must be the same as the order which would - * be used for the data pointers in the equivalent software format. - */ -typedef struct AVDRMFrameDescriptor { - /** - * Number of DRM objects making up this frame. - */ - int nb_objects; - /** - * Array of objects making up the frame. - */ - AVDRMObjectDescriptor objects[AV_DRM_MAX_PLANES]; - /** - * Number of layers in the frame. - */ - int nb_layers; - /** - * Array of layers in the frame. - */ - AVDRMLayerDescriptor layers[AV_DRM_MAX_PLANES]; -} AVDRMFrameDescriptor; - -/** - * DRM device. - * - * Allocated as AVHWDeviceContext.hwctx. - */ -typedef struct AVDRMDeviceContext { - /** - * File descriptor of DRM device. - * - * This is used as the device to create frames on, and may also be - * used in some derivation and mapping operations. - * - * If no device is required, set to -1. - */ - int fd; -} AVDRMDeviceContext; - -#endif /* AVUTIL_HWCONTEXT_DRM_H */ diff --git a/prebuilts/x86_64/include/libavutil/hwcontext_dxva2.h b/prebuilts/x86_64/include/libavutil/hwcontext_dxva2.h deleted file mode 100644 index e1b79bc..0000000 --- a/prebuilts/x86_64/include/libavutil/hwcontext_dxva2.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#ifndef AVUTIL_HWCONTEXT_DXVA2_H -#define AVUTIL_HWCONTEXT_DXVA2_H - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_DXVA2. - * - * Only fixed-size pools are supported. - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to a pointer to IDirect3DSurface9. - */ - -#include -#include - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVDXVA2DeviceContext { - IDirect3DDeviceManager9 *devmgr; -} AVDXVA2DeviceContext; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVDXVA2FramesContext { - /** - * The surface type (e.g. DXVA2_VideoProcessorRenderTarget or - * DXVA2_VideoDecoderRenderTarget). Must be set by the caller. - */ - DWORD surface_type; - - /** - * The surface pool. When an external pool is not provided by the caller, - * this will be managed (allocated and filled on init, freed on uninit) by - * libavutil. - */ - IDirect3DSurface9 **surfaces; - int nb_surfaces; - - /** - * Certain drivers require the decoder to be destroyed before the surfaces. - * To allow internally managed pools to work properly in such cases, this - * field is provided. - * - * If it is non-NULL, libavutil will call IDirectXVideoDecoder_Release() on - * it just before the internal surface pool is freed. - * - * This is for convenience only. Some code uses other methods to manage the - * decoder reference. - */ - IDirectXVideoDecoder *decoder_to_release; -} AVDXVA2FramesContext; - -#endif /* AVUTIL_HWCONTEXT_DXVA2_H */ diff --git a/prebuilts/x86_64/include/libavutil/hwcontext_mediacodec.h b/prebuilts/x86_64/include/libavutil/hwcontext_mediacodec.h deleted file mode 100644 index 101a980..0000000 --- a/prebuilts/x86_64/include/libavutil/hwcontext_mediacodec.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_MEDIACODEC_H -#define AVUTIL_HWCONTEXT_MEDIACODEC_H - -/** - * MediaCodec details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVMediaCodecDeviceContext { - /** - * android/view/Surface handle, to be filled by the user. - * - * This is the default surface used by decoders on this device. - */ - void *surface; -} AVMediaCodecDeviceContext; - -#endif /* AVUTIL_HWCONTEXT_MEDIACODEC_H */ diff --git a/prebuilts/x86_64/include/libavutil/hwcontext_opencl.h b/prebuilts/x86_64/include/libavutil/hwcontext_opencl.h deleted file mode 100644 index ef54486..0000000 --- a/prebuilts/x86_64/include/libavutil/hwcontext_opencl.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_OPENCL_H -#define AVUTIL_HWCONTEXT_OPENCL_H - -#ifdef __APPLE__ -#include -#else -#include -#endif - -#include "frame.h" - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_OPENCL. - * - * Pools allocated internally are always dynamic, and are primarily intended - * to be used in OpenCL-only cases. If interoperation is required, it is - * typically required to allocate frames in the other API and then map the - * frames context to OpenCL with av_hwframe_ctx_create_derived(). - */ - -/** - * OpenCL frame descriptor for pool allocation. - * - * In user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer pointing at an object of this type describing the - * planes of the frame. - */ -typedef struct AVOpenCLFrameDescriptor { - /** - * Number of planes in the frame. - */ - int nb_planes; - /** - * OpenCL image2d objects for each plane of the frame. - */ - cl_mem planes[AV_NUM_DATA_POINTERS]; -} AVOpenCLFrameDescriptor; - -/** - * OpenCL device details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVOpenCLDeviceContext { - /** - * The primary device ID of the device. If multiple OpenCL devices - * are associated with the context then this is the one which will - * be used for all operations internal to FFmpeg. - */ - cl_device_id device_id; - /** - * The OpenCL context which will contain all operations and frames on - * this device. - */ - cl_context context; - /** - * The default command queue for this device, which will be used by all - * frames contexts which do not have their own command queue. If not - * intialised by the user, a default queue will be created on the - * primary device. - */ - cl_command_queue command_queue; -} AVOpenCLDeviceContext; - -/** - * OpenCL-specific data associated with a frame pool. - * - * Allocated as AVHWFramesContext.hwctx. - */ -typedef struct AVOpenCLFramesContext { - /** - * The command queue used for internal asynchronous operations on this - * device (av_hwframe_transfer_data(), av_hwframe_map()). - * - * If this is not set, the command queue from the associated device is - * used instead. - */ - cl_command_queue command_queue; -} AVOpenCLFramesContext; - -#endif /* AVUTIL_HWCONTEXT_OPENCL_H */ diff --git a/prebuilts/x86_64/include/libavutil/hwcontext_qsv.h b/prebuilts/x86_64/include/libavutil/hwcontext_qsv.h deleted file mode 100644 index b98d611..0000000 --- a/prebuilts/x86_64/include/libavutil/hwcontext_qsv.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_QSV_H -#define AVUTIL_HWCONTEXT_QSV_H - -#include - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_QSV. - * - * This API does not support dynamic frame pools. AVHWFramesContext.pool must - * contain AVBufferRefs whose data pointer points to an mfxFrameSurface1 struct. - */ - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVQSVDeviceContext { - mfxSession session; -} AVQSVDeviceContext; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVQSVFramesContext { - mfxFrameSurface1 *surfaces; - int nb_surfaces; - - /** - * A combination of MFX_MEMTYPE_* describing the frame pool. - */ - int frame_type; -} AVQSVFramesContext; - -#endif /* AVUTIL_HWCONTEXT_QSV_H */ - diff --git a/prebuilts/x86_64/include/libavutil/hwcontext_vaapi.h b/prebuilts/x86_64/include/libavutil/hwcontext_vaapi.h deleted file mode 100644 index 0b2e071..0000000 --- a/prebuilts/x86_64/include/libavutil/hwcontext_vaapi.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VAAPI_H -#define AVUTIL_HWCONTEXT_VAAPI_H - -#include - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_VAAPI. - * - * Dynamic frame pools are supported, but note that any pool used as a render - * target is required to be of fixed size in order to be be usable as an - * argument to vaCreateContext(). - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to a VASurfaceID. - */ - -enum { - /** - * The quirks field has been set by the user and should not be detected - * automatically by av_hwdevice_ctx_init(). - */ - AV_VAAPI_DRIVER_QUIRK_USER_SET = (1 << 0), - /** - * The driver does not destroy parameter buffers when they are used by - * vaRenderPicture(). Additional code will be required to destroy them - * separately afterwards. - */ - AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS = (1 << 1), - - /** - * The driver does not support the VASurfaceAttribMemoryType attribute, - * so the surface allocation code will not try to use it. - */ - AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE = (1 << 2), - - /** - * The driver does not support surface attributes at all. - * The surface allocation code will never pass them to surface allocation, - * and the results of the vaQuerySurfaceAttributes() call will be faked. - */ - AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3), -}; - -/** - * VAAPI connection details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVVAAPIDeviceContext { - /** - * The VADisplay handle, to be filled by the user. - */ - VADisplay display; - /** - * Driver quirks to apply - this is filled by av_hwdevice_ctx_init(), - * with reference to a table of known drivers, unless the - * AV_VAAPI_DRIVER_QUIRK_USER_SET bit is already present. The user - * may need to refer to this field when performing any later - * operations using VAAPI with the same VADisplay. - */ - unsigned int driver_quirks; -} AVVAAPIDeviceContext; - -/** - * VAAPI-specific data associated with a frame pool. - * - * Allocated as AVHWFramesContext.hwctx. - */ -typedef struct AVVAAPIFramesContext { - /** - * Set by the user to apply surface attributes to all surfaces in - * the frame pool. If null, default settings are used. - */ - VASurfaceAttrib *attributes; - int nb_attributes; - /** - * The surfaces IDs of all surfaces in the pool after creation. - * Only valid if AVHWFramesContext.initial_pool_size was positive. - * These are intended to be used as the render_targets arguments to - * vaCreateContext(). - */ - VASurfaceID *surface_ids; - int nb_surfaces; -} AVVAAPIFramesContext; - -/** - * VAAPI hardware pipeline configuration details. - * - * Allocated with av_hwdevice_hwconfig_alloc(). - */ -typedef struct AVVAAPIHWConfig { - /** - * ID of a VAAPI pipeline configuration. - */ - VAConfigID config_id; -} AVVAAPIHWConfig; - -#endif /* AVUTIL_HWCONTEXT_VAAPI_H */ diff --git a/prebuilts/x86_64/include/libavutil/hwcontext_vdpau.h b/prebuilts/x86_64/include/libavutil/hwcontext_vdpau.h deleted file mode 100644 index 1b7ea1e..0000000 --- a/prebuilts/x86_64/include/libavutil/hwcontext_vdpau.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VDPAU_H -#define AVUTIL_HWCONTEXT_VDPAU_H - -#include - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_VDPAU. - * - * This API supports dynamic frame pools. AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a VdpVideoSurface. - */ - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVVDPAUDeviceContext { - VdpDevice device; - VdpGetProcAddress *get_proc_address; -} AVVDPAUDeviceContext; - -/** - * AVHWFramesContext.hwctx is currently not used - */ - -#endif /* AVUTIL_HWCONTEXT_VDPAU_H */ diff --git a/prebuilts/x86_64/include/libavutil/hwcontext_videotoolbox.h b/prebuilts/x86_64/include/libavutil/hwcontext_videotoolbox.h deleted file mode 100644 index 5074d79..0000000 --- a/prebuilts/x86_64/include/libavutil/hwcontext_videotoolbox.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H -#define AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H - -#include - -#include - -#include "pixfmt.h" - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_VIDEOTOOLBOX. - * - * This API currently does not support frame allocation, as the raw VideoToolbox - * API does allocation, and FFmpeg itself never has the need to allocate frames. - * - * If the API user sets a custom pool, AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a CVImageBufferRef or CVPixelBufferRef. - * - * Currently AVHWDeviceContext.hwctx and AVHWFramesContext.hwctx are always - * NULL. - */ - -/** - * Convert a VideoToolbox (actually CoreVideo) format to AVPixelFormat. - * Returns AV_PIX_FMT_NONE if no known equivalent was found. - */ -enum AVPixelFormat av_map_videotoolbox_format_to_pixfmt(uint32_t cv_fmt); - -/** - * Convert an AVPixelFormat to a VideoToolbox (actually CoreVideo) format. - * Returns 0 if no known equivalent was found. - */ -uint32_t av_map_videotoolbox_format_from_pixfmt(enum AVPixelFormat pix_fmt); - -/** - * Same as av_map_videotoolbox_format_from_pixfmt function, but can map and - * return full range pixel formats via a flag. - */ -uint32_t av_map_videotoolbox_format_from_pixfmt2(enum AVPixelFormat pix_fmt, bool full_range); - -#endif /* AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H */ diff --git a/prebuilts/x86_64/include/libavutil/hwcontext_vulkan.h b/prebuilts/x86_64/include/libavutil/hwcontext_vulkan.h deleted file mode 100644 index 5cbeb8e..0000000 --- a/prebuilts/x86_64/include/libavutil/hwcontext_vulkan.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VULKAN_H -#define AVUTIL_HWCONTEXT_VULKAN_H - -#include - -#include "pixfmt.h" -#include "frame.h" - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_VULKAN. - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to an AVVkFrame. - */ - -/** - * Main Vulkan context, allocated as AVHWDeviceContext.hwctx. - * All of these can be set before init to change what the context uses - */ -typedef struct AVVulkanDeviceContext { - /** - * Custom memory allocator, else NULL - */ - const VkAllocationCallbacks *alloc; - /** - * Vulkan instance. Must be at least version 1.1. - */ - VkInstance inst; - /** - * Physical device - */ - VkPhysicalDevice phys_dev; - /** - * Active device - */ - VkDevice act_dev; - /** - * Queue family index for graphics - * @note av_hwdevice_create() will set all 3 queue indices if unset - * If there is no dedicated queue for compute or transfer operations, - * they will be set to the graphics queue index which can handle both. - * nb_graphics_queues indicates how many queues were enabled for the - * graphics queue (must be at least 1) - */ - int queue_family_index; - int nb_graphics_queues; - /** - * Queue family index to use for transfer operations, and the amount of queues - * enabled. In case there is no dedicated transfer queue, nb_tx_queues - * must be 0 and queue_family_tx_index must be the same as either the graphics - * queue or the compute queue, if available. - */ - int queue_family_tx_index; - int nb_tx_queues; - /** - * Queue family index for compute ops, and the amount of queues enabled. - * In case there are no dedicated compute queues, nb_comp_queues must be - * 0 and its queue family index must be set to the graphics queue. - */ - int queue_family_comp_index; - int nb_comp_queues; - /** - * Enabled instance extensions. - * If supplying your own device context, set this to an array of strings, with - * each entry containing the specified Vulkan extension string to enable. - * Duplicates are possible and accepted. - * If no extensions are enabled, set these fields to NULL, and 0 respectively. - */ - const char * const *enabled_inst_extensions; - int nb_enabled_inst_extensions; - /** - * Enabled device extensions. By default, VK_KHR_external_memory_fd, - * VK_EXT_external_memory_dma_buf, VK_EXT_image_drm_format_modifier, - * VK_KHR_external_semaphore_fd and VK_EXT_external_memory_host are enabled if found. - * If supplying your own device context, these fields takes the same format as - * the above fields, with the same conditions that duplicates are possible - * and accepted, and that NULL and 0 respectively means no extensions are enabled. - */ - const char * const *enabled_dev_extensions; - int nb_enabled_dev_extensions; - /** - * This structure should be set to the set of features that present and enabled - * during device creation. When a device is created by FFmpeg, it will default to - * enabling all that are present of the shaderImageGatherExtended, - * fragmentStoresAndAtomics, shaderInt64 and vertexPipelineStoresAndAtomics features. - */ - VkPhysicalDeviceFeatures2 device_features; -} AVVulkanDeviceContext; - -/** - * Allocated as AVHWFramesContext.hwctx, used to set pool-specific options - */ -typedef struct AVVulkanFramesContext { - /** - * Controls the tiling of allocated frames. - */ - VkImageTiling tiling; - /** - * Defines extra usage of output frames. If left as 0, the following bits - * are set: TRANSFER_SRC, TRANSFER_DST. SAMPLED and STORAGE. - */ - VkImageUsageFlagBits usage; - /** - * Extension data for image creation. - */ - void *create_pnext; - /** - * Extension data for memory allocation. Must have as many entries as - * the number of planes of the sw_format. - * This will be chained to VkExportMemoryAllocateInfo, which is used - * to make all pool images exportable to other APIs if the necessary - * extensions are present in enabled_dev_extensions. - */ - void *alloc_pnext[AV_NUM_DATA_POINTERS]; -} AVVulkanFramesContext; - -/* - * Frame structure, the VkFormat of the image will always match - * the pool's sw_format. - * All frames, imported or allocated, will be created with the - * VK_IMAGE_CREATE_ALIAS_BIT flag set, so the memory may be aliased if needed. - * - * If all three queue family indices in the device context are the same, - * images will be created with the EXCLUSIVE sharing mode. Otherwise, all images - * will be created using the CONCURRENT sharing mode. - * - * @note the size of this structure is not part of the ABI, to allocate - * you must use @av_vk_frame_alloc(). - */ -typedef struct AVVkFrame { - /** - * Vulkan images to which the memory is bound to. - */ - VkImage img[AV_NUM_DATA_POINTERS]; - - /** - * The same tiling must be used for all images in the frame. - */ - VkImageTiling tiling; - - /** - * Memory backing the images. Could be less than the amount of images - * if importing from a DRM or VAAPI frame. - */ - VkDeviceMemory mem[AV_NUM_DATA_POINTERS]; - size_t size[AV_NUM_DATA_POINTERS]; - - /** - * OR'd flags for all memory allocated - */ - VkMemoryPropertyFlagBits flags; - - /** - * Updated after every barrier - */ - VkAccessFlagBits access[AV_NUM_DATA_POINTERS]; - VkImageLayout layout[AV_NUM_DATA_POINTERS]; - - /** - * Synchronization semaphores. Must not be freed manually. Must be waited on - * and signalled at every queue submission. - * Could be less than the amount of images: either one per VkDeviceMemory - * or one for the entire frame. All others will be set to VK_NULL_HANDLE. - */ - VkSemaphore sem[AV_NUM_DATA_POINTERS]; - - /** - * Internal data. - */ - struct AVVkFrameInternal *internal; -} AVVkFrame; - -/** - * Allocates a single AVVkFrame and initializes everything as 0. - * @note Must be freed via av_free() - */ -AVVkFrame *av_vk_frame_alloc(void); - -/** - * Returns the format of each image up to the number of planes for a given sw_format. - * Returns NULL on unsupported formats. - */ -const VkFormat *av_vkfmt_from_pixfmt(enum AVPixelFormat p); - -#endif /* AVUTIL_HWCONTEXT_VULKAN_H */ diff --git a/prebuilts/x86_64/include/libavutil/imgutils.h b/prebuilts/x86_64/include/libavutil/imgutils.h deleted file mode 100644 index 5eccbf0..0000000 --- a/prebuilts/x86_64/include/libavutil/imgutils.h +++ /dev/null @@ -1,291 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_IMGUTILS_H -#define AVUTIL_IMGUTILS_H - -/** - * @file - * misc image utilities - * - * @addtogroup lavu_picture - * @{ - */ - -#include "avutil.h" -#include "pixdesc.h" -#include "rational.h" - -/** - * Compute the max pixel step for each plane of an image with a - * format described by pixdesc. - * - * The pixel step is the distance in bytes between the first byte of - * the group of bytes which describe a pixel component and the first - * byte of the successive group in the same plane for the same - * component. - * - * @param max_pixsteps an array which is filled with the max pixel step - * for each plane. Since a plane may contain different pixel - * components, the computed max_pixsteps[plane] is relative to the - * component in the plane with the max pixel step. - * @param max_pixstep_comps an array which is filled with the component - * for each plane which has the max pixel step. May be NULL. - */ -void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4], - const AVPixFmtDescriptor *pixdesc); - -/** - * Compute the size of an image line with format pix_fmt and width - * width for the plane plane. - * - * @return the computed size in bytes - */ -int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane); - -/** - * Fill plane linesizes for an image with pixel format pix_fmt and - * width width. - * - * @param linesizes array to be filled with the linesize for each plane - * @return >= 0 in case of success, a negative error code otherwise - */ -int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width); - -/** - * Fill plane sizes for an image with pixel format pix_fmt and height height. - * - * @param size the array to be filled with the size of each image plane - * @param linesizes the array containing the linesize for each - * plane, should be filled by av_image_fill_linesizes() - * @return >= 0 in case of success, a negative error code otherwise - * - * @note The linesize parameters have the type ptrdiff_t here, while they are - * int for av_image_fill_linesizes(). - */ -int av_image_fill_plane_sizes(size_t size[4], enum AVPixelFormat pix_fmt, - int height, const ptrdiff_t linesizes[4]); - -/** - * Fill plane data pointers for an image with pixel format pix_fmt and - * height height. - * - * @param data pointers array to be filled with the pointer for each image plane - * @param ptr the pointer to a buffer which will contain the image - * @param linesizes the array containing the linesize for each - * plane, should be filled by av_image_fill_linesizes() - * @return the size in bytes required for the image buffer, a negative - * error code in case of failure - */ -int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int height, - uint8_t *ptr, const int linesizes[4]); - -/** - * Allocate an image with size w and h and pixel format pix_fmt, and - * fill pointers and linesizes accordingly. - * The allocated image buffer has to be freed by using - * av_freep(&pointers[0]). - * - * @param align the value to use for buffer size alignment - * @return the size in bytes required for the image buffer, a negative - * error code in case of failure - */ -int av_image_alloc(uint8_t *pointers[4], int linesizes[4], - int w, int h, enum AVPixelFormat pix_fmt, int align); - -/** - * Copy image plane from src to dst. - * That is, copy "height" number of lines of "bytewidth" bytes each. - * The first byte of each successive line is separated by *_linesize - * bytes. - * - * bytewidth must be contained by both absolute values of dst_linesize - * and src_linesize, otherwise the function behavior is undefined. - * - * @param dst_linesize linesize for the image plane in dst - * @param src_linesize linesize for the image plane in src - */ -void av_image_copy_plane(uint8_t *dst, int dst_linesize, - const uint8_t *src, int src_linesize, - int bytewidth, int height); - -/** - * Copy image in src_data to dst_data. - * - * @param dst_linesizes linesizes for the image in dst_data - * @param src_linesizes linesizes for the image in src_data - */ -void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], - const uint8_t *src_data[4], const int src_linesizes[4], - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Copy image data located in uncacheable (e.g. GPU mapped) memory. Where - * available, this function will use special functionality for reading from such - * memory, which may result in greatly improved performance compared to plain - * av_image_copy(). - * - * The data pointers and the linesizes must be aligned to the maximum required - * by the CPU architecture. - * - * @note The linesize parameters have the type ptrdiff_t here, while they are - * int for av_image_copy(). - * @note On x86, the linesizes currently need to be aligned to the cacheline - * size (i.e. 64) to get improved performance. - */ -void av_image_copy_uc_from(uint8_t *dst_data[4], const ptrdiff_t dst_linesizes[4], - const uint8_t *src_data[4], const ptrdiff_t src_linesizes[4], - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Setup the data pointers and linesizes based on the specified image - * parameters and the provided array. - * - * The fields of the given image are filled in by using the src - * address which points to the image data buffer. Depending on the - * specified pixel format, one or multiple image data pointers and - * line sizes will be set. If a planar format is specified, several - * pointers will be set pointing to the different picture planes and - * the line sizes of the different planes will be stored in the - * lines_sizes array. Call with src == NULL to get the required - * size for the src buffer. - * - * To allocate the buffer and fill in the dst_data and dst_linesize in - * one call, use av_image_alloc(). - * - * @param dst_data data pointers to be filled in - * @param dst_linesize linesizes for the image in dst_data to be filled in - * @param src buffer which will contain or contains the actual image data, can be NULL - * @param pix_fmt the pixel format of the image - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @param align the value used in src for linesize alignment - * @return the size in bytes required for src, a negative error code - * in case of failure - */ -int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], - const uint8_t *src, - enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Return the size in bytes of the amount of data required to store an - * image with the given parameters. - * - * @param pix_fmt the pixel format of the image - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @param align the assumed linesize alignment - * @return the buffer size in bytes, a negative error code in case of failure - */ -int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Copy image data from an image into a buffer. - * - * av_image_get_buffer_size() can be used to compute the required size - * for the buffer to fill. - * - * @param dst a buffer into which picture data will be copied - * @param dst_size the size in bytes of dst - * @param src_data pointers containing the source image data - * @param src_linesize linesizes for the image in src_data - * @param pix_fmt the pixel format of the source image - * @param width the width of the source image in pixels - * @param height the height of the source image in pixels - * @param align the assumed linesize alignment for dst - * @return the number of bytes written to dst, or a negative value - * (error code) on error - */ -int av_image_copy_to_buffer(uint8_t *dst, int dst_size, - const uint8_t * const src_data[4], const int src_linesize[4], - enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Check if the given dimension of an image is valid, meaning that all - * bytes of the image can be addressed with a signed int. - * - * @param w the width of the picture - * @param h the height of the picture - * @param log_offset the offset to sum to the log level for logging with log_ctx - * @param log_ctx the parent logging context, it may be NULL - * @return >= 0 if valid, a negative error code otherwise - */ -int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx); - -/** - * Check if the given dimension of an image is valid, meaning that all - * bytes of a plane of an image with the specified pix_fmt can be addressed - * with a signed int. - * - * @param w the width of the picture - * @param h the height of the picture - * @param max_pixels the maximum number of pixels the user wants to accept - * @param pix_fmt the pixel format, can be AV_PIX_FMT_NONE if unknown. - * @param log_offset the offset to sum to the log level for logging with log_ctx - * @param log_ctx the parent logging context, it may be NULL - * @return >= 0 if valid, a negative error code otherwise - */ -int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx); - -/** - * Check if the given sample aspect ratio of an image is valid. - * - * It is considered invalid if the denominator is 0 or if applying the ratio - * to the image size would make the smaller dimension less than 1. If the - * sar numerator is 0, it is considered unknown and will return as valid. - * - * @param w width of the image - * @param h height of the image - * @param sar sample aspect ratio of the image - * @return 0 if valid, a negative AVERROR code otherwise - */ -int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar); - -/** - * Overwrite the image data with black. This is suitable for filling a - * sub-rectangle of an image, meaning the padding between the right most pixel - * and the left most pixel on the next line will not be overwritten. For some - * formats, the image size might be rounded up due to inherent alignment. - * - * If the pixel format has alpha, the alpha is cleared to opaque. - * - * This can return an error if the pixel format is not supported. Normally, all - * non-hwaccel pixel formats should be supported. - * - * Passing NULL for dst_data is allowed. Then the function returns whether the - * operation would have succeeded. (It can return an error if the pix_fmt is - * not supported.) - * - * @param dst_data data pointers to destination image - * @param dst_linesize linesizes for the destination image - * @param pix_fmt the pixel format of the image - * @param range the color range of the image (important for colorspaces such as YUV) - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @return 0 if the image data was cleared, a negative AVERROR code otherwise - */ -int av_image_fill_black(uint8_t *dst_data[4], const ptrdiff_t dst_linesize[4], - enum AVPixelFormat pix_fmt, enum AVColorRange range, - int width, int height); - -/** - * @} - */ - - -#endif /* AVUTIL_IMGUTILS_H */ diff --git a/prebuilts/x86_64/include/libavutil/intfloat.h b/prebuilts/x86_64/include/libavutil/intfloat.h deleted file mode 100644 index fe3d7ec..0000000 --- a/prebuilts/x86_64/include/libavutil/intfloat.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2011 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_INTFLOAT_H -#define AVUTIL_INTFLOAT_H - -#include -#include "attributes.h" - -union av_intfloat32 { - uint32_t i; - float f; -}; - -union av_intfloat64 { - uint64_t i; - double f; -}; - -/** - * Reinterpret a 32-bit integer as a float. - */ -static av_always_inline float av_int2float(uint32_t i) -{ - union av_intfloat32 v; - v.i = i; - return v.f; -} - -/** - * Reinterpret a float as a 32-bit integer. - */ -static av_always_inline uint32_t av_float2int(float f) -{ - union av_intfloat32 v; - v.f = f; - return v.i; -} - -/** - * Reinterpret a 64-bit integer as a double. - */ -static av_always_inline double av_int2double(uint64_t i) -{ - union av_intfloat64 v; - v.i = i; - return v.f; -} - -/** - * Reinterpret a double as a 64-bit integer. - */ -static av_always_inline uint64_t av_double2int(double f) -{ - union av_intfloat64 v; - v.f = f; - return v.i; -} - -#endif /* AVUTIL_INTFLOAT_H */ diff --git a/prebuilts/x86_64/include/libavutil/intreadwrite.h b/prebuilts/x86_64/include/libavutil/intreadwrite.h deleted file mode 100644 index 4c8413a..0000000 --- a/prebuilts/x86_64/include/libavutil/intreadwrite.h +++ /dev/null @@ -1,644 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_INTREADWRITE_H -#define AVUTIL_INTREADWRITE_H - -#include -#include "libavutil/avconfig.h" -#include "attributes.h" -#include "bswap.h" - -typedef union { - uint64_t u64; - uint32_t u32[2]; - uint16_t u16[4]; - uint8_t u8 [8]; - double f64; - float f32[2]; -} av_alias av_alias64; - -typedef union { - uint32_t u32; - uint16_t u16[2]; - uint8_t u8 [4]; - float f32; -} av_alias av_alias32; - -typedef union { - uint16_t u16; - uint8_t u8 [2]; -} av_alias av_alias16; - -/* - * Arch-specific headers can provide any combination of - * AV_[RW][BLN](16|24|32|48|64) and AV_(COPY|SWAP|ZERO)(64|128) macros. - * Preprocessor symbols must be defined, even if these are implemented - * as inline functions. - * - * R/W means read/write, B/L/N means big/little/native endianness. - * The following macros require aligned access, compared to their - * unaligned variants: AV_(COPY|SWAP|ZERO)(64|128), AV_[RW]N[8-64]A. - * Incorrect usage may range from abysmal performance to crash - * depending on the platform. - * - * The unaligned variants are AV_[RW][BLN][8-64] and AV_COPY*U. - */ - -#ifdef HAVE_AV_CONFIG_H - -#include "config.h" - -#if ARCH_ARM -# include "arm/intreadwrite.h" -#elif ARCH_AVR32 -# include "avr32/intreadwrite.h" -#elif ARCH_MIPS -# include "mips/intreadwrite.h" -#elif ARCH_PPC -# include "ppc/intreadwrite.h" -#elif ARCH_TOMI -# include "tomi/intreadwrite.h" -#elif ARCH_X86 -# include "x86/intreadwrite.h" -#endif - -#endif /* HAVE_AV_CONFIG_H */ - -/* - * Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers. - */ - -#if AV_HAVE_BIGENDIAN - -# if defined(AV_RN16) && !defined(AV_RB16) -# define AV_RB16(p) AV_RN16(p) -# elif !defined(AV_RN16) && defined(AV_RB16) -# define AV_RN16(p) AV_RB16(p) -# endif - -# if defined(AV_WN16) && !defined(AV_WB16) -# define AV_WB16(p, v) AV_WN16(p, v) -# elif !defined(AV_WN16) && defined(AV_WB16) -# define AV_WN16(p, v) AV_WB16(p, v) -# endif - -# if defined(AV_RN24) && !defined(AV_RB24) -# define AV_RB24(p) AV_RN24(p) -# elif !defined(AV_RN24) && defined(AV_RB24) -# define AV_RN24(p) AV_RB24(p) -# endif - -# if defined(AV_WN24) && !defined(AV_WB24) -# define AV_WB24(p, v) AV_WN24(p, v) -# elif !defined(AV_WN24) && defined(AV_WB24) -# define AV_WN24(p, v) AV_WB24(p, v) -# endif - -# if defined(AV_RN32) && !defined(AV_RB32) -# define AV_RB32(p) AV_RN32(p) -# elif !defined(AV_RN32) && defined(AV_RB32) -# define AV_RN32(p) AV_RB32(p) -# endif - -# if defined(AV_WN32) && !defined(AV_WB32) -# define AV_WB32(p, v) AV_WN32(p, v) -# elif !defined(AV_WN32) && defined(AV_WB32) -# define AV_WN32(p, v) AV_WB32(p, v) -# endif - -# if defined(AV_RN48) && !defined(AV_RB48) -# define AV_RB48(p) AV_RN48(p) -# elif !defined(AV_RN48) && defined(AV_RB48) -# define AV_RN48(p) AV_RB48(p) -# endif - -# if defined(AV_WN48) && !defined(AV_WB48) -# define AV_WB48(p, v) AV_WN48(p, v) -# elif !defined(AV_WN48) && defined(AV_WB48) -# define AV_WN48(p, v) AV_WB48(p, v) -# endif - -# if defined(AV_RN64) && !defined(AV_RB64) -# define AV_RB64(p) AV_RN64(p) -# elif !defined(AV_RN64) && defined(AV_RB64) -# define AV_RN64(p) AV_RB64(p) -# endif - -# if defined(AV_WN64) && !defined(AV_WB64) -# define AV_WB64(p, v) AV_WN64(p, v) -# elif !defined(AV_WN64) && defined(AV_WB64) -# define AV_WN64(p, v) AV_WB64(p, v) -# endif - -#else /* AV_HAVE_BIGENDIAN */ - -# if defined(AV_RN16) && !defined(AV_RL16) -# define AV_RL16(p) AV_RN16(p) -# elif !defined(AV_RN16) && defined(AV_RL16) -# define AV_RN16(p) AV_RL16(p) -# endif - -# if defined(AV_WN16) && !defined(AV_WL16) -# define AV_WL16(p, v) AV_WN16(p, v) -# elif !defined(AV_WN16) && defined(AV_WL16) -# define AV_WN16(p, v) AV_WL16(p, v) -# endif - -# if defined(AV_RN24) && !defined(AV_RL24) -# define AV_RL24(p) AV_RN24(p) -# elif !defined(AV_RN24) && defined(AV_RL24) -# define AV_RN24(p) AV_RL24(p) -# endif - -# if defined(AV_WN24) && !defined(AV_WL24) -# define AV_WL24(p, v) AV_WN24(p, v) -# elif !defined(AV_WN24) && defined(AV_WL24) -# define AV_WN24(p, v) AV_WL24(p, v) -# endif - -# if defined(AV_RN32) && !defined(AV_RL32) -# define AV_RL32(p) AV_RN32(p) -# elif !defined(AV_RN32) && defined(AV_RL32) -# define AV_RN32(p) AV_RL32(p) -# endif - -# if defined(AV_WN32) && !defined(AV_WL32) -# define AV_WL32(p, v) AV_WN32(p, v) -# elif !defined(AV_WN32) && defined(AV_WL32) -# define AV_WN32(p, v) AV_WL32(p, v) -# endif - -# if defined(AV_RN48) && !defined(AV_RL48) -# define AV_RL48(p) AV_RN48(p) -# elif !defined(AV_RN48) && defined(AV_RL48) -# define AV_RN48(p) AV_RL48(p) -# endif - -# if defined(AV_WN48) && !defined(AV_WL48) -# define AV_WL48(p, v) AV_WN48(p, v) -# elif !defined(AV_WN48) && defined(AV_WL48) -# define AV_WN48(p, v) AV_WL48(p, v) -# endif - -# if defined(AV_RN64) && !defined(AV_RL64) -# define AV_RL64(p) AV_RN64(p) -# elif !defined(AV_RN64) && defined(AV_RL64) -# define AV_RN64(p) AV_RL64(p) -# endif - -# if defined(AV_WN64) && !defined(AV_WL64) -# define AV_WL64(p, v) AV_WN64(p, v) -# elif !defined(AV_WN64) && defined(AV_WL64) -# define AV_WN64(p, v) AV_WL64(p, v) -# endif - -#endif /* !AV_HAVE_BIGENDIAN */ - -/* - * Define AV_[RW]N helper macros to simplify definitions not provided - * by per-arch headers. - */ - -#if defined(__GNUC__) - -union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias; -union unaligned_32 { uint32_t l; } __attribute__((packed)) av_alias; -union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; - -# define AV_RN(s, p) (((const union unaligned_##s *) (p))->l) -# define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v)) - -#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_X64) || defined(_M_ARM64)) && AV_HAVE_FAST_UNALIGNED - -# define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p))) -# define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v)) - -#elif AV_HAVE_FAST_UNALIGNED - -# define AV_RN(s, p) (((const av_alias##s*)(p))->u##s) -# define AV_WN(s, p, v) (((av_alias##s*)(p))->u##s = (v)) - -#else - -#ifndef AV_RB16 -# define AV_RB16(x) \ - ((((const uint8_t*)(x))[0] << 8) | \ - ((const uint8_t*)(x))[1]) -#endif -#ifndef AV_WB16 -# define AV_WB16(p, val) do { \ - uint16_t d = (val); \ - ((uint8_t*)(p))[1] = (d); \ - ((uint8_t*)(p))[0] = (d)>>8; \ - } while(0) -#endif - -#ifndef AV_RL16 -# define AV_RL16(x) \ - ((((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL16 -# define AV_WL16(p, val) do { \ - uint16_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - } while(0) -#endif - -#ifndef AV_RB32 -# define AV_RB32(x) \ - (((uint32_t)((const uint8_t*)(x))[0] << 24) | \ - (((const uint8_t*)(x))[1] << 16) | \ - (((const uint8_t*)(x))[2] << 8) | \ - ((const uint8_t*)(x))[3]) -#endif -#ifndef AV_WB32 -# define AV_WB32(p, val) do { \ - uint32_t d = (val); \ - ((uint8_t*)(p))[3] = (d); \ - ((uint8_t*)(p))[2] = (d)>>8; \ - ((uint8_t*)(p))[1] = (d)>>16; \ - ((uint8_t*)(p))[0] = (d)>>24; \ - } while(0) -#endif - -#ifndef AV_RL32 -# define AV_RL32(x) \ - (((uint32_t)((const uint8_t*)(x))[3] << 24) | \ - (((const uint8_t*)(x))[2] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL32 -# define AV_WL32(p, val) do { \ - uint32_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - } while(0) -#endif - -#ifndef AV_RB64 -# define AV_RB64(x) \ - (((uint64_t)((const uint8_t*)(x))[0] << 56) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 48) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[5] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[6] << 8) | \ - (uint64_t)((const uint8_t*)(x))[7]) -#endif -#ifndef AV_WB64 -# define AV_WB64(p, val) do { \ - uint64_t d = (val); \ - ((uint8_t*)(p))[7] = (d); \ - ((uint8_t*)(p))[6] = (d)>>8; \ - ((uint8_t*)(p))[5] = (d)>>16; \ - ((uint8_t*)(p))[4] = (d)>>24; \ - ((uint8_t*)(p))[3] = (d)>>32; \ - ((uint8_t*)(p))[2] = (d)>>40; \ - ((uint8_t*)(p))[1] = (d)>>48; \ - ((uint8_t*)(p))[0] = (d)>>56; \ - } while(0) -#endif - -#ifndef AV_RL64 -# define AV_RL64(x) \ - (((uint64_t)((const uint8_t*)(x))[7] << 56) | \ - ((uint64_t)((const uint8_t*)(x))[6] << 48) | \ - ((uint64_t)((const uint8_t*)(x))[5] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ - (uint64_t)((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL64 -# define AV_WL64(p, val) do { \ - uint64_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - ((uint8_t*)(p))[4] = (d)>>32; \ - ((uint8_t*)(p))[5] = (d)>>40; \ - ((uint8_t*)(p))[6] = (d)>>48; \ - ((uint8_t*)(p))[7] = (d)>>56; \ - } while(0) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RN(s, p) AV_RB##s(p) -# define AV_WN(s, p, v) AV_WB##s(p, v) -#else -# define AV_RN(s, p) AV_RL##s(p) -# define AV_WN(s, p, v) AV_WL##s(p, v) -#endif - -#endif /* HAVE_FAST_UNALIGNED */ - -#ifndef AV_RN16 -# define AV_RN16(p) AV_RN(16, p) -#endif - -#ifndef AV_RN32 -# define AV_RN32(p) AV_RN(32, p) -#endif - -#ifndef AV_RN64 -# define AV_RN64(p) AV_RN(64, p) -#endif - -#ifndef AV_WN16 -# define AV_WN16(p, v) AV_WN(16, p, v) -#endif - -#ifndef AV_WN32 -# define AV_WN32(p, v) AV_WN(32, p, v) -#endif - -#ifndef AV_WN64 -# define AV_WN64(p, v) AV_WN(64, p, v) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RB(s, p) AV_RN##s(p) -# define AV_WB(s, p, v) AV_WN##s(p, v) -# define AV_RL(s, p) av_bswap##s(AV_RN##s(p)) -# define AV_WL(s, p, v) AV_WN##s(p, av_bswap##s(v)) -#else -# define AV_RB(s, p) av_bswap##s(AV_RN##s(p)) -# define AV_WB(s, p, v) AV_WN##s(p, av_bswap##s(v)) -# define AV_RL(s, p) AV_RN##s(p) -# define AV_WL(s, p, v) AV_WN##s(p, v) -#endif - -#define AV_RB8(x) (((const uint8_t*)(x))[0]) -#define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0) - -#define AV_RL8(x) AV_RB8(x) -#define AV_WL8(p, d) AV_WB8(p, d) - -#ifndef AV_RB16 -# define AV_RB16(p) AV_RB(16, p) -#endif -#ifndef AV_WB16 -# define AV_WB16(p, v) AV_WB(16, p, v) -#endif - -#ifndef AV_RL16 -# define AV_RL16(p) AV_RL(16, p) -#endif -#ifndef AV_WL16 -# define AV_WL16(p, v) AV_WL(16, p, v) -#endif - -#ifndef AV_RB32 -# define AV_RB32(p) AV_RB(32, p) -#endif -#ifndef AV_WB32 -# define AV_WB32(p, v) AV_WB(32, p, v) -#endif - -#ifndef AV_RL32 -# define AV_RL32(p) AV_RL(32, p) -#endif -#ifndef AV_WL32 -# define AV_WL32(p, v) AV_WL(32, p, v) -#endif - -#ifndef AV_RB64 -# define AV_RB64(p) AV_RB(64, p) -#endif -#ifndef AV_WB64 -# define AV_WB64(p, v) AV_WB(64, p, v) -#endif - -#ifndef AV_RL64 -# define AV_RL64(p) AV_RL(64, p) -#endif -#ifndef AV_WL64 -# define AV_WL64(p, v) AV_WL(64, p, v) -#endif - -#ifndef AV_RB24 -# define AV_RB24(x) \ - ((((const uint8_t*)(x))[0] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[2]) -#endif -#ifndef AV_WB24 -# define AV_WB24(p, d) do { \ - ((uint8_t*)(p))[2] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[0] = (d)>>16; \ - } while(0) -#endif - -#ifndef AV_RL24 -# define AV_RL24(x) \ - ((((const uint8_t*)(x))[2] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL24 -# define AV_WL24(p, d) do { \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - } while(0) -#endif - -#ifndef AV_RB48 -# define AV_RB48(x) \ - (((uint64_t)((const uint8_t*)(x))[0] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 8) | \ - (uint64_t)((const uint8_t*)(x))[5]) -#endif -#ifndef AV_WB48 -# define AV_WB48(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[5] = (d); \ - ((uint8_t*)(p))[4] = (d)>>8; \ - ((uint8_t*)(p))[3] = (d)>>16; \ - ((uint8_t*)(p))[2] = (d)>>24; \ - ((uint8_t*)(p))[1] = (d)>>32; \ - ((uint8_t*)(p))[0] = (d)>>40; \ - } while(0) -#endif - -#ifndef AV_RL48 -# define AV_RL48(x) \ - (((uint64_t)((const uint8_t*)(x))[5] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ - (uint64_t)((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL48 -# define AV_WL48(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - ((uint8_t*)(p))[4] = (d)>>32; \ - ((uint8_t*)(p))[5] = (d)>>40; \ - } while(0) -#endif - -/* - * The AV_[RW]NA macros access naturally aligned data - * in a type-safe way. - */ - -#define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s) -#define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v)) - -#ifndef AV_RN16A -# define AV_RN16A(p) AV_RNA(16, p) -#endif - -#ifndef AV_RN32A -# define AV_RN32A(p) AV_RNA(32, p) -#endif - -#ifndef AV_RN64A -# define AV_RN64A(p) AV_RNA(64, p) -#endif - -#ifndef AV_WN16A -# define AV_WN16A(p, v) AV_WNA(16, p, v) -#endif - -#ifndef AV_WN32A -# define AV_WN32A(p, v) AV_WNA(32, p, v) -#endif - -#ifndef AV_WN64A -# define AV_WN64A(p, v) AV_WNA(64, p, v) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RLA(s, p) av_bswap##s(AV_RN##s##A(p)) -# define AV_WLA(s, p, v) AV_WN##s##A(p, av_bswap##s(v)) -#else -# define AV_RLA(s, p) AV_RN##s##A(p) -# define AV_WLA(s, p, v) AV_WN##s##A(p, v) -#endif - -#ifndef AV_RL64A -# define AV_RL64A(p) AV_RLA(64, p) -#endif -#ifndef AV_WL64A -# define AV_WL64A(p, v) AV_WLA(64, p, v) -#endif - -/* - * The AV_COPYxxU macros are suitable for copying data to/from unaligned - * memory locations. - */ - -#define AV_COPYU(n, d, s) AV_WN##n(d, AV_RN##n(s)); - -#ifndef AV_COPY16U -# define AV_COPY16U(d, s) AV_COPYU(16, d, s) -#endif - -#ifndef AV_COPY32U -# define AV_COPY32U(d, s) AV_COPYU(32, d, s) -#endif - -#ifndef AV_COPY64U -# define AV_COPY64U(d, s) AV_COPYU(64, d, s) -#endif - -#ifndef AV_COPY128U -# define AV_COPY128U(d, s) \ - do { \ - AV_COPY64U(d, s); \ - AV_COPY64U((char *)(d) + 8, (const char *)(s) + 8); \ - } while(0) -#endif - -/* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be - * naturally aligned. They may be implemented using MMX, - * so emms_c() must be called before using any float code - * afterwards. - */ - -#define AV_COPY(n, d, s) \ - (((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n) - -#ifndef AV_COPY16 -# define AV_COPY16(d, s) AV_COPY(16, d, s) -#endif - -#ifndef AV_COPY32 -# define AV_COPY32(d, s) AV_COPY(32, d, s) -#endif - -#ifndef AV_COPY64 -# define AV_COPY64(d, s) AV_COPY(64, d, s) -#endif - -#ifndef AV_COPY128 -# define AV_COPY128(d, s) \ - do { \ - AV_COPY64(d, s); \ - AV_COPY64((char*)(d)+8, (char*)(s)+8); \ - } while(0) -#endif - -#define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*)(b)) - -#ifndef AV_SWAP64 -# define AV_SWAP64(a, b) AV_SWAP(64, a, b) -#endif - -#define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0) - -#ifndef AV_ZERO16 -# define AV_ZERO16(d) AV_ZERO(16, d) -#endif - -#ifndef AV_ZERO32 -# define AV_ZERO32(d) AV_ZERO(32, d) -#endif - -#ifndef AV_ZERO64 -# define AV_ZERO64(d) AV_ZERO(64, d) -#endif - -#ifndef AV_ZERO128 -# define AV_ZERO128(d) \ - do { \ - AV_ZERO64(d); \ - AV_ZERO64((char*)(d)+8); \ - } while(0) -#endif - -#endif /* AVUTIL_INTREADWRITE_H */ diff --git a/prebuilts/x86_64/include/libavutil/lfg.h b/prebuilts/x86_64/include/libavutil/lfg.h deleted file mode 100644 index 2b66920..0000000 --- a/prebuilts/x86_64/include/libavutil/lfg.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Lagged Fibonacci PRNG - * Copyright (c) 2008 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LFG_H -#define AVUTIL_LFG_H - -#include - -/** - * Context structure for the Lagged Fibonacci PRNG. - * The exact layout, types and content of this struct may change and should - * not be accessed directly. Only its sizeof() is guranteed to stay the same - * to allow easy instanciation. - */ -typedef struct AVLFG { - unsigned int state[64]; - int index; -} AVLFG; - -void av_lfg_init(AVLFG *c, unsigned int seed); - -/** - * Seed the state of the ALFG using binary data. - * - * Return value: 0 on success, negative value (AVERROR) on failure. - */ -int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length); - -/** - * Get the next random unsigned 32-bit number using an ALFG. - * - * Please also consider a simple LCG like state= state*1664525+1013904223, - * it may be good enough and faster for your specific use case. - */ -static inline unsigned int av_lfg_get(AVLFG *c){ - unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63]; - c->index += 1U; - return a; -} - -/** - * Get the next random unsigned 32-bit number using a MLFG. - * - * Please also consider av_lfg_get() above, it is faster. - */ -static inline unsigned int av_mlfg_get(AVLFG *c){ - unsigned int a= c->state[(c->index-55) & 63]; - unsigned int b= c->state[(c->index-24) & 63]; - a = c->state[c->index & 63] = 2*a*b+a+b; - c->index += 1U; - return a; -} - -/** - * Get the next two numbers generated by a Box-Muller Gaussian - * generator using the random numbers issued by lfg. - * - * @param out array where the two generated numbers are placed - */ -void av_bmg_get(AVLFG *lfg, double out[2]); - -#endif /* AVUTIL_LFG_H */ diff --git a/prebuilts/x86_64/include/libavutil/log.h b/prebuilts/x86_64/include/libavutil/log.h deleted file mode 100644 index 8edd6bb..0000000 --- a/prebuilts/x86_64/include/libavutil/log.h +++ /dev/null @@ -1,401 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LOG_H -#define AVUTIL_LOG_H - -#include -#include "avutil.h" -#include "attributes.h" -#include "version.h" - -typedef enum { - AV_CLASS_CATEGORY_NA = 0, - AV_CLASS_CATEGORY_INPUT, - AV_CLASS_CATEGORY_OUTPUT, - AV_CLASS_CATEGORY_MUXER, - AV_CLASS_CATEGORY_DEMUXER, - AV_CLASS_CATEGORY_ENCODER, - AV_CLASS_CATEGORY_DECODER, - AV_CLASS_CATEGORY_FILTER, - AV_CLASS_CATEGORY_BITSTREAM_FILTER, - AV_CLASS_CATEGORY_SWSCALER, - AV_CLASS_CATEGORY_SWRESAMPLER, - AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT = 40, - AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, - AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, - AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT, - AV_CLASS_CATEGORY_DEVICE_OUTPUT, - AV_CLASS_CATEGORY_DEVICE_INPUT, - AV_CLASS_CATEGORY_NB ///< not part of ABI/API -}AVClassCategory; - -#define AV_IS_INPUT_DEVICE(category) \ - (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_INPUT)) - -#define AV_IS_OUTPUT_DEVICE(category) \ - (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_OUTPUT)) - -struct AVOptionRanges; - -/** - * Describe the class of an AVClass context structure. That is an - * arbitrary struct of which the first field is a pointer to an - * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). - */ -typedef struct AVClass { - /** - * The name of the class; usually it is the same name as the - * context structure type to which the AVClass is associated. - */ - const char* class_name; - - /** - * A pointer to a function which returns the name of a context - * instance ctx associated with the class. - */ - const char* (*item_name)(void* ctx); - - /** - * a pointer to the first option specified in the class if any or NULL - * - * @see av_set_default_options() - */ - const struct AVOption *option; - - /** - * LIBAVUTIL_VERSION with which this structure was created. - * This is used to allow fields to be added without requiring major - * version bumps everywhere. - */ - - int version; - - /** - * Offset in the structure where log_level_offset is stored. - * 0 means there is no such variable - */ - int log_level_offset_offset; - - /** - * Offset in the structure where a pointer to the parent context for - * logging is stored. For example a decoder could pass its AVCodecContext - * to eval as such a parent context, which an av_log() implementation - * could then leverage to display the parent context. - * The offset can be NULL. - */ - int parent_log_context_offset; - - /** - * Return next AVOptions-enabled child or NULL - */ - void* (*child_next)(void *obj, void *prev); - -#if FF_API_CHILD_CLASS_NEXT - /** - * Return an AVClass corresponding to the next potential - * AVOptions-enabled child. - * - * The difference between child_next and this is that - * child_next iterates over _already existing_ objects, while - * child_class_next iterates over _all possible_ children. - */ - attribute_deprecated - const struct AVClass* (*child_class_next)(const struct AVClass *prev); -#endif - - /** - * Category used for visualization (like color) - * This is only set if the category is equal for all objects using this class. - * available since version (51 << 16 | 56 << 8 | 100) - */ - AVClassCategory category; - - /** - * Callback to return the category. - * available since version (51 << 16 | 59 << 8 | 100) - */ - AVClassCategory (*get_category)(void* ctx); - - /** - * Callback to return the supported/allowed ranges. - * available since version (52.12) - */ - int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags); - - /** - * Iterate over the AVClasses corresponding to potential AVOptions-enabled - * children. - * - * @param iter pointer to opaque iteration state. The caller must initialize - * *iter to NULL before the first call. - * @return AVClass for the next AVOptions-enabled child or NULL if there are - * no more such children. - * - * @note The difference between child_next and this is that child_next - * iterates over _already existing_ objects, while child_class_iterate - * iterates over _all possible_ children. - */ - const struct AVClass* (*child_class_iterate)(void **iter); -} AVClass; - -/** - * @addtogroup lavu_log - * - * @{ - * - * @defgroup lavu_log_constants Logging Constants - * - * @{ - */ - -/** - * Print no output. - */ -#define AV_LOG_QUIET -8 - -/** - * Something went really wrong and we will crash now. - */ -#define AV_LOG_PANIC 0 - -/** - * Something went wrong and recovery is not possible. - * For example, no header was found for a format which depends - * on headers or an illegal combination of parameters is used. - */ -#define AV_LOG_FATAL 8 - -/** - * Something went wrong and cannot losslessly be recovered. - * However, not all future data is affected. - */ -#define AV_LOG_ERROR 16 - -/** - * Something somehow does not look correct. This may or may not - * lead to problems. An example would be the use of '-vstrict -2'. - */ -#define AV_LOG_WARNING 24 - -/** - * Standard information. - */ -#define AV_LOG_INFO 32 - -/** - * Detailed information. - */ -#define AV_LOG_VERBOSE 40 - -/** - * Stuff which is only useful for libav* developers. - */ -#define AV_LOG_DEBUG 48 - -/** - * Extremely verbose debugging, useful for libav* development. - */ -#define AV_LOG_TRACE 56 - -#define AV_LOG_MAX_OFFSET (AV_LOG_TRACE - AV_LOG_QUIET) - -/** - * @} - */ - -/** - * Sets additional colors for extended debugging sessions. - * @code - av_log(ctx, AV_LOG_DEBUG|AV_LOG_C(134), "Message in purple\n"); - @endcode - * Requires 256color terminal support. Uses outside debugging is not - * recommended. - */ -#define AV_LOG_C(x) ((x) << 8) - -/** - * Send the specified message to the log if the level is less than or equal - * to the current av_log_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log_set_callback - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct or NULL if general log. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - */ -void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4); - -/** - * Send the specified message to the log once with the initial_level and then with - * the subsequent_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct or NULL if general log. - * @param initial_level importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant" for the first occurance. - * @param subsequent_level importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant" after the first occurance. - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param state a variable to keep trak of if a message has already been printed - * this must be initialized to 0 before the first use. The same state - * must not be accessed by 2 Threads simultaneously. - */ -void av_log_once(void* avcl, int initial_level, int subsequent_level, int *state, const char *fmt, ...) av_printf_format(5, 6); - - -/** - * Send the specified message to the log if the level is less than or equal - * to the current av_log_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log_set_callback - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param vl The arguments referenced by the format string. - */ -void av_vlog(void *avcl, int level, const char *fmt, va_list vl); - -/** - * Get the current log level - * - * @see lavu_log_constants - * - * @return Current log level - */ -int av_log_get_level(void); - -/** - * Set the log level - * - * @see lavu_log_constants - * - * @param level Logging level - */ -void av_log_set_level(int level); - -/** - * Set the logging callback - * - * @note The callback must be thread safe, even if the application does not use - * threads itself as some codecs are multithreaded. - * - * @see av_log_default_callback - * - * @param callback A logging function with a compatible signature. - */ -void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)); - -/** - * Default logging callback - * - * It prints the message to stderr, optionally colorizing it. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param vl The arguments referenced by the format string. - */ -void av_log_default_callback(void *avcl, int level, const char *fmt, - va_list vl); - -/** - * Return the context name - * - * @param ctx The AVClass context - * - * @return The AVClass class_name - */ -const char* av_default_item_name(void* ctx); -AVClassCategory av_default_get_category(void *ptr); - -/** - * Format a line of log the same way as the default callback. - * @param line buffer to receive the formatted line - * @param line_size size of the buffer - * @param print_prefix used to store whether the prefix must be printed; - * must point to a persistent integer initially set to 1 - */ -void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl, - char *line, int line_size, int *print_prefix); - -/** - * Format a line of log the same way as the default callback. - * @param line buffer to receive the formatted line; - * may be NULL if line_size is 0 - * @param line_size size of the buffer; at most line_size-1 characters will - * be written to the buffer, plus one null terminator - * @param print_prefix used to store whether the prefix must be printed; - * must point to a persistent integer initially set to 1 - * @return Returns a negative value if an error occurred, otherwise returns - * the number of characters that would have been written for a - * sufficiently large buffer, not including the terminating null - * character. If the return value is not less than line_size, it means - * that the log message was truncated to fit the buffer. - */ -int av_log_format_line2(void *ptr, int level, const char *fmt, va_list vl, - char *line, int line_size, int *print_prefix); - -/** - * Skip repeated messages, this requires the user app to use av_log() instead of - * (f)printf as the 2 would otherwise interfere and lead to - * "Last message repeated x times" messages below (f)printf messages with some - * bad luck. - * Also to receive the last, "last repeated" line if any, the user app must - * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end - */ -#define AV_LOG_SKIP_REPEATED 1 - -/** - * Include the log severity in messages originating from codecs. - * - * Results in messages such as: - * [rawvideo @ 0xDEADBEEF] [error] encode did not produce valid pts - */ -#define AV_LOG_PRINT_LEVEL 2 - -void av_log_set_flags(int arg); -int av_log_get_flags(void); - -/** - * @} - */ - -#endif /* AVUTIL_LOG_H */ diff --git a/prebuilts/x86_64/include/libavutil/lzo.h b/prebuilts/x86_64/include/libavutil/lzo.h deleted file mode 100644 index c034039..0000000 --- a/prebuilts/x86_64/include/libavutil/lzo.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * LZO 1x decompression - * copyright (c) 2006 Reimar Doeffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LZO_H -#define AVUTIL_LZO_H - -/** - * @defgroup lavu_lzo LZO - * @ingroup lavu_crypto - * - * @{ - */ - -#include - -/** @name Error flags returned by av_lzo1x_decode - * @{ */ -/// end of the input buffer reached before decoding finished -#define AV_LZO_INPUT_DEPLETED 1 -/// decoded data did not fit into output buffer -#define AV_LZO_OUTPUT_FULL 2 -/// a reference to previously decoded data was wrong -#define AV_LZO_INVALID_BACKPTR 4 -/// a non-specific error in the compressed bitstream -#define AV_LZO_ERROR 8 -/** @} */ - -#define AV_LZO_INPUT_PADDING 8 -#define AV_LZO_OUTPUT_PADDING 12 - -/** - * @brief Decodes LZO 1x compressed data. - * @param out output buffer - * @param outlen size of output buffer, number of bytes left are returned here - * @param in input buffer - * @param inlen size of input buffer, number of bytes left are returned here - * @return 0 on success, otherwise a combination of the error flags above - * - * Make sure all buffers are appropriately padded, in must provide - * AV_LZO_INPUT_PADDING, out must provide AV_LZO_OUTPUT_PADDING additional bytes. - */ -int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen); - -/** - * @} - */ - -#endif /* AVUTIL_LZO_H */ diff --git a/prebuilts/x86_64/include/libavutil/macros.h b/prebuilts/x86_64/include/libavutil/macros.h deleted file mode 100644 index 2007ee5..0000000 --- a/prebuilts/x86_64/include/libavutil/macros.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu - * Utility Preprocessor macros - */ - -#ifndef AVUTIL_MACROS_H -#define AVUTIL_MACROS_H - -/** - * @addtogroup preproc_misc Preprocessor String Macros - * - * 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)) - -#endif /* AVUTIL_MACROS_H */ diff --git a/prebuilts/x86_64/include/libavutil/mastering_display_metadata.h b/prebuilts/x86_64/include/libavutil/mastering_display_metadata.h deleted file mode 100644 index c23b07c..0000000 --- a/prebuilts/x86_64/include/libavutil/mastering_display_metadata.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2016 Neil Birkbeck - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MASTERING_DISPLAY_METADATA_H -#define AVUTIL_MASTERING_DISPLAY_METADATA_H - -#include "frame.h" -#include "rational.h" - - -/** - * Mastering display metadata capable of representing the color volume of - * the display used to master the content (SMPTE 2086:2014). - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with av_mastering_display_metadata_alloc() - * and its size is not a part of the public ABI. - */ -typedef struct AVMasteringDisplayMetadata { - /** - * CIE 1931 xy chromaticity coords of color primaries (r, g, b order). - */ - AVRational display_primaries[3][2]; - - /** - * CIE 1931 xy chromaticity coords of white point. - */ - AVRational white_point[2]; - - /** - * Min luminance of mastering display (cd/m^2). - */ - AVRational min_luminance; - - /** - * Max luminance of mastering display (cd/m^2). - */ - AVRational max_luminance; - - /** - * Flag indicating whether the display primaries (and white point) are set. - */ - int has_primaries; - - /** - * Flag indicating whether the luminance (min_ and max_) have been set. - */ - int has_luminance; - -} AVMasteringDisplayMetadata; - -/** - * Allocate an AVMasteringDisplayMetadata structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVMasteringDisplayMetadata filled with default values or NULL - * on failure. - */ -AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void); - -/** - * Allocate a complete AVMasteringDisplayMetadata and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVMasteringDisplayMetadata structure to be filled by caller. - */ -AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFrame *frame); - -/** - * Content light level needed by to transmit HDR over HDMI (CTA-861.3). - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with av_content_light_metadata_alloc() - * and its size is not a part of the public ABI. - */ -typedef struct AVContentLightMetadata { - /** - * Max content light level (cd/m^2). - */ - unsigned MaxCLL; - - /** - * Max average light level per frame (cd/m^2). - */ - unsigned MaxFALL; -} AVContentLightMetadata; - -/** - * Allocate an AVContentLightMetadata structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVContentLightMetadata filled with default values or NULL - * on failure. - */ -AVContentLightMetadata *av_content_light_metadata_alloc(size_t *size); - -/** - * Allocate a complete AVContentLightMetadata and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVContentLightMetadata structure to be filled by caller. - */ -AVContentLightMetadata *av_content_light_metadata_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_MASTERING_DISPLAY_METADATA_H */ diff --git a/prebuilts/x86_64/include/libavutil/mathematics.h b/prebuilts/x86_64/include/libavutil/mathematics.h deleted file mode 100644 index 64d4137..0000000 --- a/prebuilts/x86_64/include/libavutil/mathematics.h +++ /dev/null @@ -1,243 +0,0 @@ -/* - * copyright (c) 2005-2012 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @addtogroup lavu_math - * Mathematical utilities for working with timestamp and time base. - */ - -#ifndef AVUTIL_MATHEMATICS_H -#define AVUTIL_MATHEMATICS_H - -#include -#include -#include "attributes.h" -#include "rational.h" -#include "intfloat.h" - -#ifndef M_E -#define M_E 2.7182818284590452354 /* e */ -#endif -#ifndef M_LN2 -#define M_LN2 0.69314718055994530942 /* log_e 2 */ -#endif -#ifndef M_LN10 -#define M_LN10 2.30258509299404568402 /* log_e 10 */ -#endif -#ifndef M_LOG2_10 -#define M_LOG2_10 3.32192809488736234787 /* log_2 10 */ -#endif -#ifndef M_PHI -#define M_PHI 1.61803398874989484820 /* phi / golden ratio */ -#endif -#ifndef M_PI -#define M_PI 3.14159265358979323846 /* pi */ -#endif -#ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 /* pi/2 */ -#endif -#ifndef M_SQRT1_2 -#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ -#endif -#ifndef M_SQRT2 -#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ -#endif -#ifndef NAN -#define NAN av_int2float(0x7fc00000) -#endif -#ifndef INFINITY -#define INFINITY av_int2float(0x7f800000) -#endif - -/** - * @addtogroup lavu_math - * - * @{ - */ - -/** - * Rounding methods. - */ -enum AVRounding { - AV_ROUND_ZERO = 0, ///< Round toward zero. - AV_ROUND_INF = 1, ///< Round away from zero. - AV_ROUND_DOWN = 2, ///< Round toward -infinity. - AV_ROUND_UP = 3, ///< Round toward +infinity. - AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero. - /** - * Flag telling rescaling functions to pass `INT64_MIN`/`MAX` through - * unchanged, avoiding special cases for #AV_NOPTS_VALUE. - * - * Unlike other values of the enumeration AVRounding, this value is a - * bitmask that must be used in conjunction with another value of the - * enumeration through a bitwise OR, in order to set behavior for normal - * cases. - * - * @code{.c} - * av_rescale_rnd(3, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); - * // Rescaling 3: - * // Calculating 3 * 1 / 2 - * // 3 / 2 is rounded up to 2 - * // => 2 - * - * av_rescale_rnd(AV_NOPTS_VALUE, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); - * // Rescaling AV_NOPTS_VALUE: - * // AV_NOPTS_VALUE == INT64_MIN - * // AV_NOPTS_VALUE is passed through - * // => AV_NOPTS_VALUE - * @endcode - */ - AV_ROUND_PASS_MINMAX = 8192, -}; - -/** - * Compute the greatest common divisor of two integer operands. - * - * @param a,b Operands - * @return GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0; - * if a == 0 and b == 0, returns 0. - */ -int64_t av_const av_gcd(int64_t a, int64_t b); - -/** - * Rescale a 64-bit integer with rounding to nearest. - * - * The operation is mathematically equivalent to `a * b / c`, but writing that - * directly can overflow. - * - * This function is equivalent to av_rescale_rnd() with #AV_ROUND_NEAR_INF. - * - * @see av_rescale_rnd(), av_rescale_q(), av_rescale_q_rnd() - */ -int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const; - -/** - * Rescale a 64-bit integer with specified rounding. - * - * The operation is mathematically equivalent to `a * b / c`, but writing that - * directly can overflow, and does not support different rounding methods. - * If the result is not representable then INT64_MIN is returned. - * - * @see av_rescale(), av_rescale_q(), av_rescale_q_rnd() - */ -int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd) av_const; - -/** - * Rescale a 64-bit integer by 2 rational numbers. - * - * The operation is mathematically equivalent to `a * bq / cq`. - * - * This function is equivalent to av_rescale_q_rnd() with #AV_ROUND_NEAR_INF. - * - * @see av_rescale(), av_rescale_rnd(), av_rescale_q_rnd() - */ -int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; - -/** - * Rescale a 64-bit integer by 2 rational numbers with specified rounding. - * - * The operation is mathematically equivalent to `a * bq / cq`. - * - * @see av_rescale(), av_rescale_rnd(), av_rescale_q() - */ -int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, - enum AVRounding rnd) av_const; - -/** - * Compare two timestamps each in its own time base. - * - * @return One of the following values: - * - -1 if `ts_a` is before `ts_b` - * - 1 if `ts_a` is after `ts_b` - * - 0 if they represent the same position - * - * @warning - * The result of the function is undefined if one of the timestamps is outside - * the `int64_t` range when represented in the other's timebase. - */ -int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b); - -/** - * Compare the remainders of two integer operands divided by a common divisor. - * - * In other words, compare the least significant `log2(mod)` bits of integers - * `a` and `b`. - * - * @code{.c} - * av_compare_mod(0x11, 0x02, 0x10) < 0 // since 0x11 % 0x10 (0x1) < 0x02 % 0x10 (0x2) - * av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) > 0x02 % 0x20 (0x02) - * @endcode - * - * @param a,b Operands - * @param mod Divisor; must be a power of 2 - * @return - * - a negative value if `a % mod < b % mod` - * - a positive value if `a % mod > b % mod` - * - zero if `a % mod == b % mod` - */ -int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod); - -/** - * Rescale a timestamp while preserving known durations. - * - * This function is designed to be called per audio packet to scale the input - * timestamp to a different time base. Compared to a simple av_rescale_q() - * call, this function is robust against possible inconsistent frame durations. - * - * The `last` parameter is a state variable that must be preserved for all - * subsequent calls for the same stream. For the first call, `*last` should be - * initialized to #AV_NOPTS_VALUE. - * - * @param[in] in_tb Input time base - * @param[in] in_ts Input timestamp - * @param[in] fs_tb Duration time base; typically this is finer-grained - * (greater) than `in_tb` and `out_tb` - * @param[in] duration Duration till the next call to this function (i.e. - * duration of the current packet/frame) - * @param[in,out] last Pointer to a timestamp expressed in terms of - * `fs_tb`, acting as a state variable - * @param[in] out_tb Output timebase - * @return Timestamp expressed in terms of `out_tb` - * - * @note In the context of this function, "duration" is in term of samples, not - * seconds. - */ -int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts, AVRational fs_tb, int duration, int64_t *last, AVRational out_tb); - -/** - * Add a value to a timestamp. - * - * This function guarantees that when the same value is repeatly added that - * no accumulation of rounding errors occurs. - * - * @param[in] ts Input timestamp - * @param[in] ts_tb Input timestamp time base - * @param[in] inc Value to be added - * @param[in] inc_tb Time base of `inc` - */ -int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc); - - -/** - * @} - */ - -#endif /* AVUTIL_MATHEMATICS_H */ diff --git a/prebuilts/x86_64/include/libavutil/md5.h b/prebuilts/x86_64/include/libavutil/md5.h deleted file mode 100644 index ca72ccb..0000000 --- a/prebuilts/x86_64/include/libavutil/md5.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_md5 - * Public header for MD5 hash function implementation. - */ - -#ifndef AVUTIL_MD5_H -#define AVUTIL_MD5_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_md5 MD5 - * @ingroup lavu_hash - * MD5 hash function implementation. - * - * @{ - */ - -extern const int av_md5_size; - -struct AVMD5; - -/** - * Allocate an AVMD5 context. - */ -struct AVMD5 *av_md5_alloc(void); - -/** - * Initialize MD5 hashing. - * - * @param ctx pointer to the function context (of size av_md5_size) - */ -void av_md5_init(struct AVMD5 *ctx); - -/** - * Update hash value. - * - * @param ctx hash function context - * @param src input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, int len); -#else -void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param ctx hash function context - * @param dst buffer where output digest value is stored - */ -void av_md5_final(struct AVMD5 *ctx, uint8_t *dst); - -/** - * Hash an array of data. - * - * @param dst The output buffer to write the digest into - * @param src The data to hash - * @param len The length of the data, in bytes - */ -#if FF_API_CRYPTO_SIZE_T -void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len); -#else -void av_md5_sum(uint8_t *dst, const uint8_t *src, size_t len); -#endif - -/** - * @} - */ - -#endif /* AVUTIL_MD5_H */ diff --git a/prebuilts/x86_64/include/libavutil/mem.h b/prebuilts/x86_64/include/libavutil/mem.h deleted file mode 100644 index e21a1fe..0000000 --- a/prebuilts/x86_64/include/libavutil/mem.h +++ /dev/null @@ -1,706 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_mem - * Memory handling functions - */ - -#ifndef AVUTIL_MEM_H -#define AVUTIL_MEM_H - -#include -#include - -#include "attributes.h" -#include "error.h" -#include "avutil.h" -#include "version.h" - -/** - * @addtogroup lavu_mem - * Utilities for manipulating memory. - * - * FFmpeg has several applications of memory that are not required of a typical - * program. For example, the computing-heavy components like video decoding and - * encoding can be sped up significantly through the use of aligned memory. - * - * However, for each of FFmpeg's applications of memory, there might not be a - * recognized or standardized API for that specific use. Memory alignment, for - * instance, varies wildly depending on operating systems, architectures, and - * compilers. Hence, this component of @ref libavutil is created to make - * dealing with memory consistently possible on all platforms. - * - * @{ - */ - -#if FF_API_DECLARE_ALIGNED -/** - * - * @defgroup lavu_mem_macros Alignment Macros - * Helper macros for declaring aligned variables. - * @{ - */ - -/** - * @def DECLARE_ALIGNED(n,t,v) - * Declare a variable that is aligned in memory. - * - * @code{.c} - * DECLARE_ALIGNED(16, uint16_t, aligned_int) = 42; - * DECLARE_ALIGNED(32, uint8_t, aligned_array)[128]; - * - * // The default-alignment equivalent would be - * uint16_t aligned_int = 42; - * uint8_t aligned_array[128]; - * @endcode - * - * @param n Minimum alignment in bytes - * @param t Type of the variable (or array element) - * @param v Name of the variable - */ - -/** - * @def DECLARE_ASM_ALIGNED(n,t,v) - * Declare an aligned variable appropriate for use in inline assembly code. - * - * @code{.c} - * DECLARE_ASM_ALIGNED(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008); - * @endcode - * - * @param n Minimum alignment in bytes - * @param t Type of the variable (or array element) - * @param v Name of the variable - */ - -/** - * @def DECLARE_ASM_CONST(n,t,v) - * Declare a static constant aligned variable appropriate for use in inline - * assembly code. - * - * @code{.c} - * DECLARE_ASM_CONST(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008); - * @endcode - * - * @param n Minimum alignment in bytes - * @param t Type of the variable (or array element) - * @param v Name of the variable - */ - -#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v -#elif defined(__DJGPP__) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (FFMIN(n, 16)))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v - #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v -#elif defined(__GNUC__) || defined(__clang__) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (n))) v - #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v -#elif defined(_MSC_VER) - #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v - #define DECLARE_ASM_ALIGNED(n,t,v) __declspec(align(n)) t v - #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v -#else - #define DECLARE_ALIGNED(n,t,v) t v - #define DECLARE_ASM_ALIGNED(n,t,v) t v - #define DECLARE_ASM_CONST(n,t,v) static const t v -#endif - -/** - * @} - */ -#endif - -/** - * @defgroup lavu_mem_attrs Function Attributes - * Function attributes applicable to memory handling functions. - * - * These function attributes can help compilers emit more useful warnings, or - * generate better code. - * @{ - */ - -/** - * @def av_malloc_attrib - * Function attribute denoting a malloc-like function. - * - * @see Function attribute `malloc` in GCC's documentation - */ - -#if AV_GCC_VERSION_AT_LEAST(3,1) - #define av_malloc_attrib __attribute__((__malloc__)) -#else - #define av_malloc_attrib -#endif - -/** - * @def av_alloc_size(...) - * Function attribute used on a function that allocates memory, whose size is - * given by the specified parameter(s). - * - * @code{.c} - * void *av_malloc(size_t size) av_alloc_size(1); - * void *av_calloc(size_t nmemb, size_t size) av_alloc_size(1, 2); - * @endcode - * - * @param ... One or two parameter indexes, separated by a comma - * - * @see Function attribute `alloc_size` in GCC's documentation - */ - -#if AV_GCC_VERSION_AT_LEAST(4,3) - #define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__))) -#else - #define av_alloc_size(...) -#endif - -/** - * @} - */ - -/** - * @defgroup lavu_mem_funcs Heap Management - * Functions responsible for allocating, freeing, and copying memory. - * - * All memory allocation functions have a built-in upper limit of `INT_MAX` - * bytes. This may be changed with av_max_alloc(), although exercise extreme - * caution when doing so. - * - * @{ - */ - -/** - * Allocate a memory block with alignment suitable for all memory accesses - * (including vectors if available on the CPU). - * - * @param size Size in bytes for the memory block to be allocated - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * @see av_mallocz() - */ -void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1); - -/** - * Allocate a memory block with alignment suitable for all memory accesses - * (including vectors if available on the CPU) and zero all the bytes of the - * block. - * - * @param size Size in bytes for the memory block to be allocated - * @return Pointer to the allocated block, or `NULL` if it cannot be allocated - * @see av_malloc() - */ -void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1); - -/** - * Allocate a memory block for an array with av_malloc(). - * - * The allocated memory will have size `size * nmemb` bytes. - * - * @param nmemb Number of element - * @param size Size of a single element - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * @see av_malloc() - */ -av_alloc_size(1, 2) void *av_malloc_array(size_t nmemb, size_t size); - -/** - * Allocate a memory block for an array with av_mallocz(). - * - * The allocated memory will have size `size * nmemb` bytes. - * - * @param nmemb Number of elements - * @param size Size of the single element - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * - * @see av_mallocz() - * @see av_malloc_array() - */ -av_alloc_size(1, 2) void *av_mallocz_array(size_t nmemb, size_t size); - -/** - * Non-inlined equivalent of av_mallocz_array(). - * - * Created for symmetry with the calloc() C function. - */ -void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib; - -/** - * Allocate, reallocate, or free a block of memory. - * - * If `ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is - * zero, free the memory block pointed to by `ptr`. Otherwise, expand or - * shrink that block of memory according to `size`. - * - * @param ptr Pointer to a memory block already allocated with - * av_realloc() or `NULL` - * @param size Size in bytes of the memory block to be allocated or - * reallocated - * - * @return Pointer to a newly-reallocated block or `NULL` if the block - * cannot be reallocated or the function is used to free the memory block - * - * @warning Unlike av_malloc(), the returned pointer is not guaranteed to be - * correctly aligned. - * @see av_fast_realloc() - * @see av_reallocp() - */ -void *av_realloc(void *ptr, size_t size) av_alloc_size(2); - -/** - * Allocate, reallocate, or free a block of memory through a pointer to a - * pointer. - * - * If `*ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is - * zero, free the memory block pointed to by `*ptr`. Otherwise, expand or - * shrink that block of memory according to `size`. - * - * @param[in,out] ptr Pointer to a pointer to a memory block already allocated - * with av_realloc(), or a pointer to `NULL`. The pointer - * is updated on success, or freed on failure. - * @param[in] size Size in bytes for the memory block to be allocated or - * reallocated - * - * @return Zero on success, an AVERROR error code on failure - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. - */ -av_warn_unused_result -int av_reallocp(void *ptr, size_t size); - -/** - * Allocate, reallocate, or free a block of memory. - * - * This function does the same thing as av_realloc(), except: - * - It takes two size arguments and allocates `nelem * elsize` bytes, - * after checking the result of the multiplication for integer overflow. - * - It frees the input block in case of failure, thus avoiding the memory - * leak with the classic - * @code{.c} - * buf = realloc(buf); - * if (!buf) - * return -1; - * @endcode - * pattern. - */ -void *av_realloc_f(void *ptr, size_t nelem, size_t elsize); - -/** - * Allocate, reallocate, or free an array. - * - * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. If - * `nmemb` is zero, free the memory block pointed to by `ptr`. - * - * @param ptr Pointer to a memory block already allocated with - * av_realloc() or `NULL` - * @param nmemb Number of elements in the array - * @param size Size of the single element of the array - * - * @return Pointer to a newly-reallocated block or NULL if the block - * cannot be reallocated or the function is used to free the memory block - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. - * @see av_reallocp_array() - */ -av_alloc_size(2, 3) void *av_realloc_array(void *ptr, size_t nmemb, size_t size); - -/** - * Allocate, reallocate, or free an array through a pointer to a pointer. - * - * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. If `nmemb` is - * zero, free the memory block pointed to by `*ptr`. - * - * @param[in,out] ptr Pointer to a pointer to a memory block already - * allocated with av_realloc(), or a pointer to `NULL`. - * The pointer is updated on success, or freed on failure. - * @param[in] nmemb Number of elements - * @param[in] size Size of the single element - * - * @return Zero on success, an AVERROR error code on failure - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. - */ -int av_reallocp_array(void *ptr, size_t nmemb, size_t size); - -/** - * Reallocate the given buffer if it is not large enough, otherwise do nothing. - * - * If the given buffer is `NULL`, then a new uninitialized buffer is allocated. - * - * If the given buffer is not large enough, and reallocation fails, `NULL` is - * returned and `*size` is set to 0, but the original buffer is not changed or - * freed. - * - * A typical use pattern follows: - * - * @code{.c} - * uint8_t *buf = ...; - * uint8_t *new_buf = av_fast_realloc(buf, ¤t_size, size_needed); - * if (!new_buf) { - * // Allocation failed; clean up original buffer - * av_freep(&buf); - * return AVERROR(ENOMEM); - * } - * @endcode - * - * @param[in,out] ptr Already allocated buffer, or `NULL` - * @param[in,out] size Pointer to the size of buffer `ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `ptr` - * @return `ptr` if the buffer is large enough, a pointer to newly reallocated - * buffer if the buffer was not large enough, or `NULL` in case of - * error - * @see av_realloc() - * @see av_fast_malloc() - */ -void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Allocate a buffer, reusing the given one if large enough. - * - * Contrary to av_fast_realloc(), the current buffer contents might not be - * preserved and on error the old buffer is freed, thus no special handling to - * avoid memleaks is necessary. - * - * `*ptr` is allowed to be `NULL`, in which case allocation always happens if - * `size_needed` is greater than 0. - * - * @code{.c} - * uint8_t *buf = ...; - * av_fast_malloc(&buf, ¤t_size, size_needed); - * if (!buf) { - * // Allocation failed; buf already freed - * return AVERROR(ENOMEM); - * } - * @endcode - * - * @param[in,out] ptr Pointer to pointer to an already allocated buffer. - * `*ptr` will be overwritten with pointer to new - * buffer on success or `NULL` on failure - * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `*ptr` - * @see av_realloc() - * @see av_fast_mallocz() - */ -void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Allocate and clear a buffer, reusing the given one if large enough. - * - * Like av_fast_malloc(), but all newly allocated space is initially cleared. - * Reused buffer is not cleared. - * - * `*ptr` is allowed to be `NULL`, in which case allocation always happens if - * `size_needed` is greater than 0. - * - * @param[in,out] ptr Pointer to pointer to an already allocated buffer. - * `*ptr` will be overwritten with pointer to new - * buffer on success or `NULL` on failure - * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `*ptr` - * @see av_fast_malloc() - */ -void av_fast_mallocz(void *ptr, unsigned int *size, size_t min_size); - -/** - * Free a memory block which has been allocated with a function of av_malloc() - * or av_realloc() family. - * - * @param ptr Pointer to the memory block which should be freed. - * - * @note `ptr = NULL` is explicitly allowed. - * @note It is recommended that you use av_freep() instead, to prevent leaving - * behind dangling pointers. - * @see av_freep() - */ -void av_free(void *ptr); - -/** - * Free a memory block which has been allocated with a function of av_malloc() - * or av_realloc() family, and set the pointer pointing to it to `NULL`. - * - * @code{.c} - * uint8_t *buf = av_malloc(16); - * av_free(buf); - * // buf now contains a dangling pointer to freed memory, and accidental - * // dereference of buf will result in a use-after-free, which may be a - * // security risk. - * - * uint8_t *buf = av_malloc(16); - * av_freep(&buf); - * // buf is now NULL, and accidental dereference will only result in a - * // NULL-pointer dereference. - * @endcode - * - * @param ptr Pointer to the pointer to the memory block which should be freed - * @note `*ptr = NULL` is safe and leads to no action. - * @see av_free() - */ -void av_freep(void *ptr); - -/** - * Duplicate a string. - * - * @param s String to be duplicated - * @return Pointer to a newly-allocated string containing a - * copy of `s` or `NULL` if the string cannot be allocated - * @see av_strndup() - */ -char *av_strdup(const char *s) av_malloc_attrib; - -/** - * Duplicate a substring of a string. - * - * @param s String to be duplicated - * @param len Maximum length of the resulting string (not counting the - * terminating byte) - * @return Pointer to a newly-allocated string containing a - * substring of `s` or `NULL` if the string cannot be allocated - */ -char *av_strndup(const char *s, size_t len) av_malloc_attrib; - -/** - * Duplicate a buffer with av_malloc(). - * - * @param p Buffer to be duplicated - * @param size Size in bytes of the buffer copied - * @return Pointer to a newly allocated buffer containing a - * copy of `p` or `NULL` if the buffer cannot be allocated - */ -void *av_memdup(const void *p, size_t size); - -/** - * Overlapping memcpy() implementation. - * - * @param dst Destination buffer - * @param back Number of bytes back to start copying (i.e. the initial size of - * the overlapping window); must be > 0 - * @param cnt Number of bytes to copy; must be >= 0 - * - * @note `cnt > back` is valid, this will copy the bytes we just copied, - * thus creating a repeating pattern with a period length of `back`. - */ -void av_memcpy_backptr(uint8_t *dst, int back, int cnt); - -/** - * @} - */ - -/** - * @defgroup lavu_mem_dynarray Dynamic Array - * - * Utilities to make an array grow when needed. - * - * Sometimes, the programmer would want to have an array that can grow when - * needed. The libavutil dynamic array utilities fill that need. - * - * libavutil supports two systems of appending elements onto a dynamically - * allocated array, the first one storing the pointer to the value in the - * array, and the second storing the value directly. In both systems, the - * caller is responsible for maintaining a variable containing the length of - * the array, as well as freeing of the array after use. - * - * The first system stores pointers to values in a block of dynamically - * allocated memory. Since only pointers are stored, the function does not need - * to know the size of the type. Both av_dynarray_add() and - * av_dynarray_add_nofree() implement this system. - * - * @code - * type **array = NULL; //< an array of pointers to values - * int nb = 0; //< a variable to keep track of the length of the array - * - * type to_be_added = ...; - * type to_be_added2 = ...; - * - * av_dynarray_add(&array, &nb, &to_be_added); - * if (nb == 0) - * return AVERROR(ENOMEM); - * - * av_dynarray_add(&array, &nb, &to_be_added2); - * if (nb == 0) - * return AVERROR(ENOMEM); - * - * // Now: - * // nb == 2 - * // &to_be_added == array[0] - * // &to_be_added2 == array[1] - * - * av_freep(&array); - * @endcode - * - * The second system stores the value directly in a block of memory. As a - * result, the function has to know the size of the type. av_dynarray2_add() - * implements this mechanism. - * - * @code - * type *array = NULL; //< an array of values - * int nb = 0; //< a variable to keep track of the length of the array - * - * type to_be_added = ...; - * type to_be_added2 = ...; - * - * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), NULL); - * if (!addr) - * return AVERROR(ENOMEM); - * memcpy(addr, &to_be_added, sizeof(to_be_added)); - * - * // Shortcut of the above. - * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), - * (const void *)&to_be_added2); - * if (!addr) - * return AVERROR(ENOMEM); - * - * // Now: - * // nb == 2 - * // to_be_added == array[0] - * // to_be_added2 == array[1] - * - * av_freep(&array); - * @endcode - * - * @{ - */ - -/** - * Add the pointer to an element to a dynamic array. - * - * The array to grow is supposed to be an array of pointers to - * structures, and the element to add must be a pointer to an already - * allocated structure. - * - * The array is reallocated when its size reaches powers of 2. - * Therefore, the amortized cost of adding an element is constant. - * - * In case of success, the pointer to the array is updated in order to - * point to the new grown array, and the number pointed to by `nb_ptr` - * is incremented. - * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and - * `*nb_ptr` is set to 0. - * - * @param[in,out] tab_ptr Pointer to the array to grow - * @param[in,out] nb_ptr Pointer to the number of elements in the array - * @param[in] elem Element to add - * @see av_dynarray_add_nofree(), av_dynarray2_add() - */ -void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem); - -/** - * Add an element to a dynamic array. - * - * Function has the same functionality as av_dynarray_add(), - * but it doesn't free memory on fails. It returns error code - * instead and leave current buffer untouched. - * - * @return >=0 on success, negative otherwise - * @see av_dynarray_add(), av_dynarray2_add() - */ -av_warn_unused_result -int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem); - -/** - * Add an element of size `elem_size` to a dynamic array. - * - * The array is reallocated when its number of elements reaches powers of 2. - * Therefore, the amortized cost of adding an element is constant. - * - * In case of success, the pointer to the array is updated in order to - * point to the new grown array, and the number pointed to by `nb_ptr` - * is incremented. - * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and - * `*nb_ptr` is set to 0. - * - * @param[in,out] tab_ptr Pointer to the array to grow - * @param[in,out] nb_ptr Pointer to the number of elements in the array - * @param[in] elem_size Size in bytes of an element in the array - * @param[in] elem_data Pointer to the data of the element to add. If - * `NULL`, the space of the newly added element is - * allocated but left uninitialized. - * - * @return Pointer to the data of the element to copy in the newly allocated - * space - * @see av_dynarray_add(), av_dynarray_add_nofree() - */ -void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size, - const uint8_t *elem_data); - -/** - * @} - */ - -/** - * @defgroup lavu_mem_misc Miscellaneous Functions - * - * Other functions related to memory allocation. - * - * @{ - */ - -/** - * Multiply two `size_t` values checking for overflow. - * - * @param[in] a,b Operands of multiplication - * @param[out] r Pointer to the result of the operation - * @return 0 on success, AVERROR(EINVAL) on overflow - */ -static inline int av_size_mult(size_t a, size_t b, size_t *r) -{ - size_t t = a * b; - /* Hack inspired from glibc: don't try the division if nelem and elsize - * are both less than sqrt(SIZE_MAX). */ - if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) - return AVERROR(EINVAL); - *r = t; - return 0; -} - -/** - * Set the maximum size that may be allocated in one block. - * - * The value specified with this function is effective for all libavutil's @ref - * lavu_mem_funcs "heap management functions." - * - * By default, the max value is defined as `INT_MAX`. - * - * @param max Value to be set as the new maximum size - * - * @warning Exercise extreme caution when using this function. Don't touch - * this if you do not understand the full consequence of doing so. - */ -void av_max_alloc(size_t max); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_MEM_H */ diff --git a/prebuilts/x86_64/include/libavutil/motion_vector.h b/prebuilts/x86_64/include/libavutil/motion_vector.h deleted file mode 100644 index ec29556..0000000 --- a/prebuilts/x86_64/include/libavutil/motion_vector.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MOTION_VECTOR_H -#define AVUTIL_MOTION_VECTOR_H - -#include - -typedef struct AVMotionVector { - /** - * Where the current macroblock comes from; negative value when it comes - * from the past, positive value when it comes from the future. - * XXX: set exact relative ref frame reference instead of a +/- 1 "direction". - */ - int32_t source; - /** - * Width and height of the block. - */ - uint8_t w, h; - /** - * Absolute source position. Can be outside the frame area. - */ - int16_t src_x, src_y; - /** - * Absolute destination position. Can be outside the frame area. - */ - int16_t dst_x, dst_y; - /** - * Extra flag information. - * Currently unused. - */ - uint64_t flags; - /** - * Motion vector - * src_x = dst_x + motion_x / motion_scale - * src_y = dst_y + motion_y / motion_scale - */ - int32_t motion_x, motion_y; - uint16_t motion_scale; -} AVMotionVector; - -#endif /* AVUTIL_MOTION_VECTOR_H */ diff --git a/prebuilts/x86_64/include/libavutil/murmur3.h b/prebuilts/x86_64/include/libavutil/murmur3.h deleted file mode 100644 index b3b3a07..0000000 --- a/prebuilts/x86_64/include/libavutil/murmur3.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2013 Reimar Döffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_murmur3 - * Public header for MurmurHash3 hash function implementation. - */ - -#ifndef AVUTIL_MURMUR3_H -#define AVUTIL_MURMUR3_H - -#include -#include - -#include "version.h" - -/** - * @defgroup lavu_murmur3 Murmur3 - * @ingroup lavu_hash - * MurmurHash3 hash function implementation. - * - * MurmurHash3 is a non-cryptographic hash function, of which three - * incompatible versions were created by its inventor Austin Appleby: - * - * - 32-bit output - * - 128-bit output for 32-bit platforms - * - 128-bit output for 64-bit platforms - * - * FFmpeg only implements the last variant: 128-bit output designed for 64-bit - * platforms. Even though the hash function was designed for 64-bit platforms, - * the function in reality works on 32-bit systems too, only with reduced - * performance. - * - * @anchor lavu_murmur3_seedinfo - * By design, MurmurHash3 requires a seed to operate. In response to this, - * libavutil provides two functions for hash initiation, one that requires a - * seed (av_murmur3_init_seeded()) and one that uses a fixed arbitrary integer - * as the seed, and therefore does not (av_murmur3_init()). - * - * To make hashes comparable, you should provide the same seed for all calls to - * this hash function -- if you are supplying one yourself, that is. - * - * @{ - */ - -/** - * Allocate an AVMurMur3 hash context. - * - * @return Uninitialized hash context or `NULL` in case of error - */ -struct AVMurMur3 *av_murmur3_alloc(void); - -/** - * Initialize or reinitialize an AVMurMur3 hash context with a seed. - * - * @param[out] c Hash context - * @param[in] seed Random seed - * - * @see av_murmur3_init() - * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of - * seeds for MurmurHash3. - */ -void av_murmur3_init_seeded(struct AVMurMur3 *c, uint64_t seed); - -/** - * Initialize or reinitialize an AVMurMur3 hash context. - * - * Equivalent to av_murmur3_init_seeded() with a built-in seed. - * - * @param[out] c Hash context - * - * @see av_murmur3_init_seeded() - * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of - * seeds for MurmurHash3. - */ -void av_murmur3_init(struct AVMurMur3 *c); - -/** - * Update hash context with new data. - * - * @param[out] c Hash context - * @param[in] src Input data to update hash with - * @param[in] len Number of bytes to read from `src` - */ -#if FF_API_CRYPTO_SIZE_T -void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, int len); -#else -void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param[in,out] c Hash context - * @param[out] dst Buffer where output digest value is stored - */ -void av_murmur3_final(struct AVMurMur3 *c, uint8_t dst[16]); - -/** - * @} - */ - -#endif /* AVUTIL_MURMUR3_H */ diff --git a/prebuilts/x86_64/include/libavutil/opt.h b/prebuilts/x86_64/include/libavutil/opt.h deleted file mode 100644 index 8dc020a..0000000 --- a/prebuilts/x86_64/include/libavutil/opt.h +++ /dev/null @@ -1,886 +0,0 @@ -/* - * AVOptions - * copyright (c) 2005 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_OPT_H -#define AVUTIL_OPT_H - -/** - * @file - * AVOptions - */ - -#include "rational.h" -#include "avutil.h" -#include "dict.h" -#include "log.h" -#include "pixfmt.h" -#include "samplefmt.h" -#include "version.h" - -/** - * @defgroup avoptions AVOptions - * @ingroup lavu_data - * @{ - * AVOptions provide a generic system to declare options on arbitrary structs - * ("objects"). An option can have a help text, a type and a range of possible - * values. Options may then be enumerated, read and written to. - * - * @section avoptions_implement Implementing AVOptions - * This section describes how to add AVOptions capabilities to a struct. - * - * All AVOptions-related information is stored in an AVClass. Therefore - * the first member of the struct should be a pointer to an AVClass describing it. - * The option field of the AVClass must be set to a NULL-terminated static array - * of AVOptions. Each AVOption must have a non-empty name, a type, a default - * value and for number-type AVOptions also a range of allowed values. It must - * also declare an offset in bytes from the start of the struct, where the field - * associated with this AVOption is located. Other fields in the AVOption struct - * should also be set when applicable, but are not required. - * - * The following example illustrates an AVOptions-enabled struct: - * @code - * typedef struct test_struct { - * const AVClass *class; - * int int_opt; - * char *str_opt; - * uint8_t *bin_opt; - * int bin_len; - * } test_struct; - * - * static const AVOption test_options[] = { - * { "test_int", "This is a test option of int type.", offsetof(test_struct, int_opt), - * AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX }, - * { "test_str", "This is a test option of string type.", offsetof(test_struct, str_opt), - * AV_OPT_TYPE_STRING }, - * { "test_bin", "This is a test option of binary type.", offsetof(test_struct, bin_opt), - * AV_OPT_TYPE_BINARY }, - * { NULL }, - * }; - * - * static const AVClass test_class = { - * .class_name = "test class", - * .item_name = av_default_item_name, - * .option = test_options, - * .version = LIBAVUTIL_VERSION_INT, - * }; - * @endcode - * - * Next, when allocating your struct, you must ensure that the AVClass pointer - * is set to the correct value. Then, av_opt_set_defaults() can be called to - * initialize defaults. After that the struct is ready to be used with the - * AVOptions API. - * - * When cleaning up, you may use the av_opt_free() function to automatically - * free all the allocated string and binary options. - * - * Continuing with the above example: - * - * @code - * test_struct *alloc_test_struct(void) - * { - * test_struct *ret = av_mallocz(sizeof(*ret)); - * ret->class = &test_class; - * av_opt_set_defaults(ret); - * return ret; - * } - * void free_test_struct(test_struct **foo) - * { - * av_opt_free(*foo); - * av_freep(foo); - * } - * @endcode - * - * @subsection avoptions_implement_nesting Nesting - * It may happen that an AVOptions-enabled struct contains another - * AVOptions-enabled struct as a member (e.g. AVCodecContext in - * libavcodec exports generic options, while its priv_data field exports - * codec-specific options). In such a case, it is possible to set up the - * parent struct to export a child's options. To do that, simply - * implement AVClass.child_next() and AVClass.child_class_iterate() in the - * parent struct's AVClass. - * Assuming that the test_struct from above now also contains a - * child_struct field: - * - * @code - * typedef struct child_struct { - * AVClass *class; - * int flags_opt; - * } child_struct; - * static const AVOption child_opts[] = { - * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX }, - * { NULL }, - * }; - * static const AVClass child_class = { - * .class_name = "child class", - * .item_name = av_default_item_name, - * .option = child_opts, - * .version = LIBAVUTIL_VERSION_INT, - * }; - * - * void *child_next(void *obj, void *prev) - * { - * test_struct *t = obj; - * if (!prev && t->child_struct) - * return t->child_struct; - * return NULL - * } - * const AVClass child_class_iterate(void **iter) - * { - * const AVClass *c = *iter ? NULL : &child_class; - * *iter = (void*)(uintptr_t)c; - * return c; - * } - * @endcode - * Putting child_next() and child_class_iterate() as defined above into - * test_class will now make child_struct's options accessible through - * test_struct (again, proper setup as described above needs to be done on - * child_struct right after it is created). - * - * From the above example it might not be clear why both child_next() - * and child_class_iterate() are needed. The distinction is that child_next() - * iterates over actually existing objects, while child_class_iterate() - * iterates over all possible child classes. E.g. if an AVCodecContext - * was initialized to use a codec which has private options, then its - * child_next() will return AVCodecContext.priv_data and finish - * iterating. OTOH child_class_iterate() on AVCodecContext.av_class will - * iterate over all available codecs with private options. - * - * @subsection avoptions_implement_named_constants Named constants - * It is possible to create named constants for options. Simply set the unit - * field of the option the constants should apply to a string and - * create the constants themselves as options of type AV_OPT_TYPE_CONST - * with their unit field set to the same string. - * Their default_val field should contain the value of the named - * constant. - * For example, to add some named constants for the test_flags option - * above, put the following into the child_opts array: - * @code - * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, "test_unit" }, - * { "flag1", "This is a flag with value 16", 0, AV_OPT_TYPE_CONST, { .i64 = 16 }, 0, 0, "test_unit" }, - * @endcode - * - * @section avoptions_use Using AVOptions - * This section deals with accessing options in an AVOptions-enabled struct. - * Such structs in FFmpeg are e.g. AVCodecContext in libavcodec or - * AVFormatContext in libavformat. - * - * @subsection avoptions_use_examine Examining AVOptions - * The basic functions for examining options are av_opt_next(), which iterates - * over all options defined for one object, and av_opt_find(), which searches - * for an option with the given name. - * - * The situation is more complicated with nesting. An AVOptions-enabled struct - * may have AVOptions-enabled children. Passing the AV_OPT_SEARCH_CHILDREN flag - * to av_opt_find() will make the function search children recursively. - * - * For enumerating there are basically two cases. The first is when you want to - * get all options that may potentially exist on the struct and its children - * (e.g. when constructing documentation). In that case you should call - * av_opt_child_class_iterate() recursively on the parent struct's AVClass. The - * second case is when you have an already initialized struct with all its - * children and you want to get all options that can be actually written or read - * from it. In that case you should call av_opt_child_next() recursively (and - * av_opt_next() on each result). - * - * @subsection avoptions_use_get_set Reading and writing AVOptions - * When setting options, you often have a string read directly from the - * user. In such a case, simply passing it to av_opt_set() is enough. For - * non-string type options, av_opt_set() will parse the string according to the - * option type. - * - * Similarly av_opt_get() will read any option type and convert it to a string - * which will be returned. Do not forget that the string is allocated, so you - * have to free it with av_free(). - * - * In some cases it may be more convenient to put all options into an - * AVDictionary and call av_opt_set_dict() on it. A specific case of this - * are the format/codec open functions in lavf/lavc which take a dictionary - * filled with option as a parameter. This makes it possible to set some options - * that cannot be set otherwise, since e.g. the input file format is not known - * before the file is actually opened. - */ - -enum AVOptionType{ - AV_OPT_TYPE_FLAGS, - AV_OPT_TYPE_INT, - AV_OPT_TYPE_INT64, - AV_OPT_TYPE_DOUBLE, - AV_OPT_TYPE_FLOAT, - AV_OPT_TYPE_STRING, - AV_OPT_TYPE_RATIONAL, - AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length - AV_OPT_TYPE_DICT, - AV_OPT_TYPE_UINT64, - AV_OPT_TYPE_CONST, - AV_OPT_TYPE_IMAGE_SIZE, ///< offset must point to two consecutive integers - AV_OPT_TYPE_PIXEL_FMT, - AV_OPT_TYPE_SAMPLE_FMT, - AV_OPT_TYPE_VIDEO_RATE, ///< offset must point to AVRational - AV_OPT_TYPE_DURATION, - AV_OPT_TYPE_COLOR, - AV_OPT_TYPE_CHANNEL_LAYOUT, - AV_OPT_TYPE_BOOL, -}; - -/** - * AVOption - */ -typedef struct AVOption { - const char *name; - - /** - * short English help text - * @todo What about other languages? - */ - const char *help; - - /** - * The offset relative to the context structure where the option - * value is stored. It should be 0 for named constants. - */ - int offset; - enum AVOptionType type; - - /** - * the default value for scalar options - */ - union { - int64_t i64; - double dbl; - const char *str; - /* TODO those are unused now */ - AVRational q; - } default_val; - double min; ///< minimum valid value for the option - double max; ///< maximum valid value for the option - - int flags; -#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding -#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding -#define AV_OPT_FLAG_AUDIO_PARAM 8 -#define AV_OPT_FLAG_VIDEO_PARAM 16 -#define AV_OPT_FLAG_SUBTITLE_PARAM 32 -/** - * The option is intended for exporting values to the caller. - */ -#define AV_OPT_FLAG_EXPORT 64 -/** - * The option may not be set through the AVOptions API, only read. - * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set. - */ -#define AV_OPT_FLAG_READONLY 128 -#define AV_OPT_FLAG_BSF_PARAM (1<<8) ///< a generic parameter which can be set by the user for bit stream filtering -#define AV_OPT_FLAG_RUNTIME_PARAM (1<<15) ///< a generic parameter which can be set by the user at runtime -#define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering -#define AV_OPT_FLAG_DEPRECATED (1<<17) ///< set if option is deprecated, users should refer to AVOption.help text for more information -#define AV_OPT_FLAG_CHILD_CONSTS (1<<18) ///< set if option constants can also reside in child objects -//FIXME think about enc-audio, ... style flags - - /** - * The logical unit to which the option belongs. Non-constant - * options and corresponding named constants share the same - * unit. May be NULL. - */ - const char *unit; -} AVOption; - -/** - * A single allowed range of values, or a single allowed value. - */ -typedef struct AVOptionRange { - const char *str; - /** - * Value range. - * For string ranges this represents the min/max length. - * For dimensions this represents the min/max pixel count or width/height in multi-component case. - */ - double value_min, value_max; - /** - * Value's component range. - * For string this represents the unicode range for chars, 0-127 limits to ASCII. - */ - double component_min, component_max; - /** - * Range flag. - * If set to 1 the struct encodes a range, if set to 0 a single value. - */ - int is_range; -} AVOptionRange; - -/** - * List of AVOptionRange structs. - */ -typedef struct AVOptionRanges { - /** - * Array of option ranges. - * - * Most of option types use just one component. - * Following describes multi-component option types: - * - * AV_OPT_TYPE_IMAGE_SIZE: - * component index 0: range of pixel count (width * height). - * component index 1: range of width. - * component index 2: range of height. - * - * @note To obtain multi-component version of this structure, user must - * provide AV_OPT_MULTI_COMPONENT_RANGE to av_opt_query_ranges or - * av_opt_query_ranges_default function. - * - * Multi-component range can be read as in following example: - * - * @code - * int range_index, component_index; - * AVOptionRanges *ranges; - * AVOptionRange *range[3]; //may require more than 3 in the future. - * av_opt_query_ranges(&ranges, obj, key, AV_OPT_MULTI_COMPONENT_RANGE); - * for (range_index = 0; range_index < ranges->nb_ranges; range_index++) { - * for (component_index = 0; component_index < ranges->nb_components; component_index++) - * range[component_index] = ranges->range[ranges->nb_ranges * component_index + range_index]; - * //do something with range here. - * } - * av_opt_freep_ranges(&ranges); - * @endcode - */ - AVOptionRange **range; - /** - * Number of ranges per component. - */ - int nb_ranges; - /** - * Number of componentes. - */ - int nb_components; -} AVOptionRanges; - -/** - * Show the obj options. - * - * @param req_flags requested flags for the options to show. Show only the - * options for which it is opt->flags & req_flags. - * @param rej_flags rejected flags for the options to show. Show only the - * options for which it is !(opt->flags & req_flags). - * @param av_log_obj log context to use for showing the options - */ -int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags); - -/** - * Set the values of all AVOption fields to their default values. - * - * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) - */ -void av_opt_set_defaults(void *s); - -/** - * Set the values of all AVOption fields to their default values. Only these - * AVOption fields for which (opt->flags & mask) == flags will have their - * default applied to s. - * - * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) - * @param mask combination of AV_OPT_FLAG_* - * @param flags combination of AV_OPT_FLAG_* - */ -void av_opt_set_defaults2(void *s, int mask, int flags); - -/** - * Parse the key/value pairs list in opts. For each key/value pair - * found, stores the value in the field in ctx that is named like the - * key. ctx must be an AVClass context, storing is done using - * AVOptions. - * - * @param opts options string to parse, may be NULL - * @param key_val_sep a 0-terminated list of characters used to - * separate key from value - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other - * @return the number of successfully set key/value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_opt_set() if a key/value pair - * cannot be set - */ -int av_set_options_string(void *ctx, const char *opts, - const char *key_val_sep, const char *pairs_sep); - -/** - * Parse the key-value pairs list in opts. For each key=value pair found, - * set the value of the corresponding option in ctx. - * - * @param ctx the AVClass object to set options on - * @param opts the options string, key-value pairs separated by a - * delimiter - * @param shorthand a NULL-terminated array of options names for shorthand - * notation: if the first field in opts has no key part, - * the key is taken from the first element of shorthand; - * then again for the second, etc., until either opts is - * finished, shorthand is finished or a named option is - * found; after that, all options must be named - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @return the number of successfully set key=value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_set_string3() if a key/value pair - * cannot be set - * - * Options names must use only the following characters: a-z A-Z 0-9 - . / _ - * Separators must use characters distinct from option names and from each - * other. - */ -int av_opt_set_from_string(void *ctx, const char *opts, - const char *const *shorthand, - const char *key_val_sep, const char *pairs_sep); -/** - * Free all allocated objects in obj. - */ -void av_opt_free(void *obj); - -/** - * Check whether a particular flag is set in a flags field. - * - * @param field_name the name of the flag field option - * @param flag_name the name of the flag to check - * @return non-zero if the flag is set, zero if the flag isn't set, - * isn't of the right type, or the flags field doesn't exist. - */ -int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name); - -/** - * Set all the options from a given dictionary on an object. - * - * @param obj a struct whose first element is a pointer to AVClass - * @param options options to process. This dictionary will be freed and replaced - * by a new one containing all options not found in obj. - * Of course this new dictionary needs to be freed by caller - * with av_dict_free(). - * - * @return 0 on success, a negative AVERROR if some option was found in obj, - * but could not be set. - * - * @see av_dict_copy() - */ -int av_opt_set_dict(void *obj, struct AVDictionary **options); - - -/** - * Set all the options from a given dictionary on an object. - * - * @param obj a struct whose first element is a pointer to AVClass - * @param options options to process. This dictionary will be freed and replaced - * by a new one containing all options not found in obj. - * Of course this new dictionary needs to be freed by caller - * with av_dict_free(). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * - * @return 0 on success, a negative AVERROR if some option was found in obj, - * but could not be set. - * - * @see av_dict_copy() - */ -int av_opt_set_dict2(void *obj, struct AVDictionary **options, int search_flags); - -/** - * Extract a key-value pair from the beginning of a string. - * - * @param ropts pointer to the options string, will be updated to - * point to the rest of the string (one of the pairs_sep - * or the final NUL) - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @param flags flags; see the AV_OPT_FLAG_* values below - * @param rkey parsed key; must be freed using av_free() - * @param rval parsed value; must be freed using av_free() - * - * @return >=0 for success, or a negative value corresponding to an - * AVERROR code in case of error; in particular: - * AVERROR(EINVAL) if no key is present - * - */ -int av_opt_get_key_value(const char **ropts, - const char *key_val_sep, const char *pairs_sep, - unsigned flags, - char **rkey, char **rval); - -enum { - - /** - * Accept to parse a value without a key; the key will then be returned - * as NULL. - */ - AV_OPT_FLAG_IMPLICIT_KEY = 1, -}; - -/** - * @defgroup opt_eval_funcs Evaluating option strings - * @{ - * This group of functions can be used to evaluate option strings - * and get numbers out of them. They do the same thing as av_opt_set(), - * except the result is written into the caller-supplied pointer. - * - * @param obj a struct whose first element is a pointer to AVClass. - * @param o an option for which the string is to be evaluated. - * @param val string to be evaluated. - * @param *_out value of the string will be written here. - * - * @return 0 on success, a negative number on failure. - */ -int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out); -int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out); -int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out); -int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out); -int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out); -int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out); -/** - * @} - */ - -#define AV_OPT_SEARCH_CHILDREN (1 << 0) /**< Search in possible children of the - given object first. */ -/** - * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass - * instead of a required pointer to a struct containing AVClass. This is - * useful for searching for options without needing to allocate the corresponding - * object. - */ -#define AV_OPT_SEARCH_FAKE_OBJ (1 << 1) - -/** - * In av_opt_get, return NULL if the option has a pointer type and is set to NULL, - * rather than returning an empty string. - */ -#define AV_OPT_ALLOW_NULL (1 << 2) - -/** - * Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than - * one component for certain option types. - * @see AVOptionRanges for details. - */ -#define AV_OPT_MULTI_COMPONENT_RANGE (1 << 12) - -/** - * Look for an option in an object. Consider only options which - * have all the specified flags set. - * - * @param[in] obj A pointer to a struct whose first element is a - * pointer to an AVClass. - * Alternatively a double pointer to an AVClass, if - * AV_OPT_SEARCH_FAKE_OBJ search flag is set. - * @param[in] name The name of the option to look for. - * @param[in] unit When searching for named constants, name of the unit - * it belongs to. - * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * - * @return A pointer to the option found, or NULL if no option - * was found. - * - * @note Options found with AV_OPT_SEARCH_CHILDREN flag may not be settable - * directly with av_opt_set(). Use special calls which take an options - * AVDictionary (e.g. avformat_open_input()) to set options found with this - * flag. - */ -const AVOption *av_opt_find(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags); - -/** - * Look for an option in an object. Consider only options which - * have all the specified flags set. - * - * @param[in] obj A pointer to a struct whose first element is a - * pointer to an AVClass. - * Alternatively a double pointer to an AVClass, if - * AV_OPT_SEARCH_FAKE_OBJ search flag is set. - * @param[in] name The name of the option to look for. - * @param[in] unit When searching for named constants, name of the unit - * it belongs to. - * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * @param[out] target_obj if non-NULL, an object to which the option belongs will be - * written here. It may be different from obj if AV_OPT_SEARCH_CHILDREN is present - * in search_flags. This parameter is ignored if search_flags contain - * AV_OPT_SEARCH_FAKE_OBJ. - * - * @return A pointer to the option found, or NULL if no option - * was found. - */ -const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags, void **target_obj); - -/** - * Iterate over all AVOptions belonging to obj. - * - * @param obj an AVOptions-enabled struct or a double pointer to an - * AVClass describing it. - * @param prev result of the previous call to av_opt_next() on this object - * or NULL - * @return next AVOption or NULL - */ -const AVOption *av_opt_next(const void *obj, const AVOption *prev); - -/** - * Iterate over AVOptions-enabled children of obj. - * - * @param prev result of a previous call to this function or NULL - * @return next AVOptions-enabled child or NULL - */ -void *av_opt_child_next(void *obj, void *prev); - -#if FF_API_CHILD_CLASS_NEXT -/** - * Iterate over potential AVOptions-enabled children of parent. - * - * @param prev result of a previous call to this function or NULL - * @return AVClass corresponding to next potential child or NULL - * - * @deprecated use av_opt_child_class_iterate - */ -attribute_deprecated -const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev); -#endif - -/** - * Iterate over potential AVOptions-enabled children of parent. - * - * @param iter a pointer where iteration state is stored. - * @return AVClass corresponding to next potential child or NULL - */ -const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter); - -/** - * @defgroup opt_set_funcs Option setting functions - * @{ - * Those functions set the field of obj with the given name to value. - * - * @param[in] obj A struct whose first element is a pointer to an AVClass. - * @param[in] name the name of the field to set - * @param[in] val The value to set. In case of av_opt_set() if the field is not - * of a string type, then the given string is parsed. - * SI postfixes and some named scalars are supported. - * If the field is of a numeric type, it has to be a numeric or named - * scalar. Behavior with more than one scalar and +- infix operators - * is undefined. - * If the field is of a flags type, it has to be a sequence of numeric - * scalars or named flags separated by '+' or '-'. Prefixing a flag - * with '+' causes it to be set without affecting the other flags; - * similarly, '-' unsets a flag. - * If the field is of a dictionary type, it has to be a ':' separated list of - * key=value parameters. Values containing ':' special characters must be - * escaped. - * @param search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN - * is passed here, then the option may be set on a child of obj. - * - * @return 0 if the value has been set, or an AVERROR code in case of - * error: - * AVERROR_OPTION_NOT_FOUND if no matching option exists - * AVERROR(ERANGE) if the value is out of range - * AVERROR(EINVAL) if the value is not valid - */ -int av_opt_set (void *obj, const char *name, const char *val, int search_flags); -int av_opt_set_int (void *obj, const char *name, int64_t val, int search_flags); -int av_opt_set_double (void *obj, const char *name, double val, int search_flags); -int av_opt_set_q (void *obj, const char *name, AVRational val, int search_flags); -int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, int search_flags); -int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags); -int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags); -int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags); -int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags); -int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch_layout, int search_flags); -/** - * @note Any old dictionary present is discarded and replaced with a copy of the new one. The - * caller still owns val is and responsible for freeing it. - */ -int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags); - -/** - * Set a binary option to an integer list. - * - * @param obj AVClass object to set options on - * @param name name of the binary option - * @param val pointer to an integer list (must have the correct type with - * regard to the contents of the list) - * @param term list terminator (usually 0 or -1) - * @param flags search flags - */ -#define av_opt_set_int_list(obj, name, val, term, flags) \ - (av_int_list_length(val, term) > INT_MAX / sizeof(*(val)) ? \ - AVERROR(EINVAL) : \ - av_opt_set_bin(obj, name, (const uint8_t *)(val), \ - av_int_list_length(val, term) * sizeof(*(val)), flags)) - -/** - * @} - */ - -/** - * @defgroup opt_get_funcs Option getting functions - * @{ - * Those functions get a value of the option with the given name from an object. - * - * @param[in] obj a struct whose first element is a pointer to an AVClass. - * @param[in] name name of the option to get. - * @param[in] search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN - * is passed here, then the option may be found in a child of obj. - * @param[out] out_val value of the option will be written here - * @return >=0 on success, a negative error code otherwise - */ -/** - * @note the returned string will be av_malloc()ed and must be av_free()ed by the caller - * - * @note if AV_OPT_ALLOW_NULL is set in search_flags in av_opt_get, and the - * option is of type AV_OPT_TYPE_STRING, AV_OPT_TYPE_BINARY or AV_OPT_TYPE_DICT - * and is set to NULL, *out_val will be set to NULL instead of an allocated - * empty string. - */ -int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val); -int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val); -int av_opt_get_double (void *obj, const char *name, int search_flags, double *out_val); -int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational *out_val); -int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out); -int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt); -int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt); -int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val); -int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *ch_layout); -/** - * @param[out] out_val The returned dictionary is a copy of the actual value and must - * be freed with av_dict_free() by the caller - */ -int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val); -/** - * @} - */ -/** - * Gets a pointer to the requested field in a struct. - * This function allows accessing a struct even when its fields are moved or - * renamed since the application making the access has been compiled, - * - * @returns a pointer to the field, it can be cast to the correct type and read - * or written to. - */ -void *av_opt_ptr(const AVClass *avclass, void *obj, const char *name); - -/** - * Free an AVOptionRanges struct and set it to NULL. - */ -void av_opt_freep_ranges(AVOptionRanges **ranges); - -/** - * Get a list of allowed ranges for the given option. - * - * The returned list may depend on other fields in obj like for example profile. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges - * - * The result must be freed with av_opt_freep_ranges. - * - * @return number of compontents returned on success, a negative errro code otherwise - */ -int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags); - -/** - * Copy options from src object into dest object. - * - * Options that require memory allocation (e.g. string or binary) are malloc'ed in dest object. - * Original memory allocated for such options is freed unless both src and dest options points to the same memory. - * - * @param dest Object to copy from - * @param src Object to copy into - * @return 0 on success, negative on error - */ -int av_opt_copy(void *dest, const void *src); - -/** - * Get a default list of allowed ranges for the given option. - * - * This list is constructed without using the AVClass.query_ranges() callback - * and can be used as fallback from within the callback. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges - * - * The result must be freed with av_opt_free_ranges. - * - * @return number of compontents returned on success, a negative errro code otherwise - */ -int av_opt_query_ranges_default(AVOptionRanges **, void *obj, const char *key, int flags); - -/** - * Check if given option is set to its default value. - * - * Options o must belong to the obj. This function must not be called to check child's options state. - * @see av_opt_is_set_to_default_by_name(). - * - * @param obj AVClass object to check option on - * @param o option to be checked - * @return >0 when option is set to its default, - * 0 when option is not set its default, - * <0 on error - */ -int av_opt_is_set_to_default(void *obj, const AVOption *o); - -/** - * Check if given option is set to its default value. - * - * @param obj AVClass object to check option on - * @param name option name - * @param search_flags combination of AV_OPT_SEARCH_* - * @return >0 when option is set to its default, - * 0 when option is not set its default, - * <0 on error - */ -int av_opt_is_set_to_default_by_name(void *obj, const char *name, int search_flags); - - -#define AV_OPT_SERIALIZE_SKIP_DEFAULTS 0x00000001 ///< Serialize options that are not set to default values only. -#define AV_OPT_SERIALIZE_OPT_FLAGS_EXACT 0x00000002 ///< Serialize options that exactly match opt_flags only. - -/** - * Serialize object's options. - * - * Create a string containing object's serialized options. - * Such string may be passed back to av_opt_set_from_string() in order to restore option values. - * A key/value or pairs separator occurring in the serialized value or - * name string are escaped through the av_escape() function. - * - * @param[in] obj AVClass object to serialize - * @param[in] opt_flags serialize options with all the specified flags set (AV_OPT_FLAG) - * @param[in] flags combination of AV_OPT_SERIALIZE_* flags - * @param[out] buffer Pointer to buffer that will be allocated with string containg serialized options. - * Buffer must be freed by the caller when is no longer needed. - * @param[in] key_val_sep character used to separate key from value - * @param[in] pairs_sep character used to separate two pairs from each other - * @return >= 0 on success, negative on error - * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. - */ -int av_opt_serialize(void *obj, int opt_flags, int flags, char **buffer, - const char key_val_sep, const char pairs_sep); -/** - * @} - */ - -#endif /* AVUTIL_OPT_H */ diff --git a/prebuilts/x86_64/include/libavutil/parseutils.h b/prebuilts/x86_64/include/libavutil/parseutils.h deleted file mode 100644 index e66d24b..0000000 --- a/prebuilts/x86_64/include/libavutil/parseutils.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PARSEUTILS_H -#define AVUTIL_PARSEUTILS_H - -#include - -#include "rational.h" - -/** - * @file - * misc parsing utilities - */ - -/** - * Parse str and store the parsed ratio in q. - * - * Note that a ratio with infinite (1/0) or negative value is - * considered valid, so you should check on the returned value if you - * want to exclude those values. - * - * The undefined value can be expressed using the "0:0" string. - * - * @param[in,out] q pointer to the AVRational which will contain the ratio - * @param[in] str the string to parse: it has to be a string in the format - * num:den, a float number or an expression - * @param[in] max the maximum allowed numerator and denominator - * @param[in] log_offset log level offset which is applied to the log - * level of log_ctx - * @param[in] log_ctx parent logging context - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_ratio(AVRational *q, const char *str, int max, - int log_offset, void *log_ctx); - -#define av_parse_ratio_quiet(rate, str, max) \ - av_parse_ratio(rate, str, max, AV_LOG_MAX_OFFSET, NULL) - -/** - * Parse str and put in width_ptr and height_ptr the detected values. - * - * @param[in,out] width_ptr pointer to the variable which will contain the detected - * width value - * @param[in,out] height_ptr pointer to the variable which will contain the detected - * height value - * @param[in] str the string to parse: it has to be a string in the format - * width x height or a valid video size abbreviation. - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str); - -/** - * Parse str and store the detected values in *rate. - * - * @param[in,out] rate pointer to the AVRational which will contain the detected - * frame rate - * @param[in] str the string to parse: it has to be a string in the format - * rate_num / rate_den, a float number or a valid video rate abbreviation - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_video_rate(AVRational *rate, const char *str); - -/** - * Put the RGBA values that correspond to color_string in rgba_color. - * - * @param color_string a string specifying a color. It can be the name of - * a color (case insensitive match) or a [0x|#]RRGGBB[AA] sequence, - * possibly followed by "@" and a string representing the alpha - * component. - * The alpha component may be a string composed by "0x" followed by an - * hexadecimal number or a decimal number between 0.0 and 1.0, which - * represents the opacity value (0x00/0.0 means completely transparent, - * 0xff/1.0 completely opaque). - * If the alpha component is not specified then 0xff is assumed. - * The string "random" will result in a random color. - * @param slen length of the initial part of color_string containing the - * color. It can be set to -1 if color_string is a null terminated string - * containing nothing else than the color. - * @return >= 0 in case of success, a negative value in case of - * failure (for example if color_string cannot be parsed). - */ -int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen, - void *log_ctx); - -/** - * Get the name of a color from the internal table of hard-coded named - * colors. - * - * This function is meant to enumerate the color names recognized by - * av_parse_color(). - * - * @param color_idx index of the requested color, starting from 0 - * @param rgbp if not NULL, will point to a 3-elements array with the color value in RGB - * @return the color name string or NULL if color_idx is not in the array - */ -const char *av_get_known_color_name(int color_idx, const uint8_t **rgb); - -/** - * Parse timestr and return in *time a corresponding number of - * microseconds. - * - * @param timeval puts here the number of microseconds corresponding - * to the string in timestr. If the string represents a duration, it - * is the number of microseconds contained in the time interval. If - * the string is a date, is the number of microseconds since 1st of - * January, 1970 up to the time of the parsed date. If timestr cannot - * be successfully parsed, set *time to INT64_MIN. - - * @param timestr a string representing a date or a duration. - * - If a date the syntax is: - * @code - * [{YYYY-MM-DD|YYYYMMDD}[T|t| ]]{{HH:MM:SS[.m...]]]}|{HHMMSS[.m...]]]}}[Z] - * now - * @endcode - * If the value is "now" it takes the current time. - * Time is local time unless Z is appended, in which case it is - * interpreted as UTC. - * If the year-month-day part is not specified it takes the current - * year-month-day. - * - If a duration the syntax is: - * @code - * [-][HH:]MM:SS[.m...] - * [-]S+[.m...] - * @endcode - * @param duration flag which tells how to interpret timestr, if not - * zero timestr is interpreted as a duration, otherwise as a date - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_parse_time(int64_t *timeval, const char *timestr, int duration); - -/** - * Attempt to find a specific tag in a URL. - * - * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done. - * Return 1 if found. - */ -int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info); - -/** - * Simplified version of strptime - * - * Parse the input string p according to the format string fmt and - * store its results in the structure dt. - * This implementation supports only a subset of the formats supported - * by the standard strptime(). - * - * The supported input field descriptors are listed below. - * - %H: the hour as a decimal number, using a 24-hour clock, in the - * range '00' through '23' - * - %J: hours as a decimal number, in the range '0' through INT_MAX - * - %M: the minute as a decimal number, using a 24-hour clock, in the - * range '00' through '59' - * - %S: the second as a decimal number, using a 24-hour clock, in the - * range '00' through '59' - * - %Y: the year as a decimal number, using the Gregorian calendar - * - %m: the month as a decimal number, in the range '1' through '12' - * - %d: the day of the month as a decimal number, in the range '1' - * through '31' - * - %T: alias for '%H:%M:%S' - * - %%: a literal '%' - * - * @return a pointer to the first character not processed in this function - * call. In case the input string contains more characters than - * required by the format string the return value points right after - * the last consumed input character. In case the whole input string - * is consumed the return value points to the null byte at the end of - * the string. On failure NULL is returned. - */ -char *av_small_strptime(const char *p, const char *fmt, struct tm *dt); - -/** - * Convert the decomposed UTC time in tm to a time_t value. - */ -time_t av_timegm(struct tm *tm); - -#endif /* AVUTIL_PARSEUTILS_H */ diff --git a/prebuilts/x86_64/include/libavutil/pixdesc.h b/prebuilts/x86_64/include/libavutil/pixdesc.h deleted file mode 100644 index 9b9d386..0000000 --- a/prebuilts/x86_64/include/libavutil/pixdesc.h +++ /dev/null @@ -1,442 +0,0 @@ -/* - * pixel format descriptor - * Copyright (c) 2009 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXDESC_H -#define AVUTIL_PIXDESC_H - -#include - -#include "attributes.h" -#include "pixfmt.h" -#include "version.h" - -typedef struct AVComponentDescriptor { - /** - * Which of the 4 planes contains the component. - */ - int plane; - - /** - * Number of elements between 2 horizontally consecutive pixels. - * Elements are bits for bitstream formats, bytes otherwise. - */ - int step; - - /** - * Number of elements before the component of the first pixel. - * Elements are bits for bitstream formats, bytes otherwise. - */ - int offset; - - /** - * Number of least significant bits that must be shifted away - * to get the value. - */ - int shift; - - /** - * Number of bits in the component. - */ - int depth; - -#if FF_API_PLUS1_MINUS1 - /** deprecated, use step instead */ - attribute_deprecated int step_minus1; - - /** deprecated, use depth instead */ - attribute_deprecated int depth_minus1; - - /** deprecated, use offset instead */ - attribute_deprecated int offset_plus1; -#endif -} AVComponentDescriptor; - -/** - * Descriptor that unambiguously describes how the bits of a pixel are - * stored in the up to 4 data planes of an image. It also stores the - * subsampling factors and number of components. - * - * @note This is separate of the colorspace (RGB, YCbCr, YPbPr, JPEG-style YUV - * and all the YUV variants) AVPixFmtDescriptor just stores how values - * are stored not what these values represent. - */ -typedef struct AVPixFmtDescriptor { - const char *name; - uint8_t nb_components; ///< The number of components each pixel has, (1-4) - - /** - * Amount to shift the luma width right to find the chroma width. - * For YV12 this is 1 for example. - * chroma_width = AV_CEIL_RSHIFT(luma_width, log2_chroma_w) - * The note above is needed to ensure rounding up. - * This value only refers to the chroma components. - */ - uint8_t log2_chroma_w; - - /** - * Amount to shift the luma height right to find the chroma height. - * For YV12 this is 1 for example. - * chroma_height= AV_CEIL_RSHIFT(luma_height, log2_chroma_h) - * The note above is needed to ensure rounding up. - * This value only refers to the chroma components. - */ - uint8_t log2_chroma_h; - - /** - * Combination of AV_PIX_FMT_FLAG_... flags. - */ - uint64_t flags; - - /** - * Parameters that describe how pixels are packed. - * If the format has 1 or 2 components, then luma is 0. - * If the format has 3 or 4 components: - * if the RGB flag is set then 0 is red, 1 is green and 2 is blue; - * otherwise 0 is luma, 1 is chroma-U and 2 is chroma-V. - * - * If present, the Alpha channel is always the last component. - */ - AVComponentDescriptor comp[4]; - - /** - * Alternative comma-separated names. - */ - const char *alias; -} AVPixFmtDescriptor; - -/** - * Pixel format is big-endian. - */ -#define AV_PIX_FMT_FLAG_BE (1 << 0) -/** - * Pixel format has a palette in data[1], values are indexes in this palette. - */ -#define AV_PIX_FMT_FLAG_PAL (1 << 1) -/** - * All values of a component are bit-wise packed end to end. - */ -#define AV_PIX_FMT_FLAG_BITSTREAM (1 << 2) -/** - * Pixel format is an HW accelerated format. - */ -#define AV_PIX_FMT_FLAG_HWACCEL (1 << 3) -/** - * At least one pixel component is not in the first data plane. - */ -#define AV_PIX_FMT_FLAG_PLANAR (1 << 4) -/** - * The pixel format contains RGB-like data (as opposed to YUV/grayscale). - */ -#define AV_PIX_FMT_FLAG_RGB (1 << 5) - -#if FF_API_PSEUDOPAL -/** - * The pixel format is "pseudo-paletted". This means that it contains a - * fixed palette in the 2nd plane but the palette is fixed/constant for each - * PIX_FMT. This allows interpreting the data as if it was PAL8, which can - * in some cases be simpler. Or the data can be interpreted purely based on - * the pixel format without using the palette. - * An example of a pseudo-paletted format is AV_PIX_FMT_GRAY8 - * - * @deprecated This flag is deprecated, and will be removed. When it is removed, - * the extra palette allocation in AVFrame.data[1] is removed as well. Only - * actual paletted formats (as indicated by AV_PIX_FMT_FLAG_PAL) will have a - * palette. Starting with FFmpeg versions which have this flag deprecated, the - * extra "pseudo" palette is already ignored, and API users are not required to - * allocate a palette for AV_PIX_FMT_FLAG_PSEUDOPAL formats (it was required - * before the deprecation, though). - */ -#define AV_PIX_FMT_FLAG_PSEUDOPAL (1 << 6) -#endif - -/** - * The pixel format has an alpha channel. This is set on all formats that - * support alpha in some way, including AV_PIX_FMT_PAL8. The alpha is always - * straight, never pre-multiplied. - * - * If a codec or a filter does not support alpha, it should set all alpha to - * opaque, or use the equivalent pixel formats without alpha component, e.g. - * AV_PIX_FMT_RGB0 (or AV_PIX_FMT_RGB24 etc.) instead of AV_PIX_FMT_RGBA. - */ -#define AV_PIX_FMT_FLAG_ALPHA (1 << 7) - -/** - * The pixel format is following a Bayer pattern - */ -#define AV_PIX_FMT_FLAG_BAYER (1 << 8) - -/** - * The pixel format contains IEEE-754 floating point values. Precision (double, - * single, or half) should be determined by the pixel size (64, 32, or 16 bits). - */ -#define AV_PIX_FMT_FLAG_FLOAT (1 << 9) - -/** - * Return the number of bits per pixel used by the pixel format - * described by pixdesc. Note that this is not the same as the number - * of bits per sample. - * - * The returned number of bits refers to the number of bits actually - * used for storing the pixel information, that is padding bits are - * not counted. - */ -int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); - -/** - * Return the number of bits per pixel for the pixel format - * described by pixdesc, including any padding or unused bits. - */ -int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); - -/** - * @return a pixel format descriptor for provided pixel format or NULL if - * this pixel format is unknown. - */ -const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt); - -/** - * Iterate over all pixel format descriptors known to libavutil. - * - * @param prev previous descriptor. NULL to get the first descriptor. - * - * @return next descriptor or NULL after the last descriptor - */ -const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev); - -/** - * @return an AVPixelFormat id described by desc, or AV_PIX_FMT_NONE if desc - * is not a valid pointer to a pixel format descriptor. - */ -enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc); - -/** - * Utility function to access log2_chroma_w log2_chroma_h from - * the pixel format AVPixFmtDescriptor. - * - * @param[in] pix_fmt the pixel format - * @param[out] h_shift store log2_chroma_w (horizontal/width shift) - * @param[out] v_shift store log2_chroma_h (vertical/height shift) - * - * @return 0 on success, AVERROR(ENOSYS) on invalid or unknown pixel format - */ -int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, - int *h_shift, int *v_shift); - -/** - * @return number of planes in pix_fmt, a negative AVERROR if pix_fmt is not a - * valid pixel format. - */ -int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt); - -/** - * @return the name for provided color range or NULL if unknown. - */ -const char *av_color_range_name(enum AVColorRange range); - -/** - * @return the AVColorRange value for name or an AVError if not found. - */ -int av_color_range_from_name(const char *name); - -/** - * @return the name for provided color primaries or NULL if unknown. - */ -const char *av_color_primaries_name(enum AVColorPrimaries primaries); - -/** - * @return the AVColorPrimaries value for name or an AVError if not found. - */ -int av_color_primaries_from_name(const char *name); - -/** - * @return the name for provided color transfer or NULL if unknown. - */ -const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer); - -/** - * @return the AVColorTransferCharacteristic value for name or an AVError if not found. - */ -int av_color_transfer_from_name(const char *name); - -/** - * @return the name for provided color space or NULL if unknown. - */ -const char *av_color_space_name(enum AVColorSpace space); - -/** - * @return the AVColorSpace value for name or an AVError if not found. - */ -int av_color_space_from_name(const char *name); - -/** - * @return the name for provided chroma location or NULL if unknown. - */ -const char *av_chroma_location_name(enum AVChromaLocation location); - -/** - * @return the AVChromaLocation value for name or an AVError if not found. - */ -int av_chroma_location_from_name(const char *name); - -/** - * Return the pixel format corresponding to name. - * - * If there is no pixel format with name name, then looks for a - * pixel format with the name corresponding to the native endian - * format of name. - * For example in a little-endian system, first looks for "gray16", - * then for "gray16le". - * - * Finally if no pixel format has been found, returns AV_PIX_FMT_NONE. - */ -enum AVPixelFormat av_get_pix_fmt(const char *name); - -/** - * Return the short name for a pixel format, NULL in case pix_fmt is - * unknown. - * - * @see av_get_pix_fmt(), av_get_pix_fmt_string() - */ -const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt); - -/** - * Print in buf the string corresponding to the pixel format with - * number pix_fmt, or a header if pix_fmt is negative. - * - * @param buf the buffer where to write the string - * @param buf_size the size of buf - * @param pix_fmt the number of the pixel format to print the - * corresponding info string, or a negative value to print the - * corresponding header. - */ -char *av_get_pix_fmt_string(char *buf, int buf_size, - enum AVPixelFormat pix_fmt); - -/** - * Read a line from an image, and write the values of the - * pixel format component c to dst. - * - * @param data the array containing the pointers to the planes of the image - * @param linesize the array containing the linesizes of the image - * @param desc the pixel format descriptor for the image - * @param x the horizontal coordinate of the first pixel to read - * @param y the vertical coordinate of the first pixel to read - * @param w the width of the line to read, that is the number of - * values to write to dst - * @param read_pal_component if not zero and the format is a paletted - * format writes the values corresponding to the palette - * component c in data[1] to dst, rather than the palette indexes in - * data[0]. The behavior is undefined if the format is not paletted. - * @param dst_element_size size of elements in dst array (2 or 4 byte) - */ -void av_read_image_line2(void *dst, const uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int read_pal_component, - int dst_element_size); - -void av_read_image_line(uint16_t *dst, const uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int read_pal_component); - -/** - * Write the values from src to the pixel format component c of an - * image line. - * - * @param src array containing the values to write - * @param data the array containing the pointers to the planes of the - * image to write into. It is supposed to be zeroed. - * @param linesize the array containing the linesizes of the image - * @param desc the pixel format descriptor for the image - * @param x the horizontal coordinate of the first pixel to write - * @param y the vertical coordinate of the first pixel to write - * @param w the width of the line to write, that is the number of - * values to write to the image line - * @param src_element_size size of elements in src array (2 or 4 byte) - */ -void av_write_image_line2(const void *src, uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int src_element_size); - -void av_write_image_line(const uint16_t *src, uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w); - -/** - * Utility function to swap the endianness of a pixel format. - * - * @param[in] pix_fmt the pixel format - * - * @return pixel format with swapped endianness if it exists, - * otherwise AV_PIX_FMT_NONE - */ -enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt); - -#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ -#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ -#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ -#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ -#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ -#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ - -/** - * Compute what kind of losses will occur when converting from one specific - * pixel format to another. - * When converting from one pixel format to another, information loss may occur. - * For example, when converting from RGB24 to GRAY, the color information will - * be lost. Similarly, other losses occur when converting from some formats to - * other formats. These losses can involve loss of chroma, but also loss of - * resolution, loss of color depth, loss due to the color space conversion, loss - * of the alpha bits or loss due to color quantization. - * av_get_fix_fmt_loss() informs you about the various types of losses - * which will occur when converting from one pixel format to another. - * - * @param[in] dst_pix_fmt destination pixel format - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @return Combination of flags informing you what kind of losses will occur - * (maximum loss for an invalid dst_pix_fmt). - */ -int av_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, - enum AVPixelFormat src_pix_fmt, - int has_alpha); - -/** - * Compute what kind of losses will occur when converting from one specific - * pixel format to another. - * When converting from one pixel format to another, information loss may occur. - * For example, when converting from RGB24 to GRAY, the color information will - * be lost. Similarly, other losses occur when converting from some formats to - * other formats. These losses can involve loss of chroma, but also loss of - * resolution, loss of color depth, loss due to the color space conversion, loss - * of the alpha bits or loss due to color quantization. - * av_get_fix_fmt_loss() informs you about the various types of losses - * which will occur when converting from one pixel format to another. - * - * @param[in] dst_pix_fmt destination pixel format - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @return Combination of flags informing you what kind of losses will occur - * (maximum loss for an invalid dst_pix_fmt). - */ -enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); - -#endif /* AVUTIL_PIXDESC_H */ diff --git a/prebuilts/x86_64/include/libavutil/pixelutils.h b/prebuilts/x86_64/include/libavutil/pixelutils.h deleted file mode 100644 index a8dbc15..0000000 --- a/prebuilts/x86_64/include/libavutil/pixelutils.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXELUTILS_H -#define AVUTIL_PIXELUTILS_H - -#include -#include -#include "common.h" - -/** - * Sum of abs(src1[x] - src2[x]) - */ -typedef int (*av_pixelutils_sad_fn)(const uint8_t *src1, ptrdiff_t stride1, - const uint8_t *src2, ptrdiff_t stride2); - -/** - * Get a potentially optimized pointer to a Sum-of-absolute-differences - * function (see the av_pixelutils_sad_fn prototype). - * - * @param w_bits 1< - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXFMT_H -#define AVUTIL_PIXFMT_H - -/** - * @file - * pixel format definitions - */ - -#include "libavutil/avconfig.h" -#include "version.h" - -#define AVPALETTE_SIZE 1024 -#define AVPALETTE_COUNT 256 - -/** - * Pixel format. - * - * @note - * AV_PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA - * color is put together as: - * (A << 24) | (R << 16) | (G << 8) | B - * This is stored as BGRA on little-endian CPU architectures and ARGB on - * big-endian CPUs. - * - * @note - * If the resolution is not a multiple of the chroma subsampling factor - * then the chroma plane resolution must be rounded up. - * - * @par - * When the pixel format is palettized RGB32 (AV_PIX_FMT_PAL8), the palettized - * image data is stored in AVFrame.data[0]. The palette is transported in - * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is - * formatted the same as in AV_PIX_FMT_RGB32 described above (i.e., it is - * also endian-specific). Note also that the individual RGB32 palette - * components stored in AVFrame.data[1] should be in the range 0..255. - * This is important as many custom PAL8 video codecs that were designed - * to run on the IBM VGA graphics adapter use 6-bit palette components. - * - * @par - * For all the 8 bits per pixel formats, an RGB32 palette is in data[1] like - * for pal8. This palette is filled in automatically by the function - * allocating the picture. - */ -enum AVPixelFormat { - AV_PIX_FMT_NONE = -1, - AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) - AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr - AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... - AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... - AV_PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - AV_PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) - AV_PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) - AV_PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) - AV_PIX_FMT_GRAY8, ///< Y , 8bpp - AV_PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb - AV_PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb - AV_PIX_FMT_PAL8, ///< 8 bits with AV_PIX_FMT_RGB32 palette - AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range - AV_PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range - AV_PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range - AV_PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 - AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 - AV_PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) - AV_PIX_FMT_BGR4, ///< 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 - AV_PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) - AV_PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) - AV_PIX_FMT_RGB4, ///< 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 - AV_PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) - AV_PIX_FMT_NV12, ///< 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) - AV_PIX_FMT_NV21, ///< as above, but U and V bytes are swapped - - AV_PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... - AV_PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... - AV_PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... - AV_PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... - - AV_PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian - AV_PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian - AV_PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) - AV_PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range - AV_PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) - AV_PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian - AV_PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian - - AV_PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian - AV_PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian - AV_PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined - AV_PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined - - AV_PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian - AV_PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian - AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined - AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined - -#if FF_API_VAAPI - /** @name Deprecated pixel formats */ - /**@{*/ - AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers - AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers - AV_PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a VASurfaceID - /**@}*/ - AV_PIX_FMT_VAAPI = AV_PIX_FMT_VAAPI_VLD, -#else - /** - * Hardware acceleration through VA-API, data[3] contains a - * VASurfaceID. - */ - AV_PIX_FMT_VAAPI, -#endif - - AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer - - AV_PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_YA8, ///< 8 bits gray, 8 bits alpha - - AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 - AV_PIX_FMT_GRAY8A= AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 - - AV_PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian - AV_PIX_FMT_BGR48LE, ///< 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. - */ - AV_PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp - AV_PIX_FMT_GBR24P = AV_PIX_FMT_GBRP, // alias for #AV_PIX_FMT_GBRP - AV_PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big-endian - AV_PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little-endian - AV_PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big-endian - AV_PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little-endian - AV_PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big-endian - AV_PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little-endian - AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) - AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) - AV_PIX_FMT_YUVA420P9BE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian - AV_PIX_FMT_YUVA420P9LE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian - AV_PIX_FMT_YUVA422P9BE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian - AV_PIX_FMT_YUVA422P9LE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian - AV_PIX_FMT_YUVA444P9BE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian - AV_PIX_FMT_YUVA444P9LE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian - AV_PIX_FMT_YUVA420P10BE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - AV_PIX_FMT_YUVA420P10LE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - AV_PIX_FMT_YUVA422P10BE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA422P10LE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA444P10BE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA444P10LE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA420P16BE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - AV_PIX_FMT_YUVA420P16LE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - AV_PIX_FMT_YUVA422P16BE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA422P16LE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - - AV_PIX_FMT_VDPAU, ///< HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface - - AV_PIX_FMT_XYZ12LE, ///< 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 - AV_PIX_FMT_XYZ12BE, ///< 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 - AV_PIX_FMT_NV16, ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - AV_PIX_FMT_NV20LE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_NV20BE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - - AV_PIX_FMT_RGBA64BE, ///< 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 - AV_PIX_FMT_RGBA64LE, ///< 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 - AV_PIX_FMT_BGRA64BE, ///< 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 - AV_PIX_FMT_BGRA64LE, ///< 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 - - AV_PIX_FMT_YVYU422, ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb - - AV_PIX_FMT_YA16BE, ///< 16 bits gray, 16 bits alpha (big-endian) - AV_PIX_FMT_YA16LE, ///< 16 bits gray, 16 bits alpha (little-endian) - - AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp - AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian - AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian - /** - * HW acceleration through QSV, data[3] contains a pointer to the - * mfxFrameSurface1 structure. - */ - AV_PIX_FMT_QSV, - /** - * HW acceleration though MMAL, data[3] contains a pointer to the - * MMAL_BUFFER_HEADER_T structure. - */ - AV_PIX_FMT_MMAL, - - AV_PIX_FMT_D3D11VA_VLD, ///< 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. - */ - AV_PIX_FMT_CUDA, - - AV_PIX_FMT_0RGB, ///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined - AV_PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined - AV_PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined - AV_PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined - - AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big-endian - AV_PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little-endian - AV_PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big-endian - AV_PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little-endian - AV_PIX_FMT_YUVJ411P, ///< 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 - - AV_PIX_FMT_BAYER_BGGR8, ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples - AV_PIX_FMT_BAYER_RGGB8, ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples - AV_PIX_FMT_BAYER_GBRG8, ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples - AV_PIX_FMT_BAYER_GRBG8, ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples - AV_PIX_FMT_BAYER_BGGR16LE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_BGGR16BE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_RGGB16LE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_RGGB16BE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_GBRG16LE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_GBRG16BE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian - - AV_PIX_FMT_XVMC,///< XVideo Motion Acceleration via common packet passing - - AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian - AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian - AV_PIX_FMT_YUV440P12LE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian - AV_PIX_FMT_YUV440P12BE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian - AV_PIX_FMT_AYUV64LE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian - AV_PIX_FMT_AYUV64BE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian - - AV_PIX_FMT_VIDEOTOOLBOX, ///< hardware decoding through Videotoolbox - - AV_PIX_FMT_P010LE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian - AV_PIX_FMT_P010BE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian - - AV_PIX_FMT_GBRAP12BE, ///< planar GBR 4:4:4:4 48bpp, big-endian - AV_PIX_FMT_GBRAP12LE, ///< planar GBR 4:4:4:4 48bpp, little-endian - - AV_PIX_FMT_GBRAP10BE, ///< planar GBR 4:4:4:4 40bpp, big-endian - AV_PIX_FMT_GBRAP10LE, ///< planar GBR 4:4:4:4 40bpp, little-endian - - AV_PIX_FMT_MEDIACODEC, ///< hardware decoding through MediaCodec - - AV_PIX_FMT_GRAY12BE, ///< Y , 12bpp, big-endian - AV_PIX_FMT_GRAY12LE, ///< Y , 12bpp, little-endian - AV_PIX_FMT_GRAY10BE, ///< Y , 10bpp, big-endian - AV_PIX_FMT_GRAY10LE, ///< Y , 10bpp, little-endian - - AV_PIX_FMT_P016LE, ///< like NV12, with 16bpp per component, little-endian - AV_PIX_FMT_P016BE, ///< 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). - */ - AV_PIX_FMT_D3D11, - - AV_PIX_FMT_GRAY9BE, ///< Y , 9bpp, big-endian - AV_PIX_FMT_GRAY9LE, ///< Y , 9bpp, little-endian - - AV_PIX_FMT_GBRPF32BE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, big-endian - AV_PIX_FMT_GBRPF32LE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, little-endian - AV_PIX_FMT_GBRAPF32BE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, big-endian - AV_PIX_FMT_GBRAPF32LE, ///< 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. - */ - AV_PIX_FMT_DRM_PRIME, - /** - * 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. - */ - AV_PIX_FMT_OPENCL, - - AV_PIX_FMT_GRAY14BE, ///< Y , 14bpp, big-endian - AV_PIX_FMT_GRAY14LE, ///< Y , 14bpp, little-endian - - AV_PIX_FMT_GRAYF32BE, ///< IEEE-754 single precision Y, 32bpp, big-endian - AV_PIX_FMT_GRAYF32LE, ///< IEEE-754 single precision Y, 32bpp, little-endian - - AV_PIX_FMT_YUVA422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, big-endian - AV_PIX_FMT_YUVA422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, little-endian - AV_PIX_FMT_YUVA444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, big-endian - AV_PIX_FMT_YUVA444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, little-endian - - AV_PIX_FMT_NV24, ///< 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) - AV_PIX_FMT_NV42, ///< as above, but U and V bytes are swapped - - /** - * Vulkan hardware images. - * - * data[0] points to an AVVkFrame - */ - AV_PIX_FMT_VULKAN, - - AV_PIX_FMT_Y210BE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, big-endian - AV_PIX_FMT_Y210LE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, little-endian - - AV_PIX_FMT_X2RGB10LE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_X2RGB10BE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions -}; - -#if AV_HAVE_BIGENDIAN -# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##be -#else -# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##le -#endif - -#define AV_PIX_FMT_RGB32 AV_PIX_FMT_NE(ARGB, BGRA) -#define AV_PIX_FMT_RGB32_1 AV_PIX_FMT_NE(RGBA, ABGR) -#define AV_PIX_FMT_BGR32 AV_PIX_FMT_NE(ABGR, RGBA) -#define AV_PIX_FMT_BGR32_1 AV_PIX_FMT_NE(BGRA, ARGB) -#define AV_PIX_FMT_0RGB32 AV_PIX_FMT_NE(0RGB, BGR0) -#define AV_PIX_FMT_0BGR32 AV_PIX_FMT_NE(0BGR, RGB0) - -#define AV_PIX_FMT_GRAY9 AV_PIX_FMT_NE(GRAY9BE, GRAY9LE) -#define AV_PIX_FMT_GRAY10 AV_PIX_FMT_NE(GRAY10BE, GRAY10LE) -#define AV_PIX_FMT_GRAY12 AV_PIX_FMT_NE(GRAY12BE, GRAY12LE) -#define AV_PIX_FMT_GRAY14 AV_PIX_FMT_NE(GRAY14BE, GRAY14LE) -#define AV_PIX_FMT_GRAY16 AV_PIX_FMT_NE(GRAY16BE, GRAY16LE) -#define AV_PIX_FMT_YA16 AV_PIX_FMT_NE(YA16BE, YA16LE) -#define AV_PIX_FMT_RGB48 AV_PIX_FMT_NE(RGB48BE, RGB48LE) -#define AV_PIX_FMT_RGB565 AV_PIX_FMT_NE(RGB565BE, RGB565LE) -#define AV_PIX_FMT_RGB555 AV_PIX_FMT_NE(RGB555BE, RGB555LE) -#define AV_PIX_FMT_RGB444 AV_PIX_FMT_NE(RGB444BE, RGB444LE) -#define AV_PIX_FMT_RGBA64 AV_PIX_FMT_NE(RGBA64BE, RGBA64LE) -#define AV_PIX_FMT_BGR48 AV_PIX_FMT_NE(BGR48BE, BGR48LE) -#define AV_PIX_FMT_BGR565 AV_PIX_FMT_NE(BGR565BE, BGR565LE) -#define AV_PIX_FMT_BGR555 AV_PIX_FMT_NE(BGR555BE, BGR555LE) -#define AV_PIX_FMT_BGR444 AV_PIX_FMT_NE(BGR444BE, BGR444LE) -#define AV_PIX_FMT_BGRA64 AV_PIX_FMT_NE(BGRA64BE, BGRA64LE) - -#define AV_PIX_FMT_YUV420P9 AV_PIX_FMT_NE(YUV420P9BE , YUV420P9LE) -#define AV_PIX_FMT_YUV422P9 AV_PIX_FMT_NE(YUV422P9BE , YUV422P9LE) -#define AV_PIX_FMT_YUV444P9 AV_PIX_FMT_NE(YUV444P9BE , YUV444P9LE) -#define AV_PIX_FMT_YUV420P10 AV_PIX_FMT_NE(YUV420P10BE, YUV420P10LE) -#define AV_PIX_FMT_YUV422P10 AV_PIX_FMT_NE(YUV422P10BE, YUV422P10LE) -#define AV_PIX_FMT_YUV440P10 AV_PIX_FMT_NE(YUV440P10BE, YUV440P10LE) -#define AV_PIX_FMT_YUV444P10 AV_PIX_FMT_NE(YUV444P10BE, YUV444P10LE) -#define AV_PIX_FMT_YUV420P12 AV_PIX_FMT_NE(YUV420P12BE, YUV420P12LE) -#define AV_PIX_FMT_YUV422P12 AV_PIX_FMT_NE(YUV422P12BE, YUV422P12LE) -#define AV_PIX_FMT_YUV440P12 AV_PIX_FMT_NE(YUV440P12BE, YUV440P12LE) -#define AV_PIX_FMT_YUV444P12 AV_PIX_FMT_NE(YUV444P12BE, YUV444P12LE) -#define AV_PIX_FMT_YUV420P14 AV_PIX_FMT_NE(YUV420P14BE, YUV420P14LE) -#define AV_PIX_FMT_YUV422P14 AV_PIX_FMT_NE(YUV422P14BE, YUV422P14LE) -#define AV_PIX_FMT_YUV444P14 AV_PIX_FMT_NE(YUV444P14BE, YUV444P14LE) -#define AV_PIX_FMT_YUV420P16 AV_PIX_FMT_NE(YUV420P16BE, YUV420P16LE) -#define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE) -#define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE) - -#define AV_PIX_FMT_GBRP9 AV_PIX_FMT_NE(GBRP9BE , GBRP9LE) -#define AV_PIX_FMT_GBRP10 AV_PIX_FMT_NE(GBRP10BE, GBRP10LE) -#define AV_PIX_FMT_GBRP12 AV_PIX_FMT_NE(GBRP12BE, GBRP12LE) -#define AV_PIX_FMT_GBRP14 AV_PIX_FMT_NE(GBRP14BE, GBRP14LE) -#define AV_PIX_FMT_GBRP16 AV_PIX_FMT_NE(GBRP16BE, GBRP16LE) -#define AV_PIX_FMT_GBRAP10 AV_PIX_FMT_NE(GBRAP10BE, GBRAP10LE) -#define AV_PIX_FMT_GBRAP12 AV_PIX_FMT_NE(GBRAP12BE, GBRAP12LE) -#define AV_PIX_FMT_GBRAP16 AV_PIX_FMT_NE(GBRAP16BE, GBRAP16LE) - -#define AV_PIX_FMT_BAYER_BGGR16 AV_PIX_FMT_NE(BAYER_BGGR16BE, BAYER_BGGR16LE) -#define AV_PIX_FMT_BAYER_RGGB16 AV_PIX_FMT_NE(BAYER_RGGB16BE, BAYER_RGGB16LE) -#define AV_PIX_FMT_BAYER_GBRG16 AV_PIX_FMT_NE(BAYER_GBRG16BE, BAYER_GBRG16LE) -#define AV_PIX_FMT_BAYER_GRBG16 AV_PIX_FMT_NE(BAYER_GRBG16BE, BAYER_GRBG16LE) - -#define AV_PIX_FMT_GBRPF32 AV_PIX_FMT_NE(GBRPF32BE, GBRPF32LE) -#define AV_PIX_FMT_GBRAPF32 AV_PIX_FMT_NE(GBRAPF32BE, GBRAPF32LE) - -#define AV_PIX_FMT_GRAYF32 AV_PIX_FMT_NE(GRAYF32BE, GRAYF32LE) - -#define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE , YUVA420P9LE) -#define AV_PIX_FMT_YUVA422P9 AV_PIX_FMT_NE(YUVA422P9BE , YUVA422P9LE) -#define AV_PIX_FMT_YUVA444P9 AV_PIX_FMT_NE(YUVA444P9BE , YUVA444P9LE) -#define AV_PIX_FMT_YUVA420P10 AV_PIX_FMT_NE(YUVA420P10BE, YUVA420P10LE) -#define AV_PIX_FMT_YUVA422P10 AV_PIX_FMT_NE(YUVA422P10BE, YUVA422P10LE) -#define AV_PIX_FMT_YUVA444P10 AV_PIX_FMT_NE(YUVA444P10BE, YUVA444P10LE) -#define AV_PIX_FMT_YUVA422P12 AV_PIX_FMT_NE(YUVA422P12BE, YUVA422P12LE) -#define AV_PIX_FMT_YUVA444P12 AV_PIX_FMT_NE(YUVA444P12BE, YUVA444P12LE) -#define AV_PIX_FMT_YUVA420P16 AV_PIX_FMT_NE(YUVA420P16BE, YUVA420P16LE) -#define AV_PIX_FMT_YUVA422P16 AV_PIX_FMT_NE(YUVA422P16BE, YUVA422P16LE) -#define AV_PIX_FMT_YUVA444P16 AV_PIX_FMT_NE(YUVA444P16BE, YUVA444P16LE) - -#define AV_PIX_FMT_XYZ12 AV_PIX_FMT_NE(XYZ12BE, XYZ12LE) -#define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE) -#define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE) -#define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE) -#define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE) - -#define AV_PIX_FMT_Y210 AV_PIX_FMT_NE(Y210BE, Y210LE) -#define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE) - -/** - * Chromaticity coordinates of the source primaries. - * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.1. - */ -enum AVColorPrimaries { - AVCOL_PRI_RESERVED0 = 0, - AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B - AVCOL_PRI_UNSPECIFIED = 2, - AVCOL_PRI_RESERVED = 3, - AVCOL_PRI_BT470M = 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - - AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM - AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC - AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above - AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C - AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 - AVCOL_PRI_SMPTE428 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) - AVCOL_PRI_SMPTEST428_1 = AVCOL_PRI_SMPTE428, - AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3 - AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3 - AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E / JEDEC P22 phosphors - AVCOL_PRI_JEDEC_P22 = AVCOL_PRI_EBU3213, - AVCOL_PRI_NB ///< Not part of ABI -}; - -/** - * Color Transfer Characteristic. - * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.2. - */ -enum AVColorTransferCharacteristic { - AVCOL_TRC_RESERVED0 = 0, - AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 - AVCOL_TRC_UNSPECIFIED = 2, - AVCOL_TRC_RESERVED = 3, - AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM - AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG - AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC - AVCOL_TRC_SMPTE240M = 7, - AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics" - AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)" - AVCOL_TRC_LOG_SQRT = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)" - AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 - AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut - AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) - AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10-bit system - AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12-bit system - AVCOL_TRC_SMPTE2084 = 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems - AVCOL_TRC_SMPTEST2084 = AVCOL_TRC_SMPTE2084, - AVCOL_TRC_SMPTE428 = 17, ///< SMPTE ST 428-1 - AVCOL_TRC_SMPTEST428_1 = AVCOL_TRC_SMPTE428, - AVCOL_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" - AVCOL_TRC_NB ///< Not part of ABI -}; - -/** - * YUV colorspace type. - * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.3. - */ -enum AVColorSpace { - AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB) - AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B - AVCOL_SPC_UNSPECIFIED = 2, - AVCOL_SPC_RESERVED = 3, - AVCOL_SPC_FCC = 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 - AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC - AVCOL_SPC_SMPTE240M = 7, ///< functionally identical to above - AVCOL_SPC_YCGCO = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 - AVCOL_SPC_YCOCG = AVCOL_SPC_YCGCO, - AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system - AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system - AVCOL_SPC_SMPTE2085 = 11, ///< SMPTE 2085, Y'D'zD'x - AVCOL_SPC_CHROMA_DERIVED_NCL = 12, ///< Chromaticity-derived non-constant luminance system - AVCOL_SPC_CHROMA_DERIVED_CL = 13, ///< Chromaticity-derived constant luminance system - AVCOL_SPC_ICTCP = 14, ///< ITU-R BT.2100-0, ICtCp - AVCOL_SPC_NB ///< Not part of ABI -}; - -/** - * Visual content value range. - * - * These values are based on definitions that can be found in multiple - * specifications, such as ITU-T BT.709 (3.4 - Quantization of RGB, luminance - * and colour-difference signals), ITU-T BT.2020 (Table 5 - Digital - * Representation) as well as ITU-T BT.2100 (Table 9 - Digital 10- and 12-bit - * integer representation). At the time of writing, the BT.2100 one is - * recommended, as it also defines the full range representation. - * - * Common definitions: - * - For RGB and luminance planes such as Y in YCbCr and I in ICtCp, - * 'E' is the original value in range of 0.0 to 1.0. - * - For chrominance planes such as Cb,Cr and Ct,Cp, 'E' is the original - * value in range of -0.5 to 0.5. - * - 'n' is the output bit depth. - * - For additional definitions such as rounding and clipping to valid n - * bit unsigned integer range, please refer to BT.2100 (Table 9). - */ -enum AVColorRange { - AVCOL_RANGE_UNSPECIFIED = 0, - - /** - * Narrow or limited range content. - * - * - For luminance planes: - * - * (219 * E + 16) * 2^(n-8) - * - * F.ex. the range of 16-235 for 8 bits - * - * - For chrominance planes: - * - * (224 * E + 128) * 2^(n-8) - * - * F.ex. the range of 16-240 for 8 bits - */ - AVCOL_RANGE_MPEG = 1, - - /** - * Full range content. - * - * - For RGB and luminance planes: - * - * (2^n - 1) * E - * - * F.ex. the range of 0-255 for 8 bits - * - * - For chrominance planes: - * - * (2^n - 1) * E + 2^(n - 1) - * - * F.ex. the range of 1-255 for 8 bits - */ - AVCOL_RANGE_JPEG = 2, - AVCOL_RANGE_NB ///< Not part of ABI -}; - -/** - * Location of chroma samples. - * - * Illustration showing the location of the first (top left) chroma sample of the - * image, the left shows only luma, the right - * shows the location of the chroma sample, the 2 could be imagined to overlay - * each other but are drawn separately due to limitations of ASCII - * - * 1st 2nd 1st 2nd horizontal luma sample positions - * v v v v - * ______ ______ - *1st luma line > |X X ... |3 4 X ... X are luma samples, - * | |1 2 1-6 are possible chroma positions - *2nd luma line > |X X ... |5 6 X ... 0 is undefined/unknown position - */ -enum AVChromaLocation { - AVCHROMA_LOC_UNSPECIFIED = 0, - AVCHROMA_LOC_LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0 - AVCHROMA_LOC_CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0 - AVCHROMA_LOC_TOPLEFT = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 - AVCHROMA_LOC_TOP = 4, - AVCHROMA_LOC_BOTTOMLEFT = 5, - AVCHROMA_LOC_BOTTOM = 6, - AVCHROMA_LOC_NB ///< Not part of ABI -}; - -#endif /* AVUTIL_PIXFMT_H */ diff --git a/prebuilts/x86_64/include/libavutil/random_seed.h b/prebuilts/x86_64/include/libavutil/random_seed.h deleted file mode 100644 index 0462a04..0000000 --- a/prebuilts/x86_64/include/libavutil/random_seed.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2009 Baptiste Coudurier - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_RANDOM_SEED_H -#define AVUTIL_RANDOM_SEED_H - -#include -/** - * @addtogroup lavu_crypto - * @{ - */ - -/** - * Get a seed to use in conjunction with random functions. - * This function tries to provide a good seed at a best effort bases. - * Its possible to call this function multiple times if more bits are needed. - * It can be quite slow, which is why it should only be used as seed for a faster - * PRNG. The quality of the seed depends on the platform. - */ -uint32_t av_get_random_seed(void); - -/** - * @} - */ - -#endif /* AVUTIL_RANDOM_SEED_H */ diff --git a/prebuilts/x86_64/include/libavutil/rational.h b/prebuilts/x86_64/include/libavutil/rational.h deleted file mode 100644 index cbb08a0..0000000 --- a/prebuilts/x86_64/include/libavutil/rational.h +++ /dev/null @@ -1,220 +0,0 @@ -/* - * rational numbers - * Copyright (c) 2003 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_math_rational - * Utilties for rational number calculation. - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_RATIONAL_H -#define AVUTIL_RATIONAL_H - -#include -#include -#include "attributes.h" - -/** - * @defgroup lavu_math_rational AVRational - * @ingroup lavu_math - * Rational number calculation. - * - * While rational numbers can be expressed as floating-point numbers, the - * conversion process is a lossy one, so are floating-point operations. On the - * other hand, the nature of FFmpeg demands highly accurate calculation of - * timestamps. This set of rational number utilities serves as a generic - * interface for manipulating rational numbers as pairs of numerators and - * denominators. - * - * Many of the functions that operate on AVRational's have the suffix `_q`, in - * reference to the mathematical symbol "ℚ" (Q) which denotes the set of all - * rational numbers. - * - * @{ - */ - -/** - * Rational number (pair of numerator and denominator). - */ -typedef struct AVRational{ - int num; ///< Numerator - int den; ///< Denominator -} AVRational; - -/** - * Create an AVRational. - * - * Useful for compilers that do not support compound literals. - * - * @note The return value is not reduced. - * @see av_reduce() - */ -static inline AVRational av_make_q(int num, int den) -{ - AVRational r = { num, den }; - return r; -} - -/** - * Compare two rationals. - * - * @param a First rational - * @param b Second rational - * - * @return One of the following values: - * - 0 if `a == b` - * - 1 if `a > b` - * - -1 if `a < b` - * - `INT_MIN` if one of the values is of the form `0 / 0` - */ -static inline int av_cmp_q(AVRational a, AVRational b){ - const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den; - - if(tmp) return (int)((tmp ^ a.den ^ b.den)>>63)|1; - else if(b.den && a.den) return 0; - else if(a.num && b.num) return (a.num>>31) - (b.num>>31); - else return INT_MIN; -} - -/** - * Convert an AVRational to a `double`. - * @param a AVRational to convert - * @return `a` in floating-point form - * @see av_d2q() - */ -static inline double av_q2d(AVRational a){ - return a.num / (double) a.den; -} - -/** - * Reduce a fraction. - * - * This is useful for framerate calculations. - * - * @param[out] dst_num Destination numerator - * @param[out] dst_den Destination denominator - * @param[in] num Source numerator - * @param[in] den Source denominator - * @param[in] max Maximum allowed values for `dst_num` & `dst_den` - * @return 1 if the operation is exact, 0 otherwise - */ -int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max); - -/** - * Multiply two rationals. - * @param b First rational - * @param c Second rational - * @return b*c - */ -AVRational av_mul_q(AVRational b, AVRational c) av_const; - -/** - * Divide one rational by another. - * @param b First rational - * @param c Second rational - * @return b/c - */ -AVRational av_div_q(AVRational b, AVRational c) av_const; - -/** - * Add two rationals. - * @param b First rational - * @param c Second rational - * @return b+c - */ -AVRational av_add_q(AVRational b, AVRational c) av_const; - -/** - * Subtract one rational from another. - * @param b First rational - * @param c Second rational - * @return b-c - */ -AVRational av_sub_q(AVRational b, AVRational c) av_const; - -/** - * Invert a rational. - * @param q value - * @return 1 / q - */ -static av_always_inline AVRational av_inv_q(AVRational q) -{ - AVRational r = { q.den, q.num }; - return r; -} - -/** - * Convert a double precision floating point number to a rational. - * - * In case of infinity, the returned value is expressed as `{1, 0}` or - * `{-1, 0}` depending on the sign. - * - * @param d `double` to convert - * @param max Maximum allowed numerator and denominator - * @return `d` in AVRational form - * @see av_q2d() - */ -AVRational av_d2q(double d, int max) av_const; - -/** - * Find which of the two rationals is closer to another rational. - * - * @param q Rational to be compared against - * @param q1,q2 Rationals to be tested - * @return One of the following values: - * - 1 if `q1` is nearer to `q` than `q2` - * - -1 if `q2` is nearer to `q` than `q1` - * - 0 if they have the same distance - */ -int av_nearer_q(AVRational q, AVRational q1, AVRational q2); - -/** - * Find the value in a list of rationals nearest a given reference rational. - * - * @param q Reference rational - * @param q_list Array of rationals terminated by `{0, 0}` - * @return Index of the nearest value found in the array - */ -int av_find_nearest_q_idx(AVRational q, const AVRational* q_list); - -/** - * Convert an AVRational to a IEEE 32-bit `float` expressed in fixed-point - * format. - * - * @param q Rational to be converted - * @return Equivalent floating-point value, expressed as an unsigned 32-bit - * integer. - * @note The returned value is platform-indepedant. - */ -uint32_t av_q2intfloat(AVRational q); - -/** - * Return the best rational so that a and b are multiple of it. - * If the resulting denominator is larger than max_den, return def. - */ -AVRational av_gcd_q(AVRational a, AVRational b, int max_den, AVRational def); - -/** - * @} - */ - -#endif /* AVUTIL_RATIONAL_H */ diff --git a/prebuilts/x86_64/include/libavutil/rc4.h b/prebuilts/x86_64/include/libavutil/rc4.h deleted file mode 100644 index 029cd2a..0000000 --- a/prebuilts/x86_64/include/libavutil/rc4.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * RC4 encryption/decryption/pseudo-random number generator - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_RC4_H -#define AVUTIL_RC4_H - -#include - -/** - * @defgroup lavu_rc4 RC4 - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVRC4 { - uint8_t state[256]; - int x, y; -} AVRC4; - -/** - * Allocate an AVRC4 context. - */ -AVRC4 *av_rc4_alloc(void); - -/** - * @brief Initializes an AVRC4 context. - * - * @param key_bits must be a multiple of 8 - * @param decrypt 0 for encryption, 1 for decryption, currently has no effect - * @return zero on success, negative value otherwise - */ -int av_rc4_init(struct AVRC4 *d, const uint8_t *key, int key_bits, int decrypt); - -/** - * @brief Encrypts / decrypts using the RC4 algorithm. - * - * @param count number of bytes - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst, may be NULL - * @param iv not (yet) used for RC4, should be NULL - * @param decrypt 0 for encryption, 1 for decryption, not (yet) used - */ -void av_rc4_crypt(struct AVRC4 *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_RC4_H */ diff --git a/prebuilts/x86_64/include/libavutil/replaygain.h b/prebuilts/x86_64/include/libavutil/replaygain.h deleted file mode 100644 index b49bf1a..0000000 --- a/prebuilts/x86_64/include/libavutil/replaygain.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_REPLAYGAIN_H -#define AVUTIL_REPLAYGAIN_H - -#include - -/** - * ReplayGain information (see - * http://wiki.hydrogenaudio.org/index.php?title=ReplayGain_1.0_specification). - * The size of this struct is a part of the public ABI. - */ -typedef struct AVReplayGain { - /** - * Track replay gain in microbels (divide by 100000 to get the value in dB). - * Should be set to INT32_MIN when unknown. - */ - int32_t track_gain; - /** - * Peak track amplitude, with 100000 representing full scale (but values - * may overflow). 0 when unknown. - */ - uint32_t track_peak; - /** - * Same as track_gain, but for the whole album. - */ - int32_t album_gain; - /** - * Same as track_peak, but for the whole album, - */ - uint32_t album_peak; -} AVReplayGain; - -#endif /* AVUTIL_REPLAYGAIN_H */ diff --git a/prebuilts/x86_64/include/libavutil/ripemd.h b/prebuilts/x86_64/include/libavutil/ripemd.h deleted file mode 100644 index 921aa66..0000000 --- a/prebuilts/x86_64/include/libavutil/ripemd.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * Copyright (C) 2013 James Almer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_ripemd - * Public header for RIPEMD hash function implementation. - */ - -#ifndef AVUTIL_RIPEMD_H -#define AVUTIL_RIPEMD_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_ripemd RIPEMD - * @ingroup lavu_hash - * RIPEMD hash function implementation. - * - * @{ - */ - -extern const int av_ripemd_size; - -struct AVRIPEMD; - -/** - * Allocate an AVRIPEMD context. - */ -struct AVRIPEMD *av_ripemd_alloc(void); - -/** - * Initialize RIPEMD hashing. - * - * @param context pointer to the function context (of size av_ripemd_size) - * @param bits number of bits in digest (128, 160, 256 or 320 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_ripemd_init(struct AVRIPEMD* context, int bits); - -/** - * Update hash value. - * - * @param context hash function context - * @param data input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, unsigned int len); -#else -void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_ripemd_final(struct AVRIPEMD* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_RIPEMD_H */ diff --git a/prebuilts/x86_64/include/libavutil/samplefmt.h b/prebuilts/x86_64/include/libavutil/samplefmt.h deleted file mode 100644 index 8cd43ae..0000000 --- a/prebuilts/x86_64/include/libavutil/samplefmt.h +++ /dev/null @@ -1,272 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_SAMPLEFMT_H -#define AVUTIL_SAMPLEFMT_H - -#include - -#include "avutil.h" -#include "attributes.h" - -/** - * @addtogroup lavu_audio - * @{ - * - * @defgroup lavu_sampfmts Audio sample formats - * - * Audio sample format enumeration and related convenience functions. - * @{ - */ - -/** - * Audio sample formats - * - * - The data described by the sample format is always in native-endian order. - * Sample values can be expressed by native C types, hence the lack of a signed - * 24-bit sample format even though it is a common raw audio data format. - * - * - The floating-point formats are based on full volume being in the range - * [-1.0, 1.0]. Any values outside this range are beyond full volume level. - * - * - The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg - * (such as AVFrame in libavcodec) is as follows: - * - * @par - * For planar sample formats, each audio channel is in a separate data plane, - * and linesize is the buffer size, in bytes, for a single plane. All data - * planes must be the same size. For packed sample formats, only the first data - * plane is used, and samples for each channel are interleaved. In this case, - * linesize is the buffer size, in bytes, for the 1 plane. - * - */ -enum AVSampleFormat { - AV_SAMPLE_FMT_NONE = -1, - AV_SAMPLE_FMT_U8, ///< unsigned 8 bits - AV_SAMPLE_FMT_S16, ///< signed 16 bits - AV_SAMPLE_FMT_S32, ///< signed 32 bits - AV_SAMPLE_FMT_FLT, ///< float - AV_SAMPLE_FMT_DBL, ///< double - - AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar - AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar - AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar - AV_SAMPLE_FMT_FLTP, ///< float, planar - AV_SAMPLE_FMT_DBLP, ///< double, planar - AV_SAMPLE_FMT_S64, ///< signed 64 bits - AV_SAMPLE_FMT_S64P, ///< signed 64 bits, planar - - AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking dynamically -}; - -/** - * Return the name of sample_fmt, or NULL if sample_fmt is not - * recognized. - */ -const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt); - -/** - * Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE - * on error. - */ -enum AVSampleFormat av_get_sample_fmt(const char *name); - -/** - * Return the planar<->packed alternative form of the given sample format, or - * AV_SAMPLE_FMT_NONE on error. If the passed sample_fmt is already in the - * requested planar/packed format, the format returned is the same as the - * input. - */ -enum AVSampleFormat av_get_alt_sample_fmt(enum AVSampleFormat sample_fmt, int planar); - -/** - * Get the packed alternative form of the given sample format. - * - * If the passed sample_fmt is already in packed format, the format returned is - * the same as the input. - * - * @return the packed alternative form of the given sample format or - AV_SAMPLE_FMT_NONE on error. - */ -enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt); - -/** - * Get the planar alternative form of the given sample format. - * - * If the passed sample_fmt is already in planar format, the format returned is - * the same as the input. - * - * @return the planar alternative form of the given sample format or - AV_SAMPLE_FMT_NONE on error. - */ -enum AVSampleFormat av_get_planar_sample_fmt(enum AVSampleFormat sample_fmt); - -/** - * Generate a string corresponding to the sample format with - * sample_fmt, or a header if sample_fmt is negative. - * - * @param buf the buffer where to write the string - * @param buf_size the size of buf - * @param sample_fmt the number of the sample format to print the - * corresponding info string, or a negative value to print the - * corresponding header. - * @return the pointer to the filled buffer or NULL if sample_fmt is - * unknown or in case of other errors - */ -char *av_get_sample_fmt_string(char *buf, int buf_size, enum AVSampleFormat sample_fmt); - -/** - * Return number of bytes per sample. - * - * @param sample_fmt the sample format - * @return number of bytes per sample or zero if unknown for the given - * sample format - */ -int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt); - -/** - * Check if the sample format is planar. - * - * @param sample_fmt the sample format to inspect - * @return 1 if the sample format is planar, 0 if it is interleaved - */ -int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt); - -/** - * Get the required buffer size for the given audio parameters. - * - * @param[out] linesize calculated linesize, may be NULL - * @param nb_channels the number of channels - * @param nb_samples the number of samples in a single channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return required buffer size, or negative error code on failure - */ -int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, - enum AVSampleFormat sample_fmt, int align); - -/** - * @} - * - * @defgroup lavu_sampmanip Samples manipulation - * - * Functions that manipulate audio samples - * @{ - */ - -/** - * Fill plane data pointers and linesize for samples with sample - * format sample_fmt. - * - * The audio_data array is filled with the pointers to the samples data planes: - * for planar, set the start point of each channel's data within the buffer, - * for packed, set the start point of the entire buffer only. - * - * The value pointed to by linesize is set to the aligned size of each - * channel's data buffer for planar layout, or to the aligned size of the - * buffer for all channels for packed layout. - * - * The buffer in buf must be big enough to contain all the samples - * (use av_samples_get_buffer_size() to compute its minimum size), - * otherwise the audio_data pointers will point to invalid data. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize calculated linesize, may be NULL - * @param buf the pointer to a buffer containing the samples - * @param nb_channels the number of channels - * @param nb_samples the number of samples in a single channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return >=0 on success or a negative error code on failure - * @todo return minimum size in bytes required for the buffer in case - * of success at the next bump - */ -int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, - const uint8_t *buf, - int nb_channels, int nb_samples, - enum AVSampleFormat sample_fmt, int align); - -/** - * Allocate a samples buffer for nb_samples samples, and fill data pointers and - * linesize accordingly. - * The allocated samples buffer can be freed by using av_freep(&audio_data[0]) - * Allocated data will be initialized to silence. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize aligned size for audio buffer(s), may be NULL - * @param nb_channels number of audio channels - * @param nb_samples number of samples per channel - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return >=0 on success or a negative error code on failure - * @todo return the size of the allocated buffer in case of success at the next bump - * @see av_samples_fill_arrays() - * @see av_samples_alloc_array_and_samples() - */ -int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels, - int nb_samples, enum AVSampleFormat sample_fmt, int align); - -/** - * Allocate a data pointers array, samples buffer for nb_samples - * samples, and fill data pointers and linesize accordingly. - * - * This is the same as av_samples_alloc(), but also allocates the data - * pointers array. - * - * @see av_samples_alloc() - */ -int av_samples_alloc_array_and_samples(uint8_t ***audio_data, int *linesize, int nb_channels, - int nb_samples, enum AVSampleFormat sample_fmt, int align); - -/** - * Copy samples from src to dst. - * - * @param dst destination array of pointers to data planes - * @param src source array of pointers to data planes - * @param dst_offset offset in samples at which the data will be written to dst - * @param src_offset offset in samples at which the data will be read from src - * @param nb_samples number of samples to be copied - * @param nb_channels number of audio channels - * @param sample_fmt audio sample format - */ -int av_samples_copy(uint8_t **dst, uint8_t * const *src, int dst_offset, - int src_offset, int nb_samples, int nb_channels, - enum AVSampleFormat sample_fmt); - -/** - * Fill an audio buffer with silence. - * - * @param audio_data array of pointers to data planes - * @param offset offset in samples at which to start filling - * @param nb_samples number of samples to fill - * @param nb_channels number of audio channels - * @param sample_fmt audio sample format - */ -int av_samples_set_silence(uint8_t **audio_data, int offset, int nb_samples, - int nb_channels, enum AVSampleFormat sample_fmt); - -/** - * @} - * @} - */ -#endif /* AVUTIL_SAMPLEFMT_H */ diff --git a/prebuilts/x86_64/include/libavutil/sha.h b/prebuilts/x86_64/include/libavutil/sha.h deleted file mode 100644 index c0180e5..0000000 --- a/prebuilts/x86_64/include/libavutil/sha.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_sha - * Public header for SHA-1 & SHA-256 hash function implementations. - */ - -#ifndef AVUTIL_SHA_H -#define AVUTIL_SHA_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_sha SHA - * @ingroup lavu_hash - * SHA-1 and SHA-256 (Secure Hash Algorithm) hash function implementations. - * - * This module supports the following SHA hash functions: - * - * - SHA-1: 160 bits - * - SHA-224: 224 bits, as a variant of SHA-2 - * - SHA-256: 256 bits, as a variant of SHA-2 - * - * @see For SHA-384, SHA-512, and variants thereof, see @ref lavu_sha512. - * - * @{ - */ - -extern const int av_sha_size; - -struct AVSHA; - -/** - * Allocate an AVSHA context. - */ -struct AVSHA *av_sha_alloc(void); - -/** - * Initialize SHA-1 or SHA-2 hashing. - * - * @param context pointer to the function context (of size av_sha_size) - * @param bits number of bits in digest (SHA-1 - 160 bits, SHA-2 224 or 256 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_sha_init(struct AVSHA* context, int bits); - -/** - * Update hash value. - * - * @param ctx hash function context - * @param data input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_sha_update(struct AVSHA *ctx, const uint8_t *data, unsigned int len); -#else -void av_sha_update(struct AVSHA *ctx, const uint8_t *data, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_sha_final(struct AVSHA* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_SHA_H */ diff --git a/prebuilts/x86_64/include/libavutil/sha512.h b/prebuilts/x86_64/include/libavutil/sha512.h deleted file mode 100644 index bef714b..0000000 --- a/prebuilts/x86_64/include/libavutil/sha512.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * Copyright (C) 2013 James Almer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_sha512 - * Public header for SHA-512 implementation. - */ - -#ifndef AVUTIL_SHA512_H -#define AVUTIL_SHA512_H - -#include -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_sha512 SHA-512 - * @ingroup lavu_hash - * SHA-512 (Secure Hash Algorithm) hash function implementations. - * - * This module supports the following SHA-2 hash functions: - * - * - SHA-512/224: 224 bits - * - SHA-512/256: 256 bits - * - SHA-384: 384 bits - * - SHA-512: 512 bits - * - * @see For SHA-1, SHA-256, and variants thereof, see @ref lavu_sha. - * - * @{ - */ - -extern const int av_sha512_size; - -struct AVSHA512; - -/** - * Allocate an AVSHA512 context. - */ -struct AVSHA512 *av_sha512_alloc(void); - -/** - * Initialize SHA-2 512 hashing. - * - * @param context pointer to the function context (of size av_sha512_size) - * @param bits number of bits in digest (224, 256, 384 or 512 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_sha512_init(struct AVSHA512* context, int bits); - -/** - * Update hash value. - * - * @param context hash function context - * @param data input data to update hash with - * @param len input data length - */ -#if FF_API_CRYPTO_SIZE_T -void av_sha512_update(struct AVSHA512* context, const uint8_t* data, unsigned int len); -#else -void av_sha512_update(struct AVSHA512* context, const uint8_t* data, size_t len); -#endif - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_sha512_final(struct AVSHA512* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_SHA512_H */ diff --git a/prebuilts/x86_64/include/libavutil/spherical.h b/prebuilts/x86_64/include/libavutil/spherical.h deleted file mode 100644 index cef759c..0000000 --- a/prebuilts/x86_64/include/libavutil/spherical.h +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (c) 2016 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Spherical video - */ - -#ifndef AVUTIL_SPHERICAL_H -#define AVUTIL_SPHERICAL_H - -#include -#include - -/** - * @addtogroup lavu_video - * @{ - * - * @defgroup lavu_video_spherical Spherical video mapping - * @{ - */ - -/** - * @addtogroup lavu_video_spherical - * A spherical video file contains surfaces that need to be mapped onto a - * sphere. Depending on how the frame was converted, a different distortion - * transformation or surface recomposition function needs to be applied before - * the video should be mapped and displayed. - */ - -/** - * Projection of the video surface(s) on a sphere. - */ -enum AVSphericalProjection { - /** - * Video represents a sphere mapped on a flat surface using - * equirectangular projection. - */ - AV_SPHERICAL_EQUIRECTANGULAR, - - /** - * Video frame is split into 6 faces of a cube, and arranged on a - * 3x2 layout. Faces are oriented upwards for the front, left, right, - * and back faces. The up face is oriented so the top of the face is - * forwards and the down face is oriented so the top of the face is - * to the back. - */ - AV_SPHERICAL_CUBEMAP, - - /** - * Video represents a portion of a sphere mapped on a flat surface - * using equirectangular projection. The @ref bounding fields indicate - * the position of the current video in a larger surface. - */ - AV_SPHERICAL_EQUIRECTANGULAR_TILE, -}; - -/** - * This structure describes how to handle spherical videos, outlining - * information about projection, initial layout, and any other view modifier. - * - * @note The struct must be allocated with av_spherical_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVSphericalMapping { - /** - * Projection type. - */ - enum AVSphericalProjection projection; - - /** - * @name Initial orientation - * @{ - * There fields describe additional rotations applied to the sphere after - * the video frame is mapped onto it. The sphere is rotated around the - * viewer, who remains stationary. The order of transformation is always - * yaw, followed by pitch, and finally by roll. - * - * The coordinate system matches the one defined in OpenGL, where the - * forward vector (z) is coming out of screen, and it is equivalent to - * a rotation matrix of R = r_y(yaw) * r_x(pitch) * r_z(roll). - * - * A positive yaw rotates the portion of the sphere in front of the viewer - * toward their right. A positive pitch rotates the portion of the sphere - * in front of the viewer upwards. A positive roll tilts the portion of - * the sphere in front of the viewer to the viewer's right. - * - * These values are exported as 16.16 fixed point. - * - * See this equirectangular projection as example: - * - * @code{.unparsed} - * Yaw - * -180 0 180 - * 90 +-------------+-------------+ 180 - * | | | up - * P | | | y| forward - * i | ^ | | /z - * t 0 +-------------X-------------+ 0 Roll | / - * c | | | | / - * h | | | 0|/_____right - * | | | x - * -90 +-------------+-------------+ -180 - * - * X - the default camera center - * ^ - the default up vector - * @endcode - */ - int32_t yaw; ///< Rotation around the up vector [-180, 180]. - int32_t pitch; ///< Rotation around the right vector [-90, 90]. - int32_t roll; ///< Rotation around the forward vector [-180, 180]. - /** - * @} - */ - - /** - * @name Bounding rectangle - * @anchor bounding - * @{ - * These fields indicate the location of the current tile, and where - * it should be mapped relative to the original surface. They are - * exported as 0.32 fixed point, and can be converted to classic - * pixel values with av_spherical_bounds(). - * - * @code{.unparsed} - * +----------------+----------+ - * | |bound_top | - * | +--------+ | - * | bound_left |tile | | - * +<---------->| |<--->+bound_right - * | +--------+ | - * | | | - * | bound_bottom| | - * +----------------+----------+ - * @endcode - * - * If needed, the original video surface dimensions can be derived - * by adding the current stream or frame size to the related bounds, - * like in the following example: - * - * @code{c} - * original_width = tile->width + bound_left + bound_right; - * original_height = tile->height + bound_top + bound_bottom; - * @endcode - * - * @note These values are valid only for the tiled equirectangular - * projection type (@ref AV_SPHERICAL_EQUIRECTANGULAR_TILE), - * and should be ignored in all other cases. - */ - uint32_t bound_left; ///< Distance from the left edge - uint32_t bound_top; ///< Distance from the top edge - uint32_t bound_right; ///< Distance from the right edge - uint32_t bound_bottom; ///< Distance from the bottom edge - /** - * @} - */ - - /** - * Number of pixels to pad from the edge of each cube face. - * - * @note This value is valid for only for the cubemap projection type - * (@ref AV_SPHERICAL_CUBEMAP), and should be ignored in all other - * cases. - */ - uint32_t padding; -} AVSphericalMapping; - -/** - * Allocate a AVSphericalVideo structure and initialize its fields to default - * values. - * - * @return the newly allocated struct or NULL on failure - */ -AVSphericalMapping *av_spherical_alloc(size_t *size); - -/** - * Convert the @ref bounding fields from an AVSphericalVideo - * from 0.32 fixed point to pixels. - * - * @param map The AVSphericalVideo map to read bound values from. - * @param width Width of the current frame or stream. - * @param height Height of the current frame or stream. - * @param left Pixels from the left edge. - * @param top Pixels from the top edge. - * @param right Pixels from the right edge. - * @param bottom Pixels from the bottom edge. - */ -void av_spherical_tile_bounds(const AVSphericalMapping *map, - size_t width, size_t height, - size_t *left, size_t *top, - size_t *right, size_t *bottom); - -/** - * Provide a human-readable name of a given AVSphericalProjection. - * - * @param projection The input AVSphericalProjection. - * - * @return The name of the AVSphericalProjection, or "unknown". - */ -const char *av_spherical_projection_name(enum AVSphericalProjection projection); - -/** - * Get the AVSphericalProjection form a human-readable name. - * - * @param name The input string. - * - * @return The AVSphericalProjection value, or -1 if not found. - */ -int av_spherical_from_name(const char *name); -/** - * @} - * @} - */ - -#endif /* AVUTIL_SPHERICAL_H */ diff --git a/prebuilts/x86_64/include/libavutil/stereo3d.h b/prebuilts/x86_64/include/libavutil/stereo3d.h deleted file mode 100644 index d421aac..0000000 --- a/prebuilts/x86_64/include/libavutil/stereo3d.h +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (c) 2013 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Stereoscopic video - */ - -#ifndef AVUTIL_STEREO3D_H -#define AVUTIL_STEREO3D_H - -#include - -#include "frame.h" - -/** - * @addtogroup lavu_video - * @{ - * - * @defgroup lavu_video_stereo3d Stereo3D types and functions - * @{ - */ - -/** - * @addtogroup lavu_video_stereo3d - * A stereoscopic video file consists in multiple views embedded in a single - * frame, usually describing two views of a scene. This file describes all - * possible codec-independent view arrangements. - * */ - -/** - * List of possible 3D Types - */ -enum AVStereo3DType { - /** - * Video is not stereoscopic (and metadata has to be there). - */ - AV_STEREO3D_2D, - - /** - * Views are next to each other. - * - * @code{.unparsed} - * LLLLRRRR - * LLLLRRRR - * LLLLRRRR - * ... - * @endcode - */ - AV_STEREO3D_SIDEBYSIDE, - - /** - * Views are on top of each other. - * - * @code{.unparsed} - * LLLLLLLL - * LLLLLLLL - * RRRRRRRR - * RRRRRRRR - * @endcode - */ - AV_STEREO3D_TOPBOTTOM, - - /** - * Views are alternated temporally. - * - * @code{.unparsed} - * frame0 frame1 frame2 ... - * LLLLLLLL RRRRRRRR LLLLLLLL - * LLLLLLLL RRRRRRRR LLLLLLLL - * LLLLLLLL RRRRRRRR LLLLLLLL - * ... ... ... - * @endcode - */ - AV_STEREO3D_FRAMESEQUENCE, - - /** - * Views are packed in a checkerboard-like structure per pixel. - * - * @code{.unparsed} - * LRLRLRLR - * RLRLRLRL - * LRLRLRLR - * ... - * @endcode - */ - AV_STEREO3D_CHECKERBOARD, - - /** - * Views are next to each other, but when upscaling - * apply a checkerboard pattern. - * - * @code{.unparsed} - * LLLLRRRR L L L L R R R R - * LLLLRRRR => L L L L R R R R - * LLLLRRRR L L L L R R R R - * LLLLRRRR L L L L R R R R - * @endcode - */ - AV_STEREO3D_SIDEBYSIDE_QUINCUNX, - - /** - * Views are packed per line, as if interlaced. - * - * @code{.unparsed} - * LLLLLLLL - * RRRRRRRR - * LLLLLLLL - * ... - * @endcode - */ - AV_STEREO3D_LINES, - - /** - * Views are packed per column. - * - * @code{.unparsed} - * LRLRLRLR - * LRLRLRLR - * LRLRLRLR - * ... - * @endcode - */ - AV_STEREO3D_COLUMNS, -}; - -/** - * List of possible view types. - */ -enum AVStereo3DView { - /** - * Frame contains two packed views. - */ - AV_STEREO3D_VIEW_PACKED, - - /** - * Frame contains only the left view. - */ - AV_STEREO3D_VIEW_LEFT, - - /** - * Frame contains only the right view. - */ - AV_STEREO3D_VIEW_RIGHT, -}; - -/** - * Inverted views, Right/Bottom represents the left view. - */ -#define AV_STEREO3D_FLAG_INVERT (1 << 0) - -/** - * Stereo 3D type: this structure describes how two videos are packed - * within a single video surface, with additional information as needed. - * - * @note The struct must be allocated with av_stereo3d_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVStereo3D { - /** - * How views are packed within the video. - */ - enum AVStereo3DType type; - - /** - * Additional information about the frame packing. - */ - int flags; - - /** - * Determines which views are packed. - */ - enum AVStereo3DView view; -} AVStereo3D; - -/** - * Allocate an AVStereo3D structure and set its fields to default values. - * The resulting struct can be freed using av_freep(). - * - * @return An AVStereo3D filled with default values or NULL on failure. - */ -AVStereo3D *av_stereo3d_alloc(void); - -/** - * Allocate a complete AVFrameSideData and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVStereo3D structure to be filled by caller. - */ -AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame); - -/** - * Provide a human-readable name of a given stereo3d type. - * - * @param type The input stereo3d type value. - * - * @return The name of the stereo3d value, or "unknown". - */ -const char *av_stereo3d_type_name(unsigned int type); - -/** - * Get the AVStereo3DType form a human-readable name. - * - * @param name The input string. - * - * @return The AVStereo3DType value, or -1 if not found. - */ -int av_stereo3d_from_name(const char *name); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_STEREO3D_H */ diff --git a/prebuilts/x86_64/include/libavutil/tea.h b/prebuilts/x86_64/include/libavutil/tea.h deleted file mode 100644 index dd929bd..0000000 --- a/prebuilts/x86_64/include/libavutil/tea.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * A 32-bit implementation of the TEA algorithm - * Copyright (c) 2015 Vesselin Bontchev - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TEA_H -#define AVUTIL_TEA_H - -#include - -/** - * @file - * @brief Public header for libavutil TEA algorithm - * @defgroup lavu_tea TEA - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_tea_size; - -struct AVTEA; - -/** - * Allocate an AVTEA context - * To free the struct: av_free(ptr) - */ -struct AVTEA *av_tea_alloc(void); - -/** - * Initialize an AVTEA context. - * - * @param ctx an AVTEA context - * @param key a key of 16 bytes used for encryption/decryption - * @param rounds the number of rounds in TEA (64 is the "standard") - */ -void av_tea_init(struct AVTEA *ctx, const uint8_t key[16], int rounds); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_tea_crypt(struct AVTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_TEA_H */ diff --git a/prebuilts/x86_64/include/libavutil/threadmessage.h b/prebuilts/x86_64/include/libavutil/threadmessage.h deleted file mode 100644 index 42ce655..0000000 --- a/prebuilts/x86_64/include/libavutil/threadmessage.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with FFmpeg; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_THREADMESSAGE_H -#define AVUTIL_THREADMESSAGE_H - -typedef struct AVThreadMessageQueue AVThreadMessageQueue; - -typedef enum AVThreadMessageFlags { - - /** - * Perform non-blocking operation. - * If this flag is set, send and recv operations are non-blocking and - * return AVERROR(EAGAIN) immediately if they can not proceed. - */ - AV_THREAD_MESSAGE_NONBLOCK = 1, - -} AVThreadMessageFlags; - -/** - * Allocate a new message queue. - * - * @param mq pointer to the message queue - * @param nelem maximum number of elements in the queue - * @param elsize size of each element in the queue - * @return >=0 for success; <0 for error, in particular AVERROR(ENOSYS) if - * lavu was built without thread support - */ -int av_thread_message_queue_alloc(AVThreadMessageQueue **mq, - unsigned nelem, - unsigned elsize); - -/** - * Free a message queue. - * - * The message queue must no longer be in use by another thread. - */ -void av_thread_message_queue_free(AVThreadMessageQueue **mq); - -/** - * Send a message on the queue. - */ -int av_thread_message_queue_send(AVThreadMessageQueue *mq, - void *msg, - unsigned flags); - -/** - * Receive a message from the queue. - */ -int av_thread_message_queue_recv(AVThreadMessageQueue *mq, - void *msg, - unsigned flags); - -/** - * Set the sending error code. - * - * If the error code is set to non-zero, av_thread_message_queue_send() will - * return it immediately. Conventional values, such as AVERROR_EOF or - * AVERROR(EAGAIN), can be used to cause the sending thread to stop or - * suspend its operation. - */ -void av_thread_message_queue_set_err_send(AVThreadMessageQueue *mq, - int err); - -/** - * Set the receiving error code. - * - * If the error code is set to non-zero, av_thread_message_queue_recv() will - * return it immediately when there are no longer available messages. - * Conventional values, such as AVERROR_EOF or AVERROR(EAGAIN), can be used - * to cause the receiving thread to stop or suspend its operation. - */ -void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq, - int err); - -/** - * Set the optional free message callback function which will be called if an - * operation is removing messages from the queue. - */ -void av_thread_message_queue_set_free_func(AVThreadMessageQueue *mq, - void (*free_func)(void *msg)); - -/** - * Return the current number of messages in the queue. - * - * @return the current number of messages or AVERROR(ENOSYS) if lavu was built - * without thread support - */ -int av_thread_message_queue_nb_elems(AVThreadMessageQueue *mq); - -/** - * Flush the message queue - * - * This function is mostly equivalent to reading and free-ing every message - * except that it will be done in a single operation (no lock/unlock between - * reads). - */ -void av_thread_message_flush(AVThreadMessageQueue *mq); - -#endif /* AVUTIL_THREADMESSAGE_H */ diff --git a/prebuilts/x86_64/include/libavutil/time.h b/prebuilts/x86_64/include/libavutil/time.h deleted file mode 100644 index dc169b0..0000000 --- a/prebuilts/x86_64/include/libavutil/time.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2000-2003 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TIME_H -#define AVUTIL_TIME_H - -#include - -/** - * Get the current time in microseconds. - */ -int64_t av_gettime(void); - -/** - * Get the current time in microseconds since some unspecified starting point. - * On platforms that support it, the time comes from a monotonic clock - * This property makes this time source ideal for measuring relative time. - * The returned values may not be monotonic on platforms where a monotonic - * clock is not available. - */ -int64_t av_gettime_relative(void); - -/** - * Indicates with a boolean result if the av_gettime_relative() time source - * is monotonic. - */ -int av_gettime_relative_is_monotonic(void); - -/** - * Sleep for a period of time. Although the duration is expressed in - * microseconds, the actual delay may be rounded to the precision of the - * system timer. - * - * @param usec Number of microseconds to sleep. - * @return zero on success or (negative) error code. - */ -int av_usleep(unsigned usec); - -#endif /* AVUTIL_TIME_H */ diff --git a/prebuilts/x86_64/include/libavutil/timecode.h b/prebuilts/x86_64/include/libavutil/timecode.h deleted file mode 100644 index 060574a..0000000 --- a/prebuilts/x86_64/include/libavutil/timecode.h +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (c) 2006 Smartjog S.A.S, Baptiste Coudurier - * Copyright (c) 2011-2012 Smartjog S.A.S, Clément Bœsch - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Timecode helpers header - */ - -#ifndef AVUTIL_TIMECODE_H -#define AVUTIL_TIMECODE_H - -#include -#include "rational.h" - -#define AV_TIMECODE_STR_SIZE 23 - -enum AVTimecodeFlag { - AV_TIMECODE_FLAG_DROPFRAME = 1<<0, ///< timecode is drop frame - AV_TIMECODE_FLAG_24HOURSMAX = 1<<1, ///< timecode wraps after 24 hours - AV_TIMECODE_FLAG_ALLOWNEGATIVE = 1<<2, ///< negative time values are allowed -}; - -typedef struct { - int start; ///< timecode frame start (first base frame number) - uint32_t flags; ///< flags such as drop frame, +24 hours support, ... - AVRational rate; ///< frame rate in rational form - unsigned fps; ///< frame per second; must be consistent with the rate field -} AVTimecode; - -/** - * Adjust frame number for NTSC drop frame time code. - * - * @param framenum frame number to adjust - * @param fps frame per second, multiples of 30 - * @return adjusted frame number - * @warning adjustment is only valid for multiples of NTSC 29.97 - */ -int av_timecode_adjust_ntsc_framenum2(int framenum, int fps); - -/** - * Convert frame number to SMPTE 12M binary representation. - * - * @param tc timecode data correctly initialized - * @param framenum frame number - * @return the SMPTE binary representation - * - * See SMPTE ST 314M-2005 Sec 4.4.2.2.1 "Time code pack (TC)" - * the format description as follows: - * bits 0-5: hours, in BCD(6bits) - * bits 6: BGF1 - * bits 7: BGF2 (NTSC) or FIELD (PAL) - * bits 8-14: minutes, in BCD(7bits) - * bits 15: BGF0 (NTSC) or BGF2 (PAL) - * bits 16-22: seconds, in BCD(7bits) - * bits 23: FIELD (NTSC) or BGF0 (PAL) - * bits 24-29: frames, in BCD(6bits) - * bits 30: drop frame flag (0: non drop, 1: drop) - * bits 31: color frame flag (0: unsync mode, 1: sync mode) - * @note BCD numbers (6 or 7 bits): 4 or 5 lower bits for units, 2 higher bits for tens. - * @note Frame number adjustment is automatically done in case of drop timecode, - * you do NOT have to call av_timecode_adjust_ntsc_framenum2(). - * @note The frame number is relative to tc->start. - * @note Color frame (CF) and binary group flags (BGF) bits are set to zero. - */ -uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum); - -/** - * Convert sei info to SMPTE 12M binary representation. - * - * @param rate frame rate in rational form - * @param drop drop flag - * @param hh hour - * @param mm minute - * @param ss second - * @param ff frame number - * @return the SMPTE binary representation - */ -uint32_t av_timecode_get_smpte(AVRational rate, int drop, int hh, int mm, int ss, int ff); - -/** - * Load timecode string in buf. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tc timecode data correctly initialized - * @param framenum frame number - * @return the buf parameter - * - * @note Timecode representation can be a negative timecode and have more than - * 24 hours, but will only be honored if the flags are correctly set. - * @note The frame number is relative to tc->start. - */ -char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum); - -/** - * Get the timecode string from the SMPTE timecode format. - * - * In contrast to av_timecode_make_smpte_tc_string this function supports 50/60 - * fps timecodes by using the field bit. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param rate frame rate of the timecode - * @param tcsmpte the 32-bit SMPTE timecode - * @param prevent_df prevent the use of a drop flag when it is known the DF bit - * is arbitrary - * @param skip_field prevent the use of a field flag when it is known the field - * bit is arbitrary (e.g. because it is used as PC flag) - * @return the buf parameter - */ -char *av_timecode_make_smpte_tc_string2(char *buf, AVRational rate, uint32_t tcsmpte, int prevent_df, int skip_field); - -/** - * Get the timecode string from the SMPTE timecode format. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tcsmpte the 32-bit SMPTE timecode - * @param prevent_df prevent the use of a drop flag when it is known the DF bit - * is arbitrary - * @return the buf parameter - */ -char *av_timecode_make_smpte_tc_string(char *buf, uint32_t tcsmpte, int prevent_df); - -/** - * Get the timecode string from the 25-bit timecode format (MPEG GOP format). - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tc25bit the 25-bits timecode - * @return the buf parameter - */ -char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit); - -/** - * Init a timecode struct with the passed parameters. - * - * @param log_ctx a pointer to an arbitrary struct of which the first field - * is a pointer to an AVClass struct (used for av_log) - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param flags miscellaneous flags such as drop frame, +24 hours, ... - * (see AVTimecodeFlag) - * @param frame_start the first frame number - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx); - -/** - * Init a timecode struct from the passed timecode components. - * - * @param log_ctx a pointer to an arbitrary struct of which the first field - * is a pointer to an AVClass struct (used for av_log) - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param flags miscellaneous flags such as drop frame, +24 hours, ... - * (see AVTimecodeFlag) - * @param hh hours - * @param mm minutes - * @param ss seconds - * @param ff frames - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init_from_components(AVTimecode *tc, AVRational rate, int flags, int hh, int mm, int ss, int ff, void *log_ctx); - -/** - * Parse timecode representation (hh:mm:ss[:;.]ff). - * - * @param log_ctx a pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct (used for av_log). - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param str timecode string which will determine the frame start - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx); - -/** - * Check if the timecode feature is available for the given frame rate - * - * @return 0 if supported, <0 otherwise - */ -int av_timecode_check_frame_rate(AVRational rate); - -#endif /* AVUTIL_TIMECODE_H */ diff --git a/prebuilts/x86_64/include/libavutil/timestamp.h b/prebuilts/x86_64/include/libavutil/timestamp.h deleted file mode 100644 index e082f01..0000000 --- a/prebuilts/x86_64/include/libavutil/timestamp.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * timestamp utils, mostly useful for debugging/logging purposes - */ - -#ifndef AVUTIL_TIMESTAMP_H -#define AVUTIL_TIMESTAMP_H - -#include "common.h" - -#if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS) && !defined(PRId64) -#error missing -D__STDC_FORMAT_MACROS / #define __STDC_FORMAT_MACROS -#endif - -#define AV_TS_MAX_STRING_SIZE 32 - -/** - * Fill the provided buffer with a string containing a timestamp - * representation. - * - * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE - * @param ts the timestamp to represent - * @return the buffer in input - */ -static inline char *av_ts_make_string(char *buf, int64_t ts) -{ - if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); - else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%" PRId64, ts); - return buf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_ts2str(ts) av_ts_make_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts) - -/** - * Fill the provided buffer with a string containing a timestamp time - * representation. - * - * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE - * @param ts the timestamp to represent - * @param tb the timebase of the timestamp - * @return the buffer in input - */ -static inline char *av_ts_make_time_string(char *buf, int64_t ts, AVRational *tb) -{ - if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); - else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%.6g", av_q2d(*tb) * ts); - return buf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_ts2timestr(ts, tb) av_ts_make_time_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts, tb) - -#endif /* AVUTIL_TIMESTAMP_H */ diff --git a/prebuilts/x86_64/include/libavutil/tree.h b/prebuilts/x86_64/include/libavutil/tree.h deleted file mode 100644 index d5e0aeb..0000000 --- a/prebuilts/x86_64/include/libavutil/tree.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * A tree container. - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_TREE_H -#define AVUTIL_TREE_H - -#include "attributes.h" -#include "version.h" - -/** - * @addtogroup lavu_tree AVTree - * @ingroup lavu_data - * - * Low-complexity tree container - * - * Insertion, removal, finding equal, largest which is smaller than and - * smallest which is larger than, all have O(log n) worst-case complexity. - * @{ - */ - - -struct AVTreeNode; -extern const int av_tree_node_size; - -/** - * Allocate an AVTreeNode. - */ -struct AVTreeNode *av_tree_node_alloc(void); - -/** - * Find an element. - * @param root a pointer to the root node of the tree - * @param next If next is not NULL, then next[0] will contain the previous - * element and next[1] the next element. If either does not exist, - * then the corresponding entry in next is unchanged. - * @param cmp compare function used to compare elements in the tree, - * API identical to that of Standard C's qsort - * It is guaranteed that the first and only the first argument to cmp() - * will be the key parameter to av_tree_find(), thus it could if the - * user wants, be a different type (like an opaque context). - * @return An element with cmp(key, elem) == 0 or NULL if no such element - * exists in the tree. - */ -void *av_tree_find(const struct AVTreeNode *root, void *key, - int (*cmp)(const void *key, const void *b), void *next[2]); - -/** - * Insert or remove an element. - * - * If *next is NULL, then the supplied element will be removed if it exists. - * If *next is non-NULL, then the supplied element will be inserted, unless - * it already exists in the tree. - * - * @param rootp A pointer to a pointer to the root node of the tree; note that - * the root node can change during insertions, this is required - * to keep the tree balanced. - * @param key pointer to the element key to insert in the tree - * @param next Used to allocate and free AVTreeNodes. For insertion the user - * must set it to an allocated and zeroed object of at least - * av_tree_node_size bytes size. av_tree_insert() will set it to - * NULL if it has been consumed. - * For deleting elements *next is set to NULL by the user and - * av_tree_insert() will set it to the AVTreeNode which was - * used for the removed element. - * This allows the use of flat arrays, which have - * lower overhead compared to many malloced elements. - * You might want to define a function like: - * @code - * void *tree_insert(struct AVTreeNode **rootp, void *key, - * int (*cmp)(void *key, const void *b), - * AVTreeNode **next) - * { - * if (!*next) - * *next = av_mallocz(av_tree_node_size); - * return av_tree_insert(rootp, key, cmp, next); - * } - * void *tree_remove(struct AVTreeNode **rootp, void *key, - * int (*cmp)(void *key, const void *b, AVTreeNode **next)) - * { - * av_freep(next); - * return av_tree_insert(rootp, key, cmp, next); - * } - * @endcode - * @param cmp compare function used to compare elements in the tree, API identical - * to that of Standard C's qsort - * @return If no insertion happened, the found element; if an insertion or - * removal happened, then either key or NULL will be returned. - * Which one it is depends on the tree state and the implementation. You - * should make no assumptions that it's one or the other in the code. - */ -void *av_tree_insert(struct AVTreeNode **rootp, void *key, - int (*cmp)(const void *key, const void *b), - struct AVTreeNode **next); - -void av_tree_destroy(struct AVTreeNode *t); - -/** - * Apply enu(opaque, &elem) to all the elements in the tree in a given range. - * - * @param cmp a comparison function that returns < 0 for an element below the - * range, > 0 for an element above the range and == 0 for an - * element inside the range - * - * @note The cmp function should use the same ordering used to construct the - * tree. - */ -void av_tree_enumerate(struct AVTreeNode *t, void *opaque, - int (*cmp)(void *opaque, void *elem), - int (*enu)(void *opaque, void *elem)); - -/** - * @} - */ - -#endif /* AVUTIL_TREE_H */ diff --git a/prebuilts/x86_64/include/libavutil/twofish.h b/prebuilts/x86_64/include/libavutil/twofish.h deleted file mode 100644 index 813cfec..0000000 --- a/prebuilts/x86_64/include/libavutil/twofish.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * An implementation of the TwoFish algorithm - * Copyright (c) 2015 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TWOFISH_H -#define AVUTIL_TWOFISH_H - -#include - - -/** - * @file - * @brief Public header for libavutil TWOFISH algorithm - * @defgroup lavu_twofish TWOFISH - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_twofish_size; - -struct AVTWOFISH; - -/** - * Allocate an AVTWOFISH context - * To free the struct: av_free(ptr) - */ -struct AVTWOFISH *av_twofish_alloc(void); - -/** - * Initialize an AVTWOFISH context. - * - * @param ctx an AVTWOFISH context - * @param key a key of size ranging from 1 to 32 bytes used for encryption/decryption - * @param key_bits number of keybits: 128, 192, 256 If less than the required, padded with zeroes to nearest valid value; return value is 0 if key_bits is 128/192/256, -1 if less than 0, 1 otherwise - */ -int av_twofish_init(struct AVTWOFISH *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVTWOFISH context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 16 byte blocks - * @paran iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_twofish_crypt(struct AVTWOFISH *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt); - -/** - * @} - */ -#endif /* AVUTIL_TWOFISH_H */ diff --git a/prebuilts/x86_64/include/libavutil/tx.h b/prebuilts/x86_64/include/libavutil/tx.h deleted file mode 100644 index bfc0c7f..0000000 --- a/prebuilts/x86_64/include/libavutil/tx.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TX_H -#define AVUTIL_TX_H - -#include -#include - -typedef struct AVTXContext AVTXContext; - -typedef struct AVComplexFloat { - float re, im; -} AVComplexFloat; - -typedef struct AVComplexDouble { - double re, im; -} AVComplexDouble; - -typedef struct AVComplexInt32 { - int32_t re, im; -} AVComplexInt32; - -enum AVTXType { - /** - * Standard complex to complex FFT with sample data type AVComplexFloat. - * Output is not 1/len normalized. Scaling currently unsupported. - * The stride parameter is ignored. - */ - AV_TX_FLOAT_FFT = 0, - - /** - * Standard MDCT with sample data type of float and a scale type of - * float. Length is the frame size, not the window size (which is 2x frame) - * For forward transforms, the stride specifies the spacing between each - * sample in the output array in bytes. The input must be a flat array. - * For inverse transforms, the stride specifies the spacing between each - * sample in the input array in bytes. The output will be a flat array. - * Stride must be a non-zero multiple of sizeof(float). - * NOTE: the inverse transform is half-length, meaning the output will not - * contain redundant data. This is what most codecs work with. - */ - AV_TX_FLOAT_MDCT = 1, - - /** - * Same as AV_TX_FLOAT_FFT with a data type of AVComplexDouble. - */ - AV_TX_DOUBLE_FFT = 2, - - /** - * Same as AV_TX_FLOAT_MDCT with data and scale type of double. - * Stride must be a non-zero multiple of sizeof(double). - */ - AV_TX_DOUBLE_MDCT = 3, - - /** - * Same as AV_TX_FLOAT_FFT with a data type of AVComplexInt32. - */ - AV_TX_INT32_FFT = 4, - - /** - * Same as AV_TX_FLOAT_MDCT with data type of int32_t and scale type of float. - * Only scale values less than or equal to 1.0 are supported. - * Stride must be a non-zero multiple of sizeof(int32_t). - */ - AV_TX_INT32_MDCT = 5, -}; - -/** - * Function pointer to a function to perform the transform. - * - * @note Using a different context than the one allocated during av_tx_init() - * is not allowed. - * - * @param s the transform context - * @param out the output array - * @param in the input array - * @param stride the input or output stride in bytes - * - * The out and in arrays must be aligned to the maximum required by the CPU - * architecture. - * The stride must follow the constraints the transform type has specified. - */ -typedef void (*av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride); - -/** - * Flags for av_tx_init() - */ -enum AVTXFlags { - /** - * Performs an in-place transformation on the input. The output argument - * of av_tn_fn() MUST match the input. May be unsupported or slower for some - * transform types. - */ - AV_TX_INPLACE = 1ULL << 0, -}; - -/** - * Initialize a transform context with the given configuration - * (i)MDCTs with an odd length are currently not supported. - * - * @param ctx the context to allocate, will be NULL on error - * @param tx pointer to the transform function pointer to set - * @param type type the type of transform - * @param inv whether to do an inverse or a forward transform - * @param len the size of the transform in samples - * @param scale pointer to the value to scale the output if supported by type - * @param flags a bitmask of AVTXFlags or 0 - * - * @return 0 on success, negative error code on failure - */ -int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type, - int inv, int len, const void *scale, uint64_t flags); - -/** - * Frees a context and sets ctx to NULL, does nothing when ctx == NULL - */ -void av_tx_uninit(AVTXContext **ctx); - -#endif /* AVUTIL_TX_H */ diff --git a/prebuilts/x86_64/include/libavutil/version.h b/prebuilts/x86_64/include/libavutil/version.h deleted file mode 100644 index f888dbb..0000000 --- a/prebuilts/x86_64/include/libavutil/version.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * copyright (c) 2003 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu - * Libavutil version macros - */ - -#ifndef AVUTIL_VERSION_H -#define AVUTIL_VERSION_H - -#include "macros.h" - -/** - * @addtogroup version_utils - * - * Useful to check and match library version in order to maintain - * backward compatibility. - * - * The FFmpeg libraries follow a versioning sheme very similar to - * Semantic Versioning (http://semver.org/) - * The difference is that the component called PATCH is called MICRO in FFmpeg - * and its value is reset to 100 instead of 0 to keep it above or equal to 100. - * Also we do not increase MICRO for every bugfix or change in git master. - * - * Prior to FFmpeg 3.2 point releases did not change any lib version number to - * avoid aliassing different git master checkouts. - * Starting with FFmpeg 3.2, the released library versions will occupy - * a separate MAJOR.MINOR that is not used on the master development branch. - * That is if we branch a release of master 55.10.123 we will bump to 55.11.100 - * for the release and master will continue at 55.12.100 after it. Each new - * point release will then bump the MICRO improving the usefulness of the lib - * versions. - * - * @{ - */ - -#define AV_VERSION_INT(a, b, c) ((a)<<16 | (b)<<8 | (c)) -#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c -#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) - -/** - * Extract version components from the full ::AV_VERSION_INT int as returned - * by functions like ::avformat_version() and ::avcodec_version() - */ -#define AV_VERSION_MAJOR(a) ((a) >> 16) -#define AV_VERSION_MINOR(a) (((a) & 0x00FF00) >> 8) -#define AV_VERSION_MICRO(a) ((a) & 0xFF) - -/** - * @} - */ - -/** - * @defgroup lavu_ver Version and Build diagnostics - * - * Macros and function useful to check at compiletime and at runtime - * which version of libavutil is in use. - * - * @{ - */ - -#define LIBAVUTIL_VERSION_MAJOR 56 -#define LIBAVUTIL_VERSION_MINOR 70 -#define LIBAVUTIL_VERSION_MICRO 100 - -#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT - -#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) - -/** - * @defgroup lavu_depr_guards Deprecation Guards - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - * - * @{ - */ - -#ifndef FF_API_VAAPI -#define FF_API_VAAPI (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_FRAME_QP -#define FF_API_FRAME_QP (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_PLUS1_MINUS1 -#define FF_API_PLUS1_MINUS1 (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_ERROR_FRAME -#define FF_API_ERROR_FRAME (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_PKT_PTS -#define FF_API_PKT_PTS (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_CRYPTO_SIZE_T -#define FF_API_CRYPTO_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_FRAME_GET_SET -#define FF_API_FRAME_GET_SET (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_PSEUDOPAL -#define FF_API_PSEUDOPAL (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_CHILD_CLASS_NEXT -#define FF_API_CHILD_CLASS_NEXT (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_BUFFER_SIZE_T -#define FF_API_BUFFER_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) -#endif -#ifndef FF_API_D2STR -#define FF_API_D2STR (LIBAVUTIL_VERSION_MAJOR < 58) -#endif -#ifndef FF_API_DECLARE_ALIGNED -#define FF_API_DECLARE_ALIGNED (LIBAVUTIL_VERSION_MAJOR < 58) -#endif - -/** - * @} - * @} - */ - -#endif /* AVUTIL_VERSION_H */ diff --git a/prebuilts/x86_64/include/libavutil/video_enc_params.h b/prebuilts/x86_64/include/libavutil/video_enc_params.h deleted file mode 100644 index fc0c3bc..0000000 --- a/prebuilts/x86_64/include/libavutil/video_enc_params.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_VIDEO_ENC_PARAMS_H -#define AVUTIL_VIDEO_ENC_PARAMS_H - -#include -#include - -#include "libavutil/avassert.h" -#include "libavutil/frame.h" - -enum AVVideoEncParamsType { - AV_VIDEO_ENC_PARAMS_NONE = -1, - /** - * VP9 stores: - * - per-frame base (luma AC) quantizer index, exported as AVVideoEncParams.qp - * - deltas for luma DC, chroma AC and chroma DC, exported in the - * corresponding entries in AVVideoEncParams.delta_qp - * - per-segment delta, exported as for each block as AVVideoBlockParams.delta_qp - * - * To compute the resulting quantizer index for a block: - * - for luma AC, add the base qp and the per-block delta_qp, saturating to - * unsigned 8-bit. - * - for luma DC and chroma AC/DC, add the corresponding - * AVVideoBlockParams.delta_qp to the luma AC index, again saturating to - * unsigned 8-bit. - */ - AV_VIDEO_ENC_PARAMS_VP9, - - /** - * H.264 stores: - * - in PPS (per-picture): - * * initial QP_Y (luma) value, exported as AVVideoEncParams.qp - * * delta(s) for chroma QP values (same for both, or each separately), - * exported as in the corresponding entries in AVVideoEncParams.delta_qp - * - per-slice QP delta, not exported directly, added to the per-MB value - * - per-MB delta; not exported directly; the final per-MB quantizer - * parameter - QP_Y - minus the value in AVVideoEncParams.qp is exported - * as AVVideoBlockParams.qp_delta. - */ - AV_VIDEO_ENC_PARAMS_H264, - - /* - * MPEG-2-compatible quantizer. - * - * Summing the frame-level qp with the per-block delta_qp gives the - * resulting quantizer for the block. - */ - AV_VIDEO_ENC_PARAMS_MPEG2, -}; - -/** - * Video encoding parameters for a given frame. This struct is allocated along - * with an optional array of per-block AVVideoBlockParams descriptors. - * Must be allocated with av_video_enc_params_alloc(). - */ -typedef struct AVVideoEncParams { - /** - * Number of blocks in the array. - * - * May be 0, in which case no per-block information is present. In this case - * the values of blocks_offset / block_size are unspecified and should not - * be accessed. - */ - unsigned int nb_blocks; - /** - * Offset in bytes from the beginning of this structure at which the array - * of blocks starts. - */ - size_t blocks_offset; - /* - * Size of each block in bytes. May not match sizeof(AVVideoBlockParams). - */ - size_t block_size; - - /** - * Type of the parameters (the codec they are used with). - */ - enum AVVideoEncParamsType type; - - /** - * Base quantisation parameter for the frame. The final quantiser for a - * given block in a given plane is obtained from this value, possibly - * combined with {@code delta_qp} and the per-block delta in a manner - * documented for each type. - */ - int32_t qp; - - /** - * Quantisation parameter offset from the base (per-frame) qp for a given - * plane (first index) and AC/DC coefficients (second index). - */ - int32_t delta_qp[4][2]; -} AVVideoEncParams; - -/** - * Data structure for storing block-level encoding information. - * It is allocated as a part of AVVideoEncParams and should be retrieved with - * av_video_enc_params_block(). - * - * sizeof(AVVideoBlockParams) is not a part of the ABI and new fields may be - * added to it. - */ -typedef struct AVVideoBlockParams { - /** - * Distance in luma pixels from the top-left corner of the visible frame - * to the top-left corner of the block. - * Can be negative if top/right padding is present on the coded frame. - */ - int src_x, src_y; - /** - * Width and height of the block in luma pixels. - */ - int w, h; - - /** - * Difference between this block's final quantization parameter and the - * corresponding per-frame value. - */ - int32_t delta_qp; -} AVVideoBlockParams; - -/* - * Get the block at the specified {@code idx}. Must be between 0 and nb_blocks. - */ -static av_always_inline AVVideoBlockParams* -av_video_enc_params_block(AVVideoEncParams *par, unsigned int idx) -{ - av_assert0(idx < par->nb_blocks); - return (AVVideoBlockParams *)((uint8_t *)par + par->blocks_offset + - idx * par->block_size); -} - -/** - * Allocates memory for AVVideoEncParams of the given type, plus an array of - * {@code nb_blocks} AVVideoBlockParams and initializes the variables. Can be - * freed with a normal av_free() call. - * - * @param out_size if non-NULL, the size in bytes of the resulting data array is - * written here. - */ -AVVideoEncParams *av_video_enc_params_alloc(enum AVVideoEncParamsType type, - unsigned int nb_blocks, size_t *out_size); - -/** - * Allocates memory for AVEncodeInfoFrame plus an array of - * {@code nb_blocks} AVEncodeInfoBlock in the given AVFrame {@code frame} - * as AVFrameSideData of type AV_FRAME_DATA_VIDEO_ENC_PARAMS - * and initializes the variables. - */ -AVVideoEncParams* -av_video_enc_params_create_side_data(AVFrame *frame, enum AVVideoEncParamsType type, - unsigned int nb_blocks); - -#endif /* AVUTIL_VIDEO_ENC_PARAMS_H */ diff --git a/prebuilts/x86_64/include/libavutil/xtea.h b/prebuilts/x86_64/include/libavutil/xtea.h deleted file mode 100644 index 735427c..0000000 --- a/prebuilts/x86_64/include/libavutil/xtea.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * A 32-bit implementation of the XTEA algorithm - * Copyright (c) 2012 Samuel Pitoiset - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_XTEA_H -#define AVUTIL_XTEA_H - -#include - -/** - * @file - * @brief Public header for libavutil XTEA algorithm - * @defgroup lavu_xtea XTEA - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVXTEA { - uint32_t key[16]; -} AVXTEA; - -/** - * Allocate an AVXTEA context. - */ -AVXTEA *av_xtea_alloc(void); - -/** - * Initialize an AVXTEA context. - * - * @param ctx an AVXTEA context - * @param key a key of 16 bytes used for encryption/decryption, - * interpreted as big endian 32 bit numbers - */ -void av_xtea_init(struct AVXTEA *ctx, const uint8_t key[16]); - -/** - * Initialize an AVXTEA context. - * - * @param ctx an AVXTEA context - * @param key a key of 16 bytes used for encryption/decryption, - * interpreted as little endian 32 bit numbers - */ -void av_xtea_le_init(struct AVXTEA *ctx, const uint8_t key[16]); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, - * in big endian format. - * - * @param ctx an AVXTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_xtea_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, - * in little endian format. - * - * @param ctx an AVXTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_xtea_le_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_XTEA_H */ diff --git a/prebuilts/x86_64/include/libdrm/amdgpu.h b/prebuilts/x86_64/include/libdrm/amdgpu.h deleted file mode 100644 index 5ef2524..0000000 --- a/prebuilts/x86_64/include/libdrm/amdgpu.h +++ /dev/null @@ -1,1876 +0,0 @@ -/* - * Copyright 2014 Advanced Micro Devices, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - */ - -/** - * \file amdgpu.h - * - * Declare public libdrm_amdgpu API - * - * This file define API exposed by libdrm_amdgpu library. - * User wanted to use libdrm_amdgpu functionality must include - * this file. - * - */ -#ifndef _AMDGPU_H_ -#define _AMDGPU_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct drm_amdgpu_info_hw_ip; -struct drm_amdgpu_bo_list_entry; - -/*--------------------------------------------------------------------------*/ -/* --------------------------- Defines ------------------------------------ */ -/*--------------------------------------------------------------------------*/ - -/** - * Define max. number of Command Buffers (IB) which could be sent to the single - * hardware IP to accommodate CE/DE requirements - * - * \sa amdgpu_cs_ib_info -*/ -#define AMDGPU_CS_MAX_IBS_PER_SUBMIT 4 - -/** - * Special timeout value meaning that the timeout is infinite. - */ -#define AMDGPU_TIMEOUT_INFINITE 0xffffffffffffffffull - -/** - * Used in amdgpu_cs_query_fence_status(), meaning that the given timeout - * is absolute. - */ -#define AMDGPU_QUERY_FENCE_TIMEOUT_IS_ABSOLUTE (1 << 0) - -/*--------------------------------------------------------------------------*/ -/* ----------------------------- Enums ------------------------------------ */ -/*--------------------------------------------------------------------------*/ - -/** - * Enum describing possible handle types - * - * \sa amdgpu_bo_import, amdgpu_bo_export - * -*/ -enum amdgpu_bo_handle_type { - /** GEM flink name (needs DRM authentication, used by DRI2) */ - amdgpu_bo_handle_type_gem_flink_name = 0, - - /** KMS handle which is used by all driver ioctls */ - amdgpu_bo_handle_type_kms = 1, - - /** DMA-buf fd handle */ - amdgpu_bo_handle_type_dma_buf_fd = 2, - - /** Deprecated in favour of and same behaviour as - * amdgpu_bo_handle_type_kms, use that instead of this - */ - amdgpu_bo_handle_type_kms_noimport = 3, -}; - -/** Define known types of GPU VM VA ranges */ -enum amdgpu_gpu_va_range -{ - /** Allocate from "normal"/general range */ - amdgpu_gpu_va_range_general = 0 -}; - -enum amdgpu_sw_info { - amdgpu_sw_info_address32_hi = 0, -}; - -/*--------------------------------------------------------------------------*/ -/* -------------------------- Datatypes ----------------------------------- */ -/*--------------------------------------------------------------------------*/ - -/** - * Define opaque pointer to context associated with fd. - * This context will be returned as the result of - * "initialize" function and should be pass as the first - * parameter to any API call - */ -typedef struct amdgpu_device *amdgpu_device_handle; - -/** - * Define GPU Context type as pointer to opaque structure - * Example of GPU Context is the "rendering" context associated - * with OpenGL context (glCreateContext) - */ -typedef struct amdgpu_context *amdgpu_context_handle; - -/** - * Define handle for amdgpu resources: buffer, GDS, etc. - */ -typedef struct amdgpu_bo *amdgpu_bo_handle; - -/** - * Define handle for list of BOs - */ -typedef struct amdgpu_bo_list *amdgpu_bo_list_handle; - -/** - * Define handle to be used to work with VA allocated ranges - */ -typedef struct amdgpu_va *amdgpu_va_handle; - -/** - * Define handle for semaphore - */ -typedef struct amdgpu_semaphore *amdgpu_semaphore_handle; - -/*--------------------------------------------------------------------------*/ -/* -------------------------- Structures ---------------------------------- */ -/*--------------------------------------------------------------------------*/ - -/** - * Structure describing memory allocation request - * - * \sa amdgpu_bo_alloc() - * -*/ -struct amdgpu_bo_alloc_request { - /** Allocation request. It must be aligned correctly. */ - uint64_t alloc_size; - - /** - * It may be required to have some specific alignment requirements - * for physical back-up storage (e.g. for displayable surface). - * If 0 there is no special alignment requirement - */ - uint64_t phys_alignment; - - /** - * UMD should specify where to allocate memory and how it - * will be accessed by the CPU. - */ - uint32_t preferred_heap; - - /** Additional flags passed on allocation */ - uint64_t flags; -}; - -/** - * Special UMD specific information associated with buffer. - * - * It may be need to pass some buffer charactersitic as part - * of buffer sharing. Such information are defined UMD and - * opaque for libdrm_amdgpu as well for kernel driver. - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_query_info, - * amdgpu_bo_import(), amdgpu_bo_export - * -*/ -struct amdgpu_bo_metadata { - /** Special flag associated with surface */ - uint64_t flags; - - /** - * ASIC-specific tiling information (also used by DCE). - * The encoding is defined by the AMDGPU_TILING_* definitions. - */ - uint64_t tiling_info; - - /** Size of metadata associated with the buffer, in bytes. */ - uint32_t size_metadata; - - /** UMD specific metadata. Opaque for kernel */ - uint32_t umd_metadata[64]; -}; - -/** - * Structure describing allocated buffer. Client may need - * to query such information as part of 'sharing' buffers mechanism - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_query_info(), - * amdgpu_bo_import(), amdgpu_bo_export() -*/ -struct amdgpu_bo_info { - /** Allocated memory size */ - uint64_t alloc_size; - - /** - * It may be required to have some specific alignment requirements - * for physical back-up storage. - */ - uint64_t phys_alignment; - - /** Heap where to allocate memory. */ - uint32_t preferred_heap; - - /** Additional allocation flags. */ - uint64_t alloc_flags; - - /** Metadata associated with buffer if any. */ - struct amdgpu_bo_metadata metadata; -}; - -/** - * Structure with information about "imported" buffer - * - * \sa amdgpu_bo_import() - * - */ -struct amdgpu_bo_import_result { - /** Handle of memory/buffer to use */ - amdgpu_bo_handle buf_handle; - - /** Buffer size */ - uint64_t alloc_size; -}; - -/** - * - * Structure to describe GDS partitioning information. - * \note OA and GWS resources are asscoiated with GDS partition - * - * \sa amdgpu_gpu_resource_query_gds_info - * -*/ -struct amdgpu_gds_resource_info { - uint32_t gds_gfx_partition_size; - uint32_t compute_partition_size; - uint32_t gds_total_size; - uint32_t gws_per_gfx_partition; - uint32_t gws_per_compute_partition; - uint32_t oa_per_gfx_partition; - uint32_t oa_per_compute_partition; -}; - -/** - * Structure describing CS fence - * - * \sa amdgpu_cs_query_fence_status(), amdgpu_cs_request, amdgpu_cs_submit() - * -*/ -struct amdgpu_cs_fence { - - /** In which context IB was sent to execution */ - amdgpu_context_handle context; - - /** To which HW IP type the fence belongs */ - uint32_t ip_type; - - /** IP instance index if there are several IPs of the same type. */ - uint32_t ip_instance; - - /** Ring index of the HW IP */ - uint32_t ring; - - /** Specify fence for which we need to check submission status.*/ - uint64_t fence; -}; - -/** - * Structure describing IB - * - * \sa amdgpu_cs_request, amdgpu_cs_submit() - * -*/ -struct amdgpu_cs_ib_info { - /** Special flags */ - uint64_t flags; - - /** Virtual MC address of the command buffer */ - uint64_t ib_mc_address; - - /** - * Size of Command Buffer to be submitted. - * - The size is in units of dwords (4 bytes). - * - Could be 0 - */ - uint32_t size; -}; - -/** - * Structure describing fence information - * - * \sa amdgpu_cs_request, amdgpu_cs_query_fence, - * amdgpu_cs_submit(), amdgpu_cs_query_fence_status() -*/ -struct amdgpu_cs_fence_info { - /** buffer object for the fence */ - amdgpu_bo_handle handle; - - /** fence offset in the unit of sizeof(uint64_t) */ - uint64_t offset; -}; - -/** - * Structure describing submission request - * - * \note We could have several IBs as packet. e.g. CE, CE, DE case for gfx - * - * \sa amdgpu_cs_submit() -*/ -struct amdgpu_cs_request { - /** Specify flags with additional information */ - uint64_t flags; - - /** Specify HW IP block type to which to send the IB. */ - unsigned ip_type; - - /** IP instance index if there are several IPs of the same type. */ - unsigned ip_instance; - - /** - * Specify ring index of the IP. We could have several rings - * in the same IP. E.g. 0 for SDMA0 and 1 for SDMA1. - */ - uint32_t ring; - - /** - * List handle with resources used by this request. - */ - amdgpu_bo_list_handle resources; - - /** - * Number of dependencies this Command submission needs to - * wait for before starting execution. - */ - uint32_t number_of_dependencies; - - /** - * Array of dependencies which need to be met before - * execution can start. - */ - struct amdgpu_cs_fence *dependencies; - - /** Number of IBs to submit in the field ibs. */ - uint32_t number_of_ibs; - - /** - * IBs to submit. Those IBs will be submit together as single entity - */ - struct amdgpu_cs_ib_info *ibs; - - /** - * The returned sequence number for the command submission - */ - uint64_t seq_no; - - /** - * The fence information - */ - struct amdgpu_cs_fence_info fence_info; -}; - -/** - * Structure which provide information about GPU VM MC Address space - * alignments requirements - * - * \sa amdgpu_query_buffer_size_alignment - */ -struct amdgpu_buffer_size_alignments { - /** Size alignment requirement for allocation in - * local memory */ - uint64_t size_local; - - /** - * Size alignment requirement for allocation in remote memory - */ - uint64_t size_remote; -}; - -/** - * Structure which provide information about heap - * - * \sa amdgpu_query_heap_info() - * - */ -struct amdgpu_heap_info { - /** Theoretical max. available memory in the given heap */ - uint64_t heap_size; - - /** - * Number of bytes allocated in the heap. This includes all processes - * and private allocations in the kernel. It changes when new buffers - * are allocated, freed, and moved. It cannot be larger than - * heap_size. - */ - uint64_t heap_usage; - - /** - * Theoretical possible max. size of buffer which - * could be allocated in the given heap - */ - uint64_t max_allocation; -}; - -/** - * Describe GPU h/w info needed for UMD correct initialization - * - * \sa amdgpu_query_gpu_info() -*/ -struct amdgpu_gpu_info { - /** Asic id */ - uint32_t asic_id; - /** Chip revision */ - uint32_t chip_rev; - /** Chip external revision */ - uint32_t chip_external_rev; - /** Family ID */ - uint32_t family_id; - /** Special flags */ - uint64_t ids_flags; - /** max engine clock*/ - uint64_t max_engine_clk; - /** max memory clock */ - uint64_t max_memory_clk; - /** number of shader engines */ - uint32_t num_shader_engines; - /** number of shader arrays per engine */ - uint32_t num_shader_arrays_per_engine; - /** Number of available good shader pipes */ - uint32_t avail_quad_shader_pipes; - /** Max. number of shader pipes.(including good and bad pipes */ - uint32_t max_quad_shader_pipes; - /** Number of parameter cache entries per shader quad pipe */ - uint32_t cache_entries_per_quad_pipe; - /** Number of available graphics context */ - uint32_t num_hw_gfx_contexts; - /** Number of render backend pipes */ - uint32_t rb_pipes; - /** Enabled render backend pipe mask */ - uint32_t enabled_rb_pipes_mask; - /** Frequency of GPU Counter */ - uint32_t gpu_counter_freq; - /** CC_RB_BACKEND_DISABLE.BACKEND_DISABLE per SE */ - uint32_t backend_disable[4]; - /** Value of MC_ARB_RAMCFG register*/ - uint32_t mc_arb_ramcfg; - /** Value of GB_ADDR_CONFIG */ - uint32_t gb_addr_cfg; - /** Values of the GB_TILE_MODE0..31 registers */ - uint32_t gb_tile_mode[32]; - /** Values of GB_MACROTILE_MODE0..15 registers */ - uint32_t gb_macro_tile_mode[16]; - /** Value of PA_SC_RASTER_CONFIG register per SE */ - uint32_t pa_sc_raster_cfg[4]; - /** Value of PA_SC_RASTER_CONFIG_1 register per SE */ - uint32_t pa_sc_raster_cfg1[4]; - /* CU info */ - uint32_t cu_active_number; - uint32_t cu_ao_mask; - uint32_t cu_bitmap[4][4]; - /* video memory type info*/ - uint32_t vram_type; - /* video memory bit width*/ - uint32_t vram_bit_width; - /** constant engine ram size*/ - uint32_t ce_ram_size; - /* vce harvesting instance */ - uint32_t vce_harvest_config; - /* PCI revision ID */ - uint32_t pci_rev_id; -}; - - -/*--------------------------------------------------------------------------*/ -/*------------------------- Functions --------------------------------------*/ -/*--------------------------------------------------------------------------*/ - -/* - * Initialization / Cleanup - * -*/ - -/** - * - * \param fd - \c [in] File descriptor for AMD GPU device - * received previously as the result of - * e.g. drmOpen() call. - * For legacy fd type, the DRI2/DRI3 - * authentication should be done before - * calling this function. - * \param major_version - \c [out] Major version of library. It is assumed - * that adding new functionality will cause - * increase in major version - * \param minor_version - \c [out] Minor version of library - * \param device_handle - \c [out] Pointer to opaque context which should - * be passed as the first parameter on each - * API call - * - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * - * \sa amdgpu_device_deinitialize() -*/ -int amdgpu_device_initialize(int fd, - uint32_t *major_version, - uint32_t *minor_version, - amdgpu_device_handle *device_handle); - -/** - * - * When access to such library does not needed any more the special - * function must be call giving opportunity to clean up any - * resources if needed. - * - * \param device_handle - \c [in] Context associated with file - * descriptor for AMD GPU device - * received previously as the - * result e.g. of drmOpen() call. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_device_initialize() - * -*/ -int amdgpu_device_deinitialize(amdgpu_device_handle device_handle); - -/** - * - * /param device_handle - \c [in] Device handle. - * See #amdgpu_device_initialize() - * - * \return Returns the drm fd used for operations on this - * device. This is still owned by the library and hence - * should not be closed. Guaranteed to be valid until - * #amdgpu_device_deinitialize gets called. - * -*/ -int amdgpu_device_get_fd(amdgpu_device_handle device_handle); - -/* - * Memory Management - * -*/ - -/** - * Allocate memory to be used by UMD for GPU related operations - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param alloc_buffer - \c [in] Pointer to the structure describing an - * allocation request - * \param buf_handle - \c [out] Allocated buffer handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_free() -*/ -int amdgpu_bo_alloc(amdgpu_device_handle dev, - struct amdgpu_bo_alloc_request *alloc_buffer, - amdgpu_bo_handle *buf_handle); - -/** - * Associate opaque data with buffer to be queried by another UMD - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle - * \param info - \c [in] Metadata to associated with buffer - * - * \return 0 on success\n - * <0 - Negative POSIX Error code -*/ -int amdgpu_bo_set_metadata(amdgpu_bo_handle buf_handle, - struct amdgpu_bo_metadata *info); - -/** - * Query buffer information including metadata previusly associated with - * buffer. - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle - * \param info - \c [out] Structure describing buffer - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_alloc() -*/ -int amdgpu_bo_query_info(amdgpu_bo_handle buf_handle, - struct amdgpu_bo_info *info); - -/** - * Allow others to get access to buffer - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle - * \param type - \c [in] Type of handle requested - * \param shared_handle - \c [out] Special "shared" handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_import() - * -*/ -int amdgpu_bo_export(amdgpu_bo_handle buf_handle, - enum amdgpu_bo_handle_type type, - uint32_t *shared_handle); - -/** - * Request access to "shared" buffer - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param type - \c [in] Type of handle requested - * \param shared_handle - \c [in] Shared handle received as result "import" - * operation - * \param output - \c [out] Pointer to structure with information - * about imported buffer - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note Buffer must be "imported" only using new "fd" (different from - * one used by "exporter"). - * - * \sa amdgpu_bo_export() - * -*/ -int amdgpu_bo_import(amdgpu_device_handle dev, - enum amdgpu_bo_handle_type type, - uint32_t shared_handle, - struct amdgpu_bo_import_result *output); - -/** - * Request GPU access to user allocated memory e.g. via "malloc" - * - * \param dev - [in] Device handle. See #amdgpu_device_initialize() - * \param cpu - [in] CPU address of user allocated memory which we - * want to map to GPU address space (make GPU accessible) - * (This address must be correctly aligned). - * \param size - [in] Size of allocation (must be correctly aligned) - * \param buf_handle - [out] Buffer handle for the userptr memory - * resource on submission and be used in other operations. - * - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note - * This call doesn't guarantee that such memory will be persistently - * "locked" / make non-pageable. The purpose of this call is to provide - * opportunity for GPU get access to this resource during submission. - * - * The maximum amount of memory which could be mapped in this call depends - * if overcommit is disabled or not. If overcommit is disabled than the max. - * amount of memory to be pinned will be limited by left "free" size in total - * amount of memory which could be locked simultaneously ("GART" size). - * - * Supported (theoretical) max. size of mapping is restricted only by - * "GART" size. - * - * It is responsibility of caller to correctly specify access rights - * on VA assignment. -*/ -int amdgpu_create_bo_from_user_mem(amdgpu_device_handle dev, - void *cpu, uint64_t size, - amdgpu_bo_handle *buf_handle); - -/** - * Validate if the user memory comes from BO - * - * \param dev - [in] Device handle. See #amdgpu_device_initialize() - * \param cpu - [in] CPU address of user allocated memory which we - * want to map to GPU address space (make GPU accessible) - * (This address must be correctly aligned). - * \param size - [in] Size of allocation (must be correctly aligned) - * \param buf_handle - [out] Buffer handle for the userptr memory - * if the user memory is not from BO, the buf_handle will be NULL. - * \param offset_in_bo - [out] offset in this BO for this user memory - * - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_find_bo_by_cpu_mapping(amdgpu_device_handle dev, - void *cpu, - uint64_t size, - amdgpu_bo_handle *buf_handle, - uint64_t *offset_in_bo); - -/** - * Free previously allocated memory - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle to free - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note In the case of memory shared between different applications all - * resources will be “physically” freed only all such applications - * will be terminated - * \note If is UMD responsibility to ‘free’ buffer only when there is no - * more GPU access - * - * \sa amdgpu_bo_set_metadata(), amdgpu_bo_alloc() - * -*/ -int amdgpu_bo_free(amdgpu_bo_handle buf_handle); - -/** - * Increase the reference count of a buffer object - * - * \param bo - \c [in] Buffer object handle to increase the reference count - * - * \sa amdgpu_bo_alloc(), amdgpu_bo_free() - * -*/ -void amdgpu_bo_inc_ref(amdgpu_bo_handle bo); - -/** - * Request CPU access to GPU accessible memory - * - * \param buf_handle - \c [in] Buffer handle - * \param cpu - \c [out] CPU address to be used for access - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_cpu_unmap() - * -*/ -int amdgpu_bo_cpu_map(amdgpu_bo_handle buf_handle, void **cpu); - -/** - * Release CPU access to GPU memory - * - * \param buf_handle - \c [in] Buffer handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_cpu_map() - * -*/ -int amdgpu_bo_cpu_unmap(amdgpu_bo_handle buf_handle); - -/** - * Wait until a buffer is not used by the device. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param buf_handle - \c [in] Buffer handle. - * \param timeout_ns - Timeout in nanoseconds. - * \param buffer_busy - 0 if buffer is idle, all GPU access was completed - * and no GPU access is scheduled. - * 1 GPU access is in fly or scheduled - * - * \return 0 - on success - * <0 - Negative POSIX Error code - */ -int amdgpu_bo_wait_for_idle(amdgpu_bo_handle buf_handle, - uint64_t timeout_ns, - bool *buffer_busy); - -/** - * Creates a BO list handle for command submission. - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param number_of_buffers - \c [in] Number of BOs in the list - * \param buffers - \c [in] List of BO handles - * \param result - \c [out] Created BO list handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_destroy_raw(), amdgpu_cs_submit_raw2() -*/ -int amdgpu_bo_list_create_raw(amdgpu_device_handle dev, - uint32_t number_of_buffers, - struct drm_amdgpu_bo_list_entry *buffers, - uint32_t *result); - -/** - * Destroys a BO list handle. - * - * \param bo_list - \c [in] BO list handle. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_create_raw(), amdgpu_cs_submit_raw2() -*/ -int amdgpu_bo_list_destroy_raw(amdgpu_device_handle dev, uint32_t bo_list); - -/** - * Creates a BO list handle for command submission. - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param number_of_resources - \c [in] Number of BOs in the list - * \param resources - \c [in] List of BO handles - * \param resource_prios - \c [in] Optional priority for each handle - * \param result - \c [out] Created BO list handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_destroy() -*/ -int amdgpu_bo_list_create(amdgpu_device_handle dev, - uint32_t number_of_resources, - amdgpu_bo_handle *resources, - uint8_t *resource_prios, - amdgpu_bo_list_handle *result); - -/** - * Destroys a BO list handle. - * - * \param handle - \c [in] BO list handle. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_create() -*/ -int amdgpu_bo_list_destroy(amdgpu_bo_list_handle handle); - -/** - * Update resources for existing BO list - * - * \param handle - \c [in] BO list handle - * \param number_of_resources - \c [in] Number of BOs in the list - * \param resources - \c [in] List of BO handles - * \param resource_prios - \c [in] Optional priority for each handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_update() -*/ -int amdgpu_bo_list_update(amdgpu_bo_list_handle handle, - uint32_t number_of_resources, - amdgpu_bo_handle *resources, - uint8_t *resource_prios); - -/* - * GPU Execution context - * -*/ - -/** - * Create GPU execution Context - * - * For the purpose of GPU Scheduler and GPU Robustness extensions it is - * necessary to have information/identify rendering/compute contexts. - * It also may be needed to associate some specific requirements with such - * contexts. Kernel driver will guarantee that submission from the same - * context will always be executed in order (first come, first serve). - * - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param priority - \c [in] Context creation flags. See AMDGPU_CTX_PRIORITY_* - * \param context - \c [out] GPU Context handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_free() - * -*/ -int amdgpu_cs_ctx_create2(amdgpu_device_handle dev, - uint32_t priority, - amdgpu_context_handle *context); -/** - * Create GPU execution Context - * - * Refer to amdgpu_cs_ctx_create2 for full documentation. This call - * is missing the priority parameter. - * - * \sa amdgpu_cs_ctx_create2() - * -*/ -int amdgpu_cs_ctx_create(amdgpu_device_handle dev, - amdgpu_context_handle *context); - -/** - * - * Destroy GPU execution context when not needed any more - * - * \param context - \c [in] GPU Context handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_create() - * -*/ -int amdgpu_cs_ctx_free(amdgpu_context_handle context); - -/** - * Override the submission priority for the given context using a master fd. - * - * \param dev - \c [in] device handle - * \param context - \c [in] context handle for context id - * \param master_fd - \c [in] The master fd to authorize the override. - * \param priority - \c [in] The priority to assign to the context. - * - * \return 0 on success or a a negative Posix error code on failure. - */ -int amdgpu_cs_ctx_override_priority(amdgpu_device_handle dev, - amdgpu_context_handle context, - int master_fd, - unsigned priority); - -/** - * Set or query the stable power state for GPU profiling. - * - * \param dev - \c [in] device handle - * \param op - \c [in] AMDGPU_CTX_OP_{GET,SET}_STABLE_PSTATE - * \param flags - \c [in] AMDGPU_CTX_STABLE_PSTATE_* - * \param out_flags - \c [out] output current stable pstate - * - * \return 0 on success otherwise POSIX Error code. - */ -int amdgpu_cs_ctx_stable_pstate(amdgpu_context_handle context, - uint32_t op, - uint32_t flags, - uint32_t *out_flags); - -/** - * Query reset state for the specific GPU Context - * - * \param context - \c [in] GPU Context handle - * \param state - \c [out] One of AMDGPU_CTX_*_RESET - * \param hangs - \c [out] Number of hangs caused by the context. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_create() - * -*/ -int amdgpu_cs_query_reset_state(amdgpu_context_handle context, - uint32_t *state, uint32_t *hangs); - -/** - * Query reset state for the specific GPU Context. - * - * \param context - \c [in] GPU Context handle - * \param flags - \c [out] A combination of AMDGPU_CTX_QUERY2_FLAGS_* - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_cs_ctx_create() - * -*/ -int amdgpu_cs_query_reset_state2(amdgpu_context_handle context, - uint64_t *flags); - -/* - * Command Buffers Management - * -*/ - -/** - * Send request to submit command buffers to hardware. - * - * Kernel driver could use GPU Scheduler to make decision when physically - * sent this request to the hardware. Accordingly this request could be put - * in queue and sent for execution later. The only guarantee is that request - * from the same GPU context to the same ip:ip_instance:ring will be executed in - * order. - * - * The caller can specify the user fence buffer/location with the fence_info in the - * cs_request.The sequence number is returned via the 'seq_no' parameter - * in ibs_request structure. - * - * - * \param dev - \c [in] Device handle. - * See #amdgpu_device_initialize() - * \param context - \c [in] GPU Context - * \param flags - \c [in] Global submission flags - * \param ibs_request - \c [in/out] Pointer to submission requests. - * We could submit to the several - * engines/rings simulteniously as - * 'atomic' operation - * \param number_of_requests - \c [in] Number of submission requests - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note It is required to pass correct resource list with buffer handles - * which will be accessible by command buffers from submission - * This will allow kernel driver to correctly implement "paging". - * Failure to do so will have unpredictable results. - * - * \sa amdgpu_command_buffer_alloc(), amdgpu_command_buffer_free(), - * amdgpu_cs_query_fence_status() - * -*/ -int amdgpu_cs_submit(amdgpu_context_handle context, - uint64_t flags, - struct amdgpu_cs_request *ibs_request, - uint32_t number_of_requests); - -/** - * Query status of Command Buffer Submission - * - * \param fence - \c [in] Structure describing fence to query - * \param timeout_ns - \c [in] Timeout value to wait - * \param flags - \c [in] Flags for the query - * \param expired - \c [out] If fence expired or not.\n - * 0 – if fence is not expired\n - * !0 - otherwise - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \note If UMD wants only to check operation status and returned immediately - * then timeout value as 0 must be passed. In this case success will be - * returned in the case if submission was completed or timeout error - * code. - * - * \sa amdgpu_cs_submit() -*/ -int amdgpu_cs_query_fence_status(struct amdgpu_cs_fence *fence, - uint64_t timeout_ns, - uint64_t flags, - uint32_t *expired); - -/** - * Wait for multiple fences - * - * \param fences - \c [in] The fence array to wait - * \param fence_count - \c [in] The fence count - * \param wait_all - \c [in] If true, wait all fences to be signaled, - * otherwise, wait at least one fence - * \param timeout_ns - \c [in] The timeout to wait, in nanoseconds - * \param status - \c [out] '1' for signaled, '0' for timeout - * \param first - \c [out] the index of the first signaled fence from @fences - * - * \return 0 on success - * <0 - Negative POSIX Error code - * - * \note Currently it supports only one amdgpu_device. All fences come from - * the same amdgpu_device with the same fd. -*/ -int amdgpu_cs_wait_fences(struct amdgpu_cs_fence *fences, - uint32_t fence_count, - bool wait_all, - uint64_t timeout_ns, - uint32_t *status, uint32_t *first); - -/* - * Query / Info API - * -*/ - -/** - * Query allocation size alignments - * - * UMD should query information about GPU VM MC size alignments requirements - * to be able correctly choose required allocation size and implement - * internal optimization if needed. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param info - \c [out] Pointer to structure to get size alignment - * requirements - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_buffer_size_alignment(amdgpu_device_handle dev, - struct amdgpu_buffer_size_alignments - *info); - -/** - * Query firmware versions - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param fw_type - \c [in] AMDGPU_INFO_FW_* - * \param ip_instance - \c [in] Index of the IP block of the same type. - * \param index - \c [in] Index of the engine. (for SDMA and MEC) - * \param version - \c [out] Pointer to to the "version" return value - * \param feature - \c [out] Pointer to to the "feature" return value - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_firmware_version(amdgpu_device_handle dev, unsigned fw_type, - unsigned ip_instance, unsigned index, - uint32_t *version, uint32_t *feature); - -/** - * Query the number of HW IP instances of a certain type. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param count - \c [out] Pointer to structure to get information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code -*/ -int amdgpu_query_hw_ip_count(amdgpu_device_handle dev, unsigned type, - uint32_t *count); - -/** - * Query engine information - * - * This query allows UMD to query information different engines and their - * capabilities. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param ip_instance - \c [in] Index of the IP block of the same type. - * \param info - \c [out] Pointer to structure to get information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code -*/ -int amdgpu_query_hw_ip_info(amdgpu_device_handle dev, unsigned type, - unsigned ip_instance, - struct drm_amdgpu_info_hw_ip *info); - -/** - * Query heap information - * - * This query allows UMD to query potentially available memory resources and - * adjust their logic if necessary. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param heap - \c [in] Heap type - * \param info - \c [in] Pointer to structure to get needed information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_heap_info(amdgpu_device_handle dev, uint32_t heap, - uint32_t flags, struct amdgpu_heap_info *info); - -/** - * Get the CRTC ID from the mode object ID - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param id - \c [in] Mode object ID - * \param result - \c [in] Pointer to the CRTC ID - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_crtc_from_id(amdgpu_device_handle dev, unsigned id, - int32_t *result); - -/** - * Query GPU H/w Info - * - * Query hardware specific information - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param heap - \c [in] Heap type - * \param info - \c [in] Pointer to structure to get needed information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_gpu_info(amdgpu_device_handle dev, - struct amdgpu_gpu_info *info); - -/** - * Query hardware or driver information. - * - * The return size is query-specific and depends on the "info_id" parameter. - * No more than "size" bytes is returned. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param info_id - \c [in] AMDGPU_INFO_* - * \param size - \c [in] Size of the returned value. - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX error code - * -*/ -int amdgpu_query_info(amdgpu_device_handle dev, unsigned info_id, - unsigned size, void *value); - -/** - * Query hardware or driver information. - * - * The return size is query-specific and depends on the "info_id" parameter. - * No more than "size" bytes is returned. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param info - \c [in] amdgpu_sw_info_* - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX error code - * -*/ -int amdgpu_query_sw_info(amdgpu_device_handle dev, enum amdgpu_sw_info info, - void *value); - -/** - * Query information about GDS - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param gds_info - \c [out] Pointer to structure to get GDS information - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_gds_info(amdgpu_device_handle dev, - struct amdgpu_gds_resource_info *gds_info); - -/** - * Query information about sensor. - * - * The return size is query-specific and depends on the "sensor_type" - * parameter. No more than "size" bytes is returned. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param sensor_type - \c [in] AMDGPU_INFO_SENSOR_* - * \param size - \c [in] Size of the returned value. - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_sensor_info(amdgpu_device_handle dev, unsigned sensor_type, - unsigned size, void *value); - -/** - * Query information about video capabilities - * - * The return sizeof(struct drm_amdgpu_info_video_caps) - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * \param caps_type - \c [in] AMDGPU_INFO_VIDEO_CAPS_DECODE(ENCODE) - * \param size - \c [in] Size of the returned value. - * \param value - \c [out] Pointer to the return value. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_query_video_caps_info(amdgpu_device_handle dev, unsigned cap_type, - unsigned size, void *value); - -/** - * Read a set of consecutive memory-mapped registers. - * Not all registers are allowed to be read by userspace. - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize( - * \param dword_offset - \c [in] Register offset in dwords - * \param count - \c [in] The number of registers to read starting - * from the offset - * \param instance - \c [in] GRBM_GFX_INDEX selector. It may have other - * uses. Set it to 0xffffffff if unsure. - * \param flags - \c [in] Flags with additional information. - * \param values - \c [out] The pointer to return values. - * - * \return 0 on success\n - * <0 - Negative POSIX error code - * -*/ -int amdgpu_read_mm_registers(amdgpu_device_handle dev, unsigned dword_offset, - unsigned count, uint32_t instance, uint32_t flags, - uint32_t *values); - -/** - * Flag to request VA address range in the 32bit address space -*/ -#define AMDGPU_VA_RANGE_32_BIT 0x1 -#define AMDGPU_VA_RANGE_HIGH 0x2 -#define AMDGPU_VA_RANGE_REPLAYABLE 0x4 - -/** - * Allocate virtual address range - * - * \param dev - [in] Device handle. See #amdgpu_device_initialize() - * \param va_range_type - \c [in] Type of MC va range from which to allocate - * \param size - \c [in] Size of range. Size must be correctly* aligned. - * It is client responsibility to correctly aligned size based on the future - * usage of allocated range. - * \param va_base_alignment - \c [in] Overwrite base address alignment - * requirement for GPU VM MC virtual - * address assignment. Must be multiple of size alignments received as - * 'amdgpu_buffer_size_alignments'. - * If 0 use the default one. - * \param va_base_required - \c [in] Specified required va base address. - * If 0 then library choose available one. - * If !0 value will be passed and those value already "in use" then - * corresponding error status will be returned. - * \param va_base_allocated - \c [out] On return: Allocated VA base to be used - * by client. - * \param va_range_handle - \c [out] On return: Handle assigned to allocation - * \param flags - \c [in] flags for special VA range - * - * \return 0 on success\n - * >0 - AMD specific error code\n - * <0 - Negative POSIX Error code - * - * \notes \n - * It is client responsibility to correctly handle VA assignments and usage. - * Neither kernel driver nor libdrm_amdpgu are able to prevent and - * detect wrong va assignment. - * - * It is client responsibility to correctly handle multi-GPU cases and to pass - * the corresponding arrays of all devices handles where corresponding VA will - * be used. - * -*/ -int amdgpu_va_range_alloc(amdgpu_device_handle dev, - enum amdgpu_gpu_va_range va_range_type, - uint64_t size, - uint64_t va_base_alignment, - uint64_t va_base_required, - uint64_t *va_base_allocated, - amdgpu_va_handle *va_range_handle, - uint64_t flags); - -/** - * Free previously allocated virtual address range - * - * - * \param va_range_handle - \c [in] Handle assigned to VA allocation - * - * \return 0 on success\n - * >0 - AMD specific error code\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_va_range_free(amdgpu_va_handle va_range_handle); - -/** -* Query virtual address range -* -* UMD can query GPU VM range supported by each device -* to initialize its own VAM accordingly. -* -* \param dev - [in] Device handle. See #amdgpu_device_initialize() -* \param type - \c [in] Type of virtual address range -* \param offset - \c [out] Start offset of virtual address range -* \param size - \c [out] Size of virtual address range -* -* \return 0 on success\n -* <0 - Negative POSIX Error code -* -*/ - -int amdgpu_va_range_query(amdgpu_device_handle dev, - enum amdgpu_gpu_va_range type, - uint64_t *start, - uint64_t *end); - -/** - * VA mapping/unmapping for the buffer object - * - * \param bo - \c [in] BO handle - * \param offset - \c [in] Start offset to map - * \param size - \c [in] Size to map - * \param addr - \c [in] Start virtual address. - * \param flags - \c [in] Supported flags for mapping/unmapping - * \param ops - \c [in] AMDGPU_VA_OP_MAP or AMDGPU_VA_OP_UNMAP - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ - -int amdgpu_bo_va_op(amdgpu_bo_handle bo, - uint64_t offset, - uint64_t size, - uint64_t addr, - uint64_t flags, - uint32_t ops); - -/** - * VA mapping/unmapping for a buffer object or PRT region. - * - * This is not a simple drop-in extension for amdgpu_bo_va_op; instead, all - * parameters are treated "raw", i.e. size is not automatically aligned, and - * all flags must be specified explicitly. - * - * \param dev - \c [in] device handle - * \param bo - \c [in] BO handle (may be NULL) - * \param offset - \c [in] Start offset to map - * \param size - \c [in] Size to map - * \param addr - \c [in] Start virtual address. - * \param flags - \c [in] Supported flags for mapping/unmapping - * \param ops - \c [in] AMDGPU_VA_OP_MAP or AMDGPU_VA_OP_UNMAP - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ - -int amdgpu_bo_va_op_raw(amdgpu_device_handle dev, - amdgpu_bo_handle bo, - uint64_t offset, - uint64_t size, - uint64_t addr, - uint64_t flags, - uint32_t ops); - -/** - * create semaphore - * - * \param sem - \c [out] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_create_semaphore(amdgpu_semaphore_handle *sem); - -/** - * signal semaphore - * - * \param context - \c [in] GPU Context - * \param ip_type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param ip_instance - \c [in] Index of the IP block of the same type - * \param ring - \c [in] Specify ring index of the IP - * \param sem - \c [in] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_signal_semaphore(amdgpu_context_handle ctx, - uint32_t ip_type, - uint32_t ip_instance, - uint32_t ring, - amdgpu_semaphore_handle sem); - -/** - * wait semaphore - * - * \param context - \c [in] GPU Context - * \param ip_type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* - * \param ip_instance - \c [in] Index of the IP block of the same type - * \param ring - \c [in] Specify ring index of the IP - * \param sem - \c [in] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_wait_semaphore(amdgpu_context_handle ctx, - uint32_t ip_type, - uint32_t ip_instance, - uint32_t ring, - amdgpu_semaphore_handle sem); - -/** - * destroy semaphore - * - * \param sem - \c [in] semaphore handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_destroy_semaphore(amdgpu_semaphore_handle sem); - -/** - * Get the ASIC marketing name - * - * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() - * - * \return the constant string of the marketing name - * "NULL" means the ASIC is not found -*/ -const char *amdgpu_get_marketing_name(amdgpu_device_handle dev); - -/** - * Create kernel sync object - * - * \param dev - \c [in] device handle - * \param flags - \c [in] flags that affect creation - * \param syncobj - \c [out] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_create_syncobj2(amdgpu_device_handle dev, - uint32_t flags, - uint32_t *syncobj); - -/** - * Create kernel sync object - * - * \param dev - \c [in] device handle - * \param syncobj - \c [out] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_create_syncobj(amdgpu_device_handle dev, - uint32_t *syncobj); -/** - * Destroy kernel sync object - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_destroy_syncobj(amdgpu_device_handle dev, - uint32_t syncobj); - -/** - * Reset kernel sync objects to unsignalled state. - * - * \param dev - \c [in] device handle - * \param syncobjs - \c [in] array of sync object handles - * \param syncobj_count - \c [in] number of handles in syncobjs - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_syncobj_reset(amdgpu_device_handle dev, - const uint32_t *syncobjs, uint32_t syncobj_count); - -/** - * Signal kernel sync objects. - * - * \param dev - \c [in] device handle - * \param syncobjs - \c [in] array of sync object handles - * \param syncobj_count - \c [in] number of handles in syncobjs - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_syncobj_signal(amdgpu_device_handle dev, - const uint32_t *syncobjs, uint32_t syncobj_count); - -/** - * Signal kernel timeline sync objects. - * - * \param dev - \c [in] device handle - * \param syncobjs - \c [in] array of sync object handles - * \param points - \c [in] array of timeline points - * \param syncobj_count - \c [in] number of handles in syncobjs - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_syncobj_timeline_signal(amdgpu_device_handle dev, - const uint32_t *syncobjs, - uint64_t *points, - uint32_t syncobj_count); - -/** - * Wait for one or all sync objects to signal. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param num_handles - \c [in] self-explanatory - * \param timeout_nsec - \c [in] self-explanatory - * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_WAIT_FLAGS_* - * \param first_signaled - \c [in] self-explanatory - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_wait(amdgpu_device_handle dev, - uint32_t *handles, unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); - -/** - * Wait for one or all sync objects on their points to signal. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param points - \c [in] array of sync points to wait - * \param num_handles - \c [in] self-explanatory - * \param timeout_nsec - \c [in] self-explanatory - * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_WAIT_FLAGS_* - * \param first_signaled - \c [in] self-explanatory - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_timeline_wait(amdgpu_device_handle dev, - uint32_t *handles, uint64_t *points, - unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); -/** - * Query sync objects payloads. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param points - \c [out] array of sync points returned, which presents - * syncobj payload. - * \param num_handles - \c [in] self-explanatory - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_query(amdgpu_device_handle dev, - uint32_t *handles, uint64_t *points, - unsigned num_handles); -/** - * Query sync objects last signaled or submitted point. - * - * \param dev - \c [in] self-explanatory - * \param handles - \c [in] array of sync object handles - * \param points - \c [out] array of sync points returned, which presents - * syncobj payload. - * \param num_handles - \c [in] self-explanatory - * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_QUERY_FLAGS_* - * - * \return 0 on success\n - * -ETIME - Timeout - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_query2(amdgpu_device_handle dev, - uint32_t *handles, uint64_t *points, - unsigned num_handles, uint32_t flags); - -/** - * Export kernel sync object to shareable fd. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param shared_fd - \c [out] shared file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_export_syncobj(amdgpu_device_handle dev, - uint32_t syncobj, - int *shared_fd); -/** - * Import kernel sync object from shareable fd. - * - * \param dev - \c [in] device handle - * \param shared_fd - \c [in] shared file descriptor. - * \param syncobj - \c [out] sync object handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * -*/ -int amdgpu_cs_import_syncobj(amdgpu_device_handle dev, - int shared_fd, - uint32_t *syncobj); - -/** - * Export kernel sync object to a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param sync_file_fd - \c [out] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_export_sync_file(amdgpu_device_handle dev, - uint32_t syncobj, - int *sync_file_fd); - -/** - * Import kernel sync object from a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param sync_file_fd - \c [in] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_import_sync_file(amdgpu_device_handle dev, - uint32_t syncobj, - int sync_file_fd); -/** - * Export kernel timeline sync object to a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param point - \c [in] timeline point - * \param flags - \c [in] flags - * \param sync_file_fd - \c [out] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_export_sync_file2(amdgpu_device_handle dev, - uint32_t syncobj, - uint64_t point, - uint32_t flags, - int *sync_file_fd); - -/** - * Import kernel timeline sync object from a sync_file. - * - * \param dev - \c [in] device handle - * \param syncobj - \c [in] sync object handle - * \param point - \c [in] timeline point - * \param sync_file_fd - \c [in] sync_file file descriptor. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_import_sync_file2(amdgpu_device_handle dev, - uint32_t syncobj, - uint64_t point, - int sync_file_fd); - -/** - * transfer between syncbojs. - * - * \param dev - \c [in] device handle - * \param dst_handle - \c [in] sync object handle - * \param dst_point - \c [in] timeline point, 0 presents dst is binary - * \param src_handle - \c [in] sync object handle - * \param src_point - \c [in] timeline point, 0 presents src is binary - * \param flags - \c [in] flags - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -int amdgpu_cs_syncobj_transfer(amdgpu_device_handle dev, - uint32_t dst_handle, - uint64_t dst_point, - uint32_t src_handle, - uint64_t src_point, - uint32_t flags); - -/** - * Export an amdgpu fence as a handle (syncobj or fd). - * - * \param what AMDGPU_FENCE_TO_HANDLE_GET_{SYNCOBJ, FD} - * \param out_handle returned handle - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - */ -int amdgpu_cs_fence_to_handle(amdgpu_device_handle dev, - struct amdgpu_cs_fence *fence, - uint32_t what, - uint32_t *out_handle); - -/** - * Submit raw command submission to kernel - * - * \param dev - \c [in] device handle - * \param context - \c [in] context handle for context id - * \param bo_list_handle - \c [in] request bo list handle (0 for none) - * \param num_chunks - \c [in] number of CS chunks to submit - * \param chunks - \c [in] array of CS chunks - * \param seq_no - \c [out] output sequence number for submission. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - */ -struct drm_amdgpu_cs_chunk; -struct drm_amdgpu_cs_chunk_dep; -struct drm_amdgpu_cs_chunk_data; - -int amdgpu_cs_submit_raw(amdgpu_device_handle dev, - amdgpu_context_handle context, - amdgpu_bo_list_handle bo_list_handle, - int num_chunks, - struct drm_amdgpu_cs_chunk *chunks, - uint64_t *seq_no); - -/** - * Submit raw command submission to the kernel with a raw BO list handle. - * - * \param dev - \c [in] device handle - * \param context - \c [in] context handle for context id - * \param bo_list_handle - \c [in] raw bo list handle (0 for none) - * \param num_chunks - \c [in] number of CS chunks to submit - * \param chunks - \c [in] array of CS chunks - * \param seq_no - \c [out] output sequence number for submission. - * - * \return 0 on success\n - * <0 - Negative POSIX Error code - * - * \sa amdgpu_bo_list_create_raw(), amdgpu_bo_list_destroy_raw() - */ -int amdgpu_cs_submit_raw2(amdgpu_device_handle dev, - amdgpu_context_handle context, - uint32_t bo_list_handle, - int num_chunks, - struct drm_amdgpu_cs_chunk *chunks, - uint64_t *seq_no); - -void amdgpu_cs_chunk_fence_to_dep(struct amdgpu_cs_fence *fence, - struct drm_amdgpu_cs_chunk_dep *dep); -void amdgpu_cs_chunk_fence_info_to_data(struct amdgpu_cs_fence_info *fence_info, - struct drm_amdgpu_cs_chunk_data *data); - -/** - * Reserve VMID - * \param context - \c [in] GPU Context - * \param flags - \c [in] TBD - * - * \return 0 on success otherwise POSIX Error code -*/ -int amdgpu_vm_reserve_vmid(amdgpu_device_handle dev, uint32_t flags); - -/** - * Free reserved VMID - * \param context - \c [in] GPU Context - * \param flags - \c [in] TBD - * - * \return 0 on success otherwise POSIX Error code -*/ -int amdgpu_vm_unreserve_vmid(amdgpu_device_handle dev, uint32_t flags); - -#ifdef __cplusplus -} -#endif -#endif /* #ifdef _AMDGPU_H_ */ diff --git a/prebuilts/x86_64/include/libdrm/amdgpu_drm.h b/prebuilts/x86_64/include/libdrm/amdgpu_drm.h deleted file mode 100644 index 7f01f98..0000000 --- a/prebuilts/x86_64/include/libdrm/amdgpu_drm.h +++ /dev/null @@ -1,1157 +0,0 @@ -/* amdgpu_drm.h -- Public header for the amdgpu driver -*- linux-c -*- - * - * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Fremont, California. - * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. - * Copyright 2014 Advanced Micro Devices, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Kevin E. Martin - * Gareth Hughes - * Keith Whitwell - */ - -#ifndef __AMDGPU_DRM_H__ -#define __AMDGPU_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_AMDGPU_GEM_CREATE 0x00 -#define DRM_AMDGPU_GEM_MMAP 0x01 -#define DRM_AMDGPU_CTX 0x02 -#define DRM_AMDGPU_BO_LIST 0x03 -#define DRM_AMDGPU_CS 0x04 -#define DRM_AMDGPU_INFO 0x05 -#define DRM_AMDGPU_GEM_METADATA 0x06 -#define DRM_AMDGPU_GEM_WAIT_IDLE 0x07 -#define DRM_AMDGPU_GEM_VA 0x08 -#define DRM_AMDGPU_WAIT_CS 0x09 -#define DRM_AMDGPU_GEM_OP 0x10 -#define DRM_AMDGPU_GEM_USERPTR 0x11 -#define DRM_AMDGPU_WAIT_FENCES 0x12 -#define DRM_AMDGPU_VM 0x13 -#define DRM_AMDGPU_FENCE_TO_HANDLE 0x14 -#define DRM_AMDGPU_SCHED 0x15 - -#define DRM_IOCTL_AMDGPU_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_CREATE, union drm_amdgpu_gem_create) -#define DRM_IOCTL_AMDGPU_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_MMAP, union drm_amdgpu_gem_mmap) -#define DRM_IOCTL_AMDGPU_CTX DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_CTX, union drm_amdgpu_ctx) -#define DRM_IOCTL_AMDGPU_BO_LIST DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_BO_LIST, union drm_amdgpu_bo_list) -#define DRM_IOCTL_AMDGPU_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_CS, union drm_amdgpu_cs) -#define DRM_IOCTL_AMDGPU_INFO DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_INFO, struct drm_amdgpu_info) -#define DRM_IOCTL_AMDGPU_GEM_METADATA DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_METADATA, struct drm_amdgpu_gem_metadata) -#define DRM_IOCTL_AMDGPU_GEM_WAIT_IDLE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_WAIT_IDLE, union drm_amdgpu_gem_wait_idle) -#define DRM_IOCTL_AMDGPU_GEM_VA DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_VA, struct drm_amdgpu_gem_va) -#define DRM_IOCTL_AMDGPU_WAIT_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_WAIT_CS, union drm_amdgpu_wait_cs) -#define DRM_IOCTL_AMDGPU_GEM_OP DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_OP, struct drm_amdgpu_gem_op) -#define DRM_IOCTL_AMDGPU_GEM_USERPTR DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_USERPTR, struct drm_amdgpu_gem_userptr) -#define DRM_IOCTL_AMDGPU_WAIT_FENCES DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_WAIT_FENCES, union drm_amdgpu_wait_fences) -#define DRM_IOCTL_AMDGPU_VM DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_VM, union drm_amdgpu_vm) -#define DRM_IOCTL_AMDGPU_FENCE_TO_HANDLE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_FENCE_TO_HANDLE, union drm_amdgpu_fence_to_handle) -#define DRM_IOCTL_AMDGPU_SCHED DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_SCHED, union drm_amdgpu_sched) - -/** - * DOC: memory domains - * - * %AMDGPU_GEM_DOMAIN_CPU System memory that is not GPU accessible. - * Memory in this pool could be swapped out to disk if there is pressure. - * - * %AMDGPU_GEM_DOMAIN_GTT GPU accessible system memory, mapped into the - * GPU's virtual address space via gart. Gart memory linearizes non-contiguous - * pages of system memory, allows GPU access system memory in a linearized - * fashion. - * - * %AMDGPU_GEM_DOMAIN_VRAM Local video memory. For APUs, it is memory - * carved out by the BIOS. - * - * %AMDGPU_GEM_DOMAIN_GDS Global on-chip data storage used to share data - * across shader threads. - * - * %AMDGPU_GEM_DOMAIN_GWS Global wave sync, used to synchronize the - * execution of all the waves on a device. - * - * %AMDGPU_GEM_DOMAIN_OA Ordered append, used by 3D or Compute engines - * for appending data. - */ -#define AMDGPU_GEM_DOMAIN_CPU 0x1 -#define AMDGPU_GEM_DOMAIN_GTT 0x2 -#define AMDGPU_GEM_DOMAIN_VRAM 0x4 -#define AMDGPU_GEM_DOMAIN_GDS 0x8 -#define AMDGPU_GEM_DOMAIN_GWS 0x10 -#define AMDGPU_GEM_DOMAIN_OA 0x20 -#define AMDGPU_GEM_DOMAIN_MASK (AMDGPU_GEM_DOMAIN_CPU | \ - AMDGPU_GEM_DOMAIN_GTT | \ - AMDGPU_GEM_DOMAIN_VRAM | \ - AMDGPU_GEM_DOMAIN_GDS | \ - AMDGPU_GEM_DOMAIN_GWS | \ - AMDGPU_GEM_DOMAIN_OA) - -/* Flag that CPU access will be required for the case of VRAM domain */ -#define AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED (1 << 0) -/* Flag that CPU access will not work, this VRAM domain is invisible */ -#define AMDGPU_GEM_CREATE_NO_CPU_ACCESS (1 << 1) -/* Flag that USWC attributes should be used for GTT */ -#define AMDGPU_GEM_CREATE_CPU_GTT_USWC (1 << 2) -/* Flag that the memory should be in VRAM and cleared */ -#define AMDGPU_GEM_CREATE_VRAM_CLEARED (1 << 3) -/* Flag that allocating the BO should use linear VRAM */ -#define AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS (1 << 5) -/* Flag that BO is always valid in this VM */ -#define AMDGPU_GEM_CREATE_VM_ALWAYS_VALID (1 << 6) -/* Flag that BO sharing will be explicitly synchronized */ -#define AMDGPU_GEM_CREATE_EXPLICIT_SYNC (1 << 7) -/* Flag that indicates allocating MQD gart on GFX9, where the mtype - * for the second page onward should be set to NC. It should never - * be used by user space applications. - */ -#define AMDGPU_GEM_CREATE_CP_MQD_GFX9 (1 << 8) -/* Flag that BO may contain sensitive data that must be wiped before - * releasing the memory - */ -#define AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE (1 << 9) -/* Flag that BO will be encrypted and that the TMZ bit should be - * set in the PTEs when mapping this buffer via GPUVM or - * accessing it with various hw blocks - */ -#define AMDGPU_GEM_CREATE_ENCRYPTED (1 << 10) -/* Flag that BO will be used only in preemptible context, which does - * not require GTT memory accounting - */ -#define AMDGPU_GEM_CREATE_PREEMPTIBLE (1 << 11) - -struct drm_amdgpu_gem_create_in { - /** the requested memory size */ - __u64 bo_size; - /** physical start_addr alignment in bytes for some HW requirements */ - __u64 alignment; - /** the requested memory domains */ - __u64 domains; - /** allocation flags */ - __u64 domain_flags; -}; - -struct drm_amdgpu_gem_create_out { - /** returned GEM object handle */ - __u32 handle; - __u32 _pad; -}; - -union drm_amdgpu_gem_create { - struct drm_amdgpu_gem_create_in in; - struct drm_amdgpu_gem_create_out out; -}; - -/** Opcode to create new residency list. */ -#define AMDGPU_BO_LIST_OP_CREATE 0 -/** Opcode to destroy previously created residency list */ -#define AMDGPU_BO_LIST_OP_DESTROY 1 -/** Opcode to update resource information in the list */ -#define AMDGPU_BO_LIST_OP_UPDATE 2 - -struct drm_amdgpu_bo_list_in { - /** Type of operation */ - __u32 operation; - /** Handle of list or 0 if we want to create one */ - __u32 list_handle; - /** Number of BOs in list */ - __u32 bo_number; - /** Size of each element describing BO */ - __u32 bo_info_size; - /** Pointer to array describing BOs */ - __u64 bo_info_ptr; -}; - -struct drm_amdgpu_bo_list_entry { - /** Handle of BO */ - __u32 bo_handle; - /** New (if specified) BO priority to be used during migration */ - __u32 bo_priority; -}; - -struct drm_amdgpu_bo_list_out { - /** Handle of resource list */ - __u32 list_handle; - __u32 _pad; -}; - -union drm_amdgpu_bo_list { - struct drm_amdgpu_bo_list_in in; - struct drm_amdgpu_bo_list_out out; -}; - -/* context related */ -#define AMDGPU_CTX_OP_ALLOC_CTX 1 -#define AMDGPU_CTX_OP_FREE_CTX 2 -#define AMDGPU_CTX_OP_QUERY_STATE 3 -#define AMDGPU_CTX_OP_QUERY_STATE2 4 -#define AMDGPU_CTX_OP_GET_STABLE_PSTATE 5 -#define AMDGPU_CTX_OP_SET_STABLE_PSTATE 6 - -/* GPU reset status */ -#define AMDGPU_CTX_NO_RESET 0 -/* this the context caused it */ -#define AMDGPU_CTX_GUILTY_RESET 1 -/* some other context caused it */ -#define AMDGPU_CTX_INNOCENT_RESET 2 -/* unknown cause */ -#define AMDGPU_CTX_UNKNOWN_RESET 3 - -/* indicate gpu reset occured after ctx created */ -#define AMDGPU_CTX_QUERY2_FLAGS_RESET (1<<0) -/* indicate vram lost occured after ctx created */ -#define AMDGPU_CTX_QUERY2_FLAGS_VRAMLOST (1<<1) -/* indicate some job from this context once cause gpu hang */ -#define AMDGPU_CTX_QUERY2_FLAGS_GUILTY (1<<2) -/* indicate some errors are detected by RAS */ -#define AMDGPU_CTX_QUERY2_FLAGS_RAS_CE (1<<3) -#define AMDGPU_CTX_QUERY2_FLAGS_RAS_UE (1<<4) - -/* Context priority level */ -#define AMDGPU_CTX_PRIORITY_UNSET -2048 -#define AMDGPU_CTX_PRIORITY_VERY_LOW -1023 -#define AMDGPU_CTX_PRIORITY_LOW -512 -#define AMDGPU_CTX_PRIORITY_NORMAL 0 -/* - * When used in struct drm_amdgpu_ctx_in, a priority above NORMAL requires - * CAP_SYS_NICE or DRM_MASTER -*/ -#define AMDGPU_CTX_PRIORITY_HIGH 512 -#define AMDGPU_CTX_PRIORITY_VERY_HIGH 1023 - -/* select a stable profiling pstate for perfmon tools */ -#define AMDGPU_CTX_STABLE_PSTATE_FLAGS_MASK 0xf -#define AMDGPU_CTX_STABLE_PSTATE_NONE 0 -#define AMDGPU_CTX_STABLE_PSTATE_STANDARD 1 -#define AMDGPU_CTX_STABLE_PSTATE_MIN_SCLK 2 -#define AMDGPU_CTX_STABLE_PSTATE_MIN_MCLK 3 -#define AMDGPU_CTX_STABLE_PSTATE_PEAK 4 - -struct drm_amdgpu_ctx_in { - /** AMDGPU_CTX_OP_* */ - __u32 op; - /** Flags */ - __u32 flags; - __u32 ctx_id; - /** AMDGPU_CTX_PRIORITY_* */ - __s32 priority; -}; - -union drm_amdgpu_ctx_out { - struct { - __u32 ctx_id; - __u32 _pad; - } alloc; - - struct { - /** For future use, no flags defined so far */ - __u64 flags; - /** Number of resets caused by this context so far. */ - __u32 hangs; - /** Reset status since the last call of the ioctl. */ - __u32 reset_status; - } state; - - struct { - __u32 flags; - __u32 _pad; - } pstate; -}; - -union drm_amdgpu_ctx { - struct drm_amdgpu_ctx_in in; - union drm_amdgpu_ctx_out out; -}; - -/* vm ioctl */ -#define AMDGPU_VM_OP_RESERVE_VMID 1 -#define AMDGPU_VM_OP_UNRESERVE_VMID 2 - -struct drm_amdgpu_vm_in { - /** AMDGPU_VM_OP_* */ - __u32 op; - __u32 flags; -}; - -struct drm_amdgpu_vm_out { - /** For future use, no flags defined so far */ - __u64 flags; -}; - -union drm_amdgpu_vm { - struct drm_amdgpu_vm_in in; - struct drm_amdgpu_vm_out out; -}; - -/* sched ioctl */ -#define AMDGPU_SCHED_OP_PROCESS_PRIORITY_OVERRIDE 1 -#define AMDGPU_SCHED_OP_CONTEXT_PRIORITY_OVERRIDE 2 - -struct drm_amdgpu_sched_in { - /* AMDGPU_SCHED_OP_* */ - __u32 op; - __u32 fd; - /** AMDGPU_CTX_PRIORITY_* */ - __s32 priority; - __u32 ctx_id; -}; - -union drm_amdgpu_sched { - struct drm_amdgpu_sched_in in; -}; - -/* - * This is not a reliable API and you should expect it to fail for any - * number of reasons and have fallback path that do not use userptr to - * perform any operation. - */ -#define AMDGPU_GEM_USERPTR_READONLY (1 << 0) -#define AMDGPU_GEM_USERPTR_ANONONLY (1 << 1) -#define AMDGPU_GEM_USERPTR_VALIDATE (1 << 2) -#define AMDGPU_GEM_USERPTR_REGISTER (1 << 3) - -struct drm_amdgpu_gem_userptr { - __u64 addr; - __u64 size; - /* AMDGPU_GEM_USERPTR_* */ - __u32 flags; - /* Resulting GEM handle */ - __u32 handle; -}; - -/* SI-CI-VI: */ -/* same meaning as the GB_TILE_MODE and GL_MACRO_TILE_MODE fields */ -#define AMDGPU_TILING_ARRAY_MODE_SHIFT 0 -#define AMDGPU_TILING_ARRAY_MODE_MASK 0xf -#define AMDGPU_TILING_PIPE_CONFIG_SHIFT 4 -#define AMDGPU_TILING_PIPE_CONFIG_MASK 0x1f -#define AMDGPU_TILING_TILE_SPLIT_SHIFT 9 -#define AMDGPU_TILING_TILE_SPLIT_MASK 0x7 -#define AMDGPU_TILING_MICRO_TILE_MODE_SHIFT 12 -#define AMDGPU_TILING_MICRO_TILE_MODE_MASK 0x7 -#define AMDGPU_TILING_BANK_WIDTH_SHIFT 15 -#define AMDGPU_TILING_BANK_WIDTH_MASK 0x3 -#define AMDGPU_TILING_BANK_HEIGHT_SHIFT 17 -#define AMDGPU_TILING_BANK_HEIGHT_MASK 0x3 -#define AMDGPU_TILING_MACRO_TILE_ASPECT_SHIFT 19 -#define AMDGPU_TILING_MACRO_TILE_ASPECT_MASK 0x3 -#define AMDGPU_TILING_NUM_BANKS_SHIFT 21 -#define AMDGPU_TILING_NUM_BANKS_MASK 0x3 - -/* GFX9 and later: */ -#define AMDGPU_TILING_SWIZZLE_MODE_SHIFT 0 -#define AMDGPU_TILING_SWIZZLE_MODE_MASK 0x1f -#define AMDGPU_TILING_DCC_OFFSET_256B_SHIFT 5 -#define AMDGPU_TILING_DCC_OFFSET_256B_MASK 0xFFFFFF -#define AMDGPU_TILING_DCC_PITCH_MAX_SHIFT 29 -#define AMDGPU_TILING_DCC_PITCH_MAX_MASK 0x3FFF -#define AMDGPU_TILING_DCC_INDEPENDENT_64B_SHIFT 43 -#define AMDGPU_TILING_DCC_INDEPENDENT_64B_MASK 0x1 -#define AMDGPU_TILING_DCC_INDEPENDENT_128B_SHIFT 44 -#define AMDGPU_TILING_DCC_INDEPENDENT_128B_MASK 0x1 -#define AMDGPU_TILING_SCANOUT_SHIFT 63 -#define AMDGPU_TILING_SCANOUT_MASK 0x1 - -/* Set/Get helpers for tiling flags. */ -#define AMDGPU_TILING_SET(field, value) \ - (((__u64)(value) & AMDGPU_TILING_##field##_MASK) << AMDGPU_TILING_##field##_SHIFT) -#define AMDGPU_TILING_GET(value, field) \ - (((__u64)(value) >> AMDGPU_TILING_##field##_SHIFT) & AMDGPU_TILING_##field##_MASK) - -#define AMDGPU_GEM_METADATA_OP_SET_METADATA 1 -#define AMDGPU_GEM_METADATA_OP_GET_METADATA 2 - -/** The same structure is shared for input/output */ -struct drm_amdgpu_gem_metadata { - /** GEM Object handle */ - __u32 handle; - /** Do we want get or set metadata */ - __u32 op; - struct { - /** For future use, no flags defined so far */ - __u64 flags; - /** family specific tiling info */ - __u64 tiling_info; - __u32 data_size_bytes; - __u32 data[64]; - } data; -}; - -struct drm_amdgpu_gem_mmap_in { - /** the GEM object handle */ - __u32 handle; - __u32 _pad; -}; - -struct drm_amdgpu_gem_mmap_out { - /** mmap offset from the vma offset manager */ - __u64 addr_ptr; -}; - -union drm_amdgpu_gem_mmap { - struct drm_amdgpu_gem_mmap_in in; - struct drm_amdgpu_gem_mmap_out out; -}; - -struct drm_amdgpu_gem_wait_idle_in { - /** GEM object handle */ - __u32 handle; - /** For future use, no flags defined so far */ - __u32 flags; - /** Absolute timeout to wait */ - __u64 timeout; -}; - -struct drm_amdgpu_gem_wait_idle_out { - /** BO status: 0 - BO is idle, 1 - BO is busy */ - __u32 status; - /** Returned current memory domain */ - __u32 domain; -}; - -union drm_amdgpu_gem_wait_idle { - struct drm_amdgpu_gem_wait_idle_in in; - struct drm_amdgpu_gem_wait_idle_out out; -}; - -struct drm_amdgpu_wait_cs_in { - /* Command submission handle - * handle equals 0 means none to wait for - * handle equals ~0ull means wait for the latest sequence number - */ - __u64 handle; - /** Absolute timeout to wait */ - __u64 timeout; - __u32 ip_type; - __u32 ip_instance; - __u32 ring; - __u32 ctx_id; -}; - -struct drm_amdgpu_wait_cs_out { - /** CS status: 0 - CS completed, 1 - CS still busy */ - __u64 status; -}; - -union drm_amdgpu_wait_cs { - struct drm_amdgpu_wait_cs_in in; - struct drm_amdgpu_wait_cs_out out; -}; - -struct drm_amdgpu_fence { - __u32 ctx_id; - __u32 ip_type; - __u32 ip_instance; - __u32 ring; - __u64 seq_no; -}; - -struct drm_amdgpu_wait_fences_in { - /** This points to uint64_t * which points to fences */ - __u64 fences; - __u32 fence_count; - __u32 wait_all; - __u64 timeout_ns; -}; - -struct drm_amdgpu_wait_fences_out { - __u32 status; - __u32 first_signaled; -}; - -union drm_amdgpu_wait_fences { - struct drm_amdgpu_wait_fences_in in; - struct drm_amdgpu_wait_fences_out out; -}; - -#define AMDGPU_GEM_OP_GET_GEM_CREATE_INFO 0 -#define AMDGPU_GEM_OP_SET_PLACEMENT 1 - -/* Sets or returns a value associated with a buffer. */ -struct drm_amdgpu_gem_op { - /** GEM object handle */ - __u32 handle; - /** AMDGPU_GEM_OP_* */ - __u32 op; - /** Input or return value */ - __u64 value; -}; - -#define AMDGPU_VA_OP_MAP 1 -#define AMDGPU_VA_OP_UNMAP 2 -#define AMDGPU_VA_OP_CLEAR 3 -#define AMDGPU_VA_OP_REPLACE 4 - -/* Delay the page table update till the next CS */ -#define AMDGPU_VM_DELAY_UPDATE (1 << 0) - -/* Mapping flags */ -/* readable mapping */ -#define AMDGPU_VM_PAGE_READABLE (1 << 1) -/* writable mapping */ -#define AMDGPU_VM_PAGE_WRITEABLE (1 << 2) -/* executable mapping, new for VI */ -#define AMDGPU_VM_PAGE_EXECUTABLE (1 << 3) -/* partially resident texture */ -#define AMDGPU_VM_PAGE_PRT (1 << 4) -/* MTYPE flags use bit 5 to 8 */ -#define AMDGPU_VM_MTYPE_MASK (0xf << 5) -/* Default MTYPE. Pre-AI must use this. Recommended for newer ASICs. */ -#define AMDGPU_VM_MTYPE_DEFAULT (0 << 5) -/* Use Non Coherent MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_NC (1 << 5) -/* Use Write Combine MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_WC (2 << 5) -/* Use Cache Coherent MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_CC (3 << 5) -/* Use UnCached MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_UC (4 << 5) -/* Use Read Write MTYPE instead of default MTYPE */ -#define AMDGPU_VM_MTYPE_RW (5 << 5) - -struct drm_amdgpu_gem_va { - /** GEM object handle */ - __u32 handle; - __u32 _pad; - /** AMDGPU_VA_OP_* */ - __u32 operation; - /** AMDGPU_VM_PAGE_* */ - __u32 flags; - /** va address to assign . Must be correctly aligned.*/ - __u64 va_address; - /** Specify offset inside of BO to assign. Must be correctly aligned.*/ - __u64 offset_in_bo; - /** Specify mapping size. Must be correctly aligned. */ - __u64 map_size; -}; - -#define AMDGPU_HW_IP_GFX 0 -#define AMDGPU_HW_IP_COMPUTE 1 -#define AMDGPU_HW_IP_DMA 2 -#define AMDGPU_HW_IP_UVD 3 -#define AMDGPU_HW_IP_VCE 4 -#define AMDGPU_HW_IP_UVD_ENC 5 -#define AMDGPU_HW_IP_VCN_DEC 6 -#define AMDGPU_HW_IP_VCN_ENC 7 -#define AMDGPU_HW_IP_VCN_JPEG 8 -#define AMDGPU_HW_IP_NUM 9 - -#define AMDGPU_HW_IP_INSTANCE_MAX_COUNT 1 - -#define AMDGPU_CHUNK_ID_IB 0x01 -#define AMDGPU_CHUNK_ID_FENCE 0x02 -#define AMDGPU_CHUNK_ID_DEPENDENCIES 0x03 -#define AMDGPU_CHUNK_ID_SYNCOBJ_IN 0x04 -#define AMDGPU_CHUNK_ID_SYNCOBJ_OUT 0x05 -#define AMDGPU_CHUNK_ID_BO_HANDLES 0x06 -#define AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES 0x07 -#define AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_WAIT 0x08 -#define AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_SIGNAL 0x09 - -struct drm_amdgpu_cs_chunk { - __u32 chunk_id; - __u32 length_dw; - __u64 chunk_data; -}; - -struct drm_amdgpu_cs_in { - /** Rendering context id */ - __u32 ctx_id; - /** Handle of resource list associated with CS */ - __u32 bo_list_handle; - __u32 num_chunks; - __u32 flags; - /** this points to __u64 * which point to cs chunks */ - __u64 chunks; -}; - -struct drm_amdgpu_cs_out { - __u64 handle; -}; - -union drm_amdgpu_cs { - struct drm_amdgpu_cs_in in; - struct drm_amdgpu_cs_out out; -}; - -/* Specify flags to be used for IB */ - -/* This IB should be submitted to CE */ -#define AMDGPU_IB_FLAG_CE (1<<0) - -/* Preamble flag, which means the IB could be dropped if no context switch */ -#define AMDGPU_IB_FLAG_PREAMBLE (1<<1) - -/* Preempt flag, IB should set Pre_enb bit if PREEMPT flag detected */ -#define AMDGPU_IB_FLAG_PREEMPT (1<<2) - -/* The IB fence should do the L2 writeback but not invalidate any shader - * caches (L2/vL1/sL1/I$). */ -#define AMDGPU_IB_FLAG_TC_WB_NOT_INVALIDATE (1 << 3) - -/* Set GDS_COMPUTE_MAX_WAVE_ID = DEFAULT before PACKET3_INDIRECT_BUFFER. - * This will reset wave ID counters for the IB. - */ -#define AMDGPU_IB_FLAG_RESET_GDS_MAX_WAVE_ID (1 << 4) - -/* Flag the IB as secure (TMZ) - */ -#define AMDGPU_IB_FLAGS_SECURE (1 << 5) - -/* Tell KMD to flush and invalidate caches - */ -#define AMDGPU_IB_FLAG_EMIT_MEM_SYNC (1 << 6) - -struct drm_amdgpu_cs_chunk_ib { - __u32 _pad; - /** AMDGPU_IB_FLAG_* */ - __u32 flags; - /** Virtual address to begin IB execution */ - __u64 va_start; - /** Size of submission */ - __u32 ib_bytes; - /** HW IP to submit to */ - __u32 ip_type; - /** HW IP index of the same type to submit to */ - __u32 ip_instance; - /** Ring index to submit to */ - __u32 ring; -}; - -struct drm_amdgpu_cs_chunk_dep { - __u32 ip_type; - __u32 ip_instance; - __u32 ring; - __u32 ctx_id; - __u64 handle; -}; - -struct drm_amdgpu_cs_chunk_fence { - __u32 handle; - __u32 offset; -}; - -struct drm_amdgpu_cs_chunk_sem { - __u32 handle; -}; - -struct drm_amdgpu_cs_chunk_syncobj { - __u32 handle; - __u32 flags; - __u64 point; -}; - -#define AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ 0 -#define AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ_FD 1 -#define AMDGPU_FENCE_TO_HANDLE_GET_SYNC_FILE_FD 2 - -union drm_amdgpu_fence_to_handle { - struct { - struct drm_amdgpu_fence fence; - __u32 what; - __u32 pad; - } in; - struct { - __u32 handle; - } out; -}; - -struct drm_amdgpu_cs_chunk_data { - union { - struct drm_amdgpu_cs_chunk_ib ib_data; - struct drm_amdgpu_cs_chunk_fence fence_data; - }; -}; - -/* - * Query h/w info: Flag that this is integrated (a.h.a. fusion) GPU - * - */ -#define AMDGPU_IDS_FLAGS_FUSION 0x1 -#define AMDGPU_IDS_FLAGS_PREEMPTION 0x2 -#define AMDGPU_IDS_FLAGS_TMZ 0x4 - -/* indicate if acceleration can be working */ -#define AMDGPU_INFO_ACCEL_WORKING 0x00 -/* get the crtc_id from the mode object id? */ -#define AMDGPU_INFO_CRTC_FROM_ID 0x01 -/* query hw IP info */ -#define AMDGPU_INFO_HW_IP_INFO 0x02 -/* query hw IP instance count for the specified type */ -#define AMDGPU_INFO_HW_IP_COUNT 0x03 -/* timestamp for GL_ARB_timer_query */ -#define AMDGPU_INFO_TIMESTAMP 0x05 -/* Query the firmware version */ -#define AMDGPU_INFO_FW_VERSION 0x0e - /* Subquery id: Query VCE firmware version */ - #define AMDGPU_INFO_FW_VCE 0x1 - /* Subquery id: Query UVD firmware version */ - #define AMDGPU_INFO_FW_UVD 0x2 - /* Subquery id: Query GMC firmware version */ - #define AMDGPU_INFO_FW_GMC 0x03 - /* Subquery id: Query GFX ME firmware version */ - #define AMDGPU_INFO_FW_GFX_ME 0x04 - /* Subquery id: Query GFX PFP firmware version */ - #define AMDGPU_INFO_FW_GFX_PFP 0x05 - /* Subquery id: Query GFX CE firmware version */ - #define AMDGPU_INFO_FW_GFX_CE 0x06 - /* Subquery id: Query GFX RLC firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC 0x07 - /* Subquery id: Query GFX MEC firmware version */ - #define AMDGPU_INFO_FW_GFX_MEC 0x08 - /* Subquery id: Query SMC firmware version */ - #define AMDGPU_INFO_FW_SMC 0x0a - /* Subquery id: Query SDMA firmware version */ - #define AMDGPU_INFO_FW_SDMA 0x0b - /* Subquery id: Query PSP SOS firmware version */ - #define AMDGPU_INFO_FW_SOS 0x0c - /* Subquery id: Query PSP ASD firmware version */ - #define AMDGPU_INFO_FW_ASD 0x0d - /* Subquery id: Query VCN firmware version */ - #define AMDGPU_INFO_FW_VCN 0x0e - /* Subquery id: Query GFX RLC SRLC firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_CNTL 0x0f - /* Subquery id: Query GFX RLC SRLG firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_GPM_MEM 0x10 - /* Subquery id: Query GFX RLC SRLS firmware version */ - #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_SRM_MEM 0x11 - /* Subquery id: Query DMCU firmware version */ - #define AMDGPU_INFO_FW_DMCU 0x12 - #define AMDGPU_INFO_FW_TA 0x13 - /* Subquery id: Query DMCUB firmware version */ - #define AMDGPU_INFO_FW_DMCUB 0x14 - /* Subquery id: Query TOC firmware version */ - #define AMDGPU_INFO_FW_TOC 0x15 - -/* number of bytes moved for TTM migration */ -#define AMDGPU_INFO_NUM_BYTES_MOVED 0x0f -/* the used VRAM size */ -#define AMDGPU_INFO_VRAM_USAGE 0x10 -/* the used GTT size */ -#define AMDGPU_INFO_GTT_USAGE 0x11 -/* Information about GDS, etc. resource configuration */ -#define AMDGPU_INFO_GDS_CONFIG 0x13 -/* Query information about VRAM and GTT domains */ -#define AMDGPU_INFO_VRAM_GTT 0x14 -/* Query information about register in MMR address space*/ -#define AMDGPU_INFO_READ_MMR_REG 0x15 -/* Query information about device: rev id, family, etc. */ -#define AMDGPU_INFO_DEV_INFO 0x16 -/* visible vram usage */ -#define AMDGPU_INFO_VIS_VRAM_USAGE 0x17 -/* number of TTM buffer evictions */ -#define AMDGPU_INFO_NUM_EVICTIONS 0x18 -/* Query memory about VRAM and GTT domains */ -#define AMDGPU_INFO_MEMORY 0x19 -/* Query vce clock table */ -#define AMDGPU_INFO_VCE_CLOCK_TABLE 0x1A -/* Query vbios related information */ -#define AMDGPU_INFO_VBIOS 0x1B - /* Subquery id: Query vbios size */ - #define AMDGPU_INFO_VBIOS_SIZE 0x1 - /* Subquery id: Query vbios image */ - #define AMDGPU_INFO_VBIOS_IMAGE 0x2 - /* Subquery id: Query vbios info */ - #define AMDGPU_INFO_VBIOS_INFO 0x3 -/* Query UVD handles */ -#define AMDGPU_INFO_NUM_HANDLES 0x1C -/* Query sensor related information */ -#define AMDGPU_INFO_SENSOR 0x1D - /* Subquery id: Query GPU shader clock */ - #define AMDGPU_INFO_SENSOR_GFX_SCLK 0x1 - /* Subquery id: Query GPU memory clock */ - #define AMDGPU_INFO_SENSOR_GFX_MCLK 0x2 - /* Subquery id: Query GPU temperature */ - #define AMDGPU_INFO_SENSOR_GPU_TEMP 0x3 - /* Subquery id: Query GPU load */ - #define AMDGPU_INFO_SENSOR_GPU_LOAD 0x4 - /* Subquery id: Query average GPU power */ - #define AMDGPU_INFO_SENSOR_GPU_AVG_POWER 0x5 - /* Subquery id: Query northbridge voltage */ - #define AMDGPU_INFO_SENSOR_VDDNB 0x6 - /* Subquery id: Query graphics voltage */ - #define AMDGPU_INFO_SENSOR_VDDGFX 0x7 - /* Subquery id: Query GPU stable pstate shader clock */ - #define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_SCLK 0x8 - /* Subquery id: Query GPU stable pstate memory clock */ - #define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_MCLK 0x9 -/* Number of VRAM page faults on CPU access. */ -#define AMDGPU_INFO_NUM_VRAM_CPU_PAGE_FAULTS 0x1E -#define AMDGPU_INFO_VRAM_LOST_COUNTER 0x1F -/* query ras mask of enabled features*/ -#define AMDGPU_INFO_RAS_ENABLED_FEATURES 0x20 -/* RAS MASK: UMC (VRAM) */ -#define AMDGPU_INFO_RAS_ENABLED_UMC (1 << 0) -/* RAS MASK: SDMA */ -#define AMDGPU_INFO_RAS_ENABLED_SDMA (1 << 1) -/* RAS MASK: GFX */ -#define AMDGPU_INFO_RAS_ENABLED_GFX (1 << 2) -/* RAS MASK: MMHUB */ -#define AMDGPU_INFO_RAS_ENABLED_MMHUB (1 << 3) -/* RAS MASK: ATHUB */ -#define AMDGPU_INFO_RAS_ENABLED_ATHUB (1 << 4) -/* RAS MASK: PCIE */ -#define AMDGPU_INFO_RAS_ENABLED_PCIE (1 << 5) -/* RAS MASK: HDP */ -#define AMDGPU_INFO_RAS_ENABLED_HDP (1 << 6) -/* RAS MASK: XGMI */ -#define AMDGPU_INFO_RAS_ENABLED_XGMI (1 << 7) -/* RAS MASK: DF */ -#define AMDGPU_INFO_RAS_ENABLED_DF (1 << 8) -/* RAS MASK: SMN */ -#define AMDGPU_INFO_RAS_ENABLED_SMN (1 << 9) -/* RAS MASK: SEM */ -#define AMDGPU_INFO_RAS_ENABLED_SEM (1 << 10) -/* RAS MASK: MP0 */ -#define AMDGPU_INFO_RAS_ENABLED_MP0 (1 << 11) -/* RAS MASK: MP1 */ -#define AMDGPU_INFO_RAS_ENABLED_MP1 (1 << 12) -/* RAS MASK: FUSE */ -#define AMDGPU_INFO_RAS_ENABLED_FUSE (1 << 13) -/* query video encode/decode caps */ -#define AMDGPU_INFO_VIDEO_CAPS 0x21 - /* Subquery id: Decode */ - #define AMDGPU_INFO_VIDEO_CAPS_DECODE 0 - /* Subquery id: Encode */ - #define AMDGPU_INFO_VIDEO_CAPS_ENCODE 1 - -#define AMDGPU_INFO_MMR_SE_INDEX_SHIFT 0 -#define AMDGPU_INFO_MMR_SE_INDEX_MASK 0xff -#define AMDGPU_INFO_MMR_SH_INDEX_SHIFT 8 -#define AMDGPU_INFO_MMR_SH_INDEX_MASK 0xff - -struct drm_amdgpu_query_fw { - /** AMDGPU_INFO_FW_* */ - __u32 fw_type; - /** - * Index of the IP if there are more IPs of - * the same type. - */ - __u32 ip_instance; - /** - * Index of the engine. Whether this is used depends - * on the firmware type. (e.g. MEC, SDMA) - */ - __u32 index; - __u32 _pad; -}; - -/* Input structure for the INFO ioctl */ -struct drm_amdgpu_info { - /* Where the return value will be stored */ - __u64 return_pointer; - /* The size of the return value. Just like "size" in "snprintf", - * it limits how many bytes the kernel can write. */ - __u32 return_size; - /* The query request id. */ - __u32 query; - - union { - struct { - __u32 id; - __u32 _pad; - } mode_crtc; - - struct { - /** AMDGPU_HW_IP_* */ - __u32 type; - /** - * Index of the IP if there are more IPs of the same - * type. Ignored by AMDGPU_INFO_HW_IP_COUNT. - */ - __u32 ip_instance; - } query_hw_ip; - - struct { - __u32 dword_offset; - /** number of registers to read */ - __u32 count; - __u32 instance; - /** For future use, no flags defined so far */ - __u32 flags; - } read_mmr_reg; - - struct drm_amdgpu_query_fw query_fw; - - struct { - __u32 type; - __u32 offset; - } vbios_info; - - struct { - __u32 type; - } sensor_info; - - struct { - __u32 type; - } video_cap; - }; -}; - -struct drm_amdgpu_info_gds { - /** GDS GFX partition size */ - __u32 gds_gfx_partition_size; - /** GDS compute partition size */ - __u32 compute_partition_size; - /** total GDS memory size */ - __u32 gds_total_size; - /** GWS size per GFX partition */ - __u32 gws_per_gfx_partition; - /** GSW size per compute partition */ - __u32 gws_per_compute_partition; - /** OA size per GFX partition */ - __u32 oa_per_gfx_partition; - /** OA size per compute partition */ - __u32 oa_per_compute_partition; - __u32 _pad; -}; - -struct drm_amdgpu_info_vram_gtt { - __u64 vram_size; - __u64 vram_cpu_accessible_size; - __u64 gtt_size; -}; - -struct drm_amdgpu_heap_info { - /** max. physical memory */ - __u64 total_heap_size; - - /** Theoretical max. available memory in the given heap */ - __u64 usable_heap_size; - - /** - * Number of bytes allocated in the heap. This includes all processes - * and private allocations in the kernel. It changes when new buffers - * are allocated, freed, and moved. It cannot be larger than - * heap_size. - */ - __u64 heap_usage; - - /** - * Theoretical possible max. size of buffer which - * could be allocated in the given heap - */ - __u64 max_allocation; -}; - -struct drm_amdgpu_memory_info { - struct drm_amdgpu_heap_info vram; - struct drm_amdgpu_heap_info cpu_accessible_vram; - struct drm_amdgpu_heap_info gtt; -}; - -struct drm_amdgpu_info_firmware { - __u32 ver; - __u32 feature; -}; - -struct drm_amdgpu_info_vbios { - __u8 name[64]; - __u8 vbios_pn[64]; - __u32 version; - __u32 pad; - __u8 vbios_ver_str[32]; - __u8 date[32]; -}; - -#define AMDGPU_VRAM_TYPE_UNKNOWN 0 -#define AMDGPU_VRAM_TYPE_GDDR1 1 -#define AMDGPU_VRAM_TYPE_DDR2 2 -#define AMDGPU_VRAM_TYPE_GDDR3 3 -#define AMDGPU_VRAM_TYPE_GDDR4 4 -#define AMDGPU_VRAM_TYPE_GDDR5 5 -#define AMDGPU_VRAM_TYPE_HBM 6 -#define AMDGPU_VRAM_TYPE_DDR3 7 -#define AMDGPU_VRAM_TYPE_DDR4 8 -#define AMDGPU_VRAM_TYPE_GDDR6 9 -#define AMDGPU_VRAM_TYPE_DDR5 10 - -struct drm_amdgpu_info_device { - /** PCI Device ID */ - __u32 device_id; - /** Internal chip revision: A0, A1, etc.) */ - __u32 chip_rev; - __u32 external_rev; - /** Revision id in PCI Config space */ - __u32 pci_rev; - __u32 family; - __u32 num_shader_engines; - __u32 num_shader_arrays_per_engine; - /* in KHz */ - __u32 gpu_counter_freq; - __u64 max_engine_clock; - __u64 max_memory_clock; - /* cu information */ - __u32 cu_active_number; - /* NOTE: cu_ao_mask is INVALID, DON'T use it */ - __u32 cu_ao_mask; - __u32 cu_bitmap[4][4]; - /** Render backend pipe mask. One render backend is CB+DB. */ - __u32 enabled_rb_pipes_mask; - __u32 num_rb_pipes; - __u32 num_hw_gfx_contexts; - __u32 _pad; - __u64 ids_flags; - /** Starting virtual address for UMDs. */ - __u64 virtual_address_offset; - /** The maximum virtual address */ - __u64 virtual_address_max; - /** Required alignment of virtual addresses. */ - __u32 virtual_address_alignment; - /** Page table entry - fragment size */ - __u32 pte_fragment_size; - __u32 gart_page_size; - /** constant engine ram size*/ - __u32 ce_ram_size; - /** video memory type info*/ - __u32 vram_type; - /** video memory bit width*/ - __u32 vram_bit_width; - /* vce harvesting instance */ - __u32 vce_harvest_config; - /* gfx double offchip LDS buffers */ - __u32 gc_double_offchip_lds_buf; - /* NGG Primitive Buffer */ - __u64 prim_buf_gpu_addr; - /* NGG Position Buffer */ - __u64 pos_buf_gpu_addr; - /* NGG Control Sideband */ - __u64 cntl_sb_buf_gpu_addr; - /* NGG Parameter Cache */ - __u64 param_buf_gpu_addr; - __u32 prim_buf_size; - __u32 pos_buf_size; - __u32 cntl_sb_buf_size; - __u32 param_buf_size; - /* wavefront size*/ - __u32 wave_front_size; - /* shader visible vgprs*/ - __u32 num_shader_visible_vgprs; - /* CU per shader array*/ - __u32 num_cu_per_sh; - /* number of tcc blocks*/ - __u32 num_tcc_blocks; - /* gs vgt table depth*/ - __u32 gs_vgt_table_depth; - /* gs primitive buffer depth*/ - __u32 gs_prim_buffer_depth; - /* max gs wavefront per vgt*/ - __u32 max_gs_waves_per_vgt; - __u32 _pad1; - /* always on cu bitmap */ - __u32 cu_ao_bitmap[4][4]; - /** Starting high virtual address for UMDs. */ - __u64 high_va_offset; - /** The maximum high virtual address */ - __u64 high_va_max; - /* gfx10 pa_sc_tile_steering_override */ - __u32 pa_sc_tile_steering_override; - /* disabled TCCs */ - __u64 tcc_disabled_mask; -}; - -struct drm_amdgpu_info_hw_ip { - /** Version of h/w IP */ - __u32 hw_ip_version_major; - __u32 hw_ip_version_minor; - /** Capabilities */ - __u64 capabilities_flags; - /** command buffer address start alignment*/ - __u32 ib_start_alignment; - /** command buffer size alignment*/ - __u32 ib_size_alignment; - /** Bitmask of available rings. Bit 0 means ring 0, etc. */ - __u32 available_rings; - __u32 _pad; -}; - -struct drm_amdgpu_info_num_handles { - /** Max handles as supported by firmware for UVD */ - __u32 uvd_max_handles; - /** Handles currently in use for UVD */ - __u32 uvd_used_handles; -}; - -#define AMDGPU_VCE_CLOCK_TABLE_ENTRIES 6 - -struct drm_amdgpu_info_vce_clock_table_entry { - /** System clock */ - __u32 sclk; - /** Memory clock */ - __u32 mclk; - /** VCE clock */ - __u32 eclk; - __u32 pad; -}; - -struct drm_amdgpu_info_vce_clock_table { - struct drm_amdgpu_info_vce_clock_table_entry entries[AMDGPU_VCE_CLOCK_TABLE_ENTRIES]; - __u32 num_valid_entries; - __u32 pad; -}; - -/* query video encode/decode caps */ -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 0 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 1 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 2 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC 3 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC 4 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG 5 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 6 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1 7 -#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_COUNT 8 - -struct drm_amdgpu_info_video_codec_info { - __u32 valid; - __u32 max_width; - __u32 max_height; - __u32 max_pixels_per_frame; - __u32 max_level; - __u32 pad; -}; - -struct drm_amdgpu_info_video_caps { - struct drm_amdgpu_info_video_codec_info codec_info[AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_COUNT]; -}; - -/* - * Supported GPU families - */ -#define AMDGPU_FAMILY_UNKNOWN 0 -#define AMDGPU_FAMILY_SI 110 /* Hainan, Oland, Verde, Pitcairn, Tahiti */ -#define AMDGPU_FAMILY_CI 120 /* Bonaire, Hawaii */ -#define AMDGPU_FAMILY_KV 125 /* Kaveri, Kabini, Mullins */ -#define AMDGPU_FAMILY_VI 130 /* Iceland, Tonga */ -#define AMDGPU_FAMILY_CZ 135 /* Carrizo, Stoney */ -#define AMDGPU_FAMILY_AI 141 /* Vega10 */ -#define AMDGPU_FAMILY_RV 142 /* Raven */ -#define AMDGPU_FAMILY_NV 143 /* Navi10 */ -#define AMDGPU_FAMILY_VGH 144 /* Van Gogh */ -#define AMDGPU_FAMILY_YC 146 /* Yellow Carp */ - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/libdrm/android/gralloc_handle.h b/prebuilts/x86_64/include/libdrm/android/gralloc_handle.h deleted file mode 100644 index d3d975e..0000000 --- a/prebuilts/x86_64/include/libdrm/android/gralloc_handle.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2010-2011 Chia-I Wu - * Copyright (C) 2010-2011 LunarG Inc. - * Copyright (C) 2016 Linaro, Ltd., Rob Herring - * Copyright (C) 2018 Collabora, Robert Foss - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#ifndef __ANDROID_GRALLOC_HANDLE_H__ -#define __ANDROID_GRALLOC_HANDLE_H__ - -#include -#include - -/* support users of drm_gralloc/gbm_gralloc */ -#define gralloc_gbm_handle_t gralloc_handle_t -#define gralloc_drm_handle_t gralloc_handle_t - -struct gralloc_handle_t { - native_handle_t base; - - /* dma-buf file descriptor - * Must be located first since, native_handle_t is allocated - * using native_handle_create(), which allocates space for - * sizeof(native_handle_t) + sizeof(int) * (numFds + numInts) - * numFds = GRALLOC_HANDLE_NUM_FDS - * numInts = GRALLOC_HANDLE_NUM_INTS - * Where numFds represents the number of FDs and - * numInts represents the space needed for the - * remainder of this struct. - * And the FDs are expected to be found first following - * native_handle_t. - */ - int prime_fd; - - /* api variables */ - uint32_t magic; /* differentiate between allocator impls */ - uint32_t version; /* api version */ - - uint32_t width; /* width of buffer in pixels */ - uint32_t height; /* height of buffer in pixels */ - uint32_t format; /* pixel format (Android) */ - uint32_t usage; /* android libhardware usage flags */ - - uint32_t stride; /* the stride in bytes */ - int data_owner; /* owner of data (for validation) */ - uint64_t modifier __attribute__((aligned(8))); /* buffer modifiers */ - - union { - void *data; /* pointer to struct gralloc_gbm_bo_t */ - uint64_t reserved; - } __attribute__((aligned(8))); -}; - -#define GRALLOC_HANDLE_VERSION 4 -#define GRALLOC_HANDLE_MAGIC 0x60585350 -#define GRALLOC_HANDLE_NUM_FDS 1 -#define GRALLOC_HANDLE_NUM_INTS ( \ - ((sizeof(struct gralloc_handle_t) - sizeof(native_handle_t))/sizeof(int)) \ - - GRALLOC_HANDLE_NUM_FDS) - -static inline struct gralloc_handle_t *gralloc_handle(buffer_handle_t handle) -{ - return (struct gralloc_handle_t *)handle; -} - -/** - * Create a buffer handle. - */ -static inline native_handle_t *gralloc_handle_create(int32_t width, - int32_t height, - int32_t hal_format, - int32_t usage) -{ - struct gralloc_handle_t *handle; - native_handle_t *nhandle = native_handle_create(GRALLOC_HANDLE_NUM_FDS, - GRALLOC_HANDLE_NUM_INTS); - - if (!nhandle) - return NULL; - - handle = gralloc_handle(nhandle); - handle->magic = GRALLOC_HANDLE_MAGIC; - handle->version = GRALLOC_HANDLE_VERSION; - handle->width = width; - handle->height = height; - handle->format = hal_format; - handle->usage = usage; - handle->prime_fd = -1; - - return nhandle; -} - -#endif diff --git a/prebuilts/x86_64/include/libdrm/drm.h b/prebuilts/x86_64/include/libdrm/drm.h deleted file mode 100644 index 398c396..0000000 --- a/prebuilts/x86_64/include/libdrm/drm.h +++ /dev/null @@ -1,1183 +0,0 @@ -/* - * Header for the Direct Rendering Manager - * - * Author: Rickard E. (Rik) Faith - * - * Acknowledgments: - * Dec 1999, Richard Henderson , move to generic cmpxchg. - */ - -/* - * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef _DRM_H_ -#define _DRM_H_ - -#if defined(__linux__) - -#include -#include -typedef unsigned int drm_handle_t; - -#else /* One of the BSDs */ - -#include -#include -#include -typedef int8_t __s8; -typedef uint8_t __u8; -typedef int16_t __s16; -typedef uint16_t __u16; -typedef int32_t __s32; -typedef uint32_t __u32; -typedef int64_t __s64; -typedef uint64_t __u64; -typedef size_t __kernel_size_t; -typedef unsigned long drm_handle_t; - -#endif - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_NAME "drm" /**< Name in kernel, /dev, and /proc */ -#define DRM_MIN_ORDER 5 /**< At least 2^5 bytes = 32 bytes */ -#define DRM_MAX_ORDER 22 /**< Up to 2^22 bytes = 4MB */ -#define DRM_RAM_PERCENT 10 /**< How much system ram can we lock? */ - -#define _DRM_LOCK_HELD 0x80000000U /**< Hardware lock is held */ -#define _DRM_LOCK_CONT 0x40000000U /**< Hardware lock is contended */ -#define _DRM_LOCK_IS_HELD(lock) ((lock) & _DRM_LOCK_HELD) -#define _DRM_LOCK_IS_CONT(lock) ((lock) & _DRM_LOCK_CONT) -#define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT)) - -typedef unsigned int drm_context_t; -typedef unsigned int drm_drawable_t; -typedef unsigned int drm_magic_t; - -/* - * Cliprect. - * - * \warning: If you change this structure, make sure you change - * XF86DRIClipRectRec in the server as well - * - * \note KW: Actually it's illegal to change either for - * backwards-compatibility reasons. - */ -struct drm_clip_rect { - unsigned short x1; - unsigned short y1; - unsigned short x2; - unsigned short y2; -}; - -/* - * Drawable information. - */ -struct drm_drawable_info { - unsigned int num_rects; - struct drm_clip_rect *rects; -}; - -/* - * Texture region, - */ -struct drm_tex_region { - unsigned char next; - unsigned char prev; - unsigned char in_use; - unsigned char padding; - unsigned int age; -}; - -/* - * Hardware lock. - * - * The lock structure is a simple cache-line aligned integer. To avoid - * processor bus contention on a multiprocessor system, there should not be any - * other data stored in the same cache line. - */ -struct drm_hw_lock { - __volatile__ unsigned int lock; /**< lock variable */ - char padding[60]; /**< Pad to cache line */ -}; - -/* - * DRM_IOCTL_VERSION ioctl argument type. - * - * \sa drmGetVersion(). - */ -struct drm_version { - int version_major; /**< Major version */ - int version_minor; /**< Minor version */ - int version_patchlevel; /**< Patch level */ - __kernel_size_t name_len; /**< Length of name buffer */ - char *name; /**< Name of driver */ - __kernel_size_t date_len; /**< Length of date buffer */ - char *date; /**< User-space buffer to hold date */ - __kernel_size_t desc_len; /**< Length of desc buffer */ - char *desc; /**< User-space buffer to hold desc */ -}; - -/* - * DRM_IOCTL_GET_UNIQUE ioctl argument type. - * - * \sa drmGetBusid() and drmSetBusId(). - */ -struct drm_unique { - __kernel_size_t unique_len; /**< Length of unique */ - char *unique; /**< Unique name for driver instantiation */ -}; - -struct drm_list { - int count; /**< Length of user-space structures */ - struct drm_version *version; -}; - -struct drm_block { - int unused; -}; - -/* - * DRM_IOCTL_CONTROL ioctl argument type. - * - * \sa drmCtlInstHandler() and drmCtlUninstHandler(). - */ -struct drm_control { - enum { - DRM_ADD_COMMAND, - DRM_RM_COMMAND, - DRM_INST_HANDLER, - DRM_UNINST_HANDLER - } func; - int irq; -}; - -/* - * Type of memory to map. - */ -enum drm_map_type { - _DRM_FRAME_BUFFER = 0, /**< WC (no caching), no core dump */ - _DRM_REGISTERS = 1, /**< no caching, no core dump */ - _DRM_SHM = 2, /**< shared, cached */ - _DRM_AGP = 3, /**< AGP/GART */ - _DRM_SCATTER_GATHER = 4, /**< Scatter/gather memory for PCI DMA */ - _DRM_CONSISTENT = 5 /**< Consistent memory for PCI DMA */ -}; - -/* - * Memory mapping flags. - */ -enum drm_map_flags { - _DRM_RESTRICTED = 0x01, /**< Cannot be mapped to user-virtual */ - _DRM_READ_ONLY = 0x02, - _DRM_LOCKED = 0x04, /**< shared, cached, locked */ - _DRM_KERNEL = 0x08, /**< kernel requires access */ - _DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */ - _DRM_CONTAINS_LOCK = 0x20, /**< SHM page that contains lock */ - _DRM_REMOVABLE = 0x40, /**< Removable mapping */ - _DRM_DRIVER = 0x80 /**< Managed by driver */ -}; - -struct drm_ctx_priv_map { - unsigned int ctx_id; /**< Context requesting private mapping */ - void *handle; /**< Handle of map */ -}; - -/* - * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls - * argument type. - * - * \sa drmAddMap(). - */ -struct drm_map { - unsigned long offset; /**< Requested physical address (0 for SAREA)*/ - unsigned long size; /**< Requested physical size (bytes) */ - enum drm_map_type type; /**< Type of memory to map */ - enum drm_map_flags flags; /**< Flags */ - void *handle; /**< User-space: "Handle" to pass to mmap() */ - /**< Kernel-space: kernel-virtual address */ - int mtrr; /**< MTRR slot used */ - /* Private data */ -}; - -/* - * DRM_IOCTL_GET_CLIENT ioctl argument type. - */ -struct drm_client { - int idx; /**< Which client desired? */ - int auth; /**< Is client authenticated? */ - unsigned long pid; /**< Process ID */ - unsigned long uid; /**< User ID */ - unsigned long magic; /**< Magic */ - unsigned long iocs; /**< Ioctl count */ -}; - -enum drm_stat_type { - _DRM_STAT_LOCK, - _DRM_STAT_OPENS, - _DRM_STAT_CLOSES, - _DRM_STAT_IOCTLS, - _DRM_STAT_LOCKS, - _DRM_STAT_UNLOCKS, - _DRM_STAT_VALUE, /**< Generic value */ - _DRM_STAT_BYTE, /**< Generic byte counter (1024bytes/K) */ - _DRM_STAT_COUNT, /**< Generic non-byte counter (1000/k) */ - - _DRM_STAT_IRQ, /**< IRQ */ - _DRM_STAT_PRIMARY, /**< Primary DMA bytes */ - _DRM_STAT_SECONDARY, /**< Secondary DMA bytes */ - _DRM_STAT_DMA, /**< DMA */ - _DRM_STAT_SPECIAL, /**< Special DMA (e.g., priority or polled) */ - _DRM_STAT_MISSED /**< Missed DMA opportunity */ - /* Add to the *END* of the list */ -}; - -/* - * DRM_IOCTL_GET_STATS ioctl argument type. - */ -struct drm_stats { - unsigned long count; - struct { - unsigned long value; - enum drm_stat_type type; - } data[15]; -}; - -/* - * Hardware locking flags. - */ -enum drm_lock_flags { - _DRM_LOCK_READY = 0x01, /**< Wait until hardware is ready for DMA */ - _DRM_LOCK_QUIESCENT = 0x02, /**< Wait until hardware quiescent */ - _DRM_LOCK_FLUSH = 0x04, /**< Flush this context's DMA queue first */ - _DRM_LOCK_FLUSH_ALL = 0x08, /**< Flush all DMA queues first */ - /* These *HALT* flags aren't supported yet - -- they will be used to support the - full-screen DGA-like mode. */ - _DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */ - _DRM_HALT_CUR_QUEUES = 0x20 /**< Halt all current queues */ -}; - -/* - * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type. - * - * \sa drmGetLock() and drmUnlock(). - */ -struct drm_lock { - int context; - enum drm_lock_flags flags; -}; - -/* - * DMA flags - * - * \warning - * These values \e must match xf86drm.h. - * - * \sa drm_dma. - */ -enum drm_dma_flags { - /* Flags for DMA buffer dispatch */ - _DRM_DMA_BLOCK = 0x01, /**< - * Block until buffer dispatched. - * - * \note The buffer may not yet have - * been processed by the hardware -- - * getting a hardware lock with the - * hardware quiescent will ensure - * that the buffer has been - * processed. - */ - _DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */ - _DRM_DMA_PRIORITY = 0x04, /**< High priority dispatch */ - - /* Flags for DMA buffer request */ - _DRM_DMA_WAIT = 0x10, /**< Wait for free buffers */ - _DRM_DMA_SMALLER_OK = 0x20, /**< Smaller-than-requested buffers OK */ - _DRM_DMA_LARGER_OK = 0x40 /**< Larger-than-requested buffers OK */ -}; - -/* - * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type. - * - * \sa drmAddBufs(). - */ -struct drm_buf_desc { - int count; /**< Number of buffers of this size */ - int size; /**< Size in bytes */ - int low_mark; /**< Low water mark */ - int high_mark; /**< High water mark */ - enum { - _DRM_PAGE_ALIGN = 0x01, /**< Align on page boundaries for DMA */ - _DRM_AGP_BUFFER = 0x02, /**< Buffer is in AGP space */ - _DRM_SG_BUFFER = 0x04, /**< Scatter/gather memory buffer */ - _DRM_FB_BUFFER = 0x08, /**< Buffer is in frame buffer */ - _DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */ - } flags; - unsigned long agp_start; /**< - * Start address of where the AGP buffers are - * in the AGP aperture - */ -}; - -/* - * DRM_IOCTL_INFO_BUFS ioctl argument type. - */ -struct drm_buf_info { - int count; /**< Entries in list */ - struct drm_buf_desc *list; -}; - -/* - * DRM_IOCTL_FREE_BUFS ioctl argument type. - */ -struct drm_buf_free { - int count; - int *list; -}; - -/* - * Buffer information - * - * \sa drm_buf_map. - */ -struct drm_buf_pub { - int idx; /**< Index into the master buffer list */ - int total; /**< Buffer size */ - int used; /**< Amount of buffer in use (for DMA) */ - void *address; /**< Address of buffer */ -}; - -/* - * DRM_IOCTL_MAP_BUFS ioctl argument type. - */ -struct drm_buf_map { - int count; /**< Length of the buffer list */ -#ifdef __cplusplus - void *virt; -#else - void *virtual; /**< Mmap'd area in user-virtual */ -#endif - struct drm_buf_pub *list; /**< Buffer information */ -}; - -/* - * DRM_IOCTL_DMA ioctl argument type. - * - * Indices here refer to the offset into the buffer list in drm_buf_get. - * - * \sa drmDMA(). - */ -struct drm_dma { - int context; /**< Context handle */ - int send_count; /**< Number of buffers to send */ - int *send_indices; /**< List of handles to buffers */ - int *send_sizes; /**< Lengths of data to send */ - enum drm_dma_flags flags; /**< Flags */ - int request_count; /**< Number of buffers requested */ - int request_size; /**< Desired size for buffers */ - int *request_indices; /**< Buffer information */ - int *request_sizes; - int granted_count; /**< Number of buffers granted */ -}; - -enum drm_ctx_flags { - _DRM_CONTEXT_PRESERVED = 0x01, - _DRM_CONTEXT_2DONLY = 0x02 -}; - -/* - * DRM_IOCTL_ADD_CTX ioctl argument type. - * - * \sa drmCreateContext() and drmDestroyContext(). - */ -struct drm_ctx { - drm_context_t handle; - enum drm_ctx_flags flags; -}; - -/* - * DRM_IOCTL_RES_CTX ioctl argument type. - */ -struct drm_ctx_res { - int count; - struct drm_ctx *contexts; -}; - -/* - * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type. - */ -struct drm_draw { - drm_drawable_t handle; -}; - -/* - * DRM_IOCTL_UPDATE_DRAW ioctl argument type. - */ -typedef enum { - DRM_DRAWABLE_CLIPRECTS -} drm_drawable_info_type_t; - -struct drm_update_draw { - drm_drawable_t handle; - unsigned int type; - unsigned int num; - unsigned long long data; -}; - -/* - * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type. - */ -struct drm_auth { - drm_magic_t magic; -}; - -/* - * DRM_IOCTL_IRQ_BUSID ioctl argument type. - * - * \sa drmGetInterruptFromBusID(). - */ -struct drm_irq_busid { - int irq; /**< IRQ number */ - int busnum; /**< bus number */ - int devnum; /**< device number */ - int funcnum; /**< function number */ -}; - -enum drm_vblank_seq_type { - _DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */ - _DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */ - /* bits 1-6 are reserved for high crtcs */ - _DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e, - _DRM_VBLANK_EVENT = 0x4000000, /**< Send event instead of blocking */ - _DRM_VBLANK_FLIP = 0x8000000, /**< Scheduled buffer swap should flip */ - _DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */ - _DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */ - _DRM_VBLANK_SIGNAL = 0x40000000 /**< Send signal instead of blocking, unsupported */ -}; -#define _DRM_VBLANK_HIGH_CRTC_SHIFT 1 - -#define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE) -#define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_EVENT | _DRM_VBLANK_SIGNAL | \ - _DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS) - -struct drm_wait_vblank_request { - enum drm_vblank_seq_type type; - unsigned int sequence; - unsigned long signal; -}; - -struct drm_wait_vblank_reply { - enum drm_vblank_seq_type type; - unsigned int sequence; - long tval_sec; - long tval_usec; -}; - -/* - * DRM_IOCTL_WAIT_VBLANK ioctl argument type. - * - * \sa drmWaitVBlank(). - */ -union drm_wait_vblank { - struct drm_wait_vblank_request request; - struct drm_wait_vblank_reply reply; -}; - -#define _DRM_PRE_MODESET 1 -#define _DRM_POST_MODESET 2 - -/* - * DRM_IOCTL_MODESET_CTL ioctl argument type - * - * \sa drmModesetCtl(). - */ -struct drm_modeset_ctl { - __u32 crtc; - __u32 cmd; -}; - -/* - * DRM_IOCTL_AGP_ENABLE ioctl argument type. - * - * \sa drmAgpEnable(). - */ -struct drm_agp_mode { - unsigned long mode; /**< AGP mode */ -}; - -/* - * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type. - * - * \sa drmAgpAlloc() and drmAgpFree(). - */ -struct drm_agp_buffer { - unsigned long size; /**< In bytes -- will round to page boundary */ - unsigned long handle; /**< Used for binding / unbinding */ - unsigned long type; /**< Type of memory to allocate */ - unsigned long physical; /**< Physical used by i810 */ -}; - -/* - * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type. - * - * \sa drmAgpBind() and drmAgpUnbind(). - */ -struct drm_agp_binding { - unsigned long handle; /**< From drm_agp_buffer */ - unsigned long offset; /**< In bytes -- will round to page boundary */ -}; - -/* - * DRM_IOCTL_AGP_INFO ioctl argument type. - * - * \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(), - * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(), - * drmAgpVendorId() and drmAgpDeviceId(). - */ -struct drm_agp_info { - int agp_version_major; - int agp_version_minor; - unsigned long mode; - unsigned long aperture_base; /* physical address */ - unsigned long aperture_size; /* bytes */ - unsigned long memory_allowed; /* bytes */ - unsigned long memory_used; - - /* PCI information */ - unsigned short id_vendor; - unsigned short id_device; -}; - -/* - * DRM_IOCTL_SG_ALLOC ioctl argument type. - */ -struct drm_scatter_gather { - unsigned long size; /**< In bytes -- will round to page boundary */ - unsigned long handle; /**< Used for mapping / unmapping */ -}; - -/* - * DRM_IOCTL_SET_VERSION ioctl argument type. - */ -struct drm_set_version { - int drm_di_major; - int drm_di_minor; - int drm_dd_major; - int drm_dd_minor; -}; - -/* DRM_IOCTL_GEM_CLOSE ioctl argument type */ -struct drm_gem_close { - /** Handle of the object to be closed. */ - __u32 handle; - __u32 pad; -}; - -/* DRM_IOCTL_GEM_FLINK ioctl argument type */ -struct drm_gem_flink { - /** Handle for the object being named */ - __u32 handle; - - /** Returned global name */ - __u32 name; -}; - -/* DRM_IOCTL_GEM_OPEN ioctl argument type */ -struct drm_gem_open { - /** Name of object being opened */ - __u32 name; - - /** Returned handle for the object */ - __u32 handle; - - /** Returned size of the object */ - __u64 size; -}; - -/** - * DRM_CAP_DUMB_BUFFER - * - * If set to 1, the driver supports creating dumb buffers via the - * &DRM_IOCTL_MODE_CREATE_DUMB ioctl. - */ -#define DRM_CAP_DUMB_BUFFER 0x1 -/** - * DRM_CAP_VBLANK_HIGH_CRTC - * - * If set to 1, the kernel supports specifying a CRTC index in the high bits of - * &drm_wait_vblank_request.type. - * - * Starting kernel version 2.6.39, this capability is always set to 1. - */ -#define DRM_CAP_VBLANK_HIGH_CRTC 0x2 -/** - * DRM_CAP_DUMB_PREFERRED_DEPTH - * - * The preferred bit depth for dumb buffers. - * - * The bit depth is the number of bits used to indicate the color of a single - * pixel excluding any padding. This is different from the number of bits per - * pixel. For instance, XRGB8888 has a bit depth of 24 but has 32 bits per - * pixel. - * - * Note that this preference only applies to dumb buffers, it's irrelevant for - * other types of buffers. - */ -#define DRM_CAP_DUMB_PREFERRED_DEPTH 0x3 -/** - * DRM_CAP_DUMB_PREFER_SHADOW - * - * If set to 1, the driver prefers userspace to render to a shadow buffer - * instead of directly rendering to a dumb buffer. For best speed, userspace - * should do streaming ordered memory copies into the dumb buffer and never - * read from it. - * - * Note that this preference only applies to dumb buffers, it's irrelevant for - * other types of buffers. - */ -#define DRM_CAP_DUMB_PREFER_SHADOW 0x4 -/** - * DRM_CAP_PRIME - * - * Bitfield of supported PRIME sharing capabilities. See &DRM_PRIME_CAP_IMPORT - * and &DRM_PRIME_CAP_EXPORT. - * - * PRIME buffers are exposed as dma-buf file descriptors. See - * Documentation/gpu/drm-mm.rst, section "PRIME Buffer Sharing". - */ -#define DRM_CAP_PRIME 0x5 -/** - * DRM_PRIME_CAP_IMPORT - * - * If this bit is set in &DRM_CAP_PRIME, the driver supports importing PRIME - * buffers via the &DRM_IOCTL_PRIME_FD_TO_HANDLE ioctl. - */ -#define DRM_PRIME_CAP_IMPORT 0x1 -/** - * DRM_PRIME_CAP_EXPORT - * - * If this bit is set in &DRM_CAP_PRIME, the driver supports exporting PRIME - * buffers via the &DRM_IOCTL_PRIME_HANDLE_TO_FD ioctl. - */ -#define DRM_PRIME_CAP_EXPORT 0x2 -/** - * DRM_CAP_TIMESTAMP_MONOTONIC - * - * If set to 0, the kernel will report timestamps with ``CLOCK_REALTIME`` in - * struct drm_event_vblank. If set to 1, the kernel will report timestamps with - * ``CLOCK_MONOTONIC``. See ``clock_gettime(2)`` for the definition of these - * clocks. - * - * Starting from kernel version 2.6.39, the default value for this capability - * is 1. Starting kernel version 4.15, this capability is always set to 1. - */ -#define DRM_CAP_TIMESTAMP_MONOTONIC 0x6 -/** - * DRM_CAP_ASYNC_PAGE_FLIP - * - * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC. - */ -#define DRM_CAP_ASYNC_PAGE_FLIP 0x7 -/** - * DRM_CAP_CURSOR_WIDTH - * - * The ``CURSOR_WIDTH`` and ``CURSOR_HEIGHT`` capabilities return a valid - * width x height combination for the hardware cursor. The intention is that a - * hardware agnostic userspace can query a cursor plane size to use. - * - * Note that the cross-driver contract is to merely return a valid size; - * drivers are free to attach another meaning on top, eg. i915 returns the - * maximum plane size. - */ -#define DRM_CAP_CURSOR_WIDTH 0x8 -/** - * DRM_CAP_CURSOR_HEIGHT - * - * See &DRM_CAP_CURSOR_WIDTH. - */ -#define DRM_CAP_CURSOR_HEIGHT 0x9 -/** - * DRM_CAP_ADDFB2_MODIFIERS - * - * If set to 1, the driver supports supplying modifiers in the - * &DRM_IOCTL_MODE_ADDFB2 ioctl. - */ -#define DRM_CAP_ADDFB2_MODIFIERS 0x10 -/** - * DRM_CAP_PAGE_FLIP_TARGET - * - * If set to 1, the driver supports the &DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE and - * &DRM_MODE_PAGE_FLIP_TARGET_RELATIVE flags in - * &drm_mode_crtc_page_flip_target.flags for the &DRM_IOCTL_MODE_PAGE_FLIP - * ioctl. - */ -#define DRM_CAP_PAGE_FLIP_TARGET 0x11 -/** - * DRM_CAP_CRTC_IN_VBLANK_EVENT - * - * If set to 1, the kernel supports reporting the CRTC ID in - * &drm_event_vblank.crtc_id for the &DRM_EVENT_VBLANK and - * &DRM_EVENT_FLIP_COMPLETE events. - * - * Starting kernel version 4.12, this capability is always set to 1. - */ -#define DRM_CAP_CRTC_IN_VBLANK_EVENT 0x12 -/** - * DRM_CAP_SYNCOBJ - * - * If set to 1, the driver supports sync objects. See - * Documentation/gpu/drm-mm.rst, section "DRM Sync Objects". - */ -#define DRM_CAP_SYNCOBJ 0x13 -/** - * DRM_CAP_SYNCOBJ_TIMELINE - * - * If set to 1, the driver supports timeline operations on sync objects. See - * Documentation/gpu/drm-mm.rst, section "DRM Sync Objects". - */ -#define DRM_CAP_SYNCOBJ_TIMELINE 0x14 - -/* DRM_IOCTL_GET_CAP ioctl argument type */ -struct drm_get_cap { - __u64 capability; - __u64 value; -}; - -/** - * DRM_CLIENT_CAP_STEREO_3D - * - * If set to 1, the DRM core will expose the stereo 3D capabilities of the - * monitor by advertising the supported 3D layouts in the flags of struct - * drm_mode_modeinfo. See ``DRM_MODE_FLAG_3D_*``. - * - * This capability is always supported for all drivers starting from kernel - * version 3.13. - */ -#define DRM_CLIENT_CAP_STEREO_3D 1 - -/** - * DRM_CLIENT_CAP_UNIVERSAL_PLANES - * - * If set to 1, the DRM core will expose all planes (overlay, primary, and - * cursor) to userspace. - * - * This capability has been introduced in kernel version 3.15. Starting from - * kernel version 3.17, this capability is always supported for all drivers. - */ -#define DRM_CLIENT_CAP_UNIVERSAL_PLANES 2 - -/** - * DRM_CLIENT_CAP_ATOMIC - * - * If set to 1, the DRM core will expose atomic properties to userspace. This - * implicitly enables &DRM_CLIENT_CAP_UNIVERSAL_PLANES and - * &DRM_CLIENT_CAP_ASPECT_RATIO. - * - * If the driver doesn't support atomic mode-setting, enabling this capability - * will fail with -EOPNOTSUPP. - * - * This capability has been introduced in kernel version 4.0. Starting from - * kernel version 4.2, this capability is always supported for atomic-capable - * drivers. - */ -#define DRM_CLIENT_CAP_ATOMIC 3 - -/** - * DRM_CLIENT_CAP_ASPECT_RATIO - * - * If set to 1, the DRM core will provide aspect ratio information in modes. - * See ``DRM_MODE_FLAG_PIC_AR_*``. - * - * This capability is always supported for all drivers starting from kernel - * version 4.18. - */ -#define DRM_CLIENT_CAP_ASPECT_RATIO 4 - -/** - * DRM_CLIENT_CAP_WRITEBACK_CONNECTORS - * - * If set to 1, the DRM core will expose special connectors to be used for - * writing back to memory the scene setup in the commit. The client must enable - * &DRM_CLIENT_CAP_ATOMIC first. - * - * This capability is always supported for atomic-capable drivers starting from - * kernel version 4.19. - */ -#define DRM_CLIENT_CAP_WRITEBACK_CONNECTORS 5 - -/* DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */ -struct drm_set_client_cap { - __u64 capability; - __u64 value; -}; - -#define DRM_RDWR O_RDWR -#define DRM_CLOEXEC O_CLOEXEC -struct drm_prime_handle { - __u32 handle; - - /** Flags.. only applicable for handle->fd */ - __u32 flags; - - /** Returned dmabuf file descriptor */ - __s32 fd; -}; - -struct drm_syncobj_create { - __u32 handle; -#define DRM_SYNCOBJ_CREATE_SIGNALED (1 << 0) - __u32 flags; -}; - -struct drm_syncobj_destroy { - __u32 handle; - __u32 pad; -}; - -#define DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE (1 << 0) -#define DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE (1 << 0) -struct drm_syncobj_handle { - __u32 handle; - __u32 flags; - - __s32 fd; - __u32 pad; -}; - -struct drm_syncobj_transfer { - __u32 src_handle; - __u32 dst_handle; - __u64 src_point; - __u64 dst_point; - __u32 flags; - __u32 pad; -}; - -#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0) -#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1) -#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE (1 << 2) /* wait for time point to become available */ -struct drm_syncobj_wait { - __u64 handles; - /* absolute timeout */ - __s64 timeout_nsec; - __u32 count_handles; - __u32 flags; - __u32 first_signaled; /* only valid when not waiting all */ - __u32 pad; -}; - -struct drm_syncobj_timeline_wait { - __u64 handles; - /* wait on specific timeline point for every handles*/ - __u64 points; - /* absolute timeout */ - __s64 timeout_nsec; - __u32 count_handles; - __u32 flags; - __u32 first_signaled; /* only valid when not waiting all */ - __u32 pad; -}; - - -struct drm_syncobj_array { - __u64 handles; - __u32 count_handles; - __u32 pad; -}; - -#define DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED (1 << 0) /* last available point on timeline syncobj */ -struct drm_syncobj_timeline_array { - __u64 handles; - __u64 points; - __u32 count_handles; - __u32 flags; -}; - - -/* Query current scanout sequence number */ -struct drm_crtc_get_sequence { - __u32 crtc_id; /* requested crtc_id */ - __u32 active; /* return: crtc output is active */ - __u64 sequence; /* return: most recent vblank sequence */ - __s64 sequence_ns; /* return: most recent time of first pixel out */ -}; - -/* Queue event to be delivered at specified sequence. Time stamp marks - * when the first pixel of the refresh cycle leaves the display engine - * for the display - */ -#define DRM_CRTC_SEQUENCE_RELATIVE 0x00000001 /* sequence is relative to current */ -#define DRM_CRTC_SEQUENCE_NEXT_ON_MISS 0x00000002 /* Use next sequence if we've missed */ - -struct drm_crtc_queue_sequence { - __u32 crtc_id; - __u32 flags; - __u64 sequence; /* on input, target sequence. on output, actual sequence */ - __u64 user_data; /* user data passed to event */ -}; - -#if defined(__cplusplus) -} -#endif - -#include "drm_mode.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_IOCTL_BASE 'd' -#define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr) -#define DRM_IOR(nr,type) _IOR(DRM_IOCTL_BASE,nr,type) -#define DRM_IOW(nr,type) _IOW(DRM_IOCTL_BASE,nr,type) -#define DRM_IOWR(nr,type) _IOWR(DRM_IOCTL_BASE,nr,type) - -#define DRM_IOCTL_VERSION DRM_IOWR(0x00, struct drm_version) -#define DRM_IOCTL_GET_UNIQUE DRM_IOWR(0x01, struct drm_unique) -#define DRM_IOCTL_GET_MAGIC DRM_IOR( 0x02, struct drm_auth) -#define DRM_IOCTL_IRQ_BUSID DRM_IOWR(0x03, struct drm_irq_busid) -#define DRM_IOCTL_GET_MAP DRM_IOWR(0x04, struct drm_map) -#define DRM_IOCTL_GET_CLIENT DRM_IOWR(0x05, struct drm_client) -#define DRM_IOCTL_GET_STATS DRM_IOR( 0x06, struct drm_stats) -#define DRM_IOCTL_SET_VERSION DRM_IOWR(0x07, struct drm_set_version) -#define DRM_IOCTL_MODESET_CTL DRM_IOW(0x08, struct drm_modeset_ctl) -#define DRM_IOCTL_GEM_CLOSE DRM_IOW (0x09, struct drm_gem_close) -#define DRM_IOCTL_GEM_FLINK DRM_IOWR(0x0a, struct drm_gem_flink) -#define DRM_IOCTL_GEM_OPEN DRM_IOWR(0x0b, struct drm_gem_open) -#define DRM_IOCTL_GET_CAP DRM_IOWR(0x0c, struct drm_get_cap) -#define DRM_IOCTL_SET_CLIENT_CAP DRM_IOW( 0x0d, struct drm_set_client_cap) - -#define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, struct drm_unique) -#define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, struct drm_auth) -#define DRM_IOCTL_BLOCK DRM_IOWR(0x12, struct drm_block) -#define DRM_IOCTL_UNBLOCK DRM_IOWR(0x13, struct drm_block) -#define DRM_IOCTL_CONTROL DRM_IOW( 0x14, struct drm_control) -#define DRM_IOCTL_ADD_MAP DRM_IOWR(0x15, struct drm_map) -#define DRM_IOCTL_ADD_BUFS DRM_IOWR(0x16, struct drm_buf_desc) -#define DRM_IOCTL_MARK_BUFS DRM_IOW( 0x17, struct drm_buf_desc) -#define DRM_IOCTL_INFO_BUFS DRM_IOWR(0x18, struct drm_buf_info) -#define DRM_IOCTL_MAP_BUFS DRM_IOWR(0x19, struct drm_buf_map) -#define DRM_IOCTL_FREE_BUFS DRM_IOW( 0x1a, struct drm_buf_free) - -#define DRM_IOCTL_RM_MAP DRM_IOW( 0x1b, struct drm_map) - -#define DRM_IOCTL_SET_SAREA_CTX DRM_IOW( 0x1c, struct drm_ctx_priv_map) -#define DRM_IOCTL_GET_SAREA_CTX DRM_IOWR(0x1d, struct drm_ctx_priv_map) - -#define DRM_IOCTL_SET_MASTER DRM_IO(0x1e) -#define DRM_IOCTL_DROP_MASTER DRM_IO(0x1f) - -#define DRM_IOCTL_ADD_CTX DRM_IOWR(0x20, struct drm_ctx) -#define DRM_IOCTL_RM_CTX DRM_IOWR(0x21, struct drm_ctx) -#define DRM_IOCTL_MOD_CTX DRM_IOW( 0x22, struct drm_ctx) -#define DRM_IOCTL_GET_CTX DRM_IOWR(0x23, struct drm_ctx) -#define DRM_IOCTL_SWITCH_CTX DRM_IOW( 0x24, struct drm_ctx) -#define DRM_IOCTL_NEW_CTX DRM_IOW( 0x25, struct drm_ctx) -#define DRM_IOCTL_RES_CTX DRM_IOWR(0x26, struct drm_ctx_res) -#define DRM_IOCTL_ADD_DRAW DRM_IOWR(0x27, struct drm_draw) -#define DRM_IOCTL_RM_DRAW DRM_IOWR(0x28, struct drm_draw) -#define DRM_IOCTL_DMA DRM_IOWR(0x29, struct drm_dma) -#define DRM_IOCTL_LOCK DRM_IOW( 0x2a, struct drm_lock) -#define DRM_IOCTL_UNLOCK DRM_IOW( 0x2b, struct drm_lock) -#define DRM_IOCTL_FINISH DRM_IOW( 0x2c, struct drm_lock) - -#define DRM_IOCTL_PRIME_HANDLE_TO_FD DRM_IOWR(0x2d, struct drm_prime_handle) -#define DRM_IOCTL_PRIME_FD_TO_HANDLE DRM_IOWR(0x2e, struct drm_prime_handle) - -#define DRM_IOCTL_AGP_ACQUIRE DRM_IO( 0x30) -#define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31) -#define DRM_IOCTL_AGP_ENABLE DRM_IOW( 0x32, struct drm_agp_mode) -#define DRM_IOCTL_AGP_INFO DRM_IOR( 0x33, struct drm_agp_info) -#define DRM_IOCTL_AGP_ALLOC DRM_IOWR(0x34, struct drm_agp_buffer) -#define DRM_IOCTL_AGP_FREE DRM_IOW( 0x35, struct drm_agp_buffer) -#define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding) -#define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding) - -#define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather) -#define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather) - -#define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank) - -#define DRM_IOCTL_CRTC_GET_SEQUENCE DRM_IOWR(0x3b, struct drm_crtc_get_sequence) -#define DRM_IOCTL_CRTC_QUEUE_SEQUENCE DRM_IOWR(0x3c, struct drm_crtc_queue_sequence) - -#define DRM_IOCTL_UPDATE_DRAW DRM_IOW(0x3f, struct drm_update_draw) - -#define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res) -#define DRM_IOCTL_MODE_GETCRTC DRM_IOWR(0xA1, struct drm_mode_crtc) -#define DRM_IOCTL_MODE_SETCRTC DRM_IOWR(0xA2, struct drm_mode_crtc) -#define DRM_IOCTL_MODE_CURSOR DRM_IOWR(0xA3, struct drm_mode_cursor) -#define DRM_IOCTL_MODE_GETGAMMA DRM_IOWR(0xA4, struct drm_mode_crtc_lut) -#define DRM_IOCTL_MODE_SETGAMMA DRM_IOWR(0xA5, struct drm_mode_crtc_lut) -#define DRM_IOCTL_MODE_GETENCODER DRM_IOWR(0xA6, struct drm_mode_get_encoder) -#define DRM_IOCTL_MODE_GETCONNECTOR DRM_IOWR(0xA7, struct drm_mode_get_connector) -#define DRM_IOCTL_MODE_ATTACHMODE DRM_IOWR(0xA8, struct drm_mode_mode_cmd) /* deprecated (never worked) */ -#define DRM_IOCTL_MODE_DETACHMODE DRM_IOWR(0xA9, struct drm_mode_mode_cmd) /* deprecated (never worked) */ - -#define DRM_IOCTL_MODE_GETPROPERTY DRM_IOWR(0xAA, struct drm_mode_get_property) -#define DRM_IOCTL_MODE_SETPROPERTY DRM_IOWR(0xAB, struct drm_mode_connector_set_property) -#define DRM_IOCTL_MODE_GETPROPBLOB DRM_IOWR(0xAC, struct drm_mode_get_blob) -#define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd) -#define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd) -#define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int) -#define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOWR(0xB0, struct drm_mode_crtc_page_flip) -#define DRM_IOCTL_MODE_DIRTYFB DRM_IOWR(0xB1, struct drm_mode_fb_dirty_cmd) - -#define DRM_IOCTL_MODE_CREATE_DUMB DRM_IOWR(0xB2, struct drm_mode_create_dumb) -#define DRM_IOCTL_MODE_MAP_DUMB DRM_IOWR(0xB3, struct drm_mode_map_dumb) -#define DRM_IOCTL_MODE_DESTROY_DUMB DRM_IOWR(0xB4, struct drm_mode_destroy_dumb) -#define DRM_IOCTL_MODE_GETPLANERESOURCES DRM_IOWR(0xB5, struct drm_mode_get_plane_res) -#define DRM_IOCTL_MODE_GETPLANE DRM_IOWR(0xB6, struct drm_mode_get_plane) -#define DRM_IOCTL_MODE_SETPLANE DRM_IOWR(0xB7, struct drm_mode_set_plane) -#define DRM_IOCTL_MODE_ADDFB2 DRM_IOWR(0xB8, struct drm_mode_fb_cmd2) -#define DRM_IOCTL_MODE_OBJ_GETPROPERTIES DRM_IOWR(0xB9, struct drm_mode_obj_get_properties) -#define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct drm_mode_obj_set_property) -#define DRM_IOCTL_MODE_CURSOR2 DRM_IOWR(0xBB, struct drm_mode_cursor2) -#define DRM_IOCTL_MODE_ATOMIC DRM_IOWR(0xBC, struct drm_mode_atomic) -#define DRM_IOCTL_MODE_CREATEPROPBLOB DRM_IOWR(0xBD, struct drm_mode_create_blob) -#define DRM_IOCTL_MODE_DESTROYPROPBLOB DRM_IOWR(0xBE, struct drm_mode_destroy_blob) - -#define DRM_IOCTL_SYNCOBJ_CREATE DRM_IOWR(0xBF, struct drm_syncobj_create) -#define DRM_IOCTL_SYNCOBJ_DESTROY DRM_IOWR(0xC0, struct drm_syncobj_destroy) -#define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD DRM_IOWR(0xC1, struct drm_syncobj_handle) -#define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE DRM_IOWR(0xC2, struct drm_syncobj_handle) -#define DRM_IOCTL_SYNCOBJ_WAIT DRM_IOWR(0xC3, struct drm_syncobj_wait) -#define DRM_IOCTL_SYNCOBJ_RESET DRM_IOWR(0xC4, struct drm_syncobj_array) -#define DRM_IOCTL_SYNCOBJ_SIGNAL DRM_IOWR(0xC5, struct drm_syncobj_array) - -#define DRM_IOCTL_MODE_CREATE_LEASE DRM_IOWR(0xC6, struct drm_mode_create_lease) -#define DRM_IOCTL_MODE_LIST_LESSEES DRM_IOWR(0xC7, struct drm_mode_list_lessees) -#define DRM_IOCTL_MODE_GET_LEASE DRM_IOWR(0xC8, struct drm_mode_get_lease) -#define DRM_IOCTL_MODE_REVOKE_LEASE DRM_IOWR(0xC9, struct drm_mode_revoke_lease) - -#define DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT DRM_IOWR(0xCA, struct drm_syncobj_timeline_wait) -#define DRM_IOCTL_SYNCOBJ_QUERY DRM_IOWR(0xCB, struct drm_syncobj_timeline_array) -#define DRM_IOCTL_SYNCOBJ_TRANSFER DRM_IOWR(0xCC, struct drm_syncobj_transfer) -#define DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL DRM_IOWR(0xCD, struct drm_syncobj_timeline_array) - -#define DRM_IOCTL_MODE_GETFB2 DRM_IOWR(0xCE, struct drm_mode_fb_cmd2) - -/* - * Device specific ioctls should only be in their respective headers - * The device specific ioctl range is from 0x40 to 0x9f. - * Generic IOCTLS restart at 0xA0. - * - * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and - * drmCommandReadWrite(). - */ -#define DRM_COMMAND_BASE 0x40 -#define DRM_COMMAND_END 0xA0 - -/* - * Header for events written back to userspace on the drm fd. The - * type defines the type of event, the length specifies the total - * length of the event (including the header), and user_data is - * typically a 64 bit value passed with the ioctl that triggered the - * event. A read on the drm fd will always only return complete - * events, that is, if for example the read buffer is 100 bytes, and - * there are two 64 byte events pending, only one will be returned. - * - * Event types 0 - 0x7fffffff are generic drm events, 0x80000000 and - * up are chipset specific. - */ -struct drm_event { - __u32 type; - __u32 length; -}; - -#define DRM_EVENT_VBLANK 0x01 -#define DRM_EVENT_FLIP_COMPLETE 0x02 -#define DRM_EVENT_CRTC_SEQUENCE 0x03 - -struct drm_event_vblank { - struct drm_event base; - __u64 user_data; - __u32 tv_sec; - __u32 tv_usec; - __u32 sequence; - __u32 crtc_id; /* 0 on older kernels that do not support this */ -}; - -/* Event delivered at sequence. Time stamp marks when the first pixel - * of the refresh cycle leaves the display engine for the display - */ -struct drm_event_crtc_sequence { - struct drm_event base; - __u64 user_data; - __s64 time_ns; - __u64 sequence; -}; - -/* typedef area */ -typedef struct drm_clip_rect drm_clip_rect_t; -typedef struct drm_drawable_info drm_drawable_info_t; -typedef struct drm_tex_region drm_tex_region_t; -typedef struct drm_hw_lock drm_hw_lock_t; -typedef struct drm_version drm_version_t; -typedef struct drm_unique drm_unique_t; -typedef struct drm_list drm_list_t; -typedef struct drm_block drm_block_t; -typedef struct drm_control drm_control_t; -typedef enum drm_map_type drm_map_type_t; -typedef enum drm_map_flags drm_map_flags_t; -typedef struct drm_ctx_priv_map drm_ctx_priv_map_t; -typedef struct drm_map drm_map_t; -typedef struct drm_client drm_client_t; -typedef enum drm_stat_type drm_stat_type_t; -typedef struct drm_stats drm_stats_t; -typedef enum drm_lock_flags drm_lock_flags_t; -typedef struct drm_lock drm_lock_t; -typedef enum drm_dma_flags drm_dma_flags_t; -typedef struct drm_buf_desc drm_buf_desc_t; -typedef struct drm_buf_info drm_buf_info_t; -typedef struct drm_buf_free drm_buf_free_t; -typedef struct drm_buf_pub drm_buf_pub_t; -typedef struct drm_buf_map drm_buf_map_t; -typedef struct drm_dma drm_dma_t; -typedef union drm_wait_vblank drm_wait_vblank_t; -typedef struct drm_agp_mode drm_agp_mode_t; -typedef enum drm_ctx_flags drm_ctx_flags_t; -typedef struct drm_ctx drm_ctx_t; -typedef struct drm_ctx_res drm_ctx_res_t; -typedef struct drm_draw drm_draw_t; -typedef struct drm_update_draw drm_update_draw_t; -typedef struct drm_auth drm_auth_t; -typedef struct drm_irq_busid drm_irq_busid_t; -typedef enum drm_vblank_seq_type drm_vblank_seq_type_t; - -typedef struct drm_agp_buffer drm_agp_buffer_t; -typedef struct drm_agp_binding drm_agp_binding_t; -typedef struct drm_agp_info drm_agp_info_t; -typedef struct drm_scatter_gather drm_scatter_gather_t; -typedef struct drm_set_version drm_set_version_t; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/libdrm/drm_fourcc.h b/prebuilts/x86_64/include/libdrm/drm_fourcc.h deleted file mode 100644 index 957c7be..0000000 --- a/prebuilts/x86_64/include/libdrm/drm_fourcc.h +++ /dev/null @@ -1,1365 +0,0 @@ -/* - * Copyright 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef DRM_FOURCC_H -#define DRM_FOURCC_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/** - * DOC: overview - * - * In the DRM subsystem, framebuffer pixel formats are described using the - * fourcc codes defined in `include/uapi/drm/drm_fourcc.h`. In addition to the - * fourcc code, a Format Modifier may optionally be provided, in order to - * further describe the buffer's format - for example tiling or compression. - * - * Format Modifiers - * ---------------- - * - * Format modifiers are used in conjunction with a fourcc code, forming a - * unique fourcc:modifier pair. This format:modifier pair must fully define the - * format and data layout of the buffer, and should be the only way to describe - * that particular buffer. - * - * Having multiple fourcc:modifier pairs which describe the same layout should - * be avoided, as such aliases run the risk of different drivers exposing - * different names for the same data format, forcing userspace to understand - * that they are aliases. - * - * Format modifiers may change any property of the buffer, including the number - * of planes and/or the required allocation size. Format modifiers are - * vendor-namespaced, and as such the relationship between a fourcc code and a - * modifier is specific to the modifer being used. For example, some modifiers - * may preserve meaning - such as number of planes - from the fourcc code, - * whereas others may not. - * - * Modifiers must uniquely encode buffer layout. In other words, a buffer must - * match only a single modifier. A modifier must not be a subset of layouts of - * another modifier. For instance, it's incorrect to encode pitch alignment in - * a modifier: a buffer may match a 64-pixel aligned modifier and a 32-pixel - * aligned modifier. That said, modifiers can have implicit minimal - * requirements. - * - * For modifiers where the combination of fourcc code and modifier can alias, - * a canonical pair needs to be defined and used by all drivers. Preferred - * combinations are also encouraged where all combinations might lead to - * confusion and unnecessarily reduced interoperability. An example for the - * latter is AFBC, where the ABGR layouts are preferred over ARGB layouts. - * - * There are two kinds of modifier users: - * - * - Kernel and user-space drivers: for drivers it's important that modifiers - * don't alias, otherwise two drivers might support the same format but use - * different aliases, preventing them from sharing buffers in an efficient - * format. - * - Higher-level programs interfacing with KMS/GBM/EGL/Vulkan/etc: these users - * see modifiers as opaque tokens they can check for equality and intersect. - * These users musn't need to know to reason about the modifier value - * (i.e. they are not expected to extract information out of the modifier). - * - * Vendors should document their modifier usage in as much detail as - * possible, to ensure maximum compatibility across devices, drivers and - * applications. - * - * The authoritative list of format modifier codes is found in - * `include/uapi/drm/drm_fourcc.h` - */ - -#define fourcc_code(a, b, c, d) ((__u32)(a) | ((__u32)(b) << 8) | \ - ((__u32)(c) << 16) | ((__u32)(d) << 24)) - -#define DRM_FORMAT_BIG_ENDIAN (1U<<31) /* format is big endian instead of little endian */ - -/* Reserve 0 for the invalid format specifier */ -#define DRM_FORMAT_INVALID 0 - -/* color index */ -#define DRM_FORMAT_C8 fourcc_code('C', '8', ' ', ' ') /* [7:0] C */ - -/* 8 bpp Red */ -#define DRM_FORMAT_R8 fourcc_code('R', '8', ' ', ' ') /* [7:0] R */ - -/* 16 bpp Red */ -#define DRM_FORMAT_R16 fourcc_code('R', '1', '6', ' ') /* [15:0] R little endian */ - -/* 16 bpp RG */ -#define DRM_FORMAT_RG88 fourcc_code('R', 'G', '8', '8') /* [15:0] R:G 8:8 little endian */ -#define DRM_FORMAT_GR88 fourcc_code('G', 'R', '8', '8') /* [15:0] G:R 8:8 little endian */ - -/* 32 bpp RG */ -#define DRM_FORMAT_RG1616 fourcc_code('R', 'G', '3', '2') /* [31:0] R:G 16:16 little endian */ -#define DRM_FORMAT_GR1616 fourcc_code('G', 'R', '3', '2') /* [31:0] G:R 16:16 little endian */ - -/* 8 bpp RGB */ -#define DRM_FORMAT_RGB332 fourcc_code('R', 'G', 'B', '8') /* [7:0] R:G:B 3:3:2 */ -#define DRM_FORMAT_BGR233 fourcc_code('B', 'G', 'R', '8') /* [7:0] B:G:R 2:3:3 */ - -/* 16 bpp RGB */ -#define DRM_FORMAT_XRGB4444 fourcc_code('X', 'R', '1', '2') /* [15:0] x:R:G:B 4:4:4:4 little endian */ -#define DRM_FORMAT_XBGR4444 fourcc_code('X', 'B', '1', '2') /* [15:0] x:B:G:R 4:4:4:4 little endian */ -#define DRM_FORMAT_RGBX4444 fourcc_code('R', 'X', '1', '2') /* [15:0] R:G:B:x 4:4:4:4 little endian */ -#define DRM_FORMAT_BGRX4444 fourcc_code('B', 'X', '1', '2') /* [15:0] B:G:R:x 4:4:4:4 little endian */ - -#define DRM_FORMAT_ARGB4444 fourcc_code('A', 'R', '1', '2') /* [15:0] A:R:G:B 4:4:4:4 little endian */ -#define DRM_FORMAT_ABGR4444 fourcc_code('A', 'B', '1', '2') /* [15:0] A:B:G:R 4:4:4:4 little endian */ -#define DRM_FORMAT_RGBA4444 fourcc_code('R', 'A', '1', '2') /* [15:0] R:G:B:A 4:4:4:4 little endian */ -#define DRM_FORMAT_BGRA4444 fourcc_code('B', 'A', '1', '2') /* [15:0] B:G:R:A 4:4:4:4 little endian */ - -#define DRM_FORMAT_XRGB1555 fourcc_code('X', 'R', '1', '5') /* [15:0] x:R:G:B 1:5:5:5 little endian */ -#define DRM_FORMAT_XBGR1555 fourcc_code('X', 'B', '1', '5') /* [15:0] x:B:G:R 1:5:5:5 little endian */ -#define DRM_FORMAT_RGBX5551 fourcc_code('R', 'X', '1', '5') /* [15:0] R:G:B:x 5:5:5:1 little endian */ -#define DRM_FORMAT_BGRX5551 fourcc_code('B', 'X', '1', '5') /* [15:0] B:G:R:x 5:5:5:1 little endian */ - -#define DRM_FORMAT_ARGB1555 fourcc_code('A', 'R', '1', '5') /* [15:0] A:R:G:B 1:5:5:5 little endian */ -#define DRM_FORMAT_ABGR1555 fourcc_code('A', 'B', '1', '5') /* [15:0] A:B:G:R 1:5:5:5 little endian */ -#define DRM_FORMAT_RGBA5551 fourcc_code('R', 'A', '1', '5') /* [15:0] R:G:B:A 5:5:5:1 little endian */ -#define DRM_FORMAT_BGRA5551 fourcc_code('B', 'A', '1', '5') /* [15:0] B:G:R:A 5:5:5:1 little endian */ - -#define DRM_FORMAT_RGB565 fourcc_code('R', 'G', '1', '6') /* [15:0] R:G:B 5:6:5 little endian */ -#define DRM_FORMAT_BGR565 fourcc_code('B', 'G', '1', '6') /* [15:0] B:G:R 5:6:5 little endian */ - -/* 24 bpp RGB */ -#define DRM_FORMAT_RGB888 fourcc_code('R', 'G', '2', '4') /* [23:0] R:G:B little endian */ -#define DRM_FORMAT_BGR888 fourcc_code('B', 'G', '2', '4') /* [23:0] B:G:R little endian */ - -/* 32 bpp RGB */ -#define DRM_FORMAT_XRGB8888 fourcc_code('X', 'R', '2', '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */ -#define DRM_FORMAT_XBGR8888 fourcc_code('X', 'B', '2', '4') /* [31:0] x:B:G:R 8:8:8:8 little endian */ -#define DRM_FORMAT_RGBX8888 fourcc_code('R', 'X', '2', '4') /* [31:0] R:G:B:x 8:8:8:8 little endian */ -#define DRM_FORMAT_BGRX8888 fourcc_code('B', 'X', '2', '4') /* [31:0] B:G:R:x 8:8:8:8 little endian */ - -#define DRM_FORMAT_ARGB8888 fourcc_code('A', 'R', '2', '4') /* [31:0] A:R:G:B 8:8:8:8 little endian */ -#define DRM_FORMAT_ABGR8888 fourcc_code('A', 'B', '2', '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */ -#define DRM_FORMAT_RGBA8888 fourcc_code('R', 'A', '2', '4') /* [31:0] R:G:B:A 8:8:8:8 little endian */ -#define DRM_FORMAT_BGRA8888 fourcc_code('B', 'A', '2', '4') /* [31:0] B:G:R:A 8:8:8:8 little endian */ - -#define DRM_FORMAT_XRGB2101010 fourcc_code('X', 'R', '3', '0') /* [31:0] x:R:G:B 2:10:10:10 little endian */ -#define DRM_FORMAT_XBGR2101010 fourcc_code('X', 'B', '3', '0') /* [31:0] x:B:G:R 2:10:10:10 little endian */ -#define DRM_FORMAT_RGBX1010102 fourcc_code('R', 'X', '3', '0') /* [31:0] R:G:B:x 10:10:10:2 little endian */ -#define DRM_FORMAT_BGRX1010102 fourcc_code('B', 'X', '3', '0') /* [31:0] B:G:R:x 10:10:10:2 little endian */ - -#define DRM_FORMAT_ARGB2101010 fourcc_code('A', 'R', '3', '0') /* [31:0] A:R:G:B 2:10:10:10 little endian */ -#define DRM_FORMAT_ABGR2101010 fourcc_code('A', 'B', '3', '0') /* [31:0] A:B:G:R 2:10:10:10 little endian */ -#define DRM_FORMAT_RGBA1010102 fourcc_code('R', 'A', '3', '0') /* [31:0] R:G:B:A 10:10:10:2 little endian */ -#define DRM_FORMAT_BGRA1010102 fourcc_code('B', 'A', '3', '0') /* [31:0] B:G:R:A 10:10:10:2 little endian */ - -/* 64 bpp RGB */ -#define DRM_FORMAT_XRGB16161616 fourcc_code('X', 'R', '4', '8') /* [63:0] x:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_XBGR16161616 fourcc_code('X', 'B', '4', '8') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define DRM_FORMAT_ARGB16161616 fourcc_code('A', 'R', '4', '8') /* [63:0] A:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_ABGR16161616 fourcc_code('A', 'B', '4', '8') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* - * Floating point 64bpp RGB - * IEEE 754-2008 binary16 half-precision float - * [15:0] sign:exponent:mantissa 1:5:10 - */ -#define DRM_FORMAT_XRGB16161616F fourcc_code('X', 'R', '4', 'H') /* [63:0] x:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_XBGR16161616F fourcc_code('X', 'B', '4', 'H') /* [63:0] x:B:G:R 16:16:16:16 little endian */ - -#define DRM_FORMAT_ARGB16161616F fourcc_code('A', 'R', '4', 'H') /* [63:0] A:R:G:B 16:16:16:16 little endian */ -#define DRM_FORMAT_ABGR16161616F fourcc_code('A', 'B', '4', 'H') /* [63:0] A:B:G:R 16:16:16:16 little endian */ - -/* - * RGBA format with 10-bit components packed in 64-bit per pixel, with 6 bits - * of unused padding per component: - */ -#define DRM_FORMAT_AXBXGXRX106106106106 fourcc_code('A', 'B', '1', '0') /* [63:0] A:x:B:x:G:x:R:x 10:6:10:6:10:6:10:6 little endian */ - -/* packed YCbCr */ -#define DRM_FORMAT_YUYV fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */ -#define DRM_FORMAT_YVYU fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */ -#define DRM_FORMAT_UYVY fourcc_code('U', 'Y', 'V', 'Y') /* [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian */ -#define DRM_FORMAT_VYUY fourcc_code('V', 'Y', 'U', 'Y') /* [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian */ - -#define DRM_FORMAT_AYUV fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */ -#define DRM_FORMAT_XYUV8888 fourcc_code('X', 'Y', 'U', 'V') /* [31:0] X:Y:Cb:Cr 8:8:8:8 little endian */ -#define DRM_FORMAT_VUY888 fourcc_code('V', 'U', '2', '4') /* [23:0] Cr:Cb:Y 8:8:8 little endian */ -#define DRM_FORMAT_VUY101010 fourcc_code('V', 'U', '3', '0') /* Y followed by U then V, 10:10:10. Non-linear modifier only */ - -/* - * packed Y2xx indicate for each component, xx valid data occupy msb - * 16-xx padding occupy lsb - */ -#define DRM_FORMAT_Y210 fourcc_code('Y', '2', '1', '0') /* [63:0] Cr0:0:Y1:0:Cb0:0:Y0:0 10:6:10:6:10:6:10:6 little endian per 2 Y pixels */ -#define DRM_FORMAT_Y212 fourcc_code('Y', '2', '1', '2') /* [63:0] Cr0:0:Y1:0:Cb0:0:Y0:0 12:4:12:4:12:4:12:4 little endian per 2 Y pixels */ -#define DRM_FORMAT_Y216 fourcc_code('Y', '2', '1', '6') /* [63:0] Cr0:Y1:Cb0:Y0 16:16:16:16 little endian per 2 Y pixels */ - -/* - * packed Y4xx indicate for each component, xx valid data occupy msb - * 16-xx padding occupy lsb except Y410 - */ -#define DRM_FORMAT_Y410 fourcc_code('Y', '4', '1', '0') /* [31:0] A:Cr:Y:Cb 2:10:10:10 little endian */ -#define DRM_FORMAT_Y412 fourcc_code('Y', '4', '1', '2') /* [63:0] A:0:Cr:0:Y:0:Cb:0 12:4:12:4:12:4:12:4 little endian */ -#define DRM_FORMAT_Y416 fourcc_code('Y', '4', '1', '6') /* [63:0] A:Cr:Y:Cb 16:16:16:16 little endian */ - -#define DRM_FORMAT_XVYU2101010 fourcc_code('X', 'V', '3', '0') /* [31:0] X:Cr:Y:Cb 2:10:10:10 little endian */ -#define DRM_FORMAT_XVYU12_16161616 fourcc_code('X', 'V', '3', '6') /* [63:0] X:0:Cr:0:Y:0:Cb:0 12:4:12:4:12:4:12:4 little endian */ -#define DRM_FORMAT_XVYU16161616 fourcc_code('X', 'V', '4', '8') /* [63:0] X:Cr:Y:Cb 16:16:16:16 little endian */ - -/* - * packed YCbCr420 2x2 tiled formats - * first 64 bits will contain Y,Cb,Cr components for a 2x2 tile - */ -/* [63:0] A3:A2:Y3:0:Cr0:0:Y2:0:A1:A0:Y1:0:Cb0:0:Y0:0 1:1:8:2:8:2:8:2:1:1:8:2:8:2:8:2 little endian */ -#define DRM_FORMAT_Y0L0 fourcc_code('Y', '0', 'L', '0') -/* [63:0] X3:X2:Y3:0:Cr0:0:Y2:0:X1:X0:Y1:0:Cb0:0:Y0:0 1:1:8:2:8:2:8:2:1:1:8:2:8:2:8:2 little endian */ -#define DRM_FORMAT_X0L0 fourcc_code('X', '0', 'L', '0') - -/* [63:0] A3:A2:Y3:Cr0:Y2:A1:A0:Y1:Cb0:Y0 1:1:10:10:10:1:1:10:10:10 little endian */ -#define DRM_FORMAT_Y0L2 fourcc_code('Y', '0', 'L', '2') -/* [63:0] X3:X2:Y3:Cr0:Y2:X1:X0:Y1:Cb0:Y0 1:1:10:10:10:1:1:10:10:10 little endian */ -#define DRM_FORMAT_X0L2 fourcc_code('X', '0', 'L', '2') - -/* - * 1-plane YUV 4:2:0 - * In these formats, the component ordering is specified (Y, followed by U - * then V), but the exact Linear layout is undefined. - * These formats can only be used with a non-Linear modifier. - */ -#define DRM_FORMAT_YUV420_8BIT fourcc_code('Y', 'U', '0', '8') -#define DRM_FORMAT_YUV420_10BIT fourcc_code('Y', 'U', '1', '0') - -/* - * 2 plane RGB + A - * index 0 = RGB plane, same format as the corresponding non _A8 format has - * index 1 = A plane, [7:0] A - */ -#define DRM_FORMAT_XRGB8888_A8 fourcc_code('X', 'R', 'A', '8') -#define DRM_FORMAT_XBGR8888_A8 fourcc_code('X', 'B', 'A', '8') -#define DRM_FORMAT_RGBX8888_A8 fourcc_code('R', 'X', 'A', '8') -#define DRM_FORMAT_BGRX8888_A8 fourcc_code('B', 'X', 'A', '8') -#define DRM_FORMAT_RGB888_A8 fourcc_code('R', '8', 'A', '8') -#define DRM_FORMAT_BGR888_A8 fourcc_code('B', '8', 'A', '8') -#define DRM_FORMAT_RGB565_A8 fourcc_code('R', '5', 'A', '8') -#define DRM_FORMAT_BGR565_A8 fourcc_code('B', '5', 'A', '8') - -/* - * 2 plane YCbCr - * index 0 = Y plane, [7:0] Y - * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian - * or - * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian - */ -#define DRM_FORMAT_NV12 fourcc_code('N', 'V', '1', '2') /* 2x2 subsampled Cr:Cb plane */ -#define DRM_FORMAT_NV21 fourcc_code('N', 'V', '2', '1') /* 2x2 subsampled Cb:Cr plane */ -#define DRM_FORMAT_NV16 fourcc_code('N', 'V', '1', '6') /* 2x1 subsampled Cr:Cb plane */ -#define DRM_FORMAT_NV61 fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */ -#define DRM_FORMAT_NV24 fourcc_code('N', 'V', '2', '4') /* non-subsampled Cr:Cb plane */ -#define DRM_FORMAT_NV42 fourcc_code('N', 'V', '4', '2') /* non-subsampled Cb:Cr plane */ -/* - * 2 plane YCbCr - * index 0 = Y plane, [39:0] Y3:Y2:Y1:Y0 little endian - * index 1 = Cr:Cb plane, [39:0] Cr1:Cb1:Cr0:Cb0 little endian - */ -#define DRM_FORMAT_NV15 fourcc_code('N', 'V', '1', '5') /* 2x2 subsampled Cr:Cb plane */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y:x [10:6] little endian - * index 1 = Cr:Cb plane, [31:0] Cr:x:Cb:x [10:6:10:6] little endian - */ -#define DRM_FORMAT_P210 fourcc_code('P', '2', '1', '0') /* 2x1 subsampled Cr:Cb plane, 10 bit per channel */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y:x [10:6] little endian - * index 1 = Cr:Cb plane, [31:0] Cr:x:Cb:x [10:6:10:6] little endian - */ -#define DRM_FORMAT_P010 fourcc_code('P', '0', '1', '0') /* 2x2 subsampled Cr:Cb plane 10 bits per channel */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y:x [12:4] little endian - * index 1 = Cr:Cb plane, [31:0] Cr:x:Cb:x [12:4:12:4] little endian - */ -#define DRM_FORMAT_P012 fourcc_code('P', '0', '1', '2') /* 2x2 subsampled Cr:Cb plane 12 bits per channel */ - -/* - * 2 plane YCbCr MSB aligned - * index 0 = Y plane, [15:0] Y little endian - * index 1 = Cr:Cb plane, [31:0] Cr:Cb [16:16] little endian - */ -#define DRM_FORMAT_P016 fourcc_code('P', '0', '1', '6') /* 2x2 subsampled Cr:Cb plane 16 bits per channel */ - -/* 3 plane non-subsampled (444) YCbCr - * 16 bits per component, but only 10 bits are used and 6 bits are padded - * index 0: Y plane, [15:0] Y:x [10:6] little endian - * index 1: Cb plane, [15:0] Cb:x [10:6] little endian - * index 2: Cr plane, [15:0] Cr:x [10:6] little endian - */ -#define DRM_FORMAT_Q410 fourcc_code('Q', '4', '1', '0') - -/* 3 plane non-subsampled (444) YCrCb - * 16 bits per component, but only 10 bits are used and 6 bits are padded - * index 0: Y plane, [15:0] Y:x [10:6] little endian - * index 1: Cr plane, [15:0] Cr:x [10:6] little endian - * index 2: Cb plane, [15:0] Cb:x [10:6] little endian - */ -#define DRM_FORMAT_Q401 fourcc_code('Q', '4', '0', '1') - -/* - * 3 plane YCbCr - * index 0: Y plane, [7:0] Y - * index 1: Cb plane, [7:0] Cb - * index 2: Cr plane, [7:0] Cr - * or - * index 1: Cr plane, [7:0] Cr - * index 2: Cb plane, [7:0] Cb - */ -#define DRM_FORMAT_YUV410 fourcc_code('Y', 'U', 'V', '9') /* 4x4 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU410 fourcc_code('Y', 'V', 'U', '9') /* 4x4 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV411 fourcc_code('Y', 'U', '1', '1') /* 4x1 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU411 fourcc_code('Y', 'V', '1', '1') /* 4x1 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV420 fourcc_code('Y', 'U', '1', '2') /* 2x2 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU420 fourcc_code('Y', 'V', '1', '2') /* 2x2 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV422 fourcc_code('Y', 'U', '1', '6') /* 2x1 subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU422 fourcc_code('Y', 'V', '1', '6') /* 2x1 subsampled Cr (1) and Cb (2) planes */ -#define DRM_FORMAT_YUV444 fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */ -#define DRM_FORMAT_YVU444 fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */ - - -/* - * Format Modifiers: - * - * Format modifiers describe, typically, a re-ordering or modification - * of the data in a plane of an FB. This can be used to express tiled/ - * swizzled formats, or compression, or a combination of the two. - * - * The upper 8 bits of the format modifier are a vendor-id as assigned - * below. The lower 56 bits are assigned as vendor sees fit. - */ - -/* Vendor Ids: */ -#define DRM_FORMAT_MOD_VENDOR_NONE 0 -#define DRM_FORMAT_MOD_VENDOR_INTEL 0x01 -#define DRM_FORMAT_MOD_VENDOR_AMD 0x02 -#define DRM_FORMAT_MOD_VENDOR_NVIDIA 0x03 -#define DRM_FORMAT_MOD_VENDOR_SAMSUNG 0x04 -#define DRM_FORMAT_MOD_VENDOR_QCOM 0x05 -#define DRM_FORMAT_MOD_VENDOR_VIVANTE 0x06 -#define DRM_FORMAT_MOD_VENDOR_BROADCOM 0x07 -#define DRM_FORMAT_MOD_VENDOR_ARM 0x08 -#define DRM_FORMAT_MOD_VENDOR_ALLWINNER 0x09 -#define DRM_FORMAT_MOD_VENDOR_AMLOGIC 0x0a - -/* add more to the end as needed */ - -#define DRM_FORMAT_RESERVED ((1ULL << 56) - 1) - -#define fourcc_mod_code(vendor, val) \ - ((((__u64)DRM_FORMAT_MOD_VENDOR_## vendor) << 56) | ((val) & 0x00ffffffffffffffULL)) - -/* - * Format Modifier tokens: - * - * When adding a new token please document the layout with a code comment, - * similar to the fourcc codes above. drm_fourcc.h is considered the - * authoritative source for all of these. - * - * Generic modifier names: - * - * DRM_FORMAT_MOD_GENERIC_* definitions are used to provide vendor-neutral names - * for layouts which are common across multiple vendors. To preserve - * compatibility, in cases where a vendor-specific definition already exists and - * a generic name for it is desired, the common name is a purely symbolic alias - * and must use the same numerical value as the original definition. - * - * Note that generic names should only be used for modifiers which describe - * generic layouts (such as pixel re-ordering), which may have - * independently-developed support across multiple vendors. - * - * In future cases where a generic layout is identified before merging with a - * vendor-specific modifier, a new 'GENERIC' vendor or modifier using vendor - * 'NONE' could be considered. This should only be for obvious, exceptional - * cases to avoid polluting the 'GENERIC' namespace with modifiers which only - * apply to a single vendor. - * - * Generic names should not be used for cases where multiple hardware vendors - * have implementations of the same standardised compression scheme (such as - * AFBC). In those cases, all implementations should use the same format - * modifier(s), reflecting the vendor of the standard. - */ - -#define DRM_FORMAT_MOD_GENERIC_16_16_TILE DRM_FORMAT_MOD_SAMSUNG_16_16_TILE - -/* - * Invalid Modifier - * - * This modifier can be used as a sentinel to terminate the format modifiers - * list, or to initialize a variable with an invalid modifier. It might also be - * used to report an error back to userspace for certain APIs. - */ -#define DRM_FORMAT_MOD_INVALID fourcc_mod_code(NONE, DRM_FORMAT_RESERVED) - -/* - * Linear Layout - * - * Just plain linear layout. Note that this is different from no specifying any - * modifier (e.g. not setting DRM_MODE_FB_MODIFIERS in the DRM_ADDFB2 ioctl), - * which tells the driver to also take driver-internal information into account - * and so might actually result in a tiled framebuffer. - */ -#define DRM_FORMAT_MOD_LINEAR fourcc_mod_code(NONE, 0) - -/* - * Deprecated: use DRM_FORMAT_MOD_LINEAR instead - * - * The "none" format modifier doesn't actually mean that the modifier is - * implicit, instead it means that the layout is linear. Whether modifiers are - * used is out-of-band information carried in an API-specific way (e.g. in a - * flag for drm_mode_fb_cmd2). - */ -#define DRM_FORMAT_MOD_NONE 0 - -/* Intel framebuffer modifiers */ - -/* - * Intel X-tiling layout - * - * This is a tiled layout using 4Kb tiles (except on gen2 where the tiles 2Kb) - * in row-major layout. Within the tile bytes are laid out row-major, with - * a platform-dependent stride. On top of that the memory can apply - * platform-depending swizzling of some higher address bits into bit6. - * - * Note that this layout is only accurate on intel gen 8+ or valleyview chipsets. - * On earlier platforms the is highly platforms specific and not useful for - * cross-driver sharing. It exists since on a given platform it does uniquely - * identify the layout in a simple way for i915-specific userspace, which - * facilitated conversion of userspace to modifiers. Additionally the exact - * format on some really old platforms is not known. - */ -#define I915_FORMAT_MOD_X_TILED fourcc_mod_code(INTEL, 1) - -/* - * Intel Y-tiling layout - * - * This is a tiled layout using 4Kb tiles (except on gen2 where the tiles 2Kb) - * in row-major layout. Within the tile bytes are laid out in OWORD (16 bytes) - * chunks column-major, with a platform-dependent height. On top of that the - * memory can apply platform-depending swizzling of some higher address bits - * into bit6. - * - * Note that this layout is only accurate on intel gen 8+ or valleyview chipsets. - * On earlier platforms the is highly platforms specific and not useful for - * cross-driver sharing. It exists since on a given platform it does uniquely - * identify the layout in a simple way for i915-specific userspace, which - * facilitated conversion of userspace to modifiers. Additionally the exact - * format on some really old platforms is not known. - */ -#define I915_FORMAT_MOD_Y_TILED fourcc_mod_code(INTEL, 2) - -/* - * Intel Yf-tiling layout - * - * This is a tiled layout using 4Kb tiles in row-major layout. - * Within the tile pixels are laid out in 16 256 byte units / sub-tiles which - * are arranged in four groups (two wide, two high) with column-major layout. - * Each group therefore consits out of four 256 byte units, which are also laid - * out as 2x2 column-major. - * 256 byte units are made out of four 64 byte blocks of pixels, producing - * either a square block or a 2:1 unit. - * 64 byte blocks of pixels contain four pixel rows of 16 bytes, where the width - * in pixel depends on the pixel depth. - */ -#define I915_FORMAT_MOD_Yf_TILED fourcc_mod_code(INTEL, 3) - -/* - * Intel color control surface (CCS) for render compression - * - * The framebuffer format must be one of the 8:8:8:8 RGB formats. - * The main surface will be plane index 0 and must be Y/Yf-tiled, - * the CCS will be plane index 1. - * - * Each CCS tile matches a 1024x512 pixel area of the main surface. - * To match certain aspects of the 3D hardware the CCS is - * considered to be made up of normal 128Bx32 Y tiles, Thus - * the CCS pitch must be specified in multiples of 128 bytes. - * - * In reality the CCS tile appears to be a 64Bx64 Y tile, composed - * of QWORD (8 bytes) chunks instead of OWORD (16 bytes) chunks. - * But that fact is not relevant unless the memory is accessed - * directly. - */ -#define I915_FORMAT_MOD_Y_TILED_CCS fourcc_mod_code(INTEL, 4) -#define I915_FORMAT_MOD_Yf_TILED_CCS fourcc_mod_code(INTEL, 5) - -/* - * Intel color control surfaces (CCS) for Gen-12 render compression. - * - * The main surface is Y-tiled and at plane index 0, the CCS is linear and - * at index 1. A 64B CCS cache line corresponds to an area of 4x1 tiles in - * main surface. In other words, 4 bits in CCS map to a main surface cache - * line pair. The main surface pitch is required to be a multiple of four - * Y-tile widths. - */ -#define I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS fourcc_mod_code(INTEL, 6) - -/* - * Intel color control surfaces (CCS) for Gen-12 media compression - * - * The main surface is Y-tiled and at plane index 0, the CCS is linear and - * at index 1. A 64B CCS cache line corresponds to an area of 4x1 tiles in - * main surface. In other words, 4 bits in CCS map to a main surface cache - * line pair. The main surface pitch is required to be a multiple of four - * Y-tile widths. For semi-planar formats like NV12, CCS planes follow the - * Y and UV planes i.e., planes 0 and 1 are used for Y and UV surfaces, - * planes 2 and 3 for the respective CCS. - */ -#define I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS fourcc_mod_code(INTEL, 7) - -/* - * Intel Color Control Surface with Clear Color (CCS) for Gen-12 render - * compression. - * - * The main surface is Y-tiled and is at plane index 0 whereas CCS is linear - * and at index 1. The clear color is stored at index 2, and the pitch should - * be ignored. The clear color structure is 256 bits. The first 128 bits - * represents Raw Clear Color Red, Green, Blue and Alpha color each represented - * by 32 bits. The raw clear color is consumed by the 3d engine and generates - * the converted clear color of size 64 bits. The first 32 bits store the Lower - * Converted Clear Color value and the next 32 bits store the Higher Converted - * Clear Color value when applicable. The Converted Clear Color values are - * consumed by the DE. The last 64 bits are used to store Color Discard Enable - * and Depth Clear Value Valid which are ignored by the DE. A CCS cache line - * corresponds to an area of 4x1 tiles in the main surface. The main surface - * pitch is required to be a multiple of 4 tile widths. - */ -#define I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC fourcc_mod_code(INTEL, 8) - -/* - * Tiled, NV12MT, grouped in 64 (pixels) x 32 (lines) -sized macroblocks - * - * Macroblocks are laid in a Z-shape, and each pixel data is following the - * standard NV12 style. - * As for NV12, an image is the result of two frame buffers: one for Y, - * one for the interleaved Cb/Cr components (1/2 the height of the Y buffer). - * Alignment requirements are (for each buffer): - * - multiple of 128 pixels for the width - * - multiple of 32 pixels for the height - * - * For more information: see https://linuxtv.org/downloads/v4l-dvb-apis/re32.html - */ -#define DRM_FORMAT_MOD_SAMSUNG_64_32_TILE fourcc_mod_code(SAMSUNG, 1) - -/* - * Tiled, 16 (pixels) x 16 (lines) - sized macroblocks - * - * This is a simple tiled layout using tiles of 16x16 pixels in a row-major - * layout. For YCbCr formats Cb/Cr components are taken in such a way that - * they correspond to their 16x16 luma block. - */ -#define DRM_FORMAT_MOD_SAMSUNG_16_16_TILE fourcc_mod_code(SAMSUNG, 2) - -/* - * Qualcomm Compressed Format - * - * Refers to a compressed variant of the base format that is compressed. - * Implementation may be platform and base-format specific. - * - * Each macrotile consists of m x n (mostly 4 x 4) tiles. - * Pixel data pitch/stride is aligned with macrotile width. - * Pixel data height is aligned with macrotile height. - * Entire pixel data buffer is aligned with 4k(bytes). - */ -#define DRM_FORMAT_MOD_QCOM_COMPRESSED fourcc_mod_code(QCOM, 1) - -/* Vivante framebuffer modifiers */ - -/* - * Vivante 4x4 tiling layout - * - * This is a simple tiled layout using tiles of 4x4 pixels in a row-major - * layout. - */ -#define DRM_FORMAT_MOD_VIVANTE_TILED fourcc_mod_code(VIVANTE, 1) - -/* - * Vivante 64x64 super-tiling layout - * - * This is a tiled layout using 64x64 pixel super-tiles, where each super-tile - * contains 8x4 groups of 2x4 tiles of 4x4 pixels (like above) each, all in row- - * major layout. - * - * For more information: see - * https://github.com/etnaviv/etna_viv/blob/master/doc/hardware.md#texture-tiling - */ -#define DRM_FORMAT_MOD_VIVANTE_SUPER_TILED fourcc_mod_code(VIVANTE, 2) - -/* - * Vivante 4x4 tiling layout for dual-pipe - * - * Same as the 4x4 tiling layout, except every second 4x4 pixel tile starts at a - * different base address. Offsets from the base addresses are therefore halved - * compared to the non-split tiled layout. - */ -#define DRM_FORMAT_MOD_VIVANTE_SPLIT_TILED fourcc_mod_code(VIVANTE, 3) - -/* - * Vivante 64x64 super-tiling layout for dual-pipe - * - * Same as the 64x64 super-tiling layout, except every second 4x4 pixel tile - * starts at a different base address. Offsets from the base addresses are - * therefore halved compared to the non-split super-tiled layout. - */ -#define DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED fourcc_mod_code(VIVANTE, 4) - -/* NVIDIA frame buffer modifiers */ - -/* - * Tegra Tiled Layout, used by Tegra 2, 3 and 4. - * - * Pixels are arranged in simple tiles of 16 x 16 bytes. - */ -#define DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED fourcc_mod_code(NVIDIA, 1) - -/* - * Generalized Block Linear layout, used by desktop GPUs starting with NV50/G80, - * and Tegra GPUs starting with Tegra K1. - * - * Pixels are arranged in Groups of Bytes (GOBs). GOB size and layout varies - * based on the architecture generation. GOBs themselves are then arranged in - * 3D blocks, with the block dimensions (in terms of GOBs) always being a power - * of two, and hence expressible as their log2 equivalent (E.g., "2" represents - * a block depth or height of "4"). - * - * Chapter 20 "Pixel Memory Formats" of the Tegra X1 TRM describes this format - * in full detail. - * - * Macro - * Bits Param Description - * ---- ----- ----------------------------------------------------------------- - * - * 3:0 h log2(height) of each block, in GOBs. Placed here for - * compatibility with the existing - * DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK()-based modifiers. - * - * 4:4 - Must be 1, to indicate block-linear layout. Necessary for - * compatibility with the existing - * DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK()-based modifiers. - * - * 8:5 - Reserved (To support 3D-surfaces with variable log2(depth) block - * size). Must be zero. - * - * Note there is no log2(width) parameter. Some portions of the - * hardware support a block width of two gobs, but it is impractical - * to use due to lack of support elsewhere, and has no known - * benefits. - * - * 11:9 - Reserved (To support 2D-array textures with variable array stride - * in blocks, specified via log2(tile width in blocks)). Must be - * zero. - * - * 19:12 k Page Kind. This value directly maps to a field in the page - * tables of all GPUs >= NV50. It affects the exact layout of bits - * in memory and can be derived from the tuple - * - * (format, GPU model, compression type, samples per pixel) - * - * Where compression type is defined below. If GPU model were - * implied by the format modifier, format, or memory buffer, page - * kind would not need to be included in the modifier itself, but - * since the modifier should define the layout of the associated - * memory buffer independent from any device or other context, it - * must be included here. - * - * 21:20 g GOB Height and Page Kind Generation. The height of a GOB changed - * starting with Fermi GPUs. Additionally, the mapping between page - * kind and bit layout has changed at various points. - * - * 0 = Gob Height 8, Fermi - Volta, Tegra K1+ Page Kind mapping - * 1 = Gob Height 4, G80 - GT2XX Page Kind mapping - * 2 = Gob Height 8, Turing+ Page Kind mapping - * 3 = Reserved for future use. - * - * 22:22 s Sector layout. On Tegra GPUs prior to Xavier, there is a further - * bit remapping step that occurs at an even lower level than the - * page kind and block linear swizzles. This causes the layout of - * surfaces mapped in those SOC's GPUs to be incompatible with the - * equivalent mapping on other GPUs in the same system. - * - * 0 = Tegra K1 - Tegra Parker/TX2 Layout. - * 1 = Desktop GPU and Tegra Xavier+ Layout - * - * 25:23 c Lossless Framebuffer Compression type. - * - * 0 = none - * 1 = ROP/3D, layout 1, exact compression format implied by Page - * Kind field - * 2 = ROP/3D, layout 2, exact compression format implied by Page - * Kind field - * 3 = CDE horizontal - * 4 = CDE vertical - * 5 = Reserved for future use - * 6 = Reserved for future use - * 7 = Reserved for future use - * - * 55:25 - Reserved for future use. Must be zero. - */ -#define DRM_FORMAT_MOD_NVIDIA_BLOCK_LINEAR_2D(c, s, g, k, h) \ - fourcc_mod_code(NVIDIA, (0x10 | \ - ((h) & 0xf) | \ - (((k) & 0xff) << 12) | \ - (((g) & 0x3) << 20) | \ - (((s) & 0x1) << 22) | \ - (((c) & 0x7) << 23))) - -/* To grandfather in prior block linear format modifiers to the above layout, - * the page kind "0", which corresponds to "pitch/linear" and hence is unusable - * with block-linear layouts, is remapped within drivers to the value 0xfe, - * which corresponds to the "generic" kind used for simple single-sample - * uncompressed color formats on Fermi - Volta GPUs. - */ -static __inline__ __u64 -drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier) -{ - if (!(modifier & 0x10) || (modifier & (0xff << 12))) - return modifier; - else - return modifier | (0xfe << 12); -} - -/* - * 16Bx2 Block Linear layout, used by Tegra K1 and later - * - * Pixels are arranged in 64x8 Groups Of Bytes (GOBs). GOBs are then stacked - * vertically by a power of 2 (1 to 32 GOBs) to form a block. - * - * Within a GOB, data is ordered as 16B x 2 lines sectors laid in Z-shape. - * - * Parameter 'v' is the log2 encoding of the number of GOBs stacked vertically. - * Valid values are: - * - * 0 == ONE_GOB - * 1 == TWO_GOBS - * 2 == FOUR_GOBS - * 3 == EIGHT_GOBS - * 4 == SIXTEEN_GOBS - * 5 == THIRTYTWO_GOBS - * - * Chapter 20 "Pixel Memory Formats" of the Tegra X1 TRM describes this format - * in full detail. - */ -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(v) \ - DRM_FORMAT_MOD_NVIDIA_BLOCK_LINEAR_2D(0, 0, 0, 0, (v)) - -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(0) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(1) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(2) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(3) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(4) -#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB \ - DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(5) - -/* - * Some Broadcom modifiers take parameters, for example the number of - * vertical lines in the image. Reserve the lower 32 bits for modifier - * type, and the next 24 bits for parameters. Top 8 bits are the - * vendor code. - */ -#define __fourcc_mod_broadcom_param_shift 8 -#define __fourcc_mod_broadcom_param_bits 48 -#define fourcc_mod_broadcom_code(val, params) \ - fourcc_mod_code(BROADCOM, ((((__u64)params) << __fourcc_mod_broadcom_param_shift) | val)) -#define fourcc_mod_broadcom_param(m) \ - ((int)(((m) >> __fourcc_mod_broadcom_param_shift) & \ - ((1ULL << __fourcc_mod_broadcom_param_bits) - 1))) -#define fourcc_mod_broadcom_mod(m) \ - ((m) & ~(((1ULL << __fourcc_mod_broadcom_param_bits) - 1) << \ - __fourcc_mod_broadcom_param_shift)) - -/* - * Broadcom VC4 "T" format - * - * This is the primary layout that the V3D GPU can texture from (it - * can't do linear). The T format has: - * - * - 64b utiles of pixels in a raster-order grid according to cpp. It's 4x4 - * pixels at 32 bit depth. - * - * - 1k subtiles made of a 4x4 raster-order grid of 64b utiles (so usually - * 16x16 pixels). - * - * - 4k tiles made of a 2x2 grid of 1k subtiles (so usually 32x32 pixels). On - * even 4k tile rows, they're arranged as (BL, TL, TR, BR), and on odd rows - * they're (TR, BR, BL, TL), where bottom left is start of memory. - * - * - an image made of 4k tiles in rows either left-to-right (even rows of 4k - * tiles) or right-to-left (odd rows of 4k tiles). - */ -#define DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED fourcc_mod_code(BROADCOM, 1) - -/* - * Broadcom SAND format - * - * This is the native format that the H.264 codec block uses. For VC4 - * HVS, it is only valid for H.264 (NV12/21) and RGBA modes. - * - * The image can be considered to be split into columns, and the - * columns are placed consecutively into memory. The width of those - * columns can be either 32, 64, 128, or 256 pixels, but in practice - * only 128 pixel columns are used. - * - * The pitch between the start of each column is set to optimally - * switch between SDRAM banks. This is passed as the number of lines - * of column width in the modifier (we can't use the stride value due - * to various core checks that look at it , so you should set the - * stride to width*cpp). - * - * Note that the column height for this format modifier is the same - * for all of the planes, assuming that each column contains both Y - * and UV. Some SAND-using hardware stores UV in a separate tiled - * image from Y to reduce the column height, which is not supported - * with these modifiers. - */ - -#define DRM_FORMAT_MOD_BROADCOM_SAND32_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(2, v) -#define DRM_FORMAT_MOD_BROADCOM_SAND64_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(3, v) -#define DRM_FORMAT_MOD_BROADCOM_SAND128_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(4, v) -#define DRM_FORMAT_MOD_BROADCOM_SAND256_COL_HEIGHT(v) \ - fourcc_mod_broadcom_code(5, v) - -#define DRM_FORMAT_MOD_BROADCOM_SAND32 \ - DRM_FORMAT_MOD_BROADCOM_SAND32_COL_HEIGHT(0) -#define DRM_FORMAT_MOD_BROADCOM_SAND64 \ - DRM_FORMAT_MOD_BROADCOM_SAND64_COL_HEIGHT(0) -#define DRM_FORMAT_MOD_BROADCOM_SAND128 \ - DRM_FORMAT_MOD_BROADCOM_SAND128_COL_HEIGHT(0) -#define DRM_FORMAT_MOD_BROADCOM_SAND256 \ - DRM_FORMAT_MOD_BROADCOM_SAND256_COL_HEIGHT(0) - -/* Broadcom UIF format - * - * This is the common format for the current Broadcom multimedia - * blocks, including V3D 3.x and newer, newer video codecs, and - * displays. - * - * The image consists of utiles (64b blocks), UIF blocks (2x2 utiles), - * and macroblocks (4x4 UIF blocks). Those 4x4 UIF block groups are - * stored in columns, with padding between the columns to ensure that - * moving from one column to the next doesn't hit the same SDRAM page - * bank. - * - * To calculate the padding, it is assumed that each hardware block - * and the software driving it knows the platform's SDRAM page size, - * number of banks, and XOR address, and that it's identical between - * all blocks using the format. This tiling modifier will use XOR as - * necessary to reduce the padding. If a hardware block can't do XOR, - * the assumption is that a no-XOR tiling modifier will be created. - */ -#define DRM_FORMAT_MOD_BROADCOM_UIF fourcc_mod_code(BROADCOM, 6) - -/* - * Arm Framebuffer Compression (AFBC) modifiers - * - * AFBC is a proprietary lossless image compression protocol and format. - * It provides fine-grained random access and minimizes the amount of data - * transferred between IP blocks. - * - * AFBC has several features which may be supported and/or used, which are - * represented using bits in the modifier. Not all combinations are valid, - * and different devices or use-cases may support different combinations. - * - * Further information on the use of AFBC modifiers can be found in - * Documentation/gpu/afbc.rst - */ - -/* - * The top 4 bits (out of the 56 bits alloted for specifying vendor specific - * modifiers) denote the category for modifiers. Currently we have three - * categories of modifiers ie AFBC, MISC and AFRC. We can have a maximum of - * sixteen different categories. - */ -#define DRM_FORMAT_MOD_ARM_CODE(__type, __val) \ - fourcc_mod_code(ARM, ((__u64)(__type) << 52) | ((__val) & 0x000fffffffffffffULL)) - -#define DRM_FORMAT_MOD_ARM_TYPE_AFBC 0x00 -#define DRM_FORMAT_MOD_ARM_TYPE_MISC 0x01 - -#define DRM_FORMAT_MOD_ARM_AFBC(__afbc_mode) \ - DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_AFBC, __afbc_mode) - -/* - * AFBC superblock size - * - * Indicates the superblock size(s) used for the AFBC buffer. The buffer - * size (in pixels) must be aligned to a multiple of the superblock size. - * Four lowest significant bits(LSBs) are reserved for block size. - * - * Where one superblock size is specified, it applies to all planes of the - * buffer (e.g. 16x16, 32x8). When multiple superblock sizes are specified, - * the first applies to the Luma plane and the second applies to the Chroma - * plane(s). e.g. (32x8_64x4 means 32x8 Luma, with 64x4 Chroma). - * Multiple superblock sizes are only valid for multi-plane YCbCr formats. - */ -#define AFBC_FORMAT_MOD_BLOCK_SIZE_MASK 0xf -#define AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 (1ULL) -#define AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 (2ULL) -#define AFBC_FORMAT_MOD_BLOCK_SIZE_64x4 (3ULL) -#define AFBC_FORMAT_MOD_BLOCK_SIZE_32x8_64x4 (4ULL) - -/* - * AFBC lossless colorspace transform - * - * Indicates that the buffer makes use of the AFBC lossless colorspace - * transform. - */ -#define AFBC_FORMAT_MOD_YTR (1ULL << 4) - -/* - * AFBC block-split - * - * Indicates that the payload of each superblock is split. The second - * half of the payload is positioned at a predefined offset from the start - * of the superblock payload. - */ -#define AFBC_FORMAT_MOD_SPLIT (1ULL << 5) - -/* - * AFBC sparse layout - * - * This flag indicates that the payload of each superblock must be stored at a - * predefined position relative to the other superblocks in the same AFBC - * buffer. This order is the same order used by the header buffer. In this mode - * each superblock is given the same amount of space as an uncompressed - * superblock of the particular format would require, rounding up to the next - * multiple of 128 bytes in size. - */ -#define AFBC_FORMAT_MOD_SPARSE (1ULL << 6) - -/* - * AFBC copy-block restrict - * - * Buffers with this flag must obey the copy-block restriction. The restriction - * is such that there are no copy-blocks referring across the border of 8x8 - * blocks. For the subsampled data the 8x8 limitation is also subsampled. - */ -#define AFBC_FORMAT_MOD_CBR (1ULL << 7) - -/* - * AFBC tiled layout - * - * The tiled layout groups superblocks in 8x8 or 4x4 tiles, where all - * superblocks inside a tile are stored together in memory. 8x8 tiles are used - * for pixel formats up to and including 32 bpp while 4x4 tiles are used for - * larger bpp formats. The order between the tiles is scan line. - * When the tiled layout is used, the buffer size (in pixels) must be aligned - * to the tile size. - */ -#define AFBC_FORMAT_MOD_TILED (1ULL << 8) - -/* - * AFBC solid color blocks - * - * Indicates that the buffer makes use of solid-color blocks, whereby bandwidth - * can be reduced if a whole superblock is a single color. - */ -#define AFBC_FORMAT_MOD_SC (1ULL << 9) - -/* - * AFBC double-buffer - * - * Indicates that the buffer is allocated in a layout safe for front-buffer - * rendering. - */ -#define AFBC_FORMAT_MOD_DB (1ULL << 10) - -/* - * AFBC buffer content hints - * - * Indicates that the buffer includes per-superblock content hints. - */ -#define AFBC_FORMAT_MOD_BCH (1ULL << 11) - -/* AFBC uncompressed storage mode - * - * Indicates that the buffer is using AFBC uncompressed storage mode. - * In this mode all superblock payloads in the buffer use the uncompressed - * storage mode, which is usually only used for data which cannot be compressed. - * The buffer layout is the same as for AFBC buffers without USM set, this only - * affects the storage mode of the individual superblocks. Note that even a - * buffer without USM set may use uncompressed storage mode for some or all - * superblocks, USM just guarantees it for all. - */ -#define AFBC_FORMAT_MOD_USM (1ULL << 12) - -/* - * Arm Fixed-Rate Compression (AFRC) modifiers - * - * AFRC is a proprietary fixed rate image compression protocol and format, - * designed to provide guaranteed bandwidth and memory footprint - * reductions in graphics and media use-cases. - * - * AFRC buffers consist of one or more planes, with the same components - * and meaning as an uncompressed buffer using the same pixel format. - * - * Within each plane, the pixel/luma/chroma values are grouped into - * "coding unit" blocks which are individually compressed to a - * fixed size (in bytes). All coding units within a given plane of a buffer - * store the same number of values, and have the same compressed size. - * - * The coding unit size is configurable, allowing different rates of compression. - * - * The start of each AFRC buffer plane must be aligned to an alignment granule which - * depends on the coding unit size. - * - * Coding Unit Size Plane Alignment - * ---------------- --------------- - * 16 bytes 1024 bytes - * 24 bytes 512 bytes - * 32 bytes 2048 bytes - * - * Coding units are grouped into paging tiles. AFRC buffer dimensions must be aligned - * to a multiple of the paging tile dimensions. - * The dimensions of each paging tile depend on whether the buffer is optimised for - * scanline (SCAN layout) or rotated (ROT layout) access. - * - * Layout Paging Tile Width Paging Tile Height - * ------ ----------------- ------------------ - * SCAN 16 coding units 4 coding units - * ROT 8 coding units 8 coding units - * - * The dimensions of each coding unit depend on the number of components - * in the compressed plane and whether the buffer is optimised for - * scanline (SCAN layout) or rotated (ROT layout) access. - * - * Number of Components in Plane Layout Coding Unit Width Coding Unit Height - * ----------------------------- --------- ----------------- ------------------ - * 1 SCAN 16 samples 4 samples - * Example: 16x4 luma samples in a 'Y' plane - * 16x4 chroma 'V' values, in the 'V' plane of a fully-planar YUV buffer - * ----------------------------- --------- ----------------- ------------------ - * 1 ROT 8 samples 8 samples - * Example: 8x8 luma samples in a 'Y' plane - * 8x8 chroma 'V' values, in the 'V' plane of a fully-planar YUV buffer - * ----------------------------- --------- ----------------- ------------------ - * 2 DONT CARE 8 samples 4 samples - * Example: 8x4 chroma pairs in the 'UV' plane of a semi-planar YUV buffer - * ----------------------------- --------- ----------------- ------------------ - * 3 DONT CARE 4 samples 4 samples - * Example: 4x4 pixels in an RGB buffer without alpha - * ----------------------------- --------- ----------------- ------------------ - * 4 DONT CARE 4 samples 4 samples - * Example: 4x4 pixels in an RGB buffer with alpha - */ - -#define DRM_FORMAT_MOD_ARM_TYPE_AFRC 0x02 - -#define DRM_FORMAT_MOD_ARM_AFRC(__afrc_mode) \ - DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_AFRC, __afrc_mode) - -/* - * AFRC coding unit size modifier. - * - * Indicates the number of bytes used to store each compressed coding unit for - * one or more planes in an AFRC encoded buffer. The coding unit size for chrominance - * is the same for both Cb and Cr, which may be stored in separate planes. - * - * AFRC_FORMAT_MOD_CU_SIZE_P0 indicates the number of bytes used to store - * each compressed coding unit in the first plane of the buffer. For RGBA buffers - * this is the only plane, while for semi-planar and fully-planar YUV buffers, - * this corresponds to the luma plane. - * - * AFRC_FORMAT_MOD_CU_SIZE_P12 indicates the number of bytes used to store - * each compressed coding unit in the second and third planes in the buffer. - * For semi-planar and fully-planar YUV buffers, this corresponds to the chroma plane(s). - * - * For single-plane buffers, AFRC_FORMAT_MOD_CU_SIZE_P0 must be specified - * and AFRC_FORMAT_MOD_CU_SIZE_P12 must be zero. - * For semi-planar and fully-planar buffers, both AFRC_FORMAT_MOD_CU_SIZE_P0 and - * AFRC_FORMAT_MOD_CU_SIZE_P12 must be specified. - */ -#define AFRC_FORMAT_MOD_CU_SIZE_MASK 0xf -#define AFRC_FORMAT_MOD_CU_SIZE_16 (1ULL) -#define AFRC_FORMAT_MOD_CU_SIZE_24 (2ULL) -#define AFRC_FORMAT_MOD_CU_SIZE_32 (3ULL) - -#define AFRC_FORMAT_MOD_CU_SIZE_P0(__afrc_cu_size) (__afrc_cu_size) -#define AFRC_FORMAT_MOD_CU_SIZE_P12(__afrc_cu_size) ((__afrc_cu_size) << 4) - -/* - * AFRC scanline memory layout. - * - * Indicates if the buffer uses the scanline-optimised layout - * for an AFRC encoded buffer, otherwise, it uses the rotation-optimised layout. - * The memory layout is the same for all planes. - */ -#define AFRC_FORMAT_MOD_LAYOUT_SCAN (1ULL << 8) - -/* - * Arm 16x16 Block U-Interleaved modifier - * - * This is used by Arm Mali Utgard and Midgard GPUs. It divides the image - * into 16x16 pixel blocks. Blocks are stored linearly in order, but pixels - * in the block are reordered. - */ -#define DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED \ - DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_MISC, 1ULL) - -/* - * Allwinner tiled modifier - * - * This tiling mode is implemented by the VPU found on all Allwinner platforms, - * codenamed sunxi. It is associated with a YUV format that uses either 2 or 3 - * planes. - * - * With this tiling, the luminance samples are disposed in tiles representing - * 32x32 pixels and the chrominance samples in tiles representing 32x64 pixels. - * The pixel order in each tile is linear and the tiles are disposed linearly, - * both in row-major order. - */ -#define DRM_FORMAT_MOD_ALLWINNER_TILED fourcc_mod_code(ALLWINNER, 1) - -/* - * Amlogic Video Framebuffer Compression modifiers - * - * Amlogic uses a proprietary lossless image compression protocol and format - * for their hardware video codec accelerators, either video decoders or - * video input encoders. - * - * It considerably reduces memory bandwidth while writing and reading - * frames in memory. - * - * The underlying storage is considered to be 3 components, 8bit or 10-bit - * per component YCbCr 420, single plane : - * - DRM_FORMAT_YUV420_8BIT - * - DRM_FORMAT_YUV420_10BIT - * - * The first 8 bits of the mode defines the layout, then the following 8 bits - * defines the options changing the layout. - * - * Not all combinations are valid, and different SoCs may support different - * combinations of layout and options. - */ -#define __fourcc_mod_amlogic_layout_mask 0xff -#define __fourcc_mod_amlogic_options_shift 8 -#define __fourcc_mod_amlogic_options_mask 0xff - -#define DRM_FORMAT_MOD_AMLOGIC_FBC(__layout, __options) \ - fourcc_mod_code(AMLOGIC, \ - ((__layout) & __fourcc_mod_amlogic_layout_mask) | \ - (((__options) & __fourcc_mod_amlogic_options_mask) \ - << __fourcc_mod_amlogic_options_shift)) - -/* Amlogic FBC Layouts */ - -/* - * Amlogic FBC Basic Layout - * - * The basic layout is composed of: - * - a body content organized in 64x32 superblocks with 4096 bytes per - * superblock in default mode. - * - a 32 bytes per 128x64 header block - * - * This layout is transferrable between Amlogic SoCs supporting this modifier. - */ -#define AMLOGIC_FBC_LAYOUT_BASIC (1ULL) - -/* - * Amlogic FBC Scatter Memory layout - * - * Indicates the header contains IOMMU references to the compressed - * frames content to optimize memory access and layout. - * - * In this mode, only the header memory address is needed, thus the - * content memory organization is tied to the current producer - * execution and cannot be saved/dumped neither transferrable between - * Amlogic SoCs supporting this modifier. - * - * Due to the nature of the layout, these buffers are not expected to - * be accessible by the user-space clients, but only accessible by the - * hardware producers and consumers. - * - * The user-space clients should expect a failure while trying to mmap - * the DMA-BUF handle returned by the producer. - */ -#define AMLOGIC_FBC_LAYOUT_SCATTER (2ULL) - -/* Amlogic FBC Layout Options Bit Mask */ - -/* - * Amlogic FBC Memory Saving mode - * - * Indicates the storage is packed when pixel size is multiple of word - * boudaries, i.e. 8bit should be stored in this mode to save allocation - * memory. - * - * This mode reduces body layout to 3072 bytes per 64x32 superblock with - * the basic layout and 3200 bytes per 64x32 superblock combined with - * the scatter layout. - */ -#define AMLOGIC_FBC_OPTION_MEM_SAVING (1ULL << 0) - -/* - * AMD modifiers - * - * Memory layout: - * - * without DCC: - * - main surface - * - * with DCC & without DCC_RETILE: - * - main surface in plane 0 - * - DCC surface in plane 1 (RB-aligned, pipe-aligned if DCC_PIPE_ALIGN is set) - * - * with DCC & DCC_RETILE: - * - main surface in plane 0 - * - displayable DCC surface in plane 1 (not RB-aligned & not pipe-aligned) - * - pipe-aligned DCC surface in plane 2 (RB-aligned & pipe-aligned) - * - * For multi-plane formats the above surfaces get merged into one plane for - * each format plane, based on the required alignment only. - * - * Bits Parameter Notes - * ----- ------------------------ --------------------------------------------- - * - * 7:0 TILE_VERSION Values are AMD_FMT_MOD_TILE_VER_* - * 12:8 TILE Values are AMD_FMT_MOD_TILE__* - * 13 DCC - * 14 DCC_RETILE - * 15 DCC_PIPE_ALIGN - * 16 DCC_INDEPENDENT_64B - * 17 DCC_INDEPENDENT_128B - * 19:18 DCC_MAX_COMPRESSED_BLOCK Values are AMD_FMT_MOD_DCC_BLOCK_* - * 20 DCC_CONSTANT_ENCODE - * 23:21 PIPE_XOR_BITS Only for some chips - * 26:24 BANK_XOR_BITS Only for some chips - * 29:27 PACKERS Only for some chips - * 32:30 RB Only for some chips - * 35:33 PIPE Only for some chips - * 55:36 - Reserved for future use, must be zero - */ -#define AMD_FMT_MOD fourcc_mod_code(AMD, 0) - -#define IS_AMD_FMT_MOD(val) (((val) >> 56) == DRM_FORMAT_MOD_VENDOR_AMD) - -/* Reserve 0 for GFX8 and older */ -#define AMD_FMT_MOD_TILE_VER_GFX9 1 -#define AMD_FMT_MOD_TILE_VER_GFX10 2 -#define AMD_FMT_MOD_TILE_VER_GFX10_RBPLUS 3 - -/* - * 64K_S is the same for GFX9/GFX10/GFX10_RBPLUS and hence has GFX9 as canonical - * version. - */ -#define AMD_FMT_MOD_TILE_GFX9_64K_S 9 - -/* - * 64K_D for non-32 bpp is the same for GFX9/GFX10/GFX10_RBPLUS and hence has - * GFX9 as canonical version. - */ -#define AMD_FMT_MOD_TILE_GFX9_64K_D 10 -#define AMD_FMT_MOD_TILE_GFX9_64K_S_X 25 -#define AMD_FMT_MOD_TILE_GFX9_64K_D_X 26 -#define AMD_FMT_MOD_TILE_GFX9_64K_R_X 27 - -#define AMD_FMT_MOD_DCC_BLOCK_64B 0 -#define AMD_FMT_MOD_DCC_BLOCK_128B 1 -#define AMD_FMT_MOD_DCC_BLOCK_256B 2 - -#define AMD_FMT_MOD_TILE_VERSION_SHIFT 0 -#define AMD_FMT_MOD_TILE_VERSION_MASK 0xFF -#define AMD_FMT_MOD_TILE_SHIFT 8 -#define AMD_FMT_MOD_TILE_MASK 0x1F - -/* Whether DCC compression is enabled. */ -#define AMD_FMT_MOD_DCC_SHIFT 13 -#define AMD_FMT_MOD_DCC_MASK 0x1 - -/* - * Whether to include two DCC surfaces, one which is rb & pipe aligned, and - * one which is not-aligned. - */ -#define AMD_FMT_MOD_DCC_RETILE_SHIFT 14 -#define AMD_FMT_MOD_DCC_RETILE_MASK 0x1 - -/* Only set if DCC_RETILE = false */ -#define AMD_FMT_MOD_DCC_PIPE_ALIGN_SHIFT 15 -#define AMD_FMT_MOD_DCC_PIPE_ALIGN_MASK 0x1 - -#define AMD_FMT_MOD_DCC_INDEPENDENT_64B_SHIFT 16 -#define AMD_FMT_MOD_DCC_INDEPENDENT_64B_MASK 0x1 -#define AMD_FMT_MOD_DCC_INDEPENDENT_128B_SHIFT 17 -#define AMD_FMT_MOD_DCC_INDEPENDENT_128B_MASK 0x1 -#define AMD_FMT_MOD_DCC_MAX_COMPRESSED_BLOCK_SHIFT 18 -#define AMD_FMT_MOD_DCC_MAX_COMPRESSED_BLOCK_MASK 0x3 - -/* - * DCC supports embedding some clear colors directly in the DCC surface. - * However, on older GPUs the rendering HW ignores the embedded clear color - * and prefers the driver provided color. This necessitates doing a fastclear - * eliminate operation before a process transfers control. - * - * If this bit is set that means the fastclear eliminate is not needed for these - * embeddable colors. - */ -#define AMD_FMT_MOD_DCC_CONSTANT_ENCODE_SHIFT 20 -#define AMD_FMT_MOD_DCC_CONSTANT_ENCODE_MASK 0x1 - -/* - * The below fields are for accounting for per GPU differences. These are only - * relevant for GFX9 and later and if the tile field is *_X/_T. - * - * PIPE_XOR_BITS = always needed - * BANK_XOR_BITS = only for TILE_VER_GFX9 - * PACKERS = only for TILE_VER_GFX10_RBPLUS - * RB = only for TILE_VER_GFX9 & DCC - * PIPE = only for TILE_VER_GFX9 & DCC & (DCC_RETILE | DCC_PIPE_ALIGN) - */ -#define AMD_FMT_MOD_PIPE_XOR_BITS_SHIFT 21 -#define AMD_FMT_MOD_PIPE_XOR_BITS_MASK 0x7 -#define AMD_FMT_MOD_BANK_XOR_BITS_SHIFT 24 -#define AMD_FMT_MOD_BANK_XOR_BITS_MASK 0x7 -#define AMD_FMT_MOD_PACKERS_SHIFT 27 -#define AMD_FMT_MOD_PACKERS_MASK 0x7 -#define AMD_FMT_MOD_RB_SHIFT 30 -#define AMD_FMT_MOD_RB_MASK 0x7 -#define AMD_FMT_MOD_PIPE_SHIFT 33 -#define AMD_FMT_MOD_PIPE_MASK 0x7 - -#define AMD_FMT_MOD_SET(field, value) \ - ((uint64_t)(value) << AMD_FMT_MOD_##field##_SHIFT) -#define AMD_FMT_MOD_GET(field, value) \ - (((value) >> AMD_FMT_MOD_##field##_SHIFT) & AMD_FMT_MOD_##field##_MASK) -#define AMD_FMT_MOD_CLEAR(field) \ - (~((uint64_t)AMD_FMT_MOD_##field##_MASK << AMD_FMT_MOD_##field##_SHIFT)) - -#if defined(__cplusplus) -} -#endif - -#endif /* DRM_FOURCC_H */ diff --git a/prebuilts/x86_64/include/libdrm/drm_mode.h b/prebuilts/x86_64/include/libdrm/drm_mode.h deleted file mode 100644 index 9b6722d..0000000 --- a/prebuilts/x86_64/include/libdrm/drm_mode.h +++ /dev/null @@ -1,1129 +0,0 @@ -/* - * Copyright (c) 2007 Dave Airlie - * Copyright (c) 2007 Jakob Bornecrantz - * Copyright (c) 2008 Red Hat Inc. - * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA - * Copyright (c) 2007-2008 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef _DRM_MODE_H -#define _DRM_MODE_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/** - * DOC: overview - * - * DRM exposes many UAPI and structure definition to have a consistent - * and standardized interface with user. - * Userspace can refer to these structure definitions and UAPI formats - * to communicate to driver - */ - -#define DRM_CONNECTOR_NAME_LEN 32 -#define DRM_DISPLAY_MODE_LEN 32 -#define DRM_PROP_NAME_LEN 32 - -#define DRM_MODE_TYPE_BUILTIN (1<<0) /* deprecated */ -#define DRM_MODE_TYPE_CLOCK_C ((1<<1) | DRM_MODE_TYPE_BUILTIN) /* deprecated */ -#define DRM_MODE_TYPE_CRTC_C ((1<<2) | DRM_MODE_TYPE_BUILTIN) /* deprecated */ -#define DRM_MODE_TYPE_PREFERRED (1<<3) -#define DRM_MODE_TYPE_DEFAULT (1<<4) /* deprecated */ -#define DRM_MODE_TYPE_USERDEF (1<<5) -#define DRM_MODE_TYPE_DRIVER (1<<6) - -#define DRM_MODE_TYPE_ALL (DRM_MODE_TYPE_PREFERRED | \ - DRM_MODE_TYPE_USERDEF | \ - DRM_MODE_TYPE_DRIVER) - -/* Video mode flags */ -/* bit compatible with the xrandr RR_ definitions (bits 0-13) - * - * ABI warning: Existing userspace really expects - * the mode flags to match the xrandr definitions. Any - * changes that don't match the xrandr definitions will - * likely need a new client cap or some other mechanism - * to avoid breaking existing userspace. This includes - * allocating new flags in the previously unused bits! - */ -#define DRM_MODE_FLAG_PHSYNC (1<<0) -#define DRM_MODE_FLAG_NHSYNC (1<<1) -#define DRM_MODE_FLAG_PVSYNC (1<<2) -#define DRM_MODE_FLAG_NVSYNC (1<<3) -#define DRM_MODE_FLAG_INTERLACE (1<<4) -#define DRM_MODE_FLAG_DBLSCAN (1<<5) -#define DRM_MODE_FLAG_CSYNC (1<<6) -#define DRM_MODE_FLAG_PCSYNC (1<<7) -#define DRM_MODE_FLAG_NCSYNC (1<<8) -#define DRM_MODE_FLAG_HSKEW (1<<9) /* hskew provided */ -#define DRM_MODE_FLAG_BCAST (1<<10) /* deprecated */ -#define DRM_MODE_FLAG_PIXMUX (1<<11) /* deprecated */ -#define DRM_MODE_FLAG_DBLCLK (1<<12) -#define DRM_MODE_FLAG_CLKDIV2 (1<<13) - /* - * When adding a new stereo mode don't forget to adjust DRM_MODE_FLAGS_3D_MAX - * (define not exposed to user space). - */ -#define DRM_MODE_FLAG_3D_MASK (0x1f<<14) -#define DRM_MODE_FLAG_3D_NONE (0<<14) -#define DRM_MODE_FLAG_3D_FRAME_PACKING (1<<14) -#define DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE (2<<14) -#define DRM_MODE_FLAG_3D_LINE_ALTERNATIVE (3<<14) -#define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL (4<<14) -#define DRM_MODE_FLAG_3D_L_DEPTH (5<<14) -#define DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH (6<<14) -#define DRM_MODE_FLAG_3D_TOP_AND_BOTTOM (7<<14) -#define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF (8<<14) - -/* Picture aspect ratio options */ -#define DRM_MODE_PICTURE_ASPECT_NONE 0 -#define DRM_MODE_PICTURE_ASPECT_4_3 1 -#define DRM_MODE_PICTURE_ASPECT_16_9 2 -#define DRM_MODE_PICTURE_ASPECT_64_27 3 -#define DRM_MODE_PICTURE_ASPECT_256_135 4 - -/* Content type options */ -#define DRM_MODE_CONTENT_TYPE_NO_DATA 0 -#define DRM_MODE_CONTENT_TYPE_GRAPHICS 1 -#define DRM_MODE_CONTENT_TYPE_PHOTO 2 -#define DRM_MODE_CONTENT_TYPE_CINEMA 3 -#define DRM_MODE_CONTENT_TYPE_GAME 4 - -/* Aspect ratio flag bitmask (4 bits 22:19) */ -#define DRM_MODE_FLAG_PIC_AR_MASK (0x0F<<19) -#define DRM_MODE_FLAG_PIC_AR_NONE \ - (DRM_MODE_PICTURE_ASPECT_NONE<<19) -#define DRM_MODE_FLAG_PIC_AR_4_3 \ - (DRM_MODE_PICTURE_ASPECT_4_3<<19) -#define DRM_MODE_FLAG_PIC_AR_16_9 \ - (DRM_MODE_PICTURE_ASPECT_16_9<<19) -#define DRM_MODE_FLAG_PIC_AR_64_27 \ - (DRM_MODE_PICTURE_ASPECT_64_27<<19) -#define DRM_MODE_FLAG_PIC_AR_256_135 \ - (DRM_MODE_PICTURE_ASPECT_256_135<<19) - -#define DRM_MODE_FLAG_ALL (DRM_MODE_FLAG_PHSYNC | \ - DRM_MODE_FLAG_NHSYNC | \ - DRM_MODE_FLAG_PVSYNC | \ - DRM_MODE_FLAG_NVSYNC | \ - DRM_MODE_FLAG_INTERLACE | \ - DRM_MODE_FLAG_DBLSCAN | \ - DRM_MODE_FLAG_CSYNC | \ - DRM_MODE_FLAG_PCSYNC | \ - DRM_MODE_FLAG_NCSYNC | \ - DRM_MODE_FLAG_HSKEW | \ - DRM_MODE_FLAG_DBLCLK | \ - DRM_MODE_FLAG_CLKDIV2 | \ - DRM_MODE_FLAG_3D_MASK) - -/* DPMS flags */ -/* bit compatible with the xorg definitions. */ -#define DRM_MODE_DPMS_ON 0 -#define DRM_MODE_DPMS_STANDBY 1 -#define DRM_MODE_DPMS_SUSPEND 2 -#define DRM_MODE_DPMS_OFF 3 - -/* Scaling mode options */ -#define DRM_MODE_SCALE_NONE 0 /* Unmodified timing (display or - software can still scale) */ -#define DRM_MODE_SCALE_FULLSCREEN 1 /* Full screen, ignore aspect */ -#define DRM_MODE_SCALE_CENTER 2 /* Centered, no scaling */ -#define DRM_MODE_SCALE_ASPECT 3 /* Full screen, preserve aspect */ - -/* Dithering mode options */ -#define DRM_MODE_DITHERING_OFF 0 -#define DRM_MODE_DITHERING_ON 1 -#define DRM_MODE_DITHERING_AUTO 2 - -/* Dirty info options */ -#define DRM_MODE_DIRTY_OFF 0 -#define DRM_MODE_DIRTY_ON 1 -#define DRM_MODE_DIRTY_ANNOTATE 2 - -/* Link Status options */ -#define DRM_MODE_LINK_STATUS_GOOD 0 -#define DRM_MODE_LINK_STATUS_BAD 1 - -/* - * DRM_MODE_ROTATE_ - * - * Signals that a drm plane is been rotated degrees in counter - * clockwise direction. - * - * This define is provided as a convenience, looking up the property id - * using the name->prop id lookup is the preferred method. - */ -#define DRM_MODE_ROTATE_0 (1<<0) -#define DRM_MODE_ROTATE_90 (1<<1) -#define DRM_MODE_ROTATE_180 (1<<2) -#define DRM_MODE_ROTATE_270 (1<<3) - -/* - * DRM_MODE_ROTATE_MASK - * - * Bitmask used to look for drm plane rotations. - */ -#define DRM_MODE_ROTATE_MASK (\ - DRM_MODE_ROTATE_0 | \ - DRM_MODE_ROTATE_90 | \ - DRM_MODE_ROTATE_180 | \ - DRM_MODE_ROTATE_270) - -/* - * DRM_MODE_REFLECT_ - * - * Signals that the contents of a drm plane is reflected along the axis, - * in the same way as mirroring. - * See kerneldoc chapter "Plane Composition Properties" for more details. - * - * This define is provided as a convenience, looking up the property id - * using the name->prop id lookup is the preferred method. - */ -#define DRM_MODE_REFLECT_X (1<<4) -#define DRM_MODE_REFLECT_Y (1<<5) - -/* - * DRM_MODE_REFLECT_MASK - * - * Bitmask used to look for drm plane reflections. - */ -#define DRM_MODE_REFLECT_MASK (\ - DRM_MODE_REFLECT_X | \ - DRM_MODE_REFLECT_Y) - -/* Content Protection Flags */ -#define DRM_MODE_CONTENT_PROTECTION_UNDESIRED 0 -#define DRM_MODE_CONTENT_PROTECTION_DESIRED 1 -#define DRM_MODE_CONTENT_PROTECTION_ENABLED 2 - -/** - * struct drm_mode_modeinfo - Display mode information. - * @clock: pixel clock in kHz - * @hdisplay: horizontal display size - * @hsync_start: horizontal sync start - * @hsync_end: horizontal sync end - * @htotal: horizontal total size - * @hskew: horizontal skew - * @vdisplay: vertical display size - * @vsync_start: vertical sync start - * @vsync_end: vertical sync end - * @vtotal: vertical total size - * @vscan: vertical scan - * @vrefresh: approximate vertical refresh rate in Hz - * @flags: bitmask of misc. flags, see DRM_MODE_FLAG_* defines - * @type: bitmask of type flags, see DRM_MODE_TYPE_* defines - * @name: string describing the mode resolution - * - * This is the user-space API display mode information structure. For the - * kernel version see struct drm_display_mode. - */ -struct drm_mode_modeinfo { - __u32 clock; - __u16 hdisplay; - __u16 hsync_start; - __u16 hsync_end; - __u16 htotal; - __u16 hskew; - __u16 vdisplay; - __u16 vsync_start; - __u16 vsync_end; - __u16 vtotal; - __u16 vscan; - - __u32 vrefresh; - - __u32 flags; - __u32 type; - char name[DRM_DISPLAY_MODE_LEN]; -}; - -struct drm_mode_card_res { - __u64 fb_id_ptr; - __u64 crtc_id_ptr; - __u64 connector_id_ptr; - __u64 encoder_id_ptr; - __u32 count_fbs; - __u32 count_crtcs; - __u32 count_connectors; - __u32 count_encoders; - __u32 min_width; - __u32 max_width; - __u32 min_height; - __u32 max_height; -}; - -struct drm_mode_crtc { - __u64 set_connectors_ptr; - __u32 count_connectors; - - __u32 crtc_id; /**< Id */ - __u32 fb_id; /**< Id of framebuffer */ - - __u32 x; /**< x Position on the framebuffer */ - __u32 y; /**< y Position on the framebuffer */ - - __u32 gamma_size; - __u32 mode_valid; - struct drm_mode_modeinfo mode; -}; - -#define DRM_MODE_PRESENT_TOP_FIELD (1<<0) -#define DRM_MODE_PRESENT_BOTTOM_FIELD (1<<1) - -/* Planes blend with or override other bits on the CRTC */ -struct drm_mode_set_plane { - __u32 plane_id; - __u32 crtc_id; - __u32 fb_id; /* fb object contains surface format type */ - __u32 flags; /* see above flags */ - - /* Signed dest location allows it to be partially off screen */ - __s32 crtc_x; - __s32 crtc_y; - __u32 crtc_w; - __u32 crtc_h; - - /* Source values are 16.16 fixed point */ - __u32 src_x; - __u32 src_y; - __u32 src_h; - __u32 src_w; -}; - -struct drm_mode_get_plane { - __u32 plane_id; - - __u32 crtc_id; - __u32 fb_id; - - __u32 possible_crtcs; - __u32 gamma_size; - - __u32 count_format_types; - __u64 format_type_ptr; -}; - -struct drm_mode_get_plane_res { - __u64 plane_id_ptr; - __u32 count_planes; -}; - -#define DRM_MODE_ENCODER_NONE 0 -#define DRM_MODE_ENCODER_DAC 1 -#define DRM_MODE_ENCODER_TMDS 2 -#define DRM_MODE_ENCODER_LVDS 3 -#define DRM_MODE_ENCODER_TVDAC 4 -#define DRM_MODE_ENCODER_VIRTUAL 5 -#define DRM_MODE_ENCODER_DSI 6 -#define DRM_MODE_ENCODER_DPMST 7 -#define DRM_MODE_ENCODER_DPI 8 - -struct drm_mode_get_encoder { - __u32 encoder_id; - __u32 encoder_type; - - __u32 crtc_id; /**< Id of crtc */ - - __u32 possible_crtcs; - __u32 possible_clones; -}; - -/* This is for connectors with multiple signal types. */ -/* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */ -enum drm_mode_subconnector { - DRM_MODE_SUBCONNECTOR_Automatic = 0, /* DVI-I, TV */ - DRM_MODE_SUBCONNECTOR_Unknown = 0, /* DVI-I, TV, DP */ - DRM_MODE_SUBCONNECTOR_VGA = 1, /* DP */ - DRM_MODE_SUBCONNECTOR_DVID = 3, /* DVI-I DP */ - DRM_MODE_SUBCONNECTOR_DVIA = 4, /* DVI-I */ - DRM_MODE_SUBCONNECTOR_Composite = 5, /* TV */ - DRM_MODE_SUBCONNECTOR_SVIDEO = 6, /* TV */ - DRM_MODE_SUBCONNECTOR_Component = 8, /* TV */ - DRM_MODE_SUBCONNECTOR_SCART = 9, /* TV */ - DRM_MODE_SUBCONNECTOR_DisplayPort = 10, /* DP */ - DRM_MODE_SUBCONNECTOR_HDMIA = 11, /* DP */ - DRM_MODE_SUBCONNECTOR_Native = 15, /* DP */ - DRM_MODE_SUBCONNECTOR_Wireless = 18, /* DP */ -}; - -#define DRM_MODE_CONNECTOR_Unknown 0 -#define DRM_MODE_CONNECTOR_VGA 1 -#define DRM_MODE_CONNECTOR_DVII 2 -#define DRM_MODE_CONNECTOR_DVID 3 -#define DRM_MODE_CONNECTOR_DVIA 4 -#define DRM_MODE_CONNECTOR_Composite 5 -#define DRM_MODE_CONNECTOR_SVIDEO 6 -#define DRM_MODE_CONNECTOR_LVDS 7 -#define DRM_MODE_CONNECTOR_Component 8 -#define DRM_MODE_CONNECTOR_9PinDIN 9 -#define DRM_MODE_CONNECTOR_DisplayPort 10 -#define DRM_MODE_CONNECTOR_HDMIA 11 -#define DRM_MODE_CONNECTOR_HDMIB 12 -#define DRM_MODE_CONNECTOR_TV 13 -#define DRM_MODE_CONNECTOR_eDP 14 -#define DRM_MODE_CONNECTOR_VIRTUAL 15 -#define DRM_MODE_CONNECTOR_DSI 16 -#define DRM_MODE_CONNECTOR_DPI 17 -#define DRM_MODE_CONNECTOR_WRITEBACK 18 -#define DRM_MODE_CONNECTOR_SPI 19 -#define DRM_MODE_CONNECTOR_USB 20 - -/** - * struct drm_mode_get_connector - Get connector metadata. - * - * User-space can perform a GETCONNECTOR ioctl to retrieve information about a - * connector. User-space is expected to retrieve encoders, modes and properties - * by performing this ioctl at least twice: the first time to retrieve the - * number of elements, the second time to retrieve the elements themselves. - * - * To retrieve the number of elements, set @count_props and @count_encoders to - * zero, set @count_modes to 1, and set @modes_ptr to a temporary struct - * drm_mode_modeinfo element. - * - * To retrieve the elements, allocate arrays for @encoders_ptr, @modes_ptr, - * @props_ptr and @prop_values_ptr, then set @count_modes, @count_props and - * @count_encoders to their capacity. - * - * Performing the ioctl only twice may be racy: the number of elements may have - * changed with a hotplug event in-between the two ioctls. User-space is - * expected to retry the last ioctl until the number of elements stabilizes. - * The kernel won't fill any array which doesn't have the expected length. - * - * **Force-probing a connector** - * - * If the @count_modes field is set to zero and the DRM client is the current - * DRM master, the kernel will perform a forced probe on the connector to - * refresh the connector status, modes and EDID. A forced-probe can be slow, - * might cause flickering and the ioctl will block. - * - * User-space needs to force-probe connectors to ensure their metadata is - * up-to-date at startup and after receiving a hot-plug event. User-space - * may perform a forced-probe when the user explicitly requests it. User-space - * shouldn't perform a forced-probe in other situations. - */ -struct drm_mode_get_connector { - /** @encoders_ptr: Pointer to ``__u32`` array of object IDs. */ - __u64 encoders_ptr; - /** @modes_ptr: Pointer to struct drm_mode_modeinfo array. */ - __u64 modes_ptr; - /** @props_ptr: Pointer to ``__u32`` array of property IDs. */ - __u64 props_ptr; - /** @prop_values_ptr: Pointer to ``__u64`` array of property values. */ - __u64 prop_values_ptr; - - /** @count_modes: Number of modes. */ - __u32 count_modes; - /** @count_props: Number of properties. */ - __u32 count_props; - /** @count_encoders: Number of encoders. */ - __u32 count_encoders; - - /** @encoder_id: Object ID of the current encoder. */ - __u32 encoder_id; - /** @connector_id: Object ID of the connector. */ - __u32 connector_id; - /** - * @connector_type: Type of the connector. - * - * See DRM_MODE_CONNECTOR_* defines. - */ - __u32 connector_type; - /** - * @connector_type_id: Type-specific connector number. - * - * This is not an object ID. This is a per-type connector number. Each - * (type, type_id) combination is unique across all connectors of a DRM - * device. - */ - __u32 connector_type_id; - - /** - * @connection: Status of the connector. - * - * See enum drm_connector_status. - */ - __u32 connection; - /** @mm_width: Width of the connected sink in millimeters. */ - __u32 mm_width; - /** @mm_height: Height of the connected sink in millimeters. */ - __u32 mm_height; - /** - * @subpixel: Subpixel order of the connected sink. - * - * See enum subpixel_order. - */ - __u32 subpixel; - - /** @pad: Padding, must be zero. */ - __u32 pad; -}; - -#define DRM_MODE_PROP_PENDING (1<<0) /* deprecated, do not use */ -#define DRM_MODE_PROP_RANGE (1<<1) -#define DRM_MODE_PROP_IMMUTABLE (1<<2) -#define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */ -#define DRM_MODE_PROP_BLOB (1<<4) -#define DRM_MODE_PROP_BITMASK (1<<5) /* bitmask of enumerated types */ - -/* non-extended types: legacy bitmask, one bit per type: */ -#define DRM_MODE_PROP_LEGACY_TYPE ( \ - DRM_MODE_PROP_RANGE | \ - DRM_MODE_PROP_ENUM | \ - DRM_MODE_PROP_BLOB | \ - DRM_MODE_PROP_BITMASK) - -/* extended-types: rather than continue to consume a bit per type, - * grab a chunk of the bits to use as integer type id. - */ -#define DRM_MODE_PROP_EXTENDED_TYPE 0x0000ffc0 -#define DRM_MODE_PROP_TYPE(n) ((n) << 6) -#define DRM_MODE_PROP_OBJECT DRM_MODE_PROP_TYPE(1) -#define DRM_MODE_PROP_SIGNED_RANGE DRM_MODE_PROP_TYPE(2) - -/* the PROP_ATOMIC flag is used to hide properties from userspace that - * is not aware of atomic properties. This is mostly to work around - * older userspace (DDX drivers) that read/write each prop they find, - * witout being aware that this could be triggering a lengthy modeset. - */ -#define DRM_MODE_PROP_ATOMIC 0x80000000 - -struct drm_mode_property_enum { - __u64 value; - char name[DRM_PROP_NAME_LEN]; -}; - -struct drm_mode_get_property { - __u64 values_ptr; /* values and blob lengths */ - __u64 enum_blob_ptr; /* enum and blob id ptrs */ - - __u32 prop_id; - __u32 flags; - char name[DRM_PROP_NAME_LEN]; - - __u32 count_values; - /* This is only used to count enum values, not blobs. The _blobs is - * simply because of a historical reason, i.e. backwards compat. */ - __u32 count_enum_blobs; -}; - -struct drm_mode_connector_set_property { - __u64 value; - __u32 prop_id; - __u32 connector_id; -}; - -#define DRM_MODE_OBJECT_CRTC 0xcccccccc -#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0 -#define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0 -#define DRM_MODE_OBJECT_MODE 0xdededede -#define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0 -#define DRM_MODE_OBJECT_FB 0xfbfbfbfb -#define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb -#define DRM_MODE_OBJECT_PLANE 0xeeeeeeee -#define DRM_MODE_OBJECT_ANY 0 - -struct drm_mode_obj_get_properties { - __u64 props_ptr; - __u64 prop_values_ptr; - __u32 count_props; - __u32 obj_id; - __u32 obj_type; -}; - -struct drm_mode_obj_set_property { - __u64 value; - __u32 prop_id; - __u32 obj_id; - __u32 obj_type; -}; - -struct drm_mode_get_blob { - __u32 blob_id; - __u32 length; - __u64 data; -}; - -struct drm_mode_fb_cmd { - __u32 fb_id; - __u32 width; - __u32 height; - __u32 pitch; - __u32 bpp; - __u32 depth; - /* driver specific handle */ - __u32 handle; -}; - -#define DRM_MODE_FB_INTERLACED (1<<0) /* for interlaced framebuffers */ -#define DRM_MODE_FB_MODIFIERS (1<<1) /* enables ->modifer[] */ - -struct drm_mode_fb_cmd2 { - __u32 fb_id; - __u32 width; - __u32 height; - __u32 pixel_format; /* fourcc code from drm_fourcc.h */ - __u32 flags; /* see above flags */ - - /* - * In case of planar formats, this ioctl allows up to 4 - * buffer objects with offsets and pitches per plane. - * The pitch and offset order is dictated by the fourcc, - * e.g. NV12 (https://fourcc.org/yuv.php#NV12) is described as: - * - * YUV 4:2:0 image with a plane of 8 bit Y samples - * followed by an interleaved U/V plane containing - * 8 bit 2x2 subsampled colour difference samples. - * - * So it would consist of Y as offsets[0] and UV as - * offsets[1]. Note that offsets[0] will generally - * be 0 (but this is not required). - * - * To accommodate tiled, compressed, etc formats, a - * modifier can be specified. The default value of zero - * indicates "native" format as specified by the fourcc. - * Vendor specific modifier token. Note that even though - * it looks like we have a modifier per-plane, we in fact - * do not. The modifier for each plane must be identical. - * Thus all combinations of different data layouts for - * multi plane formats must be enumerated as separate - * modifiers. - */ - __u32 handles[4]; - __u32 pitches[4]; /* pitch for each plane */ - __u32 offsets[4]; /* offset of each plane */ - __u64 modifier[4]; /* ie, tiling, compress */ -}; - -#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01 -#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02 -#define DRM_MODE_FB_DIRTY_FLAGS 0x03 - -#define DRM_MODE_FB_DIRTY_MAX_CLIPS 256 - -/* - * Mark a region of a framebuffer as dirty. - * - * Some hardware does not automatically update display contents - * as a hardware or software draw to a framebuffer. This ioctl - * allows userspace to tell the kernel and the hardware what - * regions of the framebuffer have changed. - * - * The kernel or hardware is free to update more then just the - * region specified by the clip rects. The kernel or hardware - * may also delay and/or coalesce several calls to dirty into a - * single update. - * - * Userspace may annotate the updates, the annotates are a - * promise made by the caller that the change is either a copy - * of pixels or a fill of a single color in the region specified. - * - * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then - * the number of updated regions are half of num_clips given, - * where the clip rects are paired in src and dst. The width and - * height of each one of the pairs must match. - * - * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller - * promises that the region specified of the clip rects is filled - * completely with a single color as given in the color argument. - */ - -struct drm_mode_fb_dirty_cmd { - __u32 fb_id; - __u32 flags; - __u32 color; - __u32 num_clips; - __u64 clips_ptr; -}; - -struct drm_mode_mode_cmd { - __u32 connector_id; - struct drm_mode_modeinfo mode; -}; - -#define DRM_MODE_CURSOR_BO 0x01 -#define DRM_MODE_CURSOR_MOVE 0x02 -#define DRM_MODE_CURSOR_FLAGS 0x03 - -/* - * depending on the value in flags different members are used. - * - * CURSOR_BO uses - * crtc_id - * width - * height - * handle - if 0 turns the cursor off - * - * CURSOR_MOVE uses - * crtc_id - * x - * y - */ -struct drm_mode_cursor { - __u32 flags; - __u32 crtc_id; - __s32 x; - __s32 y; - __u32 width; - __u32 height; - /* driver specific handle */ - __u32 handle; -}; - -struct drm_mode_cursor2 { - __u32 flags; - __u32 crtc_id; - __s32 x; - __s32 y; - __u32 width; - __u32 height; - /* driver specific handle */ - __u32 handle; - __s32 hot_x; - __s32 hot_y; -}; - -struct drm_mode_crtc_lut { - __u32 crtc_id; - __u32 gamma_size; - - /* pointers to arrays */ - __u64 red; - __u64 green; - __u64 blue; -}; - -struct drm_color_ctm { - /* - * Conversion matrix in S31.32 sign-magnitude - * (not two's complement!) format. - */ - __u64 matrix[9]; -}; - -struct drm_color_lut { - /* - * Values are mapped linearly to 0.0 - 1.0 range, with 0x0 == 0.0 and - * 0xffff == 1.0. - */ - __u16 red; - __u16 green; - __u16 blue; - __u16 reserved; -}; - -/** - * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data. - * - * HDR Metadata Infoframe as per CTA 861.G spec. This is expected - * to match exactly with the spec. - * - * Userspace is expected to pass the metadata information as per - * the format described in this structure. - */ -struct hdr_metadata_infoframe { - /** - * @eotf: Electro-Optical Transfer Function (EOTF) - * used in the stream. - */ - __u8 eotf; - /** - * @metadata_type: Static_Metadata_Descriptor_ID. - */ - __u8 metadata_type; - /** - * @display_primaries: Color Primaries of the Data. - * These are coded as unsigned 16-bit values in units of - * 0.00002, where 0x0000 represents zero and 0xC350 - * represents 1.0000. - * @display_primaries.x: X cordinate of color primary. - * @display_primaries.y: Y cordinate of color primary. - */ - struct { - __u16 x, y; - } display_primaries[3]; - /** - * @white_point: White Point of Colorspace Data. - * These are coded as unsigned 16-bit values in units of - * 0.00002, where 0x0000 represents zero and 0xC350 - * represents 1.0000. - * @white_point.x: X cordinate of whitepoint of color primary. - * @white_point.y: Y cordinate of whitepoint of color primary. - */ - struct { - __u16 x, y; - } white_point; - /** - * @max_display_mastering_luminance: Max Mastering Display Luminance. - * This value is coded as an unsigned 16-bit value in units of 1 cd/m2, - * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2. - */ - __u16 max_display_mastering_luminance; - /** - * @min_display_mastering_luminance: Min Mastering Display Luminance. - * This value is coded as an unsigned 16-bit value in units of - * 0.0001 cd/m2, where 0x0001 represents 0.0001 cd/m2 and 0xFFFF - * represents 6.5535 cd/m2. - */ - __u16 min_display_mastering_luminance; - /** - * @max_cll: Max Content Light Level. - * This value is coded as an unsigned 16-bit value in units of 1 cd/m2, - * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2. - */ - __u16 max_cll; - /** - * @max_fall: Max Frame Average Light Level. - * This value is coded as an unsigned 16-bit value in units of 1 cd/m2, - * where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2. - */ - __u16 max_fall; -}; - -/** - * struct hdr_output_metadata - HDR output metadata - * - * Metadata Information to be passed from userspace - */ -struct hdr_output_metadata { - /** - * @metadata_type: Static_Metadata_Descriptor_ID. - */ - __u32 metadata_type; - /** - * @hdmi_metadata_type1: HDR Metadata Infoframe. - */ - union { - struct hdr_metadata_infoframe hdmi_metadata_type1; - }; -}; - -#define DRM_MODE_PAGE_FLIP_EVENT 0x01 -#define DRM_MODE_PAGE_FLIP_ASYNC 0x02 -#define DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE 0x4 -#define DRM_MODE_PAGE_FLIP_TARGET_RELATIVE 0x8 -#define DRM_MODE_PAGE_FLIP_TARGET (DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE | \ - DRM_MODE_PAGE_FLIP_TARGET_RELATIVE) -#define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT | \ - DRM_MODE_PAGE_FLIP_ASYNC | \ - DRM_MODE_PAGE_FLIP_TARGET) - -/* - * Request a page flip on the specified crtc. - * - * This ioctl will ask KMS to schedule a page flip for the specified - * crtc. Once any pending rendering targeting the specified fb (as of - * ioctl time) has completed, the crtc will be reprogrammed to display - * that fb after the next vertical refresh. The ioctl returns - * immediately, but subsequent rendering to the current fb will block - * in the execbuffer ioctl until the page flip happens. If a page - * flip is already pending as the ioctl is called, EBUSY will be - * returned. - * - * Flag DRM_MODE_PAGE_FLIP_EVENT requests that drm sends back a vblank - * event (see drm.h: struct drm_event_vblank) when the page flip is - * done. The user_data field passed in with this ioctl will be - * returned as the user_data field in the vblank event struct. - * - * Flag DRM_MODE_PAGE_FLIP_ASYNC requests that the flip happen - * 'as soon as possible', meaning that it not delay waiting for vblank. - * This may cause tearing on the screen. - * - * The reserved field must be zero. - */ - -struct drm_mode_crtc_page_flip { - __u32 crtc_id; - __u32 fb_id; - __u32 flags; - __u32 reserved; - __u64 user_data; -}; - -/* - * Request a page flip on the specified crtc. - * - * Same as struct drm_mode_crtc_page_flip, but supports new flags and - * re-purposes the reserved field: - * - * The sequence field must be zero unless either of the - * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is specified. When - * the ABSOLUTE flag is specified, the sequence field denotes the absolute - * vblank sequence when the flip should take effect. When the RELATIVE - * flag is specified, the sequence field denotes the relative (to the - * current one when the ioctl is called) vblank sequence when the flip - * should take effect. NOTE: DRM_IOCTL_WAIT_VBLANK must still be used to - * make sure the vblank sequence before the target one has passed before - * calling this ioctl. The purpose of the - * DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags is merely to clarify - * the target for when code dealing with a page flip runs during a - * vertical blank period. - */ - -struct drm_mode_crtc_page_flip_target { - __u32 crtc_id; - __u32 fb_id; - __u32 flags; - __u32 sequence; - __u64 user_data; -}; - -/* create a dumb scanout buffer */ -struct drm_mode_create_dumb { - __u32 height; - __u32 width; - __u32 bpp; - __u32 flags; - /* handle, pitch, size will be returned */ - __u32 handle; - __u32 pitch; - __u64 size; -}; - -/* set up for mmap of a dumb scanout buffer */ -struct drm_mode_map_dumb { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 pad; - /** - * Fake offset to use for subsequent mmap call - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 offset; -}; - -struct drm_mode_destroy_dumb { - __u32 handle; -}; - -/* page-flip flags are valid, plus: */ -#define DRM_MODE_ATOMIC_TEST_ONLY 0x0100 -#define DRM_MODE_ATOMIC_NONBLOCK 0x0200 -#define DRM_MODE_ATOMIC_ALLOW_MODESET 0x0400 - -#define DRM_MODE_ATOMIC_FLAGS (\ - DRM_MODE_PAGE_FLIP_EVENT |\ - DRM_MODE_PAGE_FLIP_ASYNC |\ - DRM_MODE_ATOMIC_TEST_ONLY |\ - DRM_MODE_ATOMIC_NONBLOCK |\ - DRM_MODE_ATOMIC_ALLOW_MODESET) - -struct drm_mode_atomic { - __u32 flags; - __u32 count_objs; - __u64 objs_ptr; - __u64 count_props_ptr; - __u64 props_ptr; - __u64 prop_values_ptr; - __u64 reserved; - __u64 user_data; -}; - -struct drm_format_modifier_blob { -#define FORMAT_BLOB_CURRENT 1 - /* Version of this blob format */ - __u32 version; - - /* Flags */ - __u32 flags; - - /* Number of fourcc formats supported */ - __u32 count_formats; - - /* Where in this blob the formats exist (in bytes) */ - __u32 formats_offset; - - /* Number of drm_format_modifiers */ - __u32 count_modifiers; - - /* Where in this blob the modifiers exist (in bytes) */ - __u32 modifiers_offset; - - /* __u32 formats[] */ - /* struct drm_format_modifier modifiers[] */ -}; - -struct drm_format_modifier { - /* Bitmask of formats in get_plane format list this info applies to. The - * offset allows a sliding window of which 64 formats (bits). - * - * Some examples: - * In today's world with < 65 formats, and formats 0, and 2 are - * supported - * 0x0000000000000005 - * ^-offset = 0, formats = 5 - * - * If the number formats grew to 128, and formats 98-102 are - * supported with the modifier: - * - * 0x0000007c00000000 0000000000000000 - * ^ - * |__offset = 64, formats = 0x7c00000000 - * - */ - __u64 formats; - __u32 offset; - __u32 pad; - - /* The modifier that applies to the >get_plane format list bitmask. */ - __u64 modifier; -}; - -/** - * struct drm_mode_create_blob - Create New blob property - * - * Create a new 'blob' data property, copying length bytes from data pointer, - * and returning new blob ID. - */ -struct drm_mode_create_blob { - /** @data: Pointer to data to copy. */ - __u64 data; - /** @length: Length of data to copy. */ - __u32 length; - /** @blob_id: Return: new property ID. */ - __u32 blob_id; -}; - -/** - * struct drm_mode_destroy_blob - Destroy user blob - * @blob_id: blob_id to destroy - * - * Destroy a user-created blob property. - * - * User-space can release blobs as soon as they do not need to refer to them by - * their blob object ID. For instance, if you are using a MODE_ID blob in an - * atomic commit and you will not make another commit re-using the same ID, you - * can destroy the blob as soon as the commit has been issued, without waiting - * for it to complete. - */ -struct drm_mode_destroy_blob { - __u32 blob_id; -}; - -/** - * struct drm_mode_create_lease - Create lease - * - * Lease mode resources, creating another drm_master. - */ -struct drm_mode_create_lease { - /** @object_ids: Pointer to array of object ids (__u32) */ - __u64 object_ids; - /** @object_count: Number of object ids */ - __u32 object_count; - /** @flags: flags for new FD (O_CLOEXEC, etc) */ - __u32 flags; - - /** @lessee_id: Return: unique identifier for lessee. */ - __u32 lessee_id; - /** @fd: Return: file descriptor to new drm_master file */ - __u32 fd; -}; - -/** - * struct drm_mode_list_lessees - List lessees - * - * List lesses from a drm_master. - */ -struct drm_mode_list_lessees { - /** - * @count_lessees: Number of lessees. - * - * On input, provides length of the array. - * On output, provides total number. No - * more than the input number will be written - * back, so two calls can be used to get - * the size and then the data. - */ - __u32 count_lessees; - /** @pad: Padding. */ - __u32 pad; - - /** - * @lessees_ptr: Pointer to lessees. - * - * Pointer to __u64 array of lessee ids - */ - __u64 lessees_ptr; -}; - -/** - * struct drm_mode_get_lease - Get Lease - * - * Get leased objects. - */ -struct drm_mode_get_lease { - /** - * @count_objects: Number of leased objects. - * - * On input, provides length of the array. - * On output, provides total number. No - * more than the input number will be written - * back, so two calls can be used to get - * the size and then the data. - */ - __u32 count_objects; - /** @pad: Padding. */ - __u32 pad; - - /** - * @objects_ptr: Pointer to objects. - * - * Pointer to __u32 array of object ids. - */ - __u64 objects_ptr; -}; - -/** - * struct drm_mode_revoke_lease - Revoke lease - */ -struct drm_mode_revoke_lease { - /** @lessee_id: Unique ID of lessee */ - __u32 lessee_id; -}; - -/** - * struct drm_mode_rect - Two dimensional rectangle. - * @x1: Horizontal starting coordinate (inclusive). - * @y1: Vertical starting coordinate (inclusive). - * @x2: Horizontal ending coordinate (exclusive). - * @y2: Vertical ending coordinate (exclusive). - * - * With drm subsystem using struct drm_rect to manage rectangular area this - * export it to user-space. - * - * Currently used by drm_mode_atomic blob property FB_DAMAGE_CLIPS. - */ -struct drm_mode_rect { - __s32 x1; - __s32 y1; - __s32 x2; - __s32 y2; -}; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/libdrm/drm_sarea.h b/prebuilts/x86_64/include/libdrm/drm_sarea.h deleted file mode 100644 index 93025be..0000000 --- a/prebuilts/x86_64/include/libdrm/drm_sarea.h +++ /dev/null @@ -1,92 +0,0 @@ -/** - * \file drm_sarea.h - * \brief SAREA definitions - * - * \author Michel Dänzer - */ - -/* - * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef _DRM_SAREA_H_ -#define _DRM_SAREA_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* SAREA area needs to be at least a page */ -#if defined(__alpha__) -#define SAREA_MAX 0x2000U -#elif defined(__mips__) -#define SAREA_MAX 0x4000U -#elif defined(__ia64__) -#define SAREA_MAX 0x10000U /* 64kB */ -#else -/* Intel 830M driver needs at least 8k SAREA */ -#define SAREA_MAX 0x2000U -#endif - -/** Maximum number of drawables in the SAREA */ -#define SAREA_MAX_DRAWABLES 256 - -#define SAREA_DRAWABLE_CLAIMED_ENTRY 0x80000000 - -/** SAREA drawable */ -struct drm_sarea_drawable { - unsigned int stamp; - unsigned int flags; -}; - -/** SAREA frame */ -struct drm_sarea_frame { - unsigned int x; - unsigned int y; - unsigned int width; - unsigned int height; - unsigned int fullscreen; -}; - -/** SAREA */ -struct drm_sarea { - /** first thing is always the DRM locking structure */ - struct drm_hw_lock lock; - /** \todo Use readers/writer lock for drm_sarea::drawable_lock */ - struct drm_hw_lock drawable_lock; - struct drm_sarea_drawable drawableTable[SAREA_MAX_DRAWABLES]; /**< drawables */ - struct drm_sarea_frame frame; /**< frame */ - drm_context_t dummy_context; -}; - -typedef struct drm_sarea_drawable drm_sarea_drawable_t; -typedef struct drm_sarea_frame drm_sarea_frame_t; -typedef struct drm_sarea drm_sarea_t; - -#if defined(__cplusplus) -} -#endif - -#endif /* _DRM_SAREA_H_ */ diff --git a/prebuilts/x86_64/include/libdrm/i915_drm.h b/prebuilts/x86_64/include/libdrm/i915_drm.h deleted file mode 100644 index 72afd94..0000000 --- a/prebuilts/x86_64/include/libdrm/i915_drm.h +++ /dev/null @@ -1,1915 +0,0 @@ -/* - * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ - -#ifndef _I915_DRM_H_ -#define _I915_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints. - */ - -/** - * DOC: uevents generated by i915 on it's device node - * - * I915_L3_PARITY_UEVENT - Generated when the driver receives a parity mismatch - * event from the gpu l3 cache. Additional information supplied is ROW, - * BANK, SUBBANK, SLICE of the affected cacheline. Userspace should keep - * track of these events and if a specific cache-line seems to have a - * persistent error remap it with the l3 remapping tool supplied in - * intel-gpu-tools. The value supplied with the event is always 1. - * - * I915_ERROR_UEVENT - Generated upon error detection, currently only via - * hangcheck. The error detection event is a good indicator of when things - * began to go badly. The value supplied with the event is a 1 upon error - * detection, and a 0 upon reset completion, signifying no more error - * exists. NOTE: Disabling hangcheck or reset via module parameter will - * cause the related events to not be seen. - * - * I915_RESET_UEVENT - Event is generated just before an attempt to reset the - * the GPU. The value supplied with the event is always 1. NOTE: Disable - * reset via module parameter will cause this event to not be seen. - */ -#define I915_L3_PARITY_UEVENT "L3_PARITY_ERROR" -#define I915_ERROR_UEVENT "ERROR" -#define I915_RESET_UEVENT "RESET" - -/* - * i915_user_extension: Base class for defining a chain of extensions - * - * Many interfaces need to grow over time. In most cases we can simply - * extend the struct and have userspace pass in more data. Another option, - * as demonstrated by Vulkan's approach to providing extensions for forward - * and backward compatibility, is to use a list of optional structs to - * provide those extra details. - * - * The key advantage to using an extension chain is that it allows us to - * redefine the interface more easily than an ever growing struct of - * increasing complexity, and for large parts of that interface to be - * entirely optional. The downside is more pointer chasing; chasing across - * the boundary with pointers encapsulated inside u64. - */ -struct i915_user_extension { - __u64 next_extension; - __u32 name; - __u32 flags; /* All undefined bits must be zero. */ - __u32 rsvd[4]; /* Reserved for future use; must be zero. */ -}; - -/* - * MOCS indexes used for GPU surfaces, defining the cacheability of the - * surface data and the coherency for this data wrt. CPU vs. GPU accesses. - */ -enum i915_mocs_table_index { - /* - * Not cached anywhere, coherency between CPU and GPU accesses is - * guaranteed. - */ - I915_MOCS_UNCACHED, - /* - * Cacheability and coherency controlled by the kernel automatically - * based on the DRM_I915_GEM_SET_CACHING IOCTL setting and the current - * usage of the surface (used for display scanout or not). - */ - I915_MOCS_PTE, - /* - * Cached in all GPU caches available on the platform. - * Coherency between CPU and GPU accesses to the surface is not - * guaranteed without extra synchronization. - */ - I915_MOCS_CACHED, -}; - -/* - * Different engines serve different roles, and there may be more than one - * engine serving each role. enum drm_i915_gem_engine_class provides a - * classification of the role of the engine, which may be used when requesting - * operations to be performed on a certain subset of engines, or for providing - * information about that group. - */ -enum drm_i915_gem_engine_class { - I915_ENGINE_CLASS_RENDER = 0, - I915_ENGINE_CLASS_COPY = 1, - I915_ENGINE_CLASS_VIDEO = 2, - I915_ENGINE_CLASS_VIDEO_ENHANCE = 3, - - /* should be kept compact */ - - I915_ENGINE_CLASS_INVALID = -1 -}; - -/** - * DOC: perf_events exposed by i915 through /sys/bus/event_sources/drivers/i915 - * - */ - -enum drm_i915_pmu_engine_sample { - I915_SAMPLE_BUSY = 0, - I915_SAMPLE_WAIT = 1, - I915_SAMPLE_SEMA = 2 -}; - -#define I915_PMU_SAMPLE_BITS (4) -#define I915_PMU_SAMPLE_MASK (0xf) -#define I915_PMU_SAMPLE_INSTANCE_BITS (8) -#define I915_PMU_CLASS_SHIFT \ - (I915_PMU_SAMPLE_BITS + I915_PMU_SAMPLE_INSTANCE_BITS) - -#define __I915_PMU_ENGINE(class, instance, sample) \ - ((class) << I915_PMU_CLASS_SHIFT | \ - (instance) << I915_PMU_SAMPLE_BITS | \ - (sample)) - -#define I915_PMU_ENGINE_BUSY(class, instance) \ - __I915_PMU_ENGINE(class, instance, I915_SAMPLE_BUSY) - -#define I915_PMU_ENGINE_WAIT(class, instance) \ - __I915_PMU_ENGINE(class, instance, I915_SAMPLE_WAIT) - -#define I915_PMU_ENGINE_SEMA(class, instance) \ - __I915_PMU_ENGINE(class, instance, I915_SAMPLE_SEMA) - -#define __I915_PMU_OTHER(x) (__I915_PMU_ENGINE(0xff, 0xff, 0xf) + 1 + (x)) - -#define I915_PMU_ACTUAL_FREQUENCY __I915_PMU_OTHER(0) -#define I915_PMU_REQUESTED_FREQUENCY __I915_PMU_OTHER(1) -#define I915_PMU_INTERRUPTS __I915_PMU_OTHER(2) -#define I915_PMU_RC6_RESIDENCY __I915_PMU_OTHER(3) - -#define I915_PMU_LAST I915_PMU_RC6_RESIDENCY - -/* Each region is a minimum of 16k, and there are at most 255 of them. - */ -#define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use - * of chars for next/prev indices */ -#define I915_LOG_MIN_TEX_REGION_SIZE 14 - -typedef struct _drm_i915_init { - enum { - I915_INIT_DMA = 0x01, - I915_CLEANUP_DMA = 0x02, - I915_RESUME_DMA = 0x03 - } func; - unsigned int mmio_offset; - int sarea_priv_offset; - unsigned int ring_start; - unsigned int ring_end; - unsigned int ring_size; - unsigned int front_offset; - unsigned int back_offset; - unsigned int depth_offset; - unsigned int w; - unsigned int h; - unsigned int pitch; - unsigned int pitch_bits; - unsigned int back_pitch; - unsigned int depth_pitch; - unsigned int cpp; - unsigned int chipset; -} drm_i915_init_t; - -typedef struct _drm_i915_sarea { - struct drm_tex_region texList[I915_NR_TEX_REGIONS + 1]; - int last_upload; /* last time texture was uploaded */ - int last_enqueue; /* last time a buffer was enqueued */ - int last_dispatch; /* age of the most recently dispatched buffer */ - int ctxOwner; /* last context to upload state */ - int texAge; - int pf_enabled; /* is pageflipping allowed? */ - int pf_active; - int pf_current_page; /* which buffer is being displayed? */ - int perf_boxes; /* performance boxes to be displayed */ - int width, height; /* screen size in pixels */ - - drm_handle_t front_handle; - int front_offset; - int front_size; - - drm_handle_t back_handle; - int back_offset; - int back_size; - - drm_handle_t depth_handle; - int depth_offset; - int depth_size; - - drm_handle_t tex_handle; - int tex_offset; - int tex_size; - int log_tex_granularity; - int pitch; - int rotation; /* 0, 90, 180 or 270 */ - int rotated_offset; - int rotated_size; - int rotated_pitch; - int virtualX, virtualY; - - unsigned int front_tiled; - unsigned int back_tiled; - unsigned int depth_tiled; - unsigned int rotated_tiled; - unsigned int rotated2_tiled; - - int pipeA_x; - int pipeA_y; - int pipeA_w; - int pipeA_h; - int pipeB_x; - int pipeB_y; - int pipeB_w; - int pipeB_h; - - /* fill out some space for old userspace triple buffer */ - drm_handle_t unused_handle; - __u32 unused1, unused2, unused3; - - /* buffer object handles for static buffers. May change - * over the lifetime of the client. - */ - __u32 front_bo_handle; - __u32 back_bo_handle; - __u32 unused_bo_handle; - __u32 depth_bo_handle; - -} drm_i915_sarea_t; - -/* due to userspace building against these headers we need some compat here */ -#define planeA_x pipeA_x -#define planeA_y pipeA_y -#define planeA_w pipeA_w -#define planeA_h pipeA_h -#define planeB_x pipeB_x -#define planeB_y pipeB_y -#define planeB_w pipeB_w -#define planeB_h pipeB_h - -/* Flags for perf_boxes - */ -#define I915_BOX_RING_EMPTY 0x1 -#define I915_BOX_FLIP 0x2 -#define I915_BOX_WAIT 0x4 -#define I915_BOX_TEXTURE_LOAD 0x8 -#define I915_BOX_LOST_CONTEXT 0x10 - -/* - * i915 specific ioctls. - * - * The device specific ioctl range is [DRM_COMMAND_BASE, DRM_COMMAND_END) ie - * [0x40, 0xa0) (a0 is excluded). The numbers below are defined as offset - * against DRM_COMMAND_BASE and should be between [0x0, 0x60). - */ -#define DRM_I915_INIT 0x00 -#define DRM_I915_FLUSH 0x01 -#define DRM_I915_FLIP 0x02 -#define DRM_I915_BATCHBUFFER 0x03 -#define DRM_I915_IRQ_EMIT 0x04 -#define DRM_I915_IRQ_WAIT 0x05 -#define DRM_I915_GETPARAM 0x06 -#define DRM_I915_SETPARAM 0x07 -#define DRM_I915_ALLOC 0x08 -#define DRM_I915_FREE 0x09 -#define DRM_I915_INIT_HEAP 0x0a -#define DRM_I915_CMDBUFFER 0x0b -#define DRM_I915_DESTROY_HEAP 0x0c -#define DRM_I915_SET_VBLANK_PIPE 0x0d -#define DRM_I915_GET_VBLANK_PIPE 0x0e -#define DRM_I915_VBLANK_SWAP 0x0f -#define DRM_I915_HWS_ADDR 0x11 -#define DRM_I915_GEM_INIT 0x13 -#define DRM_I915_GEM_EXECBUFFER 0x14 -#define DRM_I915_GEM_PIN 0x15 -#define DRM_I915_GEM_UNPIN 0x16 -#define DRM_I915_GEM_BUSY 0x17 -#define DRM_I915_GEM_THROTTLE 0x18 -#define DRM_I915_GEM_ENTERVT 0x19 -#define DRM_I915_GEM_LEAVEVT 0x1a -#define DRM_I915_GEM_CREATE 0x1b -#define DRM_I915_GEM_PREAD 0x1c -#define DRM_I915_GEM_PWRITE 0x1d -#define DRM_I915_GEM_MMAP 0x1e -#define DRM_I915_GEM_SET_DOMAIN 0x1f -#define DRM_I915_GEM_SW_FINISH 0x20 -#define DRM_I915_GEM_SET_TILING 0x21 -#define DRM_I915_GEM_GET_TILING 0x22 -#define DRM_I915_GEM_GET_APERTURE 0x23 -#define DRM_I915_GEM_MMAP_GTT 0x24 -#define DRM_I915_GET_PIPE_FROM_CRTC_ID 0x25 -#define DRM_I915_GEM_MADVISE 0x26 -#define DRM_I915_OVERLAY_PUT_IMAGE 0x27 -#define DRM_I915_OVERLAY_ATTRS 0x28 -#define DRM_I915_GEM_EXECBUFFER2 0x29 -#define DRM_I915_GEM_EXECBUFFER2_WR DRM_I915_GEM_EXECBUFFER2 -#define DRM_I915_GET_SPRITE_COLORKEY 0x2a -#define DRM_I915_SET_SPRITE_COLORKEY 0x2b -#define DRM_I915_GEM_WAIT 0x2c -#define DRM_I915_GEM_CONTEXT_CREATE 0x2d -#define DRM_I915_GEM_CONTEXT_DESTROY 0x2e -#define DRM_I915_GEM_SET_CACHING 0x2f -#define DRM_I915_GEM_GET_CACHING 0x30 -#define DRM_I915_REG_READ 0x31 -#define DRM_I915_GET_RESET_STATS 0x32 -#define DRM_I915_GEM_USERPTR 0x33 -#define DRM_I915_GEM_CONTEXT_GETPARAM 0x34 -#define DRM_I915_GEM_CONTEXT_SETPARAM 0x35 -#define DRM_I915_PERF_OPEN 0x36 -#define DRM_I915_PERF_ADD_CONFIG 0x37 -#define DRM_I915_PERF_REMOVE_CONFIG 0x38 -#define DRM_I915_QUERY 0x39 -/* Must be kept compact -- no holes */ - -#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t) -#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) -#define DRM_IOCTL_I915_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP) -#define DRM_IOCTL_I915_BATCHBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t) -#define DRM_IOCTL_I915_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t) -#define DRM_IOCTL_I915_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t) -#define DRM_IOCTL_I915_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t) -#define DRM_IOCTL_I915_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t) -#define DRM_IOCTL_I915_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t) -#define DRM_IOCTL_I915_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t) -#define DRM_IOCTL_I915_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t) -#define DRM_IOCTL_I915_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t) -#define DRM_IOCTL_I915_DESTROY_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_DESTROY_HEAP, drm_i915_mem_destroy_heap_t) -#define DRM_IOCTL_I915_SET_VBLANK_PIPE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t) -#define DRM_IOCTL_I915_GET_VBLANK_PIPE DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t) -#define DRM_IOCTL_I915_VBLANK_SWAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t) -#define DRM_IOCTL_I915_HWS_ADDR DRM_IOW(DRM_COMMAND_BASE + DRM_I915_HWS_ADDR, struct drm_i915_gem_init) -#define DRM_IOCTL_I915_GEM_INIT DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_INIT, struct drm_i915_gem_init) -#define DRM_IOCTL_I915_GEM_EXECBUFFER DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER, struct drm_i915_gem_execbuffer) -#define DRM_IOCTL_I915_GEM_EXECBUFFER2 DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2, struct drm_i915_gem_execbuffer2) -#define DRM_IOCTL_I915_GEM_EXECBUFFER2_WR DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2_WR, struct drm_i915_gem_execbuffer2) -#define DRM_IOCTL_I915_GEM_PIN DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_PIN, struct drm_i915_gem_pin) -#define DRM_IOCTL_I915_GEM_UNPIN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_UNPIN, struct drm_i915_gem_unpin) -#define DRM_IOCTL_I915_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_BUSY, struct drm_i915_gem_busy) -#define DRM_IOCTL_I915_GEM_SET_CACHING DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_SET_CACHING, struct drm_i915_gem_caching) -#define DRM_IOCTL_I915_GEM_GET_CACHING DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_GET_CACHING, struct drm_i915_gem_caching) -#define DRM_IOCTL_I915_GEM_THROTTLE DRM_IO ( DRM_COMMAND_BASE + DRM_I915_GEM_THROTTLE) -#define DRM_IOCTL_I915_GEM_ENTERVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT) -#define DRM_IOCTL_I915_GEM_LEAVEVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT) -#define DRM_IOCTL_I915_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE, struct drm_i915_gem_create) -#define DRM_IOCTL_I915_GEM_PREAD DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PREAD, struct drm_i915_gem_pread) -#define DRM_IOCTL_I915_GEM_PWRITE DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite) -#define DRM_IOCTL_I915_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap) -#define DRM_IOCTL_I915_GEM_MMAP_GTT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP_GTT, struct drm_i915_gem_mmap_gtt) -#define DRM_IOCTL_I915_GEM_SET_DOMAIN DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SET_DOMAIN, struct drm_i915_gem_set_domain) -#define DRM_IOCTL_I915_GEM_SW_FINISH DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SW_FINISH, struct drm_i915_gem_sw_finish) -#define DRM_IOCTL_I915_GEM_SET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling) -#define DRM_IOCTL_I915_GEM_GET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling) -#define DRM_IOCTL_I915_GEM_GET_APERTURE DRM_IOR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture) -#define DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_PIPE_FROM_CRTC_ID, struct drm_i915_get_pipe_from_crtc_id) -#define DRM_IOCTL_I915_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MADVISE, struct drm_i915_gem_madvise) -#define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE DRM_IOW(DRM_COMMAND_BASE + DRM_I915_OVERLAY_PUT_IMAGE, struct drm_intel_overlay_put_image) -#define DRM_IOCTL_I915_OVERLAY_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_OVERLAY_ATTRS, struct drm_intel_overlay_attrs) -#define DRM_IOCTL_I915_SET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_SET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey) -#define DRM_IOCTL_I915_GET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey) -#define DRM_IOCTL_I915_GEM_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_WAIT, struct drm_i915_gem_wait) -#define DRM_IOCTL_I915_GEM_CONTEXT_CREATE DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create) -#define DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create_ext) -#define DRM_IOCTL_I915_GEM_CONTEXT_DESTROY DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_DESTROY, struct drm_i915_gem_context_destroy) -#define DRM_IOCTL_I915_REG_READ DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_REG_READ, struct drm_i915_reg_read) -#define DRM_IOCTL_I915_GET_RESET_STATS DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GET_RESET_STATS, struct drm_i915_reset_stats) -#define DRM_IOCTL_I915_GEM_USERPTR DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_USERPTR, struct drm_i915_gem_userptr) -#define DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_GETPARAM, struct drm_i915_gem_context_param) -#define DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_SETPARAM, struct drm_i915_gem_context_param) -#define DRM_IOCTL_I915_PERF_OPEN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_OPEN, struct drm_i915_perf_open_param) -#define DRM_IOCTL_I915_PERF_ADD_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config) -#define DRM_IOCTL_I915_PERF_REMOVE_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64) -#define DRM_IOCTL_I915_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_QUERY, struct drm_i915_query) - -/* Allow drivers to submit batchbuffers directly to hardware, relying - * on the security mechanisms provided by hardware. - */ -typedef struct drm_i915_batchbuffer { - int start; /* agp offset */ - int used; /* nr bytes in use */ - int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ - int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ - int num_cliprects; /* mulitpass with multiple cliprects? */ - struct drm_clip_rect *cliprects; /* pointer to userspace cliprects */ -} drm_i915_batchbuffer_t; - -/* As above, but pass a pointer to userspace buffer which can be - * validated by the kernel prior to sending to hardware. - */ -typedef struct _drm_i915_cmdbuffer { - char *buf; /* pointer to userspace command buffer */ - int sz; /* nr bytes in buf */ - int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ - int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ - int num_cliprects; /* mulitpass with multiple cliprects? */ - struct drm_clip_rect *cliprects; /* pointer to userspace cliprects */ -} drm_i915_cmdbuffer_t; - -/* Userspace can request & wait on irq's: - */ -typedef struct drm_i915_irq_emit { - int *irq_seq; -} drm_i915_irq_emit_t; - -typedef struct drm_i915_irq_wait { - int irq_seq; -} drm_i915_irq_wait_t; - -/* - * Different modes of per-process Graphics Translation Table, - * see I915_PARAM_HAS_ALIASING_PPGTT - */ -#define I915_GEM_PPGTT_NONE 0 -#define I915_GEM_PPGTT_ALIASING 1 -#define I915_GEM_PPGTT_FULL 2 - -/* Ioctl to query kernel params: - */ -#define I915_PARAM_IRQ_ACTIVE 1 -#define I915_PARAM_ALLOW_BATCHBUFFER 2 -#define I915_PARAM_LAST_DISPATCH 3 -#define I915_PARAM_CHIPSET_ID 4 -#define I915_PARAM_HAS_GEM 5 -#define I915_PARAM_NUM_FENCES_AVAIL 6 -#define I915_PARAM_HAS_OVERLAY 7 -#define I915_PARAM_HAS_PAGEFLIPPING 8 -#define I915_PARAM_HAS_EXECBUF2 9 -#define I915_PARAM_HAS_BSD 10 -#define I915_PARAM_HAS_BLT 11 -#define I915_PARAM_HAS_RELAXED_FENCING 12 -#define I915_PARAM_HAS_COHERENT_RINGS 13 -#define I915_PARAM_HAS_EXEC_CONSTANTS 14 -#define I915_PARAM_HAS_RELAXED_DELTA 15 -#define I915_PARAM_HAS_GEN7_SOL_RESET 16 -#define I915_PARAM_HAS_LLC 17 -#define I915_PARAM_HAS_ALIASING_PPGTT 18 -#define I915_PARAM_HAS_WAIT_TIMEOUT 19 -#define I915_PARAM_HAS_SEMAPHORES 20 -#define I915_PARAM_HAS_PRIME_VMAP_FLUSH 21 -#define I915_PARAM_HAS_VEBOX 22 -#define I915_PARAM_HAS_SECURE_BATCHES 23 -#define I915_PARAM_HAS_PINNED_BATCHES 24 -#define I915_PARAM_HAS_EXEC_NO_RELOC 25 -#define I915_PARAM_HAS_EXEC_HANDLE_LUT 26 -#define I915_PARAM_HAS_WT 27 -#define I915_PARAM_CMD_PARSER_VERSION 28 -#define I915_PARAM_HAS_COHERENT_PHYS_GTT 29 -#define I915_PARAM_MMAP_VERSION 30 -#define I915_PARAM_HAS_BSD2 31 -#define I915_PARAM_REVISION 32 -#define I915_PARAM_SUBSLICE_TOTAL 33 -#define I915_PARAM_EU_TOTAL 34 -#define I915_PARAM_HAS_GPU_RESET 35 -#define I915_PARAM_HAS_RESOURCE_STREAMER 36 -#define I915_PARAM_HAS_EXEC_SOFTPIN 37 -#define I915_PARAM_HAS_POOLED_EU 38 -#define I915_PARAM_MIN_EU_IN_POOL 39 -#define I915_PARAM_MMAP_GTT_VERSION 40 - -/* - * Query whether DRM_I915_GEM_EXECBUFFER2 supports user defined execution - * priorities and the driver will attempt to execute batches in priority order. - * The param returns a capability bitmask, nonzero implies that the scheduler - * is enabled, with different features present according to the mask. - * - * The initial priority for each batch is supplied by the context and is - * controlled via I915_CONTEXT_PARAM_PRIORITY. - */ -#define I915_PARAM_HAS_SCHEDULER 41 -#define I915_SCHEDULER_CAP_ENABLED (1ul << 0) -#define I915_SCHEDULER_CAP_PRIORITY (1ul << 1) -#define I915_SCHEDULER_CAP_PREEMPTION (1ul << 2) -#define I915_SCHEDULER_CAP_SEMAPHORES (1ul << 3) - -#define I915_PARAM_HUC_STATUS 42 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to opt-out of - * synchronisation with implicit fencing on individual objects. - * See EXEC_OBJECT_ASYNC. - */ -#define I915_PARAM_HAS_EXEC_ASYNC 43 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports explicit fence support - - * both being able to pass in a sync_file fd to wait upon before executing, - * and being able to return a new sync_file fd that is signaled when the - * current request is complete. See I915_EXEC_FENCE_IN and I915_EXEC_FENCE_OUT. - */ -#define I915_PARAM_HAS_EXEC_FENCE 44 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to capture - * user specified buffers for post-mortem debugging of GPU hangs. See - * EXEC_OBJECT_CAPTURE. - */ -#define I915_PARAM_HAS_EXEC_CAPTURE 45 - -#define I915_PARAM_SLICE_MASK 46 - -/* Assuming it's uniform for each slice, this queries the mask of subslices - * per-slice for this system. - */ -#define I915_PARAM_SUBSLICE_MASK 47 - -/* - * Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying the batch buffer - * as the first execobject as opposed to the last. See I915_EXEC_BATCH_FIRST. - */ -#define I915_PARAM_HAS_EXEC_BATCH_FIRST 48 - -/* Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying an array of - * drm_i915_gem_exec_fence structures. See I915_EXEC_FENCE_ARRAY. - */ -#define I915_PARAM_HAS_EXEC_FENCE_ARRAY 49 - -/* - * Query whether every context (both per-file default and user created) is - * isolated (insofar as HW supports). If this parameter is not true, then - * freshly created contexts may inherit values from an existing context, - * rather than default HW values. If true, it also ensures (insofar as HW - * supports) that all state set by this context will not leak to any other - * context. - * - * As not every engine across every gen support contexts, the returned - * value reports the support of context isolation for individual engines by - * returning a bitmask of each engine class set to true if that class supports - * isolation. - */ -#define I915_PARAM_HAS_CONTEXT_ISOLATION 50 - -/* Frequency of the command streamer timestamps given by the *_TIMESTAMP - * registers. This used to be fixed per platform but from CNL onwards, this - * might vary depending on the parts. - */ -#define I915_PARAM_CS_TIMESTAMP_FREQUENCY 51 - -/* - * Once upon a time we supposed that writes through the GGTT would be - * immediately in physical memory (once flushed out of the CPU path). However, - * on a few different processors and chipsets, this is not necessarily the case - * as the writes appear to be buffered internally. Thus a read of the backing - * storage (physical memory) via a different path (with different physical tags - * to the indirect write via the GGTT) will see stale values from before - * the GGTT write. Inside the kernel, we can for the most part keep track of - * the different read/write domains in use (e.g. set-domain), but the assumption - * of coherency is baked into the ABI, hence reporting its true state in this - * parameter. - * - * Reports true when writes via mmap_gtt are immediately visible following an - * lfence to flush the WCB. - * - * Reports false when writes via mmap_gtt are indeterminately delayed in an in - * internal buffer and are _not_ immediately visible to third parties accessing - * directly via mmap_cpu/mmap_wc. Use of mmap_gtt as part of an IPC - * communications channel when reporting false is strongly disadvised. - */ -#define I915_PARAM_MMAP_GTT_COHERENT 52 - -/* Must be kept compact -- no holes and well documented */ - -typedef struct drm_i915_getparam { - __s32 param; - /* - * WARNING: Using pointers instead of fixed-size u64 means we need to write - * compat32 code. Don't repeat this mistake. - */ - int *value; -} drm_i915_getparam_t; - -/* Ioctl to set kernel params: - */ -#define I915_SETPARAM_USE_MI_BATCHBUFFER_START 1 -#define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY 2 -#define I915_SETPARAM_ALLOW_BATCHBUFFER 3 -#define I915_SETPARAM_NUM_USED_FENCES 4 -/* Must be kept compact -- no holes */ - -typedef struct drm_i915_setparam { - int param; - int value; -} drm_i915_setparam_t; - -/* A memory manager for regions of shared memory: - */ -#define I915_MEM_REGION_AGP 1 - -typedef struct drm_i915_mem_alloc { - int region; - int alignment; - int size; - int *region_offset; /* offset from start of fb or agp */ -} drm_i915_mem_alloc_t; - -typedef struct drm_i915_mem_free { - int region; - int region_offset; -} drm_i915_mem_free_t; - -typedef struct drm_i915_mem_init_heap { - int region; - int size; - int start; -} drm_i915_mem_init_heap_t; - -/* Allow memory manager to be torn down and re-initialized (eg on - * rotate): - */ -typedef struct drm_i915_mem_destroy_heap { - int region; -} drm_i915_mem_destroy_heap_t; - -/* Allow X server to configure which pipes to monitor for vblank signals - */ -#define DRM_I915_VBLANK_PIPE_A 1 -#define DRM_I915_VBLANK_PIPE_B 2 - -typedef struct drm_i915_vblank_pipe { - int pipe; -} drm_i915_vblank_pipe_t; - -/* Schedule buffer swap at given vertical blank: - */ -typedef struct drm_i915_vblank_swap { - drm_drawable_t drawable; - enum drm_vblank_seq_type seqtype; - unsigned int sequence; -} drm_i915_vblank_swap_t; - -typedef struct drm_i915_hws_addr { - __u64 addr; -} drm_i915_hws_addr_t; - -struct drm_i915_gem_init { - /** - * Beginning offset in the GTT to be managed by the DRM memory - * manager. - */ - __u64 gtt_start; - /** - * Ending offset in the GTT to be managed by the DRM memory - * manager. - */ - __u64 gtt_end; -}; - -struct drm_i915_gem_create { - /** - * Requested size for the object. - * - * The (page-aligned) allocated size for the object will be returned. - */ - __u64 size; - /** - * Returned handle for the object. - * - * Object handles are nonzero. - */ - __u32 handle; - __u32 pad; -}; - -struct drm_i915_gem_pread { - /** Handle for the object being read. */ - __u32 handle; - __u32 pad; - /** Offset into the object to read from */ - __u64 offset; - /** Length of data to read */ - __u64 size; - /** - * Pointer to write the data into. - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 data_ptr; -}; - -struct drm_i915_gem_pwrite { - /** Handle for the object being written to. */ - __u32 handle; - __u32 pad; - /** Offset into the object to write to */ - __u64 offset; - /** Length of data to write */ - __u64 size; - /** - * Pointer to read the data from. - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 data_ptr; -}; - -struct drm_i915_gem_mmap { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 pad; - /** Offset in the object to map. */ - __u64 offset; - /** - * Length of data to map. - * - * The value will be page-aligned. - */ - __u64 size; - /** - * Returned pointer the data was mapped at. - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 addr_ptr; - - /** - * Flags for extended behaviour. - * - * Added in version 2. - */ - __u64 flags; -#define I915_MMAP_WC 0x1 -}; - -struct drm_i915_gem_mmap_gtt { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 pad; - /** - * Fake offset to use for subsequent mmap call - * - * This is a fixed-size type for 32/64 compatibility. - */ - __u64 offset; -}; - -struct drm_i915_gem_set_domain { - /** Handle for the object */ - __u32 handle; - - /** New read domains */ - __u32 read_domains; - - /** New write domain */ - __u32 write_domain; -}; - -struct drm_i915_gem_sw_finish { - /** Handle for the object */ - __u32 handle; -}; - -struct drm_i915_gem_relocation_entry { - /** - * Handle of the buffer being pointed to by this relocation entry. - * - * It's appealing to make this be an index into the mm_validate_entry - * list to refer to the buffer, but this allows the driver to create - * a relocation list for state buffers and not re-write it per - * exec using the buffer. - */ - __u32 target_handle; - - /** - * Value to be added to the offset of the target buffer to make up - * the relocation entry. - */ - __u32 delta; - - /** Offset in the buffer the relocation entry will be written into */ - __u64 offset; - - /** - * Offset value of the target buffer that the relocation entry was last - * written as. - * - * If the buffer has the same offset as last time, we can skip syncing - * and writing the relocation. This value is written back out by - * the execbuffer ioctl when the relocation is written. - */ - __u64 presumed_offset; - - /** - * Target memory domains read by this operation. - */ - __u32 read_domains; - - /** - * Target memory domains written by this operation. - * - * Note that only one domain may be written by the whole - * execbuffer operation, so that where there are conflicts, - * the application will get -EINVAL back. - */ - __u32 write_domain; -}; - -/** @{ - * Intel memory domains - * - * Most of these just align with the various caches in - * the system and are used to flush and invalidate as - * objects end up cached in different domains. - */ -/** CPU cache */ -#define I915_GEM_DOMAIN_CPU 0x00000001 -/** Render cache, used by 2D and 3D drawing */ -#define I915_GEM_DOMAIN_RENDER 0x00000002 -/** Sampler cache, used by texture engine */ -#define I915_GEM_DOMAIN_SAMPLER 0x00000004 -/** Command queue, used to load batch buffers */ -#define I915_GEM_DOMAIN_COMMAND 0x00000008 -/** Instruction cache, used by shader programs */ -#define I915_GEM_DOMAIN_INSTRUCTION 0x00000010 -/** Vertex address cache */ -#define I915_GEM_DOMAIN_VERTEX 0x00000020 -/** GTT domain - aperture and scanout */ -#define I915_GEM_DOMAIN_GTT 0x00000040 -/** WC domain - uncached access */ -#define I915_GEM_DOMAIN_WC 0x00000080 -/** @} */ - -struct drm_i915_gem_exec_object { - /** - * User's handle for a buffer to be bound into the GTT for this - * operation. - */ - __u32 handle; - - /** Number of relocations to be performed on this buffer */ - __u32 relocation_count; - /** - * Pointer to array of struct drm_i915_gem_relocation_entry containing - * the relocations to be performed in this buffer. - */ - __u64 relocs_ptr; - - /** Required alignment in graphics aperture */ - __u64 alignment; - - /** - * Returned value of the updated offset of the object, for future - * presumed_offset writes. - */ - __u64 offset; -}; - -struct drm_i915_gem_execbuffer { - /** - * List of buffers to be validated with their relocations to be - * performend on them. - * - * This is a pointer to an array of struct drm_i915_gem_validate_entry. - * - * These buffers must be listed in an order such that all relocations - * a buffer is performing refer to buffers that have already appeared - * in the validate list. - */ - __u64 buffers_ptr; - __u32 buffer_count; - - /** Offset in the batchbuffer to start execution from. */ - __u32 batch_start_offset; - /** Bytes used in batchbuffer from batch_start_offset */ - __u32 batch_len; - __u32 DR1; - __u32 DR4; - __u32 num_cliprects; - /** This is a struct drm_clip_rect *cliprects */ - __u64 cliprects_ptr; -}; - -struct drm_i915_gem_exec_object2 { - /** - * User's handle for a buffer to be bound into the GTT for this - * operation. - */ - __u32 handle; - - /** Number of relocations to be performed on this buffer */ - __u32 relocation_count; - /** - * Pointer to array of struct drm_i915_gem_relocation_entry containing - * the relocations to be performed in this buffer. - */ - __u64 relocs_ptr; - - /** Required alignment in graphics aperture */ - __u64 alignment; - - /** - * When the EXEC_OBJECT_PINNED flag is specified this is populated by - * the user with the GTT offset at which this object will be pinned. - * When the I915_EXEC_NO_RELOC flag is specified this must contain the - * presumed_offset of the object. - * During execbuffer2 the kernel populates it with the value of the - * current GTT offset of the object, for future presumed_offset writes. - */ - __u64 offset; - -#define EXEC_OBJECT_NEEDS_FENCE (1<<0) -#define EXEC_OBJECT_NEEDS_GTT (1<<1) -#define EXEC_OBJECT_WRITE (1<<2) -#define EXEC_OBJECT_SUPPORTS_48B_ADDRESS (1<<3) -#define EXEC_OBJECT_PINNED (1<<4) -#define EXEC_OBJECT_PAD_TO_SIZE (1<<5) -/* The kernel implicitly tracks GPU activity on all GEM objects, and - * synchronises operations with outstanding rendering. This includes - * rendering on other devices if exported via dma-buf. However, sometimes - * this tracking is too coarse and the user knows better. For example, - * if the object is split into non-overlapping ranges shared between different - * clients or engines (i.e. suballocating objects), the implicit tracking - * by kernel assumes that each operation affects the whole object rather - * than an individual range, causing needless synchronisation between clients. - * The kernel will also forgo any CPU cache flushes prior to rendering from - * the object as the client is expected to be also handling such domain - * tracking. - * - * The kernel maintains the implicit tracking in order to manage resources - * used by the GPU - this flag only disables the synchronisation prior to - * rendering with this object in this execbuf. - * - * Opting out of implicit synhronisation requires the user to do its own - * explicit tracking to avoid rendering corruption. See, for example, - * I915_PARAM_HAS_EXEC_FENCE to order execbufs and execute them asynchronously. - */ -#define EXEC_OBJECT_ASYNC (1<<6) -/* Request that the contents of this execobject be copied into the error - * state upon a GPU hang involving this batch for post-mortem debugging. - * These buffers are recorded in no particular order as "user" in - * /sys/class/drm/cardN/error. Query I915_PARAM_HAS_EXEC_CAPTURE to see - * if the kernel supports this flag. - */ -#define EXEC_OBJECT_CAPTURE (1<<7) -/* All remaining bits are MBZ and RESERVED FOR FUTURE USE */ -#define __EXEC_OBJECT_UNKNOWN_FLAGS -(EXEC_OBJECT_CAPTURE<<1) - __u64 flags; - - union { - __u64 rsvd1; - __u64 pad_to_size; - }; - __u64 rsvd2; -}; - -struct drm_i915_gem_exec_fence { - /** - * User's handle for a drm_syncobj to wait on or signal. - */ - __u32 handle; - -#define I915_EXEC_FENCE_WAIT (1<<0) -#define I915_EXEC_FENCE_SIGNAL (1<<1) -#define __I915_EXEC_FENCE_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SIGNAL << 1)) - __u32 flags; -}; - -struct drm_i915_gem_execbuffer2 { - /** - * List of gem_exec_object2 structs - */ - __u64 buffers_ptr; - __u32 buffer_count; - - /** Offset in the batchbuffer to start execution from. */ - __u32 batch_start_offset; - /** Bytes used in batchbuffer from batch_start_offset */ - __u32 batch_len; - __u32 DR1; - __u32 DR4; - __u32 num_cliprects; - /** - * This is a struct drm_clip_rect *cliprects if I915_EXEC_FENCE_ARRAY - * is not set. If I915_EXEC_FENCE_ARRAY is set, then this is a - * struct drm_i915_gem_exec_fence *fences. - */ - __u64 cliprects_ptr; -#define I915_EXEC_RING_MASK (0x3f) -#define I915_EXEC_DEFAULT (0<<0) -#define I915_EXEC_RENDER (1<<0) -#define I915_EXEC_BSD (2<<0) -#define I915_EXEC_BLT (3<<0) -#define I915_EXEC_VEBOX (4<<0) - -/* Used for switching the constants addressing mode on gen4+ RENDER ring. - * Gen6+ only supports relative addressing to dynamic state (default) and - * absolute addressing. - * - * These flags are ignored for the BSD and BLT rings. - */ -#define I915_EXEC_CONSTANTS_MASK (3<<6) -#define I915_EXEC_CONSTANTS_REL_GENERAL (0<<6) /* default */ -#define I915_EXEC_CONSTANTS_ABSOLUTE (1<<6) -#define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) /* gen4/5 only */ - __u64 flags; - __u64 rsvd1; /* now used for context info */ - __u64 rsvd2; -}; - -/** Resets the SO write offset registers for transform feedback on gen7. */ -#define I915_EXEC_GEN7_SOL_RESET (1<<8) - -/** Request a privileged ("secure") batch buffer. Note only available for - * DRM_ROOT_ONLY | DRM_MASTER processes. - */ -#define I915_EXEC_SECURE (1<<9) - -/** Inform the kernel that the batch is and will always be pinned. This - * negates the requirement for a workaround to be performed to avoid - * an incoherent CS (such as can be found on 830/845). If this flag is - * not passed, the kernel will endeavour to make sure the batch is - * coherent with the CS before execution. If this flag is passed, - * userspace assumes the responsibility for ensuring the same. - */ -#define I915_EXEC_IS_PINNED (1<<10) - -/** Provide a hint to the kernel that the command stream and auxiliary - * state buffers already holds the correct presumed addresses and so the - * relocation process may be skipped if no buffers need to be moved in - * preparation for the execbuffer. - */ -#define I915_EXEC_NO_RELOC (1<<11) - -/** Use the reloc.handle as an index into the exec object array rather - * than as the per-file handle. - */ -#define I915_EXEC_HANDLE_LUT (1<<12) - -/** Used for switching BSD rings on the platforms with two BSD rings */ -#define I915_EXEC_BSD_SHIFT (13) -#define I915_EXEC_BSD_MASK (3 << I915_EXEC_BSD_SHIFT) -/* default ping-pong mode */ -#define I915_EXEC_BSD_DEFAULT (0 << I915_EXEC_BSD_SHIFT) -#define I915_EXEC_BSD_RING1 (1 << I915_EXEC_BSD_SHIFT) -#define I915_EXEC_BSD_RING2 (2 << I915_EXEC_BSD_SHIFT) - -/** Tell the kernel that the batchbuffer is processed by - * the resource streamer. - */ -#define I915_EXEC_RESOURCE_STREAMER (1<<15) - -/* Setting I915_EXEC_FENCE_IN implies that lower_32_bits(rsvd2) represent - * a sync_file fd to wait upon (in a nonblocking manner) prior to executing - * the batch. - * - * Returns -EINVAL if the sync_file fd cannot be found. - */ -#define I915_EXEC_FENCE_IN (1<<16) - -/* Setting I915_EXEC_FENCE_OUT causes the ioctl to return a sync_file fd - * in the upper_32_bits(rsvd2) upon success. Ownership of the fd is given - * to the caller, and it should be close() after use. (The fd is a regular - * file descriptor and will be cleaned up on process termination. It holds - * a reference to the request, but nothing else.) - * - * The sync_file fd can be combined with other sync_file and passed either - * to execbuf using I915_EXEC_FENCE_IN, to atomic KMS ioctls (so that a flip - * will only occur after this request completes), or to other devices. - * - * Using I915_EXEC_FENCE_OUT requires use of - * DRM_IOCTL_I915_GEM_EXECBUFFER2_WR ioctl so that the result is written - * back to userspace. Failure to do so will cause the out-fence to always - * be reported as zero, and the real fence fd to be leaked. - */ -#define I915_EXEC_FENCE_OUT (1<<17) - -/* - * Traditionally the execbuf ioctl has only considered the final element in - * the execobject[] to be the executable batch. Often though, the client - * will known the batch object prior to construction and being able to place - * it into the execobject[] array first can simplify the relocation tracking. - * Setting I915_EXEC_BATCH_FIRST tells execbuf to use element 0 of the - * execobject[] as the * batch instead (the default is to use the last - * element). - */ -#define I915_EXEC_BATCH_FIRST (1<<18) - -/* Setting I915_FENCE_ARRAY implies that num_cliprects and cliprects_ptr - * define an array of i915_gem_exec_fence structures which specify a set of - * dma fences to wait upon or signal. - */ -#define I915_EXEC_FENCE_ARRAY (1<<19) - -#define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_ARRAY<<1)) - -#define I915_EXEC_CONTEXT_ID_MASK (0xffffffff) -#define i915_execbuffer2_set_context_id(eb2, context) \ - (eb2).rsvd1 = context & I915_EXEC_CONTEXT_ID_MASK -#define i915_execbuffer2_get_context_id(eb2) \ - ((eb2).rsvd1 & I915_EXEC_CONTEXT_ID_MASK) - -struct drm_i915_gem_pin { - /** Handle of the buffer to be pinned. */ - __u32 handle; - __u32 pad; - - /** alignment required within the aperture */ - __u64 alignment; - - /** Returned GTT offset of the buffer. */ - __u64 offset; -}; - -struct drm_i915_gem_unpin { - /** Handle of the buffer to be unpinned. */ - __u32 handle; - __u32 pad; -}; - -struct drm_i915_gem_busy { - /** Handle of the buffer to check for busy */ - __u32 handle; - - /** Return busy status - * - * A return of 0 implies that the object is idle (after - * having flushed any pending activity), and a non-zero return that - * the object is still in-flight on the GPU. (The GPU has not yet - * signaled completion for all pending requests that reference the - * object.) An object is guaranteed to become idle eventually (so - * long as no new GPU commands are executed upon it). Due to the - * asynchronous nature of the hardware, an object reported - * as busy may become idle before the ioctl is completed. - * - * Furthermore, if the object is busy, which engine is busy is only - * provided as a guide and only indirectly by reporting its class - * (there may be more than one engine in each class). There are race - * conditions which prevent the report of which engines are busy from - * being always accurate. However, the converse is not true. If the - * object is idle, the result of the ioctl, that all engines are idle, - * is accurate. - * - * The returned dword is split into two fields to indicate both - * the engine classess on which the object is being read, and the - * engine class on which it is currently being written (if any). - * - * The low word (bits 0:15) indicate if the object is being written - * to by any engine (there can only be one, as the GEM implicit - * synchronisation rules force writes to be serialised). Only the - * engine class (offset by 1, I915_ENGINE_CLASS_RENDER is reported as - * 1 not 0 etc) for the last write is reported. - * - * The high word (bits 16:31) are a bitmask of which engines classes - * are currently reading from the object. Multiple engines may be - * reading from the object simultaneously. - * - * The value of each engine class is the same as specified in the - * I915_CONTEXT_SET_ENGINES parameter and via perf, i.e. - * I915_ENGINE_CLASS_RENDER, I915_ENGINE_CLASS_COPY, etc. - * reported as active itself. Some hardware may have parallel - * execution engines, e.g. multiple media engines, which are - * mapped to the same class identifier and so are not separately - * reported for busyness. - * - * Caveat emptor: - * Only the boolean result of this query is reliable; that is whether - * the object is idle or busy. The report of which engines are busy - * should be only used as a heuristic. - */ - __u32 busy; -}; - -/** - * I915_CACHING_NONE - * - * GPU access is not coherent with cpu caches. Default for machines without an - * LLC. - */ -#define I915_CACHING_NONE 0 -/** - * I915_CACHING_CACHED - * - * GPU access is coherent with cpu caches and furthermore the data is cached in - * last-level caches shared between cpu cores and the gpu GT. Default on - * machines with HAS_LLC. - */ -#define I915_CACHING_CACHED 1 -/** - * I915_CACHING_DISPLAY - * - * Special GPU caching mode which is coherent with the scanout engines. - * Transparently falls back to I915_CACHING_NONE on platforms where no special - * cache mode (like write-through or gfdt flushing) is available. The kernel - * automatically sets this mode when using a buffer as a scanout target. - * Userspace can manually set this mode to avoid a costly stall and clflush in - * the hotpath of drawing the first frame. - */ -#define I915_CACHING_DISPLAY 2 - -struct drm_i915_gem_caching { - /** - * Handle of the buffer to set/get the caching level of. */ - __u32 handle; - - /** - * Caching level to apply or return value - * - * bits0-15 are for generic caching control (i.e. the above defined - * values). bits16-31 are reserved for platform-specific variations - * (e.g. l3$ caching on gen7). */ - __u32 caching; -}; - -#define I915_TILING_NONE 0 -#define I915_TILING_X 1 -#define I915_TILING_Y 2 -#define I915_TILING_LAST I915_TILING_Y - -#define I915_BIT_6_SWIZZLE_NONE 0 -#define I915_BIT_6_SWIZZLE_9 1 -#define I915_BIT_6_SWIZZLE_9_10 2 -#define I915_BIT_6_SWIZZLE_9_11 3 -#define I915_BIT_6_SWIZZLE_9_10_11 4 -/* Not seen by userland */ -#define I915_BIT_6_SWIZZLE_UNKNOWN 5 -/* Seen by userland. */ -#define I915_BIT_6_SWIZZLE_9_17 6 -#define I915_BIT_6_SWIZZLE_9_10_17 7 - -struct drm_i915_gem_set_tiling { - /** Handle of the buffer to have its tiling state updated */ - __u32 handle; - - /** - * Tiling mode for the object (I915_TILING_NONE, I915_TILING_X, - * I915_TILING_Y). - * - * This value is to be set on request, and will be updated by the - * kernel on successful return with the actual chosen tiling layout. - * - * The tiling mode may be demoted to I915_TILING_NONE when the system - * has bit 6 swizzling that can't be managed correctly by GEM. - * - * Buffer contents become undefined when changing tiling_mode. - */ - __u32 tiling_mode; - - /** - * Stride in bytes for the object when in I915_TILING_X or - * I915_TILING_Y. - */ - __u32 stride; - - /** - * Returned address bit 6 swizzling required for CPU access through - * mmap mapping. - */ - __u32 swizzle_mode; -}; - -struct drm_i915_gem_get_tiling { - /** Handle of the buffer to get tiling state for. */ - __u32 handle; - - /** - * Current tiling mode for the object (I915_TILING_NONE, I915_TILING_X, - * I915_TILING_Y). - */ - __u32 tiling_mode; - - /** - * Returned address bit 6 swizzling required for CPU access through - * mmap mapping. - */ - __u32 swizzle_mode; - - /** - * Returned address bit 6 swizzling required for CPU access through - * mmap mapping whilst bound. - */ - __u32 phys_swizzle_mode; -}; - -struct drm_i915_gem_get_aperture { - /** Total size of the aperture used by i915_gem_execbuffer, in bytes */ - __u64 aper_size; - - /** - * Available space in the aperture used by i915_gem_execbuffer, in - * bytes - */ - __u64 aper_available_size; -}; - -struct drm_i915_get_pipe_from_crtc_id { - /** ID of CRTC being requested **/ - __u32 crtc_id; - - /** pipe of requested CRTC **/ - __u32 pipe; -}; - -#define I915_MADV_WILLNEED 0 -#define I915_MADV_DONTNEED 1 -#define __I915_MADV_PURGED 2 /* internal state */ - -struct drm_i915_gem_madvise { - /** Handle of the buffer to change the backing store advice */ - __u32 handle; - - /* Advice: either the buffer will be needed again in the near future, - * or wont be and could be discarded under memory pressure. - */ - __u32 madv; - - /** Whether the backing store still exists. */ - __u32 retained; -}; - -/* flags */ -#define I915_OVERLAY_TYPE_MASK 0xff -#define I915_OVERLAY_YUV_PLANAR 0x01 -#define I915_OVERLAY_YUV_PACKED 0x02 -#define I915_OVERLAY_RGB 0x03 - -#define I915_OVERLAY_DEPTH_MASK 0xff00 -#define I915_OVERLAY_RGB24 0x1000 -#define I915_OVERLAY_RGB16 0x2000 -#define I915_OVERLAY_RGB15 0x3000 -#define I915_OVERLAY_YUV422 0x0100 -#define I915_OVERLAY_YUV411 0x0200 -#define I915_OVERLAY_YUV420 0x0300 -#define I915_OVERLAY_YUV410 0x0400 - -#define I915_OVERLAY_SWAP_MASK 0xff0000 -#define I915_OVERLAY_NO_SWAP 0x000000 -#define I915_OVERLAY_UV_SWAP 0x010000 -#define I915_OVERLAY_Y_SWAP 0x020000 -#define I915_OVERLAY_Y_AND_UV_SWAP 0x030000 - -#define I915_OVERLAY_FLAGS_MASK 0xff000000 -#define I915_OVERLAY_ENABLE 0x01000000 - -struct drm_intel_overlay_put_image { - /* various flags and src format description */ - __u32 flags; - /* source picture description */ - __u32 bo_handle; - /* stride values and offsets are in bytes, buffer relative */ - __u16 stride_Y; /* stride for packed formats */ - __u16 stride_UV; - __u32 offset_Y; /* offset for packet formats */ - __u32 offset_U; - __u32 offset_V; - /* in pixels */ - __u16 src_width; - __u16 src_height; - /* to compensate the scaling factors for partially covered surfaces */ - __u16 src_scan_width; - __u16 src_scan_height; - /* output crtc description */ - __u32 crtc_id; - __u16 dst_x; - __u16 dst_y; - __u16 dst_width; - __u16 dst_height; -}; - -/* flags */ -#define I915_OVERLAY_UPDATE_ATTRS (1<<0) -#define I915_OVERLAY_UPDATE_GAMMA (1<<1) -#define I915_OVERLAY_DISABLE_DEST_COLORKEY (1<<2) -struct drm_intel_overlay_attrs { - __u32 flags; - __u32 color_key; - __s32 brightness; - __u32 contrast; - __u32 saturation; - __u32 gamma0; - __u32 gamma1; - __u32 gamma2; - __u32 gamma3; - __u32 gamma4; - __u32 gamma5; -}; - -/* - * Intel sprite handling - * - * Color keying works with a min/mask/max tuple. Both source and destination - * color keying is allowed. - * - * Source keying: - * Sprite pixels within the min & max values, masked against the color channels - * specified in the mask field, will be transparent. All other pixels will - * be displayed on top of the primary plane. For RGB surfaces, only the min - * and mask fields will be used; ranged compares are not allowed. - * - * Destination keying: - * Primary plane pixels that match the min value, masked against the color - * channels specified in the mask field, will be replaced by corresponding - * pixels from the sprite plane. - * - * Note that source & destination keying are exclusive; only one can be - * active on a given plane. - */ - -#define I915_SET_COLORKEY_NONE (1<<0) /* Deprecated. Instead set - * flags==0 to disable colorkeying. - */ -#define I915_SET_COLORKEY_DESTINATION (1<<1) -#define I915_SET_COLORKEY_SOURCE (1<<2) -struct drm_intel_sprite_colorkey { - __u32 plane_id; - __u32 min_value; - __u32 channel_mask; - __u32 max_value; - __u32 flags; -}; - -struct drm_i915_gem_wait { - /** Handle of BO we shall wait on */ - __u32 bo_handle; - __u32 flags; - /** Number of nanoseconds to wait, Returns time remaining. */ - __s64 timeout_ns; -}; - -struct drm_i915_gem_context_create { - __u32 ctx_id; /* output: id of new context*/ - __u32 pad; -}; - -struct drm_i915_gem_context_create_ext { - __u32 ctx_id; /* output: id of new context*/ - __u32 flags; -#define I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS (1u << 0) -#define I915_CONTEXT_CREATE_FLAGS_UNKNOWN \ - (-(I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS << 1)) - __u64 extensions; -}; - -struct drm_i915_gem_context_param { - __u32 ctx_id; - __u32 size; - __u64 param; -#define I915_CONTEXT_PARAM_BAN_PERIOD 0x1 -#define I915_CONTEXT_PARAM_NO_ZEROMAP 0x2 -#define I915_CONTEXT_PARAM_GTT_SIZE 0x3 -#define I915_CONTEXT_PARAM_NO_ERROR_CAPTURE 0x4 -#define I915_CONTEXT_PARAM_BANNABLE 0x5 -#define I915_CONTEXT_PARAM_PRIORITY 0x6 -#define I915_CONTEXT_MAX_USER_PRIORITY 1023 /* inclusive */ -#define I915_CONTEXT_DEFAULT_PRIORITY 0 -#define I915_CONTEXT_MIN_USER_PRIORITY -1023 /* inclusive */ - /* - * When using the following param, value should be a pointer to - * drm_i915_gem_context_param_sseu. - */ -#define I915_CONTEXT_PARAM_SSEU 0x7 - -/* - * Not all clients may want to attempt automatic recover of a context after - * a hang (for example, some clients may only submit very small incremental - * batches relying on known logical state of previous batches which will never - * recover correctly and each attempt will hang), and so would prefer that - * the context is forever banned instead. - * - * If set to false (0), after a reset, subsequent (and in flight) rendering - * from this context is discarded, and the client will need to create a new - * context to use instead. - * - * If set to true (1), the kernel will automatically attempt to recover the - * context by skipping the hanging batch and executing the next batch starting - * from the default context state (discarding the incomplete logical context - * state lost due to the reset). - * - * On creation, all new contexts are marked as recoverable. - */ -#define I915_CONTEXT_PARAM_RECOVERABLE 0x8 -/* Must be kept compact -- no holes and well documented */ - - __u64 value; -}; - -/** - * Context SSEU programming - * - * It may be necessary for either functional or performance reason to configure - * a context to run with a reduced number of SSEU (where SSEU stands for Slice/ - * Sub-slice/EU). - * - * This is done by configuring SSEU configuration using the below - * @struct drm_i915_gem_context_param_sseu for every supported engine which - * userspace intends to use. - * - * Not all GPUs or engines support this functionality in which case an error - * code -ENODEV will be returned. - * - * Also, flexibility of possible SSEU configuration permutations varies between - * GPU generations and software imposed limitations. Requesting such a - * combination will return an error code of -EINVAL. - * - * NOTE: When perf/OA is active the context's SSEU configuration is ignored in - * favour of a single global setting. - */ -struct drm_i915_gem_context_param_sseu { - /* - * Engine class & instance to be configured or queried. - */ - __u16 engine_class; - __u16 engine_instance; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 flags; - - /* - * Mask of slices to enable for the context. Valid values are a subset - * of the bitmask value returned for I915_PARAM_SLICE_MASK. - */ - __u64 slice_mask; - - /* - * Mask of subslices to enable for the context. Valid values are a - * subset of the bitmask value return by I915_PARAM_SUBSLICE_MASK. - */ - __u64 subslice_mask; - - /* - * Minimum/Maximum number of EUs to enable per subslice for the - * context. min_eus_per_subslice must be inferior or equal to - * max_eus_per_subslice. - */ - __u16 min_eus_per_subslice; - __u16 max_eus_per_subslice; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 rsvd; -}; - -struct drm_i915_gem_context_create_ext_setparam { -#define I915_CONTEXT_CREATE_EXT_SETPARAM 0 - struct i915_user_extension base; - struct drm_i915_gem_context_param param; -}; - -struct drm_i915_gem_context_destroy { - __u32 ctx_id; - __u32 pad; -}; - -/* - * DRM_I915_GEM_VM_CREATE - - * - * Create a new virtual memory address space (ppGTT) for use within a context - * on the same file. Extensions can be provided to configure exactly how the - * address space is setup upon creation. - * - * The id of new VM (bound to the fd) for use with I915_CONTEXT_PARAM_VM is - * returned in the outparam @id. - * - * No flags are defined, with all bits reserved and must be zero. - * - * An extension chain maybe provided, starting with @extensions, and terminated - * by the @next_extension being 0. Currently, no extensions are defined. - * - * DRM_I915_GEM_VM_DESTROY - - * - * Destroys a previously created VM id, specified in @id. - * - * No extensions or flags are allowed currently, and so must be zero. - */ -struct drm_i915_gem_vm_control { - __u64 extensions; - __u32 flags; - __u32 vm_id; -}; - -struct drm_i915_reg_read { - /* - * Register offset. - * For 64bit wide registers where the upper 32bits don't immediately - * follow the lower 32bits, the offset of the lower 32bits must - * be specified - */ - __u64 offset; -#define I915_REG_READ_8B_WA (1ul << 0) - - __u64 val; /* Return value */ -}; - -/* Known registers: - * - * Render engine timestamp - 0x2358 + 64bit - gen7+ - * - Note this register returns an invalid value if using the default - * single instruction 8byte read, in order to workaround that pass - * flag I915_REG_READ_8B_WA in offset field. - * - */ - -struct drm_i915_reset_stats { - __u32 ctx_id; - __u32 flags; - - /* All resets since boot/module reload, for all contexts */ - __u32 reset_count; - - /* Number of batches lost when active in GPU, for this context */ - __u32 batch_active; - - /* Number of batches lost pending for execution, for this context */ - __u32 batch_pending; - - __u32 pad; -}; - -struct drm_i915_gem_userptr { - __u64 user_ptr; - __u64 user_size; - __u32 flags; -#define I915_USERPTR_READ_ONLY 0x1 -#define I915_USERPTR_UNSYNCHRONIZED 0x80000000 - /** - * Returned handle for the object. - * - * Object handles are nonzero. - */ - __u32 handle; -}; - -enum drm_i915_oa_format { - I915_OA_FORMAT_A13 = 1, /* HSW only */ - I915_OA_FORMAT_A29, /* HSW only */ - I915_OA_FORMAT_A13_B8_C8, /* HSW only */ - I915_OA_FORMAT_B4_C8, /* HSW only */ - I915_OA_FORMAT_A45_B8_C8, /* HSW only */ - I915_OA_FORMAT_B4_C8_A16, /* HSW only */ - I915_OA_FORMAT_C4_B8, /* HSW+ */ - - /* Gen8+ */ - I915_OA_FORMAT_A12, - I915_OA_FORMAT_A12_B8_C8, - I915_OA_FORMAT_A32u40_A4u32_B8_C8, - - I915_OA_FORMAT_MAX /* non-ABI */ -}; - -enum drm_i915_perf_property_id { - /** - * Open the stream for a specific context handle (as used with - * execbuffer2). A stream opened for a specific context this way - * won't typically require root privileges. - */ - DRM_I915_PERF_PROP_CTX_HANDLE = 1, - - /** - * A value of 1 requests the inclusion of raw OA unit reports as - * part of stream samples. - */ - DRM_I915_PERF_PROP_SAMPLE_OA, - - /** - * The value specifies which set of OA unit metrics should be - * be configured, defining the contents of any OA unit reports. - */ - DRM_I915_PERF_PROP_OA_METRICS_SET, - - /** - * The value specifies the size and layout of OA unit reports. - */ - DRM_I915_PERF_PROP_OA_FORMAT, - - /** - * Specifying this property implicitly requests periodic OA unit - * sampling and (at least on Haswell) the sampling frequency is derived - * from this exponent as follows: - * - * 80ns * 2^(period_exponent + 1) - */ - DRM_I915_PERF_PROP_OA_EXPONENT, - - DRM_I915_PERF_PROP_MAX /* non-ABI */ -}; - -struct drm_i915_perf_open_param { - __u32 flags; -#define I915_PERF_FLAG_FD_CLOEXEC (1<<0) -#define I915_PERF_FLAG_FD_NONBLOCK (1<<1) -#define I915_PERF_FLAG_DISABLED (1<<2) - - /** The number of u64 (id, value) pairs */ - __u32 num_properties; - - /** - * Pointer to array of u64 (id, value) pairs configuring the stream - * to open. - */ - __u64 properties_ptr; -}; - -/** - * Enable data capture for a stream that was either opened in a disabled state - * via I915_PERF_FLAG_DISABLED or was later disabled via - * I915_PERF_IOCTL_DISABLE. - * - * It is intended to be cheaper to disable and enable a stream than it may be - * to close and re-open a stream with the same configuration. - * - * It's undefined whether any pending data for the stream will be lost. - */ -#define I915_PERF_IOCTL_ENABLE _IO('i', 0x0) - -/** - * Disable data capture for a stream. - * - * It is an error to try and read a stream that is disabled. - */ -#define I915_PERF_IOCTL_DISABLE _IO('i', 0x1) - -/** - * Common to all i915 perf records - */ -struct drm_i915_perf_record_header { - __u32 type; - __u16 pad; - __u16 size; -}; - -enum drm_i915_perf_record_type { - - /** - * Samples are the work horse record type whose contents are extensible - * and defined when opening an i915 perf stream based on the given - * properties. - * - * Boolean properties following the naming convention - * DRM_I915_PERF_SAMPLE_xyz_PROP request the inclusion of 'xyz' data in - * every sample. - * - * The order of these sample properties given by userspace has no - * affect on the ordering of data within a sample. The order is - * documented here. - * - * struct { - * struct drm_i915_perf_record_header header; - * - * { u32 oa_report[]; } && DRM_I915_PERF_PROP_SAMPLE_OA - * }; - */ - DRM_I915_PERF_RECORD_SAMPLE = 1, - - /* - * Indicates that one or more OA reports were not written by the - * hardware. This can happen for example if an MI_REPORT_PERF_COUNT - * command collides with periodic sampling - which would be more likely - * at higher sampling frequencies. - */ - DRM_I915_PERF_RECORD_OA_REPORT_LOST = 2, - - /** - * An error occurred that resulted in all pending OA reports being lost. - */ - DRM_I915_PERF_RECORD_OA_BUFFER_LOST = 3, - - DRM_I915_PERF_RECORD_MAX /* non-ABI */ -}; - -/** - * Structure to upload perf dynamic configuration into the kernel. - */ -struct drm_i915_perf_oa_config { - /** String formatted like "%08x-%04x-%04x-%04x-%012x" */ - char uuid[36]; - - __u32 n_mux_regs; - __u32 n_boolean_regs; - __u32 n_flex_regs; - - /* - * These fields are pointers to tuples of u32 values (register address, - * value). For example the expected length of the buffer pointed by - * mux_regs_ptr is (2 * sizeof(u32) * n_mux_regs). - */ - __u64 mux_regs_ptr; - __u64 boolean_regs_ptr; - __u64 flex_regs_ptr; -}; - -struct drm_i915_query_item { - __u64 query_id; -#define DRM_I915_QUERY_TOPOLOGY_INFO 1 -/* Must be kept compact -- no holes and well documented */ - - /* - * When set to zero by userspace, this is filled with the size of the - * data to be written at the data_ptr pointer. The kernel sets this - * value to a negative value to signal an error on a particular query - * item. - */ - __s32 length; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 flags; - - /* - * Data will be written at the location pointed by data_ptr when the - * value of length matches the length of the data to be written by the - * kernel. - */ - __u64 data_ptr; -}; - -struct drm_i915_query { - __u32 num_items; - - /* - * Unused for now. Must be cleared to zero. - */ - __u32 flags; - - /* - * This points to an array of num_items drm_i915_query_item structures. - */ - __u64 items_ptr; -}; - -/* - * Data written by the kernel with query DRM_I915_QUERY_TOPOLOGY_INFO : - * - * data: contains the 3 pieces of information : - * - * - the slice mask with one bit per slice telling whether a slice is - * available. The availability of slice X can be queried with the following - * formula : - * - * (data[X / 8] >> (X % 8)) & 1 - * - * - the subslice mask for each slice with one bit per subslice telling - * whether a subslice is available. The availability of subslice Y in slice - * X can be queried with the following formula : - * - * (data[subslice_offset + - * X * subslice_stride + - * Y / 8] >> (Y % 8)) & 1 - * - * - the EU mask for each subslice in each slice with one bit per EU telling - * whether an EU is available. The availability of EU Z in subslice Y in - * slice X can be queried with the following formula : - * - * (data[eu_offset + - * (X * max_subslices + Y) * eu_stride + - * Z / 8] >> (Z % 8)) & 1 - */ -struct drm_i915_query_topology_info { - /* - * Unused for now. Must be cleared to zero. - */ - __u16 flags; - - __u16 max_slices; - __u16 max_subslices; - __u16 max_eus_per_subslice; - - /* - * Offset in data[] at which the subslice masks are stored. - */ - __u16 subslice_offset; - - /* - * Stride at which each of the subslice masks for each slice are - * stored. - */ - __u16 subslice_stride; - - /* - * Offset in data[] at which the EU masks are stored. - */ - __u16 eu_offset; - - /* - * Stride at which each of the EU masks for each subslice are stored. - */ - __u16 eu_stride; - - __u8 data[]; -}; - -#if defined(__cplusplus) -} -#endif - -#endif /* _I915_DRM_H_ */ diff --git a/prebuilts/x86_64/include/libdrm/intel_aub.h b/prebuilts/x86_64/include/libdrm/intel_aub.h deleted file mode 100644 index 5f0aba8..0000000 --- a/prebuilts/x86_64/include/libdrm/intel_aub.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - * - * Authors: - * Eric Anholt - * - */ - -/** @file intel_aub.h - * - * The AUB file is a file format used by Intel's internal simulation - * and other validation tools. It can be used at various levels by a - * driver to input state to the simulated hardware or a replaying - * debugger. - * - * We choose to dump AUB files using the trace block format for ease - * of implementation -- dump out the blocks of memory as plain blobs - * and insert ring commands to execute the batchbuffer blob. - */ - -#ifndef _INTEL_AUB_H -#define _INTEL_AUB_H - -#define AUB_MI_NOOP (0) -#define AUB_MI_BATCH_BUFFER_START (0x31 << 23) -#define AUB_PIPE_CONTROL (0x7a000002) - -/* DW0: instruction type. */ - -#define CMD_AUB (7 << 29) - -#define CMD_AUB_HEADER (CMD_AUB | (1 << 23) | (0x05 << 16)) -/* DW1 */ -# define AUB_HEADER_MAJOR_SHIFT 24 -# define AUB_HEADER_MINOR_SHIFT 16 - -#define CMD_AUB_TRACE_HEADER_BLOCK (CMD_AUB | (1 << 23) | (0x41 << 16)) -#define CMD_AUB_DUMP_BMP (CMD_AUB | (1 << 23) | (0x9e << 16)) - -/* DW1 */ -#define AUB_TRACE_OPERATION_MASK 0x000000ff -#define AUB_TRACE_OP_COMMENT 0x00000000 -#define AUB_TRACE_OP_DATA_WRITE 0x00000001 -#define AUB_TRACE_OP_COMMAND_WRITE 0x00000002 -#define AUB_TRACE_OP_MMIO_WRITE 0x00000003 -// operation = TRACE_DATA_WRITE, Type -#define AUB_TRACE_TYPE_MASK 0x0000ff00 -#define AUB_TRACE_TYPE_NOTYPE (0 << 8) -#define AUB_TRACE_TYPE_BATCH (1 << 8) -#define AUB_TRACE_TYPE_VERTEX_BUFFER (5 << 8) -#define AUB_TRACE_TYPE_2D_MAP (6 << 8) -#define AUB_TRACE_TYPE_CUBE_MAP (7 << 8) -#define AUB_TRACE_TYPE_VOLUME_MAP (9 << 8) -#define AUB_TRACE_TYPE_1D_MAP (10 << 8) -#define AUB_TRACE_TYPE_CONSTANT_BUFFER (11 << 8) -#define AUB_TRACE_TYPE_CONSTANT_URB (12 << 8) -#define AUB_TRACE_TYPE_INDEX_BUFFER (13 << 8) -#define AUB_TRACE_TYPE_GENERAL (14 << 8) -#define AUB_TRACE_TYPE_SURFACE (15 << 8) - - -// operation = TRACE_COMMAND_WRITE, Type = -#define AUB_TRACE_TYPE_RING_HWB (1 << 8) -#define AUB_TRACE_TYPE_RING_PRB0 (2 << 8) -#define AUB_TRACE_TYPE_RING_PRB1 (3 << 8) -#define AUB_TRACE_TYPE_RING_PRB2 (4 << 8) - -// Address space -#define AUB_TRACE_ADDRESS_SPACE_MASK 0x00ff0000 -#define AUB_TRACE_MEMTYPE_GTT (0 << 16) -#define AUB_TRACE_MEMTYPE_LOCAL (1 << 16) -#define AUB_TRACE_MEMTYPE_NONLOCAL (2 << 16) -#define AUB_TRACE_MEMTYPE_PCI (3 << 16) -#define AUB_TRACE_MEMTYPE_GTT_ENTRY (4 << 16) - -/* DW2 */ - -/** - * aub_state_struct_type enum values are encoded with the top 16 bits - * representing the type to be delivered to the .aub file, and the bottom 16 - * bits representing the subtype. This macro performs the encoding. - */ -#define ENCODE_SS_TYPE(type, subtype) (((type) << 16) | (subtype)) - -enum aub_state_struct_type { - AUB_TRACE_VS_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 1), - AUB_TRACE_GS_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 2), - AUB_TRACE_CLIP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 3), - AUB_TRACE_SF_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 4), - AUB_TRACE_WM_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 5), - AUB_TRACE_CC_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 6), - AUB_TRACE_CLIP_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 7), - AUB_TRACE_SF_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 8), - AUB_TRACE_CC_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x9), - AUB_TRACE_SAMPLER_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xa), - AUB_TRACE_KERNEL_INSTRUCTIONS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xb), - AUB_TRACE_SCRATCH_SPACE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xc), - AUB_TRACE_SAMPLER_DEFAULT_COLOR = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xd), - - AUB_TRACE_SCISSOR_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x15), - AUB_TRACE_BLEND_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x16), - AUB_TRACE_DEPTH_STENCIL_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x17), - - AUB_TRACE_VERTEX_BUFFER = ENCODE_SS_TYPE(AUB_TRACE_TYPE_VERTEX_BUFFER, 0), - AUB_TRACE_BINDING_TABLE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x100), - AUB_TRACE_SURFACE_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x200), - AUB_TRACE_VS_CONSTANTS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 0), - AUB_TRACE_WM_CONSTANTS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 1), -}; - -#undef ENCODE_SS_TYPE - -/** - * Decode a aub_state_struct_type value to determine the type that should be - * stored in the .aub file. - */ -static inline uint32_t AUB_TRACE_TYPE(enum aub_state_struct_type ss_type) -{ - return (ss_type & 0xFFFF0000) >> 16; -} - -/** - * Decode a state_struct_type value to determine the subtype that should be - * stored in the .aub file. - */ -static inline uint32_t AUB_TRACE_SUBTYPE(enum aub_state_struct_type ss_type) -{ - return ss_type & 0xFFFF; -} - -/* DW3: address */ -/* DW4: len */ - -#endif /* _INTEL_AUB_H */ diff --git a/prebuilts/x86_64/include/libdrm/intel_bufmgr.h b/prebuilts/x86_64/include/libdrm/intel_bufmgr.h deleted file mode 100644 index 693472a..0000000 --- a/prebuilts/x86_64/include/libdrm/intel_bufmgr.h +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Copyright © 2008-2012 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - * - * Authors: - * Eric Anholt - * - */ - -/** - * @file intel_bufmgr.h - * - * Public definitions of Intel-specific bufmgr functions. - */ - -#ifndef INTEL_BUFMGR_H -#define INTEL_BUFMGR_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct drm_clip_rect; - -typedef struct _drm_intel_bufmgr drm_intel_bufmgr; -typedef struct _drm_intel_context drm_intel_context; -typedef struct _drm_intel_bo drm_intel_bo; - -struct _drm_intel_bo { - /** - * Size in bytes of the buffer object. - * - * The size may be larger than the size originally requested for the - * allocation, such as being aligned to page size. - */ - unsigned long size; - - /** - * Alignment requirement for object - * - * Used for GTT mapping & pinning the object. - */ - unsigned long align; - - /** - * Deprecated field containing (possibly the low 32-bits of) the last - * seen virtual card address. Use offset64 instead. - */ - unsigned long offset; - - /** - * Virtual address for accessing the buffer data. Only valid while - * mapped. - */ -#ifdef __cplusplus - void *virt; -#else - void *virtual; -#endif - - /** Buffer manager context associated with this buffer object */ - drm_intel_bufmgr *bufmgr; - - /** - * MM-specific handle for accessing object - */ - int handle; - - /** - * Last seen card virtual address (offset from the beginning of the - * aperture) for the object. This should be used to fill relocation - * entries when calling drm_intel_bo_emit_reloc() - */ - uint64_t offset64; -}; - -enum aub_dump_bmp_format { - AUB_DUMP_BMP_FORMAT_8BIT = 1, - AUB_DUMP_BMP_FORMAT_ARGB_4444 = 4, - AUB_DUMP_BMP_FORMAT_ARGB_0888 = 6, - AUB_DUMP_BMP_FORMAT_ARGB_8888 = 7, -}; - -typedef struct _drm_intel_aub_annotation { - uint32_t type; - uint32_t subtype; - uint32_t ending_offset; -} drm_intel_aub_annotation; - -#define BO_ALLOC_FOR_RENDER (1<<0) - -drm_intel_bo *drm_intel_bo_alloc(drm_intel_bufmgr *bufmgr, const char *name, - unsigned long size, unsigned int alignment); -drm_intel_bo *drm_intel_bo_alloc_for_render(drm_intel_bufmgr *bufmgr, - const char *name, - unsigned long size, - unsigned int alignment); -drm_intel_bo *drm_intel_bo_alloc_userptr(drm_intel_bufmgr *bufmgr, - const char *name, - void *addr, uint32_t tiling_mode, - uint32_t stride, unsigned long size, - unsigned long flags); -drm_intel_bo *drm_intel_bo_alloc_tiled(drm_intel_bufmgr *bufmgr, - const char *name, - int x, int y, int cpp, - uint32_t *tiling_mode, - unsigned long *pitch, - unsigned long flags); -void drm_intel_bo_reference(drm_intel_bo *bo); -void drm_intel_bo_unreference(drm_intel_bo *bo); -int drm_intel_bo_map(drm_intel_bo *bo, int write_enable); -int drm_intel_bo_unmap(drm_intel_bo *bo); - -int drm_intel_bo_subdata(drm_intel_bo *bo, unsigned long offset, - unsigned long size, const void *data); -int drm_intel_bo_get_subdata(drm_intel_bo *bo, unsigned long offset, - unsigned long size, void *data); -void drm_intel_bo_wait_rendering(drm_intel_bo *bo); - -void drm_intel_bufmgr_set_debug(drm_intel_bufmgr *bufmgr, int enable_debug); -void drm_intel_bufmgr_destroy(drm_intel_bufmgr *bufmgr); -int drm_intel_bo_exec(drm_intel_bo *bo, int used, - struct drm_clip_rect *cliprects, int num_cliprects, int DR4); -int drm_intel_bo_mrb_exec(drm_intel_bo *bo, int used, - struct drm_clip_rect *cliprects, int num_cliprects, int DR4, - unsigned int flags); -int drm_intel_bufmgr_check_aperture_space(drm_intel_bo ** bo_array, int count); - -int drm_intel_bo_emit_reloc(drm_intel_bo *bo, uint32_t offset, - drm_intel_bo *target_bo, uint32_t target_offset, - uint32_t read_domains, uint32_t write_domain); -int drm_intel_bo_emit_reloc_fence(drm_intel_bo *bo, uint32_t offset, - drm_intel_bo *target_bo, - uint32_t target_offset, - uint32_t read_domains, uint32_t write_domain); -int drm_intel_bo_pin(drm_intel_bo *bo, uint32_t alignment); -int drm_intel_bo_unpin(drm_intel_bo *bo); -int drm_intel_bo_set_tiling(drm_intel_bo *bo, uint32_t * tiling_mode, - uint32_t stride); -int drm_intel_bo_get_tiling(drm_intel_bo *bo, uint32_t * tiling_mode, - uint32_t * swizzle_mode); -int drm_intel_bo_flink(drm_intel_bo *bo, uint32_t * name); -int drm_intel_bo_busy(drm_intel_bo *bo); -int drm_intel_bo_madvise(drm_intel_bo *bo, int madv); -int drm_intel_bo_use_48b_address_range(drm_intel_bo *bo, uint32_t enable); -int drm_intel_bo_set_softpin_offset(drm_intel_bo *bo, uint64_t offset); - -int drm_intel_bo_disable_reuse(drm_intel_bo *bo); -int drm_intel_bo_is_reusable(drm_intel_bo *bo); -int drm_intel_bo_references(drm_intel_bo *bo, drm_intel_bo *target_bo); - -/* drm_intel_bufmgr_gem.c */ -drm_intel_bufmgr *drm_intel_bufmgr_gem_init(int fd, int batch_size); -drm_intel_bo *drm_intel_bo_gem_create_from_name(drm_intel_bufmgr *bufmgr, - const char *name, - unsigned int handle); -void drm_intel_bufmgr_gem_enable_reuse(drm_intel_bufmgr *bufmgr); -void drm_intel_bufmgr_gem_enable_fenced_relocs(drm_intel_bufmgr *bufmgr); -void drm_intel_bufmgr_gem_set_vma_cache_size(drm_intel_bufmgr *bufmgr, - int limit); -int drm_intel_gem_bo_map_unsynchronized(drm_intel_bo *bo); -int drm_intel_gem_bo_map_gtt(drm_intel_bo *bo); -int drm_intel_gem_bo_unmap_gtt(drm_intel_bo *bo); - -#define HAVE_DRM_INTEL_GEM_BO_DISABLE_IMPLICIT_SYNC 1 -int drm_intel_bufmgr_gem_can_disable_implicit_sync(drm_intel_bufmgr *bufmgr); -void drm_intel_gem_bo_disable_implicit_sync(drm_intel_bo *bo); -void drm_intel_gem_bo_enable_implicit_sync(drm_intel_bo *bo); - -void *drm_intel_gem_bo_map__cpu(drm_intel_bo *bo); -void *drm_intel_gem_bo_map__gtt(drm_intel_bo *bo); -void *drm_intel_gem_bo_map__wc(drm_intel_bo *bo); - -int drm_intel_gem_bo_get_reloc_count(drm_intel_bo *bo); -void drm_intel_gem_bo_clear_relocs(drm_intel_bo *bo, int start); -void drm_intel_gem_bo_start_gtt_access(drm_intel_bo *bo, int write_enable); - -void -drm_intel_bufmgr_gem_set_aub_filename(drm_intel_bufmgr *bufmgr, - const char *filename); -void drm_intel_bufmgr_gem_set_aub_dump(drm_intel_bufmgr *bufmgr, int enable); -void drm_intel_gem_bo_aub_dump_bmp(drm_intel_bo *bo, - int x1, int y1, int width, int height, - enum aub_dump_bmp_format format, - int pitch, int offset); -void -drm_intel_bufmgr_gem_set_aub_annotations(drm_intel_bo *bo, - drm_intel_aub_annotation *annotations, - unsigned count); - -int drm_intel_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, int crtc_id); - -int drm_intel_get_aperture_sizes(int fd, size_t *mappable, size_t *total); -int drm_intel_bufmgr_gem_get_devid(drm_intel_bufmgr *bufmgr); -int drm_intel_gem_bo_wait(drm_intel_bo *bo, int64_t timeout_ns); - -drm_intel_context *drm_intel_gem_context_create(drm_intel_bufmgr *bufmgr); -int drm_intel_gem_context_get_id(drm_intel_context *ctx, - uint32_t *ctx_id); -void drm_intel_gem_context_destroy(drm_intel_context *ctx); -int drm_intel_gem_bo_context_exec(drm_intel_bo *bo, drm_intel_context *ctx, - int used, unsigned int flags); -int drm_intel_gem_bo_fence_exec(drm_intel_bo *bo, - drm_intel_context *ctx, - int used, - int in_fence, - int *out_fence, - unsigned int flags); - -int drm_intel_bo_gem_export_to_prime(drm_intel_bo *bo, int *prime_fd); -drm_intel_bo *drm_intel_bo_gem_create_from_prime(drm_intel_bufmgr *bufmgr, - int prime_fd, int size); - -/* drm_intel_bufmgr_fake.c */ -drm_intel_bufmgr *drm_intel_bufmgr_fake_init(int fd, - unsigned long low_offset, - void *low_virtual, - unsigned long size, - volatile unsigned int - *last_dispatch); -void drm_intel_bufmgr_fake_set_last_dispatch(drm_intel_bufmgr *bufmgr, - volatile unsigned int - *last_dispatch); -void drm_intel_bufmgr_fake_set_exec_callback(drm_intel_bufmgr *bufmgr, - int (*exec) (drm_intel_bo *bo, - unsigned int used, - void *priv), - void *priv); -void drm_intel_bufmgr_fake_set_fence_callback(drm_intel_bufmgr *bufmgr, - unsigned int (*emit) (void *priv), - void (*wait) (unsigned int fence, - void *priv), - void *priv); -drm_intel_bo *drm_intel_bo_fake_alloc_static(drm_intel_bufmgr *bufmgr, - const char *name, - unsigned long offset, - unsigned long size, void *virt); -void drm_intel_bo_fake_disable_backing_store(drm_intel_bo *bo, - void (*invalidate_cb) (drm_intel_bo - * bo, - void *ptr), - void *ptr); - -void drm_intel_bufmgr_fake_contended_lock_take(drm_intel_bufmgr *bufmgr); -void drm_intel_bufmgr_fake_evict_all(drm_intel_bufmgr *bufmgr); - -struct drm_intel_decode *drm_intel_decode_context_alloc(uint32_t devid); -void drm_intel_decode_context_free(struct drm_intel_decode *ctx); -void drm_intel_decode_set_batch_pointer(struct drm_intel_decode *ctx, - void *data, uint32_t hw_offset, - int count); -void drm_intel_decode_set_dump_past_end(struct drm_intel_decode *ctx, - int dump_past_end); -void drm_intel_decode_set_head_tail(struct drm_intel_decode *ctx, - uint32_t head, uint32_t tail); -void drm_intel_decode_set_output_file(struct drm_intel_decode *ctx, FILE *out); -void drm_intel_decode(struct drm_intel_decode *ctx); - -int drm_intel_reg_read(drm_intel_bufmgr *bufmgr, - uint32_t offset, - uint64_t *result); - -int drm_intel_get_reset_stats(drm_intel_context *ctx, - uint32_t *reset_count, - uint32_t *active, - uint32_t *pending); - -int drm_intel_get_subslice_total(int fd, unsigned int *subslice_total); -int drm_intel_get_eu_total(int fd, unsigned int *eu_total); - -int drm_intel_get_pooled_eu(int fd); -int drm_intel_get_min_eu_in_pool(int fd); - -/** @{ Compatibility defines to keep old code building despite the symbol rename - * from dri_* to drm_intel_* - */ -#define dri_bo drm_intel_bo -#define dri_bufmgr drm_intel_bufmgr -#define dri_bo_alloc drm_intel_bo_alloc -#define dri_bo_reference drm_intel_bo_reference -#define dri_bo_unreference drm_intel_bo_unreference -#define dri_bo_map drm_intel_bo_map -#define dri_bo_unmap drm_intel_bo_unmap -#define dri_bo_subdata drm_intel_bo_subdata -#define dri_bo_get_subdata drm_intel_bo_get_subdata -#define dri_bo_wait_rendering drm_intel_bo_wait_rendering -#define dri_bufmgr_set_debug drm_intel_bufmgr_set_debug -#define dri_bufmgr_destroy drm_intel_bufmgr_destroy -#define dri_bo_exec drm_intel_bo_exec -#define dri_bufmgr_check_aperture_space drm_intel_bufmgr_check_aperture_space -#define dri_bo_emit_reloc(reloc_bo, read, write, target_offset, \ - reloc_offset, target_bo) \ - drm_intel_bo_emit_reloc(reloc_bo, reloc_offset, \ - target_bo, target_offset, \ - read, write); -#define dri_bo_pin drm_intel_bo_pin -#define dri_bo_unpin drm_intel_bo_unpin -#define dri_bo_get_tiling drm_intel_bo_get_tiling -#define dri_bo_set_tiling(bo, mode) drm_intel_bo_set_tiling(bo, mode, 0) -#define dri_bo_flink drm_intel_bo_flink -#define intel_bufmgr_gem_init drm_intel_bufmgr_gem_init -#define intel_bo_gem_create_from_name drm_intel_bo_gem_create_from_name -#define intel_bufmgr_gem_enable_reuse drm_intel_bufmgr_gem_enable_reuse -#define intel_bufmgr_fake_init drm_intel_bufmgr_fake_init -#define intel_bufmgr_fake_set_last_dispatch drm_intel_bufmgr_fake_set_last_dispatch -#define intel_bufmgr_fake_set_exec_callback drm_intel_bufmgr_fake_set_exec_callback -#define intel_bufmgr_fake_set_fence_callback drm_intel_bufmgr_fake_set_fence_callback -#define intel_bo_fake_alloc_static drm_intel_bo_fake_alloc_static -#define intel_bo_fake_disable_backing_store drm_intel_bo_fake_disable_backing_store -#define intel_bufmgr_fake_contended_lock_take drm_intel_bufmgr_fake_contended_lock_take -#define intel_bufmgr_fake_evict_all drm_intel_bufmgr_fake_evict_all - -/** @{ */ - -#if defined(__cplusplus) -} -#endif - -#endif /* INTEL_BUFMGR_H */ diff --git a/prebuilts/x86_64/include/libdrm/intel_debug.h b/prebuilts/x86_64/include/libdrm/intel_debug.h deleted file mode 100644 index fa0737c..0000000 --- a/prebuilts/x86_64/include/libdrm/intel_debug.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - * - * Authors: - * Ben Widawsky - * - */ - -#ifndef INTEL_DEBUG_H -#define INTEL_DEBUG_H - -#include - -#define SHADER_DEBUG_SOCKET "/var/run/gen_debug" -#define DEBUG_HANDSHAKE_VERSION 0x3 -#define DEBUG_HANDSHAKE_ACK "okay" - -/* First byte must always be the 1 byte version */ -struct intel_debug_handshake { - uint32_t version; - int flink_handle; - uint32_t per_thread_scratch; -} __attribute__((packed)); - -#endif diff --git a/prebuilts/x86_64/include/libdrm/mach64_drm.h b/prebuilts/x86_64/include/libdrm/mach64_drm.h deleted file mode 100644 index 1f5fd84..0000000 --- a/prebuilts/x86_64/include/libdrm/mach64_drm.h +++ /dev/null @@ -1,256 +0,0 @@ -/* mach64_drm.h -- Public header for the mach64 driver -*- linux-c -*- - * Created: Thu Nov 30 20:04:32 2000 by gareth@valinux.com - */ -/* - * Copyright 2000 Gareth Hughes - * Copyright 2002 Frank C. Earl - * Copyright 2002-2003 Leif Delgass - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT OWNER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Gareth Hughes - * Frank C. Earl - * Leif Delgass - */ - -#ifndef __MACH64_DRM_H__ -#define __MACH64_DRM_H__ - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (mach64_sarea.h) - */ -#ifndef __MACH64_SAREA_DEFINES__ -#define __MACH64_SAREA_DEFINES__ - -/* What needs to be changed for the current vertex buffer? - * GH: We're going to be pedantic about this. We want the card to do as - * little as possible, so let's avoid having it fetch a whole bunch of - * register values that don't change all that often, if at all. - */ -#define MACH64_UPLOAD_DST_OFF_PITCH 0x0001 -#define MACH64_UPLOAD_Z_OFF_PITCH 0x0002 -#define MACH64_UPLOAD_Z_ALPHA_CNTL 0x0004 -#define MACH64_UPLOAD_SCALE_3D_CNTL 0x0008 -#define MACH64_UPLOAD_DP_FOG_CLR 0x0010 -#define MACH64_UPLOAD_DP_WRITE_MASK 0x0020 -#define MACH64_UPLOAD_DP_PIX_WIDTH 0x0040 -#define MACH64_UPLOAD_SETUP_CNTL 0x0080 -#define MACH64_UPLOAD_MISC 0x0100 -#define MACH64_UPLOAD_TEXTURE 0x0200 -#define MACH64_UPLOAD_TEX0IMAGE 0x0400 -#define MACH64_UPLOAD_TEX1IMAGE 0x0800 -#define MACH64_UPLOAD_CLIPRECTS 0x1000 /* handled client-side */ -#define MACH64_UPLOAD_CONTEXT 0x00ff -#define MACH64_UPLOAD_ALL 0x1fff - -/* DMA buffer size - */ -#define MACH64_BUFFER_SIZE 16384 - -/* Max number of swaps allowed on the ring - * before the client must wait - */ -#define MACH64_MAX_QUEUED_FRAMES 3U - -/* Byte offsets for host blit buffer data - */ -#define MACH64_HOSTDATA_BLIT_OFFSET 104 - -/* Keep these small for testing. - */ -#define MACH64_NR_SAREA_CLIPRECTS 8 - -#define MACH64_CARD_HEAP 0 -#define MACH64_AGP_HEAP 1 -#define MACH64_NR_TEX_HEAPS 2 -#define MACH64_NR_TEX_REGIONS 64 -#define MACH64_LOG_TEX_GRANULARITY 16 - -#define MACH64_TEX_MAXLEVELS 1 - -#define MACH64_NR_CONTEXT_REGS 15 -#define MACH64_NR_TEXTURE_REGS 4 - -#endif /* __MACH64_SAREA_DEFINES__ */ - -typedef struct { - unsigned int dst_off_pitch; - - unsigned int z_off_pitch; - unsigned int z_cntl; - unsigned int alpha_tst_cntl; - - unsigned int scale_3d_cntl; - - unsigned int sc_left_right; - unsigned int sc_top_bottom; - - unsigned int dp_fog_clr; - unsigned int dp_write_mask; - unsigned int dp_pix_width; - unsigned int dp_mix; - unsigned int dp_src; - - unsigned int clr_cmp_cntl; - unsigned int gui_traj_cntl; - - unsigned int setup_cntl; - - unsigned int tex_size_pitch; - unsigned int tex_cntl; - unsigned int secondary_tex_off; - unsigned int tex_offset; -} drm_mach64_context_regs_t; - -typedef struct drm_mach64_sarea { - /* The channel for communication of state information to the kernel - * on firing a vertex dma buffer. - */ - drm_mach64_context_regs_t context_state; - unsigned int dirty; - unsigned int vertsize; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[MACH64_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Counters for client-side throttling of rendering clients. - */ - unsigned int frames_queued; - - /* Texture memory LRU. - */ - struct drm_tex_region tex_list[MACH64_NR_TEX_HEAPS][MACH64_NR_TEX_REGIONS + - 1]; - unsigned int tex_age[MACH64_NR_TEX_HEAPS]; - int ctx_owner; -} drm_mach64_sarea_t; - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (mach64_common.h) - */ - -/* Mach64 specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ - -#define DRM_MACH64_INIT 0x00 -#define DRM_MACH64_IDLE 0x01 -#define DRM_MACH64_RESET 0x02 -#define DRM_MACH64_SWAP 0x03 -#define DRM_MACH64_CLEAR 0x04 -#define DRM_MACH64_VERTEX 0x05 -#define DRM_MACH64_BLIT 0x06 -#define DRM_MACH64_FLUSH 0x07 -#define DRM_MACH64_GETPARAM 0x08 - -#define DRM_IOCTL_MACH64_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_INIT, drm_mach64_init_t) -#define DRM_IOCTL_MACH64_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_IDLE ) -#define DRM_IOCTL_MACH64_RESET DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_RESET ) -#define DRM_IOCTL_MACH64_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_SWAP ) -#define DRM_IOCTL_MACH64_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_CLEAR, drm_mach64_clear_t) -#define DRM_IOCTL_MACH64_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_VERTEX, drm_mach64_vertex_t) -#define DRM_IOCTL_MACH64_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_BLIT, drm_mach64_blit_t) -#define DRM_IOCTL_MACH64_FLUSH DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_FLUSH ) -#define DRM_IOCTL_MACH64_GETPARAM DRM_IOWR( DRM_COMMAND_BASE + DRM_MACH64_GETPARAM, drm_mach64_getparam_t) - -/* Buffer flags for clears - */ -#define MACH64_FRONT 0x1 -#define MACH64_BACK 0x2 -#define MACH64_DEPTH 0x4 - -/* Primitive types for vertex buffers - */ -#define MACH64_PRIM_POINTS 0x00000000 -#define MACH64_PRIM_LINES 0x00000001 -#define MACH64_PRIM_LINE_LOOP 0x00000002 -#define MACH64_PRIM_LINE_STRIP 0x00000003 -#define MACH64_PRIM_TRIANGLES 0x00000004 -#define MACH64_PRIM_TRIANGLE_STRIP 0x00000005 -#define MACH64_PRIM_TRIANGLE_FAN 0x00000006 -#define MACH64_PRIM_QUADS 0x00000007 -#define MACH64_PRIM_QUAD_STRIP 0x00000008 -#define MACH64_PRIM_POLYGON 0x00000009 - -typedef enum _drm_mach64_dma_mode_t { - MACH64_MODE_DMA_ASYNC, - MACH64_MODE_DMA_SYNC, - MACH64_MODE_MMIO -} drm_mach64_dma_mode_t; - -typedef struct drm_mach64_init { - enum { - DRM_MACH64_INIT_DMA = 0x01, - DRM_MACH64_CLEANUP_DMA = 0x02 - } func; - - unsigned long sarea_priv_offset; - int is_pci; - drm_mach64_dma_mode_t dma_mode; - - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long ring_offset; - unsigned long buffers_offset; - unsigned long agp_textures_offset; -} drm_mach64_init_t; - -typedef struct drm_mach64_clear { - unsigned int flags; - int x, y, w, h; - unsigned int clear_color; - unsigned int clear_depth; -} drm_mach64_clear_t; - -typedef struct drm_mach64_vertex { - int prim; - void *buf; /* Address of vertex buffer */ - unsigned long used; /* Number of bytes in buffer */ - int discard; /* Client finished with buffer? */ -} drm_mach64_vertex_t; - -typedef struct drm_mach64_blit { - void *buf; - int pitch; - int offset; - int format; - unsigned short x, y; - unsigned short width, height; -} drm_mach64_blit_t; - -typedef struct drm_mach64_getparam { - enum { - MACH64_PARAM_FRAMES_QUEUED = 0x01, - MACH64_PARAM_IRQ_NR = 0x02 - } param; - void *value; -} drm_mach64_getparam_t; - -#endif diff --git a/prebuilts/x86_64/include/libdrm/mga_drm.h b/prebuilts/x86_64/include/libdrm/mga_drm.h deleted file mode 100644 index 7930011..0000000 --- a/prebuilts/x86_64/include/libdrm/mga_drm.h +++ /dev/null @@ -1,427 +0,0 @@ -/* mga_drm.h -- Public header for the Matrox g200/g400 driver -*- linux-c -*- - * Created: Tue Jan 25 01:50:01 1999 by jhartmann@precisioninsight.com - * - * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Jeff Hartmann - * Keith Whitwell - * - * Rewritten by: - * Gareth Hughes - */ - -#ifndef __MGA_DRM_H__ -#define __MGA_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (mga_sarea.h) - */ - -#ifndef __MGA_SAREA_DEFINES__ -#define __MGA_SAREA_DEFINES__ - -/* WARP pipe flags - */ -#define MGA_F 0x1 /* fog */ -#define MGA_A 0x2 /* alpha */ -#define MGA_S 0x4 /* specular */ -#define MGA_T2 0x8 /* multitexture */ - -#define MGA_WARP_TGZ 0 -#define MGA_WARP_TGZF (MGA_F) -#define MGA_WARP_TGZA (MGA_A) -#define MGA_WARP_TGZAF (MGA_F|MGA_A) -#define MGA_WARP_TGZS (MGA_S) -#define MGA_WARP_TGZSF (MGA_S|MGA_F) -#define MGA_WARP_TGZSA (MGA_S|MGA_A) -#define MGA_WARP_TGZSAF (MGA_S|MGA_F|MGA_A) -#define MGA_WARP_T2GZ (MGA_T2) -#define MGA_WARP_T2GZF (MGA_T2|MGA_F) -#define MGA_WARP_T2GZA (MGA_T2|MGA_A) -#define MGA_WARP_T2GZAF (MGA_T2|MGA_A|MGA_F) -#define MGA_WARP_T2GZS (MGA_T2|MGA_S) -#define MGA_WARP_T2GZSF (MGA_T2|MGA_S|MGA_F) -#define MGA_WARP_T2GZSA (MGA_T2|MGA_S|MGA_A) -#define MGA_WARP_T2GZSAF (MGA_T2|MGA_S|MGA_F|MGA_A) - -#define MGA_MAX_G200_PIPES 8 /* no multitex */ -#define MGA_MAX_G400_PIPES 16 -#define MGA_MAX_WARP_PIPES MGA_MAX_G400_PIPES -#define MGA_WARP_UCODE_SIZE 32768 /* in bytes */ - -#define MGA_CARD_TYPE_G200 1 -#define MGA_CARD_TYPE_G400 2 -#define MGA_CARD_TYPE_G450 3 /* not currently used */ -#define MGA_CARD_TYPE_G550 4 - -#define MGA_FRONT 0x1 -#define MGA_BACK 0x2 -#define MGA_DEPTH 0x4 - -/* What needs to be changed for the current vertex dma buffer? - */ -#define MGA_UPLOAD_CONTEXT 0x1 -#define MGA_UPLOAD_TEX0 0x2 -#define MGA_UPLOAD_TEX1 0x4 -#define MGA_UPLOAD_PIPE 0x8 -#define MGA_UPLOAD_TEX0IMAGE 0x10 /* handled client-side */ -#define MGA_UPLOAD_TEX1IMAGE 0x20 /* handled client-side */ -#define MGA_UPLOAD_2D 0x40 -#define MGA_WAIT_AGE 0x80 /* handled client-side */ -#define MGA_UPLOAD_CLIPRECTS 0x100 /* handled client-side */ -#if 0 -#define MGA_DMA_FLUSH 0x200 /* set when someone gets the lock - quiescent */ -#endif - -/* 32 buffers of 64k each, total 2 meg. - */ -#define MGA_BUFFER_SIZE (1 << 16) -#define MGA_NUM_BUFFERS 128 - -/* Keep these small for testing. - */ -#define MGA_NR_SAREA_CLIPRECTS 8 - -/* 2 heaps (1 for card, 1 for agp), each divided into up to 128 - * regions, subject to a minimum region size of (1<<16) == 64k. - * - * Clients may subdivide regions internally, but when sharing between - * clients, the region size is the minimum granularity. - */ - -#define MGA_CARD_HEAP 0 -#define MGA_AGP_HEAP 1 -#define MGA_NR_TEX_HEAPS 2 -#define MGA_NR_TEX_REGIONS 16 -#define MGA_LOG_MIN_TEX_REGION_SIZE 16 - -#define DRM_MGA_IDLE_RETRY 2048 - -#endif /* __MGA_SAREA_DEFINES__ */ - -/* Setup registers for 3D context - */ -typedef struct { - unsigned int dstorg; - unsigned int maccess; - unsigned int plnwt; - unsigned int dwgctl; - unsigned int alphactrl; - unsigned int fogcolor; - unsigned int wflag; - unsigned int tdualstage0; - unsigned int tdualstage1; - unsigned int fcol; - unsigned int stencil; - unsigned int stencilctl; -} drm_mga_context_regs_t; - -/* Setup registers for 2D, X server - */ -typedef struct { - unsigned int pitch; -} drm_mga_server_regs_t; - -/* Setup registers for each texture unit - */ -typedef struct { - unsigned int texctl; - unsigned int texctl2; - unsigned int texfilter; - unsigned int texbordercol; - unsigned int texorg; - unsigned int texwidth; - unsigned int texheight; - unsigned int texorg1; - unsigned int texorg2; - unsigned int texorg3; - unsigned int texorg4; -} drm_mga_texture_regs_t; - -/* General aging mechanism - */ -typedef struct { - unsigned int head; /* Position of head pointer */ - unsigned int wrap; /* Primary DMA wrap count */ -} drm_mga_age_t; - -typedef struct _drm_mga_sarea { - /* The channel for communication of state information to the kernel - * on firing a vertex dma buffer. - */ - drm_mga_context_regs_t context_state; - drm_mga_server_regs_t server_state; - drm_mga_texture_regs_t tex_state[2]; - unsigned int warp_pipe; - unsigned int dirty; - unsigned int vertsize; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[MGA_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Information about the most recently used 3d drawable. The - * client fills in the req_* fields, the server fills in the - * exported_ fields and puts the cliprects into boxes, above. - * - * The client clears the exported_drawable field before - * clobbering the boxes data. - */ - unsigned int req_drawable; /* the X drawable id */ - unsigned int req_draw_buffer; /* MGA_FRONT or MGA_BACK */ - - unsigned int exported_drawable; - unsigned int exported_index; - unsigned int exported_stamp; - unsigned int exported_buffers; - unsigned int exported_nfront; - unsigned int exported_nback; - int exported_back_x, exported_front_x, exported_w; - int exported_back_y, exported_front_y, exported_h; - struct drm_clip_rect exported_boxes[MGA_NR_SAREA_CLIPRECTS]; - - /* Counters for aging textures and for client-side throttling. - */ - unsigned int status[4]; - unsigned int last_wrap; - - drm_mga_age_t last_frame; - unsigned int last_enqueue; /* last time a buffer was enqueued */ - unsigned int last_dispatch; /* age of the most recently dispatched buffer */ - unsigned int last_quiescent; /* */ - - /* LRU lists for texture memory in agp space and on the card. - */ - struct drm_tex_region texList[MGA_NR_TEX_HEAPS][MGA_NR_TEX_REGIONS + 1]; - unsigned int texAge[MGA_NR_TEX_HEAPS]; - - /* Mechanism to validate card state. - */ - int ctxOwner; -} drm_mga_sarea_t; - -/* MGA specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ -#define DRM_MGA_INIT 0x00 -#define DRM_MGA_FLUSH 0x01 -#define DRM_MGA_RESET 0x02 -#define DRM_MGA_SWAP 0x03 -#define DRM_MGA_CLEAR 0x04 -#define DRM_MGA_VERTEX 0x05 -#define DRM_MGA_INDICES 0x06 -#define DRM_MGA_ILOAD 0x07 -#define DRM_MGA_BLIT 0x08 -#define DRM_MGA_GETPARAM 0x09 - -/* 3.2: - * ioctls for operating on fences. - */ -#define DRM_MGA_SET_FENCE 0x0a -#define DRM_MGA_WAIT_FENCE 0x0b -#define DRM_MGA_DMA_BOOTSTRAP 0x0c - -#define DRM_IOCTL_MGA_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INIT, drm_mga_init_t) -#define DRM_IOCTL_MGA_FLUSH DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_FLUSH, struct drm_lock) -#define DRM_IOCTL_MGA_RESET DRM_IO( DRM_COMMAND_BASE + DRM_MGA_RESET) -#define DRM_IOCTL_MGA_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_MGA_SWAP) -#define DRM_IOCTL_MGA_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_CLEAR, drm_mga_clear_t) -#define DRM_IOCTL_MGA_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_VERTEX, drm_mga_vertex_t) -#define DRM_IOCTL_MGA_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INDICES, drm_mga_indices_t) -#define DRM_IOCTL_MGA_ILOAD DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_ILOAD, drm_mga_iload_t) -#define DRM_IOCTL_MGA_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_BLIT, drm_mga_blit_t) -#define DRM_IOCTL_MGA_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_GETPARAM, drm_mga_getparam_t) -#define DRM_IOCTL_MGA_SET_FENCE DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_SET_FENCE, __u32) -#define DRM_IOCTL_MGA_WAIT_FENCE DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_WAIT_FENCE, __u32) -#define DRM_IOCTL_MGA_DMA_BOOTSTRAP DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_DMA_BOOTSTRAP, drm_mga_dma_bootstrap_t) - -typedef struct _drm_mga_warp_index { - int installed; - unsigned long phys_addr; - int size; -} drm_mga_warp_index_t; - -typedef struct drm_mga_init { - enum { - MGA_INIT_DMA = 0x01, - MGA_CLEANUP_DMA = 0x02 - } func; - - unsigned long sarea_priv_offset; - - int chipset; - int sgram; - - unsigned int maccess; - - unsigned int fb_cpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - - unsigned int depth_cpp; - unsigned int depth_offset, depth_pitch; - - unsigned int texture_offset[MGA_NR_TEX_HEAPS]; - unsigned int texture_size[MGA_NR_TEX_HEAPS]; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long status_offset; - unsigned long warp_offset; - unsigned long primary_offset; - unsigned long buffers_offset; -} drm_mga_init_t; - -typedef struct drm_mga_dma_bootstrap { - /** - * \name AGP texture region - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, these fields will - * be filled in with the actual AGP texture settings. - * - * \warning - * If these fields are non-zero, but dma_mga_dma_bootstrap::agp_mode - * is zero, it means that PCI memory (most likely through the use of - * an IOMMU) is being used for "AGP" textures. - */ - /*@{ */ - unsigned long texture_handle; /**< Handle used to map AGP textures. */ - __u32 texture_size; /**< Size of the AGP texture region. */ - /*@} */ - - /** - * Requested size of the primary DMA region. - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be - * filled in with the actual AGP mode. If AGP was not available - */ - __u32 primary_size; - - /** - * Requested number of secondary DMA buffers. - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be - * filled in with the actual number of secondary DMA buffers - * allocated. Particularly when PCI DMA is used, this may be - * (subtantially) less than the number requested. - */ - __u32 secondary_bin_count; - - /** - * Requested size of each secondary DMA buffer. - * - * While the kernel \b is free to reduce - * dma_mga_dma_bootstrap::secondary_bin_count, it is \b not allowed - * to reduce dma_mga_dma_bootstrap::secondary_bin_size. - */ - __u32 secondary_bin_size; - - /** - * Bit-wise mask of AGPSTAT2_* values. Currently only \c AGPSTAT2_1X, - * \c AGPSTAT2_2X, and \c AGPSTAT2_4X are supported. If this value is - * zero, it means that PCI DMA should be used, even if AGP is - * possible. - * - * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be - * filled in with the actual AGP mode. If AGP was not available - * (i.e., PCI DMA was used), this value will be zero. - */ - __u32 agp_mode; - - /** - * Desired AGP GART size, measured in megabytes. - */ - __u8 agp_size; -} drm_mga_dma_bootstrap_t; - -typedef struct drm_mga_clear { - unsigned int flags; - unsigned int clear_color; - unsigned int clear_depth; - unsigned int color_mask; - unsigned int depth_mask; -} drm_mga_clear_t; - -typedef struct drm_mga_vertex { - int idx; /* buffer to queue */ - int used; /* bytes in use */ - int discard; /* client finished with buffer? */ -} drm_mga_vertex_t; - -typedef struct drm_mga_indices { - int idx; /* buffer to queue */ - unsigned int start; - unsigned int end; - int discard; /* client finished with buffer? */ -} drm_mga_indices_t; - -typedef struct drm_mga_iload { - int idx; - unsigned int dstorg; - unsigned int length; -} drm_mga_iload_t; - -typedef struct _drm_mga_blit { - unsigned int planemask; - unsigned int srcorg; - unsigned int dstorg; - int src_pitch, dst_pitch; - int delta_sx, delta_sy; - int delta_dx, delta_dy; - int height, ydir; /* flip image vertically */ - int source_pitch, dest_pitch; -} drm_mga_blit_t; - -/* 3.1: An ioctl to get parameters that aren't available to the 3d - * client any other way. - */ -#define MGA_PARAM_IRQ_NR 1 - -/* 3.2: Query the actual card type. The DDX only distinguishes between - * G200 chips and non-G200 chips, which it calls G400. It turns out that - * there are some very sublte differences between the G4x0 chips and the G550 - * chips. Using this parameter query, a client-side driver can detect the - * difference between a G4x0 and a G550. - */ -#define MGA_PARAM_CARD_TYPE 2 - -typedef struct drm_mga_getparam { - int param; - void *value; -} drm_mga_getparam_t; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/libdrm/msm_drm.h b/prebuilts/x86_64/include/libdrm/msm_drm.h deleted file mode 100644 index c06d0a5..0000000 --- a/prebuilts/x86_64/include/libdrm/msm_drm.h +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (C) 2013 Red Hat - * Author: Rob Clark - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __MSM_DRM_H__ -#define __MSM_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints: - * 1) Do not use pointers, use __u64 instead for 32 bit / 64 bit - * user/kernel compatibility - * 2) Keep fields aligned to their size - * 3) Because of how drm_ioctl() works, we can add new fields at - * the end of an ioctl if some care is taken: drm_ioctl() will - * zero out the new fields at the tail of the ioctl, so a zero - * value should have a backwards compatible meaning. And for - * output params, userspace won't see the newly added output - * fields.. so that has to be somehow ok. - */ - -#define MSM_PIPE_NONE 0x00 -#define MSM_PIPE_2D0 0x01 -#define MSM_PIPE_2D1 0x02 -#define MSM_PIPE_3D0 0x10 - -/* The pipe-id just uses the lower bits, so can be OR'd with flags in - * the upper 16 bits (which could be extended further, if needed, maybe - * we extend/overload the pipe-id some day to deal with multiple rings, - * but even then I don't think we need the full lower 16 bits). - */ -#define MSM_PIPE_ID_MASK 0xffff -#define MSM_PIPE_ID(x) ((x) & MSM_PIPE_ID_MASK) -#define MSM_PIPE_FLAGS(x) ((x) & ~MSM_PIPE_ID_MASK) - -/* timeouts are specified in clock-monotonic absolute times (to simplify - * restarting interrupted ioctls). The following struct is logically the - * same as 'struct timespec' but 32/64b ABI safe. - */ -struct drm_msm_timespec { - __s64 tv_sec; /* seconds */ - __s64 tv_nsec; /* nanoseconds */ -}; - -#define MSM_PARAM_GPU_ID 0x01 -#define MSM_PARAM_GMEM_SIZE 0x02 -#define MSM_PARAM_CHIP_ID 0x03 -#define MSM_PARAM_MAX_FREQ 0x04 -#define MSM_PARAM_TIMESTAMP 0x05 -#define MSM_PARAM_GMEM_BASE 0x06 -#define MSM_PARAM_NR_RINGS 0x07 - -struct drm_msm_param { - __u32 pipe; /* in, MSM_PIPE_x */ - __u32 param; /* in, MSM_PARAM_x */ - __u64 value; /* out (get_param) or in (set_param) */ -}; - -/* - * GEM buffers: - */ - -#define MSM_BO_SCANOUT 0x00000001 /* scanout capable */ -#define MSM_BO_GPU_READONLY 0x00000002 -#define MSM_BO_CACHE_MASK 0x000f0000 -/* cache modes */ -#define MSM_BO_CACHED 0x00010000 -#define MSM_BO_WC 0x00020000 -#define MSM_BO_UNCACHED 0x00040000 - -#define MSM_BO_FLAGS (MSM_BO_SCANOUT | \ - MSM_BO_GPU_READONLY | \ - MSM_BO_CACHED | \ - MSM_BO_WC | \ - MSM_BO_UNCACHED) - -struct drm_msm_gem_new { - __u64 size; /* in */ - __u32 flags; /* in, mask of MSM_BO_x */ - __u32 handle; /* out */ -}; - -#define MSM_INFO_IOVA 0x01 - -#define MSM_INFO_FLAGS (MSM_INFO_IOVA) - -struct drm_msm_gem_info { - __u32 handle; /* in */ - __u32 flags; /* in - combination of MSM_INFO_* flags */ - __u64 offset; /* out, mmap() offset or iova */ -}; - -#define MSM_PREP_READ 0x01 -#define MSM_PREP_WRITE 0x02 -#define MSM_PREP_NOSYNC 0x04 - -#define MSM_PREP_FLAGS (MSM_PREP_READ | MSM_PREP_WRITE | MSM_PREP_NOSYNC) - -struct drm_msm_gem_cpu_prep { - __u32 handle; /* in */ - __u32 op; /* in, mask of MSM_PREP_x */ - struct drm_msm_timespec timeout; /* in */ -}; - -struct drm_msm_gem_cpu_fini { - __u32 handle; /* in */ -}; - -/* - * Cmdstream Submission: - */ - -/* The value written into the cmdstream is logically: - * - * ((relocbuf->gpuaddr + reloc_offset) << shift) | or - * - * When we have GPU's w/ >32bit ptrs, it should be possible to deal - * with this by emit'ing two reloc entries with appropriate shift - * values. Or a new MSM_SUBMIT_CMD_x type would also be an option. - * - * NOTE that reloc's must be sorted by order of increasing submit_offset, - * otherwise EINVAL. - */ -struct drm_msm_gem_submit_reloc { - __u32 submit_offset; /* in, offset from submit_bo */ - __u32 or; /* in, value OR'd with result */ - __s32 shift; /* in, amount of left shift (can be negative) */ - __u32 reloc_idx; /* in, index of reloc_bo buffer */ - __u64 reloc_offset; /* in, offset from start of reloc_bo */ -}; - -/* submit-types: - * BUF - this cmd buffer is executed normally. - * IB_TARGET_BUF - this cmd buffer is an IB target. Reloc's are - * processed normally, but the kernel does not setup an IB to - * this buffer in the first-level ringbuffer - * CTX_RESTORE_BUF - only executed if there has been a GPU context - * switch since the last SUBMIT ioctl - */ -#define MSM_SUBMIT_CMD_BUF 0x0001 -#define MSM_SUBMIT_CMD_IB_TARGET_BUF 0x0002 -#define MSM_SUBMIT_CMD_CTX_RESTORE_BUF 0x0003 -struct drm_msm_gem_submit_cmd { - __u32 type; /* in, one of MSM_SUBMIT_CMD_x */ - __u32 submit_idx; /* in, index of submit_bo cmdstream buffer */ - __u32 submit_offset; /* in, offset into submit_bo */ - __u32 size; /* in, cmdstream size */ - __u32 pad; - __u32 nr_relocs; /* in, number of submit_reloc's */ - __u64 relocs; /* in, ptr to array of submit_reloc's */ -}; - -/* Each buffer referenced elsewhere in the cmdstream submit (ie. the - * cmdstream buffer(s) themselves or reloc entries) has one (and only - * one) entry in the submit->bos[] table. - * - * As a optimization, the current buffer (gpu virtual address) can be - * passed back through the 'presumed' field. If on a subsequent reloc, - * userspace passes back a 'presumed' address that is still valid, - * then patching the cmdstream for this entry is skipped. This can - * avoid kernel needing to map/access the cmdstream bo in the common - * case. - */ -#define MSM_SUBMIT_BO_READ 0x0001 -#define MSM_SUBMIT_BO_WRITE 0x0002 - -#define MSM_SUBMIT_BO_FLAGS (MSM_SUBMIT_BO_READ | MSM_SUBMIT_BO_WRITE) - -struct drm_msm_gem_submit_bo { - __u32 flags; /* in, mask of MSM_SUBMIT_BO_x */ - __u32 handle; /* in, GEM handle */ - __u64 presumed; /* in/out, presumed buffer address */ -}; - -/* Valid submit ioctl flags: */ -#define MSM_SUBMIT_NO_IMPLICIT 0x80000000 /* disable implicit sync */ -#define MSM_SUBMIT_FENCE_FD_IN 0x40000000 /* enable input fence_fd */ -#define MSM_SUBMIT_FENCE_FD_OUT 0x20000000 /* enable output fence_fd */ -#define MSM_SUBMIT_SUDO 0x10000000 /* run submitted cmds from RB */ -#define MSM_SUBMIT_FLAGS ( \ - MSM_SUBMIT_NO_IMPLICIT | \ - MSM_SUBMIT_FENCE_FD_IN | \ - MSM_SUBMIT_FENCE_FD_OUT | \ - MSM_SUBMIT_SUDO | \ - 0) - -/* Each cmdstream submit consists of a table of buffers involved, and - * one or more cmdstream buffers. This allows for conditional execution - * (context-restore), and IB buffers needed for per tile/bin draw cmds. - */ -struct drm_msm_gem_submit { - __u32 flags; /* MSM_PIPE_x | MSM_SUBMIT_x */ - __u32 fence; /* out */ - __u32 nr_bos; /* in, number of submit_bo's */ - __u32 nr_cmds; /* in, number of submit_cmd's */ - __u64 bos; /* in, ptr to array of submit_bo's */ - __u64 cmds; /* in, ptr to array of submit_cmd's */ - __s32 fence_fd; /* in/out fence fd (see MSM_SUBMIT_FENCE_FD_IN/OUT) */ - __u32 queueid; /* in, submitqueue id */ -}; - -/* The normal way to synchronize with the GPU is just to CPU_PREP on - * a buffer if you need to access it from the CPU (other cmdstream - * submission from same or other contexts, PAGE_FLIP ioctl, etc, all - * handle the required synchronization under the hood). This ioctl - * mainly just exists as a way to implement the gallium pipe_fence - * APIs without requiring a dummy bo to synchronize on. - */ -struct drm_msm_wait_fence { - __u32 fence; /* in */ - __u32 pad; - struct drm_msm_timespec timeout; /* in */ - __u32 queueid; /* in, submitqueue id */ -}; - -/* madvise provides a way to tell the kernel in case a buffers contents - * can be discarded under memory pressure, which is useful for userspace - * bo cache where we want to optimistically hold on to buffer allocate - * and potential mmap, but allow the pages to be discarded under memory - * pressure. - * - * Typical usage would involve madvise(DONTNEED) when buffer enters BO - * cache, and madvise(WILLNEED) if trying to recycle buffer from BO cache. - * In the WILLNEED case, 'retained' indicates to userspace whether the - * backing pages still exist. - */ -#define MSM_MADV_WILLNEED 0 /* backing pages are needed, status returned in 'retained' */ -#define MSM_MADV_DONTNEED 1 /* backing pages not needed */ -#define __MSM_MADV_PURGED 2 /* internal state */ - -struct drm_msm_gem_madvise { - __u32 handle; /* in, GEM handle */ - __u32 madv; /* in, MSM_MADV_x */ - __u32 retained; /* out, whether backing store still exists */ -}; - -/* - * Draw queues allow the user to set specific submission parameter. Command - * submissions specify a specific submitqueue to use. ID 0 is reserved for - * backwards compatibility as a "default" submitqueue - */ - -#define MSM_SUBMITQUEUE_FLAGS (0) - -struct drm_msm_submitqueue { - __u32 flags; /* in, MSM_SUBMITQUEUE_x */ - __u32 prio; /* in, Priority level */ - __u32 id; /* out, identifier */ -}; - -#define DRM_MSM_GET_PARAM 0x00 -/* placeholder: -#define DRM_MSM_SET_PARAM 0x01 - */ -#define DRM_MSM_GEM_NEW 0x02 -#define DRM_MSM_GEM_INFO 0x03 -#define DRM_MSM_GEM_CPU_PREP 0x04 -#define DRM_MSM_GEM_CPU_FINI 0x05 -#define DRM_MSM_GEM_SUBMIT 0x06 -#define DRM_MSM_WAIT_FENCE 0x07 -#define DRM_MSM_GEM_MADVISE 0x08 -/* placeholder: -#define DRM_MSM_GEM_SVM_NEW 0x09 - */ -#define DRM_MSM_SUBMITQUEUE_NEW 0x0A -#define DRM_MSM_SUBMITQUEUE_CLOSE 0x0B - -#define DRM_IOCTL_MSM_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GET_PARAM, struct drm_msm_param) -#define DRM_IOCTL_MSM_GEM_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_NEW, struct drm_msm_gem_new) -#define DRM_IOCTL_MSM_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_INFO, struct drm_msm_gem_info) -#define DRM_IOCTL_MSM_GEM_CPU_PREP DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_GEM_CPU_PREP, struct drm_msm_gem_cpu_prep) -#define DRM_IOCTL_MSM_GEM_CPU_FINI DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_GEM_CPU_FINI, struct drm_msm_gem_cpu_fini) -#define DRM_IOCTL_MSM_GEM_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_SUBMIT, struct drm_msm_gem_submit) -#define DRM_IOCTL_MSM_WAIT_FENCE DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_WAIT_FENCE, struct drm_msm_wait_fence) -#define DRM_IOCTL_MSM_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_GEM_MADVISE, struct drm_msm_gem_madvise) -#define DRM_IOCTL_MSM_SUBMITQUEUE_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_SUBMITQUEUE_NEW, struct drm_msm_submitqueue) -#define DRM_IOCTL_MSM_SUBMITQUEUE_CLOSE DRM_IOW (DRM_COMMAND_BASE + DRM_MSM_SUBMITQUEUE_CLOSE, __u32) - -#if defined(__cplusplus) -} -#endif - -#endif /* __MSM_DRM_H__ */ diff --git a/prebuilts/x86_64/include/libdrm/nouveau/nouveau.h b/prebuilts/x86_64/include/libdrm/nouveau/nouveau.h deleted file mode 100644 index 0c632fe..0000000 --- a/prebuilts/x86_64/include/libdrm/nouveau/nouveau.h +++ /dev/null @@ -1,280 +0,0 @@ -#ifndef __NOUVEAU_H__ -#define __NOUVEAU_H__ - -#include -#include - -/* Supported class information, provided by the kernel */ -struct nouveau_sclass { - int32_t oclass; - int minver; - int maxver; -}; - -/* Client-provided array describing class versions that are desired. - * - * These are used to match against the kernel's list of supported classes. - */ -struct nouveau_mclass { - int32_t oclass; - int version; - void *data; -}; - -struct nouveau_object { - struct nouveau_object *parent; - uint64_t handle; - uint32_t oclass; - uint32_t length; /* deprecated */ - void *data; /* deprecated */ -}; - -int nouveau_object_new(struct nouveau_object *parent, uint64_t handle, - uint32_t oclass, void *data, uint32_t length, - struct nouveau_object **); -void nouveau_object_del(struct nouveau_object **); -int nouveau_object_mthd(struct nouveau_object *, uint32_t mthd, - void *data, uint32_t size); -int nouveau_object_sclass_get(struct nouveau_object *, - struct nouveau_sclass **); -void nouveau_object_sclass_put(struct nouveau_sclass **); -int nouveau_object_mclass(struct nouveau_object *, - const struct nouveau_mclass *); - -struct nouveau_drm { - struct nouveau_object client; - int fd; - uint32_t version; - bool nvif; -}; - -static inline struct nouveau_drm * -nouveau_drm(struct nouveau_object *obj) -{ - while (obj && obj->parent) - obj = obj->parent; - return (struct nouveau_drm *)obj; -} - -int nouveau_drm_new(int fd, struct nouveau_drm **); -void nouveau_drm_del(struct nouveau_drm **); - -struct nouveau_device { - struct nouveau_object object; - int fd; /* deprecated */ - uint32_t lib_version; /* deprecated */ - uint32_t drm_version; /* deprecated */ - uint32_t chipset; - uint64_t vram_size; - uint64_t gart_size; - uint64_t vram_limit; - uint64_t gart_limit; -}; - -int nouveau_device_new(struct nouveau_object *parent, int32_t oclass, - void *data, uint32_t size, struct nouveau_device **); -void nouveau_device_del(struct nouveau_device **); - -int nouveau_getparam(struct nouveau_device *, uint64_t param, uint64_t *value); -int nouveau_setparam(struct nouveau_device *, uint64_t param, uint64_t value); - -/* deprecated */ -int nouveau_device_wrap(int fd, int close, struct nouveau_device **); -int nouveau_device_open(const char *busid, struct nouveau_device **); - -struct nouveau_client { - struct nouveau_device *device; - int id; -}; - -int nouveau_client_new(struct nouveau_device *, struct nouveau_client **); -void nouveau_client_del(struct nouveau_client **); - -union nouveau_bo_config { - struct { -#define NV04_BO_16BPP 0x00000001 -#define NV04_BO_32BPP 0x00000002 -#define NV04_BO_ZETA 0x00000004 - uint32_t surf_flags; - uint32_t surf_pitch; - } nv04; - struct { - uint32_t memtype; - uint32_t tile_mode; - } nv50; - struct { - uint32_t memtype; - uint32_t tile_mode; - } nvc0; - uint32_t data[8]; -}; - -#define NOUVEAU_BO_VRAM 0x00000001 -#define NOUVEAU_BO_GART 0x00000002 -#define NOUVEAU_BO_APER (NOUVEAU_BO_VRAM | NOUVEAU_BO_GART) -#define NOUVEAU_BO_RD 0x00000100 -#define NOUVEAU_BO_WR 0x00000200 -#define NOUVEAU_BO_RDWR (NOUVEAU_BO_RD | NOUVEAU_BO_WR) -#define NOUVEAU_BO_NOBLOCK 0x00000400 -#define NOUVEAU_BO_LOW 0x00001000 -#define NOUVEAU_BO_HIGH 0x00002000 -#define NOUVEAU_BO_OR 0x00004000 -#define NOUVEAU_BO_MAP 0x80000000 -#define NOUVEAU_BO_CONTIG 0x40000000 -#define NOUVEAU_BO_NOSNOOP 0x20000000 -#define NOUVEAU_BO_COHERENT 0x10000000 - -struct nouveau_bo { - struct nouveau_device *device; - uint32_t handle; - uint64_t size; - uint32_t flags; - uint64_t offset; - void *map; - union nouveau_bo_config config; -}; - -int nouveau_bo_new(struct nouveau_device *, uint32_t flags, uint32_t align, - uint64_t size, union nouveau_bo_config *, - struct nouveau_bo **); -int nouveau_bo_wrap(struct nouveau_device *, uint32_t handle, - struct nouveau_bo **); -int nouveau_bo_name_ref(struct nouveau_device *v, uint32_t name, - struct nouveau_bo **); -int nouveau_bo_name_get(struct nouveau_bo *, uint32_t *name); -void nouveau_bo_ref(struct nouveau_bo *, struct nouveau_bo **); -int nouveau_bo_map(struct nouveau_bo *, uint32_t access, - struct nouveau_client *); -int nouveau_bo_wait(struct nouveau_bo *, uint32_t access, - struct nouveau_client *); -int nouveau_bo_prime_handle_ref(struct nouveau_device *, int prime_fd, - struct nouveau_bo **); -int nouveau_bo_set_prime(struct nouveau_bo *, int *prime_fd); - -struct nouveau_list { - struct nouveau_list *prev; - struct nouveau_list *next; -}; - -struct nouveau_bufref { - struct nouveau_list thead; - struct nouveau_bo *bo; - uint32_t packet; - uint32_t flags; - uint32_t data; - uint32_t vor; - uint32_t tor; - uint32_t priv_data; - void *priv; -}; - -struct nouveau_bufctx { - struct nouveau_client *client; - struct nouveau_list head; - struct nouveau_list pending; - struct nouveau_list current; - int relocs; -}; - -int nouveau_bufctx_new(struct nouveau_client *, int bins, - struct nouveau_bufctx **); -void nouveau_bufctx_del(struct nouveau_bufctx **); -struct nouveau_bufref * -nouveau_bufctx_refn(struct nouveau_bufctx *, int bin, - struct nouveau_bo *, uint32_t flags); -struct nouveau_bufref * -nouveau_bufctx_mthd(struct nouveau_bufctx *, int bin, uint32_t packet, - struct nouveau_bo *, uint64_t data, uint32_t flags, - uint32_t vor, uint32_t tor); -void nouveau_bufctx_reset(struct nouveau_bufctx *, int bin); - -struct nouveau_pushbuf_krec; -struct nouveau_pushbuf { - struct nouveau_client *client; - struct nouveau_object *channel; - struct nouveau_bufctx *bufctx; - void (*kick_notify)(struct nouveau_pushbuf *); - void *user_priv; - uint32_t rsvd_kick; - uint32_t flags; - uint32_t *cur; - uint32_t *end; -}; - -struct nouveau_pushbuf_refn { - struct nouveau_bo *bo; - uint32_t flags; -}; - -int nouveau_pushbuf_new(struct nouveau_client *, struct nouveau_object *chan, - int nr, uint32_t size, bool immediate, - struct nouveau_pushbuf **); -void nouveau_pushbuf_del(struct nouveau_pushbuf **); -int nouveau_pushbuf_space(struct nouveau_pushbuf *, uint32_t dwords, - uint32_t relocs, uint32_t pushes); -void nouveau_pushbuf_data(struct nouveau_pushbuf *, struct nouveau_bo *, - uint64_t offset, uint64_t length); -int nouveau_pushbuf_refn(struct nouveau_pushbuf *, - struct nouveau_pushbuf_refn *, int nr); -/* Emits a reloc into the push buffer at the current position, you *must* - * have previously added the referenced buffer to a buffer context, and - * validated it against the current push buffer. - */ -void nouveau_pushbuf_reloc(struct nouveau_pushbuf *, struct nouveau_bo *, - uint32_t data, uint32_t flags, - uint32_t vor, uint32_t tor); -int nouveau_pushbuf_validate(struct nouveau_pushbuf *); -uint32_t nouveau_pushbuf_refd(struct nouveau_pushbuf *, struct nouveau_bo *); -int nouveau_pushbuf_kick(struct nouveau_pushbuf *, struct nouveau_object *chan); -struct nouveau_bufctx * -nouveau_pushbuf_bufctx(struct nouveau_pushbuf *, struct nouveau_bufctx *); - -#define NOUVEAU_DEVICE_CLASS 0x80000000 -#define NOUVEAU_FIFO_CHANNEL_CLASS 0x80000001 -#define NOUVEAU_NOTIFIER_CLASS 0x80000002 - -struct nouveau_fifo { - struct nouveau_object *object; - uint32_t channel; - uint32_t pushbuf; - uint64_t unused1[3]; -}; - -struct nv04_fifo { - struct nouveau_fifo base; - uint32_t vram; - uint32_t gart; - uint32_t notify; -}; - -struct nvc0_fifo { - struct nouveau_fifo base; - uint32_t notify; -}; - -#define NVE0_FIFO_ENGINE_GR 0x00000001 -#define NVE0_FIFO_ENGINE_VP 0x00000002 -#define NVE0_FIFO_ENGINE_PPP 0x00000004 -#define NVE0_FIFO_ENGINE_BSP 0x00000008 -#define NVE0_FIFO_ENGINE_CE0 0x00000010 -#define NVE0_FIFO_ENGINE_CE1 0x00000020 -#define NVE0_FIFO_ENGINE_ENC 0x00000040 - -struct nve0_fifo { - struct { - struct nouveau_fifo base; - uint32_t notify; - }; - uint32_t engine; -}; - -struct nv04_notify { - struct nouveau_object *object; - uint32_t offset; - uint32_t length; -}; - -bool -nouveau_check_dead_channel(struct nouveau_drm *, struct nouveau_object *chan); - -#endif diff --git a/prebuilts/x86_64/include/libdrm/nouveau/nvif/cl0080.h b/prebuilts/x86_64/include/libdrm/nouveau/nvif/cl0080.h deleted file mode 100644 index 331620a..0000000 --- a/prebuilts/x86_64/include/libdrm/nouveau/nvif/cl0080.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef __NVIF_CL0080_H__ -#define __NVIF_CL0080_H__ - -struct nv_device_v0 { - __u8 version; - __u8 pad01[7]; - __u64 device; /* device identifier, ~0 for client default */ -}; - -#define NV_DEVICE_V0_INFO 0x00 -#define NV_DEVICE_V0_TIME 0x01 - -struct nv_device_info_v0 { - __u8 version; -#define NV_DEVICE_INFO_V0_IGP 0x00 -#define NV_DEVICE_INFO_V0_PCI 0x01 -#define NV_DEVICE_INFO_V0_AGP 0x02 -#define NV_DEVICE_INFO_V0_PCIE 0x03 -#define NV_DEVICE_INFO_V0_SOC 0x04 - __u8 platform; - __u16 chipset; /* from NV_PMC_BOOT_0 */ - __u8 revision; /* from NV_PMC_BOOT_0 */ -#define NV_DEVICE_INFO_V0_TNT 0x01 -#define NV_DEVICE_INFO_V0_CELSIUS 0x02 -#define NV_DEVICE_INFO_V0_KELVIN 0x03 -#define NV_DEVICE_INFO_V0_RANKINE 0x04 -#define NV_DEVICE_INFO_V0_CURIE 0x05 -#define NV_DEVICE_INFO_V0_TESLA 0x06 -#define NV_DEVICE_INFO_V0_FERMI 0x07 -#define NV_DEVICE_INFO_V0_KEPLER 0x08 -#define NV_DEVICE_INFO_V0_MAXWELL 0x09 - __u8 family; - __u8 pad06[2]; - __u64 ram_size; - __u64 ram_user; - char chip[16]; - char name[64]; -}; - -struct nv_device_time_v0 { - __u8 version; - __u8 pad01[7]; - __u64 time; -}; -#endif diff --git a/prebuilts/x86_64/include/libdrm/nouveau/nvif/cl9097.h b/prebuilts/x86_64/include/libdrm/nouveau/nvif/cl9097.h deleted file mode 100644 index 4057676..0000000 --- a/prebuilts/x86_64/include/libdrm/nouveau/nvif/cl9097.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef __NVIF_CL9097_H__ -#define __NVIF_CL9097_H__ - -#define FERMI_A_ZBC_COLOR 0x00 -#define FERMI_A_ZBC_DEPTH 0x01 - -struct fermi_a_zbc_color_v0 { - __u8 version; -#define FERMI_A_ZBC_COLOR_V0_FMT_ZERO 0x01 -#define FERMI_A_ZBC_COLOR_V0_FMT_UNORM_ONE 0x02 -#define FERMI_A_ZBC_COLOR_V0_FMT_RF32_GF32_BF32_AF32 0x04 -#define FERMI_A_ZBC_COLOR_V0_FMT_R16_G16_B16_A16 0x08 -#define FERMI_A_ZBC_COLOR_V0_FMT_RN16_GN16_BN16_AN16 0x0c -#define FERMI_A_ZBC_COLOR_V0_FMT_RS16_GS16_BS16_AS16 0x10 -#define FERMI_A_ZBC_COLOR_V0_FMT_RU16_GU16_BU16_AU16 0x14 -#define FERMI_A_ZBC_COLOR_V0_FMT_RF16_GF16_BF16_AF16 0x16 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8R8G8B8 0x18 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8RL8GL8BL8 0x1c -#define FERMI_A_ZBC_COLOR_V0_FMT_A2B10G10R10 0x20 -#define FERMI_A_ZBC_COLOR_V0_FMT_AU2BU10GU10RU10 0x24 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8B8G8R8 0x28 -#define FERMI_A_ZBC_COLOR_V0_FMT_A8BL8GL8RL8 0x2c -#define FERMI_A_ZBC_COLOR_V0_FMT_AN8BN8GN8RN8 0x30 -#define FERMI_A_ZBC_COLOR_V0_FMT_AS8BS8GS8RS8 0x34 -#define FERMI_A_ZBC_COLOR_V0_FMT_AU8BU8GU8RU8 0x38 -#define FERMI_A_ZBC_COLOR_V0_FMT_A2R10G10B10 0x3c -#define FERMI_A_ZBC_COLOR_V0_FMT_BF10GF11RF11 0x40 - __u8 format; - __u8 index; - __u8 pad03[5]; - __u32 ds[4]; - __u32 l2[4]; -}; - -struct fermi_a_zbc_depth_v0 { - __u8 version; -#define FERMI_A_ZBC_DEPTH_V0_FMT_FP32 0x01 - __u8 format; - __u8 index; - __u8 pad03[5]; - __u32 ds; - __u32 l2; -}; -#endif diff --git a/prebuilts/x86_64/include/libdrm/nouveau/nvif/class.h b/prebuilts/x86_64/include/libdrm/nouveau/nvif/class.h deleted file mode 100644 index 4179cd6..0000000 --- a/prebuilts/x86_64/include/libdrm/nouveau/nvif/class.h +++ /dev/null @@ -1,141 +0,0 @@ -#ifndef __NVIF_CLASS_H__ -#define __NVIF_CLASS_H__ - -/* these class numbers are made up by us, and not nvidia-assigned */ -#define NVIF_CLASS_CONTROL /* if0001.h */ -1 -#define NVIF_CLASS_PERFMON /* if0002.h */ -2 -#define NVIF_CLASS_PERFDOM /* if0003.h */ -3 -#define NVIF_CLASS_SW_NV04 /* if0004.h */ -4 -#define NVIF_CLASS_SW_NV10 /* if0005.h */ -5 -#define NVIF_CLASS_SW_NV50 /* if0005.h */ -6 -#define NVIF_CLASS_SW_GF100 /* if0005.h */ -7 - -/* the below match nvidia-assigned (either in hw, or sw) class numbers */ -#define NV_DEVICE /* cl0080.h */ 0x00000080 - -#define NV_DMA_FROM_MEMORY /* cl0002.h */ 0x00000002 -#define NV_DMA_TO_MEMORY /* cl0002.h */ 0x00000003 -#define NV_DMA_IN_MEMORY /* cl0002.h */ 0x0000003d - -#define FERMI_TWOD_A 0x0000902d - -#define FERMI_MEMORY_TO_MEMORY_FORMAT_A 0x00009039 - -#define KEPLER_INLINE_TO_MEMORY_A 0x0000a040 -#define KEPLER_INLINE_TO_MEMORY_B 0x0000a140 - -#define NV04_DISP /* cl0046.h */ 0x00000046 - -#define NV03_CHANNEL_DMA /* cl506b.h */ 0x0000006b -#define NV10_CHANNEL_DMA /* cl506b.h */ 0x0000006e -#define NV17_CHANNEL_DMA /* cl506b.h */ 0x0000176e -#define NV40_CHANNEL_DMA /* cl506b.h */ 0x0000406e -#define NV50_CHANNEL_DMA /* cl506e.h */ 0x0000506e -#define G82_CHANNEL_DMA /* cl826e.h */ 0x0000826e - -#define NV50_CHANNEL_GPFIFO /* cl506f.h */ 0x0000506f -#define G82_CHANNEL_GPFIFO /* cl826f.h */ 0x0000826f -#define FERMI_CHANNEL_GPFIFO /* cl906f.h */ 0x0000906f -#define KEPLER_CHANNEL_GPFIFO_A /* cla06f.h */ 0x0000a06f -#define MAXWELL_CHANNEL_GPFIFO_A /* cla06f.h */ 0x0000b06f - -#define NV50_DISP /* cl5070.h */ 0x00005070 -#define G82_DISP /* cl5070.h */ 0x00008270 -#define GT200_DISP /* cl5070.h */ 0x00008370 -#define GT214_DISP /* cl5070.h */ 0x00008570 -#define GT206_DISP /* cl5070.h */ 0x00008870 -#define GF110_DISP /* cl5070.h */ 0x00009070 -#define GK104_DISP /* cl5070.h */ 0x00009170 -#define GK110_DISP /* cl5070.h */ 0x00009270 -#define GM107_DISP /* cl5070.h */ 0x00009470 -#define GM204_DISP /* cl5070.h */ 0x00009570 - -#define NV31_MPEG 0x00003174 -#define G82_MPEG 0x00008274 - -#define NV74_VP2 0x00007476 - -#define NV50_DISP_CURSOR /* cl507a.h */ 0x0000507a -#define G82_DISP_CURSOR /* cl507a.h */ 0x0000827a -#define GT214_DISP_CURSOR /* cl507a.h */ 0x0000857a -#define GF110_DISP_CURSOR /* cl507a.h */ 0x0000907a -#define GK104_DISP_CURSOR /* cl507a.h */ 0x0000917a - -#define NV50_DISP_OVERLAY /* cl507b.h */ 0x0000507b -#define G82_DISP_OVERLAY /* cl507b.h */ 0x0000827b -#define GT214_DISP_OVERLAY /* cl507b.h */ 0x0000857b -#define GF110_DISP_OVERLAY /* cl507b.h */ 0x0000907b -#define GK104_DISP_OVERLAY /* cl507b.h */ 0x0000917b - -#define NV50_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000507c -#define G82_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000827c -#define GT200_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000837c -#define GT214_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000857c -#define GF110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000907c -#define GK104_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000917c -#define GK110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000927c - -#define NV50_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000507d -#define G82_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000827d -#define GT200_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000837d -#define GT214_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000857d -#define GT206_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000887d -#define GF110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000907d -#define GK104_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000917d -#define GK110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000927d -#define GM107_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000947d -#define GM204_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000957d - -#define NV50_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000507e -#define G82_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000827e -#define GT200_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000837e -#define GT214_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000857e -#define GF110_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ 0x0000907e -#define GK104_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ 0x0000917e - -#define FERMI_A /* cl9097.h */ 0x00009097 -#define FERMI_B /* cl9097.h */ 0x00009197 -#define FERMI_C /* cl9097.h */ 0x00009297 - -#define KEPLER_A /* cl9097.h */ 0x0000a097 -#define KEPLER_B /* cl9097.h */ 0x0000a197 -#define KEPLER_C /* cl9097.h */ 0x0000a297 - -#define MAXWELL_A /* cl9097.h */ 0x0000b097 -#define MAXWELL_B /* cl9097.h */ 0x0000b197 - -#define NV74_BSP 0x000074b0 - -#define GT212_MSVLD 0x000085b1 -#define IGT21A_MSVLD 0x000086b1 -#define G98_MSVLD 0x000088b1 -#define GF100_MSVLD 0x000090b1 -#define GK104_MSVLD 0x000095b1 - -#define GT212_MSPDEC 0x000085b2 -#define G98_MSPDEC 0x000088b2 -#define GF100_MSPDEC 0x000090b2 -#define GK104_MSPDEC 0x000095b2 - -#define GT212_MSPPP 0x000085b3 -#define G98_MSPPP 0x000088b3 -#define GF100_MSPPP 0x000090b3 - -#define G98_SEC 0x000088b4 - -#define GT212_DMA 0x000085b5 -#define FERMI_DMA 0x000090b5 -#define KEPLER_DMA_COPY_A 0x0000a0b5 -#define MAXWELL_DMA_COPY_A 0x0000b0b5 - -#define FERMI_DECOMPRESS 0x000090b8 - -#define FERMI_COMPUTE_A 0x000090c0 -#define FERMI_COMPUTE_B 0x000091c0 -#define KEPLER_COMPUTE_A 0x0000a0c0 -#define KEPLER_COMPUTE_B 0x0000a1c0 -#define MAXWELL_COMPUTE_A 0x0000b0c0 -#define MAXWELL_COMPUTE_B 0x0000b1c0 - -#define NV74_CIPHER 0x000074c1 -#endif diff --git a/prebuilts/x86_64/include/libdrm/nouveau/nvif/if0002.h b/prebuilts/x86_64/include/libdrm/nouveau/nvif/if0002.h deleted file mode 100644 index c04c91d..0000000 --- a/prebuilts/x86_64/include/libdrm/nouveau/nvif/if0002.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef __NVIF_IF0002_H__ -#define __NVIF_IF0002_H__ - -#define NVIF_PERFMON_V0_QUERY_DOMAIN 0x00 -#define NVIF_PERFMON_V0_QUERY_SIGNAL 0x01 -#define NVIF_PERFMON_V0_QUERY_SOURCE 0x02 - -struct nvif_perfmon_query_domain_v0 { - __u8 version; - __u8 id; - __u8 counter_nr; - __u8 iter; - __u16 signal_nr; - __u8 pad05[2]; - char name[64]; -}; - -struct nvif_perfmon_query_signal_v0 { - __u8 version; - __u8 domain; - __u16 iter; - __u8 signal; - __u8 source_nr; - __u8 pad05[2]; - char name[64]; -}; - -struct nvif_perfmon_query_source_v0 { - __u8 version; - __u8 domain; - __u8 signal; - __u8 iter; - __u8 pad04[4]; - __u32 source; - __u32 mask; - char name[64]; -}; -#endif diff --git a/prebuilts/x86_64/include/libdrm/nouveau/nvif/if0003.h b/prebuilts/x86_64/include/libdrm/nouveau/nvif/if0003.h deleted file mode 100644 index 0cd03ef..0000000 --- a/prebuilts/x86_64/include/libdrm/nouveau/nvif/if0003.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __NVIF_IF0003_H__ -#define __NVIF_IF0003_H__ - -struct nvif_perfdom_v0 { - __u8 version; - __u8 domain; - __u8 mode; - __u8 pad03[1]; - struct { - __u8 signal[4]; - __u64 source[4][8]; - __u16 logic_op; - } ctr[4]; -}; - -#define NVIF_PERFDOM_V0_INIT 0x00 -#define NVIF_PERFDOM_V0_SAMPLE 0x01 -#define NVIF_PERFDOM_V0_READ 0x02 - -struct nvif_perfdom_init { -}; - -struct nvif_perfdom_sample { -}; - -struct nvif_perfdom_read_v0 { - __u8 version; - __u8 pad01[7]; - __u32 ctr[4]; - __u32 clk; - __u8 pad04[4]; -}; -#endif diff --git a/prebuilts/x86_64/include/libdrm/nouveau/nvif/ioctl.h b/prebuilts/x86_64/include/libdrm/nouveau/nvif/ioctl.h deleted file mode 100644 index c5f5eb8..0000000 --- a/prebuilts/x86_64/include/libdrm/nouveau/nvif/ioctl.h +++ /dev/null @@ -1,132 +0,0 @@ -#ifndef __NVIF_IOCTL_H__ -#define __NVIF_IOCTL_H__ - -#define NVIF_VERSION_LATEST 0x0000000000000000ULL - -struct nvif_ioctl_v0 { - __u8 version; -#define NVIF_IOCTL_V0_NOP 0x00 -#define NVIF_IOCTL_V0_SCLASS 0x01 -#define NVIF_IOCTL_V0_NEW 0x02 -#define NVIF_IOCTL_V0_DEL 0x03 -#define NVIF_IOCTL_V0_MTHD 0x04 -#define NVIF_IOCTL_V0_RD 0x05 -#define NVIF_IOCTL_V0_WR 0x06 -#define NVIF_IOCTL_V0_MAP 0x07 -#define NVIF_IOCTL_V0_UNMAP 0x08 -#define NVIF_IOCTL_V0_NTFY_NEW 0x09 -#define NVIF_IOCTL_V0_NTFY_DEL 0x0a -#define NVIF_IOCTL_V0_NTFY_GET 0x0b -#define NVIF_IOCTL_V0_NTFY_PUT 0x0c - __u8 type; - __u8 pad02[4]; -#define NVIF_IOCTL_V0_OWNER_NVIF 0x00 -#define NVIF_IOCTL_V0_OWNER_ANY 0xff - __u8 owner; -#define NVIF_IOCTL_V0_ROUTE_NVIF 0x00 -#define NVIF_IOCTL_V0_ROUTE_HIDDEN 0xff - __u8 route; - __u64 token; - __u64 object; - __u8 data[]; /* ioctl data (below) */ -}; - -struct nvif_ioctl_nop_v0 { - __u64 version; -}; - -struct nvif_ioctl_sclass_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 count; - __u8 pad02[6]; - struct nvif_ioctl_sclass_oclass_v0 { - __s32 oclass; - __s16 minver; - __s16 maxver; - } oclass[]; -}; - -struct nvif_ioctl_new_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 pad01[6]; - __u8 route; - __u64 token; - __u64 object; - __u32 handle; - __s32 oclass; - __u8 data[]; /* class data (class.h) */ -}; - -struct nvif_ioctl_del { -}; - -struct nvif_ioctl_rd_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 size; - __u8 pad02[2]; - __u32 data; - __u64 addr; -}; - -struct nvif_ioctl_wr_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 size; - __u8 pad02[2]; - __u32 data; - __u64 addr; -}; - -struct nvif_ioctl_map_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 pad01[3]; - __u32 length; - __u64 handle; -}; - -struct nvif_ioctl_unmap { -}; - -struct nvif_ioctl_ntfy_new_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 event; - __u8 index; - __u8 pad03[5]; - __u8 data[]; /* event request data (event.h) */ -}; - -struct nvif_ioctl_ntfy_del_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 index; - __u8 pad02[6]; -}; - -struct nvif_ioctl_ntfy_get_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 index; - __u8 pad02[6]; -}; - -struct nvif_ioctl_ntfy_put_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 index; - __u8 pad02[6]; -}; - -struct nvif_ioctl_mthd_v0 { - /* nvif_ioctl ... */ - __u8 version; - __u8 method; - __u8 pad02[6]; - __u8 data[]; /* method data (class.h) */ -}; - -#endif diff --git a/prebuilts/x86_64/include/libdrm/nouveau/nvif/unpack.h b/prebuilts/x86_64/include/libdrm/nouveau/nvif/unpack.h deleted file mode 100644 index 751bcf4..0000000 --- a/prebuilts/x86_64/include/libdrm/nouveau/nvif/unpack.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __NVIF_UNPACK_H__ -#define __NVIF_UNPACK_H__ - -#define nvif_unvers(r,d,s,m) ({ \ - void **_data = (d); __u32 *_size = (s); int _ret = (r); \ - if (_ret == -ENOSYS && *_size == sizeof(m)) { \ - *_data = NULL; \ - *_size = _ret = 0; \ - } \ - _ret; \ -}) - -#define nvif_unpack(r,d,s,m,vl,vh,x) ({ \ - void **_data = (d); __u32 *_size = (s); \ - int _ret = (r), _vl = (vl), _vh = (vh); \ - if (_ret == -ENOSYS && *_size >= sizeof(m) && \ - (m).version >= _vl && (m).version <= _vh) { \ - *_data = (__u8 *)*_data + sizeof(m); \ - *_size = *_size - sizeof(m); \ - if (_ret = 0, !(x)) { \ - _ret = *_size ? -E2BIG : 0; \ - *_data = NULL; \ - *_size = 0; \ - } \ - } \ - _ret; \ -}) -#endif diff --git a/prebuilts/x86_64/include/libdrm/nouveau_drm.h b/prebuilts/x86_64/include/libdrm/nouveau_drm.h deleted file mode 100644 index 4f94148..0000000 --- a/prebuilts/x86_64/include/libdrm/nouveau_drm.h +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright 2005 Stephane Marchesin. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef __NOUVEAU_DRM_H__ -#define __NOUVEAU_DRM_H__ - -#define NOUVEAU_DRM_HEADER_PATCHLEVEL 16 - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -struct drm_nouveau_channel_alloc { - uint32_t fb_ctxdma_handle; - uint32_t tt_ctxdma_handle; - - int channel; - uint32_t pushbuf_domains; - - /* Notifier memory */ - uint32_t notifier_handle; - - /* DRM-enforced subchannel assignments */ - struct { - uint32_t handle; - uint32_t grclass; - } subchan[8]; - uint32_t nr_subchan; -}; - -struct drm_nouveau_channel_free { - int channel; -}; - -struct drm_nouveau_grobj_alloc { - int channel; - uint32_t handle; - int class; -}; - -struct drm_nouveau_notifierobj_alloc { - uint32_t channel; - uint32_t handle; - uint32_t size; - uint32_t offset; -}; - -struct drm_nouveau_gpuobj_free { - int channel; - uint32_t handle; -}; - -#define NOUVEAU_GETPARAM_PCI_VENDOR 3 -#define NOUVEAU_GETPARAM_PCI_DEVICE 4 -#define NOUVEAU_GETPARAM_BUS_TYPE 5 -#define NOUVEAU_GETPARAM_FB_SIZE 8 -#define NOUVEAU_GETPARAM_AGP_SIZE 9 -#define NOUVEAU_GETPARAM_CHIPSET_ID 11 -#define NOUVEAU_GETPARAM_VM_VRAM_BASE 12 -#define NOUVEAU_GETPARAM_GRAPH_UNITS 13 -#define NOUVEAU_GETPARAM_PTIMER_TIME 14 -#define NOUVEAU_GETPARAM_HAS_BO_USAGE 15 -#define NOUVEAU_GETPARAM_HAS_PAGEFLIP 16 -struct drm_nouveau_getparam { - uint64_t param; - uint64_t value; -}; - -struct drm_nouveau_setparam { - uint64_t param; - uint64_t value; -}; - -#define NOUVEAU_GEM_DOMAIN_CPU (1 << 0) -#define NOUVEAU_GEM_DOMAIN_VRAM (1 << 1) -#define NOUVEAU_GEM_DOMAIN_GART (1 << 2) -#define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3) -#define NOUVEAU_GEM_DOMAIN_COHERENT (1 << 4) - -#define NOUVEAU_GEM_TILE_COMP 0x00030000 /* nv50-only */ -#define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00 -#define NOUVEAU_GEM_TILE_16BPP 0x00000001 -#define NOUVEAU_GEM_TILE_32BPP 0x00000002 -#define NOUVEAU_GEM_TILE_ZETA 0x00000004 -#define NOUVEAU_GEM_TILE_NONCONTIG 0x00000008 - -struct drm_nouveau_gem_info { - __u32 handle; - __u32 domain; - __u64 size; - __u64 offset; - __u64 map_handle; - __u32 tile_mode; - __u32 tile_flags; -}; - -struct drm_nouveau_gem_new { - struct drm_nouveau_gem_info info; - __u32 channel_hint; - __u32 align; -}; - -#define NOUVEAU_GEM_MAX_BUFFERS 1024 -struct drm_nouveau_gem_pushbuf_bo_presumed { - __u32 valid; - __u32 domain; - __u64 offset; -}; - -struct drm_nouveau_gem_pushbuf_bo { - __u64 user_priv; - __u32 handle; - __u32 read_domains; - __u32 write_domains; - __u32 valid_domains; - struct drm_nouveau_gem_pushbuf_bo_presumed presumed; -}; - -#define NOUVEAU_GEM_RELOC_LOW (1 << 0) -#define NOUVEAU_GEM_RELOC_HIGH (1 << 1) -#define NOUVEAU_GEM_RELOC_OR (1 << 2) -#define NOUVEAU_GEM_MAX_RELOCS 1024 -struct drm_nouveau_gem_pushbuf_reloc { - __u32 reloc_bo_index; - __u32 reloc_bo_offset; - __u32 bo_index; - __u32 flags; - __u32 data; - __u32 vor; - __u32 tor; -}; - -#define NOUVEAU_GEM_MAX_PUSH 512 -struct drm_nouveau_gem_pushbuf_push { - __u32 bo_index; - __u32 pad; - __u64 offset; - __u64 length; -}; - -struct drm_nouveau_gem_pushbuf { - __u32 channel; - __u32 nr_buffers; - __u64 buffers; - __u32 nr_relocs; - __u32 nr_push; - __u64 relocs; - __u64 push; - __u32 suffix0; - __u32 suffix1; -#define NOUVEAU_GEM_PUSHBUF_SYNC (1ULL << 0) - __u64 vram_available; - __u64 gart_available; -}; - -#define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001 -#define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004 -struct drm_nouveau_gem_cpu_prep { - __u32 handle; - __u32 flags; -}; - -struct drm_nouveau_gem_cpu_fini { - __u32 handle; -}; - -#define DRM_NOUVEAU_GETPARAM 0x00 /* deprecated */ -#define DRM_NOUVEAU_SETPARAM 0x01 /* deprecated */ -#define DRM_NOUVEAU_CHANNEL_ALLOC 0x02 /* deprecated */ -#define DRM_NOUVEAU_CHANNEL_FREE 0x03 /* deprecated */ -#define DRM_NOUVEAU_GROBJ_ALLOC 0x04 /* deprecated */ -#define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC 0x05 /* deprecated */ -#define DRM_NOUVEAU_GPUOBJ_FREE 0x06 /* deprecated */ -#define DRM_NOUVEAU_NVIF 0x07 -#define DRM_NOUVEAU_SVM_INIT 0x08 -#define DRM_NOUVEAU_SVM_BIND 0x09 -#define DRM_NOUVEAU_GEM_NEW 0x40 -#define DRM_NOUVEAU_GEM_PUSHBUF 0x41 -#define DRM_NOUVEAU_GEM_CPU_PREP 0x42 -#define DRM_NOUVEAU_GEM_CPU_FINI 0x43 -#define DRM_NOUVEAU_GEM_INFO 0x44 - -struct drm_nouveau_svm_init { - __u64 unmanaged_addr; - __u64 unmanaged_size; -}; - -struct drm_nouveau_svm_bind { - __u64 header; - __u64 va_start; - __u64 va_end; - __u64 npages; - __u64 stride; - __u64 result; - __u64 reserved0; - __u64 reserved1; -}; - -#define NOUVEAU_SVM_BIND_COMMAND_SHIFT 0 -#define NOUVEAU_SVM_BIND_COMMAND_BITS 8 -#define NOUVEAU_SVM_BIND_COMMAND_MASK ((1 << 8) - 1) -#define NOUVEAU_SVM_BIND_PRIORITY_SHIFT 8 -#define NOUVEAU_SVM_BIND_PRIORITY_BITS 8 -#define NOUVEAU_SVM_BIND_PRIORITY_MASK ((1 << 8) - 1) -#define NOUVEAU_SVM_BIND_TARGET_SHIFT 16 -#define NOUVEAU_SVM_BIND_TARGET_BITS 32 -#define NOUVEAU_SVM_BIND_TARGET_MASK 0xffffffff - -/* - * Below is use to validate ioctl argument, userspace can also use it to make - * sure that no bit are set beyond known fields for a given kernel version. - */ -#define NOUVEAU_SVM_BIND_VALID_BITS 48 -#define NOUVEAU_SVM_BIND_VALID_MASK ((1ULL << NOUVEAU_SVM_BIND_VALID_BITS) - 1) - - -/* - * NOUVEAU_BIND_COMMAND__MIGRATE: synchronous migrate to target memory. - * result: number of page successfuly migrate to the target memory. - */ -#define NOUVEAU_SVM_BIND_COMMAND__MIGRATE 0 - -/* - * NOUVEAU_SVM_BIND_HEADER_TARGET__GPU_VRAM: target the GPU VRAM memory. - */ -#define NOUVEAU_SVM_BIND_TARGET__GPU_VRAM (1UL << 31) - - -#if defined(__cplusplus) -} -#endif - -#endif /* __NOUVEAU_DRM_H__ */ diff --git a/prebuilts/x86_64/include/libdrm/qxl_drm.h b/prebuilts/x86_64/include/libdrm/qxl_drm.h deleted file mode 100644 index 880999d..0000000 --- a/prebuilts/x86_64/include/libdrm/qxl_drm.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright 2013 Red Hat - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef QXL_DRM_H -#define QXL_DRM_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints. - * - * Do not use pointers, use __u64 instead for 32 bit / 64 bit user/kernel - * compatibility Keep fields aligned to their size - */ - -#define QXL_GEM_DOMAIN_CPU 0 -#define QXL_GEM_DOMAIN_VRAM 1 -#define QXL_GEM_DOMAIN_SURFACE 2 - -#define DRM_QXL_ALLOC 0x00 -#define DRM_QXL_MAP 0x01 -#define DRM_QXL_EXECBUFFER 0x02 -#define DRM_QXL_UPDATE_AREA 0x03 -#define DRM_QXL_GETPARAM 0x04 -#define DRM_QXL_CLIENTCAP 0x05 - -#define DRM_QXL_ALLOC_SURF 0x06 - -struct drm_qxl_alloc { - __u32 size; - __u32 handle; /* 0 is an invalid handle */ -}; - -struct drm_qxl_map { - __u64 offset; /* use for mmap system call */ - __u32 handle; - __u32 pad; -}; - -/* - * dest is the bo we are writing the relocation into - * src is bo we are relocating. - * *(dest_handle.base_addr + dest_offset) = physical_address(src_handle.addr + - * src_offset) - */ -#define QXL_RELOC_TYPE_BO 1 -#define QXL_RELOC_TYPE_SURF 2 - -struct drm_qxl_reloc { - __u64 src_offset; /* offset into src_handle or src buffer */ - __u64 dst_offset; /* offset in dest handle */ - __u32 src_handle; /* dest handle to compute address from */ - __u32 dst_handle; /* 0 if to command buffer */ - __u32 reloc_type; - __u32 pad; -}; - -struct drm_qxl_command { - __u64 command; /* void* */ - __u64 relocs; /* struct drm_qxl_reloc* */ - __u32 type; - __u32 command_size; - __u32 relocs_num; - __u32 pad; -}; - -struct drm_qxl_execbuffer { - __u32 flags; /* for future use */ - __u32 commands_num; - __u64 commands; /* struct drm_qxl_command* */ -}; - -struct drm_qxl_update_area { - __u32 handle; - __u32 top; - __u32 left; - __u32 bottom; - __u32 right; - __u32 pad; -}; - -#define QXL_PARAM_NUM_SURFACES 1 /* rom->n_surfaces */ -#define QXL_PARAM_MAX_RELOCS 2 -struct drm_qxl_getparam { - __u64 param; - __u64 value; -}; - -/* these are one bit values */ -struct drm_qxl_clientcap { - __u32 index; - __u32 pad; -}; - -struct drm_qxl_alloc_surf { - __u32 format; - __u32 width; - __u32 height; - __s32 stride; - __u32 handle; - __u32 pad; -}; - -#define DRM_IOCTL_QXL_ALLOC \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_ALLOC, struct drm_qxl_alloc) - -#define DRM_IOCTL_QXL_MAP \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_MAP, struct drm_qxl_map) - -#define DRM_IOCTL_QXL_EXECBUFFER \ - DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_EXECBUFFER,\ - struct drm_qxl_execbuffer) - -#define DRM_IOCTL_QXL_UPDATE_AREA \ - DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_UPDATE_AREA,\ - struct drm_qxl_update_area) - -#define DRM_IOCTL_QXL_GETPARAM \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_GETPARAM,\ - struct drm_qxl_getparam) - -#define DRM_IOCTL_QXL_CLIENTCAP \ - DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_CLIENTCAP,\ - struct drm_qxl_clientcap) - -#define DRM_IOCTL_QXL_ALLOC_SURF \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_ALLOC_SURF,\ - struct drm_qxl_alloc_surf) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/libdrm/r128_drm.h b/prebuilts/x86_64/include/libdrm/r128_drm.h deleted file mode 100644 index bf431a0..0000000 --- a/prebuilts/x86_64/include/libdrm/r128_drm.h +++ /dev/null @@ -1,336 +0,0 @@ -/* r128_drm.h -- Public header for the r128 driver -*- linux-c -*- - * Created: Wed Apr 5 19:24:19 2000 by kevin@precisioninsight.com - */ -/* - * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Gareth Hughes - * Kevin E. Martin - */ - -#ifndef __R128_DRM_H__ -#define __R128_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the X server file (r128_sarea.h) - */ -#ifndef __R128_SAREA_DEFINES__ -#define __R128_SAREA_DEFINES__ - -/* What needs to be changed for the current vertex buffer? - */ -#define R128_UPLOAD_CONTEXT 0x001 -#define R128_UPLOAD_SETUP 0x002 -#define R128_UPLOAD_TEX0 0x004 -#define R128_UPLOAD_TEX1 0x008 -#define R128_UPLOAD_TEX0IMAGES 0x010 -#define R128_UPLOAD_TEX1IMAGES 0x020 -#define R128_UPLOAD_CORE 0x040 -#define R128_UPLOAD_MASKS 0x080 -#define R128_UPLOAD_WINDOW 0x100 -#define R128_UPLOAD_CLIPRECTS 0x200 /* handled client-side */ -#define R128_REQUIRE_QUIESCENCE 0x400 -#define R128_UPLOAD_ALL 0x7ff - -#define R128_FRONT 0x1 -#define R128_BACK 0x2 -#define R128_DEPTH 0x4 - -/* Primitive types - */ -#define R128_POINTS 0x1 -#define R128_LINES 0x2 -#define R128_LINE_STRIP 0x3 -#define R128_TRIANGLES 0x4 -#define R128_TRIANGLE_FAN 0x5 -#define R128_TRIANGLE_STRIP 0x6 - -/* Vertex/indirect buffer size - */ -#define R128_BUFFER_SIZE 16384 - -/* Byte offsets for indirect buffer data - */ -#define R128_INDEX_PRIM_OFFSET 20 -#define R128_HOSTDATA_BLIT_OFFSET 32 - -/* Keep these small for testing. - */ -#define R128_NR_SAREA_CLIPRECTS 12 - -/* There are 2 heaps (local/AGP). Each region within a heap is a - * minimum of 64k, and there are at most 64 of them per heap. - */ -#define R128_LOCAL_TEX_HEAP 0 -#define R128_AGP_TEX_HEAP 1 -#define R128_NR_TEX_HEAPS 2 -#define R128_NR_TEX_REGIONS 64 -#define R128_LOG_TEX_GRANULARITY 16 - -#define R128_NR_CONTEXT_REGS 12 - -#define R128_MAX_TEXTURE_LEVELS 11 -#define R128_MAX_TEXTURE_UNITS 2 - -#endif /* __R128_SAREA_DEFINES__ */ - -typedef struct { - /* Context state - can be written in one large chunk */ - unsigned int dst_pitch_offset_c; - unsigned int dp_gui_master_cntl_c; - unsigned int sc_top_left_c; - unsigned int sc_bottom_right_c; - unsigned int z_offset_c; - unsigned int z_pitch_c; - unsigned int z_sten_cntl_c; - unsigned int tex_cntl_c; - unsigned int misc_3d_state_cntl_reg; - unsigned int texture_clr_cmp_clr_c; - unsigned int texture_clr_cmp_msk_c; - unsigned int fog_color_c; - - /* Texture state */ - unsigned int tex_size_pitch_c; - unsigned int constant_color_c; - - /* Setup state */ - unsigned int pm4_vc_fpu_setup; - unsigned int setup_cntl; - - /* Mask state */ - unsigned int dp_write_mask; - unsigned int sten_ref_mask_c; - unsigned int plane_3d_mask_c; - - /* Window state */ - unsigned int window_xy_offset; - - /* Core state */ - unsigned int scale_3d_cntl; -} drm_r128_context_regs_t; - -/* Setup registers for each texture unit - */ -typedef struct { - unsigned int tex_cntl; - unsigned int tex_combine_cntl; - unsigned int tex_size_pitch; - unsigned int tex_offset[R128_MAX_TEXTURE_LEVELS]; - unsigned int tex_border_color; -} drm_r128_texture_regs_t; - -typedef struct drm_r128_sarea { - /* The channel for communication of state information to the kernel - * on firing a vertex buffer. - */ - drm_r128_context_regs_t context_state; - drm_r128_texture_regs_t tex_state[R128_MAX_TEXTURE_UNITS]; - unsigned int dirty; - unsigned int vertsize; - unsigned int vc_format; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[R128_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Counters for client-side throttling of rendering clients. - */ - unsigned int last_frame; - unsigned int last_dispatch; - - struct drm_tex_region tex_list[R128_NR_TEX_HEAPS][R128_NR_TEX_REGIONS + 1]; - unsigned int tex_age[R128_NR_TEX_HEAPS]; - int ctx_owner; - int pfAllowPageFlip; /* number of 3d windows (0,1,2 or more) */ - int pfCurrentPage; /* which buffer is being displayed? */ -} drm_r128_sarea_t; - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (xf86drmR128.h) - */ - -/* Rage 128 specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ -#define DRM_R128_INIT 0x00 -#define DRM_R128_CCE_START 0x01 -#define DRM_R128_CCE_STOP 0x02 -#define DRM_R128_CCE_RESET 0x03 -#define DRM_R128_CCE_IDLE 0x04 -/* 0x05 not used */ -#define DRM_R128_RESET 0x06 -#define DRM_R128_SWAP 0x07 -#define DRM_R128_CLEAR 0x08 -#define DRM_R128_VERTEX 0x09 -#define DRM_R128_INDICES 0x0a -#define DRM_R128_BLIT 0x0b -#define DRM_R128_DEPTH 0x0c -#define DRM_R128_STIPPLE 0x0d -/* 0x0e not used */ -#define DRM_R128_INDIRECT 0x0f -#define DRM_R128_FULLSCREEN 0x10 -#define DRM_R128_CLEAR2 0x11 -#define DRM_R128_GETPARAM 0x12 -#define DRM_R128_FLIP 0x13 - -#define DRM_IOCTL_R128_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INIT, drm_r128_init_t) -#define DRM_IOCTL_R128_CCE_START DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_START) -#define DRM_IOCTL_R128_CCE_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CCE_STOP, drm_r128_cce_stop_t) -#define DRM_IOCTL_R128_CCE_RESET DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_RESET) -#define DRM_IOCTL_R128_CCE_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_IDLE) -/* 0x05 not used */ -#define DRM_IOCTL_R128_RESET DRM_IO( DRM_COMMAND_BASE + DRM_R128_RESET) -#define DRM_IOCTL_R128_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_R128_SWAP) -#define DRM_IOCTL_R128_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR, drm_r128_clear_t) -#define DRM_IOCTL_R128_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_R128_VERTEX, drm_r128_vertex_t) -#define DRM_IOCTL_R128_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INDICES, drm_r128_indices_t) -#define DRM_IOCTL_R128_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_R128_BLIT, drm_r128_blit_t) -#define DRM_IOCTL_R128_DEPTH DRM_IOW( DRM_COMMAND_BASE + DRM_R128_DEPTH, drm_r128_depth_t) -#define DRM_IOCTL_R128_STIPPLE DRM_IOW( DRM_COMMAND_BASE + DRM_R128_STIPPLE, drm_r128_stipple_t) -/* 0x0e not used */ -#define DRM_IOCTL_R128_INDIRECT DRM_IOWR(DRM_COMMAND_BASE + DRM_R128_INDIRECT, drm_r128_indirect_t) -#define DRM_IOCTL_R128_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_R128_FULLSCREEN, drm_r128_fullscreen_t) -#define DRM_IOCTL_R128_CLEAR2 DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR2, drm_r128_clear2_t) -#define DRM_IOCTL_R128_GETPARAM DRM_IOWR( DRM_COMMAND_BASE + DRM_R128_GETPARAM, drm_r128_getparam_t) -#define DRM_IOCTL_R128_FLIP DRM_IO( DRM_COMMAND_BASE + DRM_R128_FLIP) - -typedef struct drm_r128_init { - enum { - R128_INIT_CCE = 0x01, - R128_CLEANUP_CCE = 0x02 - } func; - unsigned long sarea_priv_offset; - int is_pci; - int cce_mode; - int cce_secure; - int ring_size; - int usec_timeout; - - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - unsigned int span_offset; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long ring_offset; - unsigned long ring_rptr_offset; - unsigned long buffers_offset; - unsigned long agp_textures_offset; -} drm_r128_init_t; - -typedef struct drm_r128_cce_stop { - int flush; - int idle; -} drm_r128_cce_stop_t; - -typedef struct drm_r128_clear { - unsigned int flags; - unsigned int clear_color; - unsigned int clear_depth; - unsigned int color_mask; - unsigned int depth_mask; -} drm_r128_clear_t; - -typedef struct drm_r128_vertex { - int prim; - int idx; /* Index of vertex buffer */ - int count; /* Number of vertices in buffer */ - int discard; /* Client finished with buffer? */ -} drm_r128_vertex_t; - -typedef struct drm_r128_indices { - int prim; - int idx; - int start; - int end; - int discard; /* Client finished with buffer? */ -} drm_r128_indices_t; - -typedef struct drm_r128_blit { - int idx; - int pitch; - int offset; - int format; - unsigned short x, y; - unsigned short width, height; -} drm_r128_blit_t; - -typedef struct drm_r128_depth { - enum { - R128_WRITE_SPAN = 0x01, - R128_WRITE_PIXELS = 0x02, - R128_READ_SPAN = 0x03, - R128_READ_PIXELS = 0x04 - } func; - int n; - int *x; - int *y; - unsigned int *buffer; - unsigned char *mask; -} drm_r128_depth_t; - -typedef struct drm_r128_stipple { - unsigned int *mask; -} drm_r128_stipple_t; - -typedef struct drm_r128_indirect { - int idx; - int start; - int end; - int discard; -} drm_r128_indirect_t; - -typedef struct drm_r128_fullscreen { - enum { - R128_INIT_FULLSCREEN = 0x01, - R128_CLEANUP_FULLSCREEN = 0x02 - } func; -} drm_r128_fullscreen_t; - -/* 2.3: An ioctl to get parameters that aren't available to the 3d - * client any other way. - */ -#define R128_PARAM_IRQ_NR 1 - -typedef struct drm_r128_getparam { - int param; - void *value; -} drm_r128_getparam_t; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/libdrm/r600_pci_ids.h b/prebuilts/x86_64/include/libdrm/r600_pci_ids.h deleted file mode 100644 index a3b2eac..0000000 --- a/prebuilts/x86_64/include/libdrm/r600_pci_ids.h +++ /dev/null @@ -1,487 +0,0 @@ -CHIPSET(0x9400, R600_9400, R600) -CHIPSET(0x9401, R600_9401, R600) -CHIPSET(0x9402, R600_9402, R600) -CHIPSET(0x9403, R600_9403, R600) -CHIPSET(0x9405, R600_9405, R600) -CHIPSET(0x940A, R600_940A, R600) -CHIPSET(0x940B, R600_940B, R600) -CHIPSET(0x940F, R600_940F, R600) - -CHIPSET(0x94C0, RV610_94C0, RV610) -CHIPSET(0x94C1, RV610_94C1, RV610) -CHIPSET(0x94C3, RV610_94C3, RV610) -CHIPSET(0x94C4, RV610_94C4, RV610) -CHIPSET(0x94C5, RV610_94C5, RV610) -CHIPSET(0x94C6, RV610_94C6, RV610) -CHIPSET(0x94C7, RV610_94C7, RV610) -CHIPSET(0x94C8, RV610_94C8, RV610) -CHIPSET(0x94C9, RV610_94C9, RV610) -CHIPSET(0x94CB, RV610_94CB, RV610) -CHIPSET(0x94CC, RV610_94CC, RV610) -CHIPSET(0x94CD, RV610_94CD, RV610) - -CHIPSET(0x9580, RV630_9580, RV630) -CHIPSET(0x9581, RV630_9581, RV630) -CHIPSET(0x9583, RV630_9583, RV630) -CHIPSET(0x9586, RV630_9586, RV630) -CHIPSET(0x9587, RV630_9587, RV630) -CHIPSET(0x9588, RV630_9588, RV630) -CHIPSET(0x9589, RV630_9589, RV630) -CHIPSET(0x958A, RV630_958A, RV630) -CHIPSET(0x958B, RV630_958B, RV630) -CHIPSET(0x958C, RV630_958C, RV630) -CHIPSET(0x958D, RV630_958D, RV630) -CHIPSET(0x958E, RV630_958E, RV630) -CHIPSET(0x958F, RV630_958F, RV630) - -CHIPSET(0x9500, RV670_9500, RV670) -CHIPSET(0x9501, RV670_9501, RV670) -CHIPSET(0x9504, RV670_9504, RV670) -CHIPSET(0x9505, RV670_9505, RV670) -CHIPSET(0x9506, RV670_9506, RV670) -CHIPSET(0x9507, RV670_9507, RV670) -CHIPSET(0x9508, RV670_9508, RV670) -CHIPSET(0x9509, RV670_9509, RV670) -CHIPSET(0x950F, RV670_950F, RV670) -CHIPSET(0x9511, RV670_9511, RV670) -CHIPSET(0x9515, RV670_9515, RV670) -CHIPSET(0x9517, RV670_9517, RV670) -CHIPSET(0x9519, RV670_9519, RV670) - -CHIPSET(0x95C0, RV620_95C0, RV620) -CHIPSET(0x95C2, RV620_95C2, RV620) -CHIPSET(0x95C4, RV620_95C4, RV620) -CHIPSET(0x95C5, RV620_95C5, RV620) -CHIPSET(0x95C6, RV620_95C6, RV620) -CHIPSET(0x95C7, RV620_95C7, RV620) -CHIPSET(0x95C9, RV620_95C9, RV620) -CHIPSET(0x95CC, RV620_95CC, RV620) -CHIPSET(0x95CD, RV620_95CD, RV620) -CHIPSET(0x95CE, RV620_95CE, RV620) -CHIPSET(0x95CF, RV620_95CF, RV620) - -CHIPSET(0x9590, RV635_9590, RV635) -CHIPSET(0x9591, RV635_9591, RV635) -CHIPSET(0x9593, RV635_9593, RV635) -CHIPSET(0x9595, RV635_9595, RV635) -CHIPSET(0x9596, RV635_9596, RV635) -CHIPSET(0x9597, RV635_9597, RV635) -CHIPSET(0x9598, RV635_9598, RV635) -CHIPSET(0x9599, RV635_9599, RV635) -CHIPSET(0x959B, RV635_959B, RV635) - -CHIPSET(0x9610, RS780_9610, RS780) -CHIPSET(0x9611, RS780_9611, RS780) -CHIPSET(0x9612, RS780_9612, RS780) -CHIPSET(0x9613, RS780_9613, RS780) -CHIPSET(0x9614, RS780_9614, RS780) -CHIPSET(0x9615, RS780_9615, RS780) -CHIPSET(0x9616, RS780_9616, RS780) - -CHIPSET(0x9710, RS880_9710, RS880) -CHIPSET(0x9711, RS880_9711, RS880) -CHIPSET(0x9712, RS880_9712, RS880) -CHIPSET(0x9713, RS880_9713, RS880) -CHIPSET(0x9714, RS880_9714, RS880) -CHIPSET(0x9715, RS880_9715, RS880) - -CHIPSET(0x9440, RV770_9440, RV770) -CHIPSET(0x9441, RV770_9441, RV770) -CHIPSET(0x9442, RV770_9442, RV770) -CHIPSET(0x9443, RV770_9443, RV770) -CHIPSET(0x9444, RV770_9444, RV770) -CHIPSET(0x9446, RV770_9446, RV770) -CHIPSET(0x944A, RV770_944A, RV770) -CHIPSET(0x944B, RV770_944B, RV770) -CHIPSET(0x944C, RV770_944C, RV770) -CHIPSET(0x944E, RV770_944E, RV770) -CHIPSET(0x9450, RV770_9450, RV770) -CHIPSET(0x9452, RV770_9452, RV770) -CHIPSET(0x9456, RV770_9456, RV770) -CHIPSET(0x945A, RV770_945A, RV770) -CHIPSET(0x945B, RV770_945B, RV770) -CHIPSET(0x945E, RV770_945E, RV770) -CHIPSET(0x9460, RV790_9460, RV770) -CHIPSET(0x9462, RV790_9462, RV770) -CHIPSET(0x946A, RV770_946A, RV770) -CHIPSET(0x946B, RV770_946B, RV770) -CHIPSET(0x947A, RV770_947A, RV770) -CHIPSET(0x947B, RV770_947B, RV770) - -CHIPSET(0x9480, RV730_9480, RV730) -CHIPSET(0x9487, RV730_9487, RV730) -CHIPSET(0x9488, RV730_9488, RV730) -CHIPSET(0x9489, RV730_9489, RV730) -CHIPSET(0x948A, RV730_948A, RV730) -CHIPSET(0x948F, RV730_948F, RV730) -CHIPSET(0x9490, RV730_9490, RV730) -CHIPSET(0x9491, RV730_9491, RV730) -CHIPSET(0x9495, RV730_9495, RV730) -CHIPSET(0x9498, RV730_9498, RV730) -CHIPSET(0x949C, RV730_949C, RV730) -CHIPSET(0x949E, RV730_949E, RV730) -CHIPSET(0x949F, RV730_949F, RV730) - -CHIPSET(0x9540, RV710_9540, RV710) -CHIPSET(0x9541, RV710_9541, RV710) -CHIPSET(0x9542, RV710_9542, RV710) -CHIPSET(0x954E, RV710_954E, RV710) -CHIPSET(0x954F, RV710_954F, RV710) -CHIPSET(0x9552, RV710_9552, RV710) -CHIPSET(0x9553, RV710_9553, RV710) -CHIPSET(0x9555, RV710_9555, RV710) -CHIPSET(0x9557, RV710_9557, RV710) -CHIPSET(0x955F, RV710_955F, RV710) - -CHIPSET(0x94A0, RV740_94A0, RV740) -CHIPSET(0x94A1, RV740_94A1, RV740) -CHIPSET(0x94A3, RV740_94A3, RV740) -CHIPSET(0x94B1, RV740_94B1, RV740) -CHIPSET(0x94B3, RV740_94B3, RV740) -CHIPSET(0x94B4, RV740_94B4, RV740) -CHIPSET(0x94B5, RV740_94B5, RV740) -CHIPSET(0x94B9, RV740_94B9, RV740) - -CHIPSET(0x68E0, CEDAR_68E0, CEDAR) -CHIPSET(0x68E1, CEDAR_68E1, CEDAR) -CHIPSET(0x68E4, CEDAR_68E4, CEDAR) -CHIPSET(0x68E5, CEDAR_68E5, CEDAR) -CHIPSET(0x68E8, CEDAR_68E8, CEDAR) -CHIPSET(0x68E9, CEDAR_68E9, CEDAR) -CHIPSET(0x68F1, CEDAR_68F1, CEDAR) -CHIPSET(0x68F2, CEDAR_68F2, CEDAR) -CHIPSET(0x68F8, CEDAR_68F8, CEDAR) -CHIPSET(0x68F9, CEDAR_68F9, CEDAR) -CHIPSET(0x68FA, CEDAR_68FA, CEDAR) -CHIPSET(0x68FE, CEDAR_68FE, CEDAR) - -CHIPSET(0x68C0, REDWOOD_68C0, REDWOOD) -CHIPSET(0x68C1, REDWOOD_68C1, REDWOOD) -CHIPSET(0x68C7, REDWOOD_68C7, REDWOOD) -CHIPSET(0x68C8, REDWOOD_68C8, REDWOOD) -CHIPSET(0x68C9, REDWOOD_68C9, REDWOOD) -CHIPSET(0x68D8, REDWOOD_68D8, REDWOOD) -CHIPSET(0x68D9, REDWOOD_68D9, REDWOOD) -CHIPSET(0x68DA, REDWOOD_68DA, REDWOOD) -CHIPSET(0x68DE, REDWOOD_68DE, REDWOOD) - -CHIPSET(0x68A0, JUNIPER_68A0, JUNIPER) -CHIPSET(0x68A1, JUNIPER_68A1, JUNIPER) -CHIPSET(0x68A8, JUNIPER_68A8, JUNIPER) -CHIPSET(0x68A9, JUNIPER_68A9, JUNIPER) -CHIPSET(0x68B0, JUNIPER_68B0, JUNIPER) -CHIPSET(0x68B8, JUNIPER_68B8, JUNIPER) -CHIPSET(0x68B9, JUNIPER_68B9, JUNIPER) -CHIPSET(0x68BA, JUNIPER_68BA, JUNIPER) -CHIPSET(0x68BE, JUNIPER_68BE, JUNIPER) -CHIPSET(0x68BF, JUNIPER_68BF, JUNIPER) - -CHIPSET(0x6880, CYPRESS_6880, CYPRESS) -CHIPSET(0x6888, CYPRESS_6888, CYPRESS) -CHIPSET(0x6889, CYPRESS_6889, CYPRESS) -CHIPSET(0x688A, CYPRESS_688A, CYPRESS) -CHIPSET(0x688C, CYPRESS_688C, CYPRESS) -CHIPSET(0x688D, CYPRESS_688D, CYPRESS) -CHIPSET(0x6898, CYPRESS_6898, CYPRESS) -CHIPSET(0x6899, CYPRESS_6899, CYPRESS) -CHIPSET(0x689B, CYPRESS_689B, CYPRESS) -CHIPSET(0x689E, CYPRESS_689E, CYPRESS) - -CHIPSET(0x689C, HEMLOCK_689C, HEMLOCK) -CHIPSET(0x689D, HEMLOCK_689D, HEMLOCK) - -CHIPSET(0x9802, PALM_9802, PALM) -CHIPSET(0x9803, PALM_9803, PALM) -CHIPSET(0x9804, PALM_9804, PALM) -CHIPSET(0x9805, PALM_9805, PALM) -CHIPSET(0x9806, PALM_9806, PALM) -CHIPSET(0x9807, PALM_9807, PALM) -CHIPSET(0x9808, PALM_9808, PALM) -CHIPSET(0x9809, PALM_9809, PALM) -CHIPSET(0x980A, PALM_980A, PALM) - -CHIPSET(0x9640, SUMO_9640, SUMO) -CHIPSET(0x9641, SUMO_9641, SUMO) -CHIPSET(0x9642, SUMO2_9642, SUMO2) -CHIPSET(0x9643, SUMO2_9643, SUMO2) -CHIPSET(0x9644, SUMO2_9644, SUMO2) -CHIPSET(0x9645, SUMO2_9645, SUMO2) -CHIPSET(0x9647, SUMO_9647, SUMO) -CHIPSET(0x9648, SUMO_9648, SUMO) -CHIPSET(0x9649, SUMO2_9649, SUMO2) -CHIPSET(0x964a, SUMO_964A, SUMO) -CHIPSET(0x964b, SUMO_964B, SUMO) -CHIPSET(0x964c, SUMO_964C, SUMO) -CHIPSET(0x964e, SUMO_964E, SUMO) -CHIPSET(0x964f, SUMO_964F, SUMO) - -CHIPSET(0x6700, CAYMAN_6700, CAYMAN) -CHIPSET(0x6701, CAYMAN_6701, CAYMAN) -CHIPSET(0x6702, CAYMAN_6702, CAYMAN) -CHIPSET(0x6703, CAYMAN_6703, CAYMAN) -CHIPSET(0x6704, CAYMAN_6704, CAYMAN) -CHIPSET(0x6705, CAYMAN_6705, CAYMAN) -CHIPSET(0x6706, CAYMAN_6706, CAYMAN) -CHIPSET(0x6707, CAYMAN_6707, CAYMAN) -CHIPSET(0x6708, CAYMAN_6708, CAYMAN) -CHIPSET(0x6709, CAYMAN_6709, CAYMAN) -CHIPSET(0x6718, CAYMAN_6718, CAYMAN) -CHIPSET(0x6719, CAYMAN_6719, CAYMAN) -CHIPSET(0x671C, CAYMAN_671C, CAYMAN) -CHIPSET(0x671D, CAYMAN_671D, CAYMAN) -CHIPSET(0x671F, CAYMAN_671F, CAYMAN) - -CHIPSET(0x6720, BARTS_6720, BARTS) -CHIPSET(0x6721, BARTS_6721, BARTS) -CHIPSET(0x6722, BARTS_6722, BARTS) -CHIPSET(0x6723, BARTS_6723, BARTS) -CHIPSET(0x6724, BARTS_6724, BARTS) -CHIPSET(0x6725, BARTS_6725, BARTS) -CHIPSET(0x6726, BARTS_6726, BARTS) -CHIPSET(0x6727, BARTS_6727, BARTS) -CHIPSET(0x6728, BARTS_6728, BARTS) -CHIPSET(0x6729, BARTS_6729, BARTS) -CHIPSET(0x6738, BARTS_6738, BARTS) -CHIPSET(0x6739, BARTS_6739, BARTS) -CHIPSET(0x673E, BARTS_673E, BARTS) - -CHIPSET(0x6740, TURKS_6740, TURKS) -CHIPSET(0x6741, TURKS_6741, TURKS) -CHIPSET(0x6742, TURKS_6742, TURKS) -CHIPSET(0x6743, TURKS_6743, TURKS) -CHIPSET(0x6744, TURKS_6744, TURKS) -CHIPSET(0x6745, TURKS_6745, TURKS) -CHIPSET(0x6746, TURKS_6746, TURKS) -CHIPSET(0x6747, TURKS_6747, TURKS) -CHIPSET(0x6748, TURKS_6748, TURKS) -CHIPSET(0x6749, TURKS_6749, TURKS) -CHIPSET(0x674A, TURKS_674A, TURKS) -CHIPSET(0x6750, TURKS_6750, TURKS) -CHIPSET(0x6751, TURKS_6751, TURKS) -CHIPSET(0x6758, TURKS_6758, TURKS) -CHIPSET(0x6759, TURKS_6759, TURKS) -CHIPSET(0x675B, TURKS_675B, TURKS) -CHIPSET(0x675D, TURKS_675D, TURKS) -CHIPSET(0x675F, TURKS_675F, TURKS) -CHIPSET(0x6840, TURKS_6840, TURKS) -CHIPSET(0x6841, TURKS_6841, TURKS) -CHIPSET(0x6842, TURKS_6842, TURKS) -CHIPSET(0x6843, TURKS_6843, TURKS) -CHIPSET(0x6849, TURKS_6849, TURKS) -CHIPSET(0x6850, TURKS_6850, TURKS) -CHIPSET(0x6858, TURKS_6858, TURKS) -CHIPSET(0x6859, TURKS_6859, TURKS) - -CHIPSET(0x6760, CAICOS_6760, CAICOS) -CHIPSET(0x6761, CAICOS_6761, CAICOS) -CHIPSET(0x6762, CAICOS_6762, CAICOS) -CHIPSET(0x6763, CAICOS_6763, CAICOS) -CHIPSET(0x6764, CAICOS_6764, CAICOS) -CHIPSET(0x6765, CAICOS_6765, CAICOS) -CHIPSET(0x6766, CAICOS_6766, CAICOS) -CHIPSET(0x6767, CAICOS_6767, CAICOS) -CHIPSET(0x6768, CAICOS_6768, CAICOS) -CHIPSET(0x6770, CAICOS_6770, CAICOS) -CHIPSET(0x6771, CAICOS_6771, CAICOS) -CHIPSET(0x6772, CAICOS_6772, CAICOS) -CHIPSET(0x6778, CAICOS_6778, CAICOS) -CHIPSET(0x6779, CAICOS_6779, CAICOS) -CHIPSET(0x677B, CAICOS_677B, CAICOS) - -CHIPSET(0x9900, ARUBA_9900, ARUBA) -CHIPSET(0x9901, ARUBA_9901, ARUBA) -CHIPSET(0x9903, ARUBA_9903, ARUBA) -CHIPSET(0x9904, ARUBA_9904, ARUBA) -CHIPSET(0x9905, ARUBA_9905, ARUBA) -CHIPSET(0x9906, ARUBA_9906, ARUBA) -CHIPSET(0x9907, ARUBA_9907, ARUBA) -CHIPSET(0x9908, ARUBA_9908, ARUBA) -CHIPSET(0x9909, ARUBA_9909, ARUBA) -CHIPSET(0x990A, ARUBA_990A, ARUBA) -CHIPSET(0x990B, ARUBA_990B, ARUBA) -CHIPSET(0x990C, ARUBA_990C, ARUBA) -CHIPSET(0x990D, ARUBA_990D, ARUBA) -CHIPSET(0x990E, ARUBA_990E, ARUBA) -CHIPSET(0x990F, ARUBA_990F, ARUBA) -CHIPSET(0x9910, ARUBA_9910, ARUBA) -CHIPSET(0x9913, ARUBA_9913, ARUBA) -CHIPSET(0x9917, ARUBA_9917, ARUBA) -CHIPSET(0x9918, ARUBA_9918, ARUBA) -CHIPSET(0x9919, ARUBA_9919, ARUBA) -CHIPSET(0x9990, ARUBA_9990, ARUBA) -CHIPSET(0x9991, ARUBA_9991, ARUBA) -CHIPSET(0x9992, ARUBA_9992, ARUBA) -CHIPSET(0x9993, ARUBA_9993, ARUBA) -CHIPSET(0x9994, ARUBA_9994, ARUBA) -CHIPSET(0x9995, ARUBA_9995, ARUBA) -CHIPSET(0x9996, ARUBA_9996, ARUBA) -CHIPSET(0x9997, ARUBA_9997, ARUBA) -CHIPSET(0x9998, ARUBA_9998, ARUBA) -CHIPSET(0x9999, ARUBA_9999, ARUBA) -CHIPSET(0x999A, ARUBA_999A, ARUBA) -CHIPSET(0x999B, ARUBA_999B, ARUBA) -CHIPSET(0x999C, ARUBA_999C, ARUBA) -CHIPSET(0x999D, ARUBA_999D, ARUBA) -CHIPSET(0x99A0, ARUBA_99A0, ARUBA) -CHIPSET(0x99A2, ARUBA_99A2, ARUBA) -CHIPSET(0x99A4, ARUBA_99A4, ARUBA) - -CHIPSET(0x6780, TAHITI_6780, TAHITI) -CHIPSET(0x6784, TAHITI_6784, TAHITI) -CHIPSET(0x6788, TAHITI_6788, TAHITI) -CHIPSET(0x678A, TAHITI_678A, TAHITI) -CHIPSET(0x6790, TAHITI_6790, TAHITI) -CHIPSET(0x6791, TAHITI_6791, TAHITI) -CHIPSET(0x6792, TAHITI_6792, TAHITI) -CHIPSET(0x6798, TAHITI_6798, TAHITI) -CHIPSET(0x6799, TAHITI_6799, TAHITI) -CHIPSET(0x679A, TAHITI_679A, TAHITI) -CHIPSET(0x679B, TAHITI_679B, TAHITI) -CHIPSET(0x679E, TAHITI_679E, TAHITI) -CHIPSET(0x679F, TAHITI_679F, TAHITI) - -CHIPSET(0x6800, PITCAIRN_6800, PITCAIRN) -CHIPSET(0x6801, PITCAIRN_6801, PITCAIRN) -CHIPSET(0x6802, PITCAIRN_6802, PITCAIRN) -CHIPSET(0x6806, PITCAIRN_6806, PITCAIRN) -CHIPSET(0x6808, PITCAIRN_6808, PITCAIRN) -CHIPSET(0x6809, PITCAIRN_6809, PITCAIRN) -CHIPSET(0x6810, PITCAIRN_6810, PITCAIRN) -CHIPSET(0x6811, PITCAIRN_6811, PITCAIRN) -CHIPSET(0x6816, PITCAIRN_6816, PITCAIRN) -CHIPSET(0x6817, PITCAIRN_6817, PITCAIRN) -CHIPSET(0x6818, PITCAIRN_6818, PITCAIRN) -CHIPSET(0x6819, PITCAIRN_6819, PITCAIRN) -CHIPSET(0x684C, PITCAIRN_684C, PITCAIRN) - -CHIPSET(0x6820, VERDE_6820, VERDE) -CHIPSET(0x6821, VERDE_6821, VERDE) -CHIPSET(0x6822, VERDE_6822, VERDE) -CHIPSET(0x6823, VERDE_6823, VERDE) -CHIPSET(0x6824, VERDE_6824, VERDE) -CHIPSET(0x6825, VERDE_6825, VERDE) -CHIPSET(0x6826, VERDE_6826, VERDE) -CHIPSET(0x6827, VERDE_6827, VERDE) -CHIPSET(0x6828, VERDE_6828, VERDE) -CHIPSET(0x6829, VERDE_6829, VERDE) -CHIPSET(0x682A, VERDE_682A, VERDE) -CHIPSET(0x682B, VERDE_682B, VERDE) -CHIPSET(0x682C, VERDE_682C, VERDE) -CHIPSET(0x682D, VERDE_682D, VERDE) -CHIPSET(0x682F, VERDE_682F, VERDE) -CHIPSET(0x6830, VERDE_6830, VERDE) -CHIPSET(0x6831, VERDE_6831, VERDE) -CHIPSET(0x6835, VERDE_6835, VERDE) -CHIPSET(0x6837, VERDE_6837, VERDE) -CHIPSET(0x6838, VERDE_6838, VERDE) -CHIPSET(0x6839, VERDE_6839, VERDE) -CHIPSET(0x683B, VERDE_683B, VERDE) -CHIPSET(0x683D, VERDE_683D, VERDE) -CHIPSET(0x683F, VERDE_683F, VERDE) - -CHIPSET(0x6600, OLAND_6600, OLAND) -CHIPSET(0x6601, OLAND_6601, OLAND) -CHIPSET(0x6602, OLAND_6602, OLAND) -CHIPSET(0x6603, OLAND_6603, OLAND) -CHIPSET(0x6604, OLAND_6604, OLAND) -CHIPSET(0x6605, OLAND_6605, OLAND) -CHIPSET(0x6606, OLAND_6606, OLAND) -CHIPSET(0x6607, OLAND_6607, OLAND) -CHIPSET(0x6608, OLAND_6608, OLAND) -CHIPSET(0x6610, OLAND_6610, OLAND) -CHIPSET(0x6611, OLAND_6611, OLAND) -CHIPSET(0x6613, OLAND_6613, OLAND) -CHIPSET(0x6617, OLAND_6617, OLAND) -CHIPSET(0x6620, OLAND_6620, OLAND) -CHIPSET(0x6621, OLAND_6621, OLAND) -CHIPSET(0x6623, OLAND_6623, OLAND) -CHIPSET(0x6631, OLAND_6631, OLAND) - -CHIPSET(0x6660, HAINAN_6660, HAINAN) -CHIPSET(0x6663, HAINAN_6663, HAINAN) -CHIPSET(0x6664, HAINAN_6664, HAINAN) -CHIPSET(0x6665, HAINAN_6665, HAINAN) -CHIPSET(0x6667, HAINAN_6667, HAINAN) -CHIPSET(0x666F, HAINAN_666F, HAINAN) - -CHIPSET(0x6640, BONAIRE_6640, BONAIRE) -CHIPSET(0x6641, BONAIRE_6641, BONAIRE) -CHIPSET(0x6646, BONAIRE_6646, BONAIRE) -CHIPSET(0x6647, BONAIRE_6647, BONAIRE) -CHIPSET(0x6649, BONAIRE_6649, BONAIRE) -CHIPSET(0x6650, BONAIRE_6650, BONAIRE) -CHIPSET(0x6651, BONAIRE_6651, BONAIRE) -CHIPSET(0x6658, BONAIRE_6658, BONAIRE) -CHIPSET(0x665C, BONAIRE_665C, BONAIRE) -CHIPSET(0x665D, BONAIRE_665D, BONAIRE) -CHIPSET(0x665F, BONAIRE_665F, BONAIRE) - -CHIPSET(0x9830, KABINI_9830, KABINI) -CHIPSET(0x9831, KABINI_9831, KABINI) -CHIPSET(0x9832, KABINI_9832, KABINI) -CHIPSET(0x9833, KABINI_9833, KABINI) -CHIPSET(0x9834, KABINI_9834, KABINI) -CHIPSET(0x9835, KABINI_9835, KABINI) -CHIPSET(0x9836, KABINI_9836, KABINI) -CHIPSET(0x9837, KABINI_9837, KABINI) -CHIPSET(0x9838, KABINI_9838, KABINI) -CHIPSET(0x9839, KABINI_9839, KABINI) -CHIPSET(0x983A, KABINI_983A, KABINI) -CHIPSET(0x983B, KABINI_983B, KABINI) -CHIPSET(0x983C, KABINI_983C, KABINI) -CHIPSET(0x983D, KABINI_983D, KABINI) -CHIPSET(0x983E, KABINI_983E, KABINI) -CHIPSET(0x983F, KABINI_983F, KABINI) - -CHIPSET(0x9850, MULLINS_9850, MULLINS) -CHIPSET(0x9851, MULLINS_9851, MULLINS) -CHIPSET(0x9852, MULLINS_9852, MULLINS) -CHIPSET(0x9853, MULLINS_9853, MULLINS) -CHIPSET(0x9854, MULLINS_9854, MULLINS) -CHIPSET(0x9855, MULLINS_9855, MULLINS) -CHIPSET(0x9856, MULLINS_9856, MULLINS) -CHIPSET(0x9857, MULLINS_9857, MULLINS) -CHIPSET(0x9858, MULLINS_9858, MULLINS) -CHIPSET(0x9859, MULLINS_9859, MULLINS) -CHIPSET(0x985A, MULLINS_985A, MULLINS) -CHIPSET(0x985B, MULLINS_985B, MULLINS) -CHIPSET(0x985C, MULLINS_985C, MULLINS) -CHIPSET(0x985D, MULLINS_985D, MULLINS) -CHIPSET(0x985E, MULLINS_985E, MULLINS) -CHIPSET(0x985F, MULLINS_985F, MULLINS) - -CHIPSET(0x1304, KAVERI_1304, KAVERI) -CHIPSET(0x1305, KAVERI_1305, KAVERI) -CHIPSET(0x1306, KAVERI_1306, KAVERI) -CHIPSET(0x1307, KAVERI_1307, KAVERI) -CHIPSET(0x1309, KAVERI_1309, KAVERI) -CHIPSET(0x130A, KAVERI_130A, KAVERI) -CHIPSET(0x130B, KAVERI_130B, KAVERI) -CHIPSET(0x130C, KAVERI_130C, KAVERI) -CHIPSET(0x130D, KAVERI_130D, KAVERI) -CHIPSET(0x130E, KAVERI_130E, KAVERI) -CHIPSET(0x130F, KAVERI_130F, KAVERI) -CHIPSET(0x1310, KAVERI_1310, KAVERI) -CHIPSET(0x1311, KAVERI_1311, KAVERI) -CHIPSET(0x1312, KAVERI_1312, KAVERI) -CHIPSET(0x1313, KAVERI_1313, KAVERI) -CHIPSET(0x1315, KAVERI_1315, KAVERI) -CHIPSET(0x1316, KAVERI_1316, KAVERI) -CHIPSET(0x1317, KAVERI_1317, KAVERI) -CHIPSET(0x1318, KAVERI_1318, KAVERI) -CHIPSET(0x131B, KAVERI_131B, KAVERI) -CHIPSET(0x131C, KAVERI_131C, KAVERI) -CHIPSET(0x131D, KAVERI_131D, KAVERI) - -CHIPSET(0x67A0, HAWAII_67A0, HAWAII) -CHIPSET(0x67A1, HAWAII_67A1, HAWAII) -CHIPSET(0x67A2, HAWAII_67A2, HAWAII) -CHIPSET(0x67A8, HAWAII_67A8, HAWAII) -CHIPSET(0x67A9, HAWAII_67A9, HAWAII) -CHIPSET(0x67AA, HAWAII_67AA, HAWAII) -CHIPSET(0x67B0, HAWAII_67B0, HAWAII) -CHIPSET(0x67B1, HAWAII_67B1, HAWAII) -CHIPSET(0x67B8, HAWAII_67B8, HAWAII) -CHIPSET(0x67B9, HAWAII_67B9, HAWAII) -CHIPSET(0x67BA, HAWAII_67BA, HAWAII) -CHIPSET(0x67BE, HAWAII_67BE, HAWAII) diff --git a/prebuilts/x86_64/include/libdrm/radeon_bo.h b/prebuilts/x86_64/include/libdrm/radeon_bo.h deleted file mode 100644 index 6e20c6c..0000000 --- a/prebuilts/x86_64/include/libdrm/radeon_bo.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Jérôme Glisse - */ -#ifndef RADEON_BO_H -#define RADEON_BO_H - -#include -#include - -/* bo object */ -#define RADEON_BO_FLAGS_MACRO_TILE 1 -#define RADEON_BO_FLAGS_MICRO_TILE 2 -#define RADEON_BO_FLAGS_MICRO_TILE_SQUARE 0x20 - -struct radeon_bo_manager; -struct radeon_cs; - -struct radeon_bo { - void *ptr; - uint32_t flags; - uint32_t handle; - uint32_t size; -}; - - -void radeon_bo_debug(struct radeon_bo *bo, const char *op); - -struct radeon_bo *radeon_bo_open(struct radeon_bo_manager *bom, - uint32_t handle, - uint32_t size, - uint32_t alignment, - uint32_t domains, - uint32_t flags); - -void radeon_bo_ref(struct radeon_bo *bo); -struct radeon_bo *radeon_bo_unref(struct radeon_bo *bo); -int radeon_bo_map(struct radeon_bo *bo, int write); -int radeon_bo_unmap(struct radeon_bo *bo); -int radeon_bo_wait(struct radeon_bo *bo); -int radeon_bo_is_busy(struct radeon_bo *bo, uint32_t *domain); -int radeon_bo_set_tiling(struct radeon_bo *bo, uint32_t tiling_flags, uint32_t pitch); -int radeon_bo_get_tiling(struct radeon_bo *bo, uint32_t *tiling_flags, uint32_t *pitch); -int radeon_bo_is_static(struct radeon_bo *bo); -int radeon_bo_is_referenced_by_cs(struct radeon_bo *bo, struct radeon_cs *cs); -uint32_t radeon_bo_get_handle(struct radeon_bo *bo); -uint32_t radeon_bo_get_src_domain(struct radeon_bo *bo); -#endif diff --git a/prebuilts/x86_64/include/libdrm/radeon_bo_gem.h b/prebuilts/x86_64/include/libdrm/radeon_bo_gem.h deleted file mode 100644 index 08965f3..0000000 --- a/prebuilts/x86_64/include/libdrm/radeon_bo_gem.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2008 Dave Airlie - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Dave Airlie - * Jérôme Glisse - */ -#ifndef RADEON_BO_GEM_H -#define RADEON_BO_GEM_H - -#include "radeon_bo.h" - -struct radeon_bo_manager *radeon_bo_manager_gem_ctor(int fd); -void radeon_bo_manager_gem_dtor(struct radeon_bo_manager *bom); - -uint32_t radeon_gem_name_bo(struct radeon_bo *bo); -void *radeon_gem_get_reloc_in_cs(struct radeon_bo *bo); -int radeon_gem_set_domain(struct radeon_bo *bo, uint32_t read_domains, uint32_t write_domain); -int radeon_gem_get_kernel_name(struct radeon_bo *bo, uint32_t *name); -int radeon_gem_prime_share_bo(struct radeon_bo *bo, int *handle); -struct radeon_bo *radeon_gem_bo_open_prime(struct radeon_bo_manager *bom, - int fd_handle, - uint32_t size); -#endif diff --git a/prebuilts/x86_64/include/libdrm/radeon_bo_int.h b/prebuilts/x86_64/include/libdrm/radeon_bo_int.h deleted file mode 100644 index de981b0..0000000 --- a/prebuilts/x86_64/include/libdrm/radeon_bo_int.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef RADEON_BO_INT -#define RADEON_BO_INT - -struct radeon_bo_manager { - const struct radeon_bo_funcs *funcs; - int fd; -}; - -struct radeon_bo_int { - void *ptr; - uint32_t flags; - uint32_t handle; - uint32_t size; - /* private members */ - uint32_t alignment; - uint32_t domains; - unsigned cref; - struct radeon_bo_manager *bom; - uint32_t space_accounted; - uint32_t referenced_in_cs; -}; - -/* bo functions */ -struct radeon_bo_funcs { - struct radeon_bo *(*bo_open)(struct radeon_bo_manager *bom, - uint32_t handle, - uint32_t size, - uint32_t alignment, - uint32_t domains, - uint32_t flags); - void (*bo_ref)(struct radeon_bo_int *bo); - struct radeon_bo *(*bo_unref)(struct radeon_bo_int *bo); - int (*bo_map)(struct radeon_bo_int *bo, int write); - int (*bo_unmap)(struct radeon_bo_int *bo); - int (*bo_wait)(struct radeon_bo_int *bo); - int (*bo_is_static)(struct radeon_bo_int *bo); - int (*bo_set_tiling)(struct radeon_bo_int *bo, uint32_t tiling_flags, - uint32_t pitch); - int (*bo_get_tiling)(struct radeon_bo_int *bo, uint32_t *tiling_flags, - uint32_t *pitch); - int (*bo_is_busy)(struct radeon_bo_int *bo, uint32_t *domain); - int (*bo_is_referenced_by_cs)(struct radeon_bo_int *bo, struct radeon_cs *cs); -}; - -#endif diff --git a/prebuilts/x86_64/include/libdrm/radeon_cs.h b/prebuilts/x86_64/include/libdrm/radeon_cs.h deleted file mode 100644 index f68a624..0000000 --- a/prebuilts/x86_64/include/libdrm/radeon_cs.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright © 2008 Nicolai Haehnle - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Aapo Tahkola - * Nicolai Haehnle - * Jérôme Glisse - */ -#ifndef RADEON_CS_H -#define RADEON_CS_H - -#include -#include -#include "drm.h" -#include "radeon_drm.h" -#include "radeon_bo.h" - -struct radeon_cs_reloc { - struct radeon_bo *bo; - uint32_t read_domain; - uint32_t write_domain; - uint32_t flags; -}; - - -#define RADEON_CS_SPACE_OK 0 -#define RADEON_CS_SPACE_OP_TO_BIG 1 -#define RADEON_CS_SPACE_FLUSH 2 - -struct radeon_cs { - uint32_t *packets; - unsigned cdw; - unsigned ndw; - unsigned section_ndw; - unsigned section_cdw; -}; - -#define MAX_SPACE_BOS (32) - -struct radeon_cs_manager; - -extern struct radeon_cs *radeon_cs_create(struct radeon_cs_manager *csm, - uint32_t ndw); - -extern int radeon_cs_begin(struct radeon_cs *cs, - uint32_t ndw, - const char *file, - const char *func, int line); -extern int radeon_cs_end(struct radeon_cs *cs, - const char *file, - const char *func, - int line); -extern int radeon_cs_emit(struct radeon_cs *cs); -extern int radeon_cs_destroy(struct radeon_cs *cs); -extern int radeon_cs_erase(struct radeon_cs *cs); -extern int radeon_cs_need_flush(struct radeon_cs *cs); -extern void radeon_cs_print(struct radeon_cs *cs, FILE *file); -extern void radeon_cs_set_limit(struct radeon_cs *cs, uint32_t domain, uint32_t limit); -extern void radeon_cs_space_set_flush(struct radeon_cs *cs, void (*fn)(void *), void *data); -extern int radeon_cs_write_reloc(struct radeon_cs *cs, - struct radeon_bo *bo, - uint32_t read_domain, - uint32_t write_domain, - uint32_t flags); -extern uint32_t radeon_cs_get_id(struct radeon_cs *cs); -/* - * add a persistent BO to the list - * a persistent BO is one that will be referenced across flushes, - * i.e. colorbuffer, textures etc. - * They get reset when a new "operation" happens, where an operation - * is a state emission with a color/textures etc followed by a bunch of vertices. - */ -void radeon_cs_space_add_persistent_bo(struct radeon_cs *cs, - struct radeon_bo *bo, - uint32_t read_domains, - uint32_t write_domain); - -/* reset the persistent BO list */ -void radeon_cs_space_reset_bos(struct radeon_cs *cs); - -/* do a space check with the current persistent BO list */ -int radeon_cs_space_check(struct radeon_cs *cs); - -/* do a space check with the current persistent BO list and a temporary BO - * a temporary BO is like a DMA buffer, which gets flushed with the - * command buffer */ -int radeon_cs_space_check_with_bo(struct radeon_cs *cs, - struct radeon_bo *bo, - uint32_t read_domains, - uint32_t write_domain); - -static inline void radeon_cs_write_dword(struct radeon_cs *cs, uint32_t dword) -{ - cs->packets[cs->cdw++] = dword; - if (cs->section_ndw) { - cs->section_cdw++; - } -} - -static inline void radeon_cs_write_qword(struct radeon_cs *cs, uint64_t qword) -{ - memcpy(cs->packets + cs->cdw, &qword, sizeof(uint64_t)); - cs->cdw += 2; - if (cs->section_ndw) { - cs->section_cdw += 2; - } -} - -static inline void radeon_cs_write_table(struct radeon_cs *cs, - const void *data, uint32_t size) -{ - memcpy(cs->packets + cs->cdw, data, size * 4); - cs->cdw += size; - if (cs->section_ndw) { - cs->section_cdw += size; - } -} -#endif diff --git a/prebuilts/x86_64/include/libdrm/radeon_cs_gem.h b/prebuilts/x86_64/include/libdrm/radeon_cs_gem.h deleted file mode 100644 index 5dea38a..0000000 --- a/prebuilts/x86_64/include/libdrm/radeon_cs_gem.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright © 2008 Nicolai Haehnle - * Copyright © 2008 Jérôme Glisse - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Aapo Tahkola - * Nicolai Haehnle - * Jérôme Glisse - */ -#ifndef RADEON_CS_GEM_H -#define RADEON_CS_GEM_H - -#include "radeon_cs.h" - -struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd); -void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm); - -#endif diff --git a/prebuilts/x86_64/include/libdrm/radeon_cs_int.h b/prebuilts/x86_64/include/libdrm/radeon_cs_int.h deleted file mode 100644 index d906ad4..0000000 --- a/prebuilts/x86_64/include/libdrm/radeon_cs_int.h +++ /dev/null @@ -1,67 +0,0 @@ - -#ifndef _RADEON_CS_INT_H_ -#define _RADEON_CS_INT_H_ - -struct radeon_cs_space_check { - struct radeon_bo_int *bo; - uint32_t read_domains; - uint32_t write_domain; - uint32_t new_accounted; -}; - -struct radeon_cs_int { - /* keep first two in same place */ - uint32_t *packets; - unsigned cdw; - unsigned ndw; - unsigned section_ndw; - unsigned section_cdw; - /* private members */ - struct radeon_cs_manager *csm; - void *relocs; - unsigned crelocs; - unsigned relocs_total_size; - const char *section_file; - const char *section_func; - int section_line; - struct radeon_cs_space_check bos[MAX_SPACE_BOS]; - int bo_count; - void (*space_flush_fn)(void *); - void *space_flush_data; - uint32_t id; -}; - -/* cs functions */ -struct radeon_cs_funcs { - struct radeon_cs_int *(*cs_create)(struct radeon_cs_manager *csm, - uint32_t ndw); - int (*cs_write_reloc)(struct radeon_cs_int *cs, - struct radeon_bo *bo, - uint32_t read_domain, - uint32_t write_domain, - uint32_t flags); - int (*cs_begin)(struct radeon_cs_int *cs, - uint32_t ndw, - const char *file, - const char *func, - int line); - int (*cs_end)(struct radeon_cs_int *cs, - const char *file, const char *func, - int line); - - - int (*cs_emit)(struct radeon_cs_int *cs); - int (*cs_destroy)(struct radeon_cs_int *cs); - int (*cs_erase)(struct radeon_cs_int *cs); - int (*cs_need_flush)(struct radeon_cs_int *cs); - void (*cs_print)(struct radeon_cs_int *cs, FILE *file); -}; - -struct radeon_cs_manager { - const struct radeon_cs_funcs *funcs; - int fd; - int32_t vram_limit, gart_limit; - int32_t vram_write_used, gart_write_used; - int32_t read_used; -}; -#endif diff --git a/prebuilts/x86_64/include/libdrm/radeon_drm.h b/prebuilts/x86_64/include/libdrm/radeon_drm.h deleted file mode 100644 index a1e385d..0000000 --- a/prebuilts/x86_64/include/libdrm/radeon_drm.h +++ /dev/null @@ -1,1079 +0,0 @@ -/* radeon_drm.h -- Public header for the radeon driver -*- linux-c -*- - * - * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Fremont, California. - * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Kevin E. Martin - * Gareth Hughes - * Keith Whitwell - */ - -#ifndef __RADEON_DRM_H__ -#define __RADEON_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the X server file (radeon_sarea.h) - */ -#ifndef __RADEON_SAREA_DEFINES__ -#define __RADEON_SAREA_DEFINES__ - -/* Old style state flags, required for sarea interface (1.1 and 1.2 - * clears) and 1.2 drm_vertex2 ioctl. - */ -#define RADEON_UPLOAD_CONTEXT 0x00000001 -#define RADEON_UPLOAD_VERTFMT 0x00000002 -#define RADEON_UPLOAD_LINE 0x00000004 -#define RADEON_UPLOAD_BUMPMAP 0x00000008 -#define RADEON_UPLOAD_MASKS 0x00000010 -#define RADEON_UPLOAD_VIEWPORT 0x00000020 -#define RADEON_UPLOAD_SETUP 0x00000040 -#define RADEON_UPLOAD_TCL 0x00000080 -#define RADEON_UPLOAD_MISC 0x00000100 -#define RADEON_UPLOAD_TEX0 0x00000200 -#define RADEON_UPLOAD_TEX1 0x00000400 -#define RADEON_UPLOAD_TEX2 0x00000800 -#define RADEON_UPLOAD_TEX0IMAGES 0x00001000 -#define RADEON_UPLOAD_TEX1IMAGES 0x00002000 -#define RADEON_UPLOAD_TEX2IMAGES 0x00004000 -#define RADEON_UPLOAD_CLIPRECTS 0x00008000 /* handled client-side */ -#define RADEON_REQUIRE_QUIESCENCE 0x00010000 -#define RADEON_UPLOAD_ZBIAS 0x00020000 /* version 1.2 and newer */ -#define RADEON_UPLOAD_ALL 0x003effff -#define RADEON_UPLOAD_CONTEXT_ALL 0x003e01ff - -/* New style per-packet identifiers for use in cmd_buffer ioctl with - * the RADEON_EMIT_PACKET command. Comments relate new packets to old - * state bits and the packet size: - */ -#define RADEON_EMIT_PP_MISC 0 /* context/7 */ -#define RADEON_EMIT_PP_CNTL 1 /* context/3 */ -#define RADEON_EMIT_RB3D_COLORPITCH 2 /* context/1 */ -#define RADEON_EMIT_RE_LINE_PATTERN 3 /* line/2 */ -#define RADEON_EMIT_SE_LINE_WIDTH 4 /* line/1 */ -#define RADEON_EMIT_PP_LUM_MATRIX 5 /* bumpmap/1 */ -#define RADEON_EMIT_PP_ROT_MATRIX_0 6 /* bumpmap/2 */ -#define RADEON_EMIT_RB3D_STENCILREFMASK 7 /* masks/3 */ -#define RADEON_EMIT_SE_VPORT_XSCALE 8 /* viewport/6 */ -#define RADEON_EMIT_SE_CNTL 9 /* setup/2 */ -#define RADEON_EMIT_SE_CNTL_STATUS 10 /* setup/1 */ -#define RADEON_EMIT_RE_MISC 11 /* misc/1 */ -#define RADEON_EMIT_PP_TXFILTER_0 12 /* tex0/6 */ -#define RADEON_EMIT_PP_BORDER_COLOR_0 13 /* tex0/1 */ -#define RADEON_EMIT_PP_TXFILTER_1 14 /* tex1/6 */ -#define RADEON_EMIT_PP_BORDER_COLOR_1 15 /* tex1/1 */ -#define RADEON_EMIT_PP_TXFILTER_2 16 /* tex2/6 */ -#define RADEON_EMIT_PP_BORDER_COLOR_2 17 /* tex2/1 */ -#define RADEON_EMIT_SE_ZBIAS_FACTOR 18 /* zbias/2 */ -#define RADEON_EMIT_SE_TCL_OUTPUT_VTX_FMT 19 /* tcl/11 */ -#define RADEON_EMIT_SE_TCL_MATERIAL_EMMISSIVE_RED 20 /* material/17 */ -#define R200_EMIT_PP_TXCBLEND_0 21 /* tex0/4 */ -#define R200_EMIT_PP_TXCBLEND_1 22 /* tex1/4 */ -#define R200_EMIT_PP_TXCBLEND_2 23 /* tex2/4 */ -#define R200_EMIT_PP_TXCBLEND_3 24 /* tex3/4 */ -#define R200_EMIT_PP_TXCBLEND_4 25 /* tex4/4 */ -#define R200_EMIT_PP_TXCBLEND_5 26 /* tex5/4 */ -#define R200_EMIT_PP_TXCBLEND_6 27 /* /4 */ -#define R200_EMIT_PP_TXCBLEND_7 28 /* /4 */ -#define R200_EMIT_TCL_LIGHT_MODEL_CTL_0 29 /* tcl/7 */ -#define R200_EMIT_TFACTOR_0 30 /* tf/7 */ -#define R200_EMIT_VTX_FMT_0 31 /* vtx/5 */ -#define R200_EMIT_VAP_CTL 32 /* vap/1 */ -#define R200_EMIT_MATRIX_SELECT_0 33 /* msl/5 */ -#define R200_EMIT_TEX_PROC_CTL_2 34 /* tcg/5 */ -#define R200_EMIT_TCL_UCP_VERT_BLEND_CTL 35 /* tcl/1 */ -#define R200_EMIT_PP_TXFILTER_0 36 /* tex0/6 */ -#define R200_EMIT_PP_TXFILTER_1 37 /* tex1/6 */ -#define R200_EMIT_PP_TXFILTER_2 38 /* tex2/6 */ -#define R200_EMIT_PP_TXFILTER_3 39 /* tex3/6 */ -#define R200_EMIT_PP_TXFILTER_4 40 /* tex4/6 */ -#define R200_EMIT_PP_TXFILTER_5 41 /* tex5/6 */ -#define R200_EMIT_PP_TXOFFSET_0 42 /* tex0/1 */ -#define R200_EMIT_PP_TXOFFSET_1 43 /* tex1/1 */ -#define R200_EMIT_PP_TXOFFSET_2 44 /* tex2/1 */ -#define R200_EMIT_PP_TXOFFSET_3 45 /* tex3/1 */ -#define R200_EMIT_PP_TXOFFSET_4 46 /* tex4/1 */ -#define R200_EMIT_PP_TXOFFSET_5 47 /* tex5/1 */ -#define R200_EMIT_VTE_CNTL 48 /* vte/1 */ -#define R200_EMIT_OUTPUT_VTX_COMP_SEL 49 /* vtx/1 */ -#define R200_EMIT_PP_TAM_DEBUG3 50 /* tam/1 */ -#define R200_EMIT_PP_CNTL_X 51 /* cst/1 */ -#define R200_EMIT_RB3D_DEPTHXY_OFFSET 52 /* cst/1 */ -#define R200_EMIT_RE_AUX_SCISSOR_CNTL 53 /* cst/1 */ -#define R200_EMIT_RE_SCISSOR_TL_0 54 /* cst/2 */ -#define R200_EMIT_RE_SCISSOR_TL_1 55 /* cst/2 */ -#define R200_EMIT_RE_SCISSOR_TL_2 56 /* cst/2 */ -#define R200_EMIT_SE_VAP_CNTL_STATUS 57 /* cst/1 */ -#define R200_EMIT_SE_VTX_STATE_CNTL 58 /* cst/1 */ -#define R200_EMIT_RE_POINTSIZE 59 /* cst/1 */ -#define R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0 60 /* cst/4 */ -#define R200_EMIT_PP_CUBIC_FACES_0 61 -#define R200_EMIT_PP_CUBIC_OFFSETS_0 62 -#define R200_EMIT_PP_CUBIC_FACES_1 63 -#define R200_EMIT_PP_CUBIC_OFFSETS_1 64 -#define R200_EMIT_PP_CUBIC_FACES_2 65 -#define R200_EMIT_PP_CUBIC_OFFSETS_2 66 -#define R200_EMIT_PP_CUBIC_FACES_3 67 -#define R200_EMIT_PP_CUBIC_OFFSETS_3 68 -#define R200_EMIT_PP_CUBIC_FACES_4 69 -#define R200_EMIT_PP_CUBIC_OFFSETS_4 70 -#define R200_EMIT_PP_CUBIC_FACES_5 71 -#define R200_EMIT_PP_CUBIC_OFFSETS_5 72 -#define RADEON_EMIT_PP_TEX_SIZE_0 73 -#define RADEON_EMIT_PP_TEX_SIZE_1 74 -#define RADEON_EMIT_PP_TEX_SIZE_2 75 -#define R200_EMIT_RB3D_BLENDCOLOR 76 -#define R200_EMIT_TCL_POINT_SPRITE_CNTL 77 -#define RADEON_EMIT_PP_CUBIC_FACES_0 78 -#define RADEON_EMIT_PP_CUBIC_OFFSETS_T0 79 -#define RADEON_EMIT_PP_CUBIC_FACES_1 80 -#define RADEON_EMIT_PP_CUBIC_OFFSETS_T1 81 -#define RADEON_EMIT_PP_CUBIC_FACES_2 82 -#define RADEON_EMIT_PP_CUBIC_OFFSETS_T2 83 -#define R200_EMIT_PP_TRI_PERF_CNTL 84 -#define R200_EMIT_PP_AFS_0 85 -#define R200_EMIT_PP_AFS_1 86 -#define R200_EMIT_ATF_TFACTOR 87 -#define R200_EMIT_PP_TXCTLALL_0 88 -#define R200_EMIT_PP_TXCTLALL_1 89 -#define R200_EMIT_PP_TXCTLALL_2 90 -#define R200_EMIT_PP_TXCTLALL_3 91 -#define R200_EMIT_PP_TXCTLALL_4 92 -#define R200_EMIT_PP_TXCTLALL_5 93 -#define R200_EMIT_VAP_PVS_CNTL 94 -#define RADEON_MAX_STATE_PACKETS 95 - -/* Commands understood by cmd_buffer ioctl. More can be added but - * obviously these can't be removed or changed: - */ -#define RADEON_CMD_PACKET 1 /* emit one of the register packets above */ -#define RADEON_CMD_SCALARS 2 /* emit scalar data */ -#define RADEON_CMD_VECTORS 3 /* emit vector data */ -#define RADEON_CMD_DMA_DISCARD 4 /* discard current dma buf */ -#define RADEON_CMD_PACKET3 5 /* emit hw packet */ -#define RADEON_CMD_PACKET3_CLIP 6 /* emit hw packet wrapped in cliprects */ -#define RADEON_CMD_SCALARS2 7 /* r200 stopgap */ -#define RADEON_CMD_WAIT 8 /* emit hw wait commands -- note: - * doesn't make the cpu wait, just - * the graphics hardware */ -#define RADEON_CMD_VECLINEAR 9 /* another r200 stopgap */ - -typedef union { - int i; - struct { - unsigned char cmd_type, pad0, pad1, pad2; - } header; - struct { - unsigned char cmd_type, packet_id, pad0, pad1; - } packet; - struct { - unsigned char cmd_type, offset, stride, count; - } scalars; - struct { - unsigned char cmd_type, offset, stride, count; - } vectors; - struct { - unsigned char cmd_type, addr_lo, addr_hi, count; - } veclinear; - struct { - unsigned char cmd_type, buf_idx, pad0, pad1; - } dma; - struct { - unsigned char cmd_type, flags, pad0, pad1; - } wait; -} drm_radeon_cmd_header_t; - -#define RADEON_WAIT_2D 0x1 -#define RADEON_WAIT_3D 0x2 - -/* Allowed parameters for R300_CMD_PACKET3 - */ -#define R300_CMD_PACKET3_CLEAR 0 -#define R300_CMD_PACKET3_RAW 1 - -/* Commands understood by cmd_buffer ioctl for R300. - * The interface has not been stabilized, so some of these may be removed - * and eventually reordered before stabilization. - */ -#define R300_CMD_PACKET0 1 -#define R300_CMD_VPU 2 /* emit vertex program upload */ -#define R300_CMD_PACKET3 3 /* emit a packet3 */ -#define R300_CMD_END3D 4 /* emit sequence ending 3d rendering */ -#define R300_CMD_CP_DELAY 5 -#define R300_CMD_DMA_DISCARD 6 -#define R300_CMD_WAIT 7 -# define R300_WAIT_2D 0x1 -# define R300_WAIT_3D 0x2 -/* these two defines are DOING IT WRONG - however - * we have userspace which relies on using these. - * The wait interface is backwards compat new - * code should use the NEW_WAIT defines below - * THESE ARE NOT BIT FIELDS - */ -# define R300_WAIT_2D_CLEAN 0x3 -# define R300_WAIT_3D_CLEAN 0x4 - -# define R300_NEW_WAIT_2D_3D 0x3 -# define R300_NEW_WAIT_2D_2D_CLEAN 0x4 -# define R300_NEW_WAIT_3D_3D_CLEAN 0x6 -# define R300_NEW_WAIT_2D_2D_CLEAN_3D_3D_CLEAN 0x8 - -#define R300_CMD_SCRATCH 8 -#define R300_CMD_R500FP 9 - -typedef union { - unsigned int u; - struct { - unsigned char cmd_type, pad0, pad1, pad2; - } header; - struct { - unsigned char cmd_type, count, reglo, reghi; - } packet0; - struct { - unsigned char cmd_type, count, adrlo, adrhi; - } vpu; - struct { - unsigned char cmd_type, packet, pad0, pad1; - } packet3; - struct { - unsigned char cmd_type, packet; - unsigned short count; /* amount of packet2 to emit */ - } delay; - struct { - unsigned char cmd_type, buf_idx, pad0, pad1; - } dma; - struct { - unsigned char cmd_type, flags, pad0, pad1; - } wait; - struct { - unsigned char cmd_type, reg, n_bufs, flags; - } scratch; - struct { - unsigned char cmd_type, count, adrlo, adrhi_flags; - } r500fp; -} drm_r300_cmd_header_t; - -#define RADEON_FRONT 0x1 -#define RADEON_BACK 0x2 -#define RADEON_DEPTH 0x4 -#define RADEON_STENCIL 0x8 -#define RADEON_CLEAR_FASTZ 0x80000000 -#define RADEON_USE_HIERZ 0x40000000 -#define RADEON_USE_COMP_ZBUF 0x20000000 - -#define R500FP_CONSTANT_TYPE (1 << 1) -#define R500FP_CONSTANT_CLAMP (1 << 2) - -/* Primitive types - */ -#define RADEON_POINTS 0x1 -#define RADEON_LINES 0x2 -#define RADEON_LINE_STRIP 0x3 -#define RADEON_TRIANGLES 0x4 -#define RADEON_TRIANGLE_FAN 0x5 -#define RADEON_TRIANGLE_STRIP 0x6 - -/* Vertex/indirect buffer size - */ -#define RADEON_BUFFER_SIZE 65536 - -/* Byte offsets for indirect buffer data - */ -#define RADEON_INDEX_PRIM_OFFSET 20 - -#define RADEON_SCRATCH_REG_OFFSET 32 - -#define R600_SCRATCH_REG_OFFSET 256 - -#define RADEON_NR_SAREA_CLIPRECTS 12 - -/* There are 2 heaps (local/GART). Each region within a heap is a - * minimum of 64k, and there are at most 64 of them per heap. - */ -#define RADEON_LOCAL_TEX_HEAP 0 -#define RADEON_GART_TEX_HEAP 1 -#define RADEON_NR_TEX_HEAPS 2 -#define RADEON_NR_TEX_REGIONS 64 -#define RADEON_LOG_TEX_GRANULARITY 16 - -#define RADEON_MAX_TEXTURE_LEVELS 12 -#define RADEON_MAX_TEXTURE_UNITS 3 - -#define RADEON_MAX_SURFACES 8 - -/* Blits have strict offset rules. All blit offset must be aligned on - * a 1K-byte boundary. - */ -#define RADEON_OFFSET_SHIFT 10 -#define RADEON_OFFSET_ALIGN (1 << RADEON_OFFSET_SHIFT) -#define RADEON_OFFSET_MASK (RADEON_OFFSET_ALIGN - 1) - -#endif /* __RADEON_SAREA_DEFINES__ */ - -typedef struct { - unsigned int red; - unsigned int green; - unsigned int blue; - unsigned int alpha; -} radeon_color_regs_t; - -typedef struct { - /* Context state */ - unsigned int pp_misc; /* 0x1c14 */ - unsigned int pp_fog_color; - unsigned int re_solid_color; - unsigned int rb3d_blendcntl; - unsigned int rb3d_depthoffset; - unsigned int rb3d_depthpitch; - unsigned int rb3d_zstencilcntl; - - unsigned int pp_cntl; /* 0x1c38 */ - unsigned int rb3d_cntl; - unsigned int rb3d_coloroffset; - unsigned int re_width_height; - unsigned int rb3d_colorpitch; - unsigned int se_cntl; - - /* Vertex format state */ - unsigned int se_coord_fmt; /* 0x1c50 */ - - /* Line state */ - unsigned int re_line_pattern; /* 0x1cd0 */ - unsigned int re_line_state; - - unsigned int se_line_width; /* 0x1db8 */ - - /* Bumpmap state */ - unsigned int pp_lum_matrix; /* 0x1d00 */ - - unsigned int pp_rot_matrix_0; /* 0x1d58 */ - unsigned int pp_rot_matrix_1; - - /* Mask state */ - unsigned int rb3d_stencilrefmask; /* 0x1d7c */ - unsigned int rb3d_ropcntl; - unsigned int rb3d_planemask; - - /* Viewport state */ - unsigned int se_vport_xscale; /* 0x1d98 */ - unsigned int se_vport_xoffset; - unsigned int se_vport_yscale; - unsigned int se_vport_yoffset; - unsigned int se_vport_zscale; - unsigned int se_vport_zoffset; - - /* Setup state */ - unsigned int se_cntl_status; /* 0x2140 */ - - /* Misc state */ - unsigned int re_top_left; /* 0x26c0 */ - unsigned int re_misc; -} drm_radeon_context_regs_t; - -typedef struct { - /* Zbias state */ - unsigned int se_zbias_factor; /* 0x1dac */ - unsigned int se_zbias_constant; -} drm_radeon_context2_regs_t; - -/* Setup registers for each texture unit - */ -typedef struct { - unsigned int pp_txfilter; - unsigned int pp_txformat; - unsigned int pp_txoffset; - unsigned int pp_txcblend; - unsigned int pp_txablend; - unsigned int pp_tfactor; - unsigned int pp_border_color; -} drm_radeon_texture_regs_t; - -typedef struct { - unsigned int start; - unsigned int finish; - unsigned int prim:8; - unsigned int stateidx:8; - unsigned int numverts:16; /* overloaded as offset/64 for elt prims */ - unsigned int vc_format; /* vertex format */ -} drm_radeon_prim_t; - -typedef struct { - drm_radeon_context_regs_t context; - drm_radeon_texture_regs_t tex[RADEON_MAX_TEXTURE_UNITS]; - drm_radeon_context2_regs_t context2; - unsigned int dirty; -} drm_radeon_state_t; - -typedef struct { - /* The channel for communication of state information to the - * kernel on firing a vertex buffer with either of the - * obsoleted vertex/index ioctls. - */ - drm_radeon_context_regs_t context_state; - drm_radeon_texture_regs_t tex_state[RADEON_MAX_TEXTURE_UNITS]; - unsigned int dirty; - unsigned int vertsize; - unsigned int vc_format; - - /* The current cliprects, or a subset thereof. - */ - struct drm_clip_rect boxes[RADEON_NR_SAREA_CLIPRECTS]; - unsigned int nbox; - - /* Counters for client-side throttling of rendering clients. - */ - unsigned int last_frame; - unsigned int last_dispatch; - unsigned int last_clear; - - struct drm_tex_region tex_list[RADEON_NR_TEX_HEAPS][RADEON_NR_TEX_REGIONS + - 1]; - unsigned int tex_age[RADEON_NR_TEX_HEAPS]; - int ctx_owner; - int pfState; /* number of 3d windows (0,1,2ormore) */ - int pfCurrentPage; /* which buffer is being displayed? */ - int crtc2_base; /* CRTC2 frame offset */ - int tiling_enabled; /* set by drm, read by 2d + 3d clients */ -} drm_radeon_sarea_t; - -/* WARNING: If you change any of these defines, make sure to change the - * defines in the Xserver file (xf86drmRadeon.h) - * - * KW: actually it's illegal to change any of this (backwards compatibility). - */ - -/* Radeon specific ioctls - * The device specific ioctl range is 0x40 to 0x79. - */ -#define DRM_RADEON_CP_INIT 0x00 -#define DRM_RADEON_CP_START 0x01 -#define DRM_RADEON_CP_STOP 0x02 -#define DRM_RADEON_CP_RESET 0x03 -#define DRM_RADEON_CP_IDLE 0x04 -#define DRM_RADEON_RESET 0x05 -#define DRM_RADEON_FULLSCREEN 0x06 -#define DRM_RADEON_SWAP 0x07 -#define DRM_RADEON_CLEAR 0x08 -#define DRM_RADEON_VERTEX 0x09 -#define DRM_RADEON_INDICES 0x0A -#define DRM_RADEON_NOT_USED -#define DRM_RADEON_STIPPLE 0x0C -#define DRM_RADEON_INDIRECT 0x0D -#define DRM_RADEON_TEXTURE 0x0E -#define DRM_RADEON_VERTEX2 0x0F -#define DRM_RADEON_CMDBUF 0x10 -#define DRM_RADEON_GETPARAM 0x11 -#define DRM_RADEON_FLIP 0x12 -#define DRM_RADEON_ALLOC 0x13 -#define DRM_RADEON_FREE 0x14 -#define DRM_RADEON_INIT_HEAP 0x15 -#define DRM_RADEON_IRQ_EMIT 0x16 -#define DRM_RADEON_IRQ_WAIT 0x17 -#define DRM_RADEON_CP_RESUME 0x18 -#define DRM_RADEON_SETPARAM 0x19 -#define DRM_RADEON_SURF_ALLOC 0x1a -#define DRM_RADEON_SURF_FREE 0x1b -/* KMS ioctl */ -#define DRM_RADEON_GEM_INFO 0x1c -#define DRM_RADEON_GEM_CREATE 0x1d -#define DRM_RADEON_GEM_MMAP 0x1e -#define DRM_RADEON_GEM_PREAD 0x21 -#define DRM_RADEON_GEM_PWRITE 0x22 -#define DRM_RADEON_GEM_SET_DOMAIN 0x23 -#define DRM_RADEON_GEM_WAIT_IDLE 0x24 -#define DRM_RADEON_CS 0x26 -#define DRM_RADEON_INFO 0x27 -#define DRM_RADEON_GEM_SET_TILING 0x28 -#define DRM_RADEON_GEM_GET_TILING 0x29 -#define DRM_RADEON_GEM_BUSY 0x2a -#define DRM_RADEON_GEM_VA 0x2b -#define DRM_RADEON_GEM_OP 0x2c -#define DRM_RADEON_GEM_USERPTR 0x2d - -#define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t) -#define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START) -#define DRM_IOCTL_RADEON_CP_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_STOP, drm_radeon_cp_stop_t) -#define DRM_IOCTL_RADEON_CP_RESET DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_RESET) -#define DRM_IOCTL_RADEON_CP_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_IDLE) -#define DRM_IOCTL_RADEON_RESET DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_RESET) -#define DRM_IOCTL_RADEON_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FULLSCREEN, drm_radeon_fullscreen_t) -#define DRM_IOCTL_RADEON_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_SWAP) -#define DRM_IOCTL_RADEON_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CLEAR, drm_radeon_clear_t) -#define DRM_IOCTL_RADEON_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX, drm_radeon_vertex_t) -#define DRM_IOCTL_RADEON_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INDICES, drm_radeon_indices_t) -#define DRM_IOCTL_RADEON_STIPPLE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_STIPPLE, drm_radeon_stipple_t) -#define DRM_IOCTL_RADEON_INDIRECT DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INDIRECT, drm_radeon_indirect_t) -#define DRM_IOCTL_RADEON_TEXTURE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_TEXTURE, drm_radeon_texture_t) -#define DRM_IOCTL_RADEON_VERTEX2 DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX2, drm_radeon_vertex2_t) -#define DRM_IOCTL_RADEON_CMDBUF DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CMDBUF, drm_radeon_cmd_buffer_t) -#define DRM_IOCTL_RADEON_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GETPARAM, drm_radeon_getparam_t) -#define DRM_IOCTL_RADEON_FLIP DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_FLIP) -#define DRM_IOCTL_RADEON_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_ALLOC, drm_radeon_mem_alloc_t) -#define DRM_IOCTL_RADEON_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FREE, drm_radeon_mem_free_t) -#define DRM_IOCTL_RADEON_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INIT_HEAP, drm_radeon_mem_init_heap_t) -#define DRM_IOCTL_RADEON_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_IRQ_EMIT, drm_radeon_irq_emit_t) -#define DRM_IOCTL_RADEON_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_IRQ_WAIT, drm_radeon_irq_wait_t) -#define DRM_IOCTL_RADEON_CP_RESUME DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_RESUME) -#define DRM_IOCTL_RADEON_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SETPARAM, drm_radeon_setparam_t) -#define DRM_IOCTL_RADEON_SURF_ALLOC DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_ALLOC, drm_radeon_surface_alloc_t) -#define DRM_IOCTL_RADEON_SURF_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_FREE, drm_radeon_surface_free_t) -/* KMS */ -#define DRM_IOCTL_RADEON_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_INFO, struct drm_radeon_gem_info) -#define DRM_IOCTL_RADEON_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_CREATE, struct drm_radeon_gem_create) -#define DRM_IOCTL_RADEON_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_MMAP, struct drm_radeon_gem_mmap) -#define DRM_IOCTL_RADEON_GEM_PREAD DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PREAD, struct drm_radeon_gem_pread) -#define DRM_IOCTL_RADEON_GEM_PWRITE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PWRITE, struct drm_radeon_gem_pwrite) -#define DRM_IOCTL_RADEON_GEM_SET_DOMAIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_DOMAIN, struct drm_radeon_gem_set_domain) -#define DRM_IOCTL_RADEON_GEM_WAIT_IDLE DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_GEM_WAIT_IDLE, struct drm_radeon_gem_wait_idle) -#define DRM_IOCTL_RADEON_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_CS, struct drm_radeon_cs) -#define DRM_IOCTL_RADEON_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INFO, struct drm_radeon_info) -#define DRM_IOCTL_RADEON_GEM_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_TILING, struct drm_radeon_gem_set_tiling) -#define DRM_IOCTL_RADEON_GEM_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_GET_TILING, struct drm_radeon_gem_get_tiling) -#define DRM_IOCTL_RADEON_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_BUSY, struct drm_radeon_gem_busy) -#define DRM_IOCTL_RADEON_GEM_VA DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_VA, struct drm_radeon_gem_va) -#define DRM_IOCTL_RADEON_GEM_OP DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_OP, struct drm_radeon_gem_op) -#define DRM_IOCTL_RADEON_GEM_USERPTR DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_USERPTR, struct drm_radeon_gem_userptr) - -typedef struct drm_radeon_init { - enum { - RADEON_INIT_CP = 0x01, - RADEON_CLEANUP_CP = 0x02, - RADEON_INIT_R200_CP = 0x03, - RADEON_INIT_R300_CP = 0x04, - RADEON_INIT_R600_CP = 0x05 - } func; - unsigned long sarea_priv_offset; - int is_pci; - int cp_mode; - int gart_size; - int ring_size; - int usec_timeout; - - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long ring_offset; - unsigned long ring_rptr_offset; - unsigned long buffers_offset; - unsigned long gart_textures_offset; -} drm_radeon_init_t; - -typedef struct drm_radeon_cp_stop { - int flush; - int idle; -} drm_radeon_cp_stop_t; - -typedef struct drm_radeon_fullscreen { - enum { - RADEON_INIT_FULLSCREEN = 0x01, - RADEON_CLEANUP_FULLSCREEN = 0x02 - } func; -} drm_radeon_fullscreen_t; - -#define CLEAR_X1 0 -#define CLEAR_Y1 1 -#define CLEAR_X2 2 -#define CLEAR_Y2 3 -#define CLEAR_DEPTH 4 - -typedef union drm_radeon_clear_rect { - float f[5]; - unsigned int ui[5]; -} drm_radeon_clear_rect_t; - -typedef struct drm_radeon_clear { - unsigned int flags; - unsigned int clear_color; - unsigned int clear_depth; - unsigned int color_mask; - unsigned int depth_mask; /* misnamed field: should be stencil */ - drm_radeon_clear_rect_t *depth_boxes; -} drm_radeon_clear_t; - -typedef struct drm_radeon_vertex { - int prim; - int idx; /* Index of vertex buffer */ - int count; /* Number of vertices in buffer */ - int discard; /* Client finished with buffer? */ -} drm_radeon_vertex_t; - -typedef struct drm_radeon_indices { - int prim; - int idx; - int start; - int end; - int discard; /* Client finished with buffer? */ -} drm_radeon_indices_t; - -/* v1.2 - obsoletes drm_radeon_vertex and drm_radeon_indices - * - allows multiple primitives and state changes in a single ioctl - * - supports driver change to emit native primitives - */ -typedef struct drm_radeon_vertex2 { - int idx; /* Index of vertex buffer */ - int discard; /* Client finished with buffer? */ - int nr_states; - drm_radeon_state_t *state; - int nr_prims; - drm_radeon_prim_t *prim; -} drm_radeon_vertex2_t; - -/* v1.3 - obsoletes drm_radeon_vertex2 - * - allows arbitrarily large cliprect list - * - allows updating of tcl packet, vector and scalar state - * - allows memory-efficient description of state updates - * - allows state to be emitted without a primitive - * (for clears, ctx switches) - * - allows more than one dma buffer to be referenced per ioctl - * - supports tcl driver - * - may be extended in future versions with new cmd types, packets - */ -typedef struct drm_radeon_cmd_buffer { - int bufsz; - char *buf; - int nbox; - struct drm_clip_rect *boxes; -} drm_radeon_cmd_buffer_t; - -typedef struct drm_radeon_tex_image { - unsigned int x, y; /* Blit coordinates */ - unsigned int width, height; - const void *data; -} drm_radeon_tex_image_t; - -typedef struct drm_radeon_texture { - unsigned int offset; - int pitch; - int format; - int width; /* Texture image coordinates */ - int height; - drm_radeon_tex_image_t *image; -} drm_radeon_texture_t; - -typedef struct drm_radeon_stipple { - unsigned int *mask; -} drm_radeon_stipple_t; - -typedef struct drm_radeon_indirect { - int idx; - int start; - int end; - int discard; -} drm_radeon_indirect_t; - -/* enum for card type parameters */ -#define RADEON_CARD_PCI 0 -#define RADEON_CARD_AGP 1 -#define RADEON_CARD_PCIE 2 - -/* 1.3: An ioctl to get parameters that aren't available to the 3d - * client any other way. - */ -#define RADEON_PARAM_GART_BUFFER_OFFSET 1 /* card offset of 1st GART buffer */ -#define RADEON_PARAM_LAST_FRAME 2 -#define RADEON_PARAM_LAST_DISPATCH 3 -#define RADEON_PARAM_LAST_CLEAR 4 -/* Added with DRM version 1.6. */ -#define RADEON_PARAM_IRQ_NR 5 -#define RADEON_PARAM_GART_BASE 6 /* card offset of GART base */ -/* Added with DRM version 1.8. */ -#define RADEON_PARAM_REGISTER_HANDLE 7 /* for drmMap() */ -#define RADEON_PARAM_STATUS_HANDLE 8 -#define RADEON_PARAM_SAREA_HANDLE 9 -#define RADEON_PARAM_GART_TEX_HANDLE 10 -#define RADEON_PARAM_SCRATCH_OFFSET 11 -#define RADEON_PARAM_CARD_TYPE 12 -#define RADEON_PARAM_VBLANK_CRTC 13 /* VBLANK CRTC */ -#define RADEON_PARAM_FB_LOCATION 14 /* FB location */ -#define RADEON_PARAM_NUM_GB_PIPES 15 /* num GB pipes */ -#define RADEON_PARAM_DEVICE_ID 16 -#define RADEON_PARAM_NUM_Z_PIPES 17 /* num Z pipes */ - -typedef struct drm_radeon_getparam { - int param; - void *value; -} drm_radeon_getparam_t; - -/* 1.6: Set up a memory manager for regions of shared memory: - */ -#define RADEON_MEM_REGION_GART 1 -#define RADEON_MEM_REGION_FB 2 - -typedef struct drm_radeon_mem_alloc { - int region; - int alignment; - int size; - int *region_offset; /* offset from start of fb or GART */ -} drm_radeon_mem_alloc_t; - -typedef struct drm_radeon_mem_free { - int region; - int region_offset; -} drm_radeon_mem_free_t; - -typedef struct drm_radeon_mem_init_heap { - int region; - int size; - int start; -} drm_radeon_mem_init_heap_t; - -/* 1.6: Userspace can request & wait on irq's: - */ -typedef struct drm_radeon_irq_emit { - int *irq_seq; -} drm_radeon_irq_emit_t; - -typedef struct drm_radeon_irq_wait { - int irq_seq; -} drm_radeon_irq_wait_t; - -/* 1.10: Clients tell the DRM where they think the framebuffer is located in - * the card's address space, via a new generic ioctl to set parameters - */ - -typedef struct drm_radeon_setparam { - unsigned int param; - __s64 value; -} drm_radeon_setparam_t; - -#define RADEON_SETPARAM_FB_LOCATION 1 /* determined framebuffer location */ -#define RADEON_SETPARAM_SWITCH_TILING 2 /* enable/disable color tiling */ -#define RADEON_SETPARAM_PCIGART_LOCATION 3 /* PCI Gart Location */ -#define RADEON_SETPARAM_NEW_MEMMAP 4 /* Use new memory map */ -#define RADEON_SETPARAM_PCIGART_TABLE_SIZE 5 /* PCI GART Table Size */ -#define RADEON_SETPARAM_VBLANK_CRTC 6 /* VBLANK CRTC */ -/* 1.14: Clients can allocate/free a surface - */ -typedef struct drm_radeon_surface_alloc { - unsigned int address; - unsigned int size; - unsigned int flags; -} drm_radeon_surface_alloc_t; - -typedef struct drm_radeon_surface_free { - unsigned int address; -} drm_radeon_surface_free_t; - -#define DRM_RADEON_VBLANK_CRTC1 1 -#define DRM_RADEON_VBLANK_CRTC2 2 - -/* - * Kernel modesetting world below. - */ -#define RADEON_GEM_DOMAIN_CPU 0x1 -#define RADEON_GEM_DOMAIN_GTT 0x2 -#define RADEON_GEM_DOMAIN_VRAM 0x4 - -struct drm_radeon_gem_info { - __u64 gart_size; - __u64 vram_size; - __u64 vram_visible; -}; - -#define RADEON_GEM_NO_BACKING_STORE (1 << 0) -#define RADEON_GEM_GTT_UC (1 << 1) -#define RADEON_GEM_GTT_WC (1 << 2) -/* BO is expected to be accessed by the CPU */ -#define RADEON_GEM_CPU_ACCESS (1 << 3) -/* CPU access is not expected to work for this BO */ -#define RADEON_GEM_NO_CPU_ACCESS (1 << 4) - -struct drm_radeon_gem_create { - __u64 size; - __u64 alignment; - __u32 handle; - __u32 initial_domain; - __u32 flags; -}; - -/* - * This is not a reliable API and you should expect it to fail for any - * number of reasons and have fallback path that do not use userptr to - * perform any operation. - */ -#define RADEON_GEM_USERPTR_READONLY (1 << 0) -#define RADEON_GEM_USERPTR_ANONONLY (1 << 1) -#define RADEON_GEM_USERPTR_VALIDATE (1 << 2) -#define RADEON_GEM_USERPTR_REGISTER (1 << 3) - -struct drm_radeon_gem_userptr { - __u64 addr; - __u64 size; - __u32 flags; - __u32 handle; -}; - -#define RADEON_TILING_MACRO 0x1 -#define RADEON_TILING_MICRO 0x2 -#define RADEON_TILING_SWAP_16BIT 0x4 -#define RADEON_TILING_R600_NO_SCANOUT RADEON_TILING_SWAP_16BIT -#define RADEON_TILING_SWAP_32BIT 0x8 -/* this object requires a surface when mapped - i.e. front buffer */ -#define RADEON_TILING_SURFACE 0x10 -#define RADEON_TILING_MICRO_SQUARE 0x20 -#define RADEON_TILING_EG_BANKW_SHIFT 8 -#define RADEON_TILING_EG_BANKW_MASK 0xf -#define RADEON_TILING_EG_BANKH_SHIFT 12 -#define RADEON_TILING_EG_BANKH_MASK 0xf -#define RADEON_TILING_EG_MACRO_TILE_ASPECT_SHIFT 16 -#define RADEON_TILING_EG_MACRO_TILE_ASPECT_MASK 0xf -#define RADEON_TILING_EG_TILE_SPLIT_SHIFT 24 -#define RADEON_TILING_EG_TILE_SPLIT_MASK 0xf -#define RADEON_TILING_EG_STENCIL_TILE_SPLIT_SHIFT 28 -#define RADEON_TILING_EG_STENCIL_TILE_SPLIT_MASK 0xf - -struct drm_radeon_gem_set_tiling { - __u32 handle; - __u32 tiling_flags; - __u32 pitch; -}; - -struct drm_radeon_gem_get_tiling { - __u32 handle; - __u32 tiling_flags; - __u32 pitch; -}; - -struct drm_radeon_gem_mmap { - __u32 handle; - __u32 pad; - __u64 offset; - __u64 size; - __u64 addr_ptr; -}; - -struct drm_radeon_gem_set_domain { - __u32 handle; - __u32 read_domains; - __u32 write_domain; -}; - -struct drm_radeon_gem_wait_idle { - __u32 handle; - __u32 pad; -}; - -struct drm_radeon_gem_busy { - __u32 handle; - __u32 domain; -}; - -struct drm_radeon_gem_pread { - /** Handle for the object being read. */ - __u32 handle; - __u32 pad; - /** Offset into the object to read from */ - __u64 offset; - /** Length of data to read */ - __u64 size; - /** Pointer to write the data into. */ - /* void *, but pointers are not 32/64 compatible */ - __u64 data_ptr; -}; - -struct drm_radeon_gem_pwrite { - /** Handle for the object being written to. */ - __u32 handle; - __u32 pad; - /** Offset into the object to write to */ - __u64 offset; - /** Length of data to write */ - __u64 size; - /** Pointer to read the data from. */ - /* void *, but pointers are not 32/64 compatible */ - __u64 data_ptr; -}; - -/* Sets or returns a value associated with a buffer. */ -struct drm_radeon_gem_op { - __u32 handle; /* buffer */ - __u32 op; /* RADEON_GEM_OP_* */ - __u64 value; /* input or return value */ -}; - -#define RADEON_GEM_OP_GET_INITIAL_DOMAIN 0 -#define RADEON_GEM_OP_SET_INITIAL_DOMAIN 1 - -#define RADEON_VA_MAP 1 -#define RADEON_VA_UNMAP 2 - -#define RADEON_VA_RESULT_OK 0 -#define RADEON_VA_RESULT_ERROR 1 -#define RADEON_VA_RESULT_VA_EXIST 2 - -#define RADEON_VM_PAGE_VALID (1 << 0) -#define RADEON_VM_PAGE_READABLE (1 << 1) -#define RADEON_VM_PAGE_WRITEABLE (1 << 2) -#define RADEON_VM_PAGE_SYSTEM (1 << 3) -#define RADEON_VM_PAGE_SNOOPED (1 << 4) - -struct drm_radeon_gem_va { - __u32 handle; - __u32 operation; - __u32 vm_id; - __u32 flags; - __u64 offset; -}; - -#define RADEON_CHUNK_ID_RELOCS 0x01 -#define RADEON_CHUNK_ID_IB 0x02 -#define RADEON_CHUNK_ID_FLAGS 0x03 -#define RADEON_CHUNK_ID_CONST_IB 0x04 - -/* The first dword of RADEON_CHUNK_ID_FLAGS is a uint32 of these flags: */ -#define RADEON_CS_KEEP_TILING_FLAGS 0x01 -#define RADEON_CS_USE_VM 0x02 -#define RADEON_CS_END_OF_FRAME 0x04 /* a hint from userspace which CS is the last one */ -/* The second dword of RADEON_CHUNK_ID_FLAGS is a uint32 that sets the ring type */ -#define RADEON_CS_RING_GFX 0 -#define RADEON_CS_RING_COMPUTE 1 -#define RADEON_CS_RING_DMA 2 -#define RADEON_CS_RING_UVD 3 -#define RADEON_CS_RING_VCE 4 -/* The third dword of RADEON_CHUNK_ID_FLAGS is a sint32 that sets the priority */ -/* 0 = normal, + = higher priority, - = lower priority */ - -struct drm_radeon_cs_chunk { - __u32 chunk_id; - __u32 length_dw; - __u64 chunk_data; -}; - -/* drm_radeon_cs_reloc.flags */ -#define RADEON_RELOC_PRIO_MASK (0xf << 0) - -struct drm_radeon_cs_reloc { - __u32 handle; - __u32 read_domains; - __u32 write_domain; - __u32 flags; -}; - -struct drm_radeon_cs { - __u32 num_chunks; - __u32 cs_id; - /* this points to __u64 * which point to cs chunks */ - __u64 chunks; - /* updates to the limits after this CS ioctl */ - __u64 gart_limit; - __u64 vram_limit; -}; - -#define RADEON_INFO_DEVICE_ID 0x00 -#define RADEON_INFO_NUM_GB_PIPES 0x01 -#define RADEON_INFO_NUM_Z_PIPES 0x02 -#define RADEON_INFO_ACCEL_WORKING 0x03 -#define RADEON_INFO_CRTC_FROM_ID 0x04 -#define RADEON_INFO_ACCEL_WORKING2 0x05 -#define RADEON_INFO_TILING_CONFIG 0x06 -#define RADEON_INFO_WANT_HYPERZ 0x07 -#define RADEON_INFO_WANT_CMASK 0x08 /* get access to CMASK on r300 */ -#define RADEON_INFO_CLOCK_CRYSTAL_FREQ 0x09 /* clock crystal frequency */ -#define RADEON_INFO_NUM_BACKENDS 0x0a /* DB/backends for r600+ - need for OQ */ -#define RADEON_INFO_NUM_TILE_PIPES 0x0b /* tile pipes for r600+ */ -#define RADEON_INFO_FUSION_GART_WORKING 0x0c /* fusion writes to GTT were broken before this */ -#define RADEON_INFO_BACKEND_MAP 0x0d /* pipe to backend map, needed by mesa */ -/* virtual address start, va < start are reserved by the kernel */ -#define RADEON_INFO_VA_START 0x0e -/* maximum size of ib using the virtual memory cs */ -#define RADEON_INFO_IB_VM_MAX_SIZE 0x0f -/* max pipes - needed for compute shaders */ -#define RADEON_INFO_MAX_PIPES 0x10 -/* timestamp for GL_ARB_timer_query (OpenGL), returns the current GPU clock */ -#define RADEON_INFO_TIMESTAMP 0x11 -/* max shader engines (SE) - needed for geometry shaders, etc. */ -#define RADEON_INFO_MAX_SE 0x12 -/* max SH per SE */ -#define RADEON_INFO_MAX_SH_PER_SE 0x13 -/* fast fb access is enabled */ -#define RADEON_INFO_FASTFB_WORKING 0x14 -/* query if a RADEON_CS_RING_* submission is supported */ -#define RADEON_INFO_RING_WORKING 0x15 -/* SI tile mode array */ -#define RADEON_INFO_SI_TILE_MODE_ARRAY 0x16 -/* query if CP DMA is supported on the compute ring */ -#define RADEON_INFO_SI_CP_DMA_COMPUTE 0x17 -/* CIK macrotile mode array */ -#define RADEON_INFO_CIK_MACROTILE_MODE_ARRAY 0x18 -/* query the number of render backends */ -#define RADEON_INFO_SI_BACKEND_ENABLED_MASK 0x19 -/* max engine clock - needed for OpenCL */ -#define RADEON_INFO_MAX_SCLK 0x1a -/* version of VCE firmware */ -#define RADEON_INFO_VCE_FW_VERSION 0x1b -/* version of VCE feedback */ -#define RADEON_INFO_VCE_FB_VERSION 0x1c -#define RADEON_INFO_NUM_BYTES_MOVED 0x1d -#define RADEON_INFO_VRAM_USAGE 0x1e -#define RADEON_INFO_GTT_USAGE 0x1f -#define RADEON_INFO_ACTIVE_CU_COUNT 0x20 -#define RADEON_INFO_CURRENT_GPU_TEMP 0x21 -#define RADEON_INFO_CURRENT_GPU_SCLK 0x22 -#define RADEON_INFO_CURRENT_GPU_MCLK 0x23 -#define RADEON_INFO_READ_REG 0x24 -#define RADEON_INFO_VA_UNMAP_WORKING 0x25 -#define RADEON_INFO_GPU_RESET_COUNTER 0x26 - -struct drm_radeon_info { - __u32 request; - __u32 pad; - __u64 value; -}; - -/* Those correspond to the tile index to use, this is to explicitly state - * the API that is implicitly defined by the tile mode array. - */ -#define SI_TILE_MODE_COLOR_LINEAR_ALIGNED 8 -#define SI_TILE_MODE_COLOR_1D 13 -#define SI_TILE_MODE_COLOR_1D_SCANOUT 9 -#define SI_TILE_MODE_COLOR_2D_8BPP 14 -#define SI_TILE_MODE_COLOR_2D_16BPP 15 -#define SI_TILE_MODE_COLOR_2D_32BPP 16 -#define SI_TILE_MODE_COLOR_2D_64BPP 17 -#define SI_TILE_MODE_COLOR_2D_SCANOUT_16BPP 11 -#define SI_TILE_MODE_COLOR_2D_SCANOUT_32BPP 12 -#define SI_TILE_MODE_DEPTH_STENCIL_1D 4 -#define SI_TILE_MODE_DEPTH_STENCIL_2D 0 -#define SI_TILE_MODE_DEPTH_STENCIL_2D_2AA 3 -#define SI_TILE_MODE_DEPTH_STENCIL_2D_4AA 3 -#define SI_TILE_MODE_DEPTH_STENCIL_2D_8AA 2 - -#define CIK_TILE_MODE_DEPTH_STENCIL_1D 5 - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/libdrm/radeon_surface.h b/prebuilts/x86_64/include/libdrm/radeon_surface.h deleted file mode 100644 index af7cab6..0000000 --- a/prebuilts/x86_64/include/libdrm/radeon_surface.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright © 2011 Red Hat All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ -/* - * Authors: - * Jérôme Glisse - */ -#ifndef RADEON_SURFACE_H -#define RADEON_SURFACE_H - -/* Note : - * - * For texture array, the n layer are stored one after the other within each - * mipmap level. 0 value for field than can be hint is always valid. - */ - -#define RADEON_SURF_MAX_LEVEL 32 - -#define RADEON_SURF_TYPE_MASK 0xFF -#define RADEON_SURF_TYPE_SHIFT 0 -#define RADEON_SURF_TYPE_1D 0 -#define RADEON_SURF_TYPE_2D 1 -#define RADEON_SURF_TYPE_3D 2 -#define RADEON_SURF_TYPE_CUBEMAP 3 -#define RADEON_SURF_TYPE_1D_ARRAY 4 -#define RADEON_SURF_TYPE_2D_ARRAY 5 -#define RADEON_SURF_MODE_MASK 0xFF -#define RADEON_SURF_MODE_SHIFT 8 -#define RADEON_SURF_MODE_LINEAR 0 -#define RADEON_SURF_MODE_LINEAR_ALIGNED 1 -#define RADEON_SURF_MODE_1D 2 -#define RADEON_SURF_MODE_2D 3 -#define RADEON_SURF_SCANOUT (1 << 16) -#define RADEON_SURF_ZBUFFER (1 << 17) -#define RADEON_SURF_SBUFFER (1 << 18) -#define RADEON_SURF_Z_OR_SBUFFER (RADEON_SURF_ZBUFFER | RADEON_SURF_SBUFFER) -#define RADEON_SURF_HAS_SBUFFER_MIPTREE (1 << 19) -#define RADEON_SURF_HAS_TILE_MODE_INDEX (1 << 20) -#define RADEON_SURF_FMASK (1 << 21) - -#define RADEON_SURF_GET(v, field) (((v) >> RADEON_SURF_ ## field ## _SHIFT) & RADEON_SURF_ ## field ## _MASK) -#define RADEON_SURF_SET(v, field) (((v) & RADEON_SURF_ ## field ## _MASK) << RADEON_SURF_ ## field ## _SHIFT) -#define RADEON_SURF_CLR(v, field) ((v) & ~(RADEON_SURF_ ## field ## _MASK << RADEON_SURF_ ## field ## _SHIFT)) - -/* first field up to mode need to match r6 struct so that we can reuse - * same function for linear & linear aligned - */ -struct radeon_surface_level { - uint64_t offset; - uint64_t slice_size; - uint32_t npix_x; - uint32_t npix_y; - uint32_t npix_z; - uint32_t nblk_x; - uint32_t nblk_y; - uint32_t nblk_z; - uint32_t pitch_bytes; - uint32_t mode; -}; - -enum si_tiling_mode { - SI_TILING_AUTO = 0, - - SI_TILING_COLOR_1D, - SI_TILING_COLOR_1D_SCANOUT, - SI_TILING_COLOR_2D_8BPP, - SI_TILING_COLOR_2D_16BPP, - SI_TILING_COLOR_2D_32BPP, - SI_TILING_COLOR_2D_64BPP, - SI_TILING_COLOR_2D_SCANOUT_16BPP, - SI_TILING_COLOR_2D_SCANOUT_32BPP, - SI_TILING_COLOR_LINEAR, - - SI_TILING_STENCIL_1D, - SI_TILING_STENCIL_2D, - SI_TILING_STENCIL_2D_2AA, - SI_TILING_STENCIL_2D_4AA, - SI_TILING_STENCIL_2D_8AA, - - SI_TILING_DEPTH_1D, - SI_TILING_DEPTH_2D, - SI_TILING_DEPTH_2D_2AA, - SI_TILING_DEPTH_2D_4AA, - SI_TILING_DEPTH_2D_8AA, - - SI_TILING_LAST_MODE, -}; - -struct radeon_surface { - uint32_t npix_x; - uint32_t npix_y; - uint32_t npix_z; - uint32_t blk_w; - uint32_t blk_h; - uint32_t blk_d; - uint32_t array_size; - uint32_t last_level; - uint32_t bpe; - uint32_t nsamples; - uint32_t flags; - /* Following is updated/fill by the allocator. It's allowed to - * set some of the value but they are use as hint and can be - * overridden (things lile bankw/bankh on evergreen for - * instance). - */ - uint64_t bo_size; - uint64_t bo_alignment; - /* apply to eg */ - uint32_t bankw; - uint32_t bankh; - uint32_t mtilea; - uint32_t tile_split; - uint32_t stencil_tile_split; - uint64_t stencil_offset; - struct radeon_surface_level level[RADEON_SURF_MAX_LEVEL]; - struct radeon_surface_level stencil_level[RADEON_SURF_MAX_LEVEL]; - uint32_t tiling_index[RADEON_SURF_MAX_LEVEL]; - uint32_t stencil_tiling_index[RADEON_SURF_MAX_LEVEL]; -}; - -struct radeon_surface_manager *radeon_surface_manager_new(int fd); -void radeon_surface_manager_free(struct radeon_surface_manager *surf_man); -int radeon_surface_init(struct radeon_surface_manager *surf_man, - struct radeon_surface *surf); -int radeon_surface_best(struct radeon_surface_manager *surf_man, - struct radeon_surface *surf); - -#endif diff --git a/prebuilts/x86_64/include/libdrm/savage_drm.h b/prebuilts/x86_64/include/libdrm/savage_drm.h deleted file mode 100644 index 1a91234..0000000 --- a/prebuilts/x86_64/include/libdrm/savage_drm.h +++ /dev/null @@ -1,220 +0,0 @@ -/* savage_drm.h -- Public header for the savage driver - * - * Copyright 2004 Felix Kuehling - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sub license, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL FELIX KUEHLING BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef __SAVAGE_DRM_H__ -#define __SAVAGE_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef __SAVAGE_SAREA_DEFINES__ -#define __SAVAGE_SAREA_DEFINES__ - -/* 2 heaps (1 for card, 1 for agp), each divided into up to 128 - * regions, subject to a minimum region size of (1<<16) == 64k. - * - * Clients may subdivide regions internally, but when sharing between - * clients, the region size is the minimum granularity. - */ - -#define SAVAGE_CARD_HEAP 0 -#define SAVAGE_AGP_HEAP 1 -#define SAVAGE_NR_TEX_HEAPS 2 -#define SAVAGE_NR_TEX_REGIONS 16 -#define SAVAGE_LOG_MIN_TEX_REGION_SIZE 16 - -#endif /* __SAVAGE_SAREA_DEFINES__ */ - -typedef struct _drm_savage_sarea { - /* LRU lists for texture memory in agp space and on the card. - */ - struct drm_tex_region texList[SAVAGE_NR_TEX_HEAPS][SAVAGE_NR_TEX_REGIONS + - 1]; - unsigned int texAge[SAVAGE_NR_TEX_HEAPS]; - - /* Mechanism to validate card state. - */ - int ctxOwner; -} drm_savage_sarea_t, *drm_savage_sarea_ptr; - -/* Savage-specific ioctls - */ -#define DRM_SAVAGE_BCI_INIT 0x00 -#define DRM_SAVAGE_BCI_CMDBUF 0x01 -#define DRM_SAVAGE_BCI_EVENT_EMIT 0x02 -#define DRM_SAVAGE_BCI_EVENT_WAIT 0x03 - -#define DRM_IOCTL_SAVAGE_BCI_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_INIT, drm_savage_init_t) -#define DRM_IOCTL_SAVAGE_BCI_CMDBUF DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_CMDBUF, drm_savage_cmdbuf_t) -#define DRM_IOCTL_SAVAGE_BCI_EVENT_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_SAVAGE_BCI_EVENT_EMIT, drm_savage_event_emit_t) -#define DRM_IOCTL_SAVAGE_BCI_EVENT_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_EVENT_WAIT, drm_savage_event_wait_t) - -#define SAVAGE_DMA_PCI 1 -#define SAVAGE_DMA_AGP 3 -typedef struct drm_savage_init { - enum { - SAVAGE_INIT_BCI = 1, - SAVAGE_CLEANUP_BCI = 2 - } func; - unsigned int sarea_priv_offset; - - /* some parameters */ - unsigned int cob_size; - unsigned int bci_threshold_lo, bci_threshold_hi; - unsigned int dma_type; - - /* frame buffer layout */ - unsigned int fb_bpp; - unsigned int front_offset, front_pitch; - unsigned int back_offset, back_pitch; - unsigned int depth_bpp; - unsigned int depth_offset, depth_pitch; - - /* local textures */ - unsigned int texture_offset; - unsigned int texture_size; - - /* physical locations of non-permanent maps */ - unsigned long status_offset; - unsigned long buffers_offset; - unsigned long agp_textures_offset; - unsigned long cmd_dma_offset; -} drm_savage_init_t; - -typedef union drm_savage_cmd_header drm_savage_cmd_header_t; -typedef struct drm_savage_cmdbuf { - /* command buffer in client's address space */ - drm_savage_cmd_header_t *cmd_addr; - unsigned int size; /* size of the command buffer in 64bit units */ - - unsigned int dma_idx; /* DMA buffer index to use */ - int discard; /* discard DMA buffer when done */ - /* vertex buffer in client's address space */ - unsigned int *vb_addr; - unsigned int vb_size; /* size of client vertex buffer in bytes */ - unsigned int vb_stride; /* stride of vertices in 32bit words */ - /* boxes in client's address space */ - struct drm_clip_rect *box_addr; - unsigned int nbox; /* number of clipping boxes */ -} drm_savage_cmdbuf_t; - -#define SAVAGE_WAIT_2D 0x1 /* wait for 2D idle before updating event tag */ -#define SAVAGE_WAIT_3D 0x2 /* wait for 3D idle before updating event tag */ -#define SAVAGE_WAIT_IRQ 0x4 /* emit or wait for IRQ, not implemented yet */ -typedef struct drm_savage_event { - unsigned int count; - unsigned int flags; -} drm_savage_event_emit_t, drm_savage_event_wait_t; - -/* Commands for the cmdbuf ioctl - */ -#define SAVAGE_CMD_STATE 0 /* a range of state registers */ -#define SAVAGE_CMD_DMA_PRIM 1 /* vertices from DMA buffer */ -#define SAVAGE_CMD_VB_PRIM 2 /* vertices from client vertex buffer */ -#define SAVAGE_CMD_DMA_IDX 3 /* indexed vertices from DMA buffer */ -#define SAVAGE_CMD_VB_IDX 4 /* indexed vertices client vertex buffer */ -#define SAVAGE_CMD_CLEAR 5 /* clear buffers */ -#define SAVAGE_CMD_SWAP 6 /* swap buffers */ - -/* Primitive types -*/ -#define SAVAGE_PRIM_TRILIST 0 /* triangle list */ -#define SAVAGE_PRIM_TRISTRIP 1 /* triangle strip */ -#define SAVAGE_PRIM_TRIFAN 2 /* triangle fan */ -#define SAVAGE_PRIM_TRILIST_201 3 /* reorder verts for correct flat - * shading on s3d */ - -/* Skip flags (vertex format) - */ -#define SAVAGE_SKIP_Z 0x01 -#define SAVAGE_SKIP_W 0x02 -#define SAVAGE_SKIP_C0 0x04 -#define SAVAGE_SKIP_C1 0x08 -#define SAVAGE_SKIP_S0 0x10 -#define SAVAGE_SKIP_T0 0x20 -#define SAVAGE_SKIP_ST0 0x30 -#define SAVAGE_SKIP_S1 0x40 -#define SAVAGE_SKIP_T1 0x80 -#define SAVAGE_SKIP_ST1 0xc0 -#define SAVAGE_SKIP_ALL_S3D 0x3f -#define SAVAGE_SKIP_ALL_S4 0xff - -/* Buffer names for clear command - */ -#define SAVAGE_FRONT 0x1 -#define SAVAGE_BACK 0x2 -#define SAVAGE_DEPTH 0x4 - -/* 64-bit command header - */ -union drm_savage_cmd_header { - struct { - unsigned char cmd; /* command */ - unsigned char pad0; - unsigned short pad1; - unsigned short pad2; - unsigned short pad3; - } cmd; /* generic */ - struct { - unsigned char cmd; - unsigned char global; /* need idle engine? */ - unsigned short count; /* number of consecutive registers */ - unsigned short start; /* first register */ - unsigned short pad3; - } state; /* SAVAGE_CMD_STATE */ - struct { - unsigned char cmd; - unsigned char prim; /* primitive type */ - unsigned short skip; /* vertex format (skip flags) */ - unsigned short count; /* number of vertices */ - unsigned short start; /* first vertex in DMA/vertex buffer */ - } prim; /* SAVAGE_CMD_DMA_PRIM, SAVAGE_CMD_VB_PRIM */ - struct { - unsigned char cmd; - unsigned char prim; - unsigned short skip; - unsigned short count; /* number of indices that follow */ - unsigned short pad3; - } idx; /* SAVAGE_CMD_DMA_IDX, SAVAGE_CMD_VB_IDX */ - struct { - unsigned char cmd; - unsigned char pad0; - unsigned short pad1; - unsigned int flags; - } clear0; /* SAVAGE_CMD_CLEAR */ - struct { - unsigned int mask; - unsigned int value; - } clear1; /* SAVAGE_CMD_CLEAR data */ -}; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/libdrm/sis_drm.h b/prebuilts/x86_64/include/libdrm/sis_drm.h deleted file mode 100644 index 8e51bb9..0000000 --- a/prebuilts/x86_64/include/libdrm/sis_drm.h +++ /dev/null @@ -1,77 +0,0 @@ -/* sis_drv.h -- Private header for sis driver -*- linux-c -*- */ -/* - * Copyright 2005 Eric Anholt - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - */ - -#ifndef __SIS_DRM_H__ -#define __SIS_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* SiS specific ioctls */ -#define NOT_USED_0_3 -#define DRM_SIS_FB_ALLOC 0x04 -#define DRM_SIS_FB_FREE 0x05 -#define NOT_USED_6_12 -#define DRM_SIS_AGP_INIT 0x13 -#define DRM_SIS_AGP_ALLOC 0x14 -#define DRM_SIS_AGP_FREE 0x15 -#define DRM_SIS_FB_INIT 0x16 - -#define DRM_IOCTL_SIS_FB_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_FB_ALLOC, drm_sis_mem_t) -#define DRM_IOCTL_SIS_FB_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_FB_FREE, drm_sis_mem_t) -#define DRM_IOCTL_SIS_AGP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_AGP_INIT, drm_sis_agp_t) -#define DRM_IOCTL_SIS_AGP_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_SIS_AGP_ALLOC, drm_sis_mem_t) -#define DRM_IOCTL_SIS_AGP_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_AGP_FREE, drm_sis_mem_t) -#define DRM_IOCTL_SIS_FB_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_SIS_FB_INIT, drm_sis_fb_t) -/* -#define DRM_IOCTL_SIS_FLIP DRM_IOW( 0x48, drm_sis_flip_t) -#define DRM_IOCTL_SIS_FLIP_INIT DRM_IO( 0x49) -#define DRM_IOCTL_SIS_FLIP_FINAL DRM_IO( 0x50) -*/ - -typedef struct { - int context; - unsigned int offset; - unsigned int size; - unsigned long free; -} drm_sis_mem_t; - -typedef struct { - unsigned int offset, size; -} drm_sis_agp_t; - -typedef struct { - unsigned int offset, size; -} drm_sis_fb_t; - -#if defined(__cplusplus) -} -#endif - -#endif /* __SIS_DRM_H__ */ diff --git a/prebuilts/x86_64/include/libdrm/tegra_drm.h b/prebuilts/x86_64/include/libdrm/tegra_drm.h deleted file mode 100644 index 94cfc30..0000000 --- a/prebuilts/x86_64/include/libdrm/tegra_drm.h +++ /dev/null @@ -1,1060 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/* Copyright (c) 2012-2020 NVIDIA Corporation */ - -#ifndef _UAPI_TEGRA_DRM_H_ -#define _UAPI_TEGRA_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Tegra DRM legacy UAPI. Only enabled with STAGING */ - -#define DRM_TEGRA_GEM_CREATE_TILED (1 << 0) -#define DRM_TEGRA_GEM_CREATE_BOTTOM_UP (1 << 1) - -/** - * struct drm_tegra_gem_create - parameters for the GEM object creation IOCTL - */ -struct drm_tegra_gem_create { - /** - * @size: - * - * The size, in bytes, of the buffer object to be created. - */ - __u64 size; - - /** - * @flags: - * - * A bitmask of flags that influence the creation of GEM objects: - * - * DRM_TEGRA_GEM_CREATE_TILED - * Use the 16x16 tiling format for this buffer. - * - * DRM_TEGRA_GEM_CREATE_BOTTOM_UP - * The buffer has a bottom-up layout. - */ - __u32 flags; - - /** - * @handle: - * - * The handle of the created GEM object. Set by the kernel upon - * successful completion of the IOCTL. - */ - __u32 handle; -}; - -/** - * struct drm_tegra_gem_mmap - parameters for the GEM mmap IOCTL - */ -struct drm_tegra_gem_mmap { - /** - * @handle: - * - * Handle of the GEM object to obtain an mmap offset for. - */ - __u32 handle; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; - - /** - * @offset: - * - * The mmap offset for the given GEM object. Set by the kernel upon - * successful completion of the IOCTL. - */ - __u64 offset; -}; - -/** - * struct drm_tegra_syncpt_read - parameters for the read syncpoint IOCTL - */ -struct drm_tegra_syncpt_read { - /** - * @id: - * - * ID of the syncpoint to read the current value from. - */ - __u32 id; - - /** - * @value: - * - * The current syncpoint value. Set by the kernel upon successful - * completion of the IOCTL. - */ - __u32 value; -}; - -/** - * struct drm_tegra_syncpt_incr - parameters for the increment syncpoint IOCTL - */ -struct drm_tegra_syncpt_incr { - /** - * @id: - * - * ID of the syncpoint to increment. - */ - __u32 id; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_syncpt_wait - parameters for the wait syncpoint IOCTL - */ -struct drm_tegra_syncpt_wait { - /** - * @id: - * - * ID of the syncpoint to wait on. - */ - __u32 id; - - /** - * @thresh: - * - * Threshold value for which to wait. - */ - __u32 thresh; - - /** - * @timeout: - * - * Timeout, in milliseconds, to wait. - */ - __u32 timeout; - - /** - * @value: - * - * The new syncpoint value after the wait. Set by the kernel upon - * successful completion of the IOCTL. - */ - __u32 value; -}; - -#define DRM_TEGRA_NO_TIMEOUT (0xffffffff) - -/** - * struct drm_tegra_open_channel - parameters for the open channel IOCTL - */ -struct drm_tegra_open_channel { - /** - * @client: - * - * The client ID for this channel. - */ - __u32 client; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; - - /** - * @context: - * - * The application context of this channel. Set by the kernel upon - * successful completion of the IOCTL. This context needs to be passed - * to the DRM_TEGRA_CHANNEL_CLOSE or the DRM_TEGRA_SUBMIT IOCTLs. - */ - __u64 context; -}; - -/** - * struct drm_tegra_close_channel - parameters for the close channel IOCTL - */ -struct drm_tegra_close_channel { - /** - * @context: - * - * The application context of this channel. This is obtained from the - * DRM_TEGRA_OPEN_CHANNEL IOCTL. - */ - __u64 context; -}; - -/** - * struct drm_tegra_get_syncpt - parameters for the get syncpoint IOCTL - */ -struct drm_tegra_get_syncpt { - /** - * @context: - * - * The application context identifying the channel for which to obtain - * the syncpoint ID. - */ - __u64 context; - - /** - * @index: - * - * Index of the client syncpoint for which to obtain the ID. - */ - __u32 index; - - /** - * @id: - * - * The ID of the given syncpoint. Set by the kernel upon successful - * completion of the IOCTL. - */ - __u32 id; -}; - -/** - * struct drm_tegra_get_syncpt_base - parameters for the get wait base IOCTL - */ -struct drm_tegra_get_syncpt_base { - /** - * @context: - * - * The application context identifying for which channel to obtain the - * wait base. - */ - __u64 context; - - /** - * @syncpt: - * - * ID of the syncpoint for which to obtain the wait base. - */ - __u32 syncpt; - - /** - * @id: - * - * The ID of the wait base corresponding to the client syncpoint. Set - * by the kernel upon successful completion of the IOCTL. - */ - __u32 id; -}; - -/** - * struct drm_tegra_syncpt - syncpoint increment operation - */ -struct drm_tegra_syncpt { - /** - * @id: - * - * ID of the syncpoint to operate on. - */ - __u32 id; - - /** - * @incrs: - * - * Number of increments to perform for the syncpoint. - */ - __u32 incrs; -}; - -/** - * struct drm_tegra_cmdbuf - structure describing a command buffer - */ -struct drm_tegra_cmdbuf { - /** - * @handle: - * - * Handle to a GEM object containing the command buffer. - */ - __u32 handle; - - /** - * @offset: - * - * Offset, in bytes, into the GEM object identified by @handle at - * which the command buffer starts. - */ - __u32 offset; - - /** - * @words: - * - * Number of 32-bit words in this command buffer. - */ - __u32 words; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_reloc - GEM object relocation structure - */ -struct drm_tegra_reloc { - struct { - /** - * @cmdbuf.handle: - * - * Handle to the GEM object containing the command buffer for - * which to perform this GEM object relocation. - */ - __u32 handle; - - /** - * @cmdbuf.offset: - * - * Offset, in bytes, into the command buffer at which to - * insert the relocated address. - */ - __u32 offset; - } cmdbuf; - struct { - /** - * @target.handle: - * - * Handle to the GEM object to be relocated. - */ - __u32 handle; - - /** - * @target.offset: - * - * Offset, in bytes, into the target GEM object at which the - * relocated data starts. - */ - __u32 offset; - } target; - - /** - * @shift: - * - * The number of bits by which to shift relocated addresses. - */ - __u32 shift; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_waitchk - wait check structure - */ -struct drm_tegra_waitchk { - /** - * @handle: - * - * Handle to the GEM object containing a command stream on which to - * perform the wait check. - */ - __u32 handle; - - /** - * @offset: - * - * Offset, in bytes, of the location in the command stream to perform - * the wait check on. - */ - __u32 offset; - - /** - * @syncpt: - * - * ID of the syncpoint to wait check. - */ - __u32 syncpt; - - /** - * @thresh: - * - * Threshold value for which to check. - */ - __u32 thresh; -}; - -/** - * struct drm_tegra_submit - job submission structure - */ -struct drm_tegra_submit { - /** - * @context: - * - * The application context identifying the channel to use for the - * execution of this job. - */ - __u64 context; - - /** - * @num_syncpts: - * - * The number of syncpoints operated on by this job. This defines the - * length of the array pointed to by @syncpts. - */ - __u32 num_syncpts; - - /** - * @num_cmdbufs: - * - * The number of command buffers to execute as part of this job. This - * defines the length of the array pointed to by @cmdbufs. - */ - __u32 num_cmdbufs; - - /** - * @num_relocs: - * - * The number of relocations to perform before executing this job. - * This defines the length of the array pointed to by @relocs. - */ - __u32 num_relocs; - - /** - * @num_waitchks: - * - * The number of wait checks to perform as part of this job. This - * defines the length of the array pointed to by @waitchks. - */ - __u32 num_waitchks; - - /** - * @waitchk_mask: - * - * Bitmask of valid wait checks. - */ - __u32 waitchk_mask; - - /** - * @timeout: - * - * Timeout, in milliseconds, before this job is cancelled. - */ - __u32 timeout; - - /** - * @syncpts: - * - * A pointer to an array of &struct drm_tegra_syncpt structures that - * specify the syncpoint operations performed as part of this job. - * The number of elements in the array must be equal to the value - * given by @num_syncpts. - */ - __u64 syncpts; - - /** - * @cmdbufs: - * - * A pointer to an array of &struct drm_tegra_cmdbuf structures that - * define the command buffers to execute as part of this job. The - * number of elements in the array must be equal to the value given - * by @num_syncpts. - */ - __u64 cmdbufs; - - /** - * @relocs: - * - * A pointer to an array of &struct drm_tegra_reloc structures that - * specify the relocations that need to be performed before executing - * this job. The number of elements in the array must be equal to the - * value given by @num_relocs. - */ - __u64 relocs; - - /** - * @waitchks: - * - * A pointer to an array of &struct drm_tegra_waitchk structures that - * specify the wait checks to be performed while executing this job. - * The number of elements in the array must be equal to the value - * given by @num_waitchks. - */ - __u64 waitchks; - - /** - * @fence: - * - * The threshold of the syncpoint associated with this job after it - * has been completed. Set by the kernel upon successful completion of - * the IOCTL. This can be used with the DRM_TEGRA_SYNCPT_WAIT IOCTL to - * wait for this job to be finished. - */ - __u32 fence; - - /** - * @reserved: - * - * This field is reserved for future use. Must be 0. - */ - __u32 reserved[5]; -}; - -#define DRM_TEGRA_GEM_TILING_MODE_PITCH 0 -#define DRM_TEGRA_GEM_TILING_MODE_TILED 1 -#define DRM_TEGRA_GEM_TILING_MODE_BLOCK 2 - -/** - * struct drm_tegra_gem_set_tiling - parameters for the set tiling IOCTL - */ -struct drm_tegra_gem_set_tiling { - /** - * @handle: - * - * Handle to the GEM object for which to set the tiling parameters. - */ - __u32 handle; - - /** - * @mode: - * - * The tiling mode to set. Must be one of: - * - * DRM_TEGRA_GEM_TILING_MODE_PITCH - * pitch linear format - * - * DRM_TEGRA_GEM_TILING_MODE_TILED - * 16x16 tiling format - * - * DRM_TEGRA_GEM_TILING_MODE_BLOCK - * 16Bx2 tiling format - */ - __u32 mode; - - /** - * @value: - * - * The value to set for the tiling mode parameter. - */ - __u32 value; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -/** - * struct drm_tegra_gem_get_tiling - parameters for the get tiling IOCTL - */ -struct drm_tegra_gem_get_tiling { - /** - * @handle: - * - * Handle to the GEM object for which to query the tiling parameters. - */ - __u32 handle; - - /** - * @mode: - * - * The tiling mode currently associated with the GEM object. Set by - * the kernel upon successful completion of the IOCTL. - */ - __u32 mode; - - /** - * @value: - * - * The tiling mode parameter currently associated with the GEM object. - * Set by the kernel upon successful completion of the IOCTL. - */ - __u32 value; - - /** - * @pad: - * - * Structure padding that may be used in the future. Must be 0. - */ - __u32 pad; -}; - -#define DRM_TEGRA_GEM_BOTTOM_UP (1 << 0) -#define DRM_TEGRA_GEM_FLAGS (DRM_TEGRA_GEM_BOTTOM_UP) - -/** - * struct drm_tegra_gem_set_flags - parameters for the set flags IOCTL - */ -struct drm_tegra_gem_set_flags { - /** - * @handle: - * - * Handle to the GEM object for which to set the flags. - */ - __u32 handle; - - /** - * @flags: - * - * The flags to set for the GEM object. - */ - __u32 flags; -}; - -/** - * struct drm_tegra_gem_get_flags - parameters for the get flags IOCTL - */ -struct drm_tegra_gem_get_flags { - /** - * @handle: - * - * Handle to the GEM object for which to query the flags. - */ - __u32 handle; - - /** - * @flags: - * - * The flags currently associated with the GEM object. Set by the - * kernel upon successful completion of the IOCTL. - */ - __u32 flags; -}; - -#define DRM_TEGRA_GEM_CREATE 0x00 -#define DRM_TEGRA_GEM_MMAP 0x01 -#define DRM_TEGRA_SYNCPT_READ 0x02 -#define DRM_TEGRA_SYNCPT_INCR 0x03 -#define DRM_TEGRA_SYNCPT_WAIT 0x04 -#define DRM_TEGRA_OPEN_CHANNEL 0x05 -#define DRM_TEGRA_CLOSE_CHANNEL 0x06 -#define DRM_TEGRA_GET_SYNCPT 0x07 -#define DRM_TEGRA_SUBMIT 0x08 -#define DRM_TEGRA_GET_SYNCPT_BASE 0x09 -#define DRM_TEGRA_GEM_SET_TILING 0x0a -#define DRM_TEGRA_GEM_GET_TILING 0x0b -#define DRM_TEGRA_GEM_SET_FLAGS 0x0c -#define DRM_TEGRA_GEM_GET_FLAGS 0x0d - -#define DRM_IOCTL_TEGRA_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_CREATE, struct drm_tegra_gem_create) -#define DRM_IOCTL_TEGRA_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_MMAP, struct drm_tegra_gem_mmap) -#define DRM_IOCTL_TEGRA_SYNCPT_READ DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_READ, struct drm_tegra_syncpt_read) -#define DRM_IOCTL_TEGRA_SYNCPT_INCR DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_INCR, struct drm_tegra_syncpt_incr) -#define DRM_IOCTL_TEGRA_SYNCPT_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_WAIT, struct drm_tegra_syncpt_wait) -#define DRM_IOCTL_TEGRA_OPEN_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_OPEN_CHANNEL, struct drm_tegra_open_channel) -#define DRM_IOCTL_TEGRA_CLOSE_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_CLOSE_CHANNEL, struct drm_tegra_close_channel) -#define DRM_IOCTL_TEGRA_GET_SYNCPT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT, struct drm_tegra_get_syncpt) -#define DRM_IOCTL_TEGRA_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SUBMIT, struct drm_tegra_submit) -#define DRM_IOCTL_TEGRA_GET_SYNCPT_BASE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT_BASE, struct drm_tegra_get_syncpt_base) -#define DRM_IOCTL_TEGRA_GEM_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_TILING, struct drm_tegra_gem_set_tiling) -#define DRM_IOCTL_TEGRA_GEM_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_TILING, struct drm_tegra_gem_get_tiling) -#define DRM_IOCTL_TEGRA_GEM_SET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_FLAGS, struct drm_tegra_gem_set_flags) -#define DRM_IOCTL_TEGRA_GEM_GET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_FLAGS, struct drm_tegra_gem_get_flags) - -/* New Tegra DRM UAPI */ - -/* - * Reported by the driver in the `capabilities` field. - * - * DRM_TEGRA_CHANNEL_CAP_CACHE_COHERENT: If set, the engine is cache coherent - * with regard to the system memory. - */ -#define DRM_TEGRA_CHANNEL_CAP_CACHE_COHERENT (1 << 0) - -struct drm_tegra_channel_open { - /** - * @host1x_class: [in] - * - * Host1x class of the engine that will be programmed using this - * channel. - */ - __u32 host1x_class; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * @context: [out] - * - * Opaque identifier corresponding to the opened channel. - */ - __u32 context; - - /** - * @version: [out] - * - * Version of the engine hardware. This can be used by userspace - * to determine how the engine needs to be programmed. - */ - __u32 version; - - /** - * @capabilities: [out] - * - * Flags describing the hardware capabilities. - */ - __u32 capabilities; - __u32 padding; -}; - -struct drm_tegra_channel_close { - /** - * @context: [in] - * - * Identifier of the channel to close. - */ - __u32 context; - __u32 padding; -}; - -/* - * Mapping flags that can be used to influence how the mapping is created. - * - * DRM_TEGRA_CHANNEL_MAP_READ: create mapping that allows HW read access - * DRM_TEGRA_CHANNEL_MAP_WRITE: create mapping that allows HW write access - */ -#define DRM_TEGRA_CHANNEL_MAP_READ (1 << 0) -#define DRM_TEGRA_CHANNEL_MAP_WRITE (1 << 1) -#define DRM_TEGRA_CHANNEL_MAP_READ_WRITE (DRM_TEGRA_CHANNEL_MAP_READ | \ - DRM_TEGRA_CHANNEL_MAP_WRITE) - -struct drm_tegra_channel_map { - /** - * @context: [in] - * - * Identifier of the channel to which make memory available for. - */ - __u32 context; - - /** - * @handle: [in] - * - * GEM handle of the memory to map. - */ - __u32 handle; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * @mapping: [out] - * - * Identifier corresponding to the mapping, to be used for - * relocations or unmapping later. - */ - __u32 mapping; -}; - -struct drm_tegra_channel_unmap { - /** - * @context: [in] - * - * Channel identifier of the channel to unmap memory from. - */ - __u32 context; - - /** - * @mapping: [in] - * - * Mapping identifier of the memory mapping to unmap. - */ - __u32 mapping; -}; - -/* Submission */ - -/** - * Specify that bit 39 of the patched-in address should be set to switch - * swizzling between Tegra and non-Tegra sector layout on systems that store - * surfaces in system memory in non-Tegra sector layout. - */ -#define DRM_TEGRA_SUBMIT_RELOC_SECTOR_LAYOUT (1 << 0) - -struct drm_tegra_submit_buf { - /** - * @mapping: [in] - * - * Identifier of the mapping to use in the submission. - */ - __u32 mapping; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * Information for relocation patching. - */ - struct { - /** - * @target_offset: [in] - * - * Offset from the start of the mapping of the data whose - * address is to be patched into the gather. - */ - __u64 target_offset; - - /** - * @gather_offset_words: [in] - * - * Offset in words from the start of the gather data to - * where the address should be patched into. - */ - __u32 gather_offset_words; - - /** - * @shift: [in] - * - * Number of bits the address should be shifted right before - * patching in. - */ - __u32 shift; - } reloc; -}; - -/** - * Execute `words` words of Host1x opcodes specified in the `gather_data_ptr` - * buffer. Each GATHER_UPTR command uses successive words from the buffer. - */ -#define DRM_TEGRA_SUBMIT_CMD_GATHER_UPTR 0 -/** - * Wait for a syncpoint to reach a value before continuing with further - * commands. - */ -#define DRM_TEGRA_SUBMIT_CMD_WAIT_SYNCPT 1 -/** - * Wait for a syncpoint to reach a value before continuing with further - * commands. The threshold is calculated relative to the start of the job. - */ -#define DRM_TEGRA_SUBMIT_CMD_WAIT_SYNCPT_RELATIVE 2 - -struct drm_tegra_submit_cmd_gather_uptr { - __u32 words; - __u32 reserved[3]; -}; - -struct drm_tegra_submit_cmd_wait_syncpt { - __u32 id; - __u32 value; - __u32 reserved[2]; -}; - -struct drm_tegra_submit_cmd { - /** - * @type: [in] - * - * Command type to execute. One of the DRM_TEGRA_SUBMIT_CMD* - * defines. - */ - __u32 type; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - union { - struct drm_tegra_submit_cmd_gather_uptr gather_uptr; - struct drm_tegra_submit_cmd_wait_syncpt wait_syncpt; - __u32 reserved[4]; - }; -}; - -struct drm_tegra_submit_syncpt { - /** - * @id: [in] - * - * ID of the syncpoint that the job will increment. - */ - __u32 id; - - /** - * @flags: [in] - * - * Flags. - */ - __u32 flags; - - /** - * @increments: [in] - * - * Number of times the job will increment this syncpoint. - */ - __u32 increments; - - /** - * @value: [out] - * - * Value the syncpoint will have once the job has completed all - * its specified syncpoint increments. - * - * Note that the kernel may increment the syncpoint before or after - * the job. These increments are not reflected in this field. - * - * If the job hangs or times out, not all of the increments may - * get executed. - */ - __u32 value; -}; - -struct drm_tegra_channel_submit { - /** - * @context: [in] - * - * Identifier of the channel to submit this job to. - */ - __u32 context; - - /** - * @num_bufs: [in] - * - * Number of elements in the `bufs_ptr` array. - */ - __u32 num_bufs; - - /** - * @num_cmds: [in] - * - * Number of elements in the `cmds_ptr` array. - */ - __u32 num_cmds; - - /** - * @gather_data_words: [in] - * - * Number of 32-bit words in the `gather_data_ptr` array. - */ - __u32 gather_data_words; - - /** - * @bufs_ptr: [in] - * - * Pointer to an array of drm_tegra_submit_buf structures. - */ - __u64 bufs_ptr; - - /** - * @cmds_ptr: [in] - * - * Pointer to an array of drm_tegra_submit_cmd structures. - */ - __u64 cmds_ptr; - - /** - * @gather_data_ptr: [in] - * - * Pointer to an array of Host1x opcodes to be used by GATHER_UPTR - * commands. - */ - __u64 gather_data_ptr; - - /** - * @syncobj_in: [in] - * - * Handle for DRM syncobj that will be waited before submission. - * Ignored if zero. - */ - __u32 syncobj_in; - - /** - * @syncobj_out: [in] - * - * Handle for DRM syncobj that will have its fence replaced with - * the job's completion fence. Ignored if zero. - */ - __u32 syncobj_out; - - /** - * @syncpt_incr: [in,out] - * - * Information about the syncpoint the job will increment. - */ - struct drm_tegra_submit_syncpt syncpt; -}; - -struct drm_tegra_syncpoint_allocate { - /** - * @id: [out] - * - * ID of allocated syncpoint. - */ - __u32 id; - __u32 padding; -}; - -struct drm_tegra_syncpoint_free { - /** - * @id: [in] - * - * ID of syncpoint to free. - */ - __u32 id; - __u32 padding; -}; - -struct drm_tegra_syncpoint_wait { - /** - * @timeout: [in] - * - * Absolute timestamp at which the wait will time out. - */ - __s64 timeout_ns; - - /** - * @id: [in] - * - * ID of syncpoint to wait on. - */ - __u32 id; - - /** - * @threshold: [in] - * - * Threshold to wait for. - */ - __u32 threshold; - - /** - * @value: [out] - * - * Value of the syncpoint upon wait completion. - */ - __u32 value; - - __u32 padding; -}; - -#define DRM_IOCTL_TEGRA_CHANNEL_OPEN DRM_IOWR(DRM_COMMAND_BASE + 0x10, struct drm_tegra_channel_open) -#define DRM_IOCTL_TEGRA_CHANNEL_CLOSE DRM_IOWR(DRM_COMMAND_BASE + 0x11, struct drm_tegra_channel_close) -#define DRM_IOCTL_TEGRA_CHANNEL_MAP DRM_IOWR(DRM_COMMAND_BASE + 0x12, struct drm_tegra_channel_map) -#define DRM_IOCTL_TEGRA_CHANNEL_UNMAP DRM_IOWR(DRM_COMMAND_BASE + 0x13, struct drm_tegra_channel_unmap) -#define DRM_IOCTL_TEGRA_CHANNEL_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + 0x14, struct drm_tegra_channel_submit) - -#define DRM_IOCTL_TEGRA_SYNCPOINT_ALLOCATE DRM_IOWR(DRM_COMMAND_BASE + 0x20, struct drm_tegra_syncpoint_allocate) -#define DRM_IOCTL_TEGRA_SYNCPOINT_FREE DRM_IOWR(DRM_COMMAND_BASE + 0x21, struct drm_tegra_syncpoint_free) -#define DRM_IOCTL_TEGRA_SYNCPOINT_WAIT DRM_IOWR(DRM_COMMAND_BASE + 0x22, struct drm_tegra_syncpoint_wait) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/libdrm/vc4_drm.h b/prebuilts/x86_64/include/libdrm/vc4_drm.h deleted file mode 100644 index 31f50de..0000000 --- a/prebuilts/x86_64/include/libdrm/vc4_drm.h +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright © 2014-2015 Broadcom - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef _VC4_DRM_H_ -#define _VC4_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_VC4_SUBMIT_CL 0x00 -#define DRM_VC4_WAIT_SEQNO 0x01 -#define DRM_VC4_WAIT_BO 0x02 -#define DRM_VC4_CREATE_BO 0x03 -#define DRM_VC4_MMAP_BO 0x04 -#define DRM_VC4_CREATE_SHADER_BO 0x05 -#define DRM_VC4_GET_HANG_STATE 0x06 -#define DRM_VC4_GET_PARAM 0x07 -#define DRM_VC4_SET_TILING 0x08 -#define DRM_VC4_GET_TILING 0x09 -#define DRM_VC4_LABEL_BO 0x0a -#define DRM_VC4_GEM_MADVISE 0x0b -#define DRM_VC4_PERFMON_CREATE 0x0c -#define DRM_VC4_PERFMON_DESTROY 0x0d -#define DRM_VC4_PERFMON_GET_VALUES 0x0e - -#define DRM_IOCTL_VC4_SUBMIT_CL DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SUBMIT_CL, struct drm_vc4_submit_cl) -#define DRM_IOCTL_VC4_WAIT_SEQNO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_SEQNO, struct drm_vc4_wait_seqno) -#define DRM_IOCTL_VC4_WAIT_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_BO, struct drm_vc4_wait_bo) -#define DRM_IOCTL_VC4_CREATE_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_CREATE_BO, struct drm_vc4_create_bo) -#define DRM_IOCTL_VC4_MMAP_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_MMAP_BO, struct drm_vc4_mmap_bo) -#define DRM_IOCTL_VC4_CREATE_SHADER_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_CREATE_SHADER_BO, struct drm_vc4_create_shader_bo) -#define DRM_IOCTL_VC4_GET_HANG_STATE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_HANG_STATE, struct drm_vc4_get_hang_state) -#define DRM_IOCTL_VC4_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_PARAM, struct drm_vc4_get_param) -#define DRM_IOCTL_VC4_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SET_TILING, struct drm_vc4_set_tiling) -#define DRM_IOCTL_VC4_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_TILING, struct drm_vc4_get_tiling) -#define DRM_IOCTL_VC4_LABEL_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_LABEL_BO, struct drm_vc4_label_bo) -#define DRM_IOCTL_VC4_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GEM_MADVISE, struct drm_vc4_gem_madvise) -#define DRM_IOCTL_VC4_PERFMON_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_CREATE, struct drm_vc4_perfmon_create) -#define DRM_IOCTL_VC4_PERFMON_DESTROY DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_DESTROY, struct drm_vc4_perfmon_destroy) -#define DRM_IOCTL_VC4_PERFMON_GET_VALUES DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_GET_VALUES, struct drm_vc4_perfmon_get_values) - -struct drm_vc4_submit_rcl_surface { - __u32 hindex; /* Handle index, or ~0 if not present. */ - __u32 offset; /* Offset to start of buffer. */ - /* - * Bits for either render config (color_write) or load/store packet. - * Bits should all be 0 for MSAA load/stores. - */ - __u16 bits; - -#define VC4_SUBMIT_RCL_SURFACE_READ_IS_FULL_RES (1 << 0) - __u16 flags; -}; - -/** - * struct drm_vc4_submit_cl - ioctl argument for submitting commands to the 3D - * engine. - * - * Drivers typically use GPU BOs to store batchbuffers / command lists and - * their associated state. However, because the VC4 lacks an MMU, we have to - * do validation of memory accesses by the GPU commands. If we were to store - * our commands in BOs, we'd need to do uncached readback from them to do the - * validation process, which is too expensive. Instead, userspace accumulates - * commands and associated state in plain memory, then the kernel copies the - * data to its own address space, and then validates and stores it in a GPU - * BO. - */ -struct drm_vc4_submit_cl { - /* Pointer to the binner command list. - * - * This is the first set of commands executed, which runs the - * coordinate shader to determine where primitives land on the screen, - * then writes out the state updates and draw calls necessary per tile - * to the tile allocation BO. - */ - __u64 bin_cl; - - /* Pointer to the shader records. - * - * Shader records are the structures read by the hardware that contain - * pointers to uniforms, shaders, and vertex attributes. The - * reference to the shader record has enough information to determine - * how many pointers are necessary (fixed number for shaders/uniforms, - * and an attribute count), so those BO indices into bo_handles are - * just stored as __u32s before each shader record passed in. - */ - __u64 shader_rec; - - /* Pointer to uniform data and texture handles for the textures - * referenced by the shader. - * - * For each shader state record, there is a set of uniform data in the - * order referenced by the record (FS, VS, then CS). Each set of - * uniform data has a __u32 index into bo_handles per texture - * sample operation, in the order the QPU_W_TMUn_S writes appear in - * the program. Following the texture BO handle indices is the actual - * uniform data. - * - * The individual uniform state blocks don't have sizes passed in, - * because the kernel has to determine the sizes anyway during shader - * code validation. - */ - __u64 uniforms; - __u64 bo_handles; - - /* Size in bytes of the binner command list. */ - __u32 bin_cl_size; - /* Size in bytes of the set of shader records. */ - __u32 shader_rec_size; - /* Number of shader records. - * - * This could just be computed from the contents of shader_records and - * the address bits of references to them from the bin CL, but it - * keeps the kernel from having to resize some allocations it makes. - */ - __u32 shader_rec_count; - /* Size in bytes of the uniform state. */ - __u32 uniforms_size; - - /* Number of BO handles passed in (size is that times 4). */ - __u32 bo_handle_count; - - /* RCL setup: */ - __u16 width; - __u16 height; - __u8 min_x_tile; - __u8 min_y_tile; - __u8 max_x_tile; - __u8 max_y_tile; - struct drm_vc4_submit_rcl_surface color_read; - struct drm_vc4_submit_rcl_surface color_write; - struct drm_vc4_submit_rcl_surface zs_read; - struct drm_vc4_submit_rcl_surface zs_write; - struct drm_vc4_submit_rcl_surface msaa_color_write; - struct drm_vc4_submit_rcl_surface msaa_zs_write; - __u32 clear_color[2]; - __u32 clear_z; - __u8 clear_s; - - __u32 pad:24; - -#define VC4_SUBMIT_CL_USE_CLEAR_COLOR (1 << 0) -/* By default, the kernel gets to choose the order that the tiles are - * rendered in. If this is set, then the tiles will be rendered in a - * raster order, with the right-to-left vs left-to-right and - * top-to-bottom vs bottom-to-top dictated by - * VC4_SUBMIT_CL_RCL_ORDER_INCREASING_*. This allows overlapping - * blits to be implemented using the 3D engine. - */ -#define VC4_SUBMIT_CL_FIXED_RCL_ORDER (1 << 1) -#define VC4_SUBMIT_CL_RCL_ORDER_INCREASING_X (1 << 2) -#define VC4_SUBMIT_CL_RCL_ORDER_INCREASING_Y (1 << 3) - __u32 flags; - - /* Returned value of the seqno of this render job (for the - * wait ioctl). - */ - __u64 seqno; - - /* ID of the perfmon to attach to this job. 0 means no perfmon. */ - __u32 perfmonid; - - /* Syncobj handle to wait on. If set, processing of this render job - * will not start until the syncobj is signaled. 0 means ignore. - */ - __u32 in_sync; - - /* Syncobj handle to export fence to. If set, the fence in the syncobj - * will be replaced with a fence that signals upon completion of this - * render job. 0 means ignore. - */ - __u32 out_sync; - - __u32 pad2; -}; - -/** - * struct drm_vc4_wait_seqno - ioctl argument for waiting for - * DRM_VC4_SUBMIT_CL completion using its returned seqno. - * - * timeout_ns is the timeout in nanoseconds, where "0" means "don't - * block, just return the status." - */ -struct drm_vc4_wait_seqno { - __u64 seqno; - __u64 timeout_ns; -}; - -/** - * struct drm_vc4_wait_bo - ioctl argument for waiting for - * completion of the last DRM_VC4_SUBMIT_CL on a BO. - * - * This is useful for cases where multiple processes might be - * rendering to a BO and you want to wait for all rendering to be - * completed. - */ -struct drm_vc4_wait_bo { - __u32 handle; - __u32 pad; - __u64 timeout_ns; -}; - -/** - * struct drm_vc4_create_bo - ioctl argument for creating VC4 BOs. - * - * There are currently no values for the flags argument, but it may be - * used in a future extension. - */ -struct drm_vc4_create_bo { - __u32 size; - __u32 flags; - /** Returned GEM handle for the BO. */ - __u32 handle; - __u32 pad; -}; - -/** - * struct drm_vc4_mmap_bo - ioctl argument for mapping VC4 BOs. - * - * This doesn't actually perform an mmap. Instead, it returns the - * offset you need to use in an mmap on the DRM device node. This - * means that tools like valgrind end up knowing about the mapped - * memory. - * - * There are currently no values for the flags argument, but it may be - * used in a future extension. - */ -struct drm_vc4_mmap_bo { - /** Handle for the object being mapped. */ - __u32 handle; - __u32 flags; - /** offset into the drm node to use for subsequent mmap call. */ - __u64 offset; -}; - -/** - * struct drm_vc4_create_shader_bo - ioctl argument for creating VC4 - * shader BOs. - * - * Since allowing a shader to be overwritten while it's also being - * executed from would allow privlege escalation, shaders must be - * created using this ioctl, and they can't be mmapped later. - */ -struct drm_vc4_create_shader_bo { - /* Size of the data argument. */ - __u32 size; - /* Flags, currently must be 0. */ - __u32 flags; - - /* Pointer to the data. */ - __u64 data; - - /** Returned GEM handle for the BO. */ - __u32 handle; - /* Pad, must be 0. */ - __u32 pad; -}; - -struct drm_vc4_get_hang_state_bo { - __u32 handle; - __u32 paddr; - __u32 size; - __u32 pad; -}; - -/** - * struct drm_vc4_hang_state - ioctl argument for collecting state - * from a GPU hang for analysis. -*/ -struct drm_vc4_get_hang_state { - /** Pointer to array of struct drm_vc4_get_hang_state_bo. */ - __u64 bo; - /** - * On input, the size of the bo array. Output is the number - * of bos to be returned. - */ - __u32 bo_count; - - __u32 start_bin, start_render; - - __u32 ct0ca, ct0ea; - __u32 ct1ca, ct1ea; - __u32 ct0cs, ct1cs; - __u32 ct0ra0, ct1ra0; - - __u32 bpca, bpcs; - __u32 bpoa, bpos; - - __u32 vpmbase; - - __u32 dbge; - __u32 fdbgo; - __u32 fdbgb; - __u32 fdbgr; - __u32 fdbgs; - __u32 errstat; - - /* Pad that we may save more registers into in the future. */ - __u32 pad[16]; -}; - -#define DRM_VC4_PARAM_V3D_IDENT0 0 -#define DRM_VC4_PARAM_V3D_IDENT1 1 -#define DRM_VC4_PARAM_V3D_IDENT2 2 -#define DRM_VC4_PARAM_SUPPORTS_BRANCHES 3 -#define DRM_VC4_PARAM_SUPPORTS_ETC1 4 -#define DRM_VC4_PARAM_SUPPORTS_THREADED_FS 5 -#define DRM_VC4_PARAM_SUPPORTS_FIXED_RCL_ORDER 6 -#define DRM_VC4_PARAM_SUPPORTS_MADVISE 7 -#define DRM_VC4_PARAM_SUPPORTS_PERFMON 8 - -struct drm_vc4_get_param { - __u32 param; - __u32 pad; - __u64 value; -}; - -struct drm_vc4_get_tiling { - __u32 handle; - __u32 flags; - __u64 modifier; -}; - -struct drm_vc4_set_tiling { - __u32 handle; - __u32 flags; - __u64 modifier; -}; - -/** - * struct drm_vc4_label_bo - Attach a name to a BO for debug purposes. - */ -struct drm_vc4_label_bo { - __u32 handle; - __u32 len; - __u64 name; -}; - -/* - * States prefixed with '__' are internal states and cannot be passed to the - * DRM_IOCTL_VC4_GEM_MADVISE ioctl. - */ -#define VC4_MADV_WILLNEED 0 -#define VC4_MADV_DONTNEED 1 -#define __VC4_MADV_PURGED 2 -#define __VC4_MADV_NOTSUPP 3 - -struct drm_vc4_gem_madvise { - __u32 handle; - __u32 madv; - __u32 retained; - __u32 pad; -}; - -enum { - VC4_PERFCNT_FEP_VALID_PRIMS_NO_RENDER, - VC4_PERFCNT_FEP_VALID_PRIMS_RENDER, - VC4_PERFCNT_FEP_CLIPPED_QUADS, - VC4_PERFCNT_FEP_VALID_QUADS, - VC4_PERFCNT_TLB_QUADS_NOT_PASSING_STENCIL, - VC4_PERFCNT_TLB_QUADS_NOT_PASSING_Z_AND_STENCIL, - VC4_PERFCNT_TLB_QUADS_PASSING_Z_AND_STENCIL, - VC4_PERFCNT_TLB_QUADS_ZERO_COVERAGE, - VC4_PERFCNT_TLB_QUADS_NON_ZERO_COVERAGE, - VC4_PERFCNT_TLB_QUADS_WRITTEN_TO_COLOR_BUF, - VC4_PERFCNT_PLB_PRIMS_OUTSIDE_VIEWPORT, - VC4_PERFCNT_PLB_PRIMS_NEED_CLIPPING, - VC4_PERFCNT_PSE_PRIMS_REVERSED, - VC4_PERFCNT_QPU_TOTAL_IDLE_CYCLES, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_VERTEX_COORD_SHADING, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_FRAGMENT_SHADING, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_EXEC_VALID_INST, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_TMUS, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_SCOREBOARD, - VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_VARYINGS, - VC4_PERFCNT_QPU_TOTAL_INST_CACHE_HIT, - VC4_PERFCNT_QPU_TOTAL_INST_CACHE_MISS, - VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_HIT, - VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_MISS, - VC4_PERFCNT_TMU_TOTAL_TEXT_QUADS_PROCESSED, - VC4_PERFCNT_TMU_TOTAL_TEXT_CACHE_MISS, - VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VDW_STALLED, - VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VCD_STALLED, - VC4_PERFCNT_L2C_TOTAL_L2_CACHE_HIT, - VC4_PERFCNT_L2C_TOTAL_L2_CACHE_MISS, - VC4_PERFCNT_NUM_EVENTS, -}; - -#define DRM_VC4_MAX_PERF_COUNTERS 16 - -struct drm_vc4_perfmon_create { - __u32 id; - __u32 ncounters; - __u8 events[DRM_VC4_MAX_PERF_COUNTERS]; -}; - -struct drm_vc4_perfmon_destroy { - __u32 id; -}; - -/* - * Returns the values of the performance counters tracked by this - * perfmon (as an array of ncounters u64 values). - * - * No implicit synchronization is performed, so the user has to - * guarantee that any jobs using this perfmon have already been - * completed (probably by blocking on the seqno returned by the - * last exec that used the perfmon). - */ -struct drm_vc4_perfmon_get_values { - __u32 id; - __u64 values_ptr; -}; - -#if defined(__cplusplus) -} -#endif - -#endif /* _VC4_DRM_H_ */ diff --git a/prebuilts/x86_64/include/libdrm/via_drm.h b/prebuilts/x86_64/include/libdrm/via_drm.h deleted file mode 100644 index 8b69e81..0000000 --- a/prebuilts/x86_64/include/libdrm/via_drm.h +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. - * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sub license, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ -#ifndef _VIA_DRM_H_ -#define _VIA_DRM_H_ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* WARNING: These defines must be the same as what the Xserver uses. - * if you change them, you must change the defines in the Xserver. - */ - -#ifndef _VIA_DEFINES_ -#define _VIA_DEFINES_ - -#include "via_drmclient.h" - -#define VIA_NR_SAREA_CLIPRECTS 8 -#define VIA_NR_XVMC_PORTS 10 -#define VIA_NR_XVMC_LOCKS 5 -#define VIA_MAX_CACHELINE_SIZE 64 -#define XVMCLOCKPTR(saPriv,lockNo) \ - ((__volatile__ struct drm_hw_lock *)(((((unsigned long) (saPriv)->XvMCLockArea) + \ - (VIA_MAX_CACHELINE_SIZE - 1)) & \ - ~(VIA_MAX_CACHELINE_SIZE - 1)) + \ - VIA_MAX_CACHELINE_SIZE*(lockNo))) - -/* Each region is a minimum of 64k, and there are at most 64 of them. - */ -#define VIA_NR_TEX_REGIONS 64 -#define VIA_LOG_MIN_TEX_REGION_SIZE 16 -#endif - -#define VIA_UPLOAD_TEX0IMAGE 0x1 /* handled clientside */ -#define VIA_UPLOAD_TEX1IMAGE 0x2 /* handled clientside */ -#define VIA_UPLOAD_CTX 0x4 -#define VIA_UPLOAD_BUFFERS 0x8 -#define VIA_UPLOAD_TEX0 0x10 -#define VIA_UPLOAD_TEX1 0x20 -#define VIA_UPLOAD_CLIPRECTS 0x40 -#define VIA_UPLOAD_ALL 0xff - -/* VIA specific ioctls */ -#define DRM_VIA_ALLOCMEM 0x00 -#define DRM_VIA_FREEMEM 0x01 -#define DRM_VIA_AGP_INIT 0x02 -#define DRM_VIA_FB_INIT 0x03 -#define DRM_VIA_MAP_INIT 0x04 -#define DRM_VIA_DEC_FUTEX 0x05 -#define NOT_USED -#define DRM_VIA_DMA_INIT 0x07 -#define DRM_VIA_CMDBUFFER 0x08 -#define DRM_VIA_FLUSH 0x09 -#define DRM_VIA_PCICMD 0x0a -#define DRM_VIA_CMDBUF_SIZE 0x0b -#define NOT_USED -#define DRM_VIA_WAIT_IRQ 0x0d -#define DRM_VIA_DMA_BLIT 0x0e -#define DRM_VIA_BLIT_SYNC 0x0f - -#define DRM_IOCTL_VIA_ALLOCMEM DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_ALLOCMEM, drm_via_mem_t) -#define DRM_IOCTL_VIA_FREEMEM DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_FREEMEM, drm_via_mem_t) -#define DRM_IOCTL_VIA_AGP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_AGP_INIT, drm_via_agp_t) -#define DRM_IOCTL_VIA_FB_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_FB_INIT, drm_via_fb_t) -#define DRM_IOCTL_VIA_MAP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_MAP_INIT, drm_via_init_t) -#define DRM_IOCTL_VIA_DEC_FUTEX DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_DEC_FUTEX, drm_via_futex_t) -#define DRM_IOCTL_VIA_DMA_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_DMA_INIT, drm_via_dma_init_t) -#define DRM_IOCTL_VIA_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_CMDBUFFER, drm_via_cmdbuffer_t) -#define DRM_IOCTL_VIA_FLUSH DRM_IO( DRM_COMMAND_BASE + DRM_VIA_FLUSH) -#define DRM_IOCTL_VIA_PCICMD DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_PCICMD, drm_via_cmdbuffer_t) -#define DRM_IOCTL_VIA_CMDBUF_SIZE DRM_IOWR( DRM_COMMAND_BASE + DRM_VIA_CMDBUF_SIZE, \ - drm_via_cmdbuf_size_t) -#define DRM_IOCTL_VIA_WAIT_IRQ DRM_IOWR( DRM_COMMAND_BASE + DRM_VIA_WAIT_IRQ, drm_via_irqwait_t) -#define DRM_IOCTL_VIA_DMA_BLIT DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_DMA_BLIT, drm_via_dmablit_t) -#define DRM_IOCTL_VIA_BLIT_SYNC DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_BLIT_SYNC, drm_via_blitsync_t) - -/* Indices into buf.Setup where various bits of state are mirrored per - * context and per buffer. These can be fired at the card as a unit, - * or in a piecewise fashion as required. - */ - -#define VIA_TEX_SETUP_SIZE 8 - -/* Flags for clear ioctl - */ -#define VIA_FRONT 0x1 -#define VIA_BACK 0x2 -#define VIA_DEPTH 0x4 -#define VIA_STENCIL 0x8 -#define VIA_MEM_VIDEO 0 /* matches drm constant */ -#define VIA_MEM_AGP 1 /* matches drm constant */ -#define VIA_MEM_SYSTEM 2 -#define VIA_MEM_MIXED 3 -#define VIA_MEM_UNKNOWN 4 - -typedef struct { - __u32 offset; - __u32 size; -} drm_via_agp_t; - -typedef struct { - __u32 offset; - __u32 size; -} drm_via_fb_t; - -typedef struct { - __u32 context; - __u32 type; - __u32 size; - unsigned long index; - unsigned long offset; -} drm_via_mem_t; - -typedef struct _drm_via_init { - enum { - VIA_INIT_MAP = 0x01, - VIA_CLEANUP_MAP = 0x02 - } func; - - unsigned long sarea_priv_offset; - unsigned long fb_offset; - unsigned long mmio_offset; - unsigned long agpAddr; -} drm_via_init_t; - -typedef struct _drm_via_futex { - enum { - VIA_FUTEX_WAIT = 0x00, - VIA_FUTEX_WAKE = 0X01 - } func; - __u32 ms; - __u32 lock; - __u32 val; -} drm_via_futex_t; - -typedef struct _drm_via_dma_init { - enum { - VIA_INIT_DMA = 0x01, - VIA_CLEANUP_DMA = 0x02, - VIA_DMA_INITIALIZED = 0x03 - } func; - - unsigned long offset; - unsigned long size; - unsigned long reg_pause_addr; -} drm_via_dma_init_t; - -typedef struct _drm_via_cmdbuffer { - char *buf; - unsigned long size; -} drm_via_cmdbuffer_t; - -/* Warning: If you change the SAREA structure you must change the Xserver - * structure as well */ - -typedef struct _drm_via_tex_region { - unsigned char next, prev; /* indices to form a circular LRU */ - unsigned char inUse; /* owned by a client, or free? */ - int age; /* tracked by clients to update local LRU's */ -} drm_via_tex_region_t; - -typedef struct _drm_via_sarea { - unsigned int dirty; - unsigned int nbox; - struct drm_clip_rect boxes[VIA_NR_SAREA_CLIPRECTS]; - drm_via_tex_region_t texList[VIA_NR_TEX_REGIONS + 1]; - int texAge; /* last time texture was uploaded */ - int ctxOwner; /* last context to upload state */ - int vertexPrim; - - /* - * Below is for XvMC. - * We want the lock integers alone on, and aligned to, a cache line. - * Therefore this somewhat strange construct. - */ - - char XvMCLockArea[VIA_MAX_CACHELINE_SIZE * (VIA_NR_XVMC_LOCKS + 1)]; - - unsigned int XvMCDisplaying[VIA_NR_XVMC_PORTS]; - unsigned int XvMCSubPicOn[VIA_NR_XVMC_PORTS]; - unsigned int XvMCCtxNoGrabbed; /* Last context to hold decoder */ - - /* Used by the 3d driver only at this point, for pageflipping: - */ - unsigned int pfCurrentOffset; -} drm_via_sarea_t; - -typedef struct _drm_via_cmdbuf_size { - enum { - VIA_CMDBUF_SPACE = 0x01, - VIA_CMDBUF_LAG = 0x02 - } func; - int wait; - __u32 size; -} drm_via_cmdbuf_size_t; - -typedef enum { - VIA_IRQ_ABSOLUTE = 0x0, - VIA_IRQ_RELATIVE = 0x1, - VIA_IRQ_SIGNAL = 0x10000000, - VIA_IRQ_FORCE_SEQUENCE = 0x20000000 -} via_irq_seq_type_t; - -#define VIA_IRQ_FLAGS_MASK 0xF0000000 - -enum drm_via_irqs { - drm_via_irq_hqv0 = 0, - drm_via_irq_hqv1, - drm_via_irq_dma0_dd, - drm_via_irq_dma0_td, - drm_via_irq_dma1_dd, - drm_via_irq_dma1_td, - drm_via_irq_num -}; - -struct drm_via_wait_irq_request { - unsigned irq; - via_irq_seq_type_t type; - __u32 sequence; - __u32 signal; -}; - -typedef union drm_via_irqwait { - struct drm_via_wait_irq_request request; - struct drm_wait_vblank_reply reply; -} drm_via_irqwait_t; - -typedef struct drm_via_blitsync { - __u32 sync_handle; - unsigned engine; -} drm_via_blitsync_t; - -/* - * Below,"flags" is currently unused but will be used for possible future - * extensions like kernel space bounce buffers for bad alignments and - * blit engine busy-wait polling for better latency in the absence of - * interrupts. - */ - -typedef struct drm_via_dmablit { - __u32 num_lines; - __u32 line_length; - - __u32 fb_addr; - __u32 fb_stride; - - unsigned char *mem_addr; - __u32 mem_stride; - - __u32 flags; - int to_fb; - - drm_via_blitsync_t sync; -} drm_via_dmablit_t; - -#if defined(__cplusplus) -} -#endif - -#endif /* _VIA_DRM_H_ */ diff --git a/prebuilts/x86_64/include/libdrm/virtgpu_drm.h b/prebuilts/x86_64/include/libdrm/virtgpu_drm.h deleted file mode 100644 index f06a789..0000000 --- a/prebuilts/x86_64/include/libdrm/virtgpu_drm.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright 2013 Red Hat - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef VIRTGPU_DRM_H -#define VIRTGPU_DRM_H - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Please note that modifications to all structs defined here are - * subject to backwards-compatibility constraints. - * - * Do not use pointers, use __u64 instead for 32 bit / 64 bit user/kernel - * compatibility Keep fields aligned to their size - */ - -#define DRM_VIRTGPU_MAP 0x01 -#define DRM_VIRTGPU_EXECBUFFER 0x02 -#define DRM_VIRTGPU_GETPARAM 0x03 -#define DRM_VIRTGPU_RESOURCE_CREATE 0x04 -#define DRM_VIRTGPU_RESOURCE_INFO 0x05 -#define DRM_VIRTGPU_TRANSFER_FROM_HOST 0x06 -#define DRM_VIRTGPU_TRANSFER_TO_HOST 0x07 -#define DRM_VIRTGPU_WAIT 0x08 -#define DRM_VIRTGPU_GET_CAPS 0x09 - -#define VIRTGPU_EXECBUF_FENCE_FD_IN 0x01 -#define VIRTGPU_EXECBUF_FENCE_FD_OUT 0x02 -#define VIRTGPU_EXECBUF_FLAGS (\ - VIRTGPU_EXECBUF_FENCE_FD_IN |\ - VIRTGPU_EXECBUF_FENCE_FD_OUT |\ - 0) - -struct drm_virtgpu_map { - __u64 offset; /* use for mmap system call */ - __u32 handle; - __u32 pad; -}; - -struct drm_virtgpu_execbuffer { - __u32 flags; - __u32 size; - __u64 command; /* void* */ - __u64 bo_handles; - __u32 num_bo_handles; - __s32 fence_fd; /* in/out fence fd (see VIRTGPU_EXECBUF_FENCE_FD_IN/OUT) */ -}; - -#define VIRTGPU_PARAM_3D_FEATURES 1 /* do we have 3D features in the hw */ -#define VIRTGPU_PARAM_CAPSET_QUERY_FIX 2 /* do we have the capset fix */ - -struct drm_virtgpu_getparam { - __u64 param; - __u64 value; -}; - -/* NO_BO flags? NO resource flag? */ -/* resource flag for y_0_top */ -struct drm_virtgpu_resource_create { - __u32 target; - __u32 format; - __u32 bind; - __u32 width; - __u32 height; - __u32 depth; - __u32 array_size; - __u32 last_level; - __u32 nr_samples; - __u32 flags; - __u32 bo_handle; /* if this is set - recreate a new resource attached to this bo ? */ - __u32 res_handle; /* returned by kernel */ - __u32 size; /* validate transfer in the host */ - __u32 stride; /* validate transfer in the host */ -}; - -struct drm_virtgpu_resource_info { - __u32 bo_handle; - __u32 res_handle; - __u32 size; - __u32 stride; -}; - -struct drm_virtgpu_3d_box { - __u32 x; - __u32 y; - __u32 z; - __u32 w; - __u32 h; - __u32 d; -}; - -struct drm_virtgpu_3d_transfer_to_host { - __u32 bo_handle; - struct drm_virtgpu_3d_box box; - __u32 level; - __u32 offset; -}; - -struct drm_virtgpu_3d_transfer_from_host { - __u32 bo_handle; - struct drm_virtgpu_3d_box box; - __u32 level; - __u32 offset; -}; - -#define VIRTGPU_WAIT_NOWAIT 1 /* like it */ -struct drm_virtgpu_3d_wait { - __u32 handle; /* 0 is an invalid handle */ - __u32 flags; -}; - -struct drm_virtgpu_get_caps { - __u32 cap_set_id; - __u32 cap_set_ver; - __u64 addr; - __u32 size; - __u32 pad; -}; - -#define DRM_IOCTL_VIRTGPU_MAP \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_MAP, struct drm_virtgpu_map) - -#define DRM_IOCTL_VIRTGPU_EXECBUFFER \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_EXECBUFFER,\ - struct drm_virtgpu_execbuffer) - -#define DRM_IOCTL_VIRTGPU_GETPARAM \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GETPARAM,\ - struct drm_virtgpu_getparam) - -#define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE, \ - struct drm_virtgpu_resource_create) - -#define DRM_IOCTL_VIRTGPU_RESOURCE_INFO \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_INFO, \ - struct drm_virtgpu_resource_info) - -#define DRM_IOCTL_VIRTGPU_TRANSFER_FROM_HOST \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_TRANSFER_FROM_HOST, \ - struct drm_virtgpu_3d_transfer_from_host) - -#define DRM_IOCTL_VIRTGPU_TRANSFER_TO_HOST \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_TRANSFER_TO_HOST, \ - struct drm_virtgpu_3d_transfer_to_host) - -#define DRM_IOCTL_VIRTGPU_WAIT \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_WAIT, \ - struct drm_virtgpu_3d_wait) - -#define DRM_IOCTL_VIRTGPU_GET_CAPS \ - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GET_CAPS, \ - struct drm_virtgpu_get_caps) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/libdrm/vmwgfx_drm.h b/prebuilts/x86_64/include/libdrm/vmwgfx_drm.h deleted file mode 100644 index 2b8d47e..0000000 --- a/prebuilts/x86_64/include/libdrm/vmwgfx_drm.h +++ /dev/null @@ -1,1128 +0,0 @@ -/************************************************************************** - * - * Copyright © 2009-2015 VMware, Inc., Palo Alto, CA., USA - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **************************************************************************/ - -#ifndef __VMWGFX_DRM_H__ -#define __VMWGFX_DRM_H__ - -#include "drm.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#define DRM_VMW_MAX_SURFACE_FACES 6 -#define DRM_VMW_MAX_MIP_LEVELS 24 - - -#define DRM_VMW_GET_PARAM 0 -#define DRM_VMW_ALLOC_DMABUF 1 -#define DRM_VMW_UNREF_DMABUF 2 -#define DRM_VMW_HANDLE_CLOSE 2 -#define DRM_VMW_CURSOR_BYPASS 3 -/* guarded by DRM_VMW_PARAM_NUM_STREAMS != 0*/ -#define DRM_VMW_CONTROL_STREAM 4 -#define DRM_VMW_CLAIM_STREAM 5 -#define DRM_VMW_UNREF_STREAM 6 -/* guarded by DRM_VMW_PARAM_3D == 1 */ -#define DRM_VMW_CREATE_CONTEXT 7 -#define DRM_VMW_UNREF_CONTEXT 8 -#define DRM_VMW_CREATE_SURFACE 9 -#define DRM_VMW_UNREF_SURFACE 10 -#define DRM_VMW_REF_SURFACE 11 -#define DRM_VMW_EXECBUF 12 -#define DRM_VMW_GET_3D_CAP 13 -#define DRM_VMW_FENCE_WAIT 14 -#define DRM_VMW_FENCE_SIGNALED 15 -#define DRM_VMW_FENCE_UNREF 16 -#define DRM_VMW_FENCE_EVENT 17 -#define DRM_VMW_PRESENT 18 -#define DRM_VMW_PRESENT_READBACK 19 -#define DRM_VMW_UPDATE_LAYOUT 20 -#define DRM_VMW_CREATE_SHADER 21 -#define DRM_VMW_UNREF_SHADER 22 -#define DRM_VMW_GB_SURFACE_CREATE 23 -#define DRM_VMW_GB_SURFACE_REF 24 -#define DRM_VMW_SYNCCPU 25 -#define DRM_VMW_CREATE_EXTENDED_CONTEXT 26 - -/*************************************************************************/ -/** - * DRM_VMW_GET_PARAM - get device information. - * - * DRM_VMW_PARAM_FIFO_OFFSET: - * Offset to use to map the first page of the FIFO read-only. - * The fifo is mapped using the mmap() system call on the drm device. - * - * DRM_VMW_PARAM_OVERLAY_IOCTL: - * Does the driver support the overlay ioctl. - */ - -#define DRM_VMW_PARAM_NUM_STREAMS 0 -#define DRM_VMW_PARAM_NUM_FREE_STREAMS 1 -#define DRM_VMW_PARAM_3D 2 -#define DRM_VMW_PARAM_HW_CAPS 3 -#define DRM_VMW_PARAM_FIFO_CAPS 4 -#define DRM_VMW_PARAM_MAX_FB_SIZE 5 -#define DRM_VMW_PARAM_FIFO_HW_VERSION 6 -#define DRM_VMW_PARAM_MAX_SURF_MEMORY 7 -#define DRM_VMW_PARAM_3D_CAPS_SIZE 8 -#define DRM_VMW_PARAM_MAX_MOB_MEMORY 9 -#define DRM_VMW_PARAM_MAX_MOB_SIZE 10 -#define DRM_VMW_PARAM_SCREEN_TARGET 11 -#define DRM_VMW_PARAM_DX 12 - -/** - * enum drm_vmw_handle_type - handle type for ref ioctls - * - */ -enum drm_vmw_handle_type { - DRM_VMW_HANDLE_LEGACY = 0, - DRM_VMW_HANDLE_PRIME = 1 -}; - -/** - * struct drm_vmw_getparam_arg - * - * @value: Returned value. //Out - * @param: Parameter to query. //In. - * - * Argument to the DRM_VMW_GET_PARAM Ioctl. - */ - -struct drm_vmw_getparam_arg { - __u64 value; - __u32 param; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_CONTEXT - Create a host context. - * - * Allocates a device unique context id, and queues a create context command - * for the host. Does not wait for host completion. - */ - -/** - * struct drm_vmw_context_arg - * - * @cid: Device unique context ID. - * - * Output argument to the DRM_VMW_CREATE_CONTEXT Ioctl. - * Input argument to the DRM_VMW_UNREF_CONTEXT Ioctl. - */ - -struct drm_vmw_context_arg { - __s32 cid; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_CONTEXT - Create a host context. - * - * Frees a global context id, and queues a destroy host command for the host. - * Does not wait for host completion. The context ID can be used directly - * in the command stream and shows up as the same context ID on the host. - */ - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_SURFACE - Create a host suface. - * - * Allocates a device unique surface id, and queues a create surface command - * for the host. Does not wait for host completion. The surface ID can be - * used directly in the command stream and shows up as the same surface - * ID on the host. - */ - -/** - * struct drm_wmv_surface_create_req - * - * @flags: Surface flags as understood by the host. - * @format: Surface format as understood by the host. - * @mip_levels: Number of mip levels for each face. - * An unused face should have 0 encoded. - * @size_addr: Address of a user-space array of sruct drm_vmw_size - * cast to an __u64 for 32-64 bit compatibility. - * The size of the array should equal the total number of mipmap levels. - * @shareable: Boolean whether other clients (as identified by file descriptors) - * may reference this surface. - * @scanout: Boolean whether the surface is intended to be used as a - * scanout. - * - * Input data to the DRM_VMW_CREATE_SURFACE Ioctl. - * Output data from the DRM_VMW_REF_SURFACE Ioctl. - */ - -struct drm_vmw_surface_create_req { - __u32 flags; - __u32 format; - __u32 mip_levels[DRM_VMW_MAX_SURFACE_FACES]; - __u64 size_addr; - __s32 shareable; - __s32 scanout; -}; - -/** - * struct drm_wmv_surface_arg - * - * @sid: Surface id of created surface or surface to destroy or reference. - * @handle_type: Handle type for DRM_VMW_REF_SURFACE Ioctl. - * - * Output data from the DRM_VMW_CREATE_SURFACE Ioctl. - * Input argument to the DRM_VMW_UNREF_SURFACE Ioctl. - * Input argument to the DRM_VMW_REF_SURFACE Ioctl. - */ - -struct drm_vmw_surface_arg { - __s32 sid; - enum drm_vmw_handle_type handle_type; -}; - -/** - * struct drm_vmw_size ioctl. - * - * @width - mip level width - * @height - mip level height - * @depth - mip level depth - * - * Description of a mip level. - * Input data to the DRM_WMW_CREATE_SURFACE Ioctl. - */ - -struct drm_vmw_size { - __u32 width; - __u32 height; - __u32 depth; - __u32 pad64; -}; - -/** - * union drm_vmw_surface_create_arg - * - * @rep: Output data as described above. - * @req: Input data as described above. - * - * Argument to the DRM_VMW_CREATE_SURFACE Ioctl. - */ - -union drm_vmw_surface_create_arg { - struct drm_vmw_surface_arg rep; - struct drm_vmw_surface_create_req req; -}; - -/*************************************************************************/ -/** - * DRM_VMW_REF_SURFACE - Reference a host surface. - * - * Puts a reference on a host surface with a give sid, as previously - * returned by the DRM_VMW_CREATE_SURFACE ioctl. - * A reference will make sure the surface isn't destroyed while we hold - * it and will allow the calling client to use the surface ID in the command - * stream. - * - * On successful return, the Ioctl returns the surface information given - * in the DRM_VMW_CREATE_SURFACE ioctl. - */ - -/** - * union drm_vmw_surface_reference_arg - * - * @rep: Output data as described above. - * @req: Input data as described above. - * - * Argument to the DRM_VMW_REF_SURFACE Ioctl. - */ - -union drm_vmw_surface_reference_arg { - struct drm_vmw_surface_create_req rep; - struct drm_vmw_surface_arg req; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_SURFACE - Unreference a host surface. - * - * Clear a reference previously put on a host surface. - * When all references are gone, including the one implicitly placed - * on creation, - * a destroy surface command will be queued for the host. - * Does not wait for completion. - */ - -/*************************************************************************/ -/** - * DRM_VMW_EXECBUF - * - * Submit a command buffer for execution on the host, and return a - * fence seqno that when signaled, indicates that the command buffer has - * executed. - */ - -/** - * struct drm_vmw_execbuf_arg - * - * @commands: User-space address of a command buffer cast to an __u64. - * @command-size: Size in bytes of the command buffer. - * @throttle-us: Sleep until software is less than @throttle_us - * microseconds ahead of hardware. The driver may round this value - * to the nearest kernel tick. - * @fence_rep: User-space address of a struct drm_vmw_fence_rep cast to an - * __u64. - * @version: Allows expanding the execbuf ioctl parameters without breaking - * backwards compatibility, since user-space will always tell the kernel - * which version it uses. - * @flags: Execbuf flags. - * @imported_fence_fd: FD for a fence imported from another device - * - * Argument to the DRM_VMW_EXECBUF Ioctl. - */ - -#define DRM_VMW_EXECBUF_VERSION 2 - -#define DRM_VMW_EXECBUF_FLAG_IMPORT_FENCE_FD (1 << 0) -#define DRM_VMW_EXECBUF_FLAG_EXPORT_FENCE_FD (1 << 1) - -struct drm_vmw_execbuf_arg { - __u64 commands; - __u32 command_size; - __u32 throttle_us; - __u64 fence_rep; - __u32 version; - __u32 flags; - __u32 context_handle; - __s32 imported_fence_fd; -}; - -/** - * struct drm_vmw_fence_rep - * - * @handle: Fence object handle for fence associated with a command submission. - * @mask: Fence flags relevant for this fence object. - * @seqno: Fence sequence number in fifo. A fence object with a lower - * seqno will signal the EXEC flag before a fence object with a higher - * seqno. This can be used by user-space to avoid kernel calls to determine - * whether a fence has signaled the EXEC flag. Note that @seqno will - * wrap at 32-bit. - * @passed_seqno: The highest seqno number processed by the hardware - * so far. This can be used to mark user-space fence objects as signaled, and - * to determine whether a fence seqno might be stale. - * @fd: FD associated with the fence, -1 if not exported - * @error: This member should've been set to -EFAULT on submission. - * The following actions should be take on completion: - * error == -EFAULT: Fence communication failed. The host is synchronized. - * Use the last fence id read from the FIFO fence register. - * error != 0 && error != -EFAULT: - * Fence submission failed. The host is synchronized. Use the fence_seq member. - * error == 0: All is OK, The host may not be synchronized. - * Use the fence_seq member. - * - * Input / Output data to the DRM_VMW_EXECBUF Ioctl. - */ - -struct drm_vmw_fence_rep { - __u32 handle; - __u32 mask; - __u32 seqno; - __u32 passed_seqno; - __s32 fd; - __s32 error; -}; - -/*************************************************************************/ -/** - * DRM_VMW_ALLOC_DMABUF - * - * Allocate a DMA buffer that is visible also to the host. - * NOTE: The buffer is - * identified by a handle and an offset, which are private to the guest, but - * usable in the command stream. The guest kernel may translate these - * and patch up the command stream accordingly. In the future, the offset may - * be zero at all times, or it may disappear from the interface before it is - * fixed. - * - * The DMA buffer may stay user-space mapped in the guest at all times, - * and is thus suitable for sub-allocation. - * - * DMA buffers are mapped using the mmap() syscall on the drm device. - */ - -/** - * struct drm_vmw_alloc_dmabuf_req - * - * @size: Required minimum size of the buffer. - * - * Input data to the DRM_VMW_ALLOC_DMABUF Ioctl. - */ - -struct drm_vmw_alloc_dmabuf_req { - __u32 size; - __u32 pad64; -}; - -/** - * struct drm_vmw_dmabuf_rep - * - * @map_handle: Offset to use in the mmap() call used to map the buffer. - * @handle: Handle unique to this buffer. Used for unreferencing. - * @cur_gmr_id: GMR id to use in the command stream when this buffer is - * referenced. See not above. - * @cur_gmr_offset: Offset to use in the command stream when this buffer is - * referenced. See note above. - * - * Output data from the DRM_VMW_ALLOC_DMABUF Ioctl. - */ - -struct drm_vmw_dmabuf_rep { - __u64 map_handle; - __u32 handle; - __u32 cur_gmr_id; - __u32 cur_gmr_offset; - __u32 pad64; -}; - -/** - * union drm_vmw_dmabuf_arg - * - * @req: Input data as described above. - * @rep: Output data as described above. - * - * Argument to the DRM_VMW_ALLOC_DMABUF Ioctl. - */ - -union drm_vmw_alloc_dmabuf_arg { - struct drm_vmw_alloc_dmabuf_req req; - struct drm_vmw_dmabuf_rep rep; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_DMABUF - Free a DMA buffer. - * - */ - -/** - * struct drm_vmw_unref_dmabuf_arg - * - * @handle: Handle indicating what buffer to free. Obtained from the - * DRM_VMW_ALLOC_DMABUF Ioctl. - * - * Argument to the DRM_VMW_UNREF_DMABUF Ioctl. - */ - -struct drm_vmw_unref_dmabuf_arg { - __u32 handle; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CONTROL_STREAM - Control overlays, aka streams. - * - * This IOCTL controls the overlay units of the svga device. - * The SVGA overlay units does not work like regular hardware units in - * that they do not automatically read back the contents of the given dma - * buffer. But instead only read back for each call to this ioctl, and - * at any point between this call being made and a following call that - * either changes the buffer or disables the stream. - */ - -/** - * struct drm_vmw_rect - * - * Defines a rectangle. Used in the overlay ioctl to define - * source and destination rectangle. - */ - -struct drm_vmw_rect { - __s32 x; - __s32 y; - __u32 w; - __u32 h; -}; - -/** - * struct drm_vmw_control_stream_arg - * - * @stream_id: Stearm to control - * @enabled: If false all following arguments are ignored. - * @handle: Handle to buffer for getting data from. - * @format: Format of the overlay as understood by the host. - * @width: Width of the overlay. - * @height: Height of the overlay. - * @size: Size of the overlay in bytes. - * @pitch: Array of pitches, the two last are only used for YUV12 formats. - * @offset: Offset from start of dma buffer to overlay. - * @src: Source rect, must be within the defined area above. - * @dst: Destination rect, x and y may be negative. - * - * Argument to the DRM_VMW_CONTROL_STREAM Ioctl. - */ - -struct drm_vmw_control_stream_arg { - __u32 stream_id; - __u32 enabled; - - __u32 flags; - __u32 color_key; - - __u32 handle; - __u32 offset; - __s32 format; - __u32 size; - __u32 width; - __u32 height; - __u32 pitch[3]; - - __u32 pad64; - struct drm_vmw_rect src; - struct drm_vmw_rect dst; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CURSOR_BYPASS - Give extra information about cursor bypass. - * - */ - -#define DRM_VMW_CURSOR_BYPASS_ALL (1 << 0) -#define DRM_VMW_CURSOR_BYPASS_FLAGS (1) - -/** - * struct drm_vmw_cursor_bypass_arg - * - * @flags: Flags. - * @crtc_id: Crtc id, only used if DMR_CURSOR_BYPASS_ALL isn't passed. - * @xpos: X position of cursor. - * @ypos: Y position of cursor. - * @xhot: X hotspot. - * @yhot: Y hotspot. - * - * Argument to the DRM_VMW_CURSOR_BYPASS Ioctl. - */ - -struct drm_vmw_cursor_bypass_arg { - __u32 flags; - __u32 crtc_id; - __s32 xpos; - __s32 ypos; - __s32 xhot; - __s32 yhot; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CLAIM_STREAM - Claim a single stream. - */ - -/** - * struct drm_vmw_context_arg - * - * @stream_id: Device unique context ID. - * - * Output argument to the DRM_VMW_CREATE_CONTEXT Ioctl. - * Input argument to the DRM_VMW_UNREF_CONTEXT Ioctl. - */ - -struct drm_vmw_stream_arg { - __u32 stream_id; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_STREAM - Unclaim a stream. - * - * Return a single stream that was claimed by this process. Also makes - * sure that the stream has been stopped. - */ - -/*************************************************************************/ -/** - * DRM_VMW_GET_3D_CAP - * - * Read 3D capabilities from the FIFO - * - */ - -/** - * struct drm_vmw_get_3d_cap_arg - * - * @buffer: Pointer to a buffer for capability data, cast to an __u64 - * @size: Max size to copy - * - * Input argument to the DRM_VMW_GET_3D_CAP_IOCTL - * ioctls. - */ - -struct drm_vmw_get_3d_cap_arg { - __u64 buffer; - __u32 max_size; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_WAIT - * - * Waits for a fence object to signal. The wait is interruptible, so that - * signals may be delivered during the interrupt. The wait may timeout, - * in which case the calls returns -EBUSY. If the wait is restarted, - * that is restarting without resetting @cookie_valid to zero, - * the timeout is computed from the first call. - * - * The flags argument to the DRM_VMW_FENCE_WAIT ioctl indicates what to wait - * on: - * DRM_VMW_FENCE_FLAG_EXEC: All commands ahead of the fence in the command - * stream - * have executed. - * DRM_VMW_FENCE_FLAG_QUERY: All query results resulting from query finish - * commands - * in the buffer given to the EXECBUF ioctl returning the fence object handle - * are available to user-space. - * - * DRM_VMW_WAIT_OPTION_UNREF: If this wait option is given, and the - * fenc wait ioctl returns 0, the fence object has been unreferenced after - * the wait. - */ - -#define DRM_VMW_FENCE_FLAG_EXEC (1 << 0) -#define DRM_VMW_FENCE_FLAG_QUERY (1 << 1) - -#define DRM_VMW_WAIT_OPTION_UNREF (1 << 0) - -/** - * struct drm_vmw_fence_wait_arg - * - * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. - * @cookie_valid: Must be reset to 0 on first call. Left alone on restart. - * @kernel_cookie: Set to 0 on first call. Left alone on restart. - * @timeout_us: Wait timeout in microseconds. 0 for indefinite timeout. - * @lazy: Set to 1 if timing is not critical. Allow more than a kernel tick - * before returning. - * @flags: Fence flags to wait on. - * @wait_options: Options that control the behaviour of the wait ioctl. - * - * Input argument to the DRM_VMW_FENCE_WAIT ioctl. - */ - -struct drm_vmw_fence_wait_arg { - __u32 handle; - __s32 cookie_valid; - __u64 kernel_cookie; - __u64 timeout_us; - __s32 lazy; - __s32 flags; - __s32 wait_options; - __s32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_SIGNALED - * - * Checks if a fence object is signaled.. - */ - -/** - * struct drm_vmw_fence_signaled_arg - * - * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. - * @flags: Fence object flags input to DRM_VMW_FENCE_SIGNALED ioctl - * @signaled: Out: Flags signaled. - * @sequence: Out: Highest sequence passed so far. Can be used to signal the - * EXEC flag of user-space fence objects. - * - * Input/Output argument to the DRM_VMW_FENCE_SIGNALED and DRM_VMW_FENCE_UNREF - * ioctls. - */ - -struct drm_vmw_fence_signaled_arg { - __u32 handle; - __u32 flags; - __s32 signaled; - __u32 passed_seqno; - __u32 signaled_flags; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_UNREF - * - * Unreferences a fence object, and causes it to be destroyed if there are no - * other references to it. - * - */ - -/** - * struct drm_vmw_fence_arg - * - * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. - * - * Input/Output argument to the DRM_VMW_FENCE_UNREF ioctl.. - */ - -struct drm_vmw_fence_arg { - __u32 handle; - __u32 pad64; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_FENCE_EVENT - * - * Queues an event on a fence to be delivered on the drm character device - * when the fence has signaled the DRM_VMW_FENCE_FLAG_EXEC flag. - * Optionally the approximate time when the fence signaled is - * given by the event. - */ - -/* - * The event type - */ -#define DRM_VMW_EVENT_FENCE_SIGNALED 0x80000000 - -struct drm_vmw_event_fence { - struct drm_event base; - __u64 user_data; - __u32 tv_sec; - __u32 tv_usec; -}; - -/* - * Flags that may be given to the command. - */ -/* Request fence signaled time on the event. */ -#define DRM_VMW_FE_FLAG_REQ_TIME (1 << 0) - -/** - * struct drm_vmw_fence_event_arg - * - * @fence_rep: Pointer to fence_rep structure cast to __u64 or 0 if - * the fence is not supposed to be referenced by user-space. - * @user_info: Info to be delivered with the event. - * @handle: Attach the event to this fence only. - * @flags: A set of flags as defined above. - */ -struct drm_vmw_fence_event_arg { - __u64 fence_rep; - __u64 user_data; - __u32 handle; - __u32 flags; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_PRESENT - * - * Executes an SVGA present on a given fb for a given surface. The surface - * is placed on the framebuffer. Cliprects are given relative to the given - * point (the point disignated by dest_{x|y}). - * - */ - -/** - * struct drm_vmw_present_arg - * @fb_id: framebuffer id to present / read back from. - * @sid: Surface id to present from. - * @dest_x: X placement coordinate for surface. - * @dest_y: Y placement coordinate for surface. - * @clips_ptr: Pointer to an array of clip rects cast to an __u64. - * @num_clips: Number of cliprects given relative to the framebuffer origin, - * in the same coordinate space as the frame buffer. - * @pad64: Unused 64-bit padding. - * - * Input argument to the DRM_VMW_PRESENT ioctl. - */ - -struct drm_vmw_present_arg { - __u32 fb_id; - __u32 sid; - __s32 dest_x; - __s32 dest_y; - __u64 clips_ptr; - __u32 num_clips; - __u32 pad64; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_PRESENT_READBACK - * - * Executes an SVGA present readback from a given fb to the dma buffer - * currently bound as the fb. If there is no dma buffer bound to the fb, - * an error will be returned. - * - */ - -/** - * struct drm_vmw_present_arg - * @fb_id: fb_id to present / read back from. - * @num_clips: Number of cliprects. - * @clips_ptr: Pointer to an array of clip rects cast to an __u64. - * @fence_rep: Pointer to a struct drm_vmw_fence_rep, cast to an __u64. - * If this member is NULL, then the ioctl should not return a fence. - */ - -struct drm_vmw_present_readback_arg { - __u32 fb_id; - __u32 num_clips; - __u64 clips_ptr; - __u64 fence_rep; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UPDATE_LAYOUT - Update layout - * - * Updates the preferred modes and connection status for connectors. The - * command consists of one drm_vmw_update_layout_arg pointing to an array - * of num_outputs drm_vmw_rect's. - */ - -/** - * struct drm_vmw_update_layout_arg - * - * @num_outputs: number of active connectors - * @rects: pointer to array of drm_vmw_rect cast to an __u64 - * - * Input argument to the DRM_VMW_UPDATE_LAYOUT Ioctl. - */ -struct drm_vmw_update_layout_arg { - __u32 num_outputs; - __u32 pad64; - __u64 rects; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_SHADER - Create shader - * - * Creates a shader and optionally binds it to a dma buffer containing - * the shader byte-code. - */ - -/** - * enum drm_vmw_shader_type - Shader types - */ -enum drm_vmw_shader_type { - drm_vmw_shader_type_vs = 0, - drm_vmw_shader_type_ps, -}; - - -/** - * struct drm_vmw_shader_create_arg - * - * @shader_type: Shader type of the shader to create. - * @size: Size of the byte-code in bytes. - * where the shader byte-code starts - * @buffer_handle: Buffer handle identifying the buffer containing the - * shader byte-code - * @shader_handle: On successful completion contains a handle that - * can be used to subsequently identify the shader. - * @offset: Offset in bytes into the buffer given by @buffer_handle, - * - * Input / Output argument to the DRM_VMW_CREATE_SHADER Ioctl. - */ -struct drm_vmw_shader_create_arg { - enum drm_vmw_shader_type shader_type; - __u32 size; - __u32 buffer_handle; - __u32 shader_handle; - __u64 offset; -}; - -/*************************************************************************/ -/** - * DRM_VMW_UNREF_SHADER - Unreferences a shader - * - * Destroys a user-space reference to a shader, optionally destroying - * it. - */ - -/** - * struct drm_vmw_shader_arg - * - * @handle: Handle identifying the shader to destroy. - * - * Input argument to the DRM_VMW_UNREF_SHADER ioctl. - */ -struct drm_vmw_shader_arg { - __u32 handle; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_GB_SURFACE_CREATE - Create a host guest-backed surface. - * - * Allocates a surface handle and queues a create surface command - * for the host on the first use of the surface. The surface ID can - * be used as the surface ID in commands referencing the surface. - */ - -/** - * enum drm_vmw_surface_flags - * - * @drm_vmw_surface_flag_shareable: Whether the surface is shareable - * @drm_vmw_surface_flag_scanout: Whether the surface is a scanout - * surface. - * @drm_vmw_surface_flag_create_buffer: Create a backup buffer if none is - * given. - */ -enum drm_vmw_surface_flags { - drm_vmw_surface_flag_shareable = (1 << 0), - drm_vmw_surface_flag_scanout = (1 << 1), - drm_vmw_surface_flag_create_buffer = (1 << 2) -}; - -/** - * struct drm_vmw_gb_surface_create_req - * - * @svga3d_flags: SVGA3d surface flags for the device. - * @format: SVGA3d format. - * @mip_level: Number of mip levels for all faces. - * @drm_surface_flags Flags as described above. - * @multisample_count Future use. Set to 0. - * @autogen_filter Future use. Set to 0. - * @buffer_handle Buffer handle of backup buffer. SVGA3D_INVALID_ID - * if none. - * @base_size Size of the base mip level for all faces. - * @array_size Must be zero for non-DX hardware, and if non-zero - * svga3d_flags must have proper bind flags setup. - * - * Input argument to the DRM_VMW_GB_SURFACE_CREATE Ioctl. - * Part of output argument for the DRM_VMW_GB_SURFACE_REF Ioctl. - */ -struct drm_vmw_gb_surface_create_req { - __u32 svga3d_flags; - __u32 format; - __u32 mip_levels; - enum drm_vmw_surface_flags drm_surface_flags; - __u32 multisample_count; - __u32 autogen_filter; - __u32 buffer_handle; - __u32 array_size; - struct drm_vmw_size base_size; -}; - -/** - * struct drm_vmw_gb_surface_create_rep - * - * @handle: Surface handle. - * @backup_size: Size of backup buffers for this surface. - * @buffer_handle: Handle of backup buffer. SVGA3D_INVALID_ID if none. - * @buffer_size: Actual size of the buffer identified by - * @buffer_handle - * @buffer_map_handle: Offset into device address space for the buffer - * identified by @buffer_handle. - * - * Part of output argument for the DRM_VMW_GB_SURFACE_REF ioctl. - * Output argument for the DRM_VMW_GB_SURFACE_CREATE ioctl. - */ -struct drm_vmw_gb_surface_create_rep { - __u32 handle; - __u32 backup_size; - __u32 buffer_handle; - __u32 buffer_size; - __u64 buffer_map_handle; -}; - -/** - * union drm_vmw_gb_surface_create_arg - * - * @req: Input argument as described above. - * @rep: Output argument as described above. - * - * Argument to the DRM_VMW_GB_SURFACE_CREATE ioctl. - */ -union drm_vmw_gb_surface_create_arg { - struct drm_vmw_gb_surface_create_rep rep; - struct drm_vmw_gb_surface_create_req req; -}; - -/*************************************************************************/ -/** - * DRM_VMW_GB_SURFACE_REF - Reference a host surface. - * - * Puts a reference on a host surface with a given handle, as previously - * returned by the DRM_VMW_GB_SURFACE_CREATE ioctl. - * A reference will make sure the surface isn't destroyed while we hold - * it and will allow the calling client to use the surface handle in - * the command stream. - * - * On successful return, the Ioctl returns the surface information given - * to and returned from the DRM_VMW_GB_SURFACE_CREATE ioctl. - */ - -/** - * struct drm_vmw_gb_surface_reference_arg - * - * @creq: The data used as input when the surface was created, as described - * above at "struct drm_vmw_gb_surface_create_req" - * @crep: Additional data output when the surface was created, as described - * above at "struct drm_vmw_gb_surface_create_rep" - * - * Output Argument to the DRM_VMW_GB_SURFACE_REF ioctl. - */ -struct drm_vmw_gb_surface_ref_rep { - struct drm_vmw_gb_surface_create_req creq; - struct drm_vmw_gb_surface_create_rep crep; -}; - -/** - * union drm_vmw_gb_surface_reference_arg - * - * @req: Input data as described above at "struct drm_vmw_surface_arg" - * @rep: Output data as described above at "struct drm_vmw_gb_surface_ref_rep" - * - * Argument to the DRM_VMW_GB_SURFACE_REF Ioctl. - */ -union drm_vmw_gb_surface_reference_arg { - struct drm_vmw_gb_surface_ref_rep rep; - struct drm_vmw_surface_arg req; -}; - - -/*************************************************************************/ -/** - * DRM_VMW_SYNCCPU - Sync a DMA buffer / MOB for CPU access. - * - * Idles any previously submitted GPU operations on the buffer and - * by default blocks command submissions that reference the buffer. - * If the file descriptor used to grab a blocking CPU sync is closed, the - * cpu sync is released. - * The flags argument indicates how the grab / release operation should be - * performed: - */ - -/** - * enum drm_vmw_synccpu_flags - Synccpu flags: - * - * @drm_vmw_synccpu_read: Sync for read. If sync is done for read only, it's a - * hint to the kernel to allow command submissions that references the buffer - * for read-only. - * @drm_vmw_synccpu_write: Sync for write. Block all command submissions - * referencing this buffer. - * @drm_vmw_synccpu_dontblock: Don't wait for GPU idle, but rather return - * -EBUSY should the buffer be busy. - * @drm_vmw_synccpu_allow_cs: Allow command submission that touches the buffer - * while the buffer is synced for CPU. This is similar to the GEM bo idle - * behavior. - */ -enum drm_vmw_synccpu_flags { - drm_vmw_synccpu_read = (1 << 0), - drm_vmw_synccpu_write = (1 << 1), - drm_vmw_synccpu_dontblock = (1 << 2), - drm_vmw_synccpu_allow_cs = (1 << 3) -}; - -/** - * enum drm_vmw_synccpu_op - Synccpu operations: - * - * @drm_vmw_synccpu_grab: Grab the buffer for CPU operations - * @drm_vmw_synccpu_release: Release a previous grab. - */ -enum drm_vmw_synccpu_op { - drm_vmw_synccpu_grab, - drm_vmw_synccpu_release -}; - -/** - * struct drm_vmw_synccpu_arg - * - * @op: The synccpu operation as described above. - * @handle: Handle identifying the buffer object. - * @flags: Flags as described above. - */ -struct drm_vmw_synccpu_arg { - enum drm_vmw_synccpu_op op; - enum drm_vmw_synccpu_flags flags; - __u32 handle; - __u32 pad64; -}; - -/*************************************************************************/ -/** - * DRM_VMW_CREATE_EXTENDED_CONTEXT - Create a host context. - * - * Allocates a device unique context id, and queues a create context command - * for the host. Does not wait for host completion. - */ -enum drm_vmw_extended_context { - drm_vmw_context_legacy, - drm_vmw_context_dx -}; - -/** - * union drm_vmw_extended_context_arg - * - * @req: Context type. - * @rep: Context identifier. - * - * Argument to the DRM_VMW_CREATE_EXTENDED_CONTEXT Ioctl. - */ -union drm_vmw_extended_context_arg { - enum drm_vmw_extended_context req; - struct drm_vmw_context_arg rep; -}; - -/*************************************************************************/ -/* - * DRM_VMW_HANDLE_CLOSE - Close a user-space handle and release its - * underlying resource. - * - * Note that this ioctl is overlaid on the DRM_VMW_UNREF_DMABUF Ioctl. - * The ioctl arguments therefore need to be identical in layout. - * - */ - -/** - * struct drm_vmw_handle_close_arg - * - * @handle: Handle to close. - * - * Argument to the DRM_VMW_HANDLE_CLOSE Ioctl. - */ -struct drm_vmw_handle_close_arg { - __u32 handle; - __u32 pad64; -}; - - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/libpostproc/postprocess.h b/prebuilts/x86_64/include/libpostproc/postprocess.h deleted file mode 100644 index 348ee7c..0000000 --- a/prebuilts/x86_64/include/libpostproc/postprocess.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2001-2003 Michael Niedermayer (michaelni@gmx.at) - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef POSTPROC_POSTPROCESS_H -#define POSTPROC_POSTPROCESS_H - -/** - * @file - * @ingroup lpp - * external API header - */ - -/** - * @defgroup lpp libpostproc - * Video postprocessing library. - * - * @{ - */ - -#include "libpostproc/version.h" - -/** - * Return the LIBPOSTPROC_VERSION_INT constant. - */ -unsigned postproc_version(void); - -/** - * Return the libpostproc build-time configuration. - */ -const char *postproc_configuration(void); - -/** - * Return the libpostproc license. - */ -const char *postproc_license(void); - -#define PP_QUALITY_MAX 6 - -#include - -typedef void pp_context; -typedef void pp_mode; - -#if LIBPOSTPROC_VERSION_INT < (52<<16) -typedef pp_context pp_context_t; -typedef pp_mode pp_mode_t; -extern const char *const pp_help; ///< a simple help text -#else -extern const char pp_help[]; ///< a simple help text -#endif - -void pp_postprocess(const uint8_t * src[3], const int srcStride[3], - uint8_t * dst[3], const int dstStride[3], - int horizontalSize, int verticalSize, - const int8_t *QP_store, int QP_stride, - pp_mode *mode, pp_context *ppContext, int pict_type); - - -/** - * Return a pp_mode or NULL if an error occurred. - * - * @param name the string after "-pp" on the command line - * @param quality a number from 0 to PP_QUALITY_MAX - */ -pp_mode *pp_get_mode_by_name_and_quality(const char *name, int quality); -void pp_free_mode(pp_mode *mode); - -pp_context *pp_get_context(int width, int height, int flags); -void pp_free_context(pp_context *ppContext); - -#define PP_CPU_CAPS_MMX 0x80000000 -#define PP_CPU_CAPS_MMX2 0x20000000 -#define PP_CPU_CAPS_3DNOW 0x40000000 -#define PP_CPU_CAPS_ALTIVEC 0x10000000 -#define PP_CPU_CAPS_AUTO 0x00080000 - -#define PP_FORMAT 0x00000008 -#define PP_FORMAT_420 (0x00000011|PP_FORMAT) -#define PP_FORMAT_422 (0x00000001|PP_FORMAT) -#define PP_FORMAT_411 (0x00000002|PP_FORMAT) -#define PP_FORMAT_444 (0x00000000|PP_FORMAT) -#define PP_FORMAT_440 (0x00000010|PP_FORMAT) - -#define PP_PICT_TYPE_QP2 0x00000010 ///< MPEG2 style QScale - -/** - * @} - */ - -#endif /* POSTPROC_POSTPROCESS_H */ diff --git a/prebuilts/x86_64/include/libpostproc/version.h b/prebuilts/x86_64/include/libpostproc/version.h deleted file mode 100644 index 812f8e0..0000000 --- a/prebuilts/x86_64/include/libpostproc/version.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef POSTPROC_VERSION_H -#define POSTPROC_VERSION_H - -/** - * @file - * Libpostproc version macros - */ - -#include "libavutil/avutil.h" - -#define LIBPOSTPROC_VERSION_MAJOR 55 -#define LIBPOSTPROC_VERSION_MINOR 9 -#define LIBPOSTPROC_VERSION_MICRO 100 - -#define LIBPOSTPROC_VERSION_INT AV_VERSION_INT(LIBPOSTPROC_VERSION_MAJOR, \ - LIBPOSTPROC_VERSION_MINOR, \ - LIBPOSTPROC_VERSION_MICRO) -#define LIBPOSTPROC_VERSION AV_VERSION(LIBPOSTPROC_VERSION_MAJOR, \ - LIBPOSTPROC_VERSION_MINOR, \ - LIBPOSTPROC_VERSION_MICRO) -#define LIBPOSTPROC_BUILD LIBPOSTPROC_VERSION_INT - -#define LIBPOSTPROC_IDENT "postproc" AV_STRINGIFY(LIBPOSTPROC_VERSION) - -#endif /* POSTPROC_VERSION_H */ diff --git a/prebuilts/x86_64/include/libswresample/swresample.h b/prebuilts/x86_64/include/libswresample/swresample.h deleted file mode 100644 index c7b84fb..0000000 --- a/prebuilts/x86_64/include/libswresample/swresample.h +++ /dev/null @@ -1,579 +0,0 @@ -/* - * Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at) - * - * This file is part of libswresample - * - * libswresample is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * libswresample is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with libswresample; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWRESAMPLE_SWRESAMPLE_H -#define SWRESAMPLE_SWRESAMPLE_H - -/** - * @file - * @ingroup lswr - * libswresample public header - */ - -/** - * @defgroup lswr libswresample - * @{ - * - * Audio resampling, sample format conversion and mixing library. - * - * Interaction with lswr is done through SwrContext, which is - * allocated with swr_alloc() or swr_alloc_set_opts(). It is opaque, so all parameters - * must be set with the @ref avoptions API. - * - * The first thing you will need to do in order to use lswr is to allocate - * SwrContext. This can be done with swr_alloc() or swr_alloc_set_opts(). If you - * are using the former, you must set options through the @ref avoptions API. - * The latter function provides the same feature, but it allows you to set some - * common options in the same statement. - * - * For example the following code will setup conversion from planar float sample - * format to interleaved signed 16-bit integer, downsampling from 48kHz to - * 44.1kHz and downmixing from 5.1 channels to stereo (using the default mixing - * matrix). This is using the swr_alloc() function. - * @code - * SwrContext *swr = swr_alloc(); - * av_opt_set_channel_layout(swr, "in_channel_layout", AV_CH_LAYOUT_5POINT1, 0); - * av_opt_set_channel_layout(swr, "out_channel_layout", AV_CH_LAYOUT_STEREO, 0); - * av_opt_set_int(swr, "in_sample_rate", 48000, 0); - * av_opt_set_int(swr, "out_sample_rate", 44100, 0); - * av_opt_set_sample_fmt(swr, "in_sample_fmt", AV_SAMPLE_FMT_FLTP, 0); - * av_opt_set_sample_fmt(swr, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0); - * @endcode - * - * The same job can be done using swr_alloc_set_opts() as well: - * @code - * SwrContext *swr = swr_alloc_set_opts(NULL, // we're allocating a new context - * AV_CH_LAYOUT_STEREO, // out_ch_layout - * AV_SAMPLE_FMT_S16, // out_sample_fmt - * 44100, // out_sample_rate - * AV_CH_LAYOUT_5POINT1, // in_ch_layout - * AV_SAMPLE_FMT_FLTP, // in_sample_fmt - * 48000, // in_sample_rate - * 0, // log_offset - * NULL); // log_ctx - * @endcode - * - * Once all values have been set, it must be initialized with swr_init(). If - * you need to change the conversion parameters, you can change the parameters - * using @ref AVOptions, as described above in the first example; or by using - * swr_alloc_set_opts(), but with the first argument the allocated context. - * You must then call swr_init() again. - * - * The conversion itself is done by repeatedly calling swr_convert(). - * Note that the samples may get buffered in swr if you provide insufficient - * output space or if sample rate conversion is done, which requires "future" - * samples. Samples that do not require future input can be retrieved at any - * time by using swr_convert() (in_count can be set to 0). - * At the end of conversion the resampling buffer can be flushed by calling - * swr_convert() with NULL in and 0 in_count. - * - * The samples used in the conversion process can be managed with the libavutil - * @ref lavu_sampmanip "samples manipulation" API, including av_samples_alloc() - * function used in the following example. - * - * The delay between input and output, can at any time be found by using - * swr_get_delay(). - * - * The following code demonstrates the conversion loop assuming the parameters - * from above and caller-defined functions get_input() and handle_output(): - * @code - * uint8_t **input; - * int in_samples; - * - * while (get_input(&input, &in_samples)) { - * uint8_t *output; - * int out_samples = av_rescale_rnd(swr_get_delay(swr, 48000) + - * in_samples, 44100, 48000, AV_ROUND_UP); - * av_samples_alloc(&output, NULL, 2, out_samples, - * AV_SAMPLE_FMT_S16, 0); - * out_samples = swr_convert(swr, &output, out_samples, - * input, in_samples); - * handle_output(output, out_samples); - * av_freep(&output); - * } - * @endcode - * - * When the conversion is finished, the conversion - * context and everything associated with it must be freed with swr_free(). - * A swr_close() function is also available, but it exists mainly for - * compatibility with libavresample, and is not required to be called. - * - * There will be no memory leak if the data is not completely flushed before - * swr_free(). - */ - -#include -#include "libavutil/channel_layout.h" -#include "libavutil/frame.h" -#include "libavutil/samplefmt.h" - -#include "libswresample/version.h" - -/** - * @name Option constants - * These constants are used for the @ref avoptions interface for lswr. - * @{ - * - */ - -#define SWR_FLAG_RESAMPLE 1 ///< Force resampling even if equal sample rate -//TODO use int resample ? -//long term TODO can we enable this dynamically? - -/** Dithering algorithms */ -enum SwrDitherType { - SWR_DITHER_NONE = 0, - SWR_DITHER_RECTANGULAR, - SWR_DITHER_TRIANGULAR, - SWR_DITHER_TRIANGULAR_HIGHPASS, - - SWR_DITHER_NS = 64, ///< not part of API/ABI - SWR_DITHER_NS_LIPSHITZ, - SWR_DITHER_NS_F_WEIGHTED, - SWR_DITHER_NS_MODIFIED_E_WEIGHTED, - SWR_DITHER_NS_IMPROVED_E_WEIGHTED, - SWR_DITHER_NS_SHIBATA, - SWR_DITHER_NS_LOW_SHIBATA, - SWR_DITHER_NS_HIGH_SHIBATA, - SWR_DITHER_NB, ///< not part of API/ABI -}; - -/** Resampling Engines */ -enum SwrEngine { - SWR_ENGINE_SWR, /**< SW Resampler */ - SWR_ENGINE_SOXR, /**< SoX Resampler */ - SWR_ENGINE_NB, ///< not part of API/ABI -}; - -/** Resampling Filter Types */ -enum SwrFilterType { - SWR_FILTER_TYPE_CUBIC, /**< Cubic */ - SWR_FILTER_TYPE_BLACKMAN_NUTTALL, /**< Blackman Nuttall windowed sinc */ - SWR_FILTER_TYPE_KAISER, /**< Kaiser windowed sinc */ -}; - -/** - * @} - */ - -/** - * The libswresample context. Unlike libavcodec and libavformat, this structure - * is opaque. This means that if you would like to set options, you must use - * the @ref avoptions API and cannot directly set values to members of the - * structure. - */ -typedef struct SwrContext SwrContext; - -/** - * Get the AVClass for SwrContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - * @return the AVClass of SwrContext - */ -const AVClass *swr_get_class(void); - -/** - * @name SwrContext constructor functions - * @{ - */ - -/** - * Allocate SwrContext. - * - * If you use this function you will need to set the parameters (manually or - * with swr_alloc_set_opts()) before calling swr_init(). - * - * @see swr_alloc_set_opts(), swr_init(), swr_free() - * @return NULL on error, allocated context otherwise - */ -struct SwrContext *swr_alloc(void); - -/** - * Initialize context after user parameters have been set. - * @note The context must be configured using the AVOption API. - * - * @see av_opt_set_int() - * @see av_opt_set_dict() - * - * @param[in,out] s Swr context to initialize - * @return AVERROR error code in case of failure. - */ -int swr_init(struct SwrContext *s); - -/** - * Check whether an swr context has been initialized or not. - * - * @param[in] s Swr context to check - * @see swr_init() - * @return positive if it has been initialized, 0 if not initialized - */ -int swr_is_initialized(struct SwrContext *s); - -/** - * Allocate SwrContext if needed and set/reset common parameters. - * - * This function does not require s to be allocated with swr_alloc(). On the - * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters - * on the allocated context. - * - * @param s existing Swr context if available, or NULL if not - * @param out_ch_layout output channel layout (AV_CH_LAYOUT_*) - * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*). - * @param out_sample_rate output sample rate (frequency in Hz) - * @param in_ch_layout input channel layout (AV_CH_LAYOUT_*) - * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*). - * @param in_sample_rate input sample rate (frequency in Hz) - * @param log_offset logging level offset - * @param log_ctx parent logging context, can be NULL - * - * @see swr_init(), swr_free() - * @return NULL on error, allocated context otherwise - */ -struct SwrContext *swr_alloc_set_opts(struct SwrContext *s, - int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate, - int64_t in_ch_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate, - int log_offset, void *log_ctx); - -/** - * @} - * - * @name SwrContext destructor functions - * @{ - */ - -/** - * Free the given SwrContext and set the pointer to NULL. - * - * @param[in] s a pointer to a pointer to Swr context - */ -void swr_free(struct SwrContext **s); - -/** - * Closes the context so that swr_is_initialized() returns 0. - * - * The context can be brought back to life by running swr_init(), - * swr_init() can also be used without swr_close(). - * This function is mainly provided for simplifying the usecase - * where one tries to support libavresample and libswresample. - * - * @param[in,out] s Swr context to be closed - */ -void swr_close(struct SwrContext *s); - -/** - * @} - * - * @name Core conversion functions - * @{ - */ - -/** Convert audio. - * - * in and in_count can be set to 0 to flush the last few samples out at the - * end. - * - * If more input is provided than output space, then the input will be buffered. - * You can avoid this buffering by using swr_get_out_samples() to retrieve an - * upper bound on the required number of output samples for the given number of - * input samples. Conversion will run directly without copying whenever possible. - * - * @param s allocated Swr context, with parameters set - * @param out output buffers, only the first one need be set in case of packed audio - * @param out_count amount of space available for output in samples per channel - * @param in input buffers, only the first one need to be set in case of packed audio - * @param in_count number of input samples available in one channel - * - * @return number of samples output per channel, negative value on error - */ -int swr_convert(struct SwrContext *s, uint8_t **out, int out_count, - const uint8_t **in , int in_count); - -/** - * Convert the next timestamp from input to output - * timestamps are in 1/(in_sample_rate * out_sample_rate) units. - * - * @note There are 2 slightly differently behaving modes. - * @li When automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) - * in this case timestamps will be passed through with delays compensated - * @li When automatic timestamp compensation is used, (min_compensation < FLT_MAX) - * in this case the output timestamps will match output sample numbers. - * See ffmpeg-resampler(1) for the two modes of compensation. - * - * @param s[in] initialized Swr context - * @param pts[in] timestamp for the next input sample, INT64_MIN if unknown - * @see swr_set_compensation(), swr_drop_output(), and swr_inject_silence() are - * function used internally for timestamp compensation. - * @return the output timestamp for the next output sample - */ -int64_t swr_next_pts(struct SwrContext *s, int64_t pts); - -/** - * @} - * - * @name Low-level option setting functions - * These functons provide a means to set low-level options that is not possible - * with the AVOption API. - * @{ - */ - -/** - * Activate resampling compensation ("soft" compensation). This function is - * internally called when needed in swr_next_pts(). - * - * @param[in,out] s allocated Swr context. If it is not initialized, - * or SWR_FLAG_RESAMPLE is not set, swr_init() is - * called with the flag set. - * @param[in] sample_delta delta in PTS per sample - * @param[in] compensation_distance number of samples to compensate for - * @return >= 0 on success, AVERROR error codes if: - * @li @c s is NULL, - * @li @c compensation_distance is less than 0, - * @li @c compensation_distance is 0 but sample_delta is not, - * @li compensation unsupported by resampler, or - * @li swr_init() fails when called. - */ -int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensation_distance); - -/** - * Set a customized input channel mapping. - * - * @param[in,out] s allocated Swr context, not yet initialized - * @param[in] channel_map customized input channel mapping (array of channel - * indexes, -1 for a muted channel) - * @return >= 0 on success, or AVERROR error code in case of failure. - */ -int swr_set_channel_mapping(struct SwrContext *s, const int *channel_map); - -/** - * Generate a channel mixing matrix. - * - * This function is the one used internally by libswresample for building the - * default mixing matrix. It is made public just as a utility function for - * building custom matrices. - * - * @param in_layout input channel layout - * @param out_layout output channel layout - * @param center_mix_level mix level for the center channel - * @param surround_mix_level mix level for the surround channel(s) - * @param lfe_mix_level mix level for the low-frequency effects channel - * @param rematrix_maxval if 1.0, coefficients will be normalized to prevent - * overflow. if INT_MAX, coefficients will not be - * normalized. - * @param[out] matrix mixing coefficients; matrix[i + stride * o] is - * the weight of input channel i in output channel o. - * @param stride distance between adjacent input channels in the - * matrix array - * @param matrix_encoding matrixed stereo downmix mode (e.g. dplii) - * @param log_ctx parent logging context, can be NULL - * @return 0 on success, negative AVERROR code on failure - */ -int swr_build_matrix(uint64_t in_layout, uint64_t out_layout, - double center_mix_level, double surround_mix_level, - double lfe_mix_level, double rematrix_maxval, - double rematrix_volume, double *matrix, - int stride, enum AVMatrixEncoding matrix_encoding, - void *log_ctx); - -/** - * Set a customized remix matrix. - * - * @param s allocated Swr context, not yet initialized - * @param matrix remix coefficients; matrix[i + stride * o] is - * the weight of input channel i in output channel o - * @param stride offset between lines of the matrix - * @return >= 0 on success, or AVERROR error code in case of failure. - */ -int swr_set_matrix(struct SwrContext *s, const double *matrix, int stride); - -/** - * @} - * - * @name Sample handling functions - * @{ - */ - -/** - * Drops the specified number of output samples. - * - * This function, along with swr_inject_silence(), is called by swr_next_pts() - * if needed for "hard" compensation. - * - * @param s allocated Swr context - * @param count number of samples to be dropped - * - * @return >= 0 on success, or a negative AVERROR code on failure - */ -int swr_drop_output(struct SwrContext *s, int count); - -/** - * Injects the specified number of silence samples. - * - * This function, along with swr_drop_output(), is called by swr_next_pts() - * if needed for "hard" compensation. - * - * @param s allocated Swr context - * @param count number of samples to be dropped - * - * @return >= 0 on success, or a negative AVERROR code on failure - */ -int swr_inject_silence(struct SwrContext *s, int count); - -/** - * Gets the delay the next input sample will experience relative to the next output sample. - * - * Swresample can buffer data if more input has been provided than available - * output space, also converting between sample rates needs a delay. - * This function returns the sum of all such delays. - * The exact delay is not necessarily an integer value in either input or - * output sample rate. Especially when downsampling by a large value, the - * output sample rate may be a poor choice to represent the delay, similarly - * for upsampling and the input sample rate. - * - * @param s swr context - * @param base timebase in which the returned delay will be: - * @li if it's set to 1 the returned delay is in seconds - * @li if it's set to 1000 the returned delay is in milliseconds - * @li if it's set to the input sample rate then the returned - * delay is in input samples - * @li if it's set to the output sample rate then the returned - * delay is in output samples - * @li if it's the least common multiple of in_sample_rate and - * out_sample_rate then an exact rounding-free delay will be - * returned - * @returns the delay in 1 / @c base units. - */ -int64_t swr_get_delay(struct SwrContext *s, int64_t base); - -/** - * Find an upper bound on the number of samples that the next swr_convert - * call will output, if called with in_samples of input samples. This - * depends on the internal state, and anything changing the internal state - * (like further swr_convert() calls) will may change the number of samples - * swr_get_out_samples() returns for the same number of input samples. - * - * @param in_samples number of input samples. - * @note any call to swr_inject_silence(), swr_convert(), swr_next_pts() - * or swr_set_compensation() invalidates this limit - * @note it is recommended to pass the correct available buffer size - * to all functions like swr_convert() even if swr_get_out_samples() - * indicates that less would be used. - * @returns an upper bound on the number of samples that the next swr_convert - * will output or a negative value to indicate an error - */ -int swr_get_out_samples(struct SwrContext *s, int in_samples); - -/** - * @} - * - * @name Configuration accessors - * @{ - */ - -/** - * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. - * - * This is useful to check if the build-time libswresample has the same version - * as the run-time one. - * - * @returns the unsigned int-typed version - */ -unsigned swresample_version(void); - -/** - * Return the swr build-time configuration. - * - * @returns the build-time @c ./configure flags - */ -const char *swresample_configuration(void); - -/** - * Return the swr license. - * - * @returns the license of libswresample, determined at build-time - */ -const char *swresample_license(void); - -/** - * @} - * - * @name AVFrame based API - * @{ - */ - -/** - * Convert the samples in the input AVFrame and write them to the output AVFrame. - * - * Input and output AVFrames must have channel_layout, sample_rate and format set. - * - * If the output AVFrame does not have the data pointers allocated the nb_samples - * field will be set using av_frame_get_buffer() - * is called to allocate the frame. - * - * The output AVFrame can be NULL or have fewer allocated samples than required. - * In this case, any remaining samples not written to the output will be added - * to an internal FIFO buffer, to be returned at the next call to this function - * or to swr_convert(). - * - * If converting sample rate, there may be data remaining in the internal - * resampling delay buffer. swr_get_delay() tells the number of - * remaining samples. To get this data as output, call this function or - * swr_convert() with NULL input. - * - * If the SwrContext configuration does not match the output and - * input AVFrame settings the conversion does not take place and depending on - * which AVFrame is not matching AVERROR_OUTPUT_CHANGED, AVERROR_INPUT_CHANGED - * or the result of a bitwise-OR of them is returned. - * - * @see swr_delay() - * @see swr_convert() - * @see swr_get_delay() - * - * @param swr audio resample context - * @param output output AVFrame - * @param input input AVFrame - * @return 0 on success, AVERROR on failure or nonmatching - * configuration. - */ -int swr_convert_frame(SwrContext *swr, - AVFrame *output, const AVFrame *input); - -/** - * Configure or reconfigure the SwrContext using the information - * provided by the AVFrames. - * - * The original resampling context is reset even on failure. - * The function calls swr_close() internally if the context is open. - * - * @see swr_close(); - * - * @param swr audio resample context - * @param output output AVFrame - * @param input input AVFrame - * @return 0 on success, AVERROR on failure. - */ -int swr_config_frame(SwrContext *swr, const AVFrame *out, const AVFrame *in); - -/** - * @} - * @} - */ - -#endif /* SWRESAMPLE_SWRESAMPLE_H */ diff --git a/prebuilts/x86_64/include/libswresample/version.h b/prebuilts/x86_64/include/libswresample/version.h deleted file mode 100644 index 0a99e0f..0000000 --- a/prebuilts/x86_64/include/libswresample/version.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Version macros. - * - * This file is part of libswresample - * - * libswresample is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * libswresample is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with libswresample; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWRESAMPLE_VERSION_H -#define SWRESAMPLE_VERSION_H - -/** - * @file - * Libswresample version macros - */ - -#include "libavutil/avutil.h" - -#define LIBSWRESAMPLE_VERSION_MAJOR 3 -#define LIBSWRESAMPLE_VERSION_MINOR 9 -#define LIBSWRESAMPLE_VERSION_MICRO 100 - -#define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ - LIBSWRESAMPLE_VERSION_MINOR, \ - LIBSWRESAMPLE_VERSION_MICRO) -#define LIBSWRESAMPLE_VERSION AV_VERSION(LIBSWRESAMPLE_VERSION_MAJOR, \ - LIBSWRESAMPLE_VERSION_MINOR, \ - LIBSWRESAMPLE_VERSION_MICRO) -#define LIBSWRESAMPLE_BUILD LIBSWRESAMPLE_VERSION_INT - -#define LIBSWRESAMPLE_IDENT "SwR" AV_STRINGIFY(LIBSWRESAMPLE_VERSION) - -#endif /* SWRESAMPLE_VERSION_H */ diff --git a/prebuilts/x86_64/include/libswscale/swscale.h b/prebuilts/x86_64/include/libswscale/swscale.h deleted file mode 100644 index 7713f51..0000000 --- a/prebuilts/x86_64/include/libswscale/swscale.h +++ /dev/null @@ -1,336 +0,0 @@ -/* - * Copyright (C) 2001-2011 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_SWSCALE_H -#define SWSCALE_SWSCALE_H - -/** - * @file - * @ingroup libsws - * external API header - */ - -#include - -#include "libavutil/avutil.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "version.h" - -/** - * @defgroup libsws libswscale - * Color conversion and scaling library. - * - * @{ - * - * Return the LIBSWSCALE_VERSION_INT constant. - */ -unsigned swscale_version(void); - -/** - * Return the libswscale build-time configuration. - */ -const char *swscale_configuration(void); - -/** - * Return the libswscale license. - */ -const char *swscale_license(void); - -/* values for the flags, the stuff on the command line is different */ -#define SWS_FAST_BILINEAR 1 -#define SWS_BILINEAR 2 -#define SWS_BICUBIC 4 -#define SWS_X 8 -#define SWS_POINT 0x10 -#define SWS_AREA 0x20 -#define SWS_BICUBLIN 0x40 -#define SWS_GAUSS 0x80 -#define SWS_SINC 0x100 -#define SWS_LANCZOS 0x200 -#define SWS_SPLINE 0x400 - -#define SWS_SRC_V_CHR_DROP_MASK 0x30000 -#define SWS_SRC_V_CHR_DROP_SHIFT 16 - -#define SWS_PARAM_DEFAULT 123456 - -#define SWS_PRINT_INFO 0x1000 - -//the following 3 flags are not completely implemented -//internal chrominance subsampling info -#define SWS_FULL_CHR_H_INT 0x2000 -//input subsampling info -#define SWS_FULL_CHR_H_INP 0x4000 -#define SWS_DIRECT_BGR 0x8000 -#define SWS_ACCURATE_RND 0x40000 -#define SWS_BITEXACT 0x80000 -#define SWS_ERROR_DIFFUSION 0x800000 - -#define SWS_MAX_REDUCE_CUTOFF 0.002 - -#define SWS_CS_ITU709 1 -#define SWS_CS_FCC 4 -#define SWS_CS_ITU601 5 -#define SWS_CS_ITU624 5 -#define SWS_CS_SMPTE170M 5 -#define SWS_CS_SMPTE240M 7 -#define SWS_CS_DEFAULT 5 -#define SWS_CS_BT2020 9 - -/** - * Return a pointer to yuv<->rgb coefficients for the given colorspace - * suitable for sws_setColorspaceDetails(). - * - * @param colorspace One of the SWS_CS_* macros. If invalid, - * SWS_CS_DEFAULT is used. - */ -const int *sws_getCoefficients(int colorspace); - -// when used for filters they must have an odd number of elements -// coeffs cannot be shared between vectors -typedef struct SwsVector { - double *coeff; ///< pointer to the list of coefficients - int length; ///< number of coefficients in the vector -} SwsVector; - -// vectors can be shared -typedef struct SwsFilter { - SwsVector *lumH; - SwsVector *lumV; - SwsVector *chrH; - SwsVector *chrV; -} SwsFilter; - -struct SwsContext; - -/** - * Return a positive value if pix_fmt is a supported input format, 0 - * otherwise. - */ -int sws_isSupportedInput(enum AVPixelFormat pix_fmt); - -/** - * Return a positive value if pix_fmt is a supported output format, 0 - * otherwise. - */ -int sws_isSupportedOutput(enum AVPixelFormat pix_fmt); - -/** - * @param[in] pix_fmt the pixel format - * @return a positive value if an endianness conversion for pix_fmt is - * supported, 0 otherwise. - */ -int sws_isSupportedEndiannessConversion(enum AVPixelFormat pix_fmt); - -/** - * Allocate an empty SwsContext. This must be filled and passed to - * sws_init_context(). For filling see AVOptions, options.c and - * sws_setColorspaceDetails(). - */ -struct SwsContext *sws_alloc_context(void); - -/** - * Initialize the swscaler context sws_context. - * - * @return zero or positive value on success, a negative value on - * error - */ -av_warn_unused_result -int sws_init_context(struct SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter); - -/** - * Free the swscaler context swsContext. - * If swsContext is NULL, then does nothing. - */ -void sws_freeContext(struct SwsContext *swsContext); - -/** - * Allocate and return an SwsContext. You need it to perform - * scaling/conversion operations using sws_scale(). - * - * @param srcW the width of the source image - * @param srcH the height of the source image - * @param srcFormat the source image format - * @param dstW the width of the destination image - * @param dstH the height of the destination image - * @param dstFormat the destination image format - * @param flags specify which algorithm and options to use for rescaling - * @param param extra parameters to tune the used scaler - * For SWS_BICUBIC param[0] and [1] tune the shape of the basis - * function, param[0] tunes f(1) and param[1] f´(1) - * For SWS_GAUSS param[0] tunes the exponent and thus cutoff - * frequency - * For SWS_LANCZOS param[0] tunes the width of the window function - * @return a pointer to an allocated context, or NULL in case of error - * @note this function is to be removed after a saner alternative is - * written - */ -struct SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat, - int dstW, int dstH, enum AVPixelFormat dstFormat, - int flags, SwsFilter *srcFilter, - SwsFilter *dstFilter, const double *param); - -/** - * Scale the image slice in srcSlice and put the resulting scaled - * slice in the image in dst. A slice is a sequence of consecutive - * rows in an image. - * - * Slices have to be provided in sequential order, either in - * top-bottom or bottom-top order. If slices are provided in - * non-sequential order the behavior of the function is undefined. - * - * @param c the scaling context previously created with - * sws_getContext() - * @param srcSlice the array containing the pointers to the planes of - * the source slice - * @param srcStride the array containing the strides for each plane of - * the source image - * @param srcSliceY the position in the source image of the slice to - * process, that is the number (counted starting from - * zero) in the image of the first row of the slice - * @param srcSliceH the height of the source slice, that is the number - * of rows in the slice - * @param dst the array containing the pointers to the planes of - * the destination image - * @param dstStride the array containing the strides for each plane of - * the destination image - * @return the height of the output slice - */ -int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], - const int srcStride[], int srcSliceY, int srcSliceH, - uint8_t *const dst[], const int dstStride[]); - -/** - * @param dstRange flag indicating the while-black range of the output (1=jpeg / 0=mpeg) - * @param srcRange flag indicating the while-black range of the input (1=jpeg / 0=mpeg) - * @param table the yuv2rgb coefficients describing the output yuv space, normally ff_yuv2rgb_coeffs[x] - * @param inv_table the yuv2rgb coefficients describing the input yuv space, normally ff_yuv2rgb_coeffs[x] - * @param brightness 16.16 fixed point brightness correction - * @param contrast 16.16 fixed point contrast correction - * @param saturation 16.16 fixed point saturation correction - * @return -1 if not supported - */ -int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], - int srcRange, const int table[4], int dstRange, - int brightness, int contrast, int saturation); - -/** - * @return -1 if not supported - */ -int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, - int *srcRange, int **table, int *dstRange, - int *brightness, int *contrast, int *saturation); - -/** - * Allocate and return an uninitialized vector with length coefficients. - */ -SwsVector *sws_allocVec(int length); - -/** - * Return a normalized Gaussian curve used to filter stuff - * quality = 3 is high quality, lower is lower quality. - */ -SwsVector *sws_getGaussianVec(double variance, double quality); - -/** - * Scale all the coefficients of a by the scalar value. - */ -void sws_scaleVec(SwsVector *a, double scalar); - -/** - * Scale all the coefficients of a so that their sum equals height. - */ -void sws_normalizeVec(SwsVector *a, double height); - -#if FF_API_SWS_VECTOR -attribute_deprecated SwsVector *sws_getConstVec(double c, int length); -attribute_deprecated SwsVector *sws_getIdentityVec(void); -attribute_deprecated void sws_convVec(SwsVector *a, SwsVector *b); -attribute_deprecated void sws_addVec(SwsVector *a, SwsVector *b); -attribute_deprecated void sws_subVec(SwsVector *a, SwsVector *b); -attribute_deprecated void sws_shiftVec(SwsVector *a, int shift); -attribute_deprecated SwsVector *sws_cloneVec(SwsVector *a); -attribute_deprecated void sws_printVec2(SwsVector *a, AVClass *log_ctx, int log_level); -#endif - -void sws_freeVec(SwsVector *a); - -SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, - float lumaSharpen, float chromaSharpen, - float chromaHShift, float chromaVShift, - int verbose); -void sws_freeFilter(SwsFilter *filter); - -/** - * Check if context can be reused, otherwise reallocate a new one. - * - * If context is NULL, just calls sws_getContext() to get a new - * context. Otherwise, checks if the parameters are the ones already - * saved in context. If that is the case, returns the current - * context. Otherwise, frees context and gets a new context with - * the new parameters. - * - * Be warned that srcFilter and dstFilter are not checked, they - * are assumed to remain the same. - */ -struct SwsContext *sws_getCachedContext(struct SwsContext *context, - int srcW, int srcH, enum AVPixelFormat srcFormat, - int dstW, int dstH, enum AVPixelFormat dstFormat, - int flags, SwsFilter *srcFilter, - SwsFilter *dstFilter, const double *param); - -/** - * Convert an 8-bit paletted frame into a frame with a color depth of 32 bits. - * - * The output frame will have the same packed format as the palette. - * - * @param src source frame buffer - * @param dst destination frame buffer - * @param num_pixels number of pixels to convert - * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src - */ -void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); - -/** - * Convert an 8-bit paletted frame into a frame with a color depth of 24 bits. - * - * With the palette format "ABCD", the destination frame ends up with the format "ABC". - * - * @param src source frame buffer - * @param dst destination frame buffer - * @param num_pixels number of pixels to convert - * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src - */ -void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); - -/** - * Get the AVClass for swsContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *sws_get_class(void); - -/** - * @} - */ - -#endif /* SWSCALE_SWSCALE_H */ diff --git a/prebuilts/x86_64/include/libswscale/version.h b/prebuilts/x86_64/include/libswscale/version.h deleted file mode 100644 index bc61201..0000000 --- a/prebuilts/x86_64/include/libswscale/version.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_VERSION_H -#define SWSCALE_VERSION_H - -/** - * @file - * swscale version macros - */ - -#include "libavutil/version.h" - -#define LIBSWSCALE_VERSION_MAJOR 5 -#define LIBSWSCALE_VERSION_MINOR 9 -#define LIBSWSCALE_VERSION_MICRO 100 - -#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_VERSION AV_VERSION(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_BUILD LIBSWSCALE_VERSION_INT - -#define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ - -#ifndef FF_API_SWS_VECTOR -#define FF_API_SWS_VECTOR (LIBSWSCALE_VERSION_MAJOR < 6) -#endif - -#endif /* SWSCALE_VERSION_H */ diff --git a/prebuilts/x86_64/include/va/va.h b/prebuilts/x86_64/include/va/va.h deleted file mode 100644 index 957dc53..0000000 --- a/prebuilts/x86_64/include/va/va.h +++ /dev/null @@ -1,5269 +0,0 @@ -/* - * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -/* - * Video Acceleration (VA) API Specification - * - * Rev. 0.30 - * - * - * Revision History: - * rev 0.10 (12/10/2006 Jonathan Bian) - Initial draft - * rev 0.11 (12/15/2006 Jonathan Bian) - Fixed some errors - * rev 0.12 (02/05/2007 Jonathan Bian) - Added VC-1 data structures for slice level decode - * rev 0.13 (02/28/2007 Jonathan Bian) - Added GetDisplay() - * rev 0.14 (04/13/2007 Jonathan Bian) - Fixed MPEG-2 PictureParameter structure, cleaned up a few funcs. - * rev 0.15 (04/20/2007 Jonathan Bian) - Overhauled buffer management - * rev 0.16 (05/02/2007 Jonathan Bian) - Added error codes and fixed some issues with configuration - * rev 0.17 (05/07/2007 Jonathan Bian) - Added H.264/AVC data structures for slice level decode. - * rev 0.18 (05/14/2007 Jonathan Bian) - Added data structures for MPEG-4 slice level decode - * and MPEG-2 motion compensation. - * rev 0.19 (08/06/2007 Jonathan Bian) - Removed extra type for bitplane data. - * rev 0.20 (08/08/2007 Jonathan Bian) - Added missing fields to VC-1 PictureParameter structure. - * rev 0.21 (08/20/2007 Jonathan Bian) - Added image and subpicture support. - * rev 0.22 (08/27/2007 Jonathan Bian) - Added support for chroma-keying and global alpha. - * rev 0.23 (09/11/2007 Jonathan Bian) - Fixed some issues with images and subpictures. - * rev 0.24 (09/18/2007 Jonathan Bian) - Added display attributes. - * rev 0.25 (10/18/2007 Jonathan Bian) - Changed to use IDs only for some types. - * rev 0.26 (11/07/2007 Waldo Bastian) - Change vaCreateBuffer semantics - * rev 0.27 (11/19/2007 Matt Sottek) - Added DeriveImage - * rev 0.28 (12/06/2007 Jonathan Bian) - Added new versions of PutImage and AssociateSubpicture - * to enable scaling - * rev 0.29 (02/07/2008 Jonathan Bian) - VC1 parameter fixes, - * added VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED - * rev 0.30 (03/01/2009 Jonathan Bian) - Added encoding support for H.264 BP and MPEG-4 SP and fixes - * for ISO C conformance. - * rev 0.31 (09/02/2009 Gwenole Beauchesne) - VC-1/H264 fields change for VDPAU and XvBA backend - * Application needs to relink with the new library. - * - * rev 0.31.1 (03/29/2009) - Data structure for JPEG encode - * rev 0.31.2 (01/13/2011 Anthony Pabon)- Added a flag to indicate Subpicture coordinates are screen - * screen relative rather than source video relative. - * rev 0.32.0 (01/13/2011 Xiang Haihao) - Add profile into VAPictureParameterBufferVC1 - * update VAAPI to 0.32.0 - * - * Acknowledgements: - * Some concepts borrowed from XvMC and XvImage. - * Waldo Bastian (Intel), Matt Sottek (Intel), Austin Yuan (Intel), and Gwenole Beauchesne (SDS) - * contributed to various aspects of the API. - */ - -/** - * \file va.h - * \brief The Core API - * - * This file contains the \ref api_core "Core API". - */ - -#ifndef _VA_H_ -#define _VA_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(__GNUC__) && !defined(__COVERITY__) -#define va_deprecated __attribute__((deprecated)) -#if __GNUC__ >= 6 -#define va_deprecated_enum va_deprecated -#else -#define va_deprecated_enum -#endif -#else -#define va_deprecated -#define va_deprecated_enum -#endif - -/** - * \mainpage Video Acceleration (VA) API - * - * \section intro Introduction - * - * The main motivation for VA-API (Video Acceleration API) is to - * enable hardware accelerated video decode and encode at various - * entry-points (VLD, IDCT, Motion Compensation etc.) for the - * prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 - * AVC/H.264, VC-1/VMW3, and JPEG, HEVC/H265, VP8, VP9) and video pre/post - * processing - * - * VA-API is split into several modules: - * - \ref api_core - * - Encoder (H264, HEVC, JPEG, MPEG2, VP8, VP9) - * - \ref api_enc_h264 - * - \ref api_enc_hevc - * - \ref api_enc_jpeg - * - \ref api_enc_mpeg2 - * - \ref api_enc_vp8 - * - \ref api_enc_vp9 - * - \ref api_enc_av1 - * - Decoder (HEVC, JPEG, VP8, VP9, AV1) - * - \ref api_dec_hevc - * - \ref api_dec_jpeg - * - \ref api_dec_vp8 - * - \ref api_dec_vp9 - * - \ref api_dec_av1 - * - \ref api_vpp - * - \ref api_prot - * - FEI (H264, HEVC) - * - \ref api_fei - * - \ref api_fei_h264 - * - \ref api_fei_hevc - * - * \section threading Multithreading Guide - * All VAAPI functions implemented in libva are thread-safe. For any VAAPI - * function that requires the implementation of a backend (e.g. hardware driver), - * the backend must ensure that its implementation is also thread-safe. If the - * backend implementation of a VAAPI function is not thread-safe then this should - * be considered as a bug against the backend implementation. - * - * It is assumed that none of the VAAPI functions will be called from signal - * handlers. - * - * Thread-safety in this context means that when VAAPI is being called by multiple - * concurrent threads, it will not crash or hang the OS, and VAAPI internal - * data structures will not be corrupted. When multiple threads are operating on - * the same VAAPI objects, it is the application's responsibility to synchronize - * these operations in order to generate the expected results. For example, using - * a single VAContext from multiple threads may generate unexpected results. - * - * Following pseudo code illustrates a multithreaded transcoding scenario, where - * one thread is handling the decoding operation and another thread is handling - * the encoding operation, while synchronizing the use of a common pool of - * surfaces. - * - * \code - * // Initialization - * dpy = vaGetDisplayDRM(fd); - * vaInitialize(dpy, ...); - * - * // Create surfaces required for decoding and subsequence encoding - * vaCreateSurfaces(dpy, VA_RT_FORMAT_YUV420, width, height, &surfaces[0], ...); - * - * // Set up a queue for the surfaces shared between decode and encode threads - * surface_queue = queue_create(); - * - * // Create decode_thread - * pthread_create(&decode_thread, NULL, decode, ...); - * - * // Create encode_thread - * pthread_create(&encode_thread, NULL, encode, ...); - * - * // Decode thread function - * decode() { - * // Find the decode entrypoint for H.264 - * vaQueryConfigEntrypoints(dpy, h264_profile, entrypoints, ...); - * - * // Create a config for H.264 decode - * vaCreateConfig(dpy, h264_profile, VAEntrypointVLD, ...); - * - * // Create a context for decode - * vaCreateContext(dpy, config, width, height, VA_PROGRESSIVE, surfaces, - * num_surfaces, &decode_context); - * - * // Decode frames in the bitstream - * for (;;) { - * // Parse one frame and decode - * vaBeginPicture(dpy, decode_context, surfaces[surface_index]); - * vaRenderPicture(dpy, decode_context, buf, ...); - * vaEndPicture(dpy, decode_context); - * // Poll the decoding status and enqueue the surface in display order after - * // decoding is complete - * vaQuerySurfaceStatus(); - * enqueue(surface_queue, surface_index); - * } - * } - * - * // Encode thread function - * encode() { - * // Find the encode entrypoint for HEVC - * vaQueryConfigEntrypoints(dpy, hevc_profile, entrypoints, ...); - * - * // Create a config for HEVC encode - * vaCreateConfig(dpy, hevc_profile, VAEntrypointEncSlice, ...); - * - * // Create a context for encode - * vaCreateContext(dpy, config, width, height, VA_PROGRESSIVE, surfaces, - * num_surfaces, &encode_context); - * - * // Encode frames produced by the decoder - * for (;;) { - * // Dequeue the surface enqueued by the decoder - * surface_index = dequeue(surface_queue); - * // Encode using this surface as the source - * vaBeginPicture(dpy, encode_context, surfaces[surface_index]); - * vaRenderPicture(dpy, encode_context, buf, ...); - * vaEndPicture(dpy, encode_context); - * } - * } - * \endcode - */ - -/** - * \defgroup api_core Core API - * - * @{ - */ - -/** -Overview - -The VA API is intended to provide an interface between a video decode/encode/processing -application (client) and a hardware accelerator (server), to off-load -video decode/encode/processing operations from the host to the hardware accelerator at various -entry-points. - -The basic operation steps are: - -- Negotiate a mutually acceptable configuration with the server to lock - down profile, entrypoints, and other attributes that will not change on - a frame-by-frame basis. -- Create a video decode, encode or processing context which represents a - "virtualized" hardware device -- Get and fill the render buffers with the corresponding data (depending on - profiles and entrypoints) -- Pass the render buffers to the server to handle the current frame - -Initialization & Configuration Management - -- Find out supported profiles -- Find out entrypoints for a given profile -- Find out configuration attributes for a given profile/entrypoint pair -- Create a configuration for use by the application - -*/ - -typedef void* VADisplay; /* window system dependent */ - -typedef int VAStatus; /** Return status type from functions */ -/** Values for the return status */ -#define VA_STATUS_SUCCESS 0x00000000 -#define VA_STATUS_ERROR_OPERATION_FAILED 0x00000001 -#define VA_STATUS_ERROR_ALLOCATION_FAILED 0x00000002 -#define VA_STATUS_ERROR_INVALID_DISPLAY 0x00000003 -#define VA_STATUS_ERROR_INVALID_CONFIG 0x00000004 -#define VA_STATUS_ERROR_INVALID_CONTEXT 0x00000005 -#define VA_STATUS_ERROR_INVALID_SURFACE 0x00000006 -#define VA_STATUS_ERROR_INVALID_BUFFER 0x00000007 -#define VA_STATUS_ERROR_INVALID_IMAGE 0x00000008 -#define VA_STATUS_ERROR_INVALID_SUBPICTURE 0x00000009 -#define VA_STATUS_ERROR_ATTR_NOT_SUPPORTED 0x0000000a -#define VA_STATUS_ERROR_MAX_NUM_EXCEEDED 0x0000000b -#define VA_STATUS_ERROR_UNSUPPORTED_PROFILE 0x0000000c -#define VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT 0x0000000d -#define VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT 0x0000000e -#define VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE 0x0000000f -#define VA_STATUS_ERROR_SURFACE_BUSY 0x00000010 -#define VA_STATUS_ERROR_FLAG_NOT_SUPPORTED 0x00000011 -#define VA_STATUS_ERROR_INVALID_PARAMETER 0x00000012 -#define VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 0x00000013 -#define VA_STATUS_ERROR_UNIMPLEMENTED 0x00000014 -#define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING 0x00000015 -#define VA_STATUS_ERROR_INVALID_IMAGE_FORMAT 0x00000016 -#define VA_STATUS_ERROR_DECODING_ERROR 0x00000017 -#define VA_STATUS_ERROR_ENCODING_ERROR 0x00000018 -/** - * \brief An invalid/unsupported value was supplied. - * - * This is a catch-all error code for invalid or unsupported values. - * e.g. value exceeding the valid range, invalid type in the context - * of generic attribute values. - */ -#define VA_STATUS_ERROR_INVALID_VALUE 0x00000019 -/** \brief An unsupported filter was supplied. */ -#define VA_STATUS_ERROR_UNSUPPORTED_FILTER 0x00000020 -/** \brief An invalid filter chain was supplied. */ -#define VA_STATUS_ERROR_INVALID_FILTER_CHAIN 0x00000021 -/** \brief Indicate HW busy (e.g. run multiple encoding simultaneously). */ -#define VA_STATUS_ERROR_HW_BUSY 0x00000022 -/** \brief An unsupported memory type was supplied. */ -#define VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE 0x00000024 -/** \brief Indicate allocated buffer size is not enough for input or output. */ -#define VA_STATUS_ERROR_NOT_ENOUGH_BUFFER 0x00000025 -/** \brief Indicate an operation isn't completed because time-out interval elapsed. */ -#define VA_STATUS_ERROR_TIMEDOUT 0x00000026 -#define VA_STATUS_ERROR_UNKNOWN 0xFFFFFFFF - -/** - * 1. De-interlacing flags for vaPutSurface() - * 2. Surface sample type for input/output surface flag - * - Progressive: VA_FRAME_PICTURE - * - Interleaved: VA_TOP_FIELD_FIRST, VA_BOTTOM_FIELD_FIRST - * - Field: VA_TOP_FIELD, VA_BOTTOM_FIELD -*/ -#define VA_FRAME_PICTURE 0x00000000 -#define VA_TOP_FIELD 0x00000001 -#define VA_BOTTOM_FIELD 0x00000002 -#define VA_TOP_FIELD_FIRST 0x00000004 -#define VA_BOTTOM_FIELD_FIRST 0x00000008 - -/** - * Enabled the positioning/cropping/blending feature: - * 1, specify the video playback position in the isurface - * 2, specify the cropping info for video playback - * 3, encoded video will blend with background color - */ -#define VA_ENABLE_BLEND 0x00000004 /* video area blend with the constant color */ - -/** - * Clears the drawable with background color. - * for hardware overlay based implementation this flag - * can be used to turn off the overlay - */ -#define VA_CLEAR_DRAWABLE 0x00000008 - -/** Color space conversion flags for vaPutSurface() */ -#define VA_SRC_COLOR_MASK 0x000000f0 -#define VA_SRC_BT601 0x00000010 -#define VA_SRC_BT709 0x00000020 -#define VA_SRC_SMPTE_240 0x00000040 - -/** Scaling flags for vaPutSurface() */ -#define VA_FILTER_SCALING_DEFAULT 0x00000000 -#define VA_FILTER_SCALING_FAST 0x00000100 -#define VA_FILTER_SCALING_HQ 0x00000200 -#define VA_FILTER_SCALING_NL_ANAMORPHIC 0x00000300 -#define VA_FILTER_SCALING_MASK 0x00000f00 - -/** Interpolation method for scaling */ -#define VA_FILTER_INTERPOLATION_DEFAULT 0x00000000 -#define VA_FILTER_INTERPOLATION_NEAREST_NEIGHBOR 0x00001000 -#define VA_FILTER_INTERPOLATION_BILINEAR 0x00002000 -#define VA_FILTER_INTERPOLATION_ADVANCED 0x00003000 -#define VA_FILTER_INTERPOLATION_MASK 0x0000f000 - -/** Padding size in 4-bytes */ -#define VA_PADDING_LOW 4 -#define VA_PADDING_MEDIUM 8 -#define VA_PADDING_HIGH 16 -#define VA_PADDING_LARGE 32 - -/** operation options */ -/** synchronization, block call, output should be ready after execution function return*/ -#define VA_EXEC_SYNC 0x0 -/** asynchronization,application should call additonal sync operation to access output */ -#define VA_EXEC_ASYNC 0x1 - -/** operation mode */ -#define VA_EXEC_MODE_DEFAULT 0x0 -#define VA_EXEC_MODE_POWER_SAVING 0x1 -#define VA_EXEC_MODE_PERFORMANCE 0x2 - -/* Values used to describe device features. */ -/** The feature is not supported by the device. - * - * Any corresponding feature flag must not be set. - */ -#define VA_FEATURE_NOT_SUPPORTED 0 -/** The feature is supported by the device. - * - * The user may decide whether or not to use this feature. - * - * Note that support for a feature only indicates that the hardware - * is able to use it; whether it is actually a positive change to - * enable it in a given situation will depend on other factors - * including the input provided by the user. - */ -#define VA_FEATURE_SUPPORTED 1 -/** The feature is required by the device. - * - * The device does not support not enabling this feature, so any - * corresponding feature flag must be set and any additional - * configuration needed by the feature must be supplied. - */ -#define VA_FEATURE_REQUIRED 2 - -/** - * Returns a short english description of error_status - */ -const char *vaErrorStr(VAStatus error_status); - -typedef struct _VARectangle { - int16_t x; - int16_t y; - uint16_t width; - uint16_t height; -} VARectangle; - -/** \brief Generic motion vector data structure. */ -typedef struct _VAMotionVector { - /** \mv0[0]: horizontal motion vector for past reference */ - /** \mv0[1]: vertical motion vector for past reference */ - /** \mv1[0]: horizontal motion vector for future reference */ - /** \mv1[1]: vertical motion vector for future reference */ - int16_t mv0[2]; /* past reference */ - int16_t mv1[2]; /* future reference */ -} VAMotionVector; - -/** Type of a message callback, used for both error and info log. */ -typedef void (*VAMessageCallback)(void *user_context, const char *message); - -/** - * Set the callback for error messages, or NULL for no logging. - * Returns the previous one, or NULL if it was disabled. - */ -VAMessageCallback vaSetErrorCallback(VADisplay dpy, VAMessageCallback callback, void *user_context); - -/** - * Set the callback for info messages, or NULL for no logging. - * Returns the previous one, or NULL if it was disabled. - */ -VAMessageCallback vaSetInfoCallback(VADisplay dpy, VAMessageCallback callback, void *user_context); - -/** - * Initialization: - * A display must be obtained by calling vaGetDisplay() before calling - * vaInitialize() and other functions. This connects the API to the - * native window system. - * For X Windows, native_dpy would be from XOpenDisplay() - */ -typedef void* VANativeDisplay; /* window system dependent */ - -int vaDisplayIsValid(VADisplay dpy); - -/** - * Set the override driver name instead of queried driver driver. - */ -VAStatus vaSetDriverName(VADisplay dpy, - char *driver_name - ); - -/** - * Initialize the library - */ -VAStatus vaInitialize( - VADisplay dpy, - int *major_version, /* out */ - int *minor_version /* out */ -); - -/** - * After this call, all library internal resources will be cleaned up - */ -VAStatus vaTerminate( - VADisplay dpy -); - -/** - * vaQueryVendorString returns a pointer to a zero-terminated string - * describing some aspects of the VA implemenation on a specific - * hardware accelerator. The format of the returned string is vendor - * specific and at the discretion of the implementer. - * e.g. for the Intel GMA500 implementation, an example would be: - * "Intel GMA500 - 2.0.0.32L.0005" - */ -const char *vaQueryVendorString( - VADisplay dpy -); - -typedef int (*VAPrivFunc)(void); - -/** - * Return a function pointer given a function name in the library. - * This allows private interfaces into the library - */ -VAPrivFunc vaGetLibFunc( - VADisplay dpy, - const char *func -); - -/** Currently defined profiles */ -typedef enum { - /** \brief Profile ID used for video processing. */ - VAProfileNone = -1, - VAProfileMPEG2Simple = 0, - VAProfileMPEG2Main = 1, - VAProfileMPEG4Simple = 2, - VAProfileMPEG4AdvancedSimple = 3, - VAProfileMPEG4Main = 4, - VAProfileH264Baseline va_deprecated_enum = 5, - VAProfileH264Main = 6, - VAProfileH264High = 7, - VAProfileVC1Simple = 8, - VAProfileVC1Main = 9, - VAProfileVC1Advanced = 10, - VAProfileH263Baseline = 11, - VAProfileJPEGBaseline = 12, - VAProfileH264ConstrainedBaseline = 13, - VAProfileVP8Version0_3 = 14, - VAProfileH264MultiviewHigh = 15, - VAProfileH264StereoHigh = 16, - VAProfileHEVCMain = 17, - VAProfileHEVCMain10 = 18, - VAProfileVP9Profile0 = 19, - VAProfileVP9Profile1 = 20, - VAProfileVP9Profile2 = 21, - VAProfileVP9Profile3 = 22, - VAProfileHEVCMain12 = 23, - VAProfileHEVCMain422_10 = 24, - VAProfileHEVCMain422_12 = 25, - VAProfileHEVCMain444 = 26, - VAProfileHEVCMain444_10 = 27, - VAProfileHEVCMain444_12 = 28, - VAProfileHEVCSccMain = 29, - VAProfileHEVCSccMain10 = 30, - VAProfileHEVCSccMain444 = 31, - VAProfileAV1Profile0 = 32, - VAProfileAV1Profile1 = 33, - VAProfileHEVCSccMain444_10 = 34, - /** \brief Profile ID used for protected video playback. */ - VAProfileProtected = 35 -} VAProfile; - -/** - * Currently defined entrypoints - */ -typedef enum { - VAEntrypointVLD = 1, - VAEntrypointIZZ = 2, - VAEntrypointIDCT = 3, - VAEntrypointMoComp = 4, - VAEntrypointDeblocking = 5, - VAEntrypointEncSlice = 6, /* slice level encode */ - VAEntrypointEncPicture = 7, /* pictuer encode, JPEG, etc */ - /* - * For an implementation that supports a low power/high performance variant - * for slice level encode, it can choose to expose the - * VAEntrypointEncSliceLP entrypoint. Certain encoding tools may not be - * available with this entrypoint (e.g. interlace, MBAFF) and the - * application can query the encoding configuration attributes to find - * out more details if this entrypoint is supported. - */ - VAEntrypointEncSliceLP = 8, - VAEntrypointVideoProc = 10, /**< Video pre/post-processing. */ - /** - * \brief VAEntrypointFEI - * - * The purpose of FEI (Flexible Encoding Infrastructure) is to allow applications to - * have more controls and trade off quality for speed with their own IPs. - * The application can optionally provide input to ENC for extra encode control - * and get the output from ENC. Application can chose to modify the ENC - * output/PAK input during encoding, but the performance impact is significant. - * - * On top of the existing buffers for normal encode, there will be - * one extra input buffer (VAEncMiscParameterFEIFrameControl) and - * three extra output buffers (VAEncFEIMVBufferType, VAEncFEIMBModeBufferType - * and VAEncFEIDistortionBufferType) for VAEntrypointFEI entry function. - * If separate PAK is set, two extra input buffers - * (VAEncFEIMVBufferType, VAEncFEIMBModeBufferType) are needed for PAK input. - **/ - VAEntrypointFEI = 11, - /** - * \brief VAEntrypointStats - * - * A pre-processing function for getting some statistics and motion vectors is added, - * and some extra controls for Encode pipeline are provided. The application can - * optionally call the statistics function to get motion vectors and statistics like - * variances, distortions before calling Encode function via this entry point. - * - * Checking whether Statistics is supported can be performed with vaQueryConfigEntrypoints(). - * If Statistics entry point is supported, then the list of returned entry-points will - * include #VAEntrypointStats. Supported pixel format, maximum resolution and statistics - * specific attributes can be obtained via normal attribute query. One input buffer - * (VAStatsStatisticsParameterBufferType) and one or two output buffers - * (VAStatsStatisticsBufferType, VAStatsStatisticsBottomFieldBufferType (for interlace only) - * and VAStatsMVBufferType) are needed for this entry point. - **/ - VAEntrypointStats = 12, - /** - * \brief VAEntrypointProtectedTEEComm - * - * A function for communicating with TEE (Trusted Execution Environment). - **/ - VAEntrypointProtectedTEEComm = 13, - /** - * \brief VAEntrypointProtectedContent - * - * A function for protected content to decrypt encrypted content. - **/ - VAEntrypointProtectedContent = 14, -} VAEntrypoint; - -/** Currently defined configuration attribute types */ -typedef enum { - VAConfigAttribRTFormat = 0, - VAConfigAttribSpatialResidual = 1, - VAConfigAttribSpatialClipping = 2, - VAConfigAttribIntraResidual = 3, - VAConfigAttribEncryption = 4, - VAConfigAttribRateControl = 5, - - /** @name Attributes for decoding */ - /**@{*/ - /** - * \brief Slice Decoding mode. Read/write. - * - * This attribute determines what mode the driver supports for slice - * decoding, through vaGetConfigAttributes(); and what mode the user - * will be providing to the driver, through vaCreateConfig(), if the - * driver supports those. If this attribute is not set by the user then - * it is assumed that VA_DEC_SLICE_MODE_NORMAL mode is used. - * - * See \c VA_DEC_SLICE_MODE_xxx for the list of slice decoding modes. - */ - VAConfigAttribDecSliceMode = 6, - /** - * \brief JPEG decoding attribute. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * JPEG implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValDecJPEG union. - */ - VAConfigAttribDecJPEG = 7, - /** - * \brief Decode processing support. Read/write. - * - * This attribute determines if the driver supports video processing - * with decoding using the decoding context in a single call, through - * vaGetConfigAttributes(); and if the user may use this feature, - * through vaCreateConfig(), if the driver supports the user scenario. - * The user will essentially create a regular decode VAContext. Therefore, - * the parameters of vaCreateContext() such as picture_width, picture_height - * and render_targets are in relation to the decode output parameters - * (not processing output parameters) as normal. - * If this attribute is not set by the user then it is assumed that no - * extra processing is done after decoding for this decode context. - * - * Since essentially the application is creating a decoder config and context, - * all function calls that take in the config (e.g. vaQuerySurfaceAttributes()) - * or context are in relation to the decoder, except those video processing - * function specified in the next paragraph. - * - * Once the decode config and context are created, the user must further - * query the supported processing filters using vaQueryVideoProcFilters(), - * vaQueryVideoProcFilterCaps(), vaQueryVideoProcPipelineCaps() by specifying - * the created decode context. The user must provide processing information - * and extra processing output surfaces as "additional_outputs" to the driver - * through VAProcPipelineParameterBufferType. The render_target specified - * at vaBeginPicture() time refers to the decode output surface. The - * target surface for the output of processing needs to be a different - * surface since the decode process requires the original reconstructed buffer. - * The “surface” member of VAProcPipelineParameterBuffer should be set to the - * same as “render_target” set in vaBeginPicture(), but the driver may choose - * to ignore this parameter. - */ - VAConfigAttribDecProcessing = 8, - /** @name Attributes for encoding */ - /**@{*/ - /** - * \brief Packed headers mode. Read/write. - * - * This attribute determines what packed headers the driver supports, - * through vaGetConfigAttributes(); and what packed headers the user - * will be providing to the driver, through vaCreateConfig(), if the - * driver supports those. - * - * See \c VA_ENC_PACKED_HEADER_xxx for the list of packed headers. - */ - VAConfigAttribEncPackedHeaders = 10, - /** - * \brief Interlaced mode. Read/write. - * - * This attribute determines what kind of interlaced encoding mode - * the driver supports. - * - * See \c VA_ENC_INTERLACED_xxx for the list of interlaced modes. - */ - VAConfigAttribEncInterlaced = 11, - /** - * \brief Maximum number of reference frames. Read-only. - * - * This attribute determines the maximum number of reference - * frames supported for encoding. - * - * Note: for H.264 encoding, the value represents the maximum number - * of reference frames for both the reference picture list 0 (bottom - * 16 bits) and the reference picture list 1 (top 16 bits). - */ - VAConfigAttribEncMaxRefFrames = 13, - /** - * \brief Maximum number of slices per frame. Read-only. - * - * This attribute determines the maximum number of slices the - * driver can support to encode a single frame. - */ - VAConfigAttribEncMaxSlices = 14, - /** - * \brief Slice structure. Read-only. - * - * This attribute determines slice structures supported by the - * driver for encoding. This attribute is a hint to the user so - * that he can choose a suitable surface size and how to arrange - * the encoding process of multiple slices per frame. - * - * More specifically, for H.264 encoding, this attribute - * determines the range of accepted values to - * VAEncSliceParameterBufferH264::macroblock_address and - * VAEncSliceParameterBufferH264::num_macroblocks. - * - * See \c VA_ENC_SLICE_STRUCTURE_xxx for the supported slice - * structure types. - */ - VAConfigAttribEncSliceStructure = 15, - /** - * \brief Macroblock information. Read-only. - * - * This attribute determines whether the driver supports extra - * encoding information per-macroblock. e.g. QP. - * - * More specifically, for H.264 encoding, if the driver returns a non-zero - * value for this attribute, this means the application can create - * additional #VAEncMacroblockParameterBufferH264 buffers referenced - * through VAEncSliceParameterBufferH264::macroblock_info. - */ - VAConfigAttribEncMacroblockInfo = 16, - /** - * \brief Maximum picture width. Read-only. - * - * This attribute determines the maximum picture width the driver supports - * for a given configuration. - */ - VAConfigAttribMaxPictureWidth = 18, - /** - * \brief Maximum picture height. Read-only. - * - * This attribute determines the maximum picture height the driver supports - * for a given configuration. - */ - VAConfigAttribMaxPictureHeight = 19, - /** - * \brief JPEG encoding attribute. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * JPEG implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncJPEG union. - */ - VAConfigAttribEncJPEG = 20, - /** - * \brief Encoding quality range attribute. Read-only. - * - * This attribute conveys whether the driver supports different quality level settings - * for encoding. A value less than or equal to 1 means that the encoder only has a single - * quality setting, and a value greater than 1 represents the number of quality levels - * that can be configured. e.g. a value of 2 means there are two distinct quality levels. - */ - VAConfigAttribEncQualityRange = 21, - /** - * \brief Encoding quantization attribute. Read-only. - * - * This attribute conveys whether the driver supports certain types of quantization methods - * for encoding (e.g. trellis). See \c VA_ENC_QUANTIZATION_xxx for the list of quantization methods - */ - VAConfigAttribEncQuantization = 22, - /** - * \brief Encoding intra refresh attribute. Read-only. - * - * This attribute conveys whether the driver supports certain types of intra refresh methods - * for encoding (e.g. adaptive intra refresh or rolling intra refresh). - * See \c VA_ENC_INTRA_REFRESH_xxx for intra refresh methods - */ - VAConfigAttribEncIntraRefresh = 23, - /** - * \brief Encoding skip frame attribute. Read-only. - * - * This attribute conveys whether the driver supports sending skip frame parameters - * (VAEncMiscParameterTypeSkipFrame) to the encoder's rate control, when the user has - * externally skipped frames. - */ - VAConfigAttribEncSkipFrame = 24, - /** - * \brief Encoding region-of-interest (ROI) attribute. Read-only. - * - * This attribute conveys whether the driver supports region-of-interest (ROI) encoding, - * based on user provided ROI rectangles. The attribute value is partitioned into fields - * as defined in the VAConfigAttribValEncROI union. - * - * If ROI encoding is supported, the ROI information is passed to the driver using - * VAEncMiscParameterTypeROI. - */ - VAConfigAttribEncROI = 25, - /** - * \brief Encoding extended rate control attribute. Read-only. - * - * This attribute conveys whether the driver supports any extended rate control features - * The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncRateControlExt union. - */ - VAConfigAttribEncRateControlExt = 26, - /** - * \brief Processing rate reporting attribute. Read-only. - * - * This attribute conveys whether the driver supports reporting of - * encode/decode processing rate based on certain set of parameters - * (i.e. levels, I frame internvals) for a given configuration. - * If this is supported, vaQueryProcessingRate() can be used to get - * encode or decode processing rate. - * See \c VA_PROCESSING_RATE_xxx for encode/decode processing rate - */ - VAConfigAttribProcessingRate = 27, - /** - * \brief Encoding dirty rectangle. Read-only. - * - * This attribute conveys whether the driver supports dirty rectangle. - * encoding, based on user provided ROI rectangles which indicate the rectangular areas - * where the content has changed as compared to the previous picture. The regions of the - * picture that are not covered by dirty rect rectangles are assumed to have not changed - * compared to the previous picture. The encoder may do some optimizations based on - * this information. The attribute value returned indicates the number of regions that - * are supported. e.g. A value of 0 means dirty rect encoding is not supported. If dirty - * rect encoding is supported, the ROI information is passed to the driver using - * VAEncMiscParameterTypeDirtyRect. - */ - VAConfigAttribEncDirtyRect = 28, - /** - * \brief Parallel Rate Control (hierachical B) attribute. Read-only. - * - * This attribute conveys whether the encoder supports parallel rate control. - * It is a integer value 0 - unsupported, > 0 - maximum layer supported. - * This is the way when hireachical B frames are encoded, multiple independent B frames - * on the same layer may be processed at same time. If supported, app may enable it by - * setting enable_parallel_brc in VAEncMiscParameterRateControl,and the number of B frames - * per layer per GOP will be passed to driver through VAEncMiscParameterParallelRateControl - * structure.Currently three layers are defined. - */ - VAConfigAttribEncParallelRateControl = 29, - /** - * \brief Dynamic Scaling Attribute. Read-only. - * - * This attribute conveys whether encoder is capable to determine dynamic frame - * resolutions adaptive to bandwidth utilization and processing power, etc. - * It is a boolean value 0 - unsupported, 1 - supported. - * If it is supported,for VP9, suggested frame resolution can be retrieved from VACodedBufferVP9Status. - */ - VAConfigAttribEncDynamicScaling = 30, - /** - * \brief frame size tolerance support - * it indicates the tolerance of frame size - */ - VAConfigAttribFrameSizeToleranceSupport = 31, - /** - * \brief Encode function type for FEI. - * - * This attribute conveys whether the driver supports different function types for encode. - * It can be VA_FEI_FUNCTION_ENC, VA_FEI_FUNCTION_PAK, or VA_FEI_FUNCTION_ENC_PAK. Currently - * it is for FEI entry point only. - * Default is VA_FEI_FUNCTION_ENC_PAK. - */ - VAConfigAttribFEIFunctionType = 32, - /** - * \brief Maximum number of FEI MV predictors. Read-only. - * - * This attribute determines the maximum number of MV predictors the driver - * can support to encode a single frame. 0 means no MV predictor is supported. - * Currently it is for FEI entry point only. - */ - VAConfigAttribFEIMVPredictors = 33, - /** - * \brief Statistics attribute. Read-only. - * - * This attribute exposes a number of capabilities of the VAEntrypointStats entry - * point. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValStats union. Currently it is for VAEntrypointStats only. - */ - VAConfigAttribStats = 34, - /** - * \brief Tile Support Attribute. Read-only. - * - * This attribute conveys whether encoder is capable to support tiles. - * If not supported, the tile related parameters sent to encoder, such as - * tiling structure, should be ignored. 0 - unsupported, 1 - supported. - */ - VAConfigAttribEncTileSupport = 35, - /** - * \brief whether accept rouding setting from application. Read-only. - * This attribute is for encode quality, if it is report, - * application can change the rounding setting by VAEncMiscParameterTypeCustomRoundingControl - */ - VAConfigAttribCustomRoundingControl = 36, - /** - * \brief Encoding QP info block size attribute. Read-only. - * This attribute conveys the block sizes that underlying driver - * support for QP info for buffer #VAEncQpBuffer. - */ - VAConfigAttribQPBlockSize = 37, - /** - * \brief encode max frame size attribute. Read-only - * attribute value \c VAConfigAttribValMaxFrameSize represent max frame size support - */ - VAConfigAttribMaxFrameSize = 38, - /** \brief inter frame prediction directrion attribute. Read-only. - * this attribute conveys the prediction direction (backward or forword) for specific config - * the value could be VA_PREDICTION_DIRECTION_XXXX. it can be combined with VAConfigAttribEncMaxRefFrames - * to describe reference list , and the prediction direction. if this attrib is not present,both direction - * should be supported, no restriction. - * for example: normal HEVC encoding , maximum reference frame number in reflist 0 and reflist 1 is deduced - * by VAConfigAttribEncMaxRefFrames. so there are typical P frame, B frame, - * if VAConfigAttribPredictionDirection is also present. it will stipulate prediction direction in both - * reference list. if only one prediction direction present(such as PREVIOUS),all reference frame should be - * previous frame (PoC < current). - */ - VAConfigAttribPredictionDirection = 39, - /** \brief combined submission of multiple frames from different streams, it is optimization for different HW - * implementation, multiple frames encode/decode can improve HW concurrency - */ - VAConfigAttribMultipleFrame = 40, - /** \brief priority setting for the context. Read-Write - * attribute value is \c VAConfigAttribValContextPriority - * this setting also could be update by \c VAContextParameterUpdateBuffer - */ - VAConfigAttribContextPriority = 41, - /** \brief AV1 decoding features. Read-only. - * - * This attribute describes the supported features of an - * AV1 decoder configuration. The value returned uses the - * VAConfigAttribValDecAV1Features type. - */ - VAConfigAttribDecAV1Features = 42, - /** \brief TEE could be any HW secure device. Read-only */ - VAConfigAttribTEEType = 43, - /** \brief TEE type client is a specific module supporting specific functions in TEE. Read-only*/ - VAConfigAttribTEETypeClient = 44, - /** - * \brief Cipher algorithm of the protected content session. - * - * This attribute specifies the cipher algorithm of the protected content session. It - * could be \c VA_PC_CIPHER_AES, etc.... - */ - VAConfigAttribProtectedContentCipherAlgorithm = 45, - /** - * \brief Cipher block size of the protected content session. - * - * This attribute specifies the block size of the protected content session. It could be - * \c VA_PC_BLOCK_SIZE_128, \c VA_PC_BLOCK_SIZE_192, or \c VA_PC_BLOCK_SIZE_256, etc.... - */ - VAConfigAttribProtectedContentCipherBlockSize = 46, - /** - * \brief Cipher mode of the protected content session. - * - * This attribute specifies the cipher mode of the protected content session. It could - * be \c VA_PC_CIPHER_MODE_ECB, \c VA_PC_CIPHER_MODE_CBC, \c VA_PC_CIPHER_MODE_CTR, etc... - */ - VAConfigAttribProtectedContentCipherMode = 47, - /** - * \brief Decryption sample type of the protected content session. - * - * This attribute specifies the decryption sample type of the protected content session. - * It could be \c VA_PC_SAMPLE_TYPE_FULLSAMPLE or \c VA_PC_SAMPLE_TYPE_SUBSAMPLE. - */ - VAConfigAttribProtectedContentCipherSampleType = 48, - /** - * \brief Special usage attribute of the protected session. - * - * The attribute specifies the flow for the protected session could be used. For - * example, it could be \c VA_PC_USAGE_DEFAULT, \c VA_PC_USAGE_WIDEVINE, etc.... - */ - VAConfigAttribProtectedContentUsage = 49, - - /** \brief HEVC/H.265 encoding features. Read-only. - * - * This attribute describes the supported features of an - * HEVC/H.265 encoder configuration. The value returned uses the - * VAConfigAttribValEncHEVCFeatures type. - * - * If this attribute is supported by a driver then it must also - * support the VAConfigAttribEncHEVCBlockSizes attribute. - */ - VAConfigAttribEncHEVCFeatures = 50, - /** \brief HEVC/H.265 encoding block sizes. Read-only. - * - * This attribute describes the supported coding tree and transform - * block sizes of an HEVC/H.265 encoder configuration. The value - * returned uses the VAConfigAttribValEncHEVCBlockSizes type. - * - * If this attribute is supported by a driver then it must also - * support the VAConfigAttribEncHEVCFeatures attribute. - */ - VAConfigAttribEncHEVCBlockSizes = 51, - /** - * \brief AV1 encoding attribute. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * AV1 implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncAV1 union. - */ - VAConfigAttribEncAV1 = 52, - /** - * \brief AV1 encoding attribute extend1. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * AV1 implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncAV1Ext1 union. - */ - VAConfigAttribEncAV1Ext1 = 53, - /** - * \brief AV1 encoding attribute extend2. Read-only. - * - * This attribute exposes a number of capabilities of the underlying - * AV1 implementation. The attribute value is partitioned into fields as defined in the - * VAConfigAttribValEncAV1Ext2 union. - */ - VAConfigAttribEncAV1Ext2 = 54, - /** \brief Settings per block attribute for Encoding. Read-only. - * - * This attribute describes whether to support delta qp per block, - * the supported size of delta qp block and the size of delta QP in bytes. - * The value returned uses the VAConfigAttribValEncPerBlockControl type. - */ - VAConfigAttribEncPerBlockControl = 55, - /**@}*/ - VAConfigAttribTypeMax -} VAConfigAttribType; - -/** - * Configuration attributes - * If there is more than one value for an attribute, a default - * value will be assigned to the attribute if the client does not - * specify the attribute when creating a configuration - */ -typedef struct _VAConfigAttrib { - VAConfigAttribType type; - uint32_t value; /* OR'd flags (bits) for this attribute */ -} VAConfigAttrib; - -/* Attribute values for VAConfigAttribRTFormat. */ - -#define VA_RT_FORMAT_YUV420 0x00000001 ///< YUV 4:2:0 8-bit. -#define VA_RT_FORMAT_YUV422 0x00000002 ///< YUV 4:2:2 8-bit. -#define VA_RT_FORMAT_YUV444 0x00000004 ///< YUV 4:4:4 8-bit. -#define VA_RT_FORMAT_YUV411 0x00000008 ///< YUV 4:1:1 8-bit. -#define VA_RT_FORMAT_YUV400 0x00000010 ///< Greyscale 8-bit. -#define VA_RT_FORMAT_YUV420_10 0x00000100 ///< YUV 4:2:0 10-bit. -#define VA_RT_FORMAT_YUV422_10 0x00000200 ///< YUV 4:2:2 10-bit. -#define VA_RT_FORMAT_YUV444_10 0x00000400 ///< YUV 4:4:4 10-bit. -#define VA_RT_FORMAT_YUV420_12 0x00001000 ///< YUV 4:2:0 12-bit. -#define VA_RT_FORMAT_YUV422_12 0x00002000 ///< YUV 4:2:2 12-bit. -#define VA_RT_FORMAT_YUV444_12 0x00004000 ///< YUV 4:4:4 12-bit. - -#define VA_RT_FORMAT_RGB16 0x00010000 ///< Packed RGB, 16 bits per pixel. -#define VA_RT_FORMAT_RGB32 0x00020000 ///< Packed RGB, 32 bits per pixel, 8 bits per colour sample. -#define VA_RT_FORMAT_RGBP 0x00100000 ///< Planar RGB, 8 bits per sample. -#define VA_RT_FORMAT_RGB32_10 0x00200000 ///< Packed RGB, 32 bits per pixel, 10 bits per colour sample. - -#define VA_RT_FORMAT_PROTECTED 0x80000000 - -#define VA_RT_FORMAT_RGB32_10BPP VA_RT_FORMAT_RGB32_10 ///< @deprecated use VA_RT_FORMAT_RGB32_10 instead. -#define VA_RT_FORMAT_YUV420_10BPP VA_RT_FORMAT_YUV420_10 ///< @deprecated use VA_RT_FORMAT_YUV420_10 instead. - -/** @name Attribute values for VAConfigAttribRateControl */ -/**@{*/ -/** \brief Driver does not support any form of rate control. */ -#define VA_RC_NONE 0x00000001 -/** \brief Constant bitrate. */ -#define VA_RC_CBR 0x00000002 -/** \brief Variable bitrate. */ -#define VA_RC_VBR 0x00000004 -/** \brief Video conference mode. */ -#define VA_RC_VCM 0x00000008 -/** \brief Constant QP. */ -#define VA_RC_CQP 0x00000010 -/** \brief Variable bitrate with peak rate higher than average bitrate. */ -#define VA_RC_VBR_CONSTRAINED 0x00000020 -/** \brief Intelligent Constant Quality. Provided an initial ICQ_quality_factor, - * adjusts QP at a frame and MB level based on motion to improve subjective quality. */ -#define VA_RC_ICQ 0x00000040 -/** \brief Macroblock based rate control. Per MB control is decided - * internally in the encoder. It may be combined with other RC modes, except CQP. */ -#define VA_RC_MB 0x00000080 -/** \brief Constant Frame Size, it is used for small tolerent */ -#define VA_RC_CFS 0x00000100 -/** \brief Parallel BRC, for hierachical B. - * - * For hierachical B, B frames can be refered by other B frames. - * Currently three layers of hierachy are defined: - * B0 - regular B, no reference to other B frames. - * B1 - reference to only I, P and regular B0 frames. - * B2 - reference to any other frames, including B1. - * In Hierachical B structure, B frames on the same layer can be processed - * simultaneously. And BRC would adjust accordingly. This is so called - * Parallel BRC. */ -#define VA_RC_PARALLEL 0x00000200 -/** \brief Quality defined VBR - * Use Quality factor to determine the good enough QP for each MB such that - * good enough quality can be obtained without waste of bits - * for this BRC mode, you must set all legacy VBR parameters - * and reuse quality_factor in \c VAEncMiscParameterRateControl - * */ -#define VA_RC_QVBR 0x00000400 -/** \brief Average VBR - * Average variable bitrate control algorithm focuses on overall encoding - * quality while meeting the specified target bitrate, within the accuracy - * range, after a convergence period. - * bits_per_second in VAEncMiscParameterRateControl is target bitrate for AVBR. - * Convergence is specified in the unit of frame. - * window_size in VAEncMiscParameterRateControl is equal to convergence for AVBR. - * Accuracy is in the range of [1,100], 1 means one percent, and so on. - * target_percentage in VAEncMiscParameterRateControl is equal to accuracy for AVBR. - * */ -#define VA_RC_AVBR 0x00000800 -/** \brief Transport Controlled BRC - * Specific bitrate control for real time streaming. - * TCBRC can instantly react to channel change to remove or significantly reduce the delay. - * Application (transport) provides channel feedback to driver through TargetFrameSize. - * When channel condition is very good (almost no constraint on instant frame size), - * the app should set target frame size as zero. Otherwise, channel capacity divided by fps - * should be used. - * */ -#define VA_RC_TCBRC 0x00001000 - -/**@}*/ - -/** @name Attribute values for VAConfigAttribDecSliceMode */ -/**@{*/ -/** \brief Driver supports normal mode for slice decoding */ -#define VA_DEC_SLICE_MODE_NORMAL 0x00000001 -/** \brief Driver supports base mode for slice decoding */ -#define VA_DEC_SLICE_MODE_BASE 0x00000002 - -/** @name Attribute values for VAConfigAttribDecJPEG */ -/**@{*/ -typedef union _VAConfigAttribValDecJPEG { - struct { - /** \brief Set to (1 << VA_ROTATION_xxx) for supported rotation angles. */ - uint32_t rotation : 4; - /** \brief Reserved for future use. */ - uint32_t reserved : 28; - } bits; - uint32_t value; -} VAConfigAttribValDecJPEG; -/** @name Attribute values for VAConfigAttribDecProcessing */ -/**@{*/ -/** \brief No decoding + processing in a single decoding call. */ -#define VA_DEC_PROCESSING_NONE 0x00000000 -/** \brief Decode + processing in a single decoding call. */ -#define VA_DEC_PROCESSING 0x00000001 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncPackedHeaders */ -/**@{*/ -/** \brief Driver does not support any packed headers mode. */ -#define VA_ENC_PACKED_HEADER_NONE 0x00000000 -/** - * \brief Driver supports packed sequence headers. e.g. SPS for H.264. - * - * Application must provide it to driver once this flag is returned through - * vaGetConfigAttributes() - */ -#define VA_ENC_PACKED_HEADER_SEQUENCE 0x00000001 -/** - * \brief Driver supports packed picture headers. e.g. PPS for H.264. - * - * Application must provide it to driver once this falg is returned through - * vaGetConfigAttributes() - */ -#define VA_ENC_PACKED_HEADER_PICTURE 0x00000002 -/** - * \brief Driver supports packed slice headers. e.g. slice_header() for H.264. - * - * Application must provide it to driver once this flag is returned through - * vaGetConfigAttributes() - */ -#define VA_ENC_PACKED_HEADER_SLICE 0x00000004 -/** - * \brief Driver supports misc packed headers. e.g. SEI for H.264. - * - * @deprecated - * This is a deprecated packed header flag, All applications can use - * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed - * header data buffer to the driver - */ -#define VA_ENC_PACKED_HEADER_MISC 0x00000008 -/** \brief Driver supports raw packed header, see VAEncPackedHeaderRawData */ -#define VA_ENC_PACKED_HEADER_RAW_DATA 0x00000010 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncInterlaced */ -/**@{*/ -/** \brief Driver does not support interlaced coding. */ -#define VA_ENC_INTERLACED_NONE 0x00000000 -/** \brief Driver supports interlaced frame coding. */ -#define VA_ENC_INTERLACED_FRAME 0x00000001 -/** \brief Driver supports interlaced field coding. */ -#define VA_ENC_INTERLACED_FIELD 0x00000002 -/** \brief Driver supports macroblock adaptive frame field coding. */ -#define VA_ENC_INTERLACED_MBAFF 0x00000004 -/** \brief Driver supports picture adaptive frame field coding. */ -#define VA_ENC_INTERLACED_PAFF 0x00000008 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncSliceStructure */ -/**@{*/ -/** \brief Driver supports a power-of-two number of rows per slice. */ -#define VA_ENC_SLICE_STRUCTURE_POWER_OF_TWO_ROWS 0x00000001 -/** \brief Driver supports an arbitrary number of macroblocks per slice. */ -#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS 0x00000002 -/** \brief Driver support 1 row per slice */ -#define VA_ENC_SLICE_STRUCTURE_EQUAL_ROWS 0x00000004 -/** \brief Driver support max encoded slice size per slice */ -#define VA_ENC_SLICE_STRUCTURE_MAX_SLICE_SIZE 0x00000008 -/** \brief Driver supports an arbitrary number of rows per slice. */ -#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_ROWS 0x00000010 -/** \brief Driver supports any number of rows per slice but they must be the same -* for all slices except for the last one, which must be equal or smaller -* to the previous slices. */ -#define VA_ENC_SLICE_STRUCTURE_EQUAL_MULTI_ROWS 0x00000020 -/**@}*/ - -/** \brief Attribute value for VAConfigAttribMaxFrameSize */ -typedef union _VAConfigAttribValMaxFrameSize { - struct { - /** \brief support max frame size - * if max_frame_size == 1, VAEncMiscParameterTypeMaxFrameSize/VAEncMiscParameterBufferMaxFrameSize - * could be used to set the frame size, if multiple_pass also equal 1, VAEncMiscParameterTypeMultiPassFrameSize - * VAEncMiscParameterBufferMultiPassFrameSize could be used to set frame size and pass information - */ - uint32_t max_frame_size : 1; - /** \brief multiple_pass support */ - uint32_t multiple_pass : 1; - /** \brief reserved bits for future, must be zero*/ - uint32_t reserved : 30; - } bits; - uint32_t value; -} VAConfigAttribValMaxFrameSize; - -/** \brief Attribute value for VAConfigAttribEncJPEG */ -typedef union _VAConfigAttribValEncJPEG { - struct { - /** \brief set to 1 for arithmatic coding. */ - uint32_t arithmatic_coding_mode : 1; - /** \brief set to 1 for progressive dct. */ - uint32_t progressive_dct_mode : 1; - /** \brief set to 1 for non-interleaved. */ - uint32_t non_interleaved_mode : 1; - /** \brief set to 1 for differential. */ - uint32_t differential_mode : 1; - uint32_t max_num_components : 3; - uint32_t max_num_scans : 4; - uint32_t max_num_huffman_tables : 3; - uint32_t max_num_quantization_tables : 3; - } bits; - uint32_t value; -} VAConfigAttribValEncJPEG; - -/** @name Attribute values for VAConfigAttribEncQuantization */ -/**@{*/ -/** \brief Driver does not support special types of quantization */ -#define VA_ENC_QUANTIZATION_NONE 0x00000000 -/** \brief Driver supports trellis quantization */ -#define VA_ENC_QUANTIZATION_TRELLIS_SUPPORTED 0x00000001 -/**@}*/ - -/** @name Attribute values for VAConfigAttribPredictionDirection */ -/**@{*/ -/** \brief Driver support forward reference frame (inter frame for vpx, P frame for H26x MPEG) - * can work with the VAConfigAttribEncMaxRefFrames. for example: low delay B frame of HEVC. - * these value can be OR'd together. typical value should be VA_PREDICTION_DIRECTION_PREVIOUS - * or VA_PREDICTION_DIRECTION_PREVIOUS | VA_PREDICTION_DIRECTION_FUTURE, theoretically, there - * are no stream only include future reference frame. - */ -#define VA_PREDICTION_DIRECTION_PREVIOUS 0x00000001 -/** \brief Driver support backward prediction frame/slice */ -#define VA_PREDICTION_DIRECTION_FUTURE 0x00000002 -/** \brief Dirver require both reference list must be not empty for inter frame */ -#define VA_PREDICTION_DIRECTION_BI_NOT_EMPTY 0x00000004 -/**@}*/ - -/** @name Attribute values for VAConfigAttribEncIntraRefresh */ -/**@{*/ -/** \brief Driver does not support intra refresh */ -#define VA_ENC_INTRA_REFRESH_NONE 0x00000000 -/** \brief Driver supports column based rolling intra refresh */ -#define VA_ENC_INTRA_REFRESH_ROLLING_COLUMN 0x00000001 -/** \brief Driver supports row based rolling intra refresh */ -#define VA_ENC_INTRA_REFRESH_ROLLING_ROW 0x00000002 -/** \brief Driver supports adaptive intra refresh */ -#define VA_ENC_INTRA_REFRESH_ADAPTIVE 0x00000010 -/** \brief Driver supports cyclic intra refresh */ -#define VA_ENC_INTRA_REFRESH_CYCLIC 0x00000020 -/** \brief Driver supports intra refresh of P frame*/ -#define VA_ENC_INTRA_REFRESH_P_FRAME 0x00010000 -/** \brief Driver supports intra refresh of B frame */ -#define VA_ENC_INTRA_REFRESH_B_FRAME 0x00020000 -/** \brief Driver supports intra refresh of multiple reference encoder */ -#define VA_ENC_INTRA_REFRESH_MULTI_REF 0x00040000 - -/**@}*/ - -/** \brief Attribute value for VAConfigAttribEncROI */ -typedef union _VAConfigAttribValEncROI { - struct { - /** \brief The number of ROI regions supported, 0 if ROI is not supported. */ - uint32_t num_roi_regions : 8; - /** - * \brief A flag indicates whether ROI priority is supported - * - * \ref roi_rc_priority_support equal to 1 specifies the underlying driver supports - * ROI priority when VAConfigAttribRateControl != VA_RC_CQP, user can use \c roi_value - * in #VAEncROI to set ROI priority. \ref roi_rc_priority_support equal to 0 specifies - * the underlying driver doesn't support ROI priority. - * - * User should ignore \ref roi_rc_priority_support when VAConfigAttribRateControl == VA_RC_CQP - * because ROI delta QP is always required when VAConfigAttribRateControl == VA_RC_CQP. - */ - uint32_t roi_rc_priority_support : 1; - /** - * \brief A flag indicates whether ROI delta QP is supported - * - * \ref roi_rc_qp_delta_support equal to 1 specifies the underlying driver supports - * ROI delta QP when VAConfigAttribRateControl != VA_RC_CQP, user can use \c roi_value - * in #VAEncROI to set ROI delta QP. \ref roi_rc_qp_delta_support equal to 0 specifies - * the underlying driver doesn't support ROI delta QP. - * - * User should ignore \ref roi_rc_qp_delta_support when VAConfigAttribRateControl == VA_RC_CQP - * because ROI delta QP is always required when VAConfigAttribRateControl == VA_RC_CQP. - */ - uint32_t roi_rc_qp_delta_support : 1; - uint32_t reserved : 22; - } bits; - uint32_t value; -} VAConfigAttribValEncROI; - -/** \brief Attribute value for VAConfigAttribEncRateControlExt */ -typedef union _VAConfigAttribValEncRateControlExt { - struct { - /** - * \brief The maximum number of temporal layers minus 1 - * - * \ref max_num_temporal_layers_minus1 plus 1 specifies the maximum number of temporal - * layers that supported by the underlying driver. \ref max_num_temporal_layers_minus1 - * equal to 0 implies the underlying driver doesn't support encoding with temporal layer. - */ - uint32_t max_num_temporal_layers_minus1 : 8; - - /** - * /brief support temporal layer bit-rate control flag - * - * \ref temporal_layer_bitrate_control_flag equal to 1 specifies the underlying driver - * can support bit-rate control per temporal layer when (#VAConfigAttribRateControl == #VA_RC_CBR || - * #VAConfigAttribRateControl == #VA_RC_VBR). - * - * The underlying driver must set \ref temporal_layer_bitrate_control_flag to 0 when - * \c max_num_temporal_layers_minus1 is equal to 0 - * - * To use bit-rate control per temporal layer, an application must send the right layer - * structure via #VAEncMiscParameterTemporalLayerStructure at the beginning of a coded sequence - * and then followed by #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate structures - * for each layer, using the \c temporal_id field as the layer identifier. Otherwise - * the driver doesn't use bitrate control per temporal layer if an application doesn't send the - * layer structure via #VAEncMiscParameterTemporalLayerStructure to the driver. The driver returns - * VA_STATUS_ERROR_INVALID_PARAMETER if an application sends a wrong layer structure or doesn't send - * #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate for each layer. - * - * The driver will ignore #VAEncMiscParameterTemporalLayerStructure and the \c temporal_id field - * in #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate if - * \ref temporal_layer_bitrate_control_flag is equal to 0 or #VAConfigAttribRateControl == #VA_RC_CQP - */ - uint32_t temporal_layer_bitrate_control_flag : 1; - uint32_t reserved : 23; - } bits; - uint32_t value; -} VAConfigAttribValEncRateControlExt; - -/** \brief Attribute value for VAConfigAttribMultipleFrame*/ -typedef union _VAConfigAttribValMultipleFrame { - struct { - /** \brief max num of concurrent frames from different stream */ - uint32_t max_num_concurrent_frames : 8; - /** \brief indicate whether all stream must support same quality level - * if mixed_quality_level == 0, same quality level setting for multple streams is required - * if mixed_quality_level == 1, different stream can have different quality level*/ - uint32_t mixed_quality_level : 1; - /** \brief reserved bit for future, must be zero */ - uint32_t reserved : 23; - } bits; - uint32_t value; -} VAConfigAttribValMultipleFrame; - -/** brief Attribute value VAConfigAttribValContextPriority */ -typedef union _VAConfigAttribValContextPriority { - struct { - /** \brief the priority , for the Query operation (read) it represents highest priority - * for the set operation (write), value should be [0~highest priority] , 0 is lowest priority*/ - uint32_t priority : 16; - /** \brief reserved bits for future, must be zero*/ - uint32_t reserved : 16; - } bits; - uint32_t value; -} VAConfigAttribValContextPriority; - -/** brief Attribute value VAConfigAttribEncPerBlockControl */ -typedef union _VAConfigAttribValEncPerBlockControl { - struct { - /** \brief whether to support dela qp per block */ - uint32_t delta_qp_support : 1; - /** \brief supported size of delta qp block */ - uint32_t log2_delta_qp_block_size : 4; - /** \brief size of delta qp per block in bytes*/ - uint32_t delta_qp_size_in_bytes : 3; - /** \brief reserved bit for future, must be zero */ - uint32_t reserved : 24; - } bits; - uint32_t value; -} VAConfigAttribValEncPerBlockControl; - -/** @name Attribute values for VAConfigAttribProtectedContentCipherAlgorithm */ -/** \brief AES cipher */ -#define VA_PC_CIPHER_AES 0x00000001 - -/** @name Attribute values for VAConfigAttribProtectedContentCipherBlockSize */ -/** \brief 128 bits block size */ -#define VA_PC_BLOCK_SIZE_128 0x00000001 -/** \brief 192 bits block size */ -#define VA_PC_BLOCK_SIZE_192 0x00000002 -/** \brief 256 bits block size */ -#define VA_PC_BLOCK_SIZE_256 0x00000004 - -/** @name Attribute values for VAConfigAttribProtectedContentCipherMode */ -/** \brief AES ECB */ -#define VA_PC_CIPHER_MODE_ECB 0x00000001 -/** \brief AES CBC */ -#define VA_PC_CIPHER_MODE_CBC 0x00000002 -/** \brief AES CTR */ -#define VA_PC_CIPHER_MODE_CTR 0x00000004 - -/** @name Attribute values for VAConfigAttribProtectedContentCipherSampleType */ -/** \brief Full sample */ -#define VA_PC_SAMPLE_TYPE_FULLSAMPLE 0x00000001 -/** \brief Sub sample */ -#define VA_PC_SAMPLE_TYPE_SUBSAMPLE 0x00000002 - -/** @name Attribute values for VAConfigAttribProtectedContentUsage */ -/** \brief Default usage */ -#define VA_PC_USAGE_DEFAULT 0x00000000 -/** \brief Widevine */ -#define VA_PC_USAGE_WIDEVINE 0x00000001 - -/** @name Attribute values for VAConfigAttribProcessingRate. */ -/**@{*/ -/** \brief Driver does not support processing rate report */ -#define VA_PROCESSING_RATE_NONE 0x00000000 -/** \brief Driver supports encode processing rate report */ -#define VA_PROCESSING_RATE_ENCODE 0x00000001 -/** \brief Driver supports decode processing rate report */ -#define VA_PROCESSING_RATE_DECODE 0x00000002 -/**@}*/ -/** - * if an attribute is not applicable for a given - * profile/entrypoint pair, then set the value to the following - */ -#define VA_ATTRIB_NOT_SUPPORTED 0x80000000 - -/** Get maximum number of profiles supported by the implementation */ -int vaMaxNumProfiles( - VADisplay dpy -); - -/** Get maximum number of entrypoints supported by the implementation */ -int vaMaxNumEntrypoints( - VADisplay dpy -); - -/** Get maximum number of attributs supported by the implementation */ -int vaMaxNumConfigAttributes( - VADisplay dpy -); - -/** - * Query supported profiles - * The caller must provide a "profile_list" array that can hold at - * least vaMaxNumProfile() entries. The actual number of profiles - * returned in "profile_list" is returned in "num_profile". - */ -VAStatus vaQueryConfigProfiles( - VADisplay dpy, - VAProfile *profile_list, /* out */ - int *num_profiles /* out */ -); - -/** - * Query supported entrypoints for a given profile - * The caller must provide an "entrypoint_list" array that can hold at - * least vaMaxNumEntrypoints() entries. The actual number of entrypoints - * returned in "entrypoint_list" is returned in "num_entrypoints". - */ -VAStatus vaQueryConfigEntrypoints( - VADisplay dpy, - VAProfile profile, - VAEntrypoint *entrypoint_list, /* out */ - int *num_entrypoints /* out */ -); - -/** - * Get attributes for a given profile/entrypoint pair - * The caller must provide an "attrib_list" with all attributes to be - * retrieved. Upon return, the attributes in "attrib_list" have been - * updated with their value. Unknown attributes or attributes that are - * not supported for the given profile/entrypoint pair will have their - * value set to VA_ATTRIB_NOT_SUPPORTED - */ -VAStatus vaGetConfigAttributes( - VADisplay dpy, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, /* in/out */ - int num_attribs -); - -/** Generic ID type, can be re-typed for specific implementation */ -typedef unsigned int VAGenericID; - -typedef VAGenericID VAConfigID; - -/** - * Create a configuration for the video decode/encode/processing pipeline - * it passes in the attribute list that specifies the attributes it cares - * about, with the rest taking default values. - */ -VAStatus vaCreateConfig( - VADisplay dpy, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, - int num_attribs, - VAConfigID *config_id /* out */ -); - -/** - * Free resources associdated with a given config - */ -VAStatus vaDestroyConfig( - VADisplay dpy, - VAConfigID config_id -); - -/** - * Query all attributes for a given configuration - * The profile of the configuration is returned in "profile" - * The entrypoint of the configuration is returned in "entrypoint" - * The caller must provide an "attrib_list" array that can hold at least - * vaMaxNumConfigAttributes() entries. The actual number of attributes - * returned in "attrib_list" is returned in "num_attribs" - */ -VAStatus vaQueryConfigAttributes( - VADisplay dpy, - VAConfigID config_id, - VAProfile *profile, /* out */ - VAEntrypoint *entrypoint, /* out */ - VAConfigAttrib *attrib_list,/* out */ - int *num_attribs /* out */ -); - - -/** - * Contexts and Surfaces - * - * Context represents a "virtual" video decode, encode or video processing - * pipeline. Surfaces are render targets for a given context. The data in the - * surfaces are not accessible to the client except if derived image is supported - * and the internal data format of the surface is implementation specific. - * - * Surfaces are provided as a hint of what surfaces will be used when the context - * is created through vaCreateContext(). A surface may be used by different contexts - * at the same time as soon as application can make sure the operations are synchronized - * between different contexts, e.g. a surface is used as the output of a decode context - * and the input of a video process context. Surfaces can only be destroyed after all - * contexts using these surfaces have been destroyed. - * - * Both contexts and surfaces are identified by unique IDs and its - * implementation specific internals are kept opaque to the clients - */ - -typedef VAGenericID VAContextID; - -typedef VAGenericID VASurfaceID; - -#define VA_INVALID_ID 0xffffffff -#define VA_INVALID_SURFACE VA_INVALID_ID - -/** \brief Generic value types. */ -typedef enum { - VAGenericValueTypeInteger = 1, /**< 32-bit signed integer. */ - VAGenericValueTypeFloat, /**< 32-bit floating-point value. */ - VAGenericValueTypePointer, /**< Generic pointer type */ - VAGenericValueTypeFunc /**< Pointer to function */ -} VAGenericValueType; - -/** \brief Generic function type. */ -typedef void (*VAGenericFunc)(void); - -/** \brief Generic value. */ -typedef struct _VAGenericValue { - /** \brief Value type. See #VAGenericValueType. */ - VAGenericValueType type; - /** \brief Value holder. */ - union { - /** \brief 32-bit signed integer. */ - int32_t i; - /** \brief 32-bit float. */ - float f; - /** \brief Generic pointer. */ - void *p; - /** \brief Pointer to function. */ - VAGenericFunc fn; - } value; -} VAGenericValue; - -/** @name Surface attribute flags */ -/**@{*/ -/** \brief Surface attribute is not supported. */ -#define VA_SURFACE_ATTRIB_NOT_SUPPORTED 0x00000000 -/** \brief Surface attribute can be got through vaQuerySurfaceAttributes(). */ -#define VA_SURFACE_ATTRIB_GETTABLE 0x00000001 -/** \brief Surface attribute can be set through vaCreateSurfaces(). */ -#define VA_SURFACE_ATTRIB_SETTABLE 0x00000002 -/**@}*/ - -/** \brief Surface attribute types. */ -typedef enum { - VASurfaceAttribNone = 0, - /** - * \brief Pixel format as a FOURCC (int, read/write). - * - * When vaQuerySurfaceAttributes() is called, the driver will return one - * PixelFormat attribute per supported pixel format. - * - * When provided as an input to vaCreateSurfaces(), the driver will - * allocate a surface with the provided pixel format. - */ - VASurfaceAttribPixelFormat, - /** \brief Minimal width in pixels (int, read-only). */ - VASurfaceAttribMinWidth, - /** \brief Maximal width in pixels (int, read-only). */ - VASurfaceAttribMaxWidth, - /** \brief Minimal height in pixels (int, read-only). */ - VASurfaceAttribMinHeight, - /** \brief Maximal height in pixels (int, read-only). */ - VASurfaceAttribMaxHeight, - /** \brief Surface memory type expressed in bit fields (int, read/write). */ - VASurfaceAttribMemoryType, - /** \brief External buffer descriptor (pointer, write). - * - * Refer to the documentation for the memory type being created to - * determine what descriptor structure to pass here. If not otherwise - * stated, the common VASurfaceAttribExternalBuffers should be used. - */ - VASurfaceAttribExternalBufferDescriptor, - /** \brief Surface usage hint, gives the driver a hint of intended usage - * to optimize allocation (e.g. tiling) (int, read/write). */ - VASurfaceAttribUsageHint, - /** \brief List of possible DRM format modifiers (pointer, write). - * - * The value must be a pointer to a VADRMFormatModifierList. This can only - * be used when allocating a new buffer, it's invalid to use this attribute - * when importing an existing buffer. - */ - VASurfaceAttribDRMFormatModifiers, - /** \brief Number of surface attributes. */ - VASurfaceAttribCount -} VASurfaceAttribType; - -/** \brief Surface attribute. */ -typedef struct _VASurfaceAttrib { - /** \brief Type. */ - VASurfaceAttribType type; - /** \brief Flags. See "Surface attribute flags". */ - uint32_t flags; - /** \brief Value. See "Surface attribute types" for the expected types. */ - VAGenericValue value; -} VASurfaceAttrib; - -/** - * @name VASurfaceAttribMemoryType values in bit fields. - * Bit 0:7 are reserved for generic types, Bit 31:28 are reserved for - * Linux DRM, Bit 23:20 are reserved for Android. DRM and Android specific - * types are defined in DRM and Android header files. - */ -/**@{*/ -/** \brief VA memory type (default) is supported. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_VA 0x00000001 -/** \brief V4L2 buffer memory type is supported. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_V4L2 0x00000002 -/** \brief User pointer memory type is supported. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_USER_PTR 0x00000004 -/**@}*/ - -/** - * \brief VASurfaceAttribExternalBuffers structure for - * the VASurfaceAttribExternalBufferDescriptor attribute. - */ -typedef struct _VASurfaceAttribExternalBuffers { - /** \brief pixel format in fourcc. */ - uint32_t pixel_format; - /** \brief width in pixels. */ - uint32_t width; - /** \brief height in pixels. */ - uint32_t height; - /** \brief total size of the buffer in bytes. */ - uint32_t data_size; - /** \brief number of planes for planar layout */ - uint32_t num_planes; - /** \brief pitch for each plane in bytes */ - uint32_t pitches[4]; - /** \brief offset for each plane in bytes */ - uint32_t offsets[4]; - /** \brief buffer handles or user pointers */ - uintptr_t *buffers; - /** \brief number of elements in the "buffers" array */ - uint32_t num_buffers; - /** \brief flags. See "Surface external buffer descriptor flags". */ - uint32_t flags; - /** \brief reserved for passing private data */ - void *private_data; -} VASurfaceAttribExternalBuffers; - -/** @name VASurfaceAttribExternalBuffers flags */ -/**@{*/ -/** \brief Enable memory tiling */ -#define VA_SURFACE_EXTBUF_DESC_ENABLE_TILING 0x00000001 -/** \brief Memory is cacheable */ -#define VA_SURFACE_EXTBUF_DESC_CACHED 0x00000002 -/** \brief Memory is non-cacheable */ -#define VA_SURFACE_EXTBUF_DESC_UNCACHED 0x00000004 -/** \brief Memory is write-combined */ -#define VA_SURFACE_EXTBUF_DESC_WC 0x00000008 -/** \brief Memory is protected */ -#define VA_SURFACE_EXTBUF_DESC_PROTECTED 0x80000000 - -/** @name VASurfaceAttribUsageHint attribute usage hint flags */ -/**@{*/ -/** \brief Surface usage not indicated. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_GENERIC 0x00000000 -/** \brief Surface used by video decoder. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_DECODER 0x00000001 -/** \brief Surface used by video encoder. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_ENCODER 0x00000002 -/** \brief Surface read by video post-processing. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_VPP_READ 0x00000004 -/** \brief Surface written by video post-processing. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_VPP_WRITE 0x00000008 -/** \brief Surface used for display. */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_DISPLAY 0x00000010 -/** \brief Surface used for export to third-party APIs, e.g. via - * vaExportSurfaceHandle(). */ -#define VA_SURFACE_ATTRIB_USAGE_HINT_EXPORT 0x00000020 - -/**@}*/ - -/** - * \brief Queries surface attributes for the supplied config. - * - * This function queries for all supported attributes for the - * supplied VA @config. In particular, if the underlying hardware - * supports the creation of VA surfaces in various formats, then - * this function will enumerate all pixel formats that are supported. - * - * The \c attrib_list array is allocated by the user and \c - * num_attribs shall be initialized to the number of allocated - * elements in that array. Upon successful return, the actual number - * of attributes will be overwritten into \c num_attribs. Otherwise, - * \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and \c num_attribs - * is adjusted to the number of elements that would be returned if - * enough space was available. - * - * Note: it is perfectly valid to pass NULL to the \c attrib_list - * argument when vaQuerySurfaceAttributes() is used to determine the - * actual number of elements that need to be allocated. - * - * @param[in] dpy the VA display - * @param[in] config the config identifying a codec or a video - * processing pipeline - * @param[out] attrib_list the output array of #VASurfaceAttrib elements - * @param[in,out] num_attribs the number of elements allocated on - * input, the number of elements actually filled in output - */ -VAStatus -vaQuerySurfaceAttributes( - VADisplay dpy, - VAConfigID config, - VASurfaceAttrib *attrib_list, - unsigned int *num_attribs -); - -/** - * \brief Creates an array of surfaces - * - * Creates an array of surfaces. The optional list of attributes shall - * be constructed based on what the underlying hardware could expose - * through vaQuerySurfaceAttributes(). - * - * @param[in] dpy the VA display - * @param[in] format the desired surface format. See \c VA_RT_FORMAT_* - * @param[in] width the surface width - * @param[in] height the surface height - * @param[out] surfaces the array of newly created surfaces - * @param[in] num_surfaces the number of surfaces to create - * @param[in] attrib_list the list of (optional) attributes, or \c NULL - * @param[in] num_attribs the number of attributes supplied in - * \c attrib_list, or zero - */ -VAStatus -vaCreateSurfaces( - VADisplay dpy, - unsigned int format, - unsigned int width, - unsigned int height, - VASurfaceID *surfaces, - unsigned int num_surfaces, - VASurfaceAttrib *attrib_list, - unsigned int num_attribs -); - -/** - * vaDestroySurfaces - Destroy resources associated with surfaces. - * Surfaces can only be destroyed after all contexts using these surfaces have been - * destroyed. - * dpy: display - * surfaces: array of surfaces to destroy - * num_surfaces: number of surfaces in the array to be destroyed. - */ -VAStatus vaDestroySurfaces( - VADisplay dpy, - VASurfaceID *surfaces, - int num_surfaces -); - -#define VA_PROGRESSIVE 0x1 -/** - * vaCreateContext - Create a context - * dpy: display - * config_id: configuration for the context - * picture_width: coded picture width - * picture_height: coded picture height - * flag: any combination of the following: - * VA_PROGRESSIVE (only progressive frame pictures in the sequence when set) - * render_targets: a hint for render targets (surfaces) tied to the context - * num_render_targets: number of render targets in the above array - * context: created context id upon return - */ -VAStatus vaCreateContext( - VADisplay dpy, - VAConfigID config_id, - int picture_width, - int picture_height, - int flag, - VASurfaceID *render_targets, - int num_render_targets, - VAContextID *context /* out */ -); - -/** - * vaDestroyContext - Destroy a context - * dpy: display - * context: context to be destroyed - */ -VAStatus vaDestroyContext( - VADisplay dpy, - VAContextID context -); - -//Multi-frame context -typedef VAGenericID VAMFContextID; -/** - * vaCreateMFContext - Create a multi-frame context - * interface encapsulating common for all streams memory objects and structures - * required for single GPU task submission from several VAContextID's. - * Allocation: This call only creates an instance, doesn't allocate any additional memory. - * Support identification: Application can identify multi-frame feature support by ability - * to create multi-frame context. If driver supports multi-frame - call successful, - * mf_context != NULL and VAStatus = VA_STATUS_SUCCESS, otherwise if multi-frame processing - * not supported driver returns VA_STATUS_ERROR_UNIMPLEMENTED and mf_context = NULL. - * return values: - * VA_STATUS_SUCCESS - operation successful. - * VA_STATUS_ERROR_UNIMPLEMENTED - no support for multi-frame. - * dpy: display adapter. - * mf_context: Multi-Frame context encapsulating all associated context - * for multi-frame submission. - */ -VAStatus vaCreateMFContext( - VADisplay dpy, - VAMFContextID *mf_context /* out */ -); - -/** - * vaMFAddContext - Provide ability to associate each context used for - * Multi-Frame submission and common Multi-Frame context. - * Try to add context to understand if it is supported. - * Allocation: this call allocates and/or reallocates all memory objects - * common for all contexts associated with particular Multi-Frame context. - * All memory required for each context(pixel buffers, internal driver - * buffers required for processing) allocated during standard vaCreateContext call for each context. - * Runtime dependency - if current implementation doesn't allow to run different entry points/profile, - * first context added will set entry point/profile for whole Multi-Frame context, - * all other entry points and profiles can be rejected to be added. - * Return values: - * VA_STATUS_SUCCESS - operation successful, context was added. - * VA_STATUS_ERROR_OPERATION_FAILED - something unexpected happened - application have to close - * current mf_context and associated contexts and start working with new ones. - * VA_STATUS_ERROR_INVALID_CONTEXT - ContextID is invalid, means: - * 1 - mf_context is not valid context or - * 2 - driver can't suport different VAEntrypoint or VAProfile simultaneosly - * and current context contradicts with previously added, application can continue with current mf_context - * and other contexts passed this call, rejected context can continue work in stand-alone - * mode or other mf_context. - * VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT - particular context being added was created with with - * unsupported VAEntrypoint. Application can continue with current mf_context - * and other contexts passed this call, rejected context can continue work in stand-alone - * mode. - * VA_STATUS_ERROR_UNSUPPORTED_PROFILE - Current context with Particular VAEntrypoint is supported - * but VAProfile is not supported. Application can continue with current mf_context - * and other contexts passed this call, rejected context can continue work in stand-alone - * mode. - * dpy: display adapter. - * context: context being associated with Multi-Frame context. - * mf_context: - multi-frame context used to associate contexts for multi-frame submission. - */ -VAStatus vaMFAddContext( - VADisplay dpy, - VAMFContextID mf_context, - VAContextID context -); - -/** - * vaMFReleaseContext - Removes context from multi-frame and - * association with multi-frame context. - * After association removed vaEndPicture will submit tasks, but not vaMFSubmit. - * Return values: - * VA_STATUS_SUCCESS - operation successful, context was removed. - * VA_STATUS_ERROR_OPERATION_FAILED - something unexpected happened. - * application need to destroy this VAMFContextID and all assotiated VAContextID - * dpy: display - * mf_context: VAMFContextID where context is added - * context: VAContextID to be added - */ -VAStatus vaMFReleaseContext( - VADisplay dpy, - VAMFContextID mf_context, - VAContextID context -); - -/** - * Buffers - * Buffers are used to pass various types of data from the - * client to the server. The server maintains a data store - * for each buffer created, and the client idenfies a buffer - * through a unique buffer id assigned by the server. - */ - -typedef VAGenericID VABufferID; - -typedef enum { - VAPictureParameterBufferType = 0, - VAIQMatrixBufferType = 1, - VABitPlaneBufferType = 2, - VASliceGroupMapBufferType = 3, - VASliceParameterBufferType = 4, - VASliceDataBufferType = 5, - VAMacroblockParameterBufferType = 6, - VAResidualDataBufferType = 7, - VADeblockingParameterBufferType = 8, - VAImageBufferType = 9, - VAProtectedSliceDataBufferType = 10, - VAQMatrixBufferType = 11, - VAHuffmanTableBufferType = 12, - VAProbabilityBufferType = 13, - - /* Following are encode buffer types */ - VAEncCodedBufferType = 21, - VAEncSequenceParameterBufferType = 22, - VAEncPictureParameterBufferType = 23, - VAEncSliceParameterBufferType = 24, - VAEncPackedHeaderParameterBufferType = 25, - VAEncPackedHeaderDataBufferType = 26, - VAEncMiscParameterBufferType = 27, - VAEncMacroblockParameterBufferType = 28, - VAEncMacroblockMapBufferType = 29, - - /** - * \brief Encoding QP buffer - * - * This buffer contains QP per MB for encoding. Currently - * VAEncQPBufferH264 is defined for H.264 encoding, see - * #VAEncQPBufferH264 for details - */ - VAEncQPBufferType = 30, - /* Following are video processing buffer types */ - /** - * \brief Video processing pipeline parameter buffer. - * - * This buffer describes the video processing pipeline. See - * #VAProcPipelineParameterBuffer for details. - */ - VAProcPipelineParameterBufferType = 41, - /** - * \brief Video filter parameter buffer. - * - * This buffer describes the video filter parameters. All buffers - * inherit from #VAProcFilterParameterBufferBase, thus including - * a unique filter buffer type. - * - * The default buffer used by most filters is #VAProcFilterParameterBuffer. - * Filters requiring advanced parameters include, but are not limited to, - * deinterlacing (#VAProcFilterParameterBufferDeinterlacing), - * color balance (#VAProcFilterParameterBufferColorBalance), etc. - */ - VAProcFilterParameterBufferType = 42, - /** - * \brief FEI specific buffer types - */ - VAEncFEIMVBufferType = 43, - VAEncFEIMBCodeBufferType = 44, - VAEncFEIDistortionBufferType = 45, - VAEncFEIMBControlBufferType = 46, - VAEncFEIMVPredictorBufferType = 47, - VAStatsStatisticsParameterBufferType = 48, - /** \brief Statistics output for VAEntrypointStats progressive and top field of interlaced case*/ - VAStatsStatisticsBufferType = 49, - /** \brief Statistics output for VAEntrypointStats bottom field of interlaced case*/ - VAStatsStatisticsBottomFieldBufferType = 50, - VAStatsMVBufferType = 51, - VAStatsMVPredictorBufferType = 52, - /** Force MB's to be non skip for encode.it's per-mb control buffer, The width of the MB map - * Surface is (width of the Picture in MB unit) * 1 byte, multiple of 64 bytes. - * The height is (height of the picture in MB unit). The picture is either - * frame or non-interleaved top or bottom field. If the application provides this - *surface, it will override the "skipCheckDisable" setting in VAEncMiscParameterEncQuality. - */ - VAEncMacroblockDisableSkipMapBufferType = 53, - /** - * \brief HEVC FEI CTB level cmd buffer - * it is CTB level information for future usage. - */ - VAEncFEICTBCmdBufferType = 54, - /** - * \brief HEVC FEI CU level data buffer - * it's CTB level information for future usage - */ - VAEncFEICURecordBufferType = 55, - /** decode stream out buffer, intermedia data of decode, it may include MV, MB mode etc. - * it can be used to detect motion and analyze the frame contain */ - VADecodeStreamoutBufferType = 56, - - /** \brief HEVC Decoding Subset Parameter buffer type - * - * The subsets parameter buffer is concatenation with one or multiple - * subset entry point offsets. All the offset values are layed out one - * by one according to slice order with first slice segment first, second - * slice segment second, etc... The entry number is indicated by parameter - * \ref num_entry_point_offsets. And the first entry position of the entry - * point offsets for any slice segment is indicated by parameter - * entry_offset_to_subset_array in VAPictureParameterBufferHEVC data structure. - */ - VASubsetsParameterBufferType = 57, - /** \brief adjust context parameters dynamically - * - * this parameter is used to update context parameters, detail parameter is in - * \c VAContextParameterUpdateBuffer - */ - VAContextParameterUpdateBufferType = 58, - /** - * \brief Protected session execution buffer type - * - * It's for TEE execution usage (vaProtectedSessionExecute()). The buffer structure is in - * \c VAProtectedSessionExecuteBuffer - */ - VAProtectedSessionExecuteBufferType = 59, - - /** \brief Encryption parameters buffer for protected content session. - * - * Refer to \c VAEncryptionParameters - */ - VAEncryptionParameterBufferType = 60, - - /** - * \brief Encoding delta QP per block buffer - * - * This buffer only could be created and accepted - * when \c VAConfigAttribValEncPerBlockControl delta_qp_support == 1. - * This input buffer contains delta QP per block for encoding. - * The supported size of delta QP block and the size of delta QP - * must be quried from \c VAConfigAttribValEncPerBlockControl. - */ - VAEncDeltaQpPerBlockBufferType = 61, - - VABufferTypeMax -} VABufferType; - -/** \brief update the context parameter - * this structure is used to update context parameters, such as priority of the context - * backend driver should keep the parameter unchanged if there no new - * parameter updated. - */ -typedef struct _VAContextParameterUpdateBuffer { - union { - struct { - /** \brief indicate whether context priority changed */ - uint32_t context_priority_update : 1; - /** \brief Reserved bits for future use, must be zero */ - uint32_t reserved : 31; - } bits; - uint32_t value; - } flags; - /** \brief task/context priority */ - VAConfigAttribValContextPriority context_priority; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved[VA_PADDING_MEDIUM]; -} VAContextParameterUpdateBuffer; - -/** - * These ENCRYPTION_TYPEs are used for the attribute values for - * \c VAConfigAttribEncryption and for encryption_type in - * VAEncryptionParameters. - * - * When used for \c VAConfigAttribEncryption, it be used via - * vaQueryConfigEntrypoints to check which type are supported for specific - * profile or not. - * - * When used for encryption_type in VAEncryptionParameters, it tells driver - * the parameters in VAEncryptionParameters are used for which encryption type. - */ -#define VA_ENCRYPTION_TYPE_FULLSAMPLE_CTR 0x00000001 /* AES CTR fullsample */ -#define VA_ENCRYPTION_TYPE_FULLSAMPLE_CBC 0x00000002 /* AES CBC fullsample */ -#define VA_ENCRYPTION_TYPE_SUBSAMPLE_CTR 0x00000004 /* AES CTR fullsample */ -#define VA_ENCRYPTION_TYPE_SUBSAMPLE_CBC 0x00000008 /* AES CBC fullsample */ - -/** \brief structure for encrypted segment info. */ -typedef struct _VAEncryptionSegmentInfo { - /** \brief The offset relative to the start of the bitstream input in - * bytes of the start of the segment */ - uint32_t segment_start_offset; - /** \brief The length of the segments in bytes */ - uint32_t segment_length; - /** \brief The length in bytes of the remainder of an incomplete block - * from a previous segment*/ - uint32_t partial_aes_block_size; - /** \brief The length in bytes of the initial clear data */ - uint32_t init_byte_length; - /** \brief This will be AES counter for secure decode and secure encode - * when numSegments equals 1, valid size is specified by - * \c key_blob_size */ - uint8_t aes_cbc_iv_or_ctr[64]; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAEncryptionSegmentInfo; - -/** \brief Encryption parameters buffer for VAEncryptionParameterBufferType */ -typedef struct _VAEncryptionParameters { - /** \brief Encryption type, refer to \c VA_ENCRYPTION_TYPE_FULLSAMPLE_CTR, - * \c VA_ENCRYPTION_TYPE_FULLSAMPLE_CBC, \c VA_ENCRYPTION_TYPE_SUBSAMPLE_CTR, - * or \c VA_ENCRYPTION_TYPE_SUBSAMPLE_CBC */ - uint32_t encryption_type; - /** \brief The number of sengments */ - uint32_t num_segments; - /** \brief Pointer of segments */ - VAEncryptionSegmentInfo *segment_info; - /** \brief The status report index reserved for CENC fullsample workload. - * The related structures and definitions are vendor specific. - */ - uint32_t status_report_index; - /** \brief CENC counter length */ - uint32_t size_of_length; - /** \brief Wrapped decrypt blob (Snd)kb, valid size is specified by - * \c key_blob_size */ - uint8_t wrapped_decrypt_blob[64]; - /** \brief Wrapped Key blob info (Sne)kb, valid size is specified by - * \c key_blob_size */ - uint8_t wrapped_encrypt_blob[64]; - /** \brief key blob size - * It could be \c VA_PC_BLOCK_SIZE_128, \c VA_PC_BLOCK_SIZE_192, or - * \c VA_PC_BLOCK_SIZE_256 - */ - uint32_t key_blob_size; - /** \brief Indicates the number of 16-byte BLOCKS that are encrypted in any - * given encrypted region of segments. - * If this value is zero: - * 1. All bytes in encrypted region of segments are encrypted, i.e. the - * CENC or CBC1 scheme is being used - * 2. blocks_stripe_clear must also be zero. - * If this value is non-zero, blocks_stripe_clear must also be non-zero. - */ - uint32_t blocks_stripe_encrypted; - /** \brief Indicates the number of 16-byte BLOCKS that are clear in any given - * encrypted region of segments, as defined by the CENS and CBCS schemes in - * the common encryption spec. - * If this value is zero, all bytes in encrypted region of segments are - * encrypted, i.e. the CENC or CBC1 scheme is being used. - */ - uint32_t blocks_stripe_clear; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAEncryptionParameters; - -/** - * Processing rate parameter for encode. - */ -typedef struct _VAProcessingRateParameterEnc { - /** \brief Profile level */ - uint8_t level_idc; - uint8_t reserved[3]; - /** \brief quality level. When set to 0, default quality - * level is used. - */ - uint32_t quality_level; - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; -} VAProcessingRateParameterEnc; - -/** - * Processing rate parameter for decode. - */ -typedef struct _VAProcessingRateParameterDec { - /** \brief Profile level */ - uint8_t level_idc; - uint8_t reserved0[3]; - uint32_t reserved; -} VAProcessingRateParameterDec; - -typedef struct _VAProcessingRateParameter { - union { - VAProcessingRateParameterEnc proc_buf_enc; - VAProcessingRateParameterDec proc_buf_dec; - }; -} VAProcessingRateParameter; - -/** - * \brief Queries processing rate for the supplied config. - * - * This function queries the processing rate based on parameters in - * \c proc_buf for the given \c config. Upon successful return, the processing - * rate value will be stored in \c processing_rate. Processing rate is - * specified as the number of macroblocks/CTU per second. - * - * If NULL is passed to the \c proc_buf, the default processing rate for the - * given configuration will be returned. - * - * @param[in] dpy the VA display - * @param[in] config the config identifying a codec or a video - * processing pipeline - * @param[in] proc_buf the buffer that contains the parameters for - either the encode or decode processing rate - * @param[out] processing_rate processing rate in number of macroblocks per - second constrained by parameters specified in proc_buf - * - */ -VAStatus -vaQueryProcessingRate( - VADisplay dpy, - VAConfigID config, - VAProcessingRateParameter *proc_buf, - unsigned int *processing_rate -); - -typedef enum { - VAEncMiscParameterTypeFrameRate = 0, - VAEncMiscParameterTypeRateControl = 1, - VAEncMiscParameterTypeMaxSliceSize = 2, - VAEncMiscParameterTypeAIR = 3, - /** \brief Buffer type used to express a maximum frame size (in bits). */ - VAEncMiscParameterTypeMaxFrameSize = 4, - /** \brief Buffer type used for HRD parameters. */ - VAEncMiscParameterTypeHRD = 5, - VAEncMiscParameterTypeQualityLevel = 6, - /** \brief Buffer type used for Rolling intra refresh */ - VAEncMiscParameterTypeRIR = 7, - /** \brief Buffer type used for quantization parameters, it's per-sequence parameter*/ - VAEncMiscParameterTypeQuantization = 8, - /** \brief Buffer type used for sending skip frame parameters to the encoder's - * rate control, when the user has externally skipped frames. */ - VAEncMiscParameterTypeSkipFrame = 9, - /** \brief Buffer type used for region-of-interest (ROI) parameters. */ - VAEncMiscParameterTypeROI = 10, - /** \brief Buffer type used to express a maximum frame size (in bytes) settings for multiple pass. */ - VAEncMiscParameterTypeMultiPassFrameSize = 11, - /** \brief Buffer type used for temporal layer structure */ - VAEncMiscParameterTypeTemporalLayerStructure = 12, - /** \brief Buffer type used for dirty region-of-interest (ROI) parameters. */ - VAEncMiscParameterTypeDirtyRect = 13, - /** \brief Buffer type used for parallel BRC parameters. */ - VAEncMiscParameterTypeParallelBRC = 14, - /** \brief Set MB partion mode mask and Half-pel/Quant-pel motion search */ - VAEncMiscParameterTypeSubMbPartPel = 15, - /** \brief set encode quality tuning */ - VAEncMiscParameterTypeEncQuality = 16, - /** \brief Buffer type used for encoder rounding offset parameters. */ - VAEncMiscParameterTypeCustomRoundingControl = 17, - /** \brief Buffer type used for FEI input frame level parameters */ - VAEncMiscParameterTypeFEIFrameControl = 18, - /** \brief encode extension buffer, ect. MPEG2 Sequence extenstion data */ - VAEncMiscParameterTypeExtensionData = 19 -} VAEncMiscParameterType; - -/** \brief Packed header type. */ -typedef enum { - /** \brief Packed sequence header. */ - VAEncPackedHeaderSequence = 1, - /** \brief Packed picture header. */ - VAEncPackedHeaderPicture = 2, - /** \brief Packed slice header. */ - VAEncPackedHeaderSlice = 3, - /** - * \brief Packed raw header. - * - * Packed raw data header can be used by the client to insert a header - * into the bitstream data buffer at the point it is passed, the driver - * will handle the raw packed header based on "has_emulation_bytes" field - * in the packed header parameter structure. - */ - VAEncPackedHeaderRawData = 4, - /** - * \brief Misc packed header. See codec-specific definitions. - * - * @deprecated - * This is a deprecated packed header type. All applications can use - * \c VAEncPackedHeaderRawData to insert a codec-specific packed header - */ - VAEncPackedHeaderMiscMask va_deprecated_enum = 0x80000000, -} VAEncPackedHeaderType; - -/** \brief Packed header parameter. */ -typedef struct _VAEncPackedHeaderParameterBuffer { - /** Type of the packed header buffer. See #VAEncPackedHeaderType. */ - uint32_t type; - /** \brief Size of the #VAEncPackedHeaderDataBuffer in bits. */ - uint32_t bit_length; - /** \brief Flag: buffer contains start code emulation prevention bytes? */ - uint8_t has_emulation_bytes; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPackedHeaderParameterBuffer; - -/** - * For application, e.g. set a new bitrate - * VABufferID buf_id; - * VAEncMiscParameterBuffer *misc_param; - * VAEncMiscParameterRateControl *misc_rate_ctrl; - * - * vaCreateBuffer(dpy, context, VAEncMiscParameterBufferType, - * sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParameterRateControl), - * 1, NULL, &buf_id); - * - * vaMapBuffer(dpy,buf_id,(void **)&misc_param); - * misc_param->type = VAEncMiscParameterTypeRateControl; - * misc_rate_ctrl= (VAEncMiscParameterRateControl *)misc_param->data; - * misc_rate_ctrl->bits_per_second = 6400000; - * vaUnmapBuffer(dpy, buf_id); - * vaRenderPicture(dpy, context, &buf_id, 1); - */ -typedef struct _VAEncMiscParameterBuffer { - VAEncMiscParameterType type; - uint32_t data[]; -} VAEncMiscParameterBuffer; - -/** \brief Temporal layer Structure*/ -typedef struct _VAEncMiscParameterTemporalLayerStructure { - /** \brief The number of temporal layers */ - uint32_t number_of_layers; - /** \brief The length of the array defining frame layer membership. Should be 1-32 */ - uint32_t periodicity; - /** - * \brief The array indicating the layer id for each frame - * - * The layer id for the first frame in a coded sequence is always 0, so layer_id[] specifies the layer - * ids for frames starting from the 2nd frame. - */ - uint32_t layer_id[32]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterTemporalLayerStructure; - - -/** \brief Rate control parameters */ -typedef struct _VAEncMiscParameterRateControl { - /** The maximum bit-rate which the the rate controller should generate. */ - uint32_t bits_per_second; - /** The target bit-rate which the rate controller should generate, as a percentage of the - * maximum bit-rate. - * - * In CBR mode this value is ignored (treated as 100%). - */ - uint32_t target_percentage; - /** Rate control window size in milliseconds. - * - * The rate controller will attempt to guarantee that the target and maximum bit-rates are - * correct over this window. - */ - uint32_t window_size; - /** Initial quantiser value used at the start of the stream. - * - * Ignored if set to zero. - */ - uint32_t initial_qp; - /** Minimum quantiser value to use. - * - * The quantiser will not go below the value - if this limit is hit, the output bitrate may - * be lower than the target. Ignored if set to zero. - */ - uint32_t min_qp; - /** Basic unit size. - * - * Only used by some drivers - see driver documentation for details. Set to zero if unused. - */ - uint32_t basic_unit_size; - union { - struct { - /** Force rate controller reset. - * - * The next frame will be treated as the start of a new stream, with all rate - * controller state reset to its initial values. - */ - uint32_t reset : 1; - /** Disable frame skip in rate control mode. */ - uint32_t disable_frame_skip : 1; - /** Disable bit stuffing in rate control mode. */ - uint32_t disable_bit_stuffing : 1; - /** Macroblock-level rate control. - * - * 0: use default, 1: always enable, 2: always disable, other: reserved. - * - * This feature is only available if VAConfigAttribRateControl has the - * \ref VA_RC_MB bit set. - */ - uint32_t mb_rate_control : 4; - /** The temporal layer that these rate control parameters apply to. */ - uint32_t temporal_id : 8; - /** Ensure that intra frames also conform to the constant frame size. */ - uint32_t cfs_I_frames : 1; - /** Enable parallel rate control for hierarchical B frames. - * - * See \ref VA_RC_PARALLEL. - */ - uint32_t enable_parallel_brc : 1; - uint32_t enable_dynamic_scaling : 1; - /** Frame tolerance mode. - * - * Indicates the tolerance the application has to variations in the frame size. - * For example, wireless display scenarios may require very steady bit rate to - * reduce buffering time. It affects the rate control algorithm used, - * but may or may not have an effect based on the combination of other BRC - * parameters. Only valid when the driver reports support for - * #VAConfigAttribFrameSizeToleranceSupport. - * - * equals 0 -- normal mode; - * equals 1 -- maps to sliding window; - * equals 2 -- maps to low delay mode; - * other -- invalid. - */ - uint32_t frame_tolerance_mode : 2; - /** Reserved for future use, must be zero. */ - uint32_t reserved : 12; - } bits; - uint32_t value; - } rc_flags; - /** Initial quality factor used in ICQ mode. - * - * This value must be between 1 and 51. - * this value will be deprecated in future, to use quality_factor instead of it. - */ - uint32_t ICQ_quality_factor; - /** Maximum quantiser value to use. - * - * The quantiser will not go above this value - if this limit is hit, the output bitrate - * may exceed the target. Ignored if set to zero. - */ - uint32_t max_qp; - /** Quality factor - * - * the range will be different for different codec - */ - uint32_t quality_factor; - /** Target frame size - * - * Desired frame size in bytes. - * This parameter can be used in some RC modes (like Transport Controlled BRC) - * where feedback from the app is required. - * Zero value means no limits. - * - */ - uint32_t target_frame_size; - /** Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterRateControl; - -/** Encode framerate parameters. - * - * Sets the encode framerate used by the rate controller. This should be - * provided in all modes using a bitrate target (variable framerate is not - * supported). - */ -typedef struct _VAEncMiscParameterFrameRate { - /** Encode framerate. - * - * The framerate is specified as a number of frames per second, as a - * fraction. The denominator of the fraction is given in the top half - * (the high two bytes) of the framerate field, and the numerator is - * given in the bottom half (the low two bytes). - * - * That is: - * denominator = framerate >> 16 & 0xffff; - * numerator = framerate & 0xffff; - * fps = numerator / denominator; - * - * For example, if framerate is set to (100 << 16 | 750), this is - * 750 / 100, hence 7.5fps. - * - * If the denominator is zero (the high two bytes are both zero) then - * it takes the value one instead, so the framerate is just the integer - * in the low 2 bytes. - */ - uint32_t framerate; - union { - struct { - /** The temporal layer that these framerate parameters apply to. */ - uint32_t temporal_id : 8; - /** Reserved for future use, must be zero. */ - uint32_t reserved : 24; - } bits; - uint32_t value; - } framerate_flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterFrameRate; - -/** - * Allow a maximum slice size to be specified (in bits). - * The encoder will attempt to make sure that individual slices do not exceed this size - * Or to signal applicate if the slice size exceed this size, see "status" of VACodedBufferSegment - */ -typedef struct _VAEncMiscParameterMaxSliceSize { - uint32_t max_slice_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterMaxSliceSize; - -typedef struct _VAEncMiscParameterAIR { - uint32_t air_num_mbs; - uint32_t air_threshold; - uint32_t air_auto; /* if set to 1 then hardware auto-tune the AIR threshold */ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterAIR; - -/* - * \brief Rolling intra refresh data structure for encoding. - */ -typedef struct _VAEncMiscParameterRIR { - union { - struct - /** - * \brief Indicate if intra refresh is enabled in column/row. - * - * App should query VAConfigAttribEncIntraRefresh to confirm RIR support - * by the driver before sending this structure. - */ - { - /* \brief enable RIR in column */ - uint32_t enable_rir_column : 1; - /* \brief enable RIR in row */ - uint32_t enable_rir_row : 1; - uint32_t reserved : 30; - } bits; - uint32_t value; - } rir_flags; - /** - * \brief Indicates the column or row location in MB. It is ignored if - * rir_flags is 0. - */ - uint16_t intra_insertion_location; - /** - * \brief Indicates the number of columns or rows in MB. It is ignored if - * rir_flags is 0. - */ - uint16_t intra_insert_size; - /** - * \brief indicates the Qp difference for inserted intra columns or rows. - * App can use this to adjust intra Qp based on bitrate & max frame size. - */ - uint8_t qp_delta_for_inserted_intra; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterRIR; - -/** HRD / VBV buffering parameters for encoding. - * - * This sets the HRD / VBV parameters which will be used by the rate - * controller for encoding. It should be specified in modes using a bitrate - * target when the buffering of the output stream needs to be constrained. - * - * If not provided, the encoder may use arbitrary amounts of buffering. - */ -typedef struct _VAEncMiscParameterHRD { - /** The initial fullness of the HRD coded picture buffer, in bits. - * - * This sets how full the CPB is when encoding begins - that is, how much - * buffering will happen on the decoder side before the first frame. - * The CPB fullness will be reset to this value after any rate control - * reset (a change in parameters or an explicit reset). - * - * For H.264, it should match the value of initial_cpb_removal_delay in - * buffering_period SEI messages. - */ - uint32_t initial_buffer_fullness; - /** The HRD coded picture buffer size, in bits. - * - * For H.264, it should match the value of cpb_size_value_minus1 in the VUI - * parameters. - */ - uint32_t buffer_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterHRD; - -/** - * \brief Defines a maximum frame size (in bits). - * - * This misc parameter buffer defines the maximum size of a frame (in - * bits). The encoder will try to make sure that each frame does not - * exceed this size. Otherwise, if the frame size exceeds this size, - * the \c status flag of #VACodedBufferSegment will contain - * #VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW. - */ -typedef struct _VAEncMiscParameterBufferMaxFrameSize { - /** \brief Type. Shall be set to #VAEncMiscParameterTypeMaxFrameSize. */ - /** duplicated with VAEncMiscParameterBuffer, should be deprecated*/ - va_deprecated VAEncMiscParameterType type; - /** \brief Maximum size of a frame (in bits). */ - uint32_t max_frame_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferMaxFrameSize; - -/** - * \brief Maximum frame size (in bytes) settings for multiple pass. - * - * This misc parameter buffer defines the maximum size of a frame (in - * bytes) settings for multiple pass. currently only AVC encoder can - * support this settings in multiple pass case. If the frame size exceeds - * this size, the encoder will do more pak passes to adjust the QP value - * to control the frame size. - */ -typedef struct _VAEncMiscParameterBufferMultiPassFrameSize { - /** \brief Type. Shall be set to #VAEncMiscParameterTypeMultiPassMaxFrameSize. */ - /** duplicated with VAEncMiscParameterBuffer, should be deprecated*/ - va_deprecated VAEncMiscParameterType type; - /** \brief Maximum size of a frame (in byte) */ - uint32_t max_frame_size; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved; - /** \brief number of passes, every pass has different QP, currently AVC encoder can support up to 4 passes */ - uint8_t num_passes; - /** \brief delta QP list for every pass */ - uint8_t *delta_qp; - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferMultiPassFrameSize; - -/** - * \brief Encoding quality level. - * - * The encoding quality could be set through this structure, if the implementation - * supports multiple quality levels. The quality level set through this structure is - * persistent over the entire coded sequence, or until a new structure is being sent. - * The quality level range can be queried through the VAConfigAttribEncQualityRange - * attribute. A lower value means higher quality, and a value of 1 represents the highest - * quality. The quality level setting is used as a trade-off between quality and speed/power - * consumption, with higher quality corresponds to lower speed and higher power consumption. - */ -typedef struct _VAEncMiscParameterBufferQualityLevel { - /** \brief Encoding quality level setting. When set to 0, default quality - * level is used. - */ - uint32_t quality_level; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferQualityLevel; - -/** - * \brief Quantization settings for encoding. - * - * Some encoders support special types of quantization such as trellis, and this structure - * can be used by the app to control these special types of quantization by the encoder. - */ -typedef struct _VAEncMiscParameterQuantization { - union { - /* if no flags is set then quantization is determined by the driver */ - struct { - /* \brief disable trellis for all frames/fields */ - uint32_t disable_trellis : 1; - /* \brief enable trellis for I frames/fields */ - uint32_t enable_trellis_I : 1; - /* \brief enable trellis for P frames/fields */ - uint32_t enable_trellis_P : 1; - /* \brief enable trellis for B frames/fields */ - uint32_t enable_trellis_B : 1; - uint32_t reserved : 28; - } bits; - uint32_t value; - } quantization_flags; - uint32_t va_reserved; -} VAEncMiscParameterQuantization; - -/** - * \brief Encoding skip frame. - * - * The application may choose to skip frames externally to the encoder (e.g. drop completely or - * code as all skip's). For rate control purposes the encoder will need to know the size and number - * of skipped frames. Skip frame(s) indicated through this structure is applicable only to the - * current frame. It is allowed for the application to still send in packed headers for the driver to - * pack, although no frame will be encoded (e.g. for HW to encrypt the frame). - */ -typedef struct _VAEncMiscParameterSkipFrame { - /** \brief Indicates skip frames as below. - * 0: Encode as normal, no skip. - * 1: One or more frames were skipped prior to the current frame, encode the current frame as normal. - * 2: The current frame is to be skipped, do not encode it but pack/encrypt the packed header contents - * (all except VAEncPackedHeaderSlice) which could contain actual frame contents (e.g. pack the frame - * in VAEncPackedHeaderPicture). */ - uint8_t skip_frame_flag; - /** \brief The number of frames skipped prior to the current frame. Valid when skip_frame_flag = 1. */ - uint8_t num_skip_frames; - /** \brief When skip_frame_flag = 1, the size of the skipped frames in bits. When skip_frame_flag = 2, - * the size of the current skipped frame that is to be packed/encrypted in bits. */ - uint32_t size_skip_frames; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterSkipFrame; - -/** - * \brief Encoding region-of-interest (ROI). - * - * The encoding ROI can be set through VAEncMiscParameterBufferROI, if the implementation - * supports ROI input. The ROI set through this structure is applicable only to the - * current frame or field, so must be sent every frame or field to be applied. The number of - * supported ROIs can be queried through the VAConfigAttribEncROI. The encoder will use the - * ROI information to adjust the QP values of the MB's that fall within the ROIs. - */ -typedef struct _VAEncROI { - /** \brief Defines the ROI boundary in pixels, the driver will map it to appropriate - * codec coding units. It is relative to frame coordinates for the frame case and - * to field coordinates for the field case. */ - VARectangle roi_rectangle; - /** - * \brief ROI value - * - * \ref roi_value specifies ROI delta QP or ROI priority. - * -- ROI delta QP is the value that will be added on top of the frame level QP. - * -- ROI priority specifies the priority of a region, it can be positive (more important) - * or negative (less important) values and is compared with non-ROI region (taken as value 0), - * E.g. ROI region with \ref roi_value -3 is less important than the non-ROI region (\ref roi_value - * implied to be 0) which is less important than ROI region with roi_value +2. For overlapping - * regions, the roi_value that is first in the ROI array will have priority. - * - * \ref roi_value always specifes ROI delta QP when VAConfigAttribRateControl == VA_RC_CQP, no matter - * the value of \c roi_value_is_qp_delta in #VAEncMiscParameterBufferROI. - * - * \ref roi_value depends on \c roi_value_is_qp_delta in #VAEncMiscParameterBufferROI when - * VAConfigAttribRateControl != VA_RC_CQP. \ref roi_value specifies ROI_delta QP if \c roi_value_is_qp_delta - * in VAEncMiscParameterBufferROI is 1, otherwise \ref roi_value specifies ROI priority. - */ - int8_t roi_value; -} VAEncROI; - -typedef struct _VAEncMiscParameterBufferROI { - /** \brief Number of ROIs being sent.*/ - uint32_t num_roi; - - /** \brief Valid when VAConfigAttribRateControl != VA_RC_CQP, then the encoder's - * rate control will determine actual delta QPs. Specifies the max/min allowed delta - * QPs. */ - int8_t max_delta_qp; - int8_t min_delta_qp; - - /** \brief Pointer to a VAEncROI array with num_roi elements. It is relative to frame - * coordinates for the frame case and to field coordinates for the field case.*/ - VAEncROI *roi; - union { - struct { - /** - * \brief An indication for roi value. - * - * \ref roi_value_is_qp_delta equal to 1 indicates \c roi_value in #VAEncROI should - * be used as ROI delta QP. \ref roi_value_is_qp_delta equal to 0 indicates \c roi_value - * in #VAEncROI should be used as ROI priority. - * - * \ref roi_value_is_qp_delta is only available when VAConfigAttribRateControl != VA_RC_CQP, - * the setting must comply with \c roi_rc_priority_support and \c roi_rc_qp_delta_support in - * #VAConfigAttribValEncROI. The underlying driver should ignore this field - * when VAConfigAttribRateControl == VA_RC_CQP. - */ - uint32_t roi_value_is_qp_delta : 1; - uint32_t reserved : 31; - } bits; - uint32_t value; - } roi_flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterBufferROI; -/* - * \brief Dirty rectangle data structure for encoding. - * - * The encoding dirty rect can be set through VAEncMiscParameterBufferDirtyRect, if the - * implementation supports dirty rect input. The rect set through this structure is applicable - * only to the current frame or field, so must be sent every frame or field to be applied. - * The number of supported rects can be queried through the VAConfigAttribEncDirtyRect. The - * encoder will use the rect information to know those rectangle areas have changed while the - * areas not covered by dirty rect rectangles are assumed to have not changed compared to the - * previous picture. The encoder may do some internal optimizations. - */ -typedef struct _VAEncMiscParameterBufferDirtyRect { - /** \brief Number of Rectangle being sent.*/ - uint32_t num_roi_rectangle; - - /** \brief Pointer to a VARectangle array with num_roi_rectangle elements.*/ - VARectangle *roi_rectangle; -} VAEncMiscParameterBufferDirtyRect; - -/** \brief Attribute value for VAConfigAttribEncParallelRateControl */ -typedef struct _VAEncMiscParameterParallelRateControl { - /** brief Number of layers*/ - uint32_t num_layers; - /** brief Number of B frames per layer per GOP. - * - * it should be allocated by application, and the is num_layers. - * num_b_in_gop[0] is the number of regular B which refers to only I or P frames. */ - uint32_t *num_b_in_gop; -} VAEncMiscParameterParallelRateControl; - -/** per frame encoder quality controls, once set they will persist for all future frames - *till it is updated again. */ -typedef struct _VAEncMiscParameterEncQuality { - union { - struct { - /** Use raw frames for reference instead of reconstructed frames. - * it only impact motion estimation (ME) stage, and will not impact MC stage - * so the reconstruct picture will can match with decode side */ - uint32_t useRawPicForRef : 1; - /** Disables skip check for ME stage, it will increase the bistream size - * but will improve the qulity */ - uint32_t skipCheckDisable : 1; - /** Indicates app will override default driver FTQ settings using FTQEnable. - * FTQ is forward transform quantization */ - uint32_t FTQOverride : 1; - /** Enables/disables FTQ. */ - uint32_t FTQEnable : 1; - /** Indicates the app will provide the Skip Threshold LUT to use when FTQ is - * enabled (FTQSkipThresholdLUT), else default driver thresholds will be used. */ - uint32_t FTQSkipThresholdLUTInput : 1; - /** Indicates the app will provide the Skip Threshold LUT to use when FTQ is - * disabled (NonFTQSkipThresholdLUT), else default driver thresholds will be used. */ - uint32_t NonFTQSkipThresholdLUTInput : 1; - uint32_t ReservedBit : 1; - /** Control to enable the ME mode decision algorithm to bias to fewer B Direct/Skip types. - * Applies only to B frames, all other frames will ignore this setting. */ - uint32_t directBiasAdjustmentEnable : 1; - /** Enables global motion bias. global motion also is called HME (Heirarchical Motion Estimation ) - * HME is used to handle large motions and avoiding local minima in the video encoding process - * down scaled the input and reference picture, then do ME. the result will be a predictor to next level HME or ME - * current interface divide the HME to 3 level. UltraHME , SuperHME, and HME, result of UltraHME will be input of SurperHME, - * result of superHME will be a input for HME. HME result will be input of ME. it is a switch for HMEMVCostScalingFactor - * can change the HME bias inside RDO stage*/ - uint32_t globalMotionBiasAdjustmentEnable : 1; - /** MV cost scaling ratio for HME ( predictors. It is used when - * globalMotionBiasAdjustmentEnable == 1, else it is ignored. Values are: - * 0: set MV cost to be 0 for HME predictor. - * 1: scale MV cost to be 1/2 of the default value for HME predictor. - * 2: scale MV cost to be 1/4 of the default value for HME predictor. - * 3: scale MV cost to be 1/8 of the default value for HME predictor. */ - uint32_t HMEMVCostScalingFactor : 2; - /**disable HME, if it is disabled. Super*ultraHME should also be disabled */ - uint32_t HMEDisable : 1; - /**disable Super HME, if it is disabled, ultraHME should be disabled */ - uint32_t SuperHMEDisable : 1; - /** disable Ultra HME */ - uint32_t UltraHMEDisable : 1; - /** disable panic mode. Panic mode happened when there are extreme BRC (bit rate control) requirement - * frame size cant achieve the target of BRC. when Panic mode is triggered, Coefficients will - * be set to zero. disable panic mode will improve quality but will impact BRC */ - uint32_t PanicModeDisable : 1; - /** Force RepartitionCheck - * 0: DEFAULT - follow driver default settings. - * 1: FORCE_ENABLE - enable this feature totally for all cases. - * 2: FORCE_DISABLE - disable this feature totally for all cases. */ - uint32_t ForceRepartitionCheck : 2; - - }; - uint32_t encControls; - }; - - /** Maps QP to skip thresholds when FTQ is enabled. Valid range is 0-255. */ - uint8_t FTQSkipThresholdLUT[52]; - /** Maps QP to skip thresholds when FTQ is disabled. Valid range is 0-65535. */ - uint16_t NonFTQSkipThresholdLUT[52]; - - uint32_t reserved[VA_PADDING_HIGH]; // Reserved for future use. - -} VAEncMiscParameterEncQuality; - -/** - * \brief Custom Encoder Rounding Offset Control. - * Application may use this structure to set customized rounding - * offset parameters for quantization. - * Valid when \c VAConfigAttribCustomRoundingControl equals 1. - */ -typedef struct _VAEncMiscParameterCustomRoundingControl { - union { - struct { - /** \brief Enable customized rounding offset for intra blocks. - * If 0, default value would be taken by driver for intra - * rounding offset. - */ - uint32_t enable_custom_rouding_intra : 1 ; - - /** \brief Intra rounding offset - * Ignored if \c enable_custom_rouding_intra equals 0. - */ - uint32_t rounding_offset_intra : 7; - - /** \brief Enable customized rounding offset for inter blocks. - * If 0, default value would be taken by driver for inter - * rounding offset. - */ - uint32_t enable_custom_rounding_inter : 1 ; - - /** \brief Inter rounding offset - * Ignored if \c enable_custom_rouding_inter equals 0. - */ - uint32_t rounding_offset_inter : 7; - - /* Reserved */ - uint32_t reserved : 16; - } bits; - uint32_t value; - } rounding_offset_setting; -} VAEncMiscParameterCustomRoundingControl; - -/** - * There will be cases where the bitstream buffer will not have enough room to hold - * the data for the entire slice, and the following flags will be used in the slice - * parameter to signal to the server for the possible cases. - * If a slice parameter buffer and slice data buffer pair is sent to the server with - * the slice data partially in the slice data buffer (BEGIN and MIDDLE cases below), - * then a slice parameter and data buffer needs to be sent again to complete this slice. - */ -#define VA_SLICE_DATA_FLAG_ALL 0x00 /* whole slice is in the buffer */ -#define VA_SLICE_DATA_FLAG_BEGIN 0x01 /* The beginning of the slice is in the buffer but the end if not */ -#define VA_SLICE_DATA_FLAG_MIDDLE 0x02 /* Neither beginning nor end of the slice is in the buffer */ -#define VA_SLICE_DATA_FLAG_END 0x04 /* end of the slice is in the buffer */ - -/* Codec-independent Slice Parameter Buffer base */ -typedef struct _VASliceParameterBufferBase { - uint32_t slice_data_size; /* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset; /* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX definitions */ -} VASliceParameterBufferBase; - -/********************************** - * JPEG common data structures - **********************************/ -/** - * \brief Huffman table for JPEG decoding. - * - * This structure holds the complete Huffman tables. This is an - * aggregation of all Huffman table (DHT) segments maintained by the - * application. i.e. up to 2 Huffman tables are stored in there for - * baseline profile. - * - * The #load_huffman_table array can be used as a hint to notify the - * VA driver implementation about which table(s) actually changed - * since the last submission of this buffer. - */ -typedef struct _VAHuffmanTableBufferJPEGBaseline { - /** \brief Specifies which #huffman_table is valid. */ - uint8_t load_huffman_table[2]; - /** \brief Huffman tables indexed by table identifier (Th). */ - struct { - /** @name DC table (up to 12 categories) */ - /**@{*/ - /** \brief Number of Huffman codes of length i + 1 (Li). */ - uint8_t num_dc_codes[16]; - /** \brief Value associated with each Huffman code (Vij). */ - uint8_t dc_values[12]; - /**@}*/ - /** @name AC table (2 special codes + up to 16 * 10 codes) */ - /**@{*/ - /** \brief Number of Huffman codes of length i + 1 (Li). */ - uint8_t num_ac_codes[16]; - /** \brief Value associated with each Huffman code (Vij). */ - uint8_t ac_values[162]; - /** \brief Padding to 4-byte boundaries. Must be set to zero. */ - uint8_t pad[2]; - /**@}*/ - } huffman_table[2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAHuffmanTableBufferJPEGBaseline; - -/**************************** - * MPEG-2 data structures - ****************************/ - -/* MPEG-2 Picture Parameter Buffer */ -/* - * For each frame or field, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferMPEG2 { - uint16_t horizontal_size; - uint16_t vertical_size; - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - /* meanings of the following fields are the same as in the standard */ - int32_t picture_coding_type; - int32_t f_code; /* pack all four fcode into this */ - union { - struct { - uint32_t intra_dc_precision : 2; - uint32_t picture_structure : 2; - uint32_t top_field_first : 1; - uint32_t frame_pred_frame_dct : 1; - uint32_t concealment_motion_vectors : 1; - uint32_t q_scale_type : 1; - uint32_t intra_vlc_format : 1; - uint32_t alternate_scan : 1; - uint32_t repeat_first_field : 1; - uint32_t progressive_frame : 1; - uint32_t is_first_field : 1; /* indicate whether the current field - * is the first field for field picture - */ - } bits; - uint32_t value; - } picture_coding_extension; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureParameterBufferMPEG2; - -/** MPEG-2 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferMPEG2 { - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_intra_quantiser_matrix; - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_non_intra_quantiser_matrix; - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_chroma_intra_quantiser_matrix; - /** \brief Same as the MPEG-2 bitstream syntax element. */ - int32_t load_chroma_non_intra_quantiser_matrix; - /** \brief Luminance intra matrix, in zig-zag scan order. */ - uint8_t intra_quantiser_matrix[64]; - /** \brief Luminance non-intra matrix, in zig-zag scan order. */ - uint8_t non_intra_quantiser_matrix[64]; - /** \brief Chroma intra matrix, in zig-zag scan order. */ - uint8_t chroma_intra_quantiser_matrix[64]; - /** \brief Chroma non-intra matrix, in zig-zag scan order. */ - uint8_t chroma_non_intra_quantiser_matrix[64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferMPEG2; - -/** MPEG-2 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferMPEG2 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset;/* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - uint32_t slice_horizontal_position; - uint32_t slice_vertical_position; - int32_t quantiser_scale_code; - int32_t intra_slice_flag; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferMPEG2; - -/** MPEG-2 Macroblock Parameter Buffer */ -typedef struct _VAMacroblockParameterBufferMPEG2 { - uint16_t macroblock_address; - /* - * macroblock_address (in raster scan order) - * top-left: 0 - * bottom-right: picture-height-in-mb*picture-width-in-mb - 1 - */ - uint8_t macroblock_type; /* see definition below */ - union { - struct { - uint32_t frame_motion_type : 2; - uint32_t field_motion_type : 2; - uint32_t dct_type : 1; - } bits; - uint32_t value; - } macroblock_modes; - uint8_t motion_vertical_field_select; - /* - * motion_vertical_field_select: - * see section 6.3.17.2 in the spec - * only the lower 4 bits are used - * bit 0: first vector forward - * bit 1: first vector backward - * bit 2: second vector forward - * bit 3: second vector backward - */ - int16_t PMV[2][2][2]; /* see Table 7-7 in the spec */ - uint16_t coded_block_pattern; - /* - * The bitplanes for coded_block_pattern are described - * in Figure 6.10-12 in the spec - */ - - /* Number of skipped macroblocks after this macroblock */ - uint16_t num_skipped_macroblocks; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAMacroblockParameterBufferMPEG2; - -/* - * OR'd flags for macroblock_type (section 6.3.17.1 in the spec) - */ -#define VA_MB_TYPE_MOTION_FORWARD 0x02 -#define VA_MB_TYPE_MOTION_BACKWARD 0x04 -#define VA_MB_TYPE_MOTION_PATTERN 0x08 -#define VA_MB_TYPE_MOTION_INTRA 0x10 - -/** - * MPEG-2 Residual Data Buffer - * For each macroblock, there wil be 64 shorts (16-bit) in the - * residual data buffer - */ - -/**************************** - * MPEG-4 Part 2 data structures - ****************************/ - -/* MPEG-4 Picture Parameter Buffer */ -/* - * For each frame or field, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferMPEG4 { - uint16_t vop_width; - uint16_t vop_height; - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - union { - struct { - uint32_t short_video_header : 1; - uint32_t chroma_format : 2; - uint32_t interlaced : 1; - uint32_t obmc_disable : 1; - uint32_t sprite_enable : 2; - uint32_t sprite_warping_accuracy : 2; - uint32_t quant_type : 1; - uint32_t quarter_sample : 1; - uint32_t data_partitioned : 1; - uint32_t reversible_vlc : 1; - uint32_t resync_marker_disable : 1; - } bits; - uint32_t value; - } vol_fields; - uint8_t no_of_sprite_warping_points; - int16_t sprite_trajectory_du[3]; - int16_t sprite_trajectory_dv[3]; - uint8_t quant_precision; - union { - struct { - uint32_t vop_coding_type : 2; - uint32_t backward_reference_vop_coding_type : 2; - uint32_t vop_rounding_type : 1; - uint32_t intra_dc_vlc_thr : 3; - uint32_t top_field_first : 1; - uint32_t alternate_vertical_scan_flag : 1; - } bits; - uint32_t value; - } vop_fields; - uint8_t vop_fcode_forward; - uint8_t vop_fcode_backward; - uint16_t vop_time_increment_resolution; - /* short header related */ - uint8_t num_gobs_in_vop; - uint8_t num_macroblocks_in_gob; - /* for direct mode prediction */ - int16_t TRB; - int16_t TRD; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureParameterBufferMPEG4; - -/** MPEG-4 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferMPEG4 { - /** Same as the MPEG-4:2 bitstream syntax element. */ - int32_t load_intra_quant_mat; - /** Same as the MPEG-4:2 bitstream syntax element. */ - int32_t load_non_intra_quant_mat; - /** The matrix for intra blocks, in zig-zag scan order. */ - uint8_t intra_quant_mat[64]; - /** The matrix for non-intra blocks, in zig-zag scan order. */ - uint8_t non_intra_quant_mat[64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferMPEG4; - -/** MPEG-4 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferMPEG4 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset;/* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - uint32_t macroblock_number; - int32_t quant_scale; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferMPEG4; - -/** - VC-1 data structures -*/ - -typedef enum /* see 7.1.1.32 */ -{ - VAMvMode1Mv = 0, - VAMvMode1MvHalfPel = 1, - VAMvMode1MvHalfPelBilinear = 2, - VAMvModeMixedMv = 3, - VAMvModeIntensityCompensation = 4 -} VAMvModeVC1; - -/** VC-1 Picture Parameter Buffer */ -/* - * For each picture, and before any slice data, a picture parameter - * buffer must be send. Multiple picture parameter buffers may be - * sent for a single picture. In that case picture parameters will - * apply to all slice data that follow it until a new picture - * parameter buffer is sent. - * - * Notes: - * pic_quantizer_type should be set to the applicable quantizer - * type as defined by QUANTIZER (J.1.19) and either - * PQUANTIZER (7.1.1.8) or PQINDEX (7.1.1.6) - */ -typedef struct _VAPictureParameterBufferVC1 { - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - /* if out-of-loop post-processing is done on the render - target, then we need to keep the in-loop decoded - picture as a reference picture */ - VASurfaceID inloop_decoded_picture; - - /* sequence layer for AP or meta data for SP and MP */ - union { - struct { - uint32_t pulldown : 1; /* SEQUENCE_LAYER::PULLDOWN */ - uint32_t interlace : 1; /* SEQUENCE_LAYER::INTERLACE */ - uint32_t tfcntrflag : 1; /* SEQUENCE_LAYER::TFCNTRFLAG */ - uint32_t finterpflag : 1; /* SEQUENCE_LAYER::FINTERPFLAG */ - uint32_t psf : 1; /* SEQUENCE_LAYER::PSF */ - uint32_t multires : 1; /* METADATA::MULTIRES */ - uint32_t overlap : 1; /* METADATA::OVERLAP */ - uint32_t syncmarker : 1; /* METADATA::SYNCMARKER */ - uint32_t rangered : 1; /* METADATA::RANGERED */ - uint32_t max_b_frames : 3; /* METADATA::MAXBFRAMES */ - uint32_t profile : 2; /* SEQUENCE_LAYER::PROFILE or The MSB of METADATA::PROFILE */ - } bits; - uint32_t value; - } sequence_fields; - - uint16_t coded_width; /* ENTRY_POINT_LAYER::CODED_WIDTH */ - uint16_t coded_height; /* ENTRY_POINT_LAYER::CODED_HEIGHT */ - union { - struct { - uint32_t broken_link : 1; /* ENTRY_POINT_LAYER::BROKEN_LINK */ - uint32_t closed_entry : 1; /* ENTRY_POINT_LAYER::CLOSED_ENTRY */ - uint32_t panscan_flag : 1; /* ENTRY_POINT_LAYER::PANSCAN_FLAG */ - uint32_t loopfilter : 1; /* ENTRY_POINT_LAYER::LOOPFILTER */ - } bits; - uint32_t value; - } entrypoint_fields; - uint8_t conditional_overlap_flag; /* ENTRY_POINT_LAYER::CONDOVER */ - uint8_t fast_uvmc_flag; /* ENTRY_POINT_LAYER::FASTUVMC */ - union { - struct { - uint32_t luma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPY_FLAG */ - uint32_t luma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPY */ - uint32_t chroma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPUV_FLAG */ - uint32_t chroma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPUV */ - } bits; - uint32_t value; - } range_mapping_fields; - - uint8_t b_picture_fraction; /* Index for PICTURE_LAYER::BFRACTION value in Table 40 (7.1.1.14) */ - uint8_t cbp_table; /* PICTURE_LAYER::CBPTAB/ICBPTAB */ - uint8_t mb_mode_table; /* PICTURE_LAYER::MBMODETAB */ - uint8_t range_reduction_frame;/* PICTURE_LAYER::RANGEREDFRM */ - uint8_t rounding_control; /* PICTURE_LAYER::RNDCTRL */ - uint8_t post_processing; /* PICTURE_LAYER::POSTPROC */ - uint8_t picture_resolution_index; /* PICTURE_LAYER::RESPIC */ - uint8_t luma_scale; /* PICTURE_LAYER::LUMSCALE */ - uint8_t luma_shift; /* PICTURE_LAYER::LUMSHIFT */ - - union { - struct { - uint32_t picture_type : 3; /* PICTURE_LAYER::PTYPE */ - uint32_t frame_coding_mode : 3; /* PICTURE_LAYER::FCM */ - uint32_t top_field_first : 1; /* PICTURE_LAYER::TFF */ - uint32_t is_first_field : 1; /* set to 1 if it is the first field */ - uint32_t intensity_compensation : 1; /* PICTURE_LAYER::INTCOMP */ - } bits; - uint32_t value; - } picture_fields; - union { - struct { - uint32_t mv_type_mb : 1; /* PICTURE::MVTYPEMB */ - uint32_t direct_mb : 1; /* PICTURE::DIRECTMB */ - uint32_t skip_mb : 1; /* PICTURE::SKIPMB */ - uint32_t field_tx : 1; /* PICTURE::FIELDTX */ - uint32_t forward_mb : 1; /* PICTURE::FORWARDMB */ - uint32_t ac_pred : 1; /* PICTURE::ACPRED */ - uint32_t overflags : 1; /* PICTURE::OVERFLAGS */ - } flags; - uint32_t value; - } raw_coding; - union { - struct { - uint32_t bp_mv_type_mb : 1; /* PICTURE::MVTYPEMB */ - uint32_t bp_direct_mb : 1; /* PICTURE::DIRECTMB */ - uint32_t bp_skip_mb : 1; /* PICTURE::SKIPMB */ - uint32_t bp_field_tx : 1; /* PICTURE::FIELDTX */ - uint32_t bp_forward_mb : 1; /* PICTURE::FORWARDMB */ - uint32_t bp_ac_pred : 1; /* PICTURE::ACPRED */ - uint32_t bp_overflags : 1; /* PICTURE::OVERFLAGS */ - } flags; - uint32_t value; - } bitplane_present; /* signal what bitplane is being passed via the bitplane buffer */ - union { - struct { - uint32_t reference_distance_flag : 1;/* PICTURE_LAYER::REFDIST_FLAG */ - uint32_t reference_distance : 5;/* PICTURE_LAYER::REFDIST */ - uint32_t num_reference_pictures: 1;/* PICTURE_LAYER::NUMREF */ - uint32_t reference_field_pic_indicator : 1;/* PICTURE_LAYER::REFFIELD */ - } bits; - uint32_t value; - } reference_fields; - union { - struct { - uint32_t mv_mode : 3; /* PICTURE_LAYER::MVMODE */ - uint32_t mv_mode2 : 3; /* PICTURE_LAYER::MVMODE2 */ - uint32_t mv_table : 3; /* PICTURE_LAYER::MVTAB/IMVTAB */ - uint32_t two_mv_block_pattern_table: 2; /* PICTURE_LAYER::2MVBPTAB */ - uint32_t four_mv_switch : 1; /* PICTURE_LAYER::4MVSWITCH */ - uint32_t four_mv_block_pattern_table : 2; /* PICTURE_LAYER::4MVBPTAB */ - uint32_t extended_mv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_MV */ - uint32_t extended_mv_range : 2; /* PICTURE_LAYER::MVRANGE */ - uint32_t extended_dmv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_DMV */ - uint32_t extended_dmv_range : 2; /* PICTURE_LAYER::DMVRANGE */ - } bits; - uint32_t value; - } mv_fields; - union { - struct { - uint32_t dquant : 2; /* ENTRY_POINT_LAYER::DQUANT */ - uint32_t quantizer : 2; /* ENTRY_POINT_LAYER::QUANTIZER */ - uint32_t half_qp : 1; /* PICTURE_LAYER::HALFQP */ - uint32_t pic_quantizer_scale : 5;/* PICTURE_LAYER::PQUANT */ - uint32_t pic_quantizer_type : 1;/* PICTURE_LAYER::PQUANTIZER */ - uint32_t dq_frame : 1; /* VOPDQUANT::DQUANTFRM */ - uint32_t dq_profile : 2; /* VOPDQUANT::DQPROFILE */ - uint32_t dq_sb_edge : 2; /* VOPDQUANT::DQSBEDGE */ - uint32_t dq_db_edge : 2; /* VOPDQUANT::DQDBEDGE */ - uint32_t dq_binary_level : 1; /* VOPDQUANT::DQBILEVEL */ - uint32_t alt_pic_quantizer : 5;/* VOPDQUANT::ALTPQUANT */ - } bits; - uint32_t value; - } pic_quantizer_fields; - union { - struct { - uint32_t variable_sized_transform_flag : 1;/* ENTRY_POINT_LAYER::VSTRANSFORM */ - uint32_t mb_level_transform_type_flag : 1;/* PICTURE_LAYER::TTMBF */ - uint32_t frame_level_transform_type : 2;/* PICTURE_LAYER::TTFRM */ - uint32_t transform_ac_codingset_idx1 : 2;/* PICTURE_LAYER::TRANSACFRM */ - uint32_t transform_ac_codingset_idx2 : 2;/* PICTURE_LAYER::TRANSACFRM2 */ - uint32_t intra_transform_dc_table : 1;/* PICTURE_LAYER::TRANSDCTAB */ - } bits; - uint32_t value; - } transform_fields; - - uint8_t luma_scale2; /* PICTURE_LAYER::LUMSCALE2 */ - uint8_t luma_shift2; /* PICTURE_LAYER::LUMSHIFT2 */ - uint8_t intensity_compensation_field; /* Index for PICTURE_LAYER::INTCOMPFIELD value in Table 109 (9.1.1.48) */ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 1]; -} VAPictureParameterBufferVC1; - -/** VC-1 Bitplane Buffer -There will be at most three bitplanes coded in any picture header. To send -the bitplane data more efficiently, each byte is divided in two nibbles, with -each nibble carrying three bitplanes for one macroblock. The following table -shows the bitplane data arrangement within each nibble based on the picture -type. - -Picture Type Bit3 Bit2 Bit1 Bit0 -I or BI OVERFLAGS ACPRED FIELDTX -P MYTYPEMB SKIPMB DIRECTMB -B FORWARDMB SKIPMB DIRECTMB - -Within each byte, the lower nibble is for the first MB and the upper nibble is -for the second MB. E.g. the lower nibble of the first byte in the bitplane -buffer is for Macroblock #1 and the upper nibble of the first byte is for -Macroblock #2 in the first row. -*/ - -/* VC-1 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferVC1 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - uint32_t slice_data_offset;/* the offset to the first byte of slice data */ - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - uint32_t macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - uint32_t slice_vertical_position; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferVC1; - -/* VC-1 Slice Data Buffer */ -/* -This is simplely a buffer containing raw bit-stream bytes -*/ - -/**************************** - * H.264/AVC data structures - ****************************/ - -typedef struct _VAPictureH264 { - VASurfaceID picture_id; - uint32_t frame_idx; - uint32_t flags; - int32_t TopFieldOrderCnt; - int32_t BottomFieldOrderCnt; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureH264; -/* flags in VAPictureH264 could be OR of the following */ -#define VA_PICTURE_H264_INVALID 0x00000001 -#define VA_PICTURE_H264_TOP_FIELD 0x00000002 -#define VA_PICTURE_H264_BOTTOM_FIELD 0x00000004 -#define VA_PICTURE_H264_SHORT_TERM_REFERENCE 0x00000008 -#define VA_PICTURE_H264_LONG_TERM_REFERENCE 0x00000010 - -/** H.264 Picture Parameter Buffer */ -/* - * For each picture, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferH264 { - VAPictureH264 CurrPic; - VAPictureH264 ReferenceFrames[16]; /* in DPB */ - uint16_t picture_width_in_mbs_minus1; - uint16_t picture_height_in_mbs_minus1; - uint8_t bit_depth_luma_minus8; - uint8_t bit_depth_chroma_minus8; - uint8_t num_ref_frames; - union { - struct { - uint32_t chroma_format_idc : 2; - uint32_t residual_colour_transform_flag : 1; /* Renamed to separate_colour_plane_flag in newer standard versions. */ - uint32_t gaps_in_frame_num_value_allowed_flag : 1; - uint32_t frame_mbs_only_flag : 1; - uint32_t mb_adaptive_frame_field_flag : 1; - uint32_t direct_8x8_inference_flag : 1; - uint32_t MinLumaBiPredSize8x8 : 1; /* see A.3.3.2 */ - uint32_t log2_max_frame_num_minus4 : 4; - uint32_t pic_order_cnt_type : 2; - uint32_t log2_max_pic_order_cnt_lsb_minus4 : 4; - uint32_t delta_pic_order_always_zero_flag : 1; - } bits; - uint32_t value; - } seq_fields; - // FMO is not supported. - va_deprecated uint8_t num_slice_groups_minus1; - va_deprecated uint8_t slice_group_map_type; - va_deprecated uint16_t slice_group_change_rate_minus1; - int8_t pic_init_qp_minus26; - int8_t pic_init_qs_minus26; - int8_t chroma_qp_index_offset; - int8_t second_chroma_qp_index_offset; - union { - struct { - uint32_t entropy_coding_mode_flag : 1; - uint32_t weighted_pred_flag : 1; - uint32_t weighted_bipred_idc : 2; - uint32_t transform_8x8_mode_flag : 1; - uint32_t field_pic_flag : 1; - uint32_t constrained_intra_pred_flag : 1; - uint32_t pic_order_present_flag : 1; /* Renamed to bottom_field_pic_order_in_frame_present_flag in newer standard versions. */ - uint32_t deblocking_filter_control_present_flag : 1; - uint32_t redundant_pic_cnt_present_flag : 1; - uint32_t reference_pic_flag : 1; /* nal_ref_idc != 0 */ - } bits; - uint32_t value; - } pic_fields; - uint16_t frame_num; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAPictureParameterBufferH264; - -/** H.264 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferH264 { - /** \brief 4x4 scaling list, in raster scan order. */ - uint8_t ScalingList4x4[6][16]; - /** \brief 8x8 scaling list, in raster scan order. */ - uint8_t ScalingList8x8[2][64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferH264; - -/** H.264 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferH264 { - uint32_t slice_data_size;/* number of bytes in the slice data buffer for this slice */ - /** \brief Byte offset to the NAL Header Unit for this slice. */ - uint32_t slice_data_offset; - uint32_t slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - /** - * \brief Bit offset from NAL Header Unit to the begining of slice_data(). - * - * This bit offset is relative to and includes the NAL unit byte - * and represents the number of bits parsed in the slice_header() - * after the removal of any emulation prevention bytes in - * there. However, the slice data buffer passed to the hardware is - * the original bitstream, thus including any emulation prevention - * bytes. - */ - uint16_t slice_data_bit_offset; - uint16_t first_mb_in_slice; - uint8_t slice_type; - uint8_t direct_spatial_mv_pred_flag; - /** - * H264/AVC syntax element - * - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l0_default_active_minus1. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** - * H264/AVC syntax element - * - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l1_default_active_minus1. - */ - uint8_t num_ref_idx_l1_active_minus1; - uint8_t cabac_init_idc; - int8_t slice_qp_delta; - uint8_t disable_deblocking_filter_idc; - int8_t slice_alpha_c0_offset_div2; - int8_t slice_beta_offset_div2; - VAPictureH264 RefPicList0[32]; /* See 8.2.4.2 */ - VAPictureH264 RefPicList1[32]; /* See 8.2.4.2 */ - uint8_t luma_log2_weight_denom; - uint8_t chroma_log2_weight_denom; - uint8_t luma_weight_l0_flag; - int16_t luma_weight_l0[32]; - int16_t luma_offset_l0[32]; - uint8_t chroma_weight_l0_flag; - int16_t chroma_weight_l0[32][2]; - int16_t chroma_offset_l0[32][2]; - uint8_t luma_weight_l1_flag; - int16_t luma_weight_l1[32]; - int16_t luma_offset_l1[32]; - uint8_t chroma_weight_l1_flag; - int16_t chroma_weight_l1[32][2]; - int16_t chroma_offset_l1[32][2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferH264; - -/**************************** - * Common encode data structures - ****************************/ -typedef enum { - VAEncPictureTypeIntra = 0, - VAEncPictureTypePredictive = 1, - VAEncPictureTypeBidirectional = 2, -} VAEncPictureType; - -/** - * \brief Encode Slice Parameter Buffer. - * - * @deprecated - * This is a deprecated encode slice parameter buffer, All applications - * \c can use VAEncSliceParameterBufferXXX (XXX = MPEG2, HEVC, H264, JPEG) - */ -typedef struct _VAEncSliceParameterBuffer { - uint32_t start_row_number; /* starting MB row number for this slice */ - uint32_t slice_height; /* slice height measured in MB */ - union { - struct { - uint32_t is_intra : 1; - uint32_t disable_deblocking_filter_idc : 2; - uint32_t uses_long_term_ref : 1; - uint32_t is_long_term_ref : 1; - } bits; - uint32_t value; - } slice_flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSliceParameterBuffer; - - -/**************************** - * H.263 specific encode data structures - ****************************/ - -typedef struct _VAEncSequenceParameterBufferH263 { - uint32_t intra_period; - uint32_t bits_per_second; - uint32_t frame_rate; - uint32_t initial_qp; - uint32_t min_qp; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferH263; - -typedef struct _VAEncPictureParameterBufferH263 { - VASurfaceID reference_picture; - VASurfaceID reconstructed_picture; - VABufferID coded_buf; - uint16_t picture_width; - uint16_t picture_height; - VAEncPictureType picture_type; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferH263; - -/**************************** - * MPEG-4 specific encode data structures - ****************************/ - -typedef struct _VAEncSequenceParameterBufferMPEG4 { - uint8_t profile_and_level_indication; - uint32_t intra_period; - uint32_t video_object_layer_width; - uint32_t video_object_layer_height; - uint32_t vop_time_increment_resolution; - uint32_t fixed_vop_rate; - uint32_t fixed_vop_time_increment; - uint32_t bits_per_second; - uint32_t frame_rate; - uint32_t initial_qp; - uint32_t min_qp; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferMPEG4; - -typedef struct _VAEncPictureParameterBufferMPEG4 { - VASurfaceID reference_picture; - VASurfaceID reconstructed_picture; - VABufferID coded_buf; - uint16_t picture_width; - uint16_t picture_height; - uint32_t modulo_time_base; /* number of 1s */ - uint32_t vop_time_increment; - VAEncPictureType picture_type; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferMPEG4; - - - -/** Buffer functions */ - -/** - * Creates a buffer for "num_elements" elements of "size" bytes and - * initalize with "data". - * if "data" is null, then the contents of the buffer data store - * are undefined. - * Basically there are two ways to get buffer data to the server side. One is - * to call vaCreateBuffer() with a non-null "data", which results the data being - * copied to the data store on the server side. A different method that - * eliminates this copy is to pass null as "data" when calling vaCreateBuffer(), - * and then use vaMapBuffer() to map the data store from the server side to the - * client address space for access. - * The user must call vaDestroyBuffer() to destroy a buffer. - * Note: image buffers are created by the library, not the client. Please see - * vaCreateImage on how image buffers are managed. - */ -VAStatus vaCreateBuffer( - VADisplay dpy, - VAContextID context, - VABufferType type, /* in */ - unsigned int size, /* in */ - unsigned int num_elements, /* in */ - void *data, /* in */ - VABufferID *buf_id /* out */ -); - -/** - * Create a buffer for given width & height get unit_size, pitch, buf_id for 2D buffer - * for permb qp buffer, it will return unit_size for one MB or LCU and the pitch for alignments - * can call vaMapBuffer with this Buffer ID to get virtual address. - * e.g. AVC 1080P encode, 1920x1088, the size in MB is 120x68,but inside driver, - * maybe it should align with 256, and one byte present one Qp.so, call the function. - * then get unit_size = 1, pitch = 256. call vaMapBuffer to get the virtual address (pBuf). - * then read write the memory like 2D. the size is 256x68, application can only use 120x68 - * pBuf + 256 is the start of next line. - * different driver implementation maybe return different unit_size and pitch - */ -VAStatus vaCreateBuffer2( - VADisplay dpy, - VAContextID context, - VABufferType type, - unsigned int width, - unsigned int height, - unsigned int *unit_size, - unsigned int *pitch, - VABufferID *buf_id -); - -/** - * Convey to the server how many valid elements are in the buffer. - * e.g. if multiple slice parameters are being held in a single buffer, - * this will communicate to the server the number of slice parameters - * that are valid in the buffer. - */ -VAStatus vaBufferSetNumElements( - VADisplay dpy, - VABufferID buf_id, /* in */ - unsigned int num_elements /* in */ -); - - -/** - * device independent data structure for codedbuffer - */ - -/* - * FICTURE_AVE_QP(bit7-0): The average Qp value used during this frame - * LARGE_SLICE(bit8):At least one slice in the current frame was large - * enough for the encoder to attempt to limit its size. - * SLICE_OVERFLOW(bit9): At least one slice in the current frame has - * exceeded the maximum slice size specified. - * BITRATE_OVERFLOW(bit10): The peak bitrate was exceeded for this frame. - * BITRATE_HIGH(bit11): The frame size got within the safety margin of the maximum size (VCM only) - * AIR_MB_OVER_THRESHOLD: the number of MBs adapted to Intra MB - */ -#define VA_CODED_BUF_STATUS_PICTURE_AVE_QP_MASK 0xff -#define VA_CODED_BUF_STATUS_LARGE_SLICE_MASK 0x100 -#define VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK 0x200 -#define VA_CODED_BUF_STATUS_BITRATE_OVERFLOW 0x400 -#define VA_CODED_BUF_STATUS_BITRATE_HIGH 0x800 -/** - * \brief The frame has exceeded the maximum requested size. - * - * This flag indicates that the encoded frame size exceeds the value - * specified through a misc parameter buffer of type - * #VAEncMiscParameterTypeMaxFrameSize. - */ -#define VA_CODED_BUF_STATUS_FRAME_SIZE_OVERFLOW 0x1000 -/** - * \brief the bitstream is bad or corrupt. - */ -#define VA_CODED_BUF_STATUS_BAD_BITSTREAM 0x8000 -#define VA_CODED_BUF_STATUS_AIR_MB_OVER_THRESHOLD 0xff0000 - -/** - * \brief The coded buffer segment status contains frame encoding passes number - * - * This is the mask to get the number of encoding passes from the coded - * buffer segment status. - * NUMBER_PASS(bit24~bit27): the number for encoding passes executed for the coded frame. - * - */ -#define VA_CODED_BUF_STATUS_NUMBER_PASSES_MASK 0xf000000 - -/** - * \brief The coded buffer segment contains a single NAL unit. - * - * This flag indicates that the coded buffer segment contains a - * single NAL unit. This flag might be useful to the user for - * processing the coded buffer. - */ -#define VA_CODED_BUF_STATUS_SINGLE_NALU 0x10000000 - -/** - * \brief Coded buffer segment. - * - * #VACodedBufferSegment is an element of a linked list describing - * some information on the coded buffer. The coded buffer segment - * could contain either a single NAL unit, or more than one NAL unit. - * It is recommended (but not required) to return a single NAL unit - * in a coded buffer segment, and the implementation should set the - * VA_CODED_BUF_STATUS_SINGLE_NALU status flag if that is the case. - */ -typedef struct _VACodedBufferSegment { - /** - * \brief Size of the data buffer in this segment (in bytes). - */ - uint32_t size; - /** \brief Bit offset into the data buffer where the video data starts. */ - uint32_t bit_offset; - /** \brief Status set by the driver. See \c VA_CODED_BUF_STATUS_*. */ - uint32_t status; - /** \brief Reserved for future use. */ - uint32_t reserved; - /** \brief Pointer to the start of the data buffer. */ - void *buf; - /** - * \brief Pointer to the next #VACodedBufferSegment element, - * or \c NULL if there is none. - */ - void *next; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VACodedBufferSegment; - -/** - * Map data store of the buffer into the client's address space - * vaCreateBuffer() needs to be called with "data" set to NULL before - * calling vaMapBuffer() - * - * if buffer type is VAEncCodedBufferType, pbuf points to link-list of - * VACodedBufferSegment, and the list is terminated if "next" is NULL - */ -VAStatus vaMapBuffer( - VADisplay dpy, - VABufferID buf_id, /* in */ - void **pbuf /* out */ -); - -/** - * After client making changes to a mapped data store, it needs to - * "Unmap" it to let the server know that the data is ready to be - * consumed by the server - */ -VAStatus vaUnmapBuffer( - VADisplay dpy, - VABufferID buf_id /* in */ -); - -/** - * After this call, the buffer is deleted and this buffer_id is no longer valid - * - * A buffer can be re-used and sent to the server by another Begin/Render/End - * sequence if vaDestroyBuffer() is not called with this buffer. - * - * Note re-using a shared buffer (e.g. a slice data buffer) between the host and the - * hardware accelerator can result in performance dropping. - */ -VAStatus vaDestroyBuffer( - VADisplay dpy, - VABufferID buffer_id -); - -/** \brief VA buffer information */ -typedef struct { - /** \brief Buffer handle */ - uintptr_t handle; - /** \brief Buffer type (See \ref VABufferType). */ - uint32_t type; - /** - * \brief Buffer memory type (See \ref VASurfaceAttribMemoryType). - * - * On input to vaAcquireBufferHandle(), this field can serve as a hint - * to specify the set of memory types the caller is interested in. - * On successful return from vaAcquireBufferHandle(), the field is - * updated with the best matching memory type. - */ - uint32_t mem_type; - /** \brief Size of the underlying buffer. */ - size_t mem_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VABufferInfo; - -/** - * \brief Acquires buffer handle for external API usage - * - * Locks the VA buffer object \ref buf_id for external API usage like - * EGL or OpenCL (OCL). This function is a synchronization point. This - * means that any pending operation is guaranteed to be completed - * prior to returning from the function. - * - * If the referenced VA buffer object is the backing store of a VA - * surface, then this function acts as if vaSyncSurface() on the - * parent surface was called first. - * - * The \ref VABufferInfo argument shall be zero'ed on input. On - * successful output, the data structure is filled in with all the - * necessary buffer level implementation details like handle, type, - * memory type and memory size. - * - * Note: the external API implementation, or the application, can - * express the memory types it is interested in by filling in the \ref - * mem_type field accordingly. On successful output, the memory type - * that fits best the request and that was used is updated in the \ref - * VABufferInfo data structure. If none of the supplied memory types - * is supported, then a \ref VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE - * error is returned. - * - * The \ref VABufferInfo data is valid until vaReleaseBufferHandle() - * is called. Besides, no additional operation is allowed on any of - * the buffer parent object until vaReleaseBufferHandle() is called. - * e.g. decoding into a VA surface backed with the supplied VA buffer - * object \ref buf_id would fail with a \ref VA_STATUS_ERROR_SURFACE_BUSY - * error. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied - * - \ref VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation - * does not support exporting buffers of the specified type - * - \ref VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE: none of the requested - * memory types in \ref VABufferInfo.mem_type was supported - * - * @param[in] dpy the VA display - * @param[in] buf_id the VA buffer - * @param[in,out] buf_info the associated VA buffer information - * @return VA_STATUS_SUCCESS if successful - */ -VAStatus -vaAcquireBufferHandle(VADisplay dpy, VABufferID buf_id, VABufferInfo *buf_info); - -/** - * \brief Releases buffer after usage from external API - * - * Unlocks the VA buffer object \ref buf_id from external API usage like - * EGL or OpenCL (OCL). This function is a synchronization point. This - * means that any pending operation is guaranteed to be completed - * prior to returning from the function. - * - * The \ref VABufferInfo argument shall point to the original data - * structure that was obtained from vaAcquireBufferHandle(), unaltered. - * This is necessary so that the VA driver implementation could - * deallocate any resources that were needed. - * - * In any case, returning from this function invalidates any contents - * in \ref VABufferInfo. i.e. the underlyng buffer handle is no longer - * valid. Therefore, VA driver implementations are free to reset this - * data structure to safe defaults. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied - * - \ref VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation - * does not support exporting buffers of the specified type - * - * @param[in] dpy the VA display - * @param[in] buf_id the VA buffer - * @return VA_STATUS_SUCCESS if successful - */ -VAStatus -vaReleaseBufferHandle(VADisplay dpy, VABufferID buf_id); - -/** @name vaExportSurfaceHandle() flags - * - * @{ - */ -/** Export surface to be read by external API. */ -#define VA_EXPORT_SURFACE_READ_ONLY 0x0001 -/** Export surface to be written by external API. */ -#define VA_EXPORT_SURFACE_WRITE_ONLY 0x0002 -/** Export surface to be both read and written by external API. */ -#define VA_EXPORT_SURFACE_READ_WRITE 0x0003 -/** Export surface with separate layers. - * - * For example, NV12 surfaces should be exported as two separate - * planes for luma and chroma. - */ -#define VA_EXPORT_SURFACE_SEPARATE_LAYERS 0x0004 -/** Export surface with composed layers. - * - * For example, NV12 surfaces should be exported as a single NV12 - * composed object. - */ -#define VA_EXPORT_SURFACE_COMPOSED_LAYERS 0x0008 - -/** @} */ - -/** - * \brief Export a handle to a surface for use with an external API - * - * The exported handles are owned by the caller, and the caller is - * responsible for freeing them when no longer needed (e.g. by closing - * DRM PRIME file descriptors). - * - * This does not perform any synchronisation. If the contents of the - * surface will be read, vaSyncSurface() must be called before doing so. - * If the contents of the surface are written, then all operations must - * be completed externally before using the surface again by via VA-API - * functions. - * - * @param[in] dpy VA display. - * @param[in] surface_id Surface to export. - * @param[in] mem_type Memory type to export to. - * @param[in] flags Combination of flags to apply - * (VA_EXPORT_SURFACE_*). - * @param[out] descriptor Pointer to the descriptor structure to fill - * with the handle details. The type of this structure depends on - * the value of mem_type. - * - * @return Status code: - * - VA_STATUS_SUCCESS: Success. - * - VA_STATUS_ERROR_INVALID_DISPLAY: The display is not valid. - * - VA_STATUS_ERROR_UNIMPLEMENTED: The driver does not implement - * this interface. - * - VA_STATUS_ERROR_INVALID_SURFACE: The surface is not valid, or - * the surface is not exportable in the specified way. - * - VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE: The driver does not - * support exporting surfaces to the specified memory type. - */ -VAStatus vaExportSurfaceHandle(VADisplay dpy, - VASurfaceID surface_id, - uint32_t mem_type, uint32_t flags, - void *descriptor); - -/** - * Render (Video Decode/Encode/Processing) Pictures - * - * A picture represents either a frame or a field. - * - * The Begin/Render/End sequence sends the video decode/encode/processing buffers - * to the server - */ - -/** - * Get ready for a video pipeline - * - decode a picture to a target surface - * - encode a picture from a target surface - * - process a picture to a target surface - */ -VAStatus vaBeginPicture( - VADisplay dpy, - VAContextID context, - VASurfaceID render_target -); - -/** - * Send video decode, encode or processing buffers to the server. - */ -VAStatus vaRenderPicture( - VADisplay dpy, - VAContextID context, - VABufferID *buffers, - int num_buffers -); - -/** - * Make the end of rendering for a picture. - * The server should start processing all pending operations for this - * surface. This call is non-blocking. The client can start another - * Begin/Render/End sequence on a different render target. - * if VAContextID used in this function previously successfully passed - * vaMFAddContext call, real processing will be started during vaMFSubmit - */ -VAStatus vaEndPicture( - VADisplay dpy, - VAContextID context -); - -/** - * Make the end of rendering for a pictures in contexts passed with submission. - * The server should start processing all pending operations for contexts. - * All contexts passed should be associated through vaMFAddContext - * and call sequence Begin/Render/End performed. - * This call is non-blocking. The client can start another - * Begin/Render/End/vaMFSubmit sequence on a different render targets. - * Return values: - * VA_STATUS_SUCCESS - operation successful, context was removed. - * VA_STATUS_ERROR_INVALID_CONTEXT - mf_context or one of contexts are invalid - * due to mf_context not created or one of contexts not assotiated with mf_context - * through vaAddContext. - * VA_STATUS_ERROR_INVALID_PARAMETER - one of context has not submitted it's frame - * through vaBeginPicture vaRenderPicture vaEndPicture call sequence. - * dpy: display - * mf_context: Multi-Frame context - * contexts: list of contexts submitting their tasks for multi-frame operation. - * num_contexts: number of passed contexts. - */ -VAStatus vaMFSubmit( - VADisplay dpy, - VAMFContextID mf_context, - VAContextID * contexts, - int num_contexts -); - -/* - -Synchronization - -*/ - -/** - * This function blocks until all pending operations on the render target - * have been completed. Upon return it is safe to use the render target for a - * different picture. - */ -VAStatus vaSyncSurface( - VADisplay dpy, - VASurfaceID render_target -); - -/** \brief Indicates an infinite timeout. */ -#define VA_TIMEOUT_INFINITE 0xFFFFFFFFFFFFFFFF - -/** - * \brief Synchronizes pending operations associated with the supplied surface. - * - * This function blocks during specified timeout (in nanoseconds) until - * all pending operations on the render target have been completed. - * If timeout is zero, the function returns immediately. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_SURFACE: an invalid surface was supplied - * - \ref VA_STATUS_ERROR_TIMEDOUT: synchronization is still in progress, - * client should call the function again to complete synchronization - * - * @param[in] dpy the VA display - * @param[in] surface the surface for which synchronization is performed - * @param[in] timeout_ns the timeout in nanoseconds - * - */ -VAStatus vaSyncSurface2( - VADisplay dpy, - VASurfaceID surface, - uint64_t timeout_ns -); - -typedef enum { - VASurfaceRendering = 1, /* Rendering in progress */ - VASurfaceDisplaying = 2, /* Displaying in progress (not safe to render into it) */ - /* this status is useful if surface is used as the source */ - /* of an overlay */ - VASurfaceReady = 4, /* not being rendered or displayed */ - VASurfaceSkipped = 8 /* Indicate a skipped frame during encode */ -} VASurfaceStatus; - -/** - * Find out any pending ops on the render target - */ -VAStatus vaQuerySurfaceStatus( - VADisplay dpy, - VASurfaceID render_target, - VASurfaceStatus *status /* out */ -); - -typedef enum { - VADecodeSliceMissing = 0, - VADecodeMBError = 1, -} VADecodeErrorType; - -/** - * Client calls vaQuerySurfaceError with VA_STATUS_ERROR_DECODING_ERROR, server side returns - * an array of structure VASurfaceDecodeMBErrors, and the array is terminated by setting status=-1 -*/ -typedef struct _VASurfaceDecodeMBErrors { - int32_t status; /* 1 if hardware has returned detailed info below, -1 means this record is invalid */ - uint32_t start_mb; /* start mb address with errors */ - uint32_t end_mb; /* end mb address with errors */ - VADecodeErrorType decode_error_type; - uint32_t num_mb; /* number of mbs with errors */ - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW - 1]; -} VASurfaceDecodeMBErrors; - -/** - * After the application gets VA_STATUS_ERROR_DECODING_ERROR after calling vaSyncSurface(), - * it can call vaQuerySurfaceError to find out further details on the particular error. - * VA_STATUS_ERROR_DECODING_ERROR should be passed in as "error_status", - * upon the return, error_info will point to an array of _VASurfaceDecodeMBErrors structure, - * which is allocated and filled by libVA with detailed information on the missing or error macroblocks. - * The array is terminated if "status==-1" is detected. - */ -VAStatus vaQuerySurfaceError( - VADisplay dpy, - VASurfaceID surface, - VAStatus error_status, - void **error_info -); - -/** - * \brief Synchronizes pending operations associated with the supplied buffer. - * - * This function blocks during specified timeout (in nanoseconds) until - * all pending operations on the supplied buffer have been completed. - * If timeout is zero, the function returns immediately. - * - * Possible errors: - * - \ref VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation - * does not support this interface - * - \ref VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied - * - \ref VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied - * - \ref VA_STATUS_ERROR_TIMEDOUT: synchronization is still in progress, - * client should call the function again to complete synchronization - * - * @param[in] dpy the VA display - * @param[in] buf_id the buffer for which synchronization is performed - * @param[in] timeout_ns the timeout in nanoseconds - * - */ -VAStatus vaSyncBuffer( - VADisplay dpy, - VABufferID buf_id, - uint64_t timeout_ns -); - -/** - * Notes about synchronization interfaces: - * vaSyncSurface: - * 1. Allows to synchronize output surface (i.e. from decoding or VP) - * 2. Allows to synchronize all bitstreams being encoded from the given input surface (1->N pipelines). - * - * vaSyncSurface2: - * 1. The same as vaSyncSurface but allows to specify a timeout - * - * vaSyncBuffer: - * 1. Allows to synchronize output buffer (e.g. bitstream from encoding). - * Comparing to vaSyncSurface this function synchronizes given bitstream only. - */ - -/** - * Images and Subpictures - * VAImage is used to either get the surface data to client memory, or - * to copy image data in client memory to a surface. - * Both images, subpictures and surfaces follow the same 2D coordinate system where origin - * is at the upper left corner with positive X to the right and positive Y down - */ -#define VA_FOURCC(ch0, ch1, ch2, ch3) \ - ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \ - ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigned char) (ch3) << 24 )) - -/* Pre-defined fourcc codes. */ - -/** NV12: two-plane 8-bit YUV 4:2:0. - * The first plane contains Y, the second plane contains U and V in pairs of bytes. - */ -#define VA_FOURCC_NV12 0x3231564E -/** NV21: two-plane 8-bit YUV 4:2:0. - * Same as NV12, but with U and V swapped. - */ -#define VA_FOURCC_NV21 0x3132564E - -/** AI44: packed 4-bit YA. - * - * The bottom half of each byte contains luma, the top half contains alpha. - */ -#define VA_FOURCC_AI44 0x34344149 - -/** RGBA: packed 8-bit RGBA. - * - * Four bytes per pixel: red, green, blue, alpha. - */ -#define VA_FOURCC_RGBA 0x41424752 -/** RGBX: packed 8-bit RGB. - * - * Four bytes per pixel: red, green, blue, unspecified. - */ -#define VA_FOURCC_RGBX 0x58424752 -/** BGRA: packed 8-bit RGBA. - * - * Four bytes per pixel: blue, green, red, alpha. - */ -#define VA_FOURCC_BGRA 0x41524742 -/** BGRX: packed 8-bit RGB. - * - * Four bytes per pixel: blue, green, red, unspecified. - */ -#define VA_FOURCC_BGRX 0x58524742 -/** ARGB: packed 8-bit RGBA. - * - * Four bytes per pixel: alpha, red, green, blue. - */ -#define VA_FOURCC_ARGB 0x42475241 -/** XRGB: packed 8-bit RGB. - * - * Four bytes per pixel: unspecified, red, green, blue. - */ -#define VA_FOURCC_XRGB 0x42475258 -/** ABGR: packed 8-bit RGBA. - * - * Four bytes per pixel: alpha, blue, green, red. - */ -#define VA_FOURCC_ABGR 0x52474241 -/** XBGR: packed 8-bit RGB. - * - * Four bytes per pixel: unspecified, blue, green, red. - */ -#define VA_FOURCC_XBGR 0x52474258 - -/** UYUV: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: U, Y, U, V. - */ -#define VA_FOURCC_UYVY 0x59565955 -/** YUY2: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: Y, U, Y, V. - */ -#define VA_FOURCC_YUY2 0x32595559 -/** AYUV: packed 8-bit YUVA 4:4:4. - * - * Four bytes per pixel: A, Y, U, V. - */ -#define VA_FOURCC_AYUV 0x56555941 -/** NV11: two-plane 8-bit YUV 4:1:1. - * - * The first plane contains Y, the second plane contains U and V in pairs of bytes. - */ -#define VA_FOURCC_NV11 0x3131564e -/** YV12: three-plane 8-bit YUV 4:2:0. - * - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_YV12 0x32315659 -/** P208: two-plane 8-bit YUV 4:2:2. - * - * The first plane contains Y, the second plane contains U and V in pairs of bytes. - */ -#define VA_FOURCC_P208 0x38303250 -/** I420: three-plane 8-bit YUV 4:2:0. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_I420 0x30323449 -/** YV24: three-plane 8-bit YUV 4:4:4. - * - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_YV24 0x34325659 -/** YV32: four-plane 8-bit YUVA 4:4:4 - * - * The four planes contain Y, V, U and A respectively. - */ -#define VA_FOURCC_YV32 0x32335659 -/** Y800: 8-bit greyscale. - */ -#define VA_FOURCC_Y800 0x30303859 -/** IMC3: three-plane 8-bit YUV 4:2:0. - * - * Equivalent to YV12, but with the additional constraint that the pitch of all three planes - * must be the same. - */ -#define VA_FOURCC_IMC3 0x33434D49 -/** 411P: three-plane 8-bit YUV 4:1:1. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_411P 0x50313134 -/** 411R: three-plane 8-bit YUV. - * - * The subsampling is the transpose of 4:1:1 - full chroma appears on every fourth line. - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_411R 0x52313134 -/** 422H: three-plane 8-bit YUV 4:2:2. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_422H 0x48323234 -/** 422V: three-plane 8-bit YUV 4:4:0. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_422V 0x56323234 -/** 444P: three-plane 8-bit YUV 4:4:4. - * - * The three planes contain Y, U and V respectively. - */ -#define VA_FOURCC_444P 0x50343434 - -/** RGBP: three-plane 8-bit RGB. - * - * The three planes contain red, green and blue respectively. - */ -#define VA_FOURCC_RGBP 0x50424752 -/** BGRP: three-plane 8-bit RGB. - * - * The three planes contain blue, green and red respectively. - */ -#define VA_FOURCC_BGRP 0x50524742 -/** RG16: packed 5/6-bit RGB. - * - * Each pixel is a two-byte little-endian value. - * Red, green and blue are found in bits 15:11, 10:5, 4:0 respectively. - */ -#define VA_FOURCC_RGB565 0x36314752 -/** BG16: packed 5/6-bit RGB. - * - * Each pixel is a two-byte little-endian value. - * Blue, green and red are found in bits 15:11, 10:5, 4:0 respectively. - */ -#define VA_FOURCC_BGR565 0x36314742 - -/** Y210: packed 10-bit YUV 4:2:2. - * - * Eight bytes represent a pair of pixels. Each sample is a two-byte little-endian value, - * with the bottom six bits ignored. The samples are in the order Y, U, Y, V. - */ -#define VA_FOURCC_Y210 0x30313259 -/** Y212: packed 12-bit YUV 4:2:2. - * - * Eight bytes represent a pair of pixels. Each sample is a two-byte little-endian value. - * The samples are in the order Y, U, Y, V. - */ -#define VA_FOURCC_Y212 0x32313259 -/** Y216: packed 16-bit YUV 4:2:2. - * - * Eight bytes represent a pair of pixels. Each sample is a two-byte little-endian value. - * The samples are in the order Y, U, Y, V. - */ -#define VA_FOURCC_Y216 0x36313259 -/** Y410: packed 10-bit YUVA 4:4:4. - * - * Each pixel is a four-byte little-endian value. - * A, V, Y, U are found in bits 31:30, 29:20, 19:10, 9:0 respectively. - */ -#define VA_FOURCC_Y410 0x30313459 -/** Y412 packed 12-bit YUVA 4:4:4. - * - * Each pixel is a set of four samples, each of which is a two-byte little-endian value. - * The samples are in the order A, V, Y, U. - */ -#define VA_FOURCC_Y412 0x32313459 -/** Y416: packed 16-bit YUVA 4:4:4. - * - * Each pixel is a set of four samples, each of which is a two-byte little-endian value. - * The samples are in the order A, V, Y, U. - */ -#define VA_FOURCC_Y416 0x36313459 - -/** YV16: three-plane 8-bit YUV 4:2:2. - * - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_YV16 0x36315659 -/** P010: two-plane 10-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value with the bottom six bits ignored. - * The first plane contains Y, the second plane contains U and V in pairs of samples. - */ -#define VA_FOURCC_P010 0x30313050 -/** P012: two-plane 12-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value with the bottom four bits ignored. - * The first plane contains Y, the second plane contains U and V in pairs of samples. - */ -#define VA_FOURCC_P012 0x32313050 -/** P016: two-plane 16-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value. The first plane contains Y, the second - * plane contains U and V in pairs of samples. - */ -#define VA_FOURCC_P016 0x36313050 - -/** I010: three-plane 10-bit YUV 4:2:0. - * - * Each sample is a two-byte little-endian value with the top six bits ignored. - * The three planes contain Y, V and U respectively. - */ -#define VA_FOURCC_I010 0x30313049 - -/** IYUV: three-plane 8-bit YUV 4:2:0. - * - * @deprecated Use I420 instead. - */ -#define VA_FOURCC_IYUV 0x56555949 -/** - * 10-bit Pixel RGB formats. - */ -#define VA_FOURCC_A2R10G10B10 0x30335241 /* VA_FOURCC('A','R','3','0') */ -/** - * 10-bit Pixel BGR formats. - */ -#define VA_FOURCC_A2B10G10R10 0x30334241 /* VA_FOURCC('A','B','3','0') */ -/** - * 10-bit Pixel RGB formats without alpha. - */ -#define VA_FOURCC_X2R10G10B10 0x30335258 /* VA_FOURCC('X','R','3','0') */ -/** - * 10-bit Pixel BGR formats without alpha. - */ -#define VA_FOURCC_X2B10G10R10 0x30334258 /* VA_FOURCC('X','B','3','0') */ - -/** Y8: 8-bit greyscale. - * - * Only a single sample, 8 bit Y plane for monochrome images - */ -#define VA_FOURCC_Y8 0x20203859 -/** Y16: 16-bit greyscale. - * - * Only a single sample, 16 bit Y plane for monochrome images - */ -#define VA_FOURCC_Y16 0x20363159 -/** VYUV: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: V, Y, U, V. - */ -#define VA_FOURCC_VYUY 0x59555956 -/** YVYU: packed 8-bit YUV 4:2:2. - * - * Four bytes per pair of pixels: Y, V, Y, U. - */ -#define VA_FOURCC_YVYU 0x55595659 -/** AGRB64: three-plane 16-bit ARGB 16:16:16:16 - * - * The four planes contain: alpha, red, green, blue respectively. - */ -#define VA_FOURCC_ARGB64 0x34475241 -/** ABGR64: three-plane 16-bit ABGR 16:16:16:16 - * - * The four planes contain: alpha, blue, green, red respectively. - */ -#define VA_FOURCC_ABGR64 0x34474241 -/** XYUV: packed 8-bit YUVX 4:4:4. - * - * Four bytes per pixel: X, Y, U, V. - */ -#define VA_FOURCC_XYUV 0x56555958 - -/* byte order */ -#define VA_LSB_FIRST 1 -#define VA_MSB_FIRST 2 - -typedef struct _VAImageFormat { - uint32_t fourcc; - uint32_t byte_order; /* VA_LSB_FIRST, VA_MSB_FIRST */ - uint32_t bits_per_pixel; - /* for RGB formats */ - uint32_t depth; /* significant bits per pixel */ - uint32_t red_mask; - uint32_t green_mask; - uint32_t blue_mask; - uint32_t alpha_mask; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAImageFormat; - -typedef VAGenericID VAImageID; - -typedef struct _VAImage { - VAImageID image_id; /* uniquely identify this image */ - VAImageFormat format; - VABufferID buf; /* image data buffer */ - /* - * Image data will be stored in a buffer of type VAImageBufferType to facilitate - * data store on the server side for optimal performance. The buffer will be - * created by the CreateImage function, and proper storage allocated based on the image - * size and format. This buffer is managed by the library implementation, and - * accessed by the client through the buffer Map/Unmap functions. - */ - uint16_t width; - uint16_t height; - uint32_t data_size; - uint32_t num_planes; /* can not be greater than 3 */ - /* - * An array indicating the scanline pitch in bytes for each plane. - * Each plane may have a different pitch. Maximum 3 planes for planar formats - */ - uint32_t pitches[3]; - /* - * An array indicating the byte offset from the beginning of the image data - * to the start of each plane. - */ - uint32_t offsets[3]; - - /* The following fields are only needed for paletted formats */ - int32_t num_palette_entries; /* set to zero for non-palette images */ - /* - * Each component is one byte and entry_bytes indicates the number of components in - * each entry (eg. 3 for YUV palette entries). set to zero for non-palette images - */ - int32_t entry_bytes; - /* - * An array of ascii characters describing the order of the components within the bytes. - * Only entry_bytes characters of the string are used. - */ - int8_t component_order[4]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAImage; - -/** Get maximum number of image formats supported by the implementation */ -int vaMaxNumImageFormats( - VADisplay dpy -); - -/** - * Query supported image formats - * The caller must provide a "format_list" array that can hold at - * least vaMaxNumImageFormats() entries. The actual number of formats - * returned in "format_list" is returned in "num_formats". - */ -VAStatus vaQueryImageFormats( - VADisplay dpy, - VAImageFormat *format_list, /* out */ - int *num_formats /* out */ -); - -/** - * Create a VAImage structure - * The width and height fields returned in the VAImage structure may get - * enlarged for some YUV formats. Upon return from this function, - * image->buf has been created and proper storage allocated by the library. - * The client can access the image through the Map/Unmap calls. - */ -VAStatus vaCreateImage( - VADisplay dpy, - VAImageFormat *format, - int width, - int height, - VAImage *image /* out */ -); - -/** - * Should call DestroyImage before destroying the surface it is bound to - */ -VAStatus vaDestroyImage( - VADisplay dpy, - VAImageID image -); - -VAStatus vaSetImagePalette( - VADisplay dpy, - VAImageID image, - /* - * pointer to an array holding the palette data. The size of the array is - * num_palette_entries * entry_bytes in size. The order of the components - * in the palette is described by the component_order in VAImage struct - */ - unsigned char *palette -); - -/** - * Retrive surface data into a VAImage - * Image must be in a format supported by the implementation - */ -VAStatus vaGetImage( - VADisplay dpy, - VASurfaceID surface, - int x, /* coordinates of the upper left source pixel */ - int y, - unsigned int width, /* width and height of the region */ - unsigned int height, - VAImageID image -); - -/** - * Copy data from a VAImage to a surface - * Image must be in a format supported by the implementation - * Returns a VA_STATUS_ERROR_SURFACE_BUSY if the surface - * shouldn't be rendered into when this is called - */ -VAStatus vaPutImage( - VADisplay dpy, - VASurfaceID surface, - VAImageID image, - int src_x, - int src_y, - unsigned int src_width, - unsigned int src_height, - int dest_x, - int dest_y, - unsigned int dest_width, - unsigned int dest_height -); - -/** - * Derive an VAImage from an existing surface. - * This interface will derive a VAImage and corresponding image buffer from - * an existing VA Surface. The image buffer can then be mapped/unmapped for - * direct CPU access. This operation is only possible on implementations with - * direct rendering capabilities and internal surface formats that can be - * represented with a VAImage. When the operation is not possible this interface - * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back - * to using vaCreateImage + vaPutImage to accomplish the same task in an - * indirect manner. - * - * Implementations should only return success when the resulting image buffer - * would be useable with vaMap/Unmap. - * - * When directly accessing a surface special care must be taken to insure - * proper synchronization with the graphics hardware. Clients should call - * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent - * rendering or currently being displayed by an overlay. - * - * Additionally nothing about the contents of a surface should be assumed - * following a vaPutSurface. Implementations are free to modify the surface for - * scaling or subpicture blending within a call to vaPutImage. - * - * Calls to vaPutImage or vaGetImage using the same surface from which the image - * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or - * vaGetImage with other surfaces is supported. - * - * An image created with vaDeriveImage should be freed with vaDestroyImage. The - * image and image buffer structures will be destroyed; however, the underlying - * surface will remain unchanged until freed with vaDestroySurfaces. - */ -VAStatus vaDeriveImage( - VADisplay dpy, - VASurfaceID surface, - VAImage *image /* out */ -); - -/** - * Subpictures - * Subpicture is a special type of image that can be blended - * with a surface during vaPutSurface(). Subpicture can be used to render - * DVD sub-titles or closed captioning text etc. - */ - -typedef VAGenericID VASubpictureID; - -/** Get maximum number of subpicture formats supported by the implementation */ -int vaMaxNumSubpictureFormats( - VADisplay dpy -); - -/** flags for subpictures */ -#define VA_SUBPICTURE_CHROMA_KEYING 0x0001 -#define VA_SUBPICTURE_GLOBAL_ALPHA 0x0002 -#define VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD 0x0004 -/** - * Query supported subpicture formats - * The caller must provide a "format_list" array that can hold at - * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag - * for each format to indicate additional capabilities for that format. The actual - * number of formats returned in "format_list" is returned in "num_formats". - * flags: returned value to indicate addtional capabilities - * VA_SUBPICTURE_CHROMA_KEYING - supports chroma-keying - * VA_SUBPICTURE_GLOBAL_ALPHA - supports global alpha - * VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD - supports unscaled screen relative subpictures for On Screen Display - */ - -VAStatus vaQuerySubpictureFormats( - VADisplay dpy, - VAImageFormat *format_list, /* out */ - unsigned int *flags, /* out */ - unsigned int *num_formats /* out */ -); - -/** - * Subpictures are created with an image associated. - */ -VAStatus vaCreateSubpicture( - VADisplay dpy, - VAImageID image, - VASubpictureID *subpicture /* out */ -); - -/** - * Destroy the subpicture before destroying the image it is assocated to - */ -VAStatus vaDestroySubpicture( - VADisplay dpy, - VASubpictureID subpicture -); - -/** - * Bind an image to the subpicture. This image will now be associated with - * the subpicture instead of the one at creation. - */ -VAStatus vaSetSubpictureImage( - VADisplay dpy, - VASubpictureID subpicture, - VAImageID image -); - -/** - * If chromakey is enabled, then the area where the source value falls within - * the chromakey [min, max] range is transparent - * The chromakey component format is the following: - * For RGB: [0:7] Red [8:15] Blue [16:23] Green - * For YUV: [0:7] V [8:15] U [16:23] Y - * The chromakey mask can be used to mask out certain components for chromakey - * comparision - */ -VAStatus vaSetSubpictureChromakey( - VADisplay dpy, - VASubpictureID subpicture, - unsigned int chromakey_min, - unsigned int chromakey_max, - unsigned int chromakey_mask -); - -/** - * Global alpha value is between 0 and 1. A value of 1 means fully opaque and - * a value of 0 means fully transparent. If per-pixel alpha is also specified then - * the overall alpha is per-pixel alpha multiplied by the global alpha - */ -VAStatus vaSetSubpictureGlobalAlpha( - VADisplay dpy, - VASubpictureID subpicture, - float global_alpha -); - -/** - * vaAssociateSubpicture associates the subpicture with target_surfaces. - * It defines the region mapping between the subpicture and the target - * surfaces through source and destination rectangles (with the same width and height). - * Both will be displayed at the next call to vaPutSurface. Additional - * associations before the call to vaPutSurface simply overrides the association. - */ -VAStatus vaAssociateSubpicture( - VADisplay dpy, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces, - int16_t src_x, /* upper left offset in subpicture */ - int16_t src_y, - uint16_t src_width, - uint16_t src_height, - int16_t dest_x, /* upper left offset in surface */ - int16_t dest_y, - uint16_t dest_width, - uint16_t dest_height, - /* - * whether to enable chroma-keying, global-alpha, or screen relative mode - * see VA_SUBPICTURE_XXX values - */ - uint32_t flags -); - -/** - * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces. - */ -VAStatus vaDeassociateSubpicture( - VADisplay dpy, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces -); - -/** - * Display attributes - * Display attributes are used to control things such as contrast, hue, saturation, - * brightness etc. in the rendering process. The application can query what - * attributes are supported by the driver, and then set the appropriate attributes - * before calling vaPutSurface() - * - * Display attributes can also be used to query/set platform or display adaptor (vaDisplay) - * related information. These attributes do not depend on vaConfig, and could not be used - * for vaPutSurface. Application can use vaQueryDisplayAttributes/vaGetDisplayAttributes - * at anytime after vaInitialize, but (for settable attributes) vaSetDisplayAttributes should be - * called after vaInitialize and before any other function call. - * - * To distinguish these two types of display attributes, display adaptor related attributes - * should be marked as "HW attribute" in the description. - */ - -/* PowerVR IEP Lite attributes */ -typedef enum { - VADISPLAYATTRIB_BLE_OFF = 0x00, - VADISPLAYATTRIB_BLE_LOW, - VADISPLAYATTRIB_BLE_MEDIUM, - VADISPLAYATTRIB_BLE_HIGH, - VADISPLAYATTRIB_BLE_NONE, -} VADisplayAttribBLEMode; - -/** attribute value for VADisplayAttribRotation */ -#define VA_ROTATION_NONE 0x00000000 -#define VA_ROTATION_90 0x00000001 -#define VA_ROTATION_180 0x00000002 -#define VA_ROTATION_270 0x00000003 -/**@}*/ - -/** - * @name Mirroring directions - * - * Those values could be used for VADisplayAttribMirror attribute or - * VAProcPipelineParameterBuffer::mirror_state. - - */ -/**@{*/ -/** \brief No Mirroring. */ -#define VA_MIRROR_NONE 0x00000000 -/** \brief Horizontal Mirroring. */ -#define VA_MIRROR_HORIZONTAL 0x00000001 -/** \brief Vertical Mirroring. */ -#define VA_MIRROR_VERTICAL 0x00000002 -/**@}*/ - -/** attribute value for VADisplayAttribOutOfLoopDeblock */ -#define VA_OOL_DEBLOCKING_FALSE 0x00000000 -#define VA_OOL_DEBLOCKING_TRUE 0x00000001 - -/** Render mode */ -#define VA_RENDER_MODE_UNDEFINED 0 -#define VA_RENDER_MODE_LOCAL_OVERLAY 1 -#define VA_RENDER_MODE_LOCAL_GPU 2 -#define VA_RENDER_MODE_EXTERNAL_OVERLAY 4 -#define VA_RENDER_MODE_EXTERNAL_GPU 8 - -/** Render device */ -#define VA_RENDER_DEVICE_UNDEFINED 0 -#define VA_RENDER_DEVICE_LOCAL 1 -#define VA_RENDER_DEVICE_EXTERNAL 2 - -/**\brief sub device info - * Sub-device is the concept basing on the "device" behind "vaDisplay". - * If a device could be divided to several sub devices, the task of - * decode/encode/vpp could be assigned on one sub-device. So, application - * could choose the sub device before any other operations. After that, - * all of the task execution/resource allocation will be dispatched to - * the sub device. If application does not choose the sub device, driver - * will assign one as default. - * - * If the value == VA_ATTRIB_NOT_SUPPORTED, it mean that the attribute - * is unsupport or UNKNOWN. - */ - -typedef union _VADisplayAttribValSubDevice { - struct { - /** \brief current sub device index, read - write */ - uint32_t current_sub_device : 4; - /** \brief sub devices count, read - only */ - uint32_t sub_device_count : 4; - /** \brief reserved bits for future, must be zero*/ - uint32_t reserved : 8; - /** \brief bit mask to indicate which sub_device is available, read only - * \code - * VADisplayAttribValSubDevice reg; - * VADisplayAttribute reg_attr; - * reg_attr.type = VADisplayAttribSubDevice; - * vaGetDisplayAttributes(dpy, ®_attr, 1); - * reg.value = reg_attr.value; - * - * for(int i = 0; i < reg.bits.sub_device_count; i ++ ){ - * if((1< -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_H_ */ diff --git a/prebuilts/x86_64/include/va/va_android.h b/prebuilts/x86_64/include/va/va_android.h deleted file mode 100644 index dfed8fd..0000000 --- a/prebuilts/x86_64/include/va/va_android.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef _VA_ANDROID_H_ -#define _VA_ANDROID_H_ - -#include - -/** \brief Android Gralloc buffer memory type. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_ANDROID_GRALLOC 0x00100000 -/** \brief Android ION buffer memory type. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_ANDROID_ION 0x00200000 - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Returns a suitable VADisplay for VA API - */ -VADisplay vaGetDisplay( - void *android_dpy -); - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_ANDROID_H_ */ diff --git a/prebuilts/x86_64/include/va/va_backend.h b/prebuilts/x86_64/include/va/va_backend.h deleted file mode 100644 index 149b6a3..0000000 --- a/prebuilts/x86_64/include/va/va_backend.h +++ /dev/null @@ -1,695 +0,0 @@ -/* - * Copyright (c) 2007 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * Video Decode Acceleration -Backend API - */ - -#ifndef _VA_BACKEND_H_ -#define _VA_BACKEND_H_ - -#include - -typedef struct VADriverContext *VADriverContextP; -typedef struct VADisplayContext *VADisplayContextP; - -/** \brief VA display types. */ -enum { - /** \brief Mask to major identifier for VA display type. */ - VA_DISPLAY_MAJOR_MASK = 0xf0, - - /** \brief VA/X11 API is used, through vaGetDisplay() entry-point. */ - VA_DISPLAY_X11 = 0x10, - /** \brief VA/GLX API is used, through vaGetDisplayGLX() entry-point. */ - VA_DISPLAY_GLX = (VA_DISPLAY_X11 | (1 << 0)), - /** \brief VA/Android API is used, through vaGetDisplay() entry-point. */ - VA_DISPLAY_ANDROID = 0x20, - /** \brief VA/DRM API is used, through vaGetDisplayDRM() entry-point. */ - VA_DISPLAY_DRM = 0x30, - /** \brief VA/DRM API is used, with a render-node device path */ - VA_DISPLAY_DRM_RENDERNODES = (VA_DISPLAY_DRM | (1 << 0)), - /** \brief VA/Wayland API is used, through vaGetDisplayWl() entry-point. */ - VA_DISPLAY_WAYLAND = 0x40, -}; - -struct VADriverVTable { - VAStatus(*vaTerminate)(VADriverContextP ctx); - - VAStatus(*vaQueryConfigProfiles)( - VADriverContextP ctx, - VAProfile *profile_list, /* out */ - int *num_profiles /* out */ - ); - - VAStatus(*vaQueryConfigEntrypoints)( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint *entrypoint_list, /* out */ - int *num_entrypoints /* out */ - ); - - VAStatus(*vaGetConfigAttributes)( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, /* in/out */ - int num_attribs - ); - - VAStatus(*vaCreateConfig)( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, - int num_attribs, - VAConfigID *config_id /* out */ - ); - - VAStatus(*vaDestroyConfig)( - VADriverContextP ctx, - VAConfigID config_id - ); - - VAStatus(*vaQueryConfigAttributes)( - VADriverContextP ctx, - VAConfigID config_id, - VAProfile *profile, /* out */ - VAEntrypoint *entrypoint, /* out */ - VAConfigAttrib *attrib_list, /* out */ - int *num_attribs /* out */ - ); - - VAStatus(*vaCreateSurfaces)( - VADriverContextP ctx, - int width, - int height, - int format, - int num_surfaces, - VASurfaceID *surfaces /* out */ - ); - - VAStatus(*vaDestroySurfaces)( - VADriverContextP ctx, - VASurfaceID *surface_list, - int num_surfaces - ); - - VAStatus(*vaCreateContext)( - VADriverContextP ctx, - VAConfigID config_id, - int picture_width, - int picture_height, - int flag, - VASurfaceID *render_targets, - int num_render_targets, - VAContextID *context /* out */ - ); - - VAStatus(*vaDestroyContext)( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus(*vaCreateBuffer)( - VADriverContextP ctx, - VAContextID context, /* in */ - VABufferType type, /* in */ - unsigned int size, /* in */ - unsigned int num_elements, /* in */ - void *data, /* in */ - VABufferID *buf_id - ); - - VAStatus(*vaBufferSetNumElements)( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - unsigned int num_elements /* in */ - ); - - VAStatus(*vaMapBuffer)( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - void **pbuf /* out */ - ); - - VAStatus(*vaUnmapBuffer)( - VADriverContextP ctx, - VABufferID buf_id /* in */ - ); - - VAStatus(*vaDestroyBuffer)( - VADriverContextP ctx, - VABufferID buffer_id - ); - - VAStatus(*vaBeginPicture)( - VADriverContextP ctx, - VAContextID context, - VASurfaceID render_target - ); - - VAStatus(*vaRenderPicture)( - VADriverContextP ctx, - VAContextID context, - VABufferID *buffers, - int num_buffers - ); - - VAStatus(*vaEndPicture)( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus(*vaSyncSurface)( - VADriverContextP ctx, - VASurfaceID render_target - ); - - VAStatus(*vaQuerySurfaceStatus)( - VADriverContextP ctx, - VASurfaceID render_target, - VASurfaceStatus *status /* out */ - ); - - VAStatus(*vaQuerySurfaceError)( - VADriverContextP ctx, - VASurfaceID render_target, - VAStatus error_status, - void **error_info /*out*/ - ); - - VAStatus(*vaPutSurface)( - VADriverContextP ctx, - VASurfaceID surface, - void* draw, /* Drawable of window system */ - short srcx, - short srcy, - unsigned short srcw, - unsigned short srch, - short destx, - short desty, - unsigned short destw, - unsigned short desth, - VARectangle *cliprects, /* client supplied clip list */ - unsigned int number_cliprects, /* number of clip rects in the clip list */ - unsigned int flags /* de-interlacing flags */ - ); - - VAStatus(*vaQueryImageFormats)( - VADriverContextP ctx, - VAImageFormat *format_list, /* out */ - int *num_formats /* out */ - ); - - VAStatus(*vaCreateImage)( - VADriverContextP ctx, - VAImageFormat *format, - int width, - int height, - VAImage *image /* out */ - ); - - VAStatus(*vaDeriveImage)( - VADriverContextP ctx, - VASurfaceID surface, - VAImage *image /* out */ - ); - - VAStatus(*vaDestroyImage)( - VADriverContextP ctx, - VAImageID image - ); - - VAStatus(*vaSetImagePalette)( - VADriverContextP ctx, - VAImageID image, - /* - * pointer to an array holding the palette data. The size of the array is - * num_palette_entries * entry_bytes in size. The order of the components - * in the palette is described by the component_order in VAImage struct - */ - unsigned char *palette - ); - - VAStatus(*vaGetImage)( - VADriverContextP ctx, - VASurfaceID surface, - int x, /* coordinates of the upper left source pixel */ - int y, - unsigned int width, /* width and height of the region */ - unsigned int height, - VAImageID image - ); - - VAStatus(*vaPutImage)( - VADriverContextP ctx, - VASurfaceID surface, - VAImageID image, - int src_x, - int src_y, - unsigned int src_width, - unsigned int src_height, - int dest_x, - int dest_y, - unsigned int dest_width, - unsigned int dest_height - ); - - VAStatus(*vaQuerySubpictureFormats)( - VADriverContextP ctx, - VAImageFormat *format_list, /* out */ - unsigned int *flags, /* out */ - unsigned int *num_formats /* out */ - ); - - VAStatus(*vaCreateSubpicture)( - VADriverContextP ctx, - VAImageID image, - VASubpictureID *subpicture /* out */ - ); - - VAStatus(*vaDestroySubpicture)( - VADriverContextP ctx, - VASubpictureID subpicture - ); - - VAStatus(*vaSetSubpictureImage)( - VADriverContextP ctx, - VASubpictureID subpicture, - VAImageID image - ); - - VAStatus(*vaSetSubpictureChromakey)( - VADriverContextP ctx, - VASubpictureID subpicture, - unsigned int chromakey_min, - unsigned int chromakey_max, - unsigned int chromakey_mask - ); - - VAStatus(*vaSetSubpictureGlobalAlpha)( - VADriverContextP ctx, - VASubpictureID subpicture, - float global_alpha - ); - - VAStatus(*vaAssociateSubpicture)( - VADriverContextP ctx, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces, - short src_x, /* upper left offset in subpicture */ - short src_y, - unsigned short src_width, - unsigned short src_height, - short dest_x, /* upper left offset in surface */ - short dest_y, - unsigned short dest_width, - unsigned short dest_height, - /* - * whether to enable chroma-keying or global-alpha - * see VA_SUBPICTURE_XXX values - */ - unsigned int flags - ); - - VAStatus(*vaDeassociateSubpicture)( - VADriverContextP ctx, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces - ); - - VAStatus(*vaQueryDisplayAttributes)( - VADriverContextP ctx, - VADisplayAttribute *attr_list, /* out */ - int *num_attributes /* out */ - ); - - VAStatus(*vaGetDisplayAttributes)( - VADriverContextP ctx, - VADisplayAttribute *attr_list, /* in/out */ - int num_attributes - ); - - VAStatus(*vaSetDisplayAttributes)( - VADriverContextP ctx, - VADisplayAttribute *attr_list, - int num_attributes - ); - - /* used by va trace */ - VAStatus(*vaBufferInfo)( - VADriverContextP ctx, /* in */ - VABufferID buf_id, /* in */ - VABufferType *type, /* out */ - unsigned int *size, /* out */ - unsigned int *num_elements /* out */ - ); - - /* lock/unlock surface for external access */ - VAStatus(*vaLockSurface)( - VADriverContextP ctx, - VASurfaceID surface, - unsigned int *fourcc, /* out for follow argument */ - unsigned int *luma_stride, - unsigned int *chroma_u_stride, - unsigned int *chroma_v_stride, - unsigned int *luma_offset, - unsigned int *chroma_u_offset, - unsigned int *chroma_v_offset, - unsigned int *buffer_name, /* if it is not NULL, assign the low lever - * surface buffer name - */ - void **buffer /* if it is not NULL, map the surface buffer for - * CPU access - */ - ); - - VAStatus(*vaUnlockSurface)( - VADriverContextP ctx, - VASurfaceID surface - ); - - /* DEPRECATED */ - VAStatus - (*vaGetSurfaceAttributes)( - VADriverContextP dpy, - VAConfigID config, - VASurfaceAttrib *attrib_list, - unsigned int num_attribs - ); - - VAStatus - (*vaCreateSurfaces2)( - VADriverContextP ctx, - unsigned int format, - unsigned int width, - unsigned int height, - VASurfaceID *surfaces, - unsigned int num_surfaces, - VASurfaceAttrib *attrib_list, - unsigned int num_attribs - ); - - VAStatus - (*vaQuerySurfaceAttributes)( - VADriverContextP dpy, - VAConfigID config, - VASurfaceAttrib *attrib_list, - unsigned int *num_attribs - ); - - VAStatus - (*vaAcquireBufferHandle)( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - VABufferInfo * buf_info /* in/out */ - ); - - VAStatus - (*vaReleaseBufferHandle)( - VADriverContextP ctx, - VABufferID buf_id /* in */ - ); - - VAStatus(*vaCreateMFContext)( - VADriverContextP ctx, - VAMFContextID *mfe_context /* out */ - ); - - VAStatus(*vaMFAddContext)( - VADriverContextP ctx, - VAMFContextID mf_context, - VAContextID context - ); - - VAStatus(*vaMFReleaseContext)( - VADriverContextP ctx, - VAMFContextID mf_context, - VAContextID context - ); - - VAStatus(*vaMFSubmit)( - VADriverContextP ctx, - VAMFContextID mf_context, - VAContextID *contexts, - int num_contexts - ); - VAStatus(*vaCreateBuffer2)( - VADriverContextP ctx, - VAContextID context, /* in */ - VABufferType type, /* in */ - unsigned int width, /* in */ - unsigned int height, /* in */ - unsigned int *unit_size, /* out */ - unsigned int *pitch, /* out */ - VABufferID *buf_id /* out */ - ); - - VAStatus(*vaQueryProcessingRate)( - VADriverContextP ctx, /* in */ - VAConfigID config_id, /* in */ - VAProcessingRateParameter *proc_buf,/* in */ - unsigned int *processing_rate /* out */ - ); - - VAStatus - (*vaExportSurfaceHandle)( - VADriverContextP ctx, - VASurfaceID surface_id, /* in */ - uint32_t mem_type, /* in */ - uint32_t flags, /* in */ - void *descriptor /* out */ - ); - VAStatus(*vaSyncSurface2)( - VADriverContextP ctx, - VASurfaceID surface, - uint64_t timeout_ns - ); - - VAStatus(*vaSyncBuffer)( - VADriverContextP ctx, - VABufferID buf_id, - uint64_t timeout_ns - ); - - VAStatus - (*vaCopy)( - VADriverContextP ctx, /* in */ - VACopyObject *dst, /* in */ - VACopyObject *src, /* in */ - VACopyOption option /* in */ - ); - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[54]; -}; - -struct VADriverContext { - void *pDriverData; - - /** - * The core VA implementation hooks. - * - * This structure is allocated from libva with calloc(). - */ - struct VADriverVTable *vtable; - - /** - * The VA/GLX implementation hooks. - * - * This structure is intended for drivers that implement the - * VA/GLX API. The driver implementation is responsible for the - * allocation and deallocation of this structure. - */ - struct VADriverVTableGLX *vtable_glx; - - /** - * The VA/EGL implementation hooks. - * - * This structure is intended for drivers that implement the - * VA/EGL API. The driver implementation is responsible for the - * allocation and deallocation of this structure. - */ - struct VADriverVTableEGL *vtable_egl; - - /** - * The third-party/private implementation hooks. - * - * This structure is intended for drivers that implement the - * private API. The driver implementation is responsible for the - * allocation and deallocation of this structure. - */ - void *vtable_tpi; - - void *native_dpy; - int x11_screen; - int version_major; - int version_minor; - int max_profiles; - int max_entrypoints; - int max_attributes; - int max_image_formats; - int max_subpic_formats; - int max_display_attributes; - const char *str_vendor; - - void *handle; /* dlopen handle */ - - /** - * \brief DRM state. - * - * This field holds driver specific data for DRM-based - * drivers. This structure is allocated from libva with - * calloc(). Do not deallocate from within VA driver - * implementations. - * - * All structures shall be derived from struct drm_state. So, for - * instance, this field holds a dri_state structure for VA/X11 - * drivers that use the DRM protocol. - */ - void *drm_state; - - void *glx; /* opaque for GLX code */ - - /** \brief VA display type. */ - unsigned long display_type; - - /** - * The VA/Wayland implementation hooks. - * - * This structure is intended for drivers that implement the - * VA/Wayland API. libVA allocates this structure with calloc() - * and owns the resulting memory. - */ - struct VADriverVTableWayland *vtable_wayland; - - /** - * \brief The VA/VPP implementation hooks. - * - * This structure is allocated from libva with calloc(). - */ - struct VADriverVTableVPP *vtable_vpp; - - char *override_driver_name; - - void *pDisplayContext; - - /** - * Error callback. - * - * This is set by libva when the driver is opened, and will not be - * changed thereafter. The driver can call it with an error message, - * which will be propagated to the API user through their error - * callbacks, or sent to a default output if no callback is available. - * - * It is expected that end users will always be able to see these - * messages, so it should be called only for serious errors. For - * example, hardware problems or fatal configuration errors. - * - * @param pDriverContext Pointer to the driver context structure - * being used by the current driver. - * @param message Message to send to the API user. This must be a - * null-terminated string. - */ - void (*error_callback)(VADriverContextP pDriverContext, - const char *message); - /** - * Info callback. - * - * This has the same behaviour as the error callback, but has its - * own set of callbacks to the API user. - * - * It should be used for informational messages which may be useful - * for an application programmer or for debugging. For example, minor - * configuration errors, or information about the reason when another - * API call generates an error return. It is not expected that end - * users will see these messages. - * - * @param pDriverContext Pointer to the driver context structure - * being used by the current driver. - * @param message Message to send to the API user. This must be a - * null-terminated string. - */ - void (*info_callback)(VADriverContextP pDriverContext, - const char *message); - - /** - * \brief The VA/Protected implementation hooks. - * - * This structure is allocated from libva with calloc(). - */ - struct VADriverVTableProt *vtable_prot; - - unsigned long reserved[37]; /* reserve for future add-ins, decrease the subscript accordingly */ -}; - -#define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */ -struct VADisplayContext { - int vadpy_magic; - - VADisplayContextP pNext; - VADriverContextP pDriverContext; - - int (*vaIsValid)( - VADisplayContextP ctx - ); - - void (*vaDestroy)( - VADisplayContextP ctx - ); - - VAStatus(*vaGetDriverName)( - VADisplayContextP ctx, - char **driver_name - ); - - void *opaque; /* opaque for display extensions (e.g. GLX) */ - void *vatrace; /* opaque for VA trace context */ - void *vafool; /* opaque for VA fool context */ - - VAMessageCallback error_callback; - void *error_callback_user_context; - VAMessageCallback info_callback; - void *info_callback_user_context; - VAStatus(*vaGetNumCandidates)( - VADisplayContextP ctx, - int * num_candidates - ); - - VAStatus(*vaGetDriverNameByIndex)( - VADisplayContextP ctx, - char **driver_name, - int candidate_index - ); - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[30]; -}; - -typedef VAStatus(*VADriverInit)( - VADriverContextP driver_context -); - -#endif /* _VA_BACKEND_H_ */ diff --git a/prebuilts/x86_64/include/va/va_backend_prot.h b/prebuilts/x86_64/include/va/va_backend_prot.h deleted file mode 100644 index 93447e1..0000000 --- a/prebuilts/x86_64/include/va/va_backend_prot.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2020 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_BACKEND_PROT_H -#define VA_BACKEND_PROT_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \brief VTable version for VA/PROTECTION hooks. */ -#define VA_DRIVER_VTABLE_PROT_VERSION 1 - -struct VADriverVTableProt { - unsigned int version; - - VAStatus - (*vaCreateProtectedSession)( - VADriverContextP ctx, - VAConfigID config_id, - VAProtectedSessionID *protected_session - ); - - VAStatus - (*vaDestroyProtectedSession)( - VADriverContextP ctx, - VAProtectedSessionID protected_session - ); - - VAStatus - (*vaAttachProtectedSession)( - VADriverContextP ctx, - VAContextID context, - VAProtectedSessionID protected_session - ); - - VAStatus - (*vaDetachProtectedSession)( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus - (*vaProtectedSessionExecute)( - VADriverContextP ctx, - VAProtectedSessionID protected_session, - VABufferID buf_id - ); - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[VA_PADDING_MEDIUM]; -}; - -#ifdef __cplusplus -} -#endif - -#endif /* VA_BACKEND_PROT_H */ diff --git a/prebuilts/x86_64/include/va/va_backend_vpp.h b/prebuilts/x86_64/include/va/va_backend_vpp.h deleted file mode 100644 index 8ed10d5..0000000 --- a/prebuilts/x86_64/include/va/va_backend_vpp.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_BACKEND_VPP_H -#define VA_BACKEND_VPP_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** \brief VTable version for VA/VPP hooks. */ -#define VA_DRIVER_VTABLE_VPP_VERSION 1 - -struct VADriverVTableVPP { - unsigned int version; - - VAStatus - (*vaQueryVideoProcFilters)( - VADriverContextP ctx, - VAContextID context, - VAProcFilterType *filters, - unsigned int *num_filters - ); - - VAStatus - (*vaQueryVideoProcFilterCaps)( - VADriverContextP ctx, - VAContextID context, - VAProcFilterType type, - void *filter_caps, - unsigned int *num_filter_caps - ); - - VAStatus - (*vaQueryVideoProcPipelineCaps)( - VADriverContextP ctx, - VAContextID context, - VABufferID *filters, - unsigned int num_filters, - VAProcPipelineCaps *pipeline_caps - ); - - /** \brief Reserved bytes for future use, must be zero */ - unsigned long reserved[16]; -}; - -#ifdef __cplusplus -} -#endif - -#endif /* VA_BACKEND_VPP_H */ diff --git a/prebuilts/x86_64/include/va/va_compat.h b/prebuilts/x86_64/include/va/va_compat.h deleted file mode 100644 index 41a3f73..0000000 --- a/prebuilts/x86_64/include/va/va_compat.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_compat.h - * \brief The Compatibility API - * - * This file contains the \ref api_compat "Compatibility API". - */ - -#ifndef VA_COMPAT_H -#define VA_COMPAT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_compat Compatibility API - * - * The Compatibility API allows older programs that are not ported to - * the current API to still build and run correctly. In particular, - * this exposes older API to allow for backwards source compatibility. - * - * @{ - */ - -/** - * Makes a string literal out of the macro argument - */ -#define VA_CPP_HELPER_STRINGIFY(x) \ - VA_CPP_HELPER_STRINGIFY_(x) -#define VA_CPP_HELPER_STRINGIFY_(x) \ - #x - -/** - * Concatenates two macro arguments at preprocessing time. - */ -#define VA_CPP_HELPER_CONCAT(a, b) \ - VA_CPP_HELPER_CONCAT_(a, b) -#define VA_CPP_HELPER_CONCAT_(a, b) \ - a ## b - -/** - * Generates the number of macro arguments at preprocessing time. - * - * - * Note: this doesn't work for macros with no arguments - */ -#define VA_CPP_HELPER_N_ARGS(...) \ - VA_CPP_HELPER_N_ARGS_(__VA_ARGS__, VA_CPP_HELPER_N_ARGS_LIST_REV()) -#define VA_CPP_HELPER_N_ARGS_(...) \ - VA_CPP_HELPER_N_ARGS_LIST(__VA_ARGS__) -#define VA_CPP_HELPER_N_ARGS_LIST(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a12, a13, a14, a15, a16, N, ...) N -#define VA_CPP_HELPER_N_ARGS_LIST_REV() \ - 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 - -/** - * Generates a versioned function alias. - * - * VA_CPP_HELPER_ALIAS(vaSomeFunction, 0,32,0) will generate - * .symber vaSomeFunction_0_32_0, vaSomeFunction@VA_API_0.32.0 - */ -#define VA_CPP_HELPER_ALIAS(func, major, minor, micro) \ - VA_CPP_HELPER_ALIAS_(func, major, minor, micro, "@") -#define VA_CPP_HELPER_ALIAS_DEFAULT(func, major, minor, micro) \ - VA_CPP_HELPER_ALIAS_(func, major, minor, micro, "@@") -#define VA_CPP_HELPER_ALIAS_(func, major, minor, micro, binding) \ - asm(".symver " #func "_" #major "_" #minor "_" #micro ", " \ - #func binding "VA_API_" #major "." #minor "." #micro) - -/* vaCreateSurfaces() */ - -#ifndef VA_COMPAT_DISABLED -#define vaCreateSurfaces(dpy, ...) \ - VA_CPP_HELPER_CONCAT(vaCreateSurfaces, \ - VA_CPP_HELPER_N_ARGS(dpy, __VA_ARGS__)) \ - (dpy, __VA_ARGS__) -#endif - -#define vaCreateSurfaces6(dpy, width, height, format, num_surfaces, surfaces) \ - (vaCreateSurfaces)(dpy, format, width, height, surfaces, num_surfaces, \ - NULL, 0) - -#define vaCreateSurfaces8(dpy, format, width, height, surfaces, num_surfaces, attribs, num_attribs) \ - (vaCreateSurfaces)(dpy, format, width, height, surfaces, num_surfaces, \ - attribs, num_attribs) - -/*@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_COMPAT_H */ diff --git a/prebuilts/x86_64/include/va/va_dec_av1.h b/prebuilts/x86_64/include/va/va_dec_av1.h deleted file mode 100644 index c195538..0000000 --- a/prebuilts/x86_64/include/va/va_dec_av1.h +++ /dev/null @@ -1,695 +0,0 @@ -/* - * Copyright (c) 2019 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_av1.h - * \brief The AV1 decoding API - * - * This file contains the \ref api_dec_av1 "AV1 decoding API". - */ - -#ifndef VA_DEC_AV1_H -#define VA_DEC_AV1_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_dec_av1 AV1 decoding API - * - * This AV1 decoding API supports 8-bit/10bit 420 format only. - * - * @{ - */ - -/** Attribute value for VAConfigAttribDecAV1Features. - * - * This attribute decribes the supported features of a AV1 - * decoder configuration. - * - */ -typedef union VAConfigAttribValDecAV1Features { - struct { - /** large scale tile - * - * This conveys whether AV1 large scale tile is supported by HW. - * 0 - unsupported, 1 - supported. - */ - uint32_t lst_support : 2; - /* Reserved for future use. */ - uint32_t reserved : 30; - } bits; - uint32_t value; -} VAConfigAttribValDecAV1Features; - -/** - * \brief AV1 Decoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * App should send a surface with this data structure down to VAAPI once - * per frame. - * - */ - -/** \brief Segmentation Information - */ -typedef struct _VASegmentationStructAV1 { - union { - struct { - /** Indicates whether segmentation map related syntax elements - * are present or not for current frame. If equal to 0, - * the segmentation map related syntax elements are - * not present for the current frame and the control flags of - * segmentation map related tables feature_data[][], and - * feature_mask[] are not valid and shall be ignored by accelerator. - */ - uint32_t enabled : 1; - /** Value 1 indicates that the segmentation map are updated - * during the decoding of this frame. - * Value 0 means that the segmentation map from the previous - * frame is used. - */ - uint32_t update_map : 1; - /** Value 1 indicates that the updates to the segmentation map - * are coded relative to the existing segmentation map. - * Value 0 indicates that the new segmentation map is coded - * without reference to the existing segmentation map. - */ - uint32_t temporal_update : 1; - /** Value 1 indicates that new parameters are about to be - * specified for each segment. - * Value 0 indicates that the segmentation parameters - * should keep their existing values. - */ - uint32_t update_data : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 28; - } bits; - uint32_t value; - } segment_info_fields; - - /** \brief Segmentation parameters for current frame. - * feature_data[segment_id][feature_id] - * where segment_id has value range [0..7] indicating the segment id. - * and feature_id is defined as - typedef enum { - SEG_LVL_ALT_Q, // Use alternate Quantizer .... - SEG_LVL_ALT_LF_Y_V, // Use alternate loop filter value on y plane vertical - SEG_LVL_ALT_LF_Y_H, // Use alternate loop filter value on y plane horizontal - SEG_LVL_ALT_LF_U, // Use alternate loop filter value on u plane - SEG_LVL_ALT_LF_V, // Use alternate loop filter value on v plane - SEG_LVL_REF_FRAME, // Optional Segment reference frame - SEG_LVL_SKIP, // Optional Segment (0,0) + skip mode - SEG_LVL_GLOBALMV, - SEG_LVL_MAX - } SEG_LVL_FEATURES; - * feature_data[][] is equivalent to variable FeatureData[][] in spec, - * which is after clip3() operation. - * Clip3(x, y, z) = (z < x)? x : ((z > y)? y : z); - * The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = { - * 255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, 7, 0, 0 } - */ - int16_t feature_data[8][8]; - - /** \brief indicates if a feature is enabled or not. - * Each bit field itself is the feature_id. Index is segment_id. - * feature_mask[segment_id] & (1 << feature_id) equal to 1 specify that the feature of - * feature_id for segment of segment_id is enabled, otherwise disabled. - */ - uint8_t feature_mask[8]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VASegmentationStructAV1; - -/** \brief Film Grain Information - */ -typedef struct _VAFilmGrainStructAV1 { - union { - struct { - /** \brief Specify whether or not film grain is applied on current frame. - * If set to 0, all the rest parameters should be set to zero - * and ignored. - */ - uint32_t apply_grain : 1; - uint32_t chroma_scaling_from_luma : 1; - uint32_t grain_scaling_minus_8 : 2; - uint32_t ar_coeff_lag : 2; - uint32_t ar_coeff_shift_minus_6 : 2; - uint32_t grain_scale_shift : 2; - uint32_t overlap_flag : 1; - uint32_t clip_to_restricted_range : 1; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 20; - } bits; - uint32_t value; - } film_grain_info_fields; - - uint16_t grain_seed; - /* value range [0..14] */ - uint8_t num_y_points; - uint8_t point_y_value[14]; - uint8_t point_y_scaling[14]; - /* value range [0..10] */ - uint8_t num_cb_points; - uint8_t point_cb_value[10]; - uint8_t point_cb_scaling[10]; - /* value range [0..10] */ - uint8_t num_cr_points; - uint8_t point_cr_value[10]; - uint8_t point_cr_scaling[10]; - /* value range [-128..127] */ - int8_t ar_coeffs_y[24]; - int8_t ar_coeffs_cb[25]; - int8_t ar_coeffs_cr[25]; - uint8_t cb_mult; - uint8_t cb_luma_mult; - uint16_t cb_offset; - uint8_t cr_mult; - uint8_t cr_luma_mult; - uint16_t cr_offset; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VAFilmGrainStructAV1; - -typedef enum { - /** identity transformation, 0-parameter */ - VAAV1TransformationIdentity = 0, - /** translational motion, 2-parameter */ - VAAV1TransformationTranslation = 1, - /** simplified affine with rotation + zoom only, 4-parameter */ - VAAV1TransformationRotzoom = 2, - /** affine, 6-parameter */ - VAAV1TransformationAffine = 3, - /** transformation count */ - VAAV1TransformationCount -} VAAV1TransformationType; - -typedef struct _VAWarpedMotionParamsAV1 { - - /** \brief Specify the type of warped motion */ - VAAV1TransformationType wmtype; - - /** \brief Specify warp motion parameters - * wm.wmmat[] corresponds to gm_params[][] in spec. - * Details in AV1 spec section 5.9.24 or refer to libaom code - * https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c - */ - int32_t wmmat[8]; - - /* valid or invalid on affine set */ - uint8_t invalid; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VAWarpedMotionParamsAV1; - -/** - * \brief AV1 Decoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters and should be sent once - * per frame. - * - */ -typedef struct _VADecPictureParameterBufferAV1 { - /**@{*/ - - /** \brief sequence level information - */ - - /** \brief AV1 bit stream profile - */ - uint8_t profile; - - uint8_t order_hint_bits_minus_1; - - /** \brief bit depth index - * value range [0..2] - * 0 - bit depth 8; - * 1 - bit depth 10; - * 2 - bit depth 12; - */ - uint8_t bit_depth_idx; - - /** \brief corresponds to AV1 spec variable of the same name. */ - uint8_t matrix_coefficients; - - union { - struct { - uint32_t still_picture : 1; - uint32_t use_128x128_superblock : 1; - uint32_t enable_filter_intra : 1; - uint32_t enable_intra_edge_filter : 1; - - /** read_compound_tools */ - uint32_t enable_interintra_compound : 1; - uint32_t enable_masked_compound : 1; - - uint32_t enable_dual_filter : 1; - uint32_t enable_order_hint : 1; - uint32_t enable_jnt_comp : 1; - uint32_t enable_cdef : 1; - uint32_t mono_chrome : 1; - uint32_t color_range : 1; - uint32_t subsampling_x : 1; - uint32_t subsampling_y : 1; - va_deprecated uint32_t chroma_sample_position : 1; - uint32_t film_grain_params_present : 1; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 16; - } fields; - uint32_t value; - } seq_info_fields; - - /** \brief Picture level information - */ - - /** \brief buffer description of decoded current picture - */ - VASurfaceID current_frame; - - /** \brief display buffer of current picture - * Used for film grain applied decoded picture. - * Valid only when apply_grain equals 1. - */ - VASurfaceID current_display_picture; - - /** \brief number of anchor frames for large scale tile - * This parameter gives the number of entries of anchor_frames_list[]. - * Value range [0..128]. - */ - uint8_t anchor_frames_num; - - /** \brief anchor frame list for large scale tile - * For large scale tile applications, the anchor frames could come from - * previously decoded frames in current sequence (aka. internal), or - * from external sources. - * For external anchor frames, application should call API - * vaCreateBuffer() to generate frame buffers and populate them with - * pixel frames. And this process may happen multiple times. - * The array anchor_frames_list[] is used to register all the available - * anchor frames from both external and internal, up to the current - * frame instance. If a previously registerred anchor frame is no longer - * needed, it should be removed from the list. But it does not prevent - * applications from relacing the frame buffer with new anchor frames. - * Please note that the internal anchor frames may not still be present - * in the current DPB buffer. But if it is in the anchor_frames_list[], - * it should not be replaced with other frames or removed from memory - * until it is not shown in the list. - * This number of entries of the list is given by parameter anchor_frames_num. - */ - VASurfaceID *anchor_frames_list; - - /** \brief Picture resolution minus 1 - * Picture original resolution. If SuperRes is enabled, - * this is the upscaled resolution. - * value range [0..65535] - */ - uint16_t frame_width_minus1; - uint16_t frame_height_minus1; - - /** \brief Output frame buffer size in unit of tiles - * Valid only when large_scale_tile equals 1. - * value range [0..65535] - */ - uint16_t output_frame_width_in_tiles_minus_1; - uint16_t output_frame_height_in_tiles_minus_1; - - /** \brief Surface indices of reference frames in DPB. - * - * Contains a list of uncompressed frame buffer surface indices as references. - * Application needs to make sure all the entries point to valid frames - * except for intra frames by checking ref_frame_id[]. If missing frame - * is identified, application may choose to perform error recovery by - * pointing problematic index to an alternative frame buffer. - * Driver is not responsible to validate reference frames' id. - */ - VASurfaceID ref_frame_map[8]; - - /** \brief Reference frame indices. - * - * Contains a list of indices into ref_frame_map[8]. - * It specifies the reference frame correspondence. - * The indices of the array are defined as [LAST_FRAME – LAST_FRAME, - * LAST2_FRAME – LAST_FRAME, …, ALTREF_FRAME – LAST_FRAME], where each - * symbol is defined as: - * enum{INTRA_FRAME = 0, LAST_FRAME, LAST2_FRAME, LAST3_FRAME, GOLDEN_FRAME, - * BWDREF_FRAME, ALTREF2_FRAME, ALTREF_FRAME}; - */ - uint8_t ref_frame_idx[7]; - - /** \brief primary reference frame index - * Index into ref_frame_idx[], specifying which reference frame contains - * propagated info that should be loaded at the start of the frame. - * When value equals PRIMARY_REF_NONE (7), it indicates there is - * no primary reference frame. - * value range [0..7] - */ - uint8_t primary_ref_frame; - - uint8_t order_hint; - - VASegmentationStructAV1 seg_info; - VAFilmGrainStructAV1 film_grain_info; - - /** \brief tile structure - * When uniform_tile_spacing_flag == 1, width_in_sbs_minus_1[] and - * height_in_sbs_minus_1[] should be ignored, which will be generated - * by driver based on tile_cols and tile_rows. - */ - uint8_t tile_cols; - uint8_t tile_rows; - - /* The width/height of a tile minus 1 in units of superblocks. Though the - * maximum number of tiles is 64, since ones of the last tile are computed - * from ones of the other tiles and frame_width/height, they are not - * necessarily specified. - */ - uint16_t width_in_sbs_minus_1[63]; - uint16_t height_in_sbs_minus_1[63]; - - /** \brief number of tiles minus 1 in large scale tile list - * Same as AV1 semantic element. - * Valid only when large_scale_tiles == 1. - */ - uint16_t tile_count_minus_1; - - /* specify the tile index for context updating */ - uint16_t context_update_tile_id; - - union { - struct { - /** \brief flags for current picture - * same syntax and semantic as those in AV1 code - */ - - /** \brief Frame Type - * 0: KEY_FRAME; - * 1: INTER_FRAME; - * 2: INTRA_ONLY_FRAME; - * 3: SWITCH_FRAME - * For SWITCH_FRAME, application shall set error_resilient_mode = 1, - * refresh_frame_flags, etc. appropriately. And driver will convert it - * to INTER_FRAME. - */ - uint32_t frame_type : 2; - uint32_t show_frame : 1; - uint32_t showable_frame : 1; - uint32_t error_resilient_mode : 1; - uint32_t disable_cdf_update : 1; - uint32_t allow_screen_content_tools : 1; - uint32_t force_integer_mv : 1; - uint32_t allow_intrabc : 1; - uint32_t use_superres : 1; - uint32_t allow_high_precision_mv : 1; - uint32_t is_motion_mode_switchable : 1; - uint32_t use_ref_frame_mvs : 1; - /* disable_frame_end_update_cdf is coded as refresh_frame_context. */ - uint32_t disable_frame_end_update_cdf : 1; - uint32_t uniform_tile_spacing_flag : 1; - uint32_t allow_warped_motion : 1; - /** \brief indicate if current frame in large scale tile mode */ - uint32_t large_scale_tile : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 15; - } bits; - uint32_t value; - } pic_info_fields; - - /** \brief Supper resolution scale denominator. - * When use_superres=1, superres_scale_denominator must be in the range [9..16]. - * When use_superres=0, superres_scale_denominator must be 8. - */ - uint8_t superres_scale_denominator; - - /** \brief Interpolation filter. - * value range [0..4] - */ - uint8_t interp_filter; - - /** \brief luma loop filter levels. - * value range [0..63]. - */ - uint8_t filter_level[2]; - - /** \brief chroma loop filter levels. - * value range [0..63]. - */ - uint8_t filter_level_u; - uint8_t filter_level_v; - - union { - struct { - /** \brief flags for reference pictures - * same syntax and semantic as those in AV1 code - */ - uint8_t sharpness_level : 3; - uint8_t mode_ref_delta_enabled : 1; - uint8_t mode_ref_delta_update : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint8_t reserved : 3; - } bits; - uint8_t value; - } loop_filter_info_fields; - - /** \brief The adjustment needed for the filter level based on - * the chosen reference frame. - * value range [-64..63]. - */ - int8_t ref_deltas[8]; - - /** \brief The adjustment needed for the filter level based on - * the chosen mode. - * value range [-64..63]. - */ - int8_t mode_deltas[2]; - - /** \brief quantization - */ - /** \brief Y AC index - * value range [0..255] - */ - uint8_t base_qindex; - /** \brief Y DC delta from Y AC - * value range [-64..63] - */ - int8_t y_dc_delta_q; - /** \brief U DC delta from Y AC - * value range [-64..63] - */ - int8_t u_dc_delta_q; - /** \brief U AC delta from Y AC - * value range [-64..63] - */ - int8_t u_ac_delta_q; - /** \brief V DC delta from Y AC - * value range [-64..63] - */ - int8_t v_dc_delta_q; - /** \brief V AC delta from Y AC - * value range [-64..63] - */ - int8_t v_ac_delta_q; - - /** \brief quantization_matrix - */ - union { - struct { - uint16_t using_qmatrix : 1; - /** \brief qm level - * value range [0..15] - * Invalid if using_qmatrix equals 0. - */ - uint16_t qm_y : 4; - uint16_t qm_u : 4; - uint16_t qm_v : 4; - - /** \brief Reserved bytes for future use, must be zero */ - uint16_t reserved : 3; - } bits; - uint16_t value; - } qmatrix_fields; - - union { - struct { - /** \brief delta_q parameters - */ - uint32_t delta_q_present_flag : 1; - uint32_t log2_delta_q_res : 2; - - /** \brief delta_lf parameters - */ - uint32_t delta_lf_present_flag : 1; - uint32_t log2_delta_lf_res : 2; - - /** \brief CONFIG_LOOPFILTER_LEVEL - */ - uint32_t delta_lf_multi : 1; - - /** \brief read_tx_mode - * value range [0..2] - */ - uint32_t tx_mode : 2; - - /* AV1 frame reference mode semantic */ - uint32_t reference_select : 1; - - uint32_t reduced_tx_set_used : 1; - - uint32_t skip_mode_present : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 20; - } bits; - uint32_t value; - } mode_control_fields; - - /** \brief CDEF parameters - */ - /* value range [0..3] */ - uint8_t cdef_damping_minus_3; - /* value range [0..3] */ - uint8_t cdef_bits; - - /** Encode cdef strength: - * - * The cdef_y_strengths[] and cdef_uv_strengths[] are expected to be packed - * with both primary and secondary strength. The secondary strength is - * given in the lower two bits and the primary strength is given in the next - * four bits. - * - * cdef_y_strengths[] & cdef_uv_strengths[] should be derived as: - * (cdef_y_strengths[]) = (cdef_y_pri_strength[] << 2) | (cdef_y_sec_strength[] & 0x03) - * (cdef_uv_strengths[]) = (cdef_uv_pri_strength[] << 2) | (cdef_uv_sec_strength[] & 0x03) - * In which, cdef_y_pri_strength[]/cdef_y_sec_strength[]/cdef_uv_pri_strength[]/cdef_uv_sec_strength[] - * are variables defined in AV1 Spec 5.9.19. The cdef_y_strengths[] & cdef_uv_strengths[] - * are corresponding to LIBAOM variables cm->cdef_strengths[] & cm->cdef_uv_strengths[] respectively. - */ - /* value range [0..63] */ - uint8_t cdef_y_strengths[8]; - /* value range [0..63] */ - uint8_t cdef_uv_strengths[8]; - - /** \brief loop restoration parameters - */ - union { - struct { - uint16_t yframe_restoration_type : 2; - uint16_t cbframe_restoration_type : 2; - uint16_t crframe_restoration_type : 2; - uint16_t lr_unit_shift : 2; - uint16_t lr_uv_shift : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint16_t reserved : 7; - } bits; - uint16_t value; - } loop_restoration_fields; - - /** \brief global motion - */ - VAWarpedMotionParamsAV1 wm[7]; - - /**@}*/ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VADecPictureParameterBufferAV1; - - -/** - * \brief AV1 Slice Parameter Buffer Structure - * - * This structure conveys parameters related to bit stream data and should be - * sent once per tile. - * - * It uses the name VASliceParameterBufferAV1 to be consistent with other codec, - * but actually means VATileParameterBufferAV1. - * - * Slice data buffer of VASliceDataBufferType is used - * to send the bitstream. - * - * Please note that host decoder is responsible to parse out the - * per tile information. And the bit stream in sent to driver in per - * tile granularity. - */ -typedef struct _VASliceParameterBufferAV1 { - /**@{*/ - /** \brief The byte count of current tile in the bitstream buffer, - * starting from first byte of the buffer. - * It uses the name slice_data_size to be consistent with other codec, - * but actually means tile_data_size. - */ - uint32_t slice_data_size; - /** - * offset to the first byte of the data buffer. - */ - uint32_t slice_data_offset; - /** - * see VA_SLICE_DATA_FLAG_XXX definitions - */ - uint32_t slice_data_flag; - - uint16_t tile_row; - uint16_t tile_column; - - va_deprecated uint16_t tg_start; - va_deprecated uint16_t tg_end; - /** \brief anchor frame index for large scale tile. - * index into an array AnchorFrames of the frames that the tile uses - * for prediction. - * valid only when large_scale_tile equals 1. - */ - uint8_t anchor_frame_idx; - - /** \brief tile index in the tile list. - * Valid only when large_scale_tile is enabled. - * Driver uses this field to decide the tile output location. - */ - uint16_t tile_idx_in_tile_list; - - /**@}*/ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferAV1; - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_AV1_H */ diff --git a/prebuilts/x86_64/include/va/va_dec_hevc.h b/prebuilts/x86_64/include/va/va_dec_hevc.h deleted file mode 100644 index eef0530..0000000 --- a/prebuilts/x86_64/include/va/va_dec_hevc.h +++ /dev/null @@ -1,616 +0,0 @@ -/* - * Copyright (c) 2014 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_hevc.h - * \brief The HEVC decoding API - * - * This file contains the \ref api_dec_hevc "HEVC decoding API". - */ - -#ifndef VA_DEC_HEVC_H -#define VA_DEC_HEVC_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_dec_hevc HEVC decoding API - * - * This HEVC decoding API supports Main and Main Still Picture profiles. - * And it supports both short slice format and long slice format. - * - * @{ - */ - -/** - * \brief HEVC Decoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters and should be sent once - * per frame. - * - */ -typedef struct _VAPictureParameterBufferHEVC { - /** \brief buffer description of decoded current picture - * only VA_PICTURE_HEVC_FIELD_PIC and VA_PICTURE_HEVC_BOTTOM_FIELD - * of "flags" fields are meaningful. - */ - VAPictureHEVC CurrPic; - /** \brief buffer description of reference frames in DPB */ - VAPictureHEVC ReferenceFrames[15]; - /** \brief picture width, shall be integer multiple of minimum CB size. */ - uint16_t pic_width_in_luma_samples; - /** \brief picture height, shall be integer multiple of minimum CB size. */ - uint16_t pic_height_in_luma_samples; - - - union { - struct { - /** following flags have same syntax and semantic as those in HEVC spec */ - uint32_t chroma_format_idc : 2; - uint32_t separate_colour_plane_flag : 1; - uint32_t pcm_enabled_flag : 1; - uint32_t scaling_list_enabled_flag : 1; - uint32_t transform_skip_enabled_flag : 1; - uint32_t amp_enabled_flag : 1; - uint32_t strong_intra_smoothing_enabled_flag : 1; - uint32_t sign_data_hiding_enabled_flag : 1; - uint32_t constrained_intra_pred_flag : 1; - uint32_t cu_qp_delta_enabled_flag : 1; - uint32_t weighted_pred_flag : 1; - uint32_t weighted_bipred_flag : 1; - uint32_t transquant_bypass_enabled_flag : 1; - uint32_t tiles_enabled_flag : 1; - uint32_t entropy_coding_sync_enabled_flag : 1; - uint32_t pps_loop_filter_across_slices_enabled_flag : 1; - uint32_t loop_filter_across_tiles_enabled_flag : 1; - uint32_t pcm_loop_filter_disabled_flag : 1; - /** set based on sps_max_num_reorder_pics of current temporal layer. */ - uint32_t NoPicReorderingFlag : 1; - /** picture has no B slices */ - uint32_t NoBiPredFlag : 1; - - uint32_t ReservedBits : 11; - } bits; - uint32_t value; - } pic_fields; - - /** following parameters have same syntax with those in HEVC spec */ - /** \brief DPB size for current temporal layer */ - uint8_t sps_max_dec_pic_buffering_minus1; - uint8_t bit_depth_luma_minus8; - uint8_t bit_depth_chroma_minus8; - uint8_t pcm_sample_bit_depth_luma_minus1; - uint8_t pcm_sample_bit_depth_chroma_minus1; - uint8_t log2_min_luma_coding_block_size_minus3; - uint8_t log2_diff_max_min_luma_coding_block_size; - uint8_t log2_min_transform_block_size_minus2; - uint8_t log2_diff_max_min_transform_block_size; - uint8_t log2_min_pcm_luma_coding_block_size_minus3; - uint8_t log2_diff_max_min_pcm_luma_coding_block_size; - uint8_t max_transform_hierarchy_depth_intra; - uint8_t max_transform_hierarchy_depth_inter; - int8_t init_qp_minus26; - uint8_t diff_cu_qp_delta_depth; - int8_t pps_cb_qp_offset; - int8_t pps_cr_qp_offset; - uint8_t log2_parallel_merge_level_minus2; - uint8_t num_tile_columns_minus1; - uint8_t num_tile_rows_minus1; - /** - * when uniform_spacing_flag equals 1, application should populate - * column_width_minus[], and row_height_minus1[] with approperiate values. - */ - uint16_t column_width_minus1[19]; - uint16_t row_height_minus1[21]; - - /** - * The Following Parameters are needed for Short Slice Format Only. - * Only format decoding can ignore them. - */ - - /** - * \brief Parameters needed for parsing slice segment headers - */ - union { - struct { - /** following parameters have same syntax with those in HEVC spec */ - uint32_t lists_modification_present_flag : 1; - uint32_t long_term_ref_pics_present_flag : 1; - uint32_t sps_temporal_mvp_enabled_flag : 1; - uint32_t cabac_init_present_flag : 1; - uint32_t output_flag_present_flag : 1; - uint32_t dependent_slice_segments_enabled_flag : 1; - uint32_t pps_slice_chroma_qp_offsets_present_flag : 1; - uint32_t sample_adaptive_offset_enabled_flag : 1; - uint32_t deblocking_filter_override_enabled_flag : 1; - uint32_t pps_disable_deblocking_filter_flag : 1; - uint32_t slice_segment_header_extension_present_flag : 1; - - /** current picture with NUT between 16 and 21 inclusive */ - uint32_t RapPicFlag : 1; - /** current picture with NUT between 19 and 20 inclusive */ - uint32_t IdrPicFlag : 1; - /** current picture has only intra slices */ - uint32_t IntraPicFlag : 1; - - uint32_t ReservedBits : 18; - } bits; - uint32_t value; - } slice_parsing_fields; - - /** following parameters have same syntax with those in HEVC spec */ - uint8_t log2_max_pic_order_cnt_lsb_minus4; - uint8_t num_short_term_ref_pic_sets; - uint8_t num_long_term_ref_pic_sps; - uint8_t num_ref_idx_l0_default_active_minus1; - uint8_t num_ref_idx_l1_default_active_minus1; - int8_t pps_beta_offset_div2; - int8_t pps_tc_offset_div2; - uint8_t num_extra_slice_header_bits; - - /** - * \brief number of bits that structure - * short_term_ref_pic_set( num_short_term_ref_pic_sets ) takes in slice - * segment header when short_term_ref_pic_set_sps_flag equals 0. - * if short_term_ref_pic_set_sps_flag equals 1, the value should be 0. - * the bit count is calculated after emulation prevention bytes are removed - * from bit streams. - * This variable is used for accelorater to skip parsing the - * short_term_ref_pic_set( num_short_term_ref_pic_sets ) structure. - */ - uint32_t st_rps_bits; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAPictureParameterBufferHEVC; - -/** - * \brief HEVC Decoding Picture Parameter Buffer Structure for Range Extension - * - * This structure conveys picture level HEVC Range Extension parameters - * and should be sent once per frame. This data structure should be sent - * together with VAPictureParameterBufferHEVC in a single buffer of - * \ref VAPictureParameterBufferHEVCExtension since each frame - * of HEVC range extension contains both picture level parameters and picture - * level range extension parameters. They should be parsed together. The buffer - * type is same as \ref VAPictureParameterBufferHEVC. - * - */ -typedef struct _VAPictureParameterBufferHEVCRext { - union { - struct { - /** \brief HEVC range extension flags - * The following flags bears the same syntax and semantics as - * those defined in HEVC bit stream spec. - */ - uint32_t transform_skip_rotation_enabled_flag : 1; - uint32_t transform_skip_context_enabled_flag : 1; - uint32_t implicit_rdpcm_enabled_flag : 1; - uint32_t explicit_rdpcm_enabled_flag : 1; - uint32_t extended_precision_processing_flag : 1; - uint32_t intra_smoothing_disabled_flag : 1; - uint32_t high_precision_offsets_enabled_flag : 1; - uint32_t persistent_rice_adaptation_enabled_flag : 1; - uint32_t cabac_bypass_alignment_enabled_flag : 1; - uint32_t cross_component_prediction_enabled_flag : 1; - uint32_t chroma_qp_offset_list_enabled_flag : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 21; - } bits; - uint32_t value; - } range_extension_pic_fields; - - /** \brief HEVC range extension flags - * The following flags bears the same syntax and semantics as - * those defined in HEVC bit stream spec. - */ - uint8_t diff_cu_chroma_qp_offset_depth; - uint8_t chroma_qp_offset_list_len_minus1; - uint8_t log2_sao_offset_scale_luma; - uint8_t log2_sao_offset_scale_chroma; - uint8_t log2_max_transform_skip_block_size_minus2; - int8_t cb_qp_offset_list[6]; - int8_t cr_qp_offset_list[6]; -} VAPictureParameterBufferHEVCRext; - -/** - *\brief HEVC Decoding Picture Parameter Buffer Structure for - *Screen Content extension - * - *This structure conveys picture level HEVC Scc parameters - *and should be sent once per frame. This data structure should be sent - *together with VAPictureParameterBufferHEVC and VAPictureParameterBufferHEVCRext - *in a single buffer of \ref VAPictureParameterBufferHEVCExtension since each - *frame of HEVC SCC contains picture level parameters, picture level range - *extension parameters and picture level Scc parameters. They should be parsed - *together and the buffer type is same as \ref VAPictureParameterBufferHEVC. - * - */ -typedef struct _VAPictureParameterBufferHEVCScc { - union { - struct { - /** \brief HEVC Scc extension flags - * The following flags bears the same syntax and semantics as - * those defined in HEVC bit stream spec. - */ - /* indicates if intra block copy (IBC) is enabled or not. */ - uint32_t pps_curr_pic_ref_enabled_flag : 1; - /* indicates if Palette Mode is enabled or not. */ - uint32_t palette_mode_enabled_flag : 1; - /* controls the presence and inference of the use_integer_mv_flag syntax - * in slice segment header that specifies the resolution of motion - * vectors for inter prediction. - */ - uint32_t motion_vector_resolution_control_idc : 2; - /* specifies that the intra boundary filtering process is - * disabled or not for intra prediction. - */ - uint32_t intra_boundary_filtering_disabled_flag : 1; - /* specifies that an adaptive colour transform may be applied - * to the residual in the decoding process. - */ - uint32_t residual_adaptive_colour_transform_enabled_flag : 1; - - /* specifies that slice_act_y_qp_offset, slice_act_cb_qp_offset, - * slice_act_cr_qp_offset are present in the slice header - */ - uint32_t pps_slice_act_qp_offsets_present_flag : 1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 25; - } bits; - uint32_t value; - } screen_content_pic_fields; - - /* specifies the maximum allowed palette size. */ - uint8_t palette_max_size; - /* Correspond to HEVC syntax elements of the same names. - * It specifies the difference between the maximum allowed palette - * predictor size and the maximum allowed palette size. - * App needs to enforce that the variable PaletteMaxPredictorSize, - * which is derived as follows: - * PaletteMaxPredictorSize = palette_max_size + delta_palette_max_predictor_size - * should have a value range of [0..128]. - */ - uint8_t delta_palette_max_predictor_size; - /** \brief Size of initial palette predictor. - * It is derived from pps_num_palette_predictor_initializer or - * sps_num_palette_predictor_initializer_minus1. - * Details in HEVC SCC spec section 9.3.2.3. - */ - uint8_t predictor_palette_size; - /** \brief Palette predictor initializer. - * It is derived from pps_palette_predictor_initializers[][] - * or sps_palette_predictor_initializers[][]. - * Details in HEVC SCC spec section 9.3.2.3. - */ - uint16_t predictor_palette_entries[3][128]; - /* are used to determine the offsets that are applied to the - * quantization parameter values for the luma, Cb and Cr - * components, respectively. - */ - int8_t pps_act_y_qp_offset_plus5; - int8_t pps_act_cb_qp_offset_plus5; - int8_t pps_act_cr_qp_offset_plus3; -} VAPictureParameterBufferHEVCScc; - -/** - * \brief HEVC Decoding Picture Parameter Buffer Structure including Extensions - * - * This structure conveys picture level HEVC parameters including basic version 1 - * and range extension and screen content extension. - * The data buffer should be sent once per frame. - * - */ -typedef struct _VAPictureParameterBufferHEVCExtension { - /** \brief basic HEVC picture parameters data structure - */ - VAPictureParameterBufferHEVC base; - - /** \brief HEVC range extension picture parameters data structure - */ - VAPictureParameterBufferHEVCRext rext; - - /** \brief HEVC screen content picture parameters data structure - */ - VAPictureParameterBufferHEVCScc scc; -} VAPictureParameterBufferHEVCExtension; - -/** - * \brief HEVC Slice Parameter Buffer Structure For Long Format - * - * VASliceParameterBufferHEVC structure should be accompanied by a - * slice data buffer, which holds the whole raw slice NAL unit bit streams - * including start code prefix and emulation prevention bytes not removed. - * - * This structure conveys parameters related to slice segment header and should - * be sent once per slice. - * - * For short format, this data structure is not sent by application. - * - */ -typedef struct _VASliceParameterBufferHEVC { - /** @name Codec-independent Slice Parameter Buffer base. */ - - /**@{*/ - - /** \brief Number of bytes in the slice data buffer for this slice - * counting from and including NAL unit header. - */ - uint32_t slice_data_size; - /** \brief The offset to the NAL unit header for this slice */ - uint32_t slice_data_offset; - /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_XXX. */ - uint32_t slice_data_flag; - /** - * \brief Byte offset from NAL unit header to the begining of slice_data(). - * - * This byte offset is relative to and includes the NAL unit header - * and represents the number of bytes parsed in the slice_header() - * after the removal of any emulation prevention bytes in - * there. However, the slice data buffer passed to the hardware is - * the original bitstream, thus including any emulation prevention - * bytes. - */ - uint32_t slice_data_byte_offset; - /** HEVC syntax element. */ - uint32_t slice_segment_address; - /** \brief index into ReferenceFrames[] - * RefPicList[0][] corresponds to RefPicList0[] of HEVC variable. - * RefPicList[1][] corresponds to RefPicList1[] of HEVC variable. - * value range [0..14, 0xFF], where 0xFF indicates invalid entry. - */ - uint8_t RefPicList[2][15]; - union { - uint32_t value; - struct { - /** current slice is last slice of picture. */ - uint32_t LastSliceOfPic : 1; - /** HEVC syntax element. */ - uint32_t dependent_slice_segment_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_type : 2; - /** HEVC syntax element. */ - uint32_t color_plane_id : 2; - /** HEVC syntax element. */ - uint32_t slice_sao_luma_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_sao_chroma_flag : 1; - /** HEVC syntax element. */ - uint32_t mvd_l1_zero_flag : 1; - /** HEVC syntax element. */ - uint32_t cabac_init_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_temporal_mvp_enabled_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_deblocking_filter_disabled_flag : 1; - /** HEVC syntax element. */ - uint32_t collocated_from_l0_flag : 1; - /** HEVC syntax element. */ - uint32_t slice_loop_filter_across_slices_enabled_flag : 1; - uint32_t reserved : 18; - } fields; - } LongSliceFlags; - - /** HEVC syntax element. Collocated Reference Picture Index. - * index to RefPicList[0][] or RefPicList[1][]. - * when slice_temporal_mvp_enabled_flag equals 0, it should take value 0xFF. - * value range [0..14, 0xFF]. - */ - uint8_t collocated_ref_idx; - /** HEVC syntax element. - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l0_default_active_minus1. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** HEVC syntax element. - * if num_ref_idx_active_override_flag equals 0, host decoder should - * set its value to num_ref_idx_l1_default_active_minus1. - */ - uint8_t num_ref_idx_l1_active_minus1; - /** HEVC syntax element. */ - int8_t slice_qp_delta; - /** HEVC syntax element. */ - int8_t slice_cb_qp_offset; - /** HEVC syntax element. */ - int8_t slice_cr_qp_offset; - /** HEVC syntax element. */ - int8_t slice_beta_offset_div2; - /** HEVC syntax element. */ - int8_t slice_tc_offset_div2; - /** HEVC syntax element. */ - uint8_t luma_log2_weight_denom; - /** HEVC syntax element. */ - int8_t delta_chroma_log2_weight_denom; - /** HEVC syntax element. */ - int8_t delta_luma_weight_l0[15]; - /** HEVC syntax element. */ - int8_t luma_offset_l0[15]; - /** HEVC syntax element. */ - int8_t delta_chroma_weight_l0[15][2]; - /** corresponds to HEVC spec variable of the same name. */ - int8_t ChromaOffsetL0[15][2]; - /** HEVC syntax element. */ - int8_t delta_luma_weight_l1[15]; - /** HEVC syntax element. */ - int8_t luma_offset_l1[15]; - /** HEVC syntax element. */ - int8_t delta_chroma_weight_l1[15][2]; - /** corresponds to HEVC spec variable of the same name. */ - int8_t ChromaOffsetL1[15][2]; - /** HEVC syntax element. */ - uint8_t five_minus_max_num_merge_cand; - /** HEVC syntax element. */ - uint16_t num_entry_point_offsets; - /** HEVC syntax element. */ - uint16_t entry_offset_to_subset_array; - /** \brief Number of emulation prevention bytes in slice header. */ - uint16_t slice_data_num_emu_prevn_bytes; - /**@}*/ - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW - 2]; -} VASliceParameterBufferHEVC; - -/** - * \brief HEVC Extented Slice Parameter Buffer Structure For Long Format - * - * This data structure contains extension profiles (range extension and screen content). - * - * VASliceParameterBufferHEVCRext structure should be accompanied by a - * slice data buffer, which holds the whole raw slice NAL unit bit streams - * including start code prefix and emulation prevention bytes not removed. - * - * This structure conveys parameters related to slice segment header and should - * be sent once per slice with VASliceParameterBufferHEVC in a single buffer of - * \ref VASliceParameterBufferHEVCExtension and the buffer type is same as \ref - * VASliceParameterBufferHEVC. - * - * For short format, this data structure is not sent by application. - * - */ -typedef struct _VASliceParameterBufferHEVCRext { - /* below four parameters are used to replace data types of the - * corresponding parameters of those in \# VASliceParameterBufferHEVC. - */ - int16_t luma_offset_l0[15]; - int16_t ChromaOffsetL0[15][2]; - int16_t luma_offset_l1[15]; - int16_t ChromaOffsetL1[15][2]; - - union { - struct { - uint32_t cu_chroma_qp_offset_enabled_flag : 1; - uint32_t use_integer_mv_flag : 1; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved : 30; - } bits; - uint32_t value; - } slice_ext_flags; - - /** \brief Screen Content Extension parameters. - * data range [-12..12] - */ - int8_t slice_act_y_qp_offset; - int8_t slice_act_cb_qp_offset; - int8_t slice_act_cr_qp_offset; -} VASliceParameterBufferHEVCRext; - -/** - * \brief HEVC Decoding Slice Parameter Buffer Structure For Long Format including Extensions - * - * This data structure contains both baseline HEVC profiles (main, main10) - * and extension profiles (range extension and screen content). - * - * VASliceParameterBufferHEVCExtension structure should be accompanied by a - * slice data buffer, which holds the whole raw slice NAL unit bit streams - * including start code prefix and emulation prevention bytes not removed. - * - * This structure conveys parameters related to slice segment header and should - * be sent once per slice. For HEVC range extension and HEVC Scc decoding, - * application should parse both basic slice parameters and extented slice - * parameters into this buffer structure and sent it. - * - * For short format, this data structure is not sent by application. - * - */ -typedef struct _VASliceParameterBufferHEVCExtension { - /** \brief baseline HEVC slice parameters data structure */ - VASliceParameterBufferHEVC base; - - /** \brief extented HEVC slice parameters data structure */ - VASliceParameterBufferHEVCRext rext; -} VASliceParameterBufferHEVCExtension; - -/** - * \brief HEVC Inverse Quantization Matrix Buffer Structure - * - * This structure is sent once per frame, - * and only when scaling_list_enabled_flag = 1. - * When sps_scaling_list_data_present_flag = 0, app still - * needs to send in this structure with default matrix values. - * - * Matrix entries are in raster scan order which follows HEVC spec. - */ -typedef struct _VAIQMatrixBufferHEVC { - /** - * \brief scaling lists, - * corresponds to same HEVC spec syntax element - * ScalingList[ i ][ MatrixID ][ j ]. - * - * \brief 4x4 scaling, - * correspongs i = 0, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 15, inclusive. - */ - uint8_t ScalingList4x4[6][16]; - /** - * \brief 8x8 scaling, - * correspongs i = 1, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t ScalingList8x8[6][64]; - /** - * \brief 16x16 scaling, - * correspongs i = 2, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t ScalingList16x16[6][64]; - /** - * \brief 32x32 scaling, - * correspongs i = 3, MatrixID is in the range of 0 to 1, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t ScalingList32x32[2][64]; - /** - * \brief DC values of the 16x16 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 2 and matrixID in the range of 0 to 5, inclusive. - */ - uint8_t ScalingListDC16x16[6]; - /** - * \brief DC values of the 32x32 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 3 and matrixID in the range of 0 to 1, inclusive. - */ - uint8_t ScalingListDC32x32[2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferHEVC; - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_HEVC_H */ diff --git a/prebuilts/x86_64/include/va/va_dec_jpeg.h b/prebuilts/x86_64/include/va/va_dec_jpeg.h deleted file mode 100644 index 7bb26c2..0000000 --- a/prebuilts/x86_64/include/va/va_dec_jpeg.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_jpeg.h - * \brief The JPEG decoding API - * - * This file contains the \ref api_dec_jpeg "JPEG decoding API". - */ - -#ifndef VA_DEC_JPEG_H -#define VA_DEC_JPEG_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_dec_jpeg JPEG decoding API - * - * This JPEG decoding API supports Baseline profile only. - * - * @{ - */ - -/** - * \brief Picture parameter for JPEG decoding. - * - * This structure holds information from the frame header, along with - * definitions from additional segments. - */ -typedef struct _VAPictureParameterBufferJPEGBaseline { - /** \brief Picture width in pixels. */ - uint16_t picture_width; - /** \brief Picture height in pixels. */ - uint16_t picture_height; - - struct { - /** \brief Component identifier (Ci). */ - uint8_t component_id; - /** \brief Horizontal sampling factor (Hi). */ - uint8_t h_sampling_factor; - /** \brief Vertical sampling factor (Vi). */ - uint8_t v_sampling_factor; - /* \brief Quantization table selector (Tqi). */ - uint8_t quantiser_table_selector; - } components[255]; - /** \brief Number of components in frame (Nf). */ - uint8_t num_components; - - /** \brief Input color space 0: YUV, 1: RGB, 2: BGR, others: reserved */ - uint8_t color_space; - /** \brief Set to VA_ROTATION_* for a single rotation angle reported by VAConfigAttribDecJPEG. */ - uint32_t rotation; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 1]; -} VAPictureParameterBufferJPEGBaseline; - -/** - * \brief Quantization table for JPEG decoding. - * - * This structure holds the complete quantization tables. This is an - * aggregation of all quantization table (DQT) segments maintained by - * the application. i.e. up to 4 quantization tables are stored in - * there for baseline profile. - * - * The #load_quantization_table array can be used as a hint to notify - * the VA driver implementation about which table(s) actually changed - * since the last submission of this buffer. - * - * The #quantiser_table values are specified in zig-zag scan order. - */ -typedef struct _VAIQMatrixBufferJPEGBaseline { - /** \brief Specifies which #quantiser_table is valid. */ - uint8_t load_quantiser_table[4]; - /** \brief Quanziation tables indexed by table identifier (Tqi). */ - uint8_t quantiser_table[4][64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAIQMatrixBufferJPEGBaseline; - -/** - * \brief Slice parameter for JPEG decoding. - * - * This structure holds information from the scan header, along with - * definitions from additional segments. The associated slice data - * buffer holds all entropy coded segments (ECS) in the scan. - */ -typedef struct _VASliceParameterBufferJPEGBaseline { - /** @name Codec-independent Slice Parameter Buffer base. */ - /**@{*/ - /** \brief Number of bytes in the slice data buffer for this slice. */ - uint32_t slice_data_size; - /** \brief The offset to the first byte of the first MCU. */ - uint32_t slice_data_offset; - /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_xxx. */ - uint32_t slice_data_flag; - /**@}*/ - - /** \brief Scan horizontal position. */ - uint32_t slice_horizontal_position; - /** \brief Scan vertical position. */ - uint32_t slice_vertical_position; - - struct { - /** \brief Scan component selector (Csj). */ - uint8_t component_selector; - /** \brief DC entropy coding table selector (Tdj). */ - uint8_t dc_table_selector; - /** \brief AC entropy coding table selector (Taj). */ - uint8_t ac_table_selector; - } components[4]; - /** \brief Number of components in scan (Ns). */ - uint8_t num_components; - - /** \brief Restart interval definition (Ri). */ - uint16_t restart_interval; - /** \brief Number of MCUs in a scan. */ - uint32_t num_mcus; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VASliceParameterBufferJPEGBaseline; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_JPEG_H */ diff --git a/prebuilts/x86_64/include/va/va_dec_vp8.h b/prebuilts/x86_64/include/va/va_dec_vp8.h deleted file mode 100644 index 8004f7d..0000000 --- a/prebuilts/x86_64/include/va/va_dec_vp8.h +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_dec_vp.h - * \brief VP8 decoding API - * - * This file contains the \ref api_dec_vp8 "VP8 decoding API". - */ - -#ifndef VA_DEC_VP8_H -#define VA_DEC_VP8_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_dec_vp8 VP8 decoding API - * - * @{ - */ - -/** - * \brief VPX Bool Coder Context structure - * - * This common structure is defined for potential sharing by other VP formats - * - */ -typedef struct _VABoolCoderContextVPX { - /* partition 0 "range" */ - uint8_t range; - /* partition 0 "value" */ - uint8_t value; - /* - * 'partition 0 number of shifts before an output byte is available' - * it is the number of remaining bits in 'value' for decoding, range [0, 7]. - */ - - uint8_t count; -} VABoolCoderContextVPX; - -/** - * \brief VP8 Decoding Picture Parameter Buffer Structure - * - * This structure conveys frame level parameters and should be sent once - * per frame. - * - */ -typedef struct _VAPictureParameterBufferVP8 { - /* frame width in pixels */ - uint32_t frame_width; - /* frame height in pixels */ - uint32_t frame_height; - - /* specifies the "last" reference frame */ - VASurfaceID last_ref_frame; - /* specifies the "golden" reference frame */ - VASurfaceID golden_ref_frame; - /* specifies the "alternate" referrence frame */ - VASurfaceID alt_ref_frame; - /* specifies the out-of-loop deblocked frame, not used currently */ - VASurfaceID out_of_loop_frame; - - union { - struct { - /* same as key_frame in bitstream syntax, 0 means a key frame */ - uint32_t key_frame : 1; - /* same as version in bitstream syntax */ - uint32_t version : 3; - /* same as segmentation_enabled in bitstream syntax */ - uint32_t segmentation_enabled : 1; - /* same as update_mb_segmentation_map in bitstream syntax */ - uint32_t update_mb_segmentation_map : 1; - /* same as update_segment_feature_data in bitstream syntax */ - uint32_t update_segment_feature_data : 1; - /* same as filter_type in bitstream syntax */ - uint32_t filter_type : 1; - /* same as sharpness_level in bitstream syntax */ - uint32_t sharpness_level : 3; - /* same as loop_filter_adj_enable in bitstream syntax */ - uint32_t loop_filter_adj_enable : 1; - /* same as mode_ref_lf_delta_update in bitstream syntax */ - uint32_t mode_ref_lf_delta_update : 1; - /* same as sign_bias_golden in bitstream syntax */ - uint32_t sign_bias_golden : 1; - /* same as sign_bias_alternate in bitstream syntax */ - uint32_t sign_bias_alternate : 1; - /* same as mb_no_coeff_skip in bitstream syntax */ - uint32_t mb_no_coeff_skip : 1; - /* flag to indicate that loop filter should be disabled */ - uint32_t loop_filter_disable : 1; - } bits; - uint32_t value; - } pic_fields; - - /* - * probabilities of the segment_id decoding tree and same as - * mb_segment_tree_probs in the spec. - */ - uint8_t mb_segment_tree_probs[3]; - - /* Post-adjustment loop filter levels for the 4 segments */ - uint8_t loop_filter_level[4]; - /* loop filter deltas for reference frame based MB level adjustment */ - int8_t loop_filter_deltas_ref_frame[4]; - /* loop filter deltas for coding mode based MB level adjustment */ - int8_t loop_filter_deltas_mode[4]; - - /* same as prob_skip_false in bitstream syntax */ - uint8_t prob_skip_false; - /* same as prob_intra in bitstream syntax */ - uint8_t prob_intra; - /* same as prob_last in bitstream syntax */ - uint8_t prob_last; - /* same as prob_gf in bitstream syntax */ - uint8_t prob_gf; - - /* - * list of 4 probabilities of the luma intra prediction mode decoding - * tree and same as y_mode_probs in frame header - */ - uint8_t y_mode_probs[4]; - /* - * list of 3 probabilities of the chroma intra prediction mode decoding - * tree and same as uv_mode_probs in frame header - */ - uint8_t uv_mode_probs[3]; - /* - * updated mv decoding probabilities and same as mv_probs in - * frame header - */ - uint8_t mv_probs[2][19]; - - VABoolCoderContextVPX bool_coder_ctx; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAPictureParameterBufferVP8; - -/** - * \brief VP8 Slice Parameter Buffer Structure - * - * This structure conveys parameters related to data partitions and should be - * sent once per frame. Slice data buffer of VASliceDataBufferType is used - * to send the partition data. - * - */ -typedef struct _VASliceParameterBufferVP8 { - /* - * number of bytes in the slice data buffer for the partitions - */ - uint32_t slice_data_size; - /* - * offset to the first byte of partition data (control partition) - */ - uint32_t slice_data_offset; - /* - * see VA_SLICE_DATA_FLAG_XXX definitions - */ - uint32_t slice_data_flag; - /* - * offset to the first bit of MB from the first byte of partition data(slice_data_offset) - */ - uint32_t macroblock_offset; - - /* - * Partitions - * (1<lvl[seg][ref][mode] in VP9 code, - * where m is [ref], and n is [mode] in FilterLevel[m][n]. - */ - uint8_t filter_level[4][2]; - /** \brief Specifies per segment Luma AC quantization scale. - * Corresponding to y_dequant[qindex][1] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t luma_ac_quant_scale; - /** \brief Specifies per segment Luma DC quantization scale. - * Corresponding to y_dequant[qindex][0] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t luma_dc_quant_scale; - /** \brief Specifies per segment Chroma AC quantization scale. - * Corresponding to uv_dequant[qindex][1] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t chroma_ac_quant_scale; - /** \brief Specifies per segment Chroma DC quantization scale. - * Corresponding to uv_dequant[qindex][0] in vp9_mb_init_quantizer() - * function of VP9 code. - */ - int16_t chroma_dc_quant_scale; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VASegmentParameterVP9; - - - -/** - * \brief VP9 Slice Parameter Buffer Structure - * - * This structure conveys parameters related to segmentation data and should be - * sent once per frame. - * - * When segmentation is disabled, only SegParam[0] has valid values, - * all other entries should be populated with 0. - * Otherwise, all eight entries should be valid. - * - * Slice data buffer of VASliceDataBufferType is used - * to send the bitstream which should include whole or part of partition 0 - * (at least compressed header) to the end of frame. - * - */ -typedef struct _VASliceParameterBufferVP9 { - /** \brief The byte count of current frame in the bitstream buffer, - * starting from first byte of the buffer. - * It uses the name slice_data_size to be consitent with other codec, - * but actually means frame_data_size. - */ - uint32_t slice_data_size; - /** - * offset to the first byte of partition data (control partition) - */ - uint32_t slice_data_offset; - /** - * see VA_SLICE_DATA_FLAG_XXX definitions - */ - uint32_t slice_data_flag; - - /** - * \brief per segment information - */ - VASegmentParameterVP9 seg_param[8]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VASliceParameterBufferVP9; - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DEC_VP9_H */ diff --git a/prebuilts/x86_64/include/va/va_drm.h b/prebuilts/x86_64/include/va/va_drm.h deleted file mode 100644 index a39c5a2..0000000 --- a/prebuilts/x86_64/include/va/va_drm.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * va_drm.h - Raw DRM API - * - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_DRM_H -#define VA_DRM_H - -#include - -/** - * \file va_drm.h - * \brief The raw DRM API - * - * This file contains the \ref api_drm "Raw DRM API". - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Returns a VA display derived from the specified DRM connection. - * - * This function returns a (possibly cached) VA display from the - * specified DRM connection @fd. - * - * @param[in] fd the DRM connection descriptor - * @return the VA display - */ -VADisplay -vaGetDisplayDRM(int fd); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_DRM_H */ diff --git a/prebuilts/x86_64/include/va/va_drmcommon.h b/prebuilts/x86_64/include/va/va_drmcommon.h deleted file mode 100644 index 0bda458..0000000 --- a/prebuilts/x86_64/include/va/va_drmcommon.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - * va_drmcommon.h - Common utilities for DRM-based drivers - * - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_DRM_COMMON_H -#define VA_DRM_COMMON_H - -#include - - -/** \brief DRM authentication type. */ -enum { - /** \brief Disconnected. */ - VA_DRM_AUTH_NONE = 0, - /** - * \brief Connected. Authenticated with DRI1 protocol. - * - * @deprecated - * This is a deprecated authentication type. All DRI-based drivers have - * been migrated to use the DRI2 protocol. Newly written drivers shall - * use DRI2 protocol only, or a custom authentication means. e.g. opt - * for authenticating on the VA driver side, instead of libva side. - */ - VA_DRM_AUTH_DRI1 = 1, - /** - * \brief Connected. Authenticated with DRI2 protocol. - * - * This is only useful to VA/X11 drivers. The libva-x11 library provides - * a helper function VA_DRI2Authenticate() for authenticating the - * connection. However, DRI2 conformant drivers don't need to call that - * function since authentication happens on the libva side, implicitly. - */ - VA_DRM_AUTH_DRI2 = 2, - /** - * \brief Connected. Authenticated with some alternate raw protocol. - * - * This authentication mode is mainly used in non-VA/X11 drivers. - * Authentication happens through some alternative method, at the - * discretion of the VA driver implementation. - */ - VA_DRM_AUTH_CUSTOM = 3 -}; - -/** \brief Base DRM state. */ -struct drm_state { - /** \brief DRM connection descriptor. */ - int fd; - /** \brief DRM authentication type. */ - int auth_type; - /** \brief Reserved bytes for future use, must be zero */ - int va_reserved[8]; -}; - -/** \brief Kernel DRM buffer memory type. */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM 0x10000000 -/** \brief DRM PRIME memory type (old version) - * - * This supports only single objects with restricted memory layout. - * Used with VASurfaceAttribExternalBuffers. - */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME 0x20000000 -/** \brief DRM PRIME memory type - * - * Used with VADRMPRIMESurfaceDescriptor. - */ -#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 0x40000000 - -/** - * \brief External buffer descriptor for a DRM PRIME surface. - * - * For export, call vaExportSurfaceHandle() with mem_type set to - * VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 and pass a pointer to an - * instance of this structure to fill. - * If VA_EXPORT_SURFACE_SEPARATE_LAYERS is specified on export, each - * layer will contain exactly one plane. For example, an NV12 - * surface will be exported as two layers, one of DRM_FORMAT_R8 and - * one of DRM_FORMAT_GR88. - * If VA_EXPORT_SURFACE_COMPOSED_LAYERS is specified on export, - * there will be exactly one layer. - * - * For import, call vaCreateSurfaces() with the MemoryType attribute - * set to VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 and the - * ExternalBufferDescriptor attribute set to point to an array of - * num_surfaces instances of this structure. - * The number of planes which need to be provided for a given layer - * is dependent on both the format and the format modifier used for - * the objects containing it. For example, the format DRM_FORMAT_RGBA - * normally requires one plane, but with the format modifier - * I915_FORMAT_MOD_Y_TILED_CCS it requires two planes - the first - * being the main data plane and the second containing the color - * control surface. - * Note that a given driver may only support a subset of possible - * representations of a particular format. For example, it may only - * support NV12 surfaces when they are contained within a single DRM - * object, and therefore fail to create such surfaces if the two - * planes are in different DRM objects. - * Note that backend driver will retrieve the resource represent by fd, - * and a valid surface ID is generated. Backend driver will not close - * the file descriptor. Application should handle the release of the fd. - * releasing the fd will not impact the existence of the surface. - */ -typedef struct _VADRMPRIMESurfaceDescriptor { - /** Pixel format fourcc of the whole surface (VA_FOURCC_*). */ - uint32_t fourcc; - /** Width of the surface in pixels. */ - uint32_t width; - /** Height of the surface in pixels. */ - uint32_t height; - /** Number of distinct DRM objects making up the surface. */ - uint32_t num_objects; - /** Description of each object. */ - struct { - /** DRM PRIME file descriptor for this object. */ - int fd; - /** Total size of this object (may include regions which are - * not part of the surface). */ - uint32_t size; - /** Format modifier applied to this object. */ - uint64_t drm_format_modifier; - } objects[4]; - /** Number of layers making up the surface. */ - uint32_t num_layers; - /** Description of each layer in the surface. */ - struct { - /** DRM format fourcc of this layer (DRM_FOURCC_*). */ - uint32_t drm_format; - /** Number of planes in this layer. */ - uint32_t num_planes; - /** Index in the objects array of the object containing each - * plane. */ - uint32_t object_index[4]; - /** Offset within the object of each plane. */ - uint32_t offset[4]; - /** Pitch of each plane. */ - uint32_t pitch[4]; - } layers[4]; -} VADRMPRIMESurfaceDescriptor; - -/** - * \brief List of DRM format modifiers. - * - * To allocate surfaces with one of the modifiers specified in the array, call - * vaCreateSurfaces() with the VASurfaceAttribDRMFormatModifiers attribute set - * to point to an array of num_surfaces instances of this structure. The driver - * will select the optimal modifier in the list. - * - * DRM format modifiers are defined in drm_fourcc.h in the Linux kernel. - */ -typedef struct _VADRMFormatModifierList { - /** Number of modifiers. */ - uint32_t num_modifiers; - /** Array of modifiers. */ - uint64_t *modifiers; -} VADRMFormatModifierList; - - -#endif /* VA_DRM_COMMON_H */ diff --git a/prebuilts/x86_64/include/va/va_egl.h b/prebuilts/x86_64/include/va/va_egl.h deleted file mode 100644 index d6acb7d..0000000 --- a/prebuilts/x86_64/include/va/va_egl.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2007 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef _VA_EGL_H_ -#define _VA_EGL_H_ - -#warning The APIs / data structures included in this file are deprecated - -#endif /* _VA_EGL_H_ */ diff --git a/prebuilts/x86_64/include/va/va_enc_av1.h b/prebuilts/x86_64/include/va/va_enc_av1.h deleted file mode 100644 index 6a845b7..0000000 --- a/prebuilts/x86_64/include/va/va_enc_av1.h +++ /dev/null @@ -1,995 +0,0 @@ -/* - * Copyright (c) 2021 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_av1.h - * \brief AV1 encoding API - * - * This file contains the \ref api_enc_av1 "AV1 encoding API". - * - */ - -#ifndef VA_ENC_AV1_H -#define VA_ENC_AV1_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_enc_av1 AV1 encoding API - * - * This AV1 encoding API supports 8-bit/10bit 420 format only. - * - * @{ - */ - -/** \brief Attribute value for VAConfigAttribEncAV1. - * - * This attribute decribes the supported features of an AV1 - * encoder configuration. - * - * All of the field values in this attribute are VA_FEATURE_* values, - * indicating support for the corresponding feature. - * - */ -typedef union _VAConfigAttribValEncAV1 { - struct { - /** - * \brief Use 128x128 superblock. - * - * Allows setting use_128x128_superblock in the SPS. - */ - uint32_t support_128x128_superblock : 2; - /** - * \brief Intra filter. - * Allows setting enable_filter_intra in the SPS. - */ - uint32_t support_filter_intra : 2; - /** - * \brief Intra edge filter. - * Allows setting enable_intra_edge_filter in the SPS. - */ - uint32_t support_intra_edge_filter : 2; - /** - * \brief Interintra compound. - * Allows setting enable_interintra_compound in the SPS. - */ - uint32_t support_interintra_compound : 2; - /** - * \brief Masked compound. - * Allows setting enable_masked_compound in the SPS. - */ - uint32_t support_masked_compound : 2; - /** - * \brief Warped motion. - * Allows setting enable_warped_motion in the SPS. - */ - uint32_t support_warped_motion : 2; - /** - * \brief Palette mode. - * Allows setting palette_mode in the PPS. - */ - uint32_t support_palette_mode : 2; - /** - * \brief Dual filter. - * Allows setting enable_dual_filter in the SPS. - */ - uint32_t support_dual_filter : 2; - /** - * \brief Jnt compound. - * Allows setting enable_jnt_comp in the SPS. - */ - uint32_t support_jnt_comp : 2; - /** - * \brief Refrence frame mvs. - * Allows setting enable_ref_frame_mvs in the SPS. - */ - uint32_t support_ref_frame_mvs : 2; - /** - * \brief Super resolution. - * Allows setting enable_superres in the SPS. - */ - uint32_t support_superres : 2; - /** - * \brief Restoration. - * Allows setting enable_restoration in the SPS. - */ - uint32_t support_restoration : 2; - /** - * \brief Allow intraBC. - * Allows setting allow_intrabc in the PPS. - */ - uint32_t support_allow_intrabc : 2; - /** - * \brief Cdef channel strength. - * Allows setting cdef_y_strengths and cdef_uv_strengths in PPS. - */ - uint32_t support_cdef_channel_strength : 2; - /** \brief Reserved bits for future, must be zero. */ - uint32_t reserved : 4; - } bits; - uint32_t value; -} VAConfigAttribValEncAV1; - -/** \brief Attribute value for VAConfigAttribEncAV1Ext1. */ -typedef union _VAConfigAttribValEncAV1Ext1 { - struct { - /** - * \brief Fields indicate which types of interpolation filter are supported. - * (interpolation_filter & 0x01) == 1: eight_tap filter is supported, 0: not. - * (interpolation_filter & 0x02) == 1: eight_tap_smooth filter is supported, 0: not. - * (interpolation_filter & 0x04) == 1: eight_sharp filter is supported, 0: not. - * (interpolation_filter & 0x08) == 1: bilinear filter is supported, 0: not. - * (interpolation_filter & 0x10) == 1: switchable filter is supported, 0: not. - */ - uint32_t interpolation_filter : 5; - /** - * \brief Min segmentId block size accepted. - * Application need to send seg_id_block_size in PPS equal or larger than this value. - */ - uint32_t min_segid_block_size_accepted : 8; - /** - * \brief Type of segment feature supported. - * (segment_feature_support & 0x01) == 1: SEG_LVL_ALT_Q is supported, 0: not. - * (segment_feature_support & 0x02) == 1: SEG_LVL_ALT_LF_Y_V is supported, 0: not. - * (segment_feature_support & 0x04) == 1: SEG_LVL_ALT_LF_Y_H is supported, 0: not. - * (segment_feature_support & 0x08) == 1: SEG_LVL_ALT_LF_U is supported, 0: not. - * (segment_feature_support & 0x10) == 1: SEG_LVL_ALT_LF_V is supported, 0: not. - * (segment_feature_support & 0x20) == 1: SEG_LVL_REF_FRAME is supported, 0: not. - * (segment_feature_support & 0x40) == 1: SEG_LVL_SKIP is supported, 0: not. - * (segment_feature_support & 0x80) == 1: SEG_LVL_GLOBALMV is supported, 0: not. - */ - uint32_t segment_feature_support : 8; - /** \brief Reserved bits for future, must be zero. */ - uint32_t reserved : 11; - } bits; - uint32_t value; -} VAConfigAttribValEncAV1Ext1; - -/** \brief Attribute value for VAConfigAttribEncAV1Ext2. */ -typedef union _VAConfigAttribValEncAV1Ext2 { - struct { - /** - * \brief Tile size bytes minus1. - * Specify the number of bytes needed to code tile size supported. - * This value need to be set in frame header obu. - */ - uint32_t tile_size_bytes_minus1 : 2; - /** - * \brief Tile size bytes minus1. - * Specify the fixed number of bytes needed to code syntax obu_size. - */ - uint32_t obu_size_bytes_minus1 : 2; - /** - * \brief tx_mode supported. - * (tx_mode_support & 0x01) == 1: ONLY_4X4 is supported, 0: not. - * (tx_mode_support & 0x02) == 1: TX_MODE_LARGEST is supported, 0: not. - * (tx_mode_support & 0x04) == 1: TX_MODE_SELECT is supported, 0: not. - */ - uint32_t tx_mode_support : 3; - /** - * \brief Max tile num minus1. - * Specify the max number of tile supported by driver. - */ - uint32_t max_tile_num_minus1 : 13; - /** \brief Reserved bits for future, must be zero. */ - uint32_t reserved : 12; - } bits; - uint32_t value; -} VAConfigAttribValEncAV1Ext2; - -/** - * \brief Packed header types specific to AV1 encoding. - * - * Types of packed headers generally used for AV1 encoding. - * - */ -typedef enum { - /** - * \brief Packed Sequence Parameter Set (SPS). - * - * The corresponding packed header data buffer shall contain the - * complete sequence_header_obu() syntax element. - * - */ - VAEncPackedHeaderAV1_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - * The corresponding packed header data buffer shall contain the - * complete frame_header_obu() syntax element. - * - */ - VAEncPackedHeaderAV1_PPS = VAEncPackedHeaderPicture, -} VAEncPackedHeaderTypeAV1; - -/** - * \brief AV1 Encoding Sequence Parameter Buffer Structure. - * - * This structure conveys sequence level parameters. - * - */ -typedef struct _VAEncSequenceParameterBufferAV1 { - /** \brief AV1 profile setting. - * value range [0..2]. - */ - uint8_t seq_profile; - - /** \brief Level Setting of current operation point. - * value range [0..23]. - */ - uint8_t seq_level_idx; - - /** \brief Tier Setting of current operation point. - * value range [0..1]. - */ - uint8_t seq_tier; - - uint8_t reserved8b; - - /** \brief Period between intra_only frames. */ - uint32_t intra_period; - - /** \brief Period between I/P frames. - * For hierarchical structure, this is the anchor frame distance. - */ - uint32_t ip_period; - - /* \brief RC related fields. RC modes are set with VAConfigAttribRateControl. */ - /* For AV1, CBR implies HRD conformance and VBR implies no HRD conformance. */ - - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for CBR mode or - * initial max bitrate value for VBR mode in this sequence. - * i.e. if the encoder pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - - union { - struct { - /** \brief Still picture encoding, no inter frame referencing. */ - uint32_t still_picture : 1; - /** \brief Force using 128x128 or 64x64 Supper block */ - uint32_t use_128x128_superblock : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_filter_intra : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_intra_edge_filter : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_interintra_compound : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_masked_compound : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_warped_motion : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_dual_filter : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_order_hint : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_jnt_comp : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_ref_frame_mvs : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_superres : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_cdef : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t enable_restoration : 1; - /** \brief Sepcify number of bits for every channel(Y, U or V). */ - uint32_t bit_depth_minus8 : 3; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t subsampling_x : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t subsampling_y : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t reserved_bits : 13; - } bits; - uint32_t value; - } seq_fields; - - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..7]. - */ - uint8_t order_hint_bits_minus_1; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAEncSequenceParameterBufferAV1; - -#define VA_AV1_MAX_SEGMENTS 8 -#define VA_AV1_SEG_LVL_MAX 8 - -/** - * \brief Segment parameters - */ -typedef struct _VAEncSegParamAV1 { - union { - struct { - /** \brief Indicates if segmentation is enabled in the current frame. - * If disabled, all the below parameters in the structure should - * be set to 0, and ignored by driver. - */ - uint8_t segmentation_enabled : 1; - - /** - * When segmentation_enabled equals 1 and segment_number > 0, - * this parameter equals 1 indicates the segmentation map may - * come from application, and that "Segment map data buffer" - * should be provided with populated segment_id. If equals 0, - * segmentation map should be inherited from a reference frame - * (specified by \c primary_ref_frame). When segmentation_enabled or - * segment_number equals 0, this parameter should be set to 0 - * and ignored by driver. - */ - uint8_t segmentation_update_map : 1; - /** - * When segmentation_update_map equals 1, this parameter equaling 1 - * indicates segment id per block will be determined either from - * reference frame or from app. Equaling 0 means segment id per block - * will come from app. When segmentation_temporal_update equals 0, - * this parameter should be set to 0 and ignored by driver. - */ - uint8_t segmentation_temporal_update : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint8_t reserved : 5; - - } bits; - uint8_t value; - } seg_flags; - - /** - * If segmentation_enabled equals 1, this parameter indicates - * the number of segments conveyed through VAAPI. In this case, - * if segment_number equals 0, it will force the driver to determine - * how many segments would be created as well as the segmentation map - * to be generated. Also the driver shall write the segmentation_params() - * syntax in the uncompressed header at \c bit_offset_segmentation (back-annotation). - * In application, the rest parameters in this structure should be all - * set to 0 and ignored by driver. And app should NOT send the - * "Segment map data buffer". In packed uncompressed header - * bitstream, app should write syntax element segmentation_enabled - * as 0 and segmentation_params() should be only 1-bit-long. - * If segment_number > 0, and segmentation_update_map = 1, app should provide - * the "Segment map data buffer" and populate the rest of the - * current data structure. And that underline encoder would honor - * the segmentation parameters feature_data[0..segment_number-1][] - * and feature_mask[0..segment_number-1], etc. - * Value range [0..8]. - */ - uint8_t segment_number; - - /** \brief segment parameters. - * feature_data[][] is equivalent to variable FeatureData[][] in spec, - * which is after clip3() operation. - * Clip3(x, y, z) = (z y)? y : z); - * The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = { - * 255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, - * MAX_LOOP_FILTER, 7, 0, 0 } - */ - int16_t feature_data[VA_AV1_MAX_SEGMENTS][VA_AV1_SEG_LVL_MAX]; - - /** \brief Bit field to indicate each feature is enabled or not per - * segment_id. Each bit is the feature_id. - */ - uint8_t feature_mask[VA_AV1_MAX_SEGMENTS]; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSegParamAV1; - -/** - * \brief Segment map data buffer. - * - * This buffer is optional depending on the value of av1_segments.segmentation_enabled. - * If av1_segments.segmentation_enabled in the picture parameters equals 1, - * and RateControlMethod is not CQP and this surface is not provided by App, - * the encoder will determine the per block segmentation map. In this case, - * App should not provide the segmentation parameter data structure - * in frame header as well. If av1_segments.segmentation_enabled equals 1 - * and the segmentation map buffer is provided, app should embed the - * segmentation info in frame header, populate the VAEncSegParamAV1 structure with - * #VAEncMacroblockMapBufferType and the driver as well as the underline encoder - * should honor what is given by the app. - */ -typedef struct _VAEncSegMapBufferAV1 { - /** \brief Segment map data size. */ - uint32_t segmentMapDataSize; - - /** - * \brief Segment map. - * Size of this map is indicated by \ref segmentMapDataSize and each element - * in this map contains the segment id of a particular block. - * The element is indexed by raster scan order. - * The value of each entry should be in the range [0..7], inclusive. - */ - uint8_t *pSegmentMap; -} VAEncSegMapBufferAV1; - -typedef enum { - /** \brief Identity transformation, 0-parameter. */ - VAAV1EncTransformationIdentity = 0, - /** \brief Translational motion, 2-parameter. */ - VAAV1EncTransformationTranslation = 1, - /** \brief Simplified affine with rotation + zoom only, 4-parameter. */ - VAAV1EncTransformationRotzoom = 2, - /** \brief Affine, 6-parameter. */ - VAAV1EncTransformationAffine = 3, - /** \brief Transformation count. */ - VAAV1EncTransformationCount -} VAEncTransformationTypeAV1; - -typedef struct _VAEncWarpedMotionParamsAV1{ - - /** \brief Specify the type of warped motion. */ - VAEncTransformationTypeAV1 wmtype; - - /** \brief Specify warp motion parameters. - * wm.wmmat[] corresponds to gm_params[][] in spec. - * Details in AV1 spec section 5.9.24 or refer to libaom code - * https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c. - */ - int32_t wmmat[8]; - - /** \brief Valid or invalid on affine set. */ - uint8_t invalid; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; - -} VAEncWarpedMotionParamsAV1; - -/** - * \brief Reference frame control. - * - * Suggest which frame to be used as reference along with preferred search order. - * - * search_idx#: index into ref_frame_idx[] to indicate that frame will be included - * in the reference list if value in range [1..7]. Invalid when value is 0. - * The order of the search_idx# indicates the preferred search order. - * - */ -typedef union { - struct - { - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx0 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx1 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx2 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx3 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx4 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx5 : 3; - /** - * \brief Value used as index into ref_frame_idx[] to indicate that frame - * will be included in the reference list. - * valid value range: [1..7], invalid when value is 0. - */ - uint32_t search_idx6 : 3; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t Reserved : 11; - } fields; - uint32_t value; -} VARefFrameCtrlAV1; - -/** - * \brief AV1 Encoding Picture Parameter Buffer Structure. - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferAV1 -{ - /** \brief AV1 encoder may support SupRes and dynamic scaling function. - * For SupRes, underline encoder is responsible to do downscaling. - * For dynamic scaling, app should provide the scaled raw source. - */ - /** \brief Raw source frame width in pixels. */ - uint16_t frame_width_minus_1; - /** \brief Raw source frame height in pixels. */ - uint16_t frame_height_minus_1; - - /** \brief Surface to store reconstructed frame, not used for enc only case. */ - VASurfaceID reconstructed_frame; - - /** \brief Buffer to store coded data. */ - VABufferID coded_buf; - - /** \brief Reference frame buffers. - * Each entry of the array specifies the surface index of the picture - * that is referred by current picture or will be referred by any future - * picture. The valid entries take value from 0 to 127, inclusive. - * Non-valid entries, those do not point to pictures which are referred - * by current picture or future pictures, should take value 0xFF. - * Other values are not allowed. - * - * Application should update this array based on the refreshing - * information expected. - */ - VASurfaceID reference_frames[8]; - - /** \brief Reference index list. - * Contains a list of indices into refernce_frames[]. - * Indice with refernce frames range: [LAST_FRAME - LAST_FRAME, - * LAST2_FRAME - LAST_FRAME, ..., ALTREF2_FRAME - LAST_FRAME]. - * #define LAST_FRAME 1 - * #define LAST2_FRAME 2 - * #define LAST3_FRAME 3 - * #define GOLDEN_FRAME 4 - * #define BWDREF_FRAME 5 - * #define ALTREF_FRAME 6 - * #define ALTREF2_FRAME 7 - * value range [0..7]. - */ - uint8_t ref_frame_idx[7]; - - uint8_t reserved8bits0; - - /** \brief primary reference frame. - * Index into reference_frames[] - * segment id map, context table, etc. come from the reference - * frame pointed by this index. - * value range [0..7]. - */ - uint8_t primary_ref_frame; - - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint8_t order_hint; - - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint8_t refresh_frame_flags; - - uint8_t reserved8bits1; - - /** \brief Suggest which frames to be used as references. - * see struct #VARefFrameCtrl for details. - */ - VARefFrameCtrlAV1 ref_frame_ctrl_l0; - VARefFrameCtrlAV1 ref_frame_ctrl_l1; - - union { - struct { - /** \brief frame type. - * 0: key_frame. - * 1: inter_frame. - * 2: intra_only frame. - * 3: switch_frame (app needs to set error_resilient_mode = 1, - * refresh_frame_flags, etc approperately.). - */ - uint32_t frame_type : 2; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t error_resilient_mode : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t disable_cdf_update : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t use_superres : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t allow_high_precision_mv : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t use_ref_frame_mvs : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t disable_frame_end_update_cdf : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t reduced_tx_set : 1; - - /** \brief For single tile group, app may choose to use one frame obu - * to replace one frame header obu + one tile group obu. - * Invalid if num_tile_groups_minus1 > 0. - */ - uint32_t enable_frame_obu : 1; - - /** \brief Indicate the current frame will be used as a long term reference. */ - uint32_t long_term_reference : 1; - /** \brief If the encoded frame will not be referred by other frames, - * its recon may not be generated in order to save memory bandwidth. - */ - uint32_t disable_frame_recon : 1; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint32_t allow_intrabc : 1; - /** \brief Equal to 1 indicates that intra blocks may use palette encoding. - * Otherwise disable palette encoding. - */ - uint32_t palette_mode_enable : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t reserved : 18; - } bits; - uint32_t value; - } picture_flags; - - /** \brief Block size for each Segment ID in Segment Map. - * 0: 16x16 block size, default value; - * 1: 32x32 block size; - * 2: 64x64 block size; - * 3: 8x8 block size. - */ - uint8_t seg_id_block_size; - - /** \brief Number of tile groups minus 1. - * value range [0..255]. - */ - uint8_t num_tile_groups_minus1; - - /** \brief Temporal id of the frame.*/ - uint8_t temporal_id; - - /** \brief Deblock filter parameters. - * value range [0..63]. - */ - uint8_t filter_level[2]; - uint8_t filter_level_u; - uint8_t filter_level_v; - - union { - struct { - /** \brief Sharpness level for deblock filter. - * value range [0..7]. - */ - uint8_t sharpness_level : 3; - uint8_t mode_ref_delta_enabled : 1; - uint8_t mode_ref_delta_update : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint8_t reserved : 3; - } bits; - uint8_t value; - } loop_filter_flags; - - /** \brief Super resolution scale denominator. - * value range [9..16]. - */ - uint8_t superres_scale_denominator; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint8_t interpolation_filter; - - /** \brief Loop filter ref deltas. - * value range [-63..63]. - */ - int8_t ref_deltas[8]; - - /** \brief Loop filter mode deltas. - * value range [-63..63]. - */ - int8_t mode_deltas[2]; - - /** \brief Quantization params. */ - uint8_t base_qindex; - int8_t y_dc_delta_q; - int8_t u_dc_delta_q; - int8_t u_ac_delta_q; - int8_t v_dc_delta_q; - int8_t v_ac_delta_q; - - /** \brief Min value for base q index for BRC. - * value range [1..255]. - */ - uint8_t min_base_qindex; - - /** \brief Max value for base q index for BRC. - * value range [1..255]. - */ - uint8_t max_base_qindex; - - /** \brief Quantization matrix. */ - union { - struct { - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint16_t using_qmatrix : 1; - /** \brief Following parameters only valid when using_qmatrix == 1. */ - uint16_t qm_y : 4; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint16_t qm_u : 4; - /** \brief Corresponds to AV1 syntax element of the same name. */ - uint16_t qm_v : 4; - /** \brief Reserved bytes for future use, must be zero. */ - uint16_t reserved : 3; - } bits; - uint16_t value; - } qmatrix_flags; - - uint16_t reserved16bits1; - - union { - struct { - /** \brief Specify whether quantizer index delta values are present. - * value range [0..1]. */ - uint32_t delta_q_present : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. */ - uint32_t delta_q_res : 2; - - /** \brief Specify whether loop filter delta values are present. - * value range [0..1]. */ - uint32_t delta_lf_present : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. */ - uint32_t delta_lf_res : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. */ - uint32_t delta_lf_multi : 1; - - /** \brief Corresponds to AV1 syntax element of the same name. - * 0: ONLY_4X4; - * 1: TX_MODE_LARGEST; - * 2: TX_MODE_SELECT; - * 3: Invalid. - */ - uint32_t tx_mode : 2; - - /** \brief Indicates whether to use single or compound reference prediction. - * 0: SINGLE_REFERENCE; - * 1: COMPOUND_REFERENCE; - * 2: REFERENCE_MODE_SELECT. - * 3: Invalid. - * - * Value 2 means driver make decision to use single reference or compound reference. - */ - uint32_t reference_mode : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint32_t skip_mode_present : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t reserved : 20; - } bits; - uint32_t value; - } mode_control_flags; - - /** \brief Segmentation parameters. */ - VAEncSegParamAV1 segments; - - /** \brief Number of tile columns. */ - uint8_t tile_cols; - /** \brief Number of tile rows. */ - uint8_t tile_rows; - - uint16_t reserved16bits2; - - /** \brief The last tile column or row size needs to be derived. */ - uint16_t width_in_sbs_minus_1[63]; - uint16_t height_in_sbs_minus_1[63]; - - /** \brief specify which tile to use for the CDF update. - * value range [0..127]*/ - uint16_t context_update_tile_id; - - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. - */ - uint8_t cdef_damping_minus_3; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..3]. - */ - uint8_t cdef_bits; - /** \brief CDEF Y strengths. - * value range [0..63]*/ - uint8_t cdef_y_strengths[8]; - /** \brief CDEF UV strengths. - * value range [0..63]*/ - uint8_t cdef_uv_strengths[8]; - - union { - struct { - /** \brief Restoration type for Y frame. - * value range [0..3]. - */ - uint16_t yframe_restoration_type : 2; - /** \brief Restoration type for Cb frame. - * value range [0..3]. - */ - uint16_t cbframe_restoration_type : 2; - /** \brief Restoration type for Cr frame. - * value range [0..3]. - */ - uint16_t crframe_restoration_type : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..2]. - */ - uint16_t lr_unit_shift : 2; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint16_t lr_uv_shift : 1; - /** \brief Reserved bytes for future use, must be zero. */ - uint16_t reserved : 7; - } bits; - uint16_t value; - } loop_restoration_flags; - - /** \brief Global motion. */ - VAEncWarpedMotionParamsAV1 wm[7]; - - /** - * Offset in bits for syntax base_q_idx in packed frame header bit stream - * from the start of the packed header data. - * In BRC mode, this parameter should be set and driver will update base_q_idx in - * uncompressed header according to this offset. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_qindex; - /** - * Offset in bits for syntax segmentation_enabled of frame header OBU - * in packed frame header bit stream from the start of the packed header data. - * Valid only in auto segmentation mode. Other than that, this parameter - * should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_segmentation; - /** - * Offset in bits for syntax loop_filter_params() in packed frame - * header bit stream from the start of the packed header data. - * In BRC mode, this parameter should be set and driver will update filter params - * in packed frame header according to this offset. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_loopfilter_params; - /** - * In BRC mode, underline encoder should generate the approperiate - * CDEF values and write back into uncompressed header. And app - * should provide default CDEF values in packed header. This parameter - * should point to the starting bit of cdef_params() syntax structure - * in packed header. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t bit_offset_cdef_params; - /** - * In BRC mode, this parameter indicates the actual bit usage of - * cdef_params() syntax structure in packed uncompressed header. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t size_in_bits_cdef_params; - - /** - * Offset in bytes for syntax obu_size of frame header OBU in packed - * frame header bit stream from the start of the packed header. The frame - * header OBU size depends on the encoded tile sizes. It applies to both - * Frame Header OBU and Frame OBU if obu_size needs to be updated by - * underline encoder. Otherwise, app can set it to 0 and ignored by driver. - * - * In BRC mode, obu_size needs to be updated and this parameter should be set. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t byte_offset_frame_hdr_obu_size; - - /** - * Frame header OBU bit stream size in bits. The frame header obu packed bit - * stream contains an obu header, a 4-byte long obu_size field, frame_header_obu() - * syntax chain, and a trailing bit if not inside a frame obu. If \c enable_frame_obu == 1, - * the value should include and up to the last bit of frame_header_obu() and - * excluding the bits generated by byte_alignment(). If \c enable_frame_obu == 0, - * the value should include and up to the trailing bit at the end of the frame - * header obu. The size will be used by encoder to calculate the final frame - * header size after bit shifting due to auto segmentation. - * In CQP mode, this parameter should be set to 0 and ignored by driver. - */ - uint32_t size_in_bits_frame_hdr_obu; - - /** \brief Tile Group OBU header */ - union { - struct { - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint8_t obu_extension_flag : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..1]. - */ - uint8_t obu_has_size_field : 1; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..7]. - */ - uint8_t temporal_id : 3; - /** \brief Corresponds to AV1 syntax element of the same name. - * value range [0..2]. - */ - uint8_t spatial_id : 2; - /** \brief Reserved bytes for future use, must be zero. */ - uint8_t reserved : 1; - } bits; - uint8_t value; - } tile_group_obu_hdr_info; - - /** \brief The number of frames skipped prior to the current frame. - * It includes only the skipped frames that were not counted before. - * App may generate the "show_existing_frame" short frame header OBUs - * and send to driver with the next frame. Default value 0. - */ - uint8_t number_skip_frames; - - uint16_t reserved16bits3; - - /** \brief Indicates the application forced frame size change in bytes. - * When the value is positive, the frame size is reduced. Otherwise, the frame - * size increases. The parameter can be used when application skips frames with - * setting of NumSkipFrames. And application can also use it for other scenarios - * such as inserting "show_existing_frame" at very end of the sequence. - */ - int32_t skip_frames_reduced_size; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAEncPictureParameterBufferAV1; - -/** - * \brief Tile Group Buffer. - */ -typedef struct _VAEncTileGroupBufferAV1 { - /** \brief Tile group start location. - * The position of the first tile in current tile group - * in raster scan order across the frame. - * value range [0..127]. - */ - uint8_t tg_start; - /** \brief Tile group end location. - * The position of the last tile in current tile group - * in raster scan order across the frame. - * value range [0..127]. - */ - uint8_t tg_end; - - /** \brief Reserved bytes for future use, must be zero. */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncTileGroupBufferAV1; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_AV1_H */ diff --git a/prebuilts/x86_64/include/va/va_enc_h264.h b/prebuilts/x86_64/include/va/va_enc_h264.h deleted file mode 100644 index 46a6704..0000000 --- a/prebuilts/x86_64/include/va/va_enc_h264.h +++ /dev/null @@ -1,659 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_h264.h - * \brief The H.264 encoding API - * - * This file contains the \ref api_enc_h264 "H.264 encoding API". - */ - -#ifndef VA_ENC_H264_H -#define VA_ENC_H264_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_h264 H.264 encoding API - * - * @{ - */ - -/** - * @name Picture flags - * - * Those flags flags are meant to signal when a picture marks the end - * of a sequence, a stream, or even both at once. - * - * @{ - */ -/** - * \brief Marks the last picture in the sequence. - * - * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame. - */ -#define H264_LAST_PICTURE_EOSEQ 0x01 -/** - * \brief Marks the last picture in the stream. - * - * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame. - */ -#define H264_LAST_PICTURE_EOSTREAM 0x02 -/**@}*/ - -/** - * \brief Packed header types specific to H.264 encoding. - * - * Types of packed headers generally used for H.264 encoding. Each - * associated packed header data buffer shall contain the start code - * prefix 0x000001 followed by the complete NAL unit, thus also - * including the \c nal_unit_type. - * - * Note: the start code prefix can contain an arbitrary number of leading - * zeros. The driver will skip them for emulation prevention bytes insertion, - * if necessary. - */ -typedef enum { - /** - * \brief Packed Sequence Parameter Set (SPS). - * - * The corresponding packed header data buffer shall contain the - * complete seq_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 7. - */ - VAEncPackedHeaderH264_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - * The corresponding packed header data buffer shall contain the - * complete pic_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 8. - */ - VAEncPackedHeaderH264_PPS = VAEncPackedHeaderPicture, - /** - * \brief Packed slice header. - * - * The corresponding packed header data buffer shall contain the - * \c slice_header() syntax element only, along with any start - * code prefix and NAL unit type preceeding it. i.e. this means - * that the buffer does not contain any of the \c slice_data() or - * the \c rbsp_slice_trailing_bits(). - * - * Note: packed \c nal_unit_type shall be equal to 1 (non-IDR - * picture), or 5 (IDR picture). - */ - VAEncPackedHeaderH264_Slice = VAEncPackedHeaderSlice, - /** - * \brief Packed Supplemental Enhancement Information (SEI). - * - * The corresponding packed header data buffer shall contain the - * complete sei_rbsp() syntax element, thus including several - * sei_message() elements if necessary. - * - * Note: packed \c nal_unit_type shall be equal to 6. - * - * @deprecated - * This is a deprecated packed header flag, All applications can use - * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed - * SEI header data buffer to the driver - */ - VAEncPackedHeaderH264_SEI va_deprecated_enum = (0x80000000 | 1), -} VAEncPackedHeaderTypeH264; - -/** - * \brief Sequence parameter for H.264 encoding in baseline, main & high - * profiles. - * - * This structure holds information for \c seq_parameter_set_data() as - * defined by the H.264 specification. - * - * If packed sequence headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c seq_scaling_matrix_present_flag is set to \c 1, then a - * #VAIQMatrixBufferH264 buffer shall also be provided within the same - * \c vaRenderPicture() call as this sequence parameter buffer. - */ -typedef struct _VAEncSequenceParameterBufferH264 { - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t seq_parameter_set_id; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t level_idc; - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between IDR frames. */ - uint32_t intra_idr_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t max_num_ref_frames; - /** \brief Picture width in macroblocks. */ - uint16_t picture_width_in_mbs; - /** \brief Picture height in macroblocks. */ - uint16_t picture_height_in_mbs; - - union { - struct { - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t chroma_format_idc : 2; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_mbs_only_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t mb_adaptive_frame_field_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t seq_scaling_matrix_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t direct_8x8_inference_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t log2_max_frame_num_minus4 : 4; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t pic_order_cnt_type : 2; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t log2_max_pic_order_cnt_lsb_minus4 : 4; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t delta_pic_order_always_zero_flag : 1; - } bits; - uint32_t value; - } seq_fields; - - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t bit_depth_luma_minus8; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t bit_depth_chroma_minus8; - - /** if pic_order_cnt_type == 1 */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t num_ref_frames_in_pic_order_cnt_cycle; - /** \brief Same as the H.264 bitstream syntax element. */ - int32_t offset_for_non_ref_pic; - /** \brief Same as the H.264 bitstream syntax element. */ - int32_t offset_for_top_to_bottom_field; - /** \brief Same as the H.264 bitstream syntax element. */ - int32_t offset_for_ref_frame[256]; - /**@}*/ - - /** @name Cropping (optional) */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t frame_cropping_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_left_offset; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_right_offset; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_top_offset; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t frame_crop_bottom_offset; - /**@}*/ - - /** @name VUI parameters (optional) */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t vui_parameters_present_flag; - union { - struct { - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t aspect_ratio_info_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t timing_info_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t bitstream_restriction_flag : 1; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_horizontal : 5; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_vertical : 5; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t fixed_frame_rate_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t low_delay_hrd_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t motion_vectors_over_pic_boundaries_flag: 1; - /** \brief Reserved for future use, must be zero */ - uint32_t reserved : 16; - } bits; - uint32_t value; - } vui_fields; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t aspect_ratio_idc; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t sar_width; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t sar_height; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t num_units_in_tick; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t time_scale; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - /**@}*/ -} VAEncSequenceParameterBufferH264; - -/** - * \brief Picture parameter for H.264 encoding in baseline, main & high - * profiles. - * - * This structure holds information for \c pic_parameter_set_rbsp() as - * defined by the H.264 specification. - * - * If packed picture headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c pic_scaling_matrix_present_flag is set to \c 1, then a - * #VAIQMatrixBufferH264 buffer shall also be provided within the same - * \c vaRenderPicture() call as this picture parameter buffer. - */ -typedef struct _VAEncPictureParameterBufferH264 { - /** - * \brief Information about the picture to be encoded. - * - * See #VAPictureH264 for further description of each field. - * Note that CurrPic.picture_id represents the reconstructed - * (decoded) picture. User provides a scratch VA surface ID here. - */ - VAPictureH264 CurrPic; - /** - * \brief Decoded Picture Buffer (DPB). - * - * This array represents the list of reconstructed (decoded) - * frames used as reference. It is important to keep track of - * reconstructed frames so that they can be used later on as - * reference for P or B-frames encoding. - */ - VAPictureH264 ReferenceFrames[16]; - /** - * \brief Output encoded bitstream. - * - * \ref coded_buf has type #VAEncCodedBufferType. It should be - * large enough to hold the compressed NAL slice and possibly SPS - * and PPS NAL units. - */ - VABufferID coded_buf; - - /** \brief The picture parameter set referred to in the slice header. */ - uint8_t pic_parameter_set_id; - /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */ - uint8_t seq_parameter_set_id; - - /** - * \brief OR'd flags describing whether the picture is the last one or not. - * - * This fields holds 0 if the picture to be encoded is not the last - * one in the stream or sequence. Otherwise, it is a combination of - * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM. - */ - uint8_t last_picture; - - /** \brief The picture identifier. - * Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive. - */ - uint16_t frame_num; - - /** \brief \c pic_init_qp_minus26 + 26. */ - uint8_t pic_init_qp; - /** \brief Maximum reference index for reference picture list 0. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** \brief Maximum reference index for reference picture list 1. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l1_active_minus1; - - /** \brief Range: -12 to 12, inclusive. */ - int8_t chroma_qp_index_offset; - /** \brief Range: -12 to 12, inclusive. */ - int8_t second_chroma_qp_index_offset; - - union { - struct { - /** \brief Is picture an IDR picture? */ - uint32_t idr_pic_flag : 1; - /** \brief Is picture a reference picture? */ - uint32_t reference_pic_flag : 2; - /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */ - uint32_t entropy_coding_mode_flag : 1; - /** \brief Is weighted prediction applied to P slices? */ - uint32_t weighted_pred_flag : 1; - /** \brief Range: 0 to 2, inclusive. */ - uint32_t weighted_bipred_idc : 2; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t constrained_intra_pred_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t transform_8x8_mode_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t deblocking_filter_control_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t redundant_pic_cnt_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t pic_order_present_flag : 1; - /** \brief Same as the H.264 bitstream syntax element. */ - uint32_t pic_scaling_matrix_present_flag : 1; - } bits; - uint32_t value; - } pic_fields; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferH264; - -typedef struct _VAEncQPBufferH264 { - /* - * \brief This structure holds QP per 16x16 macroblock. Buffer size shall be - * sufficient to fit the slice or frame to be encoded depending on if it is a - * slice level or frame level encoding. - */ - uint8_t qp; -} VAEncQPBufferH264; - -/** - * \brief Slice parameter for H.264 encoding in baseline, main & high profiles. - * - * This structure holds information for \c - * slice_layer_without_partitioning_rbsp() as defined by the H.264 - * specification. - * - * If packed slice headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSlice ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If per-macroblock encoder configuration is needed, \c macroblock_info - * references a buffer of type #VAEncMacroblockParameterBufferH264. This - * buffer is not passed to vaRenderPicture() and it can be re-used - * without re-allocating the whole buffer. - */ -typedef struct _VAEncSliceParameterBufferH264 { - /** \brief Starting MB address for this slice. */ - uint32_t macroblock_address; - /** \brief Number of macroblocks in this slice. */ - uint32_t num_macroblocks; - /** - * \brief Per-MB encoder configuration buffer, or \c VA_INVALID_ID. - * - * If per-MB encoder configuration is needed, then \ref macroblock_info - * references a buffer of type #VAEncMacroblockParameterBufferH264 - * (\c VAEncMacroblockParameterBufferType). Otherwise, buffer id - * is set to \c VA_INVALID_ID and per-MB configuration is derived - * from this slice parameter. - * - * The \c macroblock_info buffer must hold \ref num_macroblocks - * elements. - */ - VABufferID macroblock_info; - /** \brief Slice type. - * Range: 0..2, 5..7, i.e. no switching slices. - */ - uint8_t slice_type; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t pic_parameter_set_id; - /** \brief Same as the H.264 bitstream syntax element. */ - uint16_t idr_pic_id; - - /** @name If pic_order_cnt_type == 0 */ - /**@{*/ - /** \brief The picture order count modulo MaxPicOrderCntLsb. */ - uint16_t pic_order_cnt_lsb; - /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */ - int32_t delta_pic_order_cnt_bottom; - /**@}*/ - /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */ - /**@{*/ - /** \brief [0]: top, [1]: bottom. */ - int32_t delta_pic_order_cnt[2]; - /**@}*/ - - /** @name If slice_type == B */ - /**@{*/ - uint8_t direct_spatial_mv_pred_flag; - /**@}*/ - - /** @name If slice_type == P */ - /**@{*/ - /** \brief Specifies if - * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or - * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are - * overriden by the values for this slice. - */ - uint8_t num_ref_idx_active_override_flag; - /** \brief Maximum reference index for reference picture list 0. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** \brief Maximum reference index for reference picture list 1. - * Range: 0 to 31, inclusive. - */ - uint8_t num_ref_idx_l1_active_minus1; - /** \brief Reference picture list 0 (for P slices). */ - VAPictureH264 RefPicList0[32]; - /** \brief Reference picture list 1 (for B slices). */ - VAPictureH264 RefPicList1[32]; - /**@}*/ - - /** @name pred_weight_table() */ - /**@{*/ - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t luma_log2_weight_denom; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t chroma_log2_weight_denom; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t luma_weight_l0_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_weight_l0[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_offset_l0[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t chroma_weight_l0_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_weight_l0[32][2]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_offset_l0[32][2]; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t luma_weight_l1_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_weight_l1[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short luma_offset_l1[32]; - /** \brief Same as the H.264 bitstream syntax element. */ - uint8_t chroma_weight_l1_flag; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_weight_l1[32][2]; - /** \brief Same as the H.264 bitstream syntax element. */ - signed short chroma_offset_l1[32][2]; - /**@}*/ - - /** \brief Range: 0 to 2, inclusive. */ - uint8_t cabac_init_idc; - /** \brief Same as the H.264 bitstream syntax element. */ - int8_t slice_qp_delta; - /** @name If deblocking_filter_control_present_flag */ - /**@{*/ - /** \brief Range: 0 to 2, inclusive. */ - uint8_t disable_deblocking_filter_idc; - /** \brief Same as the H.264 bitstream syntax element. */ - int8_t slice_alpha_c0_offset_div2; - /** \brief Same as the H.264 bitstream syntax element. */ - int8_t slice_beta_offset_div2; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; - /**@}*/ -} VAEncSliceParameterBufferH264; - -/** - * @name Macroblock neighbour availability bits - * - * \anchor api_enc_h264_mb_pred_avail_bits - * Definitions for macroblock neighbour availability bits used in - * intra prediction mode (non MBAFF only). - * - * @{ - */ -/** \brief References macroblock in the top-left corner. */ -#define VA_MB_PRED_AVAIL_TOP_LEFT (1 << 2) -/** \brief References macroblock above the current macroblock. */ -#define VA_MB_PRED_AVAIL_TOP (1 << 4) -/** \brief References macroblock in the top-right corner. */ -#define VA_MB_PRED_AVAIL_TOP_RIGHT (1 << 3) -/** \brief References macroblock on the left of the current macroblock. */ -#define VA_MB_PRED_AVAIL_LEFT (1 << 6) -/**@}*/ - -/** - * \brief Macroblock parameter for H.264 encoding in baseline, main & high - * profiles. - * - * This structure holds per-macroblock information. The buffer must be - * allocated with as many elements (macroblocks) as necessary to fit - * the slice to be encoded. Besides, the per-macroblock records must - * be written in a strict raster order and with no gap. i.e. every - * macroblock, regardless of its type, shall have an entry. - */ -typedef struct _VAEncMacroblockParameterBufferH264 { - /** - * \brief Quantization parameter. - * - * Requested quantization parameter. Range: 0 to 51, inclusive. - * If \ref qp is set to 0xff, then the actual value is derived - * from the slice-level value: \c pic_init_qp + \c slice_qp_delta. - */ - uint8_t qp; - - union { - /** @name Data for intra macroblock */ - /**@{*/ - union { - struct { - /** - * \brief Flag specified to override MB neighbour - * availability bits from VME stage. - * - * This flag specifies that macroblock neighbour - * availability bits from the VME stage are overriden - * by the \ref pred_avail_flags hereunder. - */ - uint32_t pred_avail_override_flag : 1; - /** - * \brief Bitwise representation of which macroblocks - * are available for intra prediction. - * - * If the slice is intra-coded, this field represents - * the macroblocks available for intra prediction. - * See \ref api_enc_h264_mb_pred_avail_bits - * "macroblock neighbour availability" bit definitions. - */ - uint32_t pred_avail_flags : 8; - } bits; - uint32_t value; - } intra_fields; - /**@}*/ - - /** @name Data for inter macroblock */ - /**@{*/ - union { - struct { - uint32_t reserved; - } bits; - uint32_t value; - } inter_fields; - /**@}*/ - } info; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMacroblockParameterBufferH264; - -/** - * \brief MB partition modes and 1/2 1/4 motion search configuration - * - * Specifies MB partition modes that are disabled. Specifies Half-pel - * mode and Quarter-pel mode searching - */ -typedef struct _VAEncMiscParameterSubMbPartPelH264 { - uint32_t disable_inter_sub_mb_partition; - union { - struct { - uint32_t disable_16x16_inter_mb_partition : 1; - uint32_t disable_16x8_inter_mb_partition : 1; - uint32_t disable_8x16_inter_mb_partition : 1; - uint32_t disable_8x8_inter_mb_partition : 1; - uint32_t disable_8x4_inter_mb_partition : 1; - uint32_t disable_4x8_inter_mb_partition : 1; - uint32_t disable_4x4_inter_mb_partition : 1; - uint32_t reserved : 1; - } bits; - uint8_t value; - } inter_sub_mb_partition_mask; - - /** - * \brief Precison of motion search - * 0:Integer mode searching - * 1:Half-pel mode searching - * 2:Reserved - * 3:Quarter-pel mode searching - */ - uint32_t enable_sub_pel_mode; - uint8_t sub_pel_mode; - uint8_t reserved[3]; -} VAEncMiscParameterSubMbPartPelH264; -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_H264_H */ diff --git a/prebuilts/x86_64/include/va/va_enc_hevc.h b/prebuilts/x86_64/include/va/va_enc_hevc.h deleted file mode 100644 index 96b5ae5..0000000 --- a/prebuilts/x86_64/include/va/va_enc_hevc.h +++ /dev/null @@ -1,958 +0,0 @@ -/* - * Copyright (c) 2007-2014 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_hevc.h - * \brief The HEVC encoding API - * - * This file contains the \ref api_enc_hevc "HEVC encoding API". - * - */ - -#ifndef VA_ENC_HEVC_H -#define VA_ENC_HEVC_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_enc_hevc HEVC encoding API - * - * @{ - */ - -/** Attribute value for VAConfigAttribEncHEVCFeatures. - * - * This attribute decribes the supported features of an HEVC/H.265 - * encoder configuration. - * - * All of the field values in this attribute are VA_FEATURE_* values, - * indicating support for the corresponding feature. - */ -typedef union VAConfigAttribValEncHEVCFeatures { - struct { - /** Separate colour planes. - * - * Allows setting separate_colour_plane_flag in the SPS. - */ - uint32_t separate_colour_planes : 2; - /** Scaling lists. - * - * Allows scaling_list() elements to be present in both the SPS - * and the PPS. The decoded form of the scaling lists must also - * be supplied in a VAQMatrixBufferHEVC buffer when scaling lists - * are enabled. - */ - uint32_t scaling_lists : 2; - /** Asymmetric motion partitions. - * - * Allows setting amp_enabled_flag in the SPS. - */ - uint32_t amp : 2; - /** Sample adaptive offset filter. - * - * Allows setting slice_sao_luma_flag and slice_sao_chroma_flag - * in slice headers. - */ - uint32_t sao : 2; - /** PCM sample blocks. - * - * Allows setting pcm_enabled_flag in the SPS. When enabled - * PCM parameters must be supplied with the sequence parameters, - * including block sizes which may be further constrained as - * noted in the VAConfigAttribEncHEVCBlockSizes attribute. - */ - uint32_t pcm : 2; - /** Temporal motion vector Prediction. - * - * Allows setting slice_temporal_mvp_enabled_flag in slice - * headers. - */ - uint32_t temporal_mvp : 2; - /** Strong intra smoothing. - * - * Allows setting strong_intra_smoothing_enabled_flag in the SPS. - */ - uint32_t strong_intra_smoothing : 2; - /** Dependent slices. - * - * Allows setting dependent_slice_segment_flag in slice headers. - */ - uint32_t dependent_slices : 2; - /** Sign data hiding. - * - * Allows setting sign_data_hiding_enable_flag in the PPS. - */ - uint32_t sign_data_hiding : 2; - /** Constrained intra prediction. - * - * Allows setting constrained_intra_pred_flag in the PPS. - */ - uint32_t constrained_intra_pred : 2; - /** Transform skipping. - * - * Allows setting transform_skip_enabled_flag in the PPS. - */ - uint32_t transform_skip : 2; - /** QP delta within coding units. - * - * Allows setting cu_qp_delta_enabled_flag in the PPS. - */ - uint32_t cu_qp_delta : 2; - /** Weighted prediction. - * - * Allows setting weighted_pred_flag and weighted_bipred_flag in - * the PPS. The pred_weight_table() data must be supplied with - * every slice header when weighted prediction is enabled. - */ - uint32_t weighted_prediction : 2; - /** Transform and quantisation bypass. - * - * Allows setting transquant_bypass_enabled_flag in the PPS. - */ - uint32_t transquant_bypass : 2; - /** Deblocking filter disable. - * - * Allows setting slice_deblocking_filter_disabled_flag. - */ - uint32_t deblocking_filter_disable : 2; - /* Reserved,should not be used, avoid conflict with VA_ATTRIB_NOT_SUPPORTED. */ - uint32_t reserved : 2; - } bits; - uint32_t value; -} VAConfigAttribValEncHEVCFeatures; - -/** Attribute value for VAConfigAttribEncHEVCBlockSizes. - * - * This attribute describes the supported coding tree and transform block - * sizes of an HEVC/H.265 encoder configuration - */ -typedef union VAConfigAttribValEncHEVCBlockSizes { - struct { - /** Largest supported size of coding tree blocks. - * - * CtbLog2SizeY must not be larger than this. - */ - uint32_t log2_max_coding_tree_block_size_minus3 : 2; - /** Smallest supported size of coding tree blocks. - * - * CtbLog2SizeY must not be smaller than this. - * - * This may be the same as the maximum size, indicating that only - * one CTB size is supported. - */ - uint32_t log2_min_coding_tree_block_size_minus3 : 2; - - /** Smallest supported size of luma coding blocks. - * - * MinCbLog2SizeY must not be smaller than this. - */ - uint32_t log2_min_luma_coding_block_size_minus3 : 2; - - /** Largest supported size of luma transform blocks. - * - * MaxTbLog2SizeY must not be larger than this. - */ - uint32_t log2_max_luma_transform_block_size_minus2 : 2; - /** Smallest supported size of luma transform blocks. - * - * MinTbLog2SizeY must not be smaller than this. - */ - uint32_t log2_min_luma_transform_block_size_minus2 : 2; - - /** Largest supported transform hierarchy depth in inter - * coding units. - * - * max_transform_hierarchy_depth_inter must not be larger - * than this. - */ - uint32_t max_max_transform_hierarchy_depth_inter : 2; - /** Smallest supported transform hierarchy depth in inter - * coding units. - * - * max_transform_hierarchy_depth_inter must not be smaller - * than this. - */ - uint32_t min_max_transform_hierarchy_depth_inter : 2; - - /** Largest supported transform hierarchy depth in intra - * coding units. - * - * max_transform_hierarchy_depth_intra must not be larger - * than this. - */ - uint32_t max_max_transform_hierarchy_depth_intra : 2; - /** Smallest supported transform hierarchy depth in intra - * coding units. - * - * max_transform_hierarchy_depth_intra must not be smaller - * than this. - */ - uint32_t min_max_transform_hierarchy_depth_intra : 2; - - /** Largest supported size of PCM coding blocks. - * - * Log2MaxIpcmCbSizeY must not be larger than this. - */ - uint32_t log2_max_pcm_coding_block_size_minus3 : 2; - /** Smallest supported size of PCM coding blocks. - * - * Log2MinIpcmCbSizeY must not be smaller than this. - */ - uint32_t log2_min_pcm_coding_block_size_minus3 : 2; - - /** Reserved for future use. */ - uint32_t reserved : 10; - } bits; - uint32_t value; -} VAConfigAttribValEncHEVCBlockSizes; - -/** - * @name Picture flags - * - * Those flags flags are meant to signal when a picture marks the end - * of a sequence, a stream, or even both at once. - * - * @{ - */ -/** - * \brief Marks the last picture in the sequence. - * - * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame. - */ -#define HEVC_LAST_PICTURE_EOSEQ 0x01 -/** - * \brief Marks the last picture in the stream. - * - * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame. - */ -#define HEVC_LAST_PICTURE_EOSTREAM 0x02 -/**@}*/ - -/** - * \brief Packed header types specific to HEVC encoding. - * - * Types of packed headers generally used for HEVC encoding. Each - * associated packed header data buffer shall contain the start code - * prefix 0x000001 followed by the complete NAL unit, thus also - * including the \c nal_unit_type. - * - * Note: the start code prefix can contain an arbitrary number of leading - * zeros. The driver will skip them for emulation prevention bytes insertion, - * if necessary. - */ -typedef enum { - /** - * \brief Packed Video Parameter Set (VPS). - * - * The corresponding packed header data buffer shall contain the - * complete video_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 32. - */ - VAEncPackedHeaderHEVC_VPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Sequence Parameter Set (SPS). - * - * The corresponding packed header data buffer shall contain the - * complete seq_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 33. - */ - VAEncPackedHeaderHEVC_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - * The corresponding packed header data buffer shall contain the - * complete pic_parameter_set_rbsp() syntax element. - * - * Note: packed \c nal_unit_type shall be equal to 34. - */ - VAEncPackedHeaderHEVC_PPS = VAEncPackedHeaderPicture, - /** - * \brief Packed slice header. - * - * The corresponding packed header data buffer shall contain the - * \c slice_header() syntax element only, along with any start - * code prefix and NAL unit type preceeding it. i.e. this means - * that the buffer does not contain any of the \c slice_data() or - * the \c rbsp_slice_trailing_bits(). - * - * Note: packed \c nal_unit_type shall be equal to 0 to 9 (non-IRAP - * picture), or 16 to 21 (IRAP picture). - */ - VAEncPackedHeaderHEVC_Slice = VAEncPackedHeaderSlice, - /** - * \brief Packed Supplemental Enhancement Information (SEI). - * - * The corresponding packed header data buffer shall contain the - * complete sei_rbsp() syntax element, thus including several - * sei_message() elements if necessary. - * - * Note: packed \c nal_unit_type shall be equal to 39 or 40. - * - * @deprecated - * This is a deprecated packed header flag, All applications can use - * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed - * SEI header data buffer to the driver - */ - VAEncPackedHeaderHEVC_SEI va_deprecated_enum = (0x80000000 | 1), -} VAEncPackedHeaderTypeHEVC; - -/** - * \brief Sequence parameter for HEVC encoding in main & main 10 - * profiles. - * - * This structure holds information for \c seq_parameter_set_data() as - * defined by the HEVC specification. - * - * If packed sequence headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c seq_scaling_matrix_present_flag is set to \c 1, then a - * #VAQMatrixBufferHEVC buffer shall also be provided within the same - * \c vaRenderPicture() call as this sequence parameter buffer. - */ -typedef struct _VAEncSequenceParameterBufferHEVC { - /** \brief Same as the HEVC bitstream syntax element. - * value range [1..2]. - */ - uint8_t general_profile_idc; - /** \brief Same as the HEVC bitstream syntax element. - * general_level_idc shall be set equal to a value of 30 times the level - * numbers allowed [1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 5.2, 6, 6.1, 6.2] - */ - uint8_t general_level_idc; - /** \brief Same as the HEVC bitstream syntax element. - * Only value 0 is allowed for level value below 4, exclusive. - */ - uint8_t general_tier_flag; - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between IDR frames. */ - uint32_t intra_idr_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - /** \brief Picture width in pixel samples. - * Its value must be multiple of min CU size. - */ - uint16_t pic_width_in_luma_samples; - /** \brief Picture height in pixel samples. - * Its value must be multiple of min CU size. - */ - uint16_t pic_height_in_luma_samples; - - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t chroma_format_idc : 2; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t separate_colour_plane_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t bit_depth_luma_minus8 : 3; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t bit_depth_chroma_minus8 : 3; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t scaling_list_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t strong_intra_smoothing_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t amp_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sample_adaptive_offset_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_enabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_loop_filter_disabled_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sps_temporal_mvp_enabled_flag : 1; - /** \brief Indicates whether or not the encoding is in low delay mode. - * 0 normal sequence - * 1 no random access B will be coded . and the coding type could be only I, P or LDB - * this flag only indicates the frame coding type of the sequence. - */ - uint32_t low_delay_seq : 1; - /** \brief Indicates whether or not the encoding is in dyadic hierarchical GOP structure - * the default value 0, BRC would treat is as flat structure. if HierachicalFlag == 1, - * application would enable Qp Modulation - */ - uint32_t hierachical_flag : 1; - /** \brief keep for future , should be set to 0 */ - uint32_t reserved_bits : 14; - } bits; - uint32_t value; - } seq_fields; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [0..3] - */ - uint8_t log2_min_luma_coding_block_size_minus3; - - /** \brief Same as the HEVC bitstream syntax element. - */ - uint8_t log2_diff_max_min_luma_coding_block_size; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [0..3] - */ - uint8_t log2_min_transform_block_size_minus2; - - /** \brief Same as the HEVC bitstream syntax element. - */ - uint8_t log2_diff_max_min_transform_block_size; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [2] - */ - uint8_t max_transform_hierarchy_depth_inter; - - /** \brief Same as the HEVC bitstream syntax element. - * value range [2] - */ - uint8_t max_transform_hierarchy_depth_intra; - - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_sample_bit_depth_luma_minus1; - - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t pcm_sample_bit_depth_chroma_minus1; - - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t log2_min_pcm_luma_coding_block_size_minus3; - - /** \brief Derived from the HEVC bitstream syntax element. - * log2_min_pcm_luma_coding_block_size_minus3 + - * log2_diff_max_min_pcm_luma_coding_block_size - */ - uint32_t log2_max_pcm_luma_coding_block_size_minus3; - - /** @name VUI parameters (optional) */ - /**@{*/ - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t vui_parameters_present_flag; - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t aspect_ratio_info_present_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t neutral_chroma_indication_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t field_seq_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t vui_timing_info_present_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t bitstream_restriction_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t tiles_fixed_structure_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t motion_vectors_over_pic_boundaries_flag : 1; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t restricted_ref_pic_lists_flag : 1; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_horizontal : 5; - /** \brief Range: 0 to 16, inclusive. */ - uint32_t log2_max_mv_length_vertical : 5; - } bits; - uint32_t value; - } vui_fields; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t aspect_ratio_idc; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sar_width; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t sar_height; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t vui_num_units_in_tick; - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t vui_time_scale; - /** \brief Same as the HEVC bitstream syntax element. */ - uint16_t min_spatial_segmentation_idc; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t max_bytes_per_pic_denom; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t max_bits_per_min_cu_denom; - - /** \brief SCC flags to enable/disable features, including IBC and palette mode at present.*/ - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint32_t palette_mode_enabled_flag : 1; - /** \brief Reserved bits for future use, must be zero */ - uint32_t reserved : 31; - } bits; - uint32_t value; - } scc_fields; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 1]; - /**@}*/ -} VAEncSequenceParameterBufferHEVC; - -/**************************** - * HEVC data structures - ****************************/ -/** - * \brief Picture parameter for HEVC encoding in main & main 10 - * profiles. - * - * This structure holds information for \c pic_parameter_set_rbsp() as - * defined by the HEVC specification. - * - * If packed picture headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - * If \c pic_scaling_matrix_present_flag is set to \c 1, then a - * #VAQMatrixBufferHEVC buffer shall also be provided within the same - * \c vaRenderPicture() call as this picture parameter buffer. - */ -typedef struct _VAEncPictureParameterBufferHEVC { - /** - * \brief Information about the picture to be encoded. - * - * See #VAPictureHEVC for further description of each field. - * Note that decoded_curr_pic.picture_id represents the reconstructed - * (decoded) picture. User provides a scratch VA surface ID here. - * Long term reference and RPS related fields should be set to 0 - * and ignored. - */ - VAPictureHEVC decoded_curr_pic; - /** - * \brief Decoded Picture Buffer (DPB). - * - * This array represents the list of reconstructed (decoded) - * frames used as reference. It is important to keep track of - * reconstructed frames so that they can be used later on as - * reference for P or B-frames encoding. - */ - VAPictureHEVC reference_frames[15]; - /** - * \brief Output encoded bitstream. - * - * \ref coded_buf has type #VAEncCodedBufferType. It should be - * large enough to hold the compressed NAL slice and possibly VPS, SPS - * and PPS NAL units, and other NAL units such as SEI. - */ - VABufferID coded_buf; - - /** \brief collocated reference picture buffer index of ReferenceFrames[]. - * Please note it is different from HEVC syntac element collocated_ref_idx. - * When the HEVC syntax element slice_temporal_mvp_enable_flag takes value 0, - * collocated_ref_pic_index should take value 0xFF. . - * Range: [0..14, 0xFF] - */ - uint8_t collocated_ref_pic_index; - - /** - * \brief OR'd flags describing whether the picture is the last one or not. - * - * This fields holds 0 if the picture to be encoded is not the last - * one in the stream or sequence. Otherwise, it is a combination of - * \ref HEVC_LAST_PICTURE_EOSEQ or \ref HEVC_LAST_PICTURE_EOSTREAM. - */ - uint8_t last_picture; - - /** \brief \c init_qp_minus26 + 26. */ - uint8_t pic_init_qp; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t diff_cu_qp_delta_depth; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - int8_t pps_cb_qp_offset; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - int8_t pps_cr_qp_offset; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t num_tile_columns_minus1; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t num_tile_rows_minus1; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t column_width_minus1[19]; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t row_height_minus1[21]; - - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint8_t log2_parallel_merge_level_minus2; - - /** \brief Application may set the CTU bit size limit based on - * spec requirement (A.3.2), or other value for special purpose. - * If the value is set 0, no bit size limit is checked. - */ - uint8_t ctu_max_bitsize_allowed; - - /** \brief Maximum reference index for reference picture list 0. - * value range: [0..14]. - */ - uint8_t num_ref_idx_l0_default_active_minus1; - - /** \brief Maximum reference index for reference picture list 1. - * value range: [0..14]. - */ - uint8_t num_ref_idx_l1_default_active_minus1; - - /** \brief PPS header - * Used by GPU to generate new slice headers in slice size control. - * value range: [0..63]. - */ - uint8_t slice_pic_parameter_set_id; - - /** \brief NAL unit type - * Used by GPU to generate new slice headers in slice size control. - * value range: [0..63]. - */ - uint8_t nal_unit_type; - - union { - struct { - /** \brief Is picture an IDR picture? */ - uint32_t idr_pic_flag : 1; - /** \brief Picture type. - * I - 1; - * P - 2; - * B - 3; - * B1 - 4; - * B2 - 5; - * B1 and B2 are frame types for hierachical B, explanation - * can refer to num_b_in_gop[]. - */ - uint32_t coding_type : 3; - /** \brief Is picture a reference picture? */ - uint32_t reference_pic_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t dependent_slice_segments_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t sign_data_hiding_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t constrained_intra_pred_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t transform_skip_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t cu_qp_delta_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t weighted_pred_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t weighted_bipred_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t transquant_bypass_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t tiles_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t entropy_coding_sync_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t loop_filter_across_tiles_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t pps_loop_filter_across_slices_enabled_flag : 1; - /** \brief A combination of HEVC syntax element of - * sps_scaling_list_data_present_flag and - * pps_scaling_list_data_present_flag - * when scaling_list_enable_flag is 0, it must be 0. - */ - uint32_t scaling_list_data_present_flag : 1; - /** \brief indicate the current picture contains significant - * screen contents (text, characters, etc.) or animated image. - * GPU may want to treat them differently from normal video. - * For example, encoder may choose a small transform unit size - * and may use transform skip mode. - */ - uint32_t screen_content_flag : 1; - /** - * When either weighted_pred_flag or weighted_bipred_flag is - * turned on, the flag enable_gpu_weighted_prediction requests - * GPU to determine weighted prediction factors. In this case, - * the following parameters in slice control data structure - * shall be ignored: - * luma_log2_weight_denom, delta_chroma_log2_weight_denom, - * luma_offset_l0[15], luma_offset_l1[15], - * delta_luma_weight_l0[15], delta_luma_weight_l1[15], - * chroma_offset_l0[15][2], chroma_offset_l1[15][2], - * and delta_chroma_weight_l0[15][2], delta_chroma_weight_l1[15][2]. - */ - uint32_t enable_gpu_weighted_prediction : 1; - /** \brief HEVC syntax element in slice segment header - * GPU uses it to generate new slice headers in slice size control. - */ - uint32_t no_output_of_prior_pics_flag : 1; - uint32_t reserved : 11; - } bits; - uint32_t value; - } pic_fields; - - /** \brief When hierachical_level_plus1 > 0, hierachical_level_plus1-1 indicates - *the current frame's level.when it > 0. B1, B2 setting in CodingType can be treated as B, - *hirachical level is determined by this variable.When hierachical_level_plus1 == 0, - *hierarchical level information still comes from coding_type. - */ - uint8_t hierarchical_level_plus1; - /** \brief Reserved bytes for future use, must be zero */ - uint8_t va_byte_reserved; - /** \brief SCC flags to enable/disable feature, only IBC at present.*/ - union { - struct { - /** \brief Same as the HEVC bitstream syntax element. */ - uint16_t pps_curr_pic_ref_enabled_flag : 1; - /** \brief Reserved bits for future use, must be zero */ - uint16_t reserved : 15; - } bits; - uint16_t value; - } scc_fields; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH - 1]; -} VAEncPictureParameterBufferHEVC; - -/** - * \brief Slice parameter for HEVC encoding in main & main 10 profiles. - * - * This structure holds information for \c - * slice_segment_layer_rbsp() as defined by the HEVC - * specification. - * - * If packed slice headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSlice ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - */ -typedef struct _VAEncSliceParameterBufferHEVC { - /** \brief Starting CTU address for this slice. */ - uint32_t slice_segment_address; - /** \brief Number of CTUs in this slice. */ - uint32_t num_ctu_in_slice; - - /** \brief Slice type. - * Corresponds to HEVC syntax element of the same name. - */ - uint8_t slice_type; - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t slice_pic_parameter_set_id; - - /** \brief Maximum reference index for reference picture list 0. - * Range: 0 to 14, inclusive. - */ - uint8_t num_ref_idx_l0_active_minus1; - /** \brief Maximum reference index for reference picture list 1. - * Range: 0 to 14, inclusive. - */ - uint8_t num_ref_idx_l1_active_minus1; - /** \brief Reference picture list 0 (for P slices). */ - VAPictureHEVC ref_pic_list0[15]; - /** \brief Reference picture list 1 (for B slices). */ - VAPictureHEVC ref_pic_list1[15]; - /**@}*/ - - /** @name pred_weight_table() */ - /**@{*/ - /** \brief Same as the HEVC bitstream syntax element. */ - uint8_t luma_log2_weight_denom; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_chroma_log2_weight_denom; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_luma_weight_l0[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t luma_offset_l0[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_chroma_weight_l0[15][2]; - /** \brief Same as the HEVC spec variable ChromaOffsetL0[]. */ - int8_t chroma_offset_l0[15][2]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_luma_weight_l1[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t luma_offset_l1[15]; - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t delta_chroma_weight_l1[15][2]; - /** \brief Same as the HEVC spec variable ChromaOffsetL1[]. */ - int8_t chroma_offset_l1[15][2]; - /**@}*/ - - /** \brief Corresponds to HEVC spec variable MaxNumMergeCand. - * Range: [1..5]. - */ - uint8_t max_num_merge_cand; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_qp_delta; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_cb_qp_offset; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_cr_qp_offset; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_beta_offset_div2; - - /** \brief Same as the HEVC bitstream syntax element. */ - int8_t slice_tc_offset_div2; - - union { - struct { - /** \brief Indicates if current slice is the last one in picture */ - uint32_t last_slice_of_pic_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name */ - uint32_t dependent_slice_segment_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name */ - uint32_t colour_plane_id : 2; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_temporal_mvp_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_sao_luma_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_sao_chroma_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. - * if this flag is set to 0, num_ref_idx_l0_active_minus1 should be - * equal to num_ref_idx_l0_default_active_minus1 - * as well as for that for l1. - */ - uint32_t num_ref_idx_active_override_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t mvd_l1_zero_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t cabac_init_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_deblocking_filter_disabled_flag : 2; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t slice_loop_filter_across_slices_enabled_flag : 1; - /** \brief Corresponds to HEVC syntax element of the same name. */ - uint32_t collocated_from_l0_flag : 1; - } bits; - uint32_t value; - } slice_fields; - - - /** - * \brief bit offset of syntax element pred_weight_table() in slice segment header. - * It aligns with the starting position of the current packed slice header. - * It is used when encoder prefers to override the weighted prediction parameters passed in - * from application. - * Please refer to enable_gpu_weighted_prediction in VAEncPictureParameterBufferHEVC. - */ - uint32_t pred_weight_table_bit_offset; - /** - * \brief bit length of syntax element pred_weight_table() in slice segment header. - * It is used when encoder prefers to override the weighted prediction parameters passed in - * from application. - * Please refer to enable_gpu_weighted_prediction in VAEncPictureParameterBufferHEVC. - */ - uint32_t pred_weight_table_bit_length; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM - 2]; - /**@}*/ -} VAEncSliceParameterBufferHEVC; - -/** - * \brief HEVC Quantization Matrix Buffer Structure - * - * This structure is sent once per frame, - * and only when scaling_list_enabled_flag = 1 and scaling_list_data_present_flag = 1. - * Only when scaling_list_data_present_flag = 1, app still - * needs to send in this structure. When scaling_list_enabled_flag = 1 and - * scaling_list_data_present_flag = 0, driver is responsible to generate - * the default scaling list values. - * - * Matrix entries are in raster scan order which follows HEVC spec. - */ -typedef struct _VAQMatrixBufferHEVC { - /** - * \brief scaling lists, - * corresponds to same HEVC spec syntax element - * ScalingList[ i ][ MatrixID ][ j ]. - * - * \brief 4x4 scaling, - */ - uint8_t scaling_lists_4x4[3][2][16]; - /** - * \brief 8x8 scaling, - */ - uint8_t scaling_lists_8x8[3][2][64]; - /** - * \brief 16x16 scaling, - * correspongs i = 2, MatrixID is in the range of 0 to 5, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t scaling_lists_16x16[3][2][64]; - /** - * \brief 32x32 scaling, - * correspongs i = 3, MatrixID is in the range of 0 to 1, - * inclusive. And j is in the range of 0 to 63, inclusive. - */ - uint8_t scaling_lists_32x32[2][64]; - /** - * \brief DC values of the 16x16 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 2 and matrixID in the range of 0 to 5, inclusive. - */ - uint8_t scaling_list_dc_16x16[3][2]; - /** - * \brief DC values of the 32x32 scaling lists, - * corresponds to HEVC spec syntax - * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 - * with sizeID = 3 and matrixID in the range of 0 to 1, inclusive. - */ - uint8_t scaling_list_dc_32x32[2]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAQMatrixBufferHEVC; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_HEVC_H */ diff --git a/prebuilts/x86_64/include/va/va_enc_jpeg.h b/prebuilts/x86_64/include/va/va_enc_jpeg.h deleted file mode 100644 index ec02191..0000000 --- a/prebuilts/x86_64/include/va/va_enc_jpeg.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (c) 2007-2013 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_jpeg.h - * \brief JPEG encoding API - * - * This file contains the \ref api_enc_jpeg "JPEG encoding API". - */ - -#ifndef VA_ENC_JPEG_H -#define VA_ENC_JPEG_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_jpeg JPEG encoding API - * - * @{ - */ - -/** - * \brief JPEG Encoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferJPEG { - /** \brief holds reconstructed picture. */ - VASurfaceID reconstructed_picture; - /** \brief picture width. */ - uint16_t picture_width; - /** \brief picture height. */ - uint16_t picture_height; - /** \brief holds coded data. */ - VABufferID coded_buf; - - /** - * \brief pic_flags - * - */ - union { - struct { - /** - * \brief profile: - * 0 - Baseline, 1 - Extended, 2 - Lossless, 3 - Hierarchical - */ - uint32_t profile : 2; - /** - * \brief progressive: - * 0 - sequential, 1 - extended, 2 - progressive - */ - uint32_t progressive : 1; - /** - * \brief huffman: - * 0 - arithmetic, 1 - huffman - */ - uint32_t huffman : 1; - /** - * \brief interleaved: - * 0 - non interleaved, 1 - interleaved - */ - uint32_t interleaved : 1; - /** - * \brief differential: - * 0 - non differential, 1 - differential - */ - uint32_t differential : 1; - } bits; - uint32_t value; - } pic_flags; - - /** \brief number of bits per sample. */ - uint8_t sample_bit_depth; - /** \brief total number of scans in image. */ - uint8_t num_scan; - /** \brief number of image components in frame. */ - uint16_t num_components; - /** \brief Component identifier (Ci). */ - uint8_t component_id[4]; - /** \brief Quantization table selector (Tqi). */ - uint8_t quantiser_table_selector[4]; - /** \brief number from 1 to 100 that specifies quality of image. */ - uint8_t quality; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferJPEG; - - -/** - * \brief Slice parameter for JPEG encoding. - * - * This structure conveys slice (scan) level parameters. - * - */ -typedef struct _VAEncSliceParameterBufferJPEG { - /** \brief Restart interval definition (Ri). */ - uint16_t restart_interval; - /** \brief number of image components in a scan. */ - uint16_t num_components; - struct { - /** \brief Scan component selector (Csj). */ - uint8_t component_selector; - /** \brief DC entropy coding table selector (Tdj). */ - uint8_t dc_table_selector; - /** \brief AC entropy coding table selector (Taj). */ - uint8_t ac_table_selector; - } components[4]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSliceParameterBufferJPEG; - -/** - * \brief Quantization table for JPEG encoding. - * - */ -typedef struct _VAQMatrixBufferJPEG { - /** \brief load luma quantization table. */ - int32_t load_lum_quantiser_matrix; - /** \brief load chroma quantization table. */ - int32_t load_chroma_quantiser_matrix; - /** \brief luma quantization table. */ - uint8_t lum_quantiser_matrix[64]; - /** \brief chroma quantization table. */ - uint8_t chroma_quantiser_matrix[64]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAQMatrixBufferJPEG; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_JPEG_H */ diff --git a/prebuilts/x86_64/include/va/va_enc_mpeg2.h b/prebuilts/x86_64/include/va/va_enc_mpeg2.h deleted file mode 100644 index 669df03..0000000 --- a/prebuilts/x86_64/include/va/va_enc_mpeg2.h +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (c) 2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_mpeg2.h - * \brief The MPEG-2 encoding API - * - * This file contains the \ref api_enc_mpeg2 "MPEG-2 encoding API". - */ - -#ifndef _VA_ENC_MPEG2_H_ -#define _VA_ENC_MPEG2_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_mpeg2 MPEG-2 encoding API - * - * @{ - */ - -/** - * \brief MPEG-2 Quantization Matrix Buffer - * - */ -typedef VAIQMatrixBufferMPEG2 VAQMatrixBufferMPEG2; - -/** - * \brief Packed header types specific to MPEG-2 encoding. - * - * Types of packed headers generally used for MPEG-2 encoding. - */ -typedef enum { - /** - * \brief Packed Sequence Parameter Set (SPS). - * - */ - VAEncPackedHeaderMPEG2_SPS = VAEncPackedHeaderSequence, - /** - * \brief Packed Picture Parameter Set (PPS). - * - */ - VAEncPackedHeaderMPEG2_PPS = VAEncPackedHeaderPicture, - /** - * \brief Packed slice header. - * - */ - VAEncPackedHeaderMPEG2_Slice = VAEncPackedHeaderSlice, -} VAEncPackedHeaderTypeMPEG2; - -/** - * \brief Sequence parameter for MPEG-2 encoding - * - * This structure holds information for \c sequence_header() and - * sequence_extension(). - * - * If packed sequence headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - */ -typedef struct _VAEncSequenceParameterBufferMPEG2 { - /** \brief Period between I frames. */ - uint32_t intra_period; - /** \brief Period between I/P frames. */ - uint32_t ip_period; - /** \brief Picture width. - * - * A 14bits unsigned inter, the lower 12bits - * is horizontal_size_value, and the upper - * 2bits is \c horizontal_size_extension - * - */ - uint16_t picture_width; - /** \brief Picture height. - * - * A 14bits unsigned inter, the lower 12bits - * is vertical_size_value, and the upper 2bits is - * vertical_size_size_extension - * - */ - uint16_t picture_height; - /** - * \brief Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * bits_per_second may be derived from bit_rate. - * - */ - uint32_t bits_per_second; - /** - * \brief Frame rate - * - * Derived from frame_rate_value, frame_rate_extension_n and - * frame_rate_extension_d - * - */ - float frame_rate; - /** \brief Same as the element in sequence_header() */ - uint16_t aspect_ratio_information; - /** \brief Define the size of VBV */ - uint32_t vbv_buffer_size; - - union { - struct { - /** \brief Same as the element in Sequence extension() */ - uint32_t profile_and_level_indication : 8; - /** \brief Same as the element in Sequence extension() */ - uint32_t progressive_sequence : 1; - /** \brief Same as the element in Sequence extension() */ - uint32_t chroma_format : 2; - /** \brief Same as the element in Sequence extension() */ - uint32_t low_delay : 1; - /** \brief Same as the element in Sequence extension() */ - uint32_t frame_rate_extension_n : 2; - /** \brief Same as the element in Sequence extension() */ - uint32_t frame_rate_extension_d : 5; - } bits; - uint32_t value; - } sequence_extension; - - /** \brief Flag to indicate the following GOP header are being updated */ - uint32_t new_gop_header; - - union { - struct { - /** \brief Time code */ - uint32_t time_code : 25; - /** \brief Same as the element in GOP header */ - uint32_t closed_gop : 1; - /** \brief SAme as the element in GOP header */ - uint32_t broken_link : 1; - } bits; - uint32_t value; - } gop_header; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferMPEG2; - -/** - * \brief Picture parameter for MPEG-2 encoding - * - * This structure holds information for picture_header() and - * picture_coding_extension() - * - * If packed picture headers mode is used, i.e. if the encoding - * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE - * flag, then the driver expects two more buffers to be provided to - * the same \c vaRenderPicture() as this buffer: - * - a #VAEncPackedHeaderParameterBuffer with type set to - * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; - * - a #VAEncPackedHeaderDataBuffer which holds the actual packed - * header data. - * - */ -typedef struct _VAEncPictureParameterBufferMPEG2 { - /** \brief Forward reference picture */ - VASurfaceID forward_reference_picture; - /** \brief Backward reference picture */ - VASurfaceID backward_reference_picture; - /** \brief Reconstructed(decoded) picture */ - VASurfaceID reconstructed_picture; - /** - * \brief Output encoded bitstream. - * - * \ref coded_buf has type #VAEncCodedBufferType. It should be - * large enough to hold the compressed NAL slice and possibly SPS - * and PPS NAL units. - */ - VABufferID coded_buf; - /** - * \brief Flag to indicate the picture is the last one or not. - * - * This fields holds 0 if the picture to be encoded is not - * the last one in the stream. Otherwise, it - * is \ref MPEG2_LAST_PICTURE_EOSTREAM. - */ - uint8_t last_picture; - /** \brief Picture type */ - VAEncPictureType picture_type; - /** \brief Same as the element in picture_header() */ - uint32_t temporal_reference; - /** \brief Same as the element in picture_header() */ - uint32_t vbv_delay; - /** \brief Same as the element in Picture coding extension */ - uint8_t f_code[2][2]; - union { - struct { - /** \brief Same as the element in Picture coding extension */ - uint32_t intra_dc_precision : 2; - /** \brief Same as the element in Picture coding extension */ - uint32_t picture_structure : 2; - /** \brief Same as the element in Picture coding extension */ - uint32_t top_field_first : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t frame_pred_frame_dct : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t concealment_motion_vectors : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t q_scale_type : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t intra_vlc_format : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t alternate_scan : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t repeat_first_field : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t progressive_frame : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t composite_display_flag : 1; - } bits; - uint32_t value; - } picture_coding_extension; - - /* \brief Parameters for composite display - * - * Valid only when omposite_display_flag is 1 - */ - union { - struct { - /** \brief Same as the element in Picture coding extension */ - uint32_t v_axis : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t field_sequence : 3; - /** \brief Same as the element in Picture coding extension */ - uint32_t sub_carrier : 1; - /** \brief Same as the element in Picture coding extension */ - uint32_t burst_amplitude : 7; - /** \brief Same as the element in Picture coding extension */ - uint32_t sub_carrier_phase : 8; - } bits; - uint32_t value; - } composite_display; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferMPEG2; - -/** - * \brief Slice parameter for MPEG-2 encoding - * - */ -typedef struct _VAEncSliceParameterBufferMPEG2 { - /** \brief Starting MB address for this slice. */ - uint32_t macroblock_address; - /** \brief Number of macroblocks in this slice. */ - uint32_t num_macroblocks; - /** \brief Same as the element in slice() */ - int32_t quantiser_scale_code; - /** \brief Flag to indicate intra slice */ - int32_t is_intra_slice; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSliceParameterBufferMPEG2; - -typedef struct _VAEncMiscParameterExtensionDataSeqDisplayMPEG2 { - /** should always be 0x02 to identify it is Sequence Display Extension ISO-13818 */ - uint8_t extension_start_code_identifier; - /** these field should follow ISO-13818 6.3.6 */ - uint8_t video_format; - uint8_t colour_description; - uint8_t colour_primaries; - uint8_t transfer_characteristics; - uint8_t matrix_coefficients; - uint16_t display_horizontal_size; - uint16_t display_vertical_size; -} VAEncMiscParameterExtensionDataSeqDisplayMPEG2; -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_ENC_MPEG2_H_ */ diff --git a/prebuilts/x86_64/include/va/va_enc_vp8.h b/prebuilts/x86_64/include/va/va_enc_vp8.h deleted file mode 100644 index 84ce05f..0000000 --- a/prebuilts/x86_64/include/va/va_enc_vp8.h +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_vp8.h - * \brief VP8 encoding API - * - * This file contains the \ref api_enc_vp8 "VP8 encoding API". - */ - -#ifndef VA_ENC_VP8_H -#define VA_ENC_VP8_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_vp8 VP8 encoding API - * - * @{ - */ - -/** - * \brief VP8 Encoding Sequence Parameter Buffer Structure - * - * This structure conveys sequence level parameters. - * - */ -typedef struct _VAEncSequenceParameterBufferVP8 { - /* frame width in pixels */ - uint32_t frame_width; - /* frame height in pixels */ - uint32_t frame_height; - /* horizontal scale */ - uint32_t frame_width_scale; - /* vertical scale */ - uint32_t frame_height_scale; - - /* whether to enable error resilience features */ - uint32_t error_resilient; - /* auto keyframe placement, non-zero means enable auto keyframe placement */ - uint32_t kf_auto; - /* keyframe minimum interval */ - uint32_t kf_min_dist; - /* keyframe maximum interval */ - uint32_t kf_max_dist; - - - /* RC related fields. RC modes are set with VAConfigAttribRateControl */ - /* For VP8, CBR implies HRD conformance and VBR implies no HRD conformance */ - - /** - * Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - /* Period between I frames. */ - uint32_t intra_period; - - /* reference and reconstructed frame buffers - * Used for driver auto reference management when configured through - * VAConfigAttribEncAutoReference. - */ - VASurfaceID reference_frames[4]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferVP8; - - -/** - * \brief VP8 Encoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferVP8 { - /* surface to store reconstructed frame */ - VASurfaceID reconstructed_frame; - - /* - * surfaces to store reference frames in non auto reference mode - * VA_INVALID_SURFACE can be used to denote an invalid reference frame. - */ - VASurfaceID ref_last_frame; - VASurfaceID ref_gf_frame; - VASurfaceID ref_arf_frame; - - /* buffer to store coded data */ - VABufferID coded_buf; - - union { - struct { - /* force this frame to be a keyframe */ - uint32_t force_kf : 1; - /* don't reference the last frame */ - uint32_t no_ref_last : 1; - /* don't reference the golden frame */ - uint32_t no_ref_gf : 1; - /* don't reference the alternate reference frame */ - uint32_t no_ref_arf : 1; - /* The temporal id the frame belongs to. */ - uint32_t temporal_id : 8; - /** - * following two flags indicate the reference order - * LastRef is specified by 01b; - * GoldRef is specified by 10b; - * AltRef is specified by 11b; - * first_ref specifies the reference frame which is searched first. - * second_ref specifies the reference frame which is searched second - * if there is. - */ - uint32_t first_ref : 2; - uint32_t second_ref : 2; - /** \brief Reserved for future use, must be zero */ - uint32_t reserved : 16; - } bits; - uint32_t value; - } ref_flags; - - union { - struct { - /* version */ - uint32_t frame_type : 1; - uint32_t version : 3; - /* show_frame */ - uint32_t show_frame : 1; - /* color_space */ - uint32_t color_space : 1; - /* 0: bicubic, 1: bilinear, other: none */ - uint32_t recon_filter_type : 2; - /* 0: no loop fitler, 1: simple loop filter */ - uint32_t loop_filter_type : 2; - /* 0: disabled, 1: normal, 2: simple */ - uint32_t auto_partitions : 1; - /* same as log2_nbr_of_dct_partitions in frame header syntax */ - uint32_t num_token_partitions : 2; - - /** - * The following fields correspond to the same VP8 syntax elements - * in the frame header. - */ - /** - * 0: clamping of reconstruction pixels is disabled, - * 1: clamping enabled. - */ - uint32_t clamping_type : 1; - /* indicate segmentation is enabled for the current frame. */ - uint32_t segmentation_enabled : 1; - /** - * Determines if the MB segmentation map is updated in the current - * frame. - */ - uint32_t update_mb_segmentation_map : 1; - /** - * Indicates if the segment feature data is updated in the current - * frame. - */ - uint32_t update_segment_feature_data : 1; - /** - * indicates if the MB level loop filter adjustment is enabled for - * the current frame (0 off, 1 on). - */ - uint32_t loop_filter_adj_enable : 1; - /** - * Determines whether updated token probabilities are used only for - * this frame or until further update. - * It may be used by application to enable error resilient mode. - * In this mode probability updates are allowed only at Key Frames. - */ - uint32_t refresh_entropy_probs : 1; - /** - * Determines if the current decoded frame refreshes the golden frame. - */ - uint32_t refresh_golden_frame : 1; - /** - * Determines if the current decoded frame refreshes the alternate - * reference frame. - */ - uint32_t refresh_alternate_frame : 1; - /** - * Determines if the current decoded frame refreshes the last frame - * reference buffer. - */ - uint32_t refresh_last : 1; - /** - * Determines if the golden reference is replaced by another reference. - */ - uint32_t copy_buffer_to_golden : 2; - /** - * Determines if the alternate reference is replaced by another reference. - */ - uint32_t copy_buffer_to_alternate : 2; - /** - * Controls the sign of motion vectors when the golden frame is referenced. - */ - uint32_t sign_bias_golden : 1; - /** - * Controls the sign of motion vectors when the alternate frame is - * referenced. - */ - uint32_t sign_bias_alternate : 1; - /** - * Enables or disables the skipping of macroblocks containing no - * non-zero coefficients. - */ - uint32_t mb_no_coeff_skip : 1; - /** - * Enforces unconditional per-MB loop filter delta update setting frame - * header flags mode_ref_lf_delta_update, all mb_mode_delta_update_flag[4], - * and all ref_frame_delta_update_flag[4] to 1. - * Since loop filter deltas are not automatically refreshed to default - * values at key frames, dropped frame with delta update may prevent - * correct decoding from the next key frame. - * Encoder application is advised to set this flag to 1 at key frames. - */ - uint32_t forced_lf_adjustment : 1; - uint32_t reserved : 2; - } bits; - uint32_t value; - } pic_flags; - - /** - * Contains a list of 4 loop filter level values (updated value if applicable) - * controlling the deblocking filter strength. Each entry represents a segment. - * When segmentation is disabled, use entry 0. - * When loop_filter_level is 0, loop filter shall be disabled. - */ - int8_t loop_filter_level[4]; - - /** - * Contains a list of 4 delta values for reference frame based MB-level - * loop filter adjustment. - * If no update, then set to 0. - */ - int8_t ref_lf_delta[4]; - - /** - * Contains a list of 4 delta values for coding mode based MB-level loop - * filter adjustment. - * If no update, then set to 0. - */ - int8_t mode_lf_delta[4]; - - /** - * Controls the deblocking filter sensitivity. - * Corresponds to the same VP8 syntax element in frame header. - */ - uint8_t sharpness_level; - - /** - * Application supplied maximum clamp value for Qindex used in quantization. - * Qindex will not be allowed to exceed this value. - * It has a valid range [0..127] inclusive. - */ - uint8_t clamp_qindex_high; - - /** - * Application supplied minimum clamp value for Qindex used in quantization. - * Qindex will not be allowed to be lower than this value. - * It has a valid range [0..127] inclusive. - * Condition clamp_qindex_low <= clamp_qindex_high must be guaranteed, - * otherwise they are ignored. - */ - uint8_t clamp_qindex_low; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncPictureParameterBufferVP8; - - -/** - * \brief VP8 MB Segmentation ID Buffer - * - * application provides buffer containing the initial segmentation id for each - * MB, in raster scan order. Rate control may reassign it. - * For an 640x480 video, the buffer has 1200 entries. - * the value of each entry should be in the range [0..3], inclusive. - * If segmentation is not enabled, application does not need to provide it. - */ -typedef struct _VAEncMBMapBufferVP8 { - /** - * number of MBs in the frame. - * It is also the number of entries of mb_segment_id[]; - */ - uint32_t num_mbs; - /** - * per MB Segmentation ID Buffer - */ - uint8_t *mb_segment_id; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMBMapBufferVP8; - - -/** - * \brief VP8 Quantization Matrix Buffer Structure - * - * Contains quantization index for yac(0-3) for each segment and quantization - * index deltas, ydc(0), y2dc(1), y2ac(2), uvdc(3), uvac(4) that are applied - * to all segments. When segmentation is disabled, only quantization_index[0] - * will be used. This structure is sent once per frame. - */ -typedef struct _VAQMatrixBufferVP8 { - uint16_t quantization_index[4]; - int16_t quantization_index_delta[5]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAQMatrixBufferVP8; - - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_VP8_H */ diff --git a/prebuilts/x86_64/include/va/va_enc_vp9.h b/prebuilts/x86_64/include/va/va_enc_vp9.h deleted file mode 100644 index 107ab0c..0000000 --- a/prebuilts/x86_64/include/va/va_enc_vp9.h +++ /dev/null @@ -1,603 +0,0 @@ -/* - * Copyright (c) 2007-2015 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_enc_vp9.h - * \brief VP9 encoding API - * - * This file contains the \ref api_enc_vp9 "VP9 encoding API". - * - */ - -#ifndef VA_ENC_VP9_H -#define VA_ENC_VP9_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_enc_vp9 VP9 encoding API - * - * @{ - */ - -/** - * \brief VP9 Encoding Status Data Buffer Structure - * - * This structure is used to convey status data from encoder to application. - * Driver allocates VACodedBufferVP9Status as a private data buffer. - * Driver encapsulates the status buffer with a VACodedBufferSegment, - * and sets VACodedBufferSegment.status to be VA_CODED_BUF_STATUS_CODEC_SPECIFIC. - * And driver associates status data segment to the bit stream buffer segment - * by setting VACodedBufferSegment.next of coded_buf (bit stream) to the private - * buffer segment of status data. - * Application accesses it by calling VAMapBuffer() with VAEncCodedBufferType. - */ -typedef struct _VACodedBufferVP9Status { - /** Final quantization index used (yac), determined by BRC. - * Application is providing quantization index deltas - * ydc(0), y2dc(1), y2ac(2), uvdc(3), uvac(4) that are applied to all segments - * and segmentation qi deltas, they will not be changed by BRC. - */ - uint16_t base_qp_index; - - /** Final loopfilter levels for the frame, if segmentation is disabled only - * index 0 is used. - * If loop_filter_level is 0, it indicates loop filter is disabled. - */ - uint8_t loop_filter_level; - - /** - * Long term reference frame indication from BRC. BRC recommends the - * current frame that is being queried is a good candidate for a long - * term reference. - */ - uint8_t long_term_indication; - - /* suggested next frame width */ - uint16_t next_frame_width; - - /* suggested next frame height */ - uint16_t next_frame_height; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VACodedBufferVP9Status; - -/** - * \brief VP9 Encoding Sequence Parameter Buffer Structure - * - * This structure conveys sequence level parameters. - * - */ -typedef struct _VAEncSequenceParameterBufferVP9 { - /** \brief Frame size note: - * Picture resolution may change frame by frame. - * Application needs to allocate surfaces and frame buffers based on - * max frame resolution in case resolution changes for later frames. - * The source and recon surfaces allocated should be 64x64(SB) aligned - * on both horizontal and vertical directions. - * But buffers on the surfaces need to be aligned to CU boundaries. - */ - /* maximum frame width in pixels for the whole sequence */ - uint32_t max_frame_width; - - /* maximum frame height in pixels for the whole sequence */ - uint32_t max_frame_height; - - /* auto keyframe placement, non-zero means enable auto keyframe placement */ - uint32_t kf_auto; - - /* keyframe minimum interval */ - uint32_t kf_min_dist; - - /* keyframe maximum interval */ - uint32_t kf_max_dist; - - - /* RC related fields. RC modes are set with VAConfigAttribRateControl */ - /* For VP9, CBR implies HRD conformance and VBR implies no HRD conformance */ - - /** - * Initial bitrate set for this sequence in CBR or VBR modes. - * - * This field represents the initial bitrate value for this - * sequence if CBR or VBR mode is used, i.e. if the encoder - * pipeline was created with a #VAConfigAttribRateControl - * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. - * - * The bitrate can be modified later on through - * #VAEncMiscParameterRateControl buffers. - */ - uint32_t bits_per_second; - - /* Period between key frames */ - uint32_t intra_period; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSequenceParameterBufferVP9; - - -/** - * \brief VP9 Encoding Picture Parameter Buffer Structure - * - * This structure conveys picture level parameters. - * - */ -typedef struct _VAEncPictureParameterBufferVP9 { - /** VP9 encoder may support dynamic scaling function. - * If enabled (enable_dynamic_scaling is set), application may request - * GPU encodes picture with a different resolution from the raw source. - * GPU should handle the scaling process of source and - * all reference frames. - */ - /* raw source frame width in pixels */ - uint32_t frame_width_src; - /* raw source frame height in pixels */ - uint32_t frame_height_src; - - /* to be encoded frame width in pixels */ - uint32_t frame_width_dst; - /* to be encoded frame height in pixels */ - uint32_t frame_height_dst; - - /* surface to store reconstructed frame, not used for enc only case */ - VASurfaceID reconstructed_frame; - - /** \brief reference frame buffers - * Each entry of the array specifies the surface index of the picture - * that is referred by current picture or will be referred by any future - * picture. The valid entries take value from 0 to 127, inclusive. - * Non-valid entries, those do not point to pictures which are referred - * by current picture or future pictures, should take value 0xFF. - * Other values are not allowed. - * - * Application should update this array based on the refreshing - * information expected. - */ - VASurfaceID reference_frames[8]; - - /* buffer to store coded data */ - VABufferID coded_buf; - - union { - struct { - /* force this frame to be a keyframe */ - uint32_t force_kf : 1; - - /** \brief Indiates which frames to be used as reference. - * (Ref_frame_ctrl & 0x01) ? 1: last frame as reference frame, 0: not. - * (Ref_frame_ctrl & 0x02) ? 1: golden frame as reference frame, 0: not. - * (Ref_frame_ctrl & 0x04) ? 1: alt frame as reference frame, 0: not. - * L0 is for forward prediction. - * L1 is for backward prediction. - */ - uint32_t ref_frame_ctrl_l0 : 3; - uint32_t ref_frame_ctrl_l1 : 3; - - /** \brief Last Reference Frame index - * Specifies the index to RefFrameList[] which points to the LAST - * reference frame. It corresponds to active_ref_idx[0] in VP9 code. - */ - uint32_t ref_last_idx : 3; - - /** \brief Specifies the Sign Bias of the LAST reference frame. - * It corresponds to ref_frame_sign_bias[LAST_FRAME] in VP9 code. - */ - uint32_t ref_last_sign_bias : 1; - - /** \brief GOLDEN Reference Frame index - * Specifies the index to RefFrameList[] which points to the Golden - * reference frame. It corresponds to active_ref_idx[1] in VP9 code. - */ - uint32_t ref_gf_idx : 3; - - /** \brief Specifies the Sign Bias of the GOLDEN reference frame. - * It corresponds to ref_frame_sign_bias[GOLDEN_FRAME] in VP9 code. - */ - uint32_t ref_gf_sign_bias : 1; - - /** \brief Alternate Reference Frame index - * Specifies the index to RefFrameList[] which points to the Alternate - * reference frame. It corresponds to active_ref_idx[2] in VP9 code. - */ - uint32_t ref_arf_idx : 3; - - /** \brief Specifies the Sign Bias of the ALTERNATE reference frame. - * It corresponds to ref_frame_sign_bias[ALTREF_FRAME] in VP9 code. - */ - uint32_t ref_arf_sign_bias : 1; - - /* The temporal id the frame belongs to */ - uint32_t temporal_id : 8; - - uint32_t reserved : 5; - } bits; - uint32_t value; - } ref_flags; - - union { - struct { - /** - * Indicates if the current frame is a key frame or not. - * Corresponds to the same VP9 syntax element in frame tag. - */ - uint32_t frame_type : 1; - - /** \brief show_frame - * 0: current frame is not for display - * 1: current frame is for display - */ - uint32_t show_frame : 1; - - /** - * The following fields correspond to the same VP9 syntax elements - * in the frame header. - */ - uint32_t error_resilient_mode : 1; - - /** \brief Indicate intra-only for inter pictures. - * Must be 0 for key frames. - * 0: inter frame use both intra and inter blocks - * 1: inter frame use only intra blocks. - */ - uint32_t intra_only : 1; - - /** \brief Indicate high precision mode for Motion Vector prediction - * 0: normal mode - * 1: high precision mode - */ - uint32_t allow_high_precision_mv : 1; - - /** \brief Motion Compensation Filter type - * 0: eight-tap (only this mode is supported now.) - * 1: eight-tap-smooth - * 2: eight-tap-sharp - * 3: bilinear - * 4: switchable - */ - uint32_t mcomp_filter_type : 3; - uint32_t frame_parallel_decoding_mode : 1; - uint32_t reset_frame_context : 2; - uint32_t refresh_frame_context : 1; - uint32_t frame_context_idx : 2; - uint32_t segmentation_enabled : 1; - - /* corresponds to variable temporal_update in VP9 code. - * Indicates whether Segment ID is from bitstream or from previous - * frame. - * 0: Segment ID from bitstream - * 1: Segment ID from previous frame - */ - uint32_t segmentation_temporal_update : 1; - - /* corresponds to variable update_mb_segmentation_map in VP9 code. - * Indicates how hardware determines segmentation ID - * 0: intra block - segment id is 0; - * inter block - segment id from previous frame - * 1: intra block - segment id from bitstream (app or GPU decides) - * inter block - depends on segmentation_temporal_update - */ - uint32_t segmentation_update_map : 1; - - /** \brief Specifies if the picture is coded in lossless mode. - * - * lossless_mode = base_qindex == 0 && y_dc_delta_q == 0 \ - * && uv_dc_delta_q == 0 && uv_ac_delta_q == 0; - * Where base_qindex, y_dc_delta_q, uv_dc_delta_q and uv_ac_delta_q - * are all variables in VP9 code. - * - * When enabled, tx_mode needs to be set to 4x4 only and all - * tu_size in CU record set to 4x4 for entire frame. - * Software also has to program such that final_qindex=0 and - * final_filter_level=0 following the Quant Scale and - * Filter Level Table in Segmentation State section. - * Hardware forces Hadamard Tx when this bit is set. - * When lossless_mode is on, BRC has to be turned off. - * 0: normal mode - * 1: lossless mode - */ - uint32_t lossless_mode : 1; - - /** \brief MV prediction mode. Corresponds to VP9 variable with same name. - * comp_prediction_mode = 0: single prediction ony, - * comp_prediction_mode = 1: compound prediction, - * comp_prediction_mode = 2: hybrid prediction - * - * Not mandatory. App may suggest the setting based on power or - * performance. Kernal may use it as a guildline and decide the proper - * setting on its own. - */ - uint32_t comp_prediction_mode : 2; - - /** \brief Indicate how segmentation is specified - * 0 application specifies segmentation partitioning and - * relevant parameters. - * 1 GPU may decide on segmentation. If application already - * provides segmentation information, GPU may choose to - * honor it and further split into more levels if possible. - */ - uint32_t auto_segmentation : 1; - - /** \brief Indicate super frame syntax should be inserted - * 0 current frame is not encapsulated in super frame structure - * 1 current fame is to be encapsulated in super frame structure. - * super frame index syntax will be inserted by encoder at - * the end of current frame. - */ - uint32_t super_frame_flag : 1; - - uint32_t reserved : 10; - } bits; - uint32_t value; - } pic_flags; - - /** \brief indicate which frames in DPB should be refreshed. - * same syntax and semantic as in VP9 code. - */ - uint8_t refresh_frame_flags; - - /** \brief Base Q index in the VP9 term. - * Added with per segment delta Q index to get Q index of Luma AC. - */ - uint8_t luma_ac_qindex; - - /** - * Q index delta from base Q index in the VP9 term for Luma DC. - */ - int8_t luma_dc_qindex_delta; - - /** - * Q index delta from base Q index in the VP9 term for Chroma AC. - */ - int8_t chroma_ac_qindex_delta; - - /** - * Q index delta from base Q index in the VP9 term for Chroma DC. - */ - int8_t chroma_dc_qindex_delta; - - /** \brief filter level - * Corresponds to the same VP9 syntax element in frame header. - */ - uint8_t filter_level; - - /** - * Controls the deblocking filter sensitivity. - * Corresponds to the same VP9 syntax element in frame header. - */ - uint8_t sharpness_level; - - /** \brief Loop filter level reference delta values. - * Contains a list of 4 delta values for reference frame based block-level - * loop filter adjustment. - * If no update, set to 0. - * value range [-63..63] - */ - int8_t ref_lf_delta[4]; - - /** \brief Loop filter level mode delta values. - * Contains a list of 4 delta values for coding mode based MB-level loop - * filter adjustment. - * If no update, set to 0. - * value range [-63..63] - */ - int8_t mode_lf_delta[2]; - - /** - * Offset from starting position of output bitstream in bits where - * ref_lf_delta[] should be inserted. This offset should cover any metadata - * ahead of uncompressed header in inserted bit stream buffer (the offset - * should be same as that for final output bitstream buffer). - * - * In BRC mode, always insert ref_lf_delta[] (This implies uncompressed - * header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1). - */ - uint16_t bit_offset_ref_lf_delta; - - /** - * Offset from starting position of output bitstream in bits where - * mode_lf_delta[] should be inserted. - * - * In BRC mode, always insert mode_lf_delta[] (This implies uncompressed - * header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1). - */ - uint16_t bit_offset_mode_lf_delta; - - /** - * Offset from starting position of output bitstream in bits where (loop) - * filter_level should be inserted. - */ - uint16_t bit_offset_lf_level; - - /** - * Offset from starting position of output bitstream in bits where - * Base Qindex should be inserted. - */ - uint16_t bit_offset_qindex; - - /** - * Offset from starting position of output bitstream in bits where - * First Partition Size should be inserted. - */ - uint16_t bit_offset_first_partition_size; - - /** - * Offset from starting position of output bitstream in bits where - * segmentation_enabled is located in bitstream. When auto_segmentation - * is enabled, GPU uses this offset to locate and update the - * segmentation related information. - */ - uint16_t bit_offset_segmentation; - - /** \brief length in bit of segmentation portion from the location - * in bit stream where segmentation_enabled syntax is coded. - * When auto_segmentation is enabled, GPU uses this bit size to locate - * and update the information after segmentation. - */ - uint16_t bit_size_segmentation; - - - /** \brief log2 of number of tile rows - * Corresponds to the same VP9 syntax element in frame header. - * value range [0..2] - */ - uint8_t log2_tile_rows; - - /** \brief log2 of number of tile columns - * Corresponds to the same VP9 syntax element in frame header. - * value range [0..6] - */ - uint8_t log2_tile_columns; - - /** \brief indicate frame-skip happens - * Application may choose to drop/skip one or mulitple encoded frames or - * to-be-encoded frame due to various reasons such as insufficient - * bandwidth. - * Application uses the following three flags to inform GPU about frame-skip. - * - * value range of skip_frame_flag: [0..2] - * 0 - encode as normal, no skip; - * 1 - one or more frames were skipped by application prior to the - * current frame. Encode the current frame as normal. The driver - * will pass the number_skip_frames and skip_frames_size - * to bit rate control for adjustment. - * 2 - the current frame is to be skipped. Do not encode it but encrypt - * the packed header contents. This is for the secure encoding case - * where application generates a frame of all skipped blocks. - * The packed header will contain the skipped frame. - */ - uint8_t skip_frame_flag; - - /** \brief The number of frames skipped prior to the current frame. - * It includes only the skipped frames that were not counted before, - * and does not include the frame with skip_frame_flag == 2. - * Valid when skip_frame_flag = 1. - */ - uint8_t number_skip_frames; - - /** \brief When skip_frame_flag = 1, the size of the skipped frames in bits. - * It includes only the skipped frames that were not counted before, - * and does not include the frame size with skip_frame_flag = 2. - * When skip_frame_flag = 2, it is the size of the current skipped frame - * that is to be encrypted. - */ - uint32_t skip_frames_size; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_MEDIUM]; -} VAEncPictureParameterBufferVP9; - - -/** - * \brief Per segment parameters - */ -typedef struct _VAEncSegParamVP9 { - union { - struct { - /** \brief Indicates if per segment reference frame indicator is enabled. - * Corresponding to variable feature_enabled when - * j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code. - */ - uint8_t segment_reference_enabled : 1; - - /** \brief Specifies per segment reference indication. - * 0: reserved - * 1: Last ref - * 2: golden - * 3: altref - * Value can be derived from variable data when - * j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code. - * value range: [0..3] - */ - uint8_t segment_reference : 2; - - /** \brief Indicates if per segment skip mode is enabled. - * Corresponding to variable feature_enabled when - * j == SEG_LVL_SKIP in function setup_segmentation() VP9 code. - */ - uint8_t segment_reference_skipped : 1; - - uint8_t reserved : 4; - - } bits; - uint8_t value; - } seg_flags; - - /** \brief Specifies per segment Loop Filter Delta. - * Must be 0 when segmentation_enabled == 0. - * value range: [-63..63] - */ - int8_t segment_lf_level_delta; - - /** \brief Specifies per segment QIndex Delta. - * Must be 0 when segmentation_enabled == 0. - * value range: [-255..255] - */ - int16_t segment_qindex_delta; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncSegParamVP9; - -/** - * Structure to convey all segment related information. - * If segmentation is disabled, this data structure is still required. - * In this case, only seg_data[0] contains valid data. - * This buffer is sent once per frame. - * - * The buffer is created with VABufferType VAQMatrixBufferType. - * - */ -typedef struct _VAEncMiscParameterTypeVP9PerSegmantParam { - /** - * Parameters for 8 segments. - */ - VAEncSegParamVP9 seg_data[8]; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAEncMiscParameterTypeVP9PerSegmantParam; - - -/** - * \brief VP9 Block Segmentation ID Buffer - * - * The application provides a buffer of VAEncMacroblockMapBufferType containing - * the initial segmentation id for each 8x8 block, one byte each, in raster scan order. - * Rate control may reassign it. For example, a 640x480 video, the buffer has 4800 entries. - * The value of each entry should be in the range [0..7], inclusive. - * If segmentation is not enabled, the application does not need to provide it. - */ - - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_ENC_VP9_H */ diff --git a/prebuilts/x86_64/include/va/va_fei.h b/prebuilts/x86_64/include/va/va_fei.h deleted file mode 100644 index 5563cc9..0000000 --- a/prebuilts/x86_64/include/va/va_fei.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (c) 2007-2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_fei.h - * \brief The FEI encoding common API - */ - -#ifndef VA_FEI_H -#define VA_FEI_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * \defgroup api_fei FEI encoding common API - * - * @{ - */ - -/** - * \brief FEI specific attribute definitions - */ -/** @name Attribute values for VAConfigAttribFEIFunctionType - * - * This is only for VAEntrypointFEI - * The desired type should be passed to driver when creating the configuration. - * If VA_FEI_FUNCTION_ENC_PAK is set, VA_FEI_FUNCTION_ENC and VA_FEI_FUNCTION_PAK - * will be ignored if set also. Combination of VA_FEI_FUNCTION_ENC and VA_FEI_FUNCTION_PAK - * is not valid. If VA_FEI_FUNCTION_ENC is set, there will be no bitstream output. - * If VA_FEI_FUNCTION_PAK is set, two extra input buffers for PAK are needed: - * VAEncFEIMVBufferType and VAEncFEIMBCodeBufferType. - * VA_FEI_FUNCTION_ENC_PAK is recommended for best performance. - * - **/ -/**@{*/ -/** \brief ENC only is supported */ -#define VA_FEI_FUNCTION_ENC 0x00000001 -/** \brief PAK only is supported */ -#define VA_FEI_FUNCTION_PAK 0x00000002 -/** \brief ENC_PAK is supported */ -#define VA_FEI_FUNCTION_ENC_PAK 0x00000004 - -/**@}*/ - -/** \brief Attribute value for VAConfigAttribStats */ -typedef union _VAConfigAttribValStats { - struct { - /** \brief Max number of past reference frames that are supported. */ - uint32_t max_num_past_references : 4; - /** \brief Max number of future reference frames that are supported. */ - uint32_t max_num_future_references : 4; - /** \brief Number of supported output buffers for VAStatsStatisticsParameter->outputs */ - uint32_t num_outputs : 3; - /** \brief Interlaced content is supported */ - uint32_t interlaced : 1; - uint32_t reserved : 20; - } bits; - uint32_t value; -} VAConfigAttribValStats; - -typedef struct _VAPictureStats { - VASurfaceID picture_id; - /* - * see flags below. - */ - uint32_t flags; -} VAPictureStats; -/* flags in VAPictureStats could be one of the following */ -#define VA_PICTURE_STATS_INVALID 0x00000001 -#define VA_PICTURE_STATS_PROGRESSIVE 0x00000000 -#define VA_PICTURE_STATS_TOP_FIELD 0x00000002 -#define VA_PICTURE_STATS_BOTTOM_FIELD 0x00000004 -/** \brief picutre surface content updated indicator. - * The picture surface content is updated, it means temporary buffer like downscaled pixel data in driver - * internal needs be forced freshing - **/ -#define VA_PICTURE_STATS_CONTENT_UPDATED 0x00000010 - -/** \brief Motion Vector and Statistics frame level controls. - * common part VAStatsStatisticsParameterBufferType for a MB or CTB - **/ -typedef struct _VAStatsStatisticsParameter { - /** \brief Source surface ID. */ - VAPictureStats input; - - /** \brief Past reference surface ID pointer. */ - VAPictureStats *past_references; - - /** \brief Past reference surface number */ - uint32_t num_past_references; - - /** \brief Statistics output for past reference surface. - * Only enabling statistics output for past reference picture when *past_ref_stat_buf is a valid - * VABufferID, it is needed in case app wants statistics data of both reference and current pictures - * in very special use cases for better performance. - * The output layout is defined by VAStatsStatisticsBufferType(for progressive and top field of - * interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case), only - * pixel_average_16x16/pixel_average_8x8 and variance_16x16/variance_8x8 data are valid. - **/ - VABufferID *past_ref_stat_buf; - - /** \brief Future reference surface ID pointer. */ - VAPictureStats *future_references; - - /** \brief Future reference surface number */ - uint32_t num_future_references; - - /** \brief Statistics output for future reference surface. - * Only enabling statistics output for future reference picture when *past_ref_stat_buf is a valid - * VABufferID, it is needed in case app wants statistics data of both reference and current pictures - * in very special use cases for better performance. - * The output layout is defined by VAStatsStatisticsBufferType(for progressive and top field of - * interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case), only - * pixel_average_16x16/pixel_average_8x8 and variance_16x16/variance_8x8 data are valid. - **/ - VABufferID *future_ref_stat_buf; - - /** \brief ID of the output buffer. - * The number of outputs is determined by below DisableMVOutput and DisableStatisticsOutput. - * The output layout is defined by VAStatsMVBufferType, VAStatsStatisticsBufferType(for progressive and - * top field of interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case). - **/ - VABufferID *outputs; - - /** \brief MV predictor. It is valid only when mv_predictor_ctrl is not 0. - * Each block has a pair of MVs, one for past and one for future reference - * as defined by VAMotionVector. The block is in raster scan order. - * Buffer size shall not be less than the number of blocks multiplied by sizeof(VAMotionVector). - **/ - VABufferID mv_predictor; - - /** \brief QP input buffer. It is valid only when mb_qp is set to 1. - * The data in this buffer correspond to the input source. - * One QP per MB or CTB block in raster scan order, each QP is a signed char (8-bit) value. - **/ - VABufferID qp; -} VAStatsStatisticsParameter; - -#ifdef __cplusplus -} -#endif - -#endif /* VA_FEI_H */ diff --git a/prebuilts/x86_64/include/va/va_fei_h264.h b/prebuilts/x86_64/include/va/va_fei_h264.h deleted file mode 100644 index ddb8e8c..0000000 --- a/prebuilts/x86_64/include/va/va_fei_h264.h +++ /dev/null @@ -1,504 +0,0 @@ -/* - * Copyright (c) 2007-2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_fei_h264.h - * \brief The FEI encoding H264 special API - */ - -#ifndef VA_FEI_H264_H -#define VA_FEI_H264_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "va_fei.h" - -/** - * \defgroup api_fei_h264 H.264 FEI encoding API - * - * @{ - */ - -/** \brief FEI frame level control buffer for H.264 */ -typedef struct _VAEncMiscParameterFEIFrameControlH264 { - uint32_t function; /* one of the VAConfigAttribFEIFunctionType values */ - /** \brief MB (16x16) control input buffer. It is valid only when (mb_input | mb_size_ctrl) - * is set to 1. The data in this buffer correspond to the input source. 16x16 MB is in raster scan order, - * each MB control data structure is defined by VAEncFEIMBControlH264. - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMBControlH264). - * Note: if mb_qp is set, VAEncQPBufferH264 is expected. - */ - VABufferID mb_ctrl; - /** \brief distortion output of MB ENC or ENC_PAK. - * Each 16x16 block has one distortion data with VAEncFEIDistortionH264 layout - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIDistortionH264). - */ - VABufferID distortion; - /** \brief MVs data output of MB ENC. - * Each 16x16 block has one MVs data with layout VAMotionVector - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAMotionVector) * 16. - */ - VABufferID mv_data; - /** \brief MBCode data output of MB ENC. - * Each 16x16 block has one MB Code data with layout VAEncFEIMBCodeH264 - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMBCodeH264). - */ - VABufferID mb_code_data; - /** \brief QP input buffer with layout VAEncQPBufferH264. It is valid only when mb_qp is set to 1. - * The data in this buffer correspond to the input source. - * One QP per 16x16 block in raster scan order, each QP is a signed char (8-bit) value. - **/ - VABufferID qp; - /** \brief MV predictor. It is valid only when mv_predictor_enable is set to 1. - * Each 16x16 block has one or more pair of motion vectors and the corresponding - * reference indexes as defined by VAEncFEIMVPredictorH264. 16x16 block is in raster scan order. - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMVPredictorH264). */ - VABufferID mv_predictor; - - /** \brief number of MV predictors. It must not be greater than maximum supported MV predictor. */ - uint32_t num_mv_predictors_l0 : 16; - uint32_t num_mv_predictors_l1 : 16; - - /** \brief motion search method definition - * 0: default value, diamond search - * 1: full search - * 2: diamond search - **/ - uint32_t search_path : 8; - /** \brief maximum number of Search Units, valid range is [1, 63] - * 0 is treated as 1. reference search locations are grouped in a predefined pattern, - * and all locations within the same group must be either all are chosen or all are skipped. - * These predefined groups are called search unit (SU).*/ - uint32_t len_sp : 8; - uint32_t reserved0 : 16; - /** \brief defines the bit-mask for disabling sub-partition - * The lower 4 bits are for the major partitions (sub-macroblock) and the higher 3 bits for minor partitions (with sub-partition for 4x(8x8) sub-macroblocks. - * xxxxxx1 : 16x16 sub-macroblock disabled - * xxxxx1x : 2x(16x8) sub-macroblock within 16x16 disabled - * xxxx1xx : 2x(8x16) sub-macroblock within 16x16 disabled - * xxx1xxx : 1x(8x8) sub-partition for 4x(8x8) within 16x16 disabled - * xx1xxxx : 2x(8x4) sub-partition for 4x(8x8) within 16x16 disabled - * x1xxxxx : 2x(4x8) sub-partition for 4x(8x8) within 16x16 disabled - * 1xxxxxx : 4x(4x4) sub-partition for 4x(8x8) within 16x16 disabled - * 1111111 : Invalid - * 0000000 : default value */ - uint32_t sub_mb_part_mask : 7; - /** specifies which Luma Intra partition is enabled/disabled for intra mode decision. - * xxxx1: luma_intra_16x16 disabled - * xxx1x: luma_intra_8x8 disabled - * xx1xx: luma_intra_4x4 disabled - * xx111: intra prediction is disabled */ - uint32_t intra_part_mask : 5; - /** when set to 1, neighbor MV will be used as predictor; when set to 0, no neighbor MV will be used as predictor.*/ - uint32_t multi_pred_l0 : 1; - /** when set to 1, neighbor MV will be used as predictor; when set to 0, no neighbor MV will be used as predictor.*/ - uint32_t multi_pred_l1 : 1; - /**defines the half/quarter pel modes. The mode is inclusive, ie., higher precision mode samples lower precision locations. - * 00b: integer mode searching - * 01b: half-pel mode searching - * 10b: reserved - * 11b: quarter-pel mode searching */ - uint32_t sub_pel_mode : 2; - /** specifies distortion measure adjustments used for the inter motion search SAD comparison. - * 00b: none - * 10b: Haar transform adjusted*/ - uint32_t inter_sad : 2; - /** specifies distortion measure adjustments used for the intra motion search SAD comparison. - * 00b: none - * 10b: Haar transform adjusted*/ - uint32_t intra_sad : 2; - /** specifies if the output distortion is the raw distortion or cost adjusted distortion. - * 0: Raw Distortion without Cost - * 1: Distortion with added Cost */ - uint32_t distortion_type : 1; - /** when set to 1, enables the additional calls on Fraction & Bidirectional Refinement*/ - uint32_t repartition_check_enable : 1; - /** defines whether adaptive searching is enabled for IME(Integer Motion Estimation). - * 0: disable - * 1: enable */ - uint32_t adaptive_search : 1; - /** enables using the motion vector as an extra predictor provided by the host. If it is set, - * host needs to provide a buffer with motion vectors and the associated reference index for - * each 16x16 block as defined . The host can call processing function to get motion vectors and use as predictor. - * 0: MV predictor disabled - * 1: MV predictor enabled */ - uint32_t mv_predictor_enable : 1; - /** enables using the QP buffer to set the QP for each block*/ - uint32_t mb_qp : 1; - /** enable mb_ctrl buffer to handle MB*/ - uint32_t mb_input : 1; - /** when this flag is set, mb_ctrl must be set too and a buffer with per MB input - * needs to be provided and MaxSizeInWord and */ - uint32_t mb_size_ctrl : 1; - /** when this flag is set, extra distortion between the current MB and co-located MB is provided. - * Extra distortion output has performance impact, set it only when it is needed.*/ - uint32_t colocated_mb_distortion : 1; - uint32_t reserved1 : 4; - - /** \brief motion search window(ref_width * ref_height) */ - uint32_t ref_width : 8; - uint32_t ref_height : 8; - /** \brief predefined motion search windows. If selected, len_sp, window(ref_width * ref_eight) - * and search_path setting are ignored. - * 0: not use predefined search window - * 1: Tiny, len_sp=4, 24x24 window and diamond search - * 2: Small, len_sp=9, 28x28 window and diamond search - * 3: Diamond, len_sp=16, 48x40 window and diamond search - * 4: Large Diamond, len_sp=32, 48x40 window and diamond search - * 5: Exhaustive, len_sp=48, 48x40 window and full search - * 6: Extend Diamond, len_sp=16, 64x40 window and diamond search - * 7: Extend Large Diamond, len_sp=32, 64x40 window and diamond search - * 8: Extend Exhaustive, len_sp=48, 64x40 window and full search - **/ - uint32_t search_window : 4; - uint32_t reserved2 : 12; - - /** \brief max frame size control with multi passes QP setting */ - uint32_t max_frame_size; - /** \brief number of passes, every pass has different QP */ - uint32_t num_passes; - /** \brief delta QP list for every pass */ - uint8_t *delta_qp; - uint32_t reserved3[VA_PADDING_LOW]; -} VAEncMiscParameterFEIFrameControlH264; - -/** \brief FEI MB level control data structure */ -typedef struct _VAEncFEIMBControlH264 { - /** \brief when set, correposndent MB is coded as intra */ - uint32_t force_to_intra : 1; - /** \brief when set, correposndent MB is coded as skip */ - uint32_t force_to_skip : 1; - /** \brief specifies whether this macroblock should be coded as a non-skipped macroblock. */ - uint32_t force_to_nonskip : 1; - uint32_t enable_direct_bias_adjustment : 1; - uint32_t enable_motion_bias_adjustment : 1; - uint32_t ext_mv_cost_scaling_factor : 3; - uint32_t reserved0 : 24; - - uint32_t reserved1; - - uint32_t reserved2; - - uint32_t reserved3 : 16; - /** \brief when mb_size_ctrl is set, size here is used to budget accumulatively. Set to 0xFF if don't care. */ - uint32_t target_size_in_word : 8; - /** \brief specifies the max size of each MB */ - uint32_t max_size_in_word : 8; -} VAEncFEIMBControlH264; - - -/** \brief Application can use this definition as reference to allocate the buffer - * based on MaxNumPredictor returned from attribute VAConfigAttribFEIMVPredictors query. - **/ -typedef struct _VAEncFEIMVPredictorH264 { - /** \brief Reference index corresponding to the entry of RefPicList0 & RefPicList1 in VAEncSliceParameterBufferH264. - * Note that RefPicList0 & RefPicList1 needs to be the same for all slices. - * ref_idx_l0_x : index to RefPicList0; ref_idx_l1_x : index to RefPicList1; x : 0 - MaxNumPredictor. - **/ - struct { - uint8_t ref_idx_l0 : 4; - uint8_t ref_idx_l1 : 4; - } ref_idx[4]; /* index is predictor number */ - uint32_t reserved; - /** \brief MV. MaxNumPredictor must be the returned value from attribute VAConfigAttribFEIMVPredictors query. - * Even application doesn't use the maximum predictors, the VAFEIMVPredictorH264 structure size - * has to be defined as maximum so each MB can be at a fixed location. - * Note that 0x8000 must be used for correspondent intra block. - **/ - VAMotionVector mv[4]; /* MaxNumPredictor is 4 */ -} VAEncFEIMVPredictorH264; - -/** \brief FEI output */ -/** - * Motion vector output is per 4x4 block. For each 4x4 block there is a pair of MVs - * for RefPicList0 and RefPicList1 and each MV is 4 bytes including horizontal and vertical directions. - * Depending on Subblock partition, for the shape that is not 4x4, the MV is replicated - * so each 4x4 block has a pair of MVs. The 16x16 block has 32 MVs (128 bytes). - * 0x8000 is used for correspondent intra block. The 16x16 block is in raster scan order, - * within the 16x16 block, each 4x4 block MV is ordered as below in memory. - * The buffer size shall be greater than or equal to the number of 16x16 blocks multiplied by 128 bytes. - * Note that, when separate ENC and PAK is enabled, the exact layout of this buffer is needed for PAK input. - * App can reuse this buffer, or copy to a different buffer as PAK input. - * Layout is defined as Generic motion vector data structure VAMotionVector - * 16x16 Block - * ----------------------------------------- - * | 1 | 2 | 5 | 6 | - * ----------------------------------------- - * | 3 | 4 | 7 | 8 | - * ----------------------------------------- - * | 9 | 10 | 13 | 14 | - * ----------------------------------------- - * | 11 | 12 | 15 | 16 | - * ----------------------------------------- - **/ - -/** \brief VAEncFEIMBCodeH264 defines the data structure for VAEncFEIMBCodeBufferType per 16x16 MB block. - * it is output buffer of ENC and ENC_PAK modes, it's also input buffer of PAK mode. - * The 16x16 block is in raster scan order. Buffer size shall not be less than the number of 16x16 blocks - * multiplied by sizeof(VAEncFEIMBCodeH264). Note that, when separate ENC and PAK is enabled, - * the exact layout of this buffer is needed for PAK input. App can reuse this buffer, - * or copy to a different buffer as PAK input, reserved elements must not be modified when used as PAK input. - **/ -typedef struct _VAEncFEIMBCodeH264 { - //DWORD 0~2 - uint32_t reserved0[3]; - - //DWORD 3 - uint32_t inter_mb_mode : 2; - uint32_t mb_skip_flag : 1; - uint32_t reserved1 : 1; - uint32_t intra_mb_mode : 2; - uint32_t reserved2 : 1; - uint32_t field_mb_polarity_flag : 1; - uint32_t mb_type : 5; - uint32_t intra_mb_flag : 1; - uint32_t field_mb_flag : 1; - uint32_t transform8x8_flag : 1; - uint32_t reserved3 : 1; - uint32_t dc_block_coded_cr_flag : 1; - uint32_t dc_block_coded_cb_flag : 1; - uint32_t dc_block_coded_y_flag : 1; - uint32_t reserved4 : 12; - - //DWORD 4 - uint32_t horz_origin : 8; - uint32_t vert_origin : 8; - uint32_t cbp_y : 16; - - //DWORD 5 - uint32_t cbp_cb : 16; - uint32_t cbp_cr : 16; - - //DWORD 6 - uint32_t qp_prime_y : 8; - uint32_t reserved5 : 17; - uint32_t mb_skip_conv_disable : 1; - uint32_t is_last_mb : 1; - uint32_t enable_coefficient_clamp : 1; - uint32_t direct8x8_pattern : 4; - - //DWORD 7 8 and 9 - union { - /* Intra MBs */ - struct { - uint32_t luma_intra_pred_modes0 : 16; - uint32_t luma_intra_pred_modes1 : 16; - - uint32_t luma_intra_pred_modes2 : 16; - uint32_t luma_intra_pred_modes3 : 16; - - uint32_t chroma_intra_pred_mode : 2; - uint32_t intra_pred_avail_flag : 5; - uint32_t intra_pred_avail_flagF : 1; - uint32_t reserved6 : 24; - } intra_mb; - - /* Inter MBs */ - struct { - uint32_t sub_mb_shapes : 8; - uint32_t sub_mb_pred_modes : 8; - uint32_t reserved7 : 16; - - uint32_t ref_idx_l0_0 : 8; - uint32_t ref_idx_l0_1 : 8; - uint32_t ref_idx_l0_2 : 8; - uint32_t ref_idx_l0_3 : 8; - - uint32_t ref_idx_l1_0 : 8; - uint32_t ref_idx_l1_1 : 8; - uint32_t ref_idx_l1_2 : 8; - uint32_t ref_idx_l1_3 : 8; - } inter_mb; - } mb_mode; - - //DWORD 10 - uint32_t reserved8 : 16; - uint32_t target_size_in_word : 8; - uint32_t max_size_in_word : 8; - - //DWORD 11~14 - uint32_t reserved9[4]; - - //DWORD 15 - uint32_t reserved10; -} VAEncFEIMBCodeH264; // 64 bytes - -/** \brief VAEncFEIDistortionH264 defines the data structure for VAEncFEIDistortionBufferType per 16x16 MB block. - * It is output buffer of ENC and ENC_PAK modes, The 16x16 block is in raster scan order. - * Buffer size shall not be less than the number of 16x16 blocks multiple by sizeof(VAEncFEIDistortionH264). - **/ -typedef struct _VAEncFEIDistortionH264 { - /** \brief Inter-prediction-distortion associated with motion vector i (co-located with subblock_4x4_i). - * Its meaning is determined by sub-shape. It must be zero if the corresponding sub-shape is not chosen. - **/ - uint16_t inter_distortion[16]; - uint32_t best_inter_distortion : 16; - uint32_t best_intra_distortion : 16; - uint32_t colocated_mb_distortion : 16; - uint32_t reserved0 : 16; - uint32_t reserved1[2]; -} VAEncFEIDistortionH264; // 48 bytes - -/** \brief Motion Vector and Statistics frame level controls. - * VAStatsStatisticsParameterBufferType for H264 16x16 block - **/ -typedef struct _VAStatsStatisticsParameterH264 { - VAStatsStatisticsParameter stats_params; - - uint32_t frame_qp : 8; - /** \brief length of search path */ - uint32_t len_sp : 8; - /** \brief motion search method definition - * 0: default value, diamond search - * 1: full search - * 2: diamond search - **/ - uint32_t search_path : 8; - uint32_t reserved0 : 8; - - uint32_t sub_mb_part_mask : 7; - /** \brief sub pixel mode definition - * 00b: integer mode searching - * 01b: half-pel mode searching - * 10b: reserved - * 11b: quarter-pel mode searching - **/ - uint32_t sub_pel_mode : 2; - /** \brief distortion measure adjustment for inter search SAD comparison - * 00b: none - * 01b: reserved - * 10b: Haar transform adjusted - * 11b: reserved - **/ - uint32_t inter_sad : 2; - /** \brief distortion measure adjustment for intra search SAD comparison - * 00b: none - * 01b: reserved - * 10b: Haar transform adjusted - * 11b: reserved - **/ - uint32_t intra_sad : 2; - uint32_t adaptive_search : 1; - /** \brief indicate if future or/and past MV in mv_predictor buffer is valid. - * 0: MV predictor disabled - * 1: MV predictor enabled for past reference - * 2: MV predictor enabled for future reference - * 3: MV predictor enabled for both past and future references - **/ - uint32_t mv_predictor_ctrl : 3; - uint32_t mb_qp : 1; - /** \brief forward transform enable - * 0: disable - * 1: enable, needs frame_qp or mb_qp input for transform - **/ - uint32_t ft_enable : 1; - /** \brief luma intra mode partition mask - * xxxx1: luma_intra_16x16 disabled - * xxx1x: luma_intra_8x8 disabled - * xx1xx: luma_intra_4x4 disabled - * xx111: intra prediction is disabled - **/ - uint32_t intra_part_mask : 5; - uint32_t reserved1 : 8; - - /** \brief motion search window(ref_width * ref_height) */ - uint32_t ref_width : 8; - uint32_t ref_height : 8; - /** \brief predefined motion search windows. If selected, len_sp, window(ref_width * ref_eight) - * and search_path setting are ignored. - * 0: not use predefined search window - * 1: Tiny, len_sp=4, 24x24 window and diamond search - * 2: Small, len_sp=9, 28x28 window and diamond search - * 3: Diamond, len_sp=16, 48x40 window and diamond search - * 4: Large Diamond, len_sp=32, 48x40 window and diamond search - * 5: Exhaustive, len_sp=48, 48x40 window and full search - * 6: Extend Diamond, len_sp=16, 64x40 window and diamond search - * 7: Extend Large Diamond, len_sp=32, 64x40 window and diamond search - * 8: Extend Exhaustive, len_sp=48, 64x40 window and full search - **/ - uint32_t search_window : 4; - uint32_t reserved2 : 12; - - /** \brief MVOutput. When set to 1, MV output is NOT provided */ - uint32_t disable_mv_output : 1; - /** \brief StatisticsOutput. When set to 1, Statistics output is NOT provided. */ - uint32_t disable_statistics_output : 1; - /** \brief block 8x8 data enabling in statistics output */ - uint32_t enable_8x8_statistics : 1; - uint32_t reserved3 : 29; - uint32_t reserved4[2]; -} VAStatsStatisticsParameterH264; - -/** \brief VAStatsStatisticsH264. H264 Statistics buffer layout for VAStatsStatisticsBufferType - * and VAStatsStatisticsBottomFieldBufferType(for interlaced only). - * Statistics output is per 16x16 block. Data structure per 16x16 block is defined below. - * The 16x16 block is in raster scan order. The buffer size shall be greater than or equal to - * the number of 16x16 blocks multiplied by sizeof(VAStatsStatisticsH264). - **/ -typedef struct _VAStatsStatisticsH264 { - /** \brief past reference */ - uint32_t best_inter_distortion0 : 16; - uint32_t inter_mode0 : 16; - - /** \brief future reference */ - uint32_t best_inter_distortion1 : 16; - uint32_t inter_mode1 : 16; - - uint32_t best_intra_distortion : 16; - uint32_t intra_mode : 16; - - uint32_t num_non_zero_coef : 16; - uint32_t reserved0 : 16; - - uint32_t sum_coef; - - /** \brief DWORD 5 flat info **/ - uint32_t mb_is_flat : 1; - uint32_t reserved1 : 31; - - /** \brief DWORD 6 variance for block16x16**/ - uint32_t variance_16x16; - /** \brief DWORD 7 ~ 10, variance for block8x8 **/ - uint32_t variance_8x8[4]; - - /** \brief DWORD 11 pixel_average for block16x16 **/ - uint32_t pixel_average_16x16; - /** \brief DWORD 12 ~ 15, pixel_average for block8x8 **/ - uint32_t pixel_average_8x8[4]; -} VAStatsStatisticsH264; // 64 bytes - - -#ifdef __cplusplus -} -#endif - -#endif /* VA_FEI_H264_H */ diff --git a/prebuilts/x86_64/include/va/va_fei_hevc.h b/prebuilts/x86_64/include/va/va_fei_hevc.h deleted file mode 100644 index 6ba9047..0000000 --- a/prebuilts/x86_64/include/va/va_fei_hevc.h +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Copyright (c) 2007-2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_fei_hevc.h - * \brief The FEI encoding HEVC special API - */ - - -#ifndef __VA_FEI_HEVC_H__ -#define __VA_FEI_HEVC_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "va_fei.h" - -/** - * \defgroup api_fei_hevc HEVC FEI encoding API - * - * @{ - */ - -/** \brief FEI frame level control buffer for HEVC */ -typedef struct _VAEncMiscParameterFEIFrameControlHEVC { - /* one of the VAConfigAttribFEIFunctionType values */ - uint32_t function; - /** \brief CTB control input buffer. It is valid only when per_ctb_input - * is set to 1. The data in this buffer correspond to the input source. CTB is in raster scan order, - * each CTB control data structure is defined by VAEncFEICTBControlHEVC. - * Buffer size shall not be less than the number of CTBs multiplied by - * sizeof(VAEncFEICTBControlHEVC). - */ - VABufferID ctb_ctrl; - /** \brief CTB cmd per CTB data output of ENC - * it is reserved for CTB level information - * it should include CU split information and other CTB datas . - * Each CTB block has one CTB cmd data. - */ - VABufferID ctb_cmd; - /** \brief CU record data output of ENC - * it is reserved for CU level information - * it should include CU detail data. include mode,MV, reference etc. - * Each CTB block has one CU record data. - */ - VABufferID cu_record; - /** \brief distortion output of ENC or ENC_PAK. - * Each CTB has one distortion data with VAEncFEIDistortionHevc - * Buffer size shall not be less than the number of CTBs multiplied by - * sizeof(VAEncFEIDistortionHevc). - */ - VABufferID distortion; - /** \brief Qp input buffer. It is valid only when per_block_qp is set to 1. - * The data in this buffer correspond to the input source. - * One Qp per block block is in raster scan order, each Qp is a signed char (8-bit) value. - **/ - VABufferID qp; - /** \brief MV predictor. It is valid only when mv_predictor_input is set to non-zero. - * Each CTB block has one or more pair of motion vectors and the corresponding - * reference indexes as defined by VAEncFEIMVPredictorHEVC. 32x32 block is in raster scan order. - * Buffer size shall not be less than the number of 16x16 blocks multiplied by - * sizeof(VAEncFEIMVPredictorHEVC). */ - VABufferID mv_predictor; - - /** \brief number of MV predictors L0 and L1. the maximum number of motion vector predictor for a 16x16, 32x32 or - * 64x64 block is four, it must not be greater than maximum supported MV predictor, - **/ - uint32_t num_mv_predictors_l0 : 16; - uint32_t num_mv_predictors_l1 : 16; - - /** \brief control parameters */ - uint32_t search_path : 8; - uint32_t len_sp : 8; - uint32_t reserved0 : 16; - - /** \brief multi pred l0/1 - * 0000: no internal MV predictor will be used - * 0001: spatial MV predictors - * 0100/1000: Reserved - **/ - uint32_t multi_pred_l0 : 4; - uint32_t multi_pred_l1 : 4; - /** \brief defines the motion vector precision, like integer/half/quarter pel. - * 00b: integer pel - * 01b: half-pel - * 10b: reserved - * 11b: quarter-pel - */ - uint32_t sub_pel_mode : 2; - uint32_t adaptive_search : 1; - /** \brief mv_predictor_input - * 000: MV predictor disabled - * 001: MV predictor enabled per 16x16 block - * 010: MV predictor enabled per 32x32 block - * 011: MV predictor enabled per 64x64 block - * 111: MV predictor enabled, block size can vary and is determined by BlockSize in motion vector predictor buffer - * 100/101/110: Reserved - **/ - uint32_t mv_predictor_input : 3; - /** \brief enables per CTB or CU qp */ - uint32_t per_block_qp : 1; - /** \brief enables the per CTB input , if 1, need ctb_ctrl to be a real surface ID*/ - uint32_t per_ctb_input : 1; - /** when this flag is set, extra distortion between current CTB and co-located CTB is provided. - * Extra distortion output has performance impact, set it only when it is needed */ - uint32_t colocated_ctb_distortion : 1; - /** brief specifies whether this CTB should be forced to split to remove Inter big LCU: do not check Inter 32x32 - * PUs. Every 32x32 LCU is split at least once. It can be used to improved performance. - * 0: ENC determined block type - * 1: Force to split - **/ - uint32_t force_lcu_split : 1; - /** \brief enables CU64x64 check */ - uint32_t enable_cu64_check : 1; - /** \brief enables CU64x64 asymmetric motion partition check */ - uint32_t enable_cu64_amp_check : 1; - /** \brief specifies if check the 64x64 merge candidate - * 0: after skip check, - * 1: only skip check for 64x64 - Default: 0. This field is used by LCU64 bi-directional. - **/ - uint32_t cu64_skip_check_only : 1; - uint32_t reserved1 : 11; - /** specifies the search region width in pixels. - * When bidirectional search is enabled, this applies to both search regions */ - uint32_t ref_width : 8; - /** specifies the reference region height in pixels. When bidirectional search is enabled, - * this applies to both search regions. */ - uint32_t ref_height : 8; - /** \brief search window similar for AVC - * defines predefined search windows. If it is selected, RefWidth, RefHeight, LenSP and SearchPath are ignored. - * 0 : not use predefined search window - * 1 : Tiny – (4 SUs) 24x24 window diamond search - * 2 : Small – (9 SUs) 28x28 window diamond search - * 3 : Diamond – (16 SUs) 48x40 window diamond search - * 4 : Large Diamond – (32 SUs) 48x40 window diamond search - * 5 : Exhaustive – 48x40 window full search - * 6 : (64 SUs) 64x64 window full search - * Note: option 1, 2, 3 and 4 are valid only when CAP parameter SearchWindow64Support is 0. - * And option 6 is valid only when SearchWindow64Support is 1.*/ - uint32_t search_window : 8; - /** \brief number of internal MV predictors for IME searches */ - uint32_t max_num_ime_search_center : 3; - /** \brief fast intra prediction enabling bit. It is used as a trade-off between speed and quality. - * The flag will be ignored if it's unsupported in the driver*/ - uint32_t fast_intra_mode : 1; - uint32_t reserved2 : 4; - - /** \brief specifies number of splits that encoder could be run concurrently - * 1: level 1, default value - * 2: level 2 - * 4: level 3 - **/ - uint32_t num_concurrent_enc_frame_partition : 8; - uint32_t reserved3 : 24; - - /** \brief max frame size control with multi passes QP setting */ - uint32_t max_frame_size; - /** \brief number of passes, every pass has different QP */ - uint32_t num_passes; - /** \brief delta QP list for every pass */ - uint8_t *delta_qp; - - uint32_t reserved4[2]; -} VAEncMiscParameterFEIFrameControlHEVC; - -/** \brief Application can use this definition as reference to allocate the buffer - * based on MaxNumPredictor returned from attribute VAConfigAttribFEIMVPredictors query. - * this buffer allocation is always based on 16x16 block even block size is indicated as 32x32 or 64x64, and buffer - * layout is always in 32x32 block raster scan order even block size is 16x16 or 64x64. If 32x32 block size is set, - * only the data in the first 16x16 block (block 0) is used for 32x32 block. If 64x64 block size is set - * MV layout is still in 32x32 raster scan order, the same as 32x32 and the first 16x16 - * block within each 32x32 block needs to have intended MV data (four 32x32 blocks will have the same MV data in the - * correspondent first 16x16 block). Data structure for each 16x16 block is defined as below (same as AVC except - * BlockSize/Reserved bits). - **/ -typedef struct _VAEncFEIMVPredictorHEVC { - /** \brief Feference index corresponding to the entry of RefPicList0 & RefPicList1 in slice header (final reference - * list). Note that RefPicList0 & RefPicList1 needs to be the same for all slices. - * Ref0xIndex – RefPicList0; Ref1xIndex – RefPicList1; x – 0 ~ MaxNumPredictor */ - struct { - uint8_t ref_idx_l0 : 4; - uint8_t ref_idx_l1 : 4; - } ref_idx[4]; /* index is predictor number */ - /** \brief Valid only when MVPredictor is set to 011 for HEVC. Only valid in the first 16x16 block. - * 00: MV predictor disabled for this 32x32 block - * 01: MV predictor enabled per 16x16 block for this 32x32 block - * 10: MV predictor enabled per 32x32 block, the rest of 16x16 block data within this 32x32 block are ignored - * 11: Reserved */ - uint32_t block_size : 2; - uint32_t reserved : 30; - - VAMotionVector mv[4]; /* MaxNumPredictor is 4 */ -} VAEncFEIMVPredictorHEVC; //40 bytes - -/** \brief FEI CTB level control data structure */ -typedef struct _VAEncFEICTBControlHEVC { - // DWORD 0 - uint32_t force_to_intra : 1; - uint32_t force_to_inter : 1; - uint32_t force_to_skip : 1; - /** \brief force all coeff to zero */ - uint32_t force_to_zero_coeff : 1; - uint32_t reserved0 : 28; - // DWORD 1 - uint32_t reserved1; - // DWORD 2 - uint32_t reserved2; - // DWORD 3 - uint32_t reserved3; -} VAEncFEICTBControlHEVC; - -/** \brief VAEncFEIDistortionHevc defines the data structure for VAEncFEIDistortionBufferType per CTB block. - * It is output buffer of ENC and ENC_PAK modes, The CTB block is in raster scan order. - * Buffer size shall not be less than the number of CTB blocks multiple by sizeof(VAEncFEIDistortionHevc). - **/ -typedef struct _VAEncFEIDistortionHevc { - /** best CTB distortion */ - uint32_t best_distortion; - /** only when colocated_ctb_distortion in VAEncMiscParameterFEIFrameControlHEVC is set */ - uint32_t colocated_ctb_distortion; -} VAEncFEIDistortionHevc; -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/prebuilts/x86_64/include/va/va_prot.h b/prebuilts/x86_64/include/va/va_prot.h deleted file mode 100644 index 5c59bb0..0000000 --- a/prebuilts/x86_64/include/va/va_prot.h +++ /dev/null @@ -1,515 +0,0 @@ -/* - * Copyright (c) 2020 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_prot.h - * \brief Protected content API. - * - * This file contains the \ref api_prot "Protected content API". - */ - -#ifndef VA_PROT_H -#define VA_PROT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_prot Protected content API - * - * @{ - * \section prolouge Prolouge - * Video streaming is ubiquitous and the support for video streaming is widely - * available across client open systems such as PCs, MACs, Chromebooks etc. and - * closed systems such as settop box, smart TVs, DVDs etc. By default, - * video streaming is not considered premium due to various constraints such as - * resolution, quality, production cost etc. but recently streaming of premium - * video(1080p+) has become norm. The streaming of premium video in open systems - * such as PCs, MACs, Chromebooks etc. makes video particularly susceptible to - * piracy (due to non-video playback usages of such systems) resulting in - * millions of dollars of loss to content creators. - * - * Digital Rights Management(DRM) has been proposed to stop piracy of premium - * video streams across a wide spectrum. There are some known open/closed DRM - * standards such as [Widevine by Google](https://www.widevine.com/), - * [PlayReady by Microsoft](https://www.microsoft.com/playready/), - * [FairPlay by Apple](https://developer.apple.com/streaming/fps/), - * [Merlin by Sony](https://www.marlin-community.com/), etc... Each DRM - * standard has its properties but all DRM standards support a common - * mechanism. This common mechanism involves cryptographical method for - * authenticating the client system, delivering bitstream and required - * cryptographic assets to client system and then cryptographically processing - * bitstream in client system. The cryptographic methods used in these steps - * are asymmetric such as RSA, DH etc. and symmetric such as AES CTR, CBC etc. - * encryption mechanisms. The authentication of client system, delivery of - * bitstream and cryptographic assets to client system is performed using - * asymmetric cryptographic mechanism while bitstream is encrypted and processed - * using symmetric cryptographic. In DRM world, authentication of client system, - * delivery of bitstream and required cryptographic assets to client system is - * loosely called provisioning and license acquisition while the processing of - * cryptographically secure bitstream is divided as video decryption/decoding, - * audio decryption/playback, video display. Besides DRM standards, Video/Audio - * bitstream encryption standard such as - * [Common Encryption Standard(CENC)](https://www.iso.org/standard/76597.html) - * provides a mechanism to normalize bitstream encryption methods across vendors - * while providing flexibility. - * - * \section DRM Pipeline - * Most DRM standards execute the following deep pipeline to playback - * contents on client systems from streaming servers - provisioning uses - * provisioning servers, licence aquisition uses license servers, video - * bitstream delivery uses content servers and decryption/decoding, audio - * bitstream delivery uses content servers and decyption/playback, - * display/playback. The system level HWDRM sequence diagram is following - - * ![HWDRM sequence diagram](https://user-images.githubusercontent.com/75039699/102427278-df284e80-3fc5-11eb-9a3e-129b5f6b567a.png) - * and HWDRM pipeline view is following - - * ![HWDRM pipeline view](https://user-images.githubusercontent.com/75039699/102427357-04b55800-3fc6-11eb-8b8c-f34fc44ec061.png) - * - * \section LibVA Protected Content APIs - * The LibVA Protected APIs are designed to enable DRM capabilities or - * facilitate isolated communicaiton with TEE. - * The VAEntrypointProtectedTEEComm is to define interfaces for Application - * to TEE direct communication to perform various TEE centric operations - * such as standalone provisioning of platform at factory or provisioning - * TEE for other usages, providing TEE capabilities etc. - * The VAEntrypointProtectedContent is to define interfaces for protected - * video playback using HWDRM. This entry point co-ordinates assets across - * TEE/GPU/Display for HWDRM playback. - * - * The difference between Protected Content and Protected TEE Communication - * is that Protected Content Entrypoint does not provide isolated entry - * point for TEE and invokes TEE only from HWDRM perspective. - * - * Protected Content Entrypoint - * The most of DRM standards execute following deep pipeline to playback - * contents on client systems from streaming servers - provisioning uses - * provisioning servers, licence aquisition uses license servers, video - * bitstream delivery uses content servers and decryption/decoding, audio - * bitstream delivery uses content servers and decyption/playback, - * display/playback. - * - * The Provisioning and License aquisition implementations are Independent - * Hardware Vendor (IHV) specific but most IHVs use some form of Trusted - * Execution Environment (TEE) to prepare client platform or system for DRM - * content playback. The provisioning operations use provisioning servers (as - * instructed in DRM standard) and client system TEE. The communication between - * provisioning servers and client system TEE uses asymmetic cryptographic - * mechanism. This step provides a way to establish root-of-trust between - * client system and streaming servers. Once root-of-trust is established then - * client system requests for license aquisition for a particular streaming - * title. The license aquisition involves communication between licensing - * servers and TEE using asymmetic cryptographic mechanism. At end of this step, - * client system TEE has required assets to decrypt/decode. Although these - * communication does not direcly involve video aspect of GPU but **facilitate - * GPU required assets to playback premium contents**. - * - * To support DRM standard requirements in playback pipeline, OSes and HWs - * incorporate various methods to protect full playback pipeline. These - * methods of protection could be SW based or HW based. The SW based protection - * mechanism of DRMs is called SWDRM while HW based protection mechanism is - * called HWDRM. There is no previous support in LibVA to support either DRM - * mechanism. - * - * For DRM capabilities, APIs inolve creation of protected session to - * communicate with TEE and then using these protected sessions to process - * video/audio data. The philophashy behind these API is to leverage existing - * LibVA infrastructure as much as possible. - * - * Note: TEE could be any secure HW device such as ME-FW or FPGA Secure - * Enclave or NPU Secure Enclave. There are 2 concepts here – TEE Type such - * as ME-FW or FPGA or NPU; TEE Type Client such as for AMT or HDCP or - * something else etc. - * - * \section description Detailed Description - * The Protected content API provides a general mechanism for opening - * protected session with TEE and if required then \ref priming GPU/Display. - * The behavior of protected session API depends on parameterization/ - * configuration of protected session. Just for TEE tasks, protected - * session is parameterized/configured as TEE Communication while for - * HWDRM, protected session is parameterized/confgured as Protected - * Content. - * - * TEE Communication Entrypoint - * With TEE Communication parameterization/configuration, client - * executes TEE workloads in TEE with TEE Communication protected - * session. - * - * Protected Content Entrypoint - * With Protected Content parameterization/configuration, client - * executes HWDRM playback workloads HW accelerating protected video - * content decryption/decoding with protected content session. - * - * Before calling vaCreateProtectedSession, VAConfigID is obtained using - * existing libva mechanism to determine configuration parameters of - * protected session. The VAConfigID is determined in this way so that - * Protected Session implementation aligns with existing libva implementation. - * After obtaining VAConfigID, Protected Session needs to be created but - * note this is a session and not a context. Refer VAProtectedSessionID - * for more details. - * - * Note:- Protected session represents session object that has all security - * information needed for Secure Enclave to operate certain operations. - * - * \subsection priming Priming - * Priming is used to refer various types of initializations. For example, - * if license acquisition is being performed then priming means that TEE is - * already provisioned aka TEE has some sort of "cryptographic" whitelist of - * servers that TEE will use to do license acquisition for video playback. If - * HWDRM video playback is being performed then priming means that HWDRM - * eco-system TEE/GPU/Display has proper keys to do proper video playback etc. - * - * Protected content API uses the following paradigm for protected content - * session: - * - \ref api_pc_caps - * - \ref api_pc_setup - * - \ref api_pc_exec - * - \ref api_pc_attach - * - * \subsection api_pc_caps Query for supported cipher mode, block size, mode - * - * Checking whether protected content is supported can be performed with - * vaQueryConfigEntrypoints() and the profile argument set to - * #VAProfileProtected. If protected content is supported, then the list of - * returned entry-points will include #VAEntrypointProtectedContent - * - * \code - * VAEntrypoint *entrypoints; - * int i, num_entrypoints, supportsProtectedContent = 0; - * - * num_entrypoints = vaMaxNumEntrypoints(); - * entrypoints = malloc(num_entrypoints * sizeof(entrypoints[0]); - * vaQueryConfigEntrypoints(va_dpy, VAProfileProtected, entrypoints, - * &num_entrypoints); - * - * for (i = 0; !supportsProtectedContent && i < num_entrypoints; i++) { - * if (entrypoints[i] == VAEntrypointProtectedContent) - * supportsProtectedContent = 1; - * } - * \endcode - * - * Then, the vaGetConfigAttributes() function is used to query the protected - * session capabilities. - * - * \code - * VAConfigAttrib attribs; - * attribs[0].type = VAConfigAttribProtectedContentCipherAlgorithm; - * attribs[1].type = VAConfigAttribProtectedContentCipherBlockSize; - * attribs[2].type = VAConfigAttribProtectedContentCipherMode; - * attribs[3].type = VAConfigAttribProtectedContentCipherSampleType; - * attribs[4].type = VAConfigAttribProtectedContentUsage; - * vaGetConfigAttributes(va_dpy, VAProfileProtected, - * VAEntrypointProtectedContent, attribs, 5); - * if ((attribs[1].value & VA_PC_CIPHER_AES) == 0) { - * // not find desired cipher algorithm - * assert(0); - * } - * if ((attribs[2].value & VA_PC_BLOCK_SIZE_128) == 0) { - * // not find desired block size - * assert(0); - * } - * if ((attribs[3].value & VA_PC_CIPHER_MODE_CBC) == 0) { - * // not find desired counter mode - * assert(0); - * } - * if ((attribs[4].value & VA_PC_SAMPLE_TYPE_SUBSAMPLE) == 0) { - * // not find desired sample type - * assert(0); - * } - * if ((attribs[5].value & VA_PC_USAGE_WIDEVINE) == 0) { - * // not find desired usage - * assert(0); - * } - * \endcode - * - * \subsection api_pc_setup Set up a protected content session - * - * TEE Communication Entrypoint - * The protected content session provides a TEE session that is used to extract - * TEE information. This information could be used to peform TEE operations. - * - * Protected Content Entrypoint - * The protected content session can be attached to VA decode/encode/vp context - * to do decryption/protection in the pipeline. - * Before creating a protected content session, it needs to create a config - * first via vaCreateConfig(). Then using this config id to create a protected - * content session via vaCreateProtectedSession(). - * - * The general control flow is demonstrated by the following pseudo-code: - * \code - * // Create config - * VAConfigID config_id; - * - * attribs[0].value = VA_PC_CIPHER_AES; - * attribs[1].value = VA_PC_BLOCK_SIZE_128; - * attribs[2].value = VA_PC_CIPHER_MODE_CBC; - * attribs[3].value = VA_PC_SAMPLE_TYPE_SUBSAMPLE; - * attribs[4].value = VA_PC_USAGE_WIDEVINE; - * va_status = vaCreateConfig(va_dpy, VAProfileProtected, - * VAEntrypointProtectedContent, attribs, 5, &config_id); - * CHECK_VASTATUS(va_status, "vaCreateConfig"); - * \endcode - * - * Once the config is set up, we can create protected content session via - vaCreateProtectedSession(). - * \code - * // Create a protected session - * VAProtectedSessionID crypto_session; - * - * va_status = vaCreateProtectedSession(va_dpy, config_id, &crypto_session); - * CHECK_VASTATUS(va_status, "vaCreateProtectedSession"); - * \endcode - * - * \subsection api_pc_exec TEE communication via vaProtectedSessionExecute() - * - * TEE Communication Entrypoint - * App needs to communicate with TEE to get TEE information or \ref priming - * "prime" TEE with information that will be utilized for future TEE - * operations/tasks. - * - * Protected Content Entrypoint - * Before starting decryption/encryption operation in GPU, app may need to - * communicate with TEE to get encrypted assets for \ref priming HWDRM pipeline - * for decryption. App need to call vaProtectedSessionExecute() to get this - * asset. The following pseudo-code demonstrates getting session assets via - * vaProtectedSessionExecute() as an example. - * - * In this example, the vaCreateBuffer is called with exec_buffer mainly becasue TEE - * Communication Entrypoint buffers are CPU bound and buffer size is small enough to - * have extra copy operation without impacting performance. - * - * \code - * uint32_t app_id = 0xFF; - * VABufferID buffer; - * VAProtectedSessionExecuteBuffer exec_buff = {0}; - * - * exec_buff.function_id = GET_SESSION_ID; - * exec_buff.input.data = nullptr; - * exec_buff.input.data_size = 0; - * exec_buff.output.data = &app_id; - * exec_buff.output.max_data_size = sizeof(app_id); - * va_status = vaCreateBuffer( - * va_dpy, - * crypto_session, - * (VABufferType) VAProtectedSessionExecuteBufferType, - * sizeof(exec_buff), - * 1, - * &exec_buff, - * &buffer); - * - * va_status = vaProtectedSessionExecute(va_dpy, crypto_session, buffer); - * - * vaDestroyBuffer(va_dpy, buffer); - * \endcode - * - * \subsection api_pc_attach Attach/Detach protected content session to the VA - * context which want to enable/disable decryption/protection - * - * Protected content session is attached to VA decode/encode/vp context to - * enable protected decoding/encoding/video processing per frame or entire - * stream. If protected session attached per frame then application has 2 - * options for decoding/encoding skip processing i.e. accomodating clear - * frames - 1. Application could do detach after each frame is processed - * to process clear frame 2. Application could remains attached to decode/ - * encode session but specify enryption byte length to 0. - * The video processing does not has option #2 mainly because API does - * not provide skip processing. - * - * \code - * vaAttachProtectedSession(va_dpy, decode_ctx, crypto_session); - * foreach (iteration) { - * vaBeginPicture(va_dpy, decode_ctx, surface); - * ... - * vaRenderPicture(va_dpy, decode_ctx, &buf_id1, 1); - * vaRenderPicture(va_dpy, decode_ctx, &buf_id2, 1); - * // Buffer holding encryption parameters, i.e. VAEncryptionParameterBufferType buffer - * vaRenderPicture(va_dpy, decode_ctx, &buf_id_enc_param, 1); - * ... - * vaEndPicture(va_dpy, decode_ctx); - * } - * vaDetachProtectedSession(va_dpy, decode_ctx); - * \endcode - * - * or it could be frame-by-frame attaching/detaching as following: - * - * \code - * foreach (iteration) { - * if (encrypted) - * vaAttachProtectedSession(va_dpy, decode_ctx, crypto_session); - - * vaBeginPicture(va_dpy, decode_ctx, surface); - * ... - * vaRenderPicture(va_dpy, decode_ctx, &buf_id1, 1); - * vaRenderPicture(va_dpy, decode_ctx, &buf_id2, 1); - * // Buffer holding encryption parameters, i.e. VAEncryptionParameterBufferType buffer - * vaRenderPicture(va_dpy, decode_ctx, &buf_id_enc_param, 1); - * ... - * vaEndPicture(va_dpy, decode_ctx); - * - * if (encrypted) - * vaDetachProtectedSession(va_dpy, decode_ctx); - - * // check encrypted variable for next frame - * } - * \endcode - */ - -/** - * ProtectedSessions and Contexts - * - * According to #VAContextID, Context represents a "virtual" video decode, - * encode or video processing pipeline. Surfaces are render targets for a given - * context. The data in the surfaces are not accessible to the client except if - * derived image is supported and the internal data format of the surface is - * implementation specific. Application can create a video decode, encode or - * processing context which represents a "virtualized" hardware device. - * - * Since Protected Session does not virtualize any HW device or build any - * pipeline but rather accessorize existing virtualized HW device or pipeline - * to operate in protected mode so we decided to create separate function. - * Beside this, a virtualized HW device or pipeline could own several protected - * sessions and operate in those protected modes without ever re-creating - * virtualization of HW device or re-building HW pipeline (an unique protected - * environment multiplexing capability in Intel HW). - * - * The returned protected_session represents a notion of Host and TEE clients - * while representing protection status in GPU and Display. - * - * Both contexts and protected sessions are identified by unique IDs and its - * implementation specific internals are kept opaque to the clients - */ -typedef VAGenericID VAProtectedSessionID; - -/** \brief TEE Execucte Function ID. */ -typedef enum _VA_TEE_EXEC_FUNCTION_ID { - VA_TEE_EXECUTE_FUNCTION_ID_PASS_THROUGH = 0x00000001, - VA_TEE_EXECUTE_FUNCTION_ID_GET_FIRMWARE_VERSION = 0x00000002, - -} VA_TEE_EXECUTE_FUNCTION_ID; - -/** \brief Input/Output buffer of VAProtectedSessionExecuteBuffer */ -typedef struct _VAProtectedSessionBuffer { - /* - * This is used when this buffer refer to output buffer. The maximum size of - * data that the driver can return in the output buffer. It is not used for - * input buffer. - */ - uint32_t max_data_size; - /* - * If it is used for input buffer, it is the size of the input data. If it is - * used for output buffer, it is the returns size of the output data written - * by the driver. - */ - uint32_t data_size; - /* - * data pointer of this buffer - */ - void *data; - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProtectedSessionBuffer; - -/** \brief Buffer for vaProtectedSessionExecute() */ -typedef struct _VAProtectedSessionExecuteBuffer { - /** \brief Specify the function to execute. It is IHV's implementation - * specific */ - uint32_t function_id; - /** \brief Input buffer */ - VAProtectedSessionBuffer input; - /** \brief Output buffer */ - VAProtectedSessionBuffer output; - /** \brief Return the result of this function. The status result is IHV's - * implementation specific */ - uint32_t status; - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProtectedSessionExecuteBuffer; - -/** - * \brief Create a protected session - * - * Create a protected session - * - * @param[in] dpy the VA display - * @param[in] config_id configuration for the protected session - * @param[out] protected_session created protected session id upon return - */ -VAStatus vaCreateProtectedSession(VADisplay dpy, VAConfigID config_id, - VAProtectedSessionID *protected_session); - -/** - * \brief Destroy a protected session - * - * Destroy a protected session - * - * @param[in] dpy the VA display - * @param[in] protected_session protected session to be destroyed - */ -VAStatus vaDestroyProtectedSession(VADisplay dpy, - VAProtectedSessionID protected_session); - -/** - * \brief Attach a protected content session to VA context - * - * Attach a protected content session to the context to enable - * decryption/protection - * - * @param[in] dpy the VA display - * @param[in] id the VA decode/encode/vp context - * @param[in] protected_session the protected session to attach - */ -VAStatus vaAttachProtectedSession(VADisplay dpy, VAGenericID id, - VAProtectedSessionID protected_session); - -/** - * \brief Detach the protected content session from the VA context - * - * Detach protected content session of the context to disable - * decryption/protection - * - * @param[in] dpy the VA display - * @param[in] id TEE client id to be detached - */ -VAStatus vaDetachProtectedSession(VADisplay dpy, VAGenericID id); - -/** - * \brief Execute provides a general mechanism for TEE client tasks execution. - * - * vaProtectedSessionExecute provides a mechanism for TEE clients to execute - * specific tasks. The implementation may differ between IHVs. - * This is a synchronous API. - * - * @param[in] dpy the VA display - * @param[in] protected_session the protected session - * @param[in,out] buf_id the VA buffer - */ -VAStatus vaProtectedSessionExecute(VADisplay dpy, - VAProtectedSessionID protected_session, - VABufferID buf_id); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_PROT_H */ diff --git a/prebuilts/x86_64/include/va/va_str.h b/prebuilts/x86_64/include/va/va_str.h deleted file mode 100644 index 1bfe583..0000000 --- a/prebuilts/x86_64/include/va/va_str.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2017 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - - -#ifndef _VA_STR_H_ -#define _VA_STR_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -const char *vaProfileStr(VAProfile profile); - -const char *vaEntrypointStr(VAEntrypoint entrypoint); - -const char *vaConfigAttribTypeStr(VAConfigAttribType configAttribType); - -const char *vaBufferTypeStr(VABufferType bufferType); - -const char *vaStatusStr(VAStatus status); - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_STR_H_ */ diff --git a/prebuilts/x86_64/include/va/va_tpi.h b/prebuilts/x86_64/include/va/va_tpi.h deleted file mode 100644 index fb165ad..0000000 --- a/prebuilts/x86_64/include/va/va_tpi.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef _VA_TPI_H_ -#define _VA_TPI_H_ - -#warning The APIs / data structures included in this file are deprecated - -#endif diff --git a/prebuilts/x86_64/include/va/va_version.h b/prebuilts/x86_64/include/va/va_version.h deleted file mode 100644 index ab2ec18..0000000 --- a/prebuilts/x86_64/include/va/va_version.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_VERSION_H -#define VA_VERSION_H - -/** - * VA_MAJOR_VERSION: - * - * The major version of VA-API (1, if %VA_VERSION is 1.2.3) - */ -#define VA_MAJOR_VERSION 1 - -/** - * VA_MINOR_VERSION: - * - * The minor version of VA-API (2, if %VA_VERSION is 1.2.3) - */ -#define VA_MINOR_VERSION 15 - -/** - * VA_MICRO_VERSION: - * - * The micro version of VA-API (3, if %VA_VERSION is 1.2.3) - */ -#define VA_MICRO_VERSION 0 - -/** - * VA_VERSION: - * - * The full version of VA-API, like 1.2.3 - */ -#define VA_VERSION 1.15.0 - -/** - * VA_VERSION_S: - * - * The full version of VA-API, in string form (suited for string - * concatenation) - */ -#define VA_VERSION_S "1.15.0" - -/** - * VA_VERSION_HEX: - * - * Numerically encoded version of VA-API, like 0x010203 - */ -#define VA_VERSION_HEX ((VA_MAJOR_VERSION << 24) | \ - (VA_MINOR_VERSION << 16) | \ - (VA_MICRO_VERSION << 8)) - -/** - * VA_CHECK_VERSION: - * @major: major version, like 1 in 1.2.3 - * @minor: minor version, like 2 in 1.2.3 - * @micro: micro version, like 3 in 1.2.3 - * - * Evaluates to %TRUE if the version of VA-API is greater than - * @major, @minor and @micro - */ -#define VA_CHECK_VERSION(major,minor,micro) \ - (VA_MAJOR_VERSION > (major) || \ - (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION > (minor)) || \ - (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION == (minor) && VA_MICRO_VERSION >= (micro))) - -#endif /* VA_VERSION_H */ diff --git a/prebuilts/x86_64/include/va/va_vpp.h b/prebuilts/x86_64/include/va/va_vpp.h deleted file mode 100644 index 193dc5f..0000000 --- a/prebuilts/x86_64/include/va/va_vpp.h +++ /dev/null @@ -1,1590 +0,0 @@ -/* - * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * \file va_vpp.h - * \brief The video processing API - * - * This file contains the \ref api_vpp "Video processing API". - */ - -#ifndef VA_VPP_H -#define VA_VPP_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \defgroup api_vpp Video processing API - * - * @{ - * - * The video processing API uses the same paradigm as for decoding: - * - Query for supported filters; - * - Set up a video processing pipeline; - * - Send video processing parameters through VA buffers. - * - * \section api_vpp_caps Query for supported filters - * - * Checking whether video processing is supported can be performed - * with vaQueryConfigEntrypoints() and the profile argument set to - * #VAProfileNone. If video processing is supported, then the list of - * returned entry-points will include #VAEntrypointVideoProc. - * - * \code - * VAEntrypoint *entrypoints; - * int i, num_entrypoints, supportsVideoProcessing = 0; - * - * num_entrypoints = vaMaxNumEntrypoints(); - * entrypoints = malloc(num_entrypoints * sizeof(entrypoints[0]); - * vaQueryConfigEntrypoints(va_dpy, VAProfileNone, - * entrypoints, &num_entrypoints); - * - * for (i = 0; !supportsVideoProcessing && i < num_entrypoints; i++) { - * if (entrypoints[i] == VAEntrypointVideoProc) - * supportsVideoProcessing = 1; - * } - * \endcode - * - * Then, the vaQueryVideoProcFilters() function is used to query the - * list of video processing filters. - * - * \code - * VAProcFilterType filters[VAProcFilterCount]; - * unsigned int num_filters = VAProcFilterCount; - * - * // num_filters shall be initialized to the length of the array - * vaQueryVideoProcFilters(va_dpy, vpp_ctx, &filters, &num_filters); - * \endcode - * - * Finally, individual filter capabilities can be checked with - * vaQueryVideoProcFilterCaps(). - * - * \code - * VAProcFilterCap denoise_caps; - * unsigned int num_denoise_caps = 1; - * vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, - * VAProcFilterNoiseReduction, - * &denoise_caps, &num_denoise_caps - * ); - * - * VAProcFilterCapDeinterlacing deinterlacing_caps[VAProcDeinterlacingCount]; - * unsigned int num_deinterlacing_caps = VAProcDeinterlacingCount; - * vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, - * VAProcFilterDeinterlacing, - * &deinterlacing_caps, &num_deinterlacing_caps - * ); - * \endcode - * - * \section api_vpp_setup Set up a video processing pipeline - * - * A video processing pipeline buffer is created for each source - * surface we want to process. However, buffers holding filter - * parameters can be created once and for all. Rationale is to avoid - * multiple creation/destruction chains of filter buffers and also - * because filter parameters generally won't change frame after - * frame. e.g. this makes it possible to implement a checkerboard of - * videos where the same filters are applied to each video source. - * - * The general control flow is demonstrated by the following pseudo-code: - * \code - * // Create filters - * VABufferID denoise_filter, deint_filter; - * VABufferID filter_bufs[VAProcFilterCount]; - * unsigned int num_filter_bufs; - * - * for (i = 0; i < num_filters; i++) { - * switch (filters[i]) { - * case VAProcFilterNoiseReduction: { // Noise reduction filter - * VAProcFilterParameterBuffer denoise; - * denoise.type = VAProcFilterNoiseReduction; - * denoise.value = 0.5; - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcFilterParameterBufferType, sizeof(denoise), 1, - * &denoise, &denoise_filter - * ); - * filter_bufs[num_filter_bufs++] = denoise_filter; - * break; - * } - * - * case VAProcFilterDeinterlacing: // Motion-adaptive deinterlacing - * for (j = 0; j < num_deinterlacing_caps; j++) { - * VAProcFilterCapDeinterlacing * const cap = &deinterlacing_caps[j]; - * if (cap->type != VAProcDeinterlacingMotionAdaptive) - * continue; - * - * VAProcFilterParameterBufferDeinterlacing deint; - * deint.type = VAProcFilterDeinterlacing; - * deint.algorithm = VAProcDeinterlacingMotionAdaptive; - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcFilterParameterBufferType, sizeof(deint), 1, - * &deint, &deint_filter - * ); - * filter_bufs[num_filter_bufs++] = deint_filter; - * } - * } - * } - * \endcode - * - * Once the video processing pipeline is set up, the caller shall check the - * implied capabilities and requirements with vaQueryVideoProcPipelineCaps(). - * This function can be used to validate the number of reference frames are - * needed by the specified deinterlacing algorithm, the supported color - * primaries, etc. - * \code - * // Create filters - * VAProcPipelineCaps pipeline_caps; - * VASurfaceID *forward_references; - * unsigned int num_forward_references; - * VASurfaceID *backward_references; - * unsigned int num_backward_references; - * VAProcColorStandardType in_color_standards[VAProcColorStandardCount]; - * VAProcColorStandardType out_color_standards[VAProcColorStandardCount]; - * - * pipeline_caps.input_color_standards = NULL; - * pipeline_caps.num_input_color_standards = ARRAY_ELEMS(in_color_standards); - * pipeline_caps.output_color_standards = NULL; - * pipeline_caps.num_output_color_standards = ARRAY_ELEMS(out_color_standards); - * vaQueryVideoProcPipelineCaps(va_dpy, vpp_ctx, - * filter_bufs, num_filter_bufs, - * &pipeline_caps - * ); - * - * num_forward_references = pipeline_caps.num_forward_references; - * forward_references = - * malloc(num__forward_references * sizeof(VASurfaceID)); - * num_backward_references = pipeline_caps.num_backward_references; - * backward_references = - * malloc(num_backward_references * sizeof(VASurfaceID)); - * \endcode - * - * \section api_vpp_submit Send video processing parameters through VA buffers - * - * Video processing pipeline parameters are submitted for each source - * surface to process. Video filter parameters can also change, per-surface. - * e.g. the list of reference frames used for deinterlacing. - * - * \code - * foreach (iteration) { - * vaBeginPicture(va_dpy, vpp_ctx, vpp_surface); - * foreach (surface) { - * VARectangle output_region; - * VABufferID pipeline_buf; - * VAProcPipelineParameterBuffer *pipeline_param; - * - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcPipelineParameterBuffer, sizeof(*pipeline_param), 1, - * NULL, &pipeline_buf - * ); - * - * // Setup output region for this surface - * // e.g. upper left corner for the first surface - * output_region.x = BORDER; - * output_region.y = BORDER; - * output_region.width = - * (vpp_surface_width - (Nx_surfaces + 1) * BORDER) / Nx_surfaces; - * output_region.height = - * (vpp_surface_height - (Ny_surfaces + 1) * BORDER) / Ny_surfaces; - * - * vaMapBuffer(va_dpy, pipeline_buf, &pipeline_param); - * pipeline_param->surface = surface; - * pipeline_param->surface_region = NULL; - * pipeline_param->output_region = &output_region; - * pipeline_param->output_background_color = 0; - * if (first surface to render) - * pipeline_param->output_background_color = 0xff000000; // black - * pipeline_param->filter_flags = VA_FILTER_SCALING_HQ; - * pipeline_param->filters = filter_bufs; - * pipeline_param->num_filters = num_filter_bufs; - * vaUnmapBuffer(va_dpy, pipeline_buf); - * - * // Update reference frames for deinterlacing, if necessary - * pipeline_param->forward_references = forward_references; - * pipeline_param->num_forward_references = num_forward_references_used; - * pipeline_param->backward_references = backward_references; - * pipeline_param->num_backward_references = num_bacward_references_used; - * - * // Apply filters - * vaRenderPicture(va_dpy, vpp_ctx, &pipeline_buf, 1); - * } - * vaEndPicture(va_dpy, vpp_ctx); - * } - * \endcode - */ - -/** \brief Video filter types. */ -typedef enum _VAProcFilterType { - VAProcFilterNone = 0, - /** \brief Noise reduction filter. */ - VAProcFilterNoiseReduction, - /** \brief Deinterlacing filter. */ - VAProcFilterDeinterlacing, - /** \brief Sharpening filter. */ - VAProcFilterSharpening, - /** \brief Color balance parameters. */ - VAProcFilterColorBalance, - /** \brief Skin Tone Enhancement. */ - VAProcFilterSkinToneEnhancement, - /** \brief Total Color Correction. */ - VAProcFilterTotalColorCorrection, - /** \brief Human Vision System(HVS) Noise reduction filter. */ - VAProcFilterHVSNoiseReduction, - /** \brief High Dynamic Range Tone Mapping. */ - VAProcFilterHighDynamicRangeToneMapping, - /** \brief Three-Dimensional Look Up Table (3DLUT). */ - VAProcFilter3DLUT, - /** \brief Number of video filters. */ - VAProcFilterCount -} VAProcFilterType; - -/** \brief Deinterlacing types. */ -typedef enum _VAProcDeinterlacingType { - VAProcDeinterlacingNone = 0, - /** \brief Bob deinterlacing algorithm. */ - VAProcDeinterlacingBob, - /** \brief Weave deinterlacing algorithm. */ - VAProcDeinterlacingWeave, - /** \brief Motion adaptive deinterlacing algorithm. */ - VAProcDeinterlacingMotionAdaptive, - /** \brief Motion compensated deinterlacing algorithm. */ - VAProcDeinterlacingMotionCompensated, - /** \brief Number of deinterlacing algorithms. */ - VAProcDeinterlacingCount -} VAProcDeinterlacingType; - -/** \brief Color balance types. */ -typedef enum _VAProcColorBalanceType { - VAProcColorBalanceNone = 0, - /** \brief Hue. */ - VAProcColorBalanceHue, - /** \brief Saturation. */ - VAProcColorBalanceSaturation, - /** \brief Brightness. */ - VAProcColorBalanceBrightness, - /** \brief Contrast. */ - VAProcColorBalanceContrast, - /** \brief Automatically adjusted saturation. */ - VAProcColorBalanceAutoSaturation, - /** \brief Automatically adjusted brightness. */ - VAProcColorBalanceAutoBrightness, - /** \brief Automatically adjusted contrast. */ - VAProcColorBalanceAutoContrast, - /** \brief Number of color balance attributes. */ - VAProcColorBalanceCount -} VAProcColorBalanceType; - -/** \brief Color standard types. - * - * These define a set of color properties corresponding to particular - * video standards. - * - * Where matrix_coefficients is specified, it applies only to YUV data - - * RGB data always use the identity matrix (matrix_coefficients = 0). - */ -typedef enum _VAProcColorStandardType { - VAProcColorStandardNone = 0, - /** \brief ITU-R BT.601. - * - * It is unspecified whether this will use 525-line or 625-line values; - * specify the colour primaries and matrix coefficients explicitly if - * it is known which one is required. - * - * Equivalent to: - * colour_primaries = 5 or 6 - * transfer_characteristics = 6 - * matrix_coefficients = 5 or 6 - */ - VAProcColorStandardBT601, - /** \brief ITU-R BT.709. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 1 - * matrix_coefficients = 1 - */ - VAProcColorStandardBT709, - /** \brief ITU-R BT.470-2 System M. - * - * Equivalent to: - * colour_primaries = 4 - * transfer_characteristics = 4 - * matrix_coefficients = 4 - */ - VAProcColorStandardBT470M, - /** \brief ITU-R BT.470-2 System B, G. - * - * Equivalent to: - * colour_primaries = 5 - * transfer_characteristics = 5 - * matrix_coefficients = 5 - */ - VAProcColorStandardBT470BG, - /** \brief SMPTE-170M. - * - * Equivalent to: - * colour_primaries = 6 - * transfer_characteristics = 6 - * matrix_coefficients = 6 - */ - VAProcColorStandardSMPTE170M, - /** \brief SMPTE-240M. - * - * Equivalent to: - * colour_primaries = 7 - * transfer_characteristics = 7 - * matrix_coefficients = 7 - */ - VAProcColorStandardSMPTE240M, - /** \brief Generic film. - * - * Equivalent to: - * colour_primaries = 8 - * transfer_characteristics = 1 - * matrix_coefficients = 1 - */ - VAProcColorStandardGenericFilm, - /** \brief sRGB. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 13 - * matrix_coefficients = 0 - */ - VAProcColorStandardSRGB, - /** \brief stRGB. - * - * ??? - */ - VAProcColorStandardSTRGB, - /** \brief xvYCC601. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 11 - * matrix_coefficients = 5 - */ - VAProcColorStandardXVYCC601, - /** \brief xvYCC709. - * - * Equivalent to: - * colour_primaries = 1 - * transfer_characteristics = 11 - * matrix_coefficients = 1 - */ - VAProcColorStandardXVYCC709, - /** \brief ITU-R BT.2020. - * - * Equivalent to: - * colour_primaries = 9 - * transfer_characteristics = 14 - * matrix_coefficients = 9 - */ - VAProcColorStandardBT2020, - /** \brief Explicitly specified color properties. - * - * Use corresponding color properties section. - * For example, HDR10 content: - * colour_primaries = 9 (BT2020) - * transfer_characteristics = 16 (SMPTE ST2084) - * matrix_coefficients = 9 - */ - VAProcColorStandardExplicit, - /** \brief Number of color standards. */ - VAProcColorStandardCount -} VAProcColorStandardType; - -/** \brief Total color correction types. */ -typedef enum _VAProcTotalColorCorrectionType { - VAProcTotalColorCorrectionNone = 0, - /** \brief Red Saturation. */ - VAProcTotalColorCorrectionRed, - /** \brief Green Saturation. */ - VAProcTotalColorCorrectionGreen, - /** \brief Blue Saturation. */ - VAProcTotalColorCorrectionBlue, - /** \brief Cyan Saturation. */ - VAProcTotalColorCorrectionCyan, - /** \brief Magenta Saturation. */ - VAProcTotalColorCorrectionMagenta, - /** \brief Yellow Saturation. */ - VAProcTotalColorCorrectionYellow, - /** \brief Number of color correction attributes. */ - VAProcTotalColorCorrectionCount -} VAProcTotalColorCorrectionType; - -/** \brief High Dynamic Range Metadata types. */ -typedef enum _VAProcHighDynamicRangeMetadataType { - VAProcHighDynamicRangeMetadataNone = 0, - /** \brief Metadata type for HDR10. */ - VAProcHighDynamicRangeMetadataHDR10, - /** \brief Number of Metadata type. */ - VAProcHighDynamicRangeMetadataTypeCount -} VAProcHighDynamicRangeMetadataType; - -/** \brief Video Processing Mode. */ -typedef enum _VAProcMode { - /** - * \brief Default Mode. - * In this mode, pipeline is decided in driver to the appropriate mode. - * e.g. a mode that's a balance between power and performance. - */ - VAProcDefaultMode = 0, - /** - * \brief Power Saving Mode. - * In this mode, pipeline is optimized for power saving. - */ - VAProcPowerSavingMode, - /** - * \brief Performance Mode. - * In this mode, pipeline is optimized for performance. - */ - VAProcPerformanceMode -} VAProcMode; - -/** @name Video blending flags */ -/**@{*/ -/** \brief Global alpha blending. */ -#define VA_BLEND_GLOBAL_ALPHA 0x0001 -/** \brief Premultiplied alpha blending (RGBA surfaces only). */ -#define VA_BLEND_PREMULTIPLIED_ALPHA 0x0002 -/** \brief Luma color key (YUV surfaces only). */ -#define VA_BLEND_LUMA_KEY 0x0010 -/**@}*/ - -/** \brief Video blending state definition. */ -typedef struct _VABlendState { - /** \brief Video blending flags. */ - unsigned int flags; - /** - * \brief Global alpha value. - * - * Valid if \flags has VA_BLEND_GLOBAL_ALPHA. - * Valid range is 0.0 to 1.0 inclusive. - */ - float global_alpha; - /** - * \brief Minimum luma value. - * - * Valid if \flags has VA_BLEND_LUMA_KEY. - * Valid range is 0.0 to 1.0 inclusive. - * \ref min_luma shall be set to a sensible value lower than \ref max_luma. - */ - float min_luma; - /** - * \brief Maximum luma value. - * - * Valid if \flags has VA_BLEND_LUMA_KEY. - * Valid range is 0.0 to 1.0 inclusive. - * \ref max_luma shall be set to a sensible value larger than \ref min_luma. - */ - float max_luma; -} VABlendState; - -/** @name Video pipeline flags */ -/**@{*/ -/** \brief Specifies whether to apply subpictures when processing a surface. */ -#define VA_PROC_PIPELINE_SUBPICTURES 0x00000001 -/** - * \brief Specifies whether to apply power or performance - * optimizations to a pipeline. - * - * When processing several surfaces, it may be necessary to prioritize - * more certain pipelines than others. This flag is only a hint to the - * video processor so that it can omit certain filters to save power - * for example. Typically, this flag could be used with video surfaces - * decoded from a secondary bitstream. - */ -#define VA_PROC_PIPELINE_FAST 0x00000002 -/**@}*/ - -/** @name Video filter flags */ -/**@{*/ -/** \brief Specifies whether the filter shall be present in the pipeline. */ -#define VA_PROC_FILTER_MANDATORY 0x00000001 -/**@}*/ - -/** @name Pipeline end flags */ -/**@{*/ -/** \brief Specifies the pipeline is the last. */ -#define VA_PIPELINE_FLAG_END 0x00000004 -/**@}*/ - -/** @name Chroma Siting flag */ -/**@{*/ -/** vertical chroma sitting take bit 0-1, horizontal chroma sitting take bit 2-3 - * vertical chromma siting | horizontal chroma sitting to be chroma sitting */ -#define VA_CHROMA_SITING_UNKNOWN 0x00 -/** \brief Chroma samples are co-sited vertically on the top with the luma samples. */ -#define VA_CHROMA_SITING_VERTICAL_TOP 0x01 -/** \brief Chroma samples are not co-sited vertically with the luma samples. */ -#define VA_CHROMA_SITING_VERTICAL_CENTER 0x02 -/** \brief Chroma samples are co-sited vertically on the bottom with the luma samples. */ -#define VA_CHROMA_SITING_VERTICAL_BOTTOM 0x03 -/** \brief Chroma samples are co-sited horizontally on the left with the luma samples. */ -#define VA_CHROMA_SITING_HORIZONTAL_LEFT 0x04 -/** \brief Chroma samples are not co-sited horizontally with the luma samples. */ -#define VA_CHROMA_SITING_HORIZONTAL_CENTER 0x08 -/**@}*/ - -/** - * This is to indicate that the color-space conversion uses full range or reduced range. - * VA_SOURCE_RANGE_FULL(Full range): Y/Cb/Cr is in [0, 255]. It is mainly used - * for JPEG/JFIF formats. The combination with the BT601 flag means that - * JPEG/JFIF color-space conversion matrix is used. - * VA_SOURCE_RANGE_REDUCED(Reduced range): Y is in [16, 235] and Cb/Cr is in [16, 240]. - * It is mainly used for the YUV->RGB color-space conversion in SDTV/HDTV/UHDTV. - */ -#define VA_SOURCE_RANGE_UNKNOWN 0 -#define VA_SOURCE_RANGE_REDUCED 1 -#define VA_SOURCE_RANGE_FULL 2 - -/** @name Tone Mapping flags multiple HDR mode*/ -/**@{*/ -/** \brief Tone Mapping from HDR content to HDR display. */ -#define VA_TONE_MAPPING_HDR_TO_HDR 0x0001 -/** \brief Tone Mapping from HDR content to SDR display. */ -#define VA_TONE_MAPPING_HDR_TO_SDR 0x0002 -/** \brief Tone Mapping from HDR content to EDR display. */ -#define VA_TONE_MAPPING_HDR_TO_EDR 0x0004 -/** \brief Tone Mapping from SDR content to HDR display. */ -#define VA_TONE_MAPPING_SDR_TO_HDR 0x0008 -/**@}*/ - -/** \brief Video processing pipeline capabilities. */ -typedef struct _VAProcPipelineCaps { - /** \brief Pipeline flags. See VAProcPipelineParameterBuffer::pipeline_flags. */ - uint32_t pipeline_flags; - /** \brief Extra filter flags. See VAProcPipelineParameterBuffer::filter_flags. */ - uint32_t filter_flags; - /** \brief Number of forward reference frames that are needed. */ - uint32_t num_forward_references; - /** \brief Number of backward reference frames that are needed. */ - uint32_t num_backward_references; - /** \brief List of color standards supported on input. */ - VAProcColorStandardType *input_color_standards; - /** \brief Number of elements in \ref input_color_standards array. */ - uint32_t num_input_color_standards; - /** \brief List of color standards supported on output. */ - VAProcColorStandardType *output_color_standards; - /** \brief Number of elements in \ref output_color_standards array. */ - uint32_t num_output_color_standards; - - /** - * \brief Rotation flags. - * - * For each rotation angle supported by the underlying hardware, - * the corresponding bit is set in \ref rotation_flags. See - * "Rotation angles" for a description of rotation angles. - * - * A value of 0 means the underlying hardware does not support any - * rotation. Otherwise, a check for a specific rotation angle can be - * performed as follows: - * - * \code - * VAProcPipelineCaps pipeline_caps; - * ... - * vaQueryVideoProcPipelineCaps(va_dpy, vpp_ctx, - * filter_bufs, num_filter_bufs, - * &pipeline_caps - * ); - * ... - * if (pipeline_caps.rotation_flags & (1 << VA_ROTATION_xxx)) { - * // Clockwise rotation by xxx degrees is supported - * ... - * } - * \endcode - */ - uint32_t rotation_flags; - /** \brief Blend flags. See "Video blending flags". */ - uint32_t blend_flags; - /** - * \brief Mirroring flags. - * - * For each mirroring direction supported by the underlying hardware, - * the corresponding bit is set in \ref mirror_flags. See - * "Mirroring directions" for a description of mirroring directions. - * - */ - uint32_t mirror_flags; - /** \brief Number of additional output surfaces supported by the pipeline */ - uint32_t num_additional_outputs; - - /** \brief Number of elements in \ref input_pixel_format array. */ - uint32_t num_input_pixel_formats; - /** \brief List of input pixel formats in fourcc. */ - uint32_t *input_pixel_format; - /** \brief Number of elements in \ref output_pixel_format array. */ - uint32_t num_output_pixel_formats; - /** \brief List of output pixel formats in fourcc. */ - uint32_t *output_pixel_format; - - /** \brief Max supported input width in pixels. */ - uint32_t max_input_width; - /** \brief Max supported input height in pixels. */ - uint32_t max_input_height; - /** \brief Min supported input width in pixels. */ - uint32_t min_input_width; - /** \brief Min supported input height in pixels. */ - uint32_t min_input_height; - - /** \brief Max supported output width in pixels. */ - uint32_t max_output_width; - /** \brief Max supported output height in pixels. */ - uint32_t max_output_height; - /** \brief Min supported output width in pixels. */ - uint32_t min_output_width; - /** \brief Min supported output height in pixels. */ - uint32_t min_output_height; - /** \brief Reserved bytes for future use, must be zero */ -#if defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__) || defined(__LP64__) - uint32_t va_reserved[VA_PADDING_HIGH - 2]; -#else - uint32_t va_reserved[VA_PADDING_HIGH]; -#endif -} VAProcPipelineCaps; - -/** \brief Specification of values supported by the filter. */ -typedef struct _VAProcFilterValueRange { - /** \brief Minimum value supported, inclusive. */ - float min_value; - /** \brief Maximum value supported, inclusive. */ - float max_value; - /** \brief Default value. */ - float default_value; - /** \brief Step value that alters the filter behaviour in a sensible way. */ - float step; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterValueRange; - -typedef struct _VAProcColorProperties { - /** Chroma sample location.\c VA_CHROMA_SITING_VERTICAL_XXX | VA_CHROMA_SITING_HORIZONTAL_XXX */ - uint8_t chroma_sample_location; - /** Color range. \c VA_SOURCE_RANGE_XXX*/ - uint8_t color_range; - /** Colour primaries. - * - * See ISO/IEC 23001-8 or ITU H.273, section 8.1 and table 2. - * Only used if the color standard in use is \c VAColorStandardExplicit. - * Below list the typical colour primaries for the reference. - * --------------------------------------------------------------------------------- - * | Value | Primaries | Informative Remark | - * -------------------------------------------------------------------------------- - * | 1 |primary x y |Rec.ITU-R BT.709-5 | - * | |green 0.300 0.600 |IEC 61966-2-1(sRGB or sYCC) | - * | |blue 0.150 0.060 | | - * | |red 0.640 0.330 | | - * | |whiteD65 0.3127 0.3290 | | - * --------------------------------------------------------------------------------- - * | 6 |primary x y |Rec.ITU-R BT.601-6 525 | - * | |green 0.310 0.595 | | - * | |blue 0.155 0.070 | | - * | |red 0.630 0.340 | | - * | |whiteD65 0.3127 0.3290 | | - * --------------------------------------------------------------------------------- - * | 9 |primary x y |Rec.ITU-R BT.2020 | - * | |green 0.170 0.797 | | - * | |blue 0.131 0.046 | | - * | |red 0.708 0.292 | | - * | |whiteD65 0.3127 0.3290 | | - * --------------------------------------------------------------------------------- - */ - uint8_t colour_primaries; - /** Transfer characteristics. - * - * See ISO/IEC 23001-8 or ITU H.273, section 8.2 and table 3. - * Only used if the color standard in use is \c VAColorStandardExplicit. - * Below list the typical transfer characteristics for the reference. - * ----------------------------------------------------------- - * | Value | Informative Remark | - * ----------------------------------------------------------- - * | 1 |Rec.ITU-R BT.709-5 | - * | |colour gamut system | - * ----------------------------------------------------------- - * | 4 |Assumed display gamma 2.2 | - * ----------------------------------------------------------- - * | 6 |Rec.ITU-R BT.601-6 525 or 625 | - * ----------------------------------------------------------- - * | 8 |Linear transfer characteristics | - * ----------------------------------------------------------- - * | 13 |IEC 61966-2-1(sRGB or sYCC) | - * ----------------------------------------------------------- - * | 14,15 |Rec.ITU-R BT.2020 | - * ----------------------------------------------------------- - * | 16 |SMPTE ST 2084 for 10,12,14 and 16bit system | - * ----------------------------------------------------------- - */ - uint8_t transfer_characteristics; - /** Matrix coefficients. - * - * See ISO/IEC 23001-8 or ITU H.273, section 8.3 and table 4. - * Only used if the color standard in use is \c VAColorStandardExplicit. - */ - uint8_t matrix_coefficients; - /** Reserved bytes for future use, must be zero. */ - uint8_t reserved[3]; -} VAProcColorProperties; - -/** \brief Describes High Dynamic Range Meta Data for HDR10. - * - * Specifies the colour volume(the colour primaries, white point and luminance range) of - * a display considered to be the mastering display for the associated video content -e.g., - * the colour volume of a display that was used for viewing while authoring the video content. - * See ITU-T H.265 D.3.27 Mastering display colour volume SEI message semantics. - * - * Specifies upper bounds for the nominal light level of the content. See ITU-T H.265 D.3.35 - * Content light level information SEI message semantics. - * - * This structure can be used to indicate the HDR10 metadata for 1) the content which was authored; - * 2) the display on which the content will be presented. If it is for display, max_content_light_level - * and max_pic_average_light_level are ignored. - */ -typedef struct _VAHdrMetaDataHDR10 { - /** - * \brief X chromaticity coordinate of the mastering display. - * - * Index value c equal to 0 should correspond to the green primary. - * Index value c equal to 1 should correspond to the blue primary. - * Index value c equal to 2 should correspond to the red primary. - * The value for display_primaries_x shall be in the range of 0 to 50000 inclusive. - */ - uint16_t display_primaries_x[3]; - /** - * \brief Y chromaticity coordinate of the mastering display. - * - * Index value c equal to 0 should correspond to the green primary. - * Index value c equal to 1 should correspond to the blue primary. - * Index value c equal to 2 should correspond to the red primary. - * The value for display_primaries_y shall be in the range of 0 to 50000 inclusive. - */ - uint16_t display_primaries_y[3]; - /** - * \brief X chromaticity coordinate of the white point of the mastering display. - * - * The value for white_point_x shall be in the range of 0 to 50000 inclusive. - */ - uint16_t white_point_x; - /** - * \brief Y chromaticity coordinate of the white point of the mastering display. - * - * The value for white_point_y shall be in the range of 0 to 50000 inclusive. - */ - uint16_t white_point_y; - /** - * \brief The maximum display luminance of the mastering display. - * - * The value is in units of 0.0001 candelas per square metre. - */ - uint32_t max_display_mastering_luminance; - /** - * \brief The minumum display luminance of the mastering display. - * - * The value is in units of 0.0001 candelas per square metre. - */ - uint32_t min_display_mastering_luminance; - /** - * \brief The maximum content light level (MaxCLL). - * - * The value is in units of 1 candelas per square metre. - */ - uint16_t max_content_light_level; - /** - * \brief The maximum picture average light level (MaxFALL). - * - * The value is in units of 1 candelas per square metre. - */ - uint16_t max_pic_average_light_level; - /** Resevered */ - uint16_t reserved[VA_PADDING_HIGH]; -} VAHdrMetaDataHDR10; - -/** \brief Capabilities specification for the High Dynamic Range filter. */ -typedef struct _VAProcFilterCapHighDynamicRange { - /** \brief high dynamic range type. */ - VAProcHighDynamicRangeMetadataType metadata_type; - /** - * \brief flag for high dynamic range tone mapping - * - * The flag is the combination of VA_TONE_MAPPING_XXX_TO_XXX. - * It could be VA_TONE_MAPPING_HDR_TO_HDR | VA_TONE_MAPPING_HDR_TO_SDR. - * SDR content to SDR display is always supported by default since it is legacy path. - */ - uint16_t caps_flag; - /** \brief Reserved bytes for future use, must be zero */ - uint16_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterCapHighDynamicRange; - -/** \brief High Dynamic Range Meta Data. */ -typedef struct _VAHdrMetaData { - /** \brief high dynamic range metadata type, HDR10 etc. */ - VAProcHighDynamicRangeMetadataType metadata_type; - /** - * \brief Pointer to high dynamic range metadata. - * - * The pointer could point to VAHdrMetaDataHDR10 or other HDR meta data. - */ - void* metadata; - /** - * \brief Size of high dynamic range metadata. - */ - uint32_t metadata_size; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t reserved[VA_PADDING_LOW]; -} VAHdrMetaData; - -/** - * \brief Video processing pipeline configuration. - * - * This buffer defines a video processing pipeline. The actual filters to - * be applied are provided in the \c filters field, they can be re-used - * in other processing pipelines. - * - * The target surface is specified by the \c render_target argument of - * \c vaBeginPicture(). The general usage model is described as follows: - * - \c vaBeginPicture(): specify the target surface that receives the - * processed output; - * - \c vaRenderPicture(): specify a surface to be processed and composed - * into the \c render_target. Use as many \c vaRenderPicture() calls as - * necessary surfaces to compose ; - * - \c vaEndPicture(): tell the driver to start processing the surfaces - * with the requested filters. - * - * If a filter (e.g. noise reduction) needs to be applied with different - * values for multiple surfaces, the application needs to create as many - * filter parameter buffers as necessary. i.e. the filter parameters shall - * not change between two calls to \c vaRenderPicture(). - * - * For composition usage models, the first surface to process will generally - * use an opaque background color, i.e. \c output_background_color set with - * the most significant byte set to \c 0xff. For instance, \c 0xff000000 for - * a black background. Then, subsequent surfaces would use a transparent - * background color. - */ -typedef struct _VAProcPipelineParameterBuffer { - /** - * \brief Source surface ID. - * - * ID of the source surface to process. If subpictures are associated - * with the video surfaces then they shall be rendered to the target - * surface, if the #VA_PROC_PIPELINE_SUBPICTURES pipeline flag is set. - */ - VASurfaceID surface; - /** - * \brief Region within the source surface to be processed. - * - * Pointer to a #VARectangle defining the region within the source - * surface to be processed. If NULL, \c surface_region implies the - * whole surface. - */ - const VARectangle *surface_region; - /** - * \brief Requested input color standard. - * - * Color properties are implicitly converted throughout the processing - * pipeline. The video processor chooses the best moment to apply - * this conversion. The set of supported color standards for input shall - * be queried with vaQueryVideoProcPipelineCaps(). - * - * If this is set to VAProcColorStandardExplicit, the color properties - * are specified explicitly in surface_color_properties instead. - */ - VAProcColorStandardType surface_color_standard; - /** - * \brief Region within the output surface. - * - * Pointer to a #VARectangle defining the region within the output - * surface that receives the processed pixels. If NULL, \c output_region - * implies the whole surface. - * - * Note that any pixels residing outside the specified region will - * be filled in with the \ref output_background_color. - */ - const VARectangle *output_region; - /** - * \brief Background color. - * - * Background color used to fill in pixels that reside outside of the - * specified \ref output_region. The color is specified in ARGB format: - * [31:24] alpha, [23:16] red, [15:8] green, [7:0] blue. - * - * Unless the alpha value is zero or the \ref output_region represents - * the whole target surface size, implementations shall not render the - * source surface to the target surface directly. Rather, in order to - * maintain the exact semantics of \ref output_background_color, the - * driver shall use a temporary surface and fill it in with the - * appropriate background color. Next, the driver will blend this - * temporary surface into the target surface. - */ - uint32_t output_background_color; - /** - * \brief Requested output color standard. - * - * If this is set to VAProcColorStandardExplicit, the color properties - * are specified explicitly in output_color_properties instead. - */ - VAProcColorStandardType output_color_standard; - /** - * \brief Pipeline filters. See video pipeline flags. - * - * Flags to control the pipeline, like whether to apply subpictures - * or not, notify the driver that it can opt for power optimizations, - * should this be needed. - */ - uint32_t pipeline_flags; - /** - * \brief Extra filter flags. See vaPutSurface() flags. - * - * Filter flags are used as a fast path, wherever possible, to use - * vaPutSurface() flags instead of explicit filter parameter buffers. - * - * Allowed filter flags API-wise. Use vaQueryVideoProcPipelineCaps() - * to check for implementation details: - * - Bob-deinterlacing: \c VA_FRAME_PICTURE, \c VA_TOP_FIELD, - * \c VA_BOTTOM_FIELD. Note that any deinterlacing filter - * (#VAProcFilterDeinterlacing) will override those flags. - * - Color space conversion: \c VA_SRC_BT601, \c VA_SRC_BT709, - * \c VA_SRC_SMPTE_240. - * - Scaling: \c VA_FILTER_SCALING_DEFAULT, \c VA_FILTER_SCALING_FAST, - * \c VA_FILTER_SCALING_HQ, \c VA_FILTER_SCALING_NL_ANAMORPHIC. - * - Interpolation Method: \c VA_FILTER_INTERPOLATION_DEFAULT, - * \c VA_FILTER_INTERPOLATION_NEAREST_NEIGHBOR, - * \c VA_FILTER_INTERPOLATION_BILINEAR, \c VA_FILTER_INTERPOLATION_ADVANCED. - */ - uint32_t filter_flags; - /** - * \brief Array of filters to apply to the surface. - * - * The list of filters shall be ordered in the same way the driver expects - * them. i.e. as was returned from vaQueryVideoProcFilters(). - * Otherwise, a #VA_STATUS_ERROR_INVALID_FILTER_CHAIN is returned - * from vaRenderPicture() with this buffer. - * - * #VA_STATUS_ERROR_UNSUPPORTED_FILTER is returned if the list - * contains an unsupported filter. - * - */ - VABufferID *filters; - /** \brief Actual number of filters. */ - uint32_t num_filters; - /** \brief Array of forward reference frames (past frames). */ - VASurfaceID *forward_references; - /** \brief Number of forward reference frames that were supplied. */ - uint32_t num_forward_references; - /** \brief Array of backward reference frames (future frames). */ - VASurfaceID *backward_references; - /** \brief Number of backward reference frames that were supplied. */ - uint32_t num_backward_references; - /** - * \brief Rotation state. See rotation angles. - * - * The rotation angle is clockwise. There is no specific rotation - * center for this operation. Rather, The source \ref surface is - * first rotated by the specified angle and then scaled to fit the - * \ref output_region. - * - * This means that the top-left hand corner (0,0) of the output - * (rotated) surface is expressed as follows: - * - \ref VA_ROTATION_NONE: (0,0) is the top left corner of the - * source surface -- no rotation is performed ; - * - \ref VA_ROTATION_90: (0,0) is the bottom-left corner of the - * source surface ; - * - \ref VA_ROTATION_180: (0,0) is the bottom-right corner of the - * source surface -- the surface is flipped around the X axis ; - * - \ref VA_ROTATION_270: (0,0) is the top-right corner of the - * source surface. - * - * Check VAProcPipelineCaps::rotation_flags first prior to - * defining a specific rotation angle. Otherwise, the hardware can - * perfectly ignore this variable if it does not support any - * rotation. - */ - uint32_t rotation_state; - /** - * \brief blending state. See "Video blending state definition". - * - * If \ref blend_state is NULL, then default operation mode depends - * on the source \ref surface format: - * - RGB: per-pixel alpha blending ; - * - YUV: no blending, i.e override the underlying pixels. - * - * Otherwise, \ref blend_state is a pointer to a #VABlendState - * structure that shall be live until vaEndPicture(). - * - * Implementation note: the driver is responsible for checking the - * blend state flags against the actual source \ref surface format. - * e.g. premultiplied alpha blending is only applicable to RGB - * surfaces, and luma keying is only applicable to YUV surfaces. - * If a mismatch occurs, then #VA_STATUS_ERROR_INVALID_BLEND_STATE - * is returned. - */ - const VABlendState *blend_state; - /** - * \bried mirroring state. See "Mirroring directions". - * - * Mirroring of an image can be performed either along the - * horizontal or vertical axis. It is assumed that the rotation - * operation is always performed before the mirroring operation. - */ - uint32_t mirror_state; - /** \brief Array of additional output surfaces. */ - VASurfaceID *additional_outputs; - /** \brief Number of additional output surfaces. */ - uint32_t num_additional_outputs; - /** - * \brief Flag to indicate the input surface flag - * - * bit0~3: Surface sample type - * - 0000: Progressive --> VA_FRAME_PICTURE - * - 0001: Single Top Field --> VA_TOP_FIELD - * - 0010: Single Bottom Field --> VA_BOTTOM_FIELD - * - 0100: Interleaved Top Field First --> VA_TOP_FIELD_FIRST - * - 1000: Interleaved Bottom Field First --> VA_BOTTOM_FIELD_FIRST - * - * For interlaced scaling, examples as follow: - * - 1. Interleaved to Interleaved (Suppose input is top field first) - * -- set input_surface_flag as VA_TOP_FIELD_FIRST - * -- set output_surface_flag as VA_TOP_FIELD_FIRST - * - 2. Interleaved to Field (Suppose input is top field first) - * An interleaved frame need to be passed twice. - * First cycle to get the first field: - * -- set input_surface_flag as VA_TOP_FIELD_FIRST - * -- set output_surface_flag as VA_TOP_FIELD - * Second cycle to get the second field: - * -- set input_surface_flag as VA_TOP_FIELD_FIRST - * -- set output_surface_flag as VA_BOTTOM_FIELD - * - 3. Field to Interleaved (Suppose first field is top field) - * -- create two surfaces, one for top field, the other for bottom field - * -- set surface with the first field surface id - * -- set backward_reference with the second field surface id - * -- set input_surface_flag as VA_TOP_FIELD - * -- set output_surface_flag as VA_TOP_FIELD_FIRST - * - 4. Field to Field: - * -- set flag according to each frame. - * - * bit31: Surface encryption - * - 0: non-protected - * - 1: protected - * - * bit4~30 for future - */ - uint32_t input_surface_flag; - /** - * \brief Flag to indicate the output surface flag - * - * bit0~3: Surface sample type - * - 0000: Progressive --> VA_FRAME_PICTURE - * - 0001: Top Field --> VA_TOP_FIELD - * - 0010: Bottom Field --> VA_BOTTOM_FIELD - * - 0100: Top Field First --> VA_TOP_FIELD_FIRST - * - 1000: Bottom Field First --> VA_BOTTOM_FIELD_FIRST - * - * bit31: Surface encryption - * - 0: non-protected - * - 1: protected - * - * bit4~30 for future - */ - uint32_t output_surface_flag; - /** - * \brief Input Color Properties. See "VAProcColorProperties". - */ - VAProcColorProperties input_color_properties; - /** - * \brief Output Color Properties. See "VAProcColorProperties". - */ - VAProcColorProperties output_color_properties; - /** - * \brief Processing mode. See "VAProcMode". - */ - VAProcMode processing_mode; - /** - * \brief Output High Dynamic Metadata. - * - * If output_metadata is NULL, then output default to SDR. - */ - VAHdrMetaData *output_hdr_metadata; - - /** \brief Reserved bytes for future use, must be zero */ -#if defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__)|| defined(__LP64__) - uint32_t va_reserved[VA_PADDING_LARGE - 16]; -#else - uint32_t va_reserved[VA_PADDING_LARGE - 13]; -#endif -} VAProcPipelineParameterBuffer; - -/** - * \brief Filter parameter buffer base. - * - * This is a helper structure used by driver implementations only. - * Users are not supposed to allocate filter parameter buffers of this - * type. - */ -typedef struct _VAProcFilterParameterBufferBase { - /** \brief Filter type. */ - VAProcFilterType type; -} VAProcFilterParameterBufferBase; - -/** - * \brief Default filter parametrization. - * - * Unless there is a filter-specific parameter buffer, - * #VAProcFilterParameterBuffer is the default type to use. - */ -typedef struct _VAProcFilterParameterBuffer { - /** \brief Filter type. */ - VAProcFilterType type; - /** \brief Value. */ - float value; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterParameterBuffer; - -/** @name De-interlacing flags */ -/**@{*/ -/** - * \brief Bottom field first in the input frame. - * if this is not set then assumes top field first. - */ -#define VA_DEINTERLACING_BOTTOM_FIELD_FIRST 0x0001 -/** - * \brief Bottom field used in deinterlacing. - * if this is not set then assumes top field is used. - */ -#define VA_DEINTERLACING_BOTTOM_FIELD 0x0002 -/** - * \brief A single field is stored in the input frame. - * if this is not set then assumes the frame contains two interleaved fields. - */ -#define VA_DEINTERLACING_ONE_FIELD 0x0004 -/** - * \brief Film Mode Detection is enabled. If enabled, driver performs inverse - * of various pulldowns, such as 3:2 pulldown. - * if this is not set then assumes FMD is disabled. - */ -#define VA_DEINTERLACING_FMD_ENABLE 0x0008 - -//Scene change parameter for ADI on Linux, if enabled, driver use spatial DI(Bob), instead of ADI. if not, use old behavior for ADI -//Input stream is TFF(set flags = 0), SRC0,1,2,3 are interlaced frame (top +bottom fields), DSTs are progressive frames -//30i->30p -//SRC0 -> BOBDI, no reference, set flag = 0, output DST0 -//SRC1 -> ADI, reference frame=SRC0, set flags = 0, call VP, output DST1 -//SRC2 -> ADI, reference frame=SRC1, set flags = 0x0010(decimal 16), call VP, output DST2(T4) -//SRC3 -> ADI, reference frame=SRC2, set flags = 0, call VP, output DST3 -//30i->60p -//SRC0 -> BOBDI, no reference, set flag = 0, output DST0 -//SRC0 -> BOBDI, no reference, set flag =0x0002, output DST1 - -//SRC1 -> ADI, reference frame =SRC0, set flags = 0, call VP, output DST2 -//SRC1 -> ADI, reference frame =SRC0, set flags = 0x0012(decimal18), call VP, output DST3(B3) - -//SRC2 -> ADI, reference frame =SRC1, set flags = 0x0010(decimal 16), call VP, output DST4(T4) -//SRC2 -> ADI, reference frame =SRC1, set flags = 0x0002, call VP, output DST5 - -//SRC3 -> ADI, reference frame =SRC2, set flags = 0, call VP, output DST6 -//SRC3 -> ADI, reference frame =SRC1, set flags = 0x0002, call VP, output DST7 - -#define VA_DEINTERLACING_SCD_ENABLE 0x0010 - -/**@}*/ - -/** \brief Deinterlacing filter parametrization. */ -typedef struct _VAProcFilterParameterBufferDeinterlacing { - /** \brief Filter type. Shall be set to #VAProcFilterDeinterlacing. */ - VAProcFilterType type; - /** \brief Deinterlacing algorithm. */ - VAProcDeinterlacingType algorithm; - /** \brief Deinterlacing flags. */ - uint32_t flags; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterParameterBufferDeinterlacing; - -/** - * \brief Color balance filter parametrization. - * - * This buffer defines color balance attributes. A VA buffer can hold - * several color balance attributes by creating a VA buffer of desired - * number of elements. This can be achieved by the following pseudo-code: - * - * \code - * enum { kHue, kSaturation, kBrightness, kContrast }; - * - * // Initial color balance parameters - * static const VAProcFilterParameterBufferColorBalance colorBalanceParams[4] = - * { - * [kHue] = - * { VAProcFilterColorBalance, VAProcColorBalanceHue, 0.5 }, - * [kSaturation] = - * { VAProcFilterColorBalance, VAProcColorBalanceSaturation, 0.5 }, - * [kBrightness] = - * { VAProcFilterColorBalance, VAProcColorBalanceBrightness, 0.5 }, - * [kSaturation] = - * { VAProcFilterColorBalance, VAProcColorBalanceSaturation, 0.5 } - * }; - * - * // Create buffer - * VABufferID colorBalanceBuffer; - * vaCreateBuffer(va_dpy, vpp_ctx, - * VAProcFilterParameterBufferType, sizeof(*pColorBalanceParam), 4, - * colorBalanceParams, - * &colorBalanceBuffer - * ); - * - * VAProcFilterParameterBufferColorBalance *pColorBalanceParam; - * vaMapBuffer(va_dpy, colorBalanceBuffer, &pColorBalanceParam); - * { - * // Change brightness only - * pColorBalanceBuffer[kBrightness].value = 0.75; - * } - * vaUnmapBuffer(va_dpy, colorBalanceBuffer); - * \endcode - */ -typedef struct _VAProcFilterParameterBufferColorBalance { - /** \brief Filter type. Shall be set to #VAProcFilterColorBalance. */ - VAProcFilterType type; - /** \brief Color balance attribute. */ - VAProcColorBalanceType attrib; - /** - * \brief Color balance value. - * - * Special case for automatically adjusted attributes. e.g. - * #VAProcColorBalanceAutoSaturation, - * #VAProcColorBalanceAutoBrightness, - * #VAProcColorBalanceAutoContrast. - * - If \ref value is \c 1.0 +/- \c FLT_EPSILON, the attribute is - * automatically adjusted and overrides any other attribute of - * the same type that would have been set explicitly; - * - If \ref value is \c 0.0 +/- \c FLT_EPSILON, the attribute is - * disabled and other attribute of the same type is used instead. - */ - float value; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterParameterBufferColorBalance; - -/** \brief Total color correction filter parametrization. */ -typedef struct _VAProcFilterParameterBufferTotalColorCorrection { - /** \brief Filter type. Shall be set to #VAProcFilterTotalColorCorrection. */ - VAProcFilterType type; - /** \brief Color to correct. */ - VAProcTotalColorCorrectionType attrib; - /** \brief Color correction value. */ - float value; -} VAProcFilterParameterBufferTotalColorCorrection; - -/** @name Video Processing Human Vision System (HVS) Denoise Mode.*/ -/**@{*/ -/** - * \brief Default Mode. - * This mode is decided in driver to the appropriate mode. - */ -#define VA_PROC_HVS_DENOISE_DEFAULT 0x0000 -/** - * \brief Auto BDRate Mode. - * Indicates auto BD rate improvement in pre-processing (such as before video encoding), ignore Strength. - */ -#define VA_PROC_HVS_DENOISE_AUTO_BDRATE 0x0001 -/** - * \brief Auto Subjective Mode. - * Indicates auto subjective quality improvement in pre-processing (such as before video encoding), ignore Strength. - */ -#define VA_PROC_HVS_DENOISE_AUTO_SUBJECTIVE 0x0002 -/** - * \brief Manual Mode. - * Indicates manual mode, allow to adjust the denoise strength manually (need to set Strength explicitly). - */ -#define VA_PROC_HVS_DENOISE_MANUAL 0x0003 -/**@}*/ - -/** \brief Human Vision System(HVS) Noise reduction filter parametrization. */ -typedef struct _VAProcFilterParameterBufferHVSNoiseReduction { - /** \brief Filter type. Shall be set to #VAProcFilterHVSNoiseReduction. */ - VAProcFilterType type; - /** \brief QP for encoding, used for HVS Denoise */ - uint16_t qp; - /** - * \brief QP to Noise Reduction Strength Mode, used for Human Vision System Based Noise Reduction. - * Controls Noise Reduction strength of conservative and aggressive mode. - * It is an integer from [0-16]. - * Value 0 means completely turn off Noise Reduction; - * Value 16 means the most aggressive mode of Noise Reduction; - * Value 10 is the default value. - */ - uint16_t strength; - /** - * \brief HVS Denoise Mode which controls denoise method. - * It is a value of VA_PROC_HVS_DENOISE_xxx. - * Please see the definition of VA_PROC_HVS_DENOISE_xxx. - */ - uint16_t mode; - /** \brief Reserved bytes for future use, must be zero */ - uint16_t va_reserved[VA_PADDING_HIGH - 1]; -} VAProcFilterParameterBufferHVSNoiseReduction; - -/** \brief High Dynamic Range(HDR) Tone Mapping filter parametrization. */ -typedef struct _VAProcFilterParameterBufferHDRToneMapping { - /** \brief Filter type. Shall be set to #VAProcFilterHighDynamicRangeToneMapping.*/ - VAProcFilterType type; - /** - * \brief High Dynamic Range metadata, could be HDR10 etc. - * - * This metadata is mainly for the input surface. Given that dynamic metadata is changing - * on frame-by-frame or scene-by-scene basis for HDR10 plus, differentiate the metadata - * for the input and output. - */ - VAHdrMetaData data; - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterParameterBufferHDRToneMapping; - -/** @name 3DLUT Channel Layout and Mapping */ -/**@{*/ -/** \brief 3DLUT Channel Layout is unknown. */ -#define VA_3DLUT_CHANNEL_UNKNOWN 0x00000000 -/** \brief 3DLUT Channel Layout is R, G, B, the default layout. Map RGB to RGB. */ -#define VA_3DLUT_CHANNEL_RGB_RGB 0x00000001 -/** \brief 3DLUT Channel Layout is Y, U, V. Map YUV to RGB. */ -#define VA_3DLUT_CHANNEL_YUV_RGB 0x00000002 -/** \brief 3DLUT Channel Layout is V, U, Y. Map VUY to RGB. */ -#define VA_3DLUT_CHANNEL_VUY_RGB 0x00000004 -/**@}*/ - -/** - * \brief 3DLUT filter parametrization. - * - * 3DLUT (Three Dimensional Look Up Table) is often used when converting an image or a video frame - * from one color representation to another, for example, when converting log and gamma encodings, - * changing the color space, applying a color correction, changing the dynamic range, gamut mapping etc. - * - * This buffer defines 3DLUT attributes and memory layout. The typical 3DLUT has fixed number(lut_size) - * per dimension and memory layout is 3 dimensional array as 3dlut[stride_0][stride_1][stride_2] (lut_size - * shall be smaller than stride_0/1/2). - * - * API user should query hardware capability by using the VAProcFilterCap3DLUT to get the 3DLUT attributes - * which hardware supports, and use these attributes. For example, if the user queries hardware, the API user - * could get caps with 3dlut[33][33][64] (lut_size = 33, lut_stride[0/1/2] = 33/33/64). API user shall not - * use the attributes which hardware can not support. - * - * 3DLUT is usually used to transform input RGB/YUV values in one color space to output RGB values in another - * color space. Based on 1) the format and color space of VPP input and output and 2) 3DLUT memory layout and - * channel mapping, driver will enable some color space conversion implicitly if needed. For example, the input of - * VPP is P010 format in BT2020 color space, the output of VPP is NV12 in BT709 color space and the 3DLUT channel - * mapping is VA_3DLUT_CHANNEL_RGB_RGB, driver could build the data pipeline as P010(BT2020)->RGB(BT2020) - * ->3DULT(BT709)->NV12(BT709). Please note, the limitation of 3DLUT filter color space is that the color space of - * 3DLUT filter input data needs to be same as the input data of VPP; the color space of 3DLUT filter output data - * needs to be same as the output data of VPP; format does not have such limitation. - */ -typedef struct _VAProcFilterParameterBuffer3DLUT { - /** \brief Filter type. Shall be set to #VAProcFilter3DLUT.*/ - VAProcFilterType type; - - /** \brief lut_surface contains 3DLUT data in the 3DLUT memory layout, must be linear */ - VASurfaceID lut_surface; - /** - * \brief lut_size is the number of valid points on every dimension of the three dimensional look up table. - * The size of LUT (lut_size) shall be same among every dimension of the three dimensional look up table. - * The size of LUT (lut_size) shall be smaller than lut_stride[0/1/2]. - */ - uint16_t lut_size; - /** - * \brief lut_stride are the number of points on every dimension of the three dimensional look up table. - * Three dimension can has 3 different stride, lut3d[lut_stride[0]][lut_stride[1]][lut_stride[2]]. - * But the valid point shall start from 0, the range of valid point is [0, lut_size-1] for every dimension. - */ - uint16_t lut_stride[3]; - /** \brief bit_depth is the number of bits for every channel R, G or B (or Y, U, V) */ - uint16_t bit_depth; - /** \brief num_channel is the number of channels */ - uint16_t num_channel; - - /** \brief channel_mapping defines the mapping of input and output channels, could be one of VA_3DLUT_CHANNEL_XXX*/ - uint32_t channel_mapping; - - /** \brief reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterParameterBuffer3DLUT; - -/** \brief Capabilities specification for the 3DLUT filter. */ -typedef struct _VAProcFilterCap3DLUT { - /** \brief lut_size is the number of valid points on every dimension of the three dimensional look up table. */ - uint16_t lut_size; - /** \brief lut_stride are the number of points on every dimension of the three dimensional look up table. lut3d[lut_stride[0]][lut_stride[1]][lut_stride[2]]*/ - uint16_t lut_stride[3]; - /** \brief bit_depth is the number of bits for every channel R, G or B (or Y, U, V) */ - uint16_t bit_depth; - /** \brief num_channel is the number of channels */ - uint16_t num_channel; - /** \brief channel_mapping defines the mapping of channels, could be some combination of VA_3DLUT_CHANNEL_XXX*/ - uint32_t channel_mapping; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_HIGH]; -} VAProcFilterCap3DLUT; - -/** - * \brief Default filter cap specification (single range value). - * - * Unless there is a filter-specific cap structure, #VAProcFilterCap is the - * default type to use for output caps from vaQueryVideoProcFilterCaps(). - */ -typedef struct _VAProcFilterCap { - /** \brief Range of supported values for the filter. */ - VAProcFilterValueRange range; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterCap; - -/** \brief Capabilities specification for the deinterlacing filter. */ -typedef struct _VAProcFilterCapDeinterlacing { - /** \brief Deinterlacing algorithm. */ - VAProcDeinterlacingType type; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterCapDeinterlacing; - -/** \brief Capabilities specification for the color balance filter. */ -typedef struct _VAProcFilterCapColorBalance { - /** \brief Color balance operation. */ - VAProcColorBalanceType type; - /** \brief Range of supported values for the specified operation. */ - VAProcFilterValueRange range; - - /** \brief Reserved bytes for future use, must be zero */ - uint32_t va_reserved[VA_PADDING_LOW]; -} VAProcFilterCapColorBalance; - -/** \brief Capabilities specification for the Total Color Correction filter. */ -typedef struct _VAProcFilterCapTotalColorCorrection { - /** \brief Color to correct. */ - VAProcTotalColorCorrectionType type; - /** \brief Range of supported values for the specified color. */ - VAProcFilterValueRange range; -} VAProcFilterCapTotalColorCorrection; - -/** - * \brief Queries video processing filters. - * - * This function returns the list of video processing filters supported - * by the driver. The \c filters array is allocated by the user and - * \c num_filters shall be initialized to the number of allocated - * elements in that array. Upon successful return, the actual number - * of filters will be overwritten into \c num_filters. Otherwise, - * \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and \c num_filters - * is adjusted to the number of elements that would be returned if enough - * space was available. - * - * The list of video processing filters supported by the driver shall - * be ordered in the way they can be iteratively applied. This is needed - * for both correctness, i.e. some filters would not mean anything if - * applied at the beginning of the pipeline; but also for performance - * since some filters can be applied in a single pass (e.g. noise - * reduction + deinterlacing). - * - * @param[in] dpy the VA display - * @param[in] context the video processing context - * @param[out] filters the output array of #VAProcFilterType elements - * @param[in,out] num_filters the number of elements allocated on input, - * the number of elements actually filled in on output - */ -VAStatus -vaQueryVideoProcFilters( - VADisplay dpy, - VAContextID context, - VAProcFilterType *filters, - unsigned int *num_filters -); - -/** - * \brief Queries video filter capabilities. - * - * This function returns the list of capabilities supported by the driver - * for a specific video filter. The \c filter_caps array is allocated by - * the user and \c num_filter_caps shall be initialized to the number - * of allocated elements in that array. Upon successful return, the - * actual number of filters will be overwritten into \c num_filter_caps. - * Otherwise, \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and - * \c num_filter_caps is adjusted to the number of elements that would be - * returned if enough space was available. - * - * @param[in] dpy the VA display - * @param[in] context the video processing context - * @param[in] type the video filter type - * @param[out] filter_caps the output array of #VAProcFilterCap elements - * @param[in,out] num_filter_caps the number of elements allocated on input, - * the number of elements actually filled in output - */ -VAStatus -vaQueryVideoProcFilterCaps( - VADisplay dpy, - VAContextID context, - VAProcFilterType type, - void *filter_caps, - unsigned int *num_filter_caps -); - -/** - * \brief Queries video processing pipeline capabilities. - * - * This function returns the video processing pipeline capabilities. The - * \c filters array defines the video processing pipeline and is an array - * of buffers holding filter parameters. - * - * Note: the #VAProcPipelineCaps structure contains user-provided arrays. - * If non-NULL, the corresponding \c num_* fields shall be filled in on - * input with the number of elements allocated. Upon successful return, - * the actual number of elements will be overwritten into the \c num_* - * fields. Otherwise, \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned - * and \c num_* fields are adjusted to the number of elements that would - * be returned if enough space was available. - * - * @param[in] dpy the VA display - * @param[in] context the video processing context - * @param[in] filters the array of VA buffers defining the video - * processing pipeline - * @param[in] num_filters the number of elements in filters - * @param[in,out] pipeline_caps the video processing pipeline capabilities - */ -VAStatus -vaQueryVideoProcPipelineCaps( - VADisplay dpy, - VAContextID context, - VABufferID *filters, - unsigned int num_filters, - VAProcPipelineCaps *pipeline_caps -); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VA_VPP_H */ diff --git a/prebuilts/x86_64/include/x264.h b/prebuilts/x86_64/include/x264.h deleted file mode 100644 index 5aa2a8d..0000000 --- a/prebuilts/x86_64/include/x264.h +++ /dev/null @@ -1,1019 +0,0 @@ -/***************************************************************************** - * x264.h: x264 public header - ***************************************************************************** - * Copyright (C) 2003-2022 x264 project - * - * Authors: Laurent Aimar - * Loren Merritt - * Fiona Glaser - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA. - * - * This program is also available under a commercial proprietary license. - * For more information, contact us at licensing@x264.com. - *****************************************************************************/ - -#ifndef X264_X264_H -#define X264_X264_H - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(_STDINT_H) && !defined(_STDINT_H_) && !defined(_STDINT_H_INCLUDED) && !defined(_STDINT) &&\ - !defined(_SYS_STDINT_H_) && !defined(_INTTYPES_H) && !defined(_INTTYPES_H_) && !defined(_INTTYPES) -# ifdef _MSC_VER -# pragma message("You must include stdint.h or inttypes.h before x264.h") -# else -# warning You must include stdint.h or inttypes.h before x264.h -# endif -#endif - -#include - -#include "x264_config.h" - -#define X264_BUILD 164 - -#ifdef _WIN32 -# define X264_DLL_IMPORT __declspec(dllimport) -# define X264_DLL_EXPORT __declspec(dllexport) -#else -# if defined(__GNUC__) && (__GNUC__ >= 4) -# define X264_DLL_IMPORT -# define X264_DLL_EXPORT __attribute__((visibility("default"))) -# else -# define X264_DLL_IMPORT -# define X264_DLL_EXPORT -# endif -#endif - -/* Application developers planning to link against a shared library version of - * libx264 from a Microsoft Visual Studio or similar development environment - * will need to define X264_API_IMPORTS before including this header. - * This clause does not apply to MinGW, similar development environments, or non - * Windows platforms. */ -#ifdef X264_API_IMPORTS -# define X264_API X264_DLL_IMPORT -#else -# ifdef X264_API_EXPORTS -# define X264_API X264_DLL_EXPORT -# else -# define X264_API -# endif -#endif - -/* x264_t: - * opaque handler for encoder */ -typedef struct x264_t x264_t; - -/**************************************************************************** - * NAL structure and functions - ****************************************************************************/ - -enum nal_unit_type_e -{ - NAL_UNKNOWN = 0, - NAL_SLICE = 1, - NAL_SLICE_DPA = 2, - NAL_SLICE_DPB = 3, - NAL_SLICE_DPC = 4, - NAL_SLICE_IDR = 5, /* ref_idc != 0 */ - NAL_SEI = 6, /* ref_idc == 0 */ - NAL_SPS = 7, - NAL_PPS = 8, - NAL_AUD = 9, - NAL_FILLER = 12, - /* ref_idc == 0 for 6,9,10,11,12 */ -}; -enum nal_priority_e -{ - NAL_PRIORITY_DISPOSABLE = 0, - NAL_PRIORITY_LOW = 1, - NAL_PRIORITY_HIGH = 2, - NAL_PRIORITY_HIGHEST = 3, -}; - -/* The data within the payload is already NAL-encapsulated; the ref_idc and type - * are merely in the struct for easy access by the calling application. - * All data returned in an x264_nal_t, including the data in p_payload, is no longer - * valid after the next call to x264_encoder_encode. Thus it must be used or copied - * before calling x264_encoder_encode or x264_encoder_headers again. */ -typedef struct x264_nal_t -{ - int i_ref_idc; /* nal_priority_e */ - int i_type; /* nal_unit_type_e */ - int b_long_startcode; - int i_first_mb; /* If this NAL is a slice, the index of the first MB in the slice. */ - int i_last_mb; /* If this NAL is a slice, the index of the last MB in the slice. */ - - /* Size of payload (including any padding) in bytes. */ - int i_payload; - /* If param->b_annexb is set, Annex-B bytestream with startcode. - * Otherwise, startcode is replaced with a 4-byte size. - * This size is the size used in mp4/similar muxing; it is equal to i_payload-4 */ - uint8_t *p_payload; - - /* Size of padding in bytes. */ - int i_padding; -} x264_nal_t; - -/**************************************************************************** - * Encoder parameters - ****************************************************************************/ -/* CPU flags */ - -/* x86 */ -#define X264_CPU_MMX (1U<<0) -#define X264_CPU_MMX2 (1U<<1) /* MMX2 aka MMXEXT aka ISSE */ -#define X264_CPU_MMXEXT X264_CPU_MMX2 -#define X264_CPU_SSE (1U<<2) -#define X264_CPU_SSE2 (1U<<3) -#define X264_CPU_LZCNT (1U<<4) -#define X264_CPU_SSE3 (1U<<5) -#define X264_CPU_SSSE3 (1U<<6) -#define X264_CPU_SSE4 (1U<<7) /* SSE4.1 */ -#define X264_CPU_SSE42 (1U<<8) /* SSE4.2 */ -#define X264_CPU_AVX (1U<<9) /* Requires OS support even if YMM registers aren't used */ -#define X264_CPU_XOP (1U<<10) /* AMD XOP */ -#define X264_CPU_FMA4 (1U<<11) /* AMD FMA4 */ -#define X264_CPU_FMA3 (1U<<12) -#define X264_CPU_BMI1 (1U<<13) -#define X264_CPU_BMI2 (1U<<14) -#define X264_CPU_AVX2 (1U<<15) -#define X264_CPU_AVX512 (1U<<16) /* AVX-512 {F, CD, BW, DQ, VL}, requires OS support */ -/* x86 modifiers */ -#define X264_CPU_CACHELINE_32 (1U<<17) /* avoid memory loads that span the border between two cachelines */ -#define X264_CPU_CACHELINE_64 (1U<<18) /* 32/64 is the size of a cacheline in bytes */ -#define X264_CPU_SSE2_IS_SLOW (1U<<19) /* avoid most SSE2 functions on Athlon64 */ -#define X264_CPU_SSE2_IS_FAST (1U<<20) /* a few functions are only faster on Core2 and Phenom */ -#define X264_CPU_SLOW_SHUFFLE (1U<<21) /* The Conroe has a slow shuffle unit (relative to overall SSE performance) */ -#define X264_CPU_STACK_MOD4 (1U<<22) /* if stack is only mod4 and not mod16 */ -#define X264_CPU_SLOW_ATOM (1U<<23) /* The Atom is terrible: slow SSE unaligned loads, slow - * SIMD multiplies, slow SIMD variable shifts, slow pshufb, - * cacheline split penalties -- gather everything here that - * isn't shared by other CPUs to avoid making half a dozen - * new SLOW flags. */ -#define X264_CPU_SLOW_PSHUFB (1U<<24) /* such as on the Intel Atom */ -#define X264_CPU_SLOW_PALIGNR (1U<<25) /* such as on the AMD Bobcat */ - -/* PowerPC */ -#define X264_CPU_ALTIVEC 0x0000001U - -/* ARM and AArch64 */ -#define X264_CPU_ARMV6 0x0000001U -#define X264_CPU_NEON 0x0000002U /* ARM NEON */ -#define X264_CPU_FAST_NEON_MRC 0x0000004U /* Transfer from NEON to ARM register is fast (Cortex-A9) */ -#define X264_CPU_ARMV8 0x0000008U - -/* MIPS */ -#define X264_CPU_MSA 0x0000001U /* MIPS MSA */ - -/* Analyse flags */ -#define X264_ANALYSE_I4x4 0x0001U /* Analyse i4x4 */ -#define X264_ANALYSE_I8x8 0x0002U /* Analyse i8x8 (requires 8x8 transform) */ -#define X264_ANALYSE_PSUB16x16 0x0010U /* Analyse p16x8, p8x16 and p8x8 */ -#define X264_ANALYSE_PSUB8x8 0x0020U /* Analyse p8x4, p4x8, p4x4 */ -#define X264_ANALYSE_BSUB16x16 0x0100U /* Analyse b16x8, b8x16 and b8x8 */ - -#define X264_DIRECT_PRED_NONE 0 -#define X264_DIRECT_PRED_SPATIAL 1 -#define X264_DIRECT_PRED_TEMPORAL 2 -#define X264_DIRECT_PRED_AUTO 3 -#define X264_ME_DIA 0 -#define X264_ME_HEX 1 -#define X264_ME_UMH 2 -#define X264_ME_ESA 3 -#define X264_ME_TESA 4 -#define X264_CQM_FLAT 0 -#define X264_CQM_JVT 1 -#define X264_CQM_CUSTOM 2 -#define X264_RC_CQP 0 -#define X264_RC_CRF 1 -#define X264_RC_ABR 2 -#define X264_QP_AUTO 0 -#define X264_AQ_NONE 0 -#define X264_AQ_VARIANCE 1 -#define X264_AQ_AUTOVARIANCE 2 -#define X264_AQ_AUTOVARIANCE_BIASED 3 -#define X264_B_ADAPT_NONE 0 -#define X264_B_ADAPT_FAST 1 -#define X264_B_ADAPT_TRELLIS 2 -#define X264_WEIGHTP_NONE 0 -#define X264_WEIGHTP_SIMPLE 1 -#define X264_WEIGHTP_SMART 2 -#define X264_B_PYRAMID_NONE 0 -#define X264_B_PYRAMID_STRICT 1 -#define X264_B_PYRAMID_NORMAL 2 -#define X264_KEYINT_MIN_AUTO 0 -#define X264_KEYINT_MAX_INFINITE (1<<30) - -/* AVC-Intra flavors */ -#define X264_AVCINTRA_FLAVOR_PANASONIC 0 -#define X264_AVCINTRA_FLAVOR_SONY 1 - -static const char * const x264_direct_pred_names[] = { "none", "spatial", "temporal", "auto", 0 }; -static const char * const x264_motion_est_names[] = { "dia", "hex", "umh", "esa", "tesa", 0 }; -static const char * const x264_b_pyramid_names[] = { "none", "strict", "normal", 0 }; -static const char * const x264_overscan_names[] = { "undef", "show", "crop", 0 }; -static const char * const x264_vidformat_names[] = { "component", "pal", "ntsc", "secam", "mac", "undef", 0 }; -static const char * const x264_fullrange_names[] = { "off", "on", 0 }; -static const char * const x264_colorprim_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "film", "bt2020", "smpte428", - "smpte431", "smpte432", 0 }; -static const char * const x264_transfer_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "linear", "log100", "log316", - "iec61966-2-4", "bt1361e", "iec61966-2-1", "bt2020-10", "bt2020-12", "smpte2084", "smpte428", "arib-std-b67", 0 }; -static const char * const x264_colmatrix_names[] = { "GBR", "bt709", "undef", "", "fcc", "bt470bg", "smpte170m", "smpte240m", "YCgCo", "bt2020nc", "bt2020c", - "smpte2085", "chroma-derived-nc", "chroma-derived-c", "ICtCp", 0 }; -static const char * const x264_nal_hrd_names[] = { "none", "vbr", "cbr", 0 }; -static const char * const x264_avcintra_flavor_names[] = { "panasonic", "sony", 0 }; - -/* Colorspace type */ -#define X264_CSP_MASK 0x00ff /* */ -#define X264_CSP_NONE 0x0000 /* Invalid mode */ -#define X264_CSP_I400 0x0001 /* monochrome 4:0:0 */ -#define X264_CSP_I420 0x0002 /* yuv 4:2:0 planar */ -#define X264_CSP_YV12 0x0003 /* yvu 4:2:0 planar */ -#define X264_CSP_NV12 0x0004 /* yuv 4:2:0, with one y plane and one packed u+v */ -#define X264_CSP_NV21 0x0005 /* yuv 4:2:0, with one y plane and one packed v+u */ -#define X264_CSP_I422 0x0006 /* yuv 4:2:2 planar */ -#define X264_CSP_YV16 0x0007 /* yvu 4:2:2 planar */ -#define X264_CSP_NV16 0x0008 /* yuv 4:2:2, with one y plane and one packed u+v */ -#define X264_CSP_YUYV 0x0009 /* yuyv 4:2:2 packed */ -#define X264_CSP_UYVY 0x000a /* uyvy 4:2:2 packed */ -#define X264_CSP_V210 0x000b /* 10-bit yuv 4:2:2 packed in 32 */ -#define X264_CSP_I444 0x000c /* yuv 4:4:4 planar */ -#define X264_CSP_YV24 0x000d /* yvu 4:4:4 planar */ -#define X264_CSP_BGR 0x000e /* packed bgr 24bits */ -#define X264_CSP_BGRA 0x000f /* packed bgr 32bits */ -#define X264_CSP_RGB 0x0010 /* packed rgb 24bits */ -#define X264_CSP_MAX 0x0011 /* end of list */ -#define X264_CSP_VFLIP 0x1000 /* the csp is vertically flipped */ -#define X264_CSP_HIGH_DEPTH 0x2000 /* the csp has a depth of 16 bits per pixel component */ - -/* Slice type */ -#define X264_TYPE_AUTO 0x0000 /* Let x264 choose the right type */ -#define X264_TYPE_IDR 0x0001 -#define X264_TYPE_I 0x0002 -#define X264_TYPE_P 0x0003 -#define X264_TYPE_BREF 0x0004 /* Non-disposable B-frame */ -#define X264_TYPE_B 0x0005 -#define X264_TYPE_KEYFRAME 0x0006 /* IDR or I depending on b_open_gop option */ -#define IS_X264_TYPE_I(x) ((x)==X264_TYPE_I || (x)==X264_TYPE_IDR || (x)==X264_TYPE_KEYFRAME) -#define IS_X264_TYPE_B(x) ((x)==X264_TYPE_B || (x)==X264_TYPE_BREF) - -/* Log level */ -#define X264_LOG_NONE (-1) -#define X264_LOG_ERROR 0 -#define X264_LOG_WARNING 1 -#define X264_LOG_INFO 2 -#define X264_LOG_DEBUG 3 - -/* Threading */ -#define X264_THREADS_AUTO 0 /* Automatically select optimal number of threads */ -#define X264_SYNC_LOOKAHEAD_AUTO (-1) /* Automatically select optimal lookahead thread buffer size */ - -/* HRD */ -#define X264_NAL_HRD_NONE 0 -#define X264_NAL_HRD_VBR 1 -#define X264_NAL_HRD_CBR 2 - -/* Zones: override ratecontrol or other options for specific sections of the video. - * See x264_encoder_reconfig() for which options can be changed. - * If zones overlap, whichever comes later in the list takes precedence. */ -typedef struct x264_zone_t -{ - int i_start, i_end; /* range of frame numbers */ - int b_force_qp; /* whether to use qp vs bitrate factor */ - int i_qp; - float f_bitrate_factor; - struct x264_param_t *param; -} x264_zone_t; - -typedef struct x264_param_t -{ - /* CPU flags */ - uint32_t cpu; - int i_threads; /* encode multiple frames in parallel */ - int i_lookahead_threads; /* multiple threads for lookahead analysis */ - int b_sliced_threads; /* Whether to use slice-based threading. */ - int b_deterministic; /* whether to allow non-deterministic optimizations when threaded */ - int b_cpu_independent; /* force canonical behavior rather than cpu-dependent optimal algorithms */ - int i_sync_lookahead; /* threaded lookahead buffer */ - - /* Video Properties */ - int i_width; - int i_height; - int i_csp; /* CSP of encoded bitstream */ - int i_bitdepth; - int i_level_idc; - int i_frame_total; /* number of frames to encode if known, else 0 */ - - /* NAL HRD - * Uses Buffering and Picture Timing SEIs to signal HRD - * The HRD in H.264 was not designed with VFR in mind. - * It is therefore not recommendeded to use NAL HRD with VFR. - * Furthermore, reconfiguring the VBV (via x264_encoder_reconfig) - * will currently generate invalid HRD. */ - int i_nal_hrd; - - struct - { - /* they will be reduced to be 0 < x <= 65535 and prime */ - int i_sar_height; - int i_sar_width; - - int i_overscan; /* 0=undef, 1=no overscan, 2=overscan */ - - /* see h264 annex E for the values of the following */ - int i_vidformat; - int b_fullrange; - int i_colorprim; - int i_transfer; - int i_colmatrix; - int i_chroma_loc; /* both top & bottom */ - } vui; - - /* Bitstream parameters */ - int i_frame_reference; /* Maximum number of reference frames */ - int i_dpb_size; /* Force a DPB size larger than that implied by B-frames and reference frames. - * Useful in combination with interactive error resilience. */ - int i_keyint_max; /* Force an IDR keyframe at this interval */ - int i_keyint_min; /* Scenecuts closer together than this are coded as I, not IDR. */ - int i_scenecut_threshold; /* how aggressively to insert extra I frames */ - int b_intra_refresh; /* Whether or not to use periodic intra refresh instead of IDR frames. */ - - int i_bframe; /* how many b-frame between 2 references pictures */ - int i_bframe_adaptive; - int i_bframe_bias; - int i_bframe_pyramid; /* Keep some B-frames as references: 0=off, 1=strict hierarchical, 2=normal */ - int b_open_gop; - int b_bluray_compat; - int i_avcintra_class; - int i_avcintra_flavor; - - int b_deblocking_filter; - int i_deblocking_filter_alphac0; /* [-6, 6] -6 light filter, 6 strong */ - int i_deblocking_filter_beta; /* [-6, 6] idem */ - - int b_cabac; - int i_cabac_init_idc; - - int b_interlaced; - int b_constrained_intra; - - int i_cqm_preset; - char *psz_cqm_file; /* filename (in UTF-8) of CQM file, JM format */ - uint8_t cqm_4iy[16]; /* used only if i_cqm_preset == X264_CQM_CUSTOM */ - uint8_t cqm_4py[16]; - uint8_t cqm_4ic[16]; - uint8_t cqm_4pc[16]; - uint8_t cqm_8iy[64]; - uint8_t cqm_8py[64]; - uint8_t cqm_8ic[64]; - uint8_t cqm_8pc[64]; - - /* Log */ - void (*pf_log)( void *, int i_level, const char *psz, va_list ); - void *p_log_private; - int i_log_level; - int b_full_recon; /* fully reconstruct frames, even when not necessary for encoding. Implied by psz_dump_yuv */ - char *psz_dump_yuv; /* filename (in UTF-8) for reconstructed frames */ - - /* Encoder analyser parameters */ - struct - { - unsigned int intra; /* intra partitions */ - unsigned int inter; /* inter partitions */ - - int b_transform_8x8; - int i_weighted_pred; /* weighting for P-frames */ - int b_weighted_bipred; /* implicit weighting for B-frames */ - int i_direct_mv_pred; /* spatial vs temporal mv prediction */ - int i_chroma_qp_offset; - - int i_me_method; /* motion estimation algorithm to use (X264_ME_*) */ - int i_me_range; /* integer pixel motion estimation search range (from predicted mv) */ - int i_mv_range; /* maximum length of a mv (in pixels). -1 = auto, based on level */ - int i_mv_range_thread; /* minimum space between threads. -1 = auto, based on number of threads. */ - int i_subpel_refine; /* subpixel motion estimation quality */ - int b_chroma_me; /* chroma ME for subpel and mode decision in P-frames */ - int b_mixed_references; /* allow each mb partition to have its own reference number */ - int i_trellis; /* trellis RD quantization */ - int b_fast_pskip; /* early SKIP detection on P-frames */ - int b_dct_decimate; /* transform coefficient thresholding on P-frames */ - int i_noise_reduction; /* adaptive pseudo-deadzone */ - float f_psy_rd; /* Psy RD strength */ - float f_psy_trellis; /* Psy trellis strength */ - int b_psy; /* Toggle all psy optimizations */ - - int b_mb_info; /* Use input mb_info data in x264_picture_t */ - int b_mb_info_update; /* Update the values in mb_info according to the results of encoding. */ - - /* the deadzone size that will be used in luma quantization */ - int i_luma_deadzone[2]; /* {inter, intra} */ - - int b_psnr; /* compute and print PSNR stats */ - int b_ssim; /* compute and print SSIM stats */ - } analyse; - - /* Rate control parameters */ - struct - { - int i_rc_method; /* X264_RC_* */ - - int i_qp_constant; /* 0=lossless */ - int i_qp_min; /* min allowed QP value */ - int i_qp_max; /* max allowed QP value */ - int i_qp_step; /* max QP step between frames */ - - int i_bitrate; - float f_rf_constant; /* 1pass VBR, nominal QP */ - float f_rf_constant_max; /* In CRF mode, maximum CRF as caused by VBV */ - float f_rate_tolerance; - int i_vbv_max_bitrate; - int i_vbv_buffer_size; - float f_vbv_buffer_init; /* <=1: fraction of buffer_size. >1: kbit */ - float f_ip_factor; - float f_pb_factor; - - /* VBV filler: force CBR VBV and use filler bytes to ensure hard-CBR. - * Implied by NAL-HRD CBR. */ - int b_filler; - - int i_aq_mode; /* psy adaptive QP. (X264_AQ_*) */ - float f_aq_strength; - int b_mb_tree; /* Macroblock-tree ratecontrol. */ - int i_lookahead; - - /* 2pass */ - int b_stat_write; /* Enable stat writing in psz_stat_out */ - char *psz_stat_out; /* output filename (in UTF-8) of the 2pass stats file */ - int b_stat_read; /* Read stat from psz_stat_in and use it */ - char *psz_stat_in; /* input filename (in UTF-8) of the 2pass stats file */ - - /* 2pass params (same as ffmpeg ones) */ - float f_qcompress; /* 0.0 => cbr, 1.0 => constant qp */ - float f_qblur; /* temporally blur quants */ - float f_complexity_blur; /* temporally blur complexity */ - x264_zone_t *zones; /* ratecontrol overrides */ - int i_zones; /* number of zone_t's */ - char *psz_zones; /* alternate method of specifying zones */ - } rc; - - /* Cropping Rectangle parameters: added to those implicitly defined by - non-mod16 video resolutions. */ - struct - { - int i_left; - int i_top; - int i_right; - int i_bottom; - } crop_rect; - - /* frame packing arrangement flag */ - int i_frame_packing; - - /* mastering display SEI: Primary and white point chromaticity coordinates - in 0.00002 increments. Brightness units are 0.0001 cd/m^2. */ - struct - { - int b_mastering_display; /* enable writing this SEI */ - int i_green_x; - int i_green_y; - int i_blue_x; - int i_blue_y; - int i_red_x; - int i_red_y; - int i_white_x; - int i_white_y; - int64_t i_display_max; - int64_t i_display_min; - } mastering_display; - - /* content light level SEI */ - struct - { - int b_cll; /* enable writing this SEI */ - int i_max_cll; - int i_max_fall; - } content_light_level; - - /* alternative transfer SEI */ - int i_alternative_transfer; - - /* Muxing parameters */ - int b_aud; /* generate access unit delimiters */ - int b_repeat_headers; /* put SPS/PPS before each keyframe */ - int b_annexb; /* if set, place start codes (4 bytes) before NAL units, - * otherwise place size (4 bytes) before NAL units. */ - int i_sps_id; /* SPS and PPS id number */ - int b_vfr_input; /* VFR input. If 1, use timebase and timestamps for ratecontrol purposes. - * If 0, use fps only. */ - int b_pulldown; /* use explicitly set timebase for CFR */ - uint32_t i_fps_num; - uint32_t i_fps_den; - uint32_t i_timebase_num; /* Timebase numerator */ - uint32_t i_timebase_den; /* Timebase denominator */ - - int b_tff; - - /* Pulldown: - * The correct pic_struct must be passed with each input frame. - * The input timebase should be the timebase corresponding to the output framerate. This should be constant. - * e.g. for 3:2 pulldown timebase should be 1001/30000 - * The PTS passed with each frame must be the PTS of the frame after pulldown is applied. - * Frame doubling and tripling require b_vfr_input set to zero (see H.264 Table D-1) - * - * Pulldown changes are not clearly defined in H.264. Therefore, it is the calling app's responsibility to manage this. - */ - - int b_pic_struct; - - /* Fake Interlaced. - * - * Used only when b_interlaced=0. Setting this flag makes it possible to flag the stream as PAFF interlaced yet - * encode all frames progessively. It is useful for encoding 25p and 30p Blu-Ray streams. - */ - - int b_fake_interlaced; - - /* Don't optimize header parameters based on video content, e.g. ensure that splitting an input video, compressing - * each part, and stitching them back together will result in identical SPS/PPS. This is necessary for stitching - * with container formats that don't allow multiple SPS/PPS. */ - int b_stitchable; - - int b_opencl; /* use OpenCL when available */ - int i_opencl_device; /* specify count of GPU devices to skip, for CLI users */ - void *opencl_device_id; /* pass explicit cl_device_id as void*, for API users */ - char *psz_clbin_file; /* filename (in UTF-8) of the compiled OpenCL kernel cache file */ - - /* Slicing parameters */ - int i_slice_max_size; /* Max size per slice in bytes; includes estimated NAL overhead. */ - int i_slice_max_mbs; /* Max number of MBs per slice; overrides i_slice_count. */ - int i_slice_min_mbs; /* Min number of MBs per slice */ - int i_slice_count; /* Number of slices per frame: forces rectangular slices. */ - int i_slice_count_max; /* Absolute cap on slices per frame; stops applying slice-max-size - * and slice-max-mbs if this is reached. */ - - /* Optional callback for freeing this x264_param_t when it is done being used. - * Only used when the x264_param_t sits in memory for an indefinite period of time, - * i.e. when an x264_param_t is passed to x264_t in an x264_picture_t or in zones. - * Not used when x264_encoder_reconfig is called directly. */ - void (*param_free)( void* ); - - /* Optional low-level callback for low-latency encoding. Called for each output NAL unit - * immediately after the NAL unit is finished encoding. This allows the calling application - * to begin processing video data (e.g. by sending packets over a network) before the frame - * is done encoding. - * - * This callback MUST do the following in order to work correctly: - * 1) Have available an output buffer of at least size nal->i_payload*3/2 + 5 + 64. - * 2) Call x264_nal_encode( h, dst, nal ), where dst is the output buffer. - * After these steps, the content of nal is valid and can be used in the same way as if - * the NAL unit were output by x264_encoder_encode. - * - * This does not need to be synchronous with the encoding process: the data pointed to - * by nal (both before and after x264_nal_encode) will remain valid until the next - * x264_encoder_encode call. The callback must be re-entrant. - * - * This callback does not work with frame-based threads; threads must be disabled - * or sliced-threads enabled. This callback also does not work as one would expect - * with HRD -- since the buffering period SEI cannot be calculated until the frame - * is finished encoding, it will not be sent via this callback. - * - * Note also that the NALs are not necessarily returned in order when sliced threads is - * enabled. Accordingly, the variable i_first_mb and i_last_mb are available in - * x264_nal_t to help the calling application reorder the slices if necessary. - * - * When this callback is enabled, x264_encoder_encode does not return valid NALs; - * the calling application is expected to acquire all output NALs through the callback. - * - * It is generally sensible to combine this callback with a use of slice-max-mbs or - * slice-max-size. - * - * The opaque pointer is the opaque pointer from the input frame associated with this - * NAL unit. This helps distinguish between nalu_process calls from different sources, - * e.g. if doing multiple encodes in one process. - */ - void (*nalu_process)( x264_t *h, x264_nal_t *nal, void *opaque ); - - /* For internal use only */ - void *opaque; -} x264_param_t; - -X264_API void x264_nal_encode( x264_t *h, uint8_t *dst, x264_nal_t *nal ); - -/**************************************************************************** - * H.264 level restriction information - ****************************************************************************/ - -typedef struct x264_level_t -{ - uint8_t level_idc; - int32_t mbps; /* max macroblock processing rate (macroblocks/sec) */ - int32_t frame_size; /* max frame size (macroblocks) */ - int32_t dpb; /* max decoded picture buffer (mbs) */ - int32_t bitrate; /* max bitrate (kbit/sec) */ - int32_t cpb; /* max vbv buffer (kbit) */ - uint16_t mv_range; /* max vertical mv component range (pixels) */ - uint8_t mvs_per_2mb; /* max mvs per 2 consecutive mbs. */ - uint8_t slice_rate; /* ?? */ - uint8_t mincr; /* min compression ratio */ - uint8_t bipred8x8; /* limit bipred to >=8x8 */ - uint8_t direct8x8; /* limit b_direct to >=8x8 */ - uint8_t frame_only; /* forbid interlacing */ -} x264_level_t; - -/* all of the levels defined in the standard, terminated by .level_idc=0 */ -X264_API extern const x264_level_t x264_levels[]; - -/**************************************************************************** - * Basic parameter handling functions - ****************************************************************************/ - -/* x264_param_default: - * fill x264_param_t with default values and do CPU detection */ -X264_API void x264_param_default( x264_param_t * ); - -/* x264_param_parse: - * set one parameter by name. - * returns 0 on success, or returns one of the following errors. - * note: BAD_VALUE occurs only if it can't even parse the value, - * numerical range is not checked until x264_encoder_open() or - * x264_encoder_reconfig(). - * value=NULL means "true" for boolean options, but is a BAD_VALUE for non-booleans. - * can allocate memory which should be freed by call of x264_param_cleanup. */ -#define X264_PARAM_BAD_NAME (-1) -#define X264_PARAM_BAD_VALUE (-2) -#define X264_PARAM_ALLOC_FAILED (-3) -X264_API int x264_param_parse( x264_param_t *, const char *name, const char *value ); - -/* x264_param_cleanup: - * Cleans up and frees allocated members of x264_param_t. - * This *does not* free the x264_param_t itself, as it may exist on the - * stack. It only frees any members of the struct that were allocated by - * x264 itself, in e.g. x264_param_parse(). */ -X264_API void x264_param_cleanup( x264_param_t *param ); - -/**************************************************************************** - * Advanced parameter handling functions - ****************************************************************************/ - -/* These functions expose the full power of x264's preset-tune-profile system for - * easy adjustment of large numbers of internal parameters. - * - * In order to replicate x264CLI's option handling, these functions MUST be called - * in the following order: - * 1) x264_param_default_preset - * 2) Custom user options (via param_parse or directly assigned variables) - * 3) x264_param_apply_fastfirstpass - * 4) x264_param_apply_profile - * - * Additionally, x264CLI does not apply step 3 if the preset chosen is "placebo" - * or --slow-firstpass is set. */ - -/* x264_param_default_preset: - * The same as x264_param_default, but also use the passed preset and tune - * to modify the default settings. - * (either can be NULL, which implies no preset or no tune, respectively) - * - * Currently available presets are, ordered from fastest to slowest: */ -static const char * const x264_preset_names[] = { "ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo", 0 }; - -/* The presets can also be indexed numerically, as in: - * x264_param_default_preset( ¶m, "3", ... ) - * with ultrafast mapping to "0" and placebo mapping to "9". This mapping may - * of course change if new presets are added in between, but will always be - * ordered from fastest to slowest. - * - * Warning: the speed of these presets scales dramatically. Ultrafast is a full - * 100 times faster than placebo! - * - * Currently available tunings are: */ -static const char * const x264_tune_names[] = { "film", "animation", "grain", "stillimage", "psnr", "ssim", "fastdecode", "zerolatency", 0 }; - -/* Multiple tunings can be used if separated by a delimiter in ",./-+", - * however multiple psy tunings cannot be used. - * film, animation, grain, stillimage, psnr, and ssim are psy tunings. - * - * returns 0 on success, negative on failure (e.g. invalid preset/tune name). */ -X264_API int x264_param_default_preset( x264_param_t *, const char *preset, const char *tune ); - -/* x264_param_apply_fastfirstpass: - * If first-pass mode is set (rc.b_stat_read == 0, rc.b_stat_write == 1), - * modify the encoder settings to disable options generally not useful on - * the first pass. */ -X264_API void x264_param_apply_fastfirstpass( x264_param_t * ); - -/* x264_param_apply_profile: - * Applies the restrictions of the given profile. - * Currently available profiles are, from most to least restrictive: */ -static const char * const x264_profile_names[] = { "baseline", "main", "high", "high10", "high422", "high444", 0 }; - -/* (can be NULL, in which case the function will do nothing) - * - * Does NOT guarantee that the given profile will be used: if the restrictions - * of "High" are applied to settings that are already Baseline-compatible, the - * stream will remain baseline. In short, it does not increase settings, only - * decrease them. - * - * returns 0 on success, negative on failure (e.g. invalid profile name). */ -X264_API int x264_param_apply_profile( x264_param_t *, const char *profile ); - -/**************************************************************************** - * Picture structures and functions - ****************************************************************************/ - -/* x264_chroma_format: - * Specifies the chroma formats that x264 supports encoding. When this - * value is non-zero, then it represents a X264_CSP_* that is the only - * chroma format that x264 supports encoding. If the value is 0 then - * there are no restrictions. */ -X264_API extern const int x264_chroma_format; - -enum pic_struct_e -{ - PIC_STRUCT_AUTO = 0, // automatically decide (default) - PIC_STRUCT_PROGRESSIVE = 1, // progressive frame - // "TOP" and "BOTTOM" are not supported in x264 (PAFF only) - PIC_STRUCT_TOP_BOTTOM = 4, // top field followed by bottom - PIC_STRUCT_BOTTOM_TOP = 5, // bottom field followed by top - PIC_STRUCT_TOP_BOTTOM_TOP = 6, // top field, bottom field, top field repeated - PIC_STRUCT_BOTTOM_TOP_BOTTOM = 7, // bottom field, top field, bottom field repeated - PIC_STRUCT_DOUBLE = 8, // double frame - PIC_STRUCT_TRIPLE = 9, // triple frame -}; - -typedef struct x264_hrd_t -{ - double cpb_initial_arrival_time; - double cpb_final_arrival_time; - double cpb_removal_time; - - double dpb_output_time; -} x264_hrd_t; - -/* Arbitrary user SEI: - * Payload size is in bytes and the payload pointer must be valid. - * Payload types and syntax can be found in Annex D of the H.264 Specification. - * SEI payload alignment bits as described in Annex D must be included at the - * end of the payload if needed. - * The payload should not be NAL-encapsulated. - * Payloads are written first in order of input, apart from in the case when HRD - * is enabled where payloads are written after the Buffering Period SEI. */ - -typedef struct x264_sei_payload_t -{ - int payload_size; - int payload_type; - uint8_t *payload; -} x264_sei_payload_t; - -typedef struct x264_sei_t -{ - int num_payloads; - x264_sei_payload_t *payloads; - /* In: optional callback to free each payload AND x264_sei_payload_t when used. */ - void (*sei_free)( void* ); -} x264_sei_t; - -typedef struct x264_image_t -{ - int i_csp; /* Colorspace */ - int i_plane; /* Number of image planes */ - int i_stride[4]; /* Strides for each plane */ - uint8_t *plane[4]; /* Pointers to each plane */ -} x264_image_t; - -typedef struct x264_image_properties_t -{ - /* All arrays of data here are ordered as follows: - * each array contains one offset per macroblock, in raster scan order. In interlaced - * mode, top-field MBs and bottom-field MBs are interleaved at the row level. - * Macroblocks are 16x16 blocks of pixels (with respect to the luma plane). For the - * purposes of calculating the number of macroblocks, width and height are rounded up to - * the nearest 16. If in interlaced mode, height is rounded up to the nearest 32 instead. */ - - /* In: an array of quantizer offsets to be applied to this image during encoding. - * These are added on top of the decisions made by x264. - * Offsets can be fractional; they are added before QPs are rounded to integer. - * Adaptive quantization must be enabled to use this feature. Behavior if quant - * offsets differ between encoding passes is undefined. */ - float *quant_offsets; - /* In: optional callback to free quant_offsets when used. - * Useful if one wants to use a different quant_offset array for each frame. */ - void (*quant_offsets_free)( void* ); - - /* In: optional array of flags for each macroblock. - * Allows specifying additional information for the encoder such as which macroblocks - * remain unchanged. Usable flags are listed below. - * x264_param_t.analyse.b_mb_info must be set to use this, since x264 needs to track - * extra data internally to make full use of this information. - * - * Out: if b_mb_info_update is set, x264 will update this array as a result of encoding. - * - * For "MBINFO_CONSTANT", it will remove this flag on any macroblock whose decoded - * pixels have changed. This can be useful for e.g. noting which areas of the - * frame need to actually be blitted. Note: this intentionally ignores the effects - * of deblocking for the current frame, which should be fine unless one needs exact - * pixel-perfect accuracy. - * - * Results for MBINFO_CONSTANT are currently only set for P-frames, and are not - * guaranteed to enumerate all blocks which haven't changed. (There may be false - * negatives, but no false positives.) - */ - uint8_t *mb_info; - /* In: optional callback to free mb_info when used. */ - void (*mb_info_free)( void* ); - - /* The macroblock is constant and remains unchanged from the previous frame. */ - #define X264_MBINFO_CONSTANT (1U<<0) - /* More flags may be added in the future. */ - - /* Out: SSIM of the the frame luma (if x264_param_t.b_ssim is set) */ - double f_ssim; - /* Out: Average PSNR of the frame (if x264_param_t.b_psnr is set) */ - double f_psnr_avg; - /* Out: PSNR of Y, U, and V (if x264_param_t.b_psnr is set) */ - double f_psnr[3]; - - /* Out: Average effective CRF of the encoded frame */ - double f_crf_avg; -} x264_image_properties_t; - -typedef struct x264_picture_t -{ - /* In: force picture type (if not auto) - * If x264 encoding parameters are violated in the forcing of picture types, - * x264 will correct the input picture type and log a warning. - * Out: type of the picture encoded */ - int i_type; - /* In: force quantizer for != X264_QP_AUTO */ - int i_qpplus1; - /* In: pic_struct, for pulldown/doubling/etc...used only if b_pic_struct=1. - * use pic_struct_e for pic_struct inputs - * Out: pic_struct element associated with frame */ - int i_pic_struct; - /* Out: whether this frame is a keyframe. Important when using modes that result in - * SEI recovery points being used instead of IDR frames. */ - int b_keyframe; - /* In: user pts, Out: pts of encoded picture (user)*/ - int64_t i_pts; - /* Out: frame dts. When the pts of the first frame is close to zero, - * initial frames may have a negative dts which must be dealt with by any muxer */ - int64_t i_dts; - /* In: custom encoding parameters to be set from this frame forwards - (in coded order, not display order). If NULL, continue using - parameters from the previous frame. Some parameters, such as - aspect ratio, can only be changed per-GOP due to the limitations - of H.264 itself; in this case, the caller must force an IDR frame - if it needs the changed parameter to apply immediately. */ - x264_param_t *param; - /* In: raw image data */ - /* Out: reconstructed image data. x264 may skip part of the reconstruction process, - e.g. deblocking, in frames where it isn't necessary. To force complete - reconstruction, at a small speed cost, set b_full_recon. */ - x264_image_t img; - /* In: optional information to modify encoder decisions for this frame - * Out: information about the encoded frame */ - x264_image_properties_t prop; - /* Out: HRD timing information. Output only when i_nal_hrd is set. */ - x264_hrd_t hrd_timing; - /* In: arbitrary user SEI (e.g subtitles, AFDs) */ - x264_sei_t extra_sei; - /* private user data. copied from input to output frames. */ - void *opaque; -} x264_picture_t; - -/* x264_picture_init: - * initialize an x264_picture_t. Needs to be done if the calling application - * allocates its own x264_picture_t as opposed to using x264_picture_alloc. */ -X264_API void x264_picture_init( x264_picture_t *pic ); - -/* x264_picture_alloc: - * alloc data for a picture. You must call x264_picture_clean on it. - * returns 0 on success, or -1 on malloc failure or invalid colorspace. */ -X264_API int x264_picture_alloc( x264_picture_t *pic, int i_csp, int i_width, int i_height ); - -/* x264_picture_clean: - * free associated resource for a x264_picture_t allocated with - * x264_picture_alloc ONLY */ -X264_API void x264_picture_clean( x264_picture_t *pic ); - -/**************************************************************************** - * Encoder functions - ****************************************************************************/ - -/* Force a link error in the case of linking against an incompatible API version. - * Glue #defines exist to force correct macro expansion; the final output of the macro - * is x264_encoder_open_##X264_BUILD (for purposes of dlopen). */ -#define x264_encoder_glue1(x,y) x##y -#define x264_encoder_glue2(x,y) x264_encoder_glue1(x,y) -#define x264_encoder_open x264_encoder_glue2(x264_encoder_open_,X264_BUILD) - -/* x264_encoder_open: - * create a new encoder handler, all parameters from x264_param_t are copied */ -X264_API x264_t *x264_encoder_open( x264_param_t * ); - -/* x264_encoder_reconfig: - * various parameters from x264_param_t are copied. - * this takes effect immediately, on whichever frame is encoded next; - * due to delay, this may not be the next frame passed to encoder_encode. - * if the change should apply to some particular frame, use x264_picture_t->param instead. - * returns 0 on success, negative on parameter validation error. - * not all parameters can be changed; see the actual function for a detailed breakdown. - * - * since not all parameters can be changed, moving from preset to preset may not always - * fully copy all relevant parameters, but should still work usably in practice. however, - * more so than for other presets, many of the speed shortcuts used in ultrafast cannot be - * switched out of; using reconfig to switch between ultrafast and other presets is not - * recommended without a more fine-grained breakdown of parameters to take this into account. */ -X264_API int x264_encoder_reconfig( x264_t *, x264_param_t * ); -/* x264_encoder_parameters: - * copies the current internal set of parameters to the pointer provided - * by the caller. useful when the calling application needs to know - * how x264_encoder_open has changed the parameters, or the current state - * of the encoder after multiple x264_encoder_reconfig calls. - * note that the data accessible through pointers in the returned param struct - * (e.g. filenames) should not be modified by the calling application. */ -X264_API void x264_encoder_parameters( x264_t *, x264_param_t * ); -/* x264_encoder_headers: - * return the SPS and PPS that will be used for the whole stream. - * *pi_nal is the number of NAL units outputted in pp_nal. - * returns the number of bytes in the returned NALs. - * returns negative on error. - * the payloads of all output NALs are guaranteed to be sequential in memory. */ -X264_API int x264_encoder_headers( x264_t *, x264_nal_t **pp_nal, int *pi_nal ); -/* x264_encoder_encode: - * encode one picture. - * *pi_nal is the number of NAL units outputted in pp_nal. - * returns the number of bytes in the returned NALs. - * returns negative on error and zero if no NAL units returned. - * the payloads of all output NALs are guaranteed to be sequential in memory. */ -X264_API int x264_encoder_encode( x264_t *, x264_nal_t **pp_nal, int *pi_nal, x264_picture_t *pic_in, x264_picture_t *pic_out ); -/* x264_encoder_close: - * close an encoder handler */ -X264_API void x264_encoder_close( x264_t * ); -/* x264_encoder_delayed_frames: - * return the number of currently delayed (buffered) frames - * this should be used at the end of the stream, to know when you have all the encoded frames. */ -X264_API int x264_encoder_delayed_frames( x264_t * ); -/* x264_encoder_maximum_delayed_frames( x264_t * ): - * return the maximum number of delayed (buffered) frames that can occur with the current - * parameters. */ -X264_API int x264_encoder_maximum_delayed_frames( x264_t * ); -/* x264_encoder_intra_refresh: - * If an intra refresh is not in progress, begin one with the next P-frame. - * If an intra refresh is in progress, begin one as soon as the current one finishes. - * Requires that b_intra_refresh be set. - * - * Useful for interactive streaming where the client can tell the server that packet loss has - * occurred. In this case, keyint can be set to an extremely high value so that intra refreshes - * only occur when calling x264_encoder_intra_refresh. - * - * In multi-pass encoding, if x264_encoder_intra_refresh is called differently in each pass, - * behavior is undefined. - * - * Should not be called during an x264_encoder_encode. */ -X264_API void x264_encoder_intra_refresh( x264_t * ); -/* x264_encoder_invalidate_reference: - * An interactive error resilience tool, designed for use in a low-latency one-encoder-few-clients - * system. When the client has packet loss or otherwise incorrectly decodes a frame, the encoder - * can be told with this command to "forget" the frame and all frames that depend on it, referencing - * only frames that occurred before the loss. This will force a keyframe if no frames are left to - * reference after the aforementioned "forgetting". - * - * It is strongly recommended to use a large i_dpb_size in this case, which allows the encoder to - * keep around extra, older frames to fall back on in case more recent frames are all invalidated. - * Unlike increasing i_frame_reference, this does not increase the number of frames used for motion - * estimation and thus has no speed impact. It is also recommended to set a very large keyframe - * interval, so that keyframes are not used except as necessary for error recovery. - * - * x264_encoder_invalidate_reference is not currently compatible with the use of B-frames or intra - * refresh. - * - * In multi-pass encoding, if x264_encoder_invalidate_reference is called differently in each pass, - * behavior is undefined. - * - * Should not be called during an x264_encoder_encode, but multiple calls can be made simultaneously. - * - * Returns 0 on success, negative on failure. */ -X264_API int x264_encoder_invalidate_reference( x264_t *, int64_t pts ); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/x264_config.h b/prebuilts/x86_64/include/x264_config.h deleted file mode 100644 index 4b4b60e..0000000 --- a/prebuilts/x86_64/include/x264_config.h +++ /dev/null @@ -1,8 +0,0 @@ -#define X264_GPL 1 -#define X264_INTERLACED 1 -#define X264_BIT_DEPTH 0 -#define X264_CHROMA_FORMAT 0 -#define X264_REV 3094 -#define X264_REV_DIFF 0 -#define X264_VERSION " r3094 bfc87b7" -#define X264_POINTVER "0.164.3094 bfc87b7" diff --git a/prebuilts/x86_64/include/xf86drm.h b/prebuilts/x86_64/include/xf86drm.h deleted file mode 100644 index 1631396..0000000 --- a/prebuilts/x86_64/include/xf86drm.h +++ /dev/null @@ -1,966 +0,0 @@ -/** - * \file xf86drm.h - * OS-independent header for DRM user-level library interface. - * - * \author Rickard E. (Rik) Faith - */ - -/* - * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas. - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - */ - -#ifndef _XF86DRM_H_ -#define _XF86DRM_H_ - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef DRM_MAX_MINOR -#define DRM_MAX_MINOR 16 -#endif - -#if defined(__linux__) - -#define DRM_IOCTL_NR(n) _IOC_NR(n) -#define DRM_IOC_VOID _IOC_NONE -#define DRM_IOC_READ _IOC_READ -#define DRM_IOC_WRITE _IOC_WRITE -#define DRM_IOC_READWRITE _IOC_READ|_IOC_WRITE -#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) - -#else /* One of the *BSDs */ - -#include -#define DRM_IOCTL_NR(n) ((n) & 0xff) -#define DRM_IOC_VOID IOC_VOID -#define DRM_IOC_READ IOC_OUT -#define DRM_IOC_WRITE IOC_IN -#define DRM_IOC_READWRITE IOC_INOUT -#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) - -#endif - - /* Defaults, if nothing set in xf86config */ -#define DRM_DEV_UID 0 -#define DRM_DEV_GID 0 -/* Default /dev/dri directory permissions 0755 */ -#define DRM_DEV_DIRMODE \ - (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH) -#define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) - -#ifdef __OpenBSD__ -#define DRM_DIR_NAME "/dev" -#define DRM_PRIMARY_MINOR_NAME "drm" -#define DRM_CONTROL_MINOR_NAME "drmC" -#define DRM_RENDER_MINOR_NAME "drmR" -#else -#define DRM_DIR_NAME "/dev/dri" -#define DRM_PRIMARY_MINOR_NAME "card" -#define DRM_CONTROL_MINOR_NAME "controlD" -#define DRM_RENDER_MINOR_NAME "renderD" -#define DRM_PROC_NAME "/proc/dri/" /* For backward Linux compatibility */ -#endif - -#define DRM_DEV_NAME "%s/" DRM_PRIMARY_MINOR_NAME "%d" -#define DRM_CONTROL_DEV_NAME "%s/" DRM_CONTROL_MINOR_NAME "%d" -#define DRM_RENDER_DEV_NAME "%s/" DRM_RENDER_MINOR_NAME "%d" - -#define DRM_NODE_NAME_MAX \ - (sizeof(DRM_DIR_NAME) + 1 /* slash */ \ - + MAX3(sizeof(DRM_PRIMARY_MINOR_NAME), \ - sizeof(DRM_CONTROL_MINOR_NAME), \ - sizeof(DRM_RENDER_MINOR_NAME)) \ - + sizeof("144") /* highest possible node number */ \ - + 1) /* NULL-terminator */ - -#define DRM_ERR_NO_DEVICE (-1001) -#define DRM_ERR_NO_ACCESS (-1002) -#define DRM_ERR_NOT_ROOT (-1003) -#define DRM_ERR_INVALID (-1004) -#define DRM_ERR_NO_FD (-1005) - -#define DRM_AGP_NO_HANDLE 0 - -typedef unsigned int drmSize, *drmSizePtr; /**< For mapped regions */ -typedef void *drmAddress, **drmAddressPtr; /**< For mapped regions */ - -#if (__GNUC__ >= 3) -#define DRM_PRINTFLIKE(f, a) __attribute__ ((format(__printf__, f, a))) -#else -#define DRM_PRINTFLIKE(f, a) -#endif - -typedef struct _drmServerInfo { - int (*debug_print)(const char *format, va_list ap) DRM_PRINTFLIKE(1,0); - int (*load_module)(const char *name); - void (*get_perms)(gid_t *, mode_t *); -} drmServerInfo, *drmServerInfoPtr; - -typedef struct drmHashEntry { - int fd; - void (*f)(int, void *, void *); - void *tagTable; -} drmHashEntry; - -extern int drmIoctl(int fd, unsigned long request, void *arg); -extern void *drmGetHashTable(void); -extern drmHashEntry *drmGetEntry(int fd); - -/** - * Driver version information. - * - * \sa drmGetVersion() and drmSetVersion(). - */ -typedef struct _drmVersion { - int version_major; /**< Major version */ - int version_minor; /**< Minor version */ - int version_patchlevel; /**< Patch level */ - int name_len; /**< Length of name buffer */ - char *name; /**< Name of driver */ - int date_len; /**< Length of date buffer */ - char *date; /**< User-space buffer to hold date */ - int desc_len; /**< Length of desc buffer */ - char *desc; /**< User-space buffer to hold desc */ -} drmVersion, *drmVersionPtr; - -typedef struct _drmStats { - unsigned long count; /**< Number of data */ - struct { - unsigned long value; /**< Value from kernel */ - const char *long_format; /**< Suggested format for long_name */ - const char *long_name; /**< Long name for value */ - const char *rate_format; /**< Suggested format for rate_name */ - const char *rate_name; /**< Short name for value per second */ - int isvalue; /**< True if value (vs. counter) */ - const char *mult_names; /**< Multiplier names (e.g., "KGM") */ - int mult; /**< Multiplier value (e.g., 1024) */ - int verbose; /**< Suggest only in verbose output */ - } data[15]; -} drmStatsT; - - - /* All of these enums *MUST* match with the - kernel implementation -- so do *NOT* - change them! (The drmlib implementation - will just copy the flags instead of - translating them.) */ -typedef enum { - DRM_FRAME_BUFFER = 0, /**< WC, no caching, no core dump */ - DRM_REGISTERS = 1, /**< no caching, no core dump */ - DRM_SHM = 2, /**< shared, cached */ - DRM_AGP = 3, /**< AGP/GART */ - DRM_SCATTER_GATHER = 4, /**< PCI scatter/gather */ - DRM_CONSISTENT = 5 /**< PCI consistent */ -} drmMapType; - -typedef enum { - DRM_RESTRICTED = 0x0001, /**< Cannot be mapped to client-virtual */ - DRM_READ_ONLY = 0x0002, /**< Read-only in client-virtual */ - DRM_LOCKED = 0x0004, /**< Physical pages locked */ - DRM_KERNEL = 0x0008, /**< Kernel requires access */ - DRM_WRITE_COMBINING = 0x0010, /**< Use write-combining, if available */ - DRM_CONTAINS_LOCK = 0x0020, /**< SHM page that contains lock */ - DRM_REMOVABLE = 0x0040 /**< Removable mapping */ -} drmMapFlags; - -/** - * \warning These values *MUST* match drm.h - */ -typedef enum { - /** \name Flags for DMA buffer dispatch */ - /*@{*/ - DRM_DMA_BLOCK = 0x01, /**< - * Block until buffer dispatched. - * - * \note the buffer may not yet have been - * processed by the hardware -- getting a - * hardware lock with the hardware quiescent - * will ensure that the buffer has been - * processed. - */ - DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */ - DRM_DMA_PRIORITY = 0x04, /**< High priority dispatch */ - /*@}*/ - - /** \name Flags for DMA buffer request */ - /*@{*/ - DRM_DMA_WAIT = 0x10, /**< Wait for free buffers */ - DRM_DMA_SMALLER_OK = 0x20, /**< Smaller-than-requested buffers OK */ - DRM_DMA_LARGER_OK = 0x40 /**< Larger-than-requested buffers OK */ - /*@}*/ -} drmDMAFlags; - -typedef enum { - DRM_PAGE_ALIGN = 0x01, - DRM_AGP_BUFFER = 0x02, - DRM_SG_BUFFER = 0x04, - DRM_FB_BUFFER = 0x08, - DRM_PCI_BUFFER_RO = 0x10 -} drmBufDescFlags; - -typedef enum { - DRM_LOCK_READY = 0x01, /**< Wait until hardware is ready for DMA */ - DRM_LOCK_QUIESCENT = 0x02, /**< Wait until hardware quiescent */ - DRM_LOCK_FLUSH = 0x04, /**< Flush this context's DMA queue first */ - DRM_LOCK_FLUSH_ALL = 0x08, /**< Flush all DMA queues first */ - /* These *HALT* flags aren't supported yet - -- they will be used to support the - full-screen DGA-like mode. */ - DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */ - DRM_HALT_CUR_QUEUES = 0x20 /**< Halt all current queues */ -} drmLockFlags; - -typedef enum { - DRM_CONTEXT_PRESERVED = 0x01, /**< This context is preserved and - never swapped. */ - DRM_CONTEXT_2DONLY = 0x02 /**< This context is for 2D rendering only. */ -} drm_context_tFlags, *drm_context_tFlagsPtr; - -typedef struct _drmBufDesc { - int count; /**< Number of buffers of this size */ - int size; /**< Size in bytes */ - int low_mark; /**< Low water mark */ - int high_mark; /**< High water mark */ -} drmBufDesc, *drmBufDescPtr; - -typedef struct _drmBufInfo { - int count; /**< Number of buffers described in list */ - drmBufDescPtr list; /**< List of buffer descriptions */ -} drmBufInfo, *drmBufInfoPtr; - -typedef struct _drmBuf { - int idx; /**< Index into the master buffer list */ - int total; /**< Buffer size */ - int used; /**< Amount of buffer in use (for DMA) */ - drmAddress address; /**< Address */ -} drmBuf, *drmBufPtr; - -/** - * Buffer mapping information. - * - * Used by drmMapBufs() and drmUnmapBufs() to store information about the - * mapped buffers. - */ -typedef struct _drmBufMap { - int count; /**< Number of buffers mapped */ - drmBufPtr list; /**< Buffers */ -} drmBufMap, *drmBufMapPtr; - -typedef struct _drmLock { - volatile unsigned int lock; - char padding[60]; - /* This is big enough for most current (and future?) architectures: - DEC Alpha: 32 bytes - Intel Merced: ? - Intel P5/PPro/PII/PIII: 32 bytes - Intel StrongARM: 32 bytes - Intel i386/i486: 16 bytes - MIPS: 32 bytes (?) - Motorola 68k: 16 bytes - Motorola PowerPC: 32 bytes - Sun SPARC: 32 bytes - */ -} drmLock, *drmLockPtr; - -/** - * Indices here refer to the offset into - * list in drmBufInfo - */ -typedef struct _drmDMAReq { - drm_context_t context; /**< Context handle */ - int send_count; /**< Number of buffers to send */ - int *send_list; /**< List of handles to buffers */ - int *send_sizes; /**< Lengths of data to send, in bytes */ - drmDMAFlags flags; /**< Flags */ - int request_count; /**< Number of buffers requested */ - int request_size; /**< Desired size of buffers requested */ - int *request_list; /**< Buffer information */ - int *request_sizes; /**< Minimum acceptable sizes */ - int granted_count; /**< Number of buffers granted at this size */ -} drmDMAReq, *drmDMAReqPtr; - -typedef struct _drmRegion { - drm_handle_t handle; - unsigned int offset; - drmSize size; - drmAddress map; -} drmRegion, *drmRegionPtr; - -typedef struct _drmTextureRegion { - unsigned char next; - unsigned char prev; - unsigned char in_use; - unsigned char padding; /**< Explicitly pad this out */ - unsigned int age; -} drmTextureRegion, *drmTextureRegionPtr; - - -typedef enum { - DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */ - DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */ - /* bits 1-6 are reserved for high crtcs */ - DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e, - DRM_VBLANK_EVENT = 0x4000000, /**< Send event instead of blocking */ - DRM_VBLANK_FLIP = 0x8000000, /**< Scheduled buffer swap should flip */ - DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */ - DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */ - DRM_VBLANK_SIGNAL = 0x40000000 /* Send signal instead of blocking */ -} drmVBlankSeqType; -#define DRM_VBLANK_HIGH_CRTC_SHIFT 1 - -typedef struct _drmVBlankReq { - drmVBlankSeqType type; - unsigned int sequence; - unsigned long signal; -} drmVBlankReq, *drmVBlankReqPtr; - -typedef struct _drmVBlankReply { - drmVBlankSeqType type; - unsigned int sequence; - long tval_sec; - long tval_usec; -} drmVBlankReply, *drmVBlankReplyPtr; - -typedef union _drmVBlank { - drmVBlankReq request; - drmVBlankReply reply; -} drmVBlank, *drmVBlankPtr; - -typedef struct _drmSetVersion { - int drm_di_major; - int drm_di_minor; - int drm_dd_major; - int drm_dd_minor; -} drmSetVersion, *drmSetVersionPtr; - -#define __drm_dummy_lock(lock) (*(__volatile__ unsigned int *)lock) - -#define DRM_LOCK_HELD 0x80000000U /**< Hardware lock is held */ -#define DRM_LOCK_CONT 0x40000000U /**< Hardware lock is contended */ - -#if defined(__GNUC__) && (__GNUC__ >= 2) -# if defined(__i386) || defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__) - /* Reflect changes here to drmP.h */ -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - int __dummy; /* Can't mark eax as clobbered */ \ - __asm__ __volatile__( \ - "lock ; cmpxchg %4,%1\n\t" \ - "setnz %0" \ - : "=d" (__ret), \ - "=m" (__drm_dummy_lock(lock)), \ - "=a" (__dummy) \ - : "2" (old), \ - "r" (new)); \ - } while (0) - -#elif defined(__alpha__) - -#define DRM_CAS(lock, old, new, ret) \ - do { \ - int tmp, old32; \ - __asm__ __volatile__( \ - " addl $31, %5, %3\n" \ - "1: ldl_l %0, %2\n" \ - " cmpeq %0, %3, %1\n" \ - " beq %1, 2f\n" \ - " mov %4, %0\n" \ - " stl_c %0, %2\n" \ - " beq %0, 3f\n" \ - " mb\n" \ - "2: cmpeq %1, 0, %1\n" \ - ".subsection 2\n" \ - "3: br 1b\n" \ - ".previous" \ - : "=&r"(tmp), "=&r"(ret), \ - "=m"(__drm_dummy_lock(lock)), \ - "=&r"(old32) \ - : "r"(new), "r"(old) \ - : "memory"); \ - } while (0) - -#elif defined(__sparc__) - -#define DRM_CAS(lock,old,new,__ret) \ -do { register unsigned int __old __asm("o0"); \ - register unsigned int __new __asm("o1"); \ - register volatile unsigned int *__lock __asm("o2"); \ - __old = old; \ - __new = new; \ - __lock = (volatile unsigned int *)lock; \ - __asm__ __volatile__( \ - /*"cas [%2], %3, %0"*/ \ - ".word 0xd3e29008\n\t" \ - /*"membar #StoreStore | #StoreLoad"*/ \ - ".word 0x8143e00a" \ - : "=&r" (__new) \ - : "0" (__new), \ - "r" (__lock), \ - "r" (__old) \ - : "memory"); \ - __ret = (__new != __old); \ -} while(0) - -#elif defined(__ia64__) - -#ifdef __INTEL_COMPILER -/* this currently generates bad code (missing stop bits)... */ -#include - -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - unsigned long __result, __old = (old) & 0xffffffff; \ - __mf(); \ - __result = _InterlockedCompareExchange_acq(&__drm_dummy_lock(lock), (new), __old);\ - __ret = (__result) != (__old); \ -/* __ret = (__sync_val_compare_and_swap(&__drm_dummy_lock(lock), \ - (old), (new)) \ - != (old)); */\ - } while (0) - -#else -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - unsigned int __result, __old = (old); \ - __asm__ __volatile__( \ - "mf\n" \ - "mov ar.ccv=%2\n" \ - ";;\n" \ - "cmpxchg4.acq %0=%1,%3,ar.ccv" \ - : "=r" (__result), "=m" (__drm_dummy_lock(lock)) \ - : "r" ((unsigned long)__old), "r" (new) \ - : "memory"); \ - __ret = (__result) != (__old); \ - } while (0) - -#endif - -#elif defined(__powerpc__) - -#define DRM_CAS(lock,old,new,__ret) \ - do { \ - __asm__ __volatile__( \ - "sync;" \ - "0: lwarx %0,0,%1;" \ - " xor. %0,%3,%0;" \ - " bne 1f;" \ - " stwcx. %2,0,%1;" \ - " bne- 0b;" \ - "1: " \ - "sync;" \ - : "=&r"(__ret) \ - : "r"(lock), "r"(new), "r"(old) \ - : "cr0", "memory"); \ - } while (0) - -# elif defined (__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ - || defined (__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \ - || defined (__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) \ - || defined (__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ - || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ - || defined(__ARM_ARCH_7EM__) - /* excluding ARMv4/ARMv5 and lower (lacking ldrex/strex support) */ - #undef DRM_DEV_MODE - #define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) - - #define DRM_CAS(lock,old,new,__ret) \ - do { \ - __asm__ __volatile__ ( \ - "1: ldrex %0, [%1]\n" \ - " teq %0, %2\n" \ - " ite eq\n" \ - " strexeq %0, %3, [%1]\n" \ - " movne %0, #1\n" \ - : "=&r" (__ret) \ - : "r" (lock), "r" (old), "r" (new) \ - : "cc","memory"); \ - } while (0) - -#endif /* architecture */ -#endif /* __GNUC__ >= 2 */ - -#ifndef DRM_CAS -#define DRM_CAS(lock,old,new,ret) do { ret=1; } while (0) /* FAST LOCK FAILS */ -#endif - -#if defined(__alpha__) -#define DRM_CAS_RESULT(_result) long _result -#elif defined(__powerpc__) -#define DRM_CAS_RESULT(_result) int _result -#else -#define DRM_CAS_RESULT(_result) char _result -#endif - -#define DRM_LIGHT_LOCK(fd,lock,context) \ - do { \ - DRM_CAS_RESULT(__ret); \ - DRM_CAS(lock,context,DRM_LOCK_HELD|context,__ret); \ - if (__ret) drmGetLock(fd,context,0); \ - } while(0) - - /* This one counts fast locks -- for - benchmarking only. */ -#define DRM_LIGHT_LOCK_COUNT(fd,lock,context,count) \ - do { \ - DRM_CAS_RESULT(__ret); \ - DRM_CAS(lock,context,DRM_LOCK_HELD|context,__ret); \ - if (__ret) drmGetLock(fd,context,0); \ - else ++count; \ - } while(0) - -#define DRM_LOCK(fd,lock,context,flags) \ - do { \ - if (flags) drmGetLock(fd,context,flags); \ - else DRM_LIGHT_LOCK(fd,lock,context); \ - } while(0) - -#define DRM_UNLOCK(fd,lock,context) \ - do { \ - DRM_CAS_RESULT(__ret); \ - DRM_CAS(lock,DRM_LOCK_HELD|context,context,__ret); \ - if (__ret) drmUnlock(fd,context); \ - } while(0) - - /* Simple spin locks */ -#define DRM_SPINLOCK(spin,val) \ - do { \ - DRM_CAS_RESULT(__ret); \ - do { \ - DRM_CAS(spin,0,val,__ret); \ - if (__ret) while ((spin)->lock); \ - } while (__ret); \ - } while(0) - -#define DRM_SPINLOCK_TAKE(spin,val) \ - do { \ - DRM_CAS_RESULT(__ret); \ - int cur; \ - do { \ - cur = (*spin).lock; \ - DRM_CAS(spin,cur,val,__ret); \ - } while (__ret); \ - } while(0) - -#define DRM_SPINLOCK_COUNT(spin,val,count,__ret) \ - do { \ - int __i; \ - __ret = 1; \ - for (__i = 0; __ret && __i < count; __i++) { \ - DRM_CAS(spin,0,val,__ret); \ - if (__ret) for (;__i < count && (spin)->lock; __i++); \ - } \ - } while(0) - -#define DRM_SPINUNLOCK(spin,val) \ - do { \ - DRM_CAS_RESULT(__ret); \ - if ((*spin).lock == val) { /* else server stole lock */ \ - do { \ - DRM_CAS(spin,val,0,__ret); \ - } while (__ret); \ - } \ - } while(0) - - - -/* General user-level programmer's API: unprivileged */ -extern int drmAvailable(void); -extern int drmOpen(const char *name, const char *busid); - -#define DRM_NODE_PRIMARY 0 -#define DRM_NODE_CONTROL 1 -#define DRM_NODE_RENDER 2 -#define DRM_NODE_MAX 3 - -extern int drmOpenWithType(const char *name, const char *busid, - int type); - -extern int drmOpenControl(int minor); -extern int drmOpenRender(int minor); -extern int drmClose(int fd); -extern drmVersionPtr drmGetVersion(int fd); -extern drmVersionPtr drmGetLibVersion(int fd); -extern int drmGetCap(int fd, uint64_t capability, uint64_t *value); -extern void drmFreeVersion(drmVersionPtr); -extern int drmGetMagic(int fd, drm_magic_t * magic); -extern char *drmGetBusid(int fd); -extern int drmGetInterruptFromBusID(int fd, int busnum, int devnum, - int funcnum); -extern int drmGetMap(int fd, int idx, drm_handle_t *offset, - drmSize *size, drmMapType *type, - drmMapFlags *flags, drm_handle_t *handle, - int *mtrr); -extern int drmGetClient(int fd, int idx, int *auth, int *pid, - int *uid, unsigned long *magic, - unsigned long *iocs); -extern int drmGetStats(int fd, drmStatsT *stats); -extern int drmSetInterfaceVersion(int fd, drmSetVersion *version); -extern int drmCommandNone(int fd, unsigned long drmCommandIndex); -extern int drmCommandRead(int fd, unsigned long drmCommandIndex, - void *data, unsigned long size); -extern int drmCommandWrite(int fd, unsigned long drmCommandIndex, - void *data, unsigned long size); -extern int drmCommandWriteRead(int fd, unsigned long drmCommandIndex, - void *data, unsigned long size); - -/* General user-level programmer's API: X server (root) only */ -extern void drmFreeBusid(const char *busid); -extern int drmSetBusid(int fd, const char *busid); -extern int drmAuthMagic(int fd, drm_magic_t magic); -extern int drmAddMap(int fd, - drm_handle_t offset, - drmSize size, - drmMapType type, - drmMapFlags flags, - drm_handle_t * handle); -extern int drmRmMap(int fd, drm_handle_t handle); -extern int drmAddContextPrivateMapping(int fd, drm_context_t ctx_id, - drm_handle_t handle); - -extern int drmAddBufs(int fd, int count, int size, - drmBufDescFlags flags, - int agp_offset); -extern int drmMarkBufs(int fd, double low, double high); -extern int drmCreateContext(int fd, drm_context_t * handle); -extern int drmSetContextFlags(int fd, drm_context_t context, - drm_context_tFlags flags); -extern int drmGetContextFlags(int fd, drm_context_t context, - drm_context_tFlagsPtr flags); -extern int drmAddContextTag(int fd, drm_context_t context, void *tag); -extern int drmDelContextTag(int fd, drm_context_t context); -extern void *drmGetContextTag(int fd, drm_context_t context); -extern drm_context_t * drmGetReservedContextList(int fd, int *count); -extern void drmFreeReservedContextList(drm_context_t *); -extern int drmSwitchToContext(int fd, drm_context_t context); -extern int drmDestroyContext(int fd, drm_context_t handle); -extern int drmCreateDrawable(int fd, drm_drawable_t * handle); -extern int drmDestroyDrawable(int fd, drm_drawable_t handle); -extern int drmUpdateDrawableInfo(int fd, drm_drawable_t handle, - drm_drawable_info_type_t type, - unsigned int num, void *data); -extern int drmCtlInstHandler(int fd, int irq); -extern int drmCtlUninstHandler(int fd); -extern int drmSetClientCap(int fd, uint64_t capability, - uint64_t value); - -extern int drmCrtcGetSequence(int fd, uint32_t crtcId, - uint64_t *sequence, uint64_t *ns); -extern int drmCrtcQueueSequence(int fd, uint32_t crtcId, - uint32_t flags, uint64_t sequence, - uint64_t *sequence_queued, - uint64_t user_data); -/* General user-level programmer's API: authenticated client and/or X */ -extern int drmMap(int fd, - drm_handle_t handle, - drmSize size, - drmAddressPtr address); -extern int drmUnmap(drmAddress address, drmSize size); -extern drmBufInfoPtr drmGetBufInfo(int fd); -extern drmBufMapPtr drmMapBufs(int fd); -extern int drmUnmapBufs(drmBufMapPtr bufs); -extern int drmDMA(int fd, drmDMAReqPtr request); -extern int drmFreeBufs(int fd, int count, int *list); -extern int drmGetLock(int fd, - drm_context_t context, - drmLockFlags flags); -extern int drmUnlock(int fd, drm_context_t context); -extern int drmFinish(int fd, int context, drmLockFlags flags); -extern int drmGetContextPrivateMapping(int fd, drm_context_t ctx_id, - drm_handle_t * handle); - -/* AGP/GART support: X server (root) only */ -extern int drmAgpAcquire(int fd); -extern int drmAgpRelease(int fd); -extern int drmAgpEnable(int fd, unsigned long mode); -extern int drmAgpAlloc(int fd, unsigned long size, - unsigned long type, unsigned long *address, - drm_handle_t *handle); -extern int drmAgpFree(int fd, drm_handle_t handle); -extern int drmAgpBind(int fd, drm_handle_t handle, - unsigned long offset); -extern int drmAgpUnbind(int fd, drm_handle_t handle); - -/* AGP/GART info: authenticated client and/or X */ -extern int drmAgpVersionMajor(int fd); -extern int drmAgpVersionMinor(int fd); -extern unsigned long drmAgpGetMode(int fd); -extern unsigned long drmAgpBase(int fd); /* Physical location */ -extern unsigned long drmAgpSize(int fd); /* Bytes */ -extern unsigned long drmAgpMemoryUsed(int fd); -extern unsigned long drmAgpMemoryAvail(int fd); -extern unsigned int drmAgpVendorId(int fd); -extern unsigned int drmAgpDeviceId(int fd); - -/* PCI scatter/gather support: X server (root) only */ -extern int drmScatterGatherAlloc(int fd, unsigned long size, - drm_handle_t *handle); -extern int drmScatterGatherFree(int fd, drm_handle_t handle); - -extern int drmWaitVBlank(int fd, drmVBlankPtr vbl); - -/* Support routines */ -extern void drmSetServerInfo(drmServerInfoPtr info); -extern int drmError(int err, const char *label); -extern void *drmMalloc(int size); -extern void drmFree(void *pt); - -/* Hash table routines */ -extern void *drmHashCreate(void); -extern int drmHashDestroy(void *t); -extern int drmHashLookup(void *t, unsigned long key, void **value); -extern int drmHashInsert(void *t, unsigned long key, void *value); -extern int drmHashDelete(void *t, unsigned long key); -extern int drmHashFirst(void *t, unsigned long *key, void **value); -extern int drmHashNext(void *t, unsigned long *key, void **value); - -/* PRNG routines */ -extern void *drmRandomCreate(unsigned long seed); -extern int drmRandomDestroy(void *state); -extern unsigned long drmRandom(void *state); -extern double drmRandomDouble(void *state); - -/* Skip list routines */ - -extern void *drmSLCreate(void); -extern int drmSLDestroy(void *l); -extern int drmSLLookup(void *l, unsigned long key, void **value); -extern int drmSLInsert(void *l, unsigned long key, void *value); -extern int drmSLDelete(void *l, unsigned long key); -extern int drmSLNext(void *l, unsigned long *key, void **value); -extern int drmSLFirst(void *l, unsigned long *key, void **value); -extern void drmSLDump(void *l); -extern int drmSLLookupNeighbors(void *l, unsigned long key, - unsigned long *prev_key, void **prev_value, - unsigned long *next_key, void **next_value); - -extern int drmOpenOnce(void *unused, const char *BusID, int *newlyopened); -extern int drmOpenOnceWithType(const char *BusID, int *newlyopened, int type); -extern void drmCloseOnce(int fd); -extern void drmMsg(const char *format, ...) DRM_PRINTFLIKE(1, 2); - -extern int drmSetMaster(int fd); -extern int drmDropMaster(int fd); -extern int drmIsMaster(int fd); - -#define DRM_EVENT_CONTEXT_VERSION 4 - -typedef struct _drmEventContext { - - /* This struct is versioned so we can add more pointers if we - * add more events. */ - int version; - - void (*vblank_handler)(int fd, - unsigned int sequence, - unsigned int tv_sec, - unsigned int tv_usec, - void *user_data); - - void (*page_flip_handler)(int fd, - unsigned int sequence, - unsigned int tv_sec, - unsigned int tv_usec, - void *user_data); - - void (*page_flip_handler2)(int fd, - unsigned int sequence, - unsigned int tv_sec, - unsigned int tv_usec, - unsigned int crtc_id, - void *user_data); - - void (*sequence_handler)(int fd, - uint64_t sequence, - uint64_t ns, - uint64_t user_data); -} drmEventContext, *drmEventContextPtr; - -extern int drmHandleEvent(int fd, drmEventContextPtr evctx); - -extern char *drmGetDeviceNameFromFd(int fd); - -/* Improved version of drmGetDeviceNameFromFd which attributes for any type of - * device/node - card, control or renderD. - */ -extern char *drmGetDeviceNameFromFd2(int fd); -extern int drmGetNodeTypeFromFd(int fd); - -/* Convert between GEM handles and DMA-BUF file descriptors. - * - * Warning: since GEM handles are not reference-counted and are unique per - * DRM file description, the caller is expected to perform its own reference - * counting. drmPrimeFDToHandle is guaranteed to return the same handle for - * different FDs if they reference the same underlying buffer object. This - * could even be a buffer object originally created on the same DRM FD. - * - * When sharing a DRM FD with an API such as EGL or GBM, the caller must not - * use drmPrimeHandleToFD nor drmPrimeFDToHandle. A single user-space - * reference-counting implementation is necessary to avoid double-closing GEM - * handles. - * - * Two processes can't share the same DRM FD and both use it to create or - * import GEM handles, even when using a single user-space reference-counting - * implementation like GBM, because GBM doesn't share its state between - * processes. - */ -extern int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd); -extern int drmPrimeFDToHandle(int fd, int prime_fd, uint32_t *handle); - -extern int drmCloseBufferHandle(int fd, uint32_t handle); - -extern char *drmGetPrimaryDeviceNameFromFd(int fd); -extern char *drmGetRenderDeviceNameFromFd(int fd); - -#define DRM_BUS_PCI 0 -#define DRM_BUS_USB 1 -#define DRM_BUS_PLATFORM 2 -#define DRM_BUS_HOST1X 3 - -typedef struct _drmPciBusInfo { - uint16_t domain; - uint8_t bus; - uint8_t dev; - uint8_t func; -} drmPciBusInfo, *drmPciBusInfoPtr; - -typedef struct _drmPciDeviceInfo { - uint16_t vendor_id; - uint16_t device_id; - uint16_t subvendor_id; - uint16_t subdevice_id; - uint8_t revision_id; -} drmPciDeviceInfo, *drmPciDeviceInfoPtr; - -typedef struct _drmUsbBusInfo { - uint8_t bus; - uint8_t dev; -} drmUsbBusInfo, *drmUsbBusInfoPtr; - -typedef struct _drmUsbDeviceInfo { - uint16_t vendor; - uint16_t product; -} drmUsbDeviceInfo, *drmUsbDeviceInfoPtr; - -#define DRM_PLATFORM_DEVICE_NAME_LEN 512 - -typedef struct _drmPlatformBusInfo { - char fullname[DRM_PLATFORM_DEVICE_NAME_LEN]; -} drmPlatformBusInfo, *drmPlatformBusInfoPtr; - -typedef struct _drmPlatformDeviceInfo { - char **compatible; /* NULL terminated list of compatible strings */ -} drmPlatformDeviceInfo, *drmPlatformDeviceInfoPtr; - -#define DRM_HOST1X_DEVICE_NAME_LEN 512 - -typedef struct _drmHost1xBusInfo { - char fullname[DRM_HOST1X_DEVICE_NAME_LEN]; -} drmHost1xBusInfo, *drmHost1xBusInfoPtr; - -typedef struct _drmHost1xDeviceInfo { - char **compatible; /* NULL terminated list of compatible strings */ -} drmHost1xDeviceInfo, *drmHost1xDeviceInfoPtr; - -typedef struct _drmDevice { - char **nodes; /* DRM_NODE_MAX sized array */ - int available_nodes; /* DRM_NODE_* bitmask */ - int bustype; - union { - drmPciBusInfoPtr pci; - drmUsbBusInfoPtr usb; - drmPlatformBusInfoPtr platform; - drmHost1xBusInfoPtr host1x; - } businfo; - union { - drmPciDeviceInfoPtr pci; - drmUsbDeviceInfoPtr usb; - drmPlatformDeviceInfoPtr platform; - drmHost1xDeviceInfoPtr host1x; - } deviceinfo; -} drmDevice, *drmDevicePtr; - -extern int drmGetDevice(int fd, drmDevicePtr *device); -extern void drmFreeDevice(drmDevicePtr *device); - -extern int drmGetDevices(drmDevicePtr devices[], int max_devices); -extern void drmFreeDevices(drmDevicePtr devices[], int count); - -#define DRM_DEVICE_GET_PCI_REVISION (1 << 0) -extern int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device); -extern int drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices); - -extern int drmGetDeviceFromDevId(dev_t dev_id, uint32_t flags, drmDevicePtr *device); - -extern int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b); - -extern int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle); -extern int drmSyncobjDestroy(int fd, uint32_t handle); -extern int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd); -extern int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle); - -extern int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd); -extern int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd); -extern int drmSyncobjWait(int fd, uint32_t *handles, unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); -extern int drmSyncobjReset(int fd, const uint32_t *handles, uint32_t handle_count); -extern int drmSyncobjSignal(int fd, const uint32_t *handles, uint32_t handle_count); -extern int drmSyncobjTimelineSignal(int fd, const uint32_t *handles, - uint64_t *points, uint32_t handle_count); -extern int drmSyncobjTimelineWait(int fd, uint32_t *handles, uint64_t *points, - unsigned num_handles, - int64_t timeout_nsec, unsigned flags, - uint32_t *first_signaled); -extern int drmSyncobjQuery(int fd, uint32_t *handles, uint64_t *points, - uint32_t handle_count); -extern int drmSyncobjQuery2(int fd, uint32_t *handles, uint64_t *points, - uint32_t handle_count, uint32_t flags); -extern int drmSyncobjTransfer(int fd, - uint32_t dst_handle, uint64_t dst_point, - uint32_t src_handle, uint64_t src_point, - uint32_t flags); - -extern char * -drmGetFormatModifierVendor(uint64_t modifier); - -extern char * -drmGetFormatModifierName(uint64_t modifier); - -#ifndef fourcc_mod_get_vendor -#define fourcc_mod_get_vendor(modifier) \ - (((modifier) >> 56) & 0xff) -#endif - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/prebuilts/x86_64/include/xf86drmMode.h b/prebuilts/x86_64/include/xf86drmMode.h deleted file mode 100644 index 4617d1e..0000000 --- a/prebuilts/x86_64/include/xf86drmMode.h +++ /dev/null @@ -1,504 +0,0 @@ -/* - * \file xf86drmMode.h - * Header for DRM modesetting interface. - * - * \author Jakob Bornecrantz - * - * \par Acknowledgements: - * Feb 2007, Dave Airlie - */ - -/* - * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas. - * Copyright (c) 2007-2008 Dave Airlie - * Copyright (c) 2007-2008 Jakob Bornecrantz - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - * - */ - -#ifndef _XF86DRMMODE_H_ -#define _XF86DRMMODE_H_ - -#if defined(__cplusplus) -extern "C" { -#endif - -#include -#include -#include -#include -#include - -/* - * This is the interface for modesetting for drm. - * - * It aims to provide a randr1.2 compatible interface for modesettings in the - * kernel, the interface is also meant to be used by libraries like EGL. - * - * More information can be found in randrproto.txt which can be found here: - * http://gitweb.freedesktop.org/?p=xorg/proto/randrproto.git - * - * There are some major differences to be noted. Unlike the randr1.2 proto you - * need to create the memory object of the framebuffer yourself with the ttm - * buffer object interface. This object needs to be pinned. - */ - -/* - * Feature defines - * - * Just because these are defined doesn't mean that the kernel - * can do that feature, its just for new code vs old libdrm. - */ -#define DRM_MODE_FEATURE_KMS 1 -#define DRM_MODE_FEATURE_DIRTYFB 1 - - -typedef struct _drmModeRes { - - int count_fbs; - uint32_t *fbs; - - int count_crtcs; - uint32_t *crtcs; - - int count_connectors; - uint32_t *connectors; - - int count_encoders; - uint32_t *encoders; - - uint32_t min_width, max_width; - uint32_t min_height, max_height; -} drmModeRes, *drmModeResPtr; - -typedef struct _drmModeModeInfo { - uint32_t clock; - uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew; - uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan; - - uint32_t vrefresh; - - uint32_t flags; - uint32_t type; - char name[DRM_DISPLAY_MODE_LEN]; -} drmModeModeInfo, *drmModeModeInfoPtr; - -typedef struct _drmModeFB { - uint32_t fb_id; - uint32_t width, height; - uint32_t pitch; - uint32_t bpp; - uint32_t depth; - /* driver specific handle */ - uint32_t handle; -} drmModeFB, *drmModeFBPtr; - -typedef struct _drmModeFB2 { - uint32_t fb_id; - uint32_t width, height; - uint32_t pixel_format; /* fourcc code from drm_fourcc.h */ - uint64_t modifier; /* applies to all buffers */ - uint32_t flags; - - /* per-plane GEM handle; may be duplicate entries for multiple planes */ - uint32_t handles[4]; - uint32_t pitches[4]; /* bytes */ - uint32_t offsets[4]; /* bytes */ -} drmModeFB2, *drmModeFB2Ptr; - -typedef struct drm_clip_rect drmModeClip, *drmModeClipPtr; - -typedef struct _drmModePropertyBlob { - uint32_t id; - uint32_t length; - void *data; -} drmModePropertyBlobRes, *drmModePropertyBlobPtr; - -typedef struct _drmModeProperty { - uint32_t prop_id; - uint32_t flags; - char name[DRM_PROP_NAME_LEN]; - int count_values; - uint64_t *values; /* store the blob lengths */ - int count_enums; - struct drm_mode_property_enum *enums; - int count_blobs; - uint32_t *blob_ids; /* store the blob IDs */ -} drmModePropertyRes, *drmModePropertyPtr; - -static inline uint32_t drmModeGetPropertyType(const drmModePropertyRes *prop) -{ - return prop->flags & (DRM_MODE_PROP_LEGACY_TYPE | DRM_MODE_PROP_EXTENDED_TYPE); -} - -static inline int drm_property_type_is(const drmModePropertyPtr property, - uint32_t type) -{ - return drmModeGetPropertyType(property) == type; -} - -typedef struct _drmModeCrtc { - uint32_t crtc_id; - uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */ - - uint32_t x, y; /**< Position on the framebuffer */ - uint32_t width, height; - int mode_valid; - drmModeModeInfo mode; - - int gamma_size; /**< Number of gamma stops */ - -} drmModeCrtc, *drmModeCrtcPtr; - -typedef struct _drmModeEncoder { - uint32_t encoder_id; - uint32_t encoder_type; - uint32_t crtc_id; - uint32_t possible_crtcs; - uint32_t possible_clones; -} drmModeEncoder, *drmModeEncoderPtr; - -/** - * Describes the connector status. - * - * DRM_MODE_CONNECTED means that the connector has a sink plugged in. - * DRM_MODE_DISCONNECTED means the contrary. DRM_MODE_UNKNOWNCONNECTION is used - * when it could be either. - * - * User-space should first try to enable DRM_MODE_CONNECTED connectors and - * ignore other connectors. If there are no DRM_MODE_CONNECTED connectors, - * user-space should then try to probe and enable DRM_MODE_UNKNOWNCONNECTION - * connectors. - */ -typedef enum { - DRM_MODE_CONNECTED = 1, - DRM_MODE_DISCONNECTED = 2, - DRM_MODE_UNKNOWNCONNECTION = 3 -} drmModeConnection; - -typedef enum { - DRM_MODE_SUBPIXEL_UNKNOWN = 1, - DRM_MODE_SUBPIXEL_HORIZONTAL_RGB = 2, - DRM_MODE_SUBPIXEL_HORIZONTAL_BGR = 3, - DRM_MODE_SUBPIXEL_VERTICAL_RGB = 4, - DRM_MODE_SUBPIXEL_VERTICAL_BGR = 5, - DRM_MODE_SUBPIXEL_NONE = 6 -} drmModeSubPixel; - -typedef struct _drmModeConnector { - uint32_t connector_id; - uint32_t encoder_id; /**< Encoder currently connected to */ - uint32_t connector_type; - uint32_t connector_type_id; - drmModeConnection connection; - uint32_t mmWidth, mmHeight; /**< HxW in millimeters */ - drmModeSubPixel subpixel; - - int count_modes; - drmModeModeInfoPtr modes; - - int count_props; - uint32_t *props; /**< List of property ids */ - uint64_t *prop_values; /**< List of property values */ - - int count_encoders; - uint32_t *encoders; /**< List of encoder ids */ -} drmModeConnector, *drmModeConnectorPtr; - -#define DRM_PLANE_TYPE_OVERLAY 0 -#define DRM_PLANE_TYPE_PRIMARY 1 -#define DRM_PLANE_TYPE_CURSOR 2 - -typedef struct _drmModeObjectProperties { - uint32_t count_props; - uint32_t *props; - uint64_t *prop_values; -} drmModeObjectProperties, *drmModeObjectPropertiesPtr; - -typedef struct _drmModeFormatModifierIterator { - uint32_t fmt_idx, mod_idx; - uint32_t fmt; - uint64_t mod; -} drmModeFormatModifierIterator; - -typedef struct _drmModePlane { - uint32_t count_formats; - uint32_t *formats; - uint32_t plane_id; - - uint32_t crtc_id; - uint32_t fb_id; - - uint32_t crtc_x, crtc_y; - uint32_t x, y; - - uint32_t possible_crtcs; - uint32_t gamma_size; -} drmModePlane, *drmModePlanePtr; - -typedef struct _drmModePlaneRes { - uint32_t count_planes; - uint32_t *planes; -} drmModePlaneRes, *drmModePlaneResPtr; - -extern void drmModeFreeModeInfo( drmModeModeInfoPtr ptr ); -extern void drmModeFreeResources( drmModeResPtr ptr ); -extern void drmModeFreeFB( drmModeFBPtr ptr ); -extern void drmModeFreeFB2( drmModeFB2Ptr ptr ); -extern void drmModeFreeCrtc( drmModeCrtcPtr ptr ); -extern void drmModeFreeConnector( drmModeConnectorPtr ptr ); -extern void drmModeFreeEncoder( drmModeEncoderPtr ptr ); -extern void drmModeFreePlane( drmModePlanePtr ptr ); -extern void drmModeFreePlaneResources(drmModePlaneResPtr ptr); - -/** - * Check whether the DRM node supports Kernel Mode-Setting. - * - * Returns 1 if suitable for KMS, 0 otherwise. - */ -extern int drmIsKMS(int fd); - -/** - * Retrieves all of the resources associated with a card. - */ -extern drmModeResPtr drmModeGetResources(int fd); - -/* - * FrameBuffer manipulation. - */ - -/** - * Retrieve information about framebuffer bufferId - */ -extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId); -extern drmModeFB2Ptr drmModeGetFB2(int fd, uint32_t bufferId); - -/** - * Creates a new framebuffer with an buffer object as its scanout buffer. - */ -extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth, - uint8_t bpp, uint32_t pitch, uint32_t bo_handle, - uint32_t *buf_id); -/* ...with a specific pixel format */ -extern int drmModeAddFB2(int fd, uint32_t width, uint32_t height, - uint32_t pixel_format, const uint32_t bo_handles[4], - const uint32_t pitches[4], const uint32_t offsets[4], - uint32_t *buf_id, uint32_t flags); - -/* ...with format modifiers */ -int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height, - uint32_t pixel_format, const uint32_t bo_handles[4], - const uint32_t pitches[4], const uint32_t offsets[4], - const uint64_t modifier[4], uint32_t *buf_id, - uint32_t flags); - -/** - * Destroies the given framebuffer. - */ -extern int drmModeRmFB(int fd, uint32_t bufferId); - -/** - * Mark a region of a framebuffer as dirty. - */ -extern int drmModeDirtyFB(int fd, uint32_t bufferId, - drmModeClipPtr clips, uint32_t num_clips); - - -/* - * Crtc functions - */ - -/** - * Retrieve information about the ctrt crtcId - */ -extern drmModeCrtcPtr drmModeGetCrtc(int fd, uint32_t crtcId); - -/** - * Set the mode on a crtc crtcId with the given mode modeId. - */ -int drmModeSetCrtc(int fd, uint32_t crtcId, uint32_t bufferId, - uint32_t x, uint32_t y, uint32_t *connectors, int count, - drmModeModeInfoPtr mode); - -/* - * Cursor functions - */ - -/** - * Set the cursor on crtc - */ -int drmModeSetCursor(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height); - -int drmModeSetCursor2(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height, int32_t hot_x, int32_t hot_y); -/** - * Move the cursor on crtc - */ -int drmModeMoveCursor(int fd, uint32_t crtcId, int x, int y); - -/** - * Encoder functions - */ -drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id); - -/* - * Connector manipulation - */ - -/** - * Retrieve all information about the connector connectorId. This will do a - * forced probe on the connector to retrieve remote information such as EDIDs - * from the display device. - */ -extern drmModeConnectorPtr drmModeGetConnector(int fd, - uint32_t connectorId); - -/** - * Retrieve current information, i.e the currently active mode and encoder, - * about the connector connectorId. This will not do any probing on the - * connector or remote device, and only reports what is currently known. - * For the complete set of modes and encoders associated with the connector - * use drmModeGetConnector() which will do a probe to determine any display - * link changes first. - */ -extern drmModeConnectorPtr drmModeGetConnectorCurrent(int fd, - uint32_t connector_id); - -/** - * Get a bitmask of CRTCs a connector is compatible with. - * - * The bits reference CRTC indices. If the n-th CRTC is compatible with the - * connector, the n-th bit will be set. The indices are taken from the array - * returned by drmModeGetResources(). The indices are different from the object - * IDs. - * - * Zero is returned on error. - */ -extern uint32_t drmModeConnectorGetPossibleCrtcs(int fd, - const drmModeConnector *connector); - -/** - * Attaches the given mode to an connector. - */ -extern int drmModeAttachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info); - -/** - * Detaches a mode from the connector - * must be unused, by the given mode. - */ -extern int drmModeDetachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info); - -extern drmModePropertyPtr drmModeGetProperty(int fd, uint32_t propertyId); -extern void drmModeFreeProperty(drmModePropertyPtr ptr); - -extern drmModePropertyBlobPtr drmModeGetPropertyBlob(int fd, uint32_t blob_id); -extern bool drmModeFormatModifierBlobIterNext(const drmModePropertyBlobRes *blob, - drmModeFormatModifierIterator *iter); -extern void drmModeFreePropertyBlob(drmModePropertyBlobPtr ptr); -extern int drmModeConnectorSetProperty(int fd, uint32_t connector_id, uint32_t property_id, - uint64_t value); -extern int drmCheckModesettingSupported(const char *busid); - -extern int drmModeCrtcSetGamma(int fd, uint32_t crtc_id, uint32_t size, - uint16_t *red, uint16_t *green, uint16_t *blue); -extern int drmModeCrtcGetGamma(int fd, uint32_t crtc_id, uint32_t size, - uint16_t *red, uint16_t *green, uint16_t *blue); -extern int drmModePageFlip(int fd, uint32_t crtc_id, uint32_t fb_id, - uint32_t flags, void *user_data); -extern int drmModePageFlipTarget(int fd, uint32_t crtc_id, uint32_t fb_id, - uint32_t flags, void *user_data, - uint32_t target_vblank); - -extern drmModePlaneResPtr drmModeGetPlaneResources(int fd); -extern drmModePlanePtr drmModeGetPlane(int fd, uint32_t plane_id); -extern int drmModeSetPlane(int fd, uint32_t plane_id, uint32_t crtc_id, - uint32_t fb_id, uint32_t flags, - int32_t crtc_x, int32_t crtc_y, - uint32_t crtc_w, uint32_t crtc_h, - uint32_t src_x, uint32_t src_y, - uint32_t src_w, uint32_t src_h); - -extern drmModeObjectPropertiesPtr drmModeObjectGetProperties(int fd, - uint32_t object_id, - uint32_t object_type); -extern void drmModeFreeObjectProperties(drmModeObjectPropertiesPtr ptr); -extern int drmModeObjectSetProperty(int fd, uint32_t object_id, - uint32_t object_type, uint32_t property_id, - uint64_t value); - - -typedef struct _drmModeAtomicReq drmModeAtomicReq, *drmModeAtomicReqPtr; - -extern drmModeAtomicReqPtr drmModeAtomicAlloc(void); -extern drmModeAtomicReqPtr drmModeAtomicDuplicate(const drmModeAtomicReqPtr req); -extern int drmModeAtomicMerge(drmModeAtomicReqPtr base, - const drmModeAtomicReqPtr augment); -extern void drmModeAtomicFree(drmModeAtomicReqPtr req); -extern int drmModeAtomicGetCursor(const drmModeAtomicReqPtr req); -extern void drmModeAtomicSetCursor(drmModeAtomicReqPtr req, int cursor); -extern int drmModeAtomicAddProperty(drmModeAtomicReqPtr req, - uint32_t object_id, - uint32_t property_id, - uint64_t value); -extern int drmModeAtomicCommit(int fd, - const drmModeAtomicReqPtr req, - uint32_t flags, - void *user_data); - -extern int drmModeCreatePropertyBlob(int fd, const void *data, size_t size, - uint32_t *id); -extern int drmModeDestroyPropertyBlob(int fd, uint32_t id); - -/* - * DRM mode lease APIs. These create and manage new drm_masters with - * access to a subset of the available DRM resources - */ - -extern int drmModeCreateLease(int fd, const uint32_t *objects, int num_objects, int flags, uint32_t *lessee_id); - -typedef struct drmModeLesseeList { - uint32_t count; - uint32_t lessees[]; -} drmModeLesseeListRes, *drmModeLesseeListPtr; - -extern drmModeLesseeListPtr drmModeListLessees(int fd); - -typedef struct drmModeObjectList { - uint32_t count; - uint32_t objects[]; -} drmModeObjectListRes, *drmModeObjectListPtr; - -extern drmModeObjectListPtr drmModeGetLease(int fd); - -extern int drmModeRevokeLease(int fd, uint32_t lessee_id); - -/** - * Get a string describing a connector type. - * - * NULL is returned if the connector type is unsupported. Callers should handle - * this gracefully, e.g. by falling back to "Unknown" or printing the raw value. - */ -extern const char * -drmModeGetConnectorTypeName(uint32_t connector_type); - -#if defined(__cplusplus) -} -#endif - -#endif